Merge branch 'Helium314:main' into patch-1

This commit is contained in:
EduRGB 2025-03-22 04:45:00 +01:00 committed by GitHub
commit c67cd07ed6
No known key found for this signature in database
GPG key ID: B5690EEEBB952194
113 changed files with 1178 additions and 563 deletions

View file

@ -100,8 +100,6 @@ __Planned features and improvements:__
* Add and enable emoji dictionaries by default (if available for language) * Add and enable emoji dictionaries by default (if available for language)
* Clearer / more intuitive arrangement of settings * Clearer / more intuitive arrangement of settings
* Maybe hide some less used settings by default (similar to color customization) * 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) * [Bug fixes](https://github.com/Helium314/HeliBoard/issues?q=is%3Aissue+is%3Aopen+label%3Abug)
__What will _not_ be added:__ __What will _not_ be added:__

View file

@ -13,8 +13,8 @@ android {
applicationId = "helium314.keyboard" applicationId = "helium314.keyboard"
minSdk = 21 minSdk = 21
targetSdk = 34 targetSdk = 34
versionCode = 2310 versionCode = 3001
versionName = "2.3+dev9" versionName = "3.0-alpha2"
ndk { ndk {
abiFilters.clear() abiFilters.clear()
abiFilters.addAll(listOf("armeabi-v7a", "arm64-v8a", "x86", "x86_64")) abiFilters.addAll(listOf("armeabi-v7a", "arm64-v8a", "x86", "x86_64"))
@ -97,7 +97,6 @@ android {
dependencies { dependencies {
// androidx // androidx
implementation("androidx.core:core-ktx:1.13.1") implementation("androidx.core:core-ktx:1.13.1")
implementation("androidx.appcompat:appcompat:1.7.0")
implementation("androidx.recyclerview:recyclerview:1.3.2") implementation("androidx.recyclerview:recyclerview:1.3.2")
implementation("androidx.autofill:autofill:1.1.0") implementation("androidx.autofill:autofill:1.1.0")

View file

@ -15,7 +15,7 @@
{ "$": "keyboard_state_selector", "emojiKeyEnabled": { "$": "keyboard_state_selector", "alphabet": { "label": "emoji" }}}, { "$": "keyboard_state_selector", "emojiKeyEnabled": { "$": "keyboard_state_selector", "alphabet": { "label": "emoji" }}},
{ "$": "keyboard_state_selector", "symbols": { "label": "numpad" }}, { "$": "keyboard_state_selector", "symbols": { "label": "numpad" }},
{ "label": "space" }, { "label": "space" },
{ "label": "period", "labelFlags": 1073741824 }, { "label": "period" },
{ "label": "action", "width": 0.15 } { "label": "action", "width": 0.15 }
] ]
] ]

View file

@ -1,34 +0,0 @@

View file

@ -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": "য" }]}}
}
]
]

View file

@ -0,0 +1,31 @@
ق
و
ە
ر
ت
ی
ێ
ئ
ۆ
پ
ا
س
ش
د
ف
ھ|ه
ژ
ل
ک
گ
ز
ع
ح
ج
چ
خ
ب
ن
م

View file

@ -8,7 +8,7 @@
ш ш
щ щ
з з
х х ъ [ {
ф ф
ы ы
@ -20,7 +20,7 @@
л л
д д
ж ж
э э э́ ] }
я я
ч ч

View file

@ -0,0 +1,34 @@
й
ц
у
к
е
н
г
ш
щ
з
х [ {
ъ ] }
ф
ы
в
а
п
р
о
л
д
ж
э э́
я
ч
с
м
и
т
ь
б <
ю >

View file

@ -8,7 +8,8 @@
ш ш
щ щ
з з
х х [ {
ї ] }
ф ф
і і
@ -20,7 +21,7 @@
л л
д д
ж ж
є є ' "
я я
ч ч
@ -30,4 +31,4 @@
т т
ь ь
б < б <
ю > ю > ґ

View file

@ -0,0 +1,35 @@
й
ц
у
к
е
н
г
ш
щ
з
х [ {
ї ] }
ф
і
в
а
п
р
о
л
д
ж
є ' "
' "
я
ч
с
м
и
т
ь
б <
ю > ґ

View file

@ -1,36 +1,41 @@
[popup_keys] [popup_keys]
ৌ ঔ
ৈ ঐ
া আ
ী ঈ
ূ ঊ
ব ভ ব ভ
হ ঙ
গ ঘ গ ঘ
দ ধ দ ধ
জ ঝ জ্ঞ জ ঝ
ড ড়
ি ি
প ফ প ফ
ৃ ঋ ত্র ড় র‍্য
ক খ ক খ
ত ৎ থ ত্ত
চ ছ চ ছ
ট ঠ ট ঠ
ঁ ঃ ং ৃ ঋ
ঢ ঢ় ং ঁ ঃ
ন ণ ঁ !autoColumnOrder!6 ় ৄ ঽ ৢ ৱ ৣ ৗ ৠ ৺ ঌ ৰ ৡ
ঞ ঙ ঞ্জ ম ণ
ষ ক্ষ ন ঞ
ব ঢ়
ল ষ
স শ স শ
য় য য় য
। ॥ punctuation !autoColumnOrder!8 \, ॥ ? ! !icon/zwnj_key| !icon/zwj_key| # @ ( ) / ; : - + \%
ঔ ৌ
ঐ ৈ
আ া
ঈ ী
ঊ ূ
[labels] [labels]
alphabet: কখগ alphabet: কখগ
symbol: ?১২৩
period: ।
[number_row] [number_row]
১ ২ ৩ ৫ ৬ ৮ ৯ ১ ২ ৩ ৫ ৬ ৮ ৯

View file

@ -0,0 +1,39 @@
[popup_keys]
ق ٯ
و وو
ە ة ـہ
ر ڕ ڒ ࢪ
ت ط
ی ي ې ۍ
ێ ؽ
ئ ء ﺋ
ۆ ؤ ۏ ۊ ۋ ۉ ۇ
پ ث
ا أ إ آ ٱ
س ص
ش ض
د ۮ ڌ ﮆ
ف ڤ ڡ
ھ ھ
ژ ━|ـ
ل ڵ
ک ك ڪ
گ غ
ز ظ
ع ؏
ب ى
punctuation !autoColumnOrder!8 \؟ ! ، ٫ ؍ : ؛ ; : | - @ _ # * ٪ & ^
« „ “ ”
»
[labels]
alphabet: ئ‌پ‌گ
symbol: ٣٢١؟
comma: ،
question: ؟
[number_row]
١ ٢ ٣ ٤ ٥ ٦ ٧ ٨ ٩ ٠
[tlds]
iq krd

View file

@ -1,9 +1,19 @@
[popup_keys] [popup_keys]
е ё е ё е́ ѣ
ь ъ ф ѳ
ы ы́
а а́
о о́
я я́
и и́
ь ъ ы
ю ю́
' '
" ” „ “ » « " ” „ “ » «
і ы
є э э́
[labels] [labels]
alphabet: АБВ alphabet: АБВ

View file

@ -1,9 +1,19 @@
[popup_keys] [popup_keys]
е е́
г ґ г ґ
ь ф ѳ
і ї і ї
' а а́
" ” „ “ о о́
я я́
и и́ і ї
г ґ
ю ю́
'
" ” „ “ » «
ы і ї
э є
[labels] [labels]
alphabet: АБВ alphabet: АБВ

View file

