diff --git a/README.md b/README.md index ae62abc0..113f49dc 100644 --- a/README.md +++ b/README.md @@ -100,8 +100,6 @@ __Planned features and improvements:__ * Add and enable emoji dictionaries by default (if available for language) * Clearer / more intuitive arrangement of settings * Maybe hide some less used settings by default (similar to color customization) -* Make use of the `.com` key in URL fields (currently only available for tablets) - * With language-dependent TLDs * [Bug fixes](https://github.com/Helium314/HeliBoard/issues?q=is%3Aissue+is%3Aopen+label%3Abug) __What will _not_ be added:__ diff --git a/app/build.gradle.kts b/app/build.gradle.kts index 8e021594..27915d04 100755 --- a/app/build.gradle.kts +++ b/app/build.gradle.kts @@ -13,8 +13,8 @@ android { applicationId = "helium314.keyboard" minSdk = 21 targetSdk = 34 - versionCode = 2310 - versionName = "2.3+dev9" + versionCode = 3001 + versionName = "3.0-alpha2" ndk { abiFilters.clear() abiFilters.addAll(listOf("armeabi-v7a", "arm64-v8a", "x86", "x86_64")) @@ -97,7 +97,6 @@ android { dependencies { // androidx implementation("androidx.core:core-ktx:1.13.1") - implementation("androidx.appcompat:appcompat:1.7.0") implementation("androidx.recyclerview:recyclerview:1.3.2") implementation("androidx.autofill:autofill:1.1.0") diff --git a/app/src/main/assets/layouts/functional/functional_keys.json b/app/src/main/assets/layouts/functional/functional_keys.json index 6d28dd24..788e4479 100644 --- a/app/src/main/assets/layouts/functional/functional_keys.json +++ b/app/src/main/assets/layouts/functional/functional_keys.json @@ -15,7 +15,7 @@ { "$": "keyboard_state_selector", "emojiKeyEnabled": { "$": "keyboard_state_selector", "alphabet": { "label": "emoji" }}}, { "$": "keyboard_state_selector", "symbols": { "label": "numpad" }}, { "label": "space" }, - { "label": "period", "labelFlags": 1073741824 }, + { "label": "period" }, { "label": "action", "width": 0.15 } ] ] diff --git a/app/src/main/assets/layouts/main/bengali.txt b/app/src/main/assets/layouts/main/bengali.txt deleted file mode 100644 index ce45e36c..00000000 --- a/app/src/main/assets/layouts/main/bengali.txt +++ /dev/null @@ -1,34 +0,0 @@ -ঔ -ঐ -আ -ঈ -ঊ -ব -হ -গ -দ -জ -ড - -ও -এ -অ -ই -উ -প -র -ক -ত -চ -ট - -ঁ -ঢ -ম -ন -ঞ -ল -ষ -স -য় -। diff --git a/app/src/main/assets/layouts/main/bengali_inscript.json b/app/src/main/assets/layouts/main/bengali_inscript.json new file mode 100644 index 00000000..3e03525e --- /dev/null +++ b/app/src/main/assets/layouts/main/bengali_inscript.json @@ -0,0 +1,142 @@ +[ + [ + { "$": "shift_state_selector", + "manualOrLocked": { "label": "ঔ", "labelFlags": 1073741824 }, + "default": { "label": "ৌ", "popup": { "relevant": [{"label": "ঔ" }]}} + }, + { "$": "shift_state_selector", + "manualOrLocked": { "label": "ঐ", "labelFlags": 1073741824 }, + "default": { "label": "ৈ", "popup": { "relevant": [{"label": "ঐ" }]}} + }, + { "$": "shift_state_selector", + "manualOrLocked": { "label": "আ", "labelFlags": 1073741824 }, + "default": { "label": "া", "popup": { "relevant": [{"label": "আ" }]}} + }, + { "$": "shift_state_selector", + "manualOrLocked": { "label": "ঈ", "labelFlags": 1073741824 }, + "default": { "label": "ী", "popup": { "relevant": [{"label": "ঈ" }]}} + }, + { "$": "shift_state_selector", + "manualOrLocked": { "label": "ঊ", "labelFlags": 1073741824 }, + "default": { "label": "ূ", "popup": { "relevant": [{"label": "ঊ" }]}} + }, + { "$": "shift_state_selector", + "manualOrLocked": { "label": "ভ", "labelFlags": 1073741824 }, + "default": { "label": "ব", "popup": { "relevant": [{"label": "ভ" }]}} + }, + { "$": "shift_state_selector", + "manualOrLocked": { "label": "ঙ", "labelFlags": 1073741824 }, + "default": { "label": "হ", "popup": { "relevant": [{"label": "ঙ" }]}} + }, + { "$": "shift_state_selector", + "manualOrLocked": { "label": "ঘ", "labelFlags": 1073741824 }, + "default": { "label": "গ", "popup": { "relevant": [{"label": "ঘ" }]}} + }, + { "$": "shift_state_selector", + "manualOrLocked": { "label": "ধ", "labelFlags": 1073741824 }, + "default": { "label": "দ", "popup": { "relevant": [{"label": "ধ" }]}} + }, + { "$": "shift_state_selector", + "manualOrLocked": { "label": "ঝ", "labelFlags": 1073741824 }, + "default": { "label": "জ", "popup": { "relevant": [{"label": "ঝ" }]}} + }, + { "$": "shift_state_selector", + "manualOrLocked": { "label": "ঢ", "labelFlags": 1073741824 }, + "default": { "label": "ড", "popup": { "relevant": [{"label": "ঢ" }]}} + } + ], + [ + { "$": "shift_state_selector", + "manualOrLocked": { "label": "ও", "labelFlags": 1073741824 }, + "default": { "label": "ো", "popup": { "relevant": [{"label": "ও" }]}} + }, + { "$": "shift_state_selector", + "manualOrLocked": { "label": "এ", "labelFlags": 1073741824 }, + "default": { "label": "ে", "popup": { "relevant": [{"label": "এ" }]}} + }, + { "$": "shift_state_selector", + "manualOrLocked": { "label": "অ", "labelFlags": 1073741824 }, + "default": { "label": "্", "popup": { "relevant": [{"label": "অ" }]}} + }, + { "$": "shift_state_selector", + "manualOrLocked": { "label": "ই", "labelFlags": 1073741824 }, + "default": { "label": "ি", "popup": { "relevant": [{"label": "ই" }]}} + }, + { "$": "shift_state_selector", + "manualOrLocked": { "label": "উ", "labelFlags": 1073741824 }, + "default": { "label": "ু", "popup": { "relevant": [{"label": "উ" }]}} + }, + { "$": "shift_state_selector", + "manualOrLocked": { "label": "ফ", "labelFlags": 1073741824 }, + "default": { "label": "প", "popup": { "relevant": [{"label": "ফ" }]}} + }, + { "$": "shift_state_selector", + "manualOrLocked": { "label": "ড়", "labelFlags": 1073741824 }, + "default": { "label": "র", "popup": { "main": { "label": "ড়" }, "relevant": [{ "label": "র‍্য" }]}} + }, + { "$": "shift_state_selector", + "manualOrLocked": { "label": "খ", "labelFlags": 1073741824 }, + "default": { "label": "ক", "popup": { "relevant": [{"label": "খ" }]}} + }, + { "$": "shift_state_selector", + "manualOrLocked": { "label": "থ", "labelFlags": 1073741824 }, + "default": { "label": "ত", "popup": { "main": { "label": "থ" }, "relevant": [{ "label": "ৎ" }]}} + }, + { "$": "shift_state_selector", + "manualOrLocked": { "label": "ছ", "labelFlags": 1073741824 }, + "default": { "label": "চ", "popup": { "relevant": [{"label": "ছ" }]}} + }, + { "$": "shift_state_selector", + "manualOrLocked": { "label": "ঠ", "labelFlags": 1073741824 }, + "default": { "label": "ট", "popup": { "relevant": [{"label": "ঠ" }]}} + } + ], + [ + { "$": "shift_state_selector", + "manualOrLocked": { "label": "ঋ", "labelFlags": 1073741824 }, + "default": { "label": "ৃ", "popup": { "relevant": [{"label": "ঋ" }]}} + }, + { "$": "shift_state_selector", + "manualOrLocked": { "label": "ঁ", "labelFlags": 1073741824, "popup": { "relevant": [ + {"label": "!autoColumnOrder!6" }, + { "label": "়" }, + { "label": "ৄ" }, + { "label": "ঽ" }, + { "label": "ৢ" }, + { "label": "ৱ" }, + { "label": "ৣ" }, + { "label": "ৗ" }, + { "label": "ৠ" }, + { "label": "৺" }, + { "label": "ঌ" }, + { "label": "ৰ" }, + { "label": "ৡ" } + ]}}, + "default": { "label": "ং", "popup": { "main": { "label": "ঁ" }, "relevant": [{ "label": "ঃ" }]}} + }, + { "$": "shift_state_selector", + "manualOrLocked": { "label": "ণ", "labelFlags": 1073741824 }, + "default": { "label": "ম", "popup": { "relevant": [{"label": "ণ" }]}} + }, + { "$": "shift_state_selector", + "manualOrLocked": { "label": "ঞ", "labelFlags": 1073741824 }, + "default": { "label": "ন", "popup": { "relevant": [{"label": "ঞ" }]}} + }, + { "$": "shift_state_selector", + "manualOrLocked": { "label": "ঢ়", "labelFlags": 1073741824 }, + "default": { "label": "ব", "popup": { "relevant": [{"label": "ঢ়" }]}} + }, + { "$": "shift_state_selector", + "manualOrLocked": { "label": "ষ", "labelFlags": 1073741824 }, + "default": { "label": "ল", "popup": { "relevant": [{"label": "ষ" }]}} + }, + { "$": "shift_state_selector", + "manualOrLocked": { "label": "শ", "labelFlags": 1073741824 }, + "default": { "label": "স", "popup": { "relevant": [{"label": "শ" }]}} + }, + { "$": "shift_state_selector", + "manualOrLocked": { "label": "য", "labelFlags": 1073741824 }, + "default": { "label": "য়", "popup": { "relevant": [{"label": "য" }]}} + } + ] +] \ No newline at end of file diff --git a/app/src/main/assets/layouts/main/central_kurdish.txt b/app/src/main/assets/layouts/main/central_kurdish.txt new file mode 100644 index 00000000..eec1593e --- /dev/null +++ b/app/src/main/assets/layouts/main/central_kurdish.txt @@ -0,0 +1,31 @@ +ق +و +ە +ر +ت +ی +ێ +ئ +ۆ +پ + +ا +س +ش +د +ف +ھ|ه +ژ +ل +ک +گ + +ز +ع +ح +ج +چ +خ +ب +ن +م diff --git a/app/src/main/assets/layouts/main/russian.txt b/app/src/main/assets/layouts/main/russian.txt index 7ceb2435..7da99f64 100644 --- a/app/src/main/assets/layouts/main/russian.txt +++ b/app/src/main/assets/layouts/main/russian.txt @@ -8,7 +8,7 @@ ш щ з -х +х ъ [ { ф ы @@ -20,7 +20,7 @@ л д ж -э +э э́ ] } я ч diff --git a/app/src/main/assets/layouts/main/russian_extended.txt b/app/src/main/assets/layouts/main/russian_extended.txt new file mode 100644 index 00000000..8b3249fe --- /dev/null +++ b/app/src/main/assets/layouts/main/russian_extended.txt @@ -0,0 +1,34 @@ +й +ц +у +к +е +н +г +ш +щ +з +х [ { +ъ ] } + +ф +ы +в +а +п +р +о +л +д +ж +э э́ + +я +ч +с +м +и +т +ь +б < +ю > diff --git a/app/src/main/assets/layouts/main/ukrainian.txt b/app/src/main/assets/layouts/main/ukrainian.txt index 7e01cde3..ff1ed643 100644 --- a/app/src/main/assets/layouts/main/ukrainian.txt +++ b/app/src/main/assets/layouts/main/ukrainian.txt @@ -8,7 +8,8 @@ ш щ з -х +х [ { +ї ] } ф і @@ -20,7 +21,7 @@ л д ж -є +є ' " я ч @@ -30,4 +31,4 @@ т ь б < -ю > +ю > ґ diff --git a/app/src/main/assets/layouts/main/ukrainian_extended.txt b/app/src/main/assets/layouts/main/ukrainian_extended.txt new file mode 100644 index 00000000..7e37e93c --- /dev/null +++ b/app/src/main/assets/layouts/main/ukrainian_extended.txt @@ -0,0 +1,35 @@ +й +ц +у +к +е +н +г +ш +щ +з +х [ { +ї ] } + +ф +і +в +а +п +р +о +л +д +ж +є ' " +' " + +я +ч +с +м +и +т +ь +б < +ю > ґ diff --git a/app/src/main/assets/locale_key_texts/bn-IN.txt b/app/src/main/assets/locale_key_texts/bn-IN.txt index 36387a9e..f32ed305 100644 --- a/app/src/main/assets/locale_key_texts/bn-IN.txt +++ b/app/src/main/assets/locale_key_texts/bn-IN.txt @@ -1,36 +1,41 @@ [popup_keys] +ৌ ঔ +ৈ ঐ +া আ +ী ঈ +ূ ঊ ব ভ +হ ঙ গ ঘ দ ধ -জ ঝ জ্ঞ -ড ড় -ও ো -এ ে -অ ্ -ই ি -উ ু +জ ঝ +ড ঢ +ো ও +ে এ +্ অ +ি ই +ু উ প ফ -র ৃ ঋ ত্র +র ড় র‍্য ক খ -ত ৎ থ ত্ত +ত থ ৎ চ ছ ট ঠ -ঁ ঃ ং -ঢ ঢ় -ন ণ -ঞ ঙ ঞ্জ -ষ ক্ষ +ৃ ঋ +ং ঁ ঃ +ঁ !autoColumnOrder!6 ় ৄ ঽ ৢ ৱ ৣ ৗ ৠ ৺ ঌ ৰ ৡ +ম ণ +ন ঞ +ব ঢ় +ল ষ স শ য় য -। ॥ -ঔ ৌ -ঐ ৈ -আ া -ঈ ী -ঊ ূ +punctuation !autoColumnOrder!8 \, ॥ ? ! !icon/zwnj_key|‌ !icon/zwj_key|‍ # @ ( ) / ; : - + \% [labels] alphabet: কখগ +symbol: ?১২৩ +period: । [number_row] ১ ২ ৩ ৪ ৫ ৬ ৭ ৮ ৯ ০ diff --git a/app/src/main/assets/locale_key_texts/ckb.txt b/app/src/main/assets/locale_key_texts/ckb.txt new file mode 100644 index 00000000..5e13897b --- /dev/null +++ b/app/src/main/assets/locale_key_texts/ckb.txt @@ -0,0 +1,39 @@ +[popup_keys] +ق ٯ +و وو +ە ة ﻪ ـہ +ر ڕ ڒ ࢪ +ت ط +ی ي ې ۍ +ێ ؽ +ئ ء ﺋ +ۆ ؤ ۏ ۊ ۋ ۉ ۇ +پ ث +ا أ إ آ ٱ +س ص +ش ض +د ۮ ڌ ﮆ +ف ڤ ڡ +ھ ھ +ژ ━|ـ +ل ڵ +ک ك ڪ +گ غ +ز ظ +ع ؏ +ب ى +punctuation !autoColumnOrder!8 \؟ ! ، ٫ ؍ : ؛ ; : | - @ _ # * ٪ & ^ +« „ “ ” +» ‚ ‘ ’ ‹ › + +[labels] +alphabet: ئ‌پ‌گ +symbol: ٣٢١؟ +comma: ، +question: ؟ + +[number_row] +١ ٢ ٣ ٤ ٥ ٦ ٧ ٨ ٩ ٠ + +[tlds] +iq krd diff --git a/app/src/main/assets/locale_key_texts/ru.txt b/app/src/main/assets/locale_key_texts/ru.txt index bbb9a247..59583da4 100644 --- a/app/src/main/assets/locale_key_texts/ru.txt +++ b/app/src/main/assets/locale_key_texts/ru.txt @@ -1,9 +1,19 @@ [popup_keys] -е ё -ь ъ +е ё е́ ѣ +ф ѳ +ы ы́ +а а́ +о о́ +я я́ +и и́ +ь ъ ы +ю ю́ ' ’ ‚ ‘ › ‹ " ” „ “ » « +і ы +є э э́ + [labels] alphabet: АБВ diff --git a/app/src/main/assets/locale_key_texts/uk.txt b/app/src/main/assets/locale_key_texts/uk.txt index 9ee926c9..080bf826 100644 --- a/app/src/main/assets/locale_key_texts/uk.txt +++ b/app/src/main/assets/locale_key_texts/uk.txt @@ -1,9 +1,19 @@ [popup_keys] +е е́ г ґ -ь +ф ѳ і ї -' ’ ‚ ‘ -" ” „ “ +а а́ +о о́ +я я́ +и и́ і ї +г ґ +ю ю́ +' ’ ‚ ‘ › ‹ +" ” „ “ » « + +ы і ї +э є [labels] alphabet: АБВ diff --git a/app/src/main/java/helium314/keyboard/keyboard/Key.java b/app/src/main/java/helium314/keyboard/keyboard/Key.java index 3d091797..c80c1eb3 100644 --- a/app/src/main/java/helium314/keyboard/keyboard/Key.java +++ b/app/src/main/java/helium314/keyboard/keyboard/Key.java @@ -24,6 +24,7 @@ import helium314.keyboard.latin.common.StringUtils; import helium314.keyboard.latin.utils.PopupKeysUtilsKt; import helium314.keyboard.latin.utils.ToolbarKey; import helium314.keyboard.latin.utils.ToolbarUtilsKt; +import kotlin.collections.ArraysKt; import java.util.Arrays; import java.util.Locale; @@ -919,7 +920,7 @@ public class Key implements Comparable { @NonNull final Drawable spacebarBackground, @NonNull final Drawable actionKeyBackground) { final Drawable background; - if (isAccentColored()) { + if (hasActionKeyBackground()) { background = actionKeyBackground; } else if (hasFunctionalBackground()) { background = functionalKeyBackground; @@ -933,17 +934,10 @@ public class Key implements Comparable { return background; } - public final boolean isAccentColored() { - if (hasActionKeyBackground()) return true; - final String iconName = getIconName(); - if (iconName == null) return false; - // todo: other way of identifying the color? - // this should be done differently, as users can set any icon now - // how is the background drawable selected? can we use the same way? - return iconName.equals(KeyboardIconsSet.NAME_NEXT_KEY) - || iconName.equals(KeyboardIconsSet.NAME_PREVIOUS_KEY) - || iconName.equals("clipboard_action_key") - || iconName.equals("emoji_action_key"); + public final boolean hasActionKeyPopups() { + if (!hasActionKeyBackground()) return false; + // only use the special action key popups for action colored keys, and only for icon popups + return ArraysKt.none(getPopupKeys(), (key) -> key.mIconName == null); } public boolean hasFunctionalBackground() { diff --git a/app/src/main/java/helium314/keyboard/keyboard/KeyboardView.java b/app/src/main/java/helium314/keyboard/keyboard/KeyboardView.java index 1c484dfb..2226e360 100644 --- a/app/src/main/java/helium314/keyboard/keyboard/KeyboardView.java +++ b/app/src/main/java/helium314/keyboard/keyboard/KeyboardView.java @@ -610,7 +610,7 @@ public class KeyboardView extends View { } private void setKeyIconColor(Key key, Drawable icon, Keyboard keyboard) { - if (key.isAccentColored()) { + if (key.hasActionKeyBackground()) { mColors.setColor(icon, ColorType.ACTION_KEY_ICON); } else if (key.isShift() && keyboard != null) { if (keyboard.mId.mElementId == KeyboardId.ELEMENT_ALPHABET_MANUAL_SHIFTED diff --git a/app/src/main/java/helium314/keyboard/keyboard/MainKeyboardView.java b/app/src/main/java/helium314/keyboard/keyboard/MainKeyboardView.java index 9239f5ea..d84998e8 100644 --- a/app/src/main/java/helium314/keyboard/keyboard/MainKeyboardView.java +++ b/app/src/main/java/helium314/keyboard/keyboard/MainKeyboardView.java @@ -18,6 +18,7 @@ import android.graphics.Paint; import android.graphics.Paint.Align; import android.graphics.Typeface; import android.util.AttributeSet; +import android.view.ContextThemeWrapper; import android.view.LayoutInflater; import android.view.MotionEvent; import android.view.View; @@ -25,7 +26,6 @@ import android.view.ViewGroup; import androidx.annotation.NonNull; import androidx.annotation.Nullable; -import androidx.appcompat.view.ContextThemeWrapper; import helium314.keyboard.accessibility.AccessibilityUtils; import helium314.keyboard.accessibility.MainKeyboardAccessibilityDelegate; @@ -505,7 +505,7 @@ public final class MainKeyboardView extends KeyboardView implements DrawingProxy mPopupKeysKeyboardCache.put(key, popupKeysKeyboard); } - final View container = key.hasActionKeyBackground() ? mPopupKeysKeyboardForActionContainer + final View container = key.hasActionKeyPopups() ? mPopupKeysKeyboardForActionContainer : mPopupKeysKeyboardContainer; final PopupKeysKeyboardView popupKeysKeyboardView = container.findViewById(R.id.popup_keys_keyboard_view); diff --git a/app/src/main/java/helium314/keyboard/keyboard/PopupKeysKeyboard.java b/app/src/main/java/helium314/keyboard/keyboard/PopupKeysKeyboard.java index 11340437..645e420b 100644 --- a/app/src/main/java/helium314/keyboard/keyboard/PopupKeysKeyboard.java +++ b/app/src/main/java/helium314/keyboard/keyboard/PopupKeysKeyboard.java @@ -328,12 +328,13 @@ public final class PopupKeysKeyboard extends Keyboard { final PopupKeysKeyboardParams params = mParams; final int popupKeyFlags = mParentKey.getPopupKeyLabelFlags(); final PopupKeySpec[] popupKeys = mParentKey.getPopupKeys(); + final int background = mParentKey.hasActionKeyPopups() ? Key.BACKGROUND_TYPE_ACTION : Key.BACKGROUND_TYPE_NORMAL; for (int n = 0; n < popupKeys.length; n++) { final PopupKeySpec popupKeySpec = popupKeys[n]; final int row = n / params.mNumColumns; final int x = params.getX(n, row); final int y = params.getY(row); - final Key key = popupKeySpec.buildKey(x, y, popupKeyFlags, params); + final Key key = popupKeySpec.buildKey(x, y, popupKeyFlags, background, params); params.markAsEdgeKey(key, row); params.onAddKey(key); diff --git a/app/src/main/java/helium314/keyboard/keyboard/internal/KeyPreviewView.java b/app/src/main/java/helium314/keyboard/keyboard/internal/KeyPreviewView.java index c7069ec0..64ef4bfe 100644 --- a/app/src/main/java/helium314/keyboard/keyboard/internal/KeyPreviewView.java +++ b/app/src/main/java/helium314/keyboard/keyboard/internal/KeyPreviewView.java @@ -15,8 +15,7 @@ import android.text.TextUtils; import android.util.AttributeSet; import android.util.TypedValue; import android.view.Gravity; - -import androidx.appcompat.widget.AppCompatTextView; +import android.widget.TextView; import helium314.keyboard.keyboard.Key; import helium314.keyboard.latin.R; @@ -25,10 +24,9 @@ import helium314.keyboard.latin.settings.Settings; import java.util.HashSet; -/** - * The pop up key preview view. - */ -public class KeyPreviewView extends AppCompatTextView { +/** The pop up key preview view. */ +// Android Studio complains about TextView, but we're not using tint or auto-size that should be the relevant differences +public class KeyPreviewView extends TextView { public static final int POSITION_MIDDLE = 0; public static final int POSITION_LEFT = 1; public static final int POSITION_RIGHT = 2; diff --git a/app/src/main/java/helium314/keyboard/keyboard/internal/KeyboardState.java b/app/src/main/java/helium314/keyboard/keyboard/internal/KeyboardState.java index 51dc98b0..07639d3f 100644 --- a/app/src/main/java/helium314/keyboard/keyboard/internal/KeyboardState.java +++ b/app/src/main/java/helium314/keyboard/keyboard/internal/KeyboardState.java @@ -80,6 +80,7 @@ public final class KeyboardState { private static final int SWITCH_STATE_SYMBOL_BEGIN = 1; private static final int SWITCH_STATE_SYMBOL = 2; private static final int SWITCH_STATE_NUMPAD = 3; + private static final int SWITCH_STATE_NUMPAD_BEGIN = 9; private static final int SWITCH_STATE_MOMENTARY_ALPHA_AND_SYMBOL = 4; private static final int SWITCH_STATE_MOMENTARY_SYMBOL_AND_MORE = 5; private static final int SWITCH_STATE_MOMENTARY_ALPHA_SHIFT = 6; @@ -403,7 +404,7 @@ public final class KeyboardState { mMode = MODE_NUMPAD; mRecapitalizeMode = RecapitalizeStatus.NOT_A_RECAPITALIZE_MODE; mSwitchActions.setNumpadKeyboard(); - mSwitchState = withSliding ? SWITCH_STATE_MOMENTARY_TO_NUMPAD : SWITCH_STATE_NUMPAD; + mSwitchState = withSliding ? SWITCH_STATE_MOMENTARY_TO_NUMPAD : SWITCH_STATE_NUMPAD_BEGIN; } public void toggleNumpad(final boolean withSliding, final int autoCapsFlags, final int recapitalizeMode, @@ -789,6 +790,17 @@ public final class KeyboardState { mPrevSymbolsKeyboardWasShifted = false; } break; + case SWITCH_STATE_NUMPAD: + // Switch back to alpha keyboard mode if user types one or more non-space/enter + // characters followed by a space/enter. + if (isSpaceOrEnter(code) && Settings.getValues().mAlphaAfterNumpadAndSpace) { + toggleNumpad(false, autoCapsFlags, recapitalizeMode, true, false); + } + break; + case SWITCH_STATE_NUMPAD_BEGIN: + if (!isSpaceOrEnter(code)) + mSwitchState = SWITCH_STATE_NUMPAD; + break; } // If the code is a letter, update keyboard shift state. @@ -833,6 +845,7 @@ public final class KeyboardState { case SWITCH_STATE_MOMENTARY_SYMBOL_AND_MORE -> "MOMENTARY-SYMBOL-MORE"; case SWITCH_STATE_MOMENTARY_ALPHA_SHIFT -> "MOMENTARY-ALPHA_SHIFT"; case SWITCH_STATE_NUMPAD -> "NUMPAD"; + case SWITCH_STATE_NUMPAD_BEGIN -> "NUMPAD-BEGIN"; case SWITCH_STATE_MOMENTARY_TO_NUMPAD -> "MOMENTARY-TO-NUMPAD"; case SWITCH_STATE_MOMENTARY_FROM_NUMPAD -> "MOMENTARY-FROM-NUMPAD"; default -> null; diff --git a/app/src/main/java/helium314/keyboard/keyboard/internal/PopupKeySpec.java b/app/src/main/java/helium314/keyboard/keyboard/internal/PopupKeySpec.java index a1b41b79..695a660a 100644 --- a/app/src/main/java/helium314/keyboard/keyboard/internal/PopupKeySpec.java +++ b/app/src/main/java/helium314/keyboard/keyboard/internal/PopupKeySpec.java @@ -68,11 +68,9 @@ public final class PopupKeySpec { } @NonNull - public Key buildKey(final int x, final int y, final int labelFlags, - @NonNull final KeyboardParams params) { - return new Key(mLabel, mIconName, mCode, mOutputText, null /* hintLabel */, labelFlags, - Key.BACKGROUND_TYPE_NORMAL, x, y, params.mDefaultAbsoluteKeyWidth, params.mDefaultAbsoluteRowHeight, - params.mHorizontalGap, params.mVerticalGap); + public Key buildKey(final int x, final int y, final int labelFlags, final int background, @NonNull final KeyboardParams params) { + return new Key(mLabel, mIconName, mCode, mOutputText, null, labelFlags, background, x, y, + params.mDefaultAbsoluteKeyWidth, params.mDefaultAbsoluteRowHeight, params.mHorizontalGap, params.mVerticalGap); } @Override diff --git a/app/src/main/java/helium314/keyboard/keyboard/internal/keyboard_parser/LayoutParser.kt b/app/src/main/java/helium314/keyboard/keyboard/internal/keyboard_parser/LayoutParser.kt index 3164cc69..d2b51fb9 100644 --- a/app/src/main/java/helium314/keyboard/keyboard/internal/keyboard_parser/LayoutParser.kt +++ b/app/src/main/java/helium314/keyboard/keyboard/internal/keyboard_parser/LayoutParser.kt @@ -59,8 +59,7 @@ object LayoutParser { /** Parse simple layouts, defined only as rows of (normal) keys with popup keys. */ fun parseSimpleString(layoutText: String): List> { - val rowStrings = layoutText.replace("\r\n", "\n").split("\\n\\s*\\n".toRegex()).filter { it.isNotBlank() } - return rowStrings.map { row -> + return LayoutUtils.getSimpleRowStrings(layoutText).map { row -> row.split("\n").mapNotNull { parseKey(it) } } } diff --git a/app/src/main/java/helium314/keyboard/keyboard/internal/keyboard_parser/LocaleKeyboardInfos.kt b/app/src/main/java/helium314/keyboard/keyboard/internal/keyboard_parser/LocaleKeyboardInfos.kt index 260eb957..eba17161 100644 --- a/app/src/main/java/helium314/keyboard/keyboard/internal/keyboard_parser/LocaleKeyboardInfos.kt +++ b/app/src/main/java/helium314/keyboard/keyboard/internal/keyboard_parser/LocaleKeyboardInfos.kt @@ -44,7 +44,7 @@ class LocaleKeyboardInfos(dataStream: InputStream?, locale: Locale) { "mns" -> Key.LABEL_FLAGS_FOLLOW_KEY_LETTER_RATIO else -> 0 } - val tlds = getLocaleTlds(locale) // todo: USE IT + val tlds = getLocaleTlds(locale) init { readStream(dataStream, false, true) @@ -89,12 +89,6 @@ class LocaleKeyboardInfos(dataStream: InputStream?, locale: Locale) { } } - fun addDefaultTlds(locale: Locale) { - if ((locale.language != "en" && euroLocales.matches(locale.language)) || euroCountries.matches(locale.country)) - tlds.add(".eu") - tlds.addAll(defaultTlds.splitOnWhitespace()) - } - /** Pair(extraKeysLeft, extraKeysRight) */ fun getTabletExtraKeys(elementId: Int): Pair, List> { val flags = Key.LABEL_FLAGS_FONT_DEFAULT @@ -205,7 +199,6 @@ private fun createLocaleKeyTexts(context: Context, params: KeyboardParams, popup if (locale == params.mId.locale) return@forEach lkt.addFile(getStreamForLocale(locale, context), true) } - lkt.addDefaultTlds(params.mId.locale) when (popupKeysSetting) { POPUP_KEYS_MAIN -> lkt.addFile(context.assets.open("$LOCALE_TEXTS_FOLDER/more_popups_main.txt"), false) POPUP_KEYS_MORE -> lkt.addFile(context.assets.open("$LOCALE_TEXTS_FOLDER/more_popups_more.txt"), false) @@ -227,19 +220,27 @@ private fun getStreamForLocale(locale: Locale, context: Context) = } private fun getLocaleTlds(locale: Locale): LinkedHashSet { + val tlds = getDefaultTlds(locale) val ccLower = locale.country.lowercase() - val tlds = LinkedHashSet() if (ccLower.isEmpty() || locale.language == SubtypeLocaleUtils.NO_LANGUAGE) return tlds specialCountryTlds.forEach { if (ccLower != it.first) return@forEach tlds.addAll(it.second.splitOnWhitespace()) - return tlds + return@getLocaleTlds tlds } tlds.add(".$ccLower") return tlds } +private fun getDefaultTlds(locale: Locale): LinkedHashSet { + val tlds = linkedSetOf() + tlds.addAll(defaultTlds.splitOnWhitespace()) + if ((locale.language != "en" && euroLocales.matches(locale.language)) || euroCountries.matches(locale.country)) + tlds.add(".eu") + return tlds +} + fun clearCache() = localeKeyboardInfosCache.clear() // cache the texts, so they don't need to be read over and over diff --git a/app/src/main/java/helium314/keyboard/keyboard/internal/keyboard_parser/floris/TextKeyData.kt b/app/src/main/java/helium314/keyboard/keyboard/internal/keyboard_parser/floris/TextKeyData.kt index eff71549..757ea9a5 100644 --- a/app/src/main/java/helium314/keyboard/keyboard/internal/keyboard_parser/floris/TextKeyData.kt +++ b/app/src/main/java/helium314/keyboard/keyboard/internal/keyboard_parser/floris/TextKeyData.kt @@ -24,6 +24,7 @@ import helium314.keyboard.latin.common.StringUtils import helium314.keyboard.latin.settings.Settings import helium314.keyboard.latin.spellcheck.AndroidSpellCheckerService import helium314.keyboard.latin.utils.InputTypeUtils +import helium314.keyboard.latin.utils.LayoutType import helium314.keyboard.latin.utils.Log import helium314.keyboard.latin.utils.ToolbarKey import helium314.keyboard.latin.utils.getCodeForToolbarKey @@ -482,8 +483,7 @@ sealed interface KeyData : AbstractKeyData { KeyLabel.DELETE -> "!icon/delete_key|!code/key_delete" KeyLabel.SHIFT -> "${getShiftLabel(params)}|!code/key_shift" // KeyLabel.EMOJI -> "!icon/emoji_normal_key|!code/key_emoji" - // todo (later): label and popupKeys for .com should be in localeKeyTexts, handled similar to currency key - KeyLabel.COM -> ".com" + KeyLabel.COM -> params.mLocaleKeyboardInfos.tlds.first() KeyLabel.LANGUAGE_SWITCH -> "!icon/language_switch_key|!code/key_language_switch" KeyLabel.ZWNJ -> "!icon/zwnj_key|\u200C" KeyLabel.CURRENCY -> params.mLocaleKeyboardInfos.currencyKey.first @@ -526,8 +526,11 @@ sealed interface KeyData : AbstractKeyData { return when (label) { KeyLabel.ALPHA, KeyLabel.SYMBOL_ALPHA, KeyLabel.SYMBOL -> Key.LABEL_FLAGS_PRESERVE_CASE or Key.LABEL_FLAGS_FOLLOW_FUNCTIONAL_TEXT_COLOR KeyLabel.COMMA -> Key.LABEL_FLAGS_HAS_POPUP_HINT - // essentially this only changes the appearance of the armenian period key in holo theme - KeyLabel.PERIOD -> Key.LABEL_FLAGS_HAS_POPUP_HINT and if (params.mId.isAlphabetKeyboard) params.mLocaleKeyboardInfos.labelFlags else 0 + // essentially the first term only changes the appearance of the armenian period key in holo theme + KeyLabel.PERIOD -> (Key.LABEL_FLAGS_HAS_POPUP_HINT and + if (params.mId.isAlphabetKeyboard) params.mLocaleKeyboardInfos.labelFlags else 0) or + (if (shouldShowTldPopups(params)) 0 else Key.LABEL_FLAGS_DISABLE_HINT_LABEL) or + Key.LABEL_FLAGS_PRESERVE_CASE KeyLabel.ACTION -> { Key.LABEL_FLAGS_PRESERVE_CASE or Key.LABEL_FLAGS_AUTO_X_SCALE or Key.LABEL_FLAGS_FOLLOW_KEY_LABEL_RATIO or Key.LABEL_FLAGS_FOLLOW_FUNCTIONAL_TEXT_COLOR or @@ -546,12 +549,12 @@ sealed interface KeyData : AbstractKeyData { private fun getAdditionalPopupKeys(params: KeyboardParams): PopupSet? { if (groupId == GROUP_COMMA) return SimplePopups(getCommaPopupKeys(params)) - if (groupId == GROUP_PERIOD) return SimplePopups(getPunctuationPopupKeys(params)) + if (groupId == GROUP_PERIOD) return getPeriodPopups(params) if (groupId == GROUP_ENTER) return getActionKeyPopupKeys(params) if (groupId == GROUP_NO_DEFAULT_POPUP) return null return when (label) { KeyLabel.COMMA -> SimplePopups(getCommaPopupKeys(params)) - KeyLabel.PERIOD -> SimplePopups(getPunctuationPopupKeys(params)) + KeyLabel.PERIOD -> getPeriodPopups(params) KeyLabel.ACTION -> getActionKeyPopupKeys(params) KeyLabel.SHIFT -> { if (params.mId.isAlphabetKeyboard) SimplePopups( @@ -561,13 +564,27 @@ sealed interface KeyData : AbstractKeyData { ) ) else null // why the alphabet popup keys actually? } - KeyLabel.COM -> SimplePopups(listOf(Key.POPUP_KEYS_HAS_LABELS, ".net", ".org", ".gov", ".edu")) + KeyLabel.COM -> SimplePopups( + listOf(Key.POPUP_KEYS_HAS_LABELS).plus(params.mLocaleKeyboardInfos.tlds.drop(1)) + ) + KeyLabel.ZWNJ -> SimplePopups(listOf("!icon/zwj_key|\u200D")) // only add currency popups if there are none defined on the key KeyLabel.CURRENCY -> if (popup.isEmpty()) SimplePopups(params.mLocaleKeyboardInfos.currencyKey.second) else null else -> null } } + + private fun getPeriodPopups(params: KeyboardParams): SimplePopups = + SimplePopups( + if (shouldShowTldPopups(params)) params.mLocaleKeyboardInfos.tlds + else getPunctuationPopupKeys(params) + ) + + private fun shouldShowTldPopups(params: KeyboardParams): Boolean = + (Settings.getInstance().current.mShowTldPopupKeys + && params.mId.mSubtype.layouts[LayoutType.FUNCTIONAL] != "functional_keys_tablet" + && params.mId.mMode in setOf(KeyboardId.MODE_URL, KeyboardId.MODE_EMAIL)) } /** diff --git a/app/src/main/java/helium314/keyboard/latin/App.kt b/app/src/main/java/helium314/keyboard/latin/App.kt index c6853694..c2d91df5 100644 --- a/app/src/main/java/helium314/keyboard/latin/App.kt +++ b/app/src/main/java/helium314/keyboard/latin/App.kt @@ -161,7 +161,7 @@ fun checkVersionUpgrade(context: Context) { split[1] = newName split.joinToString(":") } - Settings.writePrefAdditionalSubtypes(prefs, newSubtypeStrings.joinToString(";")) + prefs.edit().putString(Settings.PREF_ADDITIONAL_SUBTYPES, newSubtypeStrings.joinToString(";")).apply() } // rename other custom layouts LayoutUtilsCustom.onLayoutFileChanged() @@ -232,7 +232,7 @@ fun checkVersionUpgrade(context: Context) { KeyboardTheme.writeUserMoreColors(prefs, themeNameNight, moreColorsNight) } if (prefs.contains("theme_dark_color_all_colors")) { - val allColorsNight = readAllColorsMap(false) + val allColorsNight = readAllColorsMap(true) prefs.edit().remove("theme_dark_color_all_colors").apply() KeyboardTheme.writeUserAllColors(prefs, themeNameNight, allColorsNight) } @@ -530,6 +530,18 @@ fun checkVersionUpgrade(context: Context) { prefs.edit().remove("auto_correction_confidence").putFloat(Settings.PREF_AUTO_CORRECT_THRESHOLD, value).apply() } } + if (oldVersion <= 2310) { + listOf( + Settings.PREF_ENABLED_SUBTYPES, + Settings.PREF_SELECTED_SUBTYPE, + Settings.PREF_ADDITIONAL_SUBTYPES + ).forEach { key -> + val value = prefs.getString(key, "")!! + if ("bengali," in value) { + prefs.edit().putString(key, value.replace("bengali,", "bengali_inscript,")).apply() + } + } +} upgradeToolbarPrefs(prefs) LayoutUtilsCustom.onLayoutFileChanged() // just to be sure prefs.edit { putInt(Settings.PREF_VERSION_CODE, BuildConfig.VERSION_CODE) } @@ -618,7 +630,7 @@ private fun upgradesWhenComingFromOldAppName(context: Context) { val localeString = it.substringBefore(":") additionalSubtypes.add(it.replace(localeString, localeString.constructLocale().toLanguageTag())) } - Settings.writePrefAdditionalSubtypes(prefs, additionalSubtypes.joinToString(";")) + prefs.edit().putString(Settings.PREF_ADDITIONAL_SUBTYPES, additionalSubtypes.joinToString(";")).apply() } // move pinned clips to credential protected storage if device is not locked (should never happen) if (!prefs.contains(Settings.PREF_PINNED_CLIPS)) return diff --git a/app/src/main/java/helium314/keyboard/latin/LatinIME.java b/app/src/main/java/helium314/keyboard/latin/LatinIME.java index d2e75a45..5913bf70 100644 --- a/app/src/main/java/helium314/keyboard/latin/LatinIME.java +++ b/app/src/main/java/helium314/keyboard/latin/LatinIME.java @@ -7,6 +7,7 @@ package helium314.keyboard.latin; import android.annotation.SuppressLint; +import android.app.AlertDialog; import android.content.BroadcastReceiver; import android.content.Context; import android.content.Intent; @@ -100,7 +101,6 @@ import java.util.concurrent.TimeUnit; import androidx.annotation.NonNull; import androidx.annotation.Nullable; import androidx.annotation.RequiresApi; -import androidx.appcompat.app.AlertDialog; import androidx.core.content.ContextCompat; /** @@ -523,6 +523,11 @@ public class LatinIME extends InputMethodService implements } final class SubtypeState { + // When HintLocales causes a subtype override, we store + // the overridden subtype here in order to restore it when + // we switch to another input context that has no HintLocales. + private InputMethodSubtype mOverriddenByLocale; + private InputMethodSubtype mLastActiveSubtype; private boolean mCurrentSubtypeHasBeenUsed = true; // starting with true avoids immediate switch @@ -530,6 +535,70 @@ public class LatinIME extends InputMethodService implements mCurrentSubtypeHasBeenUsed = true; } + // TextFields can provide locale/language hints that the IME should use via 'hintLocales'. + // If a matching subtype is found, we temporarily switch to that subtype until + // we return to a context that does not provide any hints, or until the user + // explicitly changes the language/subtype in use. + public InputMethodSubtype getSubtypeForLocales(final RichInputMethodManager richImm, final Iterable locales) { + final InputMethodSubtype overriddenByLocale = mOverriddenByLocale; + if (locales == null) { + if (overriddenByLocale != null) { + // no locales provided, so switch back to + // whatever subtype was used last time. + mOverriddenByLocale = null; + + return overriddenByLocale; + } + + return null; + } + + final InputMethodSubtype currentSubtype = richImm.getCurrentSubtype().getRawSubtype(); + final Locale currentSubtypeLocale = richImm.getCurrentSubtypeLocale(); + final int minimumMatchLevel = 3; // LocaleUtils.LOCALE_LANGUAGE_MATCH_COUNTRY_DIFFER; + + // Try finding a subtype matching the hint language. + for (final Locale hintLocale : locales) { + if (LocaleUtils.INSTANCE.getMatchLevel(hintLocale, currentSubtypeLocale) >= minimumMatchLevel + || CollectionsKt.any(mSettings.getCurrent().mSecondaryLocales, + (secLocale) -> LocaleUtils.INSTANCE.getMatchLevel(hintLocale, secLocale) >= minimumMatchLevel)) { + // current locales are already a good match, and we want to avoid unnecessary layout switches. + return null; + } + + final InputMethodSubtype subtypeForHintLocale = richImm.findSubtypeForHintLocale(hintLocale); + if (subtypeForHintLocale == null) { + continue; + } + + if (subtypeForHintLocale.equals(currentSubtype)) { + // no need to switch, we already use the correct locale. + return null; + } + + if (overriddenByLocale == null) { + // auto-switching based on hint locale, so store + // whatever subtype was in use so we can switch back + // to it later when there are no hint locales. + mOverriddenByLocale = currentSubtype; + } + + return subtypeForHintLocale; + } + + return null; + } + + public void onSubtypeChanged(final InputMethodSubtype oldSubtype, + final InputMethodSubtype newSubtype) { + if (oldSubtype != mOverriddenByLocale) { + // Whenever the subtype is changed, clear tracking + // the subtype that is overridden by a HintLocale as + // we no longer have a subtype to automatically switch back to. + mOverriddenByLocale = null; + } + } + public void switchSubtype(final RichInputMethodManager richImm) { final InputMethodSubtype currentSubtype = richImm.getCurrentSubtype().getRawSubtype(); final InputMethodSubtype lastActiveSubtype = mLastActiveSubtype; @@ -858,6 +927,8 @@ public class LatinIME extends InputMethodService implements return; } InputMethodSubtype oldSubtype = mRichImm.getCurrentSubtype().getRawSubtype(); + + mSubtypeState.onSubtypeChanged(oldSubtype, subtype); StatsUtils.onSubtypeChanged(oldSubtype, subtype); mRichImm.onSubtypeChanged(subtype); mInputLogic.onSubtypeChanged(SubtypeLocaleUtils.getCombiningRulesExtraValue(subtype), @@ -876,20 +947,10 @@ public class LatinIME extends InputMethodService implements super.onStartInput(editorInfo, restarting); final List hintLocales = EditorInfoCompatUtils.getHintLocales(editorInfo); - if (hintLocales == null) { - return; - } - // Try switching to a subtype matching the hint language. - for (final Locale hintLocale : hintLocales) { - if (LocaleUtils.INSTANCE.getMatchLevel(hintLocale, mRichImm.getCurrentSubtypeLocale()) >= 3 - || CollectionsKt.any(mSettings.getCurrent().mSecondaryLocales, (secLocale) -> LocaleUtils.INSTANCE.getMatchLevel(hintLocale, secLocale) >= 3)) - return; // current locales are already a good match, and we want to avoid unnecessary layout switches - final InputMethodSubtype newSubtype = mRichImm.findSubtypeForHintLocale(hintLocale); - if (newSubtype == null) continue; - if (newSubtype.equals(mRichImm.getCurrentSubtype().getRawSubtype())) - return; // no need to switch, we already use the correct locale - mHandler.postSwitchLanguage(newSubtype); - break; + final InputMethodSubtype subtypeForLocales = mSubtypeState.getSubtypeForLocales(mRichImm, hintLocales); + if (subtypeForLocales != null) { + // found a better subtype using hint locales that we should switch to. + mHandler.postSwitchLanguage(subtypeForLocales); } } diff --git a/app/src/main/java/helium314/keyboard/latin/settings/Defaults.kt b/app/src/main/java/helium314/keyboard/latin/settings/Defaults.kt index 0301409b..1a890fa2 100644 --- a/app/src/main/java/helium314/keyboard/latin/settings/Defaults.kt +++ b/app/src/main/java/helium314/keyboard/latin/settings/Defaults.kt @@ -9,7 +9,6 @@ import helium314.keyboard.keyboard.KeyboardTheme import helium314.keyboard.latin.BuildConfig import helium314.keyboard.latin.common.Constants.Separators import helium314.keyboard.latin.common.Constants.Subtype.ExtraValue -import helium314.keyboard.latin.utils.JniUtils import helium314.keyboard.latin.utils.LayoutType import helium314.keyboard.latin.utils.POPUP_KEYS_LABEL_DEFAULT import helium314.keyboard.latin.utils.POPUP_KEYS_ORDER_DEFAULT @@ -74,9 +73,9 @@ object Defaults { const val PREF_LANGUAGE_SWITCH_KEY = "internal" const val PREF_SHOW_EMOJI_KEY = false const val PREF_VARIABLE_TOOLBAR_DIRECTION = true - const val PREF_ADDITIONAL_SUBTYPES = "de${Separators.SET}${ExtraValue.KEYBOARD_LAYOUT_SET}=qwerty${Separators.SETS}" + - "fr${Separators.SET}${ExtraValue.KEYBOARD_LAYOUT_SET}=qwertz${Separators.SETS}" + - "hu${Separators.SET}${ExtraValue.KEYBOARD_LAYOUT_SET}=qwerty" + const val PREF_ADDITIONAL_SUBTYPES = "de${Separators.SET}${ExtraValue.KEYBOARD_LAYOUT_SET}=MAIN:qwerty${Separators.SETS}" + + "fr${Separators.SET}${ExtraValue.KEYBOARD_LAYOUT_SET}=MAIN:qwertz${Separators.SETS}" + + "hu${Separators.SET}${ExtraValue.KEYBOARD_LAYOUT_SET}=MAIN:qwerty" const val PREF_ENABLE_SPLIT_KEYBOARD = false const val PREF_ENABLE_SPLIT_KEYBOARD_LANDSCAPE = false const val PREF_SPLIT_SPACER_SCALE = SettingsValues.DEFAULT_SIZE_SCALE @@ -123,6 +122,7 @@ object Defaults { const val PREF_POPUP_KEYS_ORDER = POPUP_KEYS_ORDER_DEFAULT const val PREF_POPUP_KEYS_LABELS_ORDER = POPUP_KEYS_LABEL_DEFAULT const val PREF_SHOW_POPUP_HINTS = false + const val PREF_SHOW_TLD_POPUP_KEYS = true const val PREF_MORE_POPUP_KEYS = "main" const val PREF_SPACE_TO_CHANGE_LANG = true const val PREF_LANGUAGE_SWIPE_DISTANCE = 5 @@ -145,6 +145,7 @@ object Defaults { const val PREF_ABC_AFTER_EMOJI = false const val PREF_ABC_AFTER_CLIP = false const val PREF_ABC_AFTER_SYMBOL_SPACE = true + const val PREF_ABC_AFTER_NUMPAD_SPACE = false const val PREF_REMOVE_REDUNDANT_POPUPS = false const val PREF_SPACE_BAR_TEXT = "" @JvmField @@ -152,8 +153,6 @@ object Defaults { const val PREF_EMOJI_RECENT_KEYS = "" const val PREF_LAST_SHOWN_EMOJI_CATEGORY_PAGE_ID = 0 const val PREF_PINNED_CLIPS = "" - @JvmField - val PREF_LIBRARY_CHECKSUM: String = JniUtils.expectedDefaultChecksum() const val PREF_SHOW_DEBUG_SETTINGS = false val PREF_DEBUG_MODE = BuildConfig.DEBUG const val PREF_SHOW_SUGGESTION_INFOS = false diff --git a/app/src/main/java/helium314/keyboard/latin/settings/Settings.java b/app/src/main/java/helium314/keyboard/latin/settings/Settings.java index 89e93e8d..6d45548a 100644 --- a/app/src/main/java/helium314/keyboard/latin/settings/Settings.java +++ b/app/src/main/java/helium314/keyboard/latin/settings/Settings.java @@ -131,6 +131,7 @@ public final class Settings implements SharedPreferences.OnSharedPreferenceChang public static final String PREF_POPUP_KEYS_LABELS_ORDER = "popup_keys_labels_order"; public static final String PREF_SHOW_POPUP_HINTS = "show_popup_hints"; public static final String PREF_MORE_POPUP_KEYS = "more_popup_keys"; + public static final String PREF_SHOW_TLD_POPUP_KEYS = "show_tld_popup_keys"; public static final String PREF_SPACE_TO_CHANGE_LANG = "prefs_long_press_keyboard_to_change_lang"; public static final String PREF_LANGUAGE_SWIPE_DISTANCE = "language_swipe_distance"; @@ -154,6 +155,7 @@ public final class Settings implements SharedPreferences.OnSharedPreferenceChang public static final String PREF_ABC_AFTER_EMOJI = "abc_after_emoji"; public static final String PREF_ABC_AFTER_CLIP = "abc_after_clip"; public static final String PREF_ABC_AFTER_SYMBOL_SPACE = "abc_after_symbol_space"; + public static final String PREF_ABC_AFTER_NUMPAD_SPACE = "abc_after_numpad_space"; public static final String PREF_REMOVE_REDUNDANT_POPUPS = "remove_redundant_popups"; public static final String PREF_SPACE_BAR_TEXT = "space_bar_text"; @@ -312,10 +314,6 @@ public final class Settings implements SharedPreferences.OnSharedPreferenceChang mPrefs.edit().putBoolean(Settings.PREF_ALWAYS_INCOGNITO_MODE, !oldValue).apply(); } - public static void writePrefAdditionalSubtypes(final SharedPreferences prefs, final String prefSubtypes) { - prefs.edit().putString(PREF_ADDITIONAL_SUBTYPES, prefSubtypes).apply(); - } - public static int readHorizontalSpaceSwipe(final SharedPreferences prefs) { return switch (prefs.getString(PREF_SPACE_HORIZONTAL_SWIPE, Defaults.PREF_SPACE_HORIZONTAL_SWIPE)) { case "move_cursor" -> KeyboardActionListener.SWIPE_MOVE_CURSOR; diff --git a/app/src/main/java/helium314/keyboard/latin/settings/SettingsSubtype.kt b/app/src/main/java/helium314/keyboard/latin/settings/SettingsSubtype.kt index da6eb3ff..ca18b7fd 100644 --- a/app/src/main/java/helium314/keyboard/latin/settings/SettingsSubtype.kt +++ b/app/src/main/java/helium314/keyboard/latin/settings/SettingsSubtype.kt @@ -11,11 +11,9 @@ import helium314.keyboard.latin.common.LocaleUtils.constructLocale import helium314.keyboard.latin.define.DebugFlags import helium314.keyboard.latin.utils.LayoutType import helium314.keyboard.latin.utils.LayoutType.Companion.toExtraValue -import helium314.keyboard.latin.utils.LayoutUtilsCustom import helium314.keyboard.latin.utils.Log import helium314.keyboard.latin.utils.ScriptUtils import helium314.keyboard.latin.utils.ScriptUtils.script -import helium314.keyboard.latin.utils.SubtypeLocaleUtils import helium314.keyboard.latin.utils.SubtypeUtilsAdditional import helium314.keyboard.latin.utils.locale import java.util.Locale @@ -27,19 +25,9 @@ data class SettingsSubtype(val locale: Locale, val extraValues: String) { /** Creates an additional subtype from the SettingsSubtype. * Resulting InputMethodSubtypes are equal if SettingsSubtypes are equal */ - fun toAdditionalSubtype(): InputMethodSubtype? { + fun toAdditionalSubtype(): InputMethodSubtype { val asciiCapable = locale.script() == ScriptUtils.SCRIPT_LATIN - val subtype = SubtypeUtilsAdditional.createAdditionalSubtype(locale, extraValues, asciiCapable, true) - if (subtype.nameResId == SubtypeLocaleUtils.UNKNOWN_KEYBOARD_LAYOUT - && mainLayoutName()?.endsWith("+") != true // "+" layouts and custom layouts are always "unknown" - && !LayoutUtilsCustom.isCustomLayout(mainLayoutName() ?: SubtypeLocaleUtils.QWERTY) - ) { - // Skip unknown keyboard layout subtype. This may happen when predefined keyboard - // layout has been removed. - Log.w(SettingsSubtype::class.simpleName, "unknown additional subtype $this") - return null - } - return subtype + return SubtypeUtilsAdditional.createAdditionalSubtype(locale, extraValues, asciiCapable, true) } fun mainLayoutName() = LayoutType.getMainLayoutFromExtraValue(extraValues) @@ -50,7 +38,7 @@ data class SettingsSubtype(val locale: Locale, val extraValues: String) { val newList = extraValues.split(",") .filterNot { it.isBlank() || it.startsWith("$extraValueKey=") || it == extraValueKey } val newValue = if (extraValue == null) extraValueKey else "$extraValueKey=$extraValue" - val newValues = (newList + newValue).joinToString(",") + val newValues = (newList + newValue).sorted().joinToString(",") return copy(extraValues = newValues) } diff --git a/app/src/main/java/helium314/keyboard/latin/settings/SettingsValues.java b/app/src/main/java/helium314/keyboard/latin/settings/SettingsValues.java index 8576bc1d..9a18fde2 100644 --- a/app/src/main/java/helium314/keyboard/latin/settings/SettingsValues.java +++ b/app/src/main/java/helium314/keyboard/latin/settings/SettingsValues.java @@ -65,6 +65,7 @@ public class SettingsValues { public final boolean mShowNumberRowHints; public final boolean mShowsHints; public final boolean mShowsPopupHints; + public final boolean mShowTldPopupKeys; public final boolean mSpaceForLangChange; public final boolean mShowsEmojiKey; public final boolean mVarToolbarDirection; @@ -113,6 +114,7 @@ public class SettingsValues { public final boolean mAlphaAfterEmojiInEmojiView; public final boolean mAlphaAfterClipHistoryEntry; public final boolean mAlphaAfterSymbolAndSpace; + public final boolean mAlphaAfterNumpadAndSpace; public final boolean mRemoveRedundantPopups; public final String mSpaceBarText; public final float mFontSizeMultiplier; @@ -172,6 +174,7 @@ public class SettingsValues { mShowNumberRowHints = prefs.getBoolean(Settings.PREF_SHOW_NUMBER_ROW_HINTS, Defaults.PREF_SHOW_NUMBER_ROW_HINTS); mShowsHints = prefs.getBoolean(Settings.PREF_SHOW_HINTS, Defaults.PREF_SHOW_HINTS); mShowsPopupHints = prefs.getBoolean(Settings.PREF_SHOW_POPUP_HINTS, Defaults.PREF_SHOW_POPUP_HINTS); + mShowTldPopupKeys = prefs.getBoolean(Settings.PREF_SHOW_TLD_POPUP_KEYS, Defaults.PREF_SHOW_TLD_POPUP_KEYS); mSpaceForLangChange = prefs.getBoolean(Settings.PREF_SPACE_TO_CHANGE_LANG, Defaults.PREF_SPACE_TO_CHANGE_LANG); mShowsEmojiKey = prefs.getBoolean(Settings.PREF_SHOW_EMOJI_KEY, Defaults.PREF_SHOW_EMOJI_KEY); mVarToolbarDirection = prefs.getBoolean(Settings.PREF_VARIABLE_TOOLBAR_DIRECTION, Defaults.PREF_VARIABLE_TOOLBAR_DIRECTION); @@ -266,6 +269,7 @@ public class SettingsValues { mAlphaAfterEmojiInEmojiView = prefs.getBoolean(Settings.PREF_ABC_AFTER_EMOJI, Defaults.PREF_ABC_AFTER_EMOJI); mAlphaAfterClipHistoryEntry = prefs.getBoolean(Settings.PREF_ABC_AFTER_CLIP, Defaults.PREF_ABC_AFTER_CLIP); mAlphaAfterSymbolAndSpace = prefs.getBoolean(Settings.PREF_ABC_AFTER_SYMBOL_SPACE, Defaults.PREF_ABC_AFTER_SYMBOL_SPACE); + mAlphaAfterNumpadAndSpace = prefs.getBoolean(Settings.PREF_ABC_AFTER_NUMPAD_SPACE, Defaults.PREF_ABC_AFTER_NUMPAD_SPACE); mRemoveRedundantPopups = prefs.getBoolean(Settings.PREF_REMOVE_REDUNDANT_POPUPS, Defaults.PREF_REMOVE_REDUNDANT_POPUPS); mSpaceBarText = prefs.getString(Settings.PREF_SPACE_BAR_TEXT, Defaults.PREF_SPACE_BAR_TEXT); mEmojiMaxSdk = prefs.getInt(Settings.PREF_EMOJI_MAX_SDK, Defaults.PREF_EMOJI_MAX_SDK); diff --git a/app/src/main/java/helium314/keyboard/latin/utils/DialogUtils.kt b/app/src/main/java/helium314/keyboard/latin/utils/DialogUtils.kt index 470743bb..e13f2f10 100644 --- a/app/src/main/java/helium314/keyboard/latin/utils/DialogUtils.kt +++ b/app/src/main/java/helium314/keyboard/latin/utils/DialogUtils.kt @@ -1,7 +1,7 @@ package helium314.keyboard.latin.utils import android.content.Context -import androidx.appcompat.view.ContextThemeWrapper +import android.view.ContextThemeWrapper import helium314.keyboard.latin.R // todo: ideally the custom InputMethodPicker would be removed / replaced with compose dialog, then this can be removed diff --git a/app/src/main/java/helium314/keyboard/latin/utils/InputMethodPicker.kt b/app/src/main/java/helium314/keyboard/latin/utils/InputMethodPicker.kt index 33ac3d5d..3f534842 100644 --- a/app/src/main/java/helium314/keyboard/latin/utils/InputMethodPicker.kt +++ b/app/src/main/java/helium314/keyboard/latin/utils/InputMethodPicker.kt @@ -2,6 +2,7 @@ package helium314.keyboard.latin.utils +import android.app.AlertDialog import android.os.IBinder import android.text.Spannable import android.text.SpannableString @@ -10,7 +11,6 @@ import android.text.style.RelativeSizeSpan import android.view.WindowManager import android.view.inputmethod.InputMethodInfo import android.view.inputmethod.InputMethodSubtype -import androidx.appcompat.app.AlertDialog import helium314.keyboard.latin.LatinIME import helium314.keyboard.latin.R import helium314.keyboard.latin.RichInputMethodManager diff --git a/app/src/main/java/helium314/keyboard/latin/utils/JniUtils.java b/app/src/main/java/helium314/keyboard/latin/utils/JniUtils.java index 603e32ab..6bae92d5 100644 --- a/app/src/main/java/helium314/keyboard/latin/utils/JniUtils.java +++ b/app/src/main/java/helium314/keyboard/latin/utils/JniUtils.java @@ -13,7 +13,6 @@ import android.text.TextUtils; import helium314.keyboard.latin.App; import helium314.keyboard.latin.BuildConfig; -import helium314.keyboard.latin.settings.Defaults; import helium314.keyboard.latin.settings.Settings; import java.io.File; @@ -63,7 +62,7 @@ public final class JniUtils { // we want the default preferences, because storing the checksum in device protected storage is discouraged // see https://developer.android.com/reference/android/content/Context#createDeviceProtectedStorageContext() // if device is locked, this will throw an IllegalStateException - wantedChecksum = KtxKt.protectedPrefs(app).getString(Settings.PREF_LIBRARY_CHECKSUM, Defaults.PREF_LIBRARY_CHECKSUM); + wantedChecksum = KtxKt.protectedPrefs(app).getString(Settings.PREF_LIBRARY_CHECKSUM, expectedDefaultChecksum()); } final FileInputStream libStream = new FileInputStream(userSuppliedLibrary); final String checksum = ChecksumCalculator.INSTANCE.checksum(libStream); diff --git a/app/src/main/java/helium314/keyboard/latin/utils/LayoutType.kt b/app/src/main/java/helium314/keyboard/latin/utils/LayoutType.kt index 4aec8d22..412bb158 100644 --- a/app/src/main/java/helium314/keyboard/latin/utils/LayoutType.kt +++ b/app/src/main/java/helium314/keyboard/latin/utils/LayoutType.kt @@ -22,7 +22,7 @@ enum class LayoutType { return map } - val LayoutType.folder get() = "layouts${File.separator}${name.lowercase()}${File.separator}" + val LayoutType.folder get() = "layouts${File.separator}${name.lowercase()}" val LayoutType.displayNameId get() = when (this) { MAIN -> R.string.subtype_no_language diff --git a/app/src/main/java/helium314/keyboard/latin/utils/LayoutUtils.kt b/app/src/main/java/helium314/keyboard/latin/utils/LayoutUtils.kt index 8d575b8c..68a99be9 100644 --- a/app/src/main/java/helium314/keyboard/latin/utils/LayoutUtils.kt +++ b/app/src/main/java/helium314/keyboard/latin/utils/LayoutUtils.kt @@ -1,10 +1,13 @@ package helium314.keyboard.latin.utils import android.content.Context +import helium314.keyboard.keyboard.internal.keyboard_parser.floris.SimplePopups +import helium314.keyboard.keyboard.internal.keyboard_parser.getOrCreate import helium314.keyboard.latin.R import helium314.keyboard.latin.settings.Defaults.default import helium314.keyboard.latin.utils.LayoutType.Companion.folder import helium314.keyboard.latin.utils.ScriptUtils.script +import java.io.File import java.util.Locale // for layouts provided by the app @@ -25,11 +28,35 @@ object LayoutUtils { fun getLMainLayoutsForLocales(locales: List, context: Context): Collection = locales.flatMapTo(HashSet()) { getAvailableLayouts(LayoutType.MAIN, context, it) }.sorted() + /** gets content for built-in (non-custom) layout [layoutName], with fallback to qwerty */ fun getContent(layoutType: LayoutType, layoutName: String, context: Context): String { val layouts = context.assets.list(layoutType.folder)!! layouts.firstOrNull { it.startsWith("$layoutName.") } - ?.let { return context.assets.open(layoutType.folder + it).reader().readText() } + ?.let { return context.assets.open(layoutType.folder + File.separator + it).reader().readText() } val fallback = layouts.first { it.startsWith(layoutType.default) } // must exist! - return context.assets.open(layoutType.folder + fallback).reader().readText() + return context.assets.open(layoutType.folder + File.separator + fallback).reader().readText() } + + fun getContentWithPlus(mainLayoutName: String, locale: Locale, context: Context): String { + val content = getContent(LayoutType.MAIN, mainLayoutName, context) + if (!mainLayoutName.endsWith("+")) + return content + // the stuff below will not work if we add "+" layouts in json format + // ideally we should serialize keyData to json to solve this + val rows = getSimpleRowStrings(content) + val localeKeyboardInfos = getOrCreate(context, locale) + return rows.mapIndexed { i, row -> + val extraKeys = localeKeyboardInfos.getExtraKeys(i + 1) ?: return@mapIndexed row + val rowList = row.split("\n").filterNot { it.isEmpty() }.toMutableList() + extraKeys.forEach { key -> + val popups = (key.popup as? SimplePopups)?.popupKeys?.joinToString(" ") + ?.takeIf { it.isNotEmpty() }?.let { " $it" } ?: "" + rowList.add(key.label + popups) + } + rowList.joinToString("\n") + }.joinToString("\n\n") + } + + fun getSimpleRowStrings(layoutContent: String): List = + layoutContent.replace("\r\n", "\n").split("\\n\\s*\\n".toRegex()).filter { it.isNotBlank() } } diff --git a/app/src/main/java/helium314/keyboard/latin/utils/LayoutUtilsCustom.kt b/app/src/main/java/helium314/keyboard/latin/utils/LayoutUtilsCustom.kt index 224ebf71..bc40baed 100644 --- a/app/src/main/java/helium314/keyboard/latin/utils/LayoutUtilsCustom.kt +++ b/app/src/main/java/helium314/keyboard/latin/utils/LayoutUtilsCustom.kt @@ -138,7 +138,7 @@ object LayoutUtilsCustom { fun isCustomLayout(layoutName: String) = layoutName.startsWith(CUSTOM_LAYOUT_PREFIX) fun getLayoutFile(layoutName: String, layoutType: LayoutType, context: Context): File { - val file = File(DeviceProtectedUtils.getFilesDir(context), layoutType.folder + layoutName) + val file = File(DeviceProtectedUtils.getFilesDir(context), layoutType.folder + File.separator + layoutName) file.parentFile?.mkdirs() return file } diff --git a/app/src/main/java/helium314/keyboard/latin/utils/ScriptUtils.kt b/app/src/main/java/helium314/keyboard/latin/utils/ScriptUtils.kt index df442089..f66c76ab 100644 --- a/app/src/main/java/helium314/keyboard/latin/utils/ScriptUtils.kt +++ b/app/src/main/java/helium314/keyboard/latin/utils/ScriptUtils.kt @@ -162,7 +162,7 @@ object ScriptUtils { return SCRIPT_LATIN } return when (language) { - "ar", "ur", "fa" -> SCRIPT_ARABIC + "ar", "ckb", "ur", "fa" -> SCRIPT_ARABIC "hy" -> SCRIPT_ARMENIAN "bn" -> SCRIPT_BENGALI "sr", "mk", "ru", "uk", "mn", "be", "kk", "ky", "bg", "xdq", "cv", "mhr", "mns", "dru" -> SCRIPT_CYRILLIC diff --git a/app/src/main/java/helium314/keyboard/latin/utils/SubtypeSettings.kt b/app/src/main/java/helium314/keyboard/latin/utils/SubtypeSettings.kt index 18739953..f533223e 100644 --- a/app/src/main/java/helium314/keyboard/latin/utils/SubtypeSettings.kt +++ b/app/src/main/java/helium314/keyboard/latin/utils/SubtypeSettings.kt @@ -52,9 +52,8 @@ object SubtypeSettings { fun addEnabledSubtype(prefs: SharedPreferences, newSubtype: InputMethodSubtype) { val subtype = newSubtype.toSettingsSubtype() - val subtypes = prefs.getString(Settings.PREF_ENABLED_SUBTYPES, Defaults.PREF_ENABLED_SUBTYPES)!! - .split(Separators.SETS).filter { it.isNotBlank() }.map { it.toSettingsSubtype() } + subtype - val newString = subtypes.map { it.toPref() }.toSortedSet().joinToString(Separators.SETS) + val subtypes = createSettingsSubtypes(prefs.getString(Settings.PREF_ENABLED_SUBTYPES, Defaults.PREF_ENABLED_SUBTYPES)!!) + subtype + val newString = createPrefSubtypes(subtypes) prefs.edit { putString(Settings.PREF_ENABLED_SUBTYPES, newString) } if (newSubtype !in enabledSubtypes) { @@ -74,10 +73,8 @@ object SubtypeSettings { fun getSelectedSubtype(prefs: SharedPreferences): InputMethodSubtype { val selectedSubtype = prefs.getString(Settings.PREF_SELECTED_SUBTYPE, Defaults.PREF_SELECTED_SUBTYPE)!!.toSettingsSubtype() - if (selectedSubtype.isAdditionalSubtype(prefs)) { - val selectedAdditionalSubtype = selectedSubtype.toAdditionalSubtype() - if (selectedAdditionalSubtype != null) return selectedAdditionalSubtype - } + if (selectedSubtype.isAdditionalSubtype(prefs)) + return selectedSubtype.toAdditionalSubtype() // no additional subtype, must be a resource subtype val subtype = enabledSubtypes.firstOrNull { it.toSettingsSubtype() == selectedSubtype } @@ -157,6 +154,15 @@ object SubtypeSettings { RichInputMethodManager.getInstance().refreshSubtypeCaches() } + fun createSettingsSubtypes(prefSubtypes: String): List = + prefSubtypes.split(Separators.SETS).mapNotNull { + if (it.isEmpty()) null + else it.toSettingsSubtype() + } + + fun createPrefSubtypes(subtypes: Collection): String = + subtypes.map { it.toPref() }.toSortedSet().joinToString(Separators.SETS) + fun init(context: Context) { SubtypeLocaleUtils.init(context) // necessary to get the correct getKeyboardLayoutSetName @@ -207,7 +213,8 @@ object SubtypeSettings { } if (subtypesToRemove.isEmpty()) return Log.w(TAG, "removing custom subtypes without main layout files: $subtypesToRemove") - Settings.writePrefAdditionalSubtypes(prefs, additionalSubtypes.filterNot { it in subtypesToRemove }.joinToString(Separators.SETS)) + // todo: now we have a qwerty fallback anyway, consider removing this method (makes bugs more obvious to users) + prefs.edit().putString(Settings.PREF_ADDITIONAL_SUBTYPES, additionalSubtypes.filterNot { it in subtypesToRemove }.joinToString(Separators.SETS)).apply() } private fun loadAdditionalSubtypes(prefs: SharedPreferences) { @@ -220,15 +227,11 @@ object SubtypeSettings { // requires loadResourceSubtypes to be called before private fun loadEnabledSubtypes(context: Context) { val prefs = context.prefs() - val settingsSubtypes = prefs.getString(Settings.PREF_ENABLED_SUBTYPES, Defaults.PREF_ENABLED_SUBTYPES)!! - .split(Separators.SETS).filter { it.isNotEmpty() }.map { it.toSettingsSubtype() } + val settingsSubtypes = createSettingsSubtypes(prefs.getString(Settings.PREF_ENABLED_SUBTYPES, Defaults.PREF_ENABLED_SUBTYPES)!!) for (settingsSubtype in settingsSubtypes) { if (settingsSubtype.isAdditionalSubtype(prefs)) { - val additionalSubtype = settingsSubtype.toAdditionalSubtype() - if (additionalSubtype != null) { - enabledSubtypes.add(additionalSubtype) - continue - } + enabledSubtypes.add(settingsSubtype.toAdditionalSubtype()) + continue } val subtypesForLocale = resourceSubtypesByLocale[settingsSubtype.locale] if (subtypesForLocale == null) { @@ -258,12 +261,11 @@ object SubtypeSettings { /** @return whether pref was changed */ private fun removeEnabledSubtype(prefs: SharedPreferences, subtype: SettingsSubtype): Boolean { - val oldSubtypes = prefs.getString(Settings.PREF_ENABLED_SUBTYPES, Defaults.PREF_ENABLED_SUBTYPES)!! - .split(Separators.SETS).filter { it.isNotEmpty() }.map { it.toSettingsSubtype() } + val oldSubtypes = createSettingsSubtypes(prefs.getString(Settings.PREF_ENABLED_SUBTYPES, Defaults.PREF_ENABLED_SUBTYPES)!!) val newSubtypes = oldSubtypes - subtype if (oldSubtypes == newSubtypes) return false // already removed - prefs.edit { putString(Settings.PREF_ENABLED_SUBTYPES, newSubtypes.joinToString(Separators.SETS) { it.toPref() }) } + prefs.edit { putString(Settings.PREF_ENABLED_SUBTYPES, createPrefSubtypes(newSubtypes)) } if (subtype == prefs.getString(Settings.PREF_SELECTED_SUBTYPE, Defaults.PREF_SELECTED_SUBTYPE)!!.toSettingsSubtype()) { // switch subtype if the currently used one has been disabled try { diff --git a/app/src/main/java/helium314/keyboard/latin/utils/SubtypeUtilsAdditional.kt b/app/src/main/java/helium314/keyboard/latin/utils/SubtypeUtilsAdditional.kt index 048a7410..b9bce10a 100644 --- a/app/src/main/java/helium314/keyboard/latin/utils/SubtypeUtilsAdditional.kt +++ b/app/src/main/java/helium314/keyboard/latin/utils/SubtypeUtilsAdditional.kt @@ -53,10 +53,11 @@ object SubtypeUtilsAdditional { val prefs = context.prefs() SubtypeSettings.removeEnabledSubtype(context, subtype) val oldAdditionalSubtypesString = prefs.getString(Settings.PREF_ADDITIONAL_SUBTYPES, Defaults.PREF_ADDITIONAL_SUBTYPES)!! - val oldAdditionalSubtypes = createAdditionalSubtypes(oldAdditionalSubtypesString) - val newAdditionalSubtypes = oldAdditionalSubtypes.filter { it != subtype } - val newAdditionalSubtypesString = createPrefSubtypes(newAdditionalSubtypes) - Settings.writePrefAdditionalSubtypes(prefs, newAdditionalSubtypesString) + val oldAdditionalSubtypes = SubtypeSettings.createSettingsSubtypes(oldAdditionalSubtypesString) + val settingsSubtype = subtype.toSettingsSubtype() + val newAdditionalSubtypes = oldAdditionalSubtypes.filter { it != settingsSubtype } + val newAdditionalSubtypesString = SubtypeSettings.createPrefSubtypes(newAdditionalSubtypes) + prefs.edit().putString(Settings.PREF_ADDITIONAL_SUBTYPES, newAdditionalSubtypesString).apply() } // updates additional subtypes, enabled subtypes, and selected subtype @@ -66,34 +67,37 @@ object SubtypeUtilsAdditional { val isSelected = prefs.getString(Settings.PREF_SELECTED_SUBTYPE, Defaults.PREF_SELECTED_SUBTYPE)!!.toSettingsSubtype() == from val isEnabled = prefs.getString(Settings.PREF_ENABLED_SUBTYPES, Defaults.PREF_ENABLED_SUBTYPES)!!.split(Separators.SETS) .any { it.toSettingsSubtype() == from } - val new = prefs.getString(Settings.PREF_ADDITIONAL_SUBTYPES, Defaults.PREF_ADDITIONAL_SUBTYPES)!! - .split(Separators.SETS).mapNotNullTo(sortedSetOf()) { - if (it == from.toPref()) null else it - } + to.toPref() - prefs.edit().putString(Settings.PREF_ADDITIONAL_SUBTYPES, new.joinToString(Separators.SETS)).apply() - - val fromSubtype = from.toAdditionalSubtype() // will be null if we edit a resource subtype - val toSubtype = to.toAdditionalSubtype() // should never be null - if (isSelected && toSubtype != null) { - SubtypeSettings.setSelectedSubtype(prefs, toSubtype) + val additionalSubtypes = SubtypeSettings.createSettingsSubtypes(prefs.getString(Settings.PREF_ADDITIONAL_SUBTYPES, Defaults.PREF_ADDITIONAL_SUBTYPES)!!) + .toMutableList() + additionalSubtypes.remove(from) + if (SubtypeSettings.getResourceSubtypesForLocale(to.locale).none { it.toSettingsSubtype() == to }) { + // We only add the "to" subtype if it's not equal to a resource subtype. + // This means we make additional subtype disappear as magically as it was added if all settings are default. + // If we don't do this, enabling the base subtype will result in the additional subtype being enabled, + // as both have the same settingsSubtype. + additionalSubtypes.add(to) } - if (fromSubtype != null && isEnabled && toSubtype != null) { - SubtypeSettings.removeEnabledSubtype(context, fromSubtype) - SubtypeSettings.addEnabledSubtype(prefs, toSubtype) + val editor = prefs.edit() + editor.putString(Settings.PREF_ADDITIONAL_SUBTYPES, SubtypeSettings.createPrefSubtypes(additionalSubtypes)) + if (isSelected) { + editor.putString(Settings.PREF_SELECTED_SUBTYPE, to.toPref()) } + if (isEnabled) { + val enabled = SubtypeSettings.createSettingsSubtypes(prefs.getString(Settings.PREF_ENABLED_SUBTYPES, Defaults.PREF_ENABLED_SUBTYPES)!!) + .toMutableList() + enabled.remove(from) + enabled.add(to) + editor.putString(Settings.PREF_ENABLED_SUBTYPES, SubtypeSettings.createPrefSubtypes(enabled)) + } + editor.apply() + SubtypeSettings.reloadEnabledSubtypes(context) } - fun createAdditionalSubtypes(prefSubtypes: String): List { - if (prefSubtypes.isEmpty()) - return emptyList() - return prefSubtypes.split(Separators.SETS).mapNotNull { it.toSettingsSubtype().toAdditionalSubtype() } - } - - fun createPrefSubtypes(subtypes: Collection): String { - if (subtypes.isEmpty()) - return "" - return subtypes.joinToString(Separators.SETS) { it.toSettingsSubtype().toPref() } - } + fun createAdditionalSubtypes(prefSubtypes: String): List = + prefSubtypes.split(Separators.SETS).mapNotNull { + if (it.isEmpty()) null + else it.toSettingsSubtype().toAdditionalSubtype() + } private fun getNameResId(locale: Locale, mainLayoutName: String): Int { val nameId = SubtypeLocaleUtils.getSubtypeNameResId(locale, mainLayoutName) diff --git a/app/src/main/java/helium314/keyboard/settings/Misc.kt b/app/src/main/java/helium314/keyboard/settings/Misc.kt index 05925afb..d295c2eb 100644 --- a/app/src/main/java/helium314/keyboard/settings/Misc.kt +++ b/app/src/main/java/helium314/keyboard/settings/Misc.kt @@ -1,13 +1,18 @@ // SPDX-License-Identifier: GPL-3.0-only package helium314.keyboard.settings +import android.graphics.drawable.VectorDrawable +import androidx.annotation.DrawableRes +import androidx.compose.foundation.Image import androidx.compose.foundation.clickable import androidx.compose.foundation.layout.Box import androidx.compose.foundation.layout.Column import androidx.compose.foundation.layout.Row import androidx.compose.foundation.layout.padding +import androidx.compose.foundation.layout.size import androidx.compose.material3.DropdownMenu import androidx.compose.material3.DropdownMenuItem +import androidx.compose.material3.Icon import androidx.compose.material3.MaterialTheme import androidx.compose.material3.Text import androidx.compose.runtime.Composable @@ -17,8 +22,13 @@ import androidx.compose.runtime.remember import androidx.compose.runtime.setValue import androidx.compose.ui.Alignment import androidx.compose.ui.Modifier +import androidx.compose.ui.graphics.asImageBitmap +import androidx.compose.ui.platform.LocalContext +import androidx.compose.ui.res.painterResource import androidx.compose.ui.unit.dp - +import androidx.core.content.ContextCompat +import androidx.core.graphics.drawable.toBitmap +import androidx.core.util.TypedValueCompat @Composable fun WithSmallTitle( @@ -31,6 +41,19 @@ fun WithSmallTitle( } } +/** Icon if resource is a vector image, (bitmap) Image otherwise */ +@Composable +fun IconOrImage(@DrawableRes resId: Int, name: String?, sizeDp: Float) { + val ctx = LocalContext.current + val drawable = ContextCompat.getDrawable(ctx, resId) + if (drawable is VectorDrawable) + Icon(painterResource(resId), name, Modifier.size(sizeDp.dp)) + else { + val px = TypedValueCompat.dpToPx(sizeDp, ctx.resources.displayMetrics).toInt() + Image(drawable!!.toBitmap(px, px).asImageBitmap(), name) + } +} + @Composable fun DropDownField( items: List, diff --git a/app/src/main/java/helium314/keyboard/settings/SettingsNavHost.kt b/app/src/main/java/helium314/keyboard/settings/SettingsNavHost.kt index f3773125..761610a5 100644 --- a/app/src/main/java/helium314/keyboard/settings/SettingsNavHost.kt +++ b/app/src/main/java/helium314/keyboard/settings/SettingsNavHost.kt @@ -1,11 +1,16 @@ // SPDX-License-Identifier: GPL-3.0-only package helium314.keyboard.settings +import android.provider.Settings +import android.provider.Settings.Global +import androidx.compose.animation.core.tween import androidx.compose.animation.slideInHorizontally import androidx.compose.animation.slideOutHorizontally import androidx.compose.runtime.Composable import androidx.compose.runtime.collectAsState +import androidx.compose.ui.platform.LocalContext import androidx.compose.ui.platform.LocalLayoutDirection +import androidx.compose.ui.unit.IntOffset import androidx.compose.ui.unit.LayoutDirection import androidx.navigation.compose.NavHost import androidx.navigation.compose.composable @@ -41,6 +46,10 @@ fun SettingsNavHost( val dir = if (LocalLayoutDirection.current == LayoutDirection.Ltr) 1 else -1 val target = SettingsDestination.navTarget.collectAsState() + // duration does not change when system setting changes, but that's rare enough to not care + val duration = (250 * Settings.System.getFloat(LocalContext.current.contentResolver, Global.TRANSITION_ANIMATION_SCALE, 1f)).toInt() + val animation = tween(durationMillis = duration) + fun goBack() { if (!navController.popBackStack()) onClickBack() } @@ -48,10 +57,10 @@ fun SettingsNavHost( NavHost( navController = navController, startDestination = startDestination ?: SettingsDestination.Settings, - enterTransition = { slideInHorizontally(initialOffsetX = { +it * dir }) }, - exitTransition = { slideOutHorizontally(targetOffsetX = { -it * dir }) }, - popEnterTransition = { slideInHorizontally(initialOffsetX = { -it * dir }) }, - popExitTransition = { slideOutHorizontally(targetOffsetX = { +it * dir }) } + enterTransition = { slideInHorizontally(initialOffsetX = { +it * dir }, animationSpec = animation) }, + exitTransition = { slideOutHorizontally(targetOffsetX = { -it * dir }, animationSpec = animation) }, + popEnterTransition = { slideInHorizontally(initialOffsetX = { -it * dir }, animationSpec = animation) }, + popExitTransition = { slideOutHorizontally(targetOffsetX = { +it * dir }, animationSpec = animation) } ) { composable(SettingsDestination.Settings) { MainSettingsScreen( diff --git a/app/src/main/java/helium314/keyboard/settings/dialogs/SubtypeDialog.kt b/app/src/main/java/helium314/keyboard/settings/dialogs/SubtypeDialog.kt index 7da713ec..33d4d850 100644 --- a/app/src/main/java/helium314/keyboard/settings/dialogs/SubtypeDialog.kt +++ b/app/src/main/java/helium314/keyboard/settings/dialogs/SubtypeDialog.kt @@ -125,8 +125,8 @@ fun SubtypeDialog( onConfirmed = { onConfirmed(currentSubtype) }, neutralButtonText = if (initialSubtype.isAdditionalSubtype(prefs)) stringResource(R.string.delete) else null, onNeutral = { - SubtypeUtilsAdditional.removeAdditionalSubtype(ctx, initialSubtype.toAdditionalSubtype()!!) - SubtypeSettings.removeEnabledSubtype(ctx, initialSubtype.toAdditionalSubtype()!!) + SubtypeUtilsAdditional.removeAdditionalSubtype(ctx, initialSubtype.toAdditionalSubtype()) + SubtypeSettings.removeEnabledSubtype(ctx, initialSubtype.toAdditionalSubtype()) onDismissRequest() }, title = { @@ -151,14 +151,14 @@ fun SubtypeDialog( } Row { TextButton(onClick = { showKeyOrderDialog = true }, Modifier.weight(1f)) - { Text(stringResource(R.string.popup_order), style = MaterialTheme.typography.bodyLarge) } + { Text(stringResource(R.string.popup_order)) } DefaultButton(currentSubtype.getExtraValueOf(ExtraValue.POPUP_ORDER) == null) { setCurrentSubtype(currentSubtype.without(ExtraValue.POPUP_ORDER)) } } Row { TextButton(onClick = { showHintOrderDialog = true }, Modifier.weight(1f)) - { Text(stringResource(R.string.hint_source), style = MaterialTheme.typography.bodyLarge) } + { Text(stringResource(R.string.hint_source)) } DefaultButton(currentSubtype.getExtraValueOf(ExtraValue.HINT_ORDER) == null) { setCurrentSubtype(currentSubtype.without(ExtraValue.HINT_ORDER)) } @@ -393,7 +393,7 @@ private fun MainLayoutRow( if (showLayoutEditDialog != null) { val layoutName = showLayoutEditDialog!!.first val startContent = showLayoutEditDialog?.second - ?: if (layoutName in appLayouts) LayoutUtils.getContent(LayoutType.MAIN, layoutName, ctx) + ?: if (layoutName in appLayouts) LayoutUtils.getContentWithPlus(layoutName, currentSubtype.locale, ctx) else null LayoutEditDialog( onDismissRequest = { showLayoutEditDialog = null }, diff --git a/app/src/main/java/helium314/keyboard/settings/preferences/LoadGestureLibPreference.kt b/app/src/main/java/helium314/keyboard/settings/preferences/LoadGestureLibPreference.kt index 591d4a5c..5b51bdbe 100644 --- a/app/src/main/java/helium314/keyboard/settings/preferences/LoadGestureLibPreference.kt +++ b/app/src/main/java/helium314/keyboard/settings/preferences/LoadGestureLibPreference.kt @@ -35,10 +35,13 @@ fun LoadGestureLibPreference(setting: Setting) { val abi = Build.SUPPORTED_ABIS[0] val libFile = File(ctx.filesDir?.absolutePath + File.separator + JniUtils.JNI_LIB_IMPORT_FILE_NAME) fun renameToLibFileAndRestart(file: File, checksum: String) { + libFile.setWritable(true) libFile.delete() - // store checksum in default preferences (soo JniUtils) + // store checksum in default preferences (see JniUtils) prefs.edit().putString(Settings.PREF_LIBRARY_CHECKSUM, checksum).commit() - file.renameTo(libFile) + file.copyTo(libFile) + libFile.setReadOnly() + file.delete() Runtime.getRuntime().exit(0) // exit will restart the app, so library will be loaded } var tempFilePath: String? by rememberSaveable { mutableStateOf(null) } diff --git a/app/src/main/java/helium314/keyboard/settings/preferences/Preference.kt b/app/src/main/java/helium314/keyboard/settings/preferences/Preference.kt index 33cd45b6..00a30c23 100644 --- a/app/src/main/java/helium314/keyboard/settings/preferences/Preference.kt +++ b/app/src/main/java/helium314/keyboard/settings/preferences/Preference.kt @@ -29,6 +29,7 @@ import androidx.compose.ui.text.style.TextAlign import androidx.compose.ui.tooling.preview.Preview import androidx.compose.ui.unit.dp import helium314.keyboard.latin.R +import helium314.keyboard.settings.IconOrImage import helium314.keyboard.settings.Theme import helium314.keyboard.settings.previewDark @@ -69,7 +70,7 @@ fun Preference( verticalAlignment = Alignment.CenterVertically ) { if (icon != null) - Icon(painterResource(icon), name, modifier = Modifier.size(36.dp)) + IconOrImage(icon, name, 36f) Column(modifier = Modifier.weight(1f)) { Text(text = name, style = MaterialTheme.typography.bodyLarge) if (description != null) { diff --git a/app/src/main/java/helium314/keyboard/settings/screens/AboutScreen.kt b/app/src/main/java/helium314/keyboard/settings/screens/AboutScreen.kt index 0b827952..9d84985c 100644 --- a/app/src/main/java/helium314/keyboard/settings/screens/AboutScreen.kt +++ b/app/src/main/java/helium314/keyboard/settings/screens/AboutScreen.kt @@ -2,6 +2,7 @@ package helium314.keyboard.settings.screens import android.app.Activity +import android.app.AlertDialog import android.content.Context import android.content.Intent import android.text.method.LinkMovementMethod @@ -10,7 +11,6 @@ import android.widget.TextView import android.widget.Toast import androidx.activity.compose.rememberLauncherForActivityResult import androidx.activity.result.contract.ActivityResultContracts -import androidx.appcompat.app.AlertDialog import androidx.compose.material3.Surface import androidx.compose.runtime.Composable import androidx.compose.runtime.getValue @@ -69,7 +69,7 @@ fun createAboutSettings(context: Context) = listOf( name = it.title, description = it.description, onClick = { }, - icon = R.drawable.ic_launcher_foreground // use the bitmap trick here if we really want the colored icon + icon = R.mipmap.ic_launcher_round ) }, Setting(context, SettingsWithoutKey.VERSION, R.string.version) { diff --git a/app/src/main/java/helium314/keyboard/settings/screens/AdvancedScreen.kt b/app/src/main/java/helium314/keyboard/settings/screens/AdvancedScreen.kt index 3605a422..c81f3025 100644 --- a/app/src/main/java/helium314/keyboard/settings/screens/AdvancedScreen.kt +++ b/app/src/main/java/helium314/keyboard/settings/screens/AdvancedScreen.kt @@ -66,6 +66,7 @@ fun AdvancedSettingsScreen( Settings.PREF_ENABLE_EMOJI_ALT_PHYSICAL_KEY, if (Build.VERSION.SDK_INT < Build.VERSION_CODES.Q) Settings.PREF_SHOW_SETUP_WIZARD_ICON else null, Settings.PREF_ABC_AFTER_SYMBOL_SPACE, + Settings.PREF_ABC_AFTER_NUMPAD_SPACE, Settings.PREF_ABC_AFTER_EMOJI, Settings.PREF_ABC_AFTER_CLIP, Settings.PREF_CUSTOM_CURRENCY_KEY, @@ -154,6 +155,11 @@ fun createAdvancedSettings(context: Context) = listOf( { SwitchPreference(it, Defaults.PREF_ABC_AFTER_SYMBOL_SPACE) }, + Setting(context, Settings.PREF_ABC_AFTER_NUMPAD_SPACE, + R.string.switch_keyboard_after, R.string.after_numpad_and_space) + { + SwitchPreference(it, Defaults.PREF_ABC_AFTER_NUMPAD_SPACE) + }, Setting(context, Settings.PREF_ABC_AFTER_EMOJI, R.string.switch_keyboard_after, R.string.after_emoji) { SwitchPreference(it, Defaults.PREF_ABC_AFTER_EMOJI) }, diff --git a/app/src/main/java/helium314/keyboard/settings/screens/PreferencesScreen.kt b/app/src/main/java/helium314/keyboard/settings/screens/PreferencesScreen.kt index 17486bae..d7e88c84 100644 --- a/app/src/main/java/helium314/keyboard/settings/screens/PreferencesScreen.kt +++ b/app/src/main/java/helium314/keyboard/settings/screens/PreferencesScreen.kt @@ -46,6 +46,7 @@ fun PreferencesScreen( Settings.PREF_POPUP_KEYS_LABELS_ORDER else null, Settings.PREF_POPUP_KEYS_ORDER, Settings.PREF_SHOW_POPUP_HINTS, + Settings.PREF_SHOW_TLD_POPUP_KEYS, Settings.PREF_POPUP_ON, if (AudioAndHapticFeedbackManager.getInstance().hasVibrator()) Settings.PREF_VIBRATE_ON else null, @@ -89,6 +90,12 @@ fun createPreferencesSettings(context: Context) = listOf( Setting(context, Settings.PREF_POPUP_KEYS_ORDER, R.string.popup_order) { ReorderSwitchPreference(it, Defaults.PREF_POPUP_KEYS_ORDER) }, + Setting( + context, Settings.PREF_SHOW_TLD_POPUP_KEYS, R.string.show_tld_popup_keys, + R.string.show_tld_popup_keys_summary + ) { + SwitchPreference(it, Defaults.PREF_SHOW_TLD_POPUP_KEYS) { KeyboardSwitcher.getInstance().setThemeNeedsReload() } + }, Setting(context, Settings.PREF_SHOW_POPUP_HINTS, R.string.show_popup_hints, R.string.show_popup_hints_summary) { SwitchPreference(it, Defaults.PREF_SHOW_POPUP_HINTS) { KeyboardSwitcher.getInstance().setThemeNeedsReload() } }, diff --git a/app/src/main/res/drawable/sym_keyboard_paste_rounded.xml b/app/src/main/res/drawable/sym_keyboard_paste_rounded.xml index 6e57a69b..051630b7 100644 --- a/app/src/main/res/drawable/sym_keyboard_paste_rounded.xml +++ b/app/src/main/res/drawable/sym_keyboard_paste_rounded.xml @@ -8,8 +8,7 @@ android:width="24dp" android:height="24dp" android:viewportWidth="960" - android:viewportHeight="960" - android:tint="?attr/colorControlNormal"> + android:viewportHeight="960"> \ No newline at end of file diff --git a/app/src/main/res/values-af/strings.xml b/app/src/main/res/values-af/strings.xml index b74a1ff1..94a881b3 100644 --- a/app/src/main/res/values-af/strings.xml +++ b/app/src/main/res/values-af/strings.xml @@ -159,4 +159,4 @@ "Soek" "Laat wag" "Wag" - \ No newline at end of file + diff --git a/app/src/main/res/values-am/strings.xml b/app/src/main/res/values-am/strings.xml index 2dc24de2..e9a384c8 100644 --- a/app/src/main/res/values-am/strings.xml +++ b/app/src/main/res/values-am/strings.xml @@ -79,8 +79,8 @@ "በጣት ምልክት መተየብ" "ጀምር" "ቀጣይ ደረጃ" - "%sን በማዋቀር ላይ" - "%sን ያንቁ" + %sን በማዋቀር ላይ\" + %sን ያንቁ\" እባክዎ %s»ን በእርስዎ የቋንቋ እና ግቤት ቅንብሮች ውስጥ መኖሩን ያረጋግጡት። ይሄ እሱ በመሣሪያዎ ላይ እንዲሄድ ይፈቅድለታል።\" "%s አስቀድሞ በእርስዎ ቋንቋ እና ግቤት ቅንብሮች ውስጥ ነቅቷል፣ ስለዚህ ይህ ደረጃ ተከናውኗል። ወደ ቀጣዩ እንሂድ!" "በቅንብሮች ውስጥ ያንቁ" @@ -123,4 +123,4 @@ "ፈልግ" "ቆም በል" "ጠብቅ" - \ No newline at end of file + diff --git a/app/src/main/res/values-ar/strings.xml b/app/src/main/res/values-ar/strings.xml index 9605adb9..36b7b516 100644 --- a/app/src/main/res/values-ar/strings.xml +++ b/app/src/main/res/values-ar/strings.xml @@ -75,16 +75,16 @@ "الرموز التعبيرية للوحة مفاتيح فعلية" "‏مفتاح Alt الفعلي يعرض لوحة الرموز التعبيرية" "التلقائية" - مرحبًا بكم في%s + مرحبًا بكم في %s مع الكتابة بالإيماءة "بدء الاستخدام" "الخطوة التالية" - قيد الإعداد%s - مكِّن%s + قيد الإعداد %s + مكِّن %s يرجى التحقق من \\%s\" في إعدادات الإدخال واللغات. سيؤدي ذلك إلى تمكين لوحة المفاتيح على جهازك.\" <xliff:g id=\"APPLICATION_NAME\" مثال=\"لوحة مفاتيح أندرويد\">%s</xliff:g> ممكّن بالفعل في إعدادات اللغات &amp؛ إعدادات الإدخال، لذا فقد تم الانتهاء من هذه الخطوة. إلى الخطوة التالية!\" "تفعيل في الإعدادات" - قم بالتبديل إلى%s + بدّل إلى %s بعد ذلك، اختر \\<<xliff:g id=\"APPLICATION_NAME\" مثال=\"لوحة مفاتيح أندرويد\">%s</xliff:g>” كطريقة إدخال النص النشط.“ "تبديل أساليب الإدخال" تهانينا ، لقد انتهيت من الإعداد! @@ -472,4 +472,8 @@ اللغات مع القواميس يمكنك العثور على المخططات ومشاركتها في %s. قسم المناقشة - \ No newline at end of file + نوع فرعي مخصّص + %s (Baishakhi) + أظهِر مفاتيح TLD المنبثقة + استبدل مفتاح الفترة المنبثقة مع مجالات المستوى الأعلى عند كتابة عناوين URL وعناوين البريد الإلكتروني + diff --git a/app/src/main/res/values-az/strings.xml b/app/src/main/res/values-az/strings.xml index 69dafb85..526e0ba8 100644 --- a/app/src/main/res/values-az/strings.xml +++ b/app/src/main/res/values-az/strings.xml @@ -3,8 +3,7 @@ Copyright (C) 2008 The Android Open Source Project modified SPDX-License-Identifier: Apache-2.0 AND GPL-3.0-only ---> - +--> "Kontakt adlarına baxın" "Vibrasiyalı klikləmə" "Klikləmə səsi" @@ -76,16 +75,16 @@ "Fiziki klaviatura üçün emoji" "Fiziki ALt düyməsi emoji palletini göstərir" "Defolt" - "%s təbiqinə xoş gəlmisiniz" + %s təbiqinə xoş gəlmisiniz\" "Jest Yazısı ilə" "Başlayın" "Növbəti addım" - "%s quraşdırılır" - "%s tətbiqini aktivləşdir" + %s quraşdırılır\" + %s tətbiqini aktivləşdir\" "Lütfən, \"%s\" tətbiqini Dillər və daxiletmə ayarlarında yoxlayın. Bununla tətbiqin cihazınızda işləməsinə icazə veriləcək." "%s artıq Dillər və daxiletmə ayarlarında aktivləşdirildi, beləliklə da bu mərhələ tamamlandı. İndi isə növbəti mərhələyə keçin!" "Parametrlərdə aktivləşdir" - "%s tətbiqinə keçin" + %s tətbiqinə keçin\" "Sonra, \"%s\" tətbiqini aktiv mətn-daxiletmə metodu olaraq seçin." "Daxil metodlarına keç" "Təbrik edirik, tam hazırsınız!" @@ -131,4 +130,4 @@ "Axtarış" "Pauza" "Gözlə" - \ No newline at end of file + diff --git a/app/src/main/res/values-be/strings.xml b/app/src/main/res/values-be/strings.xml index b8444b5f..df4da739 100644 --- a/app/src/main/res/values-be/strings.xml +++ b/app/src/main/res/values-be/strings.xml @@ -370,5 +370,64 @@ Пераключыць лічбавую клавіятуру Дадаць самыя распаўсюджаныя варыянты (па змаўчанні) Выдаліць лішнія ўсплывальныя вокны - Прыбраць усплывальныя клавішы, якія прысутнічаюць у базавай раскладцы - \ No newline at end of file + Прыбраць усплывальныя клавішы, якія ўжо прысутнічаюць у базавай раскладцы + Плаваючы прадпрагляд + Бачыць прапанаванае слова падчас набору жэстамі + Раздзельная клавіятура + Вібрацыя ў рэжыме «Не турбаваць» + Уключыць падзеленую клавіятуру (альбомная) + Адлегласць падзелу (альбомная) + Перамяшчаць прадпрагляд падчас набору жэстамі + Час жыцця следа жэста + Аўтакарэкцыя спалучэнняў клавіш + Калі ўключана, спалучэнні клавіш могуць быць пашыраны з дапамогай аўтакарэкцыі + Маштаб ніжняга водступу (альбомная) + Маштаб бакавога водступу + Паказваць падказкі ў шэрагу з лічбамі + Мовы са слоўнікамі + Карыстацкі падтып + Радок эмодзі ўнізе + Радок буфера абмену ўнізе + Папярэджанне: раскладка ў дадзены момант выкарыстоўваецца + Наладзіць значкі + Сапраўды скінуць усе настроеныя значкі? + Шэраг з лічбамі + Усталяваць фонавы малюнак (альбомная) + Перавызначыць версію эмодзі + Даргінскі (Урахі) + Урахінскі (%s) + Код клавішы + Сапраўды выдаліць %s? + Усталяваць карыстацкі шрыфт з файла + Калі не ўстаноўлена, будзе выкарыстоўвацца партрэтны малюнак + Раз\'яднальнік нулявой шырыні + Вы сапраўды хочаце выдаліць усе настроеныя коды клавіш? + Дадатковыя раскладкі + Функцыянальныя клавішы (вялікі экран) + Стыль значкоў + Злучальнік нулявой шырыні + Сметніца + Недапушчальнае імя + Выдаліць + Увод + Shift + Табуляцыя + Shift (націснута) + Маштаб шрыфта клавіятуры + Маштаб шрыфта адлюстравання эмодзі + Маштаб бакавога водступу (альбомная) + Код доўгага націску + Адлегласць змахвання для пераключэння мовы + Наладзіць коды клавіш панэлі інструментаў + Карыстацкі тэкст на клавішы прабела + Прабел (раскладка лічбаў) + Пераключыць бок рэжыму адной рукой + Знайсці і падзяліцца колерамі ў %s. + Знайсці і падзяліцца раскладкамі ў %s. + абмеркавання + Caps lock + Завяршыць рэжым адной рукой + Змяніць памер у рэжыме адной рукой + Галасавы ўвод адключаны + Паказаць / схаваць панэль інструментаў + diff --git a/app/src/main/res/values-bg/strings.xml b/app/src/main/res/values-bg/strings.xml index 15c55bd6..b9509430 100644 --- a/app/src/main/res/values-bg/strings.xml +++ b/app/src/main/res/values-bg/strings.xml @@ -466,4 +466,7 @@ раздел за обсъждане Можете да намирате и споделяте цветове в %s. Персонализиран подтип - \ No newline at end of file + %s (Байсахи) + Показване на TLD изскачащи клавиши + Заместване на изскачащите прозорци с клавиши за период с домейни от първо ниво при въвеждане на URL и имейл адреси + diff --git a/app/src/main/res/values-bn/strings.xml b/app/src/main/res/values-bn/strings.xml index 3c344dad..f6f1e06d 100644 --- a/app/src/main/res/values-bn/strings.xml +++ b/app/src/main/res/values-bn/strings.xml @@ -70,9 +70,7 @@ বহুভাষী টাইপিং অঙ্গুলিহেলন টাইপিং লাইব্রেরি অধিযোগ অঙ্গুলিহেলনের মাধ্যমে টাইপিং সক্রিয় করার জন্য স্থানীয় লাইব্রেরি সরবরাহ - \'%s\' এর জন্য লাইব্রেরি প্রয়োজন। অসামঞ্জস্যপূর্ণ লাইব্রেরি ব্যবহার অঙ্গুলিহেলন টাইপিংয়ের সময় ক্রাশ করতে পারে। -\n -\nসতর্কতা: বাহ্যিক কোডের অধিযোজন নিরাপত্তা ঝুঁকির কারণ হতে পারে। বিশ্বস্ত উৎসের লাইব্রেরি ব্যবহার করুন। + \'%s\' এর জন্য লাইব্রেরি প্রয়োজন। অসামঞ্জস্যপূর্ণ লাইব্রেরি ব্যবহার অঙ্গুলিহেলন টাইপিংয়ের সময় ক্রাশ করতে পারে। \n\nসতর্কতা: বাহ্যিক কোডের অধিযোজন নিরাপত্তা ঝুঁকির কারণ হতে পারে। বিশ্বস্ত উৎসের লাইব্রেরি ব্যবহার করুন। লাইব্রেরি অধিযোগ লাইব্রেরি বিলোপ যতিচিহ্নের পরে স্বয়ংক্রিয় স্পেস @@ -99,7 +97,7 @@ অপরিদৃষ্ট হতে পারে এমন বৈশিষ্ট্যের বর্ণনা ডিভাইস সুরক্ষিত স্টোরেজ ► পিন করে রাখা টুলবার বোতামে দীর্ঘ চাপ দিলে তা অতিরিক্ত কাজ করবে: <br> \n\t• ক্লিপবোর্ড &#65515; পেস্ট <br> \n\t• বামে/ডানে স্থানান্তর &#65515; সম্পূর্ণ বামে/ডানে স্থানান্তর <br> \n\t• উপরে/নিচে স্থানান্তর &#65515; পৃষ্ঠার উপরে/নিচে <br> \n\t• শব্দের ডানে/বামে &#65515; লাইনের শুরু/শেষ <br> \n\t• পাতার উপরে/নিচে &#65515; পাতার শুরু/শেষ <br> \n\t• অনুলিপি &#65515; কর্তন <br> \n\t• শব্দ নির্বাচন &#8596; সমস্ত নির্বাচন <br> \n\t• পূর্বাবস্থা &#8596; পুনরাবৃত্তি <br> <br> \n► পরামর্শ ফলকের টুলবারের কোনো বোতামে দীর্ঘ চাপ দিলে তা পরামর্শ ফলকে আবদ্ধ হবে। <br> <br> \n► কমা বোতামে দীর্ঘ চাপ দিলে ক্লিপবোর্ড দর্শন, ইমোজি দর্শন, একক হাত মোড, সেটিংস অথবা ভাষা পরিবর্তন বোতাম উপলব্ধ হবে:<br> \n\t• সংশ্লিষ্ট বোতাম সক্ষম থাকলে ইমোজি দর্শন বা ভাষা পরিবর্তন বোতাম দৃশ্যমান থাকবে না; <br> \n\t• কিছু লেআউটের জন্য কমা বোতাম নয়, কিন্তু একই জায়গার বোতামটি, যেমন: Dvorak লেআউটে \'q\' বোতাম। <br> <br> \n► ছদ্মবেশী মোড সক্রিয় থাকলে শব্দ শিখন বন্ধ থাকবে, এবং সাম্প্রতিকে কোনো ইমোজি যুক্ত হবে না। <br> <br> \n► ছদ্মবেশী বোতামে চাপ দিলে টুলবার উপলব্ধ হবে। <br> <br> \n► স্লাইডিং কি ইনপুট: বড়ো হাতের অক্ষর লেখার জন্য শিফট বোতাম থেকে অন্য বোতামে অভিস্পর্শ করুন: <br> \n\t• সিম্বল কিবোর্ড থেকে সিম্বল এবং সম্পর্কিত অক্ষর লেখার জন্য \'?123\' বোতামেও এটি কাজ করে।<br> <br> \n► শিফট অথবা প্রতীক বোতাম চেপে ধরে এক বা একাধিক বোতাম চাপার পর শিফট অথবা প্রতীক বোতাম ছেড়ে দিলে তা পূর্ববর্তী কিবোর্ডে নিয়ে যাবে। <br> <br> \n► পরামর্শ ফলকে কোনো পরামর্শে দীর্ঘ চাপ দিলে আরও পরামর্শ, বিলোপ করার জন্য অপসারণ বোতাম প্রদর্শিত হবে। <br> <br> \n► আরও পরামর্শ খুলতে কোনো পরামর্শ থেকে উপরে অভিস্পর্শ করুন এবং নির্দিষ্ট পরামর্শ নির্বাচনের জন্য ছেড়ে দিন। <br> <br> \n► ক্লিপবোর্ড ইতিহাসে কোনো অন্তর্ভুক্তিতে দীর্ঘ চাপ দিয়ে তা পিন করা যাবে (আনপিন না করা পর্যন্ত তা ক্লিপবোর্ডে থাকবে) \n► ক্লিপবোর্ড দর্শনে বাম পাশে অভিস্পর্শ করলে অন্তর্ভুক্তি অপসারণ হবে (যদি না সেটি পিন করা থাকে)। <br> <br> \n► লেখা সিলেক্ট করে শিফট চাপলে তা বড়ো হাতের অক্ষর, ছোটো হাতের অক্ষর এবং সব অক্ষর বড়ো হাতের হবে। <br> <br> \n► আপনি ফাইল এক্সপ্লোরারে খোলার মাধ্যমে অভিধান সংযুক্ত করতে পারেন: <br> \n\t• এটি কেবল <i>content-uris</i> এর সাথে কাজ করে, <i>file-uris</i> এর সাথে নয়। অর্থাৎ কিছু ফাইল এক্সপ্লোরারের সাথে নাও কাজ করতে পারে। <br> <br> \n► রুট উপলব্ধতাসহ ম্যানুয়াল ব্যাকআপ করা ব্যবহারকারীদের জন্য: <br> \nঅ্যান্ড্রয়েড ৭ থেকে শেয়ারড্ প্রেফারেন্স ফাইল ডিফল্ট জায়গা নয়। কারণ অ্যাপ %s ব্যবহার করছে। ডিভাইস আনলকের আগে সেটিংস খোলার জন্য এটি প্রয়োজনীয়, যেমন: বুট করার সময়। <br> \nফাইলটি /data/user_de/0/package_id/shared_prefs/ থাকে। যদিও এটা ডিভাইস এবং অ্যান্ড্রয়েড সংস্করণের উপরে নির্ভর করে। <br> <br> \n<i><b>কেবল ডিবাগ এপিকে</b></i> <br> <br> \n► পরামর্শে দীর্ঘ চাপ দিলে তার উৎস-অভিধান দেখাবে। <br> <br> \n► ডিবাগ সেটিংস উচ্চতর সেটিংসে উপলব্ধ। যদিও লগ ফাইলে অভিধান অবমুক্ত করা ছাড়া এর ব্যবহারযোগ্যতা সীমিত। <br> \n\t• রিলিজ এপিকে এর জন্য <i>সম্পর্কে</i> এর সংস্করণে কয়েকবার চাপ দিতে হবে। তাহলে <i>উচ্চতর</i>-এ ডিবাগ সেটিংস উপলব্ধ হবে। <br> \n\t• <i>পরামর্শ তথ্য প্রদর্শন</i> চালু করলে পরামর্শের উপরে কিছু ছোটো নম্বর থাকবে যা অভ্যন্তরীণ হিসাব ও উৎস অভিধান নির্দেশ করে। <br> <br> \n► অ্যাপ্লিকেশন ক্র্যাশের পরে সেটিংস খুললে আপনি ক্র্যাশ লগ চান কি না তা জিজ্ঞেস করা হবে৷ <br> <br> \n► বহুভাষী টাইপিং ব্যবহারের সময় স্পেসবার বর্তমান ভাষা নির্ধারণের জন্য একটি দৃঢ়তা মান দেখাবে। <br> <br> \n► পরামর্শের উপরে কিছু ছোটো নম্বর থাকবে যা অভ্যন্তরীণ হিসাব ও উৎস অভিধান নির্দেশ করে (নিষ্ক্রিয় করা যেতে পারে)। - সার্বীয় (ল্যাটিন) + সার্বিয়ান (ল্যাটিন) ইংরেজি (ইউকে) (%s) ইংরেজি (ইউএস) (%s) স্প্যানিশ (ইউএস) (%s) @@ -110,15 +108,15 @@ %s (প্রভাত) %s (বৈশাখী) %s (সংক্ষিপ্ত) - %s (সেবালসিক 390) - %s (সেবালসিক Final) + %s (সেবালসিক ৩৯০) + %s (সেবালসিক চূড়ান্ত) ভাষাহীন (বর্ণমালা) - বর্ণমালা (QWERTY) + বর্ণমালা (কোয়ার্টি) বর্ণমালা (QWERTZ) বর্ণমালা (AZERTY) - বর্ণমালা (Dvorak) - বর্ণমালা (Colemak) - বর্ণমালা (Colemak Mod-DH) + বর্ণমালা (ডভোরাক) + বর্ণমালা (কোলেমাক) + বর্ণমালা (কোলেমাক Mod-DH) আলফাবেট (ওয়ার্কম্যান) বর্ণমালা (PC) ইমোজি @@ -133,17 +131,17 @@ ভৌত কিবোর্ডের জন্য ইমোজি ভৌত Alt বোতামে ইমোজি প্যালেট প্রদর্শন ডিফল্ট - "%s এ স্বাগত" + %s এ স্বাগত অঙ্গুলিহেলন টাইপিংয়ের সাথে শুরু করা যাক পরবর্তী পদক্ষেপ - "%s সন্নিবেশিত হচ্ছে" - "%s সক্ষম করুন" - "ভাষা ও ইনপুট সেটিংসে \"%s\" সক্রিয় করুন। ফলে এটি আপনার ডিভাইসে চলার অনুমোদন পাবে।" - "আপনার ভাষা ও ইনপুট সেটিংসে ইতোমধ্যে %s সক্ষম করা হয়েছে; তাই এই পদক্ষেপটি সমাপ্ত হয়েছে। পরবর্তীটিতে যান!" + %s সন্নিবেশিত হচ্ছে + %s সক্ষম করুন + ভাষা ও ইনপুট সেটিংসে \"%s\" সক্রিয় করুন। ফলে এটি আপনার ডিভাইসে চলার অনুমোদন পাবে। + আপনার ভাষা ও ইনপুট সেটিংসে ইতোমধ্যে %s সক্ষম করা হয়েছে; তাই এই পদক্ষেপটি সমাপ্ত হয়েছে। পরবর্তীটিতে যান! সেটিংসে সক্ষম করুন - "%s এ পরিবর্তন করুন" - এখন সক্রিয় লিখন-ইনপুট পদ্ধতি হিসেবে \\%s\" বেছে নিন।\" + %s এ পরিবর্তন করুন + এখন সক্রিয় লিখন-ইনপুট পদ্ধতি হিসেবে \"%s\" বেছে নিন। ইনপুট পদ্ধতি পরিবর্তন "অভিনন্দন, আপনি পুরোপুরি প্রস্তুত!" এখন %s দিয়ে আপনার সব পছন্দের অ্যাপে লিখতে পারবেন। @@ -156,24 +154,17 @@ অভ্যন্তরীণ মূল অভিধান "ফাইল থেকে অভিধান সংযুক্তি" ভাষা নির্বাচন - ব্যবহারকারী-যোগকৃত অভিধান \"%1$s\" প্রতিস্থাপন করতে নিশ্চিত? -\n -\nবর্তমান অভিধান: -\n%2$s -\n -\nনতুন অভিধান: -\n%3$s + ব্যবহারকারী-যোগকৃত অভিধান \"%1$s\" প্রতিস্থাপন করতে নিশ্চিত?\n বর্তমান অভিধান: %2$s\n নতুন অভিধান: %3$s "অভিধান প্রতিস্থাপন" ব্যবহারকারী-সংযুক্ত অভিধান \"%s\" অপসারণ করতে নিশ্চিত? - "অভিধান ব্যতীত কেবল পূর্বে সন্নিবেশিত শব্দের জন্য পরামর্শ পাওয়া যাবে।<br> - আপনি %1$s অভিধান ডাউনলোড করতে পারেন, অথবা \"%2$s\" এর জন্য অভিধান সরাসরি ডাউনলোড করা যায় কি না %3$s যাচাই করতে পারেন।" + অভিধান ব্যতীত কেবল পূর্বে সন্নিবেশিত শব্দের জন্য পরামর্শ পাওয়া যাবে।<br> আপনি %1$s অভিধান ডাউনলোড করতে পারেন, অথবা \"%2$s\" এর জন্য অভিধান সরাসরি ডাউনলোড করা যায় কি না %3$s যাচাই করতে পারেন। পুনরায় প্রদর্শিত হবে না অভিধান যোগ করার জন্য নির্বাচন করুন। %s .dict ফরম্যাটে অভিধান ডাউনলোড করা যেতে পারে। ত্রুটি: এই কিবোর্ডের সাথে সামঞ্জস্যপূর্ণ স্ক্রিপ্ট নয় এখানে "ত্রুটি: নির্বাচিত ফাইলটি বৈধ অভিধান ফাইল নয়" "নির্বাচিত ফাইলটি %1$s এর জন্য, %2$s এর জন্য ফাইল প্রয়োজন। তবুও %2$s এর জন্য ব্যবহৃত হবে?" - "তবুও ব্যবহার করুন" + তবুও ব্যবহৃত হবে অভিধান ফাইল অধিযোজন করতে ত্রুটি অভিধান উপলব্ধ কোনো অভিধান উপলব্ধ নয় @@ -437,7 +428,9 @@ অভিধানসহ ভাষা আলোচনা বিভাগ সতর্কতা: লেআউট বর্তমানে ব্যবহৃত হচ্ছে - আপনি %s-তে রং খোঁজা ও শেয়ার করতে পারেন। - আপনি %s-তে লেআউট খোঁজা ও শেয়ার করতে পারেন। + আপনি %s-তে রং সন্ধান ও শেয়ার করতে পারেন। + আপনি %s-তে লেআউট সন্ধান ও শেয়ার করতে পারেন। নিজস্বীকৃত সাবটাইপ + টিএলডি পপআপ বোতাম প্রদর্শন + ইউআরএল ও ইমেইল ঠিকানা লেখার জন্য দাঁড়ি বোতাম টপ লেভেল ডোমেইন দ্বারা প্রতিস্থাপন diff --git a/app/src/main/res/values-ca/strings.xml b/app/src/main/res/values-ca/strings.xml index f3ca6e92..1320d1e6 100644 --- a/app/src/main/res/values-ca/strings.xml +++ b/app/src/main/res/values-ca/strings.xml @@ -75,16 +75,16 @@ Emojis amb el teclat físic Amb la tecla Alt del teclat físic es mostra la paleta d\'emojis "Predeterminat" - Us donem la benvinguda a%s + Us donem la benvinguda a %s amb escriptura gestual "Comença" "Pas següent" - S\'està configurant%s - Habilita%s + S\'està configurant %s + Habilitar %s Comproveu \\%s\" a la configuració d\'idiomes i entrada. Això li permetrà executar-se al vostre dispositiu.\" %s ja està activada a la configuració d\'idiomes i entrada, així que ja s\'ha acabat aquest pas. Cap al següent!\" Habilita a la configuració - Canvia a%s + Canviar a %s A continuació, seleccioneu \\%s\" com a mètode d\'entrada de text actiu.\" Canvia els mètodes d\'entrada "Enhorabona, ja has acabat!" @@ -423,4 +423,13 @@ Disposicions secundàries Tecles de funció (pantalla gran) Nom no vàlid - \ No newline at end of file + Subtipus personalitzat + %s (Baishakhi) + Avís: la disposició s\'està utilitzant actualment + Idiomes amb diccionaris + Podeu trobar i compartir colors a %s. + Podeu trobar i compartir disposicions a %s. + secció de discussió + Substituir les finestres emergents de la tecla punt per dominis de primer nivell en escriure URLs i adreces de correu electrònic + Mostra tecles emergents de TLD + diff --git a/app/src/main/res/values-cs/strings.xml b/app/src/main/res/values-cs/strings.xml index 07608003..cec8a541 100644 --- a/app/src/main/res/values-cs/strings.xml +++ b/app/src/main/res/values-cs/strings.xml @@ -330,4 +330,4 @@ Zobrazit všechny barvy Klikněte pro náhled %s (Student) - \ No newline at end of file + diff --git a/app/src/main/res/values-da/strings.xml b/app/src/main/res/values-da/strings.xml index 2d47934d..e66f23bc 100644 --- a/app/src/main/res/values-da/strings.xml +++ b/app/src/main/res/values-da/strings.xml @@ -365,4 +365,4 @@ Indlæsning overskriver det nuværende tema Ryd alle tilpassede tastekoder? Ugyldigt navn - \ No newline at end of file + diff --git a/app/src/main/res/values-de/strings.xml b/app/src/main/res/values-de/strings.xml index e0092f3f..9af19dee 100644 --- a/app/src/main/res/values-de/strings.xml +++ b/app/src/main/res/values-de/strings.xml @@ -432,4 +432,7 @@ %s wirklich löschen? Ungültiger Name Benutzerdefinierter Subtyp + %s (Baisakhi) + Zeige TLD-Popup-Tasten + Ersetze Punkt-Tastenpopups mit Top-Level-Domains wenn URLs und Mailadressen eingegeben werden diff --git a/app/src/main/res/values-en-rGB/strings.xml b/app/src/main/res/values-en-rGB/strings.xml index 5d24beb0..3fb416e4 100644 --- a/app/src/main/res/values-en-rGB/strings.xml +++ b/app/src/main/res/values-en-rGB/strings.xml @@ -163,4 +163,4 @@ "Search" "Pause" "Wait" - \ No newline at end of file + diff --git a/app/src/main/res/values-es-rUS/strings.xml b/app/src/main/res/values-es-rUS/strings.xml index 494d7bc1..0a03b783 100644 --- a/app/src/main/res/values-es-rUS/strings.xml +++ b/app/src/main/res/values-es-rUS/strings.xml @@ -404,4 +404,4 @@ Estilo del icono Intro Espacio (diseño numérico) - \ No newline at end of file + diff --git a/app/src/main/res/values-es/strings.xml b/app/src/main/res/values-es/strings.xml index 73bfd95d..c3130ca5 100644 --- a/app/src/main/res/values-es/strings.xml +++ b/app/src/main/res/values-es/strings.xml @@ -423,4 +423,4 @@ Tamaño de fuente de la vista Emoji Escala de relleno lateral (apaisado) Escala de relleno lateral - \ No newline at end of file + diff --git a/app/src/main/res/values-et/strings.xml b/app/src/main/res/values-et/strings.xml index 7364df1e..ad1bf524 100644 --- a/app/src/main/res/values-et/strings.xml +++ b/app/src/main/res/values-et/strings.xml @@ -466,4 +466,7 @@ kogukonna vestlustes Uusi värve võid leida ja jagada %s. Sinu loodud alamtüüp - \ No newline at end of file + %s (Baishakhi) + Näita tippdomeenide hüpikklahve + Võrgu- ja e-posti aadresside kirjutamisel asenda punktuatsiooni hüpikaknad tipptaseme domeenide omadega + diff --git a/app/src/main/res/values-eu/strings.xml b/app/src/main/res/values-eu/strings.xml index ef1fb4f5..10a1140b 100644 --- a/app/src/main/res/values-eu/strings.xml +++ b/app/src/main/res/values-eu/strings.xml @@ -405,4 +405,4 @@ Pertsonalizatu tresna-barrako tekla-kodeak Tekla-kodea Sakatze luzeko kodea - \ No newline at end of file + diff --git a/app/src/main/res/values-fa/strings.xml b/app/src/main/res/values-fa/strings.xml index bc423f8e..dd4c2626 100644 --- a/app/src/main/res/values-fa/strings.xml +++ b/app/src/main/res/values-fa/strings.xml @@ -159,4 +159,4 @@ "جستجو" "مکث" "انتظار" - \ No newline at end of file + diff --git a/app/src/main/res/values-fr/strings.xml b/app/src/main/res/values-fr/strings.xml index fa462a98..2c32cf6f 100644 --- a/app/src/main/res/values-fr/strings.xml +++ b/app/src/main/res/values-fr/strings.xml @@ -104,7 +104,7 @@ "Étape suivante" Configurer %s Activer %s - Sous « Langues et saisie », veuillez cocher %s pour autoriser son exécution sur votre appareil. + Veuillez vérifier que %s est activé dans vos paramètres de langue et de saisie. Cela autorisera son fonctionnement sur votre appareil. L’application %s est déjà activée dans vos paramètres « Langues et saisie ». Passez à l’étape suivante ! "Activer le clavier dans les paramètres" Basculer vers %s @@ -293,42 +293,7 @@ Nouveau dictionnaire: Description des fonctionnalités cachées Montre les caractéristiques qui peuvent passer inaperçues stockage protégé de l\'appareil - ► L\'appui long sur les touches de la barre d\'outils permet d\'obtenir des fonctionnalités supplémentaires : <br> -\n\t• presse-papier &#65515; coller <br> -\n\t• déplacer vers la gauche/droite &#65515; mot de gauche/droite <br> -\n\t• déplacer vers le haut/bas &#65515; page précédente/suivante <br> -\n\t• mot de gauche/droite &#65515; début/fin de ligne <br> -\n\t• page précédente/suivante &#65515; début/fin de page <br> -\n\t• copier &#65515; couper <br> -\n\t• sélectionner mot &#8596; tout sélectionner <br> -\n\t• annuler &#8596; restaurer <br> <br> -\n► Un appui long sur les touches de la barre d\'outils permet de les épingler à la bande de suggestions. <br> <br> -\n► Appuyez longuement sur la virgule pour accéder à l\'affichage du presse-papiers, des emojis, au mode à une main, aux paramètres ou au changement de langue : <br> -\n\t• L\'affichage des emojis et le changement de langue disparaîtront si les touches correspondantes sont affichées ; <br> -\n\t• Pour certaines dispositions, ce n\'est pas sur la touche virgule mais sur la touche à la même position (par exemple, c\'est `q` pour la disposition Dvorak <br> <br> -\n► Lorsque le mode incognito est activé, aucun mot n\'est appris et aucun emojis n\'est ajouté à la catégorie récent. <br> <br> -\n► Appuyez sur l\'icône incognito pour ouvrir la barre d\'outils. <br> <br> -\n► Saisie par glissement des touches : passez de la touche majuscule à une autre touche pour taper un seul caractère en majuscule : <br> -\n\t• Fonctionne également avec la touche `?123` qui permet de taper un seul symbole à partir du clavier des symboles, ainsi que pour les touches associées <br> <br> -\n► Maintenez la touche majuscule ou symbole enfoncée, appuyez sur une ou plusieurs touches, puis relâchez la touche majuscule ou symbole pour revenir au clavier précédent. <br> <br> -\n► Un appui long sur une suggestion dans la bande de suggestions permet d\'afficher d\'autres suggestions et un bouton de suppression qui permet de supprimer cette suggestion. <br> <br> -\n► Balayez vers le haut à partir d\'une suggestion pour ouvrir d\'autres suggestions, puis relâchez la pression sur la suggestion pour la sélectionner. <br> <br> -\n► Appuyez longuement sur une entrée dans l\'historique du presse-papiers pour l\'épingler (elle reste dans le presse-papiers jusqu\'à ce que vous la désépingliez). <br> <br> -\n► Glissez vers la gauche dans l\'affichage du presse-papiers pour supprimer une entrée (sauf lorsqu\'elle est épinglée). <br> <br> -\n► Sélectionnez un texte et appuyez sur la touche majuscule pour passer des majuscules aux minuscules. <br> <br> -\n► Vous pouvez ajouter des dictionnaires en les ouvrant dans un explorateur de fichiers : <br> -\n\t• Ne fonctionne qu\'avec <i>content-uris</i> et non avec <i>file-uris</i>, ce qui signifie que cela peut ne pas fonctionner avec certains explorateurs de fichiers. <br> <br> -\n► Pour les utilisateurs effectuant des sauvegardes manuelles avec un accès root : <br> -\n\t• À partir d\'Android 7, le fichier de préférences partagées ne se trouve pas dans l\'emplacement par défaut car l\'application utilise le %s. Cela est nécessaire pour que les paramètres puissent être lus avant que l\'appareil ne soit déverrouillé, par exemple au démarrage ; <br> -\n\t• Le fichier se trouve dans <i>/data/user_de/0/package_id/shared_prefs/</i> mais cela peut dépendre de l\'appareil et de la version d\'Android. <br> <br> -\n<i><b>Mode debug / APK de debogage</b></i> <br> <br> -\n► Un appui-long sur une suggestion montre la source du dictionnaire. <br> <br> -\n► Lorsque vous utilisez l\'APK de débogage, vous trouverez les paramètres de débogage dans les préférences avancées, bien qu\'ils ne soient pas très utiles, sauf pour transférer les dictionnaires dans le journal de débogage. <br> -\n\t• Pour un APK en version release, vous devez taper plusieurs fois sur la version dans <i>À propos</i>, puis vous trouverez les paramètres de débogage dans les <i>Paramètres avancés</i>. <br> -\n\t• Lorsque l\'option <i>Show suggestion infos</i> est activée, les suggestions sont accompagnées de petits chiffres indiquant un score interne et le dictionnaire source. <br> <br> -\n► Lorsque l\'application se bloque, un message vous demande où vous souhaitez enregistrer les journaux d\'incidents lorsque vous ouvrez les paramètres. <br> <br> -\n► Lors de la saisie multilingue, la barre d\'espace affiche une valeur de fiabilité utilisée pour déterminer la langue en cours d\'utilisation. <br> <br> -\n► Les suggestions seront accompagnées de petits chiffres indiquant un score interne et la source du dictionnaire (peut être désactivé). + ► Un appui long sur les touches de la barre d\\\'outils permet d\\\'obtenir des fonctionnalités supplémentaires : <br> \n\t• presse-papier &#65515; coller <br> \n\t• déplacer vers la gauche/droite &#65515; mot de gauche/droite <br> \n\t• déplacer vers le haut/bas &#65515; page précédente/suivante <br> \n\t• mot de gauche/droite &#65515; début/fin de ligne <br> \n\t• page précédente/suivante &#65515; début/fin de page <br> \n\t• copier &#65515; couper <br> \n\t• sélectionner mot &#8596; tout sélectionner <br> \n\t• annuler &#8596; restaurer <br> <br> \n► Un appui long sur les touches de la barre d\\\'outils permet de les épingler à la bande de suggestions. <br> <br> \n► Appuyez longuement sur la virgule pour accéder à l\\\'affichage du presse-papiers, des émojis, au mode à une main, aux paramètres ou au changement de langue : <br> \n\t• L\\\'affichage des émojis et le changement de langue disparaîtront si les touches correspondantes sont affichées ; <br> \n\t• Pour certaines dispositions, ce n\\\'est pas sur la touche virgule mais sur la touche à la même position (par exemple, c\'est \\\'q\\\' pour la disposition Dvorak <br> <br> \n► Lorsque le mode incognito est activé, aucun mot n\\\'est appris et aucun émojis n\\\'est ajouté à la catégorie récent. <br> <br> \n► Appuyez sur l\\\'icône incognito pour ouvrir la barre d\\\'outils. <br> <br> \n► Saisie par glissement des touches : passez de la touche majuscule à une autre touche pour taper un seul caractère en majuscule : <br> \n\t• Fonctionne également avec la touche \\\'?123\\\' qui permet de taper un seul symbole à partir du clavier des symboles, ainsi que pour les touches associées <br> <br> \n► Maintenez la touche majuscule ou symbole enfoncée, appuyez sur une ou plusieurs touches, puis relâchez la touche majuscule ou symbole pour revenir au clavier précédent. <br> <br> \n► Un appui long sur une suggestion dans la bande de suggestions permet d\\\'afficher d\\\'autres suggestions et un bouton de suppression qui permet de supprimer cette suggestion. <br> <br> \n► Balayez vers le haut à partir d\\\'une suggestion pour ouvrir d\\\'autres suggestions, puis relâchez la pression sur la suggestion pour la sélectionner. <br> <br> \n► Appuyez longuement sur une entrée dans l\\\'historique du presse-papiers pour l\\\'épingler (elle reste dans le presse-papiers jusqu\\\'à ce que vous la désépingliez). <br> <br> \n► Glissez vers la gauche dans l\\\'affichage du presse-papiers pour supprimer une entrée (sauf lorsqu\\\'elle est épinglée). <br> <br> \n► Sélectionnez un texte et appuyez sur la touche majuscule pour passer des majuscules aux minuscules. <br> <br> \n► Vous pouvez ajouter des dictionnaires en les ouvrant dans un explorateur de fichiers : <br> \n\t• Ne fonctionne qu\\\'avec <i>content-uris</i> et non avec <i>file-uris</i>, ce qui signifie que cela peut ne pas fonctionner avec certains explorateurs de fichiers. <br> <br> \n► Pour les utilisateurs effectuant des sauvegardes manuelles avec un accès root : <br> \n\t• À partir d\\\'Android 7, le fichier de préférences partagées ne se trouve pas dans l\\\'emplacement par défaut car l\\\'application utilise le %s. Cela est nécessaire pour que les paramètres puissent être lus avant que l\\\'appareil ne soit déverrouillé, par exemple au démarrage ; <br> \n\t• Le fichier se trouve dans <i>/data/user_de/0/package_id/shared_prefs/</i> mais cela peut dépendre de l\\\'appareil et de la version d\\\'Android. <br> <br> \n<i><b>Mode debug / APK de debogage</b></i> <br> <br> \n► Un appui-long sur une suggestion montre la source du dictionnaire. <br> <br> \n► Lorsque vous utilisez l\\\'APK de débogage, vous trouverez les paramètres de débogage dans les préférences avancées, bien qu\\\'ils ne soient pas très utiles, sauf pour transférer les dictionnaires dans le journal de débogage. <br> \n\t• Pour un APK en version release, vous devez taper plusieurs fois sur la version dans <i>À propos</i>, puis vous trouverez les paramètres de débogage dans les <i>Paramètres avancés</i>. <br> \n\t• Lorsque l\'option <i>Show suggestion infos</i> est activée, les suggestions sont accompagnées de petits chiffres indiquant un score interne et le dictionnaire source. <br> <br> \n► Lorsque l\\\'application se bloque, un message vous demande où vous souhaitez enregistrer les journaux d\\\'incidents lorsque vous ouvrez les paramètres. <br> <br> \n► Lors de la saisie multilingue, la barre d\\\'espace affiche une valeur de fiabilité utilisée pour déterminer la langue en cours d\'utilisation. <br> <br> \n► Les suggestions seront accompagnées de petits chiffres indiquant un score interne et la source du dictionnaire (peut être désactivé). "Améliore les suggestions en fonction des messages et des données saisies" "Accès" "Suiv." @@ -462,4 +427,16 @@ Nouveau dictionnaire: Distance de séparation (paysage) Clavier divisé Voulez-vous vraiment supprimer %s ? - \ No newline at end of file + Nom invalide + Sous-type personnalisé + %s (Baishakhi) + Dispositions secondaires + Touches fonctionnelles (grand écran) + Langues avec dictionnaires + Avertissement : cette mise en page est actuellement utilisée + Vous pouvez trouver et partager des couleurs dans le %s. + Vous pouvez trouver et partager des dispositions dans le %s. + Section de discussion + Afficher les suggestions de domaines (TLD) + Remplacer les suggestions de la touche point par des extensions de domaine (TLD) lors de la saisie d’URL ou d’adresses e-mail + diff --git a/app/src/main/res/values-gl/strings.xml b/app/src/main/res/values-gl/strings.xml index 9ee8d9cb..c2fa7a99 100644 --- a/app/src/main/res/values-gl/strings.xml +++ b/app/src/main/res/values-gl/strings.xml @@ -75,7 +75,7 @@ "Emojis para o teclado físico" "A tecla Alt física mostra a paleta de emoji" "Predeterminado" - Ben vida a%s + Ben vida a %s "con escritura por xestos" "Comezar" "Seguinte paso" @@ -433,4 +433,5 @@ Idiomas con dicionarios zona de conversa Podes atopar e compartir disposicións na %s. - \ No newline at end of file + %s (Baishakhi) + diff --git a/app/src/main/res/values-gu/strings.xml b/app/src/main/res/values-gu/strings.xml index 13633a46..df251d84 100644 --- a/app/src/main/res/values-gu/strings.xml +++ b/app/src/main/res/values-gu/strings.xml @@ -1,10 +1,9 @@ - + - +--> "સંપર્ક નામ શોધો" "કીપ્રેસ પર વાઇબ્રેટ કરો" "કીપ્રેસ પર ધ્વનિ" @@ -76,16 +75,16 @@ "ભૌતિક કીબોર્ડ માટે ઇમોજી" "ભૌતિક Alt કી ઇમોજી પેલેટ દર્શાવે છે" "ડિફોલ્ટ" - "%s પર સ્વાગત છે" + %s પર સ્વાગત છે\" "સાંકેતિક ટાઇપિંગ દ્વારા" "પ્રારંભ કરો" "આગલું પગલું" - "%s સેટ કરી રહ્યું છે" - "%s સક્ષમ કરો" + %s સેટ કરી રહ્યું છે\" + %s સક્ષમ કરો\" "કૃપા કરીને \"%s\" ને તમારી ભાષાઓ અને ઇનપુટ સેટિંગ્સમાં તપાસો. આ તેને તમારા ઉપકરણ પર ચાલવા માટે અધિકૃત કરશે." "%s એ તમારી ભાષાઓ અને ઇનપુટ સેટિંગ્સમાં પહેલાથી જ સક્ષમ કરેલું છે, તેથી આ પગલું પૂર્ણ થયું. હવે આગલા પર!" "સેટિંગ્સમાં સક્ષમ કરો" - "%s પર સ્વિચ કરો" + %s પર સ્વિચ કરો\" "આગલું, \"%s\" ને તમારા સક્રિય ટેક્સ્ટ-ઇનપુટ પદ્ધતિ તરીકે પસંદ કરો." "ઇનપુટ પદ્ધતિઓ પર સ્વિચ કરો" "અભિનંદન, તમે બધું સેટ કર્યું છે!" diff --git a/app/src/main/res/values-hi/strings.xml b/app/src/main/res/values-hi/strings.xml index 288444a6..18cfa548 100644 --- a/app/src/main/res/values-hi/strings.xml +++ b/app/src/main/res/values-hi/strings.xml @@ -3,8 +3,7 @@ Copyright (C) 2008 The Android Open Source Project modified SPDX-License-Identifier: Apache-2.0 AND GPL-3.0-only ---> - +--> "संपर्कों को सर्च करें" "बटन दबाने पर कंपन (वाइब्रेशन) करे" "बटन दबाने पर आवाज़" @@ -76,16 +75,16 @@ "कीबोर्ड के लिए स्माइलीज़" "भौतिक Alt कुंजी इमोजी पैलेट दिखाती है" "सामान्य" - "%s में आपका स्वागत है" + %s में आपका स्वागत है\" "जेस्चर टाइपिंग के साथ" "आरंभ करें" "अगला चरण" - "%s सेट करना" - "%s को चालू करें" + %s सेट करना\" + %s को चालू करें\" "कृपया अपनी भाषा और इनपुट सेटिंग में \"%s\" को सही का निशान लगाकर चुनें. इससे उसे आपके डिवाइस पर चलने की अनुमति मिल जाएगी." "%s आपकी भाषा और इनपुट सेटिंग में पहले से सक्षम है, इसलिए यह चरण पूरा हो गया है. अगले चरण पर जाएं!" "सेटिंग में चालू करें" - "%s पर स्विच करें" + %s पर स्विच करें\" "इसके बाद, \"%s\" को अपने सक्रिय पाठ-इनपुट के तरीके के तौर पर चुनें." "इनपुट पद्धतियां स्विच करें" "बधाई हो, आप बिल्कुल तैयार हैं!" diff --git a/app/src/main/res/values-hr/strings.xml b/app/src/main/res/values-hr/strings.xml index 77549c9c..a65b72f7 100644 --- a/app/src/main/res/values-hr/strings.xml +++ b/app/src/main/res/values-hr/strings.xml @@ -160,4 +160,4 @@ "Traži" "Pauz." "Čekaj" - \ No newline at end of file + diff --git a/app/src/main/res/values-hu/strings.xml b/app/src/main/res/values-hu/strings.xml index 5f4bc907..e2aa6ff7 100644 --- a/app/src/main/res/values-hu/strings.xml +++ b/app/src/main/res/values-hu/strings.xml @@ -326,4 +326,4 @@ eszköz által védett tároló Egy sem Kurzor mozgatása - \ No newline at end of file + diff --git a/app/src/main/res/values-is/strings.xml b/app/src/main/res/values-is/strings.xml index 7e1b596a..6ab84a44 100644 --- a/app/src/main/res/values-is/strings.xml +++ b/app/src/main/res/values-is/strings.xml @@ -423,4 +423,4 @@ Aðgerðalyklar (stór skjár) Ógilt heiti Auka-framsetningar - \ No newline at end of file + diff --git a/app/src/main/res/values-it/strings.xml b/app/src/main/res/values-it/strings.xml index f1702ebb..af8240d3 100644 --- a/app/src/main/res/values-it/strings.xml +++ b/app/src/main/res/values-it/strings.xml @@ -304,7 +304,7 @@ Il dizionario è stato creato per la lingua %1$s, ma lo stai aggiungendo a %2$s. Confermi? Chiudi Traccia dell\'input gestuale - Tocca la lingua per aprire le impostazioni + Lingua: tap → impostazioni Salva log Holo bianco Dizionario interno principale @@ -432,4 +432,11 @@ Scorciatoie correzione Nome non valido Distanza del trascinamento per il cambio lingua - \ No newline at end of file + Sotto-tipo personalizzato + %s (Baishakhi) + Attenzione: il layout è in uso + Lingue con dizionari + discussione dedicata + Scopri nuovi layout o condividi quelli che hai creato nella %s. + Scopri nuove combinazioni di colori o condividi le tue nella %s. + diff --git a/app/src/main/res/values-iw/strings.xml b/app/src/main/res/values-iw/strings.xml index 2b80913c..04bf34fb 100644 --- a/app/src/main/res/values-iw/strings.xml +++ b/app/src/main/res/values-iw/strings.xml @@ -376,7 +376,7 @@ תזוזת התצוגה המקדימה תוך כדי מחווה %s (Extended) %s (Sebeolsik Final) - ◄ לחיצה ממושכת על כפתורי סרגל הכלים מאפשרת פונקציונליות נוספת: <br> \n\t• לוח &#65515; הדבקה <br> \n\t• תזוזה שמאלה/ימינה &#65515; מילה שמאלה/ימינה <br> \n\t• תזוזה למעלה/למטה &#65515; דף למעלה/למטה <br> \n\t• מילה שמאלה/ימינה &#65515; תחילת שורה/סוף שורה <br> \n\t• דף למעלה/למטה &#65515; תחילת דף/סוף דף <br> \n\t• העתקה &#65515; גזירה <br> \n\t• בחירת מילה &#8596; בחירת הכל <br> \n\t• ביטול &#8596; ביצוע בשנית <br> <br> \n◄ לחיצה ממושכת על כפתורים בסרגל ההצעות של סרגל הכלים נועצת אותם בסרגל ההצעות. <br> <br> \n◄ לחיצה ממושכת על מקש פסיק לגישה לתצוגת הלוח, תצוגת אימוג\'ים, מצב עבודה ביד אחת, הגדרות, או מעבר שפה: <br> \n\t• תצוגת אימוג\'ים ומעבר שפה לא יוצגו אם הכפתורים המתאימים כבר מוצגים; <br> \n\t• בחלק מהפריסות האפשרות איננה במקש הפסיק, אלא במקש המוצג באותו מקום (לדוגמה. זה \'q\' בפריסת Dvorak). <br> <br> \n◄ כאשר מצב פרטיות מופעל, לא יילמדו כלל מילים, ולא יתווספו אימוג\'ים ל\'בשימוש לאחרונה\'. <br> <br> \n◄ ליחצו על סמל הפרטיות לגישה לסרגל הכלים. <br> <br> \n◄ הקלדה בהחלקה: החליקו מ-shift למקש אחר כדי להקיש אות גדולה יחידה: <br> \n\t• זה עובד באופן דומה גם למקש \'?123\' להקלדת סימן יחיד מלוח הסמלים, ולמקשים קשורים. <br> <br> \n◄ ליחצו על shift או על מקש הסמלים, ליחצו על מקש אחד או יותר, ואז הרפו מ-shift או ממקש הסמלים לחזרה למקלדת הקודמת. <br> <br> \n◄ לחיצה ממושכת על הצעה בסרגל ההצעות להצגת הצעות נוספות, ומקש מחיקה להסרת הצעה זו. <br> <br> \n◄ החליקו למעלה מהצעה לפתיחת הצעות נוספות, והרפו על ההצעה הרצויה לבחירתה. <br> <br> \n◄ לחיצה ממושכת על רשומה בהיסטוריית הלוח לנעיצתה (שמירתה בלוח עד לביטול הנעיצה). <br> <br> \n◄ החלקה שמאלה על רשומה בתצוגת הלוח להסרתה מהלוח (אם היא לא נעוצה) <br> <br> \n◄ בחירת מלל ולחיצה על shift למעבר בין אותיות גדולות, אותיות קטנות ורישיות מילים גדולות. <br> <br> \n◄ ניתן להוסיף מילונים ע\"י פתיחתם באמצעות יישום סייר קבצים: <br> \n\t• פועל רק עם <i>content-uris</i> ולא עם <i>file-uris</i>, ז\"א שזה עלול שלא לעבוד בחלק מיישומי סייר קבצים. <br> <br> \n◄ משתמשים המבצעים גיבויים ידניים עם הרשאת גישה root: <br> \n\t• החל באנדרואיד 7, קובץ ההעדפות המשותף איננו בנתיב ברירת המחדל, כיוון שהיישום עושה שימוש ב %s. הדבר נחוץ כדי שההגדרות יהיו קריאות לפני שהמכשיר נפתח, לדוגמה: בהפעלה; <br> \n\t• הקובץ ממוקם בנתיב /data/user_de/0/package_id/shared_prefs/ אך זה עשוי להשתנות בתלות בגירסאות המכשיר ומערכת אנדרואיד. <br> <br> \n<i><b>Debug mode / debug APK</b></i> <br> <br> \n◄ לחיצה ממושכת על הצעה להצגת מילון המקור. <br> <br> \n◄ בשימוש ב-debug APK, באפשרותך למצוא את הגדרות ה-Debug Settings בהעדפות המתקדמות,אך השימושיות מוגבלת למעט dumping של מילונים ליומן (log). <br> \n\t• עבור APK רשמי, עליך ללחוץ על הגירסה <i>About</i> מספר פעמים, ואז ניתן למצוא אתהגדרות ה-debug ב-<i>העדפות מתקדמות</i>. <br> \n\t• כאשר מופעלת <i>הצגת מידע על הצעות</i>, יוצגו מספרים זעירים בסמוך להצעות המייצגים דירוג פנימי ומילון מקור. <br> <br> \n◄ במקרה של קריסת יישום, תוצג לך שאלה האם ברצונך ביומני הקריסה בפתיחת ההגדרות. <br> <br> \n◄ בעת שימוש בהקלדה מרובת שפות, מקש הרווח יציג מדד אמון המשמש לברירת השפה שבשימוש כעת. <br> <br> \n◄ בסמוך להצעות יוצגו מספרים זעירים המייצגים דירוג פנימי ומילון מקור (התצוגה ניתנת להשבתה). + ◄ לחיצה ממושכת על כפתורי סרגל הכלים מאפשרת פונקציונליות נוספת: <br> \n\t• לוח &#65515; הדבקה <br> \n\t• תזוזה שמאלה/ימינה &#65515; מילה שמאלה/ימינה <br> \n\t• תזוזה למעלה/למטה &#65515; דף למעלה/למטה <br> \n\t• מילה שמאלה/ימינה &#65515; תחילת שורה/סוף שורה <br> \n\t• דף למעלה/למטה &#65515; תחילת דף/סוף דף <br> \n\t• העתקה &#65515; גזירה <br> \n\t• בחירת מילה &#8596; בחירת הכל <br> \n\t• ביטול &#8596; ביצוע בשנית <br> <br> \n◄ לחיצה ממושכת על כפתורים בסרגל ההצעות של סרגל הכלים נועצת אותם בסרגל ההצעות. <br> <br> \n◄ לחיצה ממושכת על מקש פסיק לגישה לתצוגת הלוח, תצוגת אימוג\'ים, מצב עבודה ביד אחת, הגדרות, או מעבר שפה: <br> \n\t• תצוגת אימוג\'ים ומעבר שפה לא יוצגו אם הכפתורים המתאימים כבר מוצגים; <br> \n\t• בחלק מהפריסות האפשרות איננה במקש הפסיק, אלא במקש המוצג באותו מקום (לדוגמה, בפריסת Dvorak התו \'q\'). <br> <br> \n◄ כאשר מצב פרטיות מופעל, לא יילמדו כלל מילים, ולא יתווספו אימוג\'ים ל\'בשימוש לאחרונה\'. <br> <br> \n◄ ליחצו על סמל הפרטיות לגישה לסרגל הכלים. <br> <br> \n◄ הקלדה בהחלקה: החליקו מ-shift למקש אחר כדי להקיש אות גדולה יחידה: <br> \n\t• זה עובד באופן דומה גם למקש \'?123\' להקלדת סימן יחיד מלוח הסמלים, ולמקשים קשורים. <br> <br> \n◄ ליחצו על shift או על מקש הסמלים, ליחצו על מקש אחד או יותר, ואז הרפו מ-shift או ממקש הסמלים לחזרה למקלדת הקודמת. <br> <br> \n◄ לחיצה ממושכת על הצעה בסרגל ההצעות להצגת הצעות נוספות, ומקש מחיקה להסרת הצעה זו. <br> <br> \n◄ החליקו למעלה מהצעה לפתיחת הצעות נוספות, והרפו על ההצעה הרצויה לבחירתה. <br> <br> \n◄ לחיצה ממושכת על רשומה בהיסטוריית הלוח לנעיצתה (שמירתה בלוח עד לביטול הנעיצה). <br> <br> \n◄ החלקה שמאלה על רשומה בתצוגת הלוח להסרתה מהלוח (אם היא לא נעוצה) <br> <br> \n◄ בחירת מלל ולחיצה על shift למעבר בין אותיות גדולות, אותיות קטנות ורישיות מילים גדולות. <br> <br> \n◄ ניתן להוסיף מילונים ע\"י פתיחתם באמצעות יישום סייר קבצים: <br> \n\t• פועל רק עם <i>content-uris</i> ולא עם <i>file-uris</i>, ז\"א שזה עלול שלא לעבוד בחלק מיישומי סייר קבצים. <br> <br> \n◄ משתמשים המבצעים גיבויים ידניים עם הרשאת גישה root: <br> \n\t• החל באנדרואיד 7, קובץ ההעדפות המשותף איננו בנתיב ברירת המחדל, כיוון שהיישום עושה שימוש ב %s. הדבר נחוץ כדי שההגדרות יהיו קריאות לפני שהמכשיר נפתח, לדוגמה: בהפעלה; <br> \n\t• הקובץ ממוקם בנתיב /data/user_de/0/package_id/shared_prefs/ אך זה עשוי להשתנות בתלות בגירסאות המכשיר ומערכת אנדרואיד. <br> <br> \n<i><b>Debug mode / debug APK</b></i> <br> <br> \n◄ לחיצה ממושכת על הצעה להצגת מילון המקור. <br> <br> \n◄ בשימוש ב-debug APK, באפשרותך למצוא את הגדרות ה-Debug Settings בהעדפות המתקדמות,אך השימושיות מוגבלת למעט dumping של מילונים ליומן (log). <br> \n\t• עבור APK רשמי, עליך ללחוץ על הגירסה <i>About</i> מספר פעמים, ואז ניתן למצוא אתהגדרות ה-debug ב-<i>העדפות מתקדמות</i>. <br> \n\t• כאשר מופעלת <i>הצגת מידע על הצעות</i>, יוצגו מספרים זעירים בסמוך להצעות המייצגים דירוג פנימי ומילון מקור. <br> <br> \n◄ במקרה של קריסת יישום, תוצג לך שאלה האם ברצונך ביומני הקריסה בפתיחת ההגדרות. <br> <br> \n◄ בעת שימוש בהקלדה מרובת שפות, מקש הרווח יציג מדד אמון המשמש לברירת השפה שבשימוש כעת. <br> <br> \n◄ בסמוך להצעות יוצגו מספרים זעירים המייצגים דירוג פנימי ומילון מקור (התצוגה ניתנת להשבתה). %s (Probhat) %s (Sebeolsik 390) אלפבית (Bépo) @@ -398,7 +398,7 @@ טאב מחיקה שיפט - Caps lock + Caps lock (אותיות אנגליות גדולות) התאמת סמלים מחבר אורך-אפס התאמת קודי המקשים בסרגל הכלים @@ -426,4 +426,17 @@ הפעלת אפשרות מקלדת מפוצלת (במצב אופקי) מרחק הפיצול (במצב אופקי) מקלדת מפוצלת - \ No newline at end of file + השם אינו תקף + תת-סוג מותאם + %s (באישאקי) + התרעה: הפריסה בשימוש כעת + מקשים פונקציונליים (מסך גדול) + דרגווה (אוראקי) + אוראקי(%s) + באמת למחוק את %s? + פריסות משניות + שפות ומילונים + באפשרותך למצוא ולשתף צבעים ב %s. + באפשרותך למצוא ולשתף פריסות ב %s. + מקטע הדיונים + diff --git a/app/src/main/res/values-ja/strings.xml b/app/src/main/res/values-ja/strings.xml index d1a6f975..bcaa4b17 100644 --- a/app/src/main/res/values-ja/strings.xml +++ b/app/src/main/res/values-ja/strings.xml @@ -75,16 +75,16 @@ "物理キーボードの絵文字" "物理Altキーによって絵文字パレットが表示されます" "デフォルト" - "%sへようこそ" + %sへようこそ\" "新しいジェスチャー入力をお試しください" "開始" "次のステップ" - "%sの設定" - "%sの有効化" + %sの設定\" + %sの有効化\" [言語と入力] 設定で%s」のチェックボックスをオンにしてください。これで、このデバイスで利用できるようになります。\" "[言語と入力] 設定で「%s」は既に有効になっているため、このステップは完了です。次のステップに進んでください。" "設定での有効化" - "%sへの切り替え" + %sへの切り替え\" 次に、有効なテキスト入力方法として%s」を選択します。\" "入力方法を切り替える" "設定完了" @@ -123,4 +123,4 @@ "検索" "停止" "待機" - \ No newline at end of file + diff --git a/app/src/main/res/values-ka/strings.xml b/app/src/main/res/values-ka/strings.xml index d940c0ff..04b1e76f 100644 --- a/app/src/main/res/values-ka/strings.xml +++ b/app/src/main/res/values-ka/strings.xml @@ -161,4 +161,4 @@ "ძიება" "პაუზა" "მოცდა" - \ No newline at end of file + diff --git a/app/src/main/res/values-kk/strings.xml b/app/src/main/res/values-kk/strings.xml index e303dbd9..7ac65853 100644 --- a/app/src/main/res/values-kk/strings.xml +++ b/app/src/main/res/values-kk/strings.xml @@ -1,10 +1,9 @@ - + - +--> "Контакт аттарын іздеу" "Пернені басқан кездегі діріл" "Пернені басу кезіндегі дыбыс" @@ -76,16 +75,16 @@ "Қатты пернетақтадан енгізілетін эмодзи" "Alt пернесі арқылы эмодзилерді ашуға болады" "Әдепкі" - "%s қолданбасына қош келдіңіз" + %s қолданбасына қош келдіңіз\" "Қимылмен теру арқылы" "Іске қосылды" "Келесі қадам" - "%s орнату" - "%s қосу" + %s орнату\" + %s қосу\" "\"Тілдер және енгізу\" параметрлерінде %s қолданбасына құсбелгі қойыңыз. Сонда оны құрылғыңызда қолдануға рұқсат беріледі." "%s қолданбасы \"Тілдер және енгізу\" параметрлерінде бұрыннан қосылған. Келесі қадамға өтіңіз!" "Параметрлер ішінде қосу" - "%s қолданбасына ауыстыру" + %s қолданбасына ауыстыру\" "Одан кейін \"%s\" қолданбасын белсенді мәтінді енгізу әдісі ретінде таңдаңыз." "Енгізу әдістерін ауыстыру" "Құттықтаймыз, барлығы дайын!" diff --git a/app/src/main/res/values-kn/strings.xml b/app/src/main/res/values-kn/strings.xml index 562f5d46..10e8f28e 100644 --- a/app/src/main/res/values-kn/strings.xml +++ b/app/src/main/res/values-kn/strings.xml @@ -1,10 +1,9 @@ - + - +--> "ಸಂಪರ್ಕ ಹೆಸರುಗಳನ್ನು ಹುಡುಕಿ" "ಕೀಪ್ರೆಸ್‌ನ ವೈಬ್ರೇಟ್" "ಕೀಪ್ರೆಸ್ ಶಬ್ದ" @@ -77,16 +76,16 @@ "ಭೌತಿಕ ಕೀಬೋರ್ಡ್‌ಗೆ ಎಮೋಜಿ" "ಭೌತಿಕ Alt ಕೀ ಎಮೋಜಿ ಪ್ಯಾಲೆಟ್ ತೋರಿಸುತ್ತದೆ" "ಡಿಫಾಲ್ಟ್" - "%s ಗೆ ಸುಸ್ವಾಗತ" + %s ಗೆ ಸುಸ್ವಾಗತ\" "ಗೆಶ್ಚರ್ ಟೈಪಿಂಗ್‌ನೊಂದಿಗೆ" "ಪ್ರಾರಂಭ" "ಮುಂದಿನ ಹಂತ" - "%s ಅನ್ನು ಹೊಂದಿಸಲಾಗುತ್ತಿದೆ" - "%s ಸಕ್ರಿಯಗೊಳಿಸಿ" + %s ಅನ್ನು ಹೊಂದಿಸಲಾಗುತ್ತಿದೆ\" + %s ಸಕ್ರಿಯಗೊಳಿಸಿ\" "ನಿಮ್ಮ ಭಾಷೆಗಳು & ಇನ್‌ಪುಟ್ ಸೆಟ್ಟಿಂಗ್‌ಗಳಲ್ಲಿ ದಯವಿಟ್ಟು \"%s\" ಅನ್ನು ಪರಿಶೀಲಿಸಿ. ನಿಮ್ಮ ಸಾಧನದಲ್ಲಿ ಅದನ್ನು ರನ್ ಮಾಡಲು ಅದು ಅನುಮತಿ ನೀಡುತ್ತದೆ." "%s ಅನ್ನು ಈಗಾಗಲೇ ನಿಮ್ಮ ಭಾಷೆಗಳು & ಇನ್‌ಪುಟ್ ಸೆಟ್ಟಿಂಗ್‌ಗಳಲ್ಲಿ ಸಕ್ರಿಯಗೊಳಿಸಲಾಗಿದೆ, ಹೀಗಾಗಿ ಈ ಹಂತ ಮುಗಿದಿದೆ. ಮುಂದಿನದಕ್ಕೆ ತೆರಳಿ!" "ಸೆಟ್ಟಿಂಗ್‌ಗಳಲ್ಲಿ ಸಕ್ರಿಯಗೊಳಿಸು" - "%s ಗೆ ಬದಲಾಯಿಸಿ" + %s ಗೆ ಬದಲಾಯಿಸಿ\" "ಮುಂದೆ, ನಿಮ್ಮ ಸಕ್ರಿಯ ಪಠ್ಯ-ಇನ್‌ಪುಟ್ ವಿಧಾನವಾಗಿ \"%s\" ಅನ್ನು ಆಯ್ಕೆಮಾಡಿ." "ಇನ್‌ಪುಟ್ ವಿಧಾನಗಳನ್ನು ಬದಲಾಯಿಸು" "ಅಭಿನಂದನೆಗಳು, ನೀವೀಗ ಎಲ್ಲವನ್ನೂ ಹೊಂದಿಸಿರುವಿರಿ!" diff --git a/app/src/main/res/values-ko/strings.xml b/app/src/main/res/values-ko/strings.xml index 73c70a95..0863c823 100644 --- a/app/src/main/res/values-ko/strings.xml +++ b/app/src/main/res/values-ko/strings.xml @@ -160,4 +160,4 @@ "검색" "중지" "대기" - \ No newline at end of file + diff --git a/app/src/main/res/values-ky/strings.xml b/app/src/main/res/values-ky/strings.xml index f054ab99..c038863d 100644 --- a/app/src/main/res/values-ky/strings.xml +++ b/app/src/main/res/values-ky/strings.xml @@ -1,10 +1,9 @@ - + - +--> "Байланыш ысымдарын издөө" "Баскыч басылганда дирилдесин" "Баскычты басканда үн чыгат" @@ -76,16 +75,16 @@ "Тышкы тергич үчүн быйтыкчалар" "Alt баскычы басылганда быйтыкчалар тактасы көрүнөт" "Демейки" - "%s кош келиңиз" + %s кош келиңиз\" "Жаңсап терүү менен" "Баштоо" "Кийинки кадам" - "%s орнотулууда" - "%s иштетүү" + %s орнотулууда\" + %s иштетүү\" "Тилдер жана киргизүү жөндөөлөрүнөн \"%s\" колдонмосун караңыз. Ушуну менен аны түзмөгүңүздө иштете аласыз." "%s мурунтан эле Тилдер жана киргизүү жөндөөлөрүндө иштетилгендиктен бул кадам аткарылды деп, кийинкисине өтө бериңиз!" "Жөндөөлөрдөн иштетүү" - "%s которулуу" + %s которулуу\" "Андан соң, \"%s\" жигердүү текст киргизүү ыкмасы катары коюңуз." "Киргизүү ыкмаларын которуштуруу" "Куттуктайбыз, бардыгы коюлду!" diff --git a/app/src/main/res/values-ml/strings.xml b/app/src/main/res/values-ml/strings.xml index 9f8455cf..72c161fc 100644 --- a/app/src/main/res/values-ml/strings.xml +++ b/app/src/main/res/values-ml/strings.xml @@ -160,4 +160,4 @@ "തിരയുക" "താൽക്കാലികമായി നിർത്തുക" "കാത്തിരിക്കുക" - \ No newline at end of file + diff --git a/app/src/main/res/values-mn/strings.xml b/app/src/main/res/values-mn/strings.xml index 686d5e25..6ab81579 100644 --- a/app/src/main/res/values-mn/strings.xml +++ b/app/src/main/res/values-mn/strings.xml @@ -1,10 +1,9 @@ - + - +--> "Харилцагчийн нэр хайх" "Товч дарахад чичрэх" "Товч дарахад дуу гаргах" @@ -80,12 +79,12 @@ "Зангаагаар бичихээр" "Эхлэх" "Дараагийн алхам" - "%s-г тохируулж байна" - "%s-г идэвхжүүлэх" + %s-г тохируулж байна\" + %s-г идэвхжүүлэх\" "Хэл, оролтын тохиргоо хэсгээс \"%s\"-г сонгоно уу. Ингэснээр үүнийг таны төхөөрөмжид ажиллах зөвшөөрлийг өгөх болно." "%s-г Хэл, оролтын тохиргоонд аль хэдийн идэвхжүүлснээр энэ алхам дууслаа. Дараагийн алхмыг хийцгээе!" "Тохиргоо дотроос идэвхжүүлэх" - "%s рүү шилжих" + %s рүү шилжих\" "Дараа нь \"%s\"-г өөрийн идэвхтэй текст-оруулах аргаар сонгоно уу." "Оруулах аргыг солих" "Баяр хүргэе, та бүгдийг нь тохируулчихлаа!" diff --git a/app/src/main/res/values-mr/strings.xml b/app/src/main/res/values-mr/strings.xml index 034ce623..154a9169 100644 --- a/app/src/main/res/values-mr/strings.xml +++ b/app/src/main/res/values-mr/strings.xml @@ -1,10 +1,9 @@ - + - +--> "संपर्क नावे शोधा" "की दाबताना व्हायब्रेट" "की दाबताना आवाज" @@ -76,16 +75,16 @@ "वास्तविक कीबोर्डसाठी इमोजी" "वास्तविक Alt की इमोजी पॅलेट दर्शविते" "डीफॉल्ट" - "%s वर स्वागत आहे" + %s वर स्वागत आहे\" "जेश्चर टायपिंग करून" "सुरू करा" "पुढील चरण" - "%s सेट अप करत आहे" - "%s सुरू करा" + %s सेट अप करत आहे\" + %s सुरू करा\" "कृपया आपल्या भाषांमध्ये आणि इनपुट सेटिंग्जमध्ये \"%s\" तपासा. आपल्या डिव्हाइसवर चालण्यासाठी त्यास हे अधिकृत करेल." "%s आपल्या भाषांमध्ये आणि इनपुट सेटिंग्जमध्ये आधीपासून सक्षम केला आहे, त्यामुळे हे चरण पूर्ण झाले आहे. पुढील चरणावर!" "सेटिंग्जमध्ये सुरू करा" - "%s वर स्विच करा" + %s वर स्विच करा\" "पुढे, तुमची सक्रिय मजकूर-इनपुट पद्धत म्हणून \"%s\" निवडा." "इनपुट पद्धती स्विच करा" "अभिनंदन, आता तुम्ही तयार आहात!" diff --git a/app/src/main/res/values-my/strings.xml b/app/src/main/res/values-my/strings.xml index f0fdd8d3..c9c82653 100644 --- a/app/src/main/res/values-my/strings.xml +++ b/app/src/main/res/values-my/strings.xml @@ -1,10 +1,9 @@ - + - +--> "အဆက်အသွယ်အမည်များကို ရှာ" "ခလုတ်နှိပ်သည်နှင့် တုံခါစေပါ" "ခလုတ်နှိပ်လျှင် အသံမြည်" @@ -76,16 +75,16 @@ "ခလုတ်ရှိ ကီးဘုတ်အတွက် အီမိုဂျိ" "အီမိုဂျီ ဘုတ်ပြားပြသော Alt ခလုတ်" "ပုံသေ" - "%s မှကြိုဆိုပါသည်" + %s မှကြိုဆိုပါသည်\" "အမူယာ ရိုက်ခြင်းဖြင့်" "စတင်ပါတော့" "နောက်တစ်ဆင့်" - "%s တပ်ဆင်ရန်" - "%s ဖွင့်ရန်" + %s တပ်ဆင်ရန်\" + %s ဖွင့်ရန်\" "\"%s\" ကို ဘာသာစကားနှင့် စာရိုက်စနစ်တွင် စစ်ပါ။ ဤသို့ဖြင့် သင့်စက်ပစ္စည်းပေါ်တွင် ၎င်းကိုဖွင့်ရန်အတည်ပြုပေးပါလိမ့်မည်။" "%s ကို သင့်ဘာသာစကားနှင့် စာရိုက်စနစ်ဆက်တင်များတွင် ဖွင့်ထားပြီးဖြစ်၍ ဤအဆင့်ပြီးပါပြီ။ နောက်တစ်ခုသို့ သွားပါ။" "ဆက်တင်များတွင် ဖွင့်ရန်" - "%s သို့ပြောင်းမည်" + %s သို့ပြောင်းမည်\" "ရှေ့၊ \"%s\" အားသင်၏ ပွင့်နေသည့်ထည့်သွင်းမှု နည်းလမ်းအဖြစ်ရွေးပါ။" "စာရိုက်သွင်းမှုနည်းလမ်း ပြောင်းရန်" "ဝမ်းသာပါသည်၊ သင်အားလုံးသတ်မှတ်ပြီးပါပြီ!" diff --git a/app/src/main/res/values-nb/strings.xml b/app/src/main/res/values-nb/strings.xml index 75fe1329..b881f583 100644 --- a/app/src/main/res/values-nb/strings.xml +++ b/app/src/main/res/values-nb/strings.xml @@ -328,4 +328,4 @@ Kaitag (%s) ► Et langt trykk på utklippstavlen (den valgfrie i forslagsstripen) limer inn innholdet i systemets utklippstavle. <br> <br> ► Et langt trykk på tastene på verktøylinjen for forslagsstripen fester dem til forslagsstripen. <br> <br> ► Trykk lenge på komma-tasten for å få tilgang til utklippstavlevisning, emojivisning, enhåndsmodus, innstillinger eller språkbytte: <br> \t• Emoji View og språkbytteknappen forsvinner hvis du har den tilsvarende nøkkelen aktivert; <br> \t• For noen oppsett er det ikke kommatasten, men tasten i samme posisjon (f.eks. er det \"q\" for Dvorak-oppsettet). <br> <br> ► Når inkognitomodus er aktivert, vil ingen ord læres, og ingen emojier blir lagt til i \"nylige\". <br> <br> ► Trykk på inkognitoikonet for å få tilgang til verktøylinjen. <br> <br> ► Skyvetastinntasting: Sveip fra skift til en annen tast for å skrive inn en enkelt stor bokstav: <br> \t• Dette fungerer også for \'?123\'-tasten for å skrive inn et enkelt symbol fra symboltastaturet, og for relaterte taster. <br> <br> ► Trykk lenge på et forslag i forslagsstripen for å vise flere forslag, og sletteknappen for å fjerne dette forslaget. <br> <br> ► Sveip opp fra et forslag for å åpne flere forslag, og slipp forslaget for å velge det. <br> <br> ► Trykk lenge på en oppføring i utklippstavleloggen for å feste den (behold den i utklippstavlen til du løsner den). <br> <br> ► Du kan legge til ordbøker ved å åpne dem i en filutforsker: <br> \t• Dette fungerer bare med <i>content-uris</i> og ikke med <i>file-uris</i>, noe som betyr at det kanskje ikke fungerer med enkelte filutforskere. <br> <br> <i>Feilsøkingsmodus / feilsøk APK</i> <br> <br> \t• Trykk lenge på et forslag for å vise kildeordboken.<br> <br> \t• Når du bruker debug APK, kan du finne feilsøkingsinnstillinger i de avanserte innstillingene, selv om nytten er begrenset bortsett fra å dumpe ordbøker i loggen. <br> <br> \t• Ved et programkrasj vil du bli spurt om du vil ha krasjloggene når du åpner Innstillinger. <br> <br> \t• Når du bruker flerspråklig skriving, vil mellomromstasten vise en konfidensverdi som brukes til å bestemme språket som brukes for øyeblikket. <br> <br> \t• \"Forslag\" vil ha noen små tall på toppen som viser noe internt partitur og kildeordbok (kan deaktiveres). <br> <br> ► For brukere som tar manuelle sikkerhetskopier med rottilgang: Fra og med Android 7 er ikke den delte preferansefilen på standardplasseringen, fordi appen bruker %s. <br> Dette er nødvendig for at innstillingene kan leses før enheten låses opp, f.eks. ved oppstart. <br> Filen ligger i /data/user_de/0/package_id/shared_prefs/, men dette kan avhenge av enheten og Android-versjonen. %s (Student) - \ No newline at end of file + diff --git a/app/src/main/res/values-ne/strings.xml b/app/src/main/res/values-ne/strings.xml index 49900c27..fec0e895 100644 --- a/app/src/main/res/values-ne/strings.xml +++ b/app/src/main/res/values-ne/strings.xml @@ -84,7 +84,7 @@ "कृपया आफ्नो भाषा र इनपुट सम्बन्धी सेटिङहरूमा \"%s\" अनुप्रयोगलाई जाँच गर्नुहोस्। यस कारबाहीले अनुप्रयोगलाई तपाईँको यन्त्रमा सञ्चालन हुन आधिकार प्रदान गर्ने छ।" "तपाईँको भाषा र इनपुट सम्बन्धी सेटिङहरूमा %s लाई पहिले नै सक्रिय गरिएको छ, त्यसैले यो चरण सम्पन्न भइसकेको छ। अर्को चरणमा जानुहोस्!" "सेटिङहरूमा सक्षम पार्नुहोस्" - "%sमा स्विच गर्नुहोस्" + %sमा स्विच गर्नुहोस्\" "त्यसपछि, \"%s\" लाई तपाईँको सक्रिय पाठ इनपुट विधिका रूपमा चयन गर्नुहोस्।" "इनपुट विधि स्विच गर्नुहोस्" "बधाई छ, तपाईँले सेट पुरा गर्नुभयो!" @@ -125,4 +125,4 @@ "रोक्नुहोस्" "पर्खनुहोस्" हेलीबोर्ड हिज्जे जाँचकर्ता - \ No newline at end of file + diff --git a/app/src/main/res/values-nl/strings.xml b/app/src/main/res/values-nl/strings.xml index 71ac1c1b..81ddbdbf 100644 --- a/app/src/main/res/values-nl/strings.xml +++ b/app/src/main/res/values-nl/strings.xml @@ -476,4 +476,6 @@ Je kunt lay-outs zoeken en delen in de %s. discussiesectie %s (Baishakhi) + TLD-opties weergeven + Vervang pop-ups met interpunctie door topleveldomeinen bij het typen van URL\'s en e-mailadressen diff --git a/app/src/main/res/values-pa/strings.xml b/app/src/main/res/values-pa/strings.xml index 089c5e81..6cfaeee8 100644 --- a/app/src/main/res/values-pa/strings.xml +++ b/app/src/main/res/values-pa/strings.xml @@ -1,10 +1,9 @@ - + - +--> "ਸੰਪਰਕ ਨਾਮ ਤਲਾਸ਼ੋ" "ਕੁੰਜੀ ਦਬਾਉਣ ’ਤੇ ਥਰਥਰਾਹਟ ਕਰੋ" "ਕੁੰਜੀ ਦਬਾਉਣ \'ਤੇ ਧੁਨ ਵਜਾਓ" @@ -76,16 +75,16 @@ "ਭੌਤਿਕ ਕੀ-ਬੋਰਡ ਲਈ ਇਮੋਜੀ" "ਭੌਤਿਕ Alt ਕੁੰਜੀ ਇਮੋਜੀ ਪੈਲੇਟ ਦਿਖਾਉਂਦੀ ਹੈ" "ਪੂਰਵ-ਨਿਰਧਾਰਤ" - "%s ਤੇ ਸੁਆਗਤ ਹੈ" + %s ਤੇ ਸੁਆਗਤ ਹੈ\" "ਸੰਕੇਤ ਟਾਈਪਿੰਗ ਨਾਲ" "ਸ਼ੁਰੂਆਤ ਕਰੋ" "ਅਗਲਾ ਸਟੈਪ" - "%s ਸੈਟ ਅਪ ਕਰ ਰਿਹਾ ਹੈ" - "%s ਨੂੰ ਸਮਰੱਥ ਬਣਾਓ" + %s ਸੈਟ ਅਪ ਕਰ ਰਿਹਾ ਹੈ\" + %s ਨੂੰ ਸਮਰੱਥ ਬਣਾਓ\" "ਕਿਰਪਾ ਕਰਕੇ ਆਪਣੀਆਂ ਭਾਸ਼ਾਵਾਂ ਅਤੇ ਇਨਪੁੱਟ ਸੈਟਿੰਗਾਂ ਵਿੱਚ \"%s\" \'ਤੇ ਸਹੀ ਦਾ ਨਿਸ਼ਾਨ ਲਗਾਓ। ਇਹ ਉਸ ਨੂੰ ਤੁਹਾਡੇ ਡੀਵਾਈਸ \'ਤੇ ਚੱਲਣ ਲਈ ਅਧਿਕਾਰਿਤ ਕਰੇਗਾ।" "%s ਨੂੰ ਪਹਿਲਾਂ ਹੀ ਤੁਹਾਡੀਆਂ ਭਾਸ਼ਾਵਾਂ ਅਤੇ ਇਨਪੁੱਟ ਸੈਟਿੰਗਾਂ ਵਿੱਚ ਚਾਲੂ ਕੀਤਾ ਗਿਆ ਹੈ, ਇਸ ਲਈ ਇਹ ਪੜਾਅ ਪੂਰਾ ਹੋ ਗਿਆ ਹੈ। ਅਗਲੇ ਪੜਾਅ \'ਤੇ ਜਾਓ!" "ਸੈਟਿੰਗਾਂ ਵਿੱਚ ਚਾਲੂ ਕਰੋ" - "%s \'ਤੇ ਸਵਿੱਚ ਕਰੋ" + %s \'ਤੇ ਸਵਿੱਚ ਕਰੋ\" "ਫਿਰ, \"%s\" ਨੂੰ ਆਪਣੀ ਕਿਰਿਆਸ਼ੀਲ ਲਿਖਤ-ਇਨਪੁੱਟ ਵਿਧੀ ਦੇ ਤੌਰ ਤੇ ਚੁਣੋ।" "ਇਨਪੁੱਟ ਵਿਧੀਆਂ ਸਵਿੱਚ ਕਰੋ" "ਵਧਾਈ ਹੋਵੇ, ਤੁਸੀਂ ਸਾਰਾ ਸੈਟ ਕਰ ਲਿਆ ਹੈ!" diff --git a/app/src/main/res/values-pl/strings.xml b/app/src/main/res/values-pl/strings.xml index c2fb7cfd..53ee52e1 100644 --- a/app/src/main/res/values-pl/strings.xml +++ b/app/src/main/res/values-pl/strings.xml @@ -94,7 +94,7 @@ "Pokaż ikonę aplikacji" "Wyświetlaj ikonę aplikacji w programie uruchamiającym" "Słowniki dodatkowe" - "Słownik dostępny" + Dostępny słownik "Brak słowników" "Ostatnia aktualizacja" "Ustawienia" @@ -174,13 +174,13 @@ Błąd podczas przywracania kopii zapasowej: %s Kolory Tło klawiszy funkcyjnych - %s (Sebeolsik 390) + %s (Sebeolsik 390) Używaj słownika osobistego do przechowywania nauczonych słów To słowo znajduje się już w słowniku: %s. Wpisz inne. Zaokrąglony Kopia Czarne - %s (Sebeolsik Final) + %s (Sebeolsik Final) Czekoladowe Na pewno usunąć słownik \"%s\" dodany przez użytkownika? Pochmurne @@ -195,7 +195,7 @@ Różowe Języki i układy Nie można odczytać pliku - stąd + tutaj Błąd: wybrany plik nie jest prawidłowym plikiem słownika chronionej pamięci urządzenia Koloruj pasek nawigacyjny @@ -360,7 +360,7 @@ Spacja - przesuwanie pionowe Spacja - przesuwanie poziome Przesuń kursor - Brak przesuwania + Brak Odwróć kierunek po wybraniu układu klawiatury od prawej do lewej Zmienny kierunek paska narzędzi %s (Probhat) @@ -392,7 +392,7 @@ Emotikony Ustaw główny i do 6 drugorzędnych symboli waluty, oddzielonych spacją Dostosuj waluty - Załaduj + Dodaj Skopiuj do schowka Ładowanie spowoduje zastąpienie bieżącego motywu Zapisz do pliku @@ -471,7 +471,11 @@ Nieprawidłowa nazwa Języki ze słownikami Ostrzeżenie: ten układ jest aktualnie używany - Motywy możesz znaleźć i udostępnić w %s . - Układy możesz znaleźć i udostępnić w %s . + Motywy możesz znaleźć i udostępnić w %s. + Układy możesz znaleźć i udostępnić w %s. sekcji dyskusji - \ No newline at end of file + Własny układ + %s (Baishakhi) + Pokaż wyskakujące okienka TLD + Zastąp wyskakujące okienka klawisza kropki domenami najwyższego poziomu podczas wpisywania adresów URL i adresów e-mail + diff --git a/app/src/main/res/values-pt-rBR/strings.xml b/app/src/main/res/values-pt-rBR/strings.xml index 64989d80..d3804bc1 100644 --- a/app/src/main/res/values-pt-rBR/strings.xml +++ b/app/src/main/res/values-pt-rBR/strings.xml @@ -123,7 +123,7 @@ Alfabeto (Colemak) Alfabeto (Colemak Mod-DH) Alfabeto (Workman) - Bem-vindo ao%s + Bem-vindo ao %s Mostrar a paleta de emojis ao tocar na tecla Alt física Configurando %s Por favor, ative o \\%s\" em \'Idiomas e Entrada\' nas configurações. Isso permitirá que ele seja usado no seu dispositivo.\" @@ -439,4 +439,6 @@ seção de discussão Subtipo customizado %s (Baishakhi) + Mostrar teclas de TLD + Substituir os pop-ups da tecla de ponto com domínios de topo ao digitar URLs e endereços de e-mail diff --git a/app/src/main/res/values-pt-rPT/strings.xml b/app/src/main/res/values-pt-rPT/strings.xml index 766d37d1..5940ce6f 100644 --- a/app/src/main/res/values-pt-rPT/strings.xml +++ b/app/src/main/res/values-pt-rPT/strings.xml @@ -210,4 +210,20 @@ Limpar realmente todos os códigos de teclas personalizados? Mostrar dicas na linha dos números Mudar a distância de deslizamento do idioma - \ No newline at end of file + Linha de números + Disposição + Adicionar variantes comuns + Símbolos + Língua (prioridade) + Emoji + Adicionar todas as variantes disponíveis + Idioma + Cima + Baixo + Limpar a área de transferência + Selecionar palavra + Esquerda + Direita + Idiomas com dicionários + Área de transferência + diff --git a/app/src/main/res/values-pt/strings.xml b/app/src/main/res/values-pt/strings.xml index 4079c99b..8e3cc950 100644 --- a/app/src/main/res/values-pt/strings.xml +++ b/app/src/main/res/values-pt/strings.xml @@ -161,4 +161,4 @@ "Pesquisar" "Pausa" "Esp." - \ No newline at end of file + diff --git a/app/src/main/res/values-ro/strings.xml b/app/src/main/res/values-ro/strings.xml index aa76f521..e6c17c2e 100644 --- a/app/src/main/res/values-ro/strings.xml +++ b/app/src/main/res/values-ro/strings.xml @@ -399,4 +399,35 @@ Introducerea vocală este dezactivată Afișează/ascunde bara de instrumente Resetezi cu adevărat toate pictogramele personalizate? - \ No newline at end of file + Subtip personalizat + Nume greșit + %s (Baishakhi) + Limbi cu dicționare + Tastatură împărțită + AVERTIZARE: Aspectul este utilizat în prezent + Setează imaginea de fundal (peisaj) + Dacă nu este setat, se va folosi imaginea portret + Poți găsi și împărtăși aspecte în %s. + Conectorul lățimii zero + Ștergi cu adevărat toate codurile cheie personalizate? + Distanța divizării (peisaj) + Activează tastatura divizată (peisaj) + Timp de restabilire a tastării rapide + Comenzi rapide corectare automată + Dacă este activat, comenzile rapide pot fi extinse prin corecție automată + Chiar ștergi %s? + Setează font personalizat din fișier + Suprimă tastele pop-up care sunt deja prezente pe aspectul de bază + Taste funcționale (ecran mare) + Aspecte secundare + Scală umplutură inferioară (peisaj) + Scală font la tastatură + Scală font vizualizare emoji + Coș de reciclare + Scală umplutură laterală (peisaj) + Scală umplutură laterală + Afișează indicii pe rândul cu numere + Distanța de deplasare pentru comutarea limbii + Poți găsi și împărtăși culori în %s. + secțiunea de discuții + diff --git a/app/src/main/res/values-ru/strings.xml b/app/src/main/res/values-ru/strings.xml index bf56a00f..d94f2353 100644 --- a/app/src/main/res/values-ru/strings.xml +++ b/app/src/main/res/values-ru/strings.xml @@ -81,16 +81,16 @@ Эмодзи для физической клавиатуры Физическая клавиша Alt показывает все доступные эмодзи По умолчанию - Добро пожаловать в%s + Добро пожаловать в %s с непрерывным вводом Начать работу Далее - Настроить%s - Включить%s + Настроить %s + Включить %s Убедитесь, что \\%s\" включен в настройках языка и ввода. Это позволит ему работать на вашем устройстве.\" Приложение %s уже включено в настройках языка и ввода. Перейдите к следующему шагу!\" Включить в настройках - Переключитесь на%s + Переключитесь на %s Теперь выберите \\%s\" в качестве активного метода ввода текста.\" Другой способ ввода Поздравляем, всё готово! @@ -285,7 +285,7 @@ Holo Белая Смена обоих Вверх - Удалить пользовательский словарь \"%s\"? + Удалить пользовательский словарь «%s»? Не получается прочитать файл здесь Выберите для добавления словаря. Словари в формате .dict можно скачать %s. @@ -307,7 +307,7 @@ Всё ещё используется Выбранный файл предназначен для %1$s, но ожидался %2$s. Всё ещё используете его для %2$s? Ошибка: выбранный файл не является корректным словарем - "Без словаря вы будете получать предложения только для введенного ранее текста.<br>\n Вы можете загрузить словари %1$s или проверить, можно ли загрузить словарь для \"%2$s\" напрямую %3$s." + "Без словаря вы будете получать предложения только для введенного ранее текста.<br>\n Вы можете загрузить словари %1$s или проверить, можно ли загрузить словарь для «%2$s» напрямую %3$s." %s (экспериментальный) Символы Символы (арабские) @@ -425,7 +425,7 @@ Shift Shift (нажат) Caps lock - Голосовой ввод отключен + Голосовой ввод отключён Показать / скрыть панель инструментов Соединитель нулевой ширины Настроить коды клавиш панели инструментов @@ -435,8 +435,8 @@ Разъединитель нулевой ширины Выход из режима работы одной рукой Действительно сбросить все настроенные иконки? - Bin - Вибрировать в режиме Не беспокоить + Корзина + Вибрация в режиме «Не беспокоить» %s (Фонетика) Автокоррекция сочетаний клавиш Установить пользовательский шрифт из файла diff --git a/app/src/main/res/values-si/strings.xml b/app/src/main/res/values-si/strings.xml index a19116cf..d0c6e07b 100644 --- a/app/src/main/res/values-si/strings.xml +++ b/app/src/main/res/values-si/strings.xml @@ -1,10 +1,9 @@ - + - +--> "සබඳතා නම් විමසන්න" "යතුර ඔබන විට කම්පනය" "යතුරු එබිම මත හඬ" @@ -76,16 +75,16 @@ "භෞතික යතුරුපුවරුව සඳහා ඉමොජි" "භෞතික Alt යතුර ඉමොජි පෙන්වයි" "සුපුරුදු" - "%s වෙත සාදරයෙන් පිළිගනිමු" + %s වෙත සාදරයෙන් පිළිගනිමු\" "ඉංගිත ටයිප් කිරීම් සමග" "අරඹන්න" "ඊළඟ පියවර" - "%s සැකසෙමින් පවතී" - "%s සබල කරන්න" + %s සැකසෙමින් පවතී\" + %s සබල කරන්න\" "කරණාකර ඔබගේ භාෂාව සහ ආදාන සැකසීම් තුළ \"%s\" පරීක්ෂා කරන්න. මෙය ඔබගේ උපාංගය මත එයට ධාවනය වීමට අනුමැතිය දෙනු ඇත." "%s දැනටමත් ඔබගේ භාෂාව සහ ආදාන සැකසීම් තුළ සබල කර ඇත, එම නිසා මෙම පියවර නිමයි. ඊළඟ එක වෙතට!" "සැකසීම් තුළ සබල කරන්න" - "%s වෙත මාරුවන්න" + %s වෙත මාරුවන්න\" "ඊළඟට, ඔබගේ සක්‍රිය පෙළ-ආදාන ක්‍රමය ලෙස \"%s\" තෝරන්න." "ආදාන ක්‍රම මාරු කරන්න" "සුබපැතුම්, ඔබ සියල්ල පිහිටුවා ඇත!" diff --git a/app/src/main/res/values-sr/strings.xml b/app/src/main/res/values-sr/strings.xml index fe4de927..fcee9f37 100644 --- a/app/src/main/res/values-sr/strings.xml +++ b/app/src/main/res/values-sr/strings.xml @@ -170,4 +170,4 @@ Додај уобичајене варијанте Промена језика Упозорење: онемогућавање овог подешавања ће обрисати научене податке - \ No newline at end of file + diff --git a/app/src/main/res/values-sv/strings.xml b/app/src/main/res/values-sv/strings.xml index 0a36fbf2..0d706689 100644 --- a/app/src/main/res/values-sv/strings.xml +++ b/app/src/main/res/values-sv/strings.xml @@ -282,4 +282,4 @@ Ta bort överflödiga popuper Dämpa popup-tangenter som finns i grundlayouten Ingen - \ No newline at end of file + diff --git a/app/src/main/res/values-ta/strings.xml b/app/src/main/res/values-ta/strings.xml index 31b743d8..ceb060b1 100644 --- a/app/src/main/res/values-ta/strings.xml +++ b/app/src/main/res/values-ta/strings.xml @@ -1,10 +1,9 @@ - + - +--> "தொடர்பு பெயர்களை ஆய்வுசெய்" "விசையழுத்தின்போது அதிர்வுரு" "விசையழுத்தத்தின்போது ஒலியெழுப்பு" @@ -76,16 +75,16 @@ "கைமுறை விசைப்பலகைக்கான ஈமோஜி" "ஈமோஜி பலகத்தைக் காட்டும் கைமுறை Alt விசை" "இயல்புநிலை" - "%s பயன்பாட்டிற்கு வரவேற்கிறோம்" + %s பயன்பாட்டிற்கு வரவேற்கிறோம்\" "ஸ்வைப் உள்ளீடு மூலம்" "தொடங்குக" "அடுத்த கட்டம்" - "%s ஆப்ஸை அமைக்கிறது" - "%s ஆப்ஸை இயக்கவும்" + %s ஆப்ஸை அமைக்கிறது\" + %s ஆப்ஸை இயக்கவும்\" "மொழி & உள்ளீட்டு அமைப்புகளில் \"%s\" ஆப்ஸைத் தேர்வு செய்யவும். இதனால், சாதனத்தில் ஆப்ஸை இயக்கலாம்." "மொழி & உள்ளீட்டு அமைப்புகளில் %s ஏற்கனவே இயக்கப்பட்டுள்ளதால் இப்படிமுறை முடிந்தது. அடுத்த படிமுறைக்குச் செல்லவும்!" "அமைப்புகளில் இயக்கு" - "%s க்கு மாறவும்" + %s க்கு மாறவும்\" "அடுத்து, உங்கள் செயலில் உள்ள உரை உள்ளீட்டு முறையாக \"%s\" பயன்பாட்டைத் தேர்ந்தெடுக்கவும்." "உள்ளீட்டு முறைகளை மாற்றவும்" "வாழ்த்துகள், தயாராகிவிட்டீர்கள்!" diff --git a/app/src/main/res/values-te/strings.xml b/app/src/main/res/values-te/strings.xml index 274ef5a9..c5bb08c1 100644 --- a/app/src/main/res/values-te/strings.xml +++ b/app/src/main/res/values-te/strings.xml @@ -3,8 +3,7 @@ Copyright (C) 2008 The Android Open Source Project modified SPDX-License-Identifier: Apache-2.0 AND GPL-3.0-only ---> - +--> "పరిచయ పేర్లను వెతకండి" "కీని నొక్కినప్పుడు వైబ్రేట్" "కీని నొక్కినప్పుడు ధ్వని" @@ -76,16 +75,16 @@ "భౌతిక కీబోర్డ్ కోసం ఎమోజి" "భౌతిక Alt కీ ఎమోజి ఫలకాన్ని చూపుతుంది" "డిఫాల్ట్" - "%sకు స్వాగతం" + %sకు స్వాగతం\" "సంజ్ఞ టైపింగ్‌తో" "ప్రారంభించండి" "తర్వాత దశ" - "%sని సెటప్ చేయడం" - "%sని ప్రారంభించండి" + %sని సెటప్ చేయడం\" + %sని ప్రారంభించండి\" "దయచేసి మీ భాషలు & ఇన్‌పుట్ సెట్టింగ్‌ల్లో \"%s\" తనిఖీ చేయండి. ఇది మీ పరికరంలో అమలు కావడానికి దీన్ని ప్రామాణీకరిస్తుంది." "%s ఇప్పటికే మీ భాషలు & ఇన్‌పుట్ సెట్టింగ్‌ల్లో ప్రారంభించబడింది, కనుక ఈ దశ పూర్తయింది. తర్వాత దశకు వెళ్లండి!" "సెట్టింగ్‌ల్లో ప్రారంభించండి" - "%sకు మారండి" + %sకు మారండి\" "తర్వాత, \"%s\"ని మీ సక్రియ వచన-ఇన్‌పుట్ పద్ధతిగా ఎంచుకోండి." "ఇన్‌పుట్ పద్ధతులను మార్చు" "అభినందనలు, మీరు అంతా పూర్తి చేసారు!" @@ -143,4 +142,4 @@ "వెతుకు" "పాజ్ చేయి" "వేచి ఉ." - \ No newline at end of file + diff --git a/app/src/main/res/values-tr/strings.xml b/app/src/main/res/values-tr/strings.xml index 35c703a4..59a3f92b 100644 --- a/app/src/main/res/values-tr/strings.xml +++ b/app/src/main/res/values-tr/strings.xml @@ -282,42 +282,7 @@ Metin ve arka planlar için renkleri seç Vurgu Gizli özelliklerin açıklaması - ► Sabitlenmiş araç çubuğu tuşlarına uzun basmak ek işlevsellik sağlar: <br> -\n\t• panoya kopyala &#65515; yapıştır <br> -\n\t• sola/sağa hareket et &#65515; kelime sola/sağa <br> -\n\t• yukarı/aşağı hareket et &#65515; sayfa yukarı/aşağı <br> -\n\t• kelime sola/sağa &#65515; satır başı/sonu <br> -\n\t• sayfa yukarı/aşağı &#65515; sayfa başı/sonu <br> -\n\t• kopyala &#65515; kes <br> -\n\t• kelime seç &#8596; tümünü seç <br> -\n\t• geri al &#8596; yinele <br> <br> -\n► Öneri şeridi araç çubuğundaki tuşlara uzun basmak, onları öneri şeridine sabitler. <br> <br> -\n► Virgül tuşuna uzun basarak Pano Görünümü, Emoji Görünümü, Tek El Modu, Ayarlar veya Dil Değiştir\'e erişebilirsin: <br> -\n\t• Emoji Görünümü ve Dil Değiştir, ilgili tuşu etkinleştirdiysen kaybolur; <br> -\n\t• Bazı düzenler için bu, Virgül tuşu değil, aynı konumdaki başka bir tuş olabilir (örneğin, Dvorak düzeninde bu tuş \'q\'dur). <br> <br> -\n► Gizli mod etkinleştirildiğinde, hiçbir kelime öğrenilmeyecek ve son eklenen emojilere yeni bir emoji eklenmeyecektir. <br> <br> -\n► Gizli mod simgesine basarak araç çubuğuna erişebilirsin. <br> <br> -\n► Kaydırmalı tuş girişi: Shift tuşundan başka bir tuşa kaydırarak tek bir büyük harf yazabilirsin: <br> -\n\t• Bu, ayrıca \'123\' tuşu için semboller klavyesinden tek bir sembol yazmak ve ilgili tuşlar için de çalışır. <br> <br> -\n► Shift veya sembol tuşunu basılı tut, bir veya daha fazla tuşa bas ve ardından önceki klavyeye dönmek için Shift veya sembol tuşunu bırak. <br> <br> -\n► Öneri şeridindeki bir öneriye uzun basarak daha fazla öneriyi ve bu öneriyi kaldırmak için bir silme düğmesini gösterir. <br> <br> -\n► Bir öneriye yukarı kaydırarak daha fazla öneriyi aç ve seçmek için öneri üzerinde bırak. <br> <br> -\n► Pano geçmişindeki bir girdiye uzun basarak onu sabitleyebilirsin (sabitlediğin sürece panoda kalır). <br> <br> -\n► Pano görünümünde bir girdiyi kaldırmak için sola kaydır (sabitlediğin sürece hariç). <br> <br> -\n► Metni seç ve büyük/küçük harflerini değiştirmek için Shift tuşuna bas. <br> <br> -\n► Sözlükleri bir dosya gezgini ile açarak ekleyebilirsin: <br> -\n\t• Bu yalnızca <i>content-uris</i> ile çalışır, <i>file-uris</i> ile çalışmaz, yani bazı dosya gezginlerinde çalışmayabilir. <br> <br> -\n► Kök erişimiyle manuel yedekleme yapan kullanıcılar için: <br> -\n\t• Android 7\'den başlayarak, paylaşılan tercih dosyası varsayılan konumda değildir, çünkü uygulama %s kullanmaktadır. Bu, cihaz kilitlenmeden önce, örneğin açılışta, ayarların okunabilmesi için gereklidir; <br> -\n\t• Dosya /data/user_de/0/package_id/shared_prefs/ konumunda bulunur, ancak bu cihaz ve Android sürümüne bağlı olarak değişebilir. <br> <br> -\n<i><b>Hata ayıklama modu / hata ayıklama APK\'sı</b></i> <br> <br> -\n► Bir öneriye uzun basarak kaynak sözlüğü göster. <br> <br> -\n► Hata ayıklama APK\'sı kullanırken, Gelişmiş Tercihler içinde Hata Ayıklama Ayarlarını bulabilirsin, ancak bu yalnızca sözlükleri günlüğe dökmek için sınırlı fayda sağlar. <br> -\n\t• Yayın APK\'sı için, <i>Hakkında</i> kısmındaki sürüme birkaç kez dokunman gerekir, ardından Gelişmiş Tercihler içinde hata ayıklama ayarlarını bulabilirsin. <br> -\n\t• <i>Öneri bilgilerini göster</i> etkinleştirildiğinde, önerilerin üzerinde bazı iç puan ve kaynak sözlük gösteren küçük sayılar olacaktır. <br> <br> -\n► Bir uygulama çökmesi durumunda, Ayarları açtığında çökme günlüklerini isteyip istemediğin sorulacaktır. <br> <br> -\n► Çok dilli yazım kullanırken, boşluk tuşu şu anda kullanılan dili belirlemek için kullanılan bir güven değerini gösterir. <br> <br> -\n► Önerilerin üzerinde bazı iç puan ve kaynak sözlük gösteren küçük sayılar olacaktır (devre dışı bırakılabilir). + ► Sabitlenmiş araç çubuğu tuşlarına uzun basmak ek işlevsellik sağlar: <br> \n\t• panoya kopyala &#65515; yapıştır <br> \n\t• sola/sağa hareket et &#65515; kelime sola/sağa <br> \n\t• yukarı/aşağı hareket et &#65515; sayfa yukarı/aşağı <br> \n\t• kelime sola/sağa &#65515; satır başı/sonu <br> \n\t• sayfa yukarı/aşağı &#65515; sayfa başı/sonu <br> \n\t• kopyala &#65515; kes <br> \n\t• kelime seç &#8596; tümünü seç <br> \n\t• geri al &#8596; yinele <br> <br> \n► Öneri şeridi araç çubuğundaki tuşlara uzun basmak, onları öneri şeridine sabitler. <br> <br> \n► Virgül tuşuna uzun basarak Pano Görünümü, Emoji Görünümü, Tek El Modu, Ayarlar veya Dil Değiştir\'e erişebilirsin: <br> \n\t• Emoji Görünümü ve Dil Değiştir, ilgili tuşu etkinleştirdiysen kaybolur; <br> \n\t• Bazı düzenler için bu, Virgül tuşu değil, aynı konumdaki başka bir tuş olabilir (örneğin, Dvorak düzeninde bu tuş \'q\'dur). <br> <br> \n► Gizli mod etkinleştirildiğinde, hiçbir kelime öğrenilmeyecek ve son eklenen emojilere yeni bir emoji eklenmeyecektir. <br> <br> \n► Gizli mod simgesine basarak araç çubuğuna erişebilirsin. <br> <br> \n► Kaydırmalı tuş girişi: Shift tuşundan başka bir tuşa kaydırarak tek bir büyük harf yazabilirsin: <br> \n\t• Bu, ayrıca \'123\' tuşu için semboller klavyesinden tek bir sembol yazmak ve ilgili tuşlar için de çalışır. <br> <br> \n► Shift veya sembol tuşunu basılı tut, bir veya daha fazla tuşa bas ve ardından önceki klavyeye dönmek için Shift veya sembol tuşunu bırak. <br> <br> \n► Öneri şeridindeki bir öneriye uzun basarak daha fazla öneriyi ve bu öneriyi kaldırmak için bir silme düğmesini gösterir. <br> <br> \n► Bir öneriye yukarı kaydırarak daha fazla öneriyi aç ve seçmek için öneri üzerinde bırak. <br> <br> \n► Pano geçmişindeki bir girdiye uzun basarak onu sabitleyebilirsin (sabitlediğin sürece panoda kalır). <br> <br> \n► Pano görünümünde bir girdiyi kaldırmak için sola kaydır (sabitlediğin sürece hariç). <br> <br> \n► Metni seç ve büyük/küçük harflerini değiştirmek için Shift tuşuna bas. <br> <br> \n► Sözlükleri bir dosya gezgini ile açarak ekleyebilirsin: <br> \n\t• Bu yalnızca <i>content-uris</i> ile çalışır, <i>file-uris</i> ile çalışmaz, yani bazı dosya gezginlerinde çalışmayabilir. <br> <br> \n► Kök erişimiyle manuel yedekleme yapan kullanıcılar için: <br> \n\t• Android 7\'den başlayarak, paylaşılan tercih dosyası varsayılan konumda değildir, çünkü uygulama %s kullanmaktadır. Bu, cihaz kilitlenmeden önce, örneğin açılışta, ayarların okunabilmesi için gereklidir; <br> \n\t• Dosya /data/user_de/0/package_id/shared_prefs/ konumunda bulunur, ancak bu cihaz ve Android sürümüne bağlı olarak değişebilir. <br> <br> \n<i><b>Hata ayıklama modu / hata ayıklama APK\'sı</b></i> <br> <br> \n► Bir öneriye uzun basarak kaynak sözlüğü göster. <br> <br> \n► Hata ayıklama APK\'sı kullanırken, Gelişmiş Tercihler içinde Hata Ayıklama Ayarlarını bulabilirsin, ancak bu yalnızca sözlükleri günlüğe dökmek için sınırlı fayda sağlar. <br> \n\t• Yayın APK\'sı için, <i>Hakkında</i> kısmındaki sürüme birkaç kez dokunman gerekir, ardından Gelişmiş Tercihler içinde hata ayıklama ayarlarını bulabilirsin. <br> \n\t• <i>Öneri bilgilerini göster</i> etkinleştirildiğinde, önerilerin üzerinde bazı iç puan ve kaynak sözlük gösteren küçük sayılar olacaktır. <br> <br> \n► Bir uygulama çökmesi durumunda, Ayarları açtığında çökme günlüklerini isteyip istemediğin sorulacaktır. <br> <br> \n► Çok dilli yazım kullanırken, boşluk tuşu şu anda kullanılan dili belirlemek için kullanılan bir güven değerini gösterir. <br> <br> \n► Önerilerin üzerinde bazı iç puan ve kaynak sözlük gösteren küçük sayılar olacaktır (devre dışı bırakılabilir). Dikey boşluk çubuğu kaydırma hareketi Yok İmleci taşı @@ -425,4 +390,4 @@ Giriș Tab Sil - \ No newline at end of file + diff --git a/app/src/main/res/values-uk/strings.xml b/app/src/main/res/values-uk/strings.xml index b9a9008b..61365d31 100644 --- a/app/src/main/res/values-uk/strings.xml +++ b/app/src/main/res/values-uk/strings.xml @@ -422,4 +422,4 @@ Шкала бічного відступу (альбомна) Показувати підказки в рядку з цифрами Відстань проведення для перемикання мови - \ No newline at end of file + diff --git a/app/src/main/res/values-ur/strings.xml b/app/src/main/res/values-ur/strings.xml index c1dce4ba..d74673cf 100644 --- a/app/src/main/res/values-ur/strings.xml +++ b/app/src/main/res/values-ur/strings.xml @@ -1,10 +1,9 @@ - + - +--> "رابطوں میں سے نام ڈھونڈیں" "کلید دبانے پر وائبریٹ کریں" "کلید دبانے پر آواز" @@ -76,16 +75,16 @@ "‏فزیکل کی بورڈ کیلئے Emoji" "‏فزیکل Alt کی کے ذریعے emoji پیلٹ نظر آتا ہے" "ڈیفالٹ" - "%s میں خوش آمدید" + %s میں خوش آمدید\" "اشارہ ٹائپنگ کے ساتھ" "شروع کریں" "اگلا مرحلہ" - "%s ترتیب دینا" - "%s کو فعال کریں" + %s ترتیب دینا\" + %s کو فعال کریں\" "براہ کرم \"%s\" کو اپنی زبانوں اور ان پٹ ترتیبات میں چیک کریں۔ اس سے اس کو آپ کے آلہ پر چلنے کی اجازت مل جائے گی۔" "‏%s پہلے ہی آپ کی زبانوں ‎اور‎ ان پٹ ترتیبات میں فعال ہے، لہذا یہ مرحلہ مکمل ہو گیا ہے۔ اگلے پر چلتے ہیں!" "ترتیبات میں فعال کریں" - "%s پر سوئچ کریں" + %s پر سوئچ کریں\" "آگے، \"%s\" کو اپنے فعال متنی اندراج کے طریقہ کے بطور منتخب کریں۔" "اندراج کے طریقے سوئچ کریں" "مبارک ہو، آپ بالکل تیار ہیں!" diff --git a/app/src/main/res/values-uz/strings.xml b/app/src/main/res/values-uz/strings.xml index 34ca2c80..4c05577a 100644 --- a/app/src/main/res/values-uz/strings.xml +++ b/app/src/main/res/values-uz/strings.xml @@ -160,4 +160,4 @@ "Qidiruv" "Pauza" "Kutish" - \ No newline at end of file + diff --git a/app/src/main/res/values-v28/platform-theme.xml b/app/src/main/res/values-v28/platform-theme.xml new file mode 100644 index 00000000..77a73ae9 --- /dev/null +++ b/app/src/main/res/values-v28/platform-theme.xml @@ -0,0 +1,17 @@ + + + + + + diff --git a/app/src/main/res/values-v31/platform-theme.xml b/app/src/main/res/values-v31/platform-theme.xml index 4c40353c..5014fc74 100644 --- a/app/src/main/res/values-v31/platform-theme.xml +++ b/app/src/main/res/values-v31/platform-theme.xml @@ -5,12 +5,11 @@ - - diff --git a/app/src/main/res/values-zh-rCN/strings.xml b/app/src/main/res/values-zh-rCN/strings.xml index 3f0dcdf8..33e5840a 100644 --- a/app/src/main/res/values-zh-rCN/strings.xml +++ b/app/src/main/res/values-zh-rCN/strings.xml @@ -374,42 +374,7 @@ 可变工具栏方向 选择从右到左的键盘子类型时反转方向 自动隐藏工具栏 - ► 长按固定的工具栏键会产生其他功能:<br> -\n\t• 剪贴板 &#65515; 粘贴 <br> -\n\t• 向左/向右移动 &#65515; 单词向左/向右 <br> -\n\t• 向上/向下移动 &#65515; 向上/向下翻页 <br> -\n\t• 单词向左/向右 &#65515; 行起点/终点 <br> -\n\t• 向上/向下翻页 &#65515; 页面开始/结束 <br> -\n\t• 复制 &#65515; 剪切 <br> -\n\t• 选择单词 &#8596; 全选 <br> -\n\t• 撤销 &#8596; 恢复 <br> <br> -\n► 长按建议条工具栏中的键将它们固定到建议条上。 <br> <br> -\n► 长按逗号键可访问剪贴板视图、表情符号视图、单手模式、设置或切换语言:<br> -\n\t• 如果启用了相应的键,表情符号视图和语言切换将消失;<br> -\n\t• 对于某些布局,它不是逗号键,而是同一位置的键(例如,对于 Dvorak 布局是“q”)。<br> <br> -\n► 启用隐身模式后,将不会学习任何单词,也不会在最近的表情中添加任何表情符号。<br> <br> -\n► 按隐身图标访问工具栏。<br> <br> -\n► 滑动键输入:从 Shift 键滑动到另一个键,输入单个大写键:<br> -\n\t• 这也适用于“?123”键从符号键盘输入单个符号,以及相关键。<br> <br> -\n► 按住 Shift 或符号键,按一个或多个键,然后松开 Shift 或符号键以返回上一个键盘。<br> <br> -\n► 长按建议栏中的建议可显示更多建议,长按删除按钮可移除此建议。<br> <br> -\n► 从建议向上滑动以打开更多建议,然后松开建议以选择它。<br> <br> -\n► 长按剪贴板历史中的条目将其固定(将其保留在剪贴板中,直到取消固定)。<br> <br> -\n► 在剪贴板视图中向左滑动以移除条目(被固定时除外)<br> <br> -\n► 选择文本并按 Shift 键在大写、小写和大写单词之间切换。<br> <br> -\n► 您可以通过在文件资源管理器中打开词典来添加词典:<br> -\n\t• 这只适用于<i>内容 URI</i>,不适用于<i>文件 URI</i>,这意味着它可能不适用于某些文件浏览器。<br> <br> -\n► 对于使用 Root 权限进行手动备份的用户:<br> -\n\t• 从 Android 7 开始,共享首选项文件不在默认位置,因为应用正在使用 %s。这是必要的,这样可以在设备解锁之前读取设置,例如在启动时;<br> -\n\t• 该文件位于 /data/user_de/0/package_id/shared_prefs/ 中,但这可能取决于设备和 Android 版本。<br> <br> -\n<i><b>调试模式/调试 APK</b></i> <br> <br> -\n► 长按建议显示源词典。<br> <br> -\n► 使用调试 APK 时,您可以在高级首选项中找到调试设置,但除了将词典转储到日志中外,其用处有限。<br> -\n\t• 对于发布 APK,您需要多次点击<i>关于</i>中的版本,然后您可以在<i>高级首选项</i>找到调试设置。<br> -\n\t• 当启用<i>显示建议信息</i>时,建议顶部会有一些小数字,显示一些内部分数和源词典。<br> <br> -\n► 如果应用崩溃,打开“设置”时,系统会提示您是否需要崩溃日志。<br> <br> -\n► 使用多语言输入时,空格键将显示用于确定当前使用的语言的置信度值。<br> <br> -\n► 建议顶部会有一些小数字,显示一些内部分数和源词典(可以禁用)。 + ► 长按固定的工具栏键会产生其他功能:<br>\n\t• 剪贴板 &#65515; 粘贴 <br>\n\t• 向左/向右移动 &#65515; 单词向左/向右 <br>\n\t• 向上/向下移动 &#65515; 向上/向下翻页 <br>\n\t• 单词向左/向右 &#65515; 行起点/终点 <br>\n\t• 向上/向下翻页 &#65515; 页面开始/结束 <br>\n\t• 复制 &#65515; 剪切 <br>\n\t• 选择单词 &#8596; 全选 <br>\n\t• 撤销 &#8596; 恢复 <br> <br>\n► 长按建议条工具栏中的键将它们固定到建议条上。 <br> <br>\n► 长按逗号键可访问剪贴板视图、表情符号视图、单手模式、设置或切换语言:<br>\n\t• 如果启用了相应的键,表情符号视图和语言切换将消失;<br>\n\t• 对于某些布局,它不是逗号键,而是同一位置的键(例如,对于德沃夏克布局是“q”)。<br> <br>\n► 启用隐身模式后,将不会学习任何单词,也不会在最近的表情中添加任何表情符号。<br> <br>\n► 按隐身图标访问工具栏。<br> <br>\n► 滑动键输入:从 Shift 键滑动到另一个键,输入单个大写键:<br>\n\t• 这也适用于“?123”键从符号键盘输入单个符号,以及相关键。<br> <br>\n► 按住 Shift 或符号键,按一个或多个键,然后松开 Shift 或符号键以返回上一个键盘。<br> <br>\n► 长按建议栏中的建议可显示更多建议,长按删除按钮可移除此建议。<br> <br>\n► 从建议向上滑动以打开更多建议,然后松开建议以选择它。<br> <br>\n► 长按剪贴板历史中的条目将其固定(将其保留在剪贴板中,直到取消固定)。<br> <br>\n► 在剪贴板视图中向左滑动以移除条目(被固定时除外)<br> <br>\n► 选择文本并按 Shift 键在大写、小写和大写单词之间切换。<br> <br>\n► 您可以通过在文件资源管理器中打开词典来添加词典:<br>\n\t• 这只适用于<i>内容 URI</i>,不适用于<i>文件 URI</i>,这意味着它可能不适用于某些文件浏览器。<br> <br>\n► 对于使用 Root 权限进行手动备份的用户:<br>\n\t• 从 Android 7 开始,共享首选项文件不在默认位置,因为应用正在使用 %s。这是必要的,这样可以在设备解锁之前读取设置,例如在启动时;<br>\n\t• 该文件位于 /data/user_de/0/package_id/shared_prefs/ 中,但这可能取决于设备和 Android 版本。<br> <br>\n<i><b>调试模式/调试 APK</b></i> <br> <br>\n► 长按建议显示源词典。<br> <br>\n► 使用调试 APK 时,您可以在高级首选项中找到调试设置,但除了将词典转储到日志中外,其用处有限。<br>\n\t• 对于发布 APK,您需要多次点击<i>关于</i>中的版本,然后您可以在<i>高级首选项</i>找到调试设置。<br>\n\t• 当启用<i>显示建议信息</i>时,建议顶部会有一些小数字,显示一些内部分数和源词典。<br> <br>\n► 如果应用崩溃,打开“设置”时,系统会提示您是否需要崩溃日志。<br> <br>\n► 使用多语言输入时,空格键将显示用于确定当前使用的语言的置信度值。<br> <br>\n► 建议顶部会有一些小数字,显示一些内部分数和源词典(可以禁用)。 图标风格 数字行 空格键上的自定义文本 @@ -466,4 +431,8 @@ 讨论部分 您可以在 %s 中查找和分享布局。 您可以在 %s 中查找和分享颜色。 - \ No newline at end of file + 自定义子类型 + %s (Baishakhi) + 输入 URL 和电子邮件地址时,用顶级域替换句点键弹出 + 显示顶级域弹出键 + diff --git a/app/src/main/res/values/platform-theme.xml b/app/src/main/res/values/platform-theme.xml index 432d2071..2942b101 100644 --- a/app/src/main/res/values/platform-theme.xml +++ b/app/src/main/res/values/platform-theme.xml @@ -6,11 +6,21 @@ --> - + + diff --git a/app/src/main/res/values/strings.xml b/app/src/main/res/values/strings.xml index 903b3cbd..e063b07c 100644 --- a/app/src/main/res/values/strings.xml +++ b/app/src/main/res/values/strings.xml @@ -249,6 +249,10 @@ Select hint source Select popup key order + + Show TLD popup keys + + Replace period key popups with top level domains when typing URLs and email addresses Number row Language @@ -577,6 +581,8 @@ disposition rather than other common dispositions for Latin languages. --> Selecting clipboard history entry Pressing enter or space after other keys in symbols view + + Pressing enter or space after other keys in numpad Set image for day or night mode? diff --git a/app/src/main/res/xml/method.xml b/app/src/main/res/xml/method.xml index 7b69deb7..e46d5be3 100644 --- a/app/src/main/res/xml/method.xml +++ b/app/src/main/res/xml/method.xml @@ -20,9 +20,10 @@ bg: Bulgarian/bulgarian_bekl bn_BD: Bengali (Bangladesh)/bengali_unijoy bn_BD: Bengali (Bangladesh) (Akkhor)/bengali_akkhor - bn_IN: Bengali (India)/bengali + bn_IN: Bengali (India)/bengali_inscript bn_IN: Bengali (India)/Baishakhi ca: Catalan/qwerty+ + ckb: Central Kurdish/central_kurdish cs: Czech/qwertz cv: Chuvash/chuvash da: Danish/qwerty+ @@ -90,6 +91,7 @@ pt_PT: Portuguese (Portugal)/qwerty ro: Romanian/qwerty ru: Russian/russian + ru: Russian (Extended)/russian_extended ru: Russian (Student)/russian_student si_LK: Sinhala (Sri Lanka)/sinhala # This is a preliminary keyboard layout. sk: Slovak/qwerty @@ -107,6 +109,7 @@ tr: Turkish/turkish ur_PK: Urdu Pakistan uk: Ukrainian/ukrainian + uk: Ukrainian (Extended)/ukrainian_extended uz_UZ: Uzbek (Uzbekistan)/uzbek # This is a preliminary keyboard layout. vi: Vietnamese/qwerty zu: Zulu/qwerty @@ -266,7 +269,7 @@ android:imeSubtypeLocale="bn_IN" android:languageTag="bn-IN" android:imeSubtypeMode="keyboard" - android:imeSubtypeExtraValue="KeyboardLayoutSet=MAIN:bengali,NoShiftKey,EmojiCapable" + android:imeSubtypeExtraValue="KeyboardLayoutSet=MAIN:bengali_inscript,EmojiCapable" android:isAsciiCapable="false" /> + + + still expect empty list + SubtypeUtilsAdditional.changeAdditionalSubtype(from.toSettingsSubtype(), from.toSettingsSubtype(), latinIME) + assertEquals(emptyList(), SubtypeSettings.getAdditionalSubtypes().map { it.toSettingsSubtype() }) + } + + @Test fun subtypeStaysEnabledOnEdits() { + val prefs = latinIME.prefs() + prefs.edit().putString(Settings.PREF_ADDITIONAL_SUBTYPES, "").apply() // clear it for convenience + + // edit enabled resource subtype + val from = SubtypeSettings.getResourceSubtypesForLocale("es".constructLocale()).first() + SubtypeSettings.addEnabledSubtype(prefs, from) + val to = from.toSettingsSubtype().withLayout(LayoutType.SYMBOLS, "symbols_arabic") + SubtypeUtilsAdditional.changeAdditionalSubtype(from.toSettingsSubtype(), to, latinIME) + assertEquals(to, SubtypeSettings.getEnabledSubtypes(false).single().toSettingsSubtype()) + + // change the new subtype to effectively be the same as original resource subtype + val toNew = to.withoutLayout(LayoutType.SYMBOLS) + assertEquals(from.toSettingsSubtype(), toNew) + SubtypeUtilsAdditional.changeAdditionalSubtype(to, toNew, latinIME) + assertEquals(emptyList(), SubtypeSettings.getAdditionalSubtypes().map { it.toSettingsSubtype() }) + assertEquals(from.toSettingsSubtype(), SubtypeSettings.getEnabledSubtypes(false).single().toSettingsSubtype()) + } +} diff --git a/fastlane/metadata/android/bn/full_description.txt b/fastlane/metadata/android/bn/full_description.txt index cd1f98e2..4912bc37 100644 --- a/fastlane/metadata/android/bn/full_description.txt +++ b/fastlane/metadata/android/bn/full_description.txt @@ -1,4 +1,4 @@ -হেলিবোর্ড গোপনীয়তা-সচেতন ওপেন সোর্স কিবোর্ড যার উৎস অ্যান্ড্রয়েড ওপেন সোর্স প্রজেক্ট এবং ওপেনবোর্ড। বাংলা (বাংলাদেশ) ভাষার জন্য এতে ইউনিজয় লেআউট যুক্ত আছে। +হেলিবোর্ড গোপনীয়তা-সচেতন ওপেন সোর্স কিবোর্ড যার উৎস অ্যান্ড্রয়েড ওপেন সোর্স প্রজেক্ট এবং ওপেনবোর্ড। বাংলা ভাষার জন্য এতে ইউনিজয়, প্রভাত, অক্ষর, ইনস্ক্রিপ্ট, বৈশাখী লেআউট যুক্ত আছে। এটি ইন্টারনেটের অনুমতি ব্যবহার করে না, তাই ১০০% অফলাইন। সুবিধা: diff --git a/fastlane/metadata/android/et/changelogs/2200.txt b/fastlane/metadata/android/et/changelogs/2200.txt index d54f0df2..3cc2785f 100644 --- a/fastlane/metadata/android/et/changelogs/2200.txt +++ b/fastlane/metadata/android/et/changelogs/2200.txt @@ -1,11 +1,11 @@ -* lisasime võimaluse salvestada ja eksportida kohandatud välimusi -* muutsime klahvistiku suunaklahvid kortratavaks -* lisasime tööriistaribale täiendavad kursori klahvid (leht üles/alla(/algusesse/lõppu, sõna vasakule/paremale) -* lisasime klahvi kopeeritu asetamiseks -* parandasime klahviga viipamist -* lisasime tühikuklahviga viipamise, mis lülitab numbriklahvistiku sissse/välja -* lisasime lõikelauale soovituse viimati kopeeritud tekstiga +* võimalus salvestada ja eksportida kohandatud välimusi +* klahvistiku suunaklahvid on korratavad +* kursori lisaklahvid tööriistaribal (leht ↑/↓(/algusesse/lõppu, sõna ←/→) +* klahv kopeeritu asetamiseks +* parem klahviga viipamine +* tühikuklahviga viipamine, mis lülitab numbristiku sisse/välja +* lõikelauasoovitus viimati kopeeritud tekstiga * valikuklahvide uus vajutus eemaldab tekstivaliku -* kohandasime seadistustes näidatavaid värve Android 12+ puhul -* kohendasime keelekohaseid hüpikklahve -* pisiparandused ja kohendused +* silusime seadistustes värve Android 12+ +* silusime keelekohaseid hüpikklahve +* pisiparandused, kohendused diff --git a/layouts.md b/layouts.md index 2af0f562..b442e934 100644 --- a/layouts.md +++ b/layouts.md @@ -89,7 +89,7 @@ Usually the label is what is displayed on the key. However, there are some speci * _symbol_alpha_: toggle alpha / symbol keyboard * _numpad_: toggle numpad layout * _emoji_: switch to emoji view - * _com_: display common TLDs (.com and similar, currently not localized) + * _com_: display common TLDs (.com and similar, localized) * _language_switch_: language switch key * _action_: the action (enter) key * _delete_: delete key