Compare commits
96 Commits
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
1c2596147a | ||
|
|
d355143ba1 | ||
|
|
a9eb4c0eec | ||
|
|
487a37bc66 | ||
|
|
85a54e701e | ||
|
|
2666acd4ae | ||
|
|
ba72e6274f | ||
|
|
e20ce07957 | ||
|
|
765a12537e | ||
|
|
4845ce55b5 | ||
|
|
47cd655d76 | ||
|
|
d3edd3d332 | ||
|
|
2d32364123 | ||
|
|
509308ec82 | ||
|
|
db65af5ea5 | ||
|
|
9a46cf9dff | ||
|
|
2591eaa49d | ||
|
|
57350b422d | ||
|
|
fe8efa8496 | ||
|
|
c5ce9ba252 | ||
|
|
4e39273812 | ||
|
|
43995f1ac5 | ||
|
|
3688f8e8dc | ||
|
|
5cbbbc2295 | ||
|
|
af08947929 | ||
|
|
3e8a227320 | ||
|
|
adb69dc365 | ||
|
|
c2998c9a2e | ||
|
|
f801c31ebb | ||
|
|
6b8652bcd9 | ||
|
|
65b5d252b6 | ||
|
|
c5ae916ece | ||
|
|
de3fcceeaf | ||
|
|
f06ea18e89 | ||
|
|
9d7754b8db | ||
|
|
2be1a328b6 | ||
|
|
9cd7931b3e | ||
|
|
03f9014b7c | ||
|
|
62abefc36e | ||
|
|
f5d79e8556 | ||
|
|
e68428ef11 | ||
|
|
1cfde9c2b9 | ||
|
|
765a596eb2 | ||
|
|
a27035a81b | ||
|
|
380eaffb08 | ||
|
|
0e7eac2796 | ||
|
|
6da344fd6c | ||
|
|
7787af69fd | ||
|
|
288bd61fb4 | ||
|
|
fe69c0f3e1 | ||
|
|
766c5efa95 | ||
|
|
35bd6e7c8d | ||
|
|
23f14ab57d | ||
|
|
ac688a38ab | ||
|
|
a2e393d7dd | ||
|
|
ba8ebaf231 | ||
|
|
a0e381ed93 | ||
|
|
09833a3369 | ||
|
|
f014b010d8 | ||
|
|
9512eb32f0 | ||
|
|
82f99bd721 | ||
|
|
1d710dfb85 | ||
|
|
1328eb1f05 | ||
|
|
1cda0662ae | ||
|
|
11cacb25c8 | ||
|
|
c0207fd84e | ||
|
|
56d3acfc67 | ||
|
|
a3e5ae9337 | ||
|
|
7e84f71464 | ||
|
|
eb88fbc981 | ||
|
|
96320e6b06 | ||
|
|
fee9c2a0ac | ||
|
|
c74a5841ec | ||
|
|
aab7a6e33a | ||
|
|
0ea59cf2ed | ||
|
|
1be6ce1ae8 | ||
|
|
8d06bea6bb | ||
|
|
4b1a0c9972 | ||
|
|
3d50ea59af | ||
|
|
83bef3aee9 | ||
|
|
c365acb800 | ||
|
|
ef075151fb | ||
|
|
5316e46ba6 | ||
|
|
467fb62067 | ||
|
|
75c59366a9 | ||
|
|
6df6e25b15 | ||
|
|
81d89cad8c | ||
|
|
99954237f7 | ||
|
|
b5e56642fc | ||
|
|
343525f259 | ||
|
|
a5adad714a | ||
|
|
67214cbdf1 | ||
|
|
3a0284f355 | ||
|
|
eecada3118 | ||
|
|
68061f1aac | ||
|
|
c4ac4abd63 |
15
.github/ISSUE_TEMPLATE/bug_report.md
vendored
15
.github/ISSUE_TEMPLATE/bug_report.md
vendored
@@ -15,18 +15,21 @@ assignees: ''
|
||||
- Thank you for your help in making FlorisBoard better!
|
||||
-->
|
||||
|
||||
**Environment information**
|
||||
- FlorisBoard Version: <!-- e.g. 0.1.0 -->
|
||||
- Install Source: <!-- Google PlayStore/F-Droid/GitHub/? -->
|
||||
- Device: <!-- e.g. OnePlus 7T -->
|
||||
- Android version, ROM: <!-- e.g. 10, Stock -->
|
||||
#### Short description
|
||||
Describe the bug in a short but concise way.
|
||||
|
||||
**Steps to reproduce**
|
||||
#### Steps to reproduce
|
||||
1. Go to '...'
|
||||
2. Click on '....'
|
||||
3. Scroll down to '....'
|
||||
4. See error
|
||||
|
||||
#### Environment information
|
||||
- FlorisBoard Version: <!-- e.g. 0.3.6 -->
|
||||
- Install Source: <!-- Google PlayStore/F-Droid/GitHub/? -->
|
||||
- Device: <!-- e.g. OnePlus 7T -->
|
||||
- Android version, ROM: <!-- e.g. 10, Stock -->
|
||||
|
||||
<!-- (remove this line if you paste a log)
|
||||
```
|
||||
If applicable, paste the captured debug log here.
|
||||
|
||||
@@ -32,7 +32,7 @@ free to ask for help at any time!
|
||||
|
||||
## Adding a new keyboard layout / dictionary for locale
|
||||
|
||||
You can now oficially add layouts to FlorisBoard as described below.
|
||||
You can now officially add layouts to FlorisBoard as described below.
|
||||
FlorisBoard's core has stabilized enough that adding new content is
|
||||
safe, although there will be some changes in the future.
|
||||
|
||||
|
||||
@@ -19,8 +19,8 @@ android {
|
||||
applicationId "dev.patrickgold.florisboard"
|
||||
minSdkVersion 23
|
||||
targetSdkVersion 29
|
||||
versionCode 22
|
||||
versionName "0.3.3"
|
||||
versionCode 26
|
||||
versionName "0.3.7"
|
||||
|
||||
testInstrumentationRunner "androidx.test.runner.AndroidJUnitRunner"
|
||||
}
|
||||
@@ -32,12 +32,12 @@ android {
|
||||
buildTypes {
|
||||
debug {
|
||||
applicationIdSuffix ".debug"
|
||||
resValue "string", "app_name", "FlorisBoard Debug"
|
||||
resValue 'string', 'floris_app_name', 'FlorisBoard Debug'
|
||||
}
|
||||
release {
|
||||
minifyEnabled false
|
||||
proguardFiles getDefaultProguardFile('proguard-android-optimize.txt'), 'proguard-rules.pro'
|
||||
resValue "string", "app_name", "FlorisBoard"
|
||||
resValue 'string', 'floris_app_name', '@string/app_name'
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@@ -23,9 +23,8 @@
|
||||
<application
|
||||
android:name=".ime.core.FlorisApplication"
|
||||
android:allowBackup="false"
|
||||
android:extractNativeLibs="false"
|
||||
android:icon="@mipmap/ic_launcher"
|
||||
android:label="@string/app_name"
|
||||
android:label="@string/floris_app_name"
|
||||
android:roundIcon="@mipmap/ic_launcher_round"
|
||||
android:supportsRtl="true"
|
||||
android:theme="@style/SettingsTheme">
|
||||
@@ -33,7 +32,7 @@
|
||||
<!-- IME service -->
|
||||
<service
|
||||
android:name="dev.patrickgold.florisboard.ime.core.FlorisBoard"
|
||||
android:label="@string/app_name"
|
||||
android:label="@string/floris_app_name"
|
||||
android:permission="android.permission.BIND_INPUT_METHOD">
|
||||
<meta-data
|
||||
android:name="android.view.im"
|
||||
@@ -57,7 +56,7 @@
|
||||
<activity-alias
|
||||
android:name="dev.patrickgold.florisboard.SettingsLauncherAlias"
|
||||
android:icon="@mipmap/ic_launcher"
|
||||
android:label="@string/app_name"
|
||||
android:label="@string/floris_app_name"
|
||||
android:launchMode="singleTask"
|
||||
android:roundIcon="@mipmap/ic_launcher_round"
|
||||
android:targetActivity="dev.patrickgold.florisboard.setup.SetupActivity">
|
||||
|
||||
@@ -4,6 +4,9 @@
|
||||
"qwerty": "QWERTY",
|
||||
"qwertz": "QWERTZ",
|
||||
"azerty": "AZERTY",
|
||||
"bepo": "BÉPO",
|
||||
"bulgarian_bds": "Bulgarian (BDS)",
|
||||
"bulgarian_phonetic": "Bulgarian (Phonetic)",
|
||||
"spanish": "Spanish (QWERTY)",
|
||||
"norwegian": "Norwegian (QWERTY)",
|
||||
"swedish_finnish": "Swedish/Finnish (QWERTY)",
|
||||
@@ -21,7 +24,11 @@
|
||||
"dvorak": "Dvorak",
|
||||
"jcuken_russian": "Russian (JCUKEN)",
|
||||
"canadian_french": "Canadian French (QWERTY)",
|
||||
"greek": "Ελληνικά"
|
||||
"greek": "Ελληνικά",
|
||||
"hebrew": "עברית",
|
||||
"serbian_latin": "Serbian (QWERTZ)",
|
||||
"serbian_cyrillic": "Serbian (ЉЊЕРТЗ)",
|
||||
"kurdish": "کوردی"
|
||||
},
|
||||
"defaultSubtypes": [
|
||||
{
|
||||
@@ -183,6 +190,36 @@
|
||||
"id": 1601,
|
||||
"languageTag": "pl",
|
||||
"preferredLayout": "qwerty"
|
||||
},
|
||||
{
|
||||
"id": 1701,
|
||||
"languageTag": "bg-bg",
|
||||
"preferredLayout": "bulgarian_phonetic"
|
||||
},
|
||||
{
|
||||
"id": 1801,
|
||||
"languageTag": "tr",
|
||||
"preferredLayout": "qwerty"
|
||||
},
|
||||
{
|
||||
"id": 1901,
|
||||
"languageTag": "iw-IL",
|
||||
"preferredLayout": "hebrew"
|
||||
},
|
||||
{
|
||||
"id": 2001,
|
||||
"languageTag": "ckb",
|
||||
"preferredLayout": "kurdish"
|
||||
},
|
||||
{
|
||||
"id": 2101,
|
||||
"languageTag": "sr-RS",
|
||||
"preferredLayout": "serbian_cyrillic"
|
||||
},
|
||||
{
|
||||
"id": 2201,
|
||||
"languageTag": "lv-LV",
|
||||
"preferredLayout": "qwerty"
|
||||
}
|
||||
]
|
||||
}
|
||||
|
||||
51
app/src/main/assets/ime/text/characters/bepo.json
Normal file
51
app/src/main/assets/ime/text/characters/bepo.json
Normal file
@@ -0,0 +1,51 @@
|
||||
{
|
||||
"type": "characters",
|
||||
"name": "bepo",
|
||||
"authors": [ "salamandar" ],
|
||||
"direction": "ltr",
|
||||
"arrangement": [
|
||||
[
|
||||
{ "code": 98, "label": "b" },
|
||||
{ "code": 233, "label": "é" },
|
||||
{ "code": 112, "label": "p" },
|
||||
{ "code": 111, "label": "o" },
|
||||
{ "code": 232, "label": "è" },
|
||||
{ "code": 118, "label": "v" },
|
||||
{ "code": 100, "label": "d" },
|
||||
{ "code": 108, "label": "l" },
|
||||
{ "code": 106, "label": "j" },
|
||||
{ "code": 122, "label": "z" },
|
||||
{ "code": 119, "label": "w" }
|
||||
],
|
||||
[
|
||||
{ "code": 97, "label": "a" },
|
||||
{ "code": 117, "label": "u" },
|
||||
{ "code": 105, "label": "i" },
|
||||
{ "code": 101, "label": "e" },
|
||||
{ "code": 99, "label": "c" },
|
||||
{ "code": 116, "label": "t" },
|
||||
{ "code": 115, "label": "s" },
|
||||
{ "code": 114, "label": "r" },
|
||||
{ "code": 110, "label": "n" },
|
||||
{ "code": 109, "label": "m" },
|
||||
{ "code": 231, "label": "ç" }
|
||||
],
|
||||
[
|
||||
{ "code": 121, "label": "y" },
|
||||
{ "code": 120, "label": "x" },
|
||||
{ "code": 107, "label": "k" },
|
||||
{ "code": 113, "label": "q", "popup": {
|
||||
"relevant": [
|
||||
{ "code": 8218, "label": "‚" },
|
||||
{ "code": 8216, "label": "‘" },
|
||||
{ "code": 8217, "label": "’" },
|
||||
{ "code": 8249, "label": "‹" },
|
||||
{ "code": 8250, "label": "›" }
|
||||
]
|
||||
} },
|
||||
{ "code": 103, "label": "g" },
|
||||
{ "code": 104, "label": "h" },
|
||||
{ "code": 102, "label": "f" }
|
||||
]
|
||||
]
|
||||
}
|
||||
46
app/src/main/assets/ime/text/characters/bulgarian_bds.json
Normal file
46
app/src/main/assets/ime/text/characters/bulgarian_bds.json
Normal file
@@ -0,0 +1,46 @@
|
||||
{
|
||||
"type": "characters",
|
||||
"name": "bulgarian_bds",
|
||||
"authors": [ "iorvethe" ],
|
||||
"direction": "ltr",
|
||||
"arrangement": [
|
||||
[
|
||||
{ "code": 1099, "label": "ы" },
|
||||
{ "code": 1091, "label": "у" },
|
||||
{ "code": 1077, "label": "е" },
|
||||
{ "code": 1080, "label": "и" },
|
||||
{ "code": 1096, "label": "ш" },
|
||||
{ "code": 1097, "label": "щ" },
|
||||
{ "code": 1082, "label": "к" },
|
||||
{ "code": 1089, "label": "с" },
|
||||
{ "code": 1076, "label": "д" },
|
||||
{ "code": 1079, "label": "з" },
|
||||
{ "code": 1094, "label": "ц" }
|
||||
],
|
||||
[
|
||||
{ "code": 1100, "label": "ь" },
|
||||
{ "code": 1103, "label": "я" },
|
||||
{ "code": 1072, "label": "а" },
|
||||
{ "code": 1086, "label": "о" },
|
||||
{ "code": 1078, "label": "ж" },
|
||||
{ "code": 1075, "label": "г" },
|
||||
{ "code": 1090, "label": "т" },
|
||||
{ "code": 1085, "label": "н" },
|
||||
{ "code": 1074, "label": "в" },
|
||||
{ "code": 1084, "label": "м" },
|
||||
{ "code": 1095, "label": "ч" }
|
||||
],
|
||||
[
|
||||
{ "code": 1102, "label": "ю" },
|
||||
{ "code": 1081, "label": "й" },
|
||||
{ "code": 1098, "label": "ъ" },
|
||||
{ "code": 1101, "label": "э" },
|
||||
{ "code": 1092, "label": "ф" },
|
||||
{ "code": 1093, "label": "х" },
|
||||
{ "code": 1087, "label": "п" },
|
||||
{ "code": 1088, "label": "р" },
|
||||
{ "code": 1083, "label": "л" },
|
||||
{ "code": 1073, "label": "б" }
|
||||
]
|
||||
]
|
||||
}
|
||||
@@ -0,0 +1,44 @@
|
||||
{
|
||||
"type": "characters",
|
||||
"name": "bulgarian_phonetic",
|
||||
"authors": [ "iorvethe" ],
|
||||
"direction": "ltr",
|
||||
"arrangement": [
|
||||
[
|
||||
{ "code": 1103, "label": "я" },
|
||||
{ "code": 1074, "label": "в" },
|
||||
{ "code": 1077, "label": "е" },
|
||||
{ "code": 1088, "label": "р" },
|
||||
{ "code": 1090, "label": "т" },
|
||||
{ "code": 1098, "label": "ъ" },
|
||||
{ "code": 1091, "label": "у" },
|
||||
{ "code": 1080, "label": "и" },
|
||||
{ "code": 1086, "label": "о" },
|
||||
{ "code": 1087, "label": "п" },
|
||||
{ "code": 1095, "label": "ч" }
|
||||
],
|
||||
[
|
||||
{ "code": 1072, "label": "а" },
|
||||
{ "code": 1089, "label": "с" },
|
||||
{ "code": 1076, "label": "д" },
|
||||
{ "code": 1092, "label": "ф" },
|
||||
{ "code": 1075, "label": "г" },
|
||||
{ "code": 1093, "label": "х" },
|
||||
{ "code": 1081, "label": "й" },
|
||||
{ "code": 1082, "label": "к" },
|
||||
{ "code": 1083, "label": "л" },
|
||||
{ "code": 1096, "label": "ш" },
|
||||
{ "code": 1097, "label": "щ" }
|
||||
],
|
||||
[
|
||||
{ "code": 1079, "label": "з" },
|
||||
{ "code": 1100, "label": "ь" },
|
||||
{ "code": 1094, "label": "ц" },
|
||||
{ "code": 1078, "label": "ж" },
|
||||
{ "code": 1073, "label": "б" },
|
||||
{ "code": 1085, "label": "н" },
|
||||
{ "code": 1084, "label": "м" },
|
||||
{ "code": 1102, "label": "ю" }
|
||||
]
|
||||
]
|
||||
}
|
||||
@@ -5,18 +5,19 @@
|
||||
"mapping": {
|
||||
"all": {
|
||||
"~enter": {
|
||||
"main": { "code": -215, "label": "toggle_one_handed_mode", "type": "system_gui" },
|
||||
"main": { "code": -213, "label": "switch_to_media_context", "type": "system_gui" },
|
||||
"relevant": [
|
||||
{ "code": -213, "label": "switch_to_media_context", "type": "system_gui" }
|
||||
{ "code": -216, "label": "toggle_one_handed_mode_right", "type": "system_gui" }
|
||||
]
|
||||
},
|
||||
"~left": {
|
||||
"main": { "code": -213, "label": "switch_to_media_context", "type": "system_gui" },
|
||||
"relevant": [
|
||||
{ "code": -215, "label": "toggle_one_handed_mode", "type": "system_gui" },
|
||||
{ "code": -215, "label": "toggle_one_handed_mode_left", "type": "system_gui" },
|
||||
{ "code": -100, "label": "settings", "type": "system_gui" }
|
||||
]
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@@ -0,0 +1,45 @@
|
||||
{
|
||||
"type": "characters/extended_popups",
|
||||
"name": "bg",
|
||||
"authors": [ "iorvethe" ],
|
||||
"mapping": {
|
||||
"all": {
|
||||
"и": {
|
||||
"relevant": [
|
||||
{ "code": 1117, "label": "ѝ" }
|
||||
]
|
||||
},
|
||||
"~right": {
|
||||
"main": { "code": 44, "label": "," },
|
||||
"relevant": [
|
||||
{ "code": 38, "label": "&" },
|
||||
{ "code": 37, "label": "%" },
|
||||
{ "code": 43, "label": "+" },
|
||||
{ "code": 34, "label": "\"" },
|
||||
{ "code": 45, "label": "-" },
|
||||
{ "code": 58, "label": ":" },
|
||||
{ "code": 39, "label": "'" },
|
||||
{ "code": 64, "label": "@" },
|
||||
{ "code": 59, "label": ";" },
|
||||
{ "code": 47, "label": "/" },
|
||||
{ "code": 40, "label": "(" },
|
||||
{ "code": 41, "label": ")" },
|
||||
{ "code": 35, "label": "#" },
|
||||
{ "code": 33, "label": "!" },
|
||||
{ "code": 63, "label": "?" }
|
||||
]
|
||||
}
|
||||
},
|
||||
"uri": {
|
||||
"~right": {
|
||||
"main": { "code": -255, "label": ".com" },
|
||||
"relevant": [
|
||||
{ "code": -255, "label": ".bg" },
|
||||
{ "code": -255, "label": ".edu" },
|
||||
{ "code": -255, "label": ".org" },
|
||||
{ "code": -255, "label": ".net" }
|
||||
]
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
167
app/src/main/assets/ime/text/characters/extended_popups/ckb.json
Normal file
167
app/src/main/assets/ime/text/characters/extended_popups/ckb.json
Normal file
@@ -0,0 +1,167 @@
|
||||
{
|
||||
"type": "characters/extended_popups",
|
||||
"name": "ckb",
|
||||
"authors": [ "GoRaN" ],
|
||||
"mapping": {
|
||||
"all": {
|
||||
"ق": {
|
||||
"relevant": [
|
||||
{ "code": 1647, "label": "ٯ" }
|
||||
]
|
||||
},
|
||||
"ئ": {
|
||||
"relevant": [
|
||||
{"code": 1569, "label": "ء" }
|
||||
]
|
||||
},
|
||||
"ە": {
|
||||
"relevant": [
|
||||
{ "code": 1577, "label": "ة" },
|
||||
{ "code": 1729, "label": "ـہ" }
|
||||
]
|
||||
},
|
||||
"ر": {
|
||||
"relevant": [
|
||||
{ "code": 1685, "label": "ڕ" },
|
||||
{ "code": 1682, "label": "ڒ" }
|
||||
]
|
||||
},
|
||||
"ف": {
|
||||
"relevant": [
|
||||
{ "code": 1701, "label": "ڥ" },
|
||||
{ "code": 1698, "label": "ڢ" },
|
||||
{ "code": 1700, "label": "ڤ" },
|
||||
{ "code": 1697, "label": "ڡ" }
|
||||
]
|
||||
},
|
||||
"": {
|
||||
"relevant": [
|
||||
{ "code": 65163, "label": "ﺋ" },
|
||||
{ "code": 1569, "label": "ء" },
|
||||
{ "code": 65139, "label": "ﹳ" }
|
||||
]
|
||||
},
|
||||
"ع": {
|
||||
"relevant": [
|
||||
{ "code": 1551, "label": "؏" },
|
||||
{ "code": 1594, "label": "غ" }
|
||||
]
|
||||
},
|
||||
"د": {
|
||||
"relevant": [
|
||||
{ "code": 1676, "label": "ڌ" },
|
||||
{ "code": 64390, "label": "ﮆ" },
|
||||
{ "code": 1584, "label": "ذ" },
|
||||
{ "code": 1774, "label": "ۮ" }
|
||||
]
|
||||
},
|
||||
"ه": {
|
||||
"relevant": [
|
||||
{ "code": 1726, "label": "ھ" }
|
||||
]
|
||||
},
|
||||
"خ": {
|
||||
"relevant": [
|
||||
{ "code": 1567, "label": "؟" }
|
||||
]
|
||||
},
|
||||
"س": {
|
||||
"relevant": [
|
||||
{ "code": 1589, "label": "ص" }
|
||||
]
|
||||
},
|
||||
"ش": {
|
||||
"relevant": [
|
||||
{ "code": 1590, "label": "ض" }
|
||||
]
|
||||
},
|
||||
"ب": {
|
||||
"relevant": [
|
||||
{ "code": 65010, "label": "ﷲ" },
|
||||
{ "code": 65021, "label": "﷽" },
|
||||
{ "code": 65019, "label": "ﷻ" }
|
||||
]
|
||||
},
|
||||
"م": {
|
||||
"relevant": [
|
||||
{ "code": 65018, "label": "ﷺ" },
|
||||
{ "code": 65012, "label": "ﷴ" }
|
||||
]
|
||||
},
|
||||
"ل": {
|
||||
"relevant": [
|
||||
{ "code": 1718, "label": "ڶ" },
|
||||
{ "code": 1719, "label": "ڷ" },
|
||||
{ "code": 1717, "label": "ڵ" },
|
||||
{ "code": 1720, "label": "ڸ" }
|
||||
]
|
||||
},
|
||||
"ا": {
|
||||
"relevant": [
|
||||
{ "code": 1571, "label": "أ" },
|
||||
{ "code": 1573, "label": "إ" },
|
||||
{ "code": 1570, "label": "آ" },
|
||||
{ "code": 1649, "label": "ٱ" }
|
||||
]
|
||||
},
|
||||
"ک": {
|
||||
"relevant": [
|
||||
{ "code": 1706, "label": "ڪ" },
|
||||
{ "code": 1603, "label": "ك"}
|
||||
]
|
||||
},
|
||||
"ی": {
|
||||
"relevant": [
|
||||
{ "code": 1746, "label": "ے" },
|
||||
{ "code": 1610, "label": "ي" },
|
||||
{ "code": 1744, "label": "ې" },
|
||||
{ "code": 1741, "label": "ۍ" },
|
||||
{ "code": 1742, "label": "ێ" },
|
||||
{ "code": 1597, "label": "ؽ" }
|
||||
]
|
||||
},
|
||||
"ۆ": {
|
||||
"relevant": [
|
||||
{ "code": 1743, "label": "ۏ" },
|
||||
{ "code": 1735, "label": "ۇ" },
|
||||
{ "code": 1737, "label": "ۉ" },
|
||||
{ "code": 1738, "label": "ۊ" },
|
||||
{ "code": 1572, "label": "ؤ" },
|
||||
{ "code": 1739, "label": "ۋ" }
|
||||
]
|
||||
},
|
||||
"~right": {
|
||||
"main": { "code": 1567, "label": "؟" },
|
||||
"relevant": [
|
||||
{ "code": 1600, "label": "ــ" },
|
||||
{ "code": 33, "label": "!" },
|
||||
{ "code": 1548, "label": "،" },
|
||||
{ "code": 44, "label": "," },
|
||||
{ "code": 1549, "label": "؍" },
|
||||
{ "code": 1563, "label": "؛" },
|
||||
{ "code": 59, "label": ";" },
|
||||
{ "code": 58, "label": ":" },
|
||||
{ "code": 64, "label": "@" },
|
||||
{ "code": 35, "label": "#" },
|
||||
{ "code": 42, "label": "*" },
|
||||
{ "code": 95, "label": "_" },
|
||||
{ "code": 45, "label": "-" }
|
||||
]
|
||||
}
|
||||
},
|
||||
"uri": {
|
||||
"~right": {
|
||||
"main": { "code": -255, "label": ".krd"},
|
||||
"relevant": [
|
||||
{ "code": -255, "label": ".gov" },
|
||||
{ "code": -255, "label": ".edu" },
|
||||
{ "code": -255, "label": ".com" },
|
||||
{ "code": -255, "label": ".org" },
|
||||
{ "code": -255, "label": ".net" },
|
||||
{ "code": -255, "label": ".iq" },
|
||||
{ "code": -255, "label": ".tv" }
|
||||
]
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -26,23 +26,23 @@
|
||||
]
|
||||
},
|
||||
"e": {
|
||||
"main": { "code": 233, "label": "é" },
|
||||
"relevant": [
|
||||
{ "code": 275, "label": "ē" },
|
||||
{ "code": 281, "label": "ę" },
|
||||
{ "code": 279, "label": "ė" },
|
||||
{ "code": 235, "label": "ë" },
|
||||
{ "code": 233, "label": "é" },
|
||||
{ "code": 232, "label": "è" },
|
||||
{ "code": 234, "label": "ê" }
|
||||
]
|
||||
},
|
||||
"i": {
|
||||
"main": { "code": 237, "label": "í" },
|
||||
"relevant": [
|
||||
{ "code": 299, "label": "ī" },
|
||||
{ "code": 238, "label": "î" },
|
||||
{ "code": 303, "label": "į" },
|
||||
{ "code": 236, "label": "ì" },
|
||||
{ "code": 237, "label": "í" },
|
||||
{ "code": 239, "label": "ï" }
|
||||
]
|
||||
},
|
||||
@@ -71,8 +71,8 @@
|
||||
]
|
||||
},
|
||||
"u": {
|
||||
"main": { "code": 250, "label": "ú" },
|
||||
"relevant": [
|
||||
{ "code": 250, "label": "ú" },
|
||||
{ "code": 363, "label": "ū" },
|
||||
{ "code": 249, "label": "ù" },
|
||||
{ "code": 252, "label": "ü" },
|
||||
@@ -104,9 +104,9 @@
|
||||
"~right": {
|
||||
"main": { "code": -255, "label": ".com" },
|
||||
"relevant": [
|
||||
{ "code": -255, "label": ".org" },
|
||||
{ "code": -255, "label": ".com.es" },
|
||||
{ "code": -255, "label": ".es" },
|
||||
{ "code": -255, "label": ".org" },
|
||||
{ "code": -255, "label": ".net" }
|
||||
]
|
||||
}
|
||||
|
||||
@@ -5,8 +5,8 @@
|
||||
"mapping": {
|
||||
"all": {
|
||||
"a": {
|
||||
"main": { "code": 224, "label": "à" },
|
||||
"relevant": [
|
||||
{ "code": 224, "label": "à" },
|
||||
{ "code": 227, "label": "ã" },
|
||||
{ "code": 229, "label": "å" },
|
||||
{ "code": 257, "label": "ā" },
|
||||
@@ -18,8 +18,8 @@
|
||||
]
|
||||
},
|
||||
"e": {
|
||||
"main": { "code": 232, "label": "è" },
|
||||
"relevant": [
|
||||
{ "code": 232, "label": "è" },
|
||||
{ "code": 275, "label": "ē" },
|
||||
{ "code": 281, "label": "ę" },
|
||||
{ "code": 279, "label": "ė" },
|
||||
@@ -29,8 +29,8 @@
|
||||
]
|
||||
},
|
||||
"i": {
|
||||
"main": { "code": 236, "label": "ì" },
|
||||
"relevant": [
|
||||
{ "code": 236, "label": "ì" },
|
||||
{ "code": 299, "label": "ī" },
|
||||
{ "code": 239, "label": "ï" },
|
||||
{ "code": 303, "label": "į" },
|
||||
@@ -45,8 +45,8 @@
|
||||
]
|
||||
},
|
||||
"o": {
|
||||
"main": { "code": 242, "label": "ò" },
|
||||
"relevant": [
|
||||
{ "code": 242, "label": "ò" },
|
||||
{ "code": 186, "label": "º" },
|
||||
{ "code": 333, "label": "ō" },
|
||||
{ "code": 339, "label": "œ" },
|
||||
@@ -58,8 +58,8 @@
|
||||
]
|
||||
},
|
||||
"u": {
|
||||
"main": { "code": 249, "label": "ù" },
|
||||
"relevant": [
|
||||
{ "code": 249, "label": "ù" },
|
||||
{ "code": 363, "label": "ū" },
|
||||
{ "code": 251, "label": "û" },
|
||||
{ "code": 250, "label": "ú" },
|
||||
@@ -91,10 +91,10 @@
|
||||
"~right": {
|
||||
"main": { "code": -255, "label": ".com" },
|
||||
"relevant": [
|
||||
{ "code": -255, "label": ".gov" },
|
||||
{ "code": -255, "label": ".edu" },
|
||||
{ "code": -255, "label": ".it" },
|
||||
{ "code": -255, "label": ".gov.it" },
|
||||
{ "code": -255, "label": ".edu.it" },
|
||||
{ "code": -255, "label": ".org" },
|
||||
{ "code": -255, "label": ".it" },
|
||||
{ "code": -255, "label": ".net" }
|
||||
]
|
||||
}
|
||||
|
||||
@@ -0,0 +1,42 @@
|
||||
{
|
||||
"type": "characters/extended_popups",
|
||||
"name": "iw",
|
||||
"authors": [ "Antony" ],
|
||||
"mapping": {
|
||||
"all": {
|
||||
"~right": {
|
||||
"main": { "code": 44, "label": "," },
|
||||
"relevant": [
|
||||
{ "code": 38, "label": "&" },
|
||||
{ "code": 37, "label": "%" },
|
||||
{ "code": 43, "label": "+" },
|
||||
{ "code": 34, "label": "\"" },
|
||||
{ "code": 45, "label": "-" },
|
||||
{ "code": 58, "label": ":" },
|
||||
{ "code": 39, "label": "'" },
|
||||
{ "code": 64, "label": "@" },
|
||||
{ "code": 59, "label": ";" },
|
||||
{ "code": 47, "label": "/" },
|
||||
{ "code": 40, "label": "(" },
|
||||
{ "code": 41, "label": ")" },
|
||||
{ "code": 35, "label": "#" },
|
||||
{ "code": 33, "label": "!" },
|
||||
{ "code": 63, "label": "?" }
|
||||
]
|
||||
}
|
||||
},
|
||||
"uri": {
|
||||
"~right": {
|
||||
"main": { "code": -255, "label": ".com" },
|
||||
"relevant": [
|
||||
{ "code": -255, "label": ".gov" },
|
||||
{ "code": -255, "label": ".edu" },
|
||||
{ "code": -255, "label": ".org" },
|
||||
{ "code": -255, "label": ".net" },
|
||||
{ "code": -255, "label": ".co.il" },
|
||||
{ "code": -255, "label": ".gov.il" }
|
||||
]
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
112
app/src/main/assets/ime/text/characters/extended_popups/lv.json
Normal file
112
app/src/main/assets/ime/text/characters/extended_popups/lv.json
Normal file
@@ -0,0 +1,112 @@
|
||||
{
|
||||
"type": "characters/extended_popups",
|
||||
"name": "lv",
|
||||
"authors": [ "patrickgold", "eandersons" ],
|
||||
"mapping": {
|
||||
"all": {
|
||||
"a": {
|
||||
"relevant": [
|
||||
{ "code": 257, "label": "ā" }
|
||||
]
|
||||
},
|
||||
"c": {
|
||||
"relevant": [
|
||||
{ "code": 269, "label": "č" }
|
||||
]
|
||||
},
|
||||
"e": {
|
||||
"relevant": [
|
||||
{ "code": 275, "label": "ē" },
|
||||
{ "code": 8364, "label": "€" }
|
||||
]
|
||||
},
|
||||
"g": {
|
||||
"relevant": [
|
||||
{ "code": 291, "label": "ģ" }
|
||||
]
|
||||
},
|
||||
"i": {
|
||||
"relevant": [
|
||||
{ "code": 299, "label": "ī" }
|
||||
]
|
||||
},
|
||||
"k": {
|
||||
"relevant": [
|
||||
{ "code": 311, "label": "ķ" }
|
||||
]
|
||||
},
|
||||
"l": {
|
||||
"relevant": [
|
||||
{ "code": 316, "label": "ļ" }
|
||||
]
|
||||
},
|
||||
"n": {
|
||||
"relevant": [
|
||||
{ "code": 326, "label": "ņ" }
|
||||
]
|
||||
},
|
||||
"o": {
|
||||
"relevant": [
|
||||
{ "code": 333, "label": "ō" }
|
||||
]
|
||||
},
|
||||
"r": {
|
||||
"relevant": [
|
||||
{ "code": 343, "label": "ŗ" }
|
||||
]
|
||||
},
|
||||
"s": {
|
||||
"relevant": [
|
||||
{ "code": 353, "label": "š" }
|
||||
]
|
||||
},
|
||||
"u": {
|
||||
"relevant": [
|
||||
{ "code": 363, "label": "ū" }
|
||||
]
|
||||
},
|
||||
"z": {
|
||||
"relevant": [
|
||||
{ "code": 382, "label": "ž" }
|
||||
]
|
||||
},
|
||||
"~right": {
|
||||
"main": { "code": 44, "label": "," },
|
||||
"relevant": [
|
||||
{ "code": 38, "label": "&" },
|
||||
{ "code": 37, "label": "%" },
|
||||
{ "code": 43, "label": "+" },
|
||||
{ "code": 34, "label": "\"" },
|
||||
{ "code": 45, "label": "-" },
|
||||
{ "code": 8212, "label": "—" },
|
||||
{ "code": 58, "label": ":" },
|
||||
{ "code": 39, "label": "'" },
|
||||
{ "code": 64, "label": "@" },
|
||||
{ "code": 59, "label": ";" },
|
||||
{ "code": 47, "label": "/" },
|
||||
{ "code": 40, "label": "(" },
|
||||
{ "code": 41, "label": ")" },
|
||||
{ "code": 35, "label": "#" },
|
||||
{ "code": 33, "label": "!" },
|
||||
{ "code": 63, "label": "?" }
|
||||
]
|
||||
}
|
||||
},
|
||||
"uri": {
|
||||
"~right": {
|
||||
"main": { "code": -255, "label": ".lv" },
|
||||
"relevant": [
|
||||
{ "code": -255, "label": ".eu" },
|
||||
{ "code": -255, "label": ".com" },
|
||||
{ "code": -255, "label": ".gov.lv" },
|
||||
{ "code": -255, "label": ".edu.lv" },
|
||||
{ "code": -255, "label": ".org.lv" },
|
||||
{ "code": -255, "label": ".gov" },
|
||||
{ "code": -255, "label": ".edu" },
|
||||
{ "code": -255, "label": ".org" },
|
||||
{ "code": -255, "label": ".net" }
|
||||
]
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,109 @@
|
||||
{
|
||||
"type": "characters/extended_popups",
|
||||
"name": "pt-BR",
|
||||
"authors": [ "rickym7" ],
|
||||
"mapping": {
|
||||
"all": {
|
||||
"a": {
|
||||
"relevant": [
|
||||
{ "code": 228, "label": "ä" },
|
||||
{ "code": 229, "label": "å" },
|
||||
{ "code": 230, "label": "æ" },
|
||||
{ "code": 170, "label": "ª" },
|
||||
{ "code": 225, "label": "á" },
|
||||
{ "code": 227, "label": "ã" },
|
||||
{ "code": 224, "label": "à" },
|
||||
{ "code": 226, "label": "â" }
|
||||
]
|
||||
},
|
||||
"c": {
|
||||
"relevant": [
|
||||
{ "code": 269, "label": "č" },
|
||||
{ "code": 231, "label": "ç" },
|
||||
{ "code": 263, "label": "ć" }
|
||||
]
|
||||
},
|
||||
"e": {
|
||||
"relevant": [
|
||||
{ "code": 275, "label": "ē" },
|
||||
{ "code": 281, "label": "ę" },
|
||||
{ "code": 279, "label": "ė" },
|
||||
{ "code": 235, "label": "ë" },
|
||||
{ "code": 234, "label": "ê" },
|
||||
{ "code": 233, "label": "é" },
|
||||
{ "code": 232, "label": "è" }
|
||||
]
|
||||
},
|
||||
"i": {
|
||||
"relevant": [
|
||||
{ "code": 299, "label": "ī" },
|
||||
{ "code": 239, "label": "ï" },
|
||||
{ "code": 303, "label": "į" },
|
||||
{ "code": 236, "label": "ì" },
|
||||
{ "code": 238, "label": "î" },
|
||||
{ "code": 237, "label": "í" }
|
||||
]
|
||||
},
|
||||
"n": {
|
||||
"relevant": [
|
||||
{ "code": 241, "label": "ñ" },
|
||||
{ "code": 324, "label": "ń" }
|
||||
]
|
||||
},
|
||||
"o": {
|
||||
"relevant": [
|
||||
{ "code": 186, "label": "º" },
|
||||
{ "code": 333, "label": "ō" },
|
||||
{ "code": 248, "label": "ø" },
|
||||
{ "code": 339, "label": "œ" },
|
||||
{ "code": 246, "label": "ö" },
|
||||
{ "code": 242, "label": "ò" },
|
||||
{ "code": 244, "label": "ô" },
|
||||
{ "code": 245, "label": "õ" },
|
||||
{ "code": 243, "label": "ó" }
|
||||
]
|
||||
},
|
||||
"u": {
|
||||
"relevant": [
|
||||
{ "code": 363, "label": "ū" },
|
||||
{ "code": 249, "label": "ù" },
|
||||
{ "code": 251, "label": "û" },
|
||||
{ "code": 252, "label": "ü" },
|
||||
{ "code": 250, "label": "ú" }
|
||||
]
|
||||
},
|
||||
"~right": {
|
||||
"main": { "code": 44, "label": "," },
|
||||
"relevant": [
|
||||
{ "code": 38, "label": "&" },
|
||||
{ "code": 37, "label": "%" },
|
||||
{ "code": 43, "label": "+" },
|
||||
{ "code": 34, "label": "\"" },
|
||||
{ "code": 45, "label": "-" },
|
||||
{ "code": 58, "label": ":" },
|
||||
{ "code": 39, "label": "'" },
|
||||
{ "code": 64, "label": "@" },
|
||||
{ "code": 59, "label": ";" },
|
||||
{ "code": 47, "label": "/" },
|
||||
{ "code": 40, "label": "(" },
|
||||
{ "code": 41, "label": ")" },
|
||||
{ "code": 35, "label": "#" },
|
||||
{ "code": 33, "label": "!" },
|
||||
{ "code": 63, "label": "?" }
|
||||
]
|
||||
}
|
||||
},
|
||||
"uri": {
|
||||
"~right": {
|
||||
"main": { "code": -255, "label": ".com" },
|
||||
"relevant": [
|
||||
{ "code": -255, "label": ".gov" },
|
||||
{ "code": -255, "label": ".edu" },
|
||||
{ "code": -255, "label": ".br" },
|
||||
{ "code": -255, "label": ".org" },
|
||||
{ "code": -255, "label": ".net" }
|
||||
]
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,61 @@
|
||||
{
|
||||
"type": "characters/extended_popups",
|
||||
"name": "sr",
|
||||
"authors": [ "hedidnothingwrong", "GrbavaCigla" ],
|
||||
"mapping": {
|
||||
"all": {
|
||||
"c": {
|
||||
"relevant": [
|
||||
{ "code": 269, "label": "č" },
|
||||
{ "code": 263, "label": "ć" }
|
||||
]
|
||||
},
|
||||
"d": {
|
||||
"relevant": [
|
||||
{ "code": 273, "label": "đ" }
|
||||
]
|
||||
},
|
||||
"s": {
|
||||
"relevant": [
|
||||
{ "code": 353, "label": "š" }
|
||||
]
|
||||
},
|
||||
"z": {
|
||||
"relevant": [
|
||||
{ "code": 382, "label": "ž" }
|
||||
]
|
||||
},
|
||||
"~right": {
|
||||
"main": { "code": 44, "label": "," },
|
||||
"relevant": [
|
||||
{ "code": 38, "label": "&" },
|
||||
{ "code": 37, "label": "%" },
|
||||
{ "code": 43, "label": "+" },
|
||||
{ "code": 34, "label": "\"" },
|
||||
{ "code": 45, "label": "-" },
|
||||
{ "code": 58, "label": ":" },
|
||||
{ "code": 39, "label": "'" },
|
||||
{ "code": 64, "label": "@" },
|
||||
{ "code": 59, "label": ";" },
|
||||
{ "code": 47, "label": "/" },
|
||||
{ "code": 40, "label": "(" },
|
||||
{ "code": 41, "label": ")" },
|
||||
{ "code": 35, "label": "#" },
|
||||
{ "code": 33, "label": "!" },
|
||||
{ "code": 63, "label": "?" }
|
||||
]
|
||||
}
|
||||
},
|
||||
"uri": {
|
||||
"~right": {
|
||||
"main": { "code": -255, "label": ".com" },
|
||||
"relevant": [
|
||||
{ "code": -255, "label": ".eu" },
|
||||
{ "code": -255, "label": ".rs" },
|
||||
{ "code": -255, "label": ".org" },
|
||||
{ "code": -255, "label": ".net" }
|
||||
]
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,78 @@
|
||||
{
|
||||
"type": "characters/extended_popups",
|
||||
"name": "tr",
|
||||
"authors": [ "kisekinopureya" ],
|
||||
"mapping": {
|
||||
"all": {
|
||||
"a": {
|
||||
"relevant": [
|
||||
{ "code": 226, "label": "â" }
|
||||
]
|
||||
},
|
||||
"c": {
|
||||
"relevant": [
|
||||
{ "code": 231, "label": "ç" }
|
||||
]
|
||||
},
|
||||
"g": {
|
||||
"relevant": [
|
||||
{ "code": 287, "label": "ğ" }
|
||||
]
|
||||
},
|
||||
"i": {
|
||||
"relevant": [
|
||||
{ "code": 238, "label": "î" },
|
||||
{ "code": 305, "label": "ı" }
|
||||
]
|
||||
},
|
||||
"o": {
|
||||
"relevant": [
|
||||
{ "code": 246, "label": "ö" }
|
||||
]
|
||||
},
|
||||
"s": {
|
||||
"relevant": [
|
||||
{ "code": 351, "label": "ş" }
|
||||
]
|
||||
},
|
||||
"u": {
|
||||
"relevant": [
|
||||
{ "code": 252, "label": "ü" },
|
||||
{ "code": 251, "label": "û" }
|
||||
]
|
||||
},
|
||||
"~right": {
|
||||
"main": { "code": 44, "label": "," },
|
||||
"relevant": [
|
||||
{ "code": 38, "label": "&" },
|
||||
{ "code": 37, "label": "%" },
|
||||
{ "code": 43, "label": "+" },
|
||||
{ "code": 34, "label": "\"" },
|
||||
{ "code": 45, "label": "-" },
|
||||
{ "code": 58, "label": ":" },
|
||||
{ "code": 39, "label": "'" },
|
||||
{ "code": 64, "label": "@" },
|
||||
{ "code": 59, "label": ";" },
|
||||
{ "code": 47, "label": "/" },
|
||||
{ "code": 40, "label": "(" },
|
||||
{ "code": 41, "label": ")" },
|
||||
{ "code": 35, "label": "#" },
|
||||
{ "code": 33, "label": "!" },
|
||||
{ "code": 63, "label": "?" }
|
||||
]
|
||||
}
|
||||
},
|
||||
"uri": {
|
||||
"~right": {
|
||||
"main": { "code": -255, "label": ".com" },
|
||||
"relevant": [
|
||||
{ "code": -255, "label": ".gov" },
|
||||
{ "code": -255, "label": ".edu" },
|
||||
{ "code": -255, "label": ".tr" },
|
||||
{ "code": -255, "label": ".org" },
|
||||
{ "code": -255, "label": ".net" }
|
||||
]
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
53
app/src/main/assets/ime/text/characters/hebrew.json
Normal file
53
app/src/main/assets/ime/text/characters/hebrew.json
Normal file
@@ -0,0 +1,53 @@
|
||||
{
|
||||
"type": "characters",
|
||||
"name": "hebrew",
|
||||
"authors": [ "Antony" ],
|
||||
"direction": "rtl",
|
||||
"modifier": "hebrew",
|
||||
"arrangement": [
|
||||
[
|
||||
{ "code": 39, "label": "'", "popup": {
|
||||
"relevant": [
|
||||
{ "code": 34, "label": "\"" },
|
||||
{ "code": 96, "label": "`" }
|
||||
]
|
||||
} },
|
||||
{ "code": 45, "label": "-", "popup": {
|
||||
"relevant": [
|
||||
{ "code": 95, "label": "_" }
|
||||
]
|
||||
} },
|
||||
{ "code": 1511, "label": "ק" },
|
||||
{ "code": 1512, "label": "ר" },
|
||||
{ "code": 1488, "label": "א" },
|
||||
{ "code": 1496, "label": "ט" },
|
||||
{ "code": 1493, "label": "ו" },
|
||||
{ "code": 1503, "label": "ן" },
|
||||
{ "code": 1501, "label": "ם" },
|
||||
{ "code": 1508, "label": "פ" }
|
||||
],
|
||||
[
|
||||
{ "code": 1513, "label": "ף" },
|
||||
{ "code": 1491, "label": "ך" },
|
||||
{ "code": 1490, "label": "ל" },
|
||||
{ "code": 1499, "label": "ח" },
|
||||
{ "code": 1506, "label": "י" },
|
||||
{ "code": 1497, "label": "ע" },
|
||||
{ "code": 1495, "label": "כ" },
|
||||
{ "code": 1500, "label": "ג" },
|
||||
{ "code": 1498, "label": "ד" },
|
||||
{ "code": 1507, "label": "ש" }
|
||||
],
|
||||
[
|
||||
{ "code": 1494, "label": "ץ" },
|
||||
{ "code": 1505, "label": "ת" },
|
||||
{ "code": 1489, "label": "צ" },
|
||||
{ "code": 1492, "label": "מ" },
|
||||
{ "code": 1504, "label": "נ" },
|
||||
{ "code": 1502, "label": "ה" },
|
||||
{ "code": 1510, "label": "ב" },
|
||||
{ "code": 1514, "label": "ס" },
|
||||
{ "code": 1509, "label": "ז" }
|
||||
]
|
||||
]
|
||||
}
|
||||
57
app/src/main/assets/ime/text/characters/kurdish.json
Normal file
57
app/src/main/assets/ime/text/characters/kurdish.json
Normal file
@@ -0,0 +1,57 @@
|
||||
{
|
||||
"type": "characters",
|
||||
"name": "kurdish",
|
||||
"authors": [ "GoRaN" ],
|
||||
"direction": "rtl",
|
||||
"modifier": "kurdish",
|
||||
"arrangement": [
|
||||
[
|
||||
{ "code": 1602, "label": "ق", "popup": {
|
||||
"main": { "code": 1647, "label": "ٯ" }
|
||||
} },
|
||||
{ "code": 1608, "label": "و", "popup": {
|
||||
"main": { "code": -255, "label": "وو" }
|
||||
} },
|
||||
{ "code": 1749, "label": "ﻪ", "popup": {
|
||||
"main": { "code": 1577, "label": "ة" }
|
||||
} },
|
||||
{ "code": 1585, "label": "ر" },
|
||||
{ "code": 1578, "label": "ت", "popup": {
|
||||
"main": { "code": 1591, "label": "ط" }
|
||||
} },
|
||||
{ "code": 1740, "label": "ی" },
|
||||
{ "code": 1574, "label": "ﺋ", "popup": {
|
||||
"main": { "code": 1569, "label": "ء" }
|
||||
} },
|
||||
{ "code": 1593, "label": "ع" },
|
||||
{ "code": 1734, "label": "ۆ" },
|
||||
{ "code": 1662, "label": "پ", "popup": {
|
||||
"main": { "code": 1579, "label": "ث" }
|
||||
} }
|
||||
],
|
||||
[
|
||||
{ "code": 1575, "label": "ا" },
|
||||
{ "code": 1587, "label": "س" },
|
||||
{ "code": 1588, "label": "ش" },
|
||||
{ "code": 1583, "label": "د" },
|
||||
{ "code": 1601, "label": "ف" },
|
||||
{ "code": 1607, "label": "ھ" },
|
||||
{ "code": 1688, "label": "ژ" },
|
||||
{ "code": 1604, "label": "ل" },
|
||||
{ "code": 1705, "label": "ک" },
|
||||
{ "code": 1711, "label": "گ" }
|
||||
],
|
||||
[
|
||||
{ "code": 1586, "label": "ز", "popup": {
|
||||
"main": {"code": 1592, "label": "ظ" }
|
||||
} },
|
||||
{ "code": 1582, "label": "خ" },
|
||||
{ "code": 1580, "label": "ج" },
|
||||
{ "code": 1670, "label": "چ" },
|
||||
{ "code": 1581, "label": "ح" },
|
||||
{ "code": 1576, "label": "ب" },
|
||||
{ "code": 1606, "label": "ن" },
|
||||
{ "code": 1605, "label": "م" }
|
||||
]
|
||||
]
|
||||
}
|
||||
27
app/src/main/assets/ime/text/characters/mod/hebrew.json
Normal file
27
app/src/main/assets/ime/text/characters/mod/hebrew.json
Normal file
@@ -0,0 +1,27 @@
|
||||
{
|
||||
"type": "characters/mod",
|
||||
"name": "hebrew",
|
||||
"authors": [ "Antony" ],
|
||||
"direction": "rtl",
|
||||
"arrangement": [
|
||||
[
|
||||
{ "code": 0, "type": "placeholder" },
|
||||
{ "code": -5, "label": "delete", "type": "enter_editing" }
|
||||
],
|
||||
[
|
||||
{ "code": -202, "label": "view_symbols", "type": "system_gui" },
|
||||
{ "code": 64, "label": "@", "groupId": 1, "variation": "email_address" },
|
||||
{ "code": 44, "label": ",", "groupId": 1, "variation": "normal" },
|
||||
{ "code": 44, "label": ",", "groupId": 1, "variation": "password" },
|
||||
{ "code": 47, "label": "/", "groupId": 1, "variation": "uri" },
|
||||
{ "code": -210, "label": "language_switch", "type": "system_gui" },
|
||||
{ "code": -213, "label": "switch_to_media_context", "type": "system_gui" },
|
||||
{ "code": 32, "label": "space" },
|
||||
{ "code": 46, "label": ".", "groupId": 2, "variation": "email_address" },
|
||||
{ "code": 46, "label": ".", "groupId": 2, "variation": "normal" },
|
||||
{ "code": 46, "label": ".", "groupId": 2, "variation": "password" },
|
||||
{ "code": 46, "label": ".", "groupId": 2, "variation": "uri" },
|
||||
{ "code": 10, "label": "enter", "groupId": 3, "type": "enter_editing" }
|
||||
]
|
||||
]
|
||||
}
|
||||
27
app/src/main/assets/ime/text/characters/mod/kurdish.json
Normal file
27
app/src/main/assets/ime/text/characters/mod/kurdish.json
Normal file
@@ -0,0 +1,27 @@
|
||||
{
|
||||
"type": "characters/mod",
|
||||
"name": "kurdish",
|
||||
"authors": [ "GoRaN" ],
|
||||
"direction": "rtl",
|
||||
"arrangement": [
|
||||
[
|
||||
{ "code": 0, "type": "placeholder" },
|
||||
{ "code": -5, "label": "delete", "type": "enter_editing" }
|
||||
],
|
||||
[
|
||||
{ "code": -202, "label": "view_symbols", "type": "system_gui" },
|
||||
{ "code": 64, "label": "@", "groupId": 1, "variation": "email_address" },
|
||||
{ "code": 1567, "label": "؟", "groupId": 1, "variation": "normal" },
|
||||
{ "code": 1548, "label": "،", "groupId": 1, "variation": "password" },
|
||||
{ "code": 47, "label": "/", "groupId": 1, "variation": "uri" },
|
||||
{ "code": -210, "label": "language_switch", "type": "system_gui" },
|
||||
{ "code": -213, "label": "switch_to_media_context", "type": "system_gui" },
|
||||
{ "code": 32, "label": " " },
|
||||
{ "code": 46, "label": ".", "groupId": 2, "variation": "email_address" },
|
||||
{ "code": 46, "label": ".", "groupId": 2, "variation": "normal" },
|
||||
{ "code": 46, "label": ".", "groupId": 2, "variation": "password" },
|
||||
{ "code": 46, "label": ".", "groupId": 2, "variation": "uri" },
|
||||
{ "code": 10, "label": "enter", "groupId": 3, "type": "enter_editing" }
|
||||
]
|
||||
]
|
||||
}
|
||||
@@ -0,0 +1,44 @@
|
||||
{
|
||||
"type": "characters",
|
||||
"name": "serbian_cyrillic",
|
||||
"authors": ["GrbavaCigla"],
|
||||
"direction": "ltr",
|
||||
"arrangement": [
|
||||
[
|
||||
{ "code": 1113, "label": "љ" },
|
||||
{ "code": 1114, "label": "њ" },
|
||||
{ "code": 1077, "label": "е" },
|
||||
{ "code": 1088, "label": "р" },
|
||||
{ "code": 1090, "label": "т" },
|
||||
{ "code": 1079, "label": "з" },
|
||||
{ "code": 1091, "label": "у" },
|
||||
{ "code": 1080, "label": "и" },
|
||||
{ "code": 1086, "label": "о" },
|
||||
{ "code": 1087, "label": "п" },
|
||||
{ "code": 1096, "label": "ш" }
|
||||
],
|
||||
[
|
||||
{ "code": 1072, "label": "а" },
|
||||
{ "code": 1089, "label": "с" },
|
||||
{ "code": 1076, "label": "д" },
|
||||
{ "code": 1092, "label": "ф" },
|
||||
{ "code": 1075, "label": "г" },
|
||||
{ "code": 1093, "label": "х" },
|
||||
{ "code": 1112, "label": "ј" },
|
||||
{ "code": 1082, "label": "к" },
|
||||
{ "code": 1083, "label": "л" },
|
||||
{ "code": 1095, "label": "ч" },
|
||||
{ "code": 1115, "label": "ћ" }
|
||||
],
|
||||
[
|
||||
{ "code": 1119, "label": "џ" },
|
||||
{ "code": 1094, "label": "ц" },
|
||||
{ "code": 1074, "label": "в" },
|
||||
{ "code": 1073, "label": "б" },
|
||||
{ "code": 1085, "label": "н" },
|
||||
{ "code": 1084, "label": "м" },
|
||||
{ "code": 1106, "label": "ђ" },
|
||||
{ "code": 1078, "label": "ж" }
|
||||
]
|
||||
]
|
||||
}
|
||||
45
app/src/main/assets/ime/text/characters/serbian_latin.json
Normal file
45
app/src/main/assets/ime/text/characters/serbian_latin.json
Normal file
@@ -0,0 +1,45 @@
|
||||
{
|
||||
"type": "characters",
|
||||
"name": "serbian_latin",
|
||||
"authors": ["GrbavaCigla"],
|
||||
"direction": "ltr",
|
||||
"arrangement": [
|
||||
[
|
||||
{ "code": 113, "label": "q" },
|
||||
{ "code": 119, "label": "w" },
|
||||
{ "code": 101, "label": "e" },
|
||||
{ "code": 114, "label": "r" },
|
||||
{ "code": 116, "label": "t" },
|
||||
{ "code": 122, "label": "z" },
|
||||
{ "code": 117, "label": "u" },
|
||||
{ "code": 105, "label": "i" },
|
||||
{ "code": 111, "label": "o" },
|
||||
{ "code": 112, "label": "p" },
|
||||
{ "code": 353, "label": "š" }
|
||||
],
|
||||
[
|
||||
{ "code": 97, "label": "a" },
|
||||
{ "code": 115, "label": "s" },
|
||||
{ "code": 100, "label": "d" },
|
||||
{ "code": 102, "label": "f" },
|
||||
{ "code": 103, "label": "g" },
|
||||
{ "code": 104, "label": "h" },
|
||||
{ "code": 106, "label": "j" },
|
||||
{ "code": 107, "label": "k" },
|
||||
{ "code": 108, "label": "l" },
|
||||
{ "code": 269, "label": "č" },
|
||||
{ "code": 263, "label": "ć" }
|
||||
],
|
||||
[
|
||||
{ "code": 121, "label": "y" },
|
||||
{ "code": 120, "label": "x" },
|
||||
{ "code": 99, "label": "c" },
|
||||
{ "code": 118, "label": "v" },
|
||||
{ "code": 98, "label": "b" },
|
||||
{ "code": 110, "label": "n" },
|
||||
{ "code": 109, "label": "m" },
|
||||
{ "code": 273, "label": "đ" },
|
||||
{ "code": 382, "label": "ž" }
|
||||
]
|
||||
]
|
||||
}
|
||||
@@ -11,10 +11,24 @@
|
||||
],
|
||||
[
|
||||
{ "code": -201, "label": "view_characters", "type": "system_gui" },
|
||||
{ "code": 60, "label": "<" },
|
||||
{ "code": 60, "label": "<", "popup": {
|
||||
"relevant": [
|
||||
{ "code": 171, "label": "«" },
|
||||
{ "code": 8804, "label": "≤" },
|
||||
{ "code": 8249, "label": "‹" },
|
||||
{ "code":10216, "label": "⟨" }
|
||||
]
|
||||
} },
|
||||
{ "code": -205, "label": "view_numeric_advanced", "type": "system_gui" },
|
||||
{ "code": 32, "label": "space" },
|
||||
{ "code": 62, "label": ">" },
|
||||
{ "code": 62, "label": ">", "popup": {
|
||||
"relevant": [
|
||||
{ "code":10217, "label": "⟩" },
|
||||
{ "code": 8250, "label": "›" },
|
||||
{ "code": 8805, "label": "≥" },
|
||||
{ "code": 187, "label": "»" }
|
||||
]
|
||||
} },
|
||||
{ "code": 10, "label": "enter", "groupId": 3, "type": "enter_editing" }
|
||||
]
|
||||
]
|
||||
|
||||
@@ -21,6 +21,9 @@
|
||||
{ "code": 960, "label": "π", "popup": {
|
||||
"main": { "code": 928, "label": "Π" },
|
||||
"relevant": [
|
||||
{ "code": 969, "label": "ω" },
|
||||
{ "code": 945, "label": "α" },
|
||||
{ "code": 946, "label": "β" },
|
||||
{ "code": 937, "label": "Ω" },
|
||||
{ "code": 956, "label": "μ" }
|
||||
]
|
||||
|
||||
73
app/src/main/assets/ime/theme/floris_black.json
Normal file
73
app/src/main/assets/ime/theme/floris_black.json
Normal file
@@ -0,0 +1,73 @@
|
||||
{
|
||||
"$type": "dev.patrickgold.florisboard.ime.theme.Theme",
|
||||
"name": "floris_black",
|
||||
"label": "Floris Black",
|
||||
"authors": [ "serebit" ],
|
||||
"isNightTheme": true,
|
||||
"attributes": {
|
||||
"window": {
|
||||
"colorPrimary": "#388E3C",
|
||||
"colorPrimaryDark": "#306D32",
|
||||
"colorAccent": "#FF9800",
|
||||
"navigationBarColor": "@keyboard/background",
|
||||
"navigationBarLight": "false",
|
||||
"semiTransparentColor": "#20FFFFFF",
|
||||
"textColor": "#EEEEEE"
|
||||
},
|
||||
"keyboard": {
|
||||
"background": "#000000"
|
||||
},
|
||||
"key": {
|
||||
"background": "#212121",
|
||||
"backgroundPressed": "#3D3D3D",
|
||||
"foreground": "@window/textColor",
|
||||
"foregroundPressed": "@window/textColor",
|
||||
"showBorder": "true"
|
||||
},
|
||||
"key:enter": {
|
||||
"background": "@window/colorPrimary",
|
||||
"backgroundPressed": "@window/colorPrimaryDark",
|
||||
"foreground": "@window/textColor",
|
||||
"foregroundPressed": "@window/textColor"
|
||||
},
|
||||
"key:shift:capslock": {
|
||||
"foreground": "@window/colorAccent",
|
||||
"foregroundPressed": "@window/colorAccent"
|
||||
},
|
||||
"media": {
|
||||
"foreground": "@window/textColor",
|
||||
"foregroundAlt": "#BDBDBD"
|
||||
},
|
||||
"oneHanded": {
|
||||
"background": "#000000",
|
||||
"foreground": "@window/textColor"
|
||||
},
|
||||
"popup": {
|
||||
"background": "#424242",
|
||||
"backgroundActive": "#707070",
|
||||
"foreground": "@window/textColor"
|
||||
},
|
||||
"privateMode": {
|
||||
"background": "#7800BF",
|
||||
"foreground": "@window/textColor"
|
||||
},
|
||||
"smartbar": {
|
||||
"background": "transparent",
|
||||
"foreground": "@window/textColor",
|
||||
"foregroundAlt": "#73FFFFFF"
|
||||
},
|
||||
"smartbarButton": {
|
||||
"background": "@key/background",
|
||||
"foreground": "@key/foreground"
|
||||
},
|
||||
"extractEditLayout": {
|
||||
"background": "#282828",
|
||||
"foreground": "@window/textColor",
|
||||
"foregroundAlt": "#73FFFFFF"
|
||||
},
|
||||
"extractActionButton": {
|
||||
"background": "@smartbarButton/background",
|
||||
"foreground": "@smartbarButton/foreground"
|
||||
}
|
||||
}
|
||||
}
|
||||
76
app/src/main/assets/ime/theme/floris_black_borderless.json
Normal file
76
app/src/main/assets/ime/theme/floris_black_borderless.json
Normal file
@@ -0,0 +1,76 @@
|
||||
{
|
||||
"$type": "dev.patrickgold.florisboard.ime.theme.Theme",
|
||||
"name": "floris_black_borderless",
|
||||
"label": "Floris Black Borderless",
|
||||
"authors": [ "serebit" ],
|
||||
"isNightTheme": true,
|
||||
"attributes": {
|
||||
"window": {
|
||||
"colorPrimary": "#388E3C",
|
||||
"colorPrimaryDark": "#306D32",
|
||||
"colorAccent": "#FF9800",
|
||||
"navigationBarColor": "@keyboard/background",
|
||||
"navigationBarLight": "false",
|
||||
"semiTransparentColor": "#20FFFFFF",
|
||||
"textColor": "#EEEEEE"
|
||||
},
|
||||
"keyboard": {
|
||||
"background": "#000000"
|
||||
},
|
||||
"key": {
|
||||
"background": "transparent",
|
||||
"backgroundPressed": "#7F616161",
|
||||
"foreground": "@window/textColor",
|
||||
"foregroundPressed": "@window/textColor",
|
||||
"showBorder": "false"
|
||||
},
|
||||
"key:enter": {
|
||||
"background": "@window/colorPrimary",
|
||||
"backgroundPressed": "@window/colorPrimaryDark",
|
||||
"foreground": "@window/textColor",
|
||||
"foregroundPressed": "@window/textColor"
|
||||
},
|
||||
"key:shift:capslock": {
|
||||
"foreground": "@window/colorAccent",
|
||||
"foregroundPressed": "@window/colorAccent"
|
||||
},
|
||||
"key:space": {
|
||||
"background": "#46616161"
|
||||
},
|
||||
"media": {
|
||||
"foreground": "@window/textColor",
|
||||
"foregroundAlt": "#BDBDBD"
|
||||
},
|
||||
"oneHanded": {
|
||||
"background": "#000000",
|
||||
"foreground": "@window/textColor"
|
||||
},
|
||||
"popup": {
|
||||
"background": "#363636",
|
||||
"backgroundActive": "#5F5F5F",
|
||||
"foreground": "@window/textColor"
|
||||
},
|
||||
"privateMode": {
|
||||
"background": "#7800BF",
|
||||
"foreground": "@window/textColor"
|
||||
},
|
||||
"smartbar": {
|
||||
"background": "transparent",
|
||||
"foreground": "@window/textColor",
|
||||
"foregroundAlt": "#73FFFFFF"
|
||||
},
|
||||
"smartbarButton": {
|
||||
"background": "#212121",
|
||||
"foreground": "@window/textColor"
|
||||
},
|
||||
"extractEditLayout": {
|
||||
"background": "#282828",
|
||||
"foreground": "@window/textColor",
|
||||
"foregroundAlt": "#73FFFFFF"
|
||||
},
|
||||
"extractActionButton": {
|
||||
"background": "@smartbarButton/background",
|
||||
"foreground": "@smartbarButton/foreground"
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -59,6 +59,15 @@
|
||||
"smartbarButton": {
|
||||
"background": "@key/background",
|
||||
"foreground": "@key/foreground"
|
||||
},
|
||||
"extractEditLayout": {
|
||||
"background": "#E8E8E8",
|
||||
"foreground": "@window/textColor",
|
||||
"foregroundAlt": "#8A8A8A"
|
||||
},
|
||||
"extractActionButton": {
|
||||
"background": "@smartbarButton/background",
|
||||
"foreground": "@smartbarButton/foreground"
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -63,6 +63,15 @@
|
||||
"smartbarButton": {
|
||||
"background": "#FFFFFF",
|
||||
"foreground": "@window/textColor"
|
||||
},
|
||||
"extractEditLayout": {
|
||||
"background": "#E8E8E8",
|
||||
"foreground": "@window/textColor",
|
||||
"foregroundAlt": "#8A8A8A"
|
||||
},
|
||||
"extractActionButton": {
|
||||
"background": "@smartbarButton/background",
|
||||
"foreground": "@smartbarButton/foreground"
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -59,6 +59,15 @@
|
||||
"smartbarButton": {
|
||||
"background": "@key/background",
|
||||
"foreground": "@key/foreground"
|
||||
},
|
||||
"extractEditLayout": {
|
||||
"background": "#282828",
|
||||
"foreground": "@window/textColor",
|
||||
"foregroundAlt": "#73FFFFFF"
|
||||
},
|
||||
"extractActionButton": {
|
||||
"background": "@smartbarButton/background",
|
||||
"foreground": "@smartbarButton/foreground"
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -63,6 +63,15 @@
|
||||
"smartbarButton": {
|
||||
"background": "#424242",
|
||||
"foreground": "@window/textColor"
|
||||
},
|
||||
"extractEditLayout": {
|
||||
"background": "#282828",
|
||||
"foreground": "@window/textColor",
|
||||
"foregroundAlt": "#73FFFFFF"
|
||||
},
|
||||
"extractActionButton": {
|
||||
"background": "@smartbarButton/background",
|
||||
"foreground": "@smartbarButton/foreground"
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
64
app/src/main/assets/ime/theme/gboard_day.json
Normal file
64
app/src/main/assets/ime/theme/gboard_day.json
Normal file
@@ -0,0 +1,64 @@
|
||||
{
|
||||
"$type": "dev.patrickgold.florisboard.ime.theme.Theme",
|
||||
"name": "gboard_day",
|
||||
"label": "Gboard Day",
|
||||
"authors": [ "patrickgold", "itskareem" ],
|
||||
"isNightTheme": false,
|
||||
"attributes": {
|
||||
"window": {
|
||||
"colorPrimary": "#0479ed",
|
||||
"colorPrimaryDark": "#0467c9",
|
||||
"colorAccent": "#FF9800",
|
||||
"navigationBarColor": "@keyboard/background",
|
||||
"navigationBarLight": "true",
|
||||
"semiTransparentColor": "#20000000",
|
||||
"textColor": "#000000"
|
||||
},
|
||||
"keyboard": {
|
||||
"background": "#D1D6DC"
|
||||
},
|
||||
"key": {
|
||||
"background": "#FCFFFF",
|
||||
"backgroundPressed": "#F5F5F5",
|
||||
"foreground": "@window/textColor",
|
||||
"foregroundPressed": "@window/textColor",
|
||||
"showBorder": "true"
|
||||
},
|
||||
"key:enter": {
|
||||
"background": "@window/colorPrimary",
|
||||
"backgroundPressed": "@window/colorPrimaryDark",
|
||||
"foreground": "#FFFFFF",
|
||||
"foregroundPressed": "#FFFFFF"
|
||||
},
|
||||
"key:shift:capslock": {
|
||||
"foreground": "@window/colorAccent",
|
||||
"foregroundPressed": "@window/colorAccent"
|
||||
},
|
||||
"media": {
|
||||
"foreground": "@window/textColor",
|
||||
"foregroundAlt": "#757575"
|
||||
},
|
||||
"oneHanded": {
|
||||
"background": "@keyboard/background",
|
||||
"foreground": "#424242"
|
||||
},
|
||||
"popup": {
|
||||
"background": "#EEEEEE",
|
||||
"backgroundActive": "#BDBDBD",
|
||||
"foreground": "@window/textColor"
|
||||
},
|
||||
"privateMode": {
|
||||
"background": "#A000FF",
|
||||
"foreground": "#FFFFFF"
|
||||
},
|
||||
"smartbar": {
|
||||
"background": "@keyboard/background",
|
||||
"foreground": "@window/textColor",
|
||||
"foregroundAlt": "#8A8A8A"
|
||||
},
|
||||
"smartbarButton": {
|
||||
"background": "@key/background",
|
||||
"foreground": "@key/foreground"
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -23,32 +23,37 @@ import android.content.Intent
|
||||
import android.content.res.ColorStateList
|
||||
import android.content.res.Configuration
|
||||
import android.graphics.Color
|
||||
import android.inputmethodservice.ExtractEditText
|
||||
import android.inputmethodservice.InputMethodService
|
||||
import android.media.AudioManager
|
||||
import android.os.*
|
||||
import android.provider.Settings
|
||||
import android.view.Gravity
|
||||
import android.view.View
|
||||
import android.view.WindowManager
|
||||
import android.view.*
|
||||
import android.view.inputmethod.EditorInfo
|
||||
import android.view.inputmethod.InputConnection
|
||||
import android.view.inputmethod.InputMethodManager
|
||||
import android.widget.Button
|
||||
import android.widget.FrameLayout
|
||||
import androidx.core.content.ContextCompat
|
||||
import androidx.core.graphics.drawable.DrawableCompat
|
||||
import com.squareup.moshi.Json
|
||||
import dev.patrickgold.florisboard.BuildConfig
|
||||
import dev.patrickgold.florisboard.R
|
||||
import dev.patrickgold.florisboard.ime.media.MediaInputManager
|
||||
import dev.patrickgold.florisboard.ime.popup.PopupLayerView
|
||||
import dev.patrickgold.florisboard.ime.text.TextInputManager
|
||||
import dev.patrickgold.florisboard.ime.landscapeinput.LandscapeInputUiMode
|
||||
import dev.patrickgold.florisboard.ime.text.gestures.SwipeAction
|
||||
import dev.patrickgold.florisboard.ime.text.key.KeyCode
|
||||
import dev.patrickgold.florisboard.ime.text.key.KeyData
|
||||
import dev.patrickgold.florisboard.ime.text.keyboard.KeyboardMode
|
||||
import dev.patrickgold.florisboard.ime.theme.Theme
|
||||
import dev.patrickgold.florisboard.ime.theme.ThemeManager
|
||||
import dev.patrickgold.florisboard.settings.SettingsMainActivity
|
||||
import dev.patrickgold.florisboard.setup.SetupActivity
|
||||
import dev.patrickgold.florisboard.util.*
|
||||
import timber.log.Timber
|
||||
import java.lang.ref.WeakReference
|
||||
import java.util.concurrent.CopyOnWriteArrayList
|
||||
|
||||
/**
|
||||
* Variable which holds the current [FlorisBoard] instance. To get this instance from another
|
||||
@@ -67,12 +72,13 @@ class FlorisBoard : InputMethodService(), ClipboardManager.OnPrimaryClipChangedL
|
||||
|
||||
val context: Context
|
||||
get() = inputWindowView?.context ?: this
|
||||
private var extractEditLayout: WeakReference<ViewGroup?> = WeakReference(null)
|
||||
var inputView: InputView? = null
|
||||
private set
|
||||
private var inputWindowView: InputWindowView? = null
|
||||
var popupLayerView: PopupLayerView? = null
|
||||
private set
|
||||
private var inputWindowView: InputWindowView? = null
|
||||
private var eventListeners: MutableList<WeakReference<EventListener?>?> = mutableListOf()
|
||||
private var eventListeners: CopyOnWriteArrayList<EventListener> = CopyOnWriteArrayList()
|
||||
|
||||
private var audioManager: AudioManager? = null
|
||||
private var imeManager:InputMethodManager? = null
|
||||
@@ -154,7 +160,7 @@ class FlorisBoard : InputMethodService(), ClipboardManager.OnPrimaryClipChangedL
|
||||
}
|
||||
|
||||
override fun onCreate() {
|
||||
if (BuildConfig.DEBUG) {
|
||||
/*if (BuildConfig.DEBUG) {
|
||||
StrictMode.setThreadPolicy(
|
||||
StrictMode.ThreadPolicy.Builder()
|
||||
.detectDiskReads()
|
||||
@@ -171,7 +177,7 @@ class FlorisBoard : InputMethodService(), ClipboardManager.OnPrimaryClipChangedL
|
||||
.penaltyDeath()
|
||||
.build()
|
||||
)
|
||||
}
|
||||
}*/
|
||||
Timber.i("onCreate()")
|
||||
|
||||
imeManager = getSystemService(Context.INPUT_METHOD_SERVICE) as InputMethodManager
|
||||
@@ -194,7 +200,7 @@ class FlorisBoard : InputMethodService(), ClipboardManager.OnPrimaryClipChangedL
|
||||
AppVersionUtils.updateVersionOnInstallAndLastUse(this, prefs)
|
||||
|
||||
super.onCreate()
|
||||
eventListeners.toList().forEach { it?.get()?.onCreate() }
|
||||
eventListeners.toList().forEach { it?.onCreate() }
|
||||
}
|
||||
|
||||
@SuppressLint("InflateParams")
|
||||
@@ -204,16 +210,76 @@ class FlorisBoard : InputMethodService(), ClipboardManager.OnPrimaryClipChangedL
|
||||
baseContext.setTheme(currentThemeResId)
|
||||
|
||||
inputWindowView = layoutInflater.inflate(R.layout.florisboard, null) as InputWindowView
|
||||
popupLayerView = inputWindowView?.findViewById(R.id.popup_layer)
|
||||
|
||||
eventListeners.toList().forEach { it?.get()?.onCreateInputView() }
|
||||
eventListeners.toList().forEach { it?.onCreateInputView() }
|
||||
|
||||
return inputWindowView
|
||||
}
|
||||
|
||||
/**
|
||||
* Disable the default candidates view.
|
||||
*/
|
||||
override fun onCreateCandidatesView(): View? {
|
||||
return null
|
||||
}
|
||||
|
||||
@SuppressLint("InflateParams")
|
||||
override fun onCreateExtractTextView(): View? {
|
||||
val eel = super.onCreateExtractTextView()
|
||||
if (eel !is ViewGroup) {
|
||||
return null
|
||||
}
|
||||
extractEditLayout = WeakReference(eel)
|
||||
eel.viewTreeObserver.addOnGlobalLayoutListener(object : ViewTreeObserver.OnGlobalLayoutListener {
|
||||
override fun onGlobalLayout() {
|
||||
extractEditLayout.get()?.let { eel ->
|
||||
eel.viewTreeObserver.removeOnGlobalLayoutListener(this)
|
||||
eel.layoutParams = FrameLayout.LayoutParams(
|
||||
FrameLayout.LayoutParams.MATCH_PARENT, FrameLayout.LayoutParams.MATCH_PARENT
|
||||
).also {
|
||||
it.setMargins(0, 0, 0, 0)
|
||||
}
|
||||
}
|
||||
}
|
||||
})
|
||||
return eel
|
||||
}
|
||||
|
||||
override fun onEvaluateFullscreenMode(): Boolean {
|
||||
return resources?.configuration?.let { config ->
|
||||
if (config.orientation != Configuration.ORIENTATION_LANDSCAPE) {
|
||||
false
|
||||
} else {
|
||||
when (prefs.keyboard.landscapeInputUiMode) {
|
||||
LandscapeInputUiMode.DYNAMICALLY_SHOW -> !activeEditorInstance.imeOptions.flagNoFullscreen && !activeEditorInstance.imeOptions.flagNoExtractUi
|
||||
LandscapeInputUiMode.NEVER_SHOW -> false
|
||||
LandscapeInputUiMode.ALWAYS_SHOW -> true
|
||||
}
|
||||
}
|
||||
} ?: false
|
||||
}
|
||||
|
||||
override fun updateFullscreenMode() {
|
||||
super.updateFullscreenMode()
|
||||
updateSoftInputWindowLayoutParameters()
|
||||
}
|
||||
|
||||
override fun onUpdateExtractingVisibility(ei: EditorInfo?) {
|
||||
isExtractViewShown = !activeEditorInstance.isRawInputEditor && when (prefs.keyboard.landscapeInputUiMode) {
|
||||
LandscapeInputUiMode.DYNAMICALLY_SHOW -> !activeEditorInstance.imeOptions.flagNoExtractUi
|
||||
LandscapeInputUiMode.NEVER_SHOW -> false
|
||||
LandscapeInputUiMode.ALWAYS_SHOW -> true
|
||||
}
|
||||
}
|
||||
|
||||
fun registerInputView(inputView: InputView) {
|
||||
Timber.i("registerInputView($inputView)")
|
||||
|
||||
window?.window?.findViewById<View>(android.R.id.content)?.let { content ->
|
||||
popupLayerView = PopupLayerView(content.context)
|
||||
if (content is ViewGroup) {
|
||||
content.addView(popupLayerView)
|
||||
}
|
||||
}
|
||||
this.inputView = inputView
|
||||
initializeOneHandedEnvironment()
|
||||
updateSoftInputWindowLayoutParameters()
|
||||
@@ -221,7 +287,7 @@ class FlorisBoard : InputMethodService(), ClipboardManager.OnPrimaryClipChangedL
|
||||
themeManager.notifyCallbackReceivers()
|
||||
setActiveInput(R.id.text_input)
|
||||
|
||||
eventListeners.toList().forEach { it?.get()?.onRegisterInputView(inputView) }
|
||||
eventListeners.toList().forEach { it?.onRegisterInputView(inputView) }
|
||||
}
|
||||
|
||||
override fun onDestroy() {
|
||||
@@ -232,7 +298,7 @@ class FlorisBoard : InputMethodService(), ClipboardManager.OnPrimaryClipChangedL
|
||||
osHandler.removeCallbacksAndMessages(null)
|
||||
florisboardInstance = null
|
||||
|
||||
eventListeners.toList().forEach { it?.get()?.onDestroy() }
|
||||
eventListeners.toList().forEach { it?.onDestroy() }
|
||||
eventListeners.clear()
|
||||
super.onDestroy()
|
||||
}
|
||||
@@ -252,7 +318,7 @@ class FlorisBoard : InputMethodService(), ClipboardManager.OnPrimaryClipChangedL
|
||||
activeEditorInstance = EditorInstance.from(info, this)
|
||||
themeManager.updateRemoteColorValues(activeEditorInstance.packageName)
|
||||
eventListeners.toList().forEach {
|
||||
it?.get()?.onStartInputView(activeEditorInstance, restarting)
|
||||
it?.onStartInputView(activeEditorInstance, restarting)
|
||||
}
|
||||
}
|
||||
|
||||
@@ -264,7 +330,7 @@ class FlorisBoard : InputMethodService(), ClipboardManager.OnPrimaryClipChangedL
|
||||
}
|
||||
|
||||
super.onFinishInputView(finishingInput)
|
||||
eventListeners.toList().forEach { it?.get()?.onFinishInputView(finishingInput) }
|
||||
eventListeners.toList().forEach { it?.onFinishInputView(finishingInput) }
|
||||
}
|
||||
|
||||
override fun onFinishInput() {
|
||||
@@ -290,14 +356,14 @@ class FlorisBoard : InputMethodService(), ClipboardManager.OnPrimaryClipChangedL
|
||||
setActiveInput(R.id.text_input)
|
||||
|
||||
super.onWindowShown()
|
||||
eventListeners.toList().forEach { it?.get()?.onWindowShown() }
|
||||
eventListeners.toList().forEach { it?.onWindowShown() }
|
||||
}
|
||||
|
||||
override fun onWindowHidden() {
|
||||
Timber.i("onWindowHidden()")
|
||||
|
||||
super.onWindowHidden()
|
||||
eventListeners.toList().forEach { it?.get()?.onWindowHidden() }
|
||||
eventListeners.toList().forEach { it?.onWindowHidden() }
|
||||
}
|
||||
|
||||
override fun onConfigurationChanged(newConfig: Configuration) {
|
||||
@@ -325,7 +391,7 @@ class FlorisBoard : InputMethodService(), ClipboardManager.OnPrimaryClipChangedL
|
||||
oldSelStart, oldSelEnd,
|
||||
newSelStart, newSelEnd
|
||||
)
|
||||
eventListeners.toList().forEach { it?.get()?.onUpdateSelection() }
|
||||
eventListeners.toList().forEach { it?.onUpdateSelection() }
|
||||
}
|
||||
|
||||
override fun onThemeUpdated(theme: Theme) {
|
||||
@@ -375,7 +441,36 @@ class FlorisBoard : InputMethodService(), ClipboardManager.OnPrimaryClipChangedL
|
||||
inputView?.oneHandedCtrlCloseStart?.imageTintList = it
|
||||
inputView?.oneHandedCtrlCloseEnd?.imageTintList = it
|
||||
}
|
||||
eventListeners.toList().forEach { it?.get()?.onApplyThemeAttributes() }
|
||||
inputView?.invalidate()
|
||||
|
||||
// Update ExtractTextView theme and attributes
|
||||
extractEditLayout.get()?.let { eel ->
|
||||
val p = resources.getDimension(R.dimen.landscapeInputUi_padding).toInt()
|
||||
eel.setPadding(p, p, 0, p)
|
||||
eel.setBackgroundColor(theme.getAttr(Theme.Attr.EXTRACT_EDIT_LAYOUT_BACKGROUND).toSolidColor().color)
|
||||
eel.findViewById<ExtractEditText>(android.R.id.inputExtractEditText)?.let { eet ->
|
||||
val p2 = resources.getDimension(R.dimen.landscapeInputUi_editText_padding).toInt()
|
||||
eet.setPadding(p2, p2, p2, p2)
|
||||
eet.background = ContextCompat.getDrawable(this, R.drawable.edit_text_background)?.also { d ->
|
||||
DrawableCompat.setTint(d, theme.getAttr(Theme.Attr.WINDOW_COLOR_PRIMARY).toSolidColor().color)
|
||||
}
|
||||
eet.setTextColor(theme.getAttr(Theme.Attr.EXTRACT_EDIT_LAYOUT_FOREGROUND).toSolidColor().color)
|
||||
eet.setHintTextColor(theme.getAttr(Theme.Attr.EXTRACT_EDIT_LAYOUT_FOREGROUND_ALT).toSolidColor().color)
|
||||
eet.highlightColor = theme.getAttr(Theme.Attr.WINDOW_COLOR_PRIMARY).toSolidColor().color
|
||||
}
|
||||
eel.findViewWithType(FrameLayout::class)?.let { fra ->
|
||||
fra.background = null
|
||||
}
|
||||
eel.findViewWithType(Button::class)?.let { btn ->
|
||||
btn.background = ContextCompat.getDrawable(this, R.drawable.shape_rect_rounded)?.also { d ->
|
||||
DrawableCompat.setTint(d, theme.getAttr(Theme.Attr.EXTRACT_ACTION_BUTTON_BACKGROUND).toSolidColor().color)
|
||||
}
|
||||
btn.setTextColor(theme.getAttr(Theme.Attr.EXTRACT_ACTION_BUTTON_FOREGROUND).toSolidColor().color)
|
||||
}
|
||||
eel.invalidate()
|
||||
}
|
||||
|
||||
eventListeners.toList().forEach { it?.onApplyThemeAttributes() }
|
||||
}
|
||||
|
||||
override fun onComputeInsets(outInsets: Insets?) {
|
||||
@@ -393,11 +488,6 @@ class FlorisBoard : InputMethodService(), ClipboardManager.OnPrimaryClipChangedL
|
||||
outInsets?.visibleTopInsets = visibleTopY
|
||||
}
|
||||
|
||||
override fun updateFullscreenMode() {
|
||||
super.updateFullscreenMode()
|
||||
updateSoftInputWindowLayoutParameters()
|
||||
}
|
||||
|
||||
/**
|
||||
* Updates the layout params of the window and input view.
|
||||
*/
|
||||
@@ -477,11 +567,11 @@ class FlorisBoard : InputMethodService(), ClipboardManager.OnPrimaryClipChangedL
|
||||
}
|
||||
|
||||
/**
|
||||
* Hides the IME and launches [SettingsMainActivity].
|
||||
* Hides the IME and launches [SetupActivity].
|
||||
*/
|
||||
fun launchSettings() {
|
||||
requestHideSelf(0)
|
||||
val i = Intent(this, SettingsMainActivity::class.java)
|
||||
val i = Intent(this, SetupActivity::class.java)
|
||||
i.flags = Intent.FLAG_ACTIVITY_NEW_TASK or
|
||||
Intent.FLAG_ACTIVITY_RESET_TASK_IF_NEEDED or
|
||||
Intent.FLAG_ACTIVITY_CLEAR_TOP
|
||||
@@ -501,6 +591,7 @@ class FlorisBoard : InputMethodService(), ClipboardManager.OnPrimaryClipChangedL
|
||||
switchToPreviousInputMethod()
|
||||
} else {
|
||||
window.window?.let { window ->
|
||||
@Suppress("DEPRECATION")
|
||||
imeManager?.switchToLastInputMethod(window.attributes.token)
|
||||
}
|
||||
}
|
||||
@@ -510,6 +601,22 @@ class FlorisBoard : InputMethodService(), ClipboardManager.OnPrimaryClipChangedL
|
||||
}
|
||||
}
|
||||
|
||||
fun switchToNextKeyboard(){
|
||||
try {
|
||||
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.P) {
|
||||
switchToNextInputMethod(false)
|
||||
} else {
|
||||
window.window?.let { window ->
|
||||
@Suppress("DEPRECATION")
|
||||
imeManager?.switchToNextInputMethod(window.attributes.token, false)
|
||||
}
|
||||
}
|
||||
} catch (e: Exception) {
|
||||
Timber.e(e,"Unable to switch to the next IME")
|
||||
imeManager?.showInputMethodPicker()
|
||||
}
|
||||
}
|
||||
|
||||
fun switchToPrevSubtype() {
|
||||
activeSubtype = subtypeManager.switchToPrevSubtype() ?: Subtype.DEFAULT
|
||||
onSubtypeChanged(activeSubtype)
|
||||
@@ -561,10 +668,10 @@ class FlorisBoard : InputMethodService(), ClipboardManager.OnPrimaryClipChangedL
|
||||
updateOneHandedPanelVisibility()
|
||||
}
|
||||
|
||||
fun toggleOneHandedMode() {
|
||||
fun toggleOneHandedMode(isRight: Boolean) {
|
||||
when (prefs.keyboard.oneHandedMode) {
|
||||
"off" -> {
|
||||
prefs.keyboard.oneHandedMode = "end"
|
||||
prefs.keyboard.oneHandedMode = if (isRight) { "end" } else { "start" }
|
||||
}
|
||||
else -> {
|
||||
prefs.keyboard.oneHandedMode = "off"
|
||||
@@ -600,7 +707,7 @@ class FlorisBoard : InputMethodService(), ClipboardManager.OnPrimaryClipChangedL
|
||||
}
|
||||
|
||||
override fun onPrimaryClipChanged() {
|
||||
eventListeners.toList().forEach { it?.get()?.onPrimaryClipChanged() }
|
||||
eventListeners.toList().forEach { it?.onPrimaryClipChanged() }
|
||||
}
|
||||
|
||||
/**
|
||||
@@ -610,7 +717,7 @@ class FlorisBoard : InputMethodService(), ClipboardManager.OnPrimaryClipChangedL
|
||||
* @return True if the listener has been added successfully, false otherwise.
|
||||
*/
|
||||
fun addEventListener(listener: EventListener): Boolean {
|
||||
return eventListeners.add(WeakReference(listener))
|
||||
return eventListeners.add(listener)
|
||||
}
|
||||
|
||||
/**
|
||||
@@ -623,12 +730,7 @@ class FlorisBoard : InputMethodService(), ClipboardManager.OnPrimaryClipChangedL
|
||||
* value may also indicate that the [listener] was not added previously.
|
||||
*/
|
||||
fun removeEventListener(listener: EventListener): Boolean {
|
||||
eventListeners.toList().forEach {
|
||||
if (it?.get() == listener) {
|
||||
return eventListeners.remove(it)
|
||||
}
|
||||
}
|
||||
return false
|
||||
return eventListeners.remove(listener)
|
||||
}
|
||||
|
||||
interface EventListener {
|
||||
|
||||
@@ -20,11 +20,9 @@ import android.content.Context
|
||||
import android.content.res.Configuration
|
||||
import android.util.AttributeSet
|
||||
import android.util.DisplayMetrics
|
||||
import android.util.Log
|
||||
import android.widget.ImageButton
|
||||
import android.widget.LinearLayout
|
||||
import android.widget.ViewFlipper
|
||||
import dev.patrickgold.florisboard.BuildConfig
|
||||
import dev.patrickgold.florisboard.R
|
||||
import dev.patrickgold.florisboard.ime.text.key.KeyVariation
|
||||
import dev.patrickgold.florisboard.ime.text.keyboard.KeyboardMode
|
||||
@@ -135,7 +133,11 @@ class InputView : LinearLayout {
|
||||
// Add bottom offset for curved screens here. As the desired heights have already been set,
|
||||
// adding a value to the height now will result in a bottom padding (aka offset).
|
||||
baseHeight += ViewLayoutUtils.convertDpToPixel(
|
||||
florisboard.prefs.keyboard.bottomOffset.toFloat(),
|
||||
if (resources.configuration.orientation == Configuration.ORIENTATION_LANDSCAPE) {
|
||||
florisboard.prefs.keyboard.bottomOffsetLandscape.toFloat()
|
||||
} else {
|
||||
florisboard.prefs.keyboard.bottomOffsetPortrait.toFloat()
|
||||
},
|
||||
context
|
||||
)
|
||||
|
||||
|
||||
@@ -21,10 +21,12 @@ import android.content.SharedPreferences
|
||||
import android.provider.Settings
|
||||
import androidx.preference.PreferenceManager
|
||||
import dev.patrickgold.florisboard.R
|
||||
import dev.patrickgold.florisboard.ime.landscapeinput.LandscapeInputUiMode
|
||||
import dev.patrickgold.florisboard.ime.text.gestures.DistanceThreshold
|
||||
import dev.patrickgold.florisboard.ime.text.gestures.SwipeAction
|
||||
import dev.patrickgold.florisboard.ime.text.gestures.VelocityThreshold
|
||||
import dev.patrickgold.florisboard.ime.text.key.KeyHintMode
|
||||
import dev.patrickgold.florisboard.ime.text.key.UtilityKeyAction
|
||||
import dev.patrickgold.florisboard.ime.theme.ThemeMode
|
||||
import dev.patrickgold.florisboard.util.TimeUtil
|
||||
import dev.patrickgold.florisboard.util.VersionName
|
||||
@@ -215,6 +217,7 @@ class PrefHelper(
|
||||
const val SWIPE_DOWN = "gestures__swipe_down"
|
||||
const val SWIPE_LEFT = "gestures__swipe_left"
|
||||
const val SWIPE_RIGHT = "gestures__swipe_right"
|
||||
const val SPACE_BAR_LONG_PRESS = "gestures__space_bar_long_press"
|
||||
const val SPACE_BAR_SWIPE_LEFT = "gestures__space_bar_swipe_left"
|
||||
const val SPACE_BAR_SWIPE_RIGHT = "gestures__space_bar_swipe_right"
|
||||
const val SPACE_BAR_SWIPE_UP = "gestures__space_bar_swipe_up"
|
||||
@@ -235,6 +238,9 @@ class PrefHelper(
|
||||
var swipeRight: SwipeAction
|
||||
get() = SwipeAction.fromString(prefHelper.getPref(SWIPE_RIGHT, "no_action"))
|
||||
set(v) = prefHelper.setPref(SWIPE_RIGHT, v)
|
||||
var spaceBarLongPress: SwipeAction
|
||||
get() = SwipeAction.fromString(prefHelper.getPref(SPACE_BAR_LONG_PRESS, "no_action"))
|
||||
set(v) = prefHelper.setPref(SPACE_BAR_LONG_PRESS, v)
|
||||
var spaceBarSwipeUp: SwipeAction
|
||||
get() = SwipeAction.fromString(prefHelper.getPref(SPACE_BAR_SWIPE_UP, "no_action"))
|
||||
set(v) = prefHelper.setPref(SPACE_BAR_SWIPE_UP, v)
|
||||
@@ -303,25 +309,32 @@ class PrefHelper(
|
||||
*/
|
||||
class Keyboard(private val prefHelper: PrefHelper) {
|
||||
companion object {
|
||||
const val BOTTOM_OFFSET = "keyboard__bottom_offset"
|
||||
const val BOTTOM_OFFSET_PORTRAIT = "keyboard__bottom_offset_portrait"
|
||||
const val BOTTOM_OFFSET_LANDSCAPE = "keyboard__bottom_offset_landscape"
|
||||
const val FONT_SIZE_MULTIPLIER_PORTRAIT = "keyboard__font_size_multiplier_portrait"
|
||||
const val FONT_SIZE_MULTIPLIER_LANDSCAPE = "keyboard__font_size_multiplier_landscape"
|
||||
const val HEIGHT_FACTOR = "keyboard__height_factor"
|
||||
const val HEIGHT_FACTOR_CUSTOM = "keyboard__height_factor_custom"
|
||||
const val HINTED_NUMBER_ROW_MODE = "keyboard__hinted_number_row_mode"
|
||||
const val HINTED_SYMBOLS_MODE = "keyboard__hinted_symbols_mode"
|
||||
const val LANDSCAPE_INPUT_UI_MODE = "keyboard__landscape_input_ui_mode"
|
||||
const val LONG_PRESS_DELAY = "keyboard__long_press_delay"
|
||||
const val NUMBER_ROW = "keyboard__number_row"
|
||||
const val ONE_HANDED_MODE = "keyboard__one_handed_mode"
|
||||
const val POPUP_ENABLED = "keyboard__popup_enabled"
|
||||
const val SOUND_ENABLED = "keyboard__sound_enabled"
|
||||
const val SOUND_VOLUME = "keyboard__sound_volume"
|
||||
const val UTILITY_KEY_ACTION = "keyboard__utility_key_action"
|
||||
const val UTILITY_KEY_ENABLED = "keyboard__utility_key_enabled"
|
||||
const val VIBRATION_ENABLED = "keyboard__vibration_enabled"
|
||||
const val VIBRATION_STRENGTH = "keyboard__vibration_strength"
|
||||
}
|
||||
|
||||
var bottomOffset: Int = 0
|
||||
get() = prefHelper.getPref(BOTTOM_OFFSET, 0)
|
||||
var bottomOffsetPortrait: Int = 0
|
||||
get() = prefHelper.getPref(BOTTOM_OFFSET_PORTRAIT, 0)
|
||||
private set
|
||||
var bottomOffsetLandscape: Int = 0
|
||||
get() = prefHelper.getPref(BOTTOM_OFFSET_LANDSCAPE, 0)
|
||||
private set
|
||||
var fontSizeMultiplierPortrait: Int
|
||||
get() = prefHelper.getPref(FONT_SIZE_MULTIPLIER_PORTRAIT, 100)
|
||||
@@ -341,6 +354,9 @@ class PrefHelper(
|
||||
var hintedSymbolsMode: KeyHintMode
|
||||
get() = KeyHintMode.fromString(prefHelper.getPref(HINTED_SYMBOLS_MODE, KeyHintMode.ENABLED_ACCENT_PRIORITY.toString()))
|
||||
set(v) = prefHelper.setPref(HINTED_SYMBOLS_MODE, v)
|
||||
var landscapeInputUiMode: LandscapeInputUiMode
|
||||
get() = LandscapeInputUiMode.fromString(prefHelper.getPref(LANDSCAPE_INPUT_UI_MODE, LandscapeInputUiMode.DYNAMICALLY_SHOW.toString()))
|
||||
set(v) = prefHelper.setPref(LANDSCAPE_INPUT_UI_MODE, v)
|
||||
var longPressDelay: Int = 0
|
||||
get() = prefHelper.getPref(LONG_PRESS_DELAY, 300)
|
||||
private set
|
||||
@@ -360,6 +376,12 @@ class PrefHelper(
|
||||
var soundVolume: Int = 0
|
||||
get() = prefHelper.getPref(SOUND_VOLUME, -1)
|
||||
private set
|
||||
var utilityKeyAction: UtilityKeyAction
|
||||
get() = UtilityKeyAction.fromString(prefHelper.getPref(UTILITY_KEY_ACTION, UtilityKeyAction.DYNAMIC_SWITCH_LANGUAGE_EMOJIS.toString()))
|
||||
set(v) = prefHelper.setPref(UTILITY_KEY_ACTION, v)
|
||||
var utilityKeyEnabled: Boolean
|
||||
get() = prefHelper.getPref(UTILITY_KEY_ENABLED, true)
|
||||
set(v) = prefHelper.setPref(UTILITY_KEY_ENABLED, v)
|
||||
var vibrationEnabled: Boolean = false
|
||||
get() = prefHelper.getPref(VIBRATION_ENABLED, true)
|
||||
private set
|
||||
|
||||
@@ -0,0 +1,31 @@
|
||||
/*
|
||||
* Copyright (C) 2020 Patrick Goldinger
|
||||
*
|
||||
* Licensed under the Apache License, Version 2.0 (the "License");
|
||||
* you may not use this file except in compliance with the License.
|
||||
* You may obtain a copy of the License at
|
||||
*
|
||||
* http://www.apache.org/licenses/LICENSE-2.0
|
||||
*
|
||||
* Unless required by applicable law or agreed to in writing, software
|
||||
* distributed under the License is distributed on an "AS IS" BASIS,
|
||||
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||
* See the License for the specific language governing permissions and
|
||||
* limitations under the License.
|
||||
*/
|
||||
|
||||
package dev.patrickgold.florisboard.ime.landscapeinput
|
||||
|
||||
import java.util.*
|
||||
|
||||
enum class LandscapeInputUiMode {
|
||||
DYNAMICALLY_SHOW,
|
||||
NEVER_SHOW,
|
||||
ALWAYS_SHOW;
|
||||
|
||||
companion object {
|
||||
fun fromString(string: String): LandscapeInputUiMode {
|
||||
return valueOf(string.toUpperCase(Locale.ENGLISH))
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -43,12 +43,11 @@ class MediaInputView : LinearLayout, FlorisBoard.EventListener,
|
||||
|
||||
constructor(context: Context) : this(context, null)
|
||||
constructor(context: Context, attrs: AttributeSet?) : this(context, attrs, 0)
|
||||
constructor(context: Context, attrs: AttributeSet?, defStyleAttr: Int) : super(context, attrs, defStyleAttr) {
|
||||
florisboard?.addEventListener(this)
|
||||
}
|
||||
constructor(context: Context, attrs: AttributeSet?, defStyleAttr: Int) : super(context, attrs, defStyleAttr)
|
||||
|
||||
override fun onAttachedToWindow() {
|
||||
super.onAttachedToWindow()
|
||||
florisboard?.addEventListener(this)
|
||||
themeManager.registerOnThemeUpdatedListener(this)
|
||||
tabLayout = findViewById(R.id.media_input_tabs)
|
||||
switchToTextInputButton = findViewById(R.id.media_input_switch_to_text_input_button)
|
||||
@@ -57,8 +56,9 @@ class MediaInputView : LinearLayout, FlorisBoard.EventListener,
|
||||
}
|
||||
|
||||
override fun onDetachedFromWindow() {
|
||||
super.onDetachedFromWindow()
|
||||
themeManager.unregisterOnThemeUpdatedListener(this)
|
||||
florisboard?.removeEventListener(this)
|
||||
super.onDetachedFromWindow()
|
||||
}
|
||||
|
||||
override fun onThemeUpdated(theme: Theme) {
|
||||
|
||||
@@ -16,7 +16,7 @@
|
||||
|
||||
package dev.patrickgold.florisboard.ime.media.emoji
|
||||
|
||||
import android.annotation.SuppressLint
|
||||
import java.util.*
|
||||
|
||||
/**
|
||||
* Enum for emoji category.
|
||||
@@ -38,9 +38,8 @@ enum class EmojiCategory {
|
||||
}
|
||||
|
||||
companion object {
|
||||
@SuppressLint("DefaultLocale")
|
||||
fun fromString(string: String): EmojiCategory {
|
||||
return valueOf(string.replace(" & ", "_").toUpperCase())
|
||||
return valueOf(string.replace(" & ", "_").toUpperCase(Locale.ENGLISH))
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -64,13 +64,16 @@ class EmojiKeyView(
|
||||
triangleDrawable = ContextCompat.getDrawable(context, R.drawable.triangle_bottom_right)
|
||||
|
||||
text = data.getCodePointsAsString()
|
||||
|
||||
florisboard?.addEventListener(this)
|
||||
}
|
||||
|
||||
override fun onAttachedToWindow() {
|
||||
super.onAttachedToWindow()
|
||||
onApplyThemeAttributes()
|
||||
florisboard?.addEventListener(this)
|
||||
}
|
||||
|
||||
override fun onDetachedFromWindow() {
|
||||
florisboard?.removeEventListener(this)
|
||||
super.onDetachedFromWindow()
|
||||
}
|
||||
|
||||
/**
|
||||
|
||||
@@ -101,11 +101,11 @@ class EmojiKeyboardView : LinearLayout, FlorisBoard.EventListener,
|
||||
override fun onTabUnselected(tab: TabLayout.Tab?) {}
|
||||
})
|
||||
addView(tabLayout)
|
||||
florisboard?.addEventListener(this)
|
||||
}
|
||||
|
||||
override fun onAttachedToWindow() {
|
||||
super.onAttachedToWindow()
|
||||
florisboard?.addEventListener(this)
|
||||
themeManager.registerOnThemeUpdatedListener(this)
|
||||
mainScope.launch {
|
||||
layouts.await()
|
||||
@@ -116,8 +116,9 @@ class EmojiKeyboardView : LinearLayout, FlorisBoard.EventListener,
|
||||
}
|
||||
|
||||
override fun onDetachedFromWindow() {
|
||||
super.onDetachedFromWindow()
|
||||
themeManager.unregisterOnThemeUpdatedListener(this)
|
||||
florisboard?.removeEventListener(this)
|
||||
super.onDetachedFromWindow()
|
||||
}
|
||||
|
||||
/**
|
||||
|
||||
@@ -71,6 +71,8 @@ private fun listStringToListInt(list: List<String>): List<Int> {
|
||||
return ret.toList()
|
||||
}
|
||||
|
||||
private var cachedEmojiLayoutMap: EmojiLayoutDataMap? = null
|
||||
|
||||
/**
|
||||
* Reads the emoji list at the given [path] and returns an parsed [EmojiLayoutDataMap]. If the
|
||||
* given file path does not exist, an empty [EmojiLayoutDataMap] is returned.
|
||||
@@ -84,6 +86,7 @@ private fun listStringToListInt(list: List<String>): List<Int> {
|
||||
fun parseRawEmojiSpecsFile(
|
||||
context: Context, path: String
|
||||
): EmojiLayoutDataMap {
|
||||
cachedEmojiLayoutMap?.let { return it }
|
||||
val layouts = EmojiLayoutDataMap(EmojiCategory::class.java)
|
||||
for (category in EmojiCategory.values()) {
|
||||
layouts[category] = mutableListOf()
|
||||
@@ -182,5 +185,6 @@ fun parseRawEmojiSpecsFile(
|
||||
}
|
||||
}
|
||||
}
|
||||
cachedEmojiLayoutMap = layouts
|
||||
return layouts
|
||||
}
|
||||
|
||||
@@ -35,8 +35,12 @@ import kotlin.math.min
|
||||
class PopupExtendedView : View, ThemeManager.OnThemeUpdatedListener {
|
||||
private val themeManager: ThemeManager = ThemeManager.default()
|
||||
|
||||
private val activeBackgroundDrawable: PaintDrawable = PaintDrawable()
|
||||
private var backgroundDrawable: PaintDrawable = PaintDrawable()
|
||||
private val activeBackgroundDrawable: PaintDrawable = PaintDrawable().apply {
|
||||
setCornerRadius(ViewLayoutUtils.convertDpToPixel(6.0f, context))
|
||||
}
|
||||
private var backgroundDrawable: PaintDrawable = PaintDrawable().apply {
|
||||
setCornerRadius(ViewLayoutUtils.convertDpToPixel(6.0f, context))
|
||||
}
|
||||
private val labelPaint: Paint = Paint().apply {
|
||||
alpha = 255
|
||||
color = 0
|
||||
@@ -80,6 +84,7 @@ class PopupExtendedView : View, ThemeManager.OnThemeUpdatedListener {
|
||||
init {
|
||||
visibility = GONE
|
||||
background = backgroundDrawable
|
||||
elevation = ViewLayoutUtils.convertDpToPixel(4.0f, context)
|
||||
}
|
||||
|
||||
override fun onAttachedToWindow() {
|
||||
@@ -88,20 +93,17 @@ class PopupExtendedView : View, ThemeManager.OnThemeUpdatedListener {
|
||||
}
|
||||
|
||||
override fun onDetachedFromWindow() {
|
||||
super.onDetachedFromWindow()
|
||||
themeManager.unregisterOnThemeUpdatedListener(this)
|
||||
super.onDetachedFromWindow()
|
||||
}
|
||||
|
||||
override fun onThemeUpdated(theme: Theme) {
|
||||
activeBackgroundDrawable.apply {
|
||||
setTint(theme.getAttr(Theme.Attr.POPUP_BACKGROUND_ACTIVE).toSolidColor().color)
|
||||
setCornerRadius(ViewLayoutUtils.convertDpToPixel(6.0f, context))
|
||||
}
|
||||
backgroundDrawable.apply {
|
||||
setTint(theme.getAttr(Theme.Attr.POPUP_BACKGROUND).toSolidColor().color)
|
||||
setCornerRadius(ViewLayoutUtils.convertDpToPixel(6.0f, context))
|
||||
}
|
||||
elevation = ViewLayoutUtils.convertDpToPixel(4.0f, context)
|
||||
labelPaint.color = theme.getAttr(Theme.Attr.POPUP_FOREGROUND).toSolidColor().color
|
||||
tldPaint.color = theme.getAttr(Theme.Attr.POPUP_FOREGROUND).toSolidColor().color
|
||||
if (isShowing) {
|
||||
|
||||
@@ -16,17 +16,9 @@
|
||||
|
||||
package dev.patrickgold.florisboard.ime.popup
|
||||
|
||||
import android.content.Context
|
||||
import com.github.michaelbull.result.Err
|
||||
import com.github.michaelbull.result.Ok
|
||||
import com.github.michaelbull.result.Result
|
||||
import com.squareup.moshi.Moshi
|
||||
import com.squareup.moshi.kotlin.reflect.KotlinJsonAdapterFactory
|
||||
import dev.patrickgold.florisboard.ime.extension.Asset
|
||||
import dev.patrickgold.florisboard.ime.text.key.KeyData
|
||||
import dev.patrickgold.florisboard.ime.text.key.KeyTypeAdapter
|
||||
import dev.patrickgold.florisboard.ime.text.key.KeyVariation
|
||||
import dev.patrickgold.florisboard.ime.text.key.KeyVariationAdapter
|
||||
|
||||
/**
|
||||
* An object which maps each base key to its extended popups. This can be done for each
|
||||
@@ -48,29 +40,5 @@ class PopupExtension(
|
||||
) : Asset {
|
||||
companion object : Asset.Companion<PopupExtension> {
|
||||
override fun empty() = PopupExtension("", "", listOf(), mapOf())
|
||||
|
||||
override fun fromFile(context: Context, path: String): Result<PopupExtension, Throwable> {
|
||||
return try {
|
||||
val raw = context.assets.open(path).bufferedReader().use { it.readText() }
|
||||
val asset = fromJsonString(raw)
|
||||
if (asset != null) {
|
||||
Ok(asset)
|
||||
} else {
|
||||
Err(NullPointerException())
|
||||
}
|
||||
} catch (e: Exception) {
|
||||
Err(e)
|
||||
}
|
||||
}
|
||||
|
||||
fun fromJsonString(json: String): PopupExtension? {
|
||||
val moshi = Moshi.Builder()
|
||||
.add(KotlinJsonAdapterFactory())
|
||||
.add(KeyTypeAdapter())
|
||||
.add(KeyVariationAdapter())
|
||||
.build()
|
||||
val layoutAdapter = moshi.adapter(PopupExtension::class.java)
|
||||
return layoutAdapter.fromJson(json)
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -20,12 +20,14 @@ import android.annotation.SuppressLint
|
||||
import android.content.Context
|
||||
import android.util.AttributeSet
|
||||
import android.view.MotionEvent
|
||||
import android.view.ViewGroup
|
||||
import android.widget.FrameLayout
|
||||
import dev.patrickgold.florisboard.ime.core.PrefHelper
|
||||
|
||||
/**
|
||||
* Basic helper view class which acts as a non-interactive layer view, which sits above the whole
|
||||
* input UI. Automatically rejects any touch events and passes it through to the View below.
|
||||
*/
|
||||
class PopupLayerView : FrameLayout {
|
||||
private val prefs: PrefHelper = PrefHelper.getDefaultInstance(context)
|
||||
|
||||
constructor(context: Context) : this(context, null)
|
||||
constructor(context: Context, attrs: AttributeSet?) : this(context, attrs, 0)
|
||||
constructor(context: Context, attrs: AttributeSet?, defStyleAttr: Int) : super(context, attrs, defStyleAttr)
|
||||
@@ -34,6 +36,9 @@ class PopupLayerView : FrameLayout {
|
||||
background = null
|
||||
isClickable = false
|
||||
isFocusable = false
|
||||
layoutParams = ViewGroup.LayoutParams(
|
||||
ViewGroup.LayoutParams.MATCH_PARENT, ViewGroup.LayoutParams.MATCH_PARENT
|
||||
)
|
||||
}
|
||||
|
||||
override fun onInterceptTouchEvent(ev: MotionEvent?): Boolean {
|
||||
|
||||
@@ -64,6 +64,10 @@ class PopupManager<T_KBD: View, T_KV: View>(
|
||||
val isShowingExtendedPopup: Boolean
|
||||
get() = popupViewExt.isShowing
|
||||
|
||||
companion object {
|
||||
const val POPUP_EXTENSION_PATH_REL: String = "ime/text/characters/extended_popups"
|
||||
}
|
||||
|
||||
init {
|
||||
keyPopupWidth = keyboardView.resources.getDimension(R.dimen.key_width).toInt()
|
||||
keyPopupHeight = keyboardView.resources.getDimension(R.dimen.key_height).toInt()
|
||||
@@ -107,7 +111,8 @@ class PopupManager<T_KBD: View, T_KV: View>(
|
||||
keyView.data.popup[adjustedIndex].label, adjustedIndex
|
||||
)
|
||||
}
|
||||
KeyCode.TOGGLE_ONE_HANDED_MODE -> {
|
||||
KeyCode.TOGGLE_ONE_HANDED_MODE_LEFT,
|
||||
KeyCode.TOGGLE_ONE_HANDED_MODE_RIGHT -> {
|
||||
getDrawable(keyView.context, R.drawable.ic_smartphone)?.let {
|
||||
PopupExtendedView.Element.Icon(it, adjustedIndex)
|
||||
} ?: PopupExtendedView.Element.Undefined
|
||||
|
||||
@@ -34,7 +34,9 @@ import dev.patrickgold.florisboard.util.ViewLayoutUtils
|
||||
class PopupView : View, ThemeManager.OnThemeUpdatedListener {
|
||||
private val themeManager: ThemeManager = ThemeManager.default()
|
||||
|
||||
private var backgroundDrawable: PaintDrawable = PaintDrawable()
|
||||
private var backgroundDrawable: PaintDrawable = PaintDrawable().apply {
|
||||
setCornerRadius(ViewLayoutUtils.convertDpToPixel(6.0f, context))
|
||||
}
|
||||
private val labelPaint: Paint = Paint().apply {
|
||||
alpha = 255
|
||||
color = 0
|
||||
@@ -86,7 +88,6 @@ class PopupView : View, ThemeManager.OnThemeUpdatedListener {
|
||||
override fun onThemeUpdated(theme: Theme) {
|
||||
backgroundDrawable.apply {
|
||||
setTint(theme.getAttr(Theme.Attr.POPUP_BACKGROUND).toSolidColor().color)
|
||||
setCornerRadius(ViewLayoutUtils.convertDpToPixel(6.0f, context))
|
||||
}
|
||||
elevation = ViewLayoutUtils.convertDpToPixel(4.0f, context)
|
||||
threeDotsDrawable?.apply {
|
||||
|
||||
@@ -16,6 +16,8 @@
|
||||
|
||||
package dev.patrickgold.florisboard.ime.text
|
||||
|
||||
import android.animation.ObjectAnimator
|
||||
import android.animation.ValueAnimator
|
||||
import android.content.Context
|
||||
import android.os.Handler
|
||||
import android.view.KeyEvent
|
||||
@@ -27,10 +29,7 @@ import dev.patrickgold.florisboard.R
|
||||
import dev.patrickgold.florisboard.ime.core.*
|
||||
import dev.patrickgold.florisboard.ime.text.editing.EditingKeyboardView
|
||||
import dev.patrickgold.florisboard.ime.text.gestures.SwipeAction
|
||||
import dev.patrickgold.florisboard.ime.text.key.KeyCode
|
||||
import dev.patrickgold.florisboard.ime.text.key.KeyData
|
||||
import dev.patrickgold.florisboard.ime.text.key.KeyType
|
||||
import dev.patrickgold.florisboard.ime.text.key.KeyVariation
|
||||
import dev.patrickgold.florisboard.ime.text.key.*
|
||||
import dev.patrickgold.florisboard.ime.text.keyboard.KeyboardMode
|
||||
import dev.patrickgold.florisboard.ime.text.keyboard.KeyboardView
|
||||
import dev.patrickgold.florisboard.ime.text.layout.LayoutManager
|
||||
@@ -38,6 +37,7 @@ import dev.patrickgold.florisboard.ime.text.smartbar.SmartbarView
|
||||
import kotlinx.coroutines.*
|
||||
import timber.log.Timber
|
||||
import java.util.*
|
||||
import kotlin.math.roundToLong
|
||||
|
||||
/**
|
||||
* TextInputManager is responsible for managing everything which is related to text input. All of
|
||||
@@ -58,11 +58,13 @@ class TextInputManager private constructor() : CoroutineScope by MainScope(),
|
||||
get() = florisboard.activeEditorInstance
|
||||
|
||||
private var activeKeyboardMode: KeyboardMode? = null
|
||||
private var animator: ObjectAnimator? = null
|
||||
private val keyboardViews = EnumMap<KeyboardMode, KeyboardView>(KeyboardMode::class.java)
|
||||
private var editingKeyboardView: EditingKeyboardView? = null
|
||||
private var loadingPlaceholderKeyboard: KeyboardView? = null
|
||||
private val osHandler = Handler()
|
||||
private var textViewFlipper: ViewFlipper? = null
|
||||
var textViewGroup: LinearLayout? = null
|
||||
private var textViewGroup: LinearLayout? = null
|
||||
|
||||
var keyVariation: KeyVariation = KeyVariation.NORMAL
|
||||
val layoutManager = LayoutManager(florisboard)
|
||||
@@ -115,6 +117,10 @@ class TextInputManager private constructor() : CoroutineScope by MainScope(),
|
||||
}
|
||||
}
|
||||
|
||||
override fun onCreateInputView() {
|
||||
keyboardViews.clear()
|
||||
}
|
||||
|
||||
private suspend fun addKeyboardView(mode: KeyboardMode) {
|
||||
val keyboardView = KeyboardView(florisboard.context)
|
||||
keyboardView.computedLayout = layoutManager.fetchComputedLayoutAsync(mode, florisboard.activeSubtype, florisboard.prefs).await()
|
||||
@@ -128,14 +134,38 @@ class TextInputManager private constructor() : CoroutineScope by MainScope(),
|
||||
override fun onRegisterInputView(inputView: InputView) {
|
||||
Timber.i("onRegisterInputView(inputView)")
|
||||
|
||||
launch(Dispatchers.Main) {
|
||||
textViewGroup = inputView.findViewById(R.id.text_input)
|
||||
textViewFlipper = inputView.findViewById(R.id.text_input_view_flipper)
|
||||
editingKeyboardView = inputView.findViewById(R.id.editing)
|
||||
textViewGroup = inputView.findViewById(R.id.text_input)
|
||||
textViewFlipper = inputView.findViewById(R.id.text_input_view_flipper)
|
||||
editingKeyboardView = inputView.findViewById(R.id.editing)
|
||||
loadingPlaceholderKeyboard = inputView.findViewById(R.id.keyboard_preview)
|
||||
|
||||
launch(Dispatchers.Main) {
|
||||
textViewGroup?.let {
|
||||
animator = ObjectAnimator.ofFloat(it, "alpha", 0.9f, 1.0f).apply {
|
||||
duration = 125
|
||||
repeatCount = ValueAnimator.INFINITE
|
||||
repeatMode = ValueAnimator.REVERSE
|
||||
start()
|
||||
launch {
|
||||
delay(duration)
|
||||
try {
|
||||
duration = 500
|
||||
setFloatValues(1.0f, 0.4f)
|
||||
} catch (_: Exception) {}
|
||||
}
|
||||
}
|
||||
}
|
||||
val activeKeyboardMode = getActiveKeyboardMode()
|
||||
addKeyboardView(activeKeyboardMode)
|
||||
setActiveKeyboardMode(activeKeyboardMode)
|
||||
animator?.cancel()
|
||||
textViewGroup?.let {
|
||||
animator = ObjectAnimator.ofFloat(it, "alpha", it.alpha, 1.0f).apply {
|
||||
duration = (((1.0f - it.alpha) / 0.6f) * 125f).roundToLong()
|
||||
repeatCount = 0
|
||||
start()
|
||||
}
|
||||
}
|
||||
for (mode in KeyboardMode.values()) {
|
||||
if (mode != activeKeyboardMode && mode != KeyboardMode.SMARTBAR_NUMBER_ROW) {
|
||||
addKeyboardView(mode)
|
||||
@@ -149,6 +179,12 @@ class TextInputManager private constructor() : CoroutineScope by MainScope(),
|
||||
smartbarView?.setEventListener(this)
|
||||
}
|
||||
|
||||
fun unregisterSmartbarView(view: SmartbarView) {
|
||||
if (smartbarView == view) {
|
||||
smartbarView = null
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Cancels all coroutines and cleans up.
|
||||
*/
|
||||
@@ -246,11 +282,11 @@ class TextInputManager private constructor() : CoroutineScope by MainScope(),
|
||||
/**
|
||||
* Sets [activeKeyboardMode] and updates the [SmartbarView.isQuickActionsVisible] state.
|
||||
*/
|
||||
fun setActiveKeyboardMode(mode: KeyboardMode) {
|
||||
private fun setActiveKeyboardMode(mode: KeyboardMode) {
|
||||
textViewFlipper?.displayedChild = textViewFlipper?.indexOfChild(when (mode) {
|
||||
KeyboardMode.EDITING -> editingKeyboardView
|
||||
else -> keyboardViews[mode]
|
||||
}) ?: 0
|
||||
})?.coerceAtLeast(0) ?: 0
|
||||
keyboardViews[mode]?.updateVisibility()
|
||||
keyboardViews[mode]?.requestLayout()
|
||||
keyboardViews[mode]?.requestLayoutAllKeys()
|
||||
@@ -309,11 +345,17 @@ class TextInputManager private constructor() : CoroutineScope by MainScope(),
|
||||
fun executeSwipeAction(swipeAction: SwipeAction) {
|
||||
when (swipeAction) {
|
||||
SwipeAction.DELETE_WORD -> handleDeleteWord()
|
||||
SwipeAction.INSERT_SPACE -> handleSpace()
|
||||
SwipeAction.MOVE_CURSOR_DOWN -> handleArrow(KeyCode.ARROW_DOWN)
|
||||
SwipeAction.MOVE_CURSOR_UP -> handleArrow(KeyCode.ARROW_UP)
|
||||
SwipeAction.MOVE_CURSOR_LEFT -> handleArrow(KeyCode.ARROW_LEFT)
|
||||
SwipeAction.MOVE_CURSOR_RIGHT -> handleArrow(KeyCode.ARROW_RIGHT)
|
||||
SwipeAction.MOVE_CURSOR_START_OF_LINE -> handleArrow(KeyCode.MOVE_HOME)
|
||||
SwipeAction.MOVE_CURSOR_END_OF_LINE -> handleArrow(KeyCode.MOVE_END)
|
||||
SwipeAction.SHIFT -> handleShift()
|
||||
SwipeAction.SHOW_INPUT_METHOD_PICKER -> sendKeyPress(
|
||||
KeyData(type = KeyType.FUNCTION, code = KeyCode.SHOW_INPUT_METHOD_PICKER)
|
||||
)
|
||||
else -> {}
|
||||
}
|
||||
}
|
||||
@@ -337,7 +379,7 @@ class TextInputManager private constructor() : CoroutineScope by MainScope(),
|
||||
}
|
||||
R.id.quick_action_switch_to_media_context -> florisboard.setActiveInput(R.id.media_input)
|
||||
R.id.quick_action_open_settings -> florisboard.launchSettings()
|
||||
R.id.quick_action_one_handed_toggle -> florisboard.toggleOneHandedMode()
|
||||
R.id.quick_action_one_handed_toggle -> florisboard.toggleOneHandedMode(isRight = true)
|
||||
R.id.quick_action_undo -> {
|
||||
handleUndo()
|
||||
return
|
||||
@@ -363,6 +405,8 @@ class TextInputManager private constructor() : CoroutineScope by MainScope(),
|
||||
* Handles a [KeyCode.DELETE] event.
|
||||
*/
|
||||
private fun handleDelete() {
|
||||
hasCapsRecentlyChanged = false
|
||||
hasSpaceRecentlyPressed = false
|
||||
isManualSelectionMode = false
|
||||
isManualSelectionModeLeft = false
|
||||
isManualSelectionModeRight = false
|
||||
@@ -373,6 +417,8 @@ class TextInputManager private constructor() : CoroutineScope by MainScope(),
|
||||
* Handles a [KeyCode.DELETE_WORD] event.
|
||||
*/
|
||||
private fun handleDeleteWord() {
|
||||
hasCapsRecentlyChanged = false
|
||||
hasSpaceRecentlyPressed = false
|
||||
isManualSelectionMode = false
|
||||
isManualSelectionModeLeft = false
|
||||
isManualSelectionModeRight = false
|
||||
@@ -383,6 +429,8 @@ class TextInputManager private constructor() : CoroutineScope by MainScope(),
|
||||
* Handles a [KeyCode.ENTER] event.
|
||||
*/
|
||||
private fun handleEnter() {
|
||||
hasCapsRecentlyChanged = false
|
||||
hasSpaceRecentlyPressed = false
|
||||
if (activeEditorInstance.imeOptions.flagNoEnterAction) {
|
||||
activeEditorInstance.performEnter()
|
||||
} else {
|
||||
@@ -400,6 +448,18 @@ class TextInputManager private constructor() : CoroutineScope by MainScope(),
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Handles a [KeyCode.LANGUAGE_SWITCH] event. Also handles if the language switch should cycle
|
||||
* FlorisBoard internal or system-wide.
|
||||
*/
|
||||
private fun handleLanguageSwitch() {
|
||||
when (florisboard.prefs.keyboard.utilityKeyAction) {
|
||||
UtilityKeyAction.DYNAMIC_SWITCH_LANGUAGE_EMOJIS,
|
||||
UtilityKeyAction.SWITCH_LANGUAGE -> florisboard.switchToNextSubtype()
|
||||
else -> florisboard.switchToNextKeyboard()
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Handles a [KeyCode.SHIFT] event.
|
||||
*/
|
||||
@@ -615,7 +675,7 @@ class TextInputManager private constructor() : CoroutineScope by MainScope(),
|
||||
handleEnter()
|
||||
smartbarView?.resetClipboardSuggestion()
|
||||
}
|
||||
KeyCode.LANGUAGE_SWITCH -> florisboard.switchToNextSubtype()
|
||||
KeyCode.LANGUAGE_SWITCH -> handleLanguageSwitch()
|
||||
KeyCode.SETTINGS -> florisboard.launchSettings()
|
||||
KeyCode.SHIFT -> handleShift()
|
||||
KeyCode.SHOW_INPUT_METHOD_PICKER -> {
|
||||
@@ -625,7 +685,8 @@ class TextInputManager private constructor() : CoroutineScope by MainScope(),
|
||||
}
|
||||
KeyCode.SWITCH_TO_MEDIA_CONTEXT -> florisboard.setActiveInput(R.id.media_input)
|
||||
KeyCode.SWITCH_TO_TEXT_CONTEXT -> florisboard.setActiveInput(R.id.text_input)
|
||||
KeyCode.TOGGLE_ONE_HANDED_MODE -> florisboard.toggleOneHandedMode()
|
||||
KeyCode.TOGGLE_ONE_HANDED_MODE_LEFT -> florisboard.toggleOneHandedMode(isRight = false)
|
||||
KeyCode.TOGGLE_ONE_HANDED_MODE_RIGHT -> florisboard.toggleOneHandedMode(isRight = true)
|
||||
KeyCode.VIEW_CHARACTERS -> setActiveKeyboardMode(KeyboardMode.CHARACTERS)
|
||||
KeyCode.VIEW_NUMERIC -> setActiveKeyboardMode(KeyboardMode.NUMERIC)
|
||||
KeyCode.VIEW_NUMERIC_ADVANCED -> setActiveKeyboardMode(KeyboardMode.NUMERIC_ADVANCED)
|
||||
@@ -656,17 +717,16 @@ class TextInputManager private constructor() : CoroutineScope by MainScope(),
|
||||
KeyType.CHARACTER, KeyType.NUMERIC -> when (keyData.code) {
|
||||
KeyCode.SPACE -> handleSpace()
|
||||
KeyCode.URI_COMPONENT_TLD -> {
|
||||
val tld = when (caps) {
|
||||
true -> keyData.label.toUpperCase(Locale.getDefault())
|
||||
false -> keyData.label.toLowerCase(Locale.getDefault())
|
||||
}
|
||||
val tld = keyData.label.toLowerCase(Locale.ENGLISH)
|
||||
activeEditorInstance.commitText(tld)
|
||||
}
|
||||
else -> {
|
||||
hasCapsRecentlyChanged = false
|
||||
hasSpaceRecentlyPressed = false
|
||||
var text = keyData.code.toChar().toString()
|
||||
text = when (caps) {
|
||||
true -> text.toUpperCase(Locale.getDefault())
|
||||
false -> text.toLowerCase(Locale.getDefault())
|
||||
text = when (caps && activeKeyboardMode == KeyboardMode.CHARACTERS) {
|
||||
true -> text.toUpperCase(florisboard.activeSubtype.locale)
|
||||
false -> text
|
||||
}
|
||||
activeEditorInstance.commitText(text)
|
||||
}
|
||||
|
||||
@@ -45,12 +45,11 @@ class EditingKeyboardView : ConstraintLayout, FlorisBoard.EventListener,
|
||||
|
||||
constructor(context: Context) : this(context, null)
|
||||
constructor(context: Context, attrs: AttributeSet?) : this(context, attrs, 0)
|
||||
constructor(context: Context, attrs: AttributeSet?, defStyleAttr: Int) : super(context, attrs, defStyleAttr) {
|
||||
florisboard?.addEventListener(this)
|
||||
}
|
||||
constructor(context: Context, attrs: AttributeSet?, defStyleAttr: Int) : super(context, attrs, defStyleAttr)
|
||||
|
||||
override fun onAttachedToWindow() {
|
||||
super.onAttachedToWindow()
|
||||
florisboard?.addEventListener(this)
|
||||
themeManager.registerOnThemeUpdatedListener(this)
|
||||
|
||||
arrowUpKey = findViewById(R.id.arrow_up)
|
||||
@@ -63,8 +62,9 @@ class EditingKeyboardView : ConstraintLayout, FlorisBoard.EventListener,
|
||||
}
|
||||
|
||||
override fun onDetachedFromWindow() {
|
||||
super.onDetachedFromWindow()
|
||||
themeManager.unregisterOnThemeUpdatedListener(this)
|
||||
florisboard?.removeEventListener(this)
|
||||
super.onDetachedFromWindow()
|
||||
}
|
||||
|
||||
override fun onThemeUpdated(theme: Theme) {
|
||||
|
||||
@@ -27,11 +27,15 @@ enum class SwipeAction {
|
||||
DELETE_WORD,
|
||||
DELETE_WORDS_PRECISELY,
|
||||
HIDE_KEYBOARD,
|
||||
INSERT_SPACE,
|
||||
MOVE_CURSOR_UP,
|
||||
MOVE_CURSOR_DOWN,
|
||||
MOVE_CURSOR_LEFT,
|
||||
MOVE_CURSOR_RIGHT,
|
||||
MOVE_CURSOR_START_OF_LINE,
|
||||
MOVE_CURSOR_END_OF_LINE,
|
||||
SHIFT,
|
||||
SHOW_INPUT_METHOD_PICKER,
|
||||
SWITCH_TO_PREV_SUBTYPE,
|
||||
SWITCH_TO_NEXT_SUBTYPE,
|
||||
SWITCH_TO_PREV_KEYBOARD;
|
||||
|
||||
@@ -26,6 +26,36 @@ import kotlin.math.*
|
||||
* Wrapper class which holds all enums, interfaces and classes for detecting a swipe gesture.
|
||||
*/
|
||||
abstract class SwipeGesture {
|
||||
companion object {
|
||||
/**
|
||||
* Returns a numeric value for a given [DistanceThreshold], based on the values defined in
|
||||
* the resources dimens.xml file.
|
||||
*/
|
||||
fun numericValue(context: Context, of: DistanceThreshold): Double {
|
||||
return when (of) {
|
||||
DistanceThreshold.VERY_SHORT -> context.resources.getDimension(R.dimen.gesture_distance_threshold_very_short)
|
||||
DistanceThreshold.SHORT -> context.resources.getDimension(R.dimen.gesture_distance_threshold_short)
|
||||
DistanceThreshold.NORMAL -> context.resources.getDimension(R.dimen.gesture_distance_threshold_normal)
|
||||
DistanceThreshold.LONG -> context.resources.getDimension(R.dimen.gesture_distance_threshold_long)
|
||||
DistanceThreshold.VERY_LONG -> context.resources.getDimension(R.dimen.gesture_distance_threshold_very_long)
|
||||
}.toDouble()
|
||||
}
|
||||
|
||||
/**
|
||||
* Returns a numeric value for a given [VelocityThreshold], based on the values defined in
|
||||
* the resources dimens.xml file.
|
||||
*/
|
||||
fun numericValue(context: Context, of: VelocityThreshold): Double {
|
||||
return when (of) {
|
||||
VelocityThreshold.VERY_SLOW -> context.resources.getInteger(R.integer.gesture_velocity_threshold_very_slow)
|
||||
VelocityThreshold.SLOW -> context.resources.getInteger(R.integer.gesture_velocity_threshold_slow)
|
||||
VelocityThreshold.NORMAL -> context.resources.getInteger(R.integer.gesture_velocity_threshold_normal)
|
||||
VelocityThreshold.FAST -> context.resources.getInteger(R.integer.gesture_velocity_threshold_fast)
|
||||
VelocityThreshold.VERY_FAST -> context.resources.getInteger(R.integer.gesture_velocity_threshold_very_fast)
|
||||
}.toDouble()
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Class which detects swipes based on given [MotionEvent]s. Only supports single-finger swipes
|
||||
* and ignores additional pointers provided, if any.
|
||||
@@ -33,58 +63,98 @@ abstract class SwipeGesture {
|
||||
* @property listener The listener to report detected swipes to.
|
||||
*/
|
||||
class Detector(private val context: Context, private val listener: Listener) {
|
||||
private val eventList: MutableList<MotionEvent> = mutableListOf()
|
||||
private var indexFirst: Int = 0
|
||||
private var indexLastMoveRecognized: Int = 0
|
||||
private var firstMotionEvent: MotionEvent? = null
|
||||
private var lastMotionEvent: MotionEvent? = null
|
||||
private var absUnitCountX: Int = 0
|
||||
private var absUnitCountY: Int = 0
|
||||
private var thresholdWidth: Double = numericValue(context, DistanceThreshold.NORMAL)
|
||||
private var unitWidth: Double = thresholdWidth / 4.0
|
||||
|
||||
var distanceThreshold: DistanceThreshold = DistanceThreshold.NORMAL
|
||||
set(value) {
|
||||
field = value
|
||||
thresholdWidth = numericValue(context, value)
|
||||
unitWidth = thresholdWidth / 4.0
|
||||
}
|
||||
var velocityThreshold: VelocityThreshold = VelocityThreshold.NORMAL
|
||||
|
||||
fun onTouchEvent(event: MotionEvent): Boolean {
|
||||
/**
|
||||
* Method which evaluates if a given [event] is a gesture.
|
||||
*
|
||||
* @param event The MotionEvent which should be checked for a gesture.
|
||||
* @param alwaysTriggerOnMove Set to true if the moving detection algorithm should always
|
||||
* trigger, regardless of the distance from the previous event. Defaults to false.
|
||||
* @return True if the given [event] is a gesture, false otherwise.
|
||||
*/
|
||||
fun onTouchEvent(event: MotionEvent, alwaysTriggerOnMove: Boolean = false): Boolean {
|
||||
try {
|
||||
when (event.actionMasked) {
|
||||
MotionEvent.ACTION_DOWN,
|
||||
MotionEvent.ACTION_POINTER_DOWN -> {
|
||||
clearEventList()
|
||||
eventList.add(MotionEvent.obtainNoHistory(event))
|
||||
resetState()
|
||||
firstMotionEvent = MotionEvent.obtainNoHistory(event)
|
||||
lastMotionEvent = firstMotionEvent
|
||||
}
|
||||
MotionEvent.ACTION_MOVE -> {
|
||||
eventList.add(MotionEvent.obtainNoHistory(event))
|
||||
val lastEvent = eventList[indexLastMoveRecognized]
|
||||
val diffX = event.x - lastEvent.x
|
||||
val diffY = event.y - lastEvent.y
|
||||
val distanceThresholdNV = numericValue(distanceThreshold) / 4.0f
|
||||
return if (abs(diffX) > distanceThresholdNV || abs(diffY) > distanceThresholdNV) {
|
||||
indexLastMoveRecognized = eventList.size - 1
|
||||
val direction = detectDirection(diffX.toDouble(), diffY.toDouble())
|
||||
listener.onSwipe(direction, Type.TOUCH_MOVE)
|
||||
val firstEvent = firstMotionEvent ?: return false
|
||||
val absDiffX = event.x - firstEvent.x
|
||||
val absDiffY = event.y - firstEvent.y
|
||||
val lastEvent = lastMotionEvent ?: return false
|
||||
val relDiffX = event.x - lastEvent.x
|
||||
val relDiffY = event.y - lastEvent.y
|
||||
return if (alwaysTriggerOnMove || abs(relDiffX) > (thresholdWidth / 2.0) || abs(relDiffY) > (thresholdWidth / 2.0)) {
|
||||
lastMotionEvent = MotionEvent.obtainNoHistory(event)
|
||||
val direction = detectDirection(relDiffX.toDouble(), relDiffY.toDouble())
|
||||
val newAbsUnitCountX = (absDiffX / unitWidth).toInt()
|
||||
val newAbsUnitCountY = (absDiffY / unitWidth).toInt()
|
||||
val relUnitCountX = newAbsUnitCountX - absUnitCountX
|
||||
val relUnitCountY = newAbsUnitCountY - absUnitCountY
|
||||
absUnitCountX = newAbsUnitCountX
|
||||
absUnitCountY = newAbsUnitCountY
|
||||
listener.onSwipe(Event(
|
||||
direction = direction,
|
||||
type = Type.TOUCH_MOVE,
|
||||
absUnitCountX,
|
||||
absUnitCountY,
|
||||
relUnitCountX,
|
||||
relUnitCountY
|
||||
))
|
||||
} else {
|
||||
false
|
||||
}
|
||||
}
|
||||
MotionEvent.ACTION_UP,
|
||||
MotionEvent.ACTION_POINTER_UP -> {
|
||||
val firstEvent = eventList[indexFirst]
|
||||
val diffX = event.x - firstEvent.x
|
||||
val diffY = event.y - firstEvent.y
|
||||
val distanceThresholdNV = numericValue(distanceThreshold)
|
||||
val firstEvent = firstMotionEvent ?: return false
|
||||
val absDiffX = event.x - firstEvent.x
|
||||
val absDiffY = event.y - firstEvent.y
|
||||
/*val velocityThresholdNV = numericValue(velocityThreshold)
|
||||
val velocity =
|
||||
((convertPixelsToDp(
|
||||
sqrt(diffX.pow(2) + diffY.pow(2)),
|
||||
context
|
||||
) / event.downTime) * 10.0f.pow(8)).toInt()*/
|
||||
clearEventList()
|
||||
// return if ((abs(diffX) > distanceThresholdNV || abs(diffY) > distanceThresholdNV) && velocity >= velocityThresholdNV) {
|
||||
return if ((abs(diffX) > distanceThresholdNV || abs(diffY) > distanceThresholdNV)) {
|
||||
val direction = detectDirection(diffX.toDouble(), diffY.toDouble())
|
||||
listener.onSwipe(direction, Type.TOUCH_UP)
|
||||
val ret = if ((abs(absDiffX) > thresholdWidth || abs(absDiffY) > thresholdWidth)) {
|
||||
val direction = detectDirection(absDiffX.toDouble(), absDiffY.toDouble())
|
||||
absUnitCountX = (absDiffX / unitWidth).toInt()
|
||||
absUnitCountY = (absDiffY / unitWidth).toInt()
|
||||
listener.onSwipe(Event(
|
||||
direction = direction,
|
||||
type = Type.TOUCH_UP,
|
||||
absUnitCountX,
|
||||
absUnitCountY,
|
||||
absUnitCountX,
|
||||
absUnitCountY
|
||||
))
|
||||
} else {
|
||||
false
|
||||
}
|
||||
resetState()
|
||||
return ret
|
||||
}
|
||||
MotionEvent.ACTION_CANCEL -> {
|
||||
clearEventList()
|
||||
resetState()
|
||||
}
|
||||
else -> return false
|
||||
}
|
||||
@@ -134,50 +204,45 @@ abstract class SwipeGesture {
|
||||
}
|
||||
|
||||
/**
|
||||
* Cleans up and clears the event list.
|
||||
* Resets the state.
|
||||
*/
|
||||
private fun clearEventList() {
|
||||
for (event in eventList) {
|
||||
event.recycle()
|
||||
}
|
||||
eventList.clear()
|
||||
indexFirst = 0
|
||||
indexLastMoveRecognized = 0
|
||||
}
|
||||
|
||||
/**
|
||||
* Returns a numeric value for a given [DistanceThreshold], based on the values defined in
|
||||
* the resources dimens.xml file.
|
||||
*/
|
||||
private fun numericValue(of: DistanceThreshold): Double {
|
||||
return when (of) {
|
||||
DistanceThreshold.VERY_SHORT -> context.resources.getDimension(R.dimen.gesture_distance_threshold_very_short)
|
||||
DistanceThreshold.SHORT -> context.resources.getDimension(R.dimen.gesture_distance_threshold_short)
|
||||
DistanceThreshold.NORMAL -> context.resources.getDimension(R.dimen.gesture_distance_threshold_normal)
|
||||
DistanceThreshold.LONG -> context.resources.getDimension(R.dimen.gesture_distance_threshold_long)
|
||||
DistanceThreshold.VERY_LONG -> context.resources.getDimension(R.dimen.gesture_distance_threshold_very_long)
|
||||
}.toDouble()
|
||||
}
|
||||
|
||||
/**
|
||||
* Returns a numeric value for a given [VelocityThreshold], based on the values defined in
|
||||
* the resources dimens.xml file.
|
||||
*/
|
||||
private fun numericValue(of: VelocityThreshold): Double {
|
||||
return when (of) {
|
||||
VelocityThreshold.VERY_SLOW -> context.resources.getInteger(R.integer.gesture_velocity_threshold_very_slow)
|
||||
VelocityThreshold.SLOW -> context.resources.getInteger(R.integer.gesture_velocity_threshold_slow)
|
||||
VelocityThreshold.NORMAL -> context.resources.getInteger(R.integer.gesture_velocity_threshold_normal)
|
||||
VelocityThreshold.FAST -> context.resources.getInteger(R.integer.gesture_velocity_threshold_fast)
|
||||
VelocityThreshold.VERY_FAST -> context.resources.getInteger(R.integer.gesture_velocity_threshold_very_fast)
|
||||
}.toDouble()
|
||||
private fun resetState() {
|
||||
firstMotionEvent = null
|
||||
lastMotionEvent = null
|
||||
absUnitCountX = 0
|
||||
absUnitCountY = 0
|
||||
}
|
||||
}
|
||||
|
||||
interface Listener {
|
||||
fun onSwipe(direction: Direction, type: Type): Boolean
|
||||
/**
|
||||
* An interface which provides an abstract callback function, which will be called for any
|
||||
* detected swipe event.
|
||||
*/
|
||||
fun interface Listener {
|
||||
fun onSwipe(event: Event): Boolean
|
||||
}
|
||||
|
||||
/**
|
||||
* Data class which describes a single gesture event.
|
||||
*/
|
||||
data class Event(
|
||||
/** The direction of the swipe. */
|
||||
val direction: Direction,
|
||||
/** The type of the swipe. */
|
||||
val type: Type,
|
||||
/** The unit count on the x-axis, measured from the first event (ACTION_DOWN). */
|
||||
val absUnitCountX: Int,
|
||||
/** The unit count on the y-axis, measured from the first event (ACTION_DOWN). */
|
||||
val absUnitCountY: Int,
|
||||
/** The unit count on the x-axis, measured from the last event (ACTION_MOVE). */
|
||||
val relUnitCountX: Int,
|
||||
/** The unit count on the y-axis, measured from the last event (ACTION_MOVE). */
|
||||
val relUnitCountY: Int
|
||||
)
|
||||
|
||||
/**
|
||||
* ENum which defines the direction of the detected swipe.
|
||||
*/
|
||||
enum class Direction {
|
||||
UP_LEFT,
|
||||
UP,
|
||||
@@ -189,6 +254,9 @@ abstract class SwipeGesture {
|
||||
LEFT,
|
||||
}
|
||||
|
||||
/**
|
||||
* Enum which defines the type of the gesture.
|
||||
*/
|
||||
enum class Type {
|
||||
TOUCH_UP,
|
||||
TOUCH_MOVE;
|
||||
|
||||
@@ -83,7 +83,8 @@ object KeyCode {
|
||||
const val SWITCH_TO_TEXT_CONTEXT = -212
|
||||
const val SWITCH_TO_MEDIA_CONTEXT = -213
|
||||
const val SWITCH_TO_CLIPBOARD_CONTEXT = -214
|
||||
const val TOGGLE_ONE_HANDED_MODE = -215
|
||||
const val TOGGLE_ONE_HANDED_MODE_LEFT = -215
|
||||
const val TOGGLE_ONE_HANDED_MODE_RIGHT =-216
|
||||
const val URI_COMPONENT_TLD = -255
|
||||
|
||||
const val KESHIDA = 1600
|
||||
|
||||
@@ -16,8 +16,8 @@
|
||||
|
||||
package dev.patrickgold.florisboard.ime.text.key
|
||||
|
||||
import android.annotation.SuppressLint
|
||||
import com.squareup.moshi.FromJson
|
||||
import java.util.*
|
||||
|
||||
enum class KeyVariation {
|
||||
ALL,
|
||||
@@ -27,9 +27,8 @@ enum class KeyVariation {
|
||||
URI;
|
||||
|
||||
companion object {
|
||||
@SuppressLint("DefaultLocale")
|
||||
fun fromString(string: String): KeyVariation {
|
||||
return valueOf(string.toUpperCase())
|
||||
return valueOf(string.toUpperCase(Locale.ENGLISH))
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -33,6 +33,7 @@ import dev.patrickgold.florisboard.R
|
||||
import dev.patrickgold.florisboard.ime.core.FlorisBoard
|
||||
import dev.patrickgold.florisboard.ime.core.ImeOptions
|
||||
import dev.patrickgold.florisboard.ime.core.PrefHelper
|
||||
import dev.patrickgold.florisboard.ime.core.Subtype
|
||||
import dev.patrickgold.florisboard.ime.text.gestures.SwipeAction
|
||||
import dev.patrickgold.florisboard.ime.text.gestures.SwipeGesture
|
||||
import dev.patrickgold.florisboard.ime.text.keyboard.KeyboardMode
|
||||
@@ -42,6 +43,7 @@ import dev.patrickgold.florisboard.ime.theme.ThemeManager
|
||||
import dev.patrickgold.florisboard.ime.theme.ThemeValue
|
||||
import dev.patrickgold.florisboard.util.*
|
||||
import java.util.*
|
||||
import kotlin.math.abs
|
||||
|
||||
/**
|
||||
* View class for managing the rendering and the events of a single keyboard key.
|
||||
@@ -54,13 +56,16 @@ import java.util.*
|
||||
@SuppressLint("ViewConstructor")
|
||||
class KeyView(
|
||||
private val keyboardView: KeyboardView,
|
||||
val data: FlorisKeyData
|
||||
val data: FlorisKeyData,
|
||||
private val florisboard: FlorisBoard?
|
||||
) : View(keyboardView.context), SwipeGesture.Listener, ThemeManager.OnThemeUpdatedListener {
|
||||
private var isKeyPressed: Boolean = false
|
||||
set(value) {
|
||||
field = value
|
||||
updateKeyPressedBackground()
|
||||
}
|
||||
private var initSelectionStart: Int = 0
|
||||
private var initSelectionEnd: Int = 0
|
||||
private var hasTriggeredGestureMove: Boolean = false
|
||||
private var keyHintMode: KeyHintMode = KeyHintMode.DISABLED
|
||||
private val longKeyPressHandler: Handler = Handler(context.mainLooper)
|
||||
@@ -95,13 +100,12 @@ class KeyView(
|
||||
isFakeBoldText = false
|
||||
textAlign = Paint.Align.CENTER
|
||||
textSize = resources.getDimension(R.dimen.key_textHintSize)
|
||||
typeface = Typeface.DEFAULT
|
||||
typeface = Typeface.MONOSPACE
|
||||
}
|
||||
private val tempRect: Rect = Rect()
|
||||
private var themeValueCache: ThemeValueCache = ThemeValueCache()
|
||||
|
||||
var florisboard: FlorisBoard? = null
|
||||
private val swipeGestureDetector = SwipeGesture.Detector(context, this)
|
||||
val swipeGestureDetector = SwipeGesture.Detector(context, this)
|
||||
var touchHitBox: Rect = Rect(-1, -1, -1, -1)
|
||||
|
||||
init {
|
||||
@@ -152,7 +156,7 @@ class KeyView(
|
||||
keyHintMode = prefs.keyboard.hintedNumberRowMode
|
||||
}
|
||||
if (prefs.keyboard.hintedSymbolsMode != KeyHintMode.DISABLED && data.popup.hint?.type == KeyType.CHARACTER) {
|
||||
keyHintMode = prefs.keyboard.hintedNumberRowMode
|
||||
keyHintMode = prefs.keyboard.hintedSymbolsMode
|
||||
}
|
||||
|
||||
updateKeyPressedBackground()
|
||||
@@ -162,20 +166,29 @@ class KeyView(
|
||||
* Creates a label text from the given [keyData].
|
||||
*
|
||||
* @param keyData Optional. The key data to generate the label from. Defaults to [data].
|
||||
* @return The generated label.
|
||||
* @param caps If the generated text should be uppercase (true) or in lowercase (false).
|
||||
* Defaults to FlorisBoard's TextInputManager's caps state or false. Ignored when the passed
|
||||
* [keyData] is a TLD, in which case always the lower case variant is returned.
|
||||
* @param subtype The subtype for which this label should be created. Defaults to
|
||||
* [Subtype.DEFAULT]. Ignored when the passed [keyData] is a TLD.
|
||||
* @return The generated label ready for usage in the front-end UI.
|
||||
*/
|
||||
fun getComputedLetter(keyData: KeyData = data): String {
|
||||
if (keyData.code == KeyCode.URI_COMPONENT_TLD) {
|
||||
return when (florisboard?.textInputManager?.caps) {
|
||||
true -> keyData.label.toUpperCase(Locale.getDefault())
|
||||
else -> keyData.label.toLowerCase(Locale.getDefault())
|
||||
fun getComputedLetter(
|
||||
keyData: KeyData = data,
|
||||
caps: Boolean = florisboard?.textInputManager?.caps ?: false && florisboard?.textInputManager?.getActiveKeyboardMode() == KeyboardMode.CHARACTERS,
|
||||
subtype: Subtype = florisboard?.activeSubtype ?: Subtype.DEFAULT
|
||||
): String {
|
||||
return when (data.code) {
|
||||
KeyCode.URI_COMPONENT_TLD -> keyData.label.toLowerCase(Locale.ENGLISH)
|
||||
else -> {
|
||||
val labelText = (keyData.code.toChar()).toString()
|
||||
if (caps) {
|
||||
labelText.toUpperCase(subtype.locale)
|
||||
} else {
|
||||
labelText
|
||||
}
|
||||
}
|
||||
}
|
||||
val label = (keyData.code.toChar()).toString()
|
||||
return when {
|
||||
florisboard?.textInputManager?.caps ?: false -> label.toUpperCase(Locale.getDefault())
|
||||
else -> label
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
@@ -204,7 +217,11 @@ class KeyView(
|
||||
*/
|
||||
fun onFlorisTouchEvent(event: MotionEvent?): Boolean {
|
||||
if (event == null || !isEnabled) return false
|
||||
if (swipeGestureDetector.onTouchEvent(event)) {
|
||||
val alwaysTriggerOnMove = (hasTriggeredGestureMove
|
||||
&& florisboard?.activeEditorInstance?.isRawInputEditor == false
|
||||
&& (data.code == KeyCode.DELETE && prefs.gestures.deleteKeySwipeLeft == SwipeAction.DELETE_CHARACTERS_PRECISELY
|
||||
|| data.code == KeyCode.SPACE))
|
||||
if (swipeGestureDetector.onTouchEvent(event, alwaysTriggerOnMove)) {
|
||||
isKeyPressed = false
|
||||
longKeyPressHandler.cancelAll()
|
||||
repeatedKeyPressHandler.cancelAll()
|
||||
@@ -236,7 +253,7 @@ class KeyView(
|
||||
KeyCode.ARROW_RIGHT,
|
||||
KeyCode.ARROW_UP,
|
||||
KeyCode.DELETE -> {
|
||||
repeatedKeyPressHandler.postAtScheduledRate(delayMillis, 25) {
|
||||
repeatedKeyPressHandler.postAtScheduledRate((delayMillis * 2.0f).toLong(), 25) {
|
||||
if (isKeyPressed) {
|
||||
florisboard?.textInputManager?.sendKeyPress(data)
|
||||
} else {
|
||||
@@ -245,18 +262,24 @@ class KeyView(
|
||||
}
|
||||
}
|
||||
}
|
||||
longKeyPressHandler.postDelayed(delayMillis) {
|
||||
if (data.popup.isNotEmpty()) {
|
||||
keyboardView.popupManager.extend(this, keyHintMode)
|
||||
if (data.code == KeyCode.SPACE) {
|
||||
initSelectionStart = florisboard?.activeEditorInstance?.selection?.start ?: 0
|
||||
initSelectionEnd = florisboard?.activeEditorInstance?.selection?.end ?: 0
|
||||
longKeyPressHandler.postDelayed((delayMillis * 2.5f).toLong()) {
|
||||
when (prefs.gestures.spaceBarLongPress) {
|
||||
SwipeAction.NO_ACTION,
|
||||
SwipeAction.INSERT_SPACE -> {}
|
||||
else -> {
|
||||
florisboard?.executeSwipeAction(prefs.gestures.spaceBarLongPress)
|
||||
shouldBlockNextKeyCode = true
|
||||
}
|
||||
}
|
||||
}
|
||||
if (data.code == KeyCode.SPACE) {
|
||||
florisboard?.textInputManager?.sendKeyPress(
|
||||
KeyData(
|
||||
type = KeyType.FUNCTION,
|
||||
code = KeyCode.SHOW_INPUT_METHOD_PICKER,
|
||||
)
|
||||
)
|
||||
shouldBlockNextKeyCode = true
|
||||
} else {
|
||||
longKeyPressHandler.postDelayed(delayMillis) {
|
||||
if (data.popup.isNotEmpty()) {
|
||||
keyboardView.popupManager.extend(this, keyHintMode)
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -286,7 +309,6 @@ class KeyView(
|
||||
repeatedKeyPressHandler.cancelAll()
|
||||
if (data.code != KeyCode.SHIFT) {
|
||||
if (hasTriggeredGestureMove && data.code == KeyCode.DELETE) {
|
||||
hasTriggeredGestureMove = false
|
||||
florisboard?.activeEditorInstance?.apply {
|
||||
if (selection.isSelectionMode) {
|
||||
deleteBackwards()
|
||||
@@ -302,6 +324,7 @@ class KeyView(
|
||||
keyboardView.popupManager.hide()
|
||||
}
|
||||
}
|
||||
hasTriggeredGestureMove = false
|
||||
isKeyPressed = false
|
||||
}
|
||||
else -> return false
|
||||
@@ -313,47 +336,33 @@ class KeyView(
|
||||
* Swipe event handler. Listens to touch_move left/right swipes and triggers the swipe action
|
||||
* defined in the prefs.
|
||||
*/
|
||||
override fun onSwipe(direction: SwipeGesture.Direction, type: SwipeGesture.Type): Boolean {
|
||||
override fun onSwipe(event: SwipeGesture.Event): Boolean {
|
||||
val florisboard = florisboard ?: return false
|
||||
return when (data.code) {
|
||||
KeyCode.DELETE -> when (type) {
|
||||
SwipeGesture.Type.TOUCH_MOVE -> when (direction) {
|
||||
SwipeGesture.Direction.LEFT -> when (prefs.gestures.deleteKeySwipeLeft) {
|
||||
SwipeAction.DELETE_CHARACTERS_PRECISELY -> {
|
||||
florisboard?.activeEditorInstance?.apply {
|
||||
setSelection(
|
||||
if (selection.start > 0) { selection.start - 1 } else { selection.start },
|
||||
selection.end
|
||||
)
|
||||
}
|
||||
hasTriggeredGestureMove = true
|
||||
shouldBlockNextKeyCode = true
|
||||
true
|
||||
KeyCode.DELETE -> when (event.type) {
|
||||
SwipeGesture.Type.TOUCH_MOVE -> when (prefs.gestures.deleteKeySwipeLeft) {
|
||||
SwipeAction.DELETE_CHARACTERS_PRECISELY -> {
|
||||
florisboard.activeEditorInstance.apply {
|
||||
setSelection(
|
||||
(selection.end + event.absUnitCountX).coerceIn(0, selection.end),
|
||||
selection.end
|
||||
)
|
||||
}
|
||||
SwipeAction.DELETE_WORDS_PRECISELY -> {
|
||||
florisboard?.activeEditorInstance?.apply {
|
||||
hasTriggeredGestureMove = true
|
||||
shouldBlockNextKeyCode = true
|
||||
true
|
||||
}
|
||||
SwipeAction.DELETE_WORDS_PRECISELY -> when (event.direction) {
|
||||
SwipeGesture.Direction.LEFT -> {
|
||||
florisboard.activeEditorInstance.apply {
|
||||
leftAppendWordToSelection()
|
||||
}
|
||||
|
||||
hasTriggeredGestureMove = true
|
||||
shouldBlockNextKeyCode = true
|
||||
true
|
||||
}
|
||||
else -> false
|
||||
}
|
||||
SwipeGesture.Direction.RIGHT -> when (prefs.gestures.deleteKeySwipeLeft) {
|
||||
SwipeAction.DELETE_CHARACTERS_PRECISELY -> {
|
||||
florisboard?.activeEditorInstance?.apply {
|
||||
setSelection(
|
||||
if (selection.start < selection.end) { selection.start + 1 } else { selection.start },
|
||||
selection.end
|
||||
)
|
||||
}
|
||||
shouldBlockNextKeyCode = true
|
||||
true
|
||||
}
|
||||
|
||||
SwipeAction.DELETE_WORDS_PRECISELY -> {
|
||||
florisboard?.activeEditorInstance?.apply {
|
||||
SwipeGesture.Direction.RIGHT -> {
|
||||
florisboard.activeEditorInstance.apply {
|
||||
leftPopWordFromSelection()
|
||||
}
|
||||
shouldBlockNextKeyCode = true
|
||||
@@ -365,20 +374,49 @@ class KeyView(
|
||||
}
|
||||
else -> false
|
||||
}
|
||||
KeyCode.SPACE -> when (type) {
|
||||
SwipeGesture.Type.TOUCH_MOVE -> when (direction) {
|
||||
KeyCode.SPACE -> when (event.type) {
|
||||
SwipeGesture.Type.TOUCH_MOVE -> when (event.direction) {
|
||||
SwipeGesture.Direction.UP -> {
|
||||
florisboard?.executeSwipeAction(prefs.gestures.spaceBarSwipeUp)
|
||||
shouldBlockNextKeyCode = true
|
||||
true
|
||||
if (event.absUnitCountY.times(-1) >= 6) {
|
||||
florisboard.executeSwipeAction(prefs.gestures.spaceBarSwipeUp)
|
||||
hasTriggeredGestureMove = true
|
||||
shouldBlockNextKeyCode = true
|
||||
true
|
||||
} else {
|
||||
false
|
||||
}
|
||||
}
|
||||
SwipeGesture.Direction.LEFT -> {
|
||||
florisboard?.executeSwipeAction(prefs.gestures.spaceBarSwipeLeft)
|
||||
if (prefs.gestures.spaceBarSwipeLeft == SwipeAction.MOVE_CURSOR_LEFT) {
|
||||
if (!florisboard.activeEditorInstance.isRawInputEditor) {
|
||||
val s = (initSelectionEnd + event.absUnitCountX).coerceIn(0, florisboard.activeEditorInstance.cachedText.length)
|
||||
florisboard.activeEditorInstance.setSelection(s, s)
|
||||
} else {
|
||||
for (n in 0 until abs(event.relUnitCountX)) {
|
||||
florisboard.executeSwipeAction(prefs.gestures.spaceBarSwipeLeft)
|
||||
}
|
||||
}
|
||||
} else {
|
||||
florisboard.executeSwipeAction(prefs.gestures.spaceBarSwipeLeft)
|
||||
}
|
||||
hasTriggeredGestureMove = true
|
||||
shouldBlockNextKeyCode = true
|
||||
true
|
||||
}
|
||||
SwipeGesture.Direction.RIGHT -> {
|
||||
florisboard?.executeSwipeAction(prefs.gestures.spaceBarSwipeRight)
|
||||
if (prefs.gestures.spaceBarSwipeRight == SwipeAction.MOVE_CURSOR_RIGHT) {
|
||||
if (!florisboard.activeEditorInstance.isRawInputEditor) {
|
||||
val s = (initSelectionEnd + event.absUnitCountX).coerceIn(0, florisboard.activeEditorInstance.cachedText.length)
|
||||
florisboard.activeEditorInstance.setSelection(s, s)
|
||||
} else {
|
||||
for (n in 0 until abs(event.relUnitCountX)) {
|
||||
florisboard.executeSwipeAction(prefs.gestures.spaceBarSwipeRight)
|
||||
}
|
||||
}
|
||||
} else {
|
||||
florisboard.executeSwipeAction(prefs.gestures.spaceBarSwipeRight)
|
||||
}
|
||||
hasTriggeredGestureMove = true
|
||||
shouldBlockNextKeyCode = true
|
||||
true
|
||||
}
|
||||
@@ -397,25 +435,30 @@ class KeyView(
|
||||
* by Devunwired
|
||||
*/
|
||||
override fun onMeasure(widthMeasureSpec: Int, heightMeasureSpec: Int) {
|
||||
desiredWidth = when (keyboardView.computedLayout?.mode) {
|
||||
desiredWidth = (keyboardView.desiredKeyWidth * when (keyboardView.computedLayout?.mode) {
|
||||
KeyboardMode.NUMERIC,
|
||||
KeyboardMode.PHONE,
|
||||
KeyboardMode.PHONE2 -> (keyboardView.desiredKeyWidth * 2.68f).toInt()
|
||||
KeyboardMode.PHONE2 -> 2.68f
|
||||
KeyboardMode.NUMERIC_ADVANCED -> when (data.code) {
|
||||
44, 46 -> keyboardView.desiredKeyWidth
|
||||
KeyCode.VIEW_SYMBOLS, 61 -> (keyboardView.desiredKeyWidth * 1.34f).toInt()
|
||||
else -> (keyboardView.desiredKeyWidth * 1.56f).toInt()
|
||||
44, 46 -> 1.00f
|
||||
KeyCode.VIEW_SYMBOLS, 61 -> 1.34f
|
||||
else -> 1.56f
|
||||
}
|
||||
else -> when (data.code) {
|
||||
KeyCode.SHIFT,
|
||||
KeyCode.DELETE ->
|
||||
if ((keyboardView.computedLayout?.arrangement?.get(2)?.size ?: 0) > 10) {
|
||||
1.12f
|
||||
} else {
|
||||
1.56f
|
||||
}
|
||||
KeyCode.VIEW_CHARACTERS,
|
||||
KeyCode.VIEW_SYMBOLS,
|
||||
KeyCode.VIEW_SYMBOLS2,
|
||||
KeyCode.DELETE,
|
||||
KeyCode.ENTER -> (keyboardView.desiredKeyWidth * 1.56f).toInt()
|
||||
else -> keyboardView.desiredKeyWidth
|
||||
KeyCode.ENTER -> 1.56f
|
||||
else -> 1.00f
|
||||
}
|
||||
}
|
||||
}).toInt()
|
||||
desiredHeight = keyboardView.desiredKeyHeight
|
||||
|
||||
val widthMode = MeasureSpec.getMode(widthMeasureSpec)
|
||||
@@ -478,10 +521,9 @@ class KeyView(
|
||||
private fun updateEnabledState() {
|
||||
isEnabled = when (data.code) {
|
||||
KeyCode.CLIPBOARD_COPY,
|
||||
KeyCode.CLIPBOARD_CUT -> {
|
||||
florisboard?.activeEditorInstance?.selection?.isSelectionMode == true &&
|
||||
florisboard?.activeEditorInstance?.isRawInputEditor == false
|
||||
}
|
||||
KeyCode.CLIPBOARD_CUT -> (florisboard != null
|
||||
&& florisboard.activeEditorInstance.selection.isSelectionMode
|
||||
&& !florisboard.activeEditorInstance.isRawInputEditor)
|
||||
KeyCode.CLIPBOARD_PASTE -> florisboard?.clipboardManager?.hasPrimaryClip() == true
|
||||
KeyCode.CLIPBOARD_SELECT_ALL -> {
|
||||
florisboard?.activeEditorInstance?.isRawInputEditor == false
|
||||
@@ -494,35 +536,53 @@ class KeyView(
|
||||
}
|
||||
|
||||
override fun onThemeUpdated(theme: Theme) {
|
||||
if (keyboardView.isSmartbarKeyboardView) {
|
||||
themeValueCache.apply {
|
||||
keyBackground = theme.getAttr(Theme.Attr.SMARTBAR_BACKGROUND)
|
||||
keyBackgroundPressed = theme.getAttr(Theme.Attr.SMARTBAR_BUTTON_BACKGROUND)
|
||||
keyForeground = theme.getAttr(Theme.Attr.SMARTBAR_FOREGROUND)
|
||||
keyForegroundAlt = theme.getAttr(Theme.Attr.SMARTBAR_FOREGROUND_ALT)
|
||||
keyForegroundPressed = theme.getAttr(Theme.Attr.SMARTBAR_FOREGROUND)
|
||||
shouldShowBorder = false
|
||||
}
|
||||
} else {
|
||||
val label = data.label
|
||||
val capsSpecific = when {
|
||||
florisboard?.textInputManager?.capsLock == true -> {
|
||||
"capslock"
|
||||
}
|
||||
florisboard?.textInputManager?.caps == true -> {
|
||||
"caps"
|
||||
}
|
||||
else -> {
|
||||
null
|
||||
when {
|
||||
keyboardView.isLoadingPlaceholderKeyboard -> {
|
||||
val label = data.label
|
||||
themeValueCache.apply {
|
||||
shouldShowBorder = theme.getAttr(Theme.Attr.KEY_SHOW_BORDER, label).toOnOff().state
|
||||
keyBackground = if (shouldShowBorder) {
|
||||
theme.getAttr(Theme.Attr.KEY_BACKGROUND, label)
|
||||
} else {
|
||||
theme.getAttr(Theme.Attr.SMARTBAR_BUTTON_BACKGROUND, label)
|
||||
}
|
||||
keyBackgroundPressed = theme.getAttr(Theme.Attr.KEY_BACKGROUND_PRESSED, label)
|
||||
keyForeground = keyBackground
|
||||
keyForegroundAlt = ThemeValue.SolidColor(0)
|
||||
keyForegroundPressed = keyBackgroundPressed
|
||||
}
|
||||
}
|
||||
themeValueCache.apply {
|
||||
keyBackground = theme.getAttr(Theme.Attr.KEY_BACKGROUND, label, capsSpecific)
|
||||
keyBackgroundPressed = theme.getAttr(Theme.Attr.KEY_BACKGROUND_PRESSED, label, capsSpecific)
|
||||
keyForeground = theme.getAttr(Theme.Attr.KEY_FOREGROUND, label, capsSpecific)
|
||||
keyForegroundAlt = ThemeValue.SolidColor(0)
|
||||
keyForegroundPressed = theme.getAttr(Theme.Attr.KEY_FOREGROUND_PRESSED, label, capsSpecific)
|
||||
shouldShowBorder = theme.getAttr(Theme.Attr.KEY_SHOW_BORDER, label, capsSpecific).toOnOff().state
|
||||
keyboardView.isSmartbarKeyboardView -> {
|
||||
themeValueCache.apply {
|
||||
keyBackground = theme.getAttr(Theme.Attr.SMARTBAR_BACKGROUND)
|
||||
keyBackgroundPressed = theme.getAttr(Theme.Attr.SMARTBAR_BUTTON_BACKGROUND)
|
||||
keyForeground = theme.getAttr(Theme.Attr.SMARTBAR_FOREGROUND)
|
||||
keyForegroundAlt = theme.getAttr(Theme.Attr.SMARTBAR_FOREGROUND_ALT)
|
||||
keyForegroundPressed = theme.getAttr(Theme.Attr.SMARTBAR_FOREGROUND)
|
||||
shouldShowBorder = false
|
||||
}
|
||||
}
|
||||
else -> {
|
||||
val label = data.label
|
||||
val capsSpecific = when {
|
||||
florisboard?.textInputManager?.capsLock == true -> {
|
||||
"capslock"
|
||||
}
|
||||
florisboard?.textInputManager?.caps == true -> {
|
||||
"caps"
|
||||
}
|
||||
else -> {
|
||||
null
|
||||
}
|
||||
}
|
||||
themeValueCache.apply {
|
||||
keyBackground = theme.getAttr(Theme.Attr.KEY_BACKGROUND, label, capsSpecific)
|
||||
keyBackgroundPressed = theme.getAttr(Theme.Attr.KEY_BACKGROUND_PRESSED, label, capsSpecific)
|
||||
keyForeground = theme.getAttr(Theme.Attr.KEY_FOREGROUND, label, capsSpecific)
|
||||
keyForegroundAlt = ThemeValue.SolidColor(0)
|
||||
keyForegroundPressed = theme.getAttr(Theme.Attr.KEY_FOREGROUND_PRESSED, label, capsSpecific)
|
||||
shouldShowBorder = theme.getAttr(Theme.Attr.KEY_SHOW_BORDER, label, capsSpecific).toOnOff().state
|
||||
}
|
||||
}
|
||||
}
|
||||
updateKeyPressedBackground()
|
||||
@@ -576,17 +636,39 @@ class KeyView(
|
||||
when (data.code) {
|
||||
KeyCode.SWITCH_TO_TEXT_CONTEXT,
|
||||
KeyCode.SWITCH_TO_MEDIA_CONTEXT -> {
|
||||
visibility = if (florisboard?.shouldShowLanguageSwitch() == true) {
|
||||
GONE
|
||||
} else {
|
||||
VISIBLE
|
||||
val tempUtilityKeyAction = when {
|
||||
prefs.keyboard.utilityKeyEnabled -> prefs.keyboard.utilityKeyAction
|
||||
else -> UtilityKeyAction.DISABLED
|
||||
}
|
||||
visibility = when (tempUtilityKeyAction) {
|
||||
UtilityKeyAction.DISABLED,
|
||||
UtilityKeyAction.SWITCH_LANGUAGE,
|
||||
UtilityKeyAction.SWITCH_KEYBOARD_APP -> GONE
|
||||
UtilityKeyAction.SWITCH_TO_EMOJIS -> VISIBLE
|
||||
UtilityKeyAction.DYNAMIC_SWITCH_LANGUAGE_EMOJIS ->
|
||||
if (florisboard?.shouldShowLanguageSwitch() == true) {
|
||||
GONE
|
||||
} else {
|
||||
VISIBLE
|
||||
}
|
||||
}
|
||||
}
|
||||
KeyCode.LANGUAGE_SWITCH -> {
|
||||
visibility = if (florisboard?.shouldShowLanguageSwitch() == true) {
|
||||
VISIBLE
|
||||
} else {
|
||||
GONE
|
||||
val tempUtilityKeyAction = when {
|
||||
prefs.keyboard.utilityKeyEnabled -> prefs.keyboard.utilityKeyAction
|
||||
else -> UtilityKeyAction.DISABLED
|
||||
}
|
||||
visibility = when (tempUtilityKeyAction) {
|
||||
UtilityKeyAction.DISABLED,
|
||||
UtilityKeyAction.SWITCH_TO_EMOJIS -> GONE
|
||||
UtilityKeyAction.SWITCH_LANGUAGE,
|
||||
UtilityKeyAction.SWITCH_KEYBOARD_APP -> VISIBLE
|
||||
UtilityKeyAction.DYNAMIC_SWITCH_LANGUAGE_EMOJIS ->
|
||||
if (florisboard?.shouldShowLanguageSwitch() == true) {
|
||||
VISIBLE
|
||||
} else {
|
||||
GONE
|
||||
}
|
||||
}
|
||||
}
|
||||
else -> if (data.variation != KeyVariation.ALL) {
|
||||
@@ -631,13 +713,9 @@ class KeyView(
|
||||
}
|
||||
|
||||
/**
|
||||
* Draw the key label / drawable.
|
||||
* Computes the labels and drawables needed to draw the key.
|
||||
*/
|
||||
override fun onDraw(canvas: Canvas?) {
|
||||
super.onDraw(canvas)
|
||||
|
||||
canvas ?: return
|
||||
|
||||
private fun computeLabelsAndDrawables() {
|
||||
if (data.type == KeyType.CHARACTER && data.code != KeyCode.SPACE
|
||||
&& data.code != KeyCode.HALF_SPACE && data.code != KeyCode.KESHIDA || data.type == KeyType.NUMERIC
|
||||
) {
|
||||
@@ -745,6 +823,17 @@ class KeyView(
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Draw the key label / drawable.
|
||||
*/
|
||||
override fun onDraw(canvas: Canvas?) {
|
||||
super.onDraw(canvas)
|
||||
|
||||
canvas ?: return
|
||||
|
||||
computeLabelsAndDrawables()
|
||||
|
||||
// Draw drawable
|
||||
val drawable = drawable
|
||||
@@ -816,7 +905,11 @@ class KeyView(
|
||||
}
|
||||
}
|
||||
}
|
||||
labelPaint.color = themeValueCache.keyForeground.toSolidColor().color
|
||||
labelPaint.color = if (isKeyPressed && isEnabled) {
|
||||
themeValueCache.keyForegroundPressed.toSolidColor().color
|
||||
} else {
|
||||
themeValueCache.keyForeground.toSolidColor().color
|
||||
}
|
||||
labelPaint.alpha = if (keyboardView.computedLayout?.mode == KeyboardMode.CHARACTERS &&
|
||||
data.code == KeyCode.SPACE) { 120 } else { 255 }
|
||||
val centerX = measuredWidth / 2.0f
|
||||
@@ -836,15 +929,15 @@ class KeyView(
|
||||
if (hintedLabel != null) {
|
||||
setTextSizeFor(
|
||||
hintedLabelPaint,
|
||||
desiredWidth * 1.0f / 6.0f,
|
||||
desiredHeight * 1.0f / 6.0f,
|
||||
desiredWidth * 1.0f / 5.0f,
|
||||
desiredHeight * 1.0f / 5.0f,
|
||||
// Note: taking a "X" here because it is one of the biggest letters and
|
||||
// the keys must have the same base character for calculation, else
|
||||
// they will all look different and weird...
|
||||
"X"
|
||||
)
|
||||
hintedLabelPaint.color = labelPaint.color
|
||||
hintedLabelPaint.alpha = 120
|
||||
hintedLabelPaint.alpha = 170
|
||||
val centerX = measuredWidth * 5.0f / 6.0f
|
||||
val centerY = measuredHeight * 1.0f / 6.0f + (hintedLabelPaint.textSize - hintedLabelPaint.descent()) / 2
|
||||
canvas.drawText(hintedLabel, centerX, centerY, hintedLabelPaint)
|
||||
|
||||
@@ -0,0 +1,36 @@
|
||||
/*
|
||||
* Copyright (C) 2020 Patrick Goldinger
|
||||
*
|
||||
* Licensed under the Apache License, Version 2.0 (the "License");
|
||||
* you may not use this file except in compliance with the License.
|
||||
* You may obtain a copy of the License at
|
||||
*
|
||||
* http://www.apache.org/licenses/LICENSE-2.0
|
||||
*
|
||||
* Unless required by applicable law or agreed to in writing, software
|
||||
* distributed under the License is distributed on an "AS IS" BASIS,
|
||||
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||
* See the License for the specific language governing permissions and
|
||||
* limitations under the License.
|
||||
*/
|
||||
|
||||
package dev.patrickgold.florisboard.ime.text.key
|
||||
|
||||
import java.util.*
|
||||
|
||||
/**
|
||||
* Enum for declaring the utility key actions.
|
||||
*/
|
||||
enum class UtilityKeyAction {
|
||||
SWITCH_TO_EMOJIS,
|
||||
SWITCH_LANGUAGE,
|
||||
SWITCH_KEYBOARD_APP,
|
||||
DYNAMIC_SWITCH_LANGUAGE_EMOJIS,
|
||||
DISABLED;
|
||||
|
||||
companion object {
|
||||
fun fromString(string: String): UtilityKeyAction {
|
||||
return valueOf(string.toUpperCase(Locale.ENGLISH))
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -64,6 +64,7 @@ class KeyboardView : LinearLayout, FlorisBoard.EventListener, SwipeGesture.Liste
|
||||
private var initialKeyCode: Int = 0
|
||||
private val isPreviewMode: Boolean
|
||||
val isSmartbarKeyboardView: Boolean
|
||||
val isLoadingPlaceholderKeyboard: Boolean
|
||||
var popupManager = PopupManager<KeyboardView, KeyView>(this, florisboard?.popupLayerView)
|
||||
private val prefs: PrefHelper = PrefHelper.getDefaultInstance(context)
|
||||
private val themeManager: ThemeManager = ThemeManager.default()
|
||||
@@ -75,6 +76,7 @@ class KeyboardView : LinearLayout, FlorisBoard.EventListener, SwipeGesture.Liste
|
||||
context.obtainStyledAttributes(attrs, R.styleable.KeyboardView).apply {
|
||||
isPreviewMode = getBoolean(R.styleable.KeyboardView_isPreviewKeyboard, false)
|
||||
isSmartbarKeyboardView = getBoolean(R.styleable.KeyboardView_isSmartbarKeyboard, false)
|
||||
isLoadingPlaceholderKeyboard = getBoolean(R.styleable.KeyboardView_isLoadingPlaceholderKeyboard, false)
|
||||
recycle()
|
||||
}
|
||||
orientation = VERTICAL
|
||||
@@ -82,8 +84,10 @@ class KeyboardView : LinearLayout, FlorisBoard.EventListener, SwipeGesture.Liste
|
||||
FrameLayout.LayoutParams.MATCH_PARENT,
|
||||
FrameLayout.LayoutParams.WRAP_CONTENT
|
||||
)
|
||||
florisboard?.addEventListener(this)
|
||||
onWindowShown()
|
||||
if (isLoadingPlaceholderKeyboard) {
|
||||
computedLayout = ComputedLayoutData.PRE_GENERATED_LOADING_KEYBOARD
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
@@ -95,14 +99,14 @@ class KeyboardView : LinearLayout, FlorisBoard.EventListener, SwipeGesture.Liste
|
||||
for (row in computedLayout.arrangement) {
|
||||
val rowView = KeyboardRowView(context)
|
||||
for (key in row) {
|
||||
val keyView = KeyView(this, key)
|
||||
keyView.florisboard = florisboard
|
||||
val keyView = KeyView(this, key, florisboard)
|
||||
rowView.addView(keyView)
|
||||
}
|
||||
addView(rowView)
|
||||
}
|
||||
if (!isPreviewMode) {
|
||||
themeManager.requestThemeUpdate(this)
|
||||
onWindowShown()
|
||||
} else {
|
||||
updateVisibility()
|
||||
}
|
||||
@@ -117,6 +121,7 @@ class KeyboardView : LinearLayout, FlorisBoard.EventListener, SwipeGesture.Liste
|
||||
|
||||
override fun onAttachedToWindow() {
|
||||
super.onAttachedToWindow()
|
||||
florisboard?.addEventListener(this)
|
||||
if (!isPreviewMode) {
|
||||
themeManager.registerOnThemeUpdatedListener(this)
|
||||
}
|
||||
@@ -126,11 +131,12 @@ class KeyboardView : LinearLayout, FlorisBoard.EventListener, SwipeGesture.Liste
|
||||
* Dismisses all shown key popups when keyboard is detached from window.
|
||||
*/
|
||||
override fun onDetachedFromWindow() {
|
||||
super.onDetachedFromWindow()
|
||||
popupManager.dismissAllPopups()
|
||||
if (!isPreviewMode) {
|
||||
themeManager.unregisterOnThemeUpdatedListener(this)
|
||||
}
|
||||
florisboard?.removeEventListener(this)
|
||||
super.onDetachedFromWindow()
|
||||
}
|
||||
|
||||
override fun onWindowShown() {
|
||||
@@ -138,6 +144,18 @@ class KeyboardView : LinearLayout, FlorisBoard.EventListener, SwipeGesture.Liste
|
||||
distanceThreshold = prefs.gestures.swipeDistanceThreshold
|
||||
velocityThreshold = prefs.gestures.swipeVelocityThreshold
|
||||
}
|
||||
for (row in children) {
|
||||
if (row is ViewGroup) {
|
||||
for (keyView in row.children) {
|
||||
if (keyView is KeyView) {
|
||||
keyView.swipeGestureDetector.apply {
|
||||
distanceThreshold = prefs.gestures.swipeDistanceThreshold
|
||||
velocityThreshold = prefs.gestures.swipeVelocityThreshold
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
@@ -153,7 +171,7 @@ class KeyboardView : LinearLayout, FlorisBoard.EventListener, SwipeGesture.Liste
|
||||
@SuppressLint("ClickableViewAccessibility")
|
||||
override fun onTouchEvent(event: MotionEvent?): Boolean {
|
||||
event ?: return false
|
||||
if (isPreviewMode) {
|
||||
if (isPreviewMode || isLoadingPlaceholderKeyboard) {
|
||||
return false
|
||||
}
|
||||
val eventFloris = MotionEvent.obtainNoHistory(event)
|
||||
@@ -244,10 +262,10 @@ class KeyboardView : LinearLayout, FlorisBoard.EventListener, SwipeGesture.Liste
|
||||
* Swipe event handler. Listens to touch_up swipes and executes the swipe action defined for it
|
||||
* in the prefs.
|
||||
*/
|
||||
override fun onSwipe(direction: SwipeGesture.Direction, type: SwipeGesture.Type): Boolean {
|
||||
override fun onSwipe(event: SwipeGesture.Event): Boolean {
|
||||
return when {
|
||||
initialKeyCode == KeyCode.DELETE -> {
|
||||
if (type == SwipeGesture.Type.TOUCH_UP && direction == SwipeGesture.Direction.LEFT &&
|
||||
if (event.type == SwipeGesture.Type.TOUCH_UP && event.direction == SwipeGesture.Direction.LEFT &&
|
||||
prefs.gestures.deleteKeySwipeLeft == SwipeAction.DELETE_WORD) {
|
||||
florisboard?.executeSwipeAction(prefs.gestures.deleteKeySwipeLeft)
|
||||
true
|
||||
@@ -256,9 +274,9 @@ class KeyboardView : LinearLayout, FlorisBoard.EventListener, SwipeGesture.Liste
|
||||
}
|
||||
}
|
||||
initialKeyCode > KeyCode.SPACE && !popupManager.isShowingExtendedPopup -> when {
|
||||
!prefs.glide.enabled -> when (type) {
|
||||
!prefs.glide.enabled -> when (event.type) {
|
||||
SwipeGesture.Type.TOUCH_UP -> {
|
||||
val swipeAction = when (direction) {
|
||||
val swipeAction = when (event.direction) {
|
||||
SwipeGesture.Direction.UP -> prefs.gestures.swipeUp
|
||||
SwipeGesture.Direction.DOWN -> prefs.gestures.swipeDown
|
||||
SwipeGesture.Direction.LEFT -> prefs.gestures.swipeLeft
|
||||
|
||||
@@ -17,6 +17,9 @@
|
||||
package dev.patrickgold.florisboard.ime.text.layout
|
||||
|
||||
import dev.patrickgold.florisboard.ime.text.key.FlorisKeyData
|
||||
import dev.patrickgold.florisboard.ime.text.key.KeyCode
|
||||
import dev.patrickgold.florisboard.ime.text.key.KeyData
|
||||
import dev.patrickgold.florisboard.ime.text.key.KeyType
|
||||
import dev.patrickgold.florisboard.ime.text.keyboard.KeyboardMode
|
||||
|
||||
typealias LayoutDataArrangement = List<List<FlorisKeyData>>
|
||||
@@ -52,4 +55,56 @@ data class ComputedLayoutData(
|
||||
val name: String,
|
||||
val direction: String,
|
||||
val arrangement: ComputedLayoutDataArrangement = mutableListOf()
|
||||
)
|
||||
) {
|
||||
companion object {
|
||||
val PRE_GENERATED_LOADING_KEYBOARD = ComputedLayoutData(
|
||||
mode = KeyboardMode.CHARACTERS,
|
||||
name = "__loading_keyboard__",
|
||||
direction = "ltr",
|
||||
arrangement = mutableListOf(
|
||||
mutableListOf(
|
||||
FlorisKeyData(code = 0),
|
||||
FlorisKeyData(code = 0),
|
||||
FlorisKeyData(code = 0),
|
||||
FlorisKeyData(code = 0),
|
||||
FlorisKeyData(code = 0),
|
||||
FlorisKeyData(code = 0),
|
||||
FlorisKeyData(code = 0),
|
||||
FlorisKeyData(code = 0),
|
||||
FlorisKeyData(code = 0),
|
||||
FlorisKeyData(code = 0)
|
||||
),
|
||||
mutableListOf(
|
||||
FlorisKeyData(code = 0),
|
||||
FlorisKeyData(code = 0),
|
||||
FlorisKeyData(code = 0),
|
||||
FlorisKeyData(code = 0),
|
||||
FlorisKeyData(code = 0),
|
||||
FlorisKeyData(code = 0),
|
||||
FlorisKeyData(code = 0),
|
||||
FlorisKeyData(code = 0),
|
||||
FlorisKeyData(code = 0)
|
||||
),
|
||||
mutableListOf(
|
||||
FlorisKeyData(code = KeyCode.SHIFT, type = KeyType.MODIFIER, label = "shift"),
|
||||
FlorisKeyData(code = 0),
|
||||
FlorisKeyData(code = 0),
|
||||
FlorisKeyData(code = 0),
|
||||
FlorisKeyData(code = 0),
|
||||
FlorisKeyData(code = 0),
|
||||
FlorisKeyData(code = 0),
|
||||
FlorisKeyData(code = 0),
|
||||
FlorisKeyData(code = KeyCode.DELETE, type = KeyType.ENTER_EDITING, label = "delete")
|
||||
),
|
||||
mutableListOf(
|
||||
FlorisKeyData(code = KeyCode.VIEW_SYMBOLS, type = KeyType.SYSTEM_GUI, label = "view_symbols"),
|
||||
FlorisKeyData(code = 0),
|
||||
FlorisKeyData(code = 0),
|
||||
FlorisKeyData(code = KeyCode.SPACE, label = "space"),
|
||||
FlorisKeyData(code = 0),
|
||||
FlorisKeyData(code = KeyCode.ENTER, type = KeyType.ENTER_EDITING, label = "enter")
|
||||
)
|
||||
)
|
||||
)
|
||||
}
|
||||
}
|
||||
|
||||
@@ -18,11 +18,16 @@ package dev.patrickgold.florisboard.ime.text.layout
|
||||
|
||||
import android.content.Context
|
||||
import com.github.michaelbull.result.getOr
|
||||
import com.github.michaelbull.result.onSuccess
|
||||
import com.squareup.moshi.Moshi
|
||||
import com.squareup.moshi.kotlin.reflect.KotlinJsonAdapterFactory
|
||||
import dev.patrickgold.florisboard.ime.core.PrefHelper
|
||||
import dev.patrickgold.florisboard.ime.core.Subtype
|
||||
import dev.patrickgold.florisboard.ime.extension.AssetManager
|
||||
import dev.patrickgold.florisboard.ime.extension.AssetRef
|
||||
import dev.patrickgold.florisboard.ime.extension.AssetSource
|
||||
import dev.patrickgold.florisboard.ime.popup.PopupExtension
|
||||
import dev.patrickgold.florisboard.ime.popup.PopupManager
|
||||
import dev.patrickgold.florisboard.ime.popup.PopupSet
|
||||
import dev.patrickgold.florisboard.ime.text.key.*
|
||||
import dev.patrickgold.florisboard.ime.text.keyboard.KeyboardMode
|
||||
@@ -36,6 +41,7 @@ private typealias KMS = Pair<KeyboardMode, Subtype>
|
||||
* Class which manages layout loading and caching.
|
||||
*/
|
||||
class LayoutManager(private val context: Context) : CoroutineScope by MainScope() {
|
||||
private val assetManager: AssetManager = AssetManager.default()
|
||||
private val computedLayoutCache: HashMap<KMS, Deferred<ComputedLayoutData>> = hashMapOf()
|
||||
|
||||
/**
|
||||
@@ -65,9 +71,21 @@ class LayoutManager(private val context: Context) : CoroutineScope by MainScope(
|
||||
}
|
||||
|
||||
private fun loadExtendedPopups(subtype: Subtype? = null): PopupExtension {
|
||||
val lang = subtype?.locale?.language ?: "\$default"
|
||||
val map = PopupExtension.fromFile(context, "ime/text/characters/extended_popups/$lang.json")
|
||||
return map.getOr(PopupExtension.empty())
|
||||
val langTagRef = AssetRef(
|
||||
source = AssetSource.Assets,
|
||||
path = PopupManager.POPUP_EXTENSION_PATH_REL + "/" + (subtype?.locale?.toLanguageTag() ?: "\$default") + ".json"
|
||||
)
|
||||
val langRef = AssetRef(
|
||||
source = AssetSource.Assets,
|
||||
path = PopupManager.POPUP_EXTENSION_PATH_REL + "/" + (subtype?.locale?.language ?: "\$default") + ".json"
|
||||
)
|
||||
assetManager.loadAsset(langTagRef, PopupExtension::class.java).onSuccess {
|
||||
return it
|
||||
}
|
||||
assetManager.loadAsset(langRef, PopupExtension::class.java).onSuccess {
|
||||
return it
|
||||
}
|
||||
return PopupExtension.empty()
|
||||
}
|
||||
|
||||
/**
|
||||
|
||||
@@ -1,7 +1,7 @@
|
||||
package dev.patrickgold.florisboard.ime.text.layout
|
||||
|
||||
import android.annotation.SuppressLint
|
||||
import com.squareup.moshi.FromJson
|
||||
import java.util.*
|
||||
|
||||
/**
|
||||
* Defines the type of the layout.
|
||||
@@ -19,15 +19,13 @@ enum class LayoutType {
|
||||
SYMBOLS2,
|
||||
SYMBOLS2_MOD;
|
||||
|
||||
@SuppressLint("DefaultLocale")
|
||||
override fun toString(): String {
|
||||
return super.toString().replace("_", "/").toLowerCase()
|
||||
return super.toString().replace("_", "/").toLowerCase(Locale.ENGLISH)
|
||||
}
|
||||
|
||||
companion object {
|
||||
@SuppressLint("DefaultLocale")
|
||||
fun fromString(string: String): LayoutType {
|
||||
return valueOf(string.replace("/", "_").toUpperCase())
|
||||
return valueOf(string.replace("/", "_").toUpperCase(Locale.ENGLISH))
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -40,8 +40,8 @@ class SmartbarQuickActionButton : androidx.appcompat.widget.AppCompatImageButton
|
||||
}
|
||||
|
||||
override fun onDetachedFromWindow() {
|
||||
super.onDetachedFromWindow()
|
||||
themeManager.unregisterOnThemeUpdatedListener(this)
|
||||
super.onDetachedFromWindow()
|
||||
}
|
||||
|
||||
/**
|
||||
|
||||
@@ -37,6 +37,7 @@ import dev.patrickgold.florisboard.util.setDrawableTintColor2
|
||||
import kotlinx.coroutines.Dispatchers
|
||||
import kotlinx.coroutines.MainScope
|
||||
import kotlinx.coroutines.launch
|
||||
import kotlinx.coroutines.withContext
|
||||
import timber.log.Timber
|
||||
import java.lang.ref.WeakReference
|
||||
import kotlin.math.roundToInt
|
||||
@@ -113,7 +114,7 @@ class SmartbarView : ConstraintLayout, ThemeManager.OnThemeUpdatedListener {
|
||||
Subtype.DEFAULT,
|
||||
prefs
|
||||
).await()
|
||||
launch(Dispatchers.Main) {
|
||||
withContext(Dispatchers.Main) {
|
||||
binding.clipboardCursorRow.computedLayout = layout
|
||||
binding.clipboardCursorRow.updateVisibility()
|
||||
}
|
||||
@@ -133,7 +134,7 @@ class SmartbarView : ConstraintLayout, ThemeManager.OnThemeUpdatedListener {
|
||||
Subtype.DEFAULT,
|
||||
prefs
|
||||
).await()
|
||||
launch(Dispatchers.Main) {
|
||||
withContext(Dispatchers.Main) {
|
||||
binding.numberRow.computedLayout = layout
|
||||
binding.numberRow.updateVisibility()
|
||||
}
|
||||
@@ -146,7 +147,9 @@ class SmartbarView : ConstraintLayout, ThemeManager.OnThemeUpdatedListener {
|
||||
|
||||
for (quickAction in binding.quickActions.children) {
|
||||
if (quickAction is SmartbarQuickActionButton) {
|
||||
quickAction.setOnClickListener { eventListener?.get()?.onSmartbarQuickActionPressed(quickAction.id) }
|
||||
quickAction.id.let { quickActionId ->
|
||||
quickAction.setOnClickListener { eventListener?.get()?.onSmartbarQuickActionPressed(quickActionId) }
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -169,8 +172,10 @@ class SmartbarView : ConstraintLayout, ThemeManager.OnThemeUpdatedListener {
|
||||
}
|
||||
|
||||
override fun onDetachedFromWindow() {
|
||||
super.onDetachedFromWindow()
|
||||
eventListener = null
|
||||
florisboard?.textInputManager?.unregisterSmartbarView(this)
|
||||
themeManager.unregisterOnThemeUpdatedListener(this)
|
||||
super.onDetachedFromWindow()
|
||||
}
|
||||
|
||||
/**
|
||||
@@ -330,6 +335,7 @@ class SmartbarView : ConstraintLayout, ThemeManager.OnThemeUpdatedListener {
|
||||
for (view in candidateViewList) {
|
||||
view.setTextColor(theme.getAttr(Theme.Attr.SMARTBAR_FOREGROUND).toSolidColor().color)
|
||||
}
|
||||
invalidate()
|
||||
}
|
||||
|
||||
fun setEventListener(listener: EventListener) {
|
||||
|
||||
@@ -16,6 +16,8 @@
|
||||
|
||||
package dev.patrickgold.florisboard.ime.theme
|
||||
|
||||
import android.graphics.Color
|
||||
|
||||
/**
|
||||
* Theme overlay class which, if enabled, changes some requested attributes in a Theme and returns
|
||||
* the corresponding adaptive color. The adaptive colors itself are determined by the ThemeManager
|
||||
@@ -29,13 +31,18 @@ class AdaptiveThemeOverlay(
|
||||
return when {
|
||||
themeManager.isAdaptiveThemeEnabled -> when (ref) {
|
||||
Attr.KEYBOARD_BACKGROUND,
|
||||
Attr.KEY_BACKGROUND_PRESSED,
|
||||
Attr.SMARTBAR_BACKGROUND,
|
||||
Attr.WINDOW_NAVIGATION_BAR_COLOR -> {
|
||||
themeManager.remoteColorPrimaryVariant ?: super.getAttr(ref, s1, s2)
|
||||
}
|
||||
Attr.KEY_FOREGROUND_PRESSED,
|
||||
Attr.SMARTBAR_FOREGROUND -> {
|
||||
themeManager.remoteColorPrimaryVariant?.complimentaryTextColor() ?: super.getAttr(ref, s1, s2)
|
||||
}
|
||||
Attr.SMARTBAR_FOREGROUND_ALT -> {
|
||||
themeManager.remoteColorPrimaryVariant?.complimentaryTextColor(true) ?: super.getAttr(ref, s1, s2)
|
||||
}
|
||||
Attr.KEY_BACKGROUND,
|
||||
Attr.SMARTBAR_BUTTON_BACKGROUND -> {
|
||||
themeManager.remoteColorPrimary ?: super.getAttr(ref, s1, s2)
|
||||
@@ -51,6 +58,22 @@ class AdaptiveThemeOverlay(
|
||||
super.getAttr(ref, s1, s2)
|
||||
}
|
||||
}
|
||||
Attr.WINDOW_NAVIGATION_BAR_LIGHT -> {
|
||||
if (themeManager.remoteColorPrimaryVariant != null) {
|
||||
ThemeValue.OnOff(themeManager.remoteColorPrimaryVariant?.complimentaryTextColor()?.color == Color.BLACK)
|
||||
} else {
|
||||
super.getAttr(ref, s1, s2)
|
||||
}
|
||||
}
|
||||
Attr.POPUP_BACKGROUND -> {
|
||||
themeManager.remoteColorSecondary ?: super.getAttr(ref, s1, s2)
|
||||
}
|
||||
Attr.POPUP_BACKGROUND_ACTIVE -> {
|
||||
themeManager.remoteColorSecondary?.complimentaryTextColor(true) ?: super.getAttr(ref, s1, s2)
|
||||
}
|
||||
Attr.POPUP_FOREGROUND -> {
|
||||
themeManager.remoteColorSecondary?.complimentaryTextColor() ?: super.getAttr(ref, s1, s2)
|
||||
}
|
||||
else -> super.getAttr(ref, s1, s2)
|
||||
}
|
||||
else -> super.getAttr(ref, s1, s2)
|
||||
|
||||
@@ -16,7 +16,9 @@
|
||||
|
||||
package dev.patrickgold.florisboard.ime.theme
|
||||
|
||||
import android.content.Context
|
||||
import android.graphics.Color
|
||||
import dev.patrickgold.florisboard.R
|
||||
import dev.patrickgold.florisboard.ime.extension.Asset
|
||||
|
||||
/**
|
||||
@@ -53,7 +55,7 @@ open class Theme(
|
||||
) : Asset {
|
||||
companion object : Asset.Companion<Theme> {
|
||||
private val VALIDATION_REGEX_THEME_LABEL = """^.+${'$'}""".toRegex()
|
||||
private val VALIDATION_REGEX_GROUP_NAME = """^[a-zA-Z]+${'$'}""".toRegex()
|
||||
private val VALIDATION_REGEX_GROUP_NAME = """^[a-zA-Z]+((:[a-zA-Z0-9_~]+)|(::[a-zA-Z]+)|(:[a-zA-Z0-9_~]+:[a-zA-Z]+))?${'$'}""".toRegex()
|
||||
private val VALIDATION_REGEX_ATTR_NAME = """^[a-zA-Z]+${'$'}""".toRegex()
|
||||
|
||||
/**
|
||||
@@ -67,6 +69,82 @@ open class Theme(
|
||||
isNightTheme = true
|
||||
)
|
||||
|
||||
/**
|
||||
* Gets the Ui string for a given [attrName]. Used in the theme editor to properly display
|
||||
* attributes for non-advanced users.
|
||||
*
|
||||
* @param context The current activity context, used for retrieving the Ui string.
|
||||
* @param attrName The attribute name, which is used to determine which Ui string should be
|
||||
* fetched.
|
||||
* @return The Ui string representation, which is localized and can be shown to the user.
|
||||
*/
|
||||
fun getUiAttrNameString(context: Context, attrName: String): String {
|
||||
val strId = when (attrName) {
|
||||
"background" -> R.string.settings__theme__attr_background
|
||||
"backgroundActive" -> R.string.settings__theme__attr_backgroundActive
|
||||
"backgroundPressed" -> R.string.settings__theme__attr_backgroundPressed
|
||||
"foreground" -> R.string.settings__theme__attr_foreground
|
||||
"foregroundAlt" -> R.string.settings__theme__attr_foregroundAlt
|
||||
"foregroundPressed" -> R.string.settings__theme__attr_foregroundPressed
|
||||
"showBorder" -> R.string.settings__theme__attr_showBorder
|
||||
"colorPrimary" -> R.string.settings__theme__attr_colorPrimary
|
||||
"colorPrimaryDark" -> R.string.settings__theme__attr_colorPrimaryDark
|
||||
"colorAccent" -> R.string.settings__theme__attr_colorAccent
|
||||
"navigationBarColor" -> R.string.settings__theme__attr_navBarColor
|
||||
"navigationBarLight" -> R.string.settings__theme__attr_navBarLight
|
||||
"semiTransparentColor" -> R.string.settings__theme__attr_semiTransparentColor
|
||||
"textColor" -> R.string.settings__theme__attr_textColor
|
||||
else -> null
|
||||
}
|
||||
return if (strId != null) {
|
||||
context.resources.getString(strId)
|
||||
} else {
|
||||
context.resources.getString(
|
||||
R.string.settings__theme__attr_custom, attrName
|
||||
)
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Gets the Ui string for a given [groupName]. Used in the theme editor to properly display
|
||||
* group names for non-advanced users.
|
||||
*
|
||||
* @param context The current activity context, used for retrieving the Ui string.
|
||||
* @param groupName The group name, which is used to determine which Ui string should be
|
||||
* fetched.
|
||||
* @return The Ui string representation, which is localized and can be shown to the user.
|
||||
*/
|
||||
fun getUiGroupNameString(context: Context, groupName: String): String {
|
||||
return when {
|
||||
groupName.startsWith("key:") -> context.resources.getString(
|
||||
R.string.settings__theme__group_key_specific, groupName.substring(4)
|
||||
)
|
||||
else -> {
|
||||
val strId = when (groupName) {
|
||||
"window" -> R.string.settings__theme__group_window
|
||||
"keyboard" -> R.string.settings__theme__group_keyboard
|
||||
"key" -> R.string.settings__theme__group_key
|
||||
"media" -> R.string.settings__theme__group_media
|
||||
"oneHanded" -> R.string.settings__theme__group_oneHanded
|
||||
"popup" -> R.string.settings__theme__group_popup
|
||||
"privateMode" -> R.string.settings__theme__group_privateMode
|
||||
"smartbar" -> R.string.settings__theme__group_smartbar
|
||||
"smartbarButton" -> R.string.settings__theme__group_smartbarButton
|
||||
"extractEditLayout" -> R.string.settings__theme__group_extractEditLayout
|
||||
"extractActionButton" -> R.string.settings__theme__group_extractActionButton
|
||||
else -> null
|
||||
}
|
||||
if (strId != null) {
|
||||
context.resources.getString(strId)
|
||||
} else {
|
||||
context.resources.getString(
|
||||
R.string.settings__theme__group_custom, groupName
|
||||
)
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Generate a base theme with the given meta data. For the argument info see [Theme].
|
||||
*
|
||||
@@ -134,6 +212,15 @@ open class Theme(
|
||||
Pair("smartbarButton", mapOf(
|
||||
Pair("background", ThemeValue.fromString("@key/background")),
|
||||
Pair("foreground", ThemeValue.fromString("@key/foreground")),
|
||||
)),
|
||||
Pair("extractEditLayout", mapOf(
|
||||
Pair("background", bgColor),
|
||||
Pair("foreground", ThemeValue.fromString("@window/textColor")),
|
||||
Pair("foregroundAlt", ThemeValue.fromString("#73FFFFFF")),
|
||||
)),
|
||||
Pair("extractActionButton", mapOf(
|
||||
Pair("background", ThemeValue.fromString("@smartbarButton/background")),
|
||||
Pair("foreground", ThemeValue.fromString("@smartbarButton/foreground")),
|
||||
))
|
||||
)
|
||||
)
|
||||
@@ -230,7 +317,7 @@ open class Theme(
|
||||
getAttrOrNull(ref.copy(group = "${ref.group}::$s2"))?.let { return it }
|
||||
}
|
||||
getAttrOrNull(ref)?.let { return it }
|
||||
return ThemeValue.SolidColor(0)
|
||||
return BASE_THEME.getAttrOrNull(ref) ?: ThemeValue.SolidColor(0)
|
||||
}
|
||||
|
||||
/**
|
||||
@@ -291,6 +378,13 @@ open class Theme(
|
||||
|
||||
val SMARTBAR_BUTTON_BACKGROUND = ThemeValue.Reference("smartbarButton", "background")
|
||||
val SMARTBAR_BUTTON_FOREGROUND = ThemeValue.Reference("smartbarButton", "foreground")
|
||||
|
||||
val EXTRACT_EDIT_LAYOUT_BACKGROUND = ThemeValue.Reference("extractEditLayout", "background")
|
||||
val EXTRACT_EDIT_LAYOUT_FOREGROUND = ThemeValue.Reference("extractEditLayout", "foreground")
|
||||
val EXTRACT_EDIT_LAYOUT_FOREGROUND_ALT = ThemeValue.Reference("extractEditLayout", "foregroundAlt")
|
||||
|
||||
val EXTRACT_ACTION_BUTTON_BACKGROUND = ThemeValue.Reference("extractActionButton", "background")
|
||||
val EXTRACT_ACTION_BUTTON_FOREGROUND = ThemeValue.Reference("extractActionButton", "foreground")
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@@ -17,6 +17,7 @@
|
||||
package dev.patrickgold.florisboard.ime.theme
|
||||
|
||||
import android.annotation.SuppressLint
|
||||
import android.content.ComponentName
|
||||
import android.content.Context
|
||||
import android.content.pm.PackageManager
|
||||
import android.content.res.Configuration
|
||||
@@ -53,6 +54,8 @@ class ThemeManager private constructor(
|
||||
private set
|
||||
var remoteColorPrimaryVariant: ThemeValue.SolidColor? = null
|
||||
private set
|
||||
var remoteColorSecondary: ThemeValue.SolidColor? = null
|
||||
private set
|
||||
|
||||
companion object {
|
||||
/**
|
||||
@@ -113,6 +116,7 @@ class ThemeManager private constructor(
|
||||
* @param packageName The package name from which the colors should be extracted.
|
||||
*/
|
||||
@SuppressLint("ResourceType")
|
||||
@Suppress("UNNECESSARY_SAFE_CALL")
|
||||
fun updateRemoteColorValues(packageName: String) {
|
||||
try {
|
||||
val pm = packageManager ?: return
|
||||
@@ -122,7 +126,10 @@ class ThemeManager private constructor(
|
||||
android.R.attr.colorPrimary,
|
||||
res.getIdentifier("colorPrimaryDark", "attr", packageName),
|
||||
android.R.attr.colorPrimaryDark,
|
||||
res.getIdentifier("colorPrimaryVariant", "attr", packageName)
|
||||
res.getIdentifier("colorPrimaryVariant", "attr", packageName),
|
||||
res.getIdentifier("colorAccent", "attr", packageName),
|
||||
android.R.attr.colorAccent,
|
||||
res.getIdentifier("colorSecondary", "attr", packageName)
|
||||
)
|
||||
val androidTheme = res.newTheme()
|
||||
val defColor = if (activeTheme.isNightTheme) {
|
||||
@@ -130,11 +137,31 @@ class ThemeManager private constructor(
|
||||
} else {
|
||||
Color.WHITE
|
||||
}
|
||||
val cn = pm.getLaunchIntentForPackage(packageName)?.component
|
||||
if (cn != null) {
|
||||
androidTheme.applyStyle(pm.getActivityInfo(cn, 0).theme, false)
|
||||
@Suppress("UNNECESSARY_SAFE_CALL")
|
||||
androidTheme.obtainStyledAttributes(attrs.toIntArray())?.let { a ->
|
||||
val themeIds = mutableListOf<Int>()
|
||||
pm.getLaunchIntentForPackage(packageName)?.component?.let { cn ->
|
||||
pm.getActivityInfo(cn, 0)?.let { launchActivity ->
|
||||
if (launchActivity.targetActivity != null) {
|
||||
pm.getActivityInfo(ComponentName(packageName, launchActivity.targetActivity), 0)?.let {
|
||||
themeIds.add(it.theme)
|
||||
}
|
||||
} else {
|
||||
themeIds.add(launchActivity.theme)
|
||||
}
|
||||
}
|
||||
}
|
||||
pm.getApplicationInfo(packageName, 0)?.let { applicationInfo ->
|
||||
themeIds.add(applicationInfo.theme)
|
||||
}
|
||||
remoteColorPrimary = null
|
||||
remoteColorPrimaryVariant = null
|
||||
remoteColorSecondary = null
|
||||
for (themeId in themeIds) {
|
||||
if (remoteColorPrimary != null && remoteColorPrimaryVariant != null &&
|
||||
remoteColorSecondary != null) {
|
||||
break
|
||||
}
|
||||
androidTheme.applyStyle(themeId, false)
|
||||
androidTheme.obtainStyledAttributes(attrs.toIntArray()).let { a ->
|
||||
remoteColorPrimary = when {
|
||||
a.hasValue(0) -> {
|
||||
ThemeValue.SolidColor(a.getColor(0, defColor))
|
||||
@@ -143,7 +170,7 @@ class ThemeManager private constructor(
|
||||
ThemeValue.SolidColor(a.getColor(1, defColor))
|
||||
}
|
||||
else -> {
|
||||
null
|
||||
remoteColorPrimary
|
||||
}
|
||||
}
|
||||
remoteColorPrimaryVariant = when {
|
||||
@@ -157,7 +184,21 @@ class ThemeManager private constructor(
|
||||
ThemeValue.SolidColor(a.getColor(4, defColor))
|
||||
}
|
||||
else -> {
|
||||
null
|
||||
remoteColorPrimaryVariant
|
||||
}
|
||||
}
|
||||
remoteColorSecondary = when {
|
||||
a.hasValue(5) -> {
|
||||
ThemeValue.SolidColor(a.getColor(5, defColor))
|
||||
}
|
||||
a.hasValue(6) -> {
|
||||
ThemeValue.SolidColor(a.getColor(6, defColor))
|
||||
}
|
||||
a.hasValue(7) -> {
|
||||
ThemeValue.SolidColor(a.getColor(7, defColor))
|
||||
}
|
||||
else -> {
|
||||
remoteColorSecondary
|
||||
}
|
||||
}
|
||||
a.recycle()
|
||||
@@ -166,6 +207,16 @@ class ThemeManager private constructor(
|
||||
} catch (e: Exception) {
|
||||
e.printStackTrace()
|
||||
}
|
||||
remoteColorPrimary?.let {
|
||||
remoteColorPrimary = ThemeValue.SolidColor(it.color or Color.BLACK)
|
||||
}
|
||||
remoteColorPrimaryVariant?.let {
|
||||
remoteColorPrimaryVariant = ThemeValue.SolidColor(it.color or Color.BLACK)
|
||||
}
|
||||
remoteColorSecondary?.let {
|
||||
remoteColorSecondary = ThemeValue.SolidColor(it.color or Color.BLACK)
|
||||
}
|
||||
notifyCallbackReceivers()
|
||||
}
|
||||
|
||||
/**
|
||||
|
||||
@@ -44,13 +44,25 @@ sealed class ThemeValue {
|
||||
return super.toString()
|
||||
}
|
||||
|
||||
fun complimentaryTextColor(): SolidColor {
|
||||
return if (Color.red(color) * 0.299 + Color.green(color) * 0.587 +
|
||||
fun complimentaryTextColor(isAlt: Boolean = false): SolidColor {
|
||||
val ret = if (Color.red(color) * 0.299 + Color.green(color) * 0.587 +
|
||||
Color.blue(color) * 0.114 > 186) {
|
||||
SolidColor(Color.BLACK)
|
||||
Color.BLACK
|
||||
} else {
|
||||
SolidColor(Color.WHITE)
|
||||
Color.WHITE
|
||||
}
|
||||
return SolidColor(
|
||||
if (isAlt) {
|
||||
Color.argb(
|
||||
0x60,
|
||||
Color.red(ret),
|
||||
Color.green(ret),
|
||||
Color.blue(ret)
|
||||
)
|
||||
} else {
|
||||
ret
|
||||
}
|
||||
)
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@@ -90,7 +90,7 @@ class SettingsMainActivity : AppCompatActivity(),
|
||||
R.id.settings__navigation__home -> {
|
||||
supportActionBar?.title = String.format(
|
||||
resources.getString(R.string.settings__home__title),
|
||||
resources.getString(R.string.app_name)
|
||||
resources.getString(R.string.floris_app_name)
|
||||
)
|
||||
loadFragment(HomeFragment())
|
||||
true
|
||||
|
||||
@@ -16,7 +16,10 @@
|
||||
|
||||
package dev.patrickgold.florisboard.settings
|
||||
|
||||
import android.content.Intent
|
||||
import android.net.Uri
|
||||
import android.os.Bundle
|
||||
import android.view.Menu
|
||||
import android.view.MenuItem
|
||||
import android.view.View
|
||||
import androidx.annotation.IdRes
|
||||
@@ -24,6 +27,7 @@ import androidx.appcompat.app.AlertDialog
|
||||
import androidx.appcompat.app.AppCompatActivity
|
||||
import androidx.appcompat.widget.Toolbar
|
||||
import androidx.core.view.children
|
||||
import androidx.core.view.forEach
|
||||
import com.github.michaelbull.result.onSuccess
|
||||
import dev.patrickgold.florisboard.R
|
||||
import dev.patrickgold.florisboard.databinding.ThemeEditorActivityBinding
|
||||
@@ -41,6 +45,10 @@ import dev.patrickgold.florisboard.settings.components.ThemeAttrView
|
||||
import kotlinx.coroutines.MainScope
|
||||
import kotlinx.coroutines.launch
|
||||
|
||||
/**
|
||||
* This class is the main Ui activity for directly editing a theme used by FlorisBoard. It provides
|
||||
* a base for group and attr views to operate in and also shows a preview of the current changes.
|
||||
*/
|
||||
class ThemeEditorActivity : AppCompatActivity() {
|
||||
private lateinit var binding: ThemeEditorActivityBinding
|
||||
private lateinit var layoutManager: LayoutManager
|
||||
@@ -53,9 +61,13 @@ class ThemeEditorActivity : AppCompatActivity() {
|
||||
private var isSaved: Boolean = false
|
||||
|
||||
companion object {
|
||||
const val RESULT_CODE_THEME_EDIT_SAVED: Int = 0xFBADC1
|
||||
const val RESULT_CODE_THEME_EDIT_CANCELLED: Int = 0xFBADC2
|
||||
/** Constant code for a theme saved activity result. */
|
||||
const val RESULT_CODE_THEME_EDIT_SAVED: Int = 0xFBADC1
|
||||
|
||||
/** Constant code for a theme cancelled activity result. */
|
||||
const val RESULT_CODE_THEME_EDIT_CANCELLED: Int = 0xFBADC2
|
||||
|
||||
/** Constant key for passing the reference to the theme to edit. */
|
||||
const val EXTRA_THEME_REF: String = "theme_ref"
|
||||
}
|
||||
|
||||
@@ -86,16 +98,32 @@ class ThemeEditorActivity : AppCompatActivity() {
|
||||
buildUi()
|
||||
}
|
||||
|
||||
override fun onCreateOptionsMenu(menu: Menu?): Boolean {
|
||||
menuInflater.inflate(R.menu.theme_editor_menu, menu)
|
||||
return true
|
||||
}
|
||||
|
||||
override fun onOptionsItemSelected(item: MenuItem): Boolean {
|
||||
return when (item.itemId) {
|
||||
android.R.id.home -> {
|
||||
onBackPressed()
|
||||
true
|
||||
}
|
||||
R.id.settings__help -> {
|
||||
val browserIntent = Intent(
|
||||
Intent.ACTION_VIEW,
|
||||
Uri.parse(resources.getString(R.string.florisboard__theme_editor_wiki_url))
|
||||
)
|
||||
startActivity(browserIntent)
|
||||
true
|
||||
}
|
||||
else -> super.onOptionsItemSelected(item)
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Callback function to handle clicks on the buttons in the bottom bar of this activity.
|
||||
*/
|
||||
fun onActionClicked(view: View) {
|
||||
when (view.id) {
|
||||
R.id.add_group_btn -> addGroup()
|
||||
@@ -105,20 +133,26 @@ class ThemeEditorActivity : AppCompatActivity() {
|
||||
if (Theme.validateField(Theme.ValidationField.THEME_LABEL, themeName)) {
|
||||
val ref = editedThemeRef
|
||||
if (ref != null) {
|
||||
themeManager.writeTheme(ref, editedTheme.copy(
|
||||
label = themeName
|
||||
))
|
||||
themeManager.writeTheme(
|
||||
ref, editedTheme.copy(
|
||||
label = themeName
|
||||
)
|
||||
)
|
||||
isSaved = true
|
||||
finish()
|
||||
}
|
||||
} else {
|
||||
binding.themeNameLabel.error = resources.getString(R.string.settings__theme_editor__error_theme_label_empty)
|
||||
binding.themeNameLabel.error =
|
||||
resources.getString(R.string.settings__theme_editor__error_theme_label_empty)
|
||||
binding.themeNameLabel.isErrorEnabled = true
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Shows a cancel confirmation dialog when the back key is pressed.
|
||||
*/
|
||||
override fun onBackPressed() {
|
||||
AlertDialog.Builder(this).apply {
|
||||
setTitle(R.string.assets__action__cancel_confirm_title)
|
||||
@@ -133,15 +167,28 @@ class ThemeEditorActivity : AppCompatActivity() {
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Set the result just before this activity finishes according to [isSaved].
|
||||
*/
|
||||
override fun finish() {
|
||||
setResult(if (isSaved) {
|
||||
RESULT_CODE_THEME_EDIT_SAVED
|
||||
} else {
|
||||
RESULT_CODE_THEME_EDIT_CANCELLED
|
||||
})
|
||||
setResult(
|
||||
if (isSaved) {
|
||||
RESULT_CODE_THEME_EDIT_SAVED
|
||||
} else {
|
||||
RESULT_CODE_THEME_EDIT_CANCELLED
|
||||
}
|
||||
)
|
||||
super.finish()
|
||||
}
|
||||
|
||||
/**
|
||||
* Add a new group view to the Ui with the specified group [name]. Returns a binding to the
|
||||
* created view class. If [name] is null, this method assumes that a new group should be
|
||||
* instantiated and will show an add group dialog.
|
||||
*
|
||||
* @param name The group name or null for a new group.
|
||||
* @return The binding to the created group view.
|
||||
*/
|
||||
private fun addGroup(name: String? = null): ThemeEditorGroupViewBinding {
|
||||
val groupView = ThemeEditorGroupViewBinding.inflate(layoutInflater)
|
||||
groupView.root.themeEditorActivity = this
|
||||
@@ -154,6 +201,11 @@ class ThemeEditorActivity : AppCompatActivity() {
|
||||
return groupView
|
||||
}
|
||||
|
||||
/**
|
||||
* Deletes a view from the current Ui stack. Refreshes the theme preview afterwards.
|
||||
*
|
||||
* @param id The id of the group view to remove.
|
||||
*/
|
||||
fun deleteGroup(@IdRes id: Int) {
|
||||
binding.themeAttributes.findViewById<View>(id)?.let {
|
||||
binding.themeAttributes.removeView(it)
|
||||
@@ -161,6 +213,84 @@ class ThemeEditorActivity : AppCompatActivity() {
|
||||
refreshTheme()
|
||||
}
|
||||
|
||||
/**
|
||||
* This method tries to focus the specified group view (causes the nested scroll view to jump
|
||||
* to the specified group view).
|
||||
*
|
||||
* @param id The id of the group view to focus.
|
||||
*/
|
||||
fun focusGroup(@IdRes id: Int) {
|
||||
binding.themeAttributes.findViewById<View>(id)?.let {
|
||||
binding.themeAttributes.requestChildFocus(it, it)
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Checks if the current Ui stack has a group view with [name], excluding the group view
|
||||
* specified by [id] to prevent the check on the view that initiated the request.
|
||||
*
|
||||
* @param id The group view to exclude from the check.
|
||||
* @param name The group name to check for.
|
||||
* @return True if the group name exists (except in the group view with [id]), false otherwise.
|
||||
*/
|
||||
fun hasGroup(@IdRes id: Int, name: String): Boolean {
|
||||
if (name.isEmpty()) {
|
||||
return false
|
||||
}
|
||||
binding.themeAttributes.forEach { groupView ->
|
||||
if (groupView is ThemeAttrGroupView) {
|
||||
if (groupView.groupName == name && groupView.id != id) {
|
||||
return true
|
||||
}
|
||||
}
|
||||
}
|
||||
return false
|
||||
}
|
||||
|
||||
/**
|
||||
* Sorts the group views alphabetically by the group, with the exception that "window" and
|
||||
* "keyboard" are always on first and second position if they exist in the current stack.
|
||||
*/
|
||||
fun sortGroups() {
|
||||
val baseMap = mutableMapOf<Int, String>()
|
||||
for (groupView in binding.themeAttributes.children) {
|
||||
if (groupView is ThemeAttrGroupView) {
|
||||
baseMap[groupView.id] = groupView.groupName
|
||||
}
|
||||
}
|
||||
val sortedMap = baseMap.toList().sortedBy { (_, v) -> v }.toMap().toMutableMap()
|
||||
val groupIds = sortedMap.keys.toMutableList()
|
||||
val groupNames = sortedMap.values.toMutableList()
|
||||
listOf(
|
||||
Pair("keyboard", true),
|
||||
Pair("window", true),
|
||||
Pair("extractEditLayout", false),
|
||||
Pair("extractActionButton", false),
|
||||
).forEach { (groupName, addFirst) ->
|
||||
if (groupNames.contains(groupName)) {
|
||||
val groupId = groupIds[groupNames.indexOf(groupName)]
|
||||
groupIds.remove(groupId)
|
||||
groupNames.remove(groupName)
|
||||
if (addFirst) {
|
||||
groupIds.add(0, groupId)
|
||||
groupNames.add(0, groupName)
|
||||
} else {
|
||||
groupIds.add(groupId)
|
||||
groupNames.add(groupName)
|
||||
}
|
||||
}
|
||||
}
|
||||
for ((n, groupId) in groupIds.withIndex()) {
|
||||
binding.themeAttributes.findViewById<ThemeAttrGroupView>(groupId)?.let { groupView ->
|
||||
binding.themeAttributes.removeView(groupView)
|
||||
binding.themeAttributes.addView(groupView, n)
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Refreshes the cached theme object and applies it to the preview keyboard view.
|
||||
*/
|
||||
fun refreshTheme() {
|
||||
val tempMap = mutableMapOf<String, Map<String, ThemeValue>>()
|
||||
for (groupView in binding.themeAttributes.children) {
|
||||
@@ -181,6 +311,9 @@ class ThemeEditorActivity : AppCompatActivity() {
|
||||
binding.keyboardPreview.onThemeUpdated(editedTheme)
|
||||
}
|
||||
|
||||
/**
|
||||
* Builds the Ui for the current [editedTheme]. Also sorts the groups afterwards.
|
||||
*/
|
||||
private fun buildUi() {
|
||||
binding.themeNameValue.setText(editedTheme.label)
|
||||
for ((groupName, groupAttrs) in editedTheme.attributes) {
|
||||
@@ -191,8 +324,10 @@ class ThemeEditorActivity : AppCompatActivity() {
|
||||
}
|
||||
mainScope.launch {
|
||||
binding.keyboardPreview.computedLayout = layoutManager.fetchComputedLayoutAsync(
|
||||
KeyboardMode.CHARACTERS, Subtype.DEFAULT, prefs).await()
|
||||
KeyboardMode.CHARACTERS, Subtype.DEFAULT, prefs
|
||||
).await()
|
||||
binding.keyboardPreview.onThemeUpdated(editedTheme)
|
||||
}
|
||||
sortGroups()
|
||||
}
|
||||
}
|
||||
|
||||
@@ -89,6 +89,11 @@ class ThemeManagerActivity : AppCompatActivity() {
|
||||
)
|
||||
supportActionBar?.setDisplayHomeAsUpEnabled(true)
|
||||
|
||||
binding.fabOptionCreateEmpty.setOnClickListener { onActionClicked(it) }
|
||||
binding.fabOptionCreateFromSelected.setOnClickListener { onActionClicked(it) }
|
||||
binding.themeDeleteBtn.setOnClickListener { onActionClicked(it) }
|
||||
binding.themeEditBtn.setOnClickListener { onActionClicked(it) }
|
||||
|
||||
layoutManager = LayoutManager(this).apply {
|
||||
preloadComputedLayout(KeyboardMode.CHARACTERS, Subtype.DEFAULT, prefs)
|
||||
}
|
||||
|
||||
@@ -23,6 +23,7 @@ import android.view.LayoutInflater
|
||||
import android.view.View
|
||||
import android.widget.LinearLayout
|
||||
import androidx.annotation.IdRes
|
||||
import androidx.core.view.forEach
|
||||
import dev.patrickgold.florisboard.R
|
||||
import dev.patrickgold.florisboard.databinding.ThemeEditorAttrViewBinding
|
||||
import dev.patrickgold.florisboard.databinding.ThemeEditorGroupDialogBinding
|
||||
@@ -39,7 +40,7 @@ class ThemeAttrGroupView : LinearLayout {
|
||||
var groupName: String = ""
|
||||
set(v) {
|
||||
field = v
|
||||
binding.groupName.text = v
|
||||
binding.groupName.text = Theme.getUiGroupNameString(context, v)
|
||||
refreshTheme()
|
||||
}
|
||||
|
||||
@@ -78,6 +79,20 @@ class ThemeAttrGroupView : LinearLayout {
|
||||
refreshTheme()
|
||||
}
|
||||
|
||||
fun hasAttr(@IdRes id: Int, name: String): Boolean {
|
||||
if (name.isEmpty()) {
|
||||
return false
|
||||
}
|
||||
binding.root.forEach { attrView ->
|
||||
if (attrView is ThemeAttrView) {
|
||||
if (attrView.attrName == name && attrView.id != id) {
|
||||
return true
|
||||
}
|
||||
}
|
||||
}
|
||||
return false
|
||||
}
|
||||
|
||||
fun refreshTheme() {
|
||||
themeEditorActivity?.refreshTheme()
|
||||
}
|
||||
@@ -114,17 +129,20 @@ class ThemeAttrGroupView : LinearLayout {
|
||||
dialog = show()
|
||||
dialog.getButton(AlertDialog.BUTTON_POSITIVE)?.setOnClickListener {
|
||||
val tempGroupName = dialogView.groupName.text.toString().trim()
|
||||
if (Theme.validateField(Theme.ValidationField.GROUP_NAME, tempGroupName)) {
|
||||
val groupUnique = themeEditorActivity?.hasGroup(id, tempGroupName) != true
|
||||
if (Theme.validateField(Theme.ValidationField.GROUP_NAME, tempGroupName) && groupUnique) {
|
||||
groupName = tempGroupName
|
||||
dialog.dismiss()
|
||||
} else {
|
||||
|
||||
dialogView.groupNameLabel.error = resources.getString(when {
|
||||
!groupUnique -> R.string.settings__theme_editor__error_group_name_already_exists
|
||||
tempGroupName.isEmpty() -> R.string.settings__theme_editor__error_group_name_empty
|
||||
else -> R.string.settings__theme_editor__error_group_name
|
||||
})
|
||||
dialogView.groupNameLabel.isErrorEnabled = true
|
||||
}
|
||||
themeEditorActivity?.sortGroups()
|
||||
themeEditorActivity?.focusGroup(id)
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -19,6 +19,7 @@ package dev.patrickgold.florisboard.settings.components
|
||||
import android.annotation.SuppressLint
|
||||
import android.app.AlertDialog
|
||||
import android.content.Context
|
||||
import android.graphics.Color
|
||||
import android.graphics.drawable.GradientDrawable
|
||||
import android.util.AttributeSet
|
||||
import android.view.LayoutInflater
|
||||
@@ -52,7 +53,7 @@ class ThemeAttrView : LinearLayout {
|
||||
var attrName: String = ""
|
||||
set(v) {
|
||||
field = v
|
||||
binding.title.text = v
|
||||
binding.title.text = Theme.getUiAttrNameString(context, v)
|
||||
themeAttrGroupView?.refreshTheme()
|
||||
}
|
||||
var attrValue: ThemeValue = ThemeValue.Other("")
|
||||
@@ -137,7 +138,7 @@ class ThemeAttrView : LinearLayout {
|
||||
ThemeValue.UI_STRING_MAP.keys.indexOf(ThemeValue.SolidColor::class.simpleName!!)
|
||||
.coerceAtLeast(0)
|
||||
)
|
||||
configureDialogUi(dialogView, ThemeValue.SolidColor(0))
|
||||
configureDialogUi(dialogView, ThemeValue.SolidColor(Color.BLACK))
|
||||
}
|
||||
var userTouched = false
|
||||
dialogView.attrType.setOnTouchListener { _, _ ->
|
||||
@@ -159,7 +160,7 @@ class ThemeAttrView : LinearLayout {
|
||||
ThemeValue.Reference("", "")
|
||||
}
|
||||
ThemeValue.SolidColor::class.simpleName -> {
|
||||
ThemeValue.SolidColor(0)
|
||||
ThemeValue.SolidColor(Color.BLACK)
|
||||
}
|
||||
ThemeValue.LinearGradient::class.simpleName -> {
|
||||
ThemeValue.LinearGradient(0)
|
||||
@@ -208,12 +209,14 @@ class ThemeAttrView : LinearLayout {
|
||||
dialog = show()
|
||||
dialog.getButton(AlertDialog.BUTTON_POSITIVE)?.setOnClickListener {
|
||||
val tempAttrName = dialogView.attrName.text.toString().trim()
|
||||
if (Theme.validateField(Theme.ValidationField.ATTR_NAME, tempAttrName)) {
|
||||
val attrUnique = themeAttrGroupView?.hasAttr(id, tempAttrName) != true
|
||||
if (Theme.validateField(Theme.ValidationField.ATTR_NAME, tempAttrName) && attrUnique) {
|
||||
attrName = tempAttrName
|
||||
attrValue = getThemeValueFromDialogUi(dialogView)
|
||||
dialog.dismiss()
|
||||
} else {
|
||||
dialogView.attrNameLabel.error = resources.getString(when {
|
||||
!attrUnique -> R.string.settings__theme_editor__error_attr_name_already_exists
|
||||
tempAttrName.isEmpty() -> R.string.settings__theme_editor__error_attr_name_empty
|
||||
else -> R.string.settings__theme_editor__error_attr_name
|
||||
})
|
||||
@@ -239,6 +242,8 @@ class ThemeAttrView : LinearLayout {
|
||||
is ThemeValue.SolidColor -> {
|
||||
dialogView.attrValueSolidColor.isVisible = true
|
||||
dialogView.attrValueSolidColorInt.text = value.toString()
|
||||
dialogView.attrValueSolidColorEditBtn.background.setTint(value.color)
|
||||
dialogView.attrValueSolidColorEditBtn.drawable.setTint(value.complimentaryTextColor().color)
|
||||
dialogView.attrValueSolidColorEditBtn.setOnClickListener {
|
||||
// Method on how to create a dialog which does not have a listener in the
|
||||
// Activity taken from the original source code for the PreferenceCompat class.
|
||||
@@ -249,7 +254,9 @@ class ThemeAttrView : LinearLayout {
|
||||
}.create()
|
||||
colorPickerDialog.setColorPickerDialogListener(object : ColorPickerDialogListener {
|
||||
override fun onColorSelected(dialogId: Int, color: Int) {
|
||||
dialogView.attrValueSolidColorInt.text = ThemeValue.SolidColor(color).toString()
|
||||
val tempSolidColor = ThemeValue.SolidColor(color)
|
||||
dialogView.attrValueSolidColorInt.text = tempSolidColor.toString()
|
||||
configureDialogUi(dialogView, tempSolidColor)
|
||||
}
|
||||
|
||||
override fun onDialogDismissed(dialogId: Int) {
|
||||
|
||||
@@ -18,6 +18,7 @@ package dev.patrickgold.florisboard.settings.fragments
|
||||
|
||||
import android.content.SharedPreferences
|
||||
import android.os.Bundle
|
||||
import androidx.preference.ListPreference
|
||||
import androidx.preference.PreferenceFragmentCompat
|
||||
import androidx.preference.PreferenceManager
|
||||
import dev.patrickgold.florisboard.R
|
||||
@@ -27,6 +28,7 @@ import dev.patrickgold.florisboard.settings.components.DialogSeekBarPreference
|
||||
class KeyboardFragment : PreferenceFragmentCompat(),
|
||||
SharedPreferences.OnSharedPreferenceChangeListener {
|
||||
private var heightFactorCustom: DialogSeekBarPreference? = null
|
||||
private var utilityKeyAction: ListPreference? = null
|
||||
private var sharedPrefs: SharedPreferences? = null
|
||||
|
||||
override fun onCreatePreferences(savedInstanceState: Bundle?, rootKey: String?) {
|
||||
@@ -34,7 +36,9 @@ class KeyboardFragment : PreferenceFragmentCompat(),
|
||||
sharedPrefs = PreferenceManager.getDefaultSharedPreferences(context)
|
||||
|
||||
heightFactorCustom = findPreference(PrefHelper.Keyboard.HEIGHT_FACTOR_CUSTOM)
|
||||
utilityKeyAction = findPreference(PrefHelper.Keyboard.UTILITY_KEY_ACTION)
|
||||
onSharedPreferenceChanged(null, PrefHelper.Keyboard.HEIGHT_FACTOR)
|
||||
onSharedPreferenceChanged(null, PrefHelper.Keyboard.UTILITY_KEY_ENABLED)
|
||||
}
|
||||
|
||||
override fun onResume() {
|
||||
@@ -50,6 +54,8 @@ class KeyboardFragment : PreferenceFragmentCompat(),
|
||||
override fun onSharedPreferenceChanged(sharedPreferences: SharedPreferences?, key: String?) {
|
||||
if (key == PrefHelper.Keyboard.HEIGHT_FACTOR) {
|
||||
heightFactorCustom?.isVisible = sharedPrefs?.getString(key, "") == "custom"
|
||||
} else if (key == PrefHelper.Keyboard.UTILITY_KEY_ENABLED) {
|
||||
utilityKeyAction?.isVisible = sharedPrefs?.getBoolean(key, false) == true
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -1,6 +1,5 @@
|
||||
package dev.patrickgold.florisboard.util
|
||||
|
||||
import android.app.Activity
|
||||
import android.content.Context
|
||||
import android.content.ContextWrapper
|
||||
import android.content.res.ColorStateList
|
||||
@@ -11,6 +10,7 @@ import android.widget.Button
|
||||
import android.widget.ImageView
|
||||
import androidx.appcompat.app.AppCompatActivity
|
||||
import androidx.core.view.children
|
||||
import kotlin.reflect.KClass
|
||||
|
||||
fun getColorFromAttr(
|
||||
context: Context,
|
||||
@@ -73,6 +73,18 @@ fun refreshLayoutOf(view: View?) {
|
||||
}
|
||||
}
|
||||
|
||||
@Suppress("UNCHECKED_CAST")
|
||||
fun <T : View> ViewGroup.findViewWithType(type: KClass<T>): T? {
|
||||
for (child in this.children) {
|
||||
if (type.isInstance(child)) {
|
||||
return child as T
|
||||
} else if (child is ViewGroup) {
|
||||
child.findViewWithType(type)?.let { return it }
|
||||
}
|
||||
}
|
||||
return null
|
||||
}
|
||||
|
||||
/**
|
||||
* Context extension function to get the Activity from the Context. Originally written by Vlad as
|
||||
* an SO answer. Modified to return an AppCompatActivity, as FlorisBoard relies on some compat
|
||||
|
||||
@@ -0,0 +1,5 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<selector xmlns:android="http://schemas.android.com/apk/res/android">
|
||||
<item android:state_checked="true" android:color="#FFFFFFFF"/>
|
||||
<item android:color="#A2FFFFFF"/>
|
||||
</selector>
|
||||
7
app/src/main/res/drawable/edit_text_background.xml
Normal file
7
app/src/main/res/drawable/edit_text_background.xml
Normal file
@@ -0,0 +1,7 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<shape xmlns:android="http://schemas.android.com/apk/res/android"
|
||||
android:shape="rectangle" android:tintMode="multiply">
|
||||
<solid android:color="@android:color/transparent"/>
|
||||
<corners android:radius="@dimen/landscapeInputUi_editText_cornerRadius"/>
|
||||
<stroke android:width="@dimen/landscapeInputUi_editText_borderWidth" android:color="@android:color/white"/>
|
||||
</shape>
|
||||
5
app/src/main/res/drawable/ic_help_outline.xml
Normal file
5
app/src/main/res/drawable/ic_help_outline.xml
Normal file
@@ -0,0 +1,5 @@
|
||||
<vector android:autoMirrored="true" android:height="24dp"
|
||||
android:viewportHeight="24" android:viewportWidth="24"
|
||||
android:width="24dp" xmlns:android="http://schemas.android.com/apk/res/android">
|
||||
<path android:fillColor="?android:attr/textColorPrimary" android:pathData="M11,18h2v-2h-2v2zM12,2C6.48,2 2,6.48 2,12s4.48,10 10,10 10,-4.48 10,-10S17.52,2 12,2zM12,20c-4.41,0 -8,-3.59 -8,-8s3.59,-8 8,-8 8,3.59 8,8 -3.59,8 -8,8zM12,6c-2.21,0 -4,1.79 -4,4h2c0,-1.1 0.9,-2 2,-2s2,0.9 2,2c0,2 -3,1.75 -3,5h2c0,-2.25 3,-2.5 3,-5 0,-2.21 -1.79,-4 -4,-4z"/>
|
||||
</vector>
|
||||
5
app/src/main/res/drawable/ic_open_with.xml
Normal file
5
app/src/main/res/drawable/ic_open_with.xml
Normal file
@@ -0,0 +1,5 @@
|
||||
<vector android:autoMirrored="true" android:height="24dp"
|
||||
android:viewportHeight="24" android:viewportWidth="24"
|
||||
android:width="24dp" xmlns:android="http://schemas.android.com/apk/res/android">
|
||||
<path android:fillColor="?android:attr/textColorPrimary" android:pathData="M10,9h4L14,6h3l-5,-5 -5,5h3v3zM9,10L6,10L6,7l-5,5 5,5v-3h3v-4zM23,12l-5,-5v3h-3v4h3v3l5,-5zM14,15h-4v3L7,18l5,5 5,-5h-3v-3z"/>
|
||||
</vector>
|
||||
@@ -30,7 +30,7 @@
|
||||
<TextView
|
||||
android:layout_width="wrap_content"
|
||||
android:layout_height="wrap_content"
|
||||
android:text="@string/app_name"
|
||||
android:text="@string/floris_app_name"
|
||||
android:textSize="24sp"
|
||||
android:textStyle="bold"/>
|
||||
|
||||
|
||||
@@ -81,9 +81,4 @@
|
||||
|
||||
</dev.patrickgold.florisboard.ime.core.InputView>
|
||||
|
||||
<dev.patrickgold.florisboard.ime.popup.PopupLayerView
|
||||
android:id="@+id/popup_layer"
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="match_parent"/>
|
||||
|
||||
</dev.patrickgold.florisboard.ime.core.InputWindowView>
|
||||
|
||||
@@ -27,8 +27,9 @@
|
||||
android:layout_height="wrap_content"
|
||||
android:layout_gravity="bottom"
|
||||
android:background="?colorPrimary"
|
||||
app:itemIconTint="@android:color/white"
|
||||
app:itemTextColor="@android:color/white"
|
||||
app:itemIconTint="@drawable/bottom_nav_bar_color_selector"
|
||||
app:itemTextColor="@drawable/bottom_nav_bar_color_selector"
|
||||
app:labelVisibilityMode="labeled"
|
||||
app:menu="@menu/settings_navigation" />
|
||||
|
||||
</LinearLayout>
|
||||
|
||||
@@ -110,12 +110,11 @@
|
||||
android:contentDescription="@string/smartbar__quick_action__one_handed_mode"
|
||||
android:src="@drawable/ic_smartphone"/>
|
||||
|
||||
<!-- TODO: find better icon for editing -->
|
||||
<dev.patrickgold.florisboard.ime.text.smartbar.SmartbarQuickActionButton
|
||||
android:id="@+id/quick_action_switch_to_editing_context"
|
||||
style="@style/SmartbarQuickAction"
|
||||
android:contentDescription="@string/smartbar__quick_action__switch_to_editing_context"
|
||||
android:src="@drawable/ic_format_italic"/>
|
||||
android:src="@drawable/ic_open_with"/>
|
||||
|
||||
</LinearLayout>
|
||||
|
||||
|
||||
@@ -1,10 +1,12 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
|
||||
xmlns:tools="http://schemas.android.com/tools"
|
||||
<LinearLayout
|
||||
xmlns:android="http://schemas.android.com/apk/res/android"
|
||||
xmlns:app="http://schemas.android.com/apk/res-auto"
|
||||
android:id="@+id/text_input"
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="wrap_content"
|
||||
android:orientation="vertical">
|
||||
android:orientation="vertical"
|
||||
android:alpha="0.9">
|
||||
|
||||
<include layout="@layout/smartbar"/>
|
||||
|
||||
@@ -15,21 +17,11 @@
|
||||
android:layout_height="wrap_content"
|
||||
android:measureAllChildren="true">
|
||||
|
||||
<LinearLayout
|
||||
<dev.patrickgold.florisboard.ime.text.keyboard.KeyboardView
|
||||
android:id="@+id/keyboard_preview"
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="wrap_content"
|
||||
android:orientation="vertical"
|
||||
tools:ignore="UselessParent">
|
||||
|
||||
<!-- TODO: make a good looking keyboard preview -->
|
||||
|
||||
<TextView
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="200dp"
|
||||
android:text="Loading keyboard, please wait..."/>
|
||||
|
||||
</LinearLayout>
|
||||
app:isLoadingPlaceholderKeyboard="true"/>
|
||||
|
||||
<include layout="@layout/editing_layout"/>
|
||||
|
||||
|
||||
@@ -58,7 +58,10 @@
|
||||
<com.google.android.material.textfield.TextInputEditText
|
||||
android:id="@+id/theme_name_value"
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="wrap_content"/>
|
||||
android:layout_height="wrap_content"
|
||||
android:importantForAutofill="no"
|
||||
android:inputType="textFilter"
|
||||
android:imeOptions="flagForceAscii|flagNoExtractUi"/>
|
||||
|
||||
</com.google.android.material.textfield.TextInputLayout>
|
||||
|
||||
|
||||
@@ -22,7 +22,10 @@
|
||||
<com.google.android.material.textfield.TextInputEditText
|
||||
android:id="@+id/attr_name"
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="wrap_content"/>
|
||||
android:layout_height="wrap_content"
|
||||
android:importantForAutofill="no"
|
||||
android:inputType="textFilter"
|
||||
android:imeOptions="flagForceAscii|flagNoExtractUi"/>
|
||||
|
||||
</com.google.android.material.textfield.TextInputLayout>
|
||||
|
||||
@@ -48,7 +51,8 @@
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="wrap_content"
|
||||
android:orientation="horizontal"
|
||||
android:gravity="center_vertical">
|
||||
android:gravity="center_vertical"
|
||||
android:baselineAligned="false">
|
||||
|
||||
<com.google.android.material.textfield.TextInputLayout
|
||||
android:layout_width="0dp"
|
||||
@@ -64,7 +68,10 @@
|
||||
<com.google.android.material.textfield.TextInputEditText
|
||||
android:id="@+id/attr_value_reference_group"
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="wrap_content"/>
|
||||
android:layout_height="wrap_content"
|
||||
android:importantForAutofill="no"
|
||||
android:inputType="textFilter"
|
||||
android:imeOptions="flagForceAscii|flagNoExtractUi"/>
|
||||
|
||||
</com.google.android.material.textfield.TextInputLayout>
|
||||
|
||||
@@ -82,7 +89,10 @@
|
||||
<com.google.android.material.textfield.TextInputEditText
|
||||
android:id="@+id/attr_value_reference_attr"
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="wrap_content"/>
|
||||
android:layout_height="wrap_content"
|
||||
android:importantForAutofill="no"
|
||||
android:inputType="textFilter"
|
||||
android:imeOptions="flagForceAscii|flagNoExtractUi"/>
|
||||
|
||||
</com.google.android.material.textfield.TextInputLayout>
|
||||
|
||||
@@ -108,8 +118,9 @@
|
||||
|
||||
<ImageButton
|
||||
android:id="@+id/attr_value_solid_color_edit_btn"
|
||||
android:layout_width="wrap_content"
|
||||
android:layout_height="wrap_content"
|
||||
android:layout_width="32dp"
|
||||
android:layout_height="32dp"
|
||||
android:background="@drawable/shape_rect_rounded"
|
||||
android:src="@drawable/ic_edit"
|
||||
android:contentDescription="@string/assets__action__edit"/>
|
||||
|
||||
@@ -157,7 +168,8 @@
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="wrap_content"
|
||||
android:orientation="horizontal"
|
||||
android:gravity="center_vertical">
|
||||
android:gravity="center_vertical"
|
||||
android:baselineAligned="false">
|
||||
|
||||
<com.google.android.material.textfield.TextInputLayout
|
||||
android:layout_width="0dp"
|
||||
@@ -173,7 +185,10 @@
|
||||
<com.google.android.material.textfield.TextInputEditText
|
||||
android:id="@+id/attr_value_other_text"
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="wrap_content"/>
|
||||
android:layout_height="wrap_content"
|
||||
android:importantForAutofill="no"
|
||||
android:inputType="textFilter"
|
||||
android:imeOptions="flagForceAscii|flagNoExtractUi"/>
|
||||
|
||||
</com.google.android.material.textfield.TextInputLayout>
|
||||
|
||||
|
||||
@@ -21,7 +21,10 @@
|
||||
<com.google.android.material.textfield.TextInputEditText
|
||||
android:id="@+id/group_name"
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="wrap_content"/>
|
||||
android:layout_height="wrap_content"
|
||||
android:importantForAutofill="no"
|
||||
android:inputType="textFilter"
|
||||
android:imeOptions="flagForceAscii|flagNoExtractUi"/>
|
||||
|
||||
</com.google.android.material.textfield.TextInputLayout>
|
||||
|
||||
|
||||
@@ -126,8 +126,7 @@
|
||||
android:textColor="?android:textColorPrimary"
|
||||
android:drawableStart="@drawable/ic_delete"
|
||||
android:drawablePadding="8dp"
|
||||
android:drawableTint="?colorAccent"
|
||||
android:onClick="onActionClicked"/>
|
||||
android:drawableTint="?colorAccent"/>
|
||||
|
||||
<Button
|
||||
android:id="@+id/theme_edit_btn"
|
||||
@@ -140,8 +139,7 @@
|
||||
android:textColor="?android:textColorPrimary"
|
||||
android:drawableStart="@drawable/ic_edit"
|
||||
android:drawablePadding="8dp"
|
||||
android:drawableTint="?colorAccent"
|
||||
android:onClick="onActionClicked"/>
|
||||
android:drawableTint="?colorAccent"/>
|
||||
|
||||
</LinearLayout>
|
||||
|
||||
@@ -183,24 +181,21 @@
|
||||
android:layout_height="wrap_content"
|
||||
app:fab_color="?colorPrimaryDark"
|
||||
app:fab_icon="@drawable/ic_file_blank"
|
||||
app:label_text="@string/settings__theme_manager__create_empty"
|
||||
android:onClick="onActionClicked"/>
|
||||
app:label_text="@string/settings__theme_manager__create_empty"/>
|
||||
<com.nambimobile.widgets.efab.FabOption
|
||||
android:id="@+id/fab_option_create_from_selected"
|
||||
android:layout_width="wrap_content"
|
||||
android:layout_height="wrap_content"
|
||||
app:fab_color="?colorPrimaryDark"
|
||||
app:fab_icon="@drawable/ic_file"
|
||||
app:label_text="@string/settings__theme_manager__create_from_selected"
|
||||
android:onClick="onActionClicked"/>
|
||||
app:label_text="@string/settings__theme_manager__create_from_selected"/>
|
||||
<!--<com.nambimobile.widgets.efab.FabOption
|
||||
android:id="@+id/fab_option_import"
|
||||
android:layout_width="wrap_content"
|
||||
android:layout_height="wrap_content"
|
||||
app:fab_color="?colorPrimaryDark"
|
||||
app:fab_icon="@drawable/ic_input"
|
||||
app:label_text="@string/assets__action__import"
|
||||
android:onClick="onActionClicked"/>-->
|
||||
app:label_text="@string/assets__action__import"/>-->
|
||||
|
||||
</com.nambimobile.widgets.efab.ExpandableFabLayout>
|
||||
|
||||
|
||||
11
app/src/main/res/menu/theme_editor_menu.xml
Normal file
11
app/src/main/res/menu/theme_editor_menu.xml
Normal file
@@ -0,0 +1,11 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<menu xmlns:android="http://schemas.android.com/apk/res/android"
|
||||
xmlns:app="http://schemas.android.com/apk/res-auto">
|
||||
|
||||
<item
|
||||
android:id="@+id/settings__help"
|
||||
android:icon="@drawable/ic_help_outline"
|
||||
android:title="@string/settings__help"
|
||||
app:showAsAction="always"/>
|
||||
|
||||
</menu>
|
||||
@@ -40,6 +40,7 @@
|
||||
<string name="settings__title" comment="Title of Settings">الاعدادات</string>
|
||||
<string name="settings__menu" comment="Hint of top-right three-dot icon in Settings">المزيد من الخيارات</string>
|
||||
<string name="settings__menu_help" comment="Three-dot menu entry for Help and Feedback web link">المساعدة والملاحظات</string>
|
||||
<string name="settings__help" comment="General label for help buttons in Settings">مساعدة</string>
|
||||
<string name="settings__navigation__home" comment="Long-press hint of bottom nav item Home in Settings">الصفحة الرئيسية</string>
|
||||
<string name="settings__navigation__keyboard" comment="Long-press hint of bottom nav item Keyboard in Settings">لوحة المفاتيح</string>
|
||||
<string name="settings__navigation__typing" comment="Long-press hint of bottom nav item Typing in Settings">الكتابة</string>
|
||||
@@ -64,37 +65,51 @@
|
||||
<string name="settings__localization__subtype_error_already_exists" comment="Error message shown in subtype dialog when a subtype to add already exists">هذا النوع الفرعي موجود مسبقا!</string>
|
||||
<string name="settings__theme__title" comment="Title of the Theme fragment">مظهر لوحة المفاتيح</string>
|
||||
<string name="settings__theme__undefined" comment="General string for an undefined preference value">غير محدد</string>
|
||||
<string name="settings__theme__background" comment="General label for a background preference">لون الخلفية</string>
|
||||
<string name="settings__theme__background_active" comment="General label for an active background preference">لون الخلفية عند التنشيط</string>
|
||||
<string name="settings__theme__background_pressed" comment="General label for a pressed background preference">لون الخلفية عند الضغط</string>
|
||||
<string name="settings__theme__foreground" comment="General label for a foreground preference">لون الواجهة</string>
|
||||
<string name="settings__theme__foreground_alt" comment="General label for an alternate foreground preference">لون الواجهة (البديل)</string>
|
||||
<string name="settings__theme__foreground_capslock" comment="General label for a capslock foreground preference">لون الواجهة (وضع الحروف الكبيرة)</string>
|
||||
<string name="settings__theme__dialog_title" comment="Title of the color selection dialog for a single theme preference">اختر اللون</string>
|
||||
<string name="pref__theme__mode__label" comment="Label of the theme mode preference">وضع النسق</string>
|
||||
<string name="pref__theme__mode__always_day" comment="Preference value for theme mode">دائما يومي</string>
|
||||
<string name="pref__theme__mode__always_night" comment="Preference value for theme mode">دائما ليلي</string>
|
||||
<string name="pref__theme__mode__follow_system" comment="Preference value for theme mode">اتبّاع النظام</string>
|
||||
<string name="pref__theme__mode__follow_time" comment="Preference value for theme mode">اتبّاع الوقت</string>
|
||||
<string name="pref__theme__sunrise_time__label" comment="Label of the sunrise time preference">وقت الشروق</string>
|
||||
<string name="pref__theme__sunset_time__label" comment="Label of the sunset time preference">وقت الغروب</string>
|
||||
<string name="pref__theme__day" comment="Label of the day group (day means light theme)">نسق يومي</string>
|
||||
<string name="pref__theme__night" comment="Label of the night group (night means dark theme)">نسق ليلي</string>
|
||||
<string name="pref__theme__any_theme__label" comment="Label of the theme selector preference">النسق المحدد</string>
|
||||
<string name="pref__theme__any_theme_adapt_to_app__label" comment="Label of the theme adapt to app preference">تكييف الألوان مع التطبيق</string>
|
||||
<string name="pref__theme__any_theme_adapt_to_app__summary" comment="Summary of the theme adapt to app preference">تتكيف ألوان النسق مع تلك الموجودة في التطبيق الحالي ، إذا كان التطبيق المستهدف يدعم ذلك.</string>
|
||||
<string name="pref__theme__source_assets" comment="Label for the theme source field">أصول تطبيق FlorisBoard</string>
|
||||
<string name="pref__theme__source_internal" comment="Label for the theme source field">الذاكرة الداخلية</string>
|
||||
<string name="pref__theme__source_external" comment="Label for the theme source field">مزود خارجي</string>
|
||||
<string name="settings__theme_manager__title_day" comment="Title of the theme manager activity for day theme">مدير النسق (يومي)</string>
|
||||
<string name="settings__theme_manager__title_night" comment="Title of the theme manager activity for night theme">مدير النسق (ليلي)</string>
|
||||
<string name="settings__theme_manager__create_empty" comment="Label of the Create empty FAB action">إنشاء نسق فارغ جديد</string>
|
||||
<string name="settings__theme_manager__create_from_selected" comment="Label of the Create from selected FAB action">إنشاء من النسق المحدد</string>
|
||||
<string name="settings__theme_manager__theme_custom_title" comment="Title template for a custom theme">مخصص (على أساس %s)</string>
|
||||
<string name="settings__theme_manager__theme_new_title" comment="Title template for a new theme">نسق جديد</string>
|
||||
<string name="settings__theme_editor__title" comment="Title of the edit theme activity">تحرير النسق</string>
|
||||
<string name="settings__theme_editor__name_label" comment="Label of name input">اسم</string>
|
||||
<string name="settings__theme_editor__type_label" comment="Label of type input">نوع</string>
|
||||
<string name="settings__theme_editor__add_group_dialog_title" comment="Title of the add group dialog in the theme editor">إضافة مجموعة</string>
|
||||
<string name="settings__theme_editor__edit_group_dialog_title" comment="Title of the edit group dialog in the theme editor">تحرير المجموعة</string>
|
||||
<string name="settings__theme_editor__add_attr_dialog_title" comment="Title of the add attribute dialog in the theme editor">اضافة الخاصيه</string>
|
||||
<string name="settings__theme_editor__value_type_reference_group" comment="Theme value type sub-field">مجموعة</string>
|
||||
<string name="settings__theme_editor__value_type_on_off" comment="Theme value type">تبديل</string>
|
||||
<string name="settings__theme_editor__value_type_on_off_state" comment="Theme value type sub-field">الحالة</string>
|
||||
<string name="settings__theme_editor__value_type_other" comment="Theme value type">أخرى</string>
|
||||
<string name="settings__theme_editor__value_type_other_text" comment="Theme value type sub-field">النص</string>
|
||||
<string name="settings__theme__group_window" comment="Theme group label">النافذة والنظام</string>
|
||||
<string name="settings__theme__group_keyboard" comment="Theme group label">لوحة المفاتيح</string>
|
||||
<string name="settings__theme__group_key" comment="Theme group label">المفتاح</string>
|
||||
<string name="settings__theme__group_key_enter" comment="Theme group label">مفتاح الإدخال</string>
|
||||
<string name="settings__theme__group_key_popup" comment="Theme group label">نافذة المفتاح المنبثقة</string>
|
||||
<string name="settings__theme__group_key_shift" comment="Theme group label">مفتاح التحويل</string>
|
||||
<string name="settings__theme__group_media" comment="Theme group label">سياق الوسائط</string>
|
||||
<string name="settings__theme__group_one_handed" comment="Theme group label">اليد الواحدة</string>
|
||||
<string name="settings__theme__group_one_handed_button" comment="Theme group label">زر اليد الواحدة</string>
|
||||
<string name="settings__theme__group_private_mode" comment="Theme group label">الوضع الخاص</string>
|
||||
<string name="settings__theme__group_oneHanded" comment="Theme group label">اليد الواحدة</string>
|
||||
<string name="settings__theme__group_popup" comment="Theme group label">نافذة منبثقة</string>
|
||||
<string name="settings__theme__group_privateMode" comment="Theme group label">الوضع الخاص</string>
|
||||
<string name="settings__theme__group_smartbar" comment="Theme group label">الشريط الذكـي</string>
|
||||
<string name="settings__theme__group_smartbar_button" comment="Theme group label">زر الشريط الذكي</string>
|
||||
<string name="pref__theme__colorPrimary_title" comment="Title of Color primary theme preference">اللون الأساسي</string>
|
||||
<string name="pref__theme__colorPrimary_summary" comment="Summary of Color primary theme preference">يتم تطبيقه على تموج علامة تبويب الوسائط الرئيسية وإبراز الاختيار</string>
|
||||
<string name="pref__theme__colorPrimaryDark_title" comment="Title of Color primary dark theme preference">اللون الأساسي (داكن)</string>
|
||||
<string name="pref__theme__colorPrimaryDark_summary" comment="Summary of Color primary dark theme preference">غير مستخدم حاليا ، محجوز للتنفيذ المستقبلي</string>
|
||||
<string name="pref__theme__colorAccent_title" comment="Title of Color accent theme preference">لون التمييز</string>
|
||||
<string name="pref__theme__colorAccent_summary" comment="Summary of Color accent theme preference">يتم تطبيقه على علامة تبويب الإيموجي</string>
|
||||
<string name="pref__theme__navBarColor_title" comment="Title of Nav bar color theme preference">لون شريط التصفّح</string>
|
||||
<string name="pref__theme__navBarColor_summary" comment="Summary of Nav bar color theme preference">خلفية شريط التصفّح.</string>
|
||||
<string name="pref__theme__navBarIsLight_title" comment="Title of Nav bar is light theme preference">واجهة شريط التصفّح</string>
|
||||
<string name="pref__theme__navBarIsLight_summary" comment="Summary of Nav bar is light theme preference">ضبط على التشغيل للواجهة الداكنة أو على إيقاف التشغيل للواجهة الفاتحة.</string>
|
||||
<string name="pref__theme__showKeyBorder_title" comment="Title of Show Key Border preference">إطار المفتاح</string>
|
||||
<string name="pref__theme__showKeyBorder_summary" comment="Summary of Show Key Border preference">اضبط على التفعيل لإظهار الإطار أو على الإيقاف لإخفائه</string>
|
||||
<string name="settings__theme__attr_background" comment="Theme attribute label">لون الخلفية</string>
|
||||
<string name="settings__theme__attr_foreground" comment="Theme attribute label">لون الواجهة</string>
|
||||
<string name="settings__theme__attr_showBorder" comment="Theme attribute label">عرض الحدود</string>
|
||||
<string name="settings__theme__attr_colorPrimaryDark" comment="Theme attribute label">اللون الأساسي (داكن)</string>
|
||||
<string name="settings__theme__attr_textColor" comment="Theme attribute label">لون النص</string>
|
||||
<string name="settings__keyboard__title" comment="Title of Keyboard preferences fragment">تفضيلات لوحة المفاتيح</string>
|
||||
<string name="pref__keyboard__group_keys__label" comment="Preference group title">المفاتيح</string>
|
||||
<string name="pref__keyboard__number_row__label" comment="Preference title">صف الأعداد</string>
|
||||
@@ -105,6 +120,8 @@
|
||||
<string name="pref__keyboard__hint_mode__enabled_hint_priority" comment="Preference value">مفعّل (الأولوية للتلميح)</string>
|
||||
<string name="pref__keyboard__hint_mode__enabled_accent_priority" comment="Preference value">مفعّل (الأولوية للحروف الإضافية)</string>
|
||||
<string name="pref__keyboard__hint_mode__enabled_smart_priority" comment="Preference value">مفعّل (تحديد الأولويات الذكي)</string>
|
||||
<string name="pref__keyboard__utility_key_action__switch_language" comment="Preference value">تغيير اللغة</string>
|
||||
<string name="pref__keyboard__utility_key_action__switch_keyboard_app" comment="Preference value">تبديل تطبيق لوحة المفاتيح</string>
|
||||
<string name="pref__keyboard__font_size_multiplier_portrait__label" comment="Preference title">مضاعف حجم الخط (عمودي)</string>
|
||||
<string name="pref__keyboard__font_size_multiplier_landscape__label" comment="Preference title">مضاعف حجم الخط (أفقي)</string>
|
||||
<string name="pref__keyboard__group_layout__label" comment="Preference group title">نظام التخطيط</string>
|
||||
@@ -122,7 +139,6 @@
|
||||
<string name="pref__keyboard__height_factor__extra_tall" comment="Preference value">طويل جدا</string>
|
||||
<string name="pref__keyboard__height_factor__custom" comment="Preference value">مخصص</string>
|
||||
<string name="pref__keyboard__height_factor_custom__label" comment="Preference title">قيمة ارتفاع لوحة المفاتيح المخصصة</string>
|
||||
<string name="pref__keyboard__bottom_offset__label" comment="Preference title">الإزاحة السفلية (للشاشات المقوسة)</string>
|
||||
<string name="pref__keyboard__group_keypress__label" comment="Preference group title">ضغط المفتاح</string>
|
||||
<string name="pref__keyboard__sound_enabled__label" comment="Preference title">الصوت عند ضغط المفتاح</string>
|
||||
<string name="pref__keyboard__sound_volume__label" comment="Preference title">حجم الصوت عند ضغط المفتاح</string>
|
||||
@@ -154,12 +170,12 @@
|
||||
<string name="pref__glide__enabled__summary" comment="Preference summary">أكتب كلمة بتمرير إصبعك عبر حروفها</string>
|
||||
<string name="pref__glide__show_trail__label" comment="Preference title">[NYI] إظهار آثار التمرير</string>
|
||||
<string name="pref__glide__show_trail__summary" comment="Preference summary">سوف يختفي بعد كل كلمة</string>
|
||||
<string name="pref__gestures__title" comment="Preference group title">الإيماءات</string>
|
||||
<string name="pref__gestures__swipe_action__no_action" comment="Preference value for swipe action">بدون إجراء</string>
|
||||
<string name="pref__gestures__swipe_action__delete_characters_precisely" comment="Preference value for swipe action">حذف الحروف بدقة</string>
|
||||
<string name="pref__gestures__swipe_action__delete_word" comment="Preference value for swipe action">حذف الكلمة الحالية</string>
|
||||
<string name="pref__gestures__swipe_action__delete_words_precisely" comment="Preference value for swipe action">حذف الكلمات بدقة</string>
|
||||
<string name="pref__gestures__swipe_action__hide_keyboard" comment="Preference value for swipe action">إخفاء لوحة المفاتيح</string>
|
||||
<string name="pref__gestures__swipe_action__insert_space" comment="Preference value for swipe action">إدراج مسافة</string>
|
||||
<string name="pref__gestures__swipe_action__move_cursor_up" comment="Preference value for swipe action">تحريك المؤشر إلى الأعلى</string>
|
||||
<string name="pref__gestures__swipe_action__move_cursor_down" comment="Preference value for swipe action">تحريك المؤشر إلى الأسفل</string>
|
||||
<string name="pref__gestures__swipe_action__move_cursor_left" comment="Preference value for swipe action">تحريك المؤشر إلى اليسار</string>
|
||||
@@ -203,6 +219,21 @@
|
||||
<string name="about__view_source_code" comment="Label of View source code button in About">مصدر التعليمات البرمجية</string>
|
||||
<string name="about__license__title" comment="Title of Open-source licenses dialog">تراخيص البرامج مفتوحة المصدر</string>
|
||||
<!-- Assets strings -->
|
||||
<string name="assets__file__name">الاسم</string>
|
||||
<string name="assets__file__source">المصدر</string>
|
||||
<string name="assets__action__add">إضافة</string>
|
||||
<string name="assets__action__cancel">إلغاء</string>
|
||||
<string name="assets__action__cancel_confirm_title">تأكيد الإلغاء</string>
|
||||
<string name="assets__action__delete">حذف</string>
|
||||
<string name="assets__action__delete_confirm_title">تأكيد الحذف</string>
|
||||
<string name="assets__action__delete_confirm_message">هل أنت متأكد من حذف \"%s\"؟ لا يمكن التراجع عن هذا الإجراء.</string>
|
||||
<string name="assets__action__edit">تعديل</string>
|
||||
<string name="assets__action__export">تصدير</string>
|
||||
<string name="assets__action__import">إستيراد</string>
|
||||
<string name="assets__action__no">كلا</string>
|
||||
<string name="assets__action__save">حفظ</string>
|
||||
<string name="assets__action__yes">موافق</string>
|
||||
<string name="assets__error__invalid">غير صحيح</string>
|
||||
<!-- Setup UI strings -->
|
||||
<string name="setup__title" comment="Title of Setup">الإعداد</string>
|
||||
<string name="setup__prev_button" comment="Label of Previous button in Setup (try to find a short translation due to limited space in UI)">السابق</string>
|
||||
|
||||
323
app/src/main/res/values-bg/strings.xml
Normal file
323
app/src/main/res/values-bg/strings.xml
Normal file
@@ -0,0 +1,323 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<resources>
|
||||
<string name="app_name">FlorisBoard</string>
|
||||
<string name="key__phone_pause" comment="Label for the Pause key in the telephone keyboard layout">Пауза</string>
|
||||
<string name="key__phone_wait" comment="Label for the Wait key in the telephone keyboard layout">Изчакване</string>
|
||||
<string name="key_popup__threedots_alt" comment="Content description for the three-dots icon in a key popup">Икона с три точки. Ако е видима, означава, че при по-продължително натискане могат да се използват повече букви.</string>
|
||||
<!-- One-handed strings -->
|
||||
<string name="one_handed__close_btn_content_description" comment="Content description for the one-handed close button">Затваряне на режим с една ръка.</string>
|
||||
<string name="one_handed__move_start_btn_content_description" comment="Content description for the one-handed move to left button">Преместване на клавиатурата вляво.</string>
|
||||
<string name="one_handed__move_end_btn_content_description" comment="Content description for the one-handed move to right button">Преместване на клавиатурата вдясно.</string>
|
||||
<!-- Private mode info dialog strings -->
|
||||
<string name="private_mode_dialog__title" comment="Title of the private mode dialog">Поверителен режим</string>
|
||||
<!--
|
||||
<string name="private_mode_dialog__text" comment="Text of the private mode dialog">The icon you just clicked at indicates that FlorisBoard works in the private mode. This means that all features which require to process and temporarily save your input stop working. This applies at minimum to the following features (if they\'ve been turned on previously):\n\n - Next word algorithm adjustments\n\n - Clipboard paste suggestions\n\n - Clipboard history\n\nFlorisBoard enters this mode either if an app requests it or if it was specifically enabled in the advanced settings.</string>
|
||||
-->
|
||||
<!-- Media strings -->
|
||||
<string name="media__tab__emojis" comment="Tab description for emojis in the media UI">Емоджита</string>
|
||||
<string name="media__tab__emoticons" comment="Tab description for emoticons in the media UI">Емотикони</string>
|
||||
<string name="media__tab__kaomoji" comment="Tab description for kaomoji in the media UI">Каомоджи</string>
|
||||
<!-- Emoji strings -->
|
||||
<string name="emoji__category__smileys_emotion" comment="Emoji category name">Усмивки и емоции</string>
|
||||
<string name="emoji__category__people_body" comment="Emoji category name">Хора и тяло</string>
|
||||
<string name="emoji__category__animals_nature" comment="Emoji category name">Животни и природа</string>
|
||||
<string name="emoji__category__food_drink" comment="Emoji category name">Храни и напитки</string>
|
||||
<string name="emoji__category__travel_places" comment="Emoji category name">Пътуване и забележителности</string>
|
||||
<string name="emoji__category__activities" comment="Emoji category name">Дейности</string>
|
||||
<string name="emoji__category__objects" comment="Emoji category name">Обекти</string>
|
||||
<string name="emoji__category__symbols" comment="Emoji category name">Символи</string>
|
||||
<string name="emoji__category__flags" comment="Emoji category name">Знамена</string>
|
||||
<!-- Smartbar strings -->
|
||||
<string name="smartbar__quick_action_toggle__alt" comment="Content description for the quick action toggle button in Smartbar">Превключване на бързо действие. При натискане, превключва между предложенията за думи и бутоните за бързо действие.</string>
|
||||
<string name="smartbar__quick_action__exit_editing" comment="Content-description for the exit editing layout button in Smartbar">Изход от панела за редактиране на текст.</string>
|
||||
<string name="smartbar__quick_action__one_handed_mode" comment="Content-description for the one-handed quick action in Smartbar">Превключване на състоянието на режима с една ръка.</string>
|
||||
<string name="smartbar__quick_action__open_settings" comment="Content-description for the settings quick action in Smartbar">Отваряне на настройките.</string>
|
||||
<string name="smartbar__quick_action__switch_to_editing_context" comment="Content-description for the editing quick action in Smartbar">Преминаване към панела за редактиране на текст.</string>
|
||||
<string name="smartbar__quick_action__switch_to_media_context" comment="Content-description for the media quick action in Smartbar">Преминаване към изглед за въвеждане на медия.</string>
|
||||
<string name="smartbar__quick_action__undo" comment="Content-description for the undo quick action in Smartbar">Бутон за отмяна, който връща последното действие</string>
|
||||
<string name="smartbar__quick_action__redo" comment="Content-description for the redo quick action in Smartbar">Бутон за повтаряне, който връща последната отмяна</string>
|
||||
<string name="smartbar__quick_action__private_mode" comment="Content-description for the private mode button in Smartbar">Ако се вижда, означава, че е активен поверителен режим. При щракване показва информация за поверителния режим.</string>
|
||||
<!-- Settings UI strings -->
|
||||
<string name="settings__title" comment="Title of Settings">Настройки</string>
|
||||
<string name="settings__menu" comment="Hint of top-right three-dot icon in Settings">Още настройки</string>
|
||||
<string name="settings__menu_help" comment="Three-dot menu entry for Help and Feedback web link">Помощ и обратна връзка</string>
|
||||
<string name="settings__help" comment="General label for help buttons in Settings">Помощ</string>
|
||||
<string name="settings__navigation__home" comment="Long-press hint of bottom nav item Home in Settings">Начало</string>
|
||||
<string name="settings__navigation__keyboard" comment="Long-press hint of bottom nav item Keyboard in Settings">Клавиатура</string>
|
||||
<string name="settings__navigation__typing" comment="Long-press hint of bottom nav item Typing in Settings">Въвеждане</string>
|
||||
<string name="settings__navigation__theme" comment="Long-press hint of bottom nav item Theme in Settings">Тема</string>
|
||||
<string name="settings__navigation__gestures" comment="Long-press hint of bottom nav item Gestures in Settings">Жестове</string>
|
||||
<string name="settings__default" comment="General string which is used when a preference has the default value set">По подразбиране</string>
|
||||
<string name="settings__system_default" comment="General string which is used when a preference has the system default value set">По подразбиране от системата</string>
|
||||
<string name="settings__home__title" comment="Title of the Home fragment">Добре дошли във %s</string>
|
||||
<string name="settings__home__ime_not_enabled" comment="Error message shown in Home fragment when FlorisBoard is not enabled in the system">FlorisBoard не е активен в системата и по този начин не може да бъде достъпен като метод за въвеждане. Щракнете тук, за да разрешите този проблем.</string>
|
||||
<string name="settings__home__ime_not_selected" comment="Warning message shown in Home fragment when FlorisBoard is not selected as the default keyboard">FlorisBoard не е избран като метод за въвеждане по подразбиране. Щракнете тук, за да разрешите този проблем.</string>
|
||||
<string name="settings__home__contribute" comment="Contributing message shown in Home fragment">Благодарим ви, че изпробвате приложението FlorisBoard! Този проект все още е в алфа версия и поради това има липсващи възможности. Ако откриете грешки или искате да направите предложение, моля, проверете хранилището в GitHub и подайте сигнал за проблем. Така ще допринесете за подобряване на FlorisBoard за всички потребители!</string>
|
||||
<string name="settings__localization__title" comment="Title of languages and layout box in the Typing fragment">Езици и клавиатурни подредби</string>
|
||||
<string name="settings__localization__subtype_no_subtypes_configured_warning" comment="Warning message that no subtype has been defined in the Typing fragment">Изглежда, че не сте настроили подтипове. Като резервен вариант ще се използва подтипът English/QWERTY!</string>
|
||||
<string name="settings__localization__subtype_add" comment="Subtype dialog add button">Добавяне</string>
|
||||
<string name="settings__localization__subtype_add_title" comment="Title of subtype dialog when adding a new subtype">Добавяне на подтип</string>
|
||||
<string name="settings__localization__subtype_apply" comment="Subtype dialog apply button">Прилагане</string>
|
||||
<string name="settings__localization__subtype_cancel" comment="Subtype dialog cancel button">Отказ</string>
|
||||
<string name="settings__localization__subtype_delete" comment="Subtype dialog delete button">Изтриване</string>
|
||||
<string name="settings__localization__subtype_edit_title" comment="Title of subtype dialog when editing an existing subtype">Редактиране на подтип</string>
|
||||
<string name="settings__localization__subtype_locale" comment="Label for locale dropdown in subtype dialog">Език</string>
|
||||
<string name="settings__localization__subtype_layout" comment="Label for keyboard layout dropdown in subtype dialog">Клавиатурна подредба</string>
|
||||
<string name="settings__localization__subtype_error_already_exists" comment="Error message shown in subtype dialog when a subtype to add already exists">Този подтип вече съществува!</string>
|
||||
<string name="settings__theme__title" comment="Title of the Theme fragment">Тема на клавиатурата</string>
|
||||
<string name="settings__theme__undefined" comment="General string for an undefined preference value">Недефинирано</string>
|
||||
<string name="pref__theme__mode__label" comment="Label of the theme mode preference">Режим на тема</string>
|
||||
<string name="pref__theme__mode__always_day" comment="Preference value for theme mode">Винаги ден</string>
|
||||
<string name="pref__theme__mode__always_night" comment="Preference value for theme mode">Винаги нощ</string>
|
||||
<string name="pref__theme__mode__follow_system" comment="Preference value for theme mode">Според системата</string>
|
||||
<string name="pref__theme__mode__follow_time" comment="Preference value for theme mode">Според часа</string>
|
||||
<string name="pref__theme__sunrise_time__label" comment="Label of the sunrise time preference">Време на изгрев</string>
|
||||
<string name="pref__theme__sunset_time__label" comment="Label of the sunset time preference">Време на залез</string>
|
||||
<string name="pref__theme__day" comment="Label of the day group (day means light theme)">Дневна тема</string>
|
||||
<string name="pref__theme__night" comment="Label of the night group (night means dark theme)">Нощна тема</string>
|
||||
<string name="pref__theme__any_theme__label" comment="Label of the theme selector preference">Избрана тема</string>
|
||||
<string name="pref__theme__any_theme_adapt_to_app__label" comment="Label of the theme adapt to app preference">Адаптиране на цветовете спрямо приложението</string>
|
||||
<string name="pref__theme__any_theme_adapt_to_app__summary" comment="Summary of the theme adapt to app preference">Цветовете на темата се адаптират спрямо текущото приложение, ако то го поддържа.</string>
|
||||
<string name="pref__theme__source_assets" comment="Label for the theme source field">Активи на FlorisBoard</string>
|
||||
<string name="pref__theme__source_internal" comment="Label for the theme source field">Вътрешно хранилище</string>
|
||||
<string name="pref__theme__source_external" comment="Label for the theme source field">Външен доставчик</string>
|
||||
<string name="settings__theme_manager__title_day" comment="Title of the theme manager activity for day theme">Управление на теми (ден)</string>
|
||||
<string name="settings__theme_manager__title_night" comment="Title of the theme manager activity for night theme">Управление на теми (нощ)</string>
|
||||
<string name="settings__theme_manager__create_empty" comment="Label of the Create empty FAB action">Създаване на празна тема</string>
|
||||
<string name="settings__theme_manager__create_from_selected" comment="Label of the Create from selected FAB action">Създаване от избрана тема</string>
|
||||
<string name="settings__theme_manager__theme_custom_title" comment="Title template for a custom theme">Персонализирано (базирано на %s)</string>
|
||||
<string name="settings__theme_manager__theme_new_title" comment="Title template for a new theme">Нова тема</string>
|
||||
<string name="settings__theme_editor__title" comment="Title of the edit theme activity">Редактиране на тема</string>
|
||||
<string name="settings__theme_editor__name_label" comment="Label of name input">Име</string>
|
||||
<string name="settings__theme_editor__type_label" comment="Label of type input">Вид</string>
|
||||
<string name="settings__theme_editor__add_group_dialog_title" comment="Title of the add group dialog in the theme editor">Добавяне на група</string>
|
||||
<string name="settings__theme_editor__edit_group_dialog_title" comment="Title of the edit group dialog in the theme editor">Редактиране на група</string>
|
||||
<string name="settings__theme_editor__add_attr_dialog_title" comment="Title of the add attribute dialog in the theme editor">Добавяне на атрибут</string>
|
||||
<string name="settings__theme_editor__edit_attr_dialog_title" comment="Title of the edit attribute dialog in the theme editor">Редактиране на атрибут</string>
|
||||
<string name="settings__theme_editor__value_type_reference" comment="Theme value type">Референция</string>
|
||||
<string name="settings__theme_editor__value_type_reference_group" comment="Theme value type sub-field">Група</string>
|
||||
<string name="settings__theme_editor__value_type_reference_attr" comment="Theme value type sub-field">Атрибут</string>
|
||||
<string name="settings__theme_editor__value_type_solid_color" comment="Theme value type">Плътен цвят</string>
|
||||
<string name="settings__theme_editor__value_type_lin_grad" comment="Theme value type">Линеен градиент</string>
|
||||
<string name="settings__theme_editor__value_type_rad_grad" comment="Theme value type">Радиален градиент</string>
|
||||
<string name="settings__theme_editor__value_type_on_off" comment="Theme value type">Превключване</string>
|
||||
<string name="settings__theme_editor__value_type_on_off_state" comment="Theme value type sub-field">Състояние</string>
|
||||
<string name="settings__theme_editor__value_type_other" comment="Theme value type">Други</string>
|
||||
<string name="settings__theme_editor__value_type_other_text" comment="Theme value type sub-field">Текст</string>
|
||||
<string name="settings__theme_editor__value_preview_content_description" comment="Theme value preview content description">Преглед на стойността на темата</string>
|
||||
<string name="settings__theme_editor__error_theme_label_empty" comment="Error text for an empty theme label">Моля, въведете име на темата.</string>
|
||||
<string name="settings__theme_editor__error_group_name" comment="Error text for an invalid group name">Моля, въведете име на група, която съдържа само букви (a–я и/или A–Я), двоеточия (:) за подгрупиране или допълнително числа (0–9), тилда (~) и подчертаване (_) за етикета на клавиша.</string>
|
||||
<string name="settings__theme_editor__error_group_name_empty" comment="Error text for an empty group name">Моля, въведете име на група.</string>
|
||||
<string name="settings__theme_editor__error_group_name_already_exists" comment="Error text for a duplicate group name">Това име на група вече съществува в тази тема. Моля, посочете друго.</string>
|
||||
<string name="settings__theme_editor__error_attr_name" comment="Error text for an invalid attribute name">Моля, въведете име на атрибут, което съдържа само буквите a-я и/или A-Я.</string>
|
||||
<string name="settings__theme_editor__error_attr_name_empty" comment="Error text for an empty attribute name">Моля, въведете име на атрибут.</string>
|
||||
<string name="settings__theme_editor__error_attr_name_already_exists" comment="Error text for a duplicate attribute name">Това име на атрибут вече съществува в тази група. Моля, посочете друго.</string>
|
||||
<string name="settings__theme__group_window" comment="Theme group label">Прозорец и система</string>
|
||||
<string name="settings__theme__group_keyboard" comment="Theme group label">Клавиатура</string>
|
||||
<string name="settings__theme__group_key" comment="Theme group label">Клавиши</string>
|
||||
<string name="settings__theme__group_key_specific" comment="Theme group label (%s is specific modifier)">Клавиш (%s)</string>
|
||||
<string name="settings__theme__group_media" comment="Theme group label">Медиен контекст</string>
|
||||
<string name="settings__theme__group_oneHanded" comment="Theme group label">За една ръка</string>
|
||||
<string name="settings__theme__group_popup" comment="Theme group label">Изскачащ прозорец</string>
|
||||
<string name="settings__theme__group_privateMode" comment="Theme group label">Поверителен режим</string>
|
||||
<string name="settings__theme__group_smartbar" comment="Theme group label">Умна лента</string>
|
||||
<string name="settings__theme__group_smartbarButton" comment="Theme group label">Бутон за умна лента</string>
|
||||
<string name="settings__theme__group_extractEditLayout" comment="Theme group label">Клавиатура на цял екран (пейзаж)</string>
|
||||
<string name="settings__theme__group_extractActionButton" comment="Theme group label">Бутон към клавиатура на цял екран (пейзаж)</string>
|
||||
<string name="settings__theme__group_custom" comment="Theme group label (%s is custom group name)">Персонализирана група (%s)</string>
|
||||
<string name="settings__theme__attr_background" comment="Theme attribute label">Цвят на фона</string>
|
||||
<string name="settings__theme__attr_backgroundActive" comment="Theme attribute label">Цвят на фона (активен)</string>
|
||||
<string name="settings__theme__attr_backgroundPressed" comment="Theme attribute label">Цвят на фона (натиснат)</string>
|
||||
<string name="settings__theme__attr_foreground" comment="Theme attribute label">Цвят на текста</string>
|
||||
<string name="settings__theme__attr_foregroundAlt" comment="Theme attribute label">Цвят на текста (алтернативен)</string>
|
||||
<string name="settings__theme__attr_foregroundPressed" comment="Theme attribute label">Цвят на текста (натиснат)</string>
|
||||
<string name="settings__theme__attr_showBorder" comment="Theme attribute label">Показване на кант</string>
|
||||
<string name="settings__theme__attr_colorPrimary" comment="Theme attribute label">Основен цвят</string>
|
||||
<string name="settings__theme__attr_colorPrimaryDark" comment="Theme attribute label">Основен цвят (тъмен)</string>
|
||||
<string name="settings__theme__attr_colorAccent" comment="Theme attribute label">Акцентиращ цвят</string>
|
||||
<string name="settings__theme__attr_navBarColor" comment="Theme attribute label">Цвят на лентата за навигация</string>
|
||||
<string name="settings__theme__attr_navBarLight" comment="Theme attribute label">Лента за навигация с тъмен текст</string>
|
||||
<string name="settings__theme__attr_semiTransparentColor" comment="Theme attribute label">Полупрозрачен цвят</string>
|
||||
<string name="settings__theme__attr_textColor" comment="Theme attribute label">Цвят на текста</string>
|
||||
<string name="settings__theme__attr_custom" comment="Theme attribute label (%s is custom attribute name)">Персонализиран атрибут (%s)</string>
|
||||
<string name="settings__keyboard__title" comment="Title of Keyboard preferences fragment">Предпочитания за клавиатурата</string>
|
||||
<string name="pref__keyboard__group_keys__label" comment="Preference group title">Клавиши</string>
|
||||
<string name="pref__keyboard__number_row__label" comment="Preference title">Ред с цифри</string>
|
||||
<string name="pref__keyboard__number_row__summary" comment="Preference summary">Показване на ред с цифри над първия ред</string>
|
||||
<string name="pref__keyboard__hinted_number_row_mode__label" comment="Preference title">Подсказан ред с цифри</string>
|
||||
<string name="pref__keyboard__hinted_symbols_mode__label" comment="Preference title">Подсказани символи</string>
|
||||
<string name="pref__keyboard__hint_mode__disabled" comment="Preference value">Изключено</string>
|
||||
<string name="pref__keyboard__hint_mode__enabled_hint_priority" comment="Preference value">Включено (подсказка с приоритет)</string>
|
||||
<string name="pref__keyboard__hint_mode__enabled_accent_priority" comment="Preference value">Включено (акцент с приоритет)</string>
|
||||
<string name="pref__keyboard__hint_mode__enabled_smart_priority" comment="Preference value">Включено (умен приоритет)</string>
|
||||
<string name="pref__keyboard__utility_key_enabled__label" comment="Preference title">Показване на помощен клавиш</string>
|
||||
<string name="pref__keyboard__utility_key_enabled__summary" comment="Preference summary">Показва помощен клавиш до бутона за интервал</string>
|
||||
<string name="pref__keyboard__utility_key_action__label" comment="Preference title">Действие на помощния клавиш</string>
|
||||
<string name="pref__keyboard__utility_key_action__switch_to_emojis" comment="Preference value">Преминаване към емоджита</string>
|
||||
<string name="pref__keyboard__utility_key_action__switch_language" comment="Preference value">Промяна на език</string>
|
||||
<string name="pref__keyboard__utility_key_action__switch_keyboard_app" comment="Preference value">Промяна на приложението за клавиатура</string>
|
||||
<string name="pref__keyboard__utility_key_action__dynamic_switch_language_emojis" comment="Preference value">Динамично: Преминаване към емоджита/промяна на език</string>
|
||||
<string name="pref__keyboard__font_size_multiplier_portrait__label" comment="Preference title">Множител на размера на шрифта (портрет)</string>
|
||||
<string name="pref__keyboard__font_size_multiplier_landscape__label" comment="Preference title">Множител на размера на шрифта (пейзаж)</string>
|
||||
<string name="pref__keyboard__group_layout__label" comment="Preference group title">Оформление</string>
|
||||
<string name="pref__keyboard__one_handed_mode__label" comment="Preference value">Режим за работа с една ръка</string>
|
||||
<string name="pref__keyboard__one_handed_mode__off" comment="Preference value">Изключено</string>
|
||||
<string name="pref__keyboard__one_handed_mode__right" comment="Preference value">Режим за дясна ръка</string>
|
||||
<string name="pref__keyboard__one_handed_mode__left" comment="Preference value">Режим за лява ръка</string>
|
||||
<string name="pref__keyboard__landscape_input_ui_mode__label" comment="Preference value">Клавиатура на цял екран (пейзаж)</string>
|
||||
<string name="pref__keyboard__landscape_input_ui_mode__never_show" comment="Preference value">Никога да не се показва</string>
|
||||
<string name="pref__keyboard__landscape_input_ui_mode__always_show" comment="Preference value">Винаги да се показва</string>
|
||||
<string name="pref__keyboard__landscape_input_ui_mode__dynamically_show" comment="Preference value">Да се показва динамично</string>
|
||||
<string name="pref__keyboard__height_factor__label" comment="Preference title">Височина на клавиатурата</string>
|
||||
<string name="pref__keyboard__height_factor__extra_short" comment="Preference value">Много ниска</string>
|
||||
<string name="pref__keyboard__height_factor__short" comment="Preference value">Ниска</string>
|
||||
<string name="pref__keyboard__height_factor__mid_short" comment="Preference value">Среднониска</string>
|
||||
<string name="pref__keyboard__height_factor__normal" comment="Preference value">Нормална</string>
|
||||
<string name="pref__keyboard__height_factor__mid_tall" comment="Preference value">Средновисока</string>
|
||||
<string name="pref__keyboard__height_factor__tall" comment="Preference value">Висока</string>
|
||||
<string name="pref__keyboard__height_factor__extra_tall" comment="Preference value">Много висока</string>
|
||||
<string name="pref__keyboard__height_factor__custom" comment="Preference value">Персонализирана</string>
|
||||
<string name="pref__keyboard__height_factor_custom__label" comment="Preference title">Персонализирана стойност за височина на клавиатурата</string>
|
||||
<string name="pref__keyboard__bottom_offset_portrait__label" comment="Preference title">Отстъп отдолу (портрет)</string>
|
||||
<string name="pref__keyboard__bottom_offset_landscape__label" comment="Preference title">Отстъп отдолу (пейзаж)</string>
|
||||
<string name="pref__keyboard__group_keypress__label" comment="Preference group title">Натискане на клавиш</string>
|
||||
<string name="pref__keyboard__sound_enabled__label" comment="Preference title">Звук при натискане на клавиш</string>
|
||||
<string name="pref__keyboard__sound_volume__label" comment="Preference title">Сила на звук при натискане на клавиш</string>
|
||||
<string name="pref__keyboard__vibration_enabled__label" comment="Preference title">Вибрация при натискане на клавиш</string>
|
||||
<string name="pref__keyboard__vibration_strength__label" comment="Preference title">Сила на вибрация при натискане на клавиш</string>
|
||||
<string name="pref__keyboard__popup_visible__label" comment="Preference title">Видимост на изскачащ прозорец</string>
|
||||
<string name="pref__keyboard__popup_visible__summary" comment="Preference summary">Показване на изскачащ прозорец при натискане на клавиш</string>
|
||||
<string name="pref__keyboard__long_press_delay__label" comment="Preference title">Закъснение при продължително натискане на клавиш</string>
|
||||
<string name="settings__typing__title" comment="Title of Typing experience fragment">Изживяване от писане</string>
|
||||
<string name="pref__smartbar__enabled__label" comment="Preference title">Показване на умна лента</string>
|
||||
<string name="pref__smartbar__enabled__summary" comment="Preference summary">Ще се покаже отгоре на клавиатурата</string>
|
||||
<string name="pref__suggestion__title" comment="Preference group title">Предложения</string>
|
||||
<string name="pref__suggestion__enabled__label" comment="Preference title">[NYI] Показване на предложения, при писане</string>
|
||||
<string name="pref__suggestion__enabled__summary" comment="Preference summary">Ще се покаже в умната лента</string>
|
||||
<string name="pref__suggestion__suggest_clipboard_content__label" comment="Preference title">Предложения от съдържанието на буфера</string>
|
||||
<string name="pref__suggestion__suggest_clipboard_content__summary" comment="Preference summary">Предлагане да се постави съдържанието на клипборда, ако е копирано преди това</string>
|
||||
<string name="pref__suggestion__use_pref_words__label" comment="Preference title">[NYI] Предложения за следваща дума</string>
|
||||
<string name="pref__suggestion__use_pref_words__summary" comment="Preference summary">Използване на предишните думи за генериране на предложения</string>
|
||||
<string name="pref__correction__title" comment="Preference group title">Корекции</string>
|
||||
<string name="pref__correction__auto_capitalization__label" comment="Preference title">Автоматични главни букви</string>
|
||||
<string name="pref__correction__auto_capitalization__summary" comment="Preference summary">Думите се изписват с главни букви въз основа на текущия контекст на въвеждане</string>
|
||||
<string name="pref__correction__remember_caps_lock_state__label" comment="Preference title">Запомняне на състоянието на клавиш Caps Lock</string>
|
||||
<string name="pref__correction__remember_caps_lock_state__summary" comment="Preference summary">Клавишът Caps Lock да остане включен при преместване в друго текстово поле</string>
|
||||
<string name="pref__correction__double_space_period__label" comment="Preference title">Точка при двоен интервал</string>
|
||||
<string name="pref__correction__double_space_period__summary" comment="Preference summary">Двукратното докосване на интервала вмъква точка, последвана от интервал</string>
|
||||
<string name="settings__gestures__title" comment="Title of Gestures fragment">Жестове и писане чрез плъзгане</string>
|
||||
<string name="pref__glide__title" comment="Preference group title">Писане чрез плъзгане</string>
|
||||
<string name="pref__glide__enabled__label" comment="Preference title">[NYI] Въвеждане чрез плъзгане</string>
|
||||
<string name="pref__glide__enabled__summary" comment="Preference summary">Въвеждане на дума чрез плъзгане на пръст през буквите ѝ</string>
|
||||
<string name="pref__glide__show_trail__label" comment="Preference title">[NYI] Показване на следа от плъзгане</string>
|
||||
<string name="pref__glide__show_trail__summary" comment="Preference summary">Ще изчезва след въведена дума</string>
|
||||
<string name="pref__gestures__general_title" comment="Preference group title">Основни жестове</string>
|
||||
<string name="pref__gestures__space_bar_title" comment="Preference group title">Жестове с клавиша за интервал</string>
|
||||
<string name="pref__gestures__other_title" comment="Preference group title">Други жестове / праг на жеста</string>
|
||||
<string name="pref__gestures__swipe_action__no_action" comment="Preference value for swipe action">Без действие</string>
|
||||
<string name="pref__gestures__swipe_action__delete_characters_precisely" comment="Preference value for swipe action">Прецизно изтриване на символи</string>
|
||||
<string name="pref__gestures__swipe_action__delete_word" comment="Preference value for swipe action">Изтриване на текущата дума</string>
|
||||
<string name="pref__gestures__swipe_action__delete_words_precisely" comment="Preference value for swipe action">Точно изтриване на думи</string>
|
||||
<string name="pref__gestures__swipe_action__hide_keyboard" comment="Preference value for swipe action">Скриване на клавиатура</string>
|
||||
<string name="pref__gestures__swipe_action__insert_space" comment="Preference value for swipe action">Вмъкване на интервал</string>
|
||||
<string name="pref__gestures__swipe_action__move_cursor_up" comment="Preference value for swipe action">Преместване на курсора нагоре</string>
|
||||
<string name="pref__gestures__swipe_action__move_cursor_down" comment="Preference value for swipe action">Преместване на курсора надолу</string>
|
||||
<string name="pref__gestures__swipe_action__move_cursor_left" comment="Preference value for swipe action">Преместване на курсора наляво</string>
|
||||
<string name="pref__gestures__swipe_action__move_cursor_right" comment="Preference value for swipe action">Преместване на курсора надясно</string>
|
||||
<string name="pref__gestures__swipe_action__move_cursor_start_of_line" comment="Preference value for swipe action">Преместване на курсора в началото на реда</string>
|
||||
<string name="pref__gestures__swipe_action__move_cursor_end_of_line" comment="Preference value for swipe action">Преместване на курсора в края на реда</string>
|
||||
<string name="pref__gestures__swipe_action__shift" comment="Preference value for swipe action">Shift</string>
|
||||
<string name="pref__gestures__swipe_action__show_input_method_picker" comment="Preference value for swipe action">Показване на варианти от методи за въвеждане</string>
|
||||
<string name="pref__gestures__swipe_action__switch_to_prev_keyboard" comment="Preference value for swipe action">Преминаване към предишна клавиатура</string>
|
||||
<string name="pref__gestures__swipe_action__switch_to_prev_subtype" comment="Preference value for swipe action">Преминаване към предишен подтип</string>
|
||||
<string name="pref__gestures__swipe_action__switch_to_next_subtype" comment="Preference value for swipe action">Преминаване към следващ подтип</string>
|
||||
<string name="pref__gestures__swipe_up__label" comment="Preference title">Плъзгане нагоре</string>
|
||||
<string name="pref__gestures__swipe_down__label" comment="Preference title">Плъзгане надолу</string>
|
||||
<string name="pref__gestures__swipe_left__label" comment="Preference title">Плъзгане наляво</string>
|
||||
<string name="pref__gestures__swipe_right__label" comment="Preference title">Плъзгане надясно</string>
|
||||
<string name="pref__gestures__space_bar_swipe_up__label" comment="Preference title">Плъзгане върху клавиш за интервал нагоре</string>
|
||||
<string name="pref__gestures__space_bar_swipe_left__label" comment="Preference title">Плъзгане върху клавиш за интервал наляво</string>
|
||||
<string name="pref__gestures__space_bar_swipe_right__label" comment="Preference title">Плъзгане върху клавиш за интервал надясно</string>
|
||||
<string name="pref__gestures__space_bar_long_press__label" comment="Preference title">Продължително натискане на клавиш за интервал</string>
|
||||
<string name="pref__gestures__delete_key_swipe_left__label" comment="Preference title">Плъзгане върху клавиш за изтриване наляво</string>
|
||||
<string name="pref__gestures__swipe_velocity_threshold__label" comment="Preference title">Праг за скоростта на плъзгане</string>
|
||||
<string name="pref__gestures__swipe_velocity_threshold__very_slow" comment="Preference value for swipe velocity threshold">Много бавно</string>
|
||||
<string name="pref__gestures__swipe_velocity_threshold__slow" comment="Preference value for swipe velocity threshold">Бавно</string>
|
||||
<string name="pref__gestures__swipe_velocity_threshold__normal" comment="Preference value for swipe velocity threshold">Нормално</string>
|
||||
<string name="pref__gestures__swipe_velocity_threshold__fast" comment="Preference value for swipe velocity threshold">Бързо</string>
|
||||
<string name="pref__gestures__swipe_velocity_threshold__very_fast" comment="Preference value for swipe velocity threshold">Много бързо</string>
|
||||
<string name="pref__gestures__swipe_distance_threshold__label" comment="Preference title">Минимално разстояние на плъзгане</string>
|
||||
<string name="pref__gestures__swipe_distance_threshold__very_short" comment="Preference value for swipe distance threshold">Много кратко</string>
|
||||
<string name="pref__gestures__swipe_distance_threshold__short" comment="Preference value for swipe distance threshold">Кратко</string>
|
||||
<string name="pref__gestures__swipe_distance_threshold__normal" comment="Preference value for swipe distance threshold">Нормално</string>
|
||||
<string name="pref__gestures__swipe_distance_threshold__long" comment="Preference value for swipe distance threshold">Дълго</string>
|
||||
<string name="pref__gestures__swipe_distance_threshold__very_long" comment="Preference value for swipe distance threshold">Много дълго</string>
|
||||
<string name="settings__advanced__title" comment="Title of Advanced settings activity">Разширени</string>
|
||||
<string name="pref__advanced__settings_theme__label" comment="Label of Settings theme preference in Advanced">Тема на настройките</string>
|
||||
<string name="pref__advanced__settings_theme__light" comment="Possible value of Settings theme preference in Advanced">Светла</string>
|
||||
<string name="pref__advanced__settings_theme__dark" comment="Possible value of Settings theme preference in Advanced">Тъмна</string>
|
||||
<string name="pref__advanced__show_app_icon__label" comment="Label of Show app icon preference in Advanced">Показване на иконата на приложението в стартовия панел</string>
|
||||
<string name="pref__advanced__force_private_mode__label" comment="Label of Force private mode preference in Advanced">Принуждаване на поверителен режим</string>
|
||||
<string name="pref__advanced__force_private_mode__summary" comment="Summary of Force private mode preference in Advanced">Ще изключи всички функции, които трябва временно да работят с вашите входящи данни</string>
|
||||
<!-- About UI strings -->
|
||||
<string name="about__title" comment="Title of About activity">Относно</string>
|
||||
<string name="about__app_icon_content_description" comment="Content description of app icon in About">Икона на приложението FlorisBoard</string>
|
||||
<string name="about__view_licenses" comment="Label of View licenses button in About">Лицензи с отворен код</string>
|
||||
<string name="about__view_privacy_policy" comment="Label of View privacy policy button in About">Политика за поверителност</string>
|
||||
<string name="about__view_source_code" comment="Label of View source code button in About">Изходен код</string>
|
||||
<string name="about__license__title" comment="Title of Open-source licenses dialog">Лицензи с отворен код</string>
|
||||
<!-- Assets strings -->
|
||||
<plurals name="assets__file__authors">
|
||||
<item quantity="one">Автор</item>
|
||||
<item quantity="other">Автори</item>
|
||||
</plurals>
|
||||
<string name="assets__file__name">Име</string>
|
||||
<string name="assets__file__source">Източник</string>
|
||||
<string name="assets__action__add">Добавяне</string>
|
||||
<string name="assets__action__cancel">Отказ</string>
|
||||
<string name="assets__action__cancel_confirm_title">Потвърждаване на отказ</string>
|
||||
<string name="assets__action__cancel_confirm_message">Наистина ли искате да отхвърлите всички незапазени промени? Това действие не може да бъде отменено, след като бъде изпълнено.</string>
|
||||
<string name="assets__action__delete">Изтриване</string>
|
||||
<string name="assets__action__delete_confirm_title">Потвърждаване на изтриване</string>
|
||||
<string name="assets__action__delete_confirm_message">Наистина ли искате да изтриете „%s“? Това действие не може да бъде отменено, след като бъде изпълнено.</string>
|
||||
<string name="assets__action__edit">Редактиране</string>
|
||||
<string name="assets__action__export">Изнасяне</string>
|
||||
<string name="assets__action__import">Внасяне</string>
|
||||
<string name="assets__action__no">Не</string>
|
||||
<string name="assets__action__save">Запазване</string>
|
||||
<string name="assets__action__yes">Да</string>
|
||||
<string name="assets__error__invalid">Невалидно</string>
|
||||
<!-- Setup UI strings -->
|
||||
<string name="setup__title" comment="Title of Setup">Настройка</string>
|
||||
<string name="setup__prev_button" comment="Label of Previous button in Setup (try to find a short translation due to limited space in UI)">Пред.</string>
|
||||
<string name="setup__cancel_button" comment="Label of Cancel button in Setup">Отказ</string>
|
||||
<string name="setup__next_button" comment="Label of Next button in Setup (try to find a short translation due to limited space in UI)">Напред</string>
|
||||
<string name="setup__finish_button" comment="Label of Finish button in Setup">Край</string>
|
||||
<string name="setup__ok_button" comment="Label of OK button in Setup">Добре</string>
|
||||
<string name="setup__welcome__title" comment="Title of Welcome fragment in Setup">Добре дошли!</string>
|
||||
<string name="setup__welcome__intro" comment="Paragraph in Welcome fragment in Setup">Благодарим ви, че изпробвате приложението FlorisBoard! Преди да можете да го използвате, трябва да направите обичайните неща, за да го активирате в системните настройки, да настроите предпочитания език/подредба и т.н… Но без притеснения - съветникът за настройка ще ви преведе!</string>
|
||||
<string name="setup__welcome__privacy" comment="Paragraph in Welcome fragment in Setup">FlorisBoard зачита изцяло вашата поверителност и не събира никакви потребителски данни. За повече информация вижте:</string>
|
||||
<string name="setup__welcome__trust" comment="Paragraph in Welcome fragment in Setup">Изходният код на FlorisBoard е публично достъпен за всеки, така че можете лесно да прегледате това, което FlorisBoard прави зад кулисите. Вижте препратката към хранилището по-долу.</string>
|
||||
<string name="setup__welcome__contribute" comment="Paragraph in Welcome fragment in Setup">Последно преди да започнете настройката - ако се натъкнете на дефекти/сривове/проблеми с FlorisBoard или имате заявка за функция - преминете към хранилището на GitHub, препратката е по-долу, и подайте сигнал за проблем. Така ще допринесете за подобряване на FlorisBoard за всички потребители!</string>
|
||||
<string name="setup__welcome__outro" comment="Paragraph in Welcome fragment in Setup">За да стартирате настройката, щракнете върху <i>НАПРЕД</i>.</string>
|
||||
<string name="setup__enable_ime__title" comment="Title of Enable IME fragment in Setup">Включете FlorisBoard</string>
|
||||
<string name="setup__enable_ime__text_before_enabled" comment="Description of state in Enable IME fragment before user enabled">Android изисква всяка персонализирана клавиатура да бъде активирана ръчно, преди да можете да я използвате. Щракнете върху бутона по-долу, за да отидете при настройките за <i>Език и въвеждане</i>, след това не забравяйте да поставите отметка на \'<i>FlorisBoard</i> \'.</string>
|
||||
<string name="setup__enable_ime__text_after_enabled" comment="Description of state in Enable IME fragment after user enabled">FlorisBoard е успешно активиран. За да продължите, щракнете върху <i>НАПРЕД</i>!</string>
|
||||
<string name="setup__enable_ime__text_button_language_and_input" comment="Label of language and input button in Enable IME fragment">Отваряне на настройките за Език & Въвеждане</string>
|
||||
<string name="setup__make_default__title" comment="Title of Make IME default fragment in Setup">Направете FlorisBoard по подразбиране</string>
|
||||
<string name="setup__make_default__text_before_switch" comment="Description of state in Make IME default fragment before user switched">FlorisBoard вече е активиран в системата. За да го използвате активно, превключете на FlorisBoard, като го изберете в диалоговия прозорец с методи за въвеждане!</string>
|
||||
<string name="setup__make_default__text_after_switch" comment="Description of state in Make IME default fragment after user switched">Успешно сменихте клавиатурата си по подразбиране на FlorisBoard!</string>
|
||||
<string name="setup__make_default__text_switch_button" comment="Label of switch button in Make IME default fragment">Смяна на клавиатура</string>
|
||||
<string name="setup__finish__title" comment="Title of Setup finished fragment in Setup">Настройката завърши!</string>
|
||||
<!-- Crash Dialog strings -->
|
||||
<string name="crash_dialog__title" comment="Title of crash dialog">Отчет за грешка на FlorisBoard</string>
|
||||
<string name="crash_dialog__description" comment="Description of crash dialog">Извинете за неудобството, но FlorisBoard се срина поради неочаквана грешка.\n\nАко искате да съобщите за нея, щракнете върху „Копиране в клипборда“, след това върху бутона „Отваряне на доклад за грешка“. Попълнете отчета за грешки и го поставете. Така ще допринесете за подобряване на FlorisBoard за всички потребители! Благодарим ви!</string>
|
||||
<string name="crash_dialog__copy_to_clipboard" comment="Label of Copy to clipboard button in crash dialog">Копиране в клипборда</string>
|
||||
<string name="crash_dialog__open_bug_report_form" comment="Label of Open bug report button in crash dialog">Отваряне на формуляр за доклад за грешка (github.com)</string>
|
||||
<string name="crash_dialog__close" comment="Label of Close button in crash dialog">Затваряне</string>
|
||||
<string name="crash_notification_channel__title" comment="Title of crash notification channel">Доклади за грешки на FlorisBoard</string>
|
||||
<string name="crash_once_notification__title" comment="Title of the notification for a single crash">FlorisBoard спря да работи…</string>
|
||||
<string name="crash_once_notification__body" comment="Body of the notification for a single crash">Докоснете, за да видите подробности за грешката</string>
|
||||
<string name="crash_multiple_notification__title" comment="Title of the notification for consecutive crashes">FlorisBoard изглежда спира да работи многократно…</string>
|
||||
<string name="crash_multiple_notification__body" comment="Body of the notification for consecutive crashes">Връщане към предишна клавиатура, за да се спре безкрайния цикъл от сривове. Докоснете, за да видите подробности за грешката</string>
|
||||
</resources>
|
||||
141
app/src/main/res/values-ca/strings.xml
Normal file
141
app/src/main/res/values-ca/strings.xml
Normal file
@@ -0,0 +1,141 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<resources>
|
||||
<string name="app_name">FlorisBoard</string>
|
||||
<string name="key__phone_pause" comment="Label for the Pause key in the telephone keyboard layout">Pausa</string>
|
||||
<string name="key__phone_wait" comment="Label for the Wait key in the telephone keyboard layout">Esperar</string>
|
||||
<string name="key_popup__threedots_alt" comment="Content description for the three-dots icon in a key popup">Icona de tres punts. Si és visible, indica que es poden utilitzar més lletres si es prem més temps.</string>
|
||||
<!-- One-handed strings -->
|
||||
<string name="one_handed__close_btn_content_description" comment="Content description for the one-handed close button">Tanca el mode d\'una mà.</string>
|
||||
<string name="one_handed__move_start_btn_content_description" comment="Content description for the one-handed move to left button">Mou el teclat a l\'esquerra.</string>
|
||||
<string name="one_handed__move_end_btn_content_description" comment="Content description for the one-handed move to right button">Mou el teclat a la dreta.</string>
|
||||
<!-- Private mode info dialog strings -->
|
||||
<string name="private_mode_dialog__title" comment="Title of the private mode dialog">Mode privat</string>
|
||||
<!--
|
||||
<string name="private_mode_dialog__text" comment="Text of the private mode dialog">The icon you just clicked at indicates that FlorisBoard works in the private mode. This means that all features which require to process and temporarily save your input stop working. This applies at minimum to the following features (if they\'ve been turned on previously):\n\n - Next word algorithm adjustments\n\n - Clipboard paste suggestions\n\n - Clipboard history\n\nFlorisBoard enters this mode either if an app requests it or if it was specifically enabled in the advanced settings.</string>
|
||||
-->
|
||||
<!-- Media strings -->
|
||||
<string name="media__tab__emojis" comment="Tab description for emojis in the media UI">Emojis</string>
|
||||
<string name="media__tab__emoticons" comment="Tab description for emoticons in the media UI">Emoticones</string>
|
||||
<string name="media__tab__kaomoji" comment="Tab description for kaomoji in the media UI">Kaomoji</string>
|
||||
<!-- Emoji strings -->
|
||||
<string name="emoji__category__smileys_emotion" comment="Emoji category name">Emocions & Emoticones</string>
|
||||
<string name="emoji__category__people_body" comment="Emoji category name">Persones & Cos</string>
|
||||
<string name="emoji__category__animals_nature" comment="Emoji category name">Animals & Natura</string>
|
||||
<string name="emoji__category__food_drink" comment="Emoji category name">Mejar & Beure</string>
|
||||
<string name="emoji__category__travel_places" comment="Emoji category name">Viatges & Llocs</string>
|
||||
<string name="emoji__category__activities" comment="Emoji category name">Activitats</string>
|
||||
<string name="emoji__category__objects" comment="Emoji category name">Objectes</string>
|
||||
<string name="emoji__category__symbols" comment="Emoji category name">Símbols</string>
|
||||
<string name="emoji__category__flags" comment="Emoji category name">Banderes</string>
|
||||
<!-- Smartbar strings -->
|
||||
<string name="smartbar__quick_action_toggle__alt" comment="Content description for the quick action toggle button in Smartbar">Commutació d\'acció ràpida. Si es prem, commuta entre els suggeriments de paraula i els botons d\'acció ràpida.</string>
|
||||
<string name="smartbar__quick_action__exit_editing" comment="Content-description for the exit editing layout button in Smartbar">Surt del quadre d\'edició de text.</string>
|
||||
<string name="smartbar__quick_action__one_handed_mode" comment="Content-description for the one-handed quick action in Smartbar">Commuta l\'estat del mode d\'una sola mà.</string>
|
||||
<string name="smartbar__quick_action__open_settings" comment="Content-description for the settings quick action in Smartbar">Obre la configuració.</string>
|
||||
<string name="smartbar__quick_action__switch_to_editing_context" comment="Content-description for the editing quick action in Smartbar">Canvia al plafó d\'edició de text.</string>
|
||||
<string name="smartbar__quick_action__switch_to_media_context" comment="Content-description for the media quick action in Smartbar">Canvia a la vista d\'entrada de suports.</string>
|
||||
<string name="smartbar__quick_action__undo" comment="Content-description for the undo quick action in Smartbar">Botó de desfer per invertir l\'última acció</string>
|
||||
<string name="smartbar__quick_action__redo" comment="Content-description for the redo quick action in Smartbar">Botó de refer per revertir l\'últim desfer</string>
|
||||
<string name="smartbar__quick_action__private_mode" comment="Content-description for the private mode button in Smartbar">Si visible, indica que el mode privat està actiu. Quan es fa clic, es mostra informació sobre el mode privat.</string>
|
||||
<!-- Settings UI strings -->
|
||||
<string name="settings__title" comment="Title of Settings">Preferències</string>
|
||||
<string name="settings__menu" comment="Hint of top-right three-dot icon in Settings">Més opcions</string>
|
||||
<string name="settings__menu_help" comment="Three-dot menu entry for Help and Feedback web link">Ajuda & suggeriments</string>
|
||||
<string name="settings__help" comment="General label for help buttons in Settings">Ajuda</string>
|
||||
<string name="settings__navigation__home" comment="Long-press hint of bottom nav item Home in Settings">Inici</string>
|
||||
<string name="settings__navigation__keyboard" comment="Long-press hint of bottom nav item Keyboard in Settings">Teclat</string>
|
||||
<string name="settings__navigation__typing" comment="Long-press hint of bottom nav item Typing in Settings">Escritura</string>
|
||||
<string name="settings__navigation__theme" comment="Long-press hint of bottom nav item Theme in Settings">Tema</string>
|
||||
<string name="settings__navigation__gestures" comment="Long-press hint of bottom nav item Gestures in Settings">Gestos</string>
|
||||
<string name="settings__default" comment="General string which is used when a preference has the default value set">Predeterminat</string>
|
||||
<string name="settings__system_default" comment="General string which is used when a preference has the system default value set">Per defecte del sistema</string>
|
||||
<string name="settings__home__title" comment="Title of the Home fragment">Benvingut a %s</string>
|
||||
<string name="settings__home__ime_not_enabled" comment="Error message shown in Home fragment when FlorisBoard is not enabled in the system">FlorisBoard no està habilitat en el sistema i per tant no estarà disponible com a mètode d\'entrada en el selector d\'entrada. Feu clic aquí per resoldre aquest problema.</string>
|
||||
<string name="settings__home__ime_not_selected" comment="Warning message shown in Home fragment when FlorisBoard is not selected as the default keyboard">FlorisBoard no està seleccionat com a mètode d\'entrada per defecte. Feu clic aquí per resoldre aquest problema.</string>
|
||||
<string name="settings__home__contribute" comment="Contributing message shown in Home fragment">Gràcies per provar FlorisBoard! Aquest projecte encara està en alfa i, per tant, manquen les opcions. Si trobeu algun error o voleu fer un suggeriment, comproveu el dipòsit a GitHub i obriu un tiquet. Això ajuda a millorar FlorisBoard. Gràcies!</string>
|
||||
<string name="settings__localization__title" comment="Title of languages and layout box in the Typing fragment">Idiomes & Disposicions de teclat</string>
|
||||
<string name="settings__localization__subtype_no_subtypes_configured_warning" comment="Warning message that no subtype has been defined in the Typing fragment">Sembla que no heu configurat cap subtipus. Com a alternativa s\'utilitzarà el subtipus anglès/QWERTY!</string>
|
||||
<string name="settings__localization__subtype_add" comment="Subtype dialog add button">Afegir</string>
|
||||
<string name="settings__localization__subtype_add_title" comment="Title of subtype dialog when adding a new subtype">Afegeix un subtipus</string>
|
||||
<string name="settings__localization__subtype_apply" comment="Subtype dialog apply button">Aplicar</string>
|
||||
<string name="settings__localization__subtype_cancel" comment="Subtype dialog cancel button">Cancel·lar</string>
|
||||
<string name="settings__localization__subtype_delete" comment="Subtype dialog delete button">Eliminar</string>
|
||||
<string name="settings__localization__subtype_edit_title" comment="Title of subtype dialog when editing an existing subtype">Editar el subtipus</string>
|
||||
<string name="settings__localization__subtype_locale" comment="Label for locale dropdown in subtype dialog">Local</string>
|
||||
<string name="settings__localization__subtype_layout" comment="Label for keyboard layout dropdown in subtype dialog">Disposició de teclat</string>
|
||||
<string name="settings__localization__subtype_error_already_exists" comment="Error message shown in subtype dialog when a subtype to add already exists">Aquest subtipus ja existeix!</string>
|
||||
<string name="settings__theme__title" comment="Title of the Theme fragment">Tema del teclat</string>
|
||||
<string name="settings__theme__undefined" comment="General string for an undefined preference value">Indefinit</string>
|
||||
<string name="pref__theme__mode__label" comment="Label of the theme mode preference">Mode del tema</string>
|
||||
<string name="pref__theme__mode__always_day" comment="Preference value for theme mode">Sempre de dia</string>
|
||||
<string name="pref__theme__mode__always_night" comment="Preference value for theme mode">Sempre de nit</string>
|
||||
<string name="pref__theme__mode__follow_system" comment="Preference value for theme mode">Segueix el sistema</string>
|
||||
<string name="pref__theme__mode__follow_time" comment="Preference value for theme mode">Segueix l\'hora</string>
|
||||
<string name="pref__theme__sunrise_time__label" comment="Label of the sunrise time preference">Hora de trenc d\'alba</string>
|
||||
<string name="pref__theme__sunset_time__label" comment="Label of the sunset time preference">Hora de posta de sol</string>
|
||||
<string name="pref__theme__day" comment="Label of the day group (day means light theme)">Tema diürn</string>
|
||||
<string name="pref__theme__night" comment="Label of the night group (night means dark theme)">Tema nocturn</string>
|
||||
<string name="pref__theme__any_theme__label" comment="Label of the theme selector preference">Selecció del tema</string>
|
||||
<string name="pref__theme__any_theme_adapt_to_app__label" comment="Label of the theme adapt to app preference">Adapta els colors a l\'aplicació</string>
|
||||
<string name="pref__theme__any_theme_adapt_to_app__summary" comment="Summary of the theme adapt to app preference">Els colors del tema s\'adapten als de l\'aplicació actual, si l\'aplicació de destinació ho admet.</string>
|
||||
<string name="pref__theme__source_assets" comment="Label for the theme source field">Actius d\'aplicacions FlorisBoard</string>
|
||||
<string name="pref__theme__source_internal" comment="Label for the theme source field">Emmagatzematge intern</string>
|
||||
<string name="pref__theme__source_external" comment="Label for the theme source field">Proveïdor extern</string>
|
||||
<string name="settings__theme_manager__title_day" comment="Title of the theme manager activity for day theme">Gestor de temes (diürn)</string>
|
||||
<string name="settings__theme_manager__title_night" comment="Title of the theme manager activity for night theme">Gestor de temes (nocturn)</string>
|
||||
<string name="settings__theme_manager__create_empty" comment="Label of the Create empty FAB action">Crear un nou tema</string>
|
||||
<string name="settings__theme_manager__create_from_selected" comment="Label of the Create from selected FAB action">Crear a partir del tema seleccionat</string>
|
||||
<string name="settings__theme_editor__error_attr_name_empty" comment="Error text for an empty attribute name">Introduïu un nom d\'atribut.</string>
|
||||
<string name="settings__theme_editor__error_attr_name_already_exists" comment="Error text for a duplicate attribute name">Aquest nom d\'atribut ja existeix dins d\'aquest grup. Si us plau, especifiqueu-ne un altre.</string>
|
||||
<string name="settings__theme__group_window" comment="Theme group label">Finestra & Sistema</string>
|
||||
<string name="settings__theme__group_keyboard" comment="Theme group label">Teclat</string>
|
||||
<string name="settings__theme__group_key" comment="Theme group label">Clau</string>
|
||||
<string name="settings__theme__group_key_specific" comment="Theme group label (%s is specific modifier)">Clau (%s)</string>
|
||||
<string name="settings__theme__group_media" comment="Theme group label">Context multimèdia</string>
|
||||
<string name="settings__theme__group_oneHanded" comment="Theme group label">Una sola mà</string>
|
||||
<string name="settings__theme__group_popup" comment="Theme group label">Finestra emergent</string>
|
||||
<string name="settings__theme__group_privateMode" comment="Theme group label">Mode privat</string>
|
||||
<string name="settings__theme__group_smartbar" comment="Theme group label">Barra intel·ligent</string>
|
||||
<string name="settings__theme__group_smartbarButton" comment="Theme group label">Botó de barra intel·ligent</string>
|
||||
<string name="settings__theme__group_custom" comment="Theme group label (%s is custom group name)">Grup personalitzat (%s)</string>
|
||||
<string name="settings__theme__attr_background" comment="Theme attribute label">Color de fons</string>
|
||||
<string name="settings__theme__attr_backgroundActive" comment="Theme attribute label">Color de fons (actiu)</string>
|
||||
<string name="settings__theme__attr_backgroundPressed" comment="Theme attribute label">Color de fons (pressat)</string>
|
||||
<string name="settings__theme__attr_foreground" comment="Theme attribute label">Color de primer pla</string>
|
||||
<string name="settings__theme__attr_foregroundAlt" comment="Theme attribute label">Color de primer pla (alternativa)</string>
|
||||
<string name="settings__theme__attr_foregroundPressed" comment="Theme attribute label">Color de primer pla (pressat)</string>
|
||||
<string name="settings__theme__attr_showBorder" comment="Theme attribute label">Mostra les vores</string>
|
||||
<string name="settings__theme__attr_colorPrimary" comment="Theme attribute label">Color principal</string>
|
||||
<string name="settings__theme__attr_colorPrimaryDark" comment="Theme attribute label">Color principal (fosc)</string>
|
||||
<string name="settings__theme__attr_colorAccent" comment="Theme attribute label">Color d\'accent</string>
|
||||
<string name="settings__theme__attr_navBarColor" comment="Theme attribute label">Color de la barra de navegació</string>
|
||||
<string name="settings__theme__attr_navBarLight" comment="Theme attribute label">Color fosc de la barra de navegació</string>
|
||||
<string name="settings__theme__attr_semiTransparentColor" comment="Theme attribute label">Color semitransparent</string>
|
||||
<string name="settings__theme__attr_textColor" comment="Theme attribute label">Color del text</string>
|
||||
<string name="settings__theme__attr_custom" comment="Theme attribute label (%s is custom attribute name)">Atribut personalitzat (%s)</string>
|
||||
<string name="settings__keyboard__title" comment="Title of Keyboard preferences fragment">Preferències del teclat</string>
|
||||
<string name="pref__keyboard__group_keys__label" comment="Preference group title">Claus</string>
|
||||
<string name="pref__keyboard__number_row__label" comment="Preference title">Número de fila</string>
|
||||
<string name="pref__keyboard__number_row__summary" comment="Preference summary">Mostra el nombre de fila a la part superior de la disposició de caràcters</string>
|
||||
<string name="pref__keyboard__hinted_number_row_mode__label" comment="Preference title">Número d\'indicació de fila</string>
|
||||
<string name="pref__keyboard__hinted_symbols_mode__label" comment="Preference title">Symbols marcats</string>
|
||||
<string name="pref__keyboard__hint_mode__disabled" comment="Preference value">Desactivat</string>
|
||||
<string name="pref__keyboard__hint_mode__enabled_hint_priority" comment="Preference value">Activat (es prioritza el consell)</string>
|
||||
<string name="pref__keyboard__hint_mode__enabled_accent_priority" comment="Preference value">Activat (es prioritza l\'accent)</string>
|
||||
<string name="pref__keyboard__hint_mode__enabled_smart_priority" comment="Preference value">Activat (priorització intel·ligent)</string>
|
||||
<string name="pref__keyboard__utility_key_enabled__label" comment="Preference title">Mostra la clau d\'utilitat</string>
|
||||
<string name="pref__keyboard__utility_key_enabled__summary" comment="Preference summary">Mostra una clau d\'utilitat configurable al costat de la barra d\'espai</string>
|
||||
<string name="pref__keyboard__utility_key_action__switch_to_emojis" comment="Preference value">Canvia als emojis</string>
|
||||
<string name="pref__keyboard__utility_key_action__switch_language" comment="Preference value">Canviar l\'idioma</string>
|
||||
<string name="pref__keyboard__utility_key_action__switch_keyboard_app" comment="Preference value">Canviar l\'aplicació de teclat</string>
|
||||
<string name="pref__keyboard__utility_key_action__dynamic_switch_language_emojis" comment="Preference value">Dinàmic: Canvia a emojis / Canvia d\'idioma</string>
|
||||
<string name="pref__keyboard__font_size_multiplier_portrait__label" comment="Preference title">Multiplicador de la mida del tipus de lletra (vertical)</string>
|
||||
<string name="pref__keyboard__font_size_multiplier_landscape__label" comment="Preference title">Multiplicador de la mida de la lletra (horitzontal)</string>
|
||||
<string name="pref__keyboard__group_layout__label" comment="Preference group title">Disposició</string>
|
||||
<string name="pref__keyboard__one_handed_mode__label" comment="Preference value">Mode d\'una sola mà</string>
|
||||
<string name="pref__keyboard__one_handed_mode__off" comment="Preference value">Desactivat</string>
|
||||
<!-- About UI strings -->
|
||||
<!-- Assets strings -->
|
||||
<!-- Setup UI strings -->
|
||||
<!-- Crash Dialog strings -->
|
||||
</resources>
|
||||
@@ -40,6 +40,7 @@
|
||||
<string name="settings__title" comment="Title of Settings">ڕێکخستنەکان</string>
|
||||
<string name="settings__menu" comment="Hint of top-right three-dot icon in Settings">هەڵبژاردنی زیاتر</string>
|
||||
<string name="settings__menu_help" comment="Three-dot menu entry for Help and Feedback web link">یارمەتی و فێرکاری</string>
|
||||
<string name="settings__help" comment="General label for help buttons in Settings">یارمەتی</string>
|
||||
<string name="settings__navigation__home" comment="Long-press hint of bottom nav item Home in Settings">سەرەتا</string>
|
||||
<string name="settings__navigation__keyboard" comment="Long-press hint of bottom nav item Keyboard in Settings">تەختەکلیل</string>
|
||||
<string name="settings__navigation__typing" comment="Long-press hint of bottom nav item Typing in Settings">نووسین</string>
|
||||
@@ -104,41 +105,38 @@
|
||||
<string name="settings__theme_editor__value_type_other_text" comment="Theme value type sub-field">نوسین</string>
|
||||
<string name="settings__theme_editor__value_preview_content_description" comment="Theme value preview content description">ڕێژەی پیشاندانی ڕووکار</string>
|
||||
<string name="settings__theme_editor__error_theme_label_empty" comment="Error text for an empty theme label">تکایە ناوی ڕووکار بنوسە</string>
|
||||
<string name="settings__theme_editor__error_group_name" comment="Error text for an invalid group name">تکایە ناوی گروپ بنووسە کە تەنها پیتەکانی a-z و/یان A-Z ی تێدا بێت.</string>
|
||||
<string name="settings__theme_editor__error_group_name" comment="Error text for an invalid group name">تکایە ناوی گروپ بنووسە کە تەنها پیتی (a-z و/یان A-Z) لەخۆ بگرێت، کۆلۆن (:) بۆ ژێر-گروپکردن یان ژمارە زیادەکان (0-9), (~) و ژێرهێڵەکان (_) بۆ ناولێنانی کلیلەکە.</string>
|
||||
<string name="settings__theme_editor__error_group_name_empty" comment="Error text for an empty group name">تکایە ناوی گرووپ بنوسە</string>
|
||||
<string name="settings__theme_editor__error_group_name_already_exists" comment="Error text for a duplicate group name">ئەم ناوی گرووپە بوونی هەیە، تکایە دانەیەکی تر بنوسە.</string>
|
||||
<string name="settings__theme_editor__error_attr_name" comment="Error text for an invalid attribute name">تکایە ناوی تایبەتمەندی بنووسە کە تەنها پیتەکانی a-z و/یان A-Z ی تێدا بێت.</string>
|
||||
<string name="settings__theme_editor__error_attr_name_empty" comment="Error text for an empty attribute name">تکایە ناوی تایبەتمەندی بنوسە</string>
|
||||
<string name="settings__theme__background" comment="General label for a background preference">ڕەنگی پشتتەوە</string>
|
||||
<string name="settings__theme__background_active" comment="General label for an active background preference">ڕەنگی پشت شاشە لەکاتی چالاکبوندا</string>
|
||||
<string name="settings__theme__background_pressed" comment="General label for a pressed background preference">ڕەنگی پشت شاشە لەکاتی دەستلێدان</string>
|
||||
<string name="settings__theme__foreground" comment="General label for a foreground preference">ڕەنگی پێشەوە</string>
|
||||
<string name="settings__theme__foreground_alt" comment="General label for an alternate foreground preference">ڕەنگی پێشەوە (جێگرەوە)</string>
|
||||
<string name="settings__theme__foreground_capslock" comment="General label for a capslock foreground preference">ڕەنگی پێشەوە (قوفڵی caps)</string>
|
||||
<string name="settings__theme__dialog_title" comment="Title of the color selection dialog for a single theme preference">ڕەنگێک هەڵبژێرە</string>
|
||||
<string name="settings__theme_editor__error_attr_name_already_exists" comment="Error text for a duplicate attribute name">ئەم ناوە بوونی هەیە لە گرووپدا، تکایە دانەیەکی تر بنوسە.</string>
|
||||
<string name="settings__theme__group_window" comment="Theme group label">ڕووکەش</string>
|
||||
<string name="settings__theme__group_keyboard" comment="Theme group label">تەختەکلیل</string>
|
||||
<string name="settings__theme__group_key" comment="Theme group label">دوگمە</string>
|
||||
<string name="settings__theme__group_key_enter" comment="Theme group label">دوگمەی ئینتەر</string>
|
||||
<string name="settings__theme__group_key_popup" comment="Theme group label">دوگمەی بچوککراوە</string>
|
||||
<string name="settings__theme__group_key_shift" comment="Theme group label">دوگمەی شێفت</string>
|
||||
<string name="settings__theme__group_key_specific" comment="Theme group label (%s is specific modifier)">دوگمە (%s)</string>
|
||||
<string name="settings__theme__group_media" comment="Theme group label">لیستی میدیا</string>
|
||||
<string name="settings__theme__group_one_handed" comment="Theme group label">بەکارهێنان بە یەک دەست</string>
|
||||
<string name="settings__theme__group_one_handed_button" comment="Theme group label">دوگمەی بەکارهێنانی یەک دەست</string>
|
||||
<string name="settings__theme__group_private_mode" comment="Theme group label">دۆخی تایبەت</string>
|
||||
<string name="settings__theme__group_oneHanded" comment="Theme group label">بەکارهێنان بە یەک دەست</string>
|
||||
<string name="settings__theme__group_popup" comment="Theme group label">بچووکراوەی پیت</string>
|
||||
<string name="settings__theme__group_privateMode" comment="Theme group label">دۆخی تایبەت</string>
|
||||
<string name="settings__theme__group_smartbar" comment="Theme group label">ڕەنگی بەشی سەرەوە</string>
|
||||
<string name="settings__theme__group_smartbar_button" comment="Theme group label">ڕەنگی دوگمەکانی بەشی سەرەوە</string>
|
||||
<string name="pref__theme__colorPrimary_title" comment="Title of Color primary theme preference">ڕەنگی بنەڕەتی</string>
|
||||
<string name="pref__theme__colorPrimary_summary" comment="Summary of Color primary theme preference">جێبەجێ کراوە بۆ بەشی میدیای سەرەکی شەپۆل و تیشکخستنەسەر هەڵبژاردنەکان</string>
|
||||
<string name="pref__theme__colorPrimaryDark_title" comment="Title of Color primary dark theme preference">ڕەنگی بنەڕەتی (تاریک)</string>
|
||||
<string name="pref__theme__colorPrimaryDark_summary" comment="Summary of Color primary dark theme preference">لە ئێستادا بەردەست نییە، دنراوە بۆ جێبەجێکردنی داهاتوو</string>
|
||||
<string name="pref__theme__colorAccent_title" comment="Title of Color accent theme preference">ڕەنگی دووەم</string>
|
||||
<string name="pref__theme__colorAccent_summary" comment="Summary of Color accent theme preference">جێبەجێ کراوە بۆ بەشی خەندەکان</string>
|
||||
<string name="pref__theme__navBarColor_title" comment="Title of Nav bar color theme preference">ڕەنگی بەشی خوارەوە</string>
|
||||
<string name="pref__theme__navBarColor_summary" comment="Summary of Nav bar color theme preference">پشت شاشەی بەشی خوارەوە</string>
|
||||
<string name="pref__theme__navBarIsLight_title" comment="Title of Nav bar is light theme preference">پشت شاشەی تاریکی بەشی خوارەوە</string>
|
||||
<string name="pref__theme__navBarIsLight_summary" comment="Summary of Nav bar is light theme preference">بۆ تاریک کردن یان بۆ کوژاندنەوەی بۆ ڕووناککردنی پێشگرەکە</string>
|
||||
<string name="pref__theme__showKeyBorder_title" comment="Title of Show Key Border preference">لێواری دوگمەکان</string>
|
||||
<string name="pref__theme__showKeyBorder_summary" comment="Summary of Show Key Border preference">چالاککردن واتە پیشاندانی لێوار یان نا چالاک نۆ شاردنەوە</string>
|
||||
<string name="settings__theme__group_smartbarButton" comment="Theme group label">ڕەنگی دوگمەکانی بەشی سەرەوە</string>
|
||||
<string name="settings__theme__group_custom" comment="Theme group label (%s is custom group name)">گرووپی تایبەت (%s)</string>
|
||||
<string name="settings__theme__attr_background" comment="Theme attribute label">ڕەنگی پشتتەوە</string>
|
||||
<string name="settings__theme__attr_backgroundActive" comment="Theme attribute label">ڕەنگی پشتەوە (چالاک)</string>
|
||||
<string name="settings__theme__attr_backgroundPressed" comment="Theme attribute label">ڕەنگی پشت شاشە (دەسلێدراو)</string>
|
||||
<string name="settings__theme__attr_foreground" comment="Theme attribute label">ڕەنگی لاوەکی</string>
|
||||
<string name="settings__theme__attr_foregroundAlt" comment="Theme attribute label">ڕەنگی لاوەکی (جێگرەوە)</string>
|
||||
<string name="settings__theme__attr_foregroundPressed" comment="Theme attribute label">ڕەنگی لاوەکی (دەسلێدراو)</string>
|
||||
<string name="settings__theme__attr_showBorder" comment="Theme attribute label">پیشاندانی لێوار</string>
|
||||
<string name="settings__theme__attr_colorPrimary" comment="Theme attribute label">ڕەنگی بنەڕەتی</string>
|
||||
<string name="settings__theme__attr_colorPrimaryDark" comment="Theme attribute label">ڕەنگی بنەڕەتی (تاریک)</string>
|
||||
<string name="settings__theme__attr_colorAccent" comment="Theme attribute label">ڕەنگی لاوەکی</string>
|
||||
<string name="settings__theme__attr_navBarColor" comment="Theme attribute label">ڕەنگی بەشی خوارەوە</string>
|
||||
<string name="settings__theme__attr_navBarLight" comment="Theme attribute label">پشت شاشەی تاریکی بەشی خوارەوە</string>
|
||||
<string name="settings__theme__attr_semiTransparentColor" comment="Theme attribute label">ڕەنکی نیمچە کاڵ</string>
|
||||
<string name="settings__theme__attr_textColor" comment="Theme attribute label">رەنگی نوسین</string>
|
||||
<string name="settings__theme__attr_custom" comment="Theme attribute label (%s is custom attribute name)">بەهای تایبەت (%s)</string>
|
||||
<string name="settings__keyboard__title" comment="Title of Keyboard preferences fragment">ڕێکخستنی تەختەکلیل</string>
|
||||
<string name="pref__keyboard__group_keys__label" comment="Preference group title">دوگمەکان</string>
|
||||
<string name="pref__keyboard__number_row__label" comment="Preference title">لیستی ژمارەکان</string>
|
||||
@@ -149,6 +147,13 @@
|
||||
<string name="pref__keyboard__hint_mode__enabled_hint_priority" comment="Preference value">پیشاندان (هێماکان)</string>
|
||||
<string name="pref__keyboard__hint_mode__enabled_accent_priority" comment="Preference value">پیشاندان (پیتەکان)</string>
|
||||
<string name="pref__keyboard__hint_mode__enabled_smart_priority" comment="Preference value">پیشاندان (هەڵبژاردنی زیرەک)</string>
|
||||
<string name="pref__keyboard__utility_key_enabled__label" comment="Preference title">پیشاندانی دوگمەی فرمان</string>
|
||||
<string name="pref__keyboard__utility_key_enabled__summary" comment="Preference summary">پیشاندانی دوگمەی ئامرازی دەستکاریکردن لە تەنیشت دوگمەی بۆشایی</string>
|
||||
<string name="pref__keyboard__utility_key_action__label" comment="Preference title">فرمانی دوگمەی ئامراز</string>
|
||||
<string name="pref__keyboard__utility_key_action__switch_to_emojis" comment="Preference value">کردنەوەی خەندەکان</string>
|
||||
<string name="pref__keyboard__utility_key_action__switch_language" comment="Preference value">گۆڕینی زمان</string>
|
||||
<string name="pref__keyboard__utility_key_action__switch_keyboard_app" comment="Preference value">گؤرینی تەختەکلیل</string>
|
||||
<string name="pref__keyboard__utility_key_action__dynamic_switch_language_emojis" comment="Preference value">داینامیک: کردنەوەی خەندەکان/گۆڕینی زمان</string>
|
||||
<string name="pref__keyboard__font_size_multiplier_portrait__label" comment="Preference title">قەبارەی نووسین (ستوونی)</string>
|
||||
<string name="pref__keyboard__font_size_multiplier_landscape__label" comment="Preference title">قەبارەی نووسین (ئاسۆیی) </string>
|
||||
<string name="pref__keyboard__group_layout__label" comment="Preference group title">شێوازەکان</string>
|
||||
@@ -166,7 +171,6 @@
|
||||
<string name="pref__keyboard__height_factor__extra_tall" comment="Preference value">گەورەترین</string>
|
||||
<string name="pref__keyboard__height_factor__custom" comment="Preference value">تایبەت</string>
|
||||
<string name="pref__keyboard__height_factor_custom__label" comment="Preference title">ڕێژەی ئاستی قیاسی تەختەکلیل</string>
|
||||
<string name="pref__keyboard__bottom_offset__label" comment="Preference title">قەبارەی بەشی خوارەوە (بۆ شاشە تەنیشت چەماوەکان)</string>
|
||||
<string name="pref__keyboard__group_keypress__label" comment="Preference group title">کاریگەرییەکان</string>
|
||||
<string name="pref__keyboard__sound_enabled__label" comment="Preference title">دەنگ لەکاتی نووسین</string>
|
||||
<string name="pref__keyboard__sound_volume__label" comment="Preference title">ئاستی دەنگ</string>
|
||||
@@ -198,17 +202,23 @@
|
||||
<string name="pref__glide__enabled__summary" comment="Preference summary">نووسین بەسەریەکەوە بەشێوەی دەسخشاندن بەسەر پیتەکاندا</string>
|
||||
<string name="pref__glide__show_trail__label" comment="Preference title">[NYI] پیشاندانی هێڵی نووسین</string>
|
||||
<string name="pref__glide__show_trail__summary" comment="Preference summary">لەدوای هەر ووشەیەک دەردەکەوێ</string>
|
||||
<string name="pref__gestures__title" comment="Preference group title">ئاماژەکان</string>
|
||||
<string name="pref__gestures__general_title" comment="Preference group title">ئاماژژە گشتییەکان</string>
|
||||
<string name="pref__gestures__space_bar_title" comment="Preference group title">ئاماژەی دوگمەی بۆشایی</string>
|
||||
<string name="pref__gestures__other_title" comment="Preference group title">ئاماژەکانی/فرمانەکانی تر</string>
|
||||
<string name="pref__gestures__swipe_action__no_action" comment="Preference value for swipe action">هیچ فرمانێک</string>
|
||||
<string name="pref__gestures__swipe_action__delete_characters_precisely" comment="Preference value for swipe action">سڕینەوەی پیتەکان یەک بە یەک</string>
|
||||
<string name="pref__gestures__swipe_action__delete_word" comment="Preference value for swipe action">سڕینەوەی ووشەی ئێستا</string>
|
||||
<string name="pref__gestures__swipe_action__delete_words_precisely" comment="Preference value for swipe action">سڕینەوەی ووشەکان یەک بە یەک</string>
|
||||
<string name="pref__gestures__swipe_action__hide_keyboard" comment="Preference value for swipe action">شاردنەوەی تەختەکلیل</string>
|
||||
<string name="pref__gestures__swipe_action__insert_space" comment="Preference value for swipe action">زیادکردنی ماوە</string>
|
||||
<string name="pref__gestures__swipe_action__move_cursor_up" comment="Preference value for swipe action">بردن بۆ سەرەوە</string>
|
||||
<string name="pref__gestures__swipe_action__move_cursor_down" comment="Preference value for swipe action">بردن بۆ خوارەوە</string>
|
||||
<string name="pref__gestures__swipe_action__move_cursor_left" comment="Preference value for swipe action">بردن بۆ لای چەپ</string>
|
||||
<string name="pref__gestures__swipe_action__move_cursor_right" comment="Preference value for swipe action">بردن بۆ لای ڕاست</string>
|
||||
<string name="pref__gestures__swipe_action__move_cursor_start_of_line" comment="Preference value for swipe action">چوون بۆ سەرەتای ڕستە</string>
|
||||
<string name="pref__gestures__swipe_action__move_cursor_end_of_line" comment="Preference value for swipe action">چوون بۆ کۆتایی ڕستە</string>
|
||||
<string name="pref__gestures__swipe_action__shift" comment="Preference value for swipe action">گەورەکردن (Shift) </string>
|
||||
<string name="pref__gestures__swipe_action__show_input_method_picker" comment="Preference value for swipe action">گۆڕینی تەختەکلیل</string>
|
||||
<string name="pref__gestures__swipe_action__switch_to_prev_keyboard" comment="Preference value for swipe action">گۆڕین بۆ تەختەکلیلی پێشوو</string>
|
||||
<string name="pref__gestures__swipe_action__switch_to_prev_subtype" comment="Preference value for swipe action">گۆڕین بۆ زمانی پێشوو</string>
|
||||
<string name="pref__gestures__swipe_action__switch_to_next_subtype" comment="Preference value for swipe action">گۆڕین بۆ زمانی دواتر</string>
|
||||
@@ -219,6 +229,7 @@
|
||||
<string name="pref__gestures__space_bar_swipe_up__label" comment="Preference title">دوگمەی بۆشایی بۆ سەرەوە</string>
|
||||
<string name="pref__gestures__space_bar_swipe_left__label" comment="Preference title">دوگمەی بۆشایی بۆ لای چەپ</string>
|
||||
<string name="pref__gestures__space_bar_swipe_right__label" comment="Preference title">دوگمەی بۆشایی بۆ لای ڕاست</string>
|
||||
<string name="pref__gestures__space_bar_long_press__label" comment="Preference title">دوگمەی بۆشایی لەکاتی دەستڕاگرتن</string>
|
||||
<string name="pref__gestures__delete_key_swipe_left__label" comment="Preference title">دوگمەی سڕینەوە بۆ لای چەپ</string>
|
||||
<string name="pref__gestures__swipe_velocity_threshold__label" comment="Preference title">ئاستی خێرایی ڕاکێشان</string>
|
||||
<string name="pref__gestures__swipe_velocity_threshold__very_slow" comment="Preference value for swipe velocity threshold">خاوترین</string>
|
||||
@@ -60,34 +60,11 @@
|
||||
<string name="settings__localization__subtype_error_already_exists" comment="Error message shown in subtype dialog when a subtype to add already exists">Tento podtyp již existuje!</string>
|
||||
<string name="settings__theme__title" comment="Title of the Theme fragment">Motiv klávesnice</string>
|
||||
<string name="settings__theme__undefined" comment="General string for an undefined preference value">Definován</string>
|
||||
<string name="settings__theme__background" comment="General label for a background preference">Pozadí</string>
|
||||
<string name="settings__theme__background_active" comment="General label for an active background preference">Barva pozadí při aktivní</string>
|
||||
<string name="settings__theme__background_pressed" comment="General label for a pressed background preference">Barva pozadí při stisknutí</string>
|
||||
<string name="settings__theme__foreground" comment="General label for a foreground preference">Barva popředí</string>
|
||||
<string name="settings__theme__foreground_alt" comment="General label for an alternate foreground preference">Barva popředí (alternativní)</string>
|
||||
<string name="settings__theme__foreground_capslock" comment="General label for a capslock foreground preference">Barva popředí (caps lock)</string>
|
||||
<string name="settings__theme__dialog_title" comment="Title of the color selection dialog for a single theme preference">Vyberte barvu</string>
|
||||
<string name="settings__theme__group_window" comment="Theme group label">Okno & systém</string>
|
||||
<string name="settings__theme__group_keyboard" comment="Theme group label">Klávesnice</string>
|
||||
<string name="settings__theme__group_key" comment="Theme group label">Klíč</string>
|
||||
<string name="settings__theme__group_key_enter" comment="Theme group label">Klávesa</string>
|
||||
<string name="settings__theme__group_key_popup" comment="Theme group label">Vyskakovací okno klíče</string>
|
||||
<string name="settings__theme__group_key_shift" comment="Theme group label">Shift</string>
|
||||
<string name="settings__theme__group_media" comment="Theme group label">Mediální kontext</string>
|
||||
<string name="settings__theme__group_one_handed" comment="Theme group label">Jednoruční</string>
|
||||
<string name="settings__theme__group_one_handed_button" comment="Theme group label">Tlačítko s jednou rukou</string>
|
||||
<string name="settings__theme__group_smartbar" comment="Theme group label">Smartbar</string>
|
||||
<string name="settings__theme__group_smartbar_button" comment="Theme group label">Tlačítko Smartbar</string>
|
||||
<string name="pref__theme__colorPrimary_title" comment="Title of Color primary theme preference">Primární barva</string>
|
||||
<string name="pref__theme__colorPrimary_summary" comment="Summary of Color primary theme preference">Aplikováno na hlavní kartu Media ripple a zvýraznění výběru</string>
|
||||
<string name="pref__theme__colorPrimaryDark_title" comment="Title of Color primary dark theme preference">Primární barva (tmavá)</string>
|
||||
<string name="pref__theme__colorPrimaryDark_summary" comment="Summary of Color primary dark theme preference">V současné době se nepoužívá, vyhrazeno pro budoucí implementaci</string>
|
||||
<string name="pref__theme__colorAccent_title" comment="Title of Color accent theme preference">Barva přízvuku</string>
|
||||
<string name="pref__theme__colorAccent_summary" comment="Summary of Color accent theme preference">Aplikováno na kartu Emoji ripple</string>
|
||||
<string name="pref__theme__navBarColor_title" comment="Title of Nav bar color theme preference">Barva navigačního panelu</string>
|
||||
<string name="pref__theme__navBarColor_summary" comment="Summary of Nav bar color theme preference">Pozadí navigační lišty.</string>
|
||||
<string name="pref__theme__navBarIsLight_title" comment="Title of Nav bar is light theme preference">Navigační lišta tmavé popředí</string>
|
||||
<string name="pref__theme__navBarIsLight_summary" comment="Summary of Nav bar is light theme preference">Nastavte na Zapnuto pro tmavé nebo vypnuté pro světlé popředí.</string>
|
||||
<string name="settings__keyboard__title" comment="Title of Keyboard preferences fragment">Předvolby Klávesnice</string>
|
||||
<string name="pref__keyboard__group_keys__label" comment="Preference group title">Šipka</string>
|
||||
<string name="pref__keyboard__font_size_multiplier_portrait__label" comment="Preference title">Multiplikátor velikosti písma (portrét)</string>
|
||||
@@ -107,7 +84,6 @@
|
||||
<string name="pref__keyboard__height_factor__extra_tall" comment="Preference value">Extra vysoká</string>
|
||||
<string name="pref__keyboard__height_factor__custom" comment="Preference value">Vlastní</string>
|
||||
<string name="pref__keyboard__height_factor_custom__label" comment="Preference title">Vlastní hodnota výšky klávesnice</string>
|
||||
<string name="pref__keyboard__bottom_offset__label" comment="Preference title">Odstup zdola (pro zahnuté displeje)</string>
|
||||
<string name="pref__keyboard__group_keypress__label" comment="Preference group title">Stisk klávesy</string>
|
||||
<string name="pref__keyboard__sound_enabled__label" comment="Preference title">Zvuk při stisku klávesy</string>
|
||||
<string name="pref__keyboard__sound_volume__label" comment="Preference title">Hlasitost zvuku při stisku klávesy</string>
|
||||
@@ -136,7 +112,6 @@
|
||||
<string name="pref__glide__enabled__summary" comment="Preference summary">Zadejte slovo posunutím prstu jeho písmeny</string>
|
||||
<string name="pref__glide__show_trail__label" comment="Preference title">[NYI] Zobrazit sestupovou stopu</string>
|
||||
<string name="pref__glide__show_trail__summary" comment="Preference summary">Zmizí po každém slově</string>
|
||||
<string name="pref__gestures__title" comment="Preference group title">Gesto</string>
|
||||
<string name="pref__gestures__swipe_action__no_action" comment="Preference value for swipe action">Žádná akce</string>
|
||||
<string name="pref__gestures__swipe_action__delete_characters_precisely" comment="Preference value for swipe action">Smazat znaky přesně</string>
|
||||
<string name="pref__gestures__swipe_action__delete_word" comment="Preference value for swipe action">Smazat aktuální slovo</string>
|
||||
|
||||
@@ -64,33 +64,17 @@
|
||||
<string name="settings__localization__subtype_error_already_exists" comment="Error message shown in subtype dialog when a subtype to add already exists">Dette undertastatur findes allerede!</string>
|
||||
<string name="settings__theme__title" comment="Title of the Theme fragment">Tastaturtema</string>
|
||||
<string name="settings__theme__undefined" comment="General string for an undefined preference value">Ikke defineret</string>
|
||||
<string name="settings__theme__background" comment="General label for a background preference">Baggrundsfarve</string>
|
||||
<string name="settings__theme__background_active" comment="General label for an active background preference">Baggrundsfarve når aktiv</string>
|
||||
<string name="settings__theme__background_pressed" comment="General label for a pressed background preference">Baggrundsfarve ved tryk</string>
|
||||
<string name="settings__theme__foreground" comment="General label for a foreground preference">Forgrundsfarve</string>
|
||||
<string name="settings__theme__foreground_alt" comment="General label for an alternate foreground preference">Forgrundsfarve (alternativ)</string>
|
||||
<string name="settings__theme__foreground_capslock" comment="General label for a capslock foreground preference">Forgrundsfarve (caps lock)</string>
|
||||
<string name="settings__theme__dialog_title" comment="Title of the color selection dialog for a single theme preference">Vælg en farve</string>
|
||||
<string name="settings__theme__group_window" comment="Theme group label">Vindue & System</string>
|
||||
<string name="settings__theme__group_keyboard" comment="Theme group label">Tastatur</string>
|
||||
<string name="settings__theme__group_key" comment="Theme group label">Tast</string>
|
||||
<string name="settings__theme__group_key_enter" comment="Theme group label">Enter-tast</string>
|
||||
<string name="settings__theme__group_key_popup" comment="Theme group label">Tast popup</string>
|
||||
<string name="settings__theme__group_key_shift" comment="Theme group label">Shift-tast</string>
|
||||
<string name="settings__theme__group_media" comment="Theme group label">Mediekontekst</string>
|
||||
<string name="settings__theme__group_one_handed" comment="Theme group label">En-håndstilstand</string>
|
||||
<string name="settings__theme__group_one_handed_button" comment="Theme group label">En-håndstilstand knap</string>
|
||||
<string name="settings__theme__group_private_mode" comment="Theme group label">Privattilstand</string>
|
||||
<string name="settings__theme__group_smartbar" comment="Theme group label">SmartBjælke</string>
|
||||
<string name="settings__theme__group_smartbar_button" comment="Theme group label">Smartbjælke knap</string>
|
||||
<string name="pref__theme__colorPrimary_title" comment="Title of Color primary theme preference">Primær farve</string>
|
||||
<string name="pref__keyboard__height_factor__normal" comment="Preference value">Normal</string>
|
||||
<string name="pref__keyboard__height_factor__mid_tall" comment="Preference value">Middel-høj</string>
|
||||
<string name="pref__keyboard__height_factor__tall" comment="Preference value">Høj</string>
|
||||
<string name="pref__keyboard__height_factor__extra_tall" comment="Preference value">Extra-høj</string>
|
||||
<string name="pref__keyboard__height_factor__custom" comment="Preference value">Brugerdefineret</string>
|
||||
<string name="pref__keyboard__height_factor_custom__label" comment="Preference title">Brugerdefineret tastatur højde</string>
|
||||
<string name="pref__keyboard__bottom_offset__label" comment="Preference title">Forskudt fra bund (for kurvede skærme)</string>
|
||||
<string name="pref__keyboard__group_keypress__label" comment="Preference group title">Tastetryk</string>
|
||||
<string name="pref__keyboard__sound_enabled__label" comment="Preference title">Lyd ved tastetryk</string>
|
||||
<string name="pref__keyboard__sound_volume__label" comment="Preference title">Lydstryke ved tastetryk</string>
|
||||
@@ -122,7 +106,6 @@
|
||||
<string name="pref__glide__enabled__summary" comment="Preference summary">Skriv ord ved at stryge fingeren igennem bogstaver</string>
|
||||
<string name="pref__glide__show_trail__label" comment="Preference title">[NYI] Vis glidespor</string>
|
||||
<string name="pref__glide__show_trail__summary" comment="Preference summary">Vil forsvinde efter hvert ord</string>
|
||||
<string name="pref__gestures__title" comment="Preference group title">Bevægelser</string>
|
||||
<string name="pref__gestures__swipe_action__no_action" comment="Preference value for swipe action">Ingen handling</string>
|
||||
<string name="pref__gestures__swipe_action__delete_characters_precisely" comment="Preference value for swipe action">Slet tegn præcist</string>
|
||||
<string name="pref__gestures__swipe_action__delete_word" comment="Preference value for swipe action">Slet nuværende ord</string>
|
||||
|
||||
@@ -1,5 +1,6 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<resources>
|
||||
<string name="app_name">FlorisBoard</string>
|
||||
<string name="key__phone_pause" comment="Label for the Pause key in the telephone keyboard layout">Pausieren</string>
|
||||
<string name="key__phone_wait" comment="Label for the Wait key in the telephone keyboard layout">Warten</string>
|
||||
<string name="key_popup__threedots_alt" comment="Content description for the three-dots icon in a key popup">Drei-Punkte-Symbol. Zeigt an, dass durch langes Drücken mehr Zeichen verwendet werden können.</string>
|
||||
@@ -40,6 +41,7 @@
|
||||
<string name="settings__title" comment="Title of Settings">Einstellungen</string>
|
||||
<string name="settings__menu" comment="Hint of top-right three-dot icon in Settings">Weitere Optionen</string>
|
||||
<string name="settings__menu_help" comment="Three-dot menu entry for Help and Feedback web link">Hilfe & Feedback</string>
|
||||
<string name="settings__help" comment="General label for help buttons in Settings">Hilfe</string>
|
||||
<string name="settings__navigation__home" comment="Long-press hint of bottom nav item Home in Settings">Start</string>
|
||||
<string name="settings__navigation__keyboard" comment="Long-press hint of bottom nav item Keyboard in Settings">Tastatur</string>
|
||||
<string name="settings__navigation__typing" comment="Long-press hint of bottom nav item Typing in Settings">Schreiben</string>
|
||||
@@ -64,37 +66,78 @@
|
||||
<string name="settings__localization__subtype_error_already_exists" comment="Error message shown in subtype dialog when a subtype to add already exists">Dieser Eingabestil ist bereits vorhanden!</string>
|
||||
<string name="settings__theme__title" comment="Title of the Theme fragment">Tastaturdesign</string>
|
||||
<string name="settings__theme__undefined" comment="General string for an undefined preference value">Nicht definiert</string>
|
||||
<string name="settings__theme__background" comment="General label for a background preference">Hintergrundfarbe</string>
|
||||
<string name="settings__theme__background_active" comment="General label for an active background preference">Hintergrundfarbe wenn aktiv</string>
|
||||
<string name="settings__theme__background_pressed" comment="General label for a pressed background preference">Hintergrundfarbe wenn gedrückt</string>
|
||||
<string name="settings__theme__foreground" comment="General label for a foreground preference">Vordergrundfarbe</string>
|
||||
<string name="settings__theme__foreground_alt" comment="General label for an alternate foreground preference">Vordergrundfarbe (Alternativ)</string>
|
||||
<string name="settings__theme__foreground_capslock" comment="General label for a capslock foreground preference">Vordergrundfarbe (Umschalttaste festgestellt)</string>
|
||||
<string name="settings__theme__dialog_title" comment="Title of the color selection dialog for a single theme preference">Farbe wählen</string>
|
||||
<string name="pref__theme__mode__label" comment="Label of the theme mode preference">Design-Modus</string>
|
||||
<string name="pref__theme__mode__always_day" comment="Preference value for theme mode">Dauerhafter Tagmodus</string>
|
||||
<string name="pref__theme__mode__always_night" comment="Preference value for theme mode">Dauerhafter Nachtmodus</string>
|
||||
<string name="pref__theme__mode__follow_system" comment="Preference value for theme mode">Systemkonform</string>
|
||||
<string name="pref__theme__mode__follow_time" comment="Preference value for theme mode">Zeitverlauf folgen</string>
|
||||
<string name="pref__theme__sunrise_time__label" comment="Label of the sunrise time preference">Sonnenaufgangszeit</string>
|
||||
<string name="pref__theme__sunset_time__label" comment="Label of the sunset time preference">Sonnenuntergangszeit</string>
|
||||
<string name="pref__theme__day" comment="Label of the day group (day means light theme)">Helles Design</string>
|
||||
<string name="pref__theme__night" comment="Label of the night group (night means dark theme)">Dunkles Design</string>
|
||||
<string name="pref__theme__any_theme__label" comment="Label of the theme selector preference">Ausgewähltes Design</string>
|
||||
<string name="pref__theme__any_theme_adapt_to_app__label" comment="Label of the theme adapt to app preference">Farbdesign an eine App anpassen</string>
|
||||
<string name="pref__theme__any_theme_adapt_to_app__summary" comment="Summary of the theme adapt to app preference">Farbdesign passt sich an die verwendeten App an. Nur möglich wenn die verwendete App diese Funktionalität unterstützt.</string>
|
||||
<string name="pref__theme__source_assets" comment="Label for the theme source field">FlorisBoard App Ressourcen</string>
|
||||
<string name="pref__theme__source_internal" comment="Label for the theme source field">Interner Speicher</string>
|
||||
<string name="pref__theme__source_external" comment="Label for the theme source field">Externer Anbieter</string>
|
||||
<string name="settings__theme_manager__title_day" comment="Title of the theme manager activity for day theme">Design Manager (Tag)</string>
|
||||
<string name="settings__theme_manager__title_night" comment="Title of the theme manager activity for night theme">Design Manager (Nacht)</string>
|
||||
<string name="settings__theme_manager__create_empty" comment="Label of the Create empty FAB action">Leeres Design anlegen</string>
|
||||
<string name="settings__theme_manager__create_from_selected" comment="Label of the Create from selected FAB action">Aus ausgewähltem Design erstellen</string>
|
||||
<string name="settings__theme_manager__theme_custom_title" comment="Title template for a custom theme">Benutzerdefiniert (basierend auf %s)</string>
|
||||
<string name="settings__theme_manager__theme_new_title" comment="Title template for a new theme">Neues Design</string>
|
||||
<string name="settings__theme_editor__title" comment="Title of the edit theme activity">Design bearbeiten</string>
|
||||
<string name="settings__theme_editor__name_label" comment="Label of name input">Name</string>
|
||||
<string name="settings__theme_editor__type_label" comment="Label of type input">Typ</string>
|
||||
<string name="settings__theme_editor__add_group_dialog_title" comment="Title of the add group dialog in the theme editor">Gruppe hinzufügen</string>
|
||||
<string name="settings__theme_editor__edit_group_dialog_title" comment="Title of the edit group dialog in the theme editor">Gruppe bearbeiten</string>
|
||||
<string name="settings__theme_editor__add_attr_dialog_title" comment="Title of the add attribute dialog in the theme editor">Attribute hinzufügen</string>
|
||||
<string name="settings__theme_editor__edit_attr_dialog_title" comment="Title of the edit attribute dialog in the theme editor">Attribut bearbeiten</string>
|
||||
<string name="settings__theme_editor__value_type_reference" comment="Theme value type">Verweis</string>
|
||||
<string name="settings__theme_editor__value_type_reference_group" comment="Theme value type sub-field">Gruppe</string>
|
||||
<string name="settings__theme_editor__value_type_reference_attr" comment="Theme value type sub-field">Attribut</string>
|
||||
<string name="settings__theme_editor__value_type_solid_color" comment="Theme value type">Einheitliche Farbe</string>
|
||||
<string name="settings__theme_editor__value_type_lin_grad" comment="Theme value type">Linearer Farbverlauf</string>
|
||||
<string name="settings__theme_editor__value_type_rad_grad" comment="Theme value type">Radialer Farbverlauf</string>
|
||||
<string name="settings__theme_editor__value_type_on_off" comment="Theme value type">Wechseln</string>
|
||||
<string name="settings__theme_editor__value_type_on_off_state" comment="Theme value type sub-field">Status</string>
|
||||
<string name="settings__theme_editor__value_type_other" comment="Theme value type">Andere</string>
|
||||
<string name="settings__theme_editor__value_type_other_text" comment="Theme value type sub-field">Text</string>
|
||||
<string name="settings__theme_editor__value_preview_content_description" comment="Theme value preview content description">Vorschau der Design Werte</string>
|
||||
<string name="settings__theme_editor__error_theme_label_empty" comment="Error text for an empty theme label">Bitte geben Sie einen Namen für das Design ein.</string>
|
||||
<string name="settings__theme_editor__error_group_name" comment="Error text for an invalid group name">Bitte geben Sie einen Gruppennamen ein, welcher nur die Buchstaben (a-z und/oder A-Z), Doppelpunkte (:) für Untergruppierungen, oder zusätzliche Zahlen (0-9), Tilde (~) und Unterstriche (_) für die Tastenbeschriftung, enthält.</string>
|
||||
<string name="settings__theme_editor__error_group_name_empty" comment="Error text for an empty group name">Bitte geben Sie einen Gruppennamen ein.</string>
|
||||
<string name="settings__theme_editor__error_group_name_already_exists" comment="Error text for a duplicate group name">Dieser Gruppenname existiert bereits in diesem Design. Bitte wählen Sie einen anderen aus.</string>
|
||||
<string name="settings__theme_editor__error_attr_name" comment="Error text for an invalid attribute name">Bitte geben Sie einen Attributnamen ein welcher nur die Buchstaben a-z und/oder A-Z enthält.</string>
|
||||
<string name="settings__theme_editor__error_attr_name_empty" comment="Error text for an empty attribute name">Bitte geben Sie einen Attributnamen ein.</string>
|
||||
<string name="settings__theme_editor__error_attr_name_already_exists" comment="Error text for a duplicate attribute name">Dieser Attributname existiert bereits in dieser Gruppe. Bitte wählen Sie einen anderen aus.</string>
|
||||
<string name="settings__theme__group_window" comment="Theme group label">Fenster & System</string>
|
||||
<string name="settings__theme__group_keyboard" comment="Theme group label">Tastatur</string>
|
||||
<string name="settings__theme__group_key" comment="Theme group label">Taste</string>
|
||||
<string name="settings__theme__group_key_enter" comment="Theme group label">Eingabetaste</string>
|
||||
<string name="settings__theme__group_key_popup" comment="Theme group label">Tasten Pop-Up</string>
|
||||
<string name="settings__theme__group_key_shift" comment="Theme group label">Umschalttaste</string>
|
||||
<string name="settings__theme__group_key_specific" comment="Theme group label (%s is specific modifier)">Key (%s)</string>
|
||||
<string name="settings__theme__group_media" comment="Theme group label">Medienkontext</string>
|
||||
<string name="settings__theme__group_one_handed" comment="Theme group label">Einhandmodus</string>
|
||||
<string name="settings__theme__group_one_handed_button" comment="Theme group label">Einhandmodus Schalter</string>
|
||||
<string name="settings__theme__group_private_mode" comment="Theme group label">Privater Modus</string>
|
||||
<string name="settings__theme__group_oneHanded" comment="Theme group label">Einhandmodus</string>
|
||||
<string name="settings__theme__group_popup" comment="Theme group label">Popup</string>
|
||||
<string name="settings__theme__group_privateMode" comment="Theme group label">Privater Modus</string>
|
||||
<string name="settings__theme__group_smartbar" comment="Theme group label">Schnellzugriffsleiste</string>
|
||||
<string name="settings__theme__group_smartbar_button" comment="Theme group label">Schnellzugriffsleiste Schalter</string>
|
||||
<string name="pref__theme__colorPrimary_title" comment="Title of Color primary theme preference">Hauptfarbe</string>
|
||||
<string name="pref__theme__colorPrimary_summary" comment="Summary of Color primary theme preference">Wird auf Medien-Reiter und aktuelle Auswahl angewandt</string>
|
||||
<string name="pref__theme__colorPrimaryDark_title" comment="Title of Color primary dark theme preference">Hauptfarbe (dunkel)</string>
|
||||
<string name="pref__theme__colorPrimaryDark_summary" comment="Summary of Color primary dark theme preference">Zurzeit nicht in Benutzung, für zukünftige Funktionen reserviert</string>
|
||||
<string name="pref__theme__colorAccent_title" comment="Title of Color accent theme preference">Akzentfarbe</string>
|
||||
<string name="pref__theme__colorAccent_summary" comment="Summary of Color accent theme preference">Wird auf den Emoji-Reiter angewandt</string>
|
||||
<string name="pref__theme__navBarColor_title" comment="Title of Nav bar color theme preference">Farbe der Navigationsleiste</string>
|
||||
<string name="pref__theme__navBarColor_summary" comment="Summary of Nav bar color theme preference">Der Hintergrund der Navigationsleiste.</string>
|
||||
<string name="pref__theme__navBarIsLight_title" comment="Title of Nav bar is light theme preference">Dunkler Vordergrund der Navigationsleiste</string>
|
||||
<string name="pref__theme__navBarIsLight_summary" comment="Summary of Nav bar is light theme preference">EIN für dunklen oder AUS für hellen Vordergrund.</string>
|
||||
<string name="pref__theme__showKeyBorder_title" comment="Title of Show Key Border preference">Umrandung der Tasten</string>
|
||||
<string name="pref__theme__showKeyBorder_summary" comment="Summary of Show Key Border preference">Stellen Sie auf AN, um den Rand anzuzeigen, oder AUS, um ihn auszublenden</string>
|
||||
<string name="settings__theme__group_smartbarButton" comment="Theme group label">Schnellzugriffsleiste Schalter</string>
|
||||
<string name="settings__theme__group_custom" comment="Theme group label (%s is custom group name)">Benutzerdefinierte Gruppe (%s)</string>
|
||||
<string name="settings__theme__attr_background" comment="Theme attribute label">Hintergrundfarbe</string>
|
||||
<string name="settings__theme__attr_backgroundActive" comment="Theme attribute label">Hintergrundfarbe (aktiv)</string>
|
||||
<string name="settings__theme__attr_backgroundPressed" comment="Theme attribute label">Hintergrundfarbe (wenn gedrückt)</string>
|
||||
<string name="settings__theme__attr_foreground" comment="Theme attribute label">Vordergrundfarbe</string>
|
||||
<string name="settings__theme__attr_foregroundAlt" comment="Theme attribute label">Vordergrundfarbe (Alternativ)</string>
|
||||
<string name="settings__theme__attr_foregroundPressed" comment="Theme attribute label">Vordergrundfarbe (wenn gedrückt)</string>
|
||||
<string name="settings__theme__attr_showBorder" comment="Theme attribute label">Rahmen anzeigen</string>
|
||||
<string name="settings__theme__attr_colorPrimary" comment="Theme attribute label">Primärfarbe</string>
|
||||
<string name="settings__theme__attr_colorPrimaryDark" comment="Theme attribute label">Primärfarbe (dunkel)</string>
|
||||
<string name="settings__theme__attr_colorAccent" comment="Theme attribute label">Sekundärfarbe</string>
|
||||
<string name="settings__theme__attr_navBarColor" comment="Theme attribute label">Farbe der Navigationsleiste</string>
|
||||
<string name="settings__theme__attr_navBarLight" comment="Theme attribute label">Dunkler Vordergrund der Navigationsleiste</string>
|
||||
<string name="settings__theme__attr_semiTransparentColor" comment="Theme attribute label">Halbtransparente Farbe</string>
|
||||
<string name="settings__theme__attr_textColor" comment="Theme attribute label">Schriftfarbe</string>
|
||||
<string name="settings__theme__attr_custom" comment="Theme attribute label (%s is custom attribute name)">Benutzerdefinierte Attribute (%s)</string>
|
||||
<string name="settings__keyboard__title" comment="Title of Keyboard preferences fragment">Tastatur-Einstellungen</string>
|
||||
<string name="pref__keyboard__group_keys__label" comment="Preference group title">Tasten</string>
|
||||
<string name="pref__keyboard__number_row__label" comment="Preference title">Zahlenreihe</string>
|
||||
@@ -105,6 +148,13 @@
|
||||
<string name="pref__keyboard__hint_mode__enabled_hint_priority" comment="Preference value">Aktiviert (Andeutung ist priorisiert)</string>
|
||||
<string name="pref__keyboard__hint_mode__enabled_accent_priority" comment="Preference value">Aktiviert (Akzente sind priorisiert)</string>
|
||||
<string name="pref__keyboard__hint_mode__enabled_smart_priority" comment="Preference value">Aktiviert (Intelligente Priorisierung)</string>
|
||||
<string name="pref__keyboard__utility_key_enabled__label" comment="Preference title">Utility-Taste anzeigen</string>
|
||||
<string name="pref__keyboard__utility_key_enabled__summary" comment="Preference summary">Zeigt eine konfigurierbare Utility-Taste neben der Leertaste an</string>
|
||||
<string name="pref__keyboard__utility_key_action__label" comment="Preference title">Utility-Taste Aktion</string>
|
||||
<string name="pref__keyboard__utility_key_action__switch_to_emojis" comment="Preference value">Zu Emojis wechseln</string>
|
||||
<string name="pref__keyboard__utility_key_action__switch_language" comment="Preference value">Sprache wechseln</string>
|
||||
<string name="pref__keyboard__utility_key_action__switch_keyboard_app" comment="Preference value">Tastatur-App wechseln</string>
|
||||
<string name="pref__keyboard__utility_key_action__dynamic_switch_language_emojis" comment="Preference value">Dynamisch: Zu Emojis / Sprache wechseln</string>
|
||||
<string name="pref__keyboard__font_size_multiplier_portrait__label" comment="Preference title">Schriftgröße anpassen (Hochformat)</string>
|
||||
<string name="pref__keyboard__font_size_multiplier_landscape__label" comment="Preference title">Schriftgröße anpassen (Querformat)</string>
|
||||
<string name="pref__keyboard__group_layout__label" comment="Preference group title">Layout</string>
|
||||
@@ -122,7 +172,8 @@
|
||||
<string name="pref__keyboard__height_factor__extra_tall" comment="Preference value">Sehr groß</string>
|
||||
<string name="pref__keyboard__height_factor__custom" comment="Preference value">Benutzerdefiniert</string>
|
||||
<string name="pref__keyboard__height_factor_custom__label" comment="Preference title">Benutzerdefinierte Tastaturhöhe</string>
|
||||
<string name="pref__keyboard__bottom_offset__label" comment="Preference title">Unteres Ende absetzen (für abgerundete Bildschirme)</string>
|
||||
<string name="pref__keyboard__bottom_offset_portrait__label" comment="Preference title">Unterer Versatz (Hochformat)</string>
|
||||
<string name="pref__keyboard__bottom_offset_landscape__label" comment="Preference title">Unterer Versatz (Querformat)</string>
|
||||
<string name="pref__keyboard__group_keypress__label" comment="Preference group title">Tastendruck</string>
|
||||
<string name="pref__keyboard__sound_enabled__label" comment="Preference title">Ton bei Tastendruck</string>
|
||||
<string name="pref__keyboard__sound_volume__label" comment="Preference title">Lautstärke der Tastendrucktöne</string>
|
||||
@@ -154,17 +205,23 @@
|
||||
<string name="pref__glide__enabled__summary" comment="Preference summary">Durch Gleiten über die Buchstaben Wort eingeben</string>
|
||||
<string name="pref__glide__show_trail__label" comment="Preference title">[NYI] Bewegungsspur anzeigen</string>
|
||||
<string name="pref__glide__show_trail__summary" comment="Preference summary">Wird jeweils nach einem Wort ausgeblendet</string>
|
||||
<string name="pref__gestures__title" comment="Preference group title">Gesten</string>
|
||||
<string name="pref__gestures__general_title" comment="Preference group title">Allgemeine Gesten</string>
|
||||
<string name="pref__gestures__space_bar_title" comment="Preference group title">Leertaste Gesten</string>
|
||||
<string name="pref__gestures__other_title" comment="Preference group title">Andere Gesten / Gesten Schwellenwerte</string>
|
||||
<string name="pref__gestures__swipe_action__no_action" comment="Preference value for swipe action">Keine Aktion</string>
|
||||
<string name="pref__gestures__swipe_action__delete_characters_precisely" comment="Preference value for swipe action">Einzelne Zeichen exakt löschen</string>
|
||||
<string name="pref__gestures__swipe_action__delete_word" comment="Preference value for swipe action">Aktuelles Wort löschen</string>
|
||||
<string name="pref__gestures__swipe_action__delete_words_precisely" comment="Preference value for swipe action">Einzelne Wörter exakt löschen</string>
|
||||
<string name="pref__gestures__swipe_action__hide_keyboard" comment="Preference value for swipe action">Tastatur verstecken</string>
|
||||
<string name="pref__gestures__swipe_action__insert_space" comment="Preference value for swipe action">Leerzeichen einfügen</string>
|
||||
<string name="pref__gestures__swipe_action__move_cursor_up" comment="Preference value for swipe action">Cursor nach oben bewegen</string>
|
||||
<string name="pref__gestures__swipe_action__move_cursor_down" comment="Preference value for swipe action">Cursor nach unten bewegen</string>
|
||||
<string name="pref__gestures__swipe_action__move_cursor_left" comment="Preference value for swipe action">Cursor nach links bewegen</string>
|
||||
<string name="pref__gestures__swipe_action__move_cursor_right" comment="Preference value for swipe action">Cursor nach rechts bewegen</string>
|
||||
<string name="pref__gestures__swipe_action__move_cursor_start_of_line" comment="Preference value for swipe action">Cursor an den Zeilenanfang bewegen</string>
|
||||
<string name="pref__gestures__swipe_action__move_cursor_end_of_line" comment="Preference value for swipe action">Cursor an das Zeilenende bewegen</string>
|
||||
<string name="pref__gestures__swipe_action__shift" comment="Preference value for swipe action">Umschalttaste</string>
|
||||
<string name="pref__gestures__swipe_action__show_input_method_picker" comment="Preference value for swipe action">Auswahl der Eingabemethode anzeigen</string>
|
||||
<string name="pref__gestures__swipe_action__switch_to_prev_keyboard" comment="Preference value for swipe action">Zur vorherigen Tastatur wechseln</string>
|
||||
<string name="pref__gestures__swipe_action__switch_to_prev_subtype" comment="Preference value for swipe action">Zum vorherigen Eingabestil wechseln</string>
|
||||
<string name="pref__gestures__swipe_action__switch_to_next_subtype" comment="Preference value for swipe action">Zum nächsten Eingabestil wechseln</string>
|
||||
@@ -172,9 +229,10 @@
|
||||
<string name="pref__gestures__swipe_down__label" comment="Preference title">Nach unten streichen</string>
|
||||
<string name="pref__gestures__swipe_left__label" comment="Preference title">Nach links streichen</string>
|
||||
<string name="pref__gestures__swipe_right__label" comment="Preference title">Nach rechts streichen</string>
|
||||
<string name="pref__gestures__space_bar_swipe_up__label" comment="Preference title">Leertaste nach oben wischen</string>
|
||||
<string name="pref__gestures__space_bar_swipe_up__label" comment="Preference title">Leertaste nach oben streichen</string>
|
||||
<string name="pref__gestures__space_bar_swipe_left__label" comment="Preference title">Leertaste nach links streichen</string>
|
||||
<string name="pref__gestures__space_bar_swipe_right__label" comment="Preference title">Leertaste nach rechts streichen</string>
|
||||
<string name="pref__gestures__space_bar_long_press__label" comment="Preference title">Leertaste lang drücken</string>
|
||||
<string name="pref__gestures__delete_key_swipe_left__label" comment="Preference title">Löschtaste nach links streichen</string>
|
||||
<string name="pref__gestures__swipe_velocity_threshold__label" comment="Preference title">Gesten-Geschwindigkeitsschwelle</string>
|
||||
<string name="pref__gestures__swipe_velocity_threshold__very_slow" comment="Preference value for swipe velocity threshold">Sehr langsam</string>
|
||||
@@ -203,6 +261,26 @@
|
||||
<string name="about__view_source_code" comment="Label of View source code button in About">Quellcode</string>
|
||||
<string name="about__license__title" comment="Title of Open-source licenses dialog">Open Source-Lizenzen</string>
|
||||
<!-- Assets strings -->
|
||||
<plurals name="assets__file__authors">
|
||||
<item quantity="one">Ersteller</item>
|
||||
<item quantity="other">Ersteller</item>
|
||||
</plurals>
|
||||
<string name="assets__file__name">Name</string>
|
||||
<string name="assets__file__source">Quelle</string>
|
||||
<string name="assets__action__add">Hinzufügen</string>
|
||||
<string name="assets__action__cancel">Abbrechen</string>
|
||||
<string name="assets__action__cancel_confirm_title">Abbruch bestätigen</string>
|
||||
<string name="assets__action__cancel_confirm_message">Wollen Sie wirklich alle ungespeicherten Änderungen verwerfen? Dieser Vorgang kann nicht rückgängig gemacht werden.</string>
|
||||
<string name="assets__action__delete">Löschen</string>
|
||||
<string name="assets__action__delete_confirm_title">Löschvorgang bestätigen</string>
|
||||
<string name="assets__action__delete_confirm_message">Sind Sie sicher, dass sie \"%s\" löschen wollen? Dieser Vorgang kann nicht rückgängig gemacht werden.</string>
|
||||
<string name="assets__action__edit">Bearbeiten</string>
|
||||
<string name="assets__action__export">Exportieren</string>
|
||||
<string name="assets__action__import">Importieren</string>
|
||||
<string name="assets__action__no">Nein</string>
|
||||
<string name="assets__action__save">Speichern</string>
|
||||
<string name="assets__action__yes">Ja</string>
|
||||
<string name="assets__error__invalid">Ungültig</string>
|
||||
<!-- Setup UI strings -->
|
||||
<string name="setup__title" comment="Title of Setup">Einrichtung</string>
|
||||
<string name="setup__prev_button" comment="Label of Previous button in Setup (try to find a short translation due to limited space in UI)">Zurück</string>
|
||||
|
||||
@@ -64,37 +64,48 @@
|
||||
<string name="settings__localization__subtype_error_already_exists" comment="Error message shown in subtype dialog when a subtype to add already exists">Αυτός ο υποτύπος υπάρχει ήδη!</string>
|
||||
<string name="settings__theme__title" comment="Title of the Theme fragment">Θέμα πληκτρολογίου</string>
|
||||
<string name="settings__theme__undefined" comment="General string for an undefined preference value">Μη ορισμένο</string>
|
||||
<string name="settings__theme__background" comment="General label for a background preference">Χρώμα φόντου</string>
|
||||
<string name="settings__theme__background_active" comment="General label for an active background preference">Χρώμα φόντου όταν είναι ενεργό</string>
|
||||
<string name="settings__theme__background_pressed" comment="General label for a pressed background preference">Χρώμα φόντου όταν πατηθεί</string>
|
||||
<string name="settings__theme__foreground" comment="General label for a foreground preference">Χρώμα προσκηνίου</string>
|
||||
<string name="settings__theme__foreground_alt" comment="General label for an alternate foreground preference">Χρώμα προσκηνίου (εναλλακτικό)</string>
|
||||
<string name="settings__theme__foreground_capslock" comment="General label for a capslock foreground preference">Χρώμα προσκηνίου (κεφαλαία)</string>
|
||||
<string name="settings__theme__dialog_title" comment="Title of the color selection dialog for a single theme preference">Επιλέξτε ένα χρώμα</string>
|
||||
<string name="pref__theme__mode__label" comment="Label of the theme mode preference">Λειτουργία θέματος</string>
|
||||
<string name="pref__theme__mode__always_day" comment="Preference value for theme mode">Πάντα μέρα</string>
|
||||
<string name="pref__theme__mode__always_night" comment="Preference value for theme mode">Πάντα νύχτα</string>
|
||||
<string name="pref__theme__mode__follow_system" comment="Preference value for theme mode">Σύμφωνα με το σύστημα</string>
|
||||
<string name="pref__theme__mode__follow_time" comment="Preference value for theme mode">Σύμφωνα με την ώρα</string>
|
||||
<string name="pref__theme__sunrise_time__label" comment="Label of the sunrise time preference">Ώρα ανατολής</string>
|
||||
<string name="pref__theme__sunset_time__label" comment="Label of the sunset time preference">Ώρα δύσης</string>
|
||||
<string name="pref__theme__day" comment="Label of the day group (day means light theme)">Θέμα ημέρας</string>
|
||||
<string name="pref__theme__night" comment="Label of the night group (night means dark theme)">Θέμα νύχτας</string>
|
||||
<string name="pref__theme__any_theme__label" comment="Label of the theme selector preference">Επιλεγμένο θέμα</string>
|
||||
<string name="pref__theme__any_theme_adapt_to_app__label" comment="Label of the theme adapt to app preference">Προσαρμογή χρωμάτων στην εφαρμογή</string>
|
||||
<string name="pref__theme__any_theme_adapt_to_app__summary" comment="Summary of the theme adapt to app preference">Τα χρώματα του θέματος προσαρμόζονται σε αυτά της τρέχουσας εφαρμογής, εάν αυτή η εφαρμογή το υποστηρίζει.</string>
|
||||
<string name="pref__theme__source_internal" comment="Label for the theme source field">Εσωτερικός αποθηκευτικός χώρος</string>
|
||||
<string name="settings__theme_manager__title_day" comment="Title of the theme manager activity for day theme">Διαχειριστής Θέματος (Μέρα)</string>
|
||||
<string name="settings__theme_manager__title_night" comment="Title of the theme manager activity for night theme">Διαχειριστής Θέματος (Νύχτα)</string>
|
||||
<string name="settings__theme_manager__create_empty" comment="Label of the Create empty FAB action">Δημιουργία κενού θέματος</string>
|
||||
<string name="settings__theme_manager__create_from_selected" comment="Label of the Create from selected FAB action">Δημιουργία από επιλεγμένο θέμα</string>
|
||||
<string name="settings__theme_manager__theme_custom_title" comment="Title template for a custom theme">Ειδικό (βασισμένο σε %s)</string>
|
||||
<string name="settings__theme_manager__theme_new_title" comment="Title template for a new theme">Νέο θέμα</string>
|
||||
<string name="settings__theme_editor__title" comment="Title of the edit theme activity">Επεξεργασία θέματος</string>
|
||||
<string name="settings__theme_editor__name_label" comment="Label of name input">Όνομα</string>
|
||||
<string name="settings__theme_editor__type_label" comment="Label of type input">Τύπος</string>
|
||||
<string name="settings__theme_editor__add_group_dialog_title" comment="Title of the add group dialog in the theme editor">Προσθήκη ομάδας</string>
|
||||
<string name="settings__theme_editor__edit_group_dialog_title" comment="Title of the edit group dialog in the theme editor">Επεξεργασία ομάδας</string>
|
||||
<string name="settings__theme_editor__add_attr_dialog_title" comment="Title of the add attribute dialog in the theme editor">Προσθήκη χαρακτηριστικού</string>
|
||||
<string name="settings__theme_editor__edit_attr_dialog_title" comment="Title of the edit attribute dialog in the theme editor">Επεξεργασία χαρακτηριστικού</string>
|
||||
<string name="settings__theme_editor__value_type_reference" comment="Theme value type">Αναφορά</string>
|
||||
<string name="settings__theme_editor__value_type_reference_group" comment="Theme value type sub-field">Ομάδα</string>
|
||||
<string name="settings__theme_editor__value_type_reference_attr" comment="Theme value type sub-field">Χαρακτηριστικό</string>
|
||||
<string name="settings__theme_editor__value_type_solid_color" comment="Theme value type">Συμπαγές χρώμα</string>
|
||||
<string name="settings__theme_editor__value_type_on_off" comment="Theme value type">Εναλλαγή</string>
|
||||
<string name="settings__theme_editor__value_type_on_off_state" comment="Theme value type sub-field">Κατάσταση</string>
|
||||
<string name="settings__theme_editor__value_type_other" comment="Theme value type">Άλλο</string>
|
||||
<string name="settings__theme_editor__value_type_other_text" comment="Theme value type sub-field">Κείμενο</string>
|
||||
<string name="settings__theme_editor__value_preview_content_description" comment="Theme value preview content description">Προεπισκόπηση της τιμής του θέματος</string>
|
||||
<string name="settings__theme_editor__error_theme_label_empty" comment="Error text for an empty theme label">Παρακαλώ εισάγετε ένα όνομα για το θέμα.</string>
|
||||
<string name="settings__theme_editor__error_group_name_empty" comment="Error text for an empty group name">Παρακαλώ εισάγετε ένα όνομα για την ομάδα.</string>
|
||||
<string name="settings__theme__group_window" comment="Theme group label">Παράθυρο & Σύστημα</string>
|
||||
<string name="settings__theme__group_keyboard" comment="Theme group label">Πληκτρολόγιο</string>
|
||||
<string name="settings__theme__group_key" comment="Theme group label">Πλήκτρο</string>
|
||||
<string name="settings__theme__group_key_enter" comment="Theme group label">Πλήκτρο εισαγωγής</string>
|
||||
<string name="settings__theme__group_key_popup" comment="Theme group label">Εμφάνιση πλήκτρων</string>
|
||||
<string name="settings__theme__group_key_shift" comment="Theme group label">Πλήκτρο κεφαλαίων</string>
|
||||
<string name="settings__theme__group_media" comment="Theme group label">Περιεχόμενο μέσων</string>
|
||||
<string name="settings__theme__group_one_handed" comment="Theme group label">Με το ένα χέρι</string>
|
||||
<string name="settings__theme__group_one_handed_button" comment="Theme group label">Πλήκτρο λειτουργίας ενός-χεριού</string>
|
||||
<string name="settings__theme__group_private_mode" comment="Theme group label">Ιδιωτική λειτουργία</string>
|
||||
<string name="settings__theme__group_smartbar" comment="Theme group label">Έξυπνη Μπάρα</string>
|
||||
<string name="settings__theme__group_smartbar_button" comment="Theme group label">Πλήκτρο έξυπνης μπάρας</string>
|
||||
<string name="pref__theme__colorPrimary_title" comment="Title of Color primary theme preference">Κυρίως χρώμα</string>
|
||||
<string name="pref__theme__colorPrimary_summary" comment="Summary of Color primary theme preference">Εφαρμόζεται στην μπάρα κυματισμού των κυρίως μέσων και στην επισήμανση επιλογής</string>
|
||||
<string name="pref__theme__colorPrimaryDark_title" comment="Title of Color primary dark theme preference">Κυρίως χρώμα (σκούρο)</string>
|
||||
<string name="pref__theme__colorPrimaryDark_summary" comment="Summary of Color primary dark theme preference">Δεν χρησιμοποιείται προς το παρόν, δεσμευμένο για μελλοντική εφαρμογή</string>
|
||||
<string name="pref__theme__colorAccent_title" comment="Title of Color accent theme preference">Χρώμα έμφασης</string>
|
||||
<string name="pref__theme__colorAccent_summary" comment="Summary of Color accent theme preference">Εφαρμόζεται στον κυματισμό μπάρας των emoji</string>
|
||||
<string name="pref__theme__navBarColor_title" comment="Title of Nav bar color theme preference">Χρώμα μπάρας πλοήγησης</string>
|
||||
<string name="pref__theme__navBarColor_summary" comment="Summary of Nav bar color theme preference">To φόντο της μπάρας πλοήγησης.</string>
|
||||
<string name="pref__theme__navBarIsLight_title" comment="Title of Nav bar is light theme preference">Σκούρο προσκήνιο μπάρας πλοήγησης</string>
|
||||
<string name="pref__theme__navBarIsLight_summary" comment="Summary of Nav bar is light theme preference">Ορίστε ΕΝΕΡΓΟΠΟΙΗΜΈΝΟ για σκούρο ή ΑΠΕΝΕΡΓΟΠΟΙΗΜΈΝΟ για φωτεινό προσκήνιο.</string>
|
||||
<string name="pref__theme__showKeyBorder_title" comment="Title of Show Key Border preference">Περίγραμμα Πλήκτρου</string>
|
||||
<string name="pref__theme__showKeyBorder_summary" comment="Summary of Show Key Border preference">Ενεργοποιείστε για εμφάνιση των περιγραμμάτων ή απενεργοποιείστε για απόκρυψη</string>
|
||||
<string name="settings__keyboard__title" comment="Title of Keyboard preferences fragment">Προτιμήσεις Πληκτρολογίου</string>
|
||||
<string name="pref__keyboard__group_keys__label" comment="Preference group title">Πλήκτρα</string>
|
||||
<string name="pref__keyboard__number_row__label" comment="Preference title">Σειρά αριθμών</string>
|
||||
@@ -122,7 +133,6 @@
|
||||
<string name="pref__keyboard__height_factor__extra_tall" comment="Preference value">Πολύ-ψηλό</string>
|
||||
<string name="pref__keyboard__height_factor__custom" comment="Preference value">Προσαρμοσμένο</string>
|
||||
<string name="pref__keyboard__height_factor_custom__label" comment="Preference title">Προσαρμοσμένη τιμή ύψους πληκτρολογίου</string>
|
||||
<string name="pref__keyboard__bottom_offset__label" comment="Preference title">Αντιστάθμιση βάσης (για κυρτές οθόνες)</string>
|
||||
<string name="pref__keyboard__group_keypress__label" comment="Preference group title">Πάτημα πλήκτρου</string>
|
||||
<string name="pref__keyboard__sound_enabled__label" comment="Preference title">Ήχος κατά το πάτημα πλήκτρου</string>
|
||||
<string name="pref__keyboard__sound_volume__label" comment="Preference title">Ένταση ήχου κατά το πάτημα πλήκτρου</string>
|
||||
@@ -154,7 +164,6 @@
|
||||
<string name="pref__glide__enabled__summary" comment="Preference summary">Πληκτρολογήστε μία λέξη με ολίσθηση του δαχτύλου μέσα από τα γράμματά της</string>
|
||||
<string name="pref__glide__show_trail__label" comment="Preference title">[NYI] Εμφάνιση διαδρομής ολίσθησης</string>
|
||||
<string name="pref__glide__show_trail__summary" comment="Preference summary">Θα εξαφανίζεται μετά από κάθε λέξη</string>
|
||||
<string name="pref__gestures__title" comment="Preference group title">Κινήσεις</string>
|
||||
<string name="pref__gestures__swipe_action__no_action" comment="Preference value for swipe action">Καμία ενέργεια</string>
|
||||
<string name="pref__gestures__swipe_action__delete_characters_precisely" comment="Preference value for swipe action">Διαγραφή χαρακτήρων με ακρίβεια</string>
|
||||
<string name="pref__gestures__swipe_action__delete_word" comment="Preference value for swipe action">Διαγραφή της τρέχουσας λέξης</string>
|
||||
@@ -203,6 +212,21 @@
|
||||
<string name="about__view_source_code" comment="Label of View source code button in About">Πηγαίος κώδικας</string>
|
||||
<string name="about__license__title" comment="Title of Open-source licenses dialog">Άδειες λογισμικού ανοικτού κώδικα</string>
|
||||
<!-- Assets strings -->
|
||||
<string name="assets__file__name">Όνομα</string>
|
||||
<string name="assets__file__source">Πηγή</string>
|
||||
<string name="assets__action__add">Προσθήκη</string>
|
||||
<string name="assets__action__cancel">Ακύρωση</string>
|
||||
<string name="assets__action__cancel_confirm_title">Επιβεβαίωση ακύρωσης</string>
|
||||
<string name="assets__action__delete">Διαγραφή</string>
|
||||
<string name="assets__action__delete_confirm_title">Επιβεβαίωση διαγραφής</string>
|
||||
<string name="assets__action__delete_confirm_message">Είστε βέβαιοι ότι θέλετε να διαγράψετε \"%s\"; Αυτή η ενέργεια δεν μπορεί να αναιρεθεί.</string>
|
||||
<string name="assets__action__edit">Επεξεργασία</string>
|
||||
<string name="assets__action__export">Εξαγωγή</string>
|
||||
<string name="assets__action__import">Εισαγωγή</string>
|
||||
<string name="assets__action__no">Όχι</string>
|
||||
<string name="assets__action__save">Αποθήκευση</string>
|
||||
<string name="assets__action__yes">Ναι</string>
|
||||
<string name="assets__error__invalid">Μη έγκυρο</string>
|
||||
<!-- Setup UI strings -->
|
||||
<string name="setup__title" comment="Title of Setup">Ρύθμιση</string>
|
||||
<string name="setup__prev_button" comment="Label of Previous button in Setup (try to find a short translation due to limited space in UI)">Προηγ</string>
|
||||
|
||||
@@ -26,6 +26,7 @@
|
||||
<string name="settings__title" comment="Title of Settings">Agordoj</string>
|
||||
<string name="settings__menu" comment="Hint of top-right three-dot icon in Settings">Pliaj opcioj</string>
|
||||
<string name="settings__menu_help" comment="Three-dot menu entry for Help and Feedback web link">Helpo & kuplado</string>
|
||||
<string name="settings__help" comment="General label for help buttons in Settings">Helpo</string>
|
||||
<string name="settings__navigation__home" comment="Long-press hint of bottom nav item Home in Settings">Hejmo</string>
|
||||
<string name="settings__navigation__keyboard" comment="Long-press hint of bottom nav item Keyboard in Settings">Klavaro</string>
|
||||
<string name="settings__navigation__typing" comment="Long-press hint of bottom nav item Typing in Settings">Tajpado</string>
|
||||
@@ -44,12 +45,15 @@
|
||||
<string name="settings__localization__subtype_layout" comment="Label for keyboard layout dropdown in subtype dialog">Klavaro</string>
|
||||
<string name="settings__theme__title" comment="Title of the Theme fragment">Klavaro etoso</string>
|
||||
<string name="settings__theme__undefined" comment="General string for an undefined preference value">Nedifinita</string>
|
||||
<string name="settings__theme__background" comment="General label for a background preference">Fona koloro</string>
|
||||
<string name="settings__theme__background_active" comment="General label for an active background preference">Fona koloro kiam aktiva</string>
|
||||
<string name="settings__theme__background_pressed" comment="General label for a pressed background preference">Fona koloro kiam depremos</string>
|
||||
<string name="settings__theme__foreground" comment="General label for a foreground preference">Malfona koloro</string>
|
||||
<string name="settings__theme__foreground_alt" comment="General label for an alternate foreground preference">Malfona koloro (alternativo)</string>
|
||||
<string name="settings__theme__foreground_capslock" comment="General label for a capslock foreground preference">Malfona koloro (fiksiĝema ĉeflitera registrumo)</string>
|
||||
<string name="pref__theme__mode__always_day" comment="Preference value for theme mode">Ĉiama tago</string>
|
||||
<string name="pref__theme__mode__always_night" comment="Preference value for theme mode">Ĉiama nokto</string>
|
||||
<string name="pref__theme__day" comment="Label of the day group (day means light theme)">Taga etoso</string>
|
||||
<string name="pref__theme__night" comment="Label of the night group (night means dark theme)">Nokta etoso</string>
|
||||
<string name="settings__theme_manager__theme_new_title" comment="Title template for a new theme">Nova etoso</string>
|
||||
<string name="settings__theme_editor__title" comment="Title of the edit theme activity">Redakti etoson</string>
|
||||
<string name="settings__theme_editor__name_label" comment="Label of name input">Nomo</string>
|
||||
<string name="settings__theme_editor__value_type_other" comment="Theme value type">Alia</string>
|
||||
<string name="settings__theme_editor__value_type_other_text" comment="Theme value type sub-field">Teksto</string>
|
||||
<string name="settings__theme__group_keyboard" comment="Theme group label">Klavaro</string>
|
||||
<string name="settings__theme__group_key" comment="Theme group label">Klavo</string>
|
||||
<string name="settings__keyboard__title" comment="Title of Keyboard preferences fragment">Klavaro agordoj</string>
|
||||
@@ -59,13 +63,14 @@
|
||||
<string name="pref__keyboard__height_factor__label" comment="Preference title">Klavaro alteco</string>
|
||||
<string name="pref__keyboard__height_factor__extra_short" comment="Preference value">Pli kurta</string>
|
||||
<string name="pref__keyboard__height_factor__short" comment="Preference value">Kurta</string>
|
||||
<string name="pref__keyboard__height_factor__mid_short" comment="Preference value">Mez-kurta</string>
|
||||
<string name="pref__keyboard__height_factor__normal" comment="Preference value">Norma</string>
|
||||
<string name="pref__keyboard__height_factor__mid_tall" comment="Preference value">Mez-alta</string>
|
||||
<string name="pref__keyboard__height_factor__tall" comment="Preference value">Granda</string>
|
||||
<string name="pref__keyboard__height_factor__extra_tall" comment="Preference value">Pli granda</string>
|
||||
<string name="pref__keyboard__height_factor__custom" comment="Preference value">Laŭmenda</string>
|
||||
<string name="pref__keyboard__height_factor_custom__label" comment="Preference title">Laŭmenda klavaro alteca valora</string>
|
||||
<string name="pref__keyboard__group_keypress__label" comment="Preference group title">Klavaĵo ekdepremi</string>
|
||||
<string name="pref__gestures__title" comment="Preference group title">Gestoj</string>
|
||||
<string name="pref__gestures__swipe_action__no_action" comment="Preference value for swipe action">Neniu ago</string>
|
||||
<string name="pref__gestures__swipe_up__label" comment="Preference title">Ŝovumi supre</string>
|
||||
<string name="pref__gestures__swipe_down__label" comment="Preference title">Ŝovumi sube</string>
|
||||
@@ -76,7 +81,7 @@
|
||||
<string name="pref__gestures__swipe_velocity_threshold__normal" comment="Preference value for swipe velocity threshold">Norma</string>
|
||||
<string name="pref__gestures__swipe_velocity_threshold__fast" comment="Preference value for swipe velocity threshold">Rapida</string>
|
||||
<string name="pref__gestures__swipe_velocity_threshold__very_fast" comment="Preference value for swipe velocity threshold">Tre rapida</string>
|
||||
<string name="pref__gestures__swipe_distance_threshold__very_short" comment="Preference value for swipe distance threshold">Tre mallonga</string>
|
||||
<string name="pref__gestures__swipe_distance_threshold__very_short" comment="Preference value for swipe distance threshold">Tre kurta</string>
|
||||
<string name="pref__gestures__swipe_distance_threshold__short" comment="Preference value for swipe distance threshold">Mallonga</string>
|
||||
<string name="pref__gestures__swipe_distance_threshold__normal" comment="Preference value for swipe distance threshold">Norma</string>
|
||||
<string name="pref__gestures__swipe_distance_threshold__long" comment="Preference value for swipe distance threshold">Longa</string>
|
||||
@@ -94,6 +99,14 @@
|
||||
<string name="about__view_source_code" comment="Label of View source code button in About">Fontkodo</string>
|
||||
<string name="about__license__title" comment="Title of Open-source licenses dialog">Malfermitkodaj permesiloj</string>
|
||||
<!-- Assets strings -->
|
||||
<string name="assets__file__name">Nomo</string>
|
||||
<string name="assets__file__source">Fonto</string>
|
||||
<string name="assets__action__add">Aldoni</string>
|
||||
<string name="assets__action__cancel">Nuligi</string>
|
||||
<string name="assets__action__delete">Forigi</string>
|
||||
<string name="assets__action__edit">Redakti</string>
|
||||
<string name="assets__action__no">Ne</string>
|
||||
<string name="assets__action__yes">Jes</string>
|
||||
<!-- Setup UI strings -->
|
||||
<string name="setup__title" comment="Title of Setup">Agordaĵo</string>
|
||||
<string name="setup__prev_button" comment="Label of Previous button in Setup (try to find a short translation due to limited space in UI)">Antaŭa</string>
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<resources>
|
||||
<string name="key__phone_pause" comment="Label for the Pause key in the telephone keyboard layout">Pausar</string>
|
||||
<string name="key__phone_pause" comment="Label for the Pause key in the telephone keyboard layout">Detener</string>
|
||||
<string name="key__phone_wait" comment="Label for the Wait key in the telephone keyboard layout">Espere</string>
|
||||
<string name="key_popup__threedots_alt" comment="Content description for the three-dots icon in a key popup">Icono de tres puntos. Si está visible, indica que se pueden utilizar más letras si se pulsa durante más tiempo.</string>
|
||||
<!-- One-handed strings -->
|
||||
@@ -40,6 +40,7 @@
|
||||
<string name="settings__title" comment="Title of Settings">Ajustes</string>
|
||||
<string name="settings__menu" comment="Hint of top-right three-dot icon in Settings">Más opciones</string>
|
||||
<string name="settings__menu_help" comment="Three-dot menu entry for Help and Feedback web link">Ayuda y comentarios</string>
|
||||
<string name="settings__help" comment="General label for help buttons in Settings">Ayuda</string>
|
||||
<string name="settings__navigation__home" comment="Long-press hint of bottom nav item Home in Settings">Inicio</string>
|
||||
<string name="settings__navigation__keyboard" comment="Long-press hint of bottom nav item Keyboard in Settings">Teclado</string>
|
||||
<string name="settings__navigation__typing" comment="Long-press hint of bottom nav item Typing in Settings">Escritura</string>
|
||||
@@ -64,37 +65,75 @@
|
||||
<string name="settings__localization__subtype_error_already_exists" comment="Error message shown in subtype dialog when a subtype to add already exists">¡Este subtipo ya existe!</string>
|
||||
<string name="settings__theme__title" comment="Title of the Theme fragment">Tema de teclado</string>
|
||||
<string name="settings__theme__undefined" comment="General string for an undefined preference value">Sin definir</string>
|
||||
<string name="settings__theme__background" comment="General label for a background preference">Color de fondo</string>
|
||||
<string name="settings__theme__background_active" comment="General label for an active background preference">Color de fondo cuando está activo</string>
|
||||
<string name="settings__theme__background_pressed" comment="General label for a pressed background preference">Color de fondo cuando está pulsado</string>
|
||||
<string name="settings__theme__foreground" comment="General label for a foreground preference">Color principal</string>
|
||||
<string name="settings__theme__foreground_alt" comment="General label for an alternate foreground preference">Color principal (alternativo)</string>
|
||||
<string name="settings__theme__foreground_capslock" comment="General label for a capslock foreground preference">Color principal (bloqueo de mayúsculas)</string>
|
||||
<string name="settings__theme__dialog_title" comment="Title of the color selection dialog for a single theme preference">Seleccionar un color</string>
|
||||
<string name="pref__theme__mode__label" comment="Label of the theme mode preference">Tema</string>
|
||||
<string name="pref__theme__mode__always_day" comment="Preference value for theme mode">Siempre</string>
|
||||
<string name="pref__theme__mode__always_night" comment="Preference value for theme mode">Siempre</string>
|
||||
<string name="pref__theme__mode__follow_system" comment="Preference value for theme mode">Predeterminado del sistema</string>
|
||||
<string name="pref__theme__mode__follow_time" comment="Preference value for theme mode">De acuerdo al tiempo</string>
|
||||
<string name="pref__theme__sunset_time__label" comment="Label of the sunset time preference">Hora de puesta de sol</string>
|
||||
<string name="pref__theme__day" comment="Label of the day group (day means light theme)">Tema claro</string>
|
||||
<string name="pref__theme__night" comment="Label of the night group (night means dark theme)">Tema oscuro</string>
|
||||
<string name="pref__theme__any_theme__label" comment="Label of the theme selector preference">Tema seleccionado</string>
|
||||
<string name="pref__theme__any_theme_adapt_to_app__label" comment="Label of the theme adapt to app preference">Adaptar colores a la aplicación</string>
|
||||
<string name="pref__theme__any_theme_adapt_to_app__summary" comment="Summary of the theme adapt to app preference">Los colores del tema se adaptan a los de la aplicación actual, si la aplicación de destino lo admite.</string>
|
||||
<string name="pref__theme__source_internal" comment="Label for the theme source field">Almacenamiento interno</string>
|
||||
<string name="pref__theme__source_external" comment="Label for the theme source field">Proveedor externo</string>
|
||||
<string name="settings__theme_manager__title_day" comment="Title of the theme manager activity for day theme">Administrador de tema (claro)</string>
|
||||
<string name="settings__theme_manager__title_night" comment="Title of the theme manager activity for night theme">Administrador de tema (Oscuro)</string>
|
||||
<string name="settings__theme_manager__create_empty" comment="Label of the Create empty FAB action">Crear un tema nuevo</string>
|
||||
<string name="settings__theme_manager__create_from_selected" comment="Label of the Create from selected FAB action">Crear de tema seleccionado</string>
|
||||
<string name="settings__theme_manager__theme_custom_title" comment="Title template for a custom theme">Personalizado (basado en %s)</string>
|
||||
<string name="settings__theme_manager__theme_new_title" comment="Title template for a new theme">Nuevo tema</string>
|
||||
<string name="settings__theme_editor__title" comment="Title of the edit theme activity">Editar tema</string>
|
||||
<string name="settings__theme_editor__name_label" comment="Label of name input">Nombre</string>
|
||||
<string name="settings__theme_editor__type_label" comment="Label of type input">Tipo</string>
|
||||
<string name="settings__theme_editor__add_group_dialog_title" comment="Title of the add group dialog in the theme editor">Agregar grupo</string>
|
||||
<string name="settings__theme_editor__edit_group_dialog_title" comment="Title of the edit group dialog in the theme editor">Editar grupo</string>
|
||||
<string name="settings__theme_editor__add_attr_dialog_title" comment="Title of the add attribute dialog in the theme editor">Agregar atributo</string>
|
||||
<string name="settings__theme_editor__edit_attr_dialog_title" comment="Title of the edit attribute dialog in the theme editor">Editar Atributo</string>
|
||||
<string name="settings__theme_editor__value_type_reference" comment="Theme value type">Referencia</string>
|
||||
<string name="settings__theme_editor__value_type_reference_group" comment="Theme value type sub-field">Grupo</string>
|
||||
<string name="settings__theme_editor__value_type_reference_attr" comment="Theme value type sub-field">Atributo</string>
|
||||
<string name="settings__theme_editor__value_type_solid_color" comment="Theme value type">Color sólido</string>
|
||||
<string name="settings__theme_editor__value_type_lin_grad" comment="Theme value type">Gradiente lineal</string>
|
||||
<string name="settings__theme_editor__value_type_rad_grad" comment="Theme value type">Gradiente radial</string>
|
||||
<string name="settings__theme_editor__value_type_on_off" comment="Theme value type">Cambiar</string>
|
||||
<string name="settings__theme_editor__value_type_on_off_state" comment="Theme value type sub-field">Estado</string>
|
||||
<string name="settings__theme_editor__value_type_other" comment="Theme value type">Otro</string>
|
||||
<string name="settings__theme_editor__value_type_other_text" comment="Theme value type sub-field">Texto</string>
|
||||
<string name="settings__theme_editor__value_preview_content_description" comment="Theme value preview content description">Valor previo del tema</string>
|
||||
<string name="settings__theme_editor__error_theme_label_empty" comment="Error text for an empty theme label">Por favor, ingresa un nombre para el tema.</string>
|
||||
<string name="settings__theme_editor__error_group_name" comment="Error text for an invalid group name">Ingrese un nombre de grupo que solo contenga letras (a – z y / o A – Z), dos puntos (:) para subgrupos o, además, números (0–9), tilde (~) y subrayados (_) para la clave etiqueta.</string>
|
||||
<string name="settings__theme_editor__error_group_name_empty" comment="Error text for an empty group name">Por favor, introduzca un nombre de grupo.</string>
|
||||
<string name="settings__theme_editor__error_group_name_already_exists" comment="Error text for a duplicate group name">Este nombre de grupo ya existe dentro de este tema. Por favor elije otro.</string>
|
||||
<string name="settings__theme_editor__error_attr_name" comment="Error text for an invalid attribute name">Por favor, ingresa un nombre que contenga solo las letras a-z y/o A-Z.</string>
|
||||
<string name="settings__theme_editor__error_attr_name_empty" comment="Error text for an empty attribute name">Por favor, introduzca un nombre al atributo.</string>
|
||||
<string name="settings__theme_editor__error_attr_name_already_exists" comment="Error text for a duplicate attribute name">Este nombre de atributo ya existe en este grupo. Por favor, escribe otro.</string>
|
||||
<string name="settings__theme__group_window" comment="Theme group label">Ventana y sistema</string>
|
||||
<string name="settings__theme__group_keyboard" comment="Theme group label">Teclado</string>
|
||||
<string name="settings__theme__group_key" comment="Theme group label">Tecla</string>
|
||||
<string name="settings__theme__group_key_enter" comment="Theme group label">Tecla Intro</string>
|
||||
<string name="settings__theme__group_key_popup" comment="Theme group label">Tecla emergente</string>
|
||||
<string name="settings__theme__group_key_shift" comment="Theme group label">Tecla Shift</string>
|
||||
<string name="settings__theme__group_key_specific" comment="Theme group label (%s is specific modifier)">Tecla (%s)</string>
|
||||
<string name="settings__theme__group_media" comment="Theme group label">Contexto de multimedia</string>
|
||||
<string name="settings__theme__group_one_handed" comment="Theme group label">A una mano</string>
|
||||
<string name="settings__theme__group_one_handed_button" comment="Theme group label">Botón a una mano</string>
|
||||
<string name="settings__theme__group_private_mode" comment="Theme group label">Modo privado</string>
|
||||
<string name="settings__theme__group_oneHanded" comment="Theme group label">Una mano</string>
|
||||
<string name="settings__theme__group_popup" comment="Theme group label">Emergente</string>
|
||||
<string name="settings__theme__group_privateMode" comment="Theme group label">Modo privado</string>
|
||||
<string name="settings__theme__group_smartbar" comment="Theme group label">Barra inteligente</string>
|
||||
<string name="settings__theme__group_smartbar_button" comment="Theme group label">Bóton de barra inteligente</string>
|
||||
<string name="pref__theme__colorPrimary_title" comment="Title of Color primary theme preference">Color principal</string>
|
||||
<string name="pref__theme__colorPrimary_summary" comment="Summary of Color primary theme preference">Aplicado al indicador de la pestaña principal de multimedia y al resaltado de la selección</string>
|
||||
<string name="pref__theme__colorPrimaryDark_title" comment="Title of Color primary dark theme preference">Color principal (oscuro)</string>
|
||||
<string name="pref__theme__colorPrimaryDark_summary" comment="Summary of Color primary dark theme preference">Actualmente no se utiliza, reservado para su futura aplicación</string>
|
||||
<string name="pref__theme__colorAccent_title" comment="Title of Color accent theme preference">Color de acento</string>
|
||||
<string name="pref__theme__colorAccent_summary" comment="Summary of Color accent theme preference">Aplicado al indicador de la pestaña de los emojis</string>
|
||||
<string name="pref__theme__navBarColor_title" comment="Title of Nav bar color theme preference">Color de la barra de navegación</string>
|
||||
<string name="pref__theme__navBarColor_summary" comment="Summary of Nav bar color theme preference">El fondo de la barra de navegación.</string>
|
||||
<string name="pref__theme__navBarIsLight_title" comment="Title of Nav bar is light theme preference">Color principal oscuro de la barra de navegación</string>
|
||||
<string name="pref__theme__navBarIsLight_summary" comment="Summary of Nav bar is light theme preference">Establecer en ENCENDIDO para el oscuro o en APAGADO para el claro en el color principal.</string>
|
||||
<string name="pref__theme__showKeyBorder_title" comment="Title of Show Key Border preference">Borde de la tecla</string>
|
||||
<string name="pref__theme__showKeyBorder_summary" comment="Summary of Show Key Border preference">Establecer en ENCENDIDO para mostrar el borde o en APAGADO para ocultarlo</string>
|
||||
<string name="settings__theme__group_smartbarButton" comment="Theme group label">Bóton de barra inteligente</string>
|
||||
<string name="settings__theme__group_custom" comment="Theme group label (%s is custom group name)">Grupo personalizado (%s)</string>
|
||||
<string name="settings__theme__attr_background" comment="Theme attribute label">Color de fondo</string>
|
||||
<string name="settings__theme__attr_backgroundActive" comment="Theme attribute label">Color de fondo (activo)</string>
|
||||
<string name="settings__theme__attr_backgroundPressed" comment="Theme attribute label">Color de fondo (presionado)</string>
|
||||
<string name="settings__theme__attr_foreground" comment="Theme attribute label">Color principal</string>
|
||||
<string name="settings__theme__attr_foregroundAlt" comment="Theme attribute label">Color principal (alternativo)</string>
|
||||
<string name="settings__theme__attr_foregroundPressed" comment="Theme attribute label">Color principal (presionado)</string>
|
||||
<string name="settings__theme__attr_showBorder" comment="Theme attribute label">Ver borde</string>
|
||||
<string name="settings__theme__attr_colorPrimary" comment="Theme attribute label">Color principal</string>
|
||||
<string name="settings__theme__attr_colorPrimaryDark" comment="Theme attribute label">Color principal (oscuro)</string>
|
||||
<string name="settings__theme__attr_navBarColor" comment="Theme attribute label">Color de la barra de navegación</string>
|
||||
<string name="settings__theme__attr_navBarLight" comment="Theme attribute label">Color principal de la barra de navegación en modo oscuro</string>
|
||||
<string name="settings__theme__attr_semiTransparentColor" comment="Theme attribute label">Color semitransparente</string>
|
||||
<string name="settings__theme__attr_textColor" comment="Theme attribute label">Color de texto</string>
|
||||
<string name="settings__theme__attr_custom" comment="Theme attribute label (%s is custom attribute name)">Atributo personalizado (%s)</string>
|
||||
<string name="settings__keyboard__title" comment="Title of Keyboard preferences fragment">Preferencias de teclado</string>
|
||||
<string name="pref__keyboard__group_keys__label" comment="Preference group title">Teclas</string>
|
||||
<string name="pref__keyboard__number_row__label" comment="Preference title">Número de filas</string>
|
||||
@@ -105,6 +144,10 @@
|
||||
<string name="pref__keyboard__hint_mode__enabled_hint_priority" comment="Preference value">Habilitado (Prioridad en la sugerencia)</string>
|
||||
<string name="pref__keyboard__hint_mode__enabled_accent_priority" comment="Preference value">Habilitado (Prioridad en el acento)</string>
|
||||
<string name="pref__keyboard__hint_mode__enabled_smart_priority" comment="Preference value">Habilitado (Priorización inteligente)</string>
|
||||
<string name="pref__keyboard__utility_key_action__switch_to_emojis" comment="Preference value">Cambiar a emojis</string>
|
||||
<string name="pref__keyboard__utility_key_action__switch_language" comment="Preference value">Cambiar idioma</string>
|
||||
<string name="pref__keyboard__utility_key_action__switch_keyboard_app" comment="Preference value">Cambiar aplicación de teclado</string>
|
||||
<string name="pref__keyboard__utility_key_action__dynamic_switch_language_emojis" comment="Preference value">Dinámico: cambiar a emojis / cambiar de idioma</string>
|
||||
<string name="pref__keyboard__font_size_multiplier_portrait__label" comment="Preference title">Multiplicador del tamaño de la fuente (vertical)</string>
|
||||
<string name="pref__keyboard__font_size_multiplier_landscape__label" comment="Preference title">Multiplicador del tamaño de la fuente (horizontal)</string>
|
||||
<string name="pref__keyboard__group_layout__label" comment="Preference group title">Distribución</string>
|
||||
@@ -122,7 +165,6 @@
|
||||
<string name="pref__keyboard__height_factor__extra_tall" comment="Preference value">Muy alto</string>
|
||||
<string name="pref__keyboard__height_factor__custom" comment="Preference value">Personalizado</string>
|
||||
<string name="pref__keyboard__height_factor_custom__label" comment="Preference title">Valor de altura del teclado personalizada</string>
|
||||
<string name="pref__keyboard__bottom_offset__label" comment="Preference title">Desplazamiento del fondo (para pantallas curvas)</string>
|
||||
<string name="pref__keyboard__group_keypress__label" comment="Preference group title">Pulsación de tecla</string>
|
||||
<string name="pref__keyboard__sound_enabled__label" comment="Preference title">Sonido al pulsar la tecla</string>
|
||||
<string name="pref__keyboard__sound_volume__label" comment="Preference title">Volumen del sonido al pulsar la tecla</string>
|
||||
@@ -154,16 +196,21 @@
|
||||
<string name="pref__glide__enabled__summary" comment="Preference summary">Escriba una palabra deslizando su dedo a través de sus letras</string>
|
||||
<string name="pref__glide__show_trail__label" comment="Preference title">[NYI] Mostrar recorrido del deslizamiento</string>
|
||||
<string name="pref__glide__show_trail__summary" comment="Preference summary">Desaparecerá después de cada palabra</string>
|
||||
<string name="pref__gestures__title" comment="Preference group title">Gestos</string>
|
||||
<string name="pref__gestures__general_title" comment="Preference group title">Gestos generales</string>
|
||||
<string name="pref__gestures__space_bar_title" comment="Preference group title">Gestos en la barra de espacio</string>
|
||||
<string name="pref__gestures__other_title" comment="Preference group title">Otros gestos / umbrales de gestos</string>
|
||||
<string name="pref__gestures__swipe_action__no_action" comment="Preference value for swipe action">Sin acción</string>
|
||||
<string name="pref__gestures__swipe_action__delete_characters_precisely" comment="Preference value for swipe action">Eliminar caracteres con precisión</string>
|
||||
<string name="pref__gestures__swipe_action__delete_word" comment="Preference value for swipe action">Eliminar palabra actual</string>
|
||||
<string name="pref__gestures__swipe_action__delete_words_precisely" comment="Preference value for swipe action">Eliminar palabras con precisión</string>
|
||||
<string name="pref__gestures__swipe_action__hide_keyboard" comment="Preference value for swipe action">Ocultar teclado</string>
|
||||
<string name="pref__gestures__swipe_action__insert_space" comment="Preference value for swipe action">Insertar espacio</string>
|
||||
<string name="pref__gestures__swipe_action__move_cursor_up" comment="Preference value for swipe action">Mover cursor hacia arriba</string>
|
||||
<string name="pref__gestures__swipe_action__move_cursor_down" comment="Preference value for swipe action">Mover cursor hacia abajo</string>
|
||||
<string name="pref__gestures__swipe_action__move_cursor_left" comment="Preference value for swipe action">Mover curso hacia la izquierda</string>
|
||||
<string name="pref__gestures__swipe_action__move_cursor_right" comment="Preference value for swipe action">Mover curso hacia la derecha</string>
|
||||
<string name="pref__gestures__swipe_action__move_cursor_start_of_line" comment="Preference value for swipe action">Mover el cursor al principio de la línea</string>
|
||||
<string name="pref__gestures__swipe_action__move_cursor_end_of_line" comment="Preference value for swipe action">Mover el cursor al final de la línea</string>
|
||||
<string name="pref__gestures__swipe_action__shift" comment="Preference value for swipe action">Shift</string>
|
||||
<string name="pref__gestures__swipe_action__switch_to_prev_keyboard" comment="Preference value for swipe action">Cambiar al teclado anterior</string>
|
||||
<string name="pref__gestures__swipe_action__switch_to_prev_subtype" comment="Preference value for swipe action">Cambiar al subtipo anterior</string>
|
||||
@@ -175,6 +222,7 @@
|
||||
<string name="pref__gestures__space_bar_swipe_up__label" comment="Preference title">Deslizar arriba en la barra espaciadora</string>
|
||||
<string name="pref__gestures__space_bar_swipe_left__label" comment="Preference title">Deslizar a la izquierda en la barra espaciadora</string>
|
||||
<string name="pref__gestures__space_bar_swipe_right__label" comment="Preference title">Deslizar a la derecha en la barra espaciadora</string>
|
||||
<string name="pref__gestures__space_bar_long_press__label" comment="Preference title">Pulsación larga de la barra espaciadora</string>
|
||||
<string name="pref__gestures__delete_key_swipe_left__label" comment="Preference title">Eliminar deslizamiento de la tecla a la izquierda</string>
|
||||
<string name="pref__gestures__swipe_velocity_threshold__label" comment="Preference title">Umbral de la velocidad de deslizamiento</string>
|
||||
<string name="pref__gestures__swipe_velocity_threshold__very_slow" comment="Preference value for swipe velocity threshold">Muy lento</string>
|
||||
@@ -203,6 +251,26 @@
|
||||
<string name="about__view_source_code" comment="Label of View source code button in About">Código fuente</string>
|
||||
<string name="about__license__title" comment="Title of Open-source licenses dialog">Licencias de código abierto</string>
|
||||
<!-- Assets strings -->
|
||||
<plurals name="assets__file__authors">
|
||||
<item quantity="one">Autor</item>
|
||||
<item quantity="other">Autores</item>
|
||||
</plurals>
|
||||
<string name="assets__file__name">Nombre</string>
|
||||
<string name="assets__file__source">Fuente</string>
|
||||
<string name="assets__action__add">Agregar</string>
|
||||
<string name="assets__action__cancel">Cancelar</string>
|
||||
<string name="assets__action__cancel_confirm_title">Confirmar cancelación</string>
|
||||
<string name="assets__action__cancel_confirm_message">¿Está seguro de que desea descartar los cambios no guardados? Esta acción no se puede deshacer una vez ejecutada.</string>
|
||||
<string name="assets__action__delete">Borrar</string>
|
||||
<string name="assets__action__delete_confirm_title">Confirmar borrado</string>
|
||||
<string name="assets__action__delete_confirm_message">¿Está seguro que quiere borrar \"%s\"? Esta acción no se puede deshacer.</string>
|
||||
<string name="assets__action__edit">Editar</string>
|
||||
<string name="assets__action__export">Exportar</string>
|
||||
<string name="assets__action__import">Importar</string>
|
||||
<string name="assets__action__no">No</string>
|
||||
<string name="assets__action__save">Guardar</string>
|
||||
<string name="assets__action__yes">Si</string>
|
||||
<string name="assets__error__invalid">Inválido</string>
|
||||
<!-- Setup UI strings -->
|
||||
<string name="setup__title" comment="Title of Setup">Configuración</string>
|
||||
<string name="setup__prev_button" comment="Label of Previous button in Setup (try to find a short translation due to limited space in UI)">Anterior</string>
|
||||
|
||||
@@ -1,8 +1,11 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<resources>
|
||||
<string name="app_name">فلوریس بورد</string>
|
||||
<string name="key__phone_pause" comment="Label for the Pause key in the telephone keyboard layout">مکث</string>
|
||||
<string name="key__phone_wait" comment="Label for the Wait key in the telephone keyboard layout">صبرکنید</string>
|
||||
<string name="key_popup__threedots_alt" comment="Content description for the three-dots icon in a key popup">نماد سه نقطه. در صورت مشاهده ، نشان می دهد که در صورت فشار بیشتر می توان از حروف بیشتری استفاده کرد.</string>
|
||||
<!-- One-handed strings -->
|
||||
<string name="one_handed__close_btn_content_description" comment="Content description for the one-handed close button">بستن حالت یک دستی.</string>
|
||||
<string name="one_handed__move_start_btn_content_description" comment="Content description for the one-handed move to left button">جابهجایی صفحه کلید به سمت چپ.</string>
|
||||
<string name="one_handed__move_end_btn_content_description" comment="Content description for the one-handed move to right button">جابهجایی صفحه کلید به سمت راست.</string>
|
||||
<!-- Private mode info dialog strings -->
|
||||
@@ -11,7 +14,7 @@
|
||||
<string name="private_mode_dialog__text" comment="Text of the private mode dialog">The icon you just clicked at indicates that FlorisBoard works in the private mode. This means that all features which require to process and temporarily save your input stop working. This applies at minimum to the following features (if they\'ve been turned on previously):\n\n - Next word algorithm adjustments\n\n - Clipboard paste suggestions\n\n - Clipboard history\n\nFlorisBoard enters this mode either if an app requests it or if it was specifically enabled in the advanced settings.</string>
|
||||
-->
|
||||
<!-- Media strings -->
|
||||
<string name="media__tab__emojis" comment="Tab description for emojis in the media UI">ایموجی ها</string>
|
||||
<string name="media__tab__emojis" comment="Tab description for emojis in the media UI">شکلکها</string>
|
||||
<string name="media__tab__emoticons" comment="Tab description for emoticons in the media UI">Emoticons</string>
|
||||
<string name="media__tab__kaomoji" comment="Tab description for kaomoji in the media UI">Kaomoji</string>
|
||||
<!-- Emoji strings -->
|
||||
@@ -22,17 +25,23 @@
|
||||
<string name="emoji__category__travel_places" comment="Emoji category name">صفر & مکان ها</string>
|
||||
<string name="emoji__category__activities" comment="Emoji category name">فعالیت ها</string>
|
||||
<string name="emoji__category__objects" comment="Emoji category name">اشیاء</string>
|
||||
<string name="emoji__category__symbols" comment="Emoji category name">نشانه ها</string>
|
||||
<string name="emoji__category__symbols" comment="Emoji category name">نمادها</string>
|
||||
<string name="emoji__category__flags" comment="Emoji category name">پرچم ها</string>
|
||||
<!-- Smartbar strings -->
|
||||
<string name="smartbar__quick_action_toggle__alt" comment="Content description for the quick action toggle button in Smartbar">ضامن اقدام سریع. در صورت فشار ، بین پیشنهادات کلمه و دکمه های اقدام سریع جابجا می شود.</string>
|
||||
<string name="smartbar__quick_action__exit_editing" comment="Content-description for the exit editing layout button in Smartbar">خروج از صفحه ویرایش متن.</string>
|
||||
<string name="smartbar__quick_action__one_handed_mode" comment="Content-description for the one-handed quick action in Smartbar">ضامن تغییر حالت یک دستی.</string>
|
||||
<string name="smartbar__quick_action__open_settings" comment="Content-description for the settings quick action in Smartbar">باز کردن تنظیمات.</string>
|
||||
<string name="smartbar__quick_action__switch_to_editing_context" comment="Content-description for the editing quick action in Smartbar">تغییر به صفحه ویرایش متن.</string>
|
||||
<string name="smartbar__quick_action__switch_to_media_context" comment="Content-description for the media quick action in Smartbar">تغییر به حالت ورودی رسانه.</string>
|
||||
<string name="smartbar__quick_action__undo" comment="Content-description for the undo quick action in Smartbar">دکمه برگرداندن برای برگشتن به انجام آخرین عمل</string>
|
||||
<string name="smartbar__quick_action__redo" comment="Content-description for the redo quick action in Smartbar">دکمه بازگردانی برای بازگشت به آخرین عمل برگشت داده شده</string>
|
||||
<string name="smartbar__quick_action__private_mode" comment="Content-description for the private mode button in Smartbar">اگر معلوم باشد، نشان می دهد که حالت خصوصی فعال است. وقتی روی آن کلیک شود، اطلاعاتی درباره حالت خصوصی نشان می دهد.</string>
|
||||
<string name="smartbar__quick_action__private_mode" comment="Content-description for the private mode button in Smartbar">در ضورت قابل مشاهده بودن، نشان میـدهد که حالت خصوصی فعال است. در صورت ضربه روی ان، اطلاعاتی درباره حالت خصوصی نشان میدهد.</string>
|
||||
<!-- Settings UI strings -->
|
||||
<string name="settings__title" comment="Title of Settings">تنظیمات</string>
|
||||
<string name="settings__menu" comment="Hint of top-right three-dot icon in Settings">گزینههای بیشتر</string>
|
||||
<string name="settings__menu_help" comment="Three-dot menu entry for Help and Feedback web link">کمک & بازخورد</string>
|
||||
<string name="settings__help" comment="General label for help buttons in Settings">راهنمایی</string>
|
||||
<string name="settings__navigation__home" comment="Long-press hint of bottom nav item Home in Settings">خانه</string>
|
||||
<string name="settings__navigation__keyboard" comment="Long-press hint of bottom nav item Keyboard in Settings">صفحه کلید</string>
|
||||
<string name="settings__navigation__typing" comment="Long-press hint of bottom nav item Typing in Settings">نوشتن</string>
|
||||
@@ -41,32 +50,94 @@
|
||||
<string name="settings__default" comment="General string which is used when a preference has the default value set">پیشفرض</string>
|
||||
<string name="settings__system_default" comment="General string which is used when a preference has the system default value set">پیشفرض سیستم</string>
|
||||
<string name="settings__home__title" comment="Title of the Home fragment">خوش آمدید به %s</string>
|
||||
<string name="settings__home__ime_not_enabled" comment="Error message shown in Home fragment when FlorisBoard is not enabled in the system">فلوریس بورد در سیستم به عنوان روش ورودی فعلا نیست و به این علت به عنوان روش ورودی قابل انتخاب نیست. برای حل این مشکل اینجا کلیک کنید.</string>
|
||||
<string name="settings__home__ime_not_selected" comment="Warning message shown in Home fragment when FlorisBoard is not selected as the default keyboard">فلوریس بود به عنوان روش ورودی پیش فرض انتخاب نشده. برای حل این مشکل اینجا کلیک کنید.</string>
|
||||
<string name="settings__home__contribute" comment="Contributing message shown in Home fragment">با تشکر از شما برای امتحان فلوریس بورد! به علت قرار داشت در مراحل آلفا بود برای همین فاقد یک سری از ویژگی های اصلی است. اگر مشکلی پیدا کردید یا می خواهید پیشنهادی ارائه دهید ، لطفاً برنامه را در GitHub مشاهده و برای مشکل issue طراحی کنید. این کار به بهتر کردن فلوریس بورد کمک می کند. با تشکر!</string>
|
||||
<string name="settings__localization__title" comment="Title of languages and layout box in the Typing fragment">زبان ها & چیدمان های صفحه کلید</string>
|
||||
<string name="settings__localization__subtype_no_subtypes_configured_warning" comment="Warning message that no subtype has been defined in the Typing fragment">به نظر میرسد که هیچگونه زیرگروه دیگری را انتخاب نکرده اید. به همین علت زیرگروه English/QWERTY استفاده خواهد شد!</string>
|
||||
<string name="settings__localization__subtype_add" comment="Subtype dialog add button">افزودن</string>
|
||||
<string name="settings__localization__subtype_add_title" comment="Title of subtype dialog when adding a new subtype">افزودن زیر-نوعی</string>
|
||||
<string name="settings__localization__subtype_apply" comment="Subtype dialog apply button">اعمال</string>
|
||||
<string name="settings__localization__subtype_cancel" comment="Subtype dialog cancel button">لغو</string>
|
||||
<string name="settings__localization__subtype_delete" comment="Subtype dialog delete button">حذف</string>
|
||||
<string name="settings__localization__subtype_edit_title" comment="Title of subtype dialog when editing an existing subtype">ویرایش زیر-نوعی</string>
|
||||
<string name="settings__localization__subtype_locale" comment="Label for locale dropdown in subtype dialog">منطقه</string>
|
||||
<string name="settings__localization__subtype_layout" comment="Label for keyboard layout dropdown in subtype dialog">چیدمان صفحه کلید</string>
|
||||
<string name="settings__localization__subtype_error_already_exists" comment="Error message shown in subtype dialog when a subtype to add already exists">این زیرنوع درحال حاضر وجود دارد!</string>
|
||||
<string name="settings__theme__title" comment="Title of the Theme fragment">طرح زمینه صفحه کلید</string>
|
||||
<string name="settings__theme__undefined" comment="General string for an undefined preference value">تعریف نشده</string>
|
||||
<string name="settings__theme__background" comment="General label for a background preference">رنگ پسزمینه</string>
|
||||
<string name="settings__theme__background_active" comment="General label for an active background preference">رنگ پسزمینه هنگامی که فعال است</string>
|
||||
<string name="settings__theme__background_pressed" comment="General label for a pressed background preference">رنگ پسزمینه هنگامی که انتخاب شود</string>
|
||||
<string name="settings__theme__foreground" comment="General label for a foreground preference">رنگ رویزمینه</string>
|
||||
<string name="settings__theme__foreground_alt" comment="General label for an alternate foreground preference">رنگ رویزمینه (جایگزین)</string>
|
||||
<string name="settings__theme__foreground_capslock" comment="General label for a capslock foreground preference">رنگ رویزمینه (caps lock)</string>
|
||||
<string name="settings__theme__dialog_title" comment="Title of the color selection dialog for a single theme preference">انتخاب یک رنگ</string>
|
||||
<string name="pref__theme__mode__label" comment="Label of the theme mode preference">حالت طرحزمینه</string>
|
||||
<string name="pref__theme__mode__always_day" comment="Preference value for theme mode">همیشه روز</string>
|
||||
<string name="pref__theme__mode__always_night" comment="Preference value for theme mode">همیشه شب</string>
|
||||
<string name="pref__theme__mode__follow_system" comment="Preference value for theme mode">پیروی از سیستم</string>
|
||||
<string name="pref__theme__mode__follow_time" comment="Preference value for theme mode">پیروی از زمان</string>
|
||||
<string name="pref__theme__sunrise_time__label" comment="Label of the sunrise time preference">زمان طلوع</string>
|
||||
<string name="pref__theme__sunset_time__label" comment="Label of the sunset time preference">زمان غروب</string>
|
||||
<string name="pref__theme__day" comment="Label of the day group (day means light theme)">طرحزمینه روز</string>
|
||||
<string name="pref__theme__night" comment="Label of the night group (night means dark theme)">طرحزمینه شب</string>
|
||||
<string name="pref__theme__any_theme__label" comment="Label of the theme selector preference">طرح زمینه انتخاب شده</string>
|
||||
<string name="pref__theme__any_theme_adapt_to_app__label" comment="Label of the theme adapt to app preference">تطبیق دادن رنگ ها به برنامه</string>
|
||||
<string name="pref__theme__any_theme_adapt_to_app__summary" comment="Summary of the theme adapt to app preference">رنگ های طرح زمینه بر اساس برنامه های فعلی تطبیق داده شوند، اگر برنامه مورد نظر از این پشتیبانی کند.</string>
|
||||
<string name="pref__theme__source_assets" comment="Label for the theme source field">ابزار های برنامه فلوریس بورد</string>
|
||||
<string name="pref__theme__source_internal" comment="Label for the theme source field">حافظه داخلی</string>
|
||||
<string name="pref__theme__source_external" comment="Label for the theme source field">ارائه دهنده خارجی</string>
|
||||
<string name="settings__theme_manager__title_day" comment="Title of the theme manager activity for day theme">مدیریت طرحضمینه (روز)</string>
|
||||
<string name="settings__theme_manager__title_night" comment="Title of the theme manager activity for night theme">مدیریت طرحضمینه (شب)</string>
|
||||
<string name="settings__theme_manager__create_empty" comment="Label of the Create empty FAB action">ساختن طرحزمینه خالی</string>
|
||||
<string name="settings__theme_manager__create_from_selected" comment="Label of the Create from selected FAB action">ساختن از طرحزمینه انتخاب شده</string>
|
||||
<string name="settings__theme_manager__theme_custom_title" comment="Title template for a custom theme">سفارشی (بر اساس %s)</string>
|
||||
<string name="settings__theme_manager__theme_new_title" comment="Title template for a new theme">طرحزمینه جدید</string>
|
||||
<string name="settings__theme_editor__title" comment="Title of the edit theme activity">ویرایش طرح زمینه</string>
|
||||
<string name="settings__theme_editor__name_label" comment="Label of name input">نام</string>
|
||||
<string name="settings__theme_editor__type_label" comment="Label of type input">نوع</string>
|
||||
<string name="settings__theme_editor__add_group_dialog_title" comment="Title of the add group dialog in the theme editor">افزودن گروه</string>
|
||||
<string name="settings__theme_editor__edit_group_dialog_title" comment="Title of the edit group dialog in the theme editor">ویرایش گروه</string>
|
||||
<string name="settings__theme_editor__add_attr_dialog_title" comment="Title of the add attribute dialog in the theme editor">افزودن ویژگی</string>
|
||||
<string name="settings__theme_editor__edit_attr_dialog_title" comment="Title of the edit attribute dialog in the theme editor">ویرایش ویژگی</string>
|
||||
<string name="settings__theme_editor__value_type_reference" comment="Theme value type">مرجع</string>
|
||||
<string name="settings__theme_editor__value_type_reference_group" comment="Theme value type sub-field">گروه</string>
|
||||
<string name="settings__theme_editor__value_type_reference_attr" comment="Theme value type sub-field">ویژگی</string>
|
||||
<string name="settings__theme_editor__value_type_solid_color" comment="Theme value type">رنگ ثابت</string>
|
||||
<string name="settings__theme_editor__value_type_on_off" comment="Theme value type">تعویض</string>
|
||||
<string name="settings__theme_editor__value_type_on_off_state" comment="Theme value type sub-field">حالت</string>
|
||||
<string name="settings__theme_editor__value_type_other" comment="Theme value type">ديگر</string>
|
||||
<string name="settings__theme_editor__value_type_other_text" comment="Theme value type sub-field">متن</string>
|
||||
<string name="settings__theme_editor__value_preview_content_description" comment="Theme value preview content description">پیشنمایش مقدار طرح زمینه</string>
|
||||
<string name="settings__theme_editor__error_theme_label_empty" comment="Error text for an empty theme label">لطفا نام طرح زمینه را وارد کنید.</string>
|
||||
<string name="settings__theme_editor__error_group_name" comment="Error text for an invalid group name">لطفا نام گروهی را وارد کنید که فقط حاوی حروف (a-z و/یا A-Z) باشد، دونقطه (:) برای زیرگروه ها و یا اعداد (0-9)، آکولاد (~) و زیرخط (_) برای عنوان هر کلید می باشد.</string>
|
||||
<string name="settings__theme_editor__error_group_name_empty" comment="Error text for an empty group name">لطفا یک نام گروه وارد کنید.</string>
|
||||
<string name="settings__theme_editor__error_group_name_already_exists" comment="Error text for a duplicate group name">گروهی با این نام در طراحی زمینه وجود دارد. لطفا نام دیگری انتخاب کنید.</string>
|
||||
<string name="settings__theme_editor__error_attr_name" comment="Error text for an invalid attribute name">لطفا نام یک ویژگی را وارد کنید که فقط حاوی حروف a-z و/یا A-Z باشد.</string>
|
||||
<string name="settings__theme_editor__error_attr_name_empty" comment="Error text for an empty attribute name">لطفا نام ویژگی را وارد کنید.</string>
|
||||
<string name="settings__theme_editor__error_attr_name_already_exists" comment="Error text for a duplicate attribute name">خصوصیتی با این نام در طراحی زمینه وجود دارد. لطفا مورد دیگری را مشخص کنید.</string>
|
||||
<string name="settings__theme__group_window" comment="Theme group label">پنجره & سیستم</string>
|
||||
<string name="settings__theme__group_keyboard" comment="Theme group label">صفحهکلید</string>
|
||||
<string name="settings__theme__group_key" comment="Theme group label">کلید</string>
|
||||
<string name="settings__theme__group_key_enter" comment="Theme group label">کلید را وارد کنید</string>
|
||||
<string name="settings__theme__group_key_popup" comment="Theme group label">پاپآپ کلید</string>
|
||||
<string name="settings__theme__group_key_shift" comment="Theme group label">کلید Shift</string>
|
||||
<string name="settings__theme__group_private_mode" comment="Theme group label">حالت خصوصی</string>
|
||||
<string name="pref__theme__showKeyBorder_title" comment="Title of Show Key Border preference">حاشیه کلید</string>
|
||||
<string name="pref__theme__showKeyBorder_summary" comment="Summary of Show Key Border preference">روی روشن بزارید تا حاشیه را نمایش دهد یا روی خاموش بزنید تا مخفیاش کند</string>
|
||||
<string name="settings__theme__group_key_specific" comment="Theme group label (%s is specific modifier)">کلید (%s)</string>
|
||||
<string name="settings__theme__group_media" comment="Theme group label">متن رسانه</string>
|
||||
<string name="settings__theme__group_oneHanded" comment="Theme group label">یک دستی</string>
|
||||
<string name="settings__theme__group_popup" comment="Theme group label">پنجره</string>
|
||||
<string name="settings__theme__group_privateMode" comment="Theme group label">حالت خصوصی</string>
|
||||
<string name="settings__theme__group_smartbar" comment="Theme group label">نوار هوشمند</string>
|
||||
<string name="settings__theme__group_smartbarButton" comment="Theme group label">دکمه نوار نوشمند</string>
|
||||
<string name="settings__theme__group_extractEditLayout" comment="Theme group label">حالت چیدمان تمام صفحه افقی</string>
|
||||
<string name="settings__theme__group_extractActionButton" comment="Theme group label">دکمه عملیات در حالت تمام صفحه افقی</string>
|
||||
<string name="settings__theme__group_custom" comment="Theme group label (%s is custom group name)">گروه سفارشی (%s)</string>
|
||||
<string name="settings__theme__attr_background" comment="Theme attribute label">رنگ پسزمینه</string>
|
||||
<string name="settings__theme__attr_backgroundActive" comment="Theme attribute label">رنگ پس زمینه (هنگام فعال بودن)</string>
|
||||
<string name="settings__theme__attr_backgroundPressed" comment="Theme attribute label">رنگ پس زمینه (در صورت فشار)</string>
|
||||
<string name="settings__theme__attr_foreground" comment="Theme attribute label">رنگ رویزمینه</string>
|
||||
<string name="settings__theme__attr_foregroundAlt" comment="Theme attribute label">رنگ رویزمینه (جایگزین)</string>
|
||||
<string name="settings__theme__attr_foregroundPressed" comment="Theme attribute label">رنگ پس زمینه (در صورت فشار)</string>
|
||||
<string name="settings__theme__attr_showBorder" comment="Theme attribute label">نمایش مرزها</string>
|
||||
<string name="settings__theme__attr_colorPrimary" comment="Theme attribute label">رنگ اصلی</string>
|
||||
<string name="settings__theme__attr_colorPrimaryDark" comment="Theme attribute label">رنگ اصلی (تاریک)</string>
|
||||
<string name="settings__theme__attr_colorAccent" comment="Theme attribute label">رنگ ثانویه</string>
|
||||
<string name="settings__theme__attr_navBarColor" comment="Theme attribute label">رنگ نوار پیمایش</string>
|
||||
<string name="settings__theme__attr_navBarLight" comment="Theme attribute label">پیش زمینه تاریک نوار پیمایش</string>
|
||||
<string name="settings__theme__attr_semiTransparentColor" comment="Theme attribute label">رنگ نیمه شفاف</string>
|
||||
<string name="settings__theme__attr_textColor" comment="Theme attribute label">رنگ متن</string>
|
||||
<string name="settings__theme__attr_custom" comment="Theme attribute label (%s is custom attribute name)">مشخصات سفارشی (%s)</string>
|
||||
<string name="settings__keyboard__title" comment="Title of Keyboard preferences fragment">تنظیمات صفحهکلید</string>
|
||||
<string name="pref__keyboard__group_keys__label" comment="Preference group title">کلیدها</string>
|
||||
<string name="pref__keyboard__number_row__label" comment="Preference title">ردیف عدد</string>
|
||||
@@ -77,6 +148,13 @@
|
||||
<string name="pref__keyboard__hint_mode__enabled_hint_priority" comment="Preference value">فعال شد(راهنما در اولویت)</string>
|
||||
<string name="pref__keyboard__hint_mode__enabled_accent_priority" comment="Preference value">فعال شد(راهنما اولویت بندی شده)</string>
|
||||
<string name="pref__keyboard__hint_mode__enabled_smart_priority" comment="Preference value">فعال شد(اولولیت بندی هوشمند)</string>
|
||||
<string name="pref__keyboard__utility_key_enabled__label" comment="Preference title">نشان دادن کلید ابزار</string>
|
||||
<string name="pref__keyboard__utility_key_enabled__summary" comment="Preference summary">یک کلید ابزار قابل تنظیم در کنار نوار فاصله نشان می دهد</string>
|
||||
<string name="pref__keyboard__utility_key_action__label" comment="Preference title">عملکرد کلید ابزار</string>
|
||||
<string name="pref__keyboard__utility_key_action__switch_to_emojis" comment="Preference value">تغییر به شکلکها</string>
|
||||
<string name="pref__keyboard__utility_key_action__switch_language" comment="Preference value">تغییر زبان</string>
|
||||
<string name="pref__keyboard__utility_key_action__switch_keyboard_app" comment="Preference value">تغییر برنامه کیبورد</string>
|
||||
<string name="pref__keyboard__utility_key_action__dynamic_switch_language_emojis" comment="Preference value">متغیر: تغییر به شکلکها / تغییر زبان</string>
|
||||
<string name="pref__keyboard__font_size_multiplier_portrait__label" comment="Preference title">اندازه فونت چند برابری(عمودی)</string>
|
||||
<string name="pref__keyboard__font_size_multiplier_landscape__label" comment="Preference title">اندازه فونت چند برابری(افقی)</string>
|
||||
<string name="pref__keyboard__group_layout__label" comment="Preference group title">چیدمان</string>
|
||||
@@ -84,6 +162,10 @@
|
||||
<string name="pref__keyboard__one_handed_mode__off" comment="Preference value">خاموش</string>
|
||||
<string name="pref__keyboard__one_handed_mode__right" comment="Preference value">حالت دست راستی</string>
|
||||
<string name="pref__keyboard__one_handed_mode__left" comment="Preference value">حالت دست چپی</string>
|
||||
<string name="pref__keyboard__landscape_input_ui_mode__label" comment="Preference value">ورودی تمام صفحه افقی</string>
|
||||
<string name="pref__keyboard__landscape_input_ui_mode__never_show" comment="Preference value">هرگز نشان نده</string>
|
||||
<string name="pref__keyboard__landscape_input_ui_mode__always_show" comment="Preference value">همیشه نشان بده</string>
|
||||
<string name="pref__keyboard__landscape_input_ui_mode__dynamically_show" comment="Preference value">به صورت پویا نشان بده</string>
|
||||
<string name="pref__keyboard__height_factor__label" comment="Preference title">ارتفاع صفحه کلید</string>
|
||||
<string name="pref__keyboard__height_factor__extra_short" comment="Preference value">بیشتر-کوتاه</string>
|
||||
<string name="pref__keyboard__height_factor__short" comment="Preference value">کوتاه</string>
|
||||
@@ -94,7 +176,8 @@
|
||||
<string name="pref__keyboard__height_factor__extra_tall" comment="Preference value">بیشتر-بلند</string>
|
||||
<string name="pref__keyboard__height_factor__custom" comment="Preference value">سفارشی</string>
|
||||
<string name="pref__keyboard__height_factor_custom__label" comment="Preference title">مقدار ارتفاع سفارشی صفحهکلید</string>
|
||||
<string name="pref__keyboard__bottom_offset__label" comment="Preference title">فاصله از کف (برای صفحه های منحنی)</string>
|
||||
<string name="pref__keyboard__bottom_offset_portrait__label" comment="Preference title">فاصله از پایین (افقی)</string>
|
||||
<string name="pref__keyboard__bottom_offset_landscape__label" comment="Preference title">فاصله از پایین (عمودی)</string>
|
||||
<string name="pref__keyboard__group_keypress__label" comment="Preference group title">فشردن کلید</string>
|
||||
<string name="pref__keyboard__sound_enabled__label" comment="Preference title">صدای فشردن کلید</string>
|
||||
<string name="pref__keyboard__sound_volume__label" comment="Preference title">میزان صدای فشردن کلید</string>
|
||||
@@ -109,6 +192,8 @@
|
||||
<string name="pref__suggestion__title" comment="Preference group title">پیشنهادات</string>
|
||||
<string name="pref__suggestion__enabled__label" comment="Preference title">[NYI] نمایش پیشنهادات حین تایپ کردن</string>
|
||||
<string name="pref__suggestion__enabled__summary" comment="Preference summary">در نوار هوشمند نمایش داده خواهد شد</string>
|
||||
<string name="pref__suggestion__suggest_clipboard_content__label" comment="Preference title">پیشنهادات محتوای کلیپ بورد</string>
|
||||
<string name="pref__suggestion__suggest_clipboard_content__summary" comment="Preference summary">محتوای کلیپ بورد را پیشنهاد کنید تا اگر قبلاً کپی شده است ، جای گذاری شود</string>
|
||||
<string name="pref__suggestion__use_pref_words__label" comment="Preference title">[NYI] پیشنهادات کلمه بعدی</string>
|
||||
<string name="pref__suggestion__use_pref_words__summary" comment="Preference summary">استفاده از کلمه قبلی برای پیشنهادات</string>
|
||||
<string name="pref__correction__title" comment="Preference group title">تصحیح</string>
|
||||
@@ -122,26 +207,115 @@
|
||||
<string name="pref__glide__title" comment="Preference group title">نوشتن گلایدی</string>
|
||||
<string name="pref__glide__enabled__label" comment="Preference title">[NYI] فعال سازی نوشتن گلایدی</string>
|
||||
<string name="pref__glide__enabled__summary" comment="Preference summary">نوشتن حروف با حرکت مداوم و نگه داشتن روی حرف مورد نظر</string>
|
||||
<string name="pref__glide__show_trail__label" comment="Preference title">[NYI] نشان دادن دنباله سر خوردن</string>
|
||||
<string name="pref__glide__show_trail__summary" comment="Preference summary">بعد از هر کلمه ناپدید خواهد شد</string>
|
||||
<string name="pref__gestures__general_title" comment="Preference group title">اشارات کلی</string>
|
||||
<string name="pref__gestures__space_bar_title" comment="Preference group title">دکمه space اشارات</string>
|
||||
<string name="pref__gestures__other_title" comment="Preference group title">دیگر اشارات/ آشارات آستانه</string>
|
||||
<string name="pref__gestures__swipe_action__no_action" comment="Preference value for swipe action">بدون عمل</string>
|
||||
<string name="pref__gestures__swipe_action__delete_characters_precisely" comment="Preference value for swipe action">حذف کردن دقیق حروف</string>
|
||||
<string name="pref__gestures__swipe_action__delete_word" comment="Preference value for swipe action">حذف کلمه کنونی</string>
|
||||
<string name="pref__gestures__swipe_action__delete_words_precisely" comment="Preference value for swipe action">حذف دقیق کلمات</string>
|
||||
<string name="pref__gestures__swipe_action__hide_keyboard" comment="Preference value for swipe action">مخفی کردن کیبورد</string>
|
||||
<string name="pref__gestures__swipe_action__insert_space" comment="Preference value for swipe action">وارد کردن فاصله</string>
|
||||
<string name="pref__gestures__swipe_action__move_cursor_up" comment="Preference value for swipe action">حرکت مکان نما به بالا</string>
|
||||
<string name="pref__gestures__swipe_action__move_cursor_down" comment="Preference value for swipe action">حرکت مکان نما به پایین</string>
|
||||
<string name="pref__gestures__swipe_action__move_cursor_left" comment="Preference value for swipe action">حرکت مکان نما به چپ</string>
|
||||
<string name="pref__gestures__swipe_action__move_cursor_right" comment="Preference value for swipe action">حرکت مکان نما به راست</string>
|
||||
<string name="pref__gestures__swipe_action__move_cursor_start_of_line" comment="Preference value for swipe action">انتقال اشاره به شروع خط</string>
|
||||
<string name="pref__gestures__swipe_action__move_cursor_end_of_line" comment="Preference value for swipe action">انتقال اشاره به پایان خط</string>
|
||||
<string name="pref__gestures__swipe_action__shift" comment="Preference value for swipe action">شیفت</string>
|
||||
<string name="pref__gestures__swipe_action__show_input_method_picker" comment="Preference value for swipe action">نمایش حالت انتخاب کننده</string>
|
||||
<string name="pref__gestures__swipe_action__switch_to_prev_keyboard" comment="Preference value for swipe action">تعویض به صفحه کلید قبلی</string>
|
||||
<string name="pref__gestures__space_bar_swipe_up__label" comment="Preference title">کشیدن فاصله</string>
|
||||
<string name="pref__gestures__swipe_action__switch_to_prev_subtype" comment="Preference value for swipe action">تغییر به زیر گروه قبلی</string>
|
||||
<string name="pref__gestures__swipe_action__switch_to_next_subtype" comment="Preference value for swipe action">تغییر به زیرگروه بعدی</string>
|
||||
<string name="pref__gestures__swipe_up__label" comment="Preference title">به بالا کشیدن</string>
|
||||
<string name="pref__gestures__swipe_down__label" comment="Preference title">به پایین بکشید</string>
|
||||
<string name="pref__gestures__swipe_left__label" comment="Preference title">به چپ بکشید</string>
|
||||
<string name="pref__gestures__swipe_right__label" comment="Preference title">به راست بکشید</string>
|
||||
<string name="pref__gestures__space_bar_swipe_up__label" comment="Preference title">کشیدن نوار فاصله به بالا</string>
|
||||
<string name="pref__gestures__space_bar_swipe_left__label" comment="Preference title">کشیدن نوار فاصله به چپ</string>
|
||||
<string name="pref__gestures__space_bar_swipe_right__label" comment="Preference title">کشیدن نوار فاصله به راست</string>
|
||||
<string name="pref__gestures__space_bar_long_press__label" comment="Preference title">نگه داشتن نوار فاصله</string>
|
||||
<string name="pref__gestures__delete_key_swipe_left__label" comment="Preference title">کشیدن دکمه پاک کردن به چپ</string>
|
||||
<string name="pref__gestures__swipe_velocity_threshold__label" comment="Preference title">آستانه سرعت کشیدن</string>
|
||||
<string name="pref__gestures__swipe_velocity_threshold__very_slow" comment="Preference value for swipe velocity threshold">بسیار کند</string>
|
||||
<string name="pref__gestures__swipe_velocity_threshold__slow" comment="Preference value for swipe velocity threshold">کند</string>
|
||||
<string name="pref__gestures__swipe_velocity_threshold__normal" comment="Preference value for swipe velocity threshold">متوسط</string>
|
||||
<string name="pref__gestures__swipe_velocity_threshold__fast" comment="Preference value for swipe velocity threshold">تند</string>
|
||||
<string name="pref__gestures__swipe_velocity_threshold__very_fast" comment="Preference value for swipe velocity threshold">بسیار تند</string>
|
||||
<string name="pref__gestures__swipe_distance_threshold__label" comment="Preference title">آستانه مسافت کشیدن</string>
|
||||
<string name="pref__gestures__swipe_distance_threshold__very_short" comment="Preference value for swipe distance threshold">بسیار کوتاه</string>
|
||||
<string name="pref__gestures__swipe_distance_threshold__short" comment="Preference value for swipe distance threshold">کوتاه</string>
|
||||
<string name="pref__gestures__swipe_distance_threshold__normal" comment="Preference value for swipe distance threshold">متوسط</string>
|
||||
<string name="pref__gestures__swipe_distance_threshold__long" comment="Preference value for swipe distance threshold">طولانی</string>
|
||||
<string name="pref__gestures__swipe_distance_threshold__very_long" comment="Preference value for swipe distance threshold">بسیار طولانی</string>
|
||||
<string name="settings__advanced__title" comment="Title of Advanced settings activity">پیشرفته</string>
|
||||
<string name="pref__advanced__settings_theme__label" comment="Label of Settings theme preference in Advanced">تنظیمات زمینه</string>
|
||||
<string name="pref__advanced__settings_theme__light" comment="Possible value of Settings theme preference in Advanced">روشن</string>
|
||||
<string name="pref__advanced__settings_theme__dark" comment="Possible value of Settings theme preference in Advanced">تاریک</string>
|
||||
<string name="pref__advanced__show_app_icon__label" comment="Label of Show app icon preference in Advanced">قرار دادن آیکون برنامه در لانچر</string>
|
||||
<string name="pref__advanced__force_private_mode__label" comment="Label of Force private mode preference in Advanced">حالت خصوصی اجباری</string>
|
||||
<string name="pref__advanced__force_private_mode__summary" comment="Summary of Force private mode preference in Advanced">هر ویژگی که که باید با ورودی شما کار کنند را موقتا غیرفعال می کند</string>
|
||||
<!-- About UI strings -->
|
||||
<string name="about__title" comment="Title of About activity">درباره</string>
|
||||
<string name="about__app_icon_content_description" comment="Content description of app icon in About">آیکون برنامه فلوریس بورد</string>
|
||||
<string name="about__view_licenses" comment="Label of View licenses button in About">مجوزهای منبع باز</string>
|
||||
<string name="about__view_privacy_policy" comment="Label of View privacy policy button in About">سیاست حفظ حریم خصوصی</string>
|
||||
<string name="about__view_source_code" comment="Label of View source code button in About">کد منبع</string>
|
||||
<string name="about__license__title" comment="Title of Open-source licenses dialog">مجوزهای متن باز</string>
|
||||
<!-- Assets strings -->
|
||||
<plurals name="assets__file__authors">
|
||||
<item quantity="one">سازنده</item>
|
||||
<item quantity="other">سازندگان</item>
|
||||
</plurals>
|
||||
<string name="assets__file__name">نام</string>
|
||||
<string name="assets__file__source">منبع</string>
|
||||
<string name="assets__action__add">اضافه کردن</string>
|
||||
<string name="assets__action__cancel">لغو</string>
|
||||
<string name="assets__action__cancel_confirm_title">تائید لغو</string>
|
||||
<string name="assets__action__cancel_confirm_message">آیا مطمئنید که می خواهید هر یک از تغییرات ذخیره نشده را لغو کنید؟ این عمل در صورت اجرا غیرقابل بازگشت خواهد بود.</string>
|
||||
<string name="assets__action__delete">حذف</string>
|
||||
<string name="assets__action__delete_confirm_title">تائید حذف</string>
|
||||
<string name="assets__action__delete_confirm_message">آیا مطمعنید که می خواهید \"%s\" را حذف کنید؟ این عمل دز صورت اجرا، غیرقابل بازگشت خواهد بود.</string>
|
||||
<string name="assets__action__edit">ویرایش</string>
|
||||
<string name="assets__action__export">استخراج</string>
|
||||
<string name="assets__action__import">واردکردن</string>
|
||||
<string name="assets__action__no">خیر</string>
|
||||
<string name="assets__action__save">ذخیره</string>
|
||||
<string name="assets__action__yes">بله</string>
|
||||
<string name="assets__error__invalid">نامعتبر</string>
|
||||
<!-- Setup UI strings -->
|
||||
<string name="setup__title" comment="Title of Setup">راهاندازی</string>
|
||||
<string name="setup__prev_button" comment="Label of Previous button in Setup (try to find a short translation due to limited space in UI)">قبلی</string>
|
||||
<string name="setup__cancel_button" comment="Label of Cancel button in Setup">لغو</string>
|
||||
<string name="setup__next_button" comment="Label of Next button in Setup (try to find a short translation due to limited space in UI)">بعدی</string>
|
||||
<string name="setup__finish_button" comment="Label of Finish button in Setup">پایان</string>
|
||||
<string name="setup__ok_button" comment="Label of OK button in Setup">تأیید</string>
|
||||
<string name="setup__welcome__title" comment="Title of Welcome fragment in Setup">خوش آمدید!</string>
|
||||
<string name="setup__welcome__intro" comment="Paragraph in Welcome fragment in Setup">ممنون از اینکه FlorisBoard رو امتحان کردین! قبل از اینکه شروع به استفاده کنید، ما هم چیزای همیشگی که باید برای فعال کردنش در تنظیمات انجام بدهید را داریم، تنظیم زبان/چیدمان و… ولی نگران نباشید - تنظیم جادویی شما را در این کار راهنمایی خواد کرد!</string>
|
||||
<string name="setup__welcome__privacy" comment="Paragraph in Welcome fragment in Setup">FlorisBoard به طور کامل به حریم خصوصی شما احترام می گذارد و هیچ اطلاعاتی از کاربر دریافت نمی کند. برای اطلاعات بیشتر به اینجا مراجعه کنید:</string>
|
||||
<string name="setup__welcome__trust" comment="Paragraph in Welcome fragment in Setup">کد سورس FlorisBoard به طور عمومی در دسترس همگان قرار دارد، پس شما می توانید به راحتی اینکه پشت صحنه FlorisBoard چه اتفاقی می افتد را مرور کنید. لینک مخزن را از زیر مشاهده کنید.</string>
|
||||
<string name="setup__welcome__contribute" comment="Paragraph in Welcome fragment in Setup">یک تنظیم پایانی قبل از شروع - اگر شما به ایرادی/خراب شدنی/مشکلی با FlorisBoard برخورد کردید یا درخواست خواصه خود را دارید - به مخزن GitHub که لینکش در زیر واقع شده بروید و مشکل را استناد کنید. این در تجربه به همه کاربران کمک می کند!</string>
|
||||
<string name="setup__welcome__intro" comment="Paragraph in Welcome fragment in Setup">ممنون از اینکه فلوریس بورد را امتحان کردین! قبل از اینکه شروع به استفاده کنید، ما باید یک سری کار های همیشگی را انجام داده و برنامه را در تنظیمات دستگاه فعال کنیم، تنظیم زبان/چیدمان و… ولی نگران نباشید - تنظیم جادویی شما را در این کار راهنمایی خواد کرد!</string>
|
||||
<string name="setup__welcome__privacy" comment="Paragraph in Welcome fragment in Setup">فلوریس بورد به طور کامل به حریم خصوصی شما احترام می گذارد و هیچ اطلاعاتی از کاربر دریافت نمی کند. برای اطلاعات بیشتر به اینجا مراجعه کنید:</string>
|
||||
<string name="setup__welcome__trust" comment="Paragraph in Welcome fragment in Setup">کد منبع فلوریس بورد به طور عمومی در دسترس همگان قرار دارد، پس شما می توانید به راحتی اینکه پشت صحنه فلوریس چه اتفاقی میافتد را مرور کنید. لینک مخزن را از زیر مشاهده کنید.</string>
|
||||
<string name="setup__welcome__contribute" comment="Paragraph in Welcome fragment in Setup">یک تنظیم پایانی قبل از شروع - اگر شما به خطا/خراب شدنی/مشکلی با فلوریس بورد برخورد کردید یا درخواست ویژگی خاصی را دارید - به مخزن GitHub که لینکش در زیر واقع شده بروید و مشکل را استناد کنید. این به تجربه همه کاربران کمک می کند!</string>
|
||||
<string name="setup__welcome__outro" comment="Paragraph in Welcome fragment in Setup">برای شروع راه انداز تنظیمات روی <i>بعدی</i> کلیک کنید.</string>
|
||||
<string name="setup__enable_ime__title" comment="Title of Enable IME fragment in Setup">فعال سازی FlorisBoard</string>
|
||||
<string name="setup__enable_ime__text_before_enabled" comment="Description of state in Enable IME fragment before user enabled">در اندروید هر صفحه کلید سفارشی باید به طور دستی قبل از استفاده فعال شود. روی دکمه زیر کلیک کنید تا به تنظیمات <i>زبان & ورودی</i> بروید، بعد مطمعن شوید که <i>FlorisBoard</i> را چک و فعال کرده اید.</string>
|
||||
<string name="setup__enable_ime__text_after_enabled" comment="Description of state in Enable IME fragment after user enabled">FlorisBoard با موفقیت فعال شد. برای ادامه روی <i>بعدی</i> بزنید!</string>
|
||||
<string name="setup__make_default__title" comment="Title of Make IME default fragment in Setup">تنظیم FlorisBoard به پیشفرض</string>
|
||||
<string name="setup__enable_ime__title" comment="Title of Enable IME fragment in Setup">فعال سازی فبوریس بورد</string>
|
||||
<string name="setup__enable_ime__text_before_enabled" comment="Description of state in Enable IME fragment before user enabled">در اندروید برنامه های کیبورد سفارشی باید به طور دستی قبل از استفاده فعال شوند. روی دکمه زیر کلیک کنید تا به تنظیمات <i>زبان & ورودی</i> بروید، بعد مطمئن شوید که <i>فلوریس بورد</i> را چک و فعال کردهاید.</string>
|
||||
<string name="setup__enable_ime__text_after_enabled" comment="Description of state in Enable IME fragment after user enabled">فلوریس بورد با موفقیت فعال شد. برای ادامه روی <i>بعدی</i> بزنید!</string>
|
||||
<string name="setup__enable_ime__text_button_language_and_input" comment="Label of language and input button in Enable IME fragment">باز کردن زبان & تنظیمات ورودی</string>
|
||||
<string name="setup__make_default__title" comment="Title of Make IME default fragment in Setup">تنظیم فلوریس بورد به پیش فرض</string>
|
||||
<string name="setup__make_default__text_before_switch" comment="Description of state in Make IME default fragment before user switched">هم اکنون فلوریس بورد در سیستم شما فعال شده است. برای استفاده از آن، فلوریس بورد را در بخش انتخاب روش ورودی، انتخاب کنید!</string>
|
||||
<string name="setup__make_default__text_after_switch" comment="Description of state in Make IME default fragment after user switched">با موفقیت کیبورد پیش فرض را به فلوریس بورد تغییر داده شد!</string>
|
||||
<string name="setup__make_default__text_switch_button" comment="Label of switch button in Make IME default fragment">تغییر صفحهکلید</string>
|
||||
<string name="setup__finish__title" comment="Title of Setup finished fragment in Setup">نصب تمام شد!</string>
|
||||
<!-- Crash Dialog strings -->
|
||||
<string name="crash_dialog__title" comment="Title of crash dialog">گزارش خطای فلوریس بورد</string>
|
||||
<string name="crash_dialog__description" comment="Description of crash dialog">با عرض پوزش برای این مشکل ، اما فلوریس بورد به دلیلی غیرمنتظره ای متوفق شده است.\n\n اگر می خواهید این خطا را گزارش کنید ، روی \"کپی در کلیپ بورد\" کلیک کنید ، سپس بر روی دکمه \"باز کردن گزارش اشکال\" کلیک کنید. گزارش اشکال را پر کرده و گزارش را وارد کنید. این امر به بهتر و پایدارتر شدن فلوریس بورد برای همه کمک می کند. متشکرم!</string>
|
||||
<string name="crash_dialog__copy_to_clipboard" comment="Label of Copy to clipboard button in crash dialog">در کلیپ بورد کپی شد</string>
|
||||
<string name="crash_dialog__open_bug_report_form" comment="Label of Open bug report button in crash dialog">باز کردن گزارش خطا توسط (github.com)</string>
|
||||
<string name="crash_dialog__close" comment="Label of Close button in crash dialog">بستن</string>
|
||||
<string name="crash_notification_channel__title" comment="Title of crash notification channel">گزارش های خطای فلوریس بورد</string>
|
||||
<string name="crash_once_notification__title" comment="Title of the notification for a single crash">فلوریس بورد کار خود را متوقف کرده است…</string>
|
||||
<string name="crash_once_notification__body" comment="Body of the notification for a single crash">برای دیدن جزئیات خطا ضربه بزنید</string>
|
||||
<string name="crash_multiple_notification__title" comment="Title of the notification for consecutive crashes">به نظر می رسد فلوریس بورد کار خود را مکرر متوقف می کند…</string>
|
||||
<string name="crash_multiple_notification__body" comment="Body of the notification for consecutive crashes">در خال بازگشت به کیبورد قبلی برای جلو گیری از بروز خطای دوباره. برای مشاهده جزئیات خطا ، ضربه بزنید</string>
|
||||
</resources>
|
||||
|
||||
@@ -60,34 +60,11 @@
|
||||
<string name="settings__localization__subtype_error_already_exists" comment="Error message shown in subtype dialog when a subtype to add already exists">Tämä asettelu on jo lisätty!</string>
|
||||
<string name="settings__theme__title" comment="Title of the Theme fragment">Näppäimistön teema</string>
|
||||
<string name="settings__theme__undefined" comment="General string for an undefined preference value">Ei määritelty</string>
|
||||
<string name="settings__theme__background" comment="General label for a background preference">Taustaväri</string>
|
||||
<string name="settings__theme__background_active" comment="General label for an active background preference">Taustaväri aktiivisena</string>
|
||||
<string name="settings__theme__background_pressed" comment="General label for a pressed background preference">Taustaväri painettuna</string>
|
||||
<string name="settings__theme__foreground" comment="General label for a foreground preference">Merkin väri</string>
|
||||
<string name="settings__theme__foreground_alt" comment="General label for an alternate foreground preference">Merkin väri (vaihtoehtoinen)</string>
|
||||
<string name="settings__theme__foreground_capslock" comment="General label for a capslock foreground preference">Merkin väri (caps lock)</string>
|
||||
<string name="settings__theme__dialog_title" comment="Title of the color selection dialog for a single theme preference">Valitse väri</string>
|
||||
<string name="settings__theme__group_window" comment="Theme group label">Ikkuna & järjestelmä</string>
|
||||
<string name="settings__theme__group_keyboard" comment="Theme group label">Näppäimistö</string>
|
||||
<string name="settings__theme__group_key" comment="Theme group label">Painike</string>
|
||||
<string name="settings__theme__group_key_enter" comment="Theme group label">Enter-painike</string>
|
||||
<string name="settings__theme__group_key_popup" comment="Theme group label">Painikkeen ponnahdus</string>
|
||||
<string name="settings__theme__group_key_shift" comment="Theme group label">Shift-painike</string>
|
||||
<string name="settings__theme__group_media" comment="Theme group label">Mediakonteksti</string>
|
||||
<string name="settings__theme__group_one_handed" comment="Theme group label">Yksikätinen</string>
|
||||
<string name="settings__theme__group_one_handed_button" comment="Theme group label">Yksikätisyyspainike</string>
|
||||
<string name="settings__theme__group_smartbar" comment="Theme group label">Älypalkki</string>
|
||||
<string name="settings__theme__group_smartbar_button" comment="Theme group label">Älypalkin painike</string>
|
||||
<string name="pref__theme__colorPrimary_title" comment="Title of Color primary theme preference">Ensisijainen väri</string>
|
||||
<string name="pref__theme__colorPrimary_summary" comment="Summary of Color primary theme preference">Sovelletaan tärkein media välilehti aaltoilu ja valinta korosta</string>
|
||||
<string name="pref__theme__colorPrimaryDark_title" comment="Title of Color primary dark theme preference">Ensisijainen väri (tumma teema)</string>
|
||||
<string name="pref__theme__colorPrimaryDark_summary" comment="Summary of Color primary dark theme preference">Ei toistaiseksi käytössä, valmiina tulevia toimintoja varten</string>
|
||||
<string name="pref__theme__colorAccent_title" comment="Title of Color accent theme preference">Aksenttiväri</string>
|
||||
<string name="pref__theme__colorAccent_summary" comment="Summary of Color accent theme preference">Sovellettu emoji-välilehteen ripple</string>
|
||||
<string name="pref__theme__navBarColor_title" comment="Title of Nav bar color theme preference">Navigointipalkin väri</string>
|
||||
<string name="pref__theme__navBarColor_summary" comment="Summary of Nav bar color theme preference">Navigointipalkin tausta.</string>
|
||||
<string name="pref__theme__navBarIsLight_title" comment="Title of Nav bar is light theme preference">Navigointipalkin tummat painikkeet</string>
|
||||
<string name="pref__theme__navBarIsLight_summary" comment="Summary of Nav bar is light theme preference">Aseta päälle tummia tai pois päältä vaaleita painikkeita varten.</string>
|
||||
<string name="settings__keyboard__title" comment="Title of Keyboard preferences fragment">Näppäimistön asetukset</string>
|
||||
<string name="pref__keyboard__group_keys__label" comment="Preference group title">Painikkeet</string>
|
||||
<string name="pref__keyboard__font_size_multiplier_portrait__label" comment="Preference title">Fonttikoon kerroin (pystysuunnassa)</string>
|
||||
@@ -107,7 +84,6 @@
|
||||
<string name="pref__keyboard__height_factor__extra_tall" comment="Preference value">Erittäin korkea</string>
|
||||
<string name="pref__keyboard__height_factor__custom" comment="Preference value">Mukautettu</string>
|
||||
<string name="pref__keyboard__height_factor_custom__label" comment="Preference title">Mukautettu näppäimistön korkeus</string>
|
||||
<string name="pref__keyboard__bottom_offset__label" comment="Preference title">Alareunan sijainnin korjaus (kaareville näytöille)</string>
|
||||
<string name="pref__keyboard__group_keypress__label" comment="Preference group title">Painallus</string>
|
||||
<string name="pref__keyboard__sound_enabled__label" comment="Preference title">Painikeääni</string>
|
||||
<string name="pref__keyboard__sound_volume__label" comment="Preference title">Painikeäänen voimakkuus</string>
|
||||
@@ -136,7 +112,6 @@
|
||||
<string name="pref__glide__enabled__summary" comment="Preference summary">Syötä sana liu\'uttamalla sormea sen kirjaimilla</string>
|
||||
<string name="pref__glide__show_trail__label" comment="Preference title">[EVS] Näytä liu\'un jälki</string>
|
||||
<string name="pref__glide__show_trail__summary" comment="Preference summary">Häviää joka sanan jälkeen</string>
|
||||
<string name="pref__gestures__title" comment="Preference group title">Eleet</string>
|
||||
<string name="pref__gestures__swipe_action__no_action" comment="Preference value for swipe action">Ei toimintoa</string>
|
||||
<string name="pref__gestures__swipe_action__delete_characters_precisely" comment="Preference value for swipe action">Tarkka merkkien poisto</string>
|
||||
<string name="pref__gestures__swipe_action__delete_word" comment="Preference value for swipe action">Poista nykyinen sana</string>
|
||||
|
||||
@@ -1,5 +1,6 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<resources>
|
||||
<string name="app_name">FlorisBoard</string>
|
||||
<string name="key__phone_pause" comment="Label for the Pause key in the telephone keyboard layout">Pause</string>
|
||||
<string name="key__phone_wait" comment="Label for the Wait key in the telephone keyboard layout">Attendre</string>
|
||||
<string name="key_popup__threedots_alt" comment="Content description for the three-dots icon in a key popup">Icône avec trois points. Si elle est visible, elle indique qu\'il est possible d\'utiliser plus de lettres si l\'on appuie plus longtemps.</string>
|
||||
@@ -40,6 +41,7 @@
|
||||
<string name="settings__title" comment="Title of Settings">Paramètres</string>
|
||||
<string name="settings__menu" comment="Hint of top-right three-dot icon in Settings">Plus d\'options</string>
|
||||
<string name="settings__menu_help" comment="Three-dot menu entry for Help and Feedback web link">Aide & commentaires</string>
|
||||
<string name="settings__help" comment="General label for help buttons in Settings">Aide</string>
|
||||
<string name="settings__navigation__home" comment="Long-press hint of bottom nav item Home in Settings">Accueil</string>
|
||||
<string name="settings__navigation__keyboard" comment="Long-press hint of bottom nav item Keyboard in Settings">Clavier</string>
|
||||
<string name="settings__navigation__typing" comment="Long-press hint of bottom nav item Typing in Settings">Dactylographie</string>
|
||||
@@ -64,37 +66,78 @@
|
||||
<string name="settings__localization__subtype_error_already_exists" comment="Error message shown in subtype dialog when a subtype to add already exists">Cette disposition existe déjà !</string>
|
||||
<string name="settings__theme__title" comment="Title of the Theme fragment">Thème du clavier</string>
|
||||
<string name="settings__theme__undefined" comment="General string for an undefined preference value">Non défini</string>
|
||||
<string name="settings__theme__background" comment="General label for a background preference">Couleur d\'arrière-plan</string>
|
||||
<string name="settings__theme__background_active" comment="General label for an active background preference">Couleur d\'arrière-plan lorsque actif</string>
|
||||
<string name="settings__theme__background_pressed" comment="General label for a pressed background preference">Couleur d\'arrière-plan lorsqu\'on appuie sur une touche</string>
|
||||
<string name="settings__theme__foreground" comment="General label for a foreground preference">Couleur du premier plan</string>
|
||||
<string name="settings__theme__foreground_alt" comment="General label for an alternate foreground preference">Couleur d\'avant-plan (alternative)</string>
|
||||
<string name="settings__theme__foreground_capslock" comment="General label for a capslock foreground preference">Couleur d\'avant-plan (verrouillage des majuscules)</string>
|
||||
<string name="settings__theme__dialog_title" comment="Title of the color selection dialog for a single theme preference">Sélectionnez une couleur</string>
|
||||
<string name="pref__theme__mode__label" comment="Label of the theme mode preference">Mode du thème</string>
|
||||
<string name="pref__theme__mode__always_day" comment="Preference value for theme mode">Toujours clair</string>
|
||||
<string name="pref__theme__mode__always_night" comment="Preference value for theme mode">Toujours sombre</string>
|
||||
<string name="pref__theme__mode__follow_system" comment="Preference value for theme mode">Suivre l\'appareil</string>
|
||||
<string name="pref__theme__mode__follow_time" comment="Preference value for theme mode">Suivre l\'heure</string>
|
||||
<string name="pref__theme__sunrise_time__label" comment="Label of the sunrise time preference">Heure du lever du soleil</string>
|
||||
<string name="pref__theme__sunset_time__label" comment="Label of the sunset time preference">Heure du coucher du soleil</string>
|
||||
<string name="pref__theme__day" comment="Label of the day group (day means light theme)">Thème clair</string>
|
||||
<string name="pref__theme__night" comment="Label of the night group (night means dark theme)">Thème sombre</string>
|
||||
<string name="pref__theme__any_theme__label" comment="Label of the theme selector preference">Thème sélectionné</string>
|
||||
<string name="pref__theme__any_theme_adapt_to_app__label" comment="Label of the theme adapt to app preference">Adapter les couleurs à l\'application</string>
|
||||
<string name="pref__theme__any_theme_adapt_to_app__summary" comment="Summary of the theme adapt to app preference">Les couleurs du thème s\'adaptent à celles de l\'application utilisée, si cela est supporté par cette dernière.</string>
|
||||
<string name="pref__theme__source_assets" comment="Label for the theme source field">Ressources de l\'app FlorisBoard</string>
|
||||
<string name="pref__theme__source_internal" comment="Label for the theme source field">Stockage interne</string>
|
||||
<string name="pref__theme__source_external" comment="Label for the theme source field">Fournisseur externe</string>
|
||||
<string name="settings__theme_manager__title_day" comment="Title of the theme manager activity for day theme">Gestionnaire du thème (clair)</string>
|
||||
<string name="settings__theme_manager__title_night" comment="Title of the theme manager activity for night theme">Gestionnaire du thème (sombre)</string>
|
||||
<string name="settings__theme_manager__create_empty" comment="Label of the Create empty FAB action">Créer un thème vide</string>
|
||||
<string name="settings__theme_manager__create_from_selected" comment="Label of the Create from selected FAB action">Créer depuis le thème sélectionné</string>
|
||||
<string name="settings__theme_manager__theme_custom_title" comment="Title template for a custom theme">Personnalisé (basé sur %s)</string>
|
||||
<string name="settings__theme_manager__theme_new_title" comment="Title template for a new theme">Nouveau thème</string>
|
||||
<string name="settings__theme_editor__title" comment="Title of the edit theme activity">Modifier le thème</string>
|
||||
<string name="settings__theme_editor__name_label" comment="Label of name input">Nom</string>
|
||||
<string name="settings__theme_editor__type_label" comment="Label of type input">Type</string>
|
||||
<string name="settings__theme_editor__add_group_dialog_title" comment="Title of the add group dialog in the theme editor">Ajouter un groupe</string>
|
||||
<string name="settings__theme_editor__edit_group_dialog_title" comment="Title of the edit group dialog in the theme editor">Modifier le groupe</string>
|
||||
<string name="settings__theme_editor__add_attr_dialog_title" comment="Title of the add attribute dialog in the theme editor">Ajouter un attribut</string>
|
||||
<string name="settings__theme_editor__edit_attr_dialog_title" comment="Title of the edit attribute dialog in the theme editor">Modifier l\'attribut</string>
|
||||
<string name="settings__theme_editor__value_type_reference" comment="Theme value type">Référence</string>
|
||||
<string name="settings__theme_editor__value_type_reference_group" comment="Theme value type sub-field">Groupe</string>
|
||||
<string name="settings__theme_editor__value_type_reference_attr" comment="Theme value type sub-field">Attribut</string>
|
||||
<string name="settings__theme_editor__value_type_solid_color" comment="Theme value type">Couleur unie</string>
|
||||
<string name="settings__theme_editor__value_type_lin_grad" comment="Theme value type">Dégradé linéaire</string>
|
||||
<string name="settings__theme_editor__value_type_rad_grad" comment="Theme value type">Dégradé radial</string>
|
||||
<string name="settings__theme_editor__value_type_on_off" comment="Theme value type">Changer</string>
|
||||
<string name="settings__theme_editor__value_type_on_off_state" comment="Theme value type sub-field">État</string>
|
||||
<string name="settings__theme_editor__value_type_other" comment="Theme value type">Autre</string>
|
||||
<string name="settings__theme_editor__value_type_other_text" comment="Theme value type sub-field">Texte</string>
|
||||
<string name="settings__theme_editor__value_preview_content_description" comment="Theme value preview content description">Aperçu de la valeur du thème</string>
|
||||
<string name="settings__theme_editor__error_theme_label_empty" comment="Error text for an empty theme label">Veuillez entrer un nom de thème.</string>
|
||||
<string name="settings__theme_editor__error_group_name" comment="Error text for an invalid group name">Veuillez saisir un nom de groupe qui ne contient que des lettres (a-z et/ou A-Z), des deux-points ( : ) pour le sous-groupe ou des chiffres supplémentaires (0-9), un tilde (~) et des traits de soulignement (_) pour l\'étiquette clé.</string>
|
||||
<string name="settings__theme_editor__error_group_name_empty" comment="Error text for an empty group name">Veuillez entrer un nom de groupe.</string>
|
||||
<string name="settings__theme_editor__error_group_name_already_exists" comment="Error text for a duplicate group name">Ce nom de groupe existe déjà au sein de ce thème. Veuillez en choisir un autre.</string>
|
||||
<string name="settings__theme_editor__error_attr_name" comment="Error text for an invalid attribute name">Veuillez entrer un nom d\'attribut ne contenant que les lettres a-z et/ou A-Z.</string>
|
||||
<string name="settings__theme_editor__error_attr_name_empty" comment="Error text for an empty attribute name">Veuillez entrer un nom d\'attribut.</string>
|
||||
<string name="settings__theme_editor__error_attr_name_already_exists" comment="Error text for a duplicate attribute name">Ce nom d\'attribut existe déjà dans ce groupe. Veuillez en spécifier un autre.</string>
|
||||
<string name="settings__theme__group_window" comment="Theme group label">Fenêtre & Système</string>
|
||||
<string name="settings__theme__group_keyboard" comment="Theme group label">Clavier</string>
|
||||
<string name="settings__theme__group_key" comment="Theme group label">Touche</string>
|
||||
<string name="settings__theme__group_key_enter" comment="Theme group label">La touche Entrer</string>
|
||||
<string name="settings__theme__group_key_popup" comment="Theme group label">Pop-up de touche</string>
|
||||
<string name="settings__theme__group_key_shift" comment="Theme group label">La touche Maj</string>
|
||||
<string name="settings__theme__group_key_specific" comment="Theme group label (%s is specific modifier)">Clé (%s)</string>
|
||||
<string name="settings__theme__group_media" comment="Theme group label">Contexte médiatique</string>
|
||||
<string name="settings__theme__group_one_handed" comment="Theme group label">À une main</string>
|
||||
<string name="settings__theme__group_one_handed_button" comment="Theme group label">Bouton à une main</string>
|
||||
<string name="settings__theme__group_private_mode" comment="Theme group label">Mode privé</string>
|
||||
<string name="settings__theme__group_oneHanded" comment="Theme group label">À une main</string>
|
||||
<string name="settings__theme__group_popup" comment="Theme group label">Fenêtre contextuelle</string>
|
||||
<string name="settings__theme__group_privateMode" comment="Theme group label">Mode privé</string>
|
||||
<string name="settings__theme__group_smartbar" comment="Theme group label">Barre intelligente</string>
|
||||
<string name="settings__theme__group_smartbar_button" comment="Theme group label">Bouton de la barre intelligente</string>
|
||||
<string name="pref__theme__colorPrimary_title" comment="Title of Color primary theme preference">Couleur primaire</string>
|
||||
<string name="pref__theme__colorPrimary_summary" comment="Summary of Color primary theme preference">Appliqué à la sélection et à l\'ondulation de l\'onglet principal des médias</string>
|
||||
<string name="pref__theme__colorPrimaryDark_title" comment="Title of Color primary dark theme preference">Couleur primaire (sombre)</string>
|
||||
<string name="pref__theme__colorPrimaryDark_summary" comment="Summary of Color primary dark theme preference">Non utilisé actuellement, réservé pour une implémentation future</string>
|
||||
<string name="pref__theme__colorAccent_title" comment="Title of Color accent theme preference">Couleur d\'accentuation</string>
|
||||
<string name="pref__theme__colorAccent_summary" comment="Summary of Color accent theme preference">Appliqué à l\'ondulation de l\'onglet emoji</string>
|
||||
<string name="pref__theme__navBarColor_title" comment="Title of Nav bar color theme preference">Couleur de la barre de navigation</string>
|
||||
<string name="pref__theme__navBarColor_summary" comment="Summary of Nav bar color theme preference">L\'arrière-plan de la barre de navigation.</string>
|
||||
<string name="pref__theme__navBarIsLight_title" comment="Title of Nav bar is light theme preference">Avant-plan sombre de la barre de navigation</string>
|
||||
<string name="pref__theme__navBarIsLight_summary" comment="Summary of Nav bar is light theme preference">Réglez sur ON pour sombre ou sur OFF pour clair en avant-plan.</string>
|
||||
<string name="pref__theme__showKeyBorder_title" comment="Title of Show Key Border preference">Bordure des touches</string>
|
||||
<string name="pref__theme__showKeyBorder_summary" comment="Summary of Show Key Border preference">Réglez sur ON pour montrer la bordure ou sur OFF pour la cacher</string>
|
||||
<string name="settings__theme__group_smartbarButton" comment="Theme group label">Bouton de la barre intelligente</string>
|
||||
<string name="settings__theme__group_custom" comment="Theme group label (%s is custom group name)">Groupe personnalisé (%s)</string>
|
||||
<string name="settings__theme__attr_background" comment="Theme attribute label">Couleur d\'arrière-plan</string>
|
||||
<string name="settings__theme__attr_backgroundActive" comment="Theme attribute label">Couleur d\'arrière-plan (lorsque actif)</string>
|
||||
<string name="settings__theme__attr_backgroundPressed" comment="Theme attribute label">Couleur d\'arrière-plan (lorsqu\'on appuie sur une touche)</string>
|
||||
<string name="settings__theme__attr_foreground" comment="Theme attribute label">Couleur de premier plan</string>
|
||||
<string name="settings__theme__attr_foregroundAlt" comment="Theme attribute label">Couleur d\'avant-plan (alternative)</string>
|
||||
<string name="settings__theme__attr_foregroundPressed" comment="Theme attribute label">Couleur de premier plan (lorsqu\'on appuie sur une touche)</string>
|
||||
<string name="settings__theme__attr_showBorder" comment="Theme attribute label">Afficher les bordures</string>
|
||||
<string name="settings__theme__attr_colorPrimary" comment="Theme attribute label">Couleur primaire</string>
|
||||
<string name="settings__theme__attr_colorPrimaryDark" comment="Theme attribute label">Couleur primaire (sombre)</string>
|
||||
<string name="settings__theme__attr_colorAccent" comment="Theme attribute label">Couleur d\'accentuation</string>
|
||||
<string name="settings__theme__attr_navBarColor" comment="Theme attribute label">Couleur de la barre de navigation</string>
|
||||
<string name="settings__theme__attr_navBarLight" comment="Theme attribute label">Barre de navigation avant-plan sombre</string>
|
||||
<string name="settings__theme__attr_semiTransparentColor" comment="Theme attribute label">Couleur semi-transparente</string>
|
||||
<string name="settings__theme__attr_textColor" comment="Theme attribute label">Couleur du texte</string>
|
||||
<string name="settings__theme__attr_custom" comment="Theme attribute label (%s is custom attribute name)">Attributs personnalisés (%s)</string>
|
||||
<string name="settings__keyboard__title" comment="Title of Keyboard preferences fragment">Préférences de clavier</string>
|
||||
<string name="pref__keyboard__group_keys__label" comment="Preference group title">Touches</string>
|
||||
<string name="pref__keyboard__number_row__label" comment="Preference title">Rangée de numéros</string>
|
||||
@@ -105,6 +148,13 @@
|
||||
<string name="pref__keyboard__hint_mode__enabled_hint_priority" comment="Preference value">Activé (priorité à l\'indice)</string>
|
||||
<string name="pref__keyboard__hint_mode__enabled_accent_priority" comment="Preference value">Activé (priorité à l\'accent)</string>
|
||||
<string name="pref__keyboard__hint_mode__enabled_smart_priority" comment="Preference value">Activé (priorité intelligente)</string>
|
||||
<string name="pref__keyboard__utility_key_enabled__label" comment="Preference title">Afficher la touche d\'outils</string>
|
||||
<string name="pref__keyboard__utility_key_enabled__summary" comment="Preference summary">Affiche une touche d\'outils configurable à côté de la barre d\'espace</string>
|
||||
<string name="pref__keyboard__utility_key_action__label" comment="Preference title">Action de la touche d\'outils</string>
|
||||
<string name="pref__keyboard__utility_key_action__switch_to_emojis" comment="Preference value">Passer en emojis</string>
|
||||
<string name="pref__keyboard__utility_key_action__switch_language" comment="Preference value">Changer de langue</string>
|
||||
<string name="pref__keyboard__utility_key_action__switch_keyboard_app" comment="Preference value">Changer d\'application de clavier</string>
|
||||
<string name="pref__keyboard__utility_key_action__dynamic_switch_language_emojis" comment="Preference value">Dynamique : Changer vers emojis / Changer de langue</string>
|
||||
<string name="pref__keyboard__font_size_multiplier_portrait__label" comment="Preference title">Multiplicateur de la taille de la police (portrait)</string>
|
||||
<string name="pref__keyboard__font_size_multiplier_landscape__label" comment="Preference title">Multiplicateur de la taille de la police (paysage)</string>
|
||||
<string name="pref__keyboard__group_layout__label" comment="Preference group title">Disposition</string>
|
||||
@@ -122,7 +172,6 @@
|
||||
<string name="pref__keyboard__height_factor__extra_tall" comment="Preference value">Très haut</string>
|
||||
<string name="pref__keyboard__height_factor__custom" comment="Preference value">Personnalisée</string>
|
||||
<string name="pref__keyboard__height_factor_custom__label" comment="Preference title">Valeur personnalisée de la hauteur du clavier</string>
|
||||
<string name="pref__keyboard__bottom_offset__label" comment="Preference title">Décalage du fond (pour les écrans courbes)</string>
|
||||
<string name="pref__keyboard__group_keypress__label" comment="Preference group title">Touche pressée</string>
|
||||
<string name="pref__keyboard__sound_enabled__label" comment="Preference title">Tonalité des touches</string>
|
||||
<string name="pref__keyboard__sound_volume__label" comment="Preference title">Volume sonore des touches</string>
|
||||
@@ -154,17 +203,23 @@
|
||||
<string name="pref__glide__enabled__summary" comment="Preference summary">Tapez un mot en faisant glisser votre doigt entre ses lettres</string>
|
||||
<string name="pref__glide__show_trail__label" comment="Preference title">[NYI] Montrer la piste de glissement</string>
|
||||
<string name="pref__glide__show_trail__summary" comment="Preference summary">Disparaîtra après chaque mot</string>
|
||||
<string name="pref__gestures__title" comment="Preference group title">Gestes</string>
|
||||
<string name="pref__gestures__general_title" comment="Preference group title">Gestes généraux</string>
|
||||
<string name="pref__gestures__space_bar_title" comment="Preference group title">Gestes sur la barre d\'espace</string>
|
||||
<string name="pref__gestures__other_title" comment="Preference group title">Autres gestes et seuil des gestes</string>
|
||||
<string name="pref__gestures__swipe_action__no_action" comment="Preference value for swipe action">Aucune action</string>
|
||||
<string name="pref__gestures__swipe_action__delete_characters_precisely" comment="Preference value for swipe action">Effacer les caractères avec précision</string>
|
||||
<string name="pref__gestures__swipe_action__delete_word" comment="Preference value for swipe action">Supprimer le mot courant</string>
|
||||
<string name="pref__gestures__swipe_action__delete_words_precisely" comment="Preference value for swipe action">Supprimer les mots avec précision</string>
|
||||
<string name="pref__gestures__swipe_action__hide_keyboard" comment="Preference value for swipe action">Masquer le clavier</string>
|
||||
<string name="pref__gestures__swipe_action__insert_space" comment="Preference value for swipe action">Insérer une espace</string>
|
||||
<string name="pref__gestures__swipe_action__move_cursor_up" comment="Preference value for swipe action">Déplacer le curseur vers le haut</string>
|
||||
<string name="pref__gestures__swipe_action__move_cursor_down" comment="Preference value for swipe action">Déplacer le curseur vers le bas</string>
|
||||
<string name="pref__gestures__swipe_action__move_cursor_left" comment="Preference value for swipe action">Déplacer le curseur vers la gauche</string>
|
||||
<string name="pref__gestures__swipe_action__move_cursor_right" comment="Preference value for swipe action">Déplacer le curseur vers la droite</string>
|
||||
<string name="pref__gestures__swipe_action__move_cursor_start_of_line" comment="Preference value for swipe action">Déplacer le curseur au début de la ligne</string>
|
||||
<string name="pref__gestures__swipe_action__move_cursor_end_of_line" comment="Preference value for swipe action">Déplacer le curseur à la fin de la ligne</string>
|
||||
<string name="pref__gestures__swipe_action__shift" comment="Preference value for swipe action">Maj</string>
|
||||
<string name="pref__gestures__swipe_action__show_input_method_picker" comment="Preference value for swipe action">Afficher le sélecteur de mode de saisie</string>
|
||||
<string name="pref__gestures__swipe_action__switch_to_prev_keyboard" comment="Preference value for swipe action">Passer à la disposition précédente</string>
|
||||
<string name="pref__gestures__swipe_action__switch_to_prev_subtype" comment="Preference value for swipe action">Passer à la disposition précédente</string>
|
||||
<string name="pref__gestures__swipe_action__switch_to_next_subtype" comment="Preference value for swipe action">Passer à la disposition suivante</string>
|
||||
@@ -175,6 +230,7 @@
|
||||
<string name="pref__gestures__space_bar_swipe_up__label" comment="Preference title">Glisser de la barre d\'espace vers le haut</string>
|
||||
<string name="pref__gestures__space_bar_swipe_left__label" comment="Preference title">Glisser de la barre d\'espace vers la gauche</string>
|
||||
<string name="pref__gestures__space_bar_swipe_right__label" comment="Preference title">Glisser de la barre d\'espace vers la droite</string>
|
||||
<string name="pref__gestures__space_bar_long_press__label" comment="Preference title">Appui long sur la barre d\'espace</string>
|
||||
<string name="pref__gestures__delete_key_swipe_left__label" comment="Preference title">Glisser de la touche de suppression vers la gauche</string>
|
||||
<string name="pref__gestures__swipe_velocity_threshold__label" comment="Preference title">Seuil de vitesse de glissement</string>
|
||||
<string name="pref__gestures__swipe_velocity_threshold__very_slow" comment="Preference value for swipe velocity threshold">Très lente</string>
|
||||
@@ -203,6 +259,26 @@
|
||||
<string name="about__view_source_code" comment="Label of View source code button in About">Code source</string>
|
||||
<string name="about__license__title" comment="Title of Open-source licenses dialog">Licences de logiciels libres</string>
|
||||
<!-- Assets strings -->
|
||||
<plurals name="assets__file__authors">
|
||||
<item quantity="one">Auteur</item>
|
||||
<item quantity="other">Auteurs</item>
|
||||
</plurals>
|
||||
<string name="assets__file__name">Nom</string>
|
||||
<string name="assets__file__source">Source</string>
|
||||
<string name="assets__action__add">Ajouter</string>
|
||||
<string name="assets__action__cancel">Annuler</string>
|
||||
<string name="assets__action__cancel_confirm_title">Confirmer l\'annulation</string>
|
||||
<string name="assets__action__cancel_confirm_message">Êtes-vous sûrs de vouloir abandonner tout changement non sauvegardé ? Cette action ne peut être annulée après son exécution.</string>
|
||||
<string name="assets__action__delete">Supprimer</string>
|
||||
<string name="assets__action__delete_confirm_title">Confirmer la suppression</string>
|
||||
<string name="assets__action__delete_confirm_message">Êtes-vous sûrs de vouloir supprimer « %s » ? Cette action ne peut être annulée après son exécution.</string>
|
||||
<string name="assets__action__edit">Modifier</string>
|
||||
<string name="assets__action__export">Exporter</string>
|
||||
<string name="assets__action__import">Importer</string>
|
||||
<string name="assets__action__no">Non</string>
|
||||
<string name="assets__action__save">Sauvegarder</string>
|
||||
<string name="assets__action__yes">Oui</string>
|
||||
<string name="assets__error__invalid">Invalide</string>
|
||||
<!-- Setup UI strings -->
|
||||
<string name="setup__title" comment="Title of Setup">Configuration</string>
|
||||
<string name="setup__prev_button" comment="Label of Previous button in Setup (try to find a short translation due to limited space in UI)">Préc</string>
|
||||
|
||||
@@ -1,5 +1,6 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<resources>
|
||||
<string name="app_name">FlorisBoard</string>
|
||||
<string name="key__phone_pause" comment="Label for the Pause key in the telephone keyboard layout">Szünet</string>
|
||||
<string name="key__phone_wait" comment="Label for the Wait key in the telephone keyboard layout">Várakozás</string>
|
||||
<string name="key_popup__threedots_alt" comment="Content description for the three-dots icon in a key popup">Hárompontos ikon. Ha látható, azt jelzi, hogy több betű használható, ha hosszabb ideig megnyomja.</string>
|
||||
@@ -40,6 +41,7 @@
|
||||
<string name="settings__title" comment="Title of Settings">Beállítások</string>
|
||||
<string name="settings__menu" comment="Hint of top-right three-dot icon in Settings">További beállítások</string>
|
||||
<string name="settings__menu_help" comment="Three-dot menu entry for Help and Feedback web link">Segítség és visszajelzés</string>
|
||||
<string name="settings__help" comment="General label for help buttons in Settings">Súgó</string>
|
||||
<string name="settings__navigation__home" comment="Long-press hint of bottom nav item Home in Settings">Kezdés</string>
|
||||
<string name="settings__navigation__keyboard" comment="Long-press hint of bottom nav item Keyboard in Settings">Billentyűzet</string>
|
||||
<string name="settings__navigation__typing" comment="Long-press hint of bottom nav item Typing in Settings">Gépelés</string>
|
||||
@@ -64,42 +66,95 @@
|
||||
<string name="settings__localization__subtype_error_already_exists" comment="Error message shown in subtype dialog when a subtype to add already exists">Ez az altípus már létezik!</string>
|
||||
<string name="settings__theme__title" comment="Title of the Theme fragment">Billentyűzet téma</string>
|
||||
<string name="settings__theme__undefined" comment="General string for an undefined preference value">Nem meghatározott</string>
|
||||
<string name="settings__theme__background" comment="General label for a background preference">Háttérszín</string>
|
||||
<string name="settings__theme__background_active" comment="General label for an active background preference">Aktív háttérszín</string>
|
||||
<string name="settings__theme__background_pressed" comment="General label for a pressed background preference">Lenyomott háttérszín</string>
|
||||
<string name="settings__theme__foreground" comment="General label for a foreground preference">Előtérszín</string>
|
||||
<string name="settings__theme__foreground_alt" comment="General label for an alternate foreground preference">Előtérszín (alternatív)</string>
|
||||
<string name="settings__theme__foreground_capslock" comment="General label for a capslock foreground preference">Előtérszín (caps lock)</string>
|
||||
<string name="settings__theme__dialog_title" comment="Title of the color selection dialog for a single theme preference">Szín kiválasztása</string>
|
||||
<string name="pref__theme__mode__label" comment="Label of the theme mode preference">Téma mód</string>
|
||||
<string name="pref__theme__mode__always_day" comment="Preference value for theme mode">Mindig nappali</string>
|
||||
<string name="pref__theme__mode__always_night" comment="Preference value for theme mode">Mindig éjszakai</string>
|
||||
<string name="pref__theme__mode__follow_system" comment="Preference value for theme mode">Rendszertéma követése</string>
|
||||
<string name="pref__theme__mode__follow_time" comment="Preference value for theme mode">Idő követése</string>
|
||||
<string name="pref__theme__sunrise_time__label" comment="Label of the sunrise time preference">Napkelte ideje</string>
|
||||
<string name="pref__theme__sunset_time__label" comment="Label of the sunset time preference">Napnyugta ideje</string>
|
||||
<string name="pref__theme__day" comment="Label of the day group (day means light theme)">Nappali téma</string>
|
||||
<string name="pref__theme__night" comment="Label of the night group (night means dark theme)">Éjszakai téma</string>
|
||||
<string name="pref__theme__any_theme__label" comment="Label of the theme selector preference">Kiválasztott téma</string>
|
||||
<string name="pref__theme__any_theme_adapt_to_app__label" comment="Label of the theme adapt to app preference">Színek módosítása az alkalmazáshoz</string>
|
||||
<string name="pref__theme__any_theme_adapt_to_app__summary" comment="Summary of the theme adapt to app preference">Színek módosítása az alkalmazáshoz, ha a célalkalmazás támogatja.</string>
|
||||
<string name="pref__theme__source_assets" comment="Label for the theme source field">FlorisBoard alkalmazásadatok</string>
|
||||
<string name="pref__theme__source_internal" comment="Label for the theme source field">Belső tárhely</string>
|
||||
<string name="pref__theme__source_external" comment="Label for the theme source field">Külső szolgáltató</string>
|
||||
<string name="settings__theme_manager__title_day" comment="Title of the theme manager activity for day theme">Témakezelő (nappali)</string>
|
||||
<string name="settings__theme_manager__title_night" comment="Title of the theme manager activity for night theme">Témakezelő (éjszakai)</string>
|
||||
<string name="settings__theme_manager__create_empty" comment="Label of the Create empty FAB action">Üres téma létrehozása</string>
|
||||
<string name="settings__theme_manager__create_from_selected" comment="Label of the Create from selected FAB action">Létrehozás a kiválasztott témából</string>
|
||||
<string name="settings__theme_manager__theme_custom_title" comment="Title template for a custom theme">Egyéni (ezen alapul: %s)</string>
|
||||
<string name="settings__theme_manager__theme_new_title" comment="Title template for a new theme">Új téma</string>
|
||||
<string name="settings__theme_editor__title" comment="Title of the edit theme activity">Téma szerkesztése</string>
|
||||
<string name="settings__theme_editor__name_label" comment="Label of name input">Név</string>
|
||||
<string name="settings__theme_editor__type_label" comment="Label of type input">Típus</string>
|
||||
<string name="settings__theme_editor__add_group_dialog_title" comment="Title of the add group dialog in the theme editor">Csoport hozzáadása</string>
|
||||
<string name="settings__theme_editor__edit_group_dialog_title" comment="Title of the edit group dialog in the theme editor">Csoport szerkesztése</string>
|
||||
<string name="settings__theme_editor__add_attr_dialog_title" comment="Title of the add attribute dialog in the theme editor">Tulajdonság hozzáadása</string>
|
||||
<string name="settings__theme_editor__edit_attr_dialog_title" comment="Title of the edit attribute dialog in the theme editor">Tulajdonság szerkesztése</string>
|
||||
<string name="settings__theme_editor__value_type_reference" comment="Theme value type">Hivatkozás</string>
|
||||
<string name="settings__theme_editor__value_type_reference_group" comment="Theme value type sub-field">Csoport</string>
|
||||
<string name="settings__theme_editor__value_type_reference_attr" comment="Theme value type sub-field">Tulajdonság</string>
|
||||
<string name="settings__theme_editor__value_type_solid_color" comment="Theme value type">Egyszínű</string>
|
||||
<string name="settings__theme_editor__value_type_lin_grad" comment="Theme value type">Lineáris átmenet</string>
|
||||
<string name="settings__theme_editor__value_type_rad_grad" comment="Theme value type">Sugaras átmenet</string>
|
||||
<string name="settings__theme_editor__value_type_on_off" comment="Theme value type">Kapcsoló</string>
|
||||
<string name="settings__theme_editor__value_type_on_off_state" comment="Theme value type sub-field">Állapot</string>
|
||||
<string name="settings__theme_editor__value_type_other" comment="Theme value type">Egyéb</string>
|
||||
<string name="settings__theme_editor__value_type_other_text" comment="Theme value type sub-field">Szöveg</string>
|
||||
<string name="settings__theme_editor__value_preview_content_description" comment="Theme value preview content description">A téma értékének előnézete</string>
|
||||
<string name="settings__theme_editor__error_theme_label_empty" comment="Error text for an empty theme label">Adjon meg egy témanevet.</string>
|
||||
<string name="settings__theme_editor__error_group_name" comment="Error text for an invalid group name">Adjon meg egy csoportnevet, amely csak betűket (a-z és/vagy A-Z) tartalmaz, vagy kettőspontot (:) a további csoportosításhoz, vagy további számokat (0–9), hullámvonalat (~) és aláhúzást (_) a billentyűcímkéhez.</string>
|
||||
<string name="settings__theme_editor__error_group_name_empty" comment="Error text for an empty group name">Adjon meg egy csoportnevet.</string>
|
||||
<string name="settings__theme_editor__error_group_name_already_exists" comment="Error text for a duplicate group name">Ez a csoportnév már létezik ebben a témában. Adjon meg egy másikat.</string>
|
||||
<string name="settings__theme_editor__error_attr_name" comment="Error text for an invalid attribute name">Adjon meg egy tulajdonságnevet, amely csak a-z és/vagy A-Z betűket tartalmaz.</string>
|
||||
<string name="settings__theme_editor__error_attr_name_empty" comment="Error text for an empty attribute name">Adjon meg egy tulajdonságnevet.</string>
|
||||
<string name="settings__theme_editor__error_attr_name_already_exists" comment="Error text for a duplicate attribute name">Ez a tulajdonságnév már létezik ebben a csoportban. Adjon meg egy másikat.</string>
|
||||
<string name="settings__theme__group_window" comment="Theme group label">Ablak és rendszer</string>
|
||||
<string name="settings__theme__group_keyboard" comment="Theme group label">Billentyűzet</string>
|
||||
<string name="settings__theme__group_key" comment="Theme group label">Billentyű</string>
|
||||
<string name="settings__theme__group_key_enter" comment="Theme group label">Enter billentyű</string>
|
||||
<string name="settings__theme__group_key_popup" comment="Theme group label">Felugró billentyű</string>
|
||||
<string name="settings__theme__group_key_shift" comment="Theme group label">Shift billentyű</string>
|
||||
<string name="settings__theme__group_key_specific" comment="Theme group label (%s is specific modifier)">Billentyű (%s)</string>
|
||||
<string name="settings__theme__group_media" comment="Theme group label">Média kontextus</string>
|
||||
<string name="settings__theme__group_one_handed" comment="Theme group label">Egykezes</string>
|
||||
<string name="settings__theme__group_one_handed_button" comment="Theme group label">Egykezes gomb</string>
|
||||
<string name="settings__theme__group_private_mode" comment="Theme group label">Privát mód</string>
|
||||
<string name="settings__theme__group_oneHanded" comment="Theme group label">Egykezes</string>
|
||||
<string name="settings__theme__group_popup" comment="Theme group label">Felugró gomb</string>
|
||||
<string name="settings__theme__group_privateMode" comment="Theme group label">Privát mód</string>
|
||||
<string name="settings__theme__group_smartbar" comment="Theme group label">Okossáv</string>
|
||||
<string name="settings__theme__group_smartbar_button" comment="Theme group label">Okossáv gomb</string>
|
||||
<string name="pref__theme__colorPrimary_title" comment="Title of Color primary theme preference">Elsődleges szín</string>
|
||||
<string name="pref__theme__colorPrimary_summary" comment="Summary of Color primary theme preference">Alkalmazva a fő média lapokra és a kiemelés színének</string>
|
||||
<string name="pref__theme__colorPrimaryDark_title" comment="Title of Color primary dark theme preference">Elsődleges szín (sötét)</string>
|
||||
<string name="pref__theme__colorPrimaryDark_summary" comment="Summary of Color primary dark theme preference">Jelenleg nincs használva, fenntartva jövőbeli megvalósításra</string>
|
||||
<string name="pref__theme__colorAccent_title" comment="Title of Color accent theme preference">Kiemelés színe</string>
|
||||
<string name="pref__theme__colorAccent_summary" comment="Summary of Color accent theme preference">Alkalmazva az emoji lapokra</string>
|
||||
<string name="pref__theme__navBarColor_title" comment="Title of Nav bar color theme preference">Navigációs sáv színe</string>
|
||||
<string name="pref__theme__navBarColor_summary" comment="Summary of Nav bar color theme preference">A navigációs sáv háttere.</string>
|
||||
<string name="pref__theme__navBarIsLight_title" comment="Title of Nav bar is light theme preference">Navigációs sáv sötét előtér</string>
|
||||
<string name="pref__theme__navBarIsLight_summary" comment="Summary of Nav bar is light theme preference">Kapcsolja BE sötét, KI világos előtérszínhez.</string>
|
||||
<string name="pref__theme__showKeyBorder_title" comment="Title of Show Key Border preference">Billentyű szegélye</string>
|
||||
<string name="pref__theme__showKeyBorder_summary" comment="Summary of Show Key Border preference">Kapcsolja BE a szegély megjelenítéséhez vagy KI az elrejtéséhez</string>
|
||||
<string name="settings__theme__group_smartbarButton" comment="Theme group label">Okossáv gomb</string>
|
||||
<string name="settings__theme__group_custom" comment="Theme group label (%s is custom group name)">Egyéni csoport (%s)</string>
|
||||
<string name="settings__theme__attr_background" comment="Theme attribute label">Háttérszín</string>
|
||||
<string name="settings__theme__attr_backgroundActive" comment="Theme attribute label">Háttérszín (aktív)</string>
|
||||
<string name="settings__theme__attr_backgroundPressed" comment="Theme attribute label">Háttérszín (lenyomva)</string>
|
||||
<string name="settings__theme__attr_foreground" comment="Theme attribute label">Előtérszín</string>
|
||||
<string name="settings__theme__attr_foregroundAlt" comment="Theme attribute label">Előtérszín (alternatív)</string>
|
||||
<string name="settings__theme__attr_foregroundPressed" comment="Theme attribute label">Előtérszín (lenyomva)</string>
|
||||
<string name="settings__theme__attr_showBorder" comment="Theme attribute label">Szegély megjelenítése</string>
|
||||
<string name="settings__theme__attr_colorPrimary" comment="Theme attribute label">Elsődleges szín</string>
|
||||
<string name="settings__theme__attr_colorPrimaryDark" comment="Theme attribute label">Elsődleges szín (sötét)</string>
|
||||
<string name="settings__theme__attr_colorAccent" comment="Theme attribute label">Kiemelőszín</string>
|
||||
<string name="settings__theme__attr_navBarColor" comment="Theme attribute label">Navigációs sáv színe</string>
|
||||
<string name="settings__theme__attr_navBarLight" comment="Theme attribute label">Navigációs sáv sötét előtér</string>
|
||||
<string name="settings__theme__attr_semiTransparentColor" comment="Theme attribute label">Félig átlátszó szín</string>
|
||||
<string name="settings__theme__attr_textColor" comment="Theme attribute label">Szövegszín</string>
|
||||
<string name="settings__theme__attr_custom" comment="Theme attribute label (%s is custom attribute name)">Egyéni tulajdonság (%s)</string>
|
||||
<string name="settings__keyboard__title" comment="Title of Keyboard preferences fragment">Billentyűzet beállítások</string>
|
||||
<string name="pref__keyboard__group_keys__label" comment="Preference group title">Billentyűk</string>
|
||||
<string name="pref__keyboard__number_row__label" comment="Preference title">Számsor</string>
|
||||
<string name="pref__keyboard__number_row__summary" comment="Preference summary">Számsor megjelenítése a karakterelrendezés felett</string>
|
||||
<string name="pref__keyboard__hinted_number_row_mode__label" comment="Preference title">Másodlagos számsor</string>
|
||||
<string name="pref__keyboard__hinted_symbols_mode__label" comment="Preference title">Másodlagos szimbólumok</string>
|
||||
<string name="pref__keyboard__hint_mode__disabled" comment="Preference value">Letiltva</string>
|
||||
<string name="pref__keyboard__hint_mode__enabled_hint_priority" comment="Preference value">Engedélyezve (a másodlagos szimbólumok először)</string>
|
||||
<string name="pref__keyboard__hint_mode__enabled_accent_priority" comment="Preference value">Engedélyezve (az ékezetes szimbólumok először)</string>
|
||||
<string name="pref__keyboard__hint_mode__enabled_smart_priority" comment="Preference value">Engedélyezve (intelligens eldöntés)</string>
|
||||
<string name="pref__keyboard__utility_key_enabled__label" comment="Preference title">Kellékgomb megjelenítése</string>
|
||||
<string name="pref__keyboard__utility_key_enabled__summary" comment="Preference summary">Egy beállítható kellékgomb megjelenítése a szóköz mellett</string>
|
||||
<string name="pref__keyboard__utility_key_action__label" comment="Preference title">Kellékgomb művelet</string>
|
||||
<string name="pref__keyboard__utility_key_action__switch_to_emojis" comment="Preference value">Váltás emojikra</string>
|
||||
<string name="pref__keyboard__utility_key_action__switch_language" comment="Preference value">Nyelv váltása</string>
|
||||
<string name="pref__keyboard__utility_key_action__switch_keyboard_app" comment="Preference value">Billentyűzetalkalmazás váltása</string>
|
||||
<string name="pref__keyboard__utility_key_action__dynamic_switch_language_emojis" comment="Preference value">Dinamikus: váltás emojikra/váltás nyelvre</string>
|
||||
<string name="pref__keyboard__font_size_multiplier_portrait__label" comment="Preference title">Betűméret szorzó (álló)</string>
|
||||
<string name="pref__keyboard__font_size_multiplier_landscape__label" comment="Preference title">Betűméret szorzó (fekvő)</string>
|
||||
<string name="pref__keyboard__group_layout__label" comment="Preference group title">Elrendezés</string>
|
||||
@@ -117,12 +172,13 @@
|
||||
<string name="pref__keyboard__height_factor__extra_tall" comment="Preference value">Nagyon magas</string>
|
||||
<string name="pref__keyboard__height_factor__custom" comment="Preference value">Egyéni</string>
|
||||
<string name="pref__keyboard__height_factor_custom__label" comment="Preference title">Egyéni billentyűzetmagasság értéke</string>
|
||||
<string name="pref__keyboard__bottom_offset__label" comment="Preference title">Alsó eltolás (ívelt kijelzőkhöz)</string>
|
||||
<string name="pref__keyboard__bottom_offset_portrait__label" comment="Preference title">Alsó eltolás (álló)</string>
|
||||
<string name="pref__keyboard__bottom_offset_landscape__label" comment="Preference title">Alsó eltolás (fekvő)</string>
|
||||
<string name="pref__keyboard__group_keypress__label" comment="Preference group title">Gombnyomás</string>
|
||||
<string name="pref__keyboard__sound_enabled__label" comment="Preference title">Hang gombnyomásra</string>
|
||||
<string name="pref__keyboard__sound_enabled__label" comment="Preference title">Hang gombnyomáskor</string>
|
||||
<string name="pref__keyboard__sound_volume__label" comment="Preference title">Gombnyomás hangereje</string>
|
||||
<string name="pref__keyboard__vibration_enabled__label" comment="Preference title">Rezgés gombnyomásra</string>
|
||||
<string name="pref__keyboard__vibration_strength__label" comment="Preference title">Rezgés erőssége gombnyomásra</string>
|
||||
<string name="pref__keyboard__vibration_enabled__label" comment="Preference title">Rezgés gombnyomáskor</string>
|
||||
<string name="pref__keyboard__vibration_strength__label" comment="Preference title">Rezgés erőssége gombnyomáskor</string>
|
||||
<string name="pref__keyboard__popup_visible__label" comment="Preference title">Felugró megjelenítése</string>
|
||||
<string name="pref__keyboard__popup_visible__summary" comment="Preference summary">Felugró megjelenítése gombnyomáskor</string>
|
||||
<string name="pref__keyboard__long_press_delay__label" comment="Preference title">Hosszú gombnyomás késleltetése</string>
|
||||
@@ -149,17 +205,23 @@
|
||||
<string name="pref__glide__enabled__summary" comment="Preference summary">Írjon be egy szót úgy, hogy ujját a betűin keresztülcsúsztatja</string>
|
||||
<string name="pref__glide__show_trail__label" comment="Preference title">[NYI] Nyomvonal megjelenítése</string>
|
||||
<string name="pref__glide__show_trail__summary" comment="Preference summary">Minden szó után eltűnik</string>
|
||||
<string name="pref__gestures__title" comment="Preference group title">Gesztusok</string>
|
||||
<string name="pref__gestures__general_title" comment="Preference group title">Általános gesztusok</string>
|
||||
<string name="pref__gestures__space_bar_title" comment="Preference group title">Szóköz gesztusok</string>
|
||||
<string name="pref__gestures__other_title" comment="Preference group title">Egyéb gesztusok / gesztusküszöb</string>
|
||||
<string name="pref__gestures__swipe_action__no_action" comment="Preference value for swipe action">Nincs művelet</string>
|
||||
<string name="pref__gestures__swipe_action__delete_characters_precisely" comment="Preference value for swipe action">Karakterek pontos törlése</string>
|
||||
<string name="pref__gestures__swipe_action__delete_word" comment="Preference value for swipe action">A jelenlegi szó törlése</string>
|
||||
<string name="pref__gestures__swipe_action__delete_words_precisely" comment="Preference value for swipe action">Szavak pontos törlése</string>
|
||||
<string name="pref__gestures__swipe_action__hide_keyboard" comment="Preference value for swipe action">Billentyűzet elrejtése</string>
|
||||
<string name="pref__gestures__swipe_action__insert_space" comment="Preference value for swipe action">Szóköz beszúrása</string>
|
||||
<string name="pref__gestures__swipe_action__move_cursor_up" comment="Preference value for swipe action">Kurzor mozgatása felfelé</string>
|
||||
<string name="pref__gestures__swipe_action__move_cursor_down" comment="Preference value for swipe action">Kurzor mozgatása lefelé</string>
|
||||
<string name="pref__gestures__swipe_action__move_cursor_left" comment="Preference value for swipe action">Kurzor mozgatása balra</string>
|
||||
<string name="pref__gestures__swipe_action__move_cursor_right" comment="Preference value for swipe action">Kurzor mozgatása jobbra</string>
|
||||
<string name="pref__gestures__swipe_action__move_cursor_start_of_line" comment="Preference value for swipe action">Kurzor sor elejére helyezése</string>
|
||||
<string name="pref__gestures__swipe_action__move_cursor_end_of_line" comment="Preference value for swipe action">Kurzor sor végére helyezése</string>
|
||||
<string name="pref__gestures__swipe_action__shift" comment="Preference value for swipe action">Shift</string>
|
||||
<string name="pref__gestures__swipe_action__show_input_method_picker" comment="Preference value for swipe action">Bevitelválasztó megnyitása</string>
|
||||
<string name="pref__gestures__swipe_action__switch_to_prev_keyboard" comment="Preference value for swipe action">Váltás az előző billentyűzetre</string>
|
||||
<string name="pref__gestures__swipe_action__switch_to_prev_subtype" comment="Preference value for swipe action">Váltás az előző altípusra</string>
|
||||
<string name="pref__gestures__swipe_action__switch_to_next_subtype" comment="Preference value for swipe action">Váltás a következő altípusra</string>
|
||||
@@ -170,6 +232,7 @@
|
||||
<string name="pref__gestures__space_bar_swipe_up__label" comment="Preference title">Szóköz felhúzás</string>
|
||||
<string name="pref__gestures__space_bar_swipe_left__label" comment="Preference title">Szóköz balra húzás</string>
|
||||
<string name="pref__gestures__space_bar_swipe_right__label" comment="Preference title">Szóköz jobbra húzás</string>
|
||||
<string name="pref__gestures__space_bar_long_press__label" comment="Preference title">Szóköz hosszú lenyomása</string>
|
||||
<string name="pref__gestures__delete_key_swipe_left__label" comment="Preference title">Törlés gomb balra húzás</string>
|
||||
<string name="pref__gestures__swipe_velocity_threshold__label" comment="Preference title">Húzás sebesség küszöb</string>
|
||||
<string name="pref__gestures__swipe_velocity_threshold__very_slow" comment="Preference value for swipe velocity threshold">Nagyon lassú</string>
|
||||
@@ -198,6 +261,22 @@
|
||||
<string name="about__view_source_code" comment="Label of View source code button in About">Forráskód</string>
|
||||
<string name="about__license__title" comment="Title of Open-source licenses dialog">Nyílt forráskódú licencek</string>
|
||||
<!-- Assets strings -->
|
||||
<string name="assets__file__name">Név</string>
|
||||
<string name="assets__file__source">Forrás</string>
|
||||
<string name="assets__action__add">Hozzáadás</string>
|
||||
<string name="assets__action__cancel">Mégse</string>
|
||||
<string name="assets__action__cancel_confirm_title">Kilépés megerősítése</string>
|
||||
<string name="assets__action__cancel_confirm_message">Biztosan el szeretne vetni minden mentetlen változtatást? Ezt a műveletet nem lehet visszavonni.</string>
|
||||
<string name="assets__action__delete">Törlés</string>
|
||||
<string name="assets__action__delete_confirm_title">Törlés megerősítése</string>
|
||||
<string name="assets__action__delete_confirm_message">Biztosan törölni szeretné ezt \"%s\"? Ezt a műveletet nem lehet visszavonni.</string>
|
||||
<string name="assets__action__edit">Szerkesztés</string>
|
||||
<string name="assets__action__export">Exportálás</string>
|
||||
<string name="assets__action__import">Importálás</string>
|
||||
<string name="assets__action__no">Nem</string>
|
||||
<string name="assets__action__save">Mentés</string>
|
||||
<string name="assets__action__yes">Igen</string>
|
||||
<string name="assets__error__invalid">Érvénytelen</string>
|
||||
<!-- Setup UI strings -->
|
||||
<string name="setup__title" comment="Title of Setup">Beállítás</string>
|
||||
<string name="setup__prev_button" comment="Label of Previous button in Setup (try to find a short translation due to limited space in UI)">Előző</string>
|
||||
|
||||
Some files were not shown because too many files have changed in this diff Show More
Reference in New Issue
Block a user