@ -24,6 +24,7 @@ import helium314.keyboard.latin.common.StringUtils;
import helium314.keyboard.latin.utils.PopupKeysUtilsKt; import helium314.keyboard.latin.utils.PopupKeysUtilsKt;
import helium314.keyboard.latin.utils.ToolbarKey; import helium314.keyboard.latin.utils.ToolbarKey;
import helium314.keyboard.latin.utils.ToolbarUtilsKt; import helium314.keyboard.latin.utils.ToolbarUtilsKt;
import kotlin.collections.ArraysKt;
import java.util.Arrays; import java.util.Arrays;
import java.util.Locale; import java.util.Locale;
@ -919,7 +920,7 @@ public class Key implements Comparable<Key> {
@NonNull final Drawable spacebarBackground, @NonNull final Drawable spacebarBackground,
@NonNull final Drawable actionKeyBackground) { @NonNull final Drawable actionKeyBackground) {
final Drawable background; final Drawable background;
if (isAccentColored()) { if (hasActionKeyBackground()) {
background = actionKeyBackground; background = actionKeyBackground;
} else if (hasFunctionalBackground()) { } else if (hasFunctionalBackground()) {
background = functionalKeyBackground; background = functionalKeyBackground;
@ -933,17 +934,10 @@ public class Key implements Comparable<Key> {
return background; return background;
} }
public final boolean isAccentColored() { public final boolean hasActionKeyPopups() {
if (hasActionKeyBackground()) return true; if (!hasActionKeyBackground()) return false;
final String iconName = getIconName(); // only use the special action key popups for action colored keys, and only for icon popups
if (iconName == null) return false; return ArraysKt.none(getPopupKeys(), (key) -> key.mIconName == null);
// 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 boolean hasFunctionalBackground() { public boolean hasFunctionalBackground() {

View file

@ -610,7 +610,7 @@ public class KeyboardView extends View {
} }
private void setKeyIconColor(Key key, Drawable icon, Keyboard keyboard) { private void setKeyIconColor(Key key, Drawable icon, Keyboard keyboard) {
if (key.isAccentColored()) { if (key.hasActionKeyBackground()) {
mColors.setColor(icon, ColorType.ACTION_KEY_ICON); mColors.setColor(icon, ColorType.ACTION_KEY_ICON);
} else if (key.isShift() && keyboard != null) { } else if (key.isShift() && keyboard != null) {
if (keyboard.mId.mElementId == KeyboardId.ELEMENT_ALPHABET_MANUAL_SHIFTED if (keyboard.mId.mElementId == KeyboardId.ELEMENT_ALPHABET_MANUAL_SHIFTED

View file

@ -18,6 +18,7 @@ import android.graphics.Paint;
import android.graphics.Paint.Align; import android.graphics.Paint.Align;
import android.graphics.Typeface; import android.graphics.Typeface;
import android.util.AttributeSet; import android.util.AttributeSet;
import android.view.ContextThemeWrapper;
import android.view.LayoutInflater; import android.view.LayoutInflater;
import android.view.MotionEvent; import android.view.MotionEvent;
import android.view.View; import android.view.View;
@ -25,7 +26,6 @@ import android.view.ViewGroup;
import androidx.annotation.NonNull; import androidx.annotation.NonNull;
import androidx.annotation.Nullable; import androidx.annotation.Nullable;
import androidx.appcompat.view.ContextThemeWrapper;
import helium314.keyboard.accessibility.AccessibilityUtils; import helium314.keyboard.accessibility.AccessibilityUtils;
import helium314.keyboard.accessibility.MainKeyboardAccessibilityDelegate; import helium314.keyboard.accessibility.MainKeyboardAccessibilityDelegate;
@ -505,7 +505,7 @@ public final class MainKeyboardView extends KeyboardView implements DrawingProxy
mPopupKeysKeyboardCache.put(key, popupKeysKeyboard); mPopupKeysKeyboardCache.put(key, popupKeysKeyboard);
} }
final View container = key.hasActionKeyBackground() ? mPopupKeysKeyboardForActionContainer final View container = key.hasActionKeyPopups() ? mPopupKeysKeyboardForActionContainer
: mPopupKeysKeyboardContainer; : mPopupKeysKeyboardContainer;
final PopupKeysKeyboardView popupKeysKeyboardView = final PopupKeysKeyboardView popupKeysKeyboardView =
container.findViewById(R.id.popup_keys_keyboard_view); container.findViewById(R.id.popup_keys_keyboard_view);

View file

@ -328,12 +328,13 @@ public final class PopupKeysKeyboard extends Keyboard {
final PopupKeysKeyboardParams params = mParams; final PopupKeysKeyboardParams params = mParams;
final int popupKeyFlags = mParentKey.getPopupKeyLabelFlags(); final int popupKeyFlags = mParentKey.getPopupKeyLabelFlags();
final PopupKeySpec[] popupKeys = mParentKey.getPopupKeys(); 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++) { for (int n = 0; n < popupKeys.length; n++) {
final PopupKeySpec popupKeySpec = popupKeys[n]; final PopupKeySpec popupKeySpec = popupKeys[n];
final int row = n / params.mNumColumns; final int row = n / params.mNumColumns;
final int x = params.getX(n, row); final int x = params.getX(n, row);
final int y = params.getY(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.markAsEdgeKey(key, row);
params.onAddKey(key); params.onAddKey(key);

View file

@ -15,8 +15,7 @@ import android.text.TextUtils;
import android.util.AttributeSet; import android.util.AttributeSet;
import android.util.TypedValue; import android.util.TypedValue;
import android.view.Gravity; import android.view.Gravity;
import android.widget.TextView;
import androidx.appcompat.widget.AppCompatTextView;
import helium314.keyboard.keyboard.Key; import helium314.keyboard.keyboard.Key;
import helium314.keyboard.latin.R; import helium314.keyboard.latin.R;
@ -25,10 +24,9 @@ import helium314.keyboard.latin.settings.Settings;
import java.util.HashSet; import java.util.HashSet;
/** /** The pop up key preview view. */
* 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 class KeyPreviewView extends AppCompatTextView {
public static final int POSITION_MIDDLE = 0; public static final int POSITION_MIDDLE = 0;
public static final int POSITION_LEFT = 1; public static final int POSITION_LEFT = 1;
public static final int POSITION_RIGHT = 2; public static final int POSITION_RIGHT = 2;

View file

@ -80,6 +80,7 @@ public final class KeyboardState {
private static final int SWITCH_STATE_SYMBOL_BEGIN = 1; private static final int SWITCH_STATE_SYMBOL_BEGIN = 1;
private static final int SWITCH_STATE_SYMBOL = 2; private static final int SWITCH_STATE_SYMBOL = 2;
private static final int SWITCH_STATE_NUMPAD = 3; 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_ALPHA_AND_SYMBOL = 4;
private static final int SWITCH_STATE_MOMENTARY_SYMBOL_AND_MORE = 5; private static final int SWITCH_STATE_MOMENTARY_SYMBOL_AND_MORE = 5;
private static final int SWITCH_STATE_MOMENTARY_ALPHA_SHIFT = 6; private static final int SWITCH_STATE_MOMENTARY_ALPHA_SHIFT = 6;
@ -403,7 +404,7 @@ public final class KeyboardState {
mMode = MODE_NUMPAD; mMode = MODE_NUMPAD;
mRecapitalizeMode = RecapitalizeStatus.NOT_A_RECAPITALIZE_MODE; mRecapitalizeMode = RecapitalizeStatus.NOT_A_RECAPITALIZE_MODE;
mSwitchActions.setNumpadKeyboard(); 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, public void toggleNumpad(final boolean withSliding, final int autoCapsFlags, final int recapitalizeMode,
@ -789,6 +790,17 @@ public final class KeyboardState {
mPrevSymbolsKeyboardWasShifted = false; mPrevSymbolsKeyboardWasShifted = false;
} }
break; 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. // 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_SYMBOL_AND_MORE -> "MOMENTARY-SYMBOL-MORE";
case SWITCH_STATE_MOMENTARY_ALPHA_SHIFT -> "MOMENTARY-ALPHA_SHIFT"; case SWITCH_STATE_MOMENTARY_ALPHA_SHIFT -> "MOMENTARY-ALPHA_SHIFT";
case SWITCH_STATE_NUMPAD -> "NUMPAD"; 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_TO_NUMPAD -> "MOMENTARY-TO-NUMPAD";
case SWITCH_STATE_MOMENTARY_FROM_NUMPAD -> "MOMENTARY-FROM-NUMPAD"; case SWITCH_STATE_MOMENTARY_FROM_NUMPAD -> "MOMENTARY-FROM-NUMPAD";
default -> null; default -> null;

View file

@ -68,11 +68,9 @@ public final class PopupKeySpec {
} }
@NonNull @NonNull
public Key buildKey(final int x, final int y, final int labelFlags, public Key buildKey(final int x, final int y, final int labelFlags, final int background, @NonNull final KeyboardParams params) {
@NonNull final KeyboardParams params) { return new Key(mLabel, mIconName, mCode, mOutputText, null, labelFlags, background, x, y,
return new Key(mLabel, mIconName, mCode, mOutputText, null /* hintLabel */, labelFlags, params.mDefaultAbsoluteKeyWidth, params.mDefaultAbsoluteRowHeight, params.mHorizontalGap, params.mVerticalGap);
Key.BACKGROUND_TYPE_NORMAL, x, y, params.mDefaultAbsoluteKeyWidth, params.mDefaultAbsoluteRowHeight,
params.mHorizontalGap, params.mVerticalGap);
} }
@Override @Override

View file

@ -59,8 +59,7 @@ object LayoutParser {
/** Parse simple layouts, defined only as rows of (normal) keys with popup keys. */ /** Parse simple layouts, defined only as rows of (normal) keys with popup keys. */
fun parseSimpleString(layoutText: String): List<List<KeyData>> { fun parseSimpleString(layoutText: String): List<List<KeyData>> {
val rowStrings = layoutText.replace("\r\n", "\n").split("\\n\\s*\\n".toRegex()).filter { it.isNotBlank() } return LayoutUtils.getSimpleRowStrings(layoutText).map { row ->
return rowStrings.map { row ->
row.split("\n").mapNotNull { parseKey(it) } row.split("\n").mapNotNull { parseKey(it) }
} }
} }

View file

@ -44,7 +44,7 @@ class LocaleKeyboardInfos(dataStream: InputStream?, locale: Locale) {
"mns" -> Key.LABEL_FLAGS_FOLLOW_KEY_LETTER_RATIO "mns" -> Key.LABEL_FLAGS_FOLLOW_KEY_LETTER_RATIO
else -> 0 else -> 0
} }
val tlds = getLocaleTlds(locale) // todo: USE IT val tlds = getLocaleTlds(locale)
init { init {
readStream(dataStream, false, true) 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) */ /** Pair(extraKeysLeft, extraKeysRight) */
fun getTabletExtraKeys(elementId: Int): Pair<List<KeyData>, List<KeyData>> { fun getTabletExtraKeys(elementId: Int): Pair<List<KeyData>, List<KeyData>> {
val flags = Key.LABEL_FLAGS_FONT_DEFAULT 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 if (locale == params.mId.locale) return@forEach
lkt.addFile(getStreamForLocale(locale, context), true) lkt.addFile(getStreamForLocale(locale, context), true)
} }
lkt.addDefaultTlds(params.mId.locale)
when (popupKeysSetting) { when (popupKeysSetting) {
POPUP_KEYS_MAIN -> lkt.addFile(context.assets.open("$LOCALE_TEXTS_FOLDER/more_popups_main.txt"), false) 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) 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<String> { private fun getLocaleTlds(locale: Locale): LinkedHashSet<String> {
val tlds = getDefaultTlds(locale)
val ccLower = locale.country.lowercase() val ccLower = locale.country.lowercase()
val tlds = LinkedHashSet<String>()
if (ccLower.isEmpty() || locale.language == SubtypeLocaleUtils.NO_LANGUAGE) if (ccLower.isEmpty() || locale.language == SubtypeLocaleUtils.NO_LANGUAGE)
return tlds return tlds
specialCountryTlds.forEach { specialCountryTlds.forEach {
if (ccLower != it.first) return@forEach if (ccLower != it.first) return@forEach
tlds.addAll(it.second.splitOnWhitespace()) tlds.addAll(it.second.splitOnWhitespace())
return tlds return@getLocaleTlds tlds
} }
tlds.add(".$ccLower") tlds.add(".$ccLower")
return tlds return tlds
} }
private fun getDefaultTlds(locale: Locale): LinkedHashSet<String> {
val tlds = linkedSetOf<String>()
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() fun clearCache() = localeKeyboardInfosCache.clear()
// cache the texts, so they don't need to be read over and over // cache the texts, so they don't need to be read over and over

View file

@ -24,6 +24,7 @@ import helium314.keyboard.latin.common.StringUtils
import helium314.keyboard.latin.settings.Settings import helium314.keyboard.latin.settings.Settings
import helium314.keyboard.latin.spellcheck.AndroidSpellCheckerService import helium314.keyboard.latin.spellcheck.AndroidSpellCheckerService
import helium314.keyboard.latin.utils.InputTypeUtils import helium314.keyboard.latin.utils.InputTypeUtils
import helium314.keyboard.latin.utils.LayoutType
import helium314.keyboard.latin.utils.Log import helium314.keyboard.latin.utils.Log
import helium314.keyboard.latin.utils.ToolbarKey import helium314.keyboard.latin.utils.ToolbarKey
import helium314.keyboard.latin.utils.getCodeForToolbarKey import helium314.keyboard.latin.utils.getCodeForToolbarKey
@ -482,8 +483,7 @@ sealed interface KeyData : AbstractKeyData {
KeyLabel.DELETE -> "!icon/delete_key|!code/key_delete" KeyLabel.DELETE -> "!icon/delete_key|!code/key_delete"
KeyLabel.SHIFT -> "${getShiftLabel(params)}|!code/key_shift" KeyLabel.SHIFT -> "${getShiftLabel(params)}|!code/key_shift"
// KeyLabel.EMOJI -> "!icon/emoji_normal_key|!code/key_emoji" // 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 -> params.mLocaleKeyboardInfos.tlds.first()
KeyLabel.COM -> ".com"
KeyLabel.LANGUAGE_SWITCH -> "!icon/language_switch_key|!code/key_language_switch" KeyLabel.LANGUAGE_SWITCH -> "!icon/language_switch_key|!code/key_language_switch"
KeyLabel.ZWNJ -> "!icon/zwnj_key|\u200C" KeyLabel.ZWNJ -> "!icon/zwnj_key|\u200C"
KeyLabel.CURRENCY -> params.mLocaleKeyboardInfos.currencyKey.first KeyLabel.CURRENCY -> params.mLocaleKeyboardInfos.currencyKey.first
@ -526,8 +526,11 @@ sealed interface KeyData : AbstractKeyData {
return when (label) { return when (label) {
KeyLabel.ALPHA, KeyLabel.SYMBOL_ALPHA, KeyLabel.SYMBOL -> Key.LABEL_FLAGS_PRESERVE_CASE or Key.LABEL_FLAGS_FOLLOW_FUNCTIONAL_TEXT_COLOR 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 KeyLabel.COMMA -> Key.LABEL_FLAGS_HAS_POPUP_HINT
// essentially this only changes the appearance of the armenian period key in holo theme // 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 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 -> { KeyLabel.ACTION -> {
Key.LABEL_FLAGS_PRESERVE_CASE or Key.LABEL_FLAGS_AUTO_X_SCALE or 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 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<AbstractKeyData>? { private fun getAdditionalPopupKeys(params: KeyboardParams): PopupSet<AbstractKeyData>? {
if (groupId == GROUP_COMMA) return SimplePopups(getCommaPopupKeys(params)) 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_ENTER) return getActionKeyPopupKeys(params)
if (groupId == GROUP_NO_DEFAULT_POPUP) return null if (groupId == GROUP_NO_DEFAULT_POPUP) return null
return when (label) { return when (label) {
KeyLabel.COMMA -> SimplePopups(getCommaPopupKeys(params)) KeyLabel.COMMA -> SimplePopups(getCommaPopupKeys(params))
KeyLabel.PERIOD -> SimplePopups(getPunctuationPopupKeys(params)) KeyLabel.PERIOD -> getPeriodPopups(params)
KeyLabel.ACTION -> getActionKeyPopupKeys(params) KeyLabel.ACTION -> getActionKeyPopupKeys(params)
KeyLabel.SHIFT -> { KeyLabel.SHIFT -> {
if (params.mId.isAlphabetKeyboard) SimplePopups( if (params.mId.isAlphabetKeyboard) SimplePopups(
@ -561,13 +564,27 @@ sealed interface KeyData : AbstractKeyData {
) )
) else null // why the alphabet popup keys actually? ) 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")) KeyLabel.ZWNJ -> SimplePopups(listOf("!icon/zwj_key|\u200D"))
// only add currency popups if there are none defined on the key // only add currency popups if there are none defined on the key
KeyLabel.CURRENCY -> if (popup.isEmpty()) SimplePopups(params.mLocaleKeyboardInfos.currencyKey.second) else null KeyLabel.CURRENCY -> if (popup.isEmpty()) SimplePopups(params.mLocaleKeyboardInfos.currencyKey.second) else null
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))
} }
/** /**

View file

@ -161,7 +161,7 @@ fun checkVersionUpgrade(context: Context) {
split[1] = newName split[1] = newName
split.joinToString(":") split.joinToString(":")
} }
Settings.writePrefAdditionalSubtypes(prefs, newSubtypeStrings.joinToString(";")) prefs.edit().putString(Settings.PREF_ADDITIONAL_SUBTYPES, newSubtypeStrings.joinToString(";")).apply()
} }
// rename other custom layouts // rename other custom layouts
LayoutUtilsCustom.onLayoutFileChanged() LayoutUtilsCustom.onLayoutFileChanged()
@ -232,7 +232,7 @@ fun checkVersionUpgrade(context: Context) {
KeyboardTheme.writeUserMoreColors(prefs, themeNameNight, moreColorsNight) KeyboardTheme.writeUserMoreColors(prefs, themeNameNight, moreColorsNight)
} }
if (prefs.contains("theme_dark_color_all_colors")) { 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() prefs.edit().remove("theme_dark_color_all_colors").apply()
KeyboardTheme.writeUserAllColors(prefs, themeNameNight, allColorsNight) 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() 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) upgradeToolbarPrefs(prefs)
LayoutUtilsCustom.onLayoutFileChanged() // just to be sure LayoutUtilsCustom.onLayoutFileChanged() // just to be sure
prefs.edit { putInt(Settings.PREF_VERSION_CODE, BuildConfig.VERSION_CODE) } prefs.edit { putInt(Settings.PREF_VERSION_CODE, BuildConfig.VERSION_CODE) }
@ -618,7 +630,7 @@ private fun upgradesWhenComingFromOldAppName(context: Context) {
val localeString = it.substringBefore(":") val localeString = it.substringBefore(":")
additionalSubtypes.add(it.replace(localeString, localeString.constructLocale().toLanguageTag())) 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) // move pinned clips to credential protected storage if device is not locked (should never happen)
if (!prefs.contains(Settings.PREF_PINNED_CLIPS)) return if (!prefs.contains(Settings.PREF_PINNED_CLIPS)) return

View file

@ -7,6 +7,7 @@
package helium314.keyboard.latin; package helium314.keyboard.latin;
import android.annotation.SuppressLint; import android.annotation.SuppressLint;
import android.app.AlertDialog;
import android.content.BroadcastReceiver; import android.content.BroadcastReceiver;
import android.content.Context; import android.content.Context;
import android.content.Intent; import android.content.Intent;
@ -100,7 +101,6 @@ import java.util.concurrent.TimeUnit;
import androidx.annotation.NonNull; import androidx.annotation.NonNull;
import androidx.annotation.Nullable; import androidx.annotation.Nullable;
import androidx.annotation.RequiresApi; import androidx.annotation.RequiresApi;
import androidx.appcompat.app.AlertDialog;
import androidx.core.content.ContextCompat; import androidx.core.content.ContextCompat;
/** /**
@ -523,6 +523,11 @@ public class LatinIME extends InputMethodService implements
} }
final class SubtypeState { 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 InputMethodSubtype mLastActiveSubtype;
private boolean mCurrentSubtypeHasBeenUsed = true; // starting with true avoids immediate switch private boolean mCurrentSubtypeHasBeenUsed = true; // starting with true avoids immediate switch
@ -530,6 +535,70 @@ public class LatinIME extends InputMethodService implements
mCurrentSubtypeHasBeenUsed = true; 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<Locale> 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) { public void switchSubtype(final RichInputMethodManager richImm) {
final InputMethodSubtype currentSubtype = richImm.getCurrentSubtype().getRawSubtype(); final InputMethodSubtype currentSubtype = richImm.getCurrentSubtype().getRawSubtype();
final InputMethodSubtype lastActiveSubtype = mLastActiveSubtype; final InputMethodSubtype lastActiveSubtype = mLastActiveSubtype;
@ -858,6 +927,8 @@ public class LatinIME extends InputMethodService implements
return; return;
} }
InputMethodSubtype oldSubtype = mRichImm.getCurrentSubtype().getRawSubtype(); InputMethodSubtype oldSubtype = mRichImm.getCurrentSubtype().getRawSubtype();
mSubtypeState.onSubtypeChanged(oldSubtype, subtype);
StatsUtils.onSubtypeChanged(oldSubtype, subtype); StatsUtils.onSubtypeChanged(oldSubtype, subtype);
mRichImm.onSubtypeChanged(subtype); mRichImm.onSubtypeChanged(subtype);
mInputLogic.onSubtypeChanged(SubtypeLocaleUtils.getCombiningRulesExtraValue(subtype), mInputLogic.onSubtypeChanged(SubtypeLocaleUtils.getCombiningRulesExtraValue(subtype),
@ -876,20 +947,10 @@ public class LatinIME extends InputMethodService implements
super.onStartInput(editorInfo, restarting); super.onStartInput(editorInfo, restarting);
final List<Locale> hintLocales = EditorInfoCompatUtils.getHintLocales(editorInfo); final List<Locale> hintLocales = EditorInfoCompatUtils.getHintLocales(editorInfo);
if (hintLocales == null) { final InputMethodSubtype subtypeForLocales = mSubtypeState.getSubtypeForLocales(mRichImm, hintLocales);
return; if (subtypeForLocales != null) {
} // found a better subtype using hint locales that we should switch to.
// Try switching to a subtype matching the hint language. mHandler.postSwitchLanguage(subtypeForLocales);
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;
} }
} }

View file

@ -9,7 +9,6 @@ import helium314.keyboard.keyboard.KeyboardTheme
import helium314.keyboard.latin.BuildConfig import helium314.keyboard.latin.BuildConfig
import helium314.keyboard.latin.common.Constants.Separators import helium314.keyboard.latin.common.Constants.Separators
import helium314.keyboard.latin.common.Constants.Subtype.ExtraValue 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.LayoutType
import helium314.keyboard.latin.utils.POPUP_KEYS_LABEL_DEFAULT import helium314.keyboard.latin.utils.POPUP_KEYS_LABEL_DEFAULT
import helium314.keyboard.latin.utils.POPUP_KEYS_ORDER_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_LANGUAGE_SWITCH_KEY = "internal"
const val PREF_SHOW_EMOJI_KEY = false const val PREF_SHOW_EMOJI_KEY = false
const val PREF_VARIABLE_TOOLBAR_DIRECTION = true const val PREF_VARIABLE_TOOLBAR_DIRECTION = true
const val PREF_ADDITIONAL_SUBTYPES = "de${Separators.SET}${ExtraValue.KEYBOARD_LAYOUT_SET}=qwerty${Separators.SETS}" + const val PREF_ADDITIONAL_SUBTYPES = "de${Separators.SET}${ExtraValue.KEYBOARD_LAYOUT_SET}=MAIN:qwerty${Separators.SETS}" +
"fr${Separators.SET}${ExtraValue.KEYBOARD_LAYOUT_SET}=qwertz${Separators.SETS}" + "fr${Separators.SET}${ExtraValue.KEYBOARD_LAYOUT_SET}=MAIN:qwertz${Separators.SETS}" +
"hu${Separators.SET}${ExtraValue.KEYBOARD_LAYOUT_SET}=qwerty" "hu${Separators.SET}${ExtraValue.KEYBOARD_LAYOUT_SET}=MAIN:qwerty"
const val PREF_ENABLE_SPLIT_KEYBOARD = false const val PREF_ENABLE_SPLIT_KEYBOARD = false
const val PREF_ENABLE_SPLIT_KEYBOARD_LANDSCAPE = false const val PREF_ENABLE_SPLIT_KEYBOARD_LANDSCAPE = false
const val PREF_SPLIT_SPACER_SCALE = SettingsValues.DEFAULT_SIZE_SCALE 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_ORDER = POPUP_KEYS_ORDER_DEFAULT
const val PREF_POPUP_KEYS_LABELS_ORDER = POPUP_KEYS_LABEL_DEFAULT const val PREF_POPUP_KEYS_LABELS_ORDER = POPUP_KEYS_LABEL_DEFAULT
const val PREF_SHOW_POPUP_HINTS = false 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_MORE_POPUP_KEYS = "main"
const val PREF_SPACE_TO_CHANGE_LANG = true const val PREF_SPACE_TO_CHANGE_LANG = true
const val PREF_LANGUAGE_SWIPE_DISTANCE = 5 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_EMOJI = false
const val PREF_ABC_AFTER_CLIP = false const val PREF_ABC_AFTER_CLIP = false
const val PREF_ABC_AFTER_SYMBOL_SPACE = true 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_REMOVE_REDUNDANT_POPUPS = false
const val PREF_SPACE_BAR_TEXT = "" const val PREF_SPACE_BAR_TEXT = ""
@JvmField @JvmField
@ -152,8 +153,6 @@ object Defaults {
const val PREF_EMOJI_RECENT_KEYS = "" const val PREF_EMOJI_RECENT_KEYS = ""
const val PREF_LAST_SHOWN_EMOJI_CATEGORY_PAGE_ID = 0 const val PREF_LAST_SHOWN_EMOJI_CATEGORY_PAGE_ID = 0
const val PREF_PINNED_CLIPS = "" const val PREF_PINNED_CLIPS = ""
@JvmField
val PREF_LIBRARY_CHECKSUM: String = JniUtils.expectedDefaultChecksum()
const val PREF_SHOW_DEBUG_SETTINGS = false const val PREF_SHOW_DEBUG_SETTINGS = false
val PREF_DEBUG_MODE = BuildConfig.DEBUG val PREF_DEBUG_MODE = BuildConfig.DEBUG
const val PREF_SHOW_SUGGESTION_INFOS = false const val PREF_SHOW_SUGGESTION_INFOS = false

View file

@ -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_POPUP_KEYS_LABELS_ORDER = "popup_keys_labels_order";
public static final String PREF_SHOW_POPUP_HINTS = "show_popup_hints"; 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_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_SPACE_TO_CHANGE_LANG = "prefs_long_press_keyboard_to_change_lang";
public static final String PREF_LANGUAGE_SWIPE_DISTANCE = "language_swipe_distance"; 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_EMOJI = "abc_after_emoji";
public static final String PREF_ABC_AFTER_CLIP = "abc_after_clip"; 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_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_REMOVE_REDUNDANT_POPUPS = "remove_redundant_popups";
public static final String PREF_SPACE_BAR_TEXT = "space_bar_text"; 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(); 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) { public static int readHorizontalSpaceSwipe(final SharedPreferences prefs) {
return switch (prefs.getString(PREF_SPACE_HORIZONTAL_SWIPE, Defaults.PREF_SPACE_HORIZONTAL_SWIPE)) { return switch (prefs.getString(PREF_SPACE_HORIZONTAL_SWIPE, Defaults.PREF_SPACE_HORIZONTAL_SWIPE)) {
case "move_cursor" -> KeyboardActionListener.SWIPE_MOVE_CURSOR; case "move_cursor" -> KeyboardActionListener.SWIPE_MOVE_CURSOR;

View file

@ -11,11 +11,9 @@ import helium314.keyboard.latin.common.LocaleUtils.constructLocale
import helium314.keyboard.latin.define.DebugFlags import helium314.keyboard.latin.define.DebugFlags
import helium314.keyboard.latin.utils.LayoutType import helium314.keyboard.latin.utils.LayoutType
import helium314.keyboard.latin.utils.LayoutType.Companion.toExtraValue 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.Log
import helium314.keyboard.latin.utils.ScriptUtils import helium314.keyboard.latin.utils.ScriptUtils
import helium314.keyboard.latin.utils.ScriptUtils.script import helium314.keyboard.latin.utils.ScriptUtils.script
import helium314.keyboard.latin.utils.SubtypeLocaleUtils
import helium314.keyboard.latin.utils.SubtypeUtilsAdditional import helium314.keyboard.latin.utils.SubtypeUtilsAdditional
import helium314.keyboard.latin.utils.locale import helium314.keyboard.latin.utils.locale
import java.util.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. /** Creates an additional subtype from the SettingsSubtype.
* Resulting InputMethodSubtypes are equal if SettingsSubtypes are equal */ * Resulting InputMethodSubtypes are equal if SettingsSubtypes are equal */
fun toAdditionalSubtype(): InputMethodSubtype? { fun toAdditionalSubtype(): InputMethodSubtype {
val asciiCapable = locale.script() == ScriptUtils.SCRIPT_LATIN val asciiCapable = locale.script() == ScriptUtils.SCRIPT_LATIN
val subtype = SubtypeUtilsAdditional.createAdditionalSubtype(locale, extraValues, asciiCapable, true) return 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
} }
fun mainLayoutName() = LayoutType.getMainLayoutFromExtraValue(extraValues) fun mainLayoutName() = LayoutType.getMainLayoutFromExtraValue(extraValues)
@ -50,7 +38,7 @@ data class SettingsSubtype(val locale: Locale, val extraValues: String) {
val newList = extraValues.split(",") val newList = extraValues.split(",")
.filterNot { it.isBlank() || it.startsWith("$extraValueKey=") || it == extraValueKey } .filterNot { it.isBlank() || it.startsWith("$extraValueKey=") || it == extraValueKey }
val newValue = if (extraValue == null) extraValueKey else "$extraValueKey=$extraValue" val newValue = if (extraValue == null) extraValueKey else "$extraValueKey=$extraValue"
val newValues = (newList + newValue).joinToString(",") val newValues = (newList + newValue).sorted().joinToString(",")
return copy(extraValues = newValues) return copy(extraValues = newValues)
} }

View file

@ -65,6 +65,7 @@ public class SettingsValues {
public final boolean mShowNumberRowHints; public final boolean mShowNumberRowHints;
public final boolean mShowsHints; public final boolean mShowsHints;
public final boolean mShowsPopupHints; public final boolean mShowsPopupHints;
public final boolean mShowTldPopupKeys;
public final boolean mSpaceForLangChange; public final boolean mSpaceForLangChange;
public final boolean mShowsEmojiKey; public final boolean mShowsEmojiKey;
public final boolean mVarToolbarDirection; public final boolean mVarToolbarDirection;
@ -113,6 +114,7 @@ public class SettingsValues {
public final boolean mAlphaAfterEmojiInEmojiView; public final boolean mAlphaAfterEmojiInEmojiView;
public final boolean mAlphaAfterClipHistoryEntry; public final boolean mAlphaAfterClipHistoryEntry;
public final boolean mAlphaAfterSymbolAndSpace; public final boolean mAlphaAfterSymbolAndSpace;
public final boolean mAlphaAfterNumpadAndSpace;
public final boolean mRemoveRedundantPopups; public final boolean mRemoveRedundantPopups;
public final String mSpaceBarText; public final String mSpaceBarText;
public final float mFontSizeMultiplier; 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); 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); mShowsHints = prefs.getBoolean(Settings.PREF_SHOW_HINTS, Defaults.PREF_SHOW_HINTS);
mShowsPopupHints = prefs.getBoolean(Settings.PREF_SHOW_POPUP_HINTS, Defaults.PREF_SHOW_POPUP_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); 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); 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); 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); 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); 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); 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); 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); 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); mEmojiMaxSdk = prefs.getInt(Settings.PREF_EMOJI_MAX_SDK, Defaults.PREF_EMOJI_MAX_SDK);

View file

@ -1,7 +1,7 @@
package helium314.keyboard.latin.utils package helium314.keyboard.latin.utils
import android.content.Context import android.content.Context
import androidx.appcompat.view.ContextThemeWrapper import android.view.ContextThemeWrapper
import helium314.keyboard.latin.R import helium314.keyboard.latin.R
// todo: ideally the custom InputMethodPicker would be removed / replaced with compose dialog, then this can be removed // todo: ideally the custom InputMethodPicker would be removed / replaced with compose dialog, then this can be removed

View file

@ -2,6 +2,7 @@
package helium314.keyboard.latin.utils package helium314.keyboard.latin.utils
import android.app.AlertDialog
import android.os.IBinder import android.os.IBinder
import android.text.Spannable import android.text.Spannable
import android.text.SpannableString import android.text.SpannableString
@ -10,7 +11,6 @@ import android.text.style.RelativeSizeSpan
import android.view.WindowManager import android.view.WindowManager
import android.view.inputmethod.InputMethodInfo import android.view.inputmethod.InputMethodInfo
import android.view.inputmethod.InputMethodSubtype import android.view.inputmethod.InputMethodSubtype
import androidx.appcompat.app.AlertDialog
import helium314.keyboard.latin.LatinIME import helium314.keyboard.latin.LatinIME
import helium314.keyboard.latin.R import helium314.keyboard.latin.R
import helium314.keyboard.latin.RichInputMethodManager import helium314.keyboard.latin.RichInputMethodManager

View file

@ -13,7 +13,6 @@ import android.text.TextUtils;
import helium314.keyboard.latin.App; import helium314.keyboard.latin.App;
import helium314.keyboard.latin.BuildConfig; import helium314.keyboard.latin.BuildConfig;
import helium314.keyboard.latin.settings.Defaults;
import helium314.keyboard.latin.settings.Settings; import helium314.keyboard.latin.settings.Settings;
import java.io.File; 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 // 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() // see https://developer.android.com/reference/android/content/Context#createDeviceProtectedStorageContext()
// if device is locked, this will throw an IllegalStateException // 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 FileInputStream libStream = new FileInputStream(userSuppliedLibrary);
final String checksum = ChecksumCalculator.INSTANCE.checksum(libStream); final String checksum = ChecksumCalculator.INSTANCE.checksum(libStream);

View file

@ -22,7 +22,7 @@ enum class LayoutType {
return map 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) { val LayoutType.displayNameId get() = when (this) {
MAIN -> R.string.subtype_no_language MAIN -> R.string.subtype_no_language

View file

@ -1,10 +1,13 @@
package helium314.keyboard.latin.utils package helium314.keyboard.latin.utils
import android.content.Context 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.R
import helium314.keyboard.latin.settings.Defaults.default import helium314.keyboard.latin.settings.Defaults.default
import helium314.keyboard.latin.utils.LayoutType.Companion.folder import helium314.keyboard.latin.utils.LayoutType.Companion.folder
import helium314.keyboard.latin.utils.ScriptUtils.script import helium314.keyboard.latin.utils.ScriptUtils.script
import java.io.File
import java.util.Locale import java.util.Locale
// for layouts provided by the app // for layouts provided by the app
@ -25,11 +28,35 @@ object LayoutUtils {
fun getLMainLayoutsForLocales(locales: List<Locale>, context: Context): Collection<String> = fun getLMainLayoutsForLocales(locales: List<Locale>, context: Context): Collection<String> =
locales.flatMapTo(HashSet()) { getAvailableLayouts(LayoutType.MAIN, context, it) }.sorted() 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 { fun getContent(layoutType: LayoutType, layoutName: String, context: Context): String {
val layouts = context.assets.list(layoutType.folder)!! val layouts = context.assets.list(layoutType.folder)!!
layouts.firstOrNull { it.startsWith("$layoutName.") } 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! 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<String> =
layoutContent.replace("\r\n", "\n").split("\\n\\s*\\n".toRegex()).filter { it.isNotBlank() }
} }

View file

@ -138,7 +138,7 @@ object LayoutUtilsCustom {
fun isCustomLayout(layoutName: String) = layoutName.startsWith(CUSTOM_LAYOUT_PREFIX) fun isCustomLayout(layoutName: String) = layoutName.startsWith(CUSTOM_LAYOUT_PREFIX)
fun getLayoutFile(layoutName: String, layoutType: LayoutType, context: Context): File { 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() file.parentFile?.mkdirs()
return file return file
} }

View file

@ -162,7 +162,7 @@ object ScriptUtils {
return SCRIPT_LATIN return SCRIPT_LATIN
} }
return when (language) { return when (language) {
"ar", "ur", "fa" -> SCRIPT_ARABIC "ar", "ckb", "ur", "fa" -> SCRIPT_ARABIC
"hy" -> SCRIPT_ARMENIAN "hy" -> SCRIPT_ARMENIAN
"bn" -> SCRIPT_BENGALI "bn" -> SCRIPT_BENGALI
"sr", "mk", "ru", "uk", "mn", "be", "kk", "ky", "bg", "xdq", "cv", "mhr", "mns", "dru" -> SCRIPT_CYRILLIC "sr", "mk", "ru", "uk", "mn", "be", "kk", "ky", "bg", "xdq", "cv", "mhr", "mns", "dru" -> SCRIPT_CYRILLIC

View file

@ -52,9 +52,8 @@ object SubtypeSettings {
fun addEnabledSubtype(prefs: SharedPreferences, newSubtype: InputMethodSubtype) { fun addEnabledSubtype(prefs: SharedPreferences, newSubtype: InputMethodSubtype) {
val subtype = newSubtype.toSettingsSubtype() val subtype = newSubtype.toSettingsSubtype()
val subtypes = prefs.getString(Settings.PREF_ENABLED_SUBTYPES, Defaults.PREF_ENABLED_SUBTYPES)!! val subtypes = createSettingsSubtypes(prefs.getString(Settings.PREF_ENABLED_SUBTYPES, Defaults.PREF_ENABLED_SUBTYPES)!!) + subtype
.split(Separators.SETS).filter { it.isNotBlank() }.map { it.toSettingsSubtype() } + subtype val newString = createPrefSubtypes(subtypes)
val newString = subtypes.map { it.toPref() }.toSortedSet().joinToString(Separators.SETS)
prefs.edit { putString(Settings.PREF_ENABLED_SUBTYPES, newString) } prefs.edit { putString(Settings.PREF_ENABLED_SUBTYPES, newString) }
if (newSubtype !in enabledSubtypes) { if (newSubtype !in enabledSubtypes) {
@ -74,10 +73,8 @@ object SubtypeSettings {
fun getSelectedSubtype(prefs: SharedPreferences): InputMethodSubtype { fun getSelectedSubtype(prefs: SharedPreferences): InputMethodSubtype {
val selectedSubtype = prefs.getString(Settings.PREF_SELECTED_SUBTYPE, Defaults.PREF_SELECTED_SUBTYPE)!!.toSettingsSubtype() val selectedSubtype = prefs.getString(Settings.PREF_SELECTED_SUBTYPE, Defaults.PREF_SELECTED_SUBTYPE)!!.toSettingsSubtype()
if (selectedSubtype.isAdditionalSubtype(prefs)) { if (selectedSubtype.isAdditionalSubtype(prefs))
val selectedAdditionalSubtype = selectedSubtype.toAdditionalSubtype() return selectedSubtype.toAdditionalSubtype()
if (selectedAdditionalSubtype != null) return selectedAdditionalSubtype
}
// no additional subtype, must be a resource subtype // no additional subtype, must be a resource subtype
val subtype = enabledSubtypes.firstOrNull { it.toSettingsSubtype() == selectedSubtype } val subtype = enabledSubtypes.firstOrNull { it.toSettingsSubtype() == selectedSubtype }
@ -157,6 +154,15 @@ object SubtypeSettings {
RichInputMethodManager.getInstance().refreshSubtypeCaches() RichInputMethodManager.getInstance().refreshSubtypeCaches()
} }
fun createSettingsSubtypes(prefSubtypes: String): List<SettingsSubtype> =
prefSubtypes.split(Separators.SETS).mapNotNull {
if (it.isEmpty()) null
else it.toSettingsSubtype()
}
fun createPrefSubtypes(subtypes: Collection<SettingsSubtype>): String =
subtypes.map { it.toPref() }.toSortedSet().joinToString(Separators.SETS)
fun init(context: Context) { fun init(context: Context) {
SubtypeLocaleUtils.init(context) // necessary to get the correct getKeyboardLayoutSetName SubtypeLocaleUtils.init(context) // necessary to get the correct getKeyboardLayoutSetName
@ -207,7 +213,8 @@ object SubtypeSettings {
} }
if (subtypesToRemove.isEmpty()) return if (subtypesToRemove.isEmpty()) return
Log.w(TAG, "removing custom subtypes without main layout files: $subtypesToRemove") 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) { private fun loadAdditionalSubtypes(prefs: SharedPreferences) {
@ -220,16 +227,12 @@ object SubtypeSettings {
// requires loadResourceSubtypes to be called before // requires loadResourceSubtypes to be called before
private fun loadEnabledSubtypes(context: Context) { private fun loadEnabledSubtypes(context: Context) {
val prefs = context.prefs() val prefs = context.prefs()
val settingsSubtypes = prefs.getString(Settings.PREF_ENABLED_SUBTYPES, Defaults.PREF_ENABLED_SUBTYPES)!! val settingsSubtypes = createSettingsSubtypes(prefs.getString(Settings.PREF_ENABLED_SUBTYPES, Defaults.PREF_ENABLED_SUBTYPES)!!)
.split(Separators.SETS).filter { it.isNotEmpty() }.map { it.toSettingsSubtype() }
for (settingsSubtype in settingsSubtypes) { for (settingsSubtype in settingsSubtypes) {
if (settingsSubtype.isAdditionalSubtype(prefs)) { if (settingsSubtype.isAdditionalSubtype(prefs)) {
val additionalSubtype = settingsSubtype.toAdditionalSubtype() enabledSubtypes.add(settingsSubtype.toAdditionalSubtype())
if (additionalSubtype != null) {
enabledSubtypes.add(additionalSubtype)
continue continue
} }
}
val subtypesForLocale = resourceSubtypesByLocale[settingsSubtype.locale] val subtypesForLocale = resourceSubtypesByLocale[settingsSubtype.locale]
if (subtypesForLocale == null) { if (subtypesForLocale == null) {
val message = "no resource subtype for $settingsSubtype" val message = "no resource subtype for $settingsSubtype"
@ -258,12 +261,11 @@ object SubtypeSettings {
/** @return whether pref was changed */ /** @return whether pref was changed */
private fun removeEnabledSubtype(prefs: SharedPreferences, subtype: SettingsSubtype): Boolean { private fun removeEnabledSubtype(prefs: SharedPreferences, subtype: SettingsSubtype): Boolean {
val oldSubtypes = prefs.getString(Settings.PREF_ENABLED_SUBTYPES, Defaults.PREF_ENABLED_SUBTYPES)!! val oldSubtypes = createSettingsSubtypes(prefs.getString(Settings.PREF_ENABLED_SUBTYPES, Defaults.PREF_ENABLED_SUBTYPES)!!)
.split(Separators.SETS).filter { it.isNotEmpty() }.map { it.toSettingsSubtype() }
val newSubtypes = oldSubtypes - subtype val newSubtypes = oldSubtypes - subtype
if (oldSubtypes == newSubtypes) if (oldSubtypes == newSubtypes)
return false // already removed 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()) { if (subtype == prefs.getString(Settings.PREF_SELECTED_SUBTYPE, Defaults.PREF_SELECTED_SUBTYPE)!!.toSettingsSubtype()) {
// switch subtype if the currently used one has been disabled // switch subtype if the currently used one has been disabled
try { try {

View file

@ -53,10 +53,11 @@ object SubtypeUtilsAdditional {
val prefs = context.prefs() val prefs = context.prefs()
SubtypeSettings.removeEnabledSubtype(context, subtype) SubtypeSettings.removeEnabledSubtype(context, subtype)
val oldAdditionalSubtypesString = prefs.getString(Settings.PREF_ADDITIONAL_SUBTYPES, Defaults.PREF_ADDITIONAL_SUBTYPES)!! val oldAdditionalSubtypesString = prefs.getString(Settings.PREF_ADDITIONAL_SUBTYPES, Defaults.PREF_ADDITIONAL_SUBTYPES)!!
val oldAdditionalSubtypes = createAdditionalSubtypes(oldAdditionalSubtypesString) val oldAdditionalSubtypes = SubtypeSettings.createSettingsSubtypes(oldAdditionalSubtypesString)
val newAdditionalSubtypes = oldAdditionalSubtypes.filter { it != subtype } val settingsSubtype = subtype.toSettingsSubtype()
val newAdditionalSubtypesString = createPrefSubtypes(newAdditionalSubtypes) val newAdditionalSubtypes = oldAdditionalSubtypes.filter { it != settingsSubtype }
Settings.writePrefAdditionalSubtypes(prefs, newAdditionalSubtypesString) val newAdditionalSubtypesString = SubtypeSettings.createPrefSubtypes(newAdditionalSubtypes)
prefs.edit().putString(Settings.PREF_ADDITIONAL_SUBTYPES, newAdditionalSubtypesString).apply()
} }
// updates additional subtypes, enabled subtypes, and selected subtype // updates additional subtypes, enabled subtypes, and selected subtype
@ -66,33 +67,36 @@ object SubtypeUtilsAdditional {
val isSelected = prefs.getString(Settings.PREF_SELECTED_SUBTYPE, Defaults.PREF_SELECTED_SUBTYPE)!!.toSettingsSubtype() == from 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) val isEnabled = prefs.getString(Settings.PREF_ENABLED_SUBTYPES, Defaults.PREF_ENABLED_SUBTYPES)!!.split(Separators.SETS)
.any { it.toSettingsSubtype() == from } .any { it.toSettingsSubtype() == from }
val new = prefs.getString(Settings.PREF_ADDITIONAL_SUBTYPES, Defaults.PREF_ADDITIONAL_SUBTYPES)!! val additionalSubtypes = SubtypeSettings.createSettingsSubtypes(prefs.getString(Settings.PREF_ADDITIONAL_SUBTYPES, Defaults.PREF_ADDITIONAL_SUBTYPES)!!)
.split(Separators.SETS).mapNotNullTo(sortedSetOf()) { .toMutableList()
if (it == from.toPref()) null else it additionalSubtypes.remove(from)
} + to.toPref() if (SubtypeSettings.getResourceSubtypesForLocale(to.locale).none { it.toSettingsSubtype() == to }) {
prefs.edit().putString(Settings.PREF_ADDITIONAL_SUBTYPES, new.joinToString(Separators.SETS)).apply() // 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.
val fromSubtype = from.toAdditionalSubtype() // will be null if we edit a resource subtype // If we don't do this, enabling the base subtype will result in the additional subtype being enabled,
val toSubtype = to.toAdditionalSubtype() // should never be null // as both have the same settingsSubtype.
if (isSelected && toSubtype != null) { additionalSubtypes.add(to)
SubtypeSettings.setSelectedSubtype(prefs, toSubtype)
} }
if (fromSubtype != null && isEnabled && toSubtype != null) { val editor = prefs.edit()
SubtypeSettings.removeEnabledSubtype(context, fromSubtype) editor.putString(Settings.PREF_ADDITIONAL_SUBTYPES, SubtypeSettings.createPrefSubtypes(additionalSubtypes))
SubtypeSettings.addEnabledSubtype(prefs, toSubtype) 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<InputMethodSubtype> { fun createAdditionalSubtypes(prefSubtypes: String): List<InputMethodSubtype> =
if (prefSubtypes.isEmpty()) prefSubtypes.split(Separators.SETS).mapNotNull {
return emptyList() if (it.isEmpty()) null
return prefSubtypes.split(Separators.SETS).mapNotNull { it.toSettingsSubtype().toAdditionalSubtype() } else it.toSettingsSubtype().toAdditionalSubtype()
}
fun createPrefSubtypes(subtypes: Collection<InputMethodSubtype>): String {
if (subtypes.isEmpty())
return ""
return subtypes.joinToString(Separators.SETS) { it.toSettingsSubtype().toPref() }
} }
private fun getNameResId(locale: Locale, mainLayoutName: String): Int { private fun getNameResId(locale: Locale, mainLayoutName: String): Int {

View file

@ -1,13 +1,18 @@
// SPDX-License-Identifier: GPL-3.0-only // SPDX-License-Identifier: GPL-3.0-only
package helium314.keyboard.settings 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.clickable
import androidx.compose.foundation.layout.Box import androidx.compose.foundation.layout.Box
import androidx.compose.foundation.layout.Column import androidx.compose.foundation.layout.Column
import androidx.compose.foundation.layout.Row import androidx.compose.foundation.layout.Row
import androidx.compose.foundation.layout.padding import androidx.compose.foundation.layout.padding
import androidx.compose.foundation.layout.size
import androidx.compose.material3.DropdownMenu import androidx.compose.material3.DropdownMenu
import androidx.compose.material3.DropdownMenuItem import androidx.compose.material3.DropdownMenuItem
import androidx.compose.material3.Icon
import androidx.compose.material3.MaterialTheme import androidx.compose.material3.MaterialTheme
import androidx.compose.material3.Text import androidx.compose.material3.Text
import androidx.compose.runtime.Composable import androidx.compose.runtime.Composable
@ -17,8 +22,13 @@ import androidx.compose.runtime.remember
import androidx.compose.runtime.setValue import androidx.compose.runtime.setValue
import androidx.compose.ui.Alignment import androidx.compose.ui.Alignment
import androidx.compose.ui.Modifier 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.compose.ui.unit.dp
import androidx.core.content.ContextCompat
import androidx.core.graphics.drawable.toBitmap
import androidx.core.util.TypedValueCompat
@Composable @Composable
fun WithSmallTitle( 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 @Composable
fun <T>DropDownField( fun <T>DropDownField(
items: List<T>, items: List<T>,

View file

@ -1,11 +1,16 @@
// SPDX-License-Identifier: GPL-3.0-only // SPDX-License-Identifier: GPL-3.0-only
package helium314.keyboard.settings 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.slideInHorizontally
import androidx.compose.animation.slideOutHorizontally import androidx.compose.animation.slideOutHorizontally
import androidx.compose.runtime.Composable import androidx.compose.runtime.Composable
import androidx.compose.runtime.collectAsState import androidx.compose.runtime.collectAsState
import androidx.compose.ui.platform.LocalContext
import androidx.compose.ui.platform.LocalLayoutDirection import androidx.compose.ui.platform.LocalLayoutDirection
import androidx.compose.ui.unit.IntOffset
import androidx.compose.ui.unit.LayoutDirection import androidx.compose.ui.unit.LayoutDirection
import androidx.navigation.compose.NavHost import androidx.navigation.compose.NavHost
import androidx.navigation.compose.composable import androidx.navigation.compose.composable
@ -41,6 +46,10 @@ fun SettingsNavHost(
val dir = if (LocalLayoutDirection.current == LayoutDirection.Ltr) 1 else -1 val dir = if (LocalLayoutDirection.current == LayoutDirection.Ltr) 1 else -1
val target = SettingsDestination.navTarget.collectAsState() 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<IntOffset>(durationMillis = duration)
fun goBack() { fun goBack() {
if (!navController.popBackStack()) onClickBack() if (!navController.popBackStack()) onClickBack()
} }
@ -48,10 +57,10 @@ fun SettingsNavHost(
NavHost( NavHost(
navController = navController, navController = navController,
startDestination = startDestination ?: SettingsDestination.Settings, startDestination = startDestination ?: SettingsDestination.Settings,
enterTransition = { slideInHorizontally(initialOffsetX = { +it * dir }) }, enterTransition = { slideInHorizontally(initialOffsetX = { +it * dir }, animationSpec = animation) },
exitTransition = { slideOutHorizontally(targetOffsetX = { -it * dir }) }, exitTransition = { slideOutHorizontally(targetOffsetX = { -it * dir }, animationSpec = animation) },
popEnterTransition = { slideInHorizontally(initialOffsetX = { -it * dir }) }, popEnterTransition = { slideInHorizontally(initialOffsetX = { -it * dir }, animationSpec = animation) },
popExitTransition = { slideOutHorizontally(targetOffsetX = { +it * dir }) } popExitTransition = { slideOutHorizontally(targetOffsetX = { +it * dir }, animationSpec = animation) }
) { ) {
composable(SettingsDestination.Settings) { composable(SettingsDestination.Settings) {
MainSettingsScreen( MainSettingsScreen(

View file

@ -125,8 +125,8 @@ fun SubtypeDialog(
onConfirmed = { onConfirmed(currentSubtype) }, onConfirmed = { onConfirmed(currentSubtype) },
neutralButtonText = if (initialSubtype.isAdditionalSubtype(prefs)) stringResource(R.string.delete) else null, neutralButtonText = if (initialSubtype.isAdditionalSubtype(prefs)) stringResource(R.string.delete) else null,
onNeutral = { onNeutral = {
SubtypeUtilsAdditional.removeAdditionalSubtype(ctx, initialSubtype.toAdditionalSubtype()!!) SubtypeUtilsAdditional.removeAdditionalSubtype(ctx, initialSubtype.toAdditionalSubtype())
SubtypeSettings.removeEnabledSubtype(ctx, initialSubtype.toAdditionalSubtype()!!) SubtypeSettings.removeEnabledSubtype(ctx, initialSubtype.toAdditionalSubtype())
onDismissRequest() onDismissRequest()
}, },
title = { title = {
@ -151,14 +151,14 @@ fun SubtypeDialog(
} }
Row { Row {
TextButton(onClick = { showKeyOrderDialog = true }, Modifier.weight(1f)) 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) { DefaultButton(currentSubtype.getExtraValueOf(ExtraValue.POPUP_ORDER) == null) {
setCurrentSubtype(currentSubtype.without(ExtraValue.POPUP_ORDER)) setCurrentSubtype(currentSubtype.without(ExtraValue.POPUP_ORDER))
} }
} }
Row { Row {
TextButton(onClick = { showHintOrderDialog = true }, Modifier.weight(1f)) 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) { DefaultButton(currentSubtype.getExtraValueOf(ExtraValue.HINT_ORDER) == null) {
setCurrentSubtype(currentSubtype.without(ExtraValue.HINT_ORDER)) setCurrentSubtype(currentSubtype.without(ExtraValue.HINT_ORDER))
} }
@ -393,7 +393,7 @@ private fun MainLayoutRow(
if (showLayoutEditDialog != null) { if (showLayoutEditDialog != null) {
val layoutName = showLayoutEditDialog!!.first val layoutName = showLayoutEditDialog!!.first
val startContent = showLayoutEditDialog?.second 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 else null
LayoutEditDialog( LayoutEditDialog(
onDismissRequest = { showLayoutEditDialog = null }, onDismissRequest = { showLayoutEditDialog = null },

View file

@ -35,10 +35,13 @@ fun LoadGestureLibPreference(setting: Setting) {
val abi = Build.SUPPORTED_ABIS[0] val abi = Build.SUPPORTED_ABIS[0]
val libFile = File(ctx.filesDir?.absolutePath + File.separator + JniUtils.JNI_LIB_IMPORT_FILE_NAME) val libFile = File(ctx.filesDir?.absolutePath + File.separator + JniUtils.JNI_LIB_IMPORT_FILE_NAME)
fun renameToLibFileAndRestart(file: File, checksum: String) { fun renameToLibFileAndRestart(file: File, checksum: String) {
libFile.setWritable(true)
libFile.delete() 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() 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 Runtime.getRuntime().exit(0) // exit will restart the app, so library will be loaded
} }
var tempFilePath: String? by rememberSaveable { mutableStateOf(null) } var tempFilePath: String? by rememberSaveable { mutableStateOf(null) }

View file

@ -29,6 +29,7 @@ import androidx.compose.ui.text.style.TextAlign
import androidx.compose.ui.tooling.preview.Preview import androidx.compose.ui.tooling.preview.Preview
import androidx.compose.ui.unit.dp import androidx.compose.ui.unit.dp
import helium314.keyboard.latin.R import helium314.keyboard.latin.R
import helium314.keyboard.settings.IconOrImage
import helium314.keyboard.settings.Theme import helium314.keyboard.settings.Theme
import helium314.keyboard.settings.previewDark import helium314.keyboard.settings.previewDark
@ -69,7 +70,7 @@ fun Preference(
verticalAlignment = Alignment.CenterVertically verticalAlignment = Alignment.CenterVertically
) { ) {
if (icon != null) if (icon != null)
Icon(painterResource(icon), name, modifier = Modifier.size(36.dp)) IconOrImage(icon, name, 36f)
Column(modifier = Modifier.weight(1f)) { Column(modifier = Modifier.weight(1f)) {
Text(text = name, style = MaterialTheme.typography.bodyLarge) Text(text = name, style = MaterialTheme.typography.bodyLarge)
if (description != null) { if (description != null) {

View file

@ -2,6 +2,7 @@
package helium314.keyboard.settings.screens package helium314.keyboard.settings.screens
import android.app.Activity import android.app.Activity
import android.app.AlertDialog
import android.content.Context import android.content.Context
import android.content.Intent import android.content.Intent
import android.text.method.LinkMovementMethod import android.text.method.LinkMovementMethod
@ -10,7 +11,6 @@ import android.widget.TextView
import android.widget.Toast import android.widget.Toast
import androidx.activity.compose.rememberLauncherForActivityResult import androidx.activity.compose.rememberLauncherForActivityResult
import androidx.activity.result.contract.ActivityResultContracts import androidx.activity.result.contract.ActivityResultContracts
import androidx.appcompat.app.AlertDialog
import androidx.compose.material3.Surface import androidx.compose.material3.Surface
import androidx.compose.runtime.Composable import androidx.compose.runtime.Composable
import androidx.compose.runtime.getValue import androidx.compose.runtime.getValue
@ -69,7 +69,7 @@ fun createAboutSettings(context: Context) = listOf(
name = it.title, name = it.title,
description = it.description, description = it.description,
onClick = { }, 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) { Setting(context, SettingsWithoutKey.VERSION, R.string.version) {

View file

@ -66,6 +66,7 @@ fun AdvancedSettingsScreen(
Settings.PREF_ENABLE_EMOJI_ALT_PHYSICAL_KEY, Settings.PREF_ENABLE_EMOJI_ALT_PHYSICAL_KEY,
if (Build.VERSION.SDK_INT < Build.VERSION_CODES.Q) Settings.PREF_SHOW_SETUP_WIZARD_ICON else null, 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_SYMBOL_SPACE,
Settings.PREF_ABC_AFTER_NUMPAD_SPACE,
Settings.PREF_ABC_AFTER_EMOJI, Settings.PREF_ABC_AFTER_EMOJI,
Settings.PREF_ABC_AFTER_CLIP, Settings.PREF_ABC_AFTER_CLIP,
Settings.PREF_CUSTOM_CURRENCY_KEY, Settings.PREF_CUSTOM_CURRENCY_KEY,
@ -154,6 +155,11 @@ fun createAdvancedSettings(context: Context) = listOf(
{ {
SwitchPreference(it, Defaults.PREF_ABC_AFTER_SYMBOL_SPACE) 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) { Setting(context, Settings.PREF_ABC_AFTER_EMOJI, R.string.switch_keyboard_after, R.string.after_emoji) {
SwitchPreference(it, Defaults.PREF_ABC_AFTER_EMOJI) SwitchPreference(it, Defaults.PREF_ABC_AFTER_EMOJI)
}, },

View file

@ -46,6 +46,7 @@ fun PreferencesScreen(
Settings.PREF_POPUP_KEYS_LABELS_ORDER else null, Settings.PREF_POPUP_KEYS_LABELS_ORDER else null,
Settings.PREF_POPUP_KEYS_ORDER, Settings.PREF_POPUP_KEYS_ORDER,
Settings.PREF_SHOW_POPUP_HINTS, Settings.PREF_SHOW_POPUP_HINTS,
Settings.PREF_SHOW_TLD_POPUP_KEYS,
Settings.PREF_POPUP_ON, Settings.PREF_POPUP_ON,
if (AudioAndHapticFeedbackManager.getInstance().hasVibrator()) if (AudioAndHapticFeedbackManager.getInstance().hasVibrator())
Settings.PREF_VIBRATE_ON else null, 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) { Setting(context, Settings.PREF_POPUP_KEYS_ORDER, R.string.popup_order) {
ReorderSwitchPreference(it, Defaults.PREF_POPUP_KEYS_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) { 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() } SwitchPreference(it, Defaults.PREF_SHOW_POPUP_HINTS) { KeyboardSwitcher.getInstance().setThemeNeedsReload() }
}, },

View file

@ -8,8 +8,7 @@
android:width="24dp" android:width="24dp"
android:height="24dp" android:height="24dp"
android:viewportWidth="960" android:viewportWidth="960"
android:viewportHeight="960" android:viewportHeight="960">
android:tint="?attr/colorControlNormal">
<path android:fillColor="#FFF" <path android:fillColor="#FFF"
android:pathData="M200,840Q167,840 143.5,816.5Q120,793 120,760L120,200Q120,167 143.5,143.5Q167,120 200,120L367,120Q378,85 410,62.5Q442,40 480,40Q520,40 551.5,62.5Q583,85 594,120L760,120Q793,120 816.5,143.5Q840,167 840,200L840,760Q840,793 816.5,816.5Q793,840 760,840L200,840ZM200,760L760,760Q760,760 760,760Q760,760 760,760L760,200Q760,200 760,200Q760,200 760,200L680,200L680,280Q680,297 668.5,308.5Q657,320 640,320L320,320Q303,320 291.5,308.5Q280,297 280,280L280,200L200,200Q200,200 200,200Q200,200 200,200L200,760Q200,760 200,760Q200,760 200,760ZM480,200Q497,200 508.5,188.5Q520,177 520,160Q520,143 508.5,131.5Q497,120 480,120Q463,120 451.5,131.5Q440,143 440,160Q440,177 451.5,188.5Q463,200 480,200Z"/> android:pathData="M200,840Q167,840 143.5,816.5Q120,793 120,760L120,200Q120,167 143.5,143.5Q167,120 200,120L367,120Q378,85 410,62.5Q442,40 480,40Q520,40 551.5,62.5Q583,85 594,120L760,120Q793,120 816.5,143.5Q840,167 840,200L840,760Q840,793 816.5,816.5Q793,840 760,840L200,840ZM200,760L760,760Q760,760 760,760Q760,760 760,760L760,200Q760,200 760,200Q760,200 760,200L680,200L680,280Q680,297 668.5,308.5Q657,320 640,320L320,320Q303,320 291.5,308.5Q280,297 280,280L280,200L200,200Q200,200 200,200Q200,200 200,200L200,760Q200,760 200,760Q200,760 200,760ZM480,200Q497,200 508.5,188.5Q520,177 520,160Q520,143 508.5,131.5Q497,120 480,120Q463,120 451.5,131.5Q440,143 440,160Q440,177 451.5,188.5Q463,200 480,200Z"/>
</vector> </vector>

View file

@ -79,8 +79,8 @@
<string name="setup_welcome_additional_description">"በጣት ምልክት መተየብ"</string> <string name="setup_welcome_additional_description">"በጣት ምልክት መተየብ"</string>
<string name="setup_start_action">"ጀምር"</string> <string name="setup_start_action">"ጀምር"</string>
<string name="setup_next_action">"ቀጣይ ደረጃ"</string> <string name="setup_next_action">"ቀጣይ ደረጃ"</string>
<string name="setup_steps_title">"<xliff:g id="APPLICATION_NAME">%s</xliff:g>ን በማዋቀር ላይ"</string> <string name="setup_steps_title"><xliff:g id="APPLICATION_NAME">%s</xliff:g>ን በማዋቀር ላይ\"</string>
<string name="setup_step1_title">"<xliff:g id="APPLICATION_NAME">%s</xliff:g>ን ያንቁ"</string> <string name="setup_step1_title"><xliff:g id="APPLICATION_NAME">%s</xliff:g>ን ያንቁ\"</string>
<string name="setup_step1_instruction">እባክዎ <xliff:g id="APPLICATION_NAME">%s</xliff:g>»ን በእርስዎ የቋንቋ እና ግቤት ቅንብሮች ውስጥ መኖሩን ያረጋግጡት። ይሄ እሱ በመሣሪያዎ ላይ እንዲሄድ ይፈቅድለታል።\"</string> <string name="setup_step1_instruction">እባክዎ <xliff:g id="APPLICATION_NAME">%s</xliff:g>»ን በእርስዎ የቋንቋ እና ግቤት ቅንብሮች ውስጥ መኖሩን ያረጋግጡት። ይሄ እሱ በመሣሪያዎ ላይ እንዲሄድ ይፈቅድለታል።\"</string>
<string name="setup_step1_finished_instruction">"<xliff:g id="APPLICATION_NAME">%s</xliff:g> አስቀድሞ በእርስዎ ቋንቋ እና ግቤት ቅንብሮች ውስጥ ነቅቷል፣ ስለዚህ ይህ ደረጃ ተከናውኗል። ወደ ቀጣዩ እንሂድ!"</string> <string name="setup_step1_finished_instruction">"<xliff:g id="APPLICATION_NAME">%s</xliff:g> አስቀድሞ በእርስዎ ቋንቋ እና ግቤት ቅንብሮች ውስጥ ነቅቷል፣ ስለዚህ ይህ ደረጃ ተከናውኗል። ወደ ቀጣዩ እንሂድ!"</string>
<string name="setup_step1_action">"በቅንብሮች ውስጥ ያንቁ"</string> <string name="setup_step1_action">"በቅንብሮች ውስጥ ያንቁ"</string>

View file

@ -75,16 +75,16 @@
<string name="prefs_enable_emoji_alt_physical_key">"الرموز التعبيرية للوحة مفاتيح فعلية"</string> <string name="prefs_enable_emoji_alt_physical_key">"الرموز التعبيرية للوحة مفاتيح فعلية"</string>
<string name="prefs_enable_emoji_alt_physical_key_summary">"‏مفتاح Alt الفعلي يعرض لوحة الرموز التعبيرية"</string> <string name="prefs_enable_emoji_alt_physical_key_summary">"‏مفتاح Alt الفعلي يعرض لوحة الرموز التعبيرية"</string>
<string name="button_default">"التلقائية"</string> <string name="button_default">"التلقائية"</string>
<string name="setup_welcome_title">مرحبًا بكم في<xliff:g id="APPLICATION_NAME" مثال="لوحة مفاتيح أندرويد">%s</xliff:g></string> <string name="setup_welcome_title">مرحبًا بكم في <xliff:g id="APPLICATION_NAME" مثال="لوحة مفاتيح أندرويد">%s</xliff:g></string>
<string name="setup_welcome_additional_description">مع الكتابة بالإيماءة</string> <string name="setup_welcome_additional_description">مع الكتابة بالإيماءة</string>
<string name="setup_start_action">"بدء الاستخدام"</string> <string name="setup_start_action">"بدء الاستخدام"</string>
<string name="setup_next_action">"الخطوة التالية"</string> <string name="setup_next_action">"الخطوة التالية"</string>
<string name="setup_steps_title">قيد الإعداد<xliff:g id="APPLICATION_NAME" مثال="لوحة مفاتيح أندرويد">%s</xliff:g></string> <string name="setup_steps_title">قيد الإعداد <xliff:g id="APPLICATION_NAME" مثال="لوحة مفاتيح أندرويد">%s</xliff:g></string>
<string name="setup_step1_title">مكِّن<xliff:g id="APPLICATION_NAME" مثال="لوحة مفاتيح أندرويد">%s</xliff:g></string> <string name="setup_step1_title">مكِّن <xliff:g id="APPLICATION_NAME" مثال="لوحة مفاتيح أندرويد">%s</xliff:g></string>
<string name="setup_step1_instruction">يرجى التحقق من \\<xliff:g id="APPLICATION_NAME" مثال="لوحة مفاتيح أندرويد">%s</xliff:g>\" في إعدادات الإدخال واللغات. سيؤدي ذلك إلى تمكين لوحة المفاتيح على جهازك.\"</string> <string name="setup_step1_instruction">يرجى التحقق من \\<xliff:g id="APPLICATION_NAME" مثال="لوحة مفاتيح أندرويد">%s</xliff:g>\" في إعدادات الإدخال واللغات. سيؤدي ذلك إلى تمكين لوحة المفاتيح على جهازك.\"</string>
<string name="setup_step1_finished_instruction">&lt;xliff:g id=\"APPLICATION_NAME\" مثال=\"لوحة مفاتيح أندرويد\"&gt;%s&lt;/xliff:g&gt; ممكّن بالفعل في إعدادات اللغات &amp;amp؛ إعدادات الإدخال، لذا فقد تم الانتهاء من هذه الخطوة. إلى الخطوة التالية!\"</string> <string name="setup_step1_finished_instruction">&lt;xliff:g id=\"APPLICATION_NAME\" مثال=\"لوحة مفاتيح أندرويد\"&gt;%s&lt;/xliff:g&gt; ممكّن بالفعل في إعدادات اللغات &amp;amp؛ إعدادات الإدخال، لذا فقد تم الانتهاء من هذه الخطوة. إلى الخطوة التالية!\"</string>
<string name="setup_step1_action">"تفعيل في الإعدادات"</string> <string name="setup_step1_action">"تفعيل في الإعدادات"</string>
<string name="setup_step2_title">قم بالتبديل إلى<xliff:g id="APPLICATION_NAME" مثال="لوحة مفاتيح أندرويد">%s</xliff:g></string> <string name="setup_step2_title">بدّل إلى <xliff:g id="APPLICATION_NAME" مثال="لوحة مفاتيح أندرويد">%s</xliff:g></string>
<string name="setup_step2_instruction">بعد ذلك، اختر \\&lt;&lt;xliff:g id=\"APPLICATION_NAME\" مثال=\"لوحة مفاتيح أندرويد\"&gt;%s&lt;/xliff:g&gt;” كطريقة إدخال النص النشط.“</string> <string name="setup_step2_instruction">بعد ذلك، اختر \\&lt;&lt;xliff:g id=\"APPLICATION_NAME\" مثال=\"لوحة مفاتيح أندرويد\"&gt;%s&lt;/xliff:g&gt;” كطريقة إدخال النص النشط.“</string>
<string name="setup_step2_action">"تبديل أساليب الإدخال"</string> <string name="setup_step2_action">"تبديل أساليب الإدخال"</string>
<string name="setup_step3_title">تهانينا ، لقد انتهيت من الإعداد!</string> <string name="setup_step3_title">تهانينا ، لقد انتهيت من الإعداد!</string>
@ -472,4 +472,8 @@
<string name="locales_with_dict">اللغات مع القواميس</string> <string name="locales_with_dict">اللغات مع القواميس</string>
<string name="get_layouts_message">يمكنك العثور على المخططات ومشاركتها في %s.</string> <string name="get_layouts_message">يمكنك العثور على المخططات ومشاركتها في %s.</string>
<string name="discussion_section_link">قسم المناقشة</string> <string name="discussion_section_link">قسم المناقشة</string>
<string name="custom_subtype">نوع فرعي مخصّص</string>
<string name="subtype_baishakhi_bn_IN"><xliff:g id="LANGUAGE_NAME" example="Bengali">%s</xliff:g> (Baishakhi)</string>
<string name="show_tld_popup_keys">أظهِر مفاتيح TLD المنبثقة</string>
<string name="show_tld_popup_keys_summary">استبدل مفتاح الفترة المنبثقة مع مجالات المستوى الأعلى عند كتابة عناوين URL وعناوين البريد الإلكتروني</string>
</resources> </resources>

View file

@ -3,8 +3,7 @@
Copyright (C) 2008 The Android Open Source Project Copyright (C) 2008 The Android Open Source Project
modified modified
SPDX-License-Identifier: Apache-2.0 AND GPL-3.0-only SPDX-License-Identifier: Apache-2.0 AND GPL-3.0-only
--> --><resources xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
<resources xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
<string name="use_contacts_dict">"Kontakt adlarına baxın"</string> <string name="use_contacts_dict">"Kontakt adlarına baxın"</string>
<string name="vibrate_on_keypress">"Vibrasiyalı klikləmə"</string> <string name="vibrate_on_keypress">"Vibrasiyalı klikləmə"</string>
<string name="sound_on_keypress">"Klikləmə səsi"</string> <string name="sound_on_keypress">"Klikləmə səsi"</string>
@ -76,16 +75,16 @@
<string name="prefs_enable_emoji_alt_physical_key">"Fiziki klaviatura üçün emoji"</string> <string name="prefs_enable_emoji_alt_physical_key">"Fiziki klaviatura üçün emoji"</string>
<string name="prefs_enable_emoji_alt_physical_key_summary">"Fiziki ALt düyməsi emoji palletini göstərir"</string> <string name="prefs_enable_emoji_alt_physical_key_summary">"Fiziki ALt düyməsi emoji palletini göstərir"</string>
<string name="button_default">"Defolt"</string> <string name="button_default">"Defolt"</string>
<string name="setup_welcome_title">"<xliff:g id="APPLICATION_NAME">%s</xliff:g> təbiqinə xoş gəlmisiniz"</string> <string name="setup_welcome_title"><xliff:g id="APPLICATION_NAME">%s</xliff:g> təbiqinə xoş gəlmisiniz\"</string>
<string name="setup_welcome_additional_description">"Jest Yazısı ilə"</string> <string name="setup_welcome_additional_description">"Jest Yazısı ilə"</string>
<string name="setup_start_action">"Başlayın"</string> <string name="setup_start_action">"Başlayın"</string>
<string name="setup_next_action">"Növbəti addım"</string> <string name="setup_next_action">"Növbəti addım"</string>
<string name="setup_steps_title">"<xliff:g id="APPLICATION_NAME">%s</xliff:g> quraşdırılır"</string> <string name="setup_steps_title"><xliff:g id="APPLICATION_NAME">%s</xliff:g> quraşdırılır\"</string>
<string name="setup_step1_title">"<xliff:g id="APPLICATION_NAME">%s</xliff:g> tətbiqini aktivləşdir"</string> <string name="setup_step1_title"><xliff:g id="APPLICATION_NAME">%s</xliff:g> tətbiqini aktivləşdir\"</string>
<string name="setup_step1_instruction">"Lütfən, \"<xliff:g id="APPLICATION_NAME">%s</xliff:g>\" tətbiqini Dillər və daxiletmə ayarlarında yoxlayın. Bununla tətbiqin cihazınızda işləməsinə icazə veriləcək."</string> <string name="setup_step1_instruction">"Lütfən, \"<xliff:g id="APPLICATION_NAME">%s</xliff:g>\" tətbiqini Dillər və daxiletmə ayarlarında yoxlayın. Bununla tətbiqin cihazınızda işləməsinə icazə veriləcək."</string>
<string name="setup_step1_finished_instruction">"<xliff:g id="APPLICATION_NAME">%s</xliff:g> 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!"</string> <string name="setup_step1_finished_instruction">"<xliff:g id="APPLICATION_NAME">%s</xliff:g> 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!"</string>
<string name="setup_step1_action">"Parametrlərdə aktivləşdir"</string> <string name="setup_step1_action">"Parametrlərdə aktivləşdir"</string>
<string name="setup_step2_title">"<xliff:g id="APPLICATION_NAME">%s</xliff:g> tətbiqinə keçin"</string> <string name="setup_step2_title"><xliff:g id="APPLICATION_NAME">%s</xliff:g> tətbiqinə keçin\"</string>
<string name="setup_step2_instruction">"Sonra, \"<xliff:g id="APPLICATION_NAME">%s</xliff:g>\" tətbiqini aktiv mətn-daxiletmə metodu olaraq seçin."</string> <string name="setup_step2_instruction">"Sonra, \"<xliff:g id="APPLICATION_NAME">%s</xliff:g>\" tətbiqini aktiv mətn-daxiletmə metodu olaraq seçin."</string>
<string name="setup_step2_action">"Daxil metodlarına keç"</string> <string name="setup_step2_action">"Daxil metodlarına keç"</string>
<string name="setup_step3_title">"Təbrik edirik, tam hazırsınız!"</string> <string name="setup_step3_title">"Təbrik edirik, tam hazırsınız!"</string>

View file

@ -370,5 +370,64 @@
<string name="space_swipe_toggle_numpad_entry">Пераключыць лічбавую клавіятуру</string> <string name="space_swipe_toggle_numpad_entry">Пераключыць лічбавую клавіятуру</string>
<string name="show_popup_keys_main">Дадаць самыя распаўсюджаныя варыянты (па змаўчанні)</string> <string name="show_popup_keys_main">Дадаць самыя распаўсюджаныя варыянты (па змаўчанні)</string>
<string name="remove_redundant_popups">Выдаліць лішнія ўсплывальныя вокны</string> <string name="remove_redundant_popups">Выдаліць лішнія ўсплывальныя вокны</string>
<string name="remove_redundant_popups_summary">Прыбраць усплывальныя клавішы, якія прысутнічаюць у базавай раскладцы</string> <string name="remove_redundant_popups_summary">Прыбраць усплывальныя клавішы, якія ўжо прысутнічаюць у базавай раскладцы</string>
<string name="gesture_floating_preview_static">Плаваючы прадпрагляд</string>
<string name="gesture_floating_preview_static_summary">Бачыць прапанаванае слова падчас набору жэстамі</string>
<string name="split" tools:keep="@string/split">Раздзельная клавіятура</string>
<string name="vibrate_in_dnd_mode">Вібрацыя ў рэжыме «Не турбаваць»</string>
<string name="enable_split_keyboard_landscape">Уключыць падзеленую клавіятуру (альбомная)</string>
<string name="split_spacer_scale_landscape">Адлегласць падзелу (альбомная)</string>
<string name="gesture_floating_preview_dynamic_summary">Перамяшчаць прадпрагляд падчас набору жэстамі</string>
<string name="gesture_trail_fadeout_duration">Час жыцця следа жэста</string>
<string name="auto_correct_shortcuts">Аўтакарэкцыя спалучэнняў клавіш</string>
<string name="auto_correct_shortcuts_summary">Калі ўключана, спалучэнні клавіш могуць быць пашыраны з дапамогай аўтакарэкцыі</string>
<string name="prefs_bottom_padding_scale_landscape">Маштаб ніжняга водступу (альбомная)</string>
<string name="prefs_side_padding_scale">Маштаб бакавога водступу</string>
<string name="number_row_hints">Паказваць падказкі ў шэрагу з лічбамі</string>
<string name="locales_with_dict">Мовы са слоўнікамі</string>
<string name="custom_subtype">Карыстацкі падтып</string>
<string name="layout_emoji_bottom_row" tools:keep="@string/layout_emoji_bottom_row">Радок эмодзі ўнізе</string>
<string name="layout_clip_bottom_row" tools:keep="@string/layout_clip_bottom_row">Радок буфера абмену ўнізе</string>
<string name="layout_in_use">Папярэджанне: раскладка ў дадзены момант выкарыстоўваецца</string>
<string name="customize_icons">Наладзіць значкі</string>
<string name="customize_icons_reset_message">Сапраўды скінуць усе настроеныя значкі?</string>
<string name="layout_number_row" tools:keep="@string/layout_number_row">Шэраг з лічбамі</string>
<string name="customize_background_image_landscape">Усталяваць фонавы малюнак (альбомная)</string>
<string name="prefs_key_emoji_max_sdk">Перавызначыць версію эмодзі</string>
<string name="subtype_dru">Даргінскі (Урахі)</string>
<string name="subtype_with_layout_dru" tools:keep="@string/subtype_with_layout_dru">Урахінскі (<xliff:g id="KEYBOARD_LAYOUT" example="QWERTY">%s</xliff:g>)</string>
<string name="key_code">Код клавішы</string>
<string name="delete_confirmation">Сапраўды выдаліць %s?</string>
<string name="custom_font">Усталяваць карыстацкі шрыфт з файла</string>
<string name="summary_customize_background_image_landscape">Калі не ўстаноўлена, будзе выкарыстоўвацца партрэтны малюнак</string>
<string name="label_zwnj_key" tools:keep="@string/label_zwnj_key">Раз\'яднальнік нулявой шырыні</string>
<string name="customize_toolbar_key_code_reset_message">Вы сапраўды хочаце выдаліць усе настроеныя коды клавіш?</string>
<string name="settings_screen_secondary_layouts">Дадатковыя раскладкі</string>
<string name="layout_functional_keys_tablet" tools:keep="@string/layout_functional_keys_tablet">Функцыянальныя клавішы (вялікі экран)</string>
<string name="icon_style">Стыль значкоў</string>
<string name="label_zwj_key" tools:keep="@string/label_zwj_key">Злучальнік нулявой шырыні</string>
<string name="label_bin" tools:keep="@string/label_bin">Сметніца</string>
<string name="name_invalid">Недапушчальнае імя</string>
<string name="label_delete_key" tools:keep="@string/label_delete_key">Выдаліць</string>
<string name="label_enter_key" tools:keep="@string/label_enter_key">Увод</string>
<string name="label_shift_key" tools:keep="@string/label_shift_key">Shift</string>
<string name="label_tab_key" tools:keep="@string/label_tab_key">Табуляцыя</string>
<string name="label_shift_key_shifted" tools:keep="@string/label_shift_key_shifted">Shift (націснута)</string>
<string name="prefs_font_scale">Маштаб шрыфта клавіятуры</string>
<string name="prefs_emoji_font_scale">Маштаб шрыфта адлюстравання эмодзі</string>
<string name="prefs_side_padding_scale_landscape">Маштаб бакавога водступу (альбомная)</string>
<string name="long_press_code">Код доўгага націску</string>
<string name="prefs_language_swipe_distance">Адлегласць змахвання для пераключэння мовы</string>
<string name="customize_toolbar_key_codes">Наладзіць коды клавіш панэлі інструментаў</string>
<string name="prefs_space_bar_text">Карыстацкі тэкст на клавішы прабела</string>
<string name="label_space_key_for_number_layout" tools:keep="@string/label_space_key_for_number_layout">Прабел (раскладка лічбаў)</string>
<string name="label_switch_onehanded_key" tools:keep="@string/label_switch_onehanded_key">Пераключыць бок рэжыму адной рукой</string>
<string name="get_colors_message">Знайсці і падзяліцца колерамі ў %s.</string>
<string name="get_layouts_message">Знайсці і падзяліцца раскладкамі ў %s.</string>
<string name="discussion_section_link">абмеркавання</string>
<string name="label_shift_key_locked" tools:keep="@string/label_shift_key_locked">Caps lock</string>
<string name="label_stop_onehanded_mode_key" tools:keep="@string/label_stop_onehanded_mode_key">Завяршыць рэжым адной рукой</string>
<string name="label_resize_onehanded_key" tools:keep="@string/label_resize_onehanded_key">Змяніць памер у рэжыме адной рукой</string>
<string name="label_shortcut_key_disabled" tools:keep="@string/label_shortcut_key_disabled">Галасавы ўвод адключаны</string>
<string name="label_toolbar_key" tools:keep="@string/label_toolbar_key">Паказаць / схаваць панэль інструментаў</string>
</resources> </resources>

View file

@ -466,4 +466,7 @@
<string name="discussion_section_link">раздел за обсъждане</string> <string name="discussion_section_link">раздел за обсъждане</string>
<string name="get_colors_message">Можете да намирате и споделяте цветове в %s.</string> <string name="get_colors_message">Можете да намирате и споделяте цветове в %s.</string>
<string name="custom_subtype">Персонализиран подтип</string> <string name="custom_subtype">Персонализиран подтип</string>
<string name="subtype_baishakhi_bn_IN"><xliff:g id="LANGUAGE_NAME" example="Бенгалски">%s</xliff:g> (Байсахи)</string>
<string name="show_tld_popup_keys">Показване на TLD изскачащи клавиши</string>
<string name="show_tld_popup_keys_summary">Заместване на изскачащите прозорци с клавиши за период с домейни от първо ниво при въвеждане на URL и имейл адреси</string>
</resources> </resources>

File diff suppressed because one or more lines are too long

View file

@ -75,16 +75,16 @@
<string name="prefs_enable_emoji_alt_physical_key">Emojis amb el teclat físic</string> <string name="prefs_enable_emoji_alt_physical_key">Emojis amb el teclat físic</string>
<string name="prefs_enable_emoji_alt_physical_key_summary">Amb la tecla Alt del teclat físic es mostra la paleta d\'emojis</string> <string name="prefs_enable_emoji_alt_physical_key_summary">Amb la tecla Alt del teclat físic es mostra la paleta d\'emojis</string>
<string name="button_default">"Predeterminat"</string> <string name="button_default">"Predeterminat"</string>
<string name="setup_welcome_title">Us donem la benvinguda a<xliff:g id="APPLICATION_NAME" example="Android Keyboard">%s</xliff:g></string> <string name="setup_welcome_title">Us donem la benvinguda a <xliff:g id="APPLICATION_NAME" example="Teclat Android">%s</xliff:g></string>
<string name="setup_welcome_additional_description">amb escriptura gestual</string> <string name="setup_welcome_additional_description">amb escriptura gestual</string>
<string name="setup_start_action">"Comença"</string> <string name="setup_start_action">"Comença"</string>
<string name="setup_next_action">"Pas següent"</string> <string name="setup_next_action">"Pas següent"</string>
<string name="setup_steps_title">S\'està configurant<xliff:g id="APPLICATION_NAME" example="Android Keyboard">%s</xliff:g></string> <string name="setup_steps_title">S\'està configurant <xliff:g id="APPLICATION_NAME" example="Teclat Android">%s</xliff:g></string>
<string name="setup_step1_title">Habilita<xliff:g id="APPLICATION_NAME" example="Android Keyboard">%s</xliff:g></string> <string name="setup_step1_title">Habilitar <xliff:g id="APPLICATION_NAME" example="Teclat Android">%s</xliff:g></string>
<string name="setup_step1_instruction">Comproveu \\<xliff:g id="APPLICATION_NAME" example="Android Keyboard">%s</xliff:g>\" a la configuració d\'idiomes i entrada. Això li permetrà executar-se al vostre dispositiu.\"</string> <string name="setup_step1_instruction">Comproveu \\<xliff:g id="APPLICATION_NAME" example="Android Keyboard">%s</xliff:g>\" a la configuració d\'idiomes i entrada. Això li permetrà executar-se al vostre dispositiu.\"</string>
<string name="setup_step1_finished_instruction"><xliff:g id="APPLICATION_NAME" example="Android Keyboard">%s</xliff:g> ja està activada a la configuració d\'idiomes i entrada, així que ja s\'ha acabat aquest pas. Cap al següent!\"</string> <string name="setup_step1_finished_instruction"><xliff:g id="APPLICATION_NAME" example="Android Keyboard">%s</xliff:g> ja està activada a la configuració d\'idiomes i entrada, així que ja s\'ha acabat aquest pas. Cap al següent!\"</string>
<string name="setup_step1_action">Habilita a la configuració</string> <string name="setup_step1_action">Habilita a la configuració</string>
<string name="setup_step2_title">Canvia a<xliff:g id="APPLICATION_NAME" example="Android Keyboard">%s</xliff:g></string> <string name="setup_step2_title">Canviar a <xliff:g id="APPLICATION_NAME" example="Teclat Android">%s</xliff:g></string>
<string name="setup_step2_instruction">A continuació, seleccioneu \\<xliff:g id="APPLICATION_NAME" example="Android Keyboard">%s</xliff:g>\" com a mètode d\'entrada de text actiu.\"</string> <string name="setup_step2_instruction">A continuació, seleccioneu \\<xliff:g id="APPLICATION_NAME" example="Android Keyboard">%s</xliff:g>\" com a mètode d\'entrada de text actiu.\"</string>
<string name="setup_step2_action">Canvia els mètodes d\'entrada</string> <string name="setup_step2_action">Canvia els mètodes d\'entrada</string>
<string name="setup_step3_title">"Enhorabona, ja has acabat!"</string> <string name="setup_step3_title">"Enhorabona, ja has acabat!"</string>
@ -423,4 +423,13 @@
<string name="settings_screen_secondary_layouts">Disposicions secundàries</string> <string name="settings_screen_secondary_layouts">Disposicions secundàries</string>
<string name="layout_functional_keys_tablet" tools:keep="@string/layout_functional_keys_tablet">Tecles de funció (pantalla gran)</string> <string name="layout_functional_keys_tablet" tools:keep="@string/layout_functional_keys_tablet">Tecles de funció (pantalla gran)</string>
<string name="name_invalid">Nom no vàlid</string> <string name="name_invalid">Nom no vàlid</string>
<string name="custom_subtype">Subtipus personalitzat</string>
<string name="subtype_baishakhi_bn_IN"><xliff:g id="LANGUAGE_NAME" example="Bengalí">%s</xliff:g> (Baishakhi)</string>
<string name="layout_in_use">Avís: la disposició s\'està utilitzant actualment</string>
<string name="locales_with_dict">Idiomes amb diccionaris</string>
<string name="get_colors_message">Podeu trobar i compartir colors a %s.</string>
<string name="get_layouts_message">Podeu trobar i compartir disposicions a %s.</string>
<string name="discussion_section_link">secció de discussió</string>
<string name="show_tld_popup_keys_summary">Substituir les finestres emergents de la tecla punt per dominis de primer nivell en escriure URLs i adreces de correu electrònic</string>
<string name="show_tld_popup_keys">Mostra tecles emergents de TLD</string>
</resources> </resources>

View file

@ -432,4 +432,7 @@
<string name="delete_confirmation">%s wirklich löschen?</string> <string name="delete_confirmation">%s wirklich löschen?</string>
<string name="name_invalid">Ungültiger Name</string> <string name="name_invalid">Ungültiger Name</string>
<string name="custom_subtype">Benutzerdefinierter Subtyp</string> <string name="custom_subtype">Benutzerdefinierter Subtyp</string>
<string name="subtype_baishakhi_bn_IN"><xliff:g id="LANGUAGE_NAME" example="Bengalisch">%s</xliff:g> (Baisakhi)</string>
<string name="show_tld_popup_keys">Zeige TLD-Popup-Tasten</string>
<string name="show_tld_popup_keys_summary">Ersetze Punkt-Tastenpopups mit Top-Level-Domains wenn URLs und Mailadressen eingegeben werden</string>
</resources> </resources>

View file

@ -466,4 +466,7 @@
<string name="discussion_section_link">kogukonna vestlustes</string> <string name="discussion_section_link">kogukonna vestlustes</string>
<string name="get_colors_message">Uusi värve võid leida ja jagada %s.</string> <string name="get_colors_message">Uusi värve võid leida ja jagada %s.</string>
<string name="custom_subtype">Sinu loodud alamtüüp</string> <string name="custom_subtype">Sinu loodud alamtüüp</string>
<string name="subtype_baishakhi_bn_IN"><xliff:g id="LANGUAGE_NAME" example="Bengali">%s</xliff:g> (Baishakhi)</string>
<string name="show_tld_popup_keys">Näita tippdomeenide hüpikklahve</string>
<string name="show_tld_popup_keys_summary">Võrgu- ja e-posti aadresside kirjutamisel asenda punktuatsiooni hüpikaknad tipptaseme domeenide omadega</string>
</resources> </resources>

File diff suppressed because one or more lines are too long

View file

@ -75,7 +75,7 @@
<string name="prefs_enable_emoji_alt_physical_key">"Emojis para o teclado físico"</string> <string name="prefs_enable_emoji_alt_physical_key">"Emojis para o teclado físico"</string>
<string name="prefs_enable_emoji_alt_physical_key_summary">"A tecla Alt física mostra a paleta de emoji"</string> <string name="prefs_enable_emoji_alt_physical_key_summary">"A tecla Alt física mostra a paleta de emoji"</string>
<string name="button_default">"Predeterminado"</string> <string name="button_default">"Predeterminado"</string>
<string name="setup_welcome_title">Ben vida a<xliff:g id="APPLICATION_NAME" example="Android Keyboard">%s</xliff:g></string> <string name="setup_welcome_title">Ben vida a <xliff:g id="APPLICATION_NAME" example="Android Keyboard">%s</xliff:g></string>
<string name="setup_welcome_additional_description">"con escritura por xestos"</string> <string name="setup_welcome_additional_description">"con escritura por xestos"</string>
<string name="setup_start_action">"Comezar"</string> <string name="setup_start_action">"Comezar"</string>
<string name="setup_next_action">"Seguinte paso"</string> <string name="setup_next_action">"Seguinte paso"</string>
@ -433,4 +433,5 @@
<string name="locales_with_dict">Idiomas con dicionarios</string> <string name="locales_with_dict">Idiomas con dicionarios</string>
<string name="discussion_section_link">zona de conversa</string> <string name="discussion_section_link">zona de conversa</string>
<string name="get_layouts_message">Podes atopar e compartir disposicións na %s.</string> <string name="get_layouts_message">Podes atopar e compartir disposicións na %s.</string>
<string name="subtype_baishakhi_bn_IN"><xliff:g id="LANGUAGE_NAME" example="Bengali">%s</xliff:g> (Baishakhi)</string>
</resources> </resources>

View file

@ -1,10 +1,9 @@
<?xml version="1.0" encoding="UTF-8"?> <?xml version="1.0" encoding="utf-8"?>
<!-- <!--
Copyright (C) 2008 The Android Open Source Project Copyright (C) 2008 The Android Open Source Project
modified modified
SPDX-License-Identifier: Apache-2.0 AND GPL-3.0-only SPDX-License-Identifier: Apache-2.0 AND GPL-3.0-only
--> --><resources xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
<resources xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
<string name="use_contacts_dict">"સંપર્ક નામ શોધો"</string> <string name="use_contacts_dict">"સંપર્ક નામ શોધો"</string>
<string name="vibrate_on_keypress">"કીપ્રેસ પર વાઇબ્રેટ કરો"</string> <string name="vibrate_on_keypress">"કીપ્રેસ પર વાઇબ્રેટ કરો"</string>
<string name="sound_on_keypress">"કીપ્રેસ પર ધ્વનિ"</string> <string name="sound_on_keypress">"કીપ્રેસ પર ધ્વનિ"</string>
@ -76,16 +75,16 @@
<string name="prefs_enable_emoji_alt_physical_key">"ભૌતિક કીબોર્ડ માટે ઇમોજી"</string> <string name="prefs_enable_emoji_alt_physical_key">"ભૌતિક કીબોર્ડ માટે ઇમોજી"</string>
<string name="prefs_enable_emoji_alt_physical_key_summary">"ભૌતિક Alt કી ઇમોજી પેલેટ દર્શાવે છે"</string> <string name="prefs_enable_emoji_alt_physical_key_summary">"ભૌતિક Alt કી ઇમોજી પેલેટ દર્શાવે છે"</string>
<string name="button_default">"ડિફોલ્ટ"</string> <string name="button_default">"ડિફોલ્ટ"</string>
<string name="setup_welcome_title">"<xliff:g id="APPLICATION_NAME">%s</xliff:g> પર સ્વાગત છે"</string> <string name="setup_welcome_title"><xliff:g id="APPLICATION_NAME">%s</xliff:g> પર સ્વાગત છે\"</string>
<string name="setup_welcome_additional_description">"સાંકેતિક ટાઇપિંગ દ્વારા"</string> <string name="setup_welcome_additional_description">"સાંકેતિક ટાઇપિંગ દ્વારા"</string>
<string name="setup_start_action">"પ્રારંભ કરો"</string> <string name="setup_start_action">"પ્રારંભ કરો"</string>
<string name="setup_next_action">"આગલું પગલું"</string> <string name="setup_next_action">"આગલું પગલું"</string>
<string name="setup_steps_title">"<xliff:g id="APPLICATION_NAME">%s</xliff:g> સેટ કરી રહ્યું છે"</string> <string name="setup_steps_title"><xliff:g id="APPLICATION_NAME">%s</xliff:g> સેટ કરી રહ્યું છે\"</string>
<string name="setup_step1_title">"<xliff:g id="APPLICATION_NAME">%s</xliff:g> સક્ષમ કરો"</string> <string name="setup_step1_title"><xliff:g id="APPLICATION_NAME">%s</xliff:g> સક્ષમ કરો\"</string>
<string name="setup_step1_instruction">"કૃપા કરીને \"<xliff:g id="APPLICATION_NAME">%s</xliff:g>\" ને તમારી ભાષાઓ અને ઇનપુટ સેટિંગ્સમાં તપાસો. આ તેને તમારા ઉપકરણ પર ચાલવા માટે અધિકૃત કરશે."</string> <string name="setup_step1_instruction">"કૃપા કરીને \"<xliff:g id="APPLICATION_NAME">%s</xliff:g>\" ને તમારી ભાષાઓ અને ઇનપુટ સેટિંગ્સમાં તપાસો. આ તેને તમારા ઉપકરણ પર ચાલવા માટે અધિકૃત કરશે."</string>
<string name="setup_step1_finished_instruction">"<xliff:g id="APPLICATION_NAME">%s</xliff:g> એ તમારી ભાષાઓ અને ઇનપુટ સેટિંગ્સમાં પહેલાથી જ સક્ષમ કરેલું છે, તેથી આ પગલું પૂર્ણ થયું. હવે આગલા પર!"</string> <string name="setup_step1_finished_instruction">"<xliff:g id="APPLICATION_NAME">%s</xliff:g> એ તમારી ભાષાઓ અને ઇનપુટ સેટિંગ્સમાં પહેલાથી જ સક્ષમ કરેલું છે, તેથી આ પગલું પૂર્ણ થયું. હવે આગલા પર!"</string>
<string name="setup_step1_action">"સેટિંગ્સમાં સક્ષમ કરો"</string> <string name="setup_step1_action">"સેટિંગ્સમાં સક્ષમ કરો"</string>
<string name="setup_step2_title">"<xliff:g id="APPLICATION_NAME">%s</xliff:g> પર સ્વિચ કરો"</string> <string name="setup_step2_title"><xliff:g id="APPLICATION_NAME">%s</xliff:g> પર સ્વિચ કરો\"</string>
<string name="setup_step2_instruction">"આગલું, \"<xliff:g id="APPLICATION_NAME">%s</xliff:g>\" ને તમારા સક્રિય ટેક્સ્ટ-ઇનપુટ પદ્ધતિ તરીકે પસંદ કરો."</string> <string name="setup_step2_instruction">"આગલું, \"<xliff:g id="APPLICATION_NAME">%s</xliff:g>\" ને તમારા સક્રિય ટેક્સ્ટ-ઇનપુટ પદ્ધતિ તરીકે પસંદ કરો."</string>
<string name="setup_step2_action">"ઇનપુટ પદ્ધતિઓ પર સ્વિચ કરો"</string> <string name="setup_step2_action">"ઇનપુટ પદ્ધતિઓ પર સ્વિચ કરો"</string>
<string name="setup_step3_title">"અભિનંદન, તમે બધું સેટ કર્યું છે!"</string> <string name="setup_step3_title">"અભિનંદન, તમે બધું સેટ કર્યું છે!"</string>

View file

@ -3,8 +3,7 @@
Copyright (C) 2008 The Android Open Source Project Copyright (C) 2008 The Android Open Source Project
modified modified
SPDX-License-Identifier: Apache-2.0 AND GPL-3.0-only SPDX-License-Identifier: Apache-2.0 AND GPL-3.0-only
--> --><resources xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
<resources xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
<string name="use_contacts_dict">"संपर्कों को सर्च करें"</string> <string name="use_contacts_dict">"संपर्कों को सर्च करें"</string>
<string name="vibrate_on_keypress">"बटन दबाने पर कंपन (वाइब्रेशन) करे"</string> <string name="vibrate_on_keypress">"बटन दबाने पर कंपन (वाइब्रेशन) करे"</string>
<string name="sound_on_keypress">"बटन दबाने पर आवाज़"</string> <string name="sound_on_keypress">"बटन दबाने पर आवाज़"</string>
@ -76,16 +75,16 @@
<string name="prefs_enable_emoji_alt_physical_key">"कीबोर्ड के लिए स्माइलीज़"</string> <string name="prefs_enable_emoji_alt_physical_key">"कीबोर्ड के लिए स्माइलीज़"</string>
<string name="prefs_enable_emoji_alt_physical_key_summary">"भौतिक Alt कुंजी इमोजी पैलेट दिखाती है"</string> <string name="prefs_enable_emoji_alt_physical_key_summary">"भौतिक Alt कुंजी इमोजी पैलेट दिखाती है"</string>
<string name="button_default">"सामान्य"</string> <string name="button_default">"सामान्य"</string>
<string name="setup_welcome_title">"<xliff:g id="APPLICATION_NAME">%s</xliff:g> में आपका स्वागत है"</string> <string name="setup_welcome_title"><xliff:g id="APPLICATION_NAME">%s</xliff:g> में आपका स्वागत है\"</string>
<string name="setup_welcome_additional_description">"जेस्चर टाइपिंग के साथ"</string> <string name="setup_welcome_additional_description">"जेस्चर टाइपिंग के साथ"</string>
<string name="setup_start_action">"आरंभ करें"</string> <string name="setup_start_action">"आरंभ करें"</string>
<string name="setup_next_action">"अगला चरण"</string> <string name="setup_next_action">"अगला चरण"</string>
<string name="setup_steps_title">"<xliff:g id="APPLICATION_NAME">%s</xliff:g> सेट करना"</string> <string name="setup_steps_title"><xliff:g id="APPLICATION_NAME">%s</xliff:g> सेट करना\"</string>
<string name="setup_step1_title">"<xliff:g id="APPLICATION_NAME">%s</xliff:g> को चालू करें"</string> <string name="setup_step1_title"><xliff:g id="APPLICATION_NAME">%s</xliff:g> को चालू करें\"</string>
<string name="setup_step1_instruction">"कृपया अपनी भाषा और इनपुट सेटिंग में \"<xliff:g id="APPLICATION_NAME">%s</xliff:g>\" को सही का निशान लगाकर चुनें. इससे उसे आपके डिवाइस पर चलने की अनुमति मिल जाएगी."</string> <string name="setup_step1_instruction">"कृपया अपनी भाषा और इनपुट सेटिंग में \"<xliff:g id="APPLICATION_NAME">%s</xliff:g>\" को सही का निशान लगाकर चुनें. इससे उसे आपके डिवाइस पर चलने की अनुमति मिल जाएगी."</string>
<string name="setup_step1_finished_instruction">"<xliff:g id="APPLICATION_NAME">%s</xliff:g> आपकी भाषा और इनपुट सेटिंग में पहले से सक्षम है, इसलिए यह चरण पूरा हो गया है. अगले चरण पर जाएं!"</string> <string name="setup_step1_finished_instruction">"<xliff:g id="APPLICATION_NAME">%s</xliff:g> आपकी भाषा और इनपुट सेटिंग में पहले से सक्षम है, इसलिए यह चरण पूरा हो गया है. अगले चरण पर जाएं!"</string>
<string name="setup_step1_action">"सेटिंग में चालू करें"</string> <string name="setup_step1_action">"सेटिंग में चालू करें"</string>
<string name="setup_step2_title">"<xliff:g id="APPLICATION_NAME">%s</xliff:g> पर स्विच करें"</string> <string name="setup_step2_title"><xliff:g id="APPLICATION_NAME">%s</xliff:g> पर स्विच करें\"</string>
<string name="setup_step2_instruction">"इसके बाद, \"<xliff:g id="APPLICATION_NAME">%s</xliff:g>\" को अपने सक्रिय पाठ-इनपुट के तरीके के तौर पर चुनें."</string> <string name="setup_step2_instruction">"इसके बाद, \"<xliff:g id="APPLICATION_NAME">%s</xliff:g>\" को अपने सक्रिय पाठ-इनपुट के तरीके के तौर पर चुनें."</string>
<string name="setup_step2_action">"इनपुट पद्धतियां स्विच करें"</string> <string name="setup_step2_action">"इनपुट पद्धतियां स्विच करें"</string>
<string name="setup_step3_title">"बधाई हो, आप बिल्कुल तैयार हैं!"</string> <string name="setup_step3_title">"बधाई हो, आप बिल्कुल तैयार हैं!"</string>

View file

@ -304,7 +304,7 @@
<string name="dictionary_file_wrong_locale">Il dizionario è stato creato per la lingua %1$s, ma lo stai aggiungendo a %2$s. Confermi?</string> <string name="dictionary_file_wrong_locale">Il dizionario è stato creato per la lingua %1$s, ma lo stai aggiungendo a %2$s. Confermi?</string>
<string name="dialog_close">Chiudi</string> <string name="dialog_close">Chiudi</string>
<string name="select_color_gesture">Traccia dell\'input gestuale</string> <string name="select_color_gesture">Traccia dell\'input gestuale</string>
<string name="text_tap_languages">Tocca la lingua per aprire le impostazioni</string> <string name="text_tap_languages">Lingua: tap → impostazioni</string>
<string name="save_log">Salva log</string> <string name="save_log">Salva log</string>
<string name="theme_name_holo_white" tools:keep="@string/theme_name_holo_white">Holo bianco</string> <string name="theme_name_holo_white" tools:keep="@string/theme_name_holo_white">Holo bianco</string>
<string name="internal_dictionary_summary">Dizionario interno principale</string> <string name="internal_dictionary_summary">Dizionario interno principale</string>
@ -432,4 +432,11 @@
<string name="auto_correct_shortcuts">Scorciatoie correzione</string> <string name="auto_correct_shortcuts">Scorciatoie correzione</string>
<string name="name_invalid">Nome non valido</string> <string name="name_invalid">Nome non valido</string>
<string name="prefs_language_swipe_distance">Distanza del trascinamento per il cambio lingua</string> <string name="prefs_language_swipe_distance">Distanza del trascinamento per il cambio lingua</string>
<string name="custom_subtype">Sotto-tipo personalizzato</string>
<string name="subtype_baishakhi_bn_IN"><xliff:g id="LANGUAGE_NAME" example="Bengalese">%s</xliff:g> (Baishakhi)</string>
<string name="layout_in_use">Attenzione: il layout è in uso</string>
<string name="locales_with_dict">Lingue con dizionari</string>
<string name="discussion_section_link">discussione dedicata</string>
<string name="get_layouts_message">Scopri nuovi layout o condividi quelli che hai creato nella %s.</string>
<string name="get_colors_message">Scopri nuove combinazioni di colori o condividi le tue nella %s.</string>
</resources> </resources>

File diff suppressed because one or more lines are too long

View file

@ -75,16 +75,16 @@
<string name="prefs_enable_emoji_alt_physical_key">"物理キーボードの絵文字"</string> <string name="prefs_enable_emoji_alt_physical_key">"物理キーボードの絵文字"</string>
<string name="prefs_enable_emoji_alt_physical_key_summary">"物理Altキーによって絵文字パレットが表示されます"</string> <string name="prefs_enable_emoji_alt_physical_key_summary">"物理Altキーによって絵文字パレットが表示されます"</string>
<string name="button_default">"デフォルト"</string> <string name="button_default">"デフォルト"</string>
<string name="setup_welcome_title">"<xliff:g id="APPLICATION_NAME">%s</xliff:g>へようこそ"</string> <string name="setup_welcome_title"><xliff:g id="APPLICATION_NAME">%s</xliff:g>へようこそ\"</string>
<string name="setup_welcome_additional_description">"新しいジェスチャー入力をお試しください"</string> <string name="setup_welcome_additional_description">"新しいジェスチャー入力をお試しください"</string>
<string name="setup_start_action">"開始"</string> <string name="setup_start_action">"開始"</string>
<string name="setup_next_action">"次のステップ"</string> <string name="setup_next_action">"次のステップ"</string>
<string name="setup_steps_title">"<xliff:g id="APPLICATION_NAME">%s</xliff:g>の設定"</string> <string name="setup_steps_title"><xliff:g id="APPLICATION_NAME">%s</xliff:g>の設定\"</string>
<string name="setup_step1_title">"<xliff:g id="APPLICATION_NAME">%s</xliff:g>の有効化"</string> <string name="setup_step1_title"><xliff:g id="APPLICATION_NAME">%s</xliff:g>の有効化\"</string>
<string name="setup_step1_instruction">[言語と入力] 設定で<xliff:g id="APPLICATION_NAME">%s</xliff:g>」のチェックボックスをオンにしてください。これで、このデバイスで利用できるようになります。\"</string> <string name="setup_step1_instruction">[言語と入力] 設定で<xliff:g id="APPLICATION_NAME">%s</xliff:g>」のチェックボックスをオンにしてください。これで、このデバイスで利用できるようになります。\"</string>
<string name="setup_step1_finished_instruction">"[言語と入力] 設定で「<xliff:g id="APPLICATION_NAME">%s</xliff:g>」は既に有効になっているため、このステップは完了です。次のステップに進んでください。"</string> <string name="setup_step1_finished_instruction">"[言語と入力] 設定で「<xliff:g id="APPLICATION_NAME">%s</xliff:g>」は既に有効になっているため、このステップは完了です。次のステップに進んでください。"</string>
<string name="setup_step1_action">"設定での有効化"</string> <string name="setup_step1_action">"設定での有効化"</string>
<string name="setup_step2_title">"<xliff:g id="APPLICATION_NAME">%s</xliff:g>への切り替え"</string> <string name="setup_step2_title"><xliff:g id="APPLICATION_NAME">%s</xliff:g>への切り替え\"</string>
<string name="setup_step2_instruction">次に、有効なテキスト入力方法として<xliff:g id="APPLICATION_NAME">%s</xliff:g>」を選択します。\"</string> <string name="setup_step2_instruction">次に、有効なテキスト入力方法として<xliff:g id="APPLICATION_NAME">%s</xliff:g>」を選択します。\"</string>
<string name="setup_step2_action">"入力方法を切り替える"</string> <string name="setup_step2_action">"入力方法を切り替える"</string>
<string name="setup_step3_title">"設定完了"</string> <string name="setup_step3_title">"設定完了"</string>

View file

@ -1,10 +1,9 @@
<?xml version="1.0" encoding="UTF-8"?> <?xml version="1.0" encoding="utf-8"?>
<!-- <!--
Copyright (C) 2008 The Android Open Source Project Copyright (C) 2008 The Android Open Source Project
modified modified
SPDX-License-Identifier: Apache-2.0 AND GPL-3.0-only SPDX-License-Identifier: Apache-2.0 AND GPL-3.0-only
--> --><resources xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
<resources xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
<string name="use_contacts_dict">"Контакт аттарын іздеу"</string> <string name="use_contacts_dict">"Контакт аттарын іздеу"</string>
<string name="vibrate_on_keypress">"Пернені басқан кездегі діріл"</string> <string name="vibrate_on_keypress">"Пернені басқан кездегі діріл"</string>
<string name="sound_on_keypress">"Пернені басу кезіндегі дыбыс"</string> <string name="sound_on_keypress">"Пернені басу кезіндегі дыбыс"</string>
@ -76,16 +75,16 @@
<string name="prefs_enable_emoji_alt_physical_key">"Қатты пернетақтадан енгізілетін эмодзи"</string> <string name="prefs_enable_emoji_alt_physical_key">"Қатты пернетақтадан енгізілетін эмодзи"</string>
<string name="prefs_enable_emoji_alt_physical_key_summary">"Alt пернесі арқылы эмодзилерді ашуға болады"</string> <string name="prefs_enable_emoji_alt_physical_key_summary">"Alt пернесі арқылы эмодзилерді ашуға болады"</string>
<string name="button_default">"Әдепкі"</string> <string name="button_default">"Әдепкі"</string>
<string name="setup_welcome_title">"<xliff:g id="APPLICATION_NAME">%s</xliff:g> қолданбасына қош келдіңіз"</string> <string name="setup_welcome_title"><xliff:g id="APPLICATION_NAME">%s</xliff:g> қолданбасына қош келдіңіз\"</string>
<string name="setup_welcome_additional_description">"Қимылмен теру арқылы"</string> <string name="setup_welcome_additional_description">"Қимылмен теру арқылы"</string>
<string name="setup_start_action">"Іске қосылды"</string> <string name="setup_start_action">"Іске қосылды"</string>
<string name="setup_next_action">"Келесі қадам"</string> <string name="setup_next_action">"Келесі қадам"</string>
<string name="setup_steps_title">"<xliff:g id="APPLICATION_NAME">%s</xliff:g> орнату"</string> <string name="setup_steps_title"><xliff:g id="APPLICATION_NAME">%s</xliff:g> орнату\"</string>
<string name="setup_step1_title">"<xliff:g id="APPLICATION_NAME">%s</xliff:g> қосу"</string> <string name="setup_step1_title"><xliff:g id="APPLICATION_NAME">%s</xliff:g> қосу\"</string>
<string name="setup_step1_instruction">"\"Тілдер және енгізу\" параметрлерінде <xliff:g id="APPLICATION_NAME">%s</xliff:g> қолданбасына құсбелгі қойыңыз. Сонда оны құрылғыңызда қолдануға рұқсат беріледі."</string> <string name="setup_step1_instruction">"\"Тілдер және енгізу\" параметрлерінде <xliff:g id="APPLICATION_NAME">%s</xliff:g> қолданбасына құсбелгі қойыңыз. Сонда оны құрылғыңызда қолдануға рұқсат беріледі."</string>
<string name="setup_step1_finished_instruction">"<xliff:g id="APPLICATION_NAME">%s</xliff:g> қолданбасы \"Тілдер және енгізу\" параметрлерінде бұрыннан қосылған. Келесі қадамға өтіңіз!"</string> <string name="setup_step1_finished_instruction">"<xliff:g id="APPLICATION_NAME">%s</xliff:g> қолданбасы \"Тілдер және енгізу\" параметрлерінде бұрыннан қосылған. Келесі қадамға өтіңіз!"</string>
<string name="setup_step1_action">"Параметрлер ішінде қосу"</string> <string name="setup_step1_action">"Параметрлер ішінде қосу"</string>
<string name="setup_step2_title">"<xliff:g id="APPLICATION_NAME">%s</xliff:g> қолданбасына ауыстыру"</string> <string name="setup_step2_title"><xliff:g id="APPLICATION_NAME">%s</xliff:g> қолданбасына ауыстыру\"</string>
<string name="setup_step2_instruction">"Одан кейін \"<xliff:g id="APPLICATION_NAME">%s</xliff:g>\" қолданбасын белсенді мәтінді енгізу әдісі ретінде таңдаңыз."</string> <string name="setup_step2_instruction">"Одан кейін \"<xliff:g id="APPLICATION_NAME">%s</xliff:g>\" қолданбасын белсенді мәтінді енгізу әдісі ретінде таңдаңыз."</string>
<string name="setup_step2_action">"Енгізу әдістерін ауыстыру"</string> <string name="setup_step2_action">"Енгізу әдістерін ауыстыру"</string>
<string name="setup_step3_title">"Құттықтаймыз, барлығы дайын!"</string> <string name="setup_step3_title">"Құттықтаймыз, барлығы дайын!"</string>

View file

@ -1,10 +1,9 @@
<?xml version="1.0" encoding="UTF-8"?> <?xml version="1.0" encoding="utf-8"?>
<!-- <!--
Copyright (C) 2008 The Android Open Source Project Copyright (C) 2008 The Android Open Source Project
modified modified
SPDX-License-Identifier: Apache-2.0 AND GPL-3.0-only SPDX-License-Identifier: Apache-2.0 AND GPL-3.0-only
--> --><resources xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
<resources xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
<string name="use_contacts_dict">"ಸಂಪರ್ಕ ಹೆಸರುಗಳನ್ನು ಹುಡುಕಿ"</string> <string name="use_contacts_dict">"ಸಂಪರ್ಕ ಹೆಸರುಗಳನ್ನು ಹುಡುಕಿ"</string>
<string name="vibrate_on_keypress">"ಕೀಪ್ರೆಸ್‌ನ ವೈಬ್ರೇಟ್"</string> <string name="vibrate_on_keypress">"ಕೀಪ್ರೆಸ್‌ನ ವೈಬ್ರೇಟ್"</string>
<string name="sound_on_keypress">"ಕೀಪ್ರೆಸ್ ಶಬ್ದ"</string> <string name="sound_on_keypress">"ಕೀಪ್ರೆಸ್ ಶಬ್ದ"</string>
@ -77,16 +76,16 @@
<string name="prefs_enable_emoji_alt_physical_key">"ಭೌತಿಕ ಕೀಬೋರ್ಡ್‌ಗೆ ಎಮೋಜಿ"</string> <string name="prefs_enable_emoji_alt_physical_key">"ಭೌತಿಕ ಕೀಬೋರ್ಡ್‌ಗೆ ಎಮೋಜಿ"</string>
<string name="prefs_enable_emoji_alt_physical_key_summary">"ಭೌತಿಕ Alt ಕೀ ಎಮೋಜಿ ಪ್ಯಾಲೆಟ್ ತೋರಿಸುತ್ತದೆ"</string> <string name="prefs_enable_emoji_alt_physical_key_summary">"ಭೌತಿಕ Alt ಕೀ ಎಮೋಜಿ ಪ್ಯಾಲೆಟ್ ತೋರಿಸುತ್ತದೆ"</string>
<string name="button_default">"ಡಿಫಾಲ್ಟ್"</string> <string name="button_default">"ಡಿಫಾಲ್ಟ್"</string>
<string name="setup_welcome_title">"<xliff:g id="APPLICATION_NAME">%s</xliff:g> ಗೆ ಸುಸ್ವಾಗತ"</string> <string name="setup_welcome_title"><xliff:g id="APPLICATION_NAME">%s</xliff:g> ಗೆ ಸುಸ್ವಾಗತ\"</string>
<string name="setup_welcome_additional_description">"ಗೆಶ್ಚರ್ ಟೈಪಿಂಗ್‌ನೊಂದಿಗೆ"</string> <string name="setup_welcome_additional_description">"ಗೆಶ್ಚರ್ ಟೈಪಿಂಗ್‌ನೊಂದಿಗೆ"</string>
<string name="setup_start_action">"ಪ್ರಾರಂಭ"</string> <string name="setup_start_action">"ಪ್ರಾರಂಭ"</string>
<string name="setup_next_action">"ಮುಂದಿನ ಹಂತ"</string> <string name="setup_next_action">"ಮುಂದಿನ ಹಂತ"</string>
<string name="setup_steps_title">"<xliff:g id="APPLICATION_NAME">%s</xliff:g> ಅನ್ನು ಹೊಂದಿಸಲಾಗುತ್ತಿದೆ"</string> <string name="setup_steps_title"><xliff:g id="APPLICATION_NAME">%s</xliff:g> ಅನ್ನು ಹೊಂದಿಸಲಾಗುತ್ತಿದೆ\"</string>
<string name="setup_step1_title">"<xliff:g id="APPLICATION_NAME">%s</xliff:g> ಸಕ್ರಿಯಗೊಳಿಸಿ"</string> <string name="setup_step1_title"><xliff:g id="APPLICATION_NAME">%s</xliff:g> ಸಕ್ರಿಯಗೊಳಿಸಿ\"</string>
<string name="setup_step1_instruction">"ನಿಮ್ಮ ಭಾಷೆಗಳು &amp; ಇನ್‌ಪುಟ್ ಸೆಟ್ಟಿಂಗ್‌ಗಳಲ್ಲಿ ದಯವಿಟ್ಟು \"<xliff:g id="APPLICATION_NAME">%s</xliff:g>\" ಅನ್ನು ಪರಿಶೀಲಿಸಿ. ನಿಮ್ಮ ಸಾಧನದಲ್ಲಿ ಅದನ್ನು ರನ್ ಮಾಡಲು ಅದು ಅನುಮತಿ ನೀಡುತ್ತದೆ."</string> <string name="setup_step1_instruction">"ನಿಮ್ಮ ಭಾಷೆಗಳು &amp; ಇನ್‌ಪುಟ್ ಸೆಟ್ಟಿಂಗ್‌ಗಳಲ್ಲಿ ದಯವಿಟ್ಟು \"<xliff:g id="APPLICATION_NAME">%s</xliff:g>\" ಅನ್ನು ಪರಿಶೀಲಿಸಿ. ನಿಮ್ಮ ಸಾಧನದಲ್ಲಿ ಅದನ್ನು ರನ್ ಮಾಡಲು ಅದು ಅನುಮತಿ ನೀಡುತ್ತದೆ."</string>
<string name="setup_step1_finished_instruction">"<xliff:g id="APPLICATION_NAME">%s</xliff:g> ಅನ್ನು ಈಗಾಗಲೇ ನಿಮ್ಮ ಭಾಷೆಗಳು &amp; ಇನ್‌ಪುಟ್ ಸೆಟ್ಟಿಂಗ್‌ಗಳಲ್ಲಿ ಸಕ್ರಿಯಗೊಳಿಸಲಾಗಿದೆ, ಹೀಗಾಗಿ ಈ ಹಂತ ಮುಗಿದಿದೆ. ಮುಂದಿನದಕ್ಕೆ ತೆರಳಿ!"</string> <string name="setup_step1_finished_instruction">"<xliff:g id="APPLICATION_NAME">%s</xliff:g> ಅನ್ನು ಈಗಾಗಲೇ ನಿಮ್ಮ ಭಾಷೆಗಳು &amp; ಇನ್‌ಪುಟ್ ಸೆಟ್ಟಿಂಗ್‌ಗಳಲ್ಲಿ ಸಕ್ರಿಯಗೊಳಿಸಲಾಗಿದೆ, ಹೀಗಾಗಿ ಈ ಹಂತ ಮುಗಿದಿದೆ. ಮುಂದಿನದಕ್ಕೆ ತೆರಳಿ!"</string>
<string name="setup_step1_action">"ಸೆಟ್ಟಿಂಗ್‌ಗಳಲ್ಲಿ ಸಕ್ರಿಯಗೊಳಿಸು"</string> <string name="setup_step1_action">"ಸೆಟ್ಟಿಂಗ್‌ಗಳಲ್ಲಿ ಸಕ್ರಿಯಗೊಳಿಸು"</string>
<string name="setup_step2_title">"<xliff:g id="APPLICATION_NAME">%s</xliff:g> ಗೆ ಬದಲಾಯಿಸಿ"</string> <string name="setup_step2_title"><xliff:g id="APPLICATION_NAME">%s</xliff:g> ಗೆ ಬದಲಾಯಿಸಿ\"</string>
<string name="setup_step2_instruction">"ಮುಂದೆ, ನಿಮ್ಮ ಸಕ್ರಿಯ ಪಠ್ಯ-ಇನ್‌ಪುಟ್ ವಿಧಾನವಾಗಿ \"<xliff:g id="APPLICATION_NAME">%s</xliff:g>\" ಅನ್ನು ಆಯ್ಕೆಮಾಡಿ."</string> <string name="setup_step2_instruction">"ಮುಂದೆ, ನಿಮ್ಮ ಸಕ್ರಿಯ ಪಠ್ಯ-ಇನ್‌ಪುಟ್ ವಿಧಾನವಾಗಿ \"<xliff:g id="APPLICATION_NAME">%s</xliff:g>\" ಅನ್ನು ಆಯ್ಕೆಮಾಡಿ."</string>
<string name="setup_step2_action">"ಇನ್‌ಪುಟ್ ವಿಧಾನಗಳನ್ನು ಬದಲಾಯಿಸು"</string> <string name="setup_step2_action">"ಇನ್‌ಪುಟ್ ವಿಧಾನಗಳನ್ನು ಬದಲಾಯಿಸು"</string>
<string name="setup_step3_title">"ಅಭಿನಂದನೆಗಳು, ನೀವೀಗ ಎಲ್ಲವನ್ನೂ ಹೊಂದಿಸಿರುವಿರಿ!"</string> <string name="setup_step3_title">"ಅಭಿನಂದನೆಗಳು, ನೀವೀಗ ಎಲ್ಲವನ್ನೂ ಹೊಂದಿಸಿರುವಿರಿ!"</string>

View file

@ -1,10 +1,9 @@
<?xml version="1.0" encoding="UTF-8"?> <?xml version="1.0" encoding="utf-8"?>
<!-- <!--
Copyright (C) 2008 The Android Open Source Project Copyright (C) 2008 The Android Open Source Project
modified modified
SPDX-License-Identifier: Apache-2.0 AND GPL-3.0-only SPDX-License-Identifier: Apache-2.0 AND GPL-3.0-only
--> --><resources xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
<resources xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
<string name="use_contacts_dict">"Байланыш ысымдарын издөө"</string> <string name="use_contacts_dict">"Байланыш ысымдарын издөө"</string>
<string name="vibrate_on_keypress">"Баскыч басылганда дирилдесин"</string> <string name="vibrate_on_keypress">"Баскыч басылганда дирилдесин"</string>
<string name="sound_on_keypress">"Баскычты басканда үн чыгат"</string> <string name="sound_on_keypress">"Баскычты басканда үн чыгат"</string>
@ -76,16 +75,16 @@
<string name="prefs_enable_emoji_alt_physical_key">"Тышкы тергич үчүн быйтыкчалар"</string> <string name="prefs_enable_emoji_alt_physical_key">"Тышкы тергич үчүн быйтыкчалар"</string>
<string name="prefs_enable_emoji_alt_physical_key_summary">"Alt баскычы басылганда быйтыкчалар тактасы көрүнөт"</string> <string name="prefs_enable_emoji_alt_physical_key_summary">"Alt баскычы басылганда быйтыкчалар тактасы көрүнөт"</string>
<string name="button_default">"Демейки"</string> <string name="button_default">"Демейки"</string>
<string name="setup_welcome_title">"<xliff:g id="APPLICATION_NAME">%s</xliff:g> кош келиңиз"</string> <string name="setup_welcome_title"><xliff:g id="APPLICATION_NAME">%s</xliff:g> кош келиңиз\"</string>
<string name="setup_welcome_additional_description">"Жаңсап терүү менен"</string> <string name="setup_welcome_additional_description">"Жаңсап терүү менен"</string>
<string name="setup_start_action">"Баштоо"</string> <string name="setup_start_action">"Баштоо"</string>
<string name="setup_next_action">"Кийинки кадам"</string> <string name="setup_next_action">"Кийинки кадам"</string>
<string name="setup_steps_title">"<xliff:g id="APPLICATION_NAME">%s</xliff:g> орнотулууда"</string> <string name="setup_steps_title"><xliff:g id="APPLICATION_NAME">%s</xliff:g> орнотулууда\"</string>
<string name="setup_step1_title">"<xliff:g id="APPLICATION_NAME">%s</xliff:g> иштетүү"</string> <string name="setup_step1_title"><xliff:g id="APPLICATION_NAME">%s</xliff:g> иштетүү\"</string>
<string name="setup_step1_instruction">"Тилдер жана киргизүү жөндөөлөрүнөн \"<xliff:g id="APPLICATION_NAME">%s</xliff:g>\" колдонмосун караңыз. Ушуну менен аны түзмөгүңүздө иштете аласыз."</string> <string name="setup_step1_instruction">"Тилдер жана киргизүү жөндөөлөрүнөн \"<xliff:g id="APPLICATION_NAME">%s</xliff:g>\" колдонмосун караңыз. Ушуну менен аны түзмөгүңүздө иштете аласыз."</string>
<string name="setup_step1_finished_instruction">"<xliff:g id="APPLICATION_NAME">%s</xliff:g> мурунтан эле Тилдер жана киргизүү жөндөөлөрүндө иштетилгендиктен бул кадам аткарылды деп, кийинкисине өтө бериңиз!"</string> <string name="setup_step1_finished_instruction">"<xliff:g id="APPLICATION_NAME">%s</xliff:g> мурунтан эле Тилдер жана киргизүү жөндөөлөрүндө иштетилгендиктен бул кадам аткарылды деп, кийинкисине өтө бериңиз!"</string>
<string name="setup_step1_action">"Жөндөөлөрдөн иштетүү"</string> <string name="setup_step1_action">"Жөндөөлөрдөн иштетүү"</string>
<string name="setup_step2_title">"<xliff:g id="APPLICATION_NAME">%s</xliff:g> которулуу"</string> <string name="setup_step2_title"><xliff:g id="APPLICATION_NAME">%s</xliff:g> которулуу\"</string>
<string name="setup_step2_instruction">"Андан соң, \"<xliff:g id="APPLICATION_NAME">%s</xliff:g>\" жигердүү текст киргизүү ыкмасы катары коюңуз."</string> <string name="setup_step2_instruction">"Андан соң, \"<xliff:g id="APPLICATION_NAME">%s</xliff:g>\" жигердүү текст киргизүү ыкмасы катары коюңуз."</string>
<string name="setup_step2_action">"Киргизүү ыкмаларын которуштуруу"</string> <string name="setup_step2_action">"Киргизүү ыкмаларын которуштуруу"</string>
<string name="setup_step3_title">"Куттуктайбыз, бардыгы коюлду!"</string> <string name="setup_step3_title">"Куттуктайбыз, бардыгы коюлду!"</string>

View file

@ -1,10 +1,9 @@
<?xml version="1.0" encoding="UTF-8"?> <?xml version="1.0" encoding="utf-8"?>
<!-- <!--
Copyright (C) 2008 The Android Open Source Project Copyright (C) 2008 The Android Open Source Project
modified modified
SPDX-License-Identifier: Apache-2.0 AND GPL-3.0-only SPDX-License-Identifier: Apache-2.0 AND GPL-3.0-only
--> --><resources xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
<resources xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
<string name="use_contacts_dict">"Харилцагчийн нэр хайх"</string> <string name="use_contacts_dict">"Харилцагчийн нэр хайх"</string>
<string name="vibrate_on_keypress">"Товч дарахад чичрэх"</string> <string name="vibrate_on_keypress">"Товч дарахад чичрэх"</string>
<string name="sound_on_keypress">"Товч дарахад дуу гаргах"</string> <string name="sound_on_keypress">"Товч дарахад дуу гаргах"</string>
@ -80,12 +79,12 @@
<string name="setup_welcome_additional_description">"Зангаагаар бичихээр"</string> <string name="setup_welcome_additional_description">"Зангаагаар бичихээр"</string>
<string name="setup_start_action">"Эхлэх"</string> <string name="setup_start_action">"Эхлэх"</string>
<string name="setup_next_action">"Дараагийн алхам"</string> <string name="setup_next_action">"Дараагийн алхам"</string>
<string name="setup_steps_title">"<xliff:g id="APPLICATION_NAME">%s</xliff:g>-г тохируулж байна"</string> <string name="setup_steps_title"><xliff:g id="APPLICATION_NAME">%s</xliff:g>-г тохируулж байна\"</string>
<string name="setup_step1_title">"<xliff:g id="APPLICATION_NAME">%s</xliff:g>-г идэвхжүүлэх"</string> <string name="setup_step1_title"><xliff:g id="APPLICATION_NAME">%s</xliff:g>-г идэвхжүүлэх\"</string>
<string name="setup_step1_instruction">"Хэл, оролтын тохиргоо хэсгээс \"<xliff:g id="APPLICATION_NAME">%s</xliff:g>\"-г сонгоно уу. Ингэснээр үүнийг таны төхөөрөмжид ажиллах зөвшөөрлийг өгөх болно."</string> <string name="setup_step1_instruction">"Хэл, оролтын тохиргоо хэсгээс \"<xliff:g id="APPLICATION_NAME">%s</xliff:g>\"-г сонгоно уу. Ингэснээр үүнийг таны төхөөрөмжид ажиллах зөвшөөрлийг өгөх болно."</string>
<string name="setup_step1_finished_instruction">"<xliff:g id="APPLICATION_NAME">%s</xliff:g>-г Хэл, оролтын тохиргоонд аль хэдийн идэвхжүүлснээр энэ алхам дууслаа. Дараагийн алхмыг хийцгээе!"</string> <string name="setup_step1_finished_instruction">"<xliff:g id="APPLICATION_NAME">%s</xliff:g>-г Хэл, оролтын тохиргоонд аль хэдийн идэвхжүүлснээр энэ алхам дууслаа. Дараагийн алхмыг хийцгээе!"</string>
<string name="setup_step1_action">"Тохиргоо дотроос идэвхжүүлэх"</string> <string name="setup_step1_action">"Тохиргоо дотроос идэвхжүүлэх"</string>
<string name="setup_step2_title">"<xliff:g id="APPLICATION_NAME">%s</xliff:g> рүү шилжих"</string> <string name="setup_step2_title"><xliff:g id="APPLICATION_NAME">%s</xliff:g> рүү шилжих\"</string>
<string name="setup_step2_instruction">"Дараа нь \"<xliff:g id="APPLICATION_NAME">%s</xliff:g>\"-г өөрийн идэвхтэй текст-оруулах аргаар сонгоно уу."</string> <string name="setup_step2_instruction">"Дараа нь \"<xliff:g id="APPLICATION_NAME">%s</xliff:g>\"-г өөрийн идэвхтэй текст-оруулах аргаар сонгоно уу."</string>
<string name="setup_step2_action">"Оруулах аргыг солих"</string> <string name="setup_step2_action">"Оруулах аргыг солих"</string>
<string name="setup_step3_title">"Баяр хүргэе, та бүгдийг нь тохируулчихлаа!"</string> <string name="setup_step3_title">"Баяр хүргэе, та бүгдийг нь тохируулчихлаа!"</string>

View file

@ -1,10 +1,9 @@
<?xml version="1.0" encoding="UTF-8"?> <?xml version="1.0" encoding="utf-8"?>
<!-- <!--
Copyright (C) 2008 The Android Open Source Project Copyright (C) 2008 The Android Open Source Project
modified modified
SPDX-License-Identifier: Apache-2.0 AND GPL-3.0-only SPDX-License-Identifier: Apache-2.0 AND GPL-3.0-only
--> --><resources xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
<resources xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
<string name="use_contacts_dict">"संपर्क नावे शोधा"</string> <string name="use_contacts_dict">"संपर्क नावे शोधा"</string>
<string name="vibrate_on_keypress">"की दाबताना व्हायब्रेट"</string> <string name="vibrate_on_keypress">"की दाबताना व्हायब्रेट"</string>
<string name="sound_on_keypress">"की दाबताना आवाज"</string> <string name="sound_on_keypress">"की दाबताना आवाज"</string>
@ -76,16 +75,16 @@
<string name="prefs_enable_emoji_alt_physical_key">"वास्तविक कीबोर्डसाठी इमोजी"</string> <string name="prefs_enable_emoji_alt_physical_key">"वास्तविक कीबोर्डसाठी इमोजी"</string>
<string name="prefs_enable_emoji_alt_physical_key_summary">"वास्तविक Alt की इमोजी पॅलेट दर्शविते"</string> <string name="prefs_enable_emoji_alt_physical_key_summary">"वास्तविक Alt की इमोजी पॅलेट दर्शविते"</string>
<string name="button_default">"डीफॉल्ट"</string> <string name="button_default">"डीफॉल्ट"</string>
<string name="setup_welcome_title">"<xliff:g id="APPLICATION_NAME">%s</xliff:g> वर स्वागत आहे"</string> <string name="setup_welcome_title"><xliff:g id="APPLICATION_NAME">%s</xliff:g> वर स्वागत आहे\"</string>
<string name="setup_welcome_additional_description">"जेश्चर टायपिंग करून"</string> <string name="setup_welcome_additional_description">"जेश्चर टायपिंग करून"</string>
<string name="setup_start_action">"सुरू करा"</string> <string name="setup_start_action">"सुरू करा"</string>
<string name="setup_next_action">"पुढील चरण"</string> <string name="setup_next_action">"पुढील चरण"</string>
<string name="setup_steps_title">"<xliff:g id="APPLICATION_NAME">%s</xliff:g> सेट अप करत आहे"</string> <string name="setup_steps_title"><xliff:g id="APPLICATION_NAME">%s</xliff:g> सेट अप करत आहे\"</string>
<string name="setup_step1_title">"<xliff:g id="APPLICATION_NAME">%s</xliff:g> सुरू करा"</string> <string name="setup_step1_title"><xliff:g id="APPLICATION_NAME">%s</xliff:g> सुरू करा\"</string>
<string name="setup_step1_instruction">"कृपया आपल्या भाषांमध्ये आणि इनपुट सेटिंग्जमध्ये \"<xliff:g id="APPLICATION_NAME">%s</xliff:g>\" तपासा. आपल्या डिव्हाइसवर चालण्यासाठी त्यास हे अधिकृत करेल."</string> <string name="setup_step1_instruction">"कृपया आपल्या भाषांमध्ये आणि इनपुट सेटिंग्जमध्ये \"<xliff:g id="APPLICATION_NAME">%s</xliff:g>\" तपासा. आपल्या डिव्हाइसवर चालण्यासाठी त्यास हे अधिकृत करेल."</string>
<string name="setup_step1_finished_instruction">"<xliff:g id="APPLICATION_NAME">%s</xliff:g> आपल्या भाषांमध्ये आणि इनपुट सेटिंग्जमध्ये आधीपासून सक्षम केला आहे, त्यामुळे हे चरण पूर्ण झाले आहे. पुढील चरणावर!"</string> <string name="setup_step1_finished_instruction">"<xliff:g id="APPLICATION_NAME">%s</xliff:g> आपल्या भाषांमध्ये आणि इनपुट सेटिंग्जमध्ये आधीपासून सक्षम केला आहे, त्यामुळे हे चरण पूर्ण झाले आहे. पुढील चरणावर!"</string>
<string name="setup_step1_action">"सेटिंग्जमध्ये सुरू करा"</string> <string name="setup_step1_action">"सेटिंग्जमध्ये सुरू करा"</string>
<string name="setup_step2_title">"<xliff:g id="APPLICATION_NAME">%s</xliff:g> वर स्विच करा"</string> <string name="setup_step2_title"><xliff:g id="APPLICATION_NAME">%s</xliff:g> वर स्विच करा\"</string>
<string name="setup_step2_instruction">"पुढे, तुमची सक्रिय मजकूर-इनपुट पद्धत म्हणून \"<xliff:g id="APPLICATION_NAME">%s</xliff:g>\" निवडा."</string> <string name="setup_step2_instruction">"पुढे, तुमची सक्रिय मजकूर-इनपुट पद्धत म्हणून \"<xliff:g id="APPLICATION_NAME">%s</xliff:g>\" निवडा."</string>
<string name="setup_step2_action">"इनपुट पद्धती स्विच करा"</string> <string name="setup_step2_action">"इनपुट पद्धती स्विच करा"</string>
<string name="setup_step3_title">"अभिनंदन, आता तुम्ही तयार आहात!"</string> <string name="setup_step3_title">"अभिनंदन, आता तुम्ही तयार आहात!"</string>

View file

@ -1,10 +1,9 @@
<?xml version="1.0" encoding="UTF-8"?> <?xml version="1.0" encoding="utf-8"?>
<!-- <!--
Copyright (C) 2008 The Android Open Source Project Copyright (C) 2008 The Android Open Source Project
modified modified
SPDX-License-Identifier: Apache-2.0 AND GPL-3.0-only SPDX-License-Identifier: Apache-2.0 AND GPL-3.0-only
--> --><resources xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
<resources xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
<string name="use_contacts_dict">"အဆက်အသွယ်အမည်များကို ရှာ"</string> <string name="use_contacts_dict">"အဆက်အသွယ်အမည်များကို ရှာ"</string>
<string name="vibrate_on_keypress">"ခလုတ်နှိပ်သည်နှင့် တုံခါစေပါ"</string> <string name="vibrate_on_keypress">"ခလုတ်နှိပ်သည်နှင့် တုံခါစေပါ"</string>
<string name="sound_on_keypress">"ခလုတ်နှိပ်လျှင် အသံမြည်"</string> <string name="sound_on_keypress">"ခလုတ်နှိပ်လျှင် အသံမြည်"</string>
@ -76,16 +75,16 @@
<string name="prefs_enable_emoji_alt_physical_key">"ခလုတ်ရှိ ကီးဘုတ်အတွက် အီမိုဂျိ"</string> <string name="prefs_enable_emoji_alt_physical_key">"ခလုတ်ရှိ ကီးဘုတ်အတွက် အီမိုဂျိ"</string>
<string name="prefs_enable_emoji_alt_physical_key_summary">"အီမိုဂျီ ဘုတ်ပြားပြသော Alt ခလုတ်"</string> <string name="prefs_enable_emoji_alt_physical_key_summary">"အီမိုဂျီ ဘုတ်ပြားပြသော Alt ခလုတ်"</string>
<string name="button_default">"ပုံသေ"</string> <string name="button_default">"ပုံသေ"</string>
<string name="setup_welcome_title">"<xliff:g id="APPLICATION_NAME">%s</xliff:g> မှကြိုဆိုပါသည်"</string> <string name="setup_welcome_title"><xliff:g id="APPLICATION_NAME">%s</xliff:g> မှကြိုဆိုပါသည်\"</string>
<string name="setup_welcome_additional_description">"အမူယာ ရိုက်ခြင်းဖြင့်"</string> <string name="setup_welcome_additional_description">"အမူယာ ရိုက်ခြင်းဖြင့်"</string>
<string name="setup_start_action">"စတင်ပါတော့"</string> <string name="setup_start_action">"စတင်ပါတော့"</string>
<string name="setup_next_action">"နောက်တစ်ဆင့်"</string> <string name="setup_next_action">"နောက်တစ်ဆင့်"</string>
<string name="setup_steps_title">"<xliff:g id="APPLICATION_NAME">%s</xliff:g> တပ်ဆင်ရန်"</string> <string name="setup_steps_title"><xliff:g id="APPLICATION_NAME">%s</xliff:g> တပ်ဆင်ရန်\"</string>
<string name="setup_step1_title">"<xliff:g id="APPLICATION_NAME">%s</xliff:g> ဖွင့်ရန်"</string> <string name="setup_step1_title"><xliff:g id="APPLICATION_NAME">%s</xliff:g> ဖွင့်ရန်\"</string>
<string name="setup_step1_instruction">"\"<xliff:g id="APPLICATION_NAME">%s</xliff:g>\" ကို ဘာသာစကားနှင့် စာရိုက်စနစ်တွင် စစ်ပါ။ ဤသို့ဖြင့် သင့်စက်ပစ္စည်းပေါ်တွင် ၎င်းကိုဖွင့်ရန်အတည်ပြုပေးပါလိမ့်မည်။"</string> <string name="setup_step1_instruction">"\"<xliff:g id="APPLICATION_NAME">%s</xliff:g>\" ကို ဘာသာစကားနှင့် စာရိုက်စနစ်တွင် စစ်ပါ။ ဤသို့ဖြင့် သင့်စက်ပစ္စည်းပေါ်တွင် ၎င်းကိုဖွင့်ရန်အတည်ပြုပေးပါလိမ့်မည်။"</string>
<string name="setup_step1_finished_instruction">"<xliff:g id="APPLICATION_NAME">%s</xliff:g> ကို သင့်ဘာသာစကားနှင့် စာရိုက်စနစ်ဆက်တင်များတွင် ဖွင့်ထားပြီးဖြစ်၍ ဤအဆင့်ပြီးပါပြီ။ နောက်တစ်ခုသို့ သွားပါ။"</string> <string name="setup_step1_finished_instruction">"<xliff:g id="APPLICATION_NAME">%s</xliff:g> ကို သင့်ဘာသာစကားနှင့် စာရိုက်စနစ်ဆက်တင်များတွင် ဖွင့်ထားပြီးဖြစ်၍ ဤအဆင့်ပြီးပါပြီ။ နောက်တစ်ခုသို့ သွားပါ။"</string>
<string name="setup_step1_action">"ဆက်တင်များတွင် ဖွင့်ရန်"</string> <string name="setup_step1_action">"ဆက်တင်များတွင် ဖွင့်ရန်"</string>
<string name="setup_step2_title">"<xliff:g id="APPLICATION_NAME">%s</xliff:g> သို့ပြောင်းမည်"</string> <string name="setup_step2_title"><xliff:g id="APPLICATION_NAME">%s</xliff:g> သို့ပြောင်းမည်\"</string>
<string name="setup_step2_instruction">"ရှေ့၊ \"<xliff:g id="APPLICATION_NAME">%s</xliff:g>\" အားသင်၏ ပွင့်နေသည့်ထည့်သွင်းမှု နည်းလမ်းအဖြစ်ရွေးပါ။"</string> <string name="setup_step2_instruction">"ရှေ့၊ \"<xliff:g id="APPLICATION_NAME">%s</xliff:g>\" အားသင်၏ ပွင့်နေသည့်ထည့်သွင်းမှု နည်းလမ်းအဖြစ်ရွေးပါ။"</string>
<string name="setup_step2_action">"စာရိုက်သွင်းမှုနည်းလမ်း ပြောင်းရန်"</string> <string name="setup_step2_action">"စာရိုက်သွင်းမှုနည်းလမ်း ပြောင်းရန်"</string>
<string name="setup_step3_title">"ဝမ်းသာပါသည်၊ သင်အားလုံးသတ်မှတ်ပြီးပါပြီ!"</string> <string name="setup_step3_title">"ဝမ်းသာပါသည်၊ သင်အားလုံးသတ်မှတ်ပြီးပါပြီ!"</string>

View file

@ -84,7 +84,7 @@
<string name="setup_step1_instruction">"कृपया आफ्नो भाषा र इनपुट सम्बन्धी सेटिङहरूमा \"<xliff:g id="APPLICATION_NAME">%s</xliff:g>\" अनुप्रयोगलाई जाँच गर्नुहोस्। यस कारबाहीले अनुप्रयोगलाई तपाईँको यन्त्रमा सञ्चालन हुन आधिकार प्रदान गर्ने छ।"</string> <string name="setup_step1_instruction">"कृपया आफ्नो भाषा र इनपुट सम्बन्धी सेटिङहरूमा \"<xliff:g id="APPLICATION_NAME">%s</xliff:g>\" अनुप्रयोगलाई जाँच गर्नुहोस्। यस कारबाहीले अनुप्रयोगलाई तपाईँको यन्त्रमा सञ्चालन हुन आधिकार प्रदान गर्ने छ।"</string>
<string name="setup_step1_finished_instruction">"तपाईँको भाषा र इनपुट सम्बन्धी सेटिङहरूमा <xliff:g id="APPLICATION_NAME">%s</xliff:g> लाई पहिले नै सक्रिय गरिएको छ, त्यसैले यो चरण सम्पन्न भइसकेको छ। अर्को चरणमा जानुहोस्!"</string> <string name="setup_step1_finished_instruction">"तपाईँको भाषा र इनपुट सम्बन्धी सेटिङहरूमा <xliff:g id="APPLICATION_NAME">%s</xliff:g> लाई पहिले नै सक्रिय गरिएको छ, त्यसैले यो चरण सम्पन्न भइसकेको छ। अर्को चरणमा जानुहोस्!"</string>
<string name="setup_step1_action">"सेटिङहरूमा सक्षम पार्नुहोस्"</string> <string name="setup_step1_action">"सेटिङहरूमा सक्षम पार्नुहोस्"</string>
<string name="setup_step2_title">"<xliff:g id="APPLICATION_NAME">%s</xliff:g>मा स्विच गर्नुहोस्"</string> <string name="setup_step2_title"><xliff:g id="APPLICATION_NAME">%s</xliff:g>मा स्विच गर्नुहोस्\"</string>
<string name="setup_step2_instruction">"त्यसपछि, \"<xliff:g id="APPLICATION_NAME">%s</xliff:g>\" लाई तपाईँको सक्रिय पाठ इनपुट विधिका रूपमा चयन गर्नुहोस्।"</string> <string name="setup_step2_instruction">"त्यसपछि, \"<xliff:g id="APPLICATION_NAME">%s</xliff:g>\" लाई तपाईँको सक्रिय पाठ इनपुट विधिका रूपमा चयन गर्नुहोस्।"</string>
<string name="setup_step2_action">"इनपुट विधि स्विच गर्नुहोस्"</string> <string name="setup_step2_action">"इनपुट विधि स्विच गर्नुहोस्"</string>
<string name="setup_step3_title">"बधाई छ, तपाईँले सेट पुरा गर्नुभयो!"</string> <string name="setup_step3_title">"बधाई छ, तपाईँले सेट पुरा गर्नुभयो!"</string>

View file

@ -476,4 +476,6 @@
<string name="get_layouts_message">Je kunt lay-outs zoeken en delen in de %s.</string> <string name="get_layouts_message">Je kunt lay-outs zoeken en delen in de %s.</string>
<string name="discussion_section_link">discussiesectie</string> <string name="discussion_section_link">discussiesectie</string>
<string name="subtype_baishakhi_bn_IN"><xliff:g id="LANGUAGE_NAME" example="Bengali">%s</xliff:g> (Baishakhi)</string> <string name="subtype_baishakhi_bn_IN"><xliff:g id="LANGUAGE_NAME" example="Bengali">%s</xliff:g> (Baishakhi)</string>
<string name="show_tld_popup_keys">TLD-opties weergeven</string>
<string name="show_tld_popup_keys_summary">Vervang pop-ups met interpunctie door topleveldomeinen bij het typen van URL\'s en e-mailadressen</string>
</resources> </resources>

View file

@ -1,10 +1,9 @@
<?xml version="1.0" encoding="UTF-8"?> <?xml version="1.0" encoding="utf-8"?>
<!-- <!--
Copyright (C) 2008 The Android Open Source Project Copyright (C) 2008 The Android Open Source Project
modified modified
SPDX-License-Identifier: Apache-2.0 AND GPL-3.0-only SPDX-License-Identifier: Apache-2.0 AND GPL-3.0-only
--> --><resources xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
<resources xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
<string name="use_contacts_dict">"ਸੰਪਰਕ ਨਾਮ ਤਲਾਸ਼ੋ"</string> <string name="use_contacts_dict">"ਸੰਪਰਕ ਨਾਮ ਤਲਾਸ਼ੋ"</string>
<string name="vibrate_on_keypress">"ਕੁੰਜੀ ਦਬਾਉਣ ’ਤੇ ਥਰਥਰਾਹਟ ਕਰੋ"</string> <string name="vibrate_on_keypress">"ਕੁੰਜੀ ਦਬਾਉਣ ’ਤੇ ਥਰਥਰਾਹਟ ਕਰੋ"</string>
<string name="sound_on_keypress">"ਕੁੰਜੀ ਦਬਾਉਣ \'ਤੇ ਧੁਨ ਵਜਾਓ"</string> <string name="sound_on_keypress">"ਕੁੰਜੀ ਦਬਾਉਣ \'ਤੇ ਧੁਨ ਵਜਾਓ"</string>
@ -76,16 +75,16 @@
<string name="prefs_enable_emoji_alt_physical_key">"ਭੌਤਿਕ ਕੀ-ਬੋਰਡ ਲਈ ਇਮੋਜੀ"</string> <string name="prefs_enable_emoji_alt_physical_key">"ਭੌਤਿਕ ਕੀ-ਬੋਰਡ ਲਈ ਇਮੋਜੀ"</string>
<string name="prefs_enable_emoji_alt_physical_key_summary">"ਭੌਤਿਕ Alt ਕੁੰਜੀ ਇਮੋਜੀ ਪੈਲੇਟ ਦਿਖਾਉਂਦੀ ਹੈ"</string> <string name="prefs_enable_emoji_alt_physical_key_summary">"ਭੌਤਿਕ Alt ਕੁੰਜੀ ਇਮੋਜੀ ਪੈਲੇਟ ਦਿਖਾਉਂਦੀ ਹੈ"</string>
<string name="button_default">"ਪੂਰਵ-ਨਿਰਧਾਰਤ"</string> <string name="button_default">"ਪੂਰਵ-ਨਿਰਧਾਰਤ"</string>
<string name="setup_welcome_title">"<xliff:g id="APPLICATION_NAME">%s</xliff:g> ਤੇ ਸੁਆਗਤ ਹੈ"</string> <string name="setup_welcome_title"><xliff:g id="APPLICATION_NAME">%s</xliff:g> ਤੇ ਸੁਆਗਤ ਹੈ\"</string>
<string name="setup_welcome_additional_description">"ਸੰਕੇਤ ਟਾਈਪਿੰਗ ਨਾਲ"</string> <string name="setup_welcome_additional_description">"ਸੰਕੇਤ ਟਾਈਪਿੰਗ ਨਾਲ"</string>
<string name="setup_start_action">"ਸ਼ੁਰੂਆਤ ਕਰੋ"</string> <string name="setup_start_action">"ਸ਼ੁਰੂਆਤ ਕਰੋ"</string>
<string name="setup_next_action">"ਅਗਲਾ ਸਟੈਪ"</string> <string name="setup_next_action">"ਅਗਲਾ ਸਟੈਪ"</string>
<string name="setup_steps_title">"<xliff:g id="APPLICATION_NAME">%s</xliff:g> ਸੈਟ ਅਪ ਕਰ ਰਿਹਾ ਹੈ"</string> <string name="setup_steps_title"><xliff:g id="APPLICATION_NAME">%s</xliff:g> ਸੈਟ ਅਪ ਕਰ ਰਿਹਾ ਹੈ\"</string>
<string name="setup_step1_title">"<xliff:g id="APPLICATION_NAME">%s</xliff:g> ਨੂੰ ਸਮਰੱਥ ਬਣਾਓ"</string> <string name="setup_step1_title"><xliff:g id="APPLICATION_NAME">%s</xliff:g> ਨੂੰ ਸਮਰੱਥ ਬਣਾਓ\"</string>
<string name="setup_step1_instruction">"ਕਿਰਪਾ ਕਰਕੇ ਆਪਣੀਆਂ ਭਾਸ਼ਾਵਾਂ ਅਤੇ ਇਨਪੁੱਟ ਸੈਟਿੰਗਾਂ ਵਿੱਚ \"<xliff:g id="APPLICATION_NAME">%s</xliff:g>\" \'ਤੇ ਸਹੀ ਦਾ ਨਿਸ਼ਾਨ ਲਗਾਓ। ਇਹ ਉਸ ਨੂੰ ਤੁਹਾਡੇ ਡੀਵਾਈਸ \'ਤੇ ਚੱਲਣ ਲਈ ਅਧਿਕਾਰਿਤ ਕਰੇਗਾ।"</string> <string name="setup_step1_instruction">"ਕਿਰਪਾ ਕਰਕੇ ਆਪਣੀਆਂ ਭਾਸ਼ਾਵਾਂ ਅਤੇ ਇਨਪੁੱਟ ਸੈਟਿੰਗਾਂ ਵਿੱਚ \"<xliff:g id="APPLICATION_NAME">%s</xliff:g>\" \'ਤੇ ਸਹੀ ਦਾ ਨਿਸ਼ਾਨ ਲਗਾਓ। ਇਹ ਉਸ ਨੂੰ ਤੁਹਾਡੇ ਡੀਵਾਈਸ \'ਤੇ ਚੱਲਣ ਲਈ ਅਧਿਕਾਰਿਤ ਕਰੇਗਾ।"</string>
<string name="setup_step1_finished_instruction">"<xliff:g id="APPLICATION_NAME">%s</xliff:g> ਨੂੰ ਪਹਿਲਾਂ ਹੀ ਤੁਹਾਡੀਆਂ ਭਾਸ਼ਾਵਾਂ ਅਤੇ ਇਨਪੁੱਟ ਸੈਟਿੰਗਾਂ ਵਿੱਚ ਚਾਲੂ ਕੀਤਾ ਗਿਆ ਹੈ, ਇਸ ਲਈ ਇਹ ਪੜਾਅ ਪੂਰਾ ਹੋ ਗਿਆ ਹੈ। ਅਗਲੇ ਪੜਾਅ \'ਤੇ ਜਾਓ!"</string> <string name="setup_step1_finished_instruction">"<xliff:g id="APPLICATION_NAME">%s</xliff:g> ਨੂੰ ਪਹਿਲਾਂ ਹੀ ਤੁਹਾਡੀਆਂ ਭਾਸ਼ਾਵਾਂ ਅਤੇ ਇਨਪੁੱਟ ਸੈਟਿੰਗਾਂ ਵਿੱਚ ਚਾਲੂ ਕੀਤਾ ਗਿਆ ਹੈ, ਇਸ ਲਈ ਇਹ ਪੜਾਅ ਪੂਰਾ ਹੋ ਗਿਆ ਹੈ। ਅਗਲੇ ਪੜਾਅ \'ਤੇ ਜਾਓ!"</string>
<string name="setup_step1_action">"ਸੈਟਿੰਗਾਂ ਵਿੱਚ ਚਾਲੂ ਕਰੋ"</string> <string name="setup_step1_action">"ਸੈਟਿੰਗਾਂ ਵਿੱਚ ਚਾਲੂ ਕਰੋ"</string>
<string name="setup_step2_title">"<xliff:g id="APPLICATION_NAME">%s</xliff:g> \'ਤੇ ਸਵਿੱਚ ਕਰੋ"</string> <string name="setup_step2_title"><xliff:g id="APPLICATION_NAME">%s</xliff:g> \'ਤੇ ਸਵਿੱਚ ਕਰੋ\"</string>
<string name="setup_step2_instruction">"ਫਿਰ, \"<xliff:g id="APPLICATION_NAME">%s</xliff:g>\" ਨੂੰ ਆਪਣੀ ਕਿਰਿਆਸ਼ੀਲ ਲਿਖਤ-ਇਨਪੁੱਟ ਵਿਧੀ ਦੇ ਤੌਰ ਤੇ ਚੁਣੋ।"</string> <string name="setup_step2_instruction">"ਫਿਰ, \"<xliff:g id="APPLICATION_NAME">%s</xliff:g>\" ਨੂੰ ਆਪਣੀ ਕਿਰਿਆਸ਼ੀਲ ਲਿਖਤ-ਇਨਪੁੱਟ ਵਿਧੀ ਦੇ ਤੌਰ ਤੇ ਚੁਣੋ।"</string>
<string name="setup_step2_action">"ਇਨਪੁੱਟ ਵਿਧੀਆਂ ਸਵਿੱਚ ਕਰੋ"</string> <string name="setup_step2_action">"ਇਨਪੁੱਟ ਵਿਧੀਆਂ ਸਵਿੱਚ ਕਰੋ"</string>
<string name="setup_step3_title">"ਵਧਾਈ ਹੋਵੇ, ਤੁਸੀਂ ਸਾਰਾ ਸੈਟ ਕਰ ਲਿਆ ਹੈ!"</string> <string name="setup_step3_title">"ਵਧਾਈ ਹੋਵੇ, ਤੁਸੀਂ ਸਾਰਾ ਸੈਟ ਕਰ ਲਿਆ ਹੈ!"</string>

View file

@ -94,7 +94,7 @@
<string name="show_setup_wizard_icon">"Pokaż ikonę aplikacji"</string> <string name="show_setup_wizard_icon">"Pokaż ikonę aplikacji"</string>
<string name="show_setup_wizard_icon_summary">"Wyświetlaj ikonę aplikacji w programie uruchamiającym"</string> <string name="show_setup_wizard_icon_summary">"Wyświetlaj ikonę aplikacji w programie uruchamiającym"</string>
<string name="dictionary_settings_title">"Słowniki dodatkowe"</string> <string name="dictionary_settings_title">"Słowniki dodatkowe"</string>
<string name="dictionary_available">"Słownik dostępny"</string> <string name="dictionary_available">Dostępny słownik</string>
<string name="no_dictionaries_available">"Brak słowników"</string> <string name="no_dictionaries_available">"Brak słowników"</string>
<string name="last_update">"Ostatnia aktualizacja"</string> <string name="last_update">"Ostatnia aktualizacja"</string>
<string name="settings">"Ustawienia"</string> <string name="settings">"Ustawienia"</string>
@ -174,13 +174,13 @@
<string name="restore_error">Błąd podczas przywracania kopii zapasowej: %s</string> <string name="restore_error">Błąd podczas przywracania kopii zapasowej: %s</string>
<string name="theme_colors">Kolory</string> <string name="theme_colors">Kolory</string>
<string name="select_color_functional_key_background">Tło klawiszy funkcyjnych</string> <string name="select_color_functional_key_background">Tło klawiszy funkcyjnych</string>
<string name="subtype_generic_sebeolsik_390"><xliff:g id="LANGUAGE_NAME" example="Koreański">%s</xliff:g> (Sebeolsik 390)</string> <string name="subtype_generic_sebeolsik_390"><xliff:g id="LANGUAGE_NAME" example="koreański">%s</xliff:g> (Sebeolsik 390)</string>
<string name="add_to_personal_dictionary_summary">Używaj słownika osobistego do przechowywania nauczonych słów</string> <string name="add_to_personal_dictionary_summary">Używaj słownika osobistego do przechowywania nauczonych słów</string>
<string name="user_dict_word_already_present">To słowo znajduje się już w słowniku: %s. Wpisz inne.</string> <string name="user_dict_word_already_present">To słowo znajduje się już w słowniku: %s. Wpisz inne.</string>
<string name="style_name_Rounded" tools:keep="@string/style_name_Rounded">Zaokrąglony</string> <string name="style_name_Rounded" tools:keep="@string/style_name_Rounded">Zaokrąglony</string>
<string name="button_backup">Kopia</string> <string name="button_backup">Kopia</string>
<string name="theme_name_black" tools:keep="@string/theme_name_black">Czarne</string> <string name="theme_name_black" tools:keep="@string/theme_name_black">Czarne</string>
<string name="subtype_generic_sebeolsik_final"><xliff:g id="LANGUAGE_NAME" example="Koreański">%s</xliff:g> (Sebeolsik Final)</string> <string name="subtype_generic_sebeolsik_final"><xliff:g id="LANGUAGE_NAME" example="koreański">%s</xliff:g> (Sebeolsik Final)</string>
<string name="theme_name_chocolate" tools:keep="@string/theme_name_chocolate">Czekoladowe</string> <string name="theme_name_chocolate" tools:keep="@string/theme_name_chocolate">Czekoladowe</string>
<string name="remove_dictionary_message">Na pewno usunąć słownik \"%s\" dodany przez użytkownika?</string> <string name="remove_dictionary_message">Na pewno usunąć słownik \"%s\" dodany przez użytkownika?</string>
<string name="theme_name_cloudy" tools:keep="@string/theme_name_cloudy">Pochmurne</string> <string name="theme_name_cloudy" tools:keep="@string/theme_name_cloudy">Pochmurne</string>
@ -195,7 +195,7 @@
<string name="theme_name_pink" tools:keep="@string/theme_name_pink">Różowe</string> <string name="theme_name_pink" tools:keep="@string/theme_name_pink">Różowe</string>
<string name="language_and_layouts_title">Języki i układy</string> <string name="language_and_layouts_title">Języki i układy</string>
<string name="file_read_error">Nie można odczytać pliku</string> <string name="file_read_error">Nie można odczytać pliku</string>
<string name="dictionary_link_text">stąd</string> <string name="dictionary_link_text">tutaj</string>
<string name="dictionary_file_error">Błąd: wybrany plik nie jest prawidłowym plikiem słownika</string> <string name="dictionary_file_error">Błąd: wybrany plik nie jest prawidłowym plikiem słownika</string>
<string name="hidden_features_text">chronionej pamięci urządzenia</string> <string name="hidden_features_text">chronionej pamięci urządzenia</string>
<string name="theme_navbar">Koloruj pasek nawigacyjny</string> <string name="theme_navbar">Koloruj pasek nawigacyjny</string>
@ -360,7 +360,7 @@
<string name="show_vertical_space_swipe">Spacja - przesuwanie pionowe</string> <string name="show_vertical_space_swipe">Spacja - przesuwanie pionowe</string>
<string name="show_horizontal_space_swipe">Spacja - przesuwanie poziome</string> <string name="show_horizontal_space_swipe">Spacja - przesuwanie poziome</string>
<string name="space_swipe_move_cursor_entry">Przesuń kursor</string> <string name="space_swipe_move_cursor_entry">Przesuń kursor</string>
<string name="action_none">Brak przesuwania</string> <string name="action_none">Brak</string>
<string name="var_toolbar_direction_summary">Odwróć kierunek po wybraniu układu klawiatury od prawej do lewej</string> <string name="var_toolbar_direction_summary">Odwróć kierunek po wybraniu układu klawiatury od prawej do lewej</string>
<string name="var_toolbar_direction">Zmienny kierunek paska narzędzi</string> <string name="var_toolbar_direction">Zmienny kierunek paska narzędzi</string>
<string name="subtype_probhat_bn_BD"><xliff:g id="LANGUAGE_NAME" example="bengalski">%s</xliff:g> (Probhat)</string> <string name="subtype_probhat_bn_BD"><xliff:g id="LANGUAGE_NAME" example="bengalski">%s</xliff:g> (Probhat)</string>
@ -392,7 +392,7 @@
<string name="emoji" tools:keep="@string/emoji">Emotikony</string> <string name="emoji" tools:keep="@string/emoji">Emotikony</string>
<string name="customize_currencies_detail">Ustaw główny i do 6 drugorzędnych symboli waluty, oddzielonych spacją</string> <string name="customize_currencies_detail">Ustaw główny i do 6 drugorzędnych symboli waluty, oddzielonych spacją</string>
<string name="customize_currencies">Dostosuj waluty</string> <string name="customize_currencies">Dostosuj waluty</string>
<string name="load">Załaduj</string> <string name="load">Dodaj</string>
<string name="copy_to_clipboard">Skopiuj do schowka</string> <string name="copy_to_clipboard">Skopiuj do schowka</string>
<string name="load_will_overwrite">Ładowanie spowoduje zastąpienie bieżącego motywu</string> <string name="load_will_overwrite">Ładowanie spowoduje zastąpienie bieżącego motywu</string>
<string name="button_save_file">Zapisz do pliku</string> <string name="button_save_file">Zapisz do pliku</string>
@ -471,7 +471,11 @@
<string name="name_invalid">Nieprawidłowa nazwa</string> <string name="name_invalid">Nieprawidłowa nazwa</string>
<string name="locales_with_dict">Języki ze słownikami</string> <string name="locales_with_dict">Języki ze słownikami</string>
<string name="layout_in_use">Ostrzeżenie: ten układ jest aktualnie używany</string> <string name="layout_in_use">Ostrzeżenie: ten układ jest aktualnie używany</string>
<string name="get_colors_message">Motywy możesz znaleźć i udostępnić w %s .</string> <string name="get_colors_message">Motywy możesz znaleźć i udostępnić w %s.</string>
<string name="get_layouts_message">Układy możesz znaleźć i udostępnić w %s .</string> <string name="get_layouts_message">Układy możesz znaleźć i udostępnić w %s.</string>
<string name="discussion_section_link">sekcji dyskusji</string> <string name="discussion_section_link">sekcji dyskusji</string>
<string name="custom_subtype">Własny układ</string>
<string name="subtype_baishakhi_bn_IN"><xliff:g id="LANGUAGE_NAME" example="bengalski">%s</xliff:g> (Baishakhi)</string>
<string name="show_tld_popup_keys">Pokaż wyskakujące okienka TLD</string>
<string name="show_tld_popup_keys_summary">Zastąp wyskakujące okienka klawisza kropki domenami najwyższego poziomu podczas wpisywania adresów URL i adresów e-mail</string>
</resources> </resources>

View file

@ -123,7 +123,7 @@
<string name="subtype_no_language_colemak">Alfabeto (Colemak)</string> <string name="subtype_no_language_colemak">Alfabeto (Colemak)</string>
<string name="subtype_no_language_colemak_dh">Alfabeto (Colemak Mod-DH)</string> <string name="subtype_no_language_colemak_dh">Alfabeto (Colemak Mod-DH)</string>
<string name="subtype_no_language_workman">Alfabeto (Workman)</string> <string name="subtype_no_language_workman">Alfabeto (Workman)</string>
<string name="setup_welcome_title">Bem-vindo ao<xliff:g id="APPLICATION_NAME" example="Android Keyboard">%s</xliff:g></string> <string name="setup_welcome_title">Bem-vindo ao <xliff:g id="APPLICATION_NAME" example="Android Keyboard">%s</xliff:g></string>
<string name="prefs_enable_emoji_alt_physical_key_summary">Mostrar a paleta de emojis ao tocar na tecla Alt física</string> <string name="prefs_enable_emoji_alt_physical_key_summary">Mostrar a paleta de emojis ao tocar na tecla Alt física</string>
<string name="setup_steps_title">Configurando <xliff:g id="APPLICATION_NAME" example="Android Keyboard">%s</xliff:g></string> <string name="setup_steps_title">Configurando <xliff:g id="APPLICATION_NAME" example="Android Keyboard">%s</xliff:g></string>
<string name="setup_step1_instruction">Por favor, ative o \\<xliff:g id="APPLICATION_NAME" example="Android Keyboard">%s</xliff:g>\" em \'Idiomas e Entrada\' nas configurações. Isso permitirá que ele seja usado no seu dispositivo.\"</string> <string name="setup_step1_instruction">Por favor, ative o \\<xliff:g id="APPLICATION_NAME" example="Android Keyboard">%s</xliff:g>\" em \'Idiomas e Entrada\' nas configurações. Isso permitirá que ele seja usado no seu dispositivo.\"</string>
@ -439,4 +439,6 @@
<string name="discussion_section_link">seção de discussão</string> <string name="discussion_section_link">seção de discussão</string>
<string name="custom_subtype">Subtipo customizado</string> <string name="custom_subtype">Subtipo customizado</string>
<string name="subtype_baishakhi_bn_IN"><xliff:g id="LANGUAGE_NAME" example="Bengali">%s</xliff:g> (Baishakhi)</string> <string name="subtype_baishakhi_bn_IN"><xliff:g id="LANGUAGE_NAME" example="Bengali">%s</xliff:g> (Baishakhi)</string>
<string name="show_tld_popup_keys">Mostrar teclas de TLD</string>
<string name="show_tld_popup_keys_summary">Substituir os pop-ups da tecla de ponto com domínios de topo ao digitar URLs e endereços de e-mail</string>
</resources> </resources>

View file

@ -210,4 +210,20 @@
<string name="customize_toolbar_key_code_reset_message">Limpar realmente todos os códigos de teclas personalizados?</string> <string name="customize_toolbar_key_code_reset_message">Limpar realmente todos os códigos de teclas personalizados?</string>
<string name="number_row_hints">Mostrar dicas na linha dos números</string> <string name="number_row_hints">Mostrar dicas na linha dos números</string>
<string name="prefs_language_swipe_distance">Mudar a distância de deslizamento do idioma</string> <string name="prefs_language_swipe_distance">Mudar a distância de deslizamento do idioma</string>
<string name="popup_keys_number" tools:keep="@string/popup_keys_number">Linha de números</string>
<string name="popup_keys_layout" tools:keep="@string/popup_keys_layout">Disposição</string>
<string name="show_popup_keys_more">Adicionar variantes comuns</string>
<string name="popup_keys_symbols" tools:keep="@string/popup_keys_symbols">Símbolos</string>
<string name="popup_keys_language_priority" tools:keep="@string/popup_keys_language_priority">Língua (prioridade)</string>
<string name="emoji" tools:keep="@string/emoji">Emoji</string>
<string name="show_popup_keys_all">Adicionar todas as variantes disponíveis</string>
<string name="popup_keys_language" tools:keep="@string/popup_keys_language">Idioma</string>
<string name="up" tools:keep="@string/up">Cima</string>
<string name="down" tools:keep="@string/down">Baixo</string>
<string name="clear_clipboard" tools:keep="@string/clear_clipboard">Limpar a área de transferência</string>
<string name="select_word" tools:keep="@string/select_word">Selecionar palavra</string>
<string name="left" tools:keep="@string/left">Esquerda</string>
<string name="right" tools:keep="@string/right">Direita</string>
<string name="locales_with_dict">Idiomas com dicionários</string>
<string name="clipboard" tools:keep="@string/clipboard">Área de transferência</string>
</resources> </resources>

View file

@ -399,4 +399,35 @@
<string name="label_shortcut_key_disabled" tools:keep="@string/label_shortcut_key_disabled">Introducerea vocală este dezactivată</string> <string name="label_shortcut_key_disabled" tools:keep="@string/label_shortcut_key_disabled">Introducerea vocală este dezactivată</string>
<string name="label_toolbar_key" tools:keep="@string/label_toolbar_key">Afișează/ascunde bara de instrumente</string> <string name="label_toolbar_key" tools:keep="@string/label_toolbar_key">Afișează/ascunde bara de instrumente</string>
<string name="customize_icons_reset_message">Resetezi cu adevărat toate pictogramele personalizate?</string> <string name="customize_icons_reset_message">Resetezi cu adevărat toate pictogramele personalizate?</string>
<string name="custom_subtype">Subtip personalizat</string>
<string name="name_invalid">Nume greșit</string>
<string name="subtype_baishakhi_bn_IN"><xliff:g id="LANGUAGE_NAME" example="Bengali">%s</xliff:g> (Baishakhi)</string>
<string name="locales_with_dict">Limbi cu dicționare</string>
<string name="split" tools:keep="@string/split">Tastatură împărțită</string>
<string name="layout_in_use">AVERTIZARE: Aspectul este utilizat în prezent</string>
<string name="customize_background_image_landscape">Setează imaginea de fundal (peisaj)</string>
<string name="summary_customize_background_image_landscape">Dacă nu este setat, se va folosi imaginea portret</string>
<string name="get_layouts_message">Poți găsi și împărtăși aspecte în %s.</string>
<string name="label_zwj_key" tools:keep="@string/label_zwj_key">Conectorul lățimii zero</string>
<string name="customize_toolbar_key_code_reset_message">Ștergi cu adevărat toate codurile cheie personalizate?</string>
<string name="split_spacer_scale_landscape">Distanța divizării (peisaj)</string>
<string name="enable_split_keyboard_landscape">Activează tastatura divizată (peisaj)</string>
<string name="gesture_fast_typing_cooldown">Timp de restabilire a tastării rapide</string>
<string name="auto_correct_shortcuts">Comenzi rapide corectare automată</string>
<string name="auto_correct_shortcuts_summary">Dacă este activat, comenzile rapide pot fi extinse prin corecție automată</string>
<string name="delete_confirmation">Chiar ștergi %s?</string>
<string name="custom_font">Setează font personalizat din fișier</string>
<string name="remove_redundant_popups_summary">Suprimă tastele pop-up care sunt deja prezente pe aspectul de bază</string>
<string name="layout_functional_keys_tablet" tools:keep="@string/layout_functional_keys_tablet">Taste funcționale (ecran mare)</string>
<string name="settings_screen_secondary_layouts">Aspecte secundare</string>
<string name="prefs_bottom_padding_scale_landscape">Scală umplutură inferioară (peisaj)</string>
<string name="prefs_font_scale">Scală font la tastatură</string>
<string name="prefs_emoji_font_scale">Scală font vizualizare emoji</string>
<string name="label_bin" tools:keep="@string/label_bin">Coș de reciclare</string>
<string name="prefs_side_padding_scale_landscape">Scală umplutură laterală (peisaj)</string>
<string name="prefs_side_padding_scale">Scală umplutură laterală</string>
<string name="number_row_hints">Afișează indicii pe rândul cu numere</string>
<string name="prefs_language_swipe_distance">Distanța de deplasare pentru comutarea limbii</string>
<string name="get_colors_message">Poți găsi și împărtăși culori în %s.</string>
<string name="discussion_section_link">secțiunea de discuții</string>
</resources> </resources>

View file

@ -81,16 +81,16 @@
<string name="prefs_enable_emoji_alt_physical_key">Эмодзи для физической клавиатуры</string> <string name="prefs_enable_emoji_alt_physical_key">Эмодзи для физической клавиатуры</string>
<string name="prefs_enable_emoji_alt_physical_key_summary">Физическая клавиша Alt показывает все доступные эмодзи</string> <string name="prefs_enable_emoji_alt_physical_key_summary">Физическая клавиша Alt показывает все доступные эмодзи</string>
<string name="button_default">По умолчанию</string> <string name="button_default">По умолчанию</string>
<string name="setup_welcome_title">Добро пожаловать в<xliff:g id="APPLICATION_NAME" example="Android Keyboard">%s</xliff:g></string> <string name="setup_welcome_title">Добро пожаловать в <xliff:g id="APPLICATION_NAME" example="Android Keyboard">%s</xliff:g></string>
<string name="setup_welcome_additional_description">с непрерывным вводом</string> <string name="setup_welcome_additional_description">с непрерывным вводом</string>
<string name="setup_start_action">Начать работу</string> <string name="setup_start_action">Начать работу</string>
<string name="setup_next_action">Далее</string> <string name="setup_next_action">Далее</string>
<string name="setup_steps_title">Настроить<xliff:g id="APPLICATION_NAME" example="Android Keyboard">%s</xliff:g></string> <string name="setup_steps_title">Настроить <xliff:g id="APPLICATION_NAME" example="Android Keyboard">%s</xliff:g></string>
<string name="setup_step1_title">Включить<xliff:g id="APPLICATION_NAME" example="Android Keyboard">%s</xliff:g></string> <string name="setup_step1_title">Включить <xliff:g id="APPLICATION_NAME" example="Android Keyboard">%s</xliff:g></string>
<string name="setup_step1_instruction">Убедитесь, что \\<xliff:g id="APPLICATION_NAME" example="Android Keyboard">%s</xliff:g>\" включен в настройках языка и ввода. Это позволит ему работать на вашем устройстве.\"</string> <string name="setup_step1_instruction">Убедитесь, что \\<xliff:g id="APPLICATION_NAME" example="Android Keyboard">%s</xliff:g>\" включен в настройках языка и ввода. Это позволит ему работать на вашем устройстве.\"</string>
<string name="setup_step1_finished_instruction">Приложение <xliff:g id="APPLICATION_NAME" example="Android Keyboard">%s</xliff:g> уже включено в настройках языка и ввода. Перейдите к следующему шагу!\"</string> <string name="setup_step1_finished_instruction">Приложение <xliff:g id="APPLICATION_NAME" example="Android Keyboard">%s</xliff:g> уже включено в настройках языка и ввода. Перейдите к следующему шагу!\"</string>
<string name="setup_step1_action">Включить в настройках</string> <string name="setup_step1_action">Включить в настройках</string>
<string name="setup_step2_title">Переключитесь на<xliff:g id="APPLICATION_NAME" example="Android Keyboard">%s</xliff:g></string> <string name="setup_step2_title">Переключитесь на <xliff:g id="APPLICATION_NAME" example="Android Keyboard">%s</xliff:g></string>
<string name="setup_step2_instruction">Теперь выберите \\<xliff:g id="APPLICATION_NAME" example="Android Keyboard">%s</xliff:g>\" в качестве активного метода ввода текста.\"</string> <string name="setup_step2_instruction">Теперь выберите \\<xliff:g id="APPLICATION_NAME" example="Android Keyboard">%s</xliff:g>\" в качестве активного метода ввода текста.\"</string>
<string name="setup_step2_action">Другой способ ввода</string> <string name="setup_step2_action">Другой способ ввода</string>
<string name="setup_step3_title">Поздравляем, всё готово!</string> <string name="setup_step3_title">Поздравляем, всё готово!</string>
@ -285,7 +285,7 @@
<string name="theme_name_holo_white" tools:keep="@string/theme_name_holo_white">Holo Белая</string> <string name="theme_name_holo_white" tools:keep="@string/theme_name_holo_white">Holo Белая</string>
<string name="language_switch_key_switch_both">Смена обоих</string> <string name="language_switch_key_switch_both">Смена обоих</string>
<string name="up" tools:keep="@string/up">Вверх</string> <string name="up" tools:keep="@string/up">Вверх</string>
<string name="remove_dictionary_message">Удалить пользовательский словарь \"%s\"?</string> <string name="remove_dictionary_message">Удалить пользовательский словарь «%s»?</string>
<string name="file_read_error">Не получается прочитать файл</string> <string name="file_read_error">Не получается прочитать файл</string>
<string name="dictionary_link_text">здесь</string> <string name="dictionary_link_text">здесь</string>
<string name="add_dictionary">Выберите для добавления словаря. Словари в формате .dict можно скачать %s.</string> <string name="add_dictionary">Выберите для добавления словаря. Словари в формате .dict можно скачать %s.</string>
@ -307,7 +307,7 @@
<string name="dictionary_file_wrong_locale_ok">Всё ещё используется</string> <string name="dictionary_file_wrong_locale_ok">Всё ещё используется</string>
<string name="dictionary_file_wrong_locale">Выбранный файл предназначен для %1$s, но ожидался %2$s. Всё ещё используете его для %2$s?</string> <string name="dictionary_file_wrong_locale">Выбранный файл предназначен для %1$s, но ожидался %2$s. Всё ещё используете его для %2$s?</string>
<string name="dictionary_file_error">Ошибка: выбранный файл не является корректным словарем</string> <string name="dictionary_file_error">Ошибка: выбранный файл не является корректным словарем</string>
<string name="no_dictionary_message">"Без словаря вы будете получать предложения только для введенного ранее текста.&lt;br&gt;\n Вы можете загрузить словари %1$s или проверить, можно ли загрузить словарь для \"%2$s\" напрямую %3$s."</string> <string name="no_dictionary_message">"Без словаря вы будете получать предложения только для введенного ранее текста.&lt;br&gt;\n Вы можете загрузить словари %1$s или проверить, можно ли загрузить словарь для «%2$s» напрямую %3$s."</string>
<string name="available_dictionary_experimental">%s (экспериментальный)</string> <string name="available_dictionary_experimental">%s (экспериментальный)</string>
<string name="layout_symbols" tools:keep="@string/layout_symbols">Символы</string> <string name="layout_symbols" tools:keep="@string/layout_symbols">Символы</string>
<string name="layout_symbols_arabic" tools:keep="@string/layout_symbols_arabic">Символы (арабские)</string> <string name="layout_symbols_arabic" tools:keep="@string/layout_symbols_arabic">Символы (арабские)</string>
@ -425,7 +425,7 @@
<string name="label_shift_key" tools:keep="@string/label_shift_key">Shift</string> <string name="label_shift_key" tools:keep="@string/label_shift_key">Shift</string>
<string name="label_shift_key_shifted" tools:keep="@string/label_shift_key_shifted">Shift (нажат)</string> <string name="label_shift_key_shifted" tools:keep="@string/label_shift_key_shifted">Shift (нажат)</string>
<string name="label_shift_key_locked" tools:keep="@string/label_shift_key_locked">Caps lock</string> <string name="label_shift_key_locked" tools:keep="@string/label_shift_key_locked">Caps lock</string>
<string name="label_shortcut_key_disabled" tools:keep="@string/label_shortcut_key_disabled">Голосовой ввод отключен</string> <string name="label_shortcut_key_disabled" tools:keep="@string/label_shortcut_key_disabled">Голосовой ввод отключён</string>
<string name="label_toolbar_key" tools:keep="@string/label_toolbar_key">Показать / скрыть панель инструментов</string> <string name="label_toolbar_key" tools:keep="@string/label_toolbar_key">Показать / скрыть панель инструментов</string>
<string name="label_zwj_key" tools:keep="@string/label_zwj_key">Соединитель нулевой ширины</string> <string name="label_zwj_key" tools:keep="@string/label_zwj_key">Соединитель нулевой ширины</string>
<string name="customize_toolbar_key_codes">Настроить коды клавиш панели инструментов</string> <string name="customize_toolbar_key_codes">Настроить коды клавиш панели инструментов</string>
@ -435,8 +435,8 @@
<string name="label_zwnj_key" tools:keep="@string/label_zwnj_key">Разъединитель нулевой ширины</string> <string name="label_zwnj_key" tools:keep="@string/label_zwnj_key">Разъединитель нулевой ширины</string>
<string name="label_stop_onehanded_mode_key" tools:keep="@string/label_stop_onehanded_mode_key">Выход из режима работы одной рукой</string> <string name="label_stop_onehanded_mode_key" tools:keep="@string/label_stop_onehanded_mode_key">Выход из режима работы одной рукой</string>
<string name="customize_icons_reset_message">Действительно сбросить все настроенные иконки?</string> <string name="customize_icons_reset_message">Действительно сбросить все настроенные иконки?</string>
<string name="label_bin" tools:keep="@string/label_bin">Bin</string> <string name="label_bin" tools:keep="@string/label_bin">Корзина</string>
<string name="vibrate_in_dnd_mode">Вибрировать в режиме Не беспокоить</string> <string name="vibrate_in_dnd_mode">Вибрация в режиме «Не беспокоить»</string>
<string name="subtype_generic_phonetic"><xliff:g id="LANGUAGE_NAME" example="Хинди">%s</xliff:g> (Фонетика)</string> <string name="subtype_generic_phonetic"><xliff:g id="LANGUAGE_NAME" example="Хинди">%s</xliff:g> (Фонетика)</string>
<string name="auto_correct_shortcuts">Автокоррекция сочетаний клавиш</string> <string name="auto_correct_shortcuts">Автокоррекция сочетаний клавиш</string>
<string name="custom_font">Установить пользовательский шрифт из файла</string> <string name="custom_font">Установить пользовательский шрифт из файла</string>

View file

@ -1,10 +1,9 @@
<?xml version="1.0" encoding="UTF-8"?> <?xml version="1.0" encoding="utf-8"?>
<!-- <!--
Copyright (C) 2008 The Android Open Source Project Copyright (C) 2008 The Android Open Source Project
modified modified
SPDX-License-Identifier: Apache-2.0 AND GPL-3.0-only SPDX-License-Identifier: Apache-2.0 AND GPL-3.0-only
--> --><resources xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
<resources xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
<string name="use_contacts_dict">"සබඳතා නම් විමසන්න"</string> <string name="use_contacts_dict">"සබඳතා නම් විමසන්න"</string>
<string name="vibrate_on_keypress">"යතුර ඔබන විට කම්පනය"</string> <string name="vibrate_on_keypress">"යතුර ඔබන විට කම්පනය"</string>
<string name="sound_on_keypress">"යතුරු එබිම මත හඬ"</string> <string name="sound_on_keypress">"යතුරු එබිම මත හඬ"</string>
@ -76,16 +75,16 @@
<string name="prefs_enable_emoji_alt_physical_key">"භෞතික යතුරුපුවරුව සඳහා ඉමොජි"</string> <string name="prefs_enable_emoji_alt_physical_key">"භෞතික යතුරුපුවරුව සඳහා ඉමොජි"</string>
<string name="prefs_enable_emoji_alt_physical_key_summary">"භෞතික Alt යතුර ඉමොජි පෙන්වයි"</string> <string name="prefs_enable_emoji_alt_physical_key_summary">"භෞතික Alt යතුර ඉමොජි පෙන්වයි"</string>
<string name="button_default">"සුපුරුදු"</string> <string name="button_default">"සුපුරුදු"</string>
<string name="setup_welcome_title">"<xliff:g id="APPLICATION_NAME">%s</xliff:g> වෙත සාදරයෙන් පිළිගනිමු"</string> <string name="setup_welcome_title"><xliff:g id="APPLICATION_NAME">%s</xliff:g> වෙත සාදරයෙන් පිළිගනිමු\"</string>
<string name="setup_welcome_additional_description">"ඉංගිත ටයිප් කිරීම් සමග"</string> <string name="setup_welcome_additional_description">"ඉංගිත ටයිප් කිරීම් සමග"</string>
<string name="setup_start_action">"අරඹන්න"</string> <string name="setup_start_action">"අරඹන්න"</string>
<string name="setup_next_action">"ඊළඟ පියවර"</string> <string name="setup_next_action">"ඊළඟ පියවර"</string>
<string name="setup_steps_title">"<xliff:g id="APPLICATION_NAME">%s</xliff:g> සැකසෙමින් පවතී"</string> <string name="setup_steps_title"><xliff:g id="APPLICATION_NAME">%s</xliff:g> සැකසෙමින් පවතී\"</string>
<string name="setup_step1_title">"<xliff:g id="APPLICATION_NAME">%s</xliff:g> සබල කරන්න"</string> <string name="setup_step1_title"><xliff:g id="APPLICATION_NAME">%s</xliff:g> සබල කරන්න\"</string>
<string name="setup_step1_instruction">"කරණාකර ඔබගේ භාෂාව සහ ආදාන සැකසීම් තුළ \"<xliff:g id="APPLICATION_NAME">%s</xliff:g>\" පරීක්ෂා කරන්න. මෙය ඔබගේ උපාංගය මත එයට ධාවනය වීමට අනුමැතිය දෙනු ඇත."</string> <string name="setup_step1_instruction">"කරණාකර ඔබගේ භාෂාව සහ ආදාන සැකසීම් තුළ \"<xliff:g id="APPLICATION_NAME">%s</xliff:g>\" පරීක්ෂා කරන්න. මෙය ඔබගේ උපාංගය මත එයට ධාවනය වීමට අනුමැතිය දෙනු ඇත."</string>
<string name="setup_step1_finished_instruction">"<xliff:g id="APPLICATION_NAME">%s</xliff:g> දැනටමත් ඔබගේ භාෂාව සහ ආදාන සැකසීම් තුළ සබල කර ඇත, එම නිසා මෙම පියවර නිමයි. ඊළඟ එක වෙතට!"</string> <string name="setup_step1_finished_instruction">"<xliff:g id="APPLICATION_NAME">%s</xliff:g> දැනටමත් ඔබගේ භාෂාව සහ ආදාන සැකසීම් තුළ සබල කර ඇත, එම නිසා මෙම පියවර නිමයි. ඊළඟ එක වෙතට!"</string>
<string name="setup_step1_action">"සැකසීම් තුළ සබල කරන්න"</string> <string name="setup_step1_action">"සැකසීම් තුළ සබල කරන්න"</string>
<string name="setup_step2_title">"<xliff:g id="APPLICATION_NAME">%s</xliff:g> වෙත මාරුවන්න"</string> <string name="setup_step2_title"><xliff:g id="APPLICATION_NAME">%s</xliff:g> වෙත මාරුවන්න\"</string>
<string name="setup_step2_instruction">"ඊළඟට, ඔබගේ සක්‍රිය පෙළ-ආදාන ක්‍රමය ලෙස \"<xliff:g id="APPLICATION_NAME">%s</xliff:g>\" තෝරන්න."</string> <string name="setup_step2_instruction">"ඊළඟට, ඔබගේ සක්‍රිය පෙළ-ආදාන ක්‍රමය ලෙස \"<xliff:g id="APPLICATION_NAME">%s</xliff:g>\" තෝරන්න."</string>
<string name="setup_step2_action">"ආදාන ක්‍රම මාරු කරන්න"</string> <string name="setup_step2_action">"ආදාන ක්‍රම මාරු කරන්න"</string>
<string name="setup_step3_title">"සුබපැතුම්, ඔබ සියල්ල පිහිටුවා ඇත!"</string> <string name="setup_step3_title">"සුබපැතුම්, ඔබ සියල්ල පිහිටුවා ඇත!"</string>

View file

@ -1,10 +1,9 @@
<?xml version="1.0" encoding="UTF-8"?> <?xml version="1.0" encoding="utf-8"?>
<!-- <!--
Copyright (C) 2008 The Android Open Source Project Copyright (C) 2008 The Android Open Source Project
modified modified
SPDX-License-Identifier: Apache-2.0 AND GPL-3.0-only SPDX-License-Identifier: Apache-2.0 AND GPL-3.0-only
--> --><resources xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
<resources xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
<string name="use_contacts_dict">"தொடர்பு பெயர்களை ஆய்வுசெய்"</string> <string name="use_contacts_dict">"தொடர்பு பெயர்களை ஆய்வுசெய்"</string>
<string name="vibrate_on_keypress">"விசையழுத்தின்போது அதிர்வுரு"</string> <string name="vibrate_on_keypress">"விசையழுத்தின்போது அதிர்வுரு"</string>
<string name="sound_on_keypress">"விசையழுத்தத்தின்போது ஒலியெழுப்பு"</string> <string name="sound_on_keypress">"விசையழுத்தத்தின்போது ஒலியெழுப்பு"</string>
@ -76,16 +75,16 @@
<string name="prefs_enable_emoji_alt_physical_key">"கைமுறை விசைப்பலகைக்கான ஈமோஜி"</string> <string name="prefs_enable_emoji_alt_physical_key">"கைமுறை விசைப்பலகைக்கான ஈமோஜி"</string>
<string name="prefs_enable_emoji_alt_physical_key_summary">"ஈமோஜி பலகத்தைக் காட்டும் கைமுறை Alt விசை"</string> <string name="prefs_enable_emoji_alt_physical_key_summary">"ஈமோஜி பலகத்தைக் காட்டும் கைமுறை Alt விசை"</string>
<string name="button_default">"இயல்புநிலை"</string> <string name="button_default">"இயல்புநிலை"</string>
<string name="setup_welcome_title">"<xliff:g id="APPLICATION_NAME">%s</xliff:g> பயன்பாட்டிற்கு வரவேற்கிறோம்"</string> <string name="setup_welcome_title"><xliff:g id="APPLICATION_NAME">%s</xliff:g> பயன்பாட்டிற்கு வரவேற்கிறோம்\"</string>
<string name="setup_welcome_additional_description">"ஸ்வைப் உள்ளீடு மூலம்"</string> <string name="setup_welcome_additional_description">"ஸ்வைப் உள்ளீடு மூலம்"</string>
<string name="setup_start_action">"தொடங்குக"</string> <string name="setup_start_action">"தொடங்குக"</string>
<string name="setup_next_action">"அடுத்த கட்டம்"</string> <string name="setup_next_action">"அடுத்த கட்டம்"</string>
<string name="setup_steps_title">"<xliff:g id="APPLICATION_NAME">%s</xliff:g> ஆப்ஸை அமைக்கிறது"</string> <string name="setup_steps_title"><xliff:g id="APPLICATION_NAME">%s</xliff:g> ஆப்ஸை அமைக்கிறது\"</string>
<string name="setup_step1_title">"<xliff:g id="APPLICATION_NAME">%s</xliff:g> ஆப்ஸை இயக்கவும்"</string> <string name="setup_step1_title"><xliff:g id="APPLICATION_NAME">%s</xliff:g> ஆப்ஸை இயக்கவும்\"</string>
<string name="setup_step1_instruction">"மொழி &amp; உள்ளீட்டு அமைப்புகளில் \"<xliff:g id="APPLICATION_NAME">%s</xliff:g>\" ஆப்ஸைத் தேர்வு செய்யவும். இதனால், சாதனத்தில் ஆப்ஸை இயக்கலாம்."</string> <string name="setup_step1_instruction">"மொழி &amp; உள்ளீட்டு அமைப்புகளில் \"<xliff:g id="APPLICATION_NAME">%s</xliff:g>\" ஆப்ஸைத் தேர்வு செய்யவும். இதனால், சாதனத்தில் ஆப்ஸை இயக்கலாம்."</string>
<string name="setup_step1_finished_instruction">"மொழி &amp; உள்ளீட்டு அமைப்புகளில் <xliff:g id="APPLICATION_NAME">%s</xliff:g> ஏற்கனவே இயக்கப்பட்டுள்ளதால் இப்படிமுறை முடிந்தது. அடுத்த படிமுறைக்குச் செல்லவும்!"</string> <string name="setup_step1_finished_instruction">"மொழி &amp; உள்ளீட்டு அமைப்புகளில் <xliff:g id="APPLICATION_NAME">%s</xliff:g> ஏற்கனவே இயக்கப்பட்டுள்ளதால் இப்படிமுறை முடிந்தது. அடுத்த படிமுறைக்குச் செல்லவும்!"</string>
<string name="setup_step1_action">"அமைப்புகளில் இயக்கு"</string> <string name="setup_step1_action">"அமைப்புகளில் இயக்கு"</string>
<string name="setup_step2_title">"<xliff:g id="APPLICATION_NAME">%s</xliff:g> க்கு மாறவும்"</string> <string name="setup_step2_title"><xliff:g id="APPLICATION_NAME">%s</xliff:g> க்கு மாறவும்\"</string>
<string name="setup_step2_instruction">"அடுத்து, உங்கள் செயலில் உள்ள உரை உள்ளீட்டு முறையாக \"<xliff:g id="APPLICATION_NAME">%s</xliff:g>\" பயன்பாட்டைத் தேர்ந்தெடுக்கவும்."</string> <string name="setup_step2_instruction">"அடுத்து, உங்கள் செயலில் உள்ள உரை உள்ளீட்டு முறையாக \"<xliff:g id="APPLICATION_NAME">%s</xliff:g>\" பயன்பாட்டைத் தேர்ந்தெடுக்கவும்."</string>
<string name="setup_step2_action">"உள்ளீட்டு முறைகளை மாற்றவும்"</string> <string name="setup_step2_action">"உள்ளீட்டு முறைகளை மாற்றவும்"</string>
<string name="setup_step3_title">"வாழ்த்துகள், தயாராகிவிட்டீர்கள்!"</string> <string name="setup_step3_title">"வாழ்த்துகள், தயாராகிவிட்டீர்கள்!"</string>

View file

@ -3,8 +3,7 @@
Copyright (C) 2008 The Android Open Source Project Copyright (C) 2008 The Android Open Source Project
modified modified
SPDX-License-Identifier: Apache-2.0 AND GPL-3.0-only SPDX-License-Identifier: Apache-2.0 AND GPL-3.0-only
--> --><resources xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
<resources xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
<string name="use_contacts_dict">"పరిచయ పేర్లను వెతకండి"</string> <string name="use_contacts_dict">"పరిచయ పేర్లను వెతకండి"</string>
<string name="vibrate_on_keypress">"కీని నొక్కినప్పుడు వైబ్రేట్"</string> <string name="vibrate_on_keypress">"కీని నొక్కినప్పుడు వైబ్రేట్"</string>
<string name="sound_on_keypress">"కీని నొక్కినప్పుడు ధ్వని"</string> <string name="sound_on_keypress">"కీని నొక్కినప్పుడు ధ్వని"</string>
@ -76,16 +75,16 @@
<string name="prefs_enable_emoji_alt_physical_key">"భౌతిక కీబోర్డ్ కోసం ఎమోజి"</string> <string name="prefs_enable_emoji_alt_physical_key">"భౌతిక కీబోర్డ్ కోసం ఎమోజి"</string>
<string name="prefs_enable_emoji_alt_physical_key_summary">"భౌతిక Alt కీ ఎమోజి ఫలకాన్ని చూపుతుంది"</string> <string name="prefs_enable_emoji_alt_physical_key_summary">"భౌతిక Alt కీ ఎమోజి ఫలకాన్ని చూపుతుంది"</string>
<string name="button_default">"డిఫాల్ట్"</string> <string name="button_default">"డిఫాల్ట్"</string>
<string name="setup_welcome_title">"<xliff:g id="APPLICATION_NAME">%s</xliff:g>కు స్వాగతం"</string> <string name="setup_welcome_title"><xliff:g id="APPLICATION_NAME">%s</xliff:g>కు స్వాగతం\"</string>
<string name="setup_welcome_additional_description">"సంజ్ఞ టైపింగ్‌తో"</string> <string name="setup_welcome_additional_description">"సంజ్ఞ టైపింగ్‌తో"</string>
<string name="setup_start_action">"ప్రారంభించండి"</string> <string name="setup_start_action">"ప్రారంభించండి"</string>
<string name="setup_next_action">"తర్వాత దశ"</string> <string name="setup_next_action">"తర్వాత దశ"</string>
<string name="setup_steps_title">"<xliff:g id="APPLICATION_NAME">%s</xliff:g>ని సెటప్ చేయడం"</string> <string name="setup_steps_title"><xliff:g id="APPLICATION_NAME">%s</xliff:g>ని సెటప్ చేయడం\"</string>
<string name="setup_step1_title">"<xliff:g id="APPLICATION_NAME">%s</xliff:g>ని ప్రారంభించండి"</string> <string name="setup_step1_title"><xliff:g id="APPLICATION_NAME">%s</xliff:g>ని ప్రారంభించండి\"</string>
<string name="setup_step1_instruction">"దయచేసి మీ భాషలు &amp; ఇన్‌పుట్ సెట్టింగ్‌ల్లో \"<xliff:g id="APPLICATION_NAME">%s</xliff:g>\" తనిఖీ చేయండి. ఇది మీ పరికరంలో అమలు కావడానికి దీన్ని ప్రామాణీకరిస్తుంది."</string> <string name="setup_step1_instruction">"దయచేసి మీ భాషలు &amp; ఇన్‌పుట్ సెట్టింగ్‌ల్లో \"<xliff:g id="APPLICATION_NAME">%s</xliff:g>\" తనిఖీ చేయండి. ఇది మీ పరికరంలో అమలు కావడానికి దీన్ని ప్రామాణీకరిస్తుంది."</string>
<string name="setup_step1_finished_instruction">"<xliff:g id="APPLICATION_NAME">%s</xliff:g> ఇప్పటికే మీ భాషలు &amp; ఇన్‌పుట్ సెట్టింగ్‌ల్లో ప్రారంభించబడింది, కనుక ఈ దశ పూర్తయింది. తర్వాత దశకు వెళ్లండి!"</string> <string name="setup_step1_finished_instruction">"<xliff:g id="APPLICATION_NAME">%s</xliff:g> ఇప్పటికే మీ భాషలు &amp; ఇన్‌పుట్ సెట్టింగ్‌ల్లో ప్రారంభించబడింది, కనుక ఈ దశ పూర్తయింది. తర్వాత దశకు వెళ్లండి!"</string>
<string name="setup_step1_action">"సెట్టింగ్‌ల్లో ప్రారంభించండి"</string> <string name="setup_step1_action">"సెట్టింగ్‌ల్లో ప్రారంభించండి"</string>
<string name="setup_step2_title">"<xliff:g id="APPLICATION_NAME">%s</xliff:g>కు మారండి"</string> <string name="setup_step2_title"><xliff:g id="APPLICATION_NAME">%s</xliff:g>కు మారండి\"</string>
<string name="setup_step2_instruction">"తర్వాత, \"<xliff:g id="APPLICATION_NAME">%s</xliff:g>\"ని మీ సక్రియ వచన-ఇన్‌పుట్ పద్ధతిగా ఎంచుకోండి."</string> <string name="setup_step2_instruction">"తర్వాత, \"<xliff:g id="APPLICATION_NAME">%s</xliff:g>\"ని మీ సక్రియ వచన-ఇన్‌పుట్ పద్ధతిగా ఎంచుకోండి."</string>
<string name="setup_step2_action">"ఇన్‌పుట్ పద్ధతులను మార్చు"</string> <string name="setup_step2_action">"ఇన్‌పుట్ పద్ధతులను మార్చు"</string>
<string name="setup_step3_title">"అభినందనలు, మీరు అంతా పూర్తి చేసారు!"</string> <string name="setup_step3_title">"అభినందనలు, మీరు అంతా పూర్తి చేసారు!"</string>

View file

@ -282,42 +282,7 @@
<string name="select_user_colors_summary">Metin ve arka planlar için renkleri seç</string> <string name="select_user_colors_summary">Metin ve arka planlar için renkleri seç</string>
<string name="select_color_accent">Vurgu</string> <string name="select_color_accent">Vurgu</string>
<string name="hidden_features_title">Gizli özelliklerin açıklaması</string> <string name="hidden_features_title">Gizli özelliklerin açıklaması</string>
<string name="hidden_features_message">► Sabitlenmiş araç çubuğu tuşlarına uzun basmak ek işlevsellik sağlar: &lt;br&gt; <string name="hidden_features_message">► Sabitlenmiş araç çubuğu tuşlarına uzun basmak ek işlevsellik sağlar: &lt;br&gt; \n\t• panoya kopyala &amp;#65515; yapıştır &lt;br&gt; \n\t• sola/sağa hareket et &amp;#65515; kelime sola/sağa &lt;br&gt; \n\t• yukarı/aşağı hareket et &amp;#65515; sayfa yukarı/aşağı &lt;br&gt; \n\t• kelime sola/sağa &amp;#65515; satır başı/sonu &lt;br&gt; \n\t• sayfa yukarı/aşağı &amp;#65515; sayfa başı/sonu &lt;br&gt; \n\t• kopyala &amp;#65515; kes &lt;br&gt; \n\t• kelime seç &amp;#8596; tümünü seç &lt;br&gt; \n\t• geri al &amp;#8596; yinele &lt;br&gt; &lt;br&gt; \n► Öneri şeridi araç çubuğundaki tuşlara uzun basmak, onları öneri şeridine sabitler. &lt;br&gt; &lt;br&gt; \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: &lt;br&gt; \n\t• Emoji Görünümü ve Dil Değiştir, ilgili tuşu etkinleştirdiysen kaybolur; &lt;br&gt; \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). &lt;br&gt; &lt;br&gt; \n► Gizli mod etkinleştirildiğinde, hiçbir kelime öğrenilmeyecek ve son eklenen emojilere yeni bir emoji eklenmeyecektir. &lt;br&gt; &lt;br&gt; \n► Gizli mod simgesine basarak araç çubuğuna erişebilirsin. &lt;br&gt; &lt;br&gt; \n► Kaydırmalı tuş girişi: Shift tuşundan başka bir tuşa kaydırarak tek bir büyük harf yazabilirsin: &lt;br&gt; \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. &lt;br&gt; &lt;br&gt; \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. &lt;br&gt; &lt;br&gt; \n► Öneri şeridindeki bir öneriye uzun basarak daha fazla öneriyi ve bu öneriyi kaldırmak için bir silme düğmesini gösterir. &lt;br&gt; &lt;br&gt; \n► Bir öneriye yukarı kaydırarak daha fazla öneriyi aç ve seçmek için öneri üzerinde bırak. &lt;br&gt; &lt;br&gt; \n► Pano geçmişindeki bir girdiye uzun basarak onu sabitleyebilirsin (sabitlediğin sürece panoda kalır). &lt;br&gt; &lt;br&gt; \n► Pano görünümünde bir girdiyi kaldırmak için sola kaydır (sabitlediğin sürece hariç). &lt;br&gt; &lt;br&gt; \n► Metni seç ve büyük/küçük harflerini değiştirmek için Shift tuşuna bas. &lt;br&gt; &lt;br&gt; \n► Sözlükleri bir dosya gezgini ile açarak ekleyebilirsin: &lt;br&gt; \n\t• Bu yalnızca &lt;i&gt;content-uris&lt;/i&gt; ile çalışır, &lt;i&gt;file-uris&lt;/i&gt; ile çalışmaz, yani bazı dosya gezginlerinde çalışmayabilir. &lt;br&gt; &lt;br&gt; \n► Kök erişimiyle manuel yedekleme yapan kullanıcılar için: &lt;br&gt; \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; &lt;br&gt; \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. &lt;br&gt; &lt;br&gt; \n&lt;i&gt;&lt;b&gt;Hata ayıklama modu / hata ayıklama APK\'sı&lt;/b&gt;&lt;/i&gt; &lt;br&gt; &lt;br&gt; \n► Bir öneriye uzun basarak kaynak sözlüğü göster. &lt;br&gt; &lt;br&gt; \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. &lt;br&gt; \n\t• Yayın APK\'sı için, &lt;i&gt;Hakkında&lt;/i&gt; kısmındaki sürüme birkaç kez dokunman gerekir, ardından Gelişmiş Tercihler içinde hata ayıklama ayarlarını bulabilirsin. &lt;br&gt; \n\t• &lt;i&gt;Öneri bilgilerini göster&lt;/i&gt; etkinleştirildiğinde, önerilerin üzerinde bazı iç puan ve kaynak sözlük gösteren küçük sayılar olacaktır. &lt;br&gt; &lt;br&gt; \n► Bir uygulama çökmesi durumunda, Ayarları açtığında çökme günlüklerini isteyip istemediğin sorulacaktır. &lt;br&gt; &lt;br&gt; \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. &lt;br&gt; &lt;br&gt; \n► Önerilerin üzerinde bazı iç puan ve kaynak sözlük gösteren küçük sayılar olacaktır (devre dışı bırakılabilir).</string>
\n\t• panoya kopyala &amp;#65515; yapıştır &lt;br&gt;
\n\t• sola/sağa hareket et &amp;#65515; kelime sola/sağa &lt;br&gt;
\n\t• yukarı/aşağı hareket et &amp;#65515; sayfa yukarı/aşağı &lt;br&gt;
\n\t• kelime sola/sağa &amp;#65515; satır başı/sonu &lt;br&gt;
\n\t• sayfa yukarı/aşağı &amp;#65515; sayfa başı/sonu &lt;br&gt;
\n\t• kopyala &amp;#65515; kes &lt;br&gt;
\n\t• kelime seç &amp;#8596; tümünü seç &lt;br&gt;
\n\t• geri al &amp;#8596; yinele &lt;br&gt; &lt;br&gt;
\n► Öneri şeridi araç çubuğundaki tuşlara uzun basmak, onları öneri şeridine sabitler. &lt;br&gt; &lt;br&gt;
\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: &lt;br&gt;
\n\t• Emoji Görünümü ve Dil Değiştir, ilgili tuşu etkinleştirdiysen kaybolur; &lt;br&gt;
\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). &lt;br&gt; &lt;br&gt;
\n► Gizli mod etkinleştirildiğinde, hiçbir kelime öğrenilmeyecek ve son eklenen emojilere yeni bir emoji eklenmeyecektir. &lt;br&gt; &lt;br&gt;
\n► Gizli mod simgesine basarak araç çubuğuna erişebilirsin. &lt;br&gt; &lt;br&gt;
\n► Kaydırmalı tuş girişi: Shift tuşundan başka bir tuşa kaydırarak tek bir büyük harf yazabilirsin: &lt;br&gt;
\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. &lt;br&gt; &lt;br&gt;
\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. &lt;br&gt; &lt;br&gt;
\n► Öneri şeridindeki bir öneriye uzun basarak daha fazla öneriyi ve bu öneriyi kaldırmak için bir silme düğmesini gösterir. &lt;br&gt; &lt;br&gt;
\n► Bir öneriye yukarı kaydırarak daha fazla öneriyi aç ve seçmek için öneri üzerinde bırak. &lt;br&gt; &lt;br&gt;
\n► Pano geçmişindeki bir girdiye uzun basarak onu sabitleyebilirsin (sabitlediğin sürece panoda kalır). &lt;br&gt; &lt;br&gt;
\n► Pano görünümünde bir girdiyi kaldırmak için sola kaydır (sabitlediğin sürece hariç). &lt;br&gt; &lt;br&gt;
\n► Metni seç ve büyük/küçük harflerini değiştirmek için Shift tuşuna bas. &lt;br&gt; &lt;br&gt;
\n► Sözlükleri bir dosya gezgini ile açarak ekleyebilirsin: &lt;br&gt;
\n\t• Bu yalnızca &lt;i&gt;content-uris&lt;/i&gt; ile çalışır, &lt;i&gt;file-uris&lt;/i&gt; ile çalışmaz, yani bazı dosya gezginlerinde çalışmayabilir. &lt;br&gt; &lt;br&gt;
\n► Kök erişimiyle manuel yedekleme yapan kullanıcılar için: &lt;br&gt;
\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; &lt;br&gt;
\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. &lt;br&gt; &lt;br&gt;
\n&lt;i&gt;&lt;b&gt;Hata ayıklama modu / hata ayıklama APK\'sı&lt;/b&gt;&lt;/i&gt; &lt;br&gt; &lt;br&gt;
\n► Bir öneriye uzun basarak kaynak sözlüğü göster. &lt;br&gt; &lt;br&gt;
\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. &lt;br&gt;
\n\t• Yayın APK\'sı için, &lt;i&gt;Hakkında&lt;/i&gt; kısmındaki sürüme birkaç kez dokunman gerekir, ardından Gelişmiş Tercihler içinde hata ayıklama ayarlarını bulabilirsin. &lt;br&gt;
\n\t• &lt;i&gt;Öneri bilgilerini göster&lt;/i&gt; etkinleştirildiğinde, önerilerin üzerinde bazı iç puan ve kaynak sözlük gösteren küçük sayılar olacaktır. &lt;br&gt; &lt;br&gt;
\n► Bir uygulama çökmesi durumunda, Ayarları açtığında çökme günlüklerini isteyip istemediğin sorulacaktır. &lt;br&gt; &lt;br&gt;
\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. &lt;br&gt; &lt;br&gt;
\n► Önerilerin üzerinde bazı iç puan ve kaynak sözlük gösteren küçük sayılar olacaktır (devre dışı bırakılabilir).</string>
<string name="show_vertical_space_swipe">Dikey boşluk çubuğu kaydırma hareketi</string> <string name="show_vertical_space_swipe">Dikey boşluk çubuğu kaydırma hareketi</string>
<string name="action_none">Yok</string> <string name="action_none">Yok</string>
<string name="space_swipe_move_cursor_entry">İmleci taşı</string> <string name="space_swipe_move_cursor_entry">İmleci taşı</string>

View file

@ -1,10 +1,9 @@
<?xml version="1.0" encoding="UTF-8"?> <?xml version="1.0" encoding="utf-8"?>
<!-- <!--
Copyright (C) 2008 The Android Open Source Project Copyright (C) 2008 The Android Open Source Project
modified modified
SPDX-License-Identifier: Apache-2.0 AND GPL-3.0-only SPDX-License-Identifier: Apache-2.0 AND GPL-3.0-only
--> --><resources xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
<resources xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
<string name="use_contacts_dict">"رابطوں میں سے نام ڈھونڈیں"</string> <string name="use_contacts_dict">"رابطوں میں سے نام ڈھونڈیں"</string>
<string name="vibrate_on_keypress">"کلید دبانے پر وائبریٹ کریں"</string> <string name="vibrate_on_keypress">"کلید دبانے پر وائبریٹ کریں"</string>
<string name="sound_on_keypress">"کلید دبانے پر آواز"</string> <string name="sound_on_keypress">"کلید دبانے پر آواز"</string>
@ -76,16 +75,16 @@
<string name="prefs_enable_emoji_alt_physical_key">"‏فزیکل کی بورڈ کیلئے Emoji"</string> <string name="prefs_enable_emoji_alt_physical_key">"‏فزیکل کی بورڈ کیلئے Emoji"</string>
<string name="prefs_enable_emoji_alt_physical_key_summary">"‏فزیکل Alt کی کے ذریعے emoji پیلٹ نظر آتا ہے"</string> <string name="prefs_enable_emoji_alt_physical_key_summary">"‏فزیکل Alt کی کے ذریعے emoji پیلٹ نظر آتا ہے"</string>
<string name="button_default">"ڈیفالٹ"</string> <string name="button_default">"ڈیفالٹ"</string>
<string name="setup_welcome_title">"<xliff:g id="APPLICATION_NAME">%s</xliff:g> میں خوش آمدید"</string> <string name="setup_welcome_title"><xliff:g id="APPLICATION_NAME">%s</xliff:g> میں خوش آمدید\"</string>
<string name="setup_welcome_additional_description">"اشارہ ٹائپنگ کے ساتھ"</string> <string name="setup_welcome_additional_description">"اشارہ ٹائپنگ کے ساتھ"</string>
<string name="setup_start_action">"شروع کریں"</string> <string name="setup_start_action">"شروع کریں"</string>
<string name="setup_next_action">"اگلا مرحلہ"</string> <string name="setup_next_action">"اگلا مرحلہ"</string>
<string name="setup_steps_title">"<xliff:g id="APPLICATION_NAME">%s</xliff:g> ترتیب دینا"</string> <string name="setup_steps_title"><xliff:g id="APPLICATION_NAME">%s</xliff:g> ترتیب دینا\"</string>
<string name="setup_step1_title">"<xliff:g id="APPLICATION_NAME">%s</xliff:g> کو فعال کریں"</string> <string name="setup_step1_title"><xliff:g id="APPLICATION_NAME">%s</xliff:g> کو فعال کریں\"</string>
<string name="setup_step1_instruction">"براہ کرم \"<xliff:g id="APPLICATION_NAME">%s</xliff:g>\" کو اپنی زبانوں اور ان پٹ ترتیبات میں چیک کریں۔ اس سے اس کو آپ کے آلہ پر چلنے کی اجازت مل جائے گی۔"</string> <string name="setup_step1_instruction">"براہ کرم \"<xliff:g id="APPLICATION_NAME">%s</xliff:g>\" کو اپنی زبانوں اور ان پٹ ترتیبات میں چیک کریں۔ اس سے اس کو آپ کے آلہ پر چلنے کی اجازت مل جائے گی۔"</string>
<string name="setup_step1_finished_instruction">"<xliff:g id="APPLICATION_NAME">%s</xliff:g> پہلے ہی آپ کی زبانوں ‎اور‎ ان پٹ ترتیبات میں فعال ہے، لہذا یہ مرحلہ مکمل ہو گیا ہے۔ اگلے پر چلتے ہیں!"</string> <string name="setup_step1_finished_instruction">"<xliff:g id="APPLICATION_NAME">%s</xliff:g> پہلے ہی آپ کی زبانوں ‎اور‎ ان پٹ ترتیبات میں فعال ہے، لہذا یہ مرحلہ مکمل ہو گیا ہے۔ اگلے پر چلتے ہیں!"</string>
<string name="setup_step1_action">"ترتیبات میں فعال کریں"</string> <string name="setup_step1_action">"ترتیبات میں فعال کریں"</string>
<string name="setup_step2_title">"<xliff:g id="APPLICATION_NAME">%s</xliff:g> پر سوئچ کریں"</string> <string name="setup_step2_title"><xliff:g id="APPLICATION_NAME">%s</xliff:g> پر سوئچ کریں\"</string>
<string name="setup_step2_instruction">"آگے، \"<xliff:g id="APPLICATION_NAME">%s</xliff:g>\" کو اپنے فعال متنی اندراج کے طریقہ کے بطور منتخب کریں۔"</string> <string name="setup_step2_instruction">"آگے، \"<xliff:g id="APPLICATION_NAME">%s</xliff:g>\" کو اپنے فعال متنی اندراج کے طریقہ کے بطور منتخب کریں۔"</string>
<string name="setup_step2_action">"اندراج کے طریقے سوئچ کریں"</string> <string name="setup_step2_action">"اندراج کے طریقے سوئچ کریں"</string>
<string name="setup_step3_title">"مبارک ہو، آپ بالکل تیار ہیں!"</string> <string name="setup_step3_title">"مبارک ہو، آپ بالکل تیار ہیں!"</string>

View file

@ -0,0 +1,17 @@
<?xml version="1.0" encoding="utf-8"?>
<!--
Copyright (C) 2014 The Android Open Source Project
modified
SPDX-License-Identifier: Apache-2.0 AND GPL-3.0-only
-->
<resources xmlns:android="http://schemas.android.com/apk/res/android">
<style name="AlertDialogTheme" parent="@android:style/Theme.Material.Dialog.Alert">
<item name="android:colorAccent">@color/accent</item>
<item name="android:background">@color/action_bar_color</item>
<item name="android:textColor">@color/foreground</item>
<item name="android:textColorAlertDialogListItem">@color/foreground</item>
<item name="android:colorForeground">@color/foreground</item>
<item name="android:dialogCornerRadius">10dp</item>
</style>
</resources>

View file

@ -5,12 +5,11 @@
<resources xmlns:android="http://schemas.android.com/apk/res/android"> <resources xmlns:android="http://schemas.android.com/apk/res/android">
<style name="platformActivityTheme" parent="Theme.AppCompat.DayNight.NoActionBar"> <style name="platformActivityTheme" parent="@android:style/Theme.Material.NoActionBar">
<!-- Some items are duplicated from the original platform-theme file to ensure that the <!-- Some items are duplicated from the original platform-theme file to ensure that the
"android/system_accent_*" or "android/system_neutral_*" colors are used. --> "android/system_accent_*" or "android/system_neutral_*" colors are used. -->
<item name="android:colorAccent">@color/accent</item> <item name="android:colorAccent">@color/accent</item>
<item name="colorAccent">@color/accent</item>
<item name="android:statusBarColor">@color/action_bar_color</item> <item name="android:statusBarColor">@color/action_bar_color</item>
<item name="android:navigationBarColor">@color/setup_background</item> <item name="android:navigationBarColor">@color/setup_background</item>
@ -19,7 +18,6 @@
<item name="android:windowBackground">@color/setup_background</item> <item name="android:windowBackground">@color/setup_background</item>
<item name="android:alertDialogTheme">@style/AlertDialogTheme</item> <item name="android:alertDialogTheme">@style/AlertDialogTheme</item>
<item name="alertDialogTheme">@style/AlertDialogTheme</item>
<item name="android:buttonCornerRadius">50dp</item> <item name="android:buttonCornerRadius">50dp</item>
@ -27,11 +25,9 @@
<item name="android:itemBackground">@color/drop_down_menu_background</item> <item name="android:itemBackground">@color/drop_down_menu_background</item>
</style> </style>
<style name="AlertDialogTheme" parent="ThemeOverlay.AppCompat.Dialog.Alert"> <style name="AlertDialogTheme" parent="@android:style/Theme.Material.Dialog.Alert">
<item name="android:colorBackgroundFloating">@color/dialog_background</item> <item name="android:colorBackgroundFloating">@color/dialog_background</item>
<item name="colorBackgroundFloating">@color/dialog_background</item>
<item name="android:dialogCornerRadius">28dp</item> <item name="android:dialogCornerRadius">28dp</item>
<item name="dialogCornerRadius">28dp</item>
</style> </style>
</resources> </resources>

View file

@ -374,42 +374,7 @@
<string name="var_toolbar_direction">可变工具栏方向</string> <string name="var_toolbar_direction">可变工具栏方向</string>
<string name="var_toolbar_direction_summary">选择从右到左的键盘子类型时反转方向</string> <string name="var_toolbar_direction_summary">选择从右到左的键盘子类型时反转方向</string>
<string name="auto_hide_toolbar">自动隐藏工具栏</string> <string name="auto_hide_toolbar">自动隐藏工具栏</string>
<string name="hidden_features_message">► 长按固定的工具栏键会产生其他功能:&lt;br&gt; <string name="hidden_features_message">► 长按固定的工具栏键会产生其他功能:&lt;br&gt;\n\t• 剪贴板 &amp;#65515; 粘贴 &lt;br&gt;\n\t• 向左/向右移动 &amp;#65515; 单词向左/向右 &lt;br&gt;\n\t• 向上/向下移动 &amp;#65515; 向上/向下翻页 &lt;br&gt;\n\t• 单词向左/向右 &amp;#65515; 行起点/终点 &lt;br&gt;\n\t• 向上/向下翻页 &amp;#65515; 页面开始/结束 &lt;br&gt;\n\t• 复制 &amp;#65515; 剪切 &lt;br&gt;\n\t• 选择单词 &amp;#8596; 全选 &lt;br&gt;\n\t• 撤销 &amp;#8596; 恢复 &lt;br&gt; &lt;br&gt;\n► 长按建议条工具栏中的键将它们固定到建议条上。 &lt;br&gt; &lt;br&gt;\n► 长按逗号键可访问剪贴板视图、表情符号视图、单手模式、设置或切换语言:&lt;br&gt;\n\t• 如果启用了相应的键,表情符号视图和语言切换将消失;&lt;br&gt;\n\t• 对于某些布局它不是逗号键而是同一位置的键例如对于德沃夏克布局是“q”&lt;br&gt; &lt;br&gt;\n► 启用隐身模式后,将不会学习任何单词,也不会在最近的表情中添加任何表情符号。&lt;br&gt; &lt;br&gt;\n► 按隐身图标访问工具栏。&lt;br&gt; &lt;br&gt;\n► 滑动键输入:从 Shift 键滑动到另一个键,输入单个大写键:&lt;br&gt;\n\t• 这也适用于“?123”键从符号键盘输入单个符号以及相关键。&lt;br&gt; &lt;br&gt;\n► 按住 Shift 或符号键,按一个或多个键,然后松开 Shift 或符号键以返回上一个键盘。&lt;br&gt; &lt;br&gt;\n► 长按建议栏中的建议可显示更多建议,长按删除按钮可移除此建议。&lt;br&gt; &lt;br&gt;\n► 从建议向上滑动以打开更多建议,然后松开建议以选择它。&lt;br&gt; &lt;br&gt;\n► 长按剪贴板历史中的条目将其固定(将其保留在剪贴板中,直到取消固定)。&lt;br&gt; &lt;br&gt;\n► 在剪贴板视图中向左滑动以移除条目(被固定时除外)&lt;br&gt; &lt;br&gt;\n► 选择文本并按 Shift 键在大写、小写和大写单词之间切换。&lt;br&gt; &lt;br&gt;\n► 您可以通过在文件资源管理器中打开词典来添加词典:&lt;br&gt;\n\t• 这只适用于&lt;i&gt;内容 URI&lt;/i&gt;,不适用于&lt;i&gt;文件 URI&lt;/i&gt;,这意味着它可能不适用于某些文件浏览器。&lt;br&gt; &lt;br&gt;\n► 对于使用 Root 权限进行手动备份的用户:&lt;br&gt;\n\t• 从 Android 7 开始,共享首选项文件不在默认位置,因为应用正在使用 %s。这是必要的这样可以在设备解锁之前读取设置例如在启动时&lt;br&gt;\n\t• 该文件位于 /data/user_de/0/package_id/shared_prefs/ 中,但这可能取决于设备和 Android 版本。&lt;br&gt; &lt;br&gt;\n&lt;i&gt;&lt;b&gt;调试模式/调试 APK&lt;/b&gt;&lt;/i&gt; &lt;br&gt; &lt;br&gt;\n► 长按建议显示源词典。&lt;br&gt; &lt;br&gt;\n► 使用调试 APK 时,您可以在高级首选项中找到调试设置,但除了将词典转储到日志中外,其用处有限。&lt;br&gt;\n\t• 对于发布 APK您需要多次点击&lt;i&gt;关于&lt;/i&gt;中的版本,然后您可以在&lt;i&gt;高级首选项&lt;/i&gt;找到调试设置。&lt;br&gt;\n\t• 当启用&lt;i&gt;显示建议信息&lt;/i&gt;时,建议顶部会有一些小数字,显示一些内部分数和源词典。&lt;br&gt; &lt;br&gt;\n► 如果应用崩溃,打开“设置”时,系统会提示您是否需要崩溃日志。&lt;br&gt; &lt;br&gt;\n► 使用多语言输入时,空格键将显示用于确定当前使用的语言的置信度值。&lt;br&gt; &lt;br&gt;\n► 建议顶部会有一些小数字,显示一些内部分数和源词典(可以禁用)。</string>
\n\t• 剪贴板 &amp;#65515; 粘贴 &lt;br&gt;
\n\t• 向左/向右移动 &amp;#65515; 单词向左/向右 &lt;br&gt;
\n\t• 向上/向下移动 &amp;#65515; 向上/向下翻页 &lt;br&gt;
\n\t• 单词向左/向右 &amp;#65515; 行起点/终点 &lt;br&gt;
\n\t• 向上/向下翻页 &amp;#65515; 页面开始/结束 &lt;br&gt;
\n\t• 复制 &amp;#65515; 剪切 &lt;br&gt;
\n\t• 选择单词 &amp;#8596; 全选 &lt;br&gt;
\n\t• 撤销 &amp;#8596; 恢复 &lt;br&gt; &lt;br&gt;
\n► 长按建议条工具栏中的键将它们固定到建议条上。 &lt;br&gt; &lt;br&gt;
\n► 长按逗号键可访问剪贴板视图、表情符号视图、单手模式、设置或切换语言:&lt;br&gt;
\n\t• 如果启用了相应的键,表情符号视图和语言切换将消失;&lt;br&gt;
\n\t• 对于某些布局,它不是逗号键,而是同一位置的键(例如,对于 Dvorak 布局是“q”&lt;br&gt; &lt;br&gt;
\n► 启用隐身模式后,将不会学习任何单词,也不会在最近的表情中添加任何表情符号。&lt;br&gt; &lt;br&gt;
\n► 按隐身图标访问工具栏。&lt;br&gt; &lt;br&gt;
\n► 滑动键输入:从 Shift 键滑动到另一个键,输入单个大写键:&lt;br&gt;
\n\t• 这也适用于“?123”键从符号键盘输入单个符号以及相关键。&lt;br&gt; &lt;br&gt;
\n► 按住 Shift 或符号键,按一个或多个键,然后松开 Shift 或符号键以返回上一个键盘。&lt;br&gt; &lt;br&gt;
\n► 长按建议栏中的建议可显示更多建议,长按删除按钮可移除此建议。&lt;br&gt; &lt;br&gt;
\n► 从建议向上滑动以打开更多建议,然后松开建议以选择它。&lt;br&gt; &lt;br&gt;
\n► 长按剪贴板历史中的条目将其固定(将其保留在剪贴板中,直到取消固定)。&lt;br&gt; &lt;br&gt;
\n► 在剪贴板视图中向左滑动以移除条目(被固定时除外)&lt;br&gt; &lt;br&gt;
\n► 选择文本并按 Shift 键在大写、小写和大写单词之间切换。&lt;br&gt; &lt;br&gt;
\n► 您可以通过在文件资源管理器中打开词典来添加词典:&lt;br&gt;
\n\t• 这只适用于&lt;i&gt;内容 URI&lt;/i&gt;,不适用于&lt;i&gt;文件 URI&lt;/i&gt;,这意味着它可能不适用于某些文件浏览器。&lt;br&gt; &lt;br&gt;
\n► 对于使用 Root 权限进行手动备份的用户:&lt;br&gt;
\n\t• 从 Android 7 开始,共享首选项文件不在默认位置,因为应用正在使用 %s。这是必要的这样可以在设备解锁之前读取设置例如在启动时&lt;br&gt;
\n\t• 该文件位于 /data/user_de/0/package_id/shared_prefs/ 中,但这可能取决于设备和 Android 版本。&lt;br&gt; &lt;br&gt;
\n&lt;i&gt;&lt;b&gt;调试模式/调试 APK&lt;/b&gt;&lt;/i&gt; &lt;br&gt; &lt;br&gt;
\n► 长按建议显示源词典。&lt;br&gt; &lt;br&gt;
\n► 使用调试 APK 时,您可以在高级首选项中找到调试设置,但除了将词典转储到日志中外,其用处有限。&lt;br&gt;
\n\t• 对于发布 APK您需要多次点击&lt;i&gt;关于&lt;/i&gt;中的版本,然后您可以在&lt;i&gt;高级首选项&lt;/i&gt;找到调试设置。&lt;br&gt;
\n\t• 当启用&lt;i&gt;显示建议信息&lt;/i&gt;时,建议顶部会有一些小数字,显示一些内部分数和源词典。&lt;br&gt; &lt;br&gt;
\n► 如果应用崩溃,打开“设置”时,系统会提示您是否需要崩溃日志。&lt;br&gt; &lt;br&gt;
\n► 使用多语言输入时,空格键将显示用于确定当前使用的语言的置信度值。&lt;br&gt; &lt;br&gt;
\n► 建议顶部会有一些小数字,显示一些内部分数和源词典(可以禁用)。</string>
<string name="icon_style">图标风格</string> <string name="icon_style">图标风格</string>
<string name="layout_number_row" tools:keep="@string/layout_number_row">数字行</string> <string name="layout_number_row" tools:keep="@string/layout_number_row">数字行</string>
<string name="prefs_space_bar_text">空格键上的自定义文本</string> <string name="prefs_space_bar_text">空格键上的自定义文本</string>
@ -466,4 +431,8 @@
<string name="discussion_section_link">讨论部分</string> <string name="discussion_section_link">讨论部分</string>
<string name="get_layouts_message">您可以在 %s 中查找和分享布局。</string> <string name="get_layouts_message">您可以在 %s 中查找和分享布局。</string>
<string name="get_colors_message">您可以在 %s 中查找和分享颜色。</string> <string name="get_colors_message">您可以在 %s 中查找和分享颜色。</string>
<string name="custom_subtype">自定义子类型</string>
<string name="subtype_baishakhi_bn_IN"><xliff:g id="LANGUAGE_NAME" example="Bengali">%s</xliff:g> (Baishakhi)</string>
<string name="show_tld_popup_keys_summary">输入 URL 和电子邮件地址时,用顶级域替换句点键弹出</string>
<string name="show_tld_popup_keys">显示顶级域弹出键</string>
</resources> </resources>

View file

@ -6,11 +6,21 @@
--> -->
<resources xmlns:android="http://schemas.android.com/apk/res/android"> <resources xmlns:android="http://schemas.android.com/apk/res/android">
<style name="platformActivityTheme" parent="Theme.AppCompat.DayNight.NoActionBar"> <style name="platformActivityTheme" parent="@android:style/Theme.Material.NoActionBar">
<item name="android:colorAccent">@color/accent</item> <item name="android:colorAccent">@color/accent</item>
<item name="colorAccent">@color/accent</item>
<item name="android:statusBarColor">@color/action_bar_color</item> <item name="android:statusBarColor">@color/action_bar_color</item>
<item name="android:navigationBarColor">@color/navigation_bar_color</item> <item name="android:navigationBarColor">@color/navigation_bar_color</item>
<item name="android:colorBackground">@color/setup_background</item>
<item name="android:colorForeground">@color/foreground</item>
<item name="android:alertDialogTheme">@style/AlertDialogTheme</item>
</style>
<style name="AlertDialogTheme" parent="@android:style/Theme.Material.Dialog.Alert">
<item name="android:colorAccent">@color/accent</item>
<item name="android:background">@color/action_bar_color</item>
<item name="android:textColor">@color/foreground</item>
<item name="android:textColorAlertDialogListItem">@color/foreground</item>
<item name="android:colorForeground">@color/foreground</item>
</style> </style>
</resources> </resources>

View file

@ -249,6 +249,10 @@
<string name="hint_source">Select hint source</string> <string name="hint_source">Select hint source</string>
<!-- Title of the setting to set popup key order --> <!-- Title of the setting to set popup key order -->
<string name="popup_order">Select popup key order</string> <string name="popup_order">Select popup key order</string>
<!-- Title of the setting to show TLD popup keys -->
<string name="show_tld_popup_keys">Show TLD popup keys</string>
<!-- Description of the setting to show TLD popup keys -->
<string name="show_tld_popup_keys_summary">Replace period key popups with top level domains when typing URLs and email addresses</string>
<!-- Names of the popup key classes --> <!-- Names of the popup key classes -->
<string name="popup_keys_number" tools:keep="@string/popup_keys_number">Number row</string> <string name="popup_keys_number" tools:keep="@string/popup_keys_number">Number row</string>
<string name="popup_keys_language" tools:keep="@string/popup_keys_language">Language</string> <string name="popup_keys_language" tools:keep="@string/popup_keys_language">Language</string>
@ -577,6 +581,8 @@ disposition rather than other common dispositions for Latin languages. -->
<string name="after_clip">Selecting clipboard history entry</string> <string name="after_clip">Selecting clipboard history entry</string>
<!-- Switch to main keyboard after entering a symbol in symbols layout and then pressing space or enter --> <!-- Switch to main keyboard after entering a symbol in symbols layout and then pressing space or enter -->
<string name="after_symbol_and_space">Pressing enter or space after other keys in symbols view</string> <string name="after_symbol_and_space">Pressing enter or space after other keys in symbols view</string>
<!-- Switch to main keyboard after entering something in numpad layout and then pressing space or enter -->
<string name="after_numpad_and_space">Pressing enter or space after other keys in numpad</string>
<!-- Message for selecting day or night background image --> <!-- Message for selecting day or night background image -->
<string name="day_or_night_image">Set image for day or night mode?</string> <string name="day_or_night_image">Set image for day or night mode?</string>
<!-- Button for selecting day --> <!-- Button for selecting day -->

View file

@ -20,9 +20,10 @@
bg: Bulgarian/bulgarian_bekl bg: Bulgarian/bulgarian_bekl
bn_BD: Bengali (Bangladesh)/bengali_unijoy bn_BD: Bengali (Bangladesh)/bengali_unijoy
bn_BD: Bengali (Bangladesh) (Akkhor)/bengali_akkhor bn_BD: Bengali (Bangladesh) (Akkhor)/bengali_akkhor
bn_IN: Bengali (India)/bengali bn_IN: Bengali (India)/bengali_inscript
bn_IN: Bengali (India)/Baishakhi bn_IN: Bengali (India)/Baishakhi
ca: Catalan/qwerty+ ca: Catalan/qwerty+
ckb: Central Kurdish/central_kurdish
cs: Czech/qwertz cs: Czech/qwertz
cv: Chuvash/chuvash cv: Chuvash/chuvash
da: Danish/qwerty+ da: Danish/qwerty+
@ -90,6 +91,7 @@
pt_PT: Portuguese (Portugal)/qwerty pt_PT: Portuguese (Portugal)/qwerty
ro: Romanian/qwerty ro: Romanian/qwerty
ru: Russian/russian ru: Russian/russian
ru: Russian (Extended)/russian_extended
ru: Russian (Student)/russian_student ru: Russian (Student)/russian_student
si_LK: Sinhala (Sri Lanka)/sinhala # This is a preliminary keyboard layout. si_LK: Sinhala (Sri Lanka)/sinhala # This is a preliminary keyboard layout.
sk: Slovak/qwerty sk: Slovak/qwerty
@ -107,6 +109,7 @@
tr: Turkish/turkish tr: Turkish/turkish
ur_PK: Urdu Pakistan ur_PK: Urdu Pakistan
uk: Ukrainian/ukrainian uk: Ukrainian/ukrainian
uk: Ukrainian (Extended)/ukrainian_extended
uz_UZ: Uzbek (Uzbekistan)/uzbek # This is a preliminary keyboard layout. uz_UZ: Uzbek (Uzbekistan)/uzbek # This is a preliminary keyboard layout.
vi: Vietnamese/qwerty vi: Vietnamese/qwerty
zu: Zulu/qwerty zu: Zulu/qwerty
@ -266,7 +269,7 @@
android:imeSubtypeLocale="bn_IN" android:imeSubtypeLocale="bn_IN"
android:languageTag="bn-IN" android:languageTag="bn-IN"
android:imeSubtypeMode="keyboard" android:imeSubtypeMode="keyboard"
android:imeSubtypeExtraValue="KeyboardLayoutSet=MAIN:bengali,NoShiftKey,EmojiCapable" android:imeSubtypeExtraValue="KeyboardLayoutSet=MAIN:bengali_inscript,EmojiCapable"
android:isAsciiCapable="false" android:isAsciiCapable="false"
/> />
<subtype android:icon="@drawable/ic_ime_switcher" <subtype android:icon="@drawable/ic_ime_switcher"
@ -287,6 +290,15 @@
android:imeSubtypeExtraValue="KeyboardLayoutSet=MAIN:qwerty+,AsciiCapable,EmojiCapable" android:imeSubtypeExtraValue="KeyboardLayoutSet=MAIN:qwerty+,AsciiCapable,EmojiCapable"
android:isAsciiCapable="true" android:isAsciiCapable="true"
/> />
<subtype android:icon="@drawable/ic_ime_switcher"
android:label="@string/subtype_generic"
android:subtypeId="0xf40a175b"
android:imeSubtypeLocale="ckb"
android:languageTag="ckb"
android:imeSubtypeMode="keyboard"
android:imeSubtypeExtraValue="KeyboardLayoutSet=MAIN:central_kurdish|SYMBOLS:symbols_arabic,NoShiftKey,SupportTouchPositionCorrection,EmojiCapable"
android:isAsciiCapable="false"
/>
<subtype android:icon="@drawable/ic_ime_switcher" <subtype android:icon="@drawable/ic_ime_switcher"
android:label="@string/subtype_generic" android:label="@string/subtype_generic"
android:subtypeId="0x2d3d2ed0" android:subtypeId="0x2d3d2ed0"
@ -912,6 +924,16 @@
android:imeSubtypeExtraValue="KeyboardLayoutSet=MAIN:russian,SupportTouchPositionCorrection,EmojiCapable" android:imeSubtypeExtraValue="KeyboardLayoutSet=MAIN:russian,SupportTouchPositionCorrection,EmojiCapable"
android:isAsciiCapable="false" android:isAsciiCapable="false"
/> />
<subtype android:icon="@drawable/ic_ime_switcher"
android:label="@string/subtype_generic_extended"
android:subtypeId="0x91f35a0b"
android:imeSubtypeLocale="ru"
android:languageTag="ru"
android:imeSubtypeMode="keyboard"
android:imeSubtypeExtraValue="KeyboardLayoutSet=MAIN:russian_extended,SupportTouchPositionCorrection,EmojiCapable"
android:isAsciiCapable="false"
/>
<subtype android:icon="@drawable/ic_ime_switcher" <subtype android:icon="@drawable/ic_ime_switcher"
android:label="@string/subtype_generic_student" android:label="@string/subtype_generic_student"
android:subtypeId="0x1bc335d0" android:subtypeId="0x1bc335d0"
@ -1064,6 +1086,15 @@
android:imeSubtypeExtraValue="KeyboardLayoutSet=MAIN:ukrainian,EmojiCapable" android:imeSubtypeExtraValue="KeyboardLayoutSet=MAIN:ukrainian,EmojiCapable"
android:isAsciiCapable="false" android:isAsciiCapable="false"
/> />
<subtype android:icon="@drawable/ic_ime_switcher"
android:label="@string/subtype_generic_extended"
android:subtypeId="0x49dc95e4"
android:imeSubtypeLocale="uk"
android:languageTag="uk"
android:imeSubtypeMode="keyboard"
android:imeSubtypeExtraValue="KeyboardLayoutSet=MAIN:ukrainian_extended,EmojiCapable"
android:isAsciiCapable="false"
/>
<subtype android:icon="@drawable/ic_ime_switcher" <subtype android:icon="@drawable/ic_ime_switcher"
android:label="@string/subtype_generic" android:label="@string/subtype_generic"
android:subtypeId="0x1e8349fc" android:subtypeId="0x1e8349fc"

View file

@ -0,0 +1,75 @@
package helium314.keyboard
import helium314.keyboard.keyboard.KeyboardId
import helium314.keyboard.keyboard.KeyboardLayoutSet
import helium314.keyboard.keyboard.internal.KeyboardParams
import helium314.keyboard.keyboard.internal.keyboard_parser.POPUP_KEYS_NORMAL
import helium314.keyboard.keyboard.internal.keyboard_parser.addLocaleKeyTextsToParams
import helium314.keyboard.latin.LatinIME
import helium314.keyboard.latin.common.LocaleUtils.constructLocale
import helium314.keyboard.latin.settings.Settings
import helium314.keyboard.latin.settings.SettingsSubtype.Companion.toSettingsSubtype
import helium314.keyboard.latin.utils.LayoutType
import helium314.keyboard.latin.utils.POPUP_KEYS_LAYOUT
import helium314.keyboard.latin.utils.SubtypeSettings
import helium314.keyboard.latin.utils.SubtypeUtilsAdditional
import helium314.keyboard.latin.utils.prefs
import org.junit.runner.RunWith
import org.robolectric.Robolectric
import org.robolectric.RobolectricTestRunner
import org.robolectric.annotation.Config
import org.robolectric.shadows.ShadowLog
import kotlin.test.BeforeTest
import kotlin.test.Test
import kotlin.test.assertEquals
import kotlin.test.assertTrue
@RunWith(RobolectricTestRunner::class)
@Config(shadows = [
ShadowInputMethodManager2::class
])
class SubtypeTest {
private lateinit var latinIME: LatinIME
private lateinit var params: KeyboardParams
@BeforeTest fun setUp() {
latinIME = Robolectric.setupService(LatinIME::class.java)
ShadowLog.setupLogging()
ShadowLog.stream = System.out
params = KeyboardParams()
params.mId = KeyboardLayoutSet.getFakeKeyboardId(KeyboardId.ELEMENT_ALPHABET)
params.mPopupKeyTypes.add(POPUP_KEYS_LAYOUT)
addLocaleKeyTextsToParams(latinIME, params, POPUP_KEYS_NORMAL)
}
@Test fun emptyAdditionalSubtypesResultsInEmptyList() {
// avoid issues where empty string results in additional subtype for undefined locale
val prefs = latinIME.prefs()
prefs.edit().putString(Settings.PREF_ADDITIONAL_SUBTYPES, "").apply()
assertTrue(SubtypeSettings.getAdditionalSubtypes().isEmpty())
val from = SubtypeSettings.getResourceSubtypesForLocale("es".constructLocale()).first()
// no change, and "changed" subtype actually is resource subtype -> 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())
}
}

View file

@ -1,4 +1,4 @@
হেলিবোর্ড গোপনীয়তা-সচেতন ওপেন সোর্স কিবোর্ড যার উৎস অ্যান্ড্রয়েড ওপেন সোর্স প্রজেক্ট এবং ওপেনবোর্ড। বাংলা (বাংলাদেশ) ভাষার জন্য এতে ইউনিজয় লেআউট যুক্ত আছে। হেলিবোর্ড গোপনীয়তা-সচেতন ওপেন সোর্স কিবোর্ড যার উৎস অ্যান্ড্রয়েড ওপেন সোর্স প্রজেক্ট এবং ওপেনবোর্ড। বাংলা ভাষার জন্য এতে ইউনিজয়, প্রভাত, অক্ষর, ইনস্ক্রিপ্ট, বৈশাখী লেআউট যুক্ত আছে।
এটি ইন্টারনেটের অনুমতি ব্যবহার করে না, তাই ১০০% অফলাইন। এটি ইন্টারনেটের অনুমতি ব্যবহার করে না, তাই ১০০% অফলাইন।
সুবিধা: সুবিধা:

View file

@ -1,11 +1,11 @@
* lisasime võimaluse salvestada ja eksportida kohandatud välimusi * võimalus salvestada ja eksportida kohandatud välimusi
* muutsime klahvistiku suunaklahvid kortratavaks * klahvistiku suunaklahvid on korratavad
* lisasime tööriistaribale täiendavad kursori klahvid (leht üles/alla(/algusesse/lõppu, sõna vasakule/paremale) * kursori lisaklahvid tööriistaribal (leht ↑/↓(/algusesse/lõppu, sõna ←/→)
* lisasime klahvi kopeeritu asetamiseks * klahv kopeeritu asetamiseks
* parandasime klahviga viipamist * parem klahviga viipamine
* lisasime tühikuklahviga viipamise, mis lülitab numbriklahvistiku sissse/välja * tühikuklahviga viipamine, mis lülitab numbristiku sisse/välja
* lisasime lõikelauale soovituse viimati kopeeritud tekstiga * lõikelauasoovitus viimati kopeeritud tekstiga
* valikuklahvide uus vajutus eemaldab tekstivaliku * valikuklahvide uus vajutus eemaldab tekstivaliku
* kohandasime seadistustes näidatavaid värve Android 12+ puhul * silusime seadistustes värve Android 12+
* kohendasime keelekohaseid hüpikklahve * silusime keelekohaseid hüpikklahve
* pisiparandused ja kohendused * pisiparandused, kohendused

View file

@ -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 * _symbol_alpha_: toggle alpha / symbol keyboard
* _numpad_: toggle numpad layout * _numpad_: toggle numpad layout
* _emoji_: switch to emoji view * _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 * _language_switch_: language switch key
* _action_: the action (enter) key * _action_: the action (enter) key
* _delete_: delete key * _delete_: delete key