Compare commits
94 Commits
v0.5.0-alp
...
flest
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
9c1bfb60ba | ||
|
|
76702d6d68 | ||
|
|
28df80a1df | ||
|
|
56a81f86a3 | ||
|
|
ab65aac74a | ||
|
|
ee08c58db2 | ||
|
|
05d4a5cf62 | ||
|
|
c5c8f7a4c3 | ||
|
|
ce3aee93d6 | ||
|
|
96340f7277 | ||
|
|
d0dcf5be38 | ||
|
|
15450a760e | ||
|
|
de0027d87e | ||
|
|
c7e83fca21 | ||
|
|
115dc5c42a | ||
|
|
c78cf84d6c | ||
|
|
5e59f144dd | ||
|
|
564c075763 | ||
|
|
86365d393b | ||
|
|
45a0c9ef63 | ||
|
|
25da6be1a4 | ||
|
|
976afc2e51 | ||
|
|
d994da8c97 | ||
|
|
40a22a762a | ||
|
|
264b9ff98b | ||
|
|
f1b7ddedb8 | ||
|
|
b1665f61e5 | ||
|
|
0fa663f658 | ||
|
|
b7f5bf267d | ||
|
|
8563f37c98 | ||
|
|
d3a2e50dda | ||
|
|
29562c9980 | ||
|
|
5bbb5cfbce | ||
|
|
4ada583418 | ||
|
|
200a195ae6 | ||
|
|
fa910692bc | ||
|
|
c3545d1625 | ||
|
|
300ca755ec | ||
|
|
3efb760787 | ||
|
|
647f7c106b | ||
|
|
d998f8fe0c | ||
|
|
b7020d7cc9 | ||
|
|
5b874fc22a | ||
|
|
4a6fad851c | ||
|
|
6de6b37f6f | ||
|
|
d2eb6fd1c4 | ||
|
|
4b84a1ed40 | ||
|
|
a1d4079ef9 | ||
|
|
ba6d401447 | ||
|
|
43168fc31f | ||
|
|
d234d30154 | ||
|
|
e010a22863 | ||
|
|
da3b99fda8 | ||
|
|
23f58496e3 | ||
|
|
40ecbe1428 | ||
|
|
62a2131fa8 | ||
|
|
df8f96396f | ||
|
|
bace0259ec | ||
|
|
64f062307d | ||
|
|
2ca69f8fa9 | ||
|
|
f8537a2245 | ||
|
|
cdb6707850 | ||
|
|
35db9be1bf | ||
|
|
8551bb6842 | ||
|
|
9ad5bc68d3 | ||
|
|
ebf5c0f898 | ||
|
|
f913b4f7db | ||
|
|
4f966385ec | ||
|
|
e2ce63a2e9 | ||
|
|
64603c4692 | ||
|
|
90d3fbfdf1 | ||
|
|
1f01c56c68 | ||
|
|
c0a5486619 | ||
|
|
511802cb25 | ||
|
|
eb057ecaf5 | ||
|
|
f93938b43a | ||
|
|
2b7f8212c7 | ||
|
|
44c2c6e9c1 | ||
|
|
a2cfe091a6 | ||
|
|
4d9b4d5522 | ||
|
|
defe45fec6 | ||
|
|
c6721067bf | ||
|
|
a7f55d4589 | ||
|
|
eb2e260924 | ||
|
|
4950533409 | ||
|
|
813047fb40 | ||
|
|
96f3dccfc2 | ||
|
|
65595076ee | ||
|
|
bf1563ae78 | ||
|
|
d111771e06 | ||
|
|
00ce01e102 | ||
|
|
15b7022204 | ||
|
|
759b7f0033 | ||
|
|
73c3777529 |
11
.dockerignore
Normal file
11
.dockerignore
Normal file
@@ -0,0 +1,11 @@
|
||||
**/.*/
|
||||
!.git/
|
||||
**/build/
|
||||
**/dist/
|
||||
**/out/
|
||||
**/target/
|
||||
utils/
|
||||
!utils/repr_build/scripts/
|
||||
.env
|
||||
gradlew.bat
|
||||
local.properties
|
||||
13
.github/ISSUE_TEMPLATE/bug_report.yml
vendored
13
.github/ISSUE_TEMPLATE/bug_report.yml
vendored
@@ -1,4 +1,4 @@
|
||||
name: Bug Report
|
||||
name: 🐛 Bug Report
|
||||
description: Create a report to help FlorisBoard improve
|
||||
labels:
|
||||
- "bug"
|
||||
@@ -62,3 +62,14 @@ body:
|
||||
placeholder: e.g. 10, Stock
|
||||
validations:
|
||||
required: true
|
||||
- type: checkboxes
|
||||
id: checklist
|
||||
attributes:
|
||||
label: "Checklist"
|
||||
options:
|
||||
- label: "I made sure that there are *no existing issues* - [open](https://github.com/florisboard/florisboard/issues) or [closed](https://github.com/florisboard/florisboard/issues?q=is%3Aissue+is%3Aclosed) - which I could contribute my information to."
|
||||
required: true
|
||||
- label: "I have read and understood the [contribution guidelines](https://github.com/florisboard/florisboard/blob/main/CONTRIBUTING.md)."
|
||||
required: true
|
||||
- label: "I have taken the time to fill in all the required details. I understand that the bug report will be dismissed otherwise."
|
||||
required: true
|
||||
|
||||
12
.github/ISSUE_TEMPLATE/config.yml
vendored
12
.github/ISSUE_TEMPLATE/config.yml
vendored
@@ -1,8 +1,8 @@
|
||||
blank_issues_enabled: false
|
||||
contact_links:
|
||||
- name: Ask a question
|
||||
url: https://github.com/florisboard/florisboard/discussions/new?category=q-a
|
||||
about: Ask here if you have a question about FlorisBoard or need assistance
|
||||
- name: General feedback
|
||||
url: https://github.com/florisboard/florisboard/discussions/new?category=feedback
|
||||
about: Give general feedback about this project
|
||||
- name: 💬 Matrix
|
||||
url: https://matrix.to/#/#florisboard:matrix.org
|
||||
about: General chat about FlorisBoard and quick Q/A
|
||||
- name: ❓ Questions / Feedback
|
||||
url: https://github.com/florisboard/florisboard/discussions/new/choose
|
||||
about: Post your questions or feedback in the discussions panel
|
||||
|
||||
13
.github/ISSUE_TEMPLATE/crash_report.yml
vendored
13
.github/ISSUE_TEMPLATE/crash_report.yml
vendored
@@ -1,4 +1,4 @@
|
||||
name: Crash report
|
||||
name: 💥 Crash report
|
||||
description: Create a report with a generated crash log attached to help FlorisBoard improve
|
||||
labels:
|
||||
- "bug"
|
||||
@@ -36,3 +36,14 @@ body:
|
||||
description: Paste the generated crash log below
|
||||
validations:
|
||||
required: true
|
||||
- type: checkboxes
|
||||
id: checklist
|
||||
attributes:
|
||||
label: "Checklist"
|
||||
options:
|
||||
- label: "I made sure that there are *no existing issues* - [open](https://github.com/florisboard/florisboard/issues) or [closed](https://github.com/florisboard/florisboard/issues?q=is%3Aissue+is%3Aclosed) - which I could contribute my information to."
|
||||
required: true
|
||||
- label: "I have read and understood the [contribution guidelines](https://github.com/florisboard/florisboard/blob/main/CONTRIBUTING.md)."
|
||||
required: true
|
||||
- label: "I have taken the time to fill in all the required details. I understand that the crash report will be dismissed otherwise."
|
||||
required: true
|
||||
|
||||
13
.github/ISSUE_TEMPLATE/feature_request.yml
vendored
13
.github/ISSUE_TEMPLATE/feature_request.yml
vendored
@@ -1,4 +1,4 @@
|
||||
name: Feature request / Suggestion
|
||||
name: ✨ Feature request
|
||||
description: Suggest an idea for this project
|
||||
labels:
|
||||
- "proposal"
|
||||
@@ -20,3 +20,14 @@ body:
|
||||
description: Please explain your idea in a precise way.
|
||||
validations:
|
||||
required: true
|
||||
- type: checkboxes
|
||||
id: checklist
|
||||
attributes:
|
||||
label: "Checklist"
|
||||
options:
|
||||
- label: "I made sure that there are *no existing issues* - [open](https://github.com/florisboard/florisboard/issues) or [closed](https://github.com/florisboard/florisboard/issues?q=is%3Aissue+is%3Aclosed) - which I could contribute my information to."
|
||||
required: true
|
||||
- label: "I have read and understood the [contribution guidelines](https://github.com/florisboard/florisboard/blob/main/CONTRIBUTING.md)."
|
||||
required: true
|
||||
- label: "I have taken the time to fill in all the required details. I understand that the feature request will be dismissed otherwise."
|
||||
required: true
|
||||
|
||||
4
.github/workflows/android.yml
vendored
4
.github/workflows/android.yml
vendored
@@ -25,14 +25,14 @@ jobs:
|
||||
with:
|
||||
submodules: recursive
|
||||
|
||||
- uses: gradle/actions/wrapper-validation@v3
|
||||
- uses: gradle/actions/wrapper-validation@v4
|
||||
- name: Set up JDK 17
|
||||
uses: actions/setup-java@v4
|
||||
with:
|
||||
java-version: 17
|
||||
distribution: temurin
|
||||
- name: Set up CMake and Ninja
|
||||
uses: lukka/get-cmake@latest
|
||||
uses: lukka/get-cmake@v4.0.2
|
||||
- name: Build with Gradle
|
||||
run: ./gradlew clean assembleDebug
|
||||
- uses: actions/upload-artifact@v4
|
||||
|
||||
@@ -4,32 +4,34 @@ Thanks for considering contributing to FlorisBoard!
|
||||
|
||||
There are several ways to contribute to FlorisBoard. This document provides some general guidelines for each type of contribution.
|
||||
|
||||
## General contributions
|
||||
The FlorisBoard community is international, as such we require all contributions, including issues, pull requests, and participation in the Matrix chat to be in English and follow the [code of conduct](https://github.com/florisboard/florisboard/blob/main/CODE_OF_CONDUCT.md). Contributions not adhering to these requirements will be dismissed. Thanks for making the FlorisBoard community an inclusive and safe space for everyone!
|
||||
|
||||
### Translation
|
||||
## Non-code contributions
|
||||
|
||||
To make FlorisBoard accessible in as many languages as possible, the platform [Crowdin](https://crowdin.florisboard.patrickgold.dev) is used to crowdsource and manage translations. The list of languages in Crowdin covers a good range of languages, but feel free to send an email to [florisboard@patrickgold.dev](mailto:florisboard@patrickgold.dev) to request a new language.
|
||||
### Translations
|
||||
|
||||
To make FlorisBoard accessible in as many languages as possible, the platform [Crowdin](https://crowdin.florisboard.patrickgold.dev) is used to crowdsource and manage translations. The list of languages in Crowdin covers a good range of languages, but feel free to email [florisboard@patrickgold.dev](mailto:florisboard@patrickgold.dev) to request a new language.
|
||||
|
||||
> [!IMPORTANT]
|
||||
> This is the only source of translations - **PRs that add/update translations are not accepted.**
|
||||
|
||||
### Feedback
|
||||
|
||||
You can [give general feedback](https://github.com/florisboard/florisboard/discussions/new?category=feedback) directly here on GitHub. This is the preferred way to give feedback, as it allows not only for me to read and respond to feedback, but for everyone in this community.
|
||||
|
||||
### Bug reporting
|
||||
|
||||
This kind of contribution is the most important, as it tells where FlorisBoard has flaws and thus should be improved to maximize stability and user experience. To make this process as smooth as possible, please use the pre-made [issue template](.github/ISSUE_TEMPLATE/bug_report.md) for bug reporting. This makes it easy for us to understand what the bug is and how to solve it.
|
||||
Allows us to see where FlorisBoard has flaws and should be improved to maximize stability and user experience. To make this process as smooth as possible, please use the pre-made [bug report template](https://github.com/florisboard/florisboard/issues/new?template=bug_report.yml). This makes it easy for us to understand what the bug is and how to solve it.
|
||||
|
||||
#### Capturing error logs
|
||||
|
||||
Logs are captured by FlorisBoard's crash handler, which gives you the ability to copy it to the clipboard and paste it in GitHub. This is the preferred way to capture logs.
|
||||
Logs are captured by FlorisBoard's crash handler, which gives you the ability to copy it to the clipboard and paste it in the crash report [issue template](https://github.com/florisboard/florisboard/issues/new?template=crash_report.yml). This is the preferred way to capture logs.
|
||||
|
||||
Alternatively, you can also use ADB (Android Debug Bridge) to capture the error log. This is recommended for experienced users only.
|
||||
|
||||
### Feature proposals
|
||||
|
||||
Use the feature proposal issue template to suggest a new idea or improvement for this project.
|
||||
Use the feature proposal [issue template](https://github.com/florisboard/florisboard/issues/new?template=feature_request.yml) to suggest a new idea or improvement for this project.
|
||||
|
||||
### Feedback
|
||||
|
||||
You can [give general feedback](https://github.com/florisboard/florisboard/discussions/new?category=feedback) directly here on GitHub. This is the preferred way to give feedback, as it allows not only for me to read and respond to feedback, but for everyone in this community.
|
||||
|
||||
## Code contributions
|
||||
|
||||
@@ -38,15 +40,15 @@ You are always welcome to contribute new features or work on existing issues, th
|
||||
> [!NOTE]
|
||||
> If you intend to implement a bigger feature please coordinate with us so we can prevent that there's a major difference in expected implementation.
|
||||
|
||||
If you are overwhelmed by the code don't hesistate to ask for help in the [dev chat](https://matrix.to/#/#florisboard-dev:matrix.org) or the discussions tab! Some issues are also marked as good first issue, which are easy to do tasks.
|
||||
If you are overwhelmed by the code don't hesitate to ask for help in the [dev chat](https://matrix.to/#/#florisboard-dev:matrix.org) or the discussions tab! Some issues are also marked as good first issue, which are easy to do tasks.
|
||||
|
||||
### System requirements for development
|
||||
|
||||
- Desktop PC with Linux or WSL2 (Windows)
|
||||
- MacOS and Windows without WSL2 probably works too however there's no official support
|
||||
- At least 16GB of RAM (because of Android Studio)
|
||||
- At least 16GB of RAM (because of Android Studio / IntelliJ)
|
||||
- The following tools must be installed:
|
||||
- Android Studio (bundles SDK and NDK)
|
||||
- Android Studio (bundles SDK and NDK) or IntelliJ with Android and Compose plugin
|
||||
- Java 17
|
||||
- CMake 3.22+
|
||||
- Clang 15+
|
||||
@@ -64,34 +66,7 @@ If you want to manually build the project without Android Studio you must ensure
|
||||
|
||||
and Gradle should take care of every build task.
|
||||
|
||||
## Joining the team
|
||||
|
||||
If you want to join the core maintainer/moderator team on a volunteer basis and be part of this project's journey that's great to hear!
|
||||
|
||||
### Basic Requirements
|
||||
|
||||
- A passion for seeing FlorisBoard flourish
|
||||
- Good English skills for team and public communication
|
||||
- A GitHub account and a Matrix handle
|
||||
|
||||
### Why Join
|
||||
|
||||
You'll have the chance to work directly with me and other team members. While the general idea is for us to work on all kinds of different aspects of the project as a team, if you're particularly interested in a specific area (e.g., UI, extensions, text processing), that's totally okay too!
|
||||
|
||||
### Available Roles
|
||||
|
||||
Currently the following roles are available and need help:
|
||||
|
||||
Role Description | Required Dev Experience
|
||||
---|---
|
||||
Software Developer (Kotlin) for Core App | Java/Kotlin development experience (on Android)
|
||||
Software Developer (Rust) for Native Core | Some Rust development experience
|
||||
GitHub Issues/Discussions Moderator | None
|
||||
Crowdin Translation Verifier | Language proficiency for the language you want to verify
|
||||
|
||||
Interested? Feel free to dm me ([@patrickgold](https://matrix.to/#/@patrickgold:matrix.org)) on Matrix or send an email to [florisboard@patrickgold.dev](mailto:florisboard@patrickgold.dev).
|
||||
|
||||
## Donating
|
||||
|
||||
Alternatively you can also show your support by buying me a coffee, so I can stay up all night and chase away bugs or add new cool stuff :)
|
||||
You can also show your support by buying me a coffee, so I can stay up all night and chase away bugs or add new cool stuff :)
|
||||
See the `Sponsors` button for available options!
|
||||
|
||||
@@ -64,7 +64,7 @@ fully respecting your privacy. Currently in early-beta state.
|
||||
</tr>
|
||||
</table>
|
||||
|
||||
Beginning with v0.6.0 FlorisBoard will enter the public beta on Google Play.
|
||||
Beginning with v0.7 FlorisBoard will enter the public beta on Google Play.
|
||||
|
||||
## Highlighted features
|
||||
- Integrated clipboard manager / history
|
||||
@@ -74,7 +74,7 @@ Beginning with v0.6.0 FlorisBoard will enter the public beta on Google Play.
|
||||
|
||||
> [!IMPORTANT]
|
||||
> Word suggestions/spell checking are not included in the current releases
|
||||
> and are a major goal for the v0.5 milestone.
|
||||
> and are a major goal for the v0.6 milestone.
|
||||
|
||||
Feature roadmap: See [ROADMAP.md](ROADMAP.md)
|
||||
|
||||
|
||||
71
ROADMAP.md
71
ROADMAP.md
@@ -1,44 +1,63 @@
|
||||
# Roadmap
|
||||
|
||||
This feature roadmap intents to provide transparency to what is planned to be added to FlorisBoard in the foreseeable future. Note that there are no ETAs for any version milestones down below, experience has shown these won't hold anyways.
|
||||
This feature roadmap intents to provide transparency to what is planned to be added to FlorisBoard in the foreseeable future. Note that there are no ETAs for any version milestones down below, experience has shown these won't hold anyway.
|
||||
|
||||
Each major milestone has associated alpha/beta releases, so if you are interested in previewing features quicker, keep an eye out! Each major 0.x release has also patch releases after the initial major release, which will be published on both the stable and preview tracks.
|
||||
|
||||
## 0.5
|
||||
## 0.5 (currently in development)
|
||||
|
||||
- Implement predictive text support / spell checking
|
||||
- Consider adding proximity-based key typo detection
|
||||
- Add new extension type: Language Pack
|
||||
- Basically groups all locale-relevant data (predictive base model, emoji suggestion data, ...)
|
||||
in a dynamically importable extension file
|
||||
- New text processing logic (maybe moved back / split to 0.6)
|
||||
- Add floating keyboard mode
|
||||
- New keyboard layout engine + file syntax based on the upcoming Unicode Keyboard v3 standard
|
||||
- Add Tablet mode / Optimizations for landscape input based on new keyboard layout engine
|
||||
- Add support for any remaining new features introduced with Android 13
|
||||
> [!NOTE]
|
||||
> The milestone 0.5 was split, thus the word suggestions now come with version 0.6. The old version 0.6 has been moved down and is now 0.7. The time it takes to implement word suggestions will not change, but we can now release the new theme editor earlier, which would otherwise lie dormant.
|
||||
|
||||
- [ ] Theme rework part II / Snygg v2
|
||||
- [x] See https://github.com/florisboard/florisboard/pull/2855
|
||||
- [x] Spaces in URI bug (See https://github.com/florisboard/florisboard/issues/2898)
|
||||
- [ ] Rework cache manager (See https://github.com/florisboard/florisboard/issues/2870)
|
||||
- [x] Re-add time based theme switching (See https://github.com/florisboard/florisboard/pull/2977)
|
||||
- [ ] Add support for any remaining new features introduced with Android 13 / 14
|
||||
- [ ] Proper physical keyboard support (See https://github.com/florisboard/florisboard/issues/2815)
|
||||
- [x] Raise minimum required Android version from Android 7 (SDK level 24) to Android 8 (SDK level 26)
|
||||
|
||||
## 0.6
|
||||
|
||||
- Complete rework of the Emoji panel
|
||||
- Emoji search
|
||||
- Fully scrollable emoji list (soft category borders)
|
||||
- More granular themeing options
|
||||
- Layout customization (e.g. placement of category buttons)
|
||||
- Maybe: consider upgrading to emoji2 for better unified system-wide emoji styles
|
||||
- Reimplementation of glide typing with the new layout engine and predictive text core
|
||||
- Prepare FlorisBoard repository and app store presence for public beta release on Google Play (will go live with stable 0.6)
|
||||
- Rework branding images and texts of FlorisBoard for the app stores
|
||||
- Focus on stability and experience improvements of the app and keyboard
|
||||
- Add support for new features introduced with Android 14 / 15
|
||||
- Not finalized, but planned: raise minimum required Android version from Android 7 (SDK level 24) to Android 8 (SDK level 26)
|
||||
- [ ] Implement predictive text support / spell checking
|
||||
- [ ] Add new extension type: Language Pack
|
||||
- Basically groups all locale-relevant data (predictive base model, emoji suggestion data, ...)
|
||||
in a dynamically importable extension file
|
||||
|
||||
## k3lp
|
||||
|
||||
> [!NOTE]
|
||||
> The development of k3lp is not tied to a florisboard version and takes place on [codeberg.org](https://codeberg.org/k3lp/k3lp) simultaneously.
|
||||
|
||||
- [ ] New keyboard layout engine + file syntax based on the upcoming Unicode Keyboard v3 standard
|
||||
- [ ] Add Tablet mode / Optimizations for landscape input based on new keyboard layout engine
|
||||
|
||||
## 0.7+
|
||||
|
||||
> [!NOTE]
|
||||
> From 0.6 onwards we plan to have more stable 0.X releases but with at most one large feature per release, thus having a much quicker iteration of new features on the stable track, which is a benefit for everyone involved.
|
||||
|
||||
- [ ] Add floating keyboard mode
|
||||
- [ ] New text processing logic
|
||||
- [ ] Complete rework of the Emoji panel
|
||||
- [ ] Emoji search
|
||||
- [ ] Fully scrollable emoji list (soft category borders)
|
||||
- [ ] Side scrollable emoji list (swipe for next category)
|
||||
- [ ] More granular theming options
|
||||
- [ ] Layout customization (e.g. placement of category buttons)
|
||||
- [ ] Maybe: consider upgrading to emoji2 for better unified system-wide emoji styles
|
||||
- [ ] Reimplementation of glide typing with the new layout engine and predictive text core
|
||||
- [ ] Prepare FlorisBoard repository and app store presence for public beta release on Google Play (will go live with stable 0.7)
|
||||
- [ ] Rework branding images and texts of FlorisBoard for the app stores
|
||||
- [ ] Focus on stability and experience improvements of the app and keyboard
|
||||
- [ ] Add support for new features introduced with Android 15 / 16
|
||||
|
||||
## Backlog / Planned (unassigned)
|
||||
|
||||
**Features that MAY be added (even in versions mentioned above) or dismissed**
|
||||
|
||||
- Full on-board layout editor which allows users to create their own layouts without writing a JSON file
|
||||
- Theme rework part II
|
||||
- Adaptive themes v2
|
||||
- Voice-to-text with Mozilla's open-source voice service (or any other oss voice provider)
|
||||
- Text translation
|
||||
- Stickers/GIFs
|
||||
|
||||
@@ -15,7 +15,6 @@
|
||||
*/
|
||||
|
||||
import java.io.ByteArrayOutputStream
|
||||
import org.jetbrains.kotlin.compose.compiler.gradle.ComposeFeatureFlag
|
||||
|
||||
plugins {
|
||||
alias(libs.plugins.agp.application)
|
||||
@@ -29,25 +28,29 @@ plugins {
|
||||
val projectMinSdk: String by project
|
||||
val projectTargetSdk: String by project
|
||||
val projectCompileSdk: String by project
|
||||
val projectBuildToolsVersion: String by project
|
||||
val projectNdkVersion: String by project
|
||||
val projectVersionCode: String by project
|
||||
val projectVersionName: String by project
|
||||
val projectVersionNameSuffix = projectVersionName.substringAfter("-", "")
|
||||
val projectVersionNameSuffix = projectVersionName.substringAfter("-", "").let { suffix ->
|
||||
if (suffix.isNotEmpty()) {
|
||||
"-$suffix"
|
||||
} else {
|
||||
suffix
|
||||
}
|
||||
}
|
||||
|
||||
android {
|
||||
namespace = "dev.patrickgold.florisboard"
|
||||
compileSdk = projectCompileSdk.toInt()
|
||||
buildToolsVersion = projectBuildToolsVersion
|
||||
ndkVersion = projectNdkVersion
|
||||
buildToolsVersion = tools.versions.buildTools.get()
|
||||
ndkVersion = tools.versions.ndk.get()
|
||||
|
||||
compileOptions {
|
||||
sourceCompatibility = JavaVersion.VERSION_1_8
|
||||
targetCompatibility = JavaVersion.VERSION_1_8
|
||||
sourceCompatibility = JavaVersion.VERSION_11
|
||||
targetCompatibility = JavaVersion.VERSION_11
|
||||
}
|
||||
|
||||
kotlinOptions {
|
||||
jvmTarget = "1.8"
|
||||
jvmTarget = "11"
|
||||
freeCompilerArgs = listOf(
|
||||
"-opt-in=kotlin.contracts.ExperimentalContracts",
|
||||
"-Xjvm-default=all-compatibility",
|
||||
@@ -149,7 +152,13 @@ android {
|
||||
}
|
||||
|
||||
aboutLibraries {
|
||||
configPath = "app/src/main/config"
|
||||
collect {
|
||||
configPath = file("src/main/config")
|
||||
}
|
||||
}
|
||||
|
||||
lint {
|
||||
baseline = file("lint.xml")
|
||||
}
|
||||
|
||||
testOptions {
|
||||
@@ -162,21 +171,21 @@ android {
|
||||
}
|
||||
}
|
||||
|
||||
composeCompiler {
|
||||
// DO NOT ENABLE STRONG SKIPPING! This project currently relies on
|
||||
// recomposition on parent state change to update the UI correctly.
|
||||
featureFlags.add(ComposeFeatureFlag.StrongSkipping.disabled())
|
||||
}
|
||||
|
||||
tasks.withType<Test> {
|
||||
useJUnitPlatform()
|
||||
}
|
||||
|
||||
dependencies {
|
||||
val composeBom = platform(libs.androidx.compose.bom)
|
||||
implementation(composeBom)
|
||||
// testImplementation(composeBom)
|
||||
// androidTestImplementation(composeBom)
|
||||
|
||||
implementation(libs.androidx.activity.compose)
|
||||
implementation(libs.androidx.activity.ktx)
|
||||
implementation(libs.androidx.autofill)
|
||||
implementation(libs.androidx.collection.ktx)
|
||||
implementation(libs.androidx.compose.material.icons)
|
||||
implementation(libs.androidx.compose.material3)
|
||||
implementation(libs.androidx.compose.runtime.livedata)
|
||||
implementation(libs.androidx.compose.ui)
|
||||
@@ -186,7 +195,6 @@ dependencies {
|
||||
implementation(libs.androidx.emoji2)
|
||||
implementation(libs.androidx.emoji2.views)
|
||||
implementation(libs.androidx.exifinterface)
|
||||
implementation(libs.androidx.material.icons)
|
||||
implementation(libs.androidx.navigation.compose)
|
||||
implementation(libs.androidx.profileinstaller)
|
||||
ksp(libs.androidx.room.compiler)
|
||||
@@ -207,6 +215,7 @@ dependencies {
|
||||
implementation(project(":lib:native"))
|
||||
implementation(project(":lib:snygg"))
|
||||
|
||||
testImplementation(libs.kotlin.test.junit5)
|
||||
androidTestImplementation(libs.androidx.test.ext)
|
||||
androidTestImplementation(libs.androidx.test.espresso.core)
|
||||
}
|
||||
|
||||
@@ -1,3 +1,3 @@
|
||||
<lint>
|
||||
<issue id="UsingMaterialAndMaterial3Libraries" severity="ignore" />
|
||||
<issue id="ExtraTranslation" severity="warning"/>
|
||||
</lint>
|
||||
|
||||
@@ -17,6 +17,13 @@
|
||||
"direction": "rtl",
|
||||
"modifier": "org.florisboard.layouts:arabic"
|
||||
},
|
||||
{
|
||||
"id": "armenian_alt_phonetic",
|
||||
"label": "Armenian Alt Phonetic",
|
||||
"authors": [ "MikayelB" ],
|
||||
"direction": "ltr",
|
||||
"modifier": "org.florisboard.layouts:armenian"
|
||||
},
|
||||
{
|
||||
"id": "western_armenian",
|
||||
"label": "Armenian (Western)",
|
||||
|
||||
@@ -3,46 +3,52 @@
|
||||
{ "code": 2535, "label": "১", "type": "numeric", "popup": {
|
||||
"main": { "code": 49, "label": "1" },
|
||||
"relevant": [
|
||||
{ "code": 8537, "label": "⅙" },
|
||||
{ "code": 8321, "label": "₁" },
|
||||
{ "code": 8528, "label": "⅐" },
|
||||
{ "code": 8539, "label": "⅛" },
|
||||
{ "code": 8529, "label": "⅑" },
|
||||
{ "code": 8530, "label": "⅒" },
|
||||
{ "code": 8543, "label": "⅟" },
|
||||
{ "code": 185, "label": "¹" },
|
||||
{ "code": 189, "label": "½" },
|
||||
{ "code": 8531, "label": "⅓" },
|
||||
{ "code": 188, "label": "¼" },
|
||||
{ "code": 8533, "label": "⅕" }
|
||||
{ "code": 8533, "label": "⅕" },
|
||||
{ "code": 8537, "label": "⅙" }
|
||||
]
|
||||
} },
|
||||
{ "code": 2536, "label": "২", "type": "numeric", "popup": {
|
||||
"main": { "code": 50, "label": "2" },
|
||||
"relevant": [
|
||||
{ "code": 8532, "label": "⅔" },
|
||||
{ "code": 8322, "label": "₂"},
|
||||
{ "code": 178, "label": "²" },
|
||||
{ "code": 8532, "label": "⅔" },
|
||||
{ "code": 8534, "label": "⅖" }
|
||||
]
|
||||
} },
|
||||
{ "code": 2537, "label": "৩", "type": "numeric", "popup": {
|
||||
"main": { "code": 51, "label": "3" },
|
||||
"relevant": [
|
||||
{ "code": 8535, "label": "⅗" },
|
||||
{ "code": 190, "label": "¾" },
|
||||
{ "code": 179, "label": "³" },
|
||||
{ "code": 8540, "label": "⅜" }
|
||||
{ "code": 8535, "label": "⅗" },
|
||||
{ "code": 8540, "label": "⅜" },
|
||||
{ "code": 8323, "label": "₃"},
|
||||
{ "code": 179, "label": "³" }
|
||||
]
|
||||
} },
|
||||
{ "code": 2538, "label": "৪", "type": "numeric", "popup": {
|
||||
"main": { "code": 52, "label": "4" },
|
||||
"relevant": [
|
||||
{ "code": 8536, "label": "⅘" },
|
||||
{ "code": 8308, "label": "⁴" }
|
||||
{ "code": 8324, "label": "₄" },
|
||||
{ "code": 8308, "label": "⁴" },
|
||||
{ "code": 8536, "label": "⅘" }
|
||||
]
|
||||
} },
|
||||
{ "code": 2539, "label": "৫", "type": "numeric", "popup": {
|
||||
"main": { "code": 53, "label": "5" },
|
||||
"relevant": [
|
||||
{ "code": 8538, "label": "⅚" },
|
||||
{ "code": 8325, "label": "₅" },
|
||||
{ "code": 8309, "label": "⁵" },
|
||||
{ "code": 8541, "label": "⅝" }
|
||||
]
|
||||
@@ -50,6 +56,7 @@
|
||||
{ "code": 2540, "label": "৬", "type": "numeric", "popup": {
|
||||
"main": { "code": 54, "label": "6" },
|
||||
"relevant": [
|
||||
{ "code": 8326, "label": "₆" },
|
||||
{ "code": 8310, "label": "⁶" }
|
||||
]
|
||||
} },
|
||||
@@ -57,27 +64,32 @@
|
||||
"main": { "code": 55, "label": "7" },
|
||||
"relevant": [
|
||||
{ "code": 8542, "label": "⅞" },
|
||||
{ "code": 8327, "label": "₇" },
|
||||
{ "code": 8311, "label": "⁷" }
|
||||
]
|
||||
} },
|
||||
{ "code": 2542, "label": "৮", "type": "numeric", "popup": {
|
||||
"main": { "code": 56, "label": "8" },
|
||||
"relevant": [
|
||||
{ "code": 8328, "label": "₈" },
|
||||
{ "code": 8312, "label": "⁸" }
|
||||
]
|
||||
} },
|
||||
{ "code": 2543, "label": "৯", "type": "numeric", "popup": {
|
||||
"main": { "code": 57, "label": "9" },
|
||||
"relevant": [
|
||||
{ "code": 8329, "label": "₉" },
|
||||
{ "code": 8313, "label": "⁹" }
|
||||
]
|
||||
} },
|
||||
{ "code": 2534, "label": "০", "type": "numeric", "popup": {
|
||||
"main": { "code": 48, "label": "0" },
|
||||
"relevant": [
|
||||
{ "code": 8319, "label": "ⁿ" },
|
||||
{ "code": 8709, "label": "∅" },
|
||||
{ "code": 8304, "label": "⁰" }
|
||||
{ "code": 8319, "label": "ⁿ" },
|
||||
{ "code": 8304, "label": "⁰" },
|
||||
{ "code": 8585, "label": "↉" },
|
||||
{ "code": 8320, "label": "₀" }
|
||||
]
|
||||
} }
|
||||
]
|
||||
|
||||
@@ -33,7 +33,7 @@
|
||||
{ "code": 32902, "label": "肆" },
|
||||
{ "code": 18825, "label": "䦉" },
|
||||
{ "code": 20118, "label": "亖" },
|
||||
{ "code": 65300, "label": "3" }
|
||||
{ "code": 65300, "label": "4" }
|
||||
]
|
||||
} },
|
||||
{ "code": 20116, "label": "五", "type": "numeric", "popup": {
|
||||
|
||||
@@ -3,46 +3,52 @@
|
||||
{ "code": 2407, "label": "१", "type": "numeric", "popup": {
|
||||
"main": { "code": 49, "label": "1" },
|
||||
"relevant": [
|
||||
{ "code": 8537, "label": "⅙" },
|
||||
{ "code": 8321, "label": "₁" },
|
||||
{ "code": 8528, "label": "⅐" },
|
||||
{ "code": 8539, "label": "⅛" },
|
||||
{ "code": 8529, "label": "⅑" },
|
||||
{ "code": 8530, "label": "⅒" },
|
||||
{ "code": 8543, "label": "⅟" },
|
||||
{ "code": 185, "label": "¹" },
|
||||
{ "code": 189, "label": "½" },
|
||||
{ "code": 8531, "label": "⅓" },
|
||||
{ "code": 188, "label": "¼" },
|
||||
{ "code": 8533, "label": "⅕" }
|
||||
{ "code": 8533, "label": "⅕" },
|
||||
{ "code": 8537, "label": "⅙" }
|
||||
]
|
||||
} },
|
||||
{ "code": 2408, "label": "२", "type": "numeric", "popup": {
|
||||
"main": { "code": 50, "label": "2" },
|
||||
"relevant": [
|
||||
{ "code": 8532, "label": "⅔" },
|
||||
{ "code": 8322, "label": "₂"},
|
||||
{ "code": 178, "label": "²" },
|
||||
{ "code": 8532, "label": "⅔" },
|
||||
{ "code": 8534, "label": "⅖" }
|
||||
]
|
||||
} },
|
||||
{ "code": 2409, "label": "३", "type": "numeric", "popup": {
|
||||
"main": { "code": 51, "label": "3" },
|
||||
"relevant": [
|
||||
{ "code": 8535, "label": "⅗" },
|
||||
{ "code": 190, "label": "¾" },
|
||||
{ "code": 179, "label": "³" },
|
||||
{ "code": 8540, "label": "⅜" }
|
||||
{ "code": 8535, "label": "⅗" },
|
||||
{ "code": 8540, "label": "⅜" },
|
||||
{ "code": 8323, "label": "₃"},
|
||||
{ "code": 179, "label": "³" }
|
||||
]
|
||||
} },
|
||||
{ "code": 2410, "label": "४", "type": "numeric", "popup": {
|
||||
"main": { "code": 52, "label": "4" },
|
||||
"relevant": [
|
||||
{ "code": 8536, "label": "⅘" },
|
||||
{ "code": 8308, "label": "⁴" }
|
||||
{ "code": 8324, "label": "₄" },
|
||||
{ "code": 8308, "label": "⁴" },
|
||||
{ "code": 8536, "label": "⅘" }
|
||||
]
|
||||
} },
|
||||
{ "code": 2411, "label": "५", "type": "numeric", "popup": {
|
||||
"main": { "code": 53, "label": "5" },
|
||||
"relevant": [
|
||||
{ "code": 8538, "label": "⅚" },
|
||||
{ "code": 8325, "label": "₅" },
|
||||
{ "code": 8309, "label": "⁵" },
|
||||
{ "code": 8541, "label": "⅝" }
|
||||
]
|
||||
@@ -50,6 +56,7 @@
|
||||
{ "code": 2412, "label": "६", "type": "numeric", "popup": {
|
||||
"main": { "code": 54, "label": "6" },
|
||||
"relevant": [
|
||||
{ "code": 8326, "label": "₆" },
|
||||
{ "code": 8310, "label": "⁶" }
|
||||
]
|
||||
} },
|
||||
@@ -57,27 +64,32 @@
|
||||
"main": { "code": 55, "label": "7" },
|
||||
"relevant": [
|
||||
{ "code": 8542, "label": "⅞" },
|
||||
{ "code": 8327, "label": "₇" },
|
||||
{ "code": 8311, "label": "⁷" }
|
||||
]
|
||||
} },
|
||||
{ "code": 2414, "label": "८", "type": "numeric", "popup": {
|
||||
"main": { "code": 56, "label": "8" },
|
||||
"relevant": [
|
||||
{ "code": 8328, "label": "₈" },
|
||||
{ "code": 8312, "label": "⁸" }
|
||||
]
|
||||
} },
|
||||
{ "code": 2415, "label": "९", "type": "numeric", "popup": {
|
||||
"main": { "code": 57, "label": "9" },
|
||||
"relevant": [
|
||||
{ "code": 8329, "label": "₉" },
|
||||
{ "code": 8313, "label": "⁹" }
|
||||
]
|
||||
} },
|
||||
{ "code": 2406, "label": "०", "type": "numeric", "popup": {
|
||||
"main": { "code": 48, "label": "0" },
|
||||
"relevant": [
|
||||
{ "code": 8319, "label": "ⁿ" },
|
||||
{ "code": 8709, "label": "∅" },
|
||||
{ "code": 8304, "label": "⁰" }
|
||||
{ "code": 8319, "label": "ⁿ" },
|
||||
{ "code": 8304, "label": "⁰" },
|
||||
{ "code": 8585, "label": "↉" },
|
||||
{ "code": 8320, "label": "₀" }
|
||||
]
|
||||
} }
|
||||
]
|
||||
|
||||
@@ -3,46 +3,52 @@
|
||||
{ "code": 1633, "label": "١", "type": "numeric", "popup": {
|
||||
"main": { "code": 49, "label": "1" },
|
||||
"relevant": [
|
||||
{ "code": 8537, "label": "⅙" },
|
||||
{ "code": 8321, "label": "₁" },
|
||||
{ "code": 8528, "label": "⅐" },
|
||||
{ "code": 8539, "label": "⅛" },
|
||||
{ "code": 8529, "label": "⅑" },
|
||||
{ "code": 8530, "label": "⅒" },
|
||||
{ "code": 8543, "label": "⅟" },
|
||||
{ "code": 185, "label": "¹" },
|
||||
{ "code": 189, "label": "½" },
|
||||
{ "code": 8531, "label": "⅓" },
|
||||
{ "code": 188, "label": "¼" },
|
||||
{ "code": 8533, "label": "⅕" }
|
||||
{ "code": 8533, "label": "⅕" },
|
||||
{ "code": 8537, "label": "⅙" }
|
||||
]
|
||||
} },
|
||||
{ "code": 1634, "label": "٢", "type": "numeric", "popup": {
|
||||
"main": { "code": 50, "label": "2" },
|
||||
"relevant": [
|
||||
{ "code": 8532, "label": "⅔" },
|
||||
{ "code": 8322, "label": "₂"},
|
||||
{ "code": 178, "label": "²" },
|
||||
{ "code": 8532, "label": "⅔" },
|
||||
{ "code": 8534, "label": "⅖" }
|
||||
]
|
||||
} },
|
||||
{ "code": 1635, "label": "٣", "type": "numeric", "popup": {
|
||||
"main": { "code": 51, "label": "3" },
|
||||
"relevant": [
|
||||
{ "code": 8535, "label": "⅗" },
|
||||
{ "code": 190, "label": "¾" },
|
||||
{ "code": 179, "label": "³" },
|
||||
{ "code": 8540, "label": "⅜" }
|
||||
{ "code": 8535, "label": "⅗" },
|
||||
{ "code": 8540, "label": "⅜" },
|
||||
{ "code": 8323, "label": "₃"},
|
||||
{ "code": 179, "label": "³" }
|
||||
]
|
||||
} },
|
||||
{ "code": 1636, "label": "٤", "type": "numeric", "popup": {
|
||||
"main": { "code": 52, "label": "4" },
|
||||
"relevant": [
|
||||
{ "code": 8536, "label": "⅘" },
|
||||
{ "code": 8308, "label": "⁴" }
|
||||
{ "code": 8324, "label": "₄" },
|
||||
{ "code": 8308, "label": "⁴" },
|
||||
{ "code": 8536, "label": "⅘" }
|
||||
]
|
||||
} },
|
||||
{ "code": 1637, "label": "٥", "type": "numeric", "popup": {
|
||||
"main": { "code": 53, "label": "5" },
|
||||
"relevant": [
|
||||
{ "code": 8538, "label": "⅚" },
|
||||
{ "code": 8325, "label": "₅" },
|
||||
{ "code": 8309, "label": "⁵" },
|
||||
{ "code": 8541, "label": "⅝" }
|
||||
]
|
||||
@@ -50,6 +56,7 @@
|
||||
{ "code": 1638, "label": "٦", "type": "numeric", "popup": {
|
||||
"main": { "code": 54, "label": "6" },
|
||||
"relevant": [
|
||||
{ "code": 8326, "label": "₆" },
|
||||
{ "code": 8310, "label": "⁶" }
|
||||
]
|
||||
} },
|
||||
@@ -57,27 +64,32 @@
|
||||
"main": { "code": 55, "label": "7" },
|
||||
"relevant": [
|
||||
{ "code": 8542, "label": "⅞" },
|
||||
{ "code": 8327, "label": "₇" },
|
||||
{ "code": 8311, "label": "⁷" }
|
||||
]
|
||||
} },
|
||||
{ "code": 1640, "label": "٨", "type": "numeric", "popup": {
|
||||
"main": { "code": 56, "label": "8" },
|
||||
"relevant": [
|
||||
{ "code": 8328, "label": "₈" },
|
||||
{ "code": 8312, "label": "⁸" }
|
||||
]
|
||||
} },
|
||||
{ "code": 1641, "label": "٩", "type": "numeric", "popup": {
|
||||
"main": { "code": 57, "label": "9" },
|
||||
"relevant": [
|
||||
{ "code": 8329, "label": "₉" },
|
||||
{ "code": 8313, "label": "⁹" }
|
||||
]
|
||||
} },
|
||||
{ "code": 1632, "label": "٠", "type": "numeric", "popup": {
|
||||
"main": { "code": 48, "label": "0" },
|
||||
"relevant": [
|
||||
{ "code": 8319, "label": "ⁿ" },
|
||||
{ "code": 8709, "label": "∅" },
|
||||
{ "code": 8304, "label": "⁰" }
|
||||
{ "code": 8319, "label": "ⁿ" },
|
||||
{ "code": 8304, "label": "⁰" },
|
||||
{ "code": 8585, "label": "↉" },
|
||||
{ "code": 8320, "label": "₀" }
|
||||
]
|
||||
} }
|
||||
]
|
||||
|
||||
@@ -3,46 +3,52 @@
|
||||
{ "code": 2791, "label": "૧", "type": "numeric", "popup": {
|
||||
"main": { "code": 49, "label": "1" },
|
||||
"relevant": [
|
||||
{ "code": 8537, "label": "⅙" },
|
||||
{ "code": 8321, "label": "₁" },
|
||||
{ "code": 8528, "label": "⅐" },
|
||||
{ "code": 8539, "label": "⅛" },
|
||||
{ "code": 8529, "label": "⅑" },
|
||||
{ "code": 8530, "label": "⅒" },
|
||||
{ "code": 8543, "label": "⅟" },
|
||||
{ "code": 185, "label": "¹" },
|
||||
{ "code": 189, "label": "½" },
|
||||
{ "code": 8531, "label": "⅓" },
|
||||
{ "code": 188, "label": "¼" },
|
||||
{ "code": 8533, "label": "⅕" }
|
||||
{ "code": 8533, "label": "⅕" },
|
||||
{ "code": 8537, "label": "⅙" }
|
||||
]
|
||||
} },
|
||||
{ "code": 2792, "label": "૨", "type": "numeric", "popup": {
|
||||
"main": { "code": 50, "label": "2" },
|
||||
"relevant": [
|
||||
{ "code": 8532, "label": "⅔" },
|
||||
{ "code": 8322, "label": "₂"},
|
||||
{ "code": 178, "label": "²" },
|
||||
{ "code": 8532, "label": "⅔" },
|
||||
{ "code": 8534, "label": "⅖" }
|
||||
]
|
||||
} },
|
||||
{ "code": 2793, "label": "૩", "type": "numeric", "popup": {
|
||||
"main": { "code": 51, "label": "3" },
|
||||
"relevant": [
|
||||
{ "code": 8535, "label": "⅗" },
|
||||
{ "code": 190, "label": "¾" },
|
||||
{ "code": 179, "label": "³" },
|
||||
{ "code": 8540, "label": "⅜" }
|
||||
{ "code": 8535, "label": "⅗" },
|
||||
{ "code": 8540, "label": "⅜" },
|
||||
{ "code": 8323, "label": "₃"},
|
||||
{ "code": 179, "label": "³" }
|
||||
]
|
||||
} },
|
||||
{ "code": 2794, "label": "૪", "type": "numeric", "popup": {
|
||||
"main": { "code": 52, "label": "4" },
|
||||
"relevant": [
|
||||
{ "code": 8536, "label": "⅘" },
|
||||
{ "code": 8308, "label": "⁴" }
|
||||
{ "code": 8324, "label": "₄" },
|
||||
{ "code": 8308, "label": "⁴" },
|
||||
{ "code": 8536, "label": "⅘" }
|
||||
]
|
||||
} },
|
||||
{ "code": 2795, "label": "૫", "type": "numeric", "popup": {
|
||||
"main": { "code": 53, "label": "5" },
|
||||
"relevant": [
|
||||
{ "code": 8538, "label": "⅚" },
|
||||
{ "code": 8325, "label": "₅" },
|
||||
{ "code": 8309, "label": "⁵" },
|
||||
{ "code": 8541, "label": "⅝" }
|
||||
]
|
||||
@@ -50,6 +56,7 @@
|
||||
{ "code": 2796, "label": "૬", "type": "numeric", "popup": {
|
||||
"main": { "code": 54, "label": "6" },
|
||||
"relevant": [
|
||||
{ "code": 8326, "label": "₆" },
|
||||
{ "code": 8310, "label": "⁶" }
|
||||
]
|
||||
} },
|
||||
@@ -57,27 +64,32 @@
|
||||
"main": { "code": 55, "label": "7" },
|
||||
"relevant": [
|
||||
{ "code": 8542, "label": "⅞" },
|
||||
{ "code": 8327, "label": "₇" },
|
||||
{ "code": 8311, "label": "⁷" }
|
||||
]
|
||||
} },
|
||||
{ "code": 2798, "label": "૮", "type": "numeric", "popup": {
|
||||
"main": { "code": 56, "label": "8" },
|
||||
"relevant": [
|
||||
{ "code": 8328, "label": "₈" },
|
||||
{ "code": 8312, "label": "⁸" }
|
||||
]
|
||||
} },
|
||||
{ "code": 2799, "label": "૯", "type": "numeric", "popup": {
|
||||
"main": { "code": 57, "label": "9" },
|
||||
"relevant": [
|
||||
{ "code": 8329, "label": "₉" },
|
||||
{ "code": 8313, "label": "⁹" }
|
||||
]
|
||||
} },
|
||||
{ "code": 2790, "label": "૦", "type": "numeric", "popup": {
|
||||
"main": { "code": 48, "label": "0" },
|
||||
"relevant": [
|
||||
{ "code": 8319, "label": "ⁿ" },
|
||||
{ "code": 8709, "label": "∅" },
|
||||
{ "code": 8304, "label": "⁰" }
|
||||
{ "code": 8319, "label": "ⁿ" },
|
||||
{ "code": 8304, "label": "⁰" },
|
||||
{ "code": 8585, "label": "↉" },
|
||||
{ "code": 8320, "label": "₀" }
|
||||
]
|
||||
} }
|
||||
]
|
||||
|
||||
@@ -3,46 +3,52 @@
|
||||
{ "code": 2663, "label": "੧", "type": "numeric", "popup": {
|
||||
"main": { "code": 49, "label": "1" },
|
||||
"relevant": [
|
||||
{ "code": 8537, "label": "⅙" },
|
||||
{ "code": 8321, "label": "₁" },
|
||||
{ "code": 8528, "label": "⅐" },
|
||||
{ "code": 8539, "label": "⅛" },
|
||||
{ "code": 8529, "label": "⅑" },
|
||||
{ "code": 8530, "label": "⅒" },
|
||||
{ "code": 8543, "label": "⅟" },
|
||||
{ "code": 185, "label": "¹" },
|
||||
{ "code": 189, "label": "½" },
|
||||
{ "code": 8531, "label": "⅓" },
|
||||
{ "code": 188, "label": "¼" },
|
||||
{ "code": 8533, "label": "⅕" }
|
||||
{ "code": 8533, "label": "⅕" },
|
||||
{ "code": 8537, "label": "⅙" }
|
||||
]
|
||||
} },
|
||||
{ "code": 2664, "label": "੨", "type": "numeric", "popup": {
|
||||
"main": { "code": 50, "label": "2" },
|
||||
"relevant": [
|
||||
{ "code": 8532, "label": "⅔" },
|
||||
{ "code": 8322, "label": "₂"},
|
||||
{ "code": 178, "label": "²" },
|
||||
{ "code": 8532, "label": "⅔" },
|
||||
{ "code": 8534, "label": "⅖" }
|
||||
]
|
||||
} },
|
||||
{ "code": 2665, "label": "੩", "type": "numeric", "popup": {
|
||||
"main": { "code": 51, "label": "3" },
|
||||
"relevant": [
|
||||
{ "code": 8535, "label": "⅗" },
|
||||
{ "code": 190, "label": "¾" },
|
||||
{ "code": 179, "label": "³" },
|
||||
{ "code": 8540, "label": "⅜" }
|
||||
{ "code": 8535, "label": "⅗" },
|
||||
{ "code": 8540, "label": "⅜" },
|
||||
{ "code": 8323, "label": "₃"},
|
||||
{ "code": 179, "label": "³" }
|
||||
]
|
||||
} },
|
||||
{ "code": 2666, "label": "੪", "type": "numeric", "popup": {
|
||||
"main": { "code": 52, "label": "4" },
|
||||
"relevant": [
|
||||
{ "code": 8536, "label": "⅘" },
|
||||
{ "code": 8308, "label": "⁴" }
|
||||
{ "code": 8324, "label": "₄" },
|
||||
{ "code": 8308, "label": "⁴" },
|
||||
{ "code": 8536, "label": "⅘" }
|
||||
]
|
||||
} },
|
||||
{ "code": 2667, "label": "੫", "type": "numeric", "popup": {
|
||||
"main": { "code": 53, "label": "5" },
|
||||
"relevant": [
|
||||
{ "code": 8538, "label": "⅚" },
|
||||
{ "code": 8325, "label": "₅" },
|
||||
{ "code": 8309, "label": "⁵" },
|
||||
{ "code": 8541, "label": "⅝" }
|
||||
]
|
||||
@@ -50,6 +56,7 @@
|
||||
{ "code": 2668, "label": "੬", "type": "numeric", "popup": {
|
||||
"main": { "code": 54, "label": "6" },
|
||||
"relevant": [
|
||||
{ "code": 8326, "label": "₆" },
|
||||
{ "code": 8310, "label": "⁶" }
|
||||
]
|
||||
} },
|
||||
@@ -57,27 +64,32 @@
|
||||
"main": { "code": 55, "label": "7" },
|
||||
"relevant": [
|
||||
{ "code": 8542, "label": "⅞" },
|
||||
{ "code": 8327, "label": "₇" },
|
||||
{ "code": 8311, "label": "⁷" }
|
||||
]
|
||||
} },
|
||||
{ "code": 2670, "label": "੮", "type": "numeric", "popup": {
|
||||
"main": { "code": 56, "label": "8" },
|
||||
"relevant": [
|
||||
{ "code": 8328, "label": "₈" },
|
||||
{ "code": 8312, "label": "⁸" }
|
||||
]
|
||||
} },
|
||||
{ "code": 2671, "label": "੯", "type": "numeric", "popup": {
|
||||
"main": { "code": 57, "label": "9" },
|
||||
"relevant": [
|
||||
{ "code": 8329, "label": "₉" },
|
||||
{ "code": 8313, "label": "⁹" }
|
||||
]
|
||||
} },
|
||||
{ "code": 2662, "label": "੦", "type": "numeric", "popup": {
|
||||
"main": { "code": 48, "label": "0" },
|
||||
"relevant": [
|
||||
{ "code": 8319, "label": "ⁿ" },
|
||||
{ "code": 8709, "label": "∅" },
|
||||
{ "code": 8304, "label": "⁰" }
|
||||
{ "code": 8319, "label": "ⁿ" },
|
||||
{ "code": 8304, "label": "⁰" },
|
||||
{ "code": 8585, "label": "↉" },
|
||||
{ "code": 8320, "label": "₀" }
|
||||
]
|
||||
} }
|
||||
]
|
||||
|
||||
@@ -3,46 +3,52 @@
|
||||
{ "code": 3303, "label": "೧", "type": "numeric", "popup": {
|
||||
"main": { "code": 49, "label": "1" },
|
||||
"relevant": [
|
||||
{ "code": 8537, "label": "⅙" },
|
||||
{ "code": 8321, "label": "₁" },
|
||||
{ "code": 8528, "label": "⅐" },
|
||||
{ "code": 8539, "label": "⅛" },
|
||||
{ "code": 8529, "label": "⅑" },
|
||||
{ "code": 8530, "label": "⅒" },
|
||||
{ "code": 8543, "label": "⅟" },
|
||||
{ "code": 185, "label": "¹" },
|
||||
{ "code": 189, "label": "½" },
|
||||
{ "code": 8531, "label": "⅓" },
|
||||
{ "code": 188, "label": "¼" },
|
||||
{ "code": 8533, "label": "⅕" }
|
||||
{ "code": 8533, "label": "⅕" },
|
||||
{ "code": 8537, "label": "⅙" }
|
||||
]
|
||||
} },
|
||||
{ "code": 3304, "label": "೨", "type": "numeric", "popup": {
|
||||
"main": { "code": 50, "label": "2" },
|
||||
"relevant": [
|
||||
{ "code": 8532, "label": "⅔" },
|
||||
{ "code": 8322, "label": "₂"},
|
||||
{ "code": 178, "label": "²" },
|
||||
{ "code": 8532, "label": "⅔" },
|
||||
{ "code": 8534, "label": "⅖" }
|
||||
]
|
||||
} },
|
||||
{ "code": 3305, "label": "೩", "type": "numeric", "popup": {
|
||||
"main": { "code": 51, "label": "3" },
|
||||
"relevant": [
|
||||
{ "code": 8535, "label": "⅗" },
|
||||
{ "code": 190, "label": "¾" },
|
||||
{ "code": 179, "label": "³" },
|
||||
{ "code": 8540, "label": "⅜" }
|
||||
{ "code": 8535, "label": "⅗" },
|
||||
{ "code": 8540, "label": "⅜" },
|
||||
{ "code": 8323, "label": "₃"},
|
||||
{ "code": 179, "label": "³" }
|
||||
]
|
||||
} },
|
||||
{ "code": 3306, "label": "೪", "type": "numeric", "popup": {
|
||||
"main": { "code": 52, "label": "4" },
|
||||
"relevant": [
|
||||
{ "code": 8536, "label": "⅘" },
|
||||
{ "code": 8308, "label": "⁴" }
|
||||
{ "code": 8324, "label": "₄" },
|
||||
{ "code": 8308, "label": "⁴" },
|
||||
{ "code": 8536, "label": "⅘" }
|
||||
]
|
||||
} },
|
||||
{ "code": 3307, "label": "೫", "type": "numeric", "popup": {
|
||||
"main": { "code": 53, "label": "5" },
|
||||
"relevant": [
|
||||
{ "code": 8538, "label": "⅚" },
|
||||
{ "code": 8325, "label": "₅" },
|
||||
{ "code": 8309, "label": "⁵" },
|
||||
{ "code": 8541, "label": "⅝" }
|
||||
]
|
||||
@@ -50,6 +56,7 @@
|
||||
{ "code": 3308, "label": "೬", "type": "numeric", "popup": {
|
||||
"main": { "code": 54, "label": "6" },
|
||||
"relevant": [
|
||||
{ "code": 8326, "label": "₆" },
|
||||
{ "code": 8310, "label": "⁶" }
|
||||
]
|
||||
} },
|
||||
@@ -57,27 +64,32 @@
|
||||
"main": { "code": 55, "label": "7" },
|
||||
"relevant": [
|
||||
{ "code": 8542, "label": "⅞" },
|
||||
{ "code": 8327, "label": "₇" },
|
||||
{ "code": 8311, "label": "⁷" }
|
||||
]
|
||||
} },
|
||||
{ "code": 3310, "label": "೮", "type": "numeric", "popup": {
|
||||
"main": { "code": 56, "label": "8" },
|
||||
"relevant": [
|
||||
{ "code": 8328, "label": "₈" },
|
||||
{ "code": 8312, "label": "⁸" }
|
||||
]
|
||||
} },
|
||||
{ "code": 3311, "label": "೯", "type": "numeric", "popup": {
|
||||
"main": { "code": 57, "label": "9" },
|
||||
"relevant": [
|
||||
{ "code": 8329, "label": "₉" },
|
||||
{ "code": 8313, "label": "⁹" }
|
||||
]
|
||||
} },
|
||||
{ "code": 3302, "label": "೦", "type": "numeric", "popup": {
|
||||
"main": { "code": 48, "label": "0" },
|
||||
"relevant": [
|
||||
{ "code": 8319, "label": "ⁿ" },
|
||||
{ "code": 8709, "label": "∅" },
|
||||
{ "code": 8304, "label": "⁰" }
|
||||
{ "code": 8319, "label": "ⁿ" },
|
||||
{ "code": 8304, "label": "⁰" },
|
||||
{ "code": 8585, "label": "↉" },
|
||||
{ "code": 8320, "label": "₀" }
|
||||
]
|
||||
} }
|
||||
]
|
||||
|
||||
@@ -3,46 +3,52 @@
|
||||
{ "code": 3431, "label": "൧", "type": "numeric", "popup": {
|
||||
"main": { "code": 49, "label": "1" },
|
||||
"relevant": [
|
||||
{ "code": 8537, "label": "⅙" },
|
||||
{ "code": 8321, "label": "₁" },
|
||||
{ "code": 8528, "label": "⅐" },
|
||||
{ "code": 8539, "label": "⅛" },
|
||||
{ "code": 8529, "label": "⅑" },
|
||||
{ "code": 8530, "label": "⅒" },
|
||||
{ "code": 8543, "label": "⅟" },
|
||||
{ "code": 185, "label": "¹" },
|
||||
{ "code": 189, "label": "½" },
|
||||
{ "code": 8531, "label": "⅓" },
|
||||
{ "code": 188, "label": "¼" },
|
||||
{ "code": 8533, "label": "⅕" }
|
||||
{ "code": 8533, "label": "⅕" },
|
||||
{ "code": 8537, "label": "⅙" }
|
||||
]
|
||||
} },
|
||||
{ "code": 3432, "label": "൨", "type": "numeric", "popup": {
|
||||
"main": { "code": 50, "label": "2" },
|
||||
"relevant": [
|
||||
{ "code": 8532, "label": "⅔" },
|
||||
{ "code": 8322, "label": "₂"},
|
||||
{ "code": 178, "label": "²" },
|
||||
{ "code": 8532, "label": "⅔" },
|
||||
{ "code": 8534, "label": "⅖" }
|
||||
]
|
||||
} },
|
||||
{ "code": 3433, "label": "൩", "type": "numeric", "popup": {
|
||||
"main": { "code": 51, "label": "3" },
|
||||
"relevant": [
|
||||
{ "code": 8535, "label": "⅗" },
|
||||
{ "code": 190, "label": "¾" },
|
||||
{ "code": 179, "label": "³" },
|
||||
{ "code": 8540, "label": "⅜" }
|
||||
{ "code": 8535, "label": "⅗" },
|
||||
{ "code": 8540, "label": "⅜" },
|
||||
{ "code": 8323, "label": "₃"},
|
||||
{ "code": 179, "label": "³" }
|
||||
]
|
||||
} },
|
||||
{ "code": 3434, "label": "൪", "type": "numeric", "popup": {
|
||||
"main": { "code": 52, "label": "4" },
|
||||
"relevant": [
|
||||
{ "code": 8536, "label": "⅘" },
|
||||
{ "code": 8308, "label": "⁴" }
|
||||
{ "code": 8324, "label": "₄" },
|
||||
{ "code": 8308, "label": "⁴" },
|
||||
{ "code": 8536, "label": "⅘" }
|
||||
]
|
||||
} },
|
||||
{ "code": 3435, "label": "൫", "type": "numeric", "popup": {
|
||||
"main": { "code": 53, "label": "5" },
|
||||
"relevant": [
|
||||
{ "code": 8538, "label": "⅚" },
|
||||
{ "code": 8325, "label": "₅" },
|
||||
{ "code": 8309, "label": "⁵" },
|
||||
{ "code": 8541, "label": "⅝" }
|
||||
]
|
||||
@@ -50,6 +56,7 @@
|
||||
{ "code": 3436, "label": "൬", "type": "numeric", "popup": {
|
||||
"main": { "code": 54, "label": "6" },
|
||||
"relevant": [
|
||||
{ "code": 8326, "label": "₆" },
|
||||
{ "code": 8310, "label": "⁶" }
|
||||
]
|
||||
} },
|
||||
@@ -57,27 +64,32 @@
|
||||
"main": { "code": 55, "label": "7" },
|
||||
"relevant": [
|
||||
{ "code": 8542, "label": "⅞" },
|
||||
{ "code": 8327, "label": "₇" },
|
||||
{ "code": 8311, "label": "⁷" }
|
||||
]
|
||||
} },
|
||||
{ "code": 3438, "label": "൮", "type": "numeric", "popup": {
|
||||
"main": { "code": 56, "label": "8" },
|
||||
"relevant": [
|
||||
{ "code": 8328, "label": "₈" },
|
||||
{ "code": 8312, "label": "⁸" }
|
||||
]
|
||||
} },
|
||||
{ "code": 3439, "label": "൯", "type": "numeric", "popup": {
|
||||
"main": { "code": 57, "label": "9" },
|
||||
"relevant": [
|
||||
{ "code": 8329, "label": "₉" },
|
||||
{ "code": 8313, "label": "⁹" }
|
||||
]
|
||||
} },
|
||||
{ "code": 3430, "label": "൦", "type": "numeric", "popup": {
|
||||
"main": { "code": 48, "label": "0" },
|
||||
"relevant": [
|
||||
{ "code": 8319, "label": "ⁿ" },
|
||||
{ "code": 8709, "label": "∅" },
|
||||
{ "code": 8304, "label": "⁰" }
|
||||
{ "code": 8319, "label": "ⁿ" },
|
||||
{ "code": 8304, "label": "⁰" },
|
||||
{ "code": 8585, "label": "↉" },
|
||||
{ "code": 8320, "label": "₀" }
|
||||
]
|
||||
} }
|
||||
]
|
||||
|
||||
@@ -3,46 +3,52 @@
|
||||
{ "code": 2919, "label": "୧", "type": "numeric", "popup": {
|
||||
"main": { "code": 49, "label": "1" },
|
||||
"relevant": [
|
||||
{ "code": 8537, "label": "⅙" },
|
||||
{ "code": 8321, "label": "₁" },
|
||||
{ "code": 8528, "label": "⅐" },
|
||||
{ "code": 8539, "label": "⅛" },
|
||||
{ "code": 8529, "label": "⅑" },
|
||||
{ "code": 8530, "label": "⅒" },
|
||||
{ "code": 8543, "label": "⅟" },
|
||||
{ "code": 185, "label": "¹" },
|
||||
{ "code": 189, "label": "½" },
|
||||
{ "code": 8531, "label": "⅓" },
|
||||
{ "code": 188, "label": "¼" },
|
||||
{ "code": 8533, "label": "⅕" }
|
||||
{ "code": 8533, "label": "⅕" },
|
||||
{ "code": 8537, "label": "⅙" }
|
||||
]
|
||||
} },
|
||||
{ "code": 2920, "label": "୨", "type": "numeric", "popup": {
|
||||
"main": { "code": 50, "label": "2" },
|
||||
"relevant": [
|
||||
{ "code": 8532, "label": "⅔" },
|
||||
{ "code": 8322, "label": "₂"},
|
||||
{ "code": 178, "label": "²" },
|
||||
{ "code": 8532, "label": "⅔" },
|
||||
{ "code": 8534, "label": "⅖" }
|
||||
]
|
||||
} },
|
||||
{ "code": 2921, "label": "୩", "type": "numeric", "popup": {
|
||||
"main": { "code": 51, "label": "3" },
|
||||
"relevant": [
|
||||
{ "code": 8535, "label": "⅗" },
|
||||
{ "code": 190, "label": "¾" },
|
||||
{ "code": 179, "label": "³" },
|
||||
{ "code": 8540, "label": "⅜" }
|
||||
{ "code": 8535, "label": "⅗" },
|
||||
{ "code": 8540, "label": "⅜" },
|
||||
{ "code": 8323, "label": "₃"},
|
||||
{ "code": 179, "label": "³" }
|
||||
]
|
||||
} },
|
||||
{ "code": 2922, "label": "୪", "type": "numeric", "popup": {
|
||||
"main": { "code": 52, "label": "4" },
|
||||
"relevant": [
|
||||
{ "code": 8536, "label": "⅘" },
|
||||
{ "code": 8308, "label": "⁴" }
|
||||
{ "code": 8324, "label": "₄" },
|
||||
{ "code": 8308, "label": "⁴" },
|
||||
{ "code": 8536, "label": "⅘" }
|
||||
]
|
||||
} },
|
||||
{ "code": 2923, "label": "୫", "type": "numeric", "popup": {
|
||||
"main": { "code": 53, "label": "5" },
|
||||
"relevant": [
|
||||
{ "code": 8538, "label": "⅚" },
|
||||
{ "code": 8325, "label": "₅" },
|
||||
{ "code": 8309, "label": "⁵" },
|
||||
{ "code": 8541, "label": "⅝" }
|
||||
]
|
||||
@@ -50,6 +56,7 @@
|
||||
{ "code": 2924, "label": "୬", "type": "numeric", "popup": {
|
||||
"main": { "code": 54, "label": "6" },
|
||||
"relevant": [
|
||||
{ "code": 8326, "label": "₆" },
|
||||
{ "code": 8310, "label": "⁶" }
|
||||
]
|
||||
} },
|
||||
@@ -57,27 +64,32 @@
|
||||
"main": { "code": 55, "label": "7" },
|
||||
"relevant": [
|
||||
{ "code": 8542, "label": "⅞" },
|
||||
{ "code": 8327, "label": "₇" },
|
||||
{ "code": 8311, "label": "⁷" }
|
||||
]
|
||||
} },
|
||||
{ "code": 2926, "label": "୮", "type": "numeric", "popup": {
|
||||
"main": { "code": 56, "label": "8" },
|
||||
"relevant": [
|
||||
{ "code": 8328, "label": "₈" },
|
||||
{ "code": 8312, "label": "⁸" }
|
||||
]
|
||||
} },
|
||||
{ "code": 2927, "label": "୯", "type": "numeric", "popup": {
|
||||
"main": { "code": 57, "label": "9" },
|
||||
"relevant": [
|
||||
{ "code": 8329, "label": "₉" },
|
||||
{ "code": 8313, "label": "⁹" }
|
||||
]
|
||||
} },
|
||||
{ "code": 2918, "label": "୦", "type": "numeric", "popup": {
|
||||
"main": { "code": 48, "label": "0" },
|
||||
"relevant": [
|
||||
{ "code": 8319, "label": "ⁿ" },
|
||||
{ "code": 8709, "label": "∅" },
|
||||
{ "code": 8304, "label": "⁰" }
|
||||
{ "code": 8319, "label": "ⁿ" },
|
||||
{ "code": 8304, "label": "⁰" },
|
||||
{ "code": 8585, "label": "↉" },
|
||||
{ "code": 8320, "label": "₀" }
|
||||
]
|
||||
} }
|
||||
]
|
||||
|
||||
@@ -3,46 +3,52 @@
|
||||
{ "code": 1777, "label": "۱", "type": "numeric", "popup": {
|
||||
"main": { "code": 49, "label": "1" },
|
||||
"relevant": [
|
||||
{ "code": 8537, "label": "⅙" },
|
||||
{ "code": 8321, "label": "₁" },
|
||||
{ "code": 8528, "label": "⅐" },
|
||||
{ "code": 8539, "label": "⅛" },
|
||||
{ "code": 8529, "label": "⅑" },
|
||||
{ "code": 8530, "label": "⅒" },
|
||||
{ "code": 8543, "label": "⅟" },
|
||||
{ "code": 185, "label": "¹" },
|
||||
{ "code": 189, "label": "½" },
|
||||
{ "code": 8531, "label": "⅓" },
|
||||
{ "code": 188, "label": "¼" },
|
||||
{ "code": 8533, "label": "⅕" }
|
||||
{ "code": 8533, "label": "⅕" },
|
||||
{ "code": 8537, "label": "⅙" }
|
||||
]
|
||||
} },
|
||||
{ "code": 1778, "label": "۲", "type": "numeric", "popup": {
|
||||
"main": { "code": 50, "label": "2" },
|
||||
"relevant": [
|
||||
{ "code": 8532, "label": "⅔" },
|
||||
{ "code": 8322, "label": "₂"},
|
||||
{ "code": 178, "label": "²" },
|
||||
{ "code": 8532, "label": "⅔" },
|
||||
{ "code": 8534, "label": "⅖" }
|
||||
]
|
||||
} },
|
||||
{ "code": 1779, "label": "۳", "type": "numeric", "popup": {
|
||||
"main": { "code": 51, "label": "3" },
|
||||
"relevant": [
|
||||
{ "code": 8535, "label": "⅗" },
|
||||
{ "code": 190, "label": "¾" },
|
||||
{ "code": 179, "label": "³" },
|
||||
{ "code": 8540, "label": "⅜" }
|
||||
{ "code": 8535, "label": "⅗" },
|
||||
{ "code": 8540, "label": "⅜" },
|
||||
{ "code": 8323, "label": "₃"},
|
||||
{ "code": 179, "label": "³" }
|
||||
]
|
||||
} },
|
||||
{ "code": 1780, "label": "۴", "type": "numeric", "popup": {
|
||||
"main": { "code": 52, "label": "4" },
|
||||
"relevant": [
|
||||
{ "code": 8536, "label": "⅘" },
|
||||
{ "code": 8308, "label": "⁴" }
|
||||
{ "code": 8324, "label": "₄" },
|
||||
{ "code": 8308, "label": "⁴" },
|
||||
{ "code": 8536, "label": "⅘" }
|
||||
]
|
||||
} },
|
||||
{ "code": 1781, "label": "۵", "type": "numeric", "popup": {
|
||||
"main": { "code": 53, "label": "5" },
|
||||
"relevant": [
|
||||
{ "code": 8538, "label": "⅚" },
|
||||
{ "code": 8325, "label": "₅" },
|
||||
{ "code": 8309, "label": "⁵" },
|
||||
{ "code": 8541, "label": "⅝" }
|
||||
]
|
||||
@@ -50,6 +56,7 @@
|
||||
{ "code": 1782, "label": "۶", "type": "numeric", "popup": {
|
||||
"main": { "code": 54, "label": "6" },
|
||||
"relevant": [
|
||||
{ "code": 8326, "label": "₆" },
|
||||
{ "code": 8310, "label": "⁶" }
|
||||
]
|
||||
} },
|
||||
@@ -57,27 +64,32 @@
|
||||
"main": { "code": 55, "label": "7" },
|
||||
"relevant": [
|
||||
{ "code": 8542, "label": "⅞" },
|
||||
{ "code": 8327, "label": "₇" },
|
||||
{ "code": 8311, "label": "⁷" }
|
||||
]
|
||||
} },
|
||||
{ "code": 1784, "label": "۸", "type": "numeric", "popup": {
|
||||
"main": { "code": 56, "label": "8" },
|
||||
"relevant": [
|
||||
{ "code": 8328, "label": "₈" },
|
||||
{ "code": 8312, "label": "⁸" }
|
||||
]
|
||||
} },
|
||||
{ "code": 1785, "label": "۹", "type": "numeric", "popup": {
|
||||
"main": { "code": 57, "label": "9" },
|
||||
"relevant": [
|
||||
{ "code": 8329, "label": "₉" },
|
||||
{ "code": 8313, "label": "⁹" }
|
||||
]
|
||||
} },
|
||||
{ "code": 1776, "label": "۰", "type": "numeric", "popup": {
|
||||
"main": { "code": 48, "label": "0" },
|
||||
"relevant": [
|
||||
{ "code": 8319, "label": "ⁿ" },
|
||||
{ "code": 8709, "label": "∅" },
|
||||
{ "code": 8304, "label": "⁰" }
|
||||
{ "code": 8319, "label": "ⁿ" },
|
||||
{ "code": 8304, "label": "⁰" },
|
||||
{ "code": 8585, "label": "↉" },
|
||||
{ "code": 8320, "label": "₀" }
|
||||
]
|
||||
} }
|
||||
]
|
||||
|
||||
@@ -3,46 +3,52 @@
|
||||
{ "code": 3047, "label": "௧", "type": "numeric", "popup": {
|
||||
"main": { "code": 49, "label": "1" },
|
||||
"relevant": [
|
||||
{ "code": 8537, "label": "⅙" },
|
||||
{ "code": 8321, "label": "₁" },
|
||||
{ "code": 8528, "label": "⅐" },
|
||||
{ "code": 8539, "label": "⅛" },
|
||||
{ "code": 8529, "label": "⅑" },
|
||||
{ "code": 8530, "label": "⅒" },
|
||||
{ "code": 8543, "label": "⅟" },
|
||||
{ "code": 185, "label": "¹" },
|
||||
{ "code": 189, "label": "½" },
|
||||
{ "code": 8531, "label": "⅓" },
|
||||
{ "code": 188, "label": "¼" },
|
||||
{ "code": 8533, "label": "⅕" }
|
||||
{ "code": 8533, "label": "⅕" },
|
||||
{ "code": 8537, "label": "⅙" }
|
||||
]
|
||||
} },
|
||||
{ "code": 3048, "label": "௨", "type": "numeric", "popup": {
|
||||
"main": { "code": 50, "label": "2" },
|
||||
"relevant": [
|
||||
{ "code": 8532, "label": "⅔" },
|
||||
{ "code": 8322, "label": "₂"},
|
||||
{ "code": 178, "label": "²" },
|
||||
{ "code": 8532, "label": "⅔" },
|
||||
{ "code": 8534, "label": "⅖" }
|
||||
]
|
||||
} },
|
||||
{ "code": 3049, "label": "௩", "type": "numeric", "popup": {
|
||||
"main": { "code": 51, "label": "3" },
|
||||
"relevant": [
|
||||
{ "code": 8535, "label": "⅗" },
|
||||
{ "code": 190, "label": "¾" },
|
||||
{ "code": 179, "label": "³" },
|
||||
{ "code": 8540, "label": "⅜" }
|
||||
{ "code": 8535, "label": "⅗" },
|
||||
{ "code": 8540, "label": "⅜" },
|
||||
{ "code": 8323, "label": "₃"},
|
||||
{ "code": 179, "label": "³" }
|
||||
]
|
||||
} },
|
||||
{ "code": 3050, "label": "௪", "type": "numeric", "popup": {
|
||||
"main": { "code": 52, "label": "4" },
|
||||
"relevant": [
|
||||
{ "code": 8536, "label": "⅘" },
|
||||
{ "code": 8308, "label": "⁴" }
|
||||
{ "code": 8324, "label": "₄" },
|
||||
{ "code": 8308, "label": "⁴" },
|
||||
{ "code": 8536, "label": "⅘" }
|
||||
]
|
||||
} },
|
||||
{ "code": 3051, "label": "௫", "type": "numeric", "popup": {
|
||||
"main": { "code": 53, "label": "5" },
|
||||
"relevant": [
|
||||
{ "code": 8538, "label": "⅚" },
|
||||
{ "code": 8325, "label": "₅" },
|
||||
{ "code": 8309, "label": "⁵" },
|
||||
{ "code": 8541, "label": "⅝" }
|
||||
]
|
||||
@@ -50,6 +56,7 @@
|
||||
{ "code": 3052, "label": "௬", "type": "numeric", "popup": {
|
||||
"main": { "code": 54, "label": "6" },
|
||||
"relevant": [
|
||||
{ "code": 8326, "label": "₆" },
|
||||
{ "code": 8310, "label": "⁶" }
|
||||
]
|
||||
} },
|
||||
@@ -57,27 +64,32 @@
|
||||
"main": { "code": 55, "label": "7" },
|
||||
"relevant": [
|
||||
{ "code": 8542, "label": "⅞" },
|
||||
{ "code": 8327, "label": "₇" },
|
||||
{ "code": 8311, "label": "⁷" }
|
||||
]
|
||||
} },
|
||||
{ "code": 3054, "label": "௮", "type": "numeric", "popup": {
|
||||
"main": { "code": 56, "label": "8" },
|
||||
"relevant": [
|
||||
{ "code": 8328, "label": "₈" },
|
||||
{ "code": 8312, "label": "⁸" }
|
||||
]
|
||||
} },
|
||||
{ "code": 3055, "label": "௯", "type": "numeric", "popup": {
|
||||
"main": { "code": 57, "label": "9" },
|
||||
"relevant": [
|
||||
{ "code": 8329, "label": "₉" },
|
||||
{ "code": 8313, "label": "⁹" }
|
||||
]
|
||||
} },
|
||||
{ "code": 3046, "label": "௦", "type": "numeric", "popup": {
|
||||
"main": { "code": 48, "label": "0" },
|
||||
"relevant": [
|
||||
{ "code": 8319, "label": "ⁿ" },
|
||||
{ "code": 8709, "label": "∅" },
|
||||
{ "code": 8304, "label": "⁰" }
|
||||
{ "code": 8319, "label": "ⁿ" },
|
||||
{ "code": 8304, "label": "⁰" },
|
||||
{ "code": 8585, "label": "↉" },
|
||||
{ "code": 8320, "label": "₀" }
|
||||
]
|
||||
} }
|
||||
]
|
||||
|
||||
@@ -3,46 +3,52 @@
|
||||
{ "code": 3175, "label": "౧", "type": "numeric", "popup": {
|
||||
"main": { "code": 49, "label": "1" },
|
||||
"relevant": [
|
||||
{ "code": 8537, "label": "⅙" },
|
||||
{ "code": 8321, "label": "₁" },
|
||||
{ "code": 8528, "label": "⅐" },
|
||||
{ "code": 8539, "label": "⅛" },
|
||||
{ "code": 8529, "label": "⅑" },
|
||||
{ "code": 8530, "label": "⅒" },
|
||||
{ "code": 8543, "label": "⅟" },
|
||||
{ "code": 185, "label": "¹" },
|
||||
{ "code": 189, "label": "½" },
|
||||
{ "code": 8531, "label": "⅓" },
|
||||
{ "code": 188, "label": "¼" },
|
||||
{ "code": 8533, "label": "⅕" }
|
||||
{ "code": 8533, "label": "⅕" },
|
||||
{ "code": 8537, "label": "⅙" }
|
||||
]
|
||||
} },
|
||||
{ "code": 3176, "label": "౨", "type": "numeric", "popup": {
|
||||
"main": { "code": 50, "label": "2" },
|
||||
"relevant": [
|
||||
{ "code": 8532, "label": "⅔" },
|
||||
{ "code": 8322, "label": "₂"},
|
||||
{ "code": 178, "label": "²" },
|
||||
{ "code": 8532, "label": "⅔" },
|
||||
{ "code": 8534, "label": "⅖" }
|
||||
]
|
||||
} },
|
||||
{ "code": 3177, "label": "౩", "type": "numeric", "popup": {
|
||||
"main": { "code": 51, "label": "3" },
|
||||
"relevant": [
|
||||
{ "code": 8535, "label": "⅗" },
|
||||
{ "code": 190, "label": "¾" },
|
||||
{ "code": 179, "label": "³" },
|
||||
{ "code": 8540, "label": "⅜" }
|
||||
{ "code": 8535, "label": "⅗" },
|
||||
{ "code": 8540, "label": "⅜" },
|
||||
{ "code": 8323, "label": "₃"},
|
||||
{ "code": 179, "label": "³" }
|
||||
]
|
||||
} },
|
||||
{ "code": 3178, "label": "౪", "type": "numeric", "popup": {
|
||||
"main": { "code": 52, "label": "4" },
|
||||
"relevant": [
|
||||
{ "code": 8536, "label": "⅘" },
|
||||
{ "code": 8308, "label": "⁴" }
|
||||
{ "code": 8324, "label": "₄" },
|
||||
{ "code": 8308, "label": "⁴" },
|
||||
{ "code": 8536, "label": "⅘" }
|
||||
]
|
||||
} },
|
||||
{ "code": 3179, "label": "౫", "type": "numeric", "popup": {
|
||||
"main": { "code": 53, "label": "5" },
|
||||
"relevant": [
|
||||
{ "code": 8538, "label": "⅚" },
|
||||
{ "code": 8325, "label": "₅" },
|
||||
{ "code": 8309, "label": "⁵" },
|
||||
{ "code": 8541, "label": "⅝" }
|
||||
]
|
||||
@@ -50,6 +56,7 @@
|
||||
{ "code": 3180, "label": "౬", "type": "numeric", "popup": {
|
||||
"main": { "code": 54, "label": "6" },
|
||||
"relevant": [
|
||||
{ "code": 8326, "label": "₆" },
|
||||
{ "code": 8310, "label": "⁶" }
|
||||
]
|
||||
} },
|
||||
@@ -57,27 +64,32 @@
|
||||
"main": { "code": 55, "label": "7" },
|
||||
"relevant": [
|
||||
{ "code": 8542, "label": "⅞" },
|
||||
{ "code": 8327, "label": "₇" },
|
||||
{ "code": 8311, "label": "⁷" }
|
||||
]
|
||||
} },
|
||||
{ "code": 3182, "label": "౮", "type": "numeric", "popup": {
|
||||
"main": { "code": 56, "label": "8" },
|
||||
"relevant": [
|
||||
{ "code": 8328, "label": "₈" },
|
||||
{ "code": 8312, "label": "⁸" }
|
||||
]
|
||||
} },
|
||||
{ "code": 3183, "label": "౯", "type": "numeric", "popup": {
|
||||
"main": { "code": 57, "label": "9" },
|
||||
"relevant": [
|
||||
{ "code": 8329, "label": "₉" },
|
||||
{ "code": 8313, "label": "⁹" }
|
||||
]
|
||||
} },
|
||||
{ "code": 3174, "label": "౦", "type": "numeric", "popup": {
|
||||
"main": { "code": 48, "label": "0" },
|
||||
"relevant": [
|
||||
{ "code": 8319, "label": "ⁿ" },
|
||||
{ "code": 8709, "label": "∅" },
|
||||
{ "code": 8304, "label": "⁰" }
|
||||
{ "code": 8319, "label": "ⁿ" },
|
||||
{ "code": 8304, "label": "⁰" },
|
||||
{ "code": 8585, "label": "↉" },
|
||||
{ "code": 8320, "label": "₀" }
|
||||
]
|
||||
} }
|
||||
]
|
||||
|
||||
@@ -3,20 +3,23 @@
|
||||
{ "code": 3665, "label": "๑", "type": "numeric", "popup": {
|
||||
"main": { "code": 185, "label": "¹" },
|
||||
"relevant": [
|
||||
{ "code": 8537, "label": "⅙" },
|
||||
{ "code": 8321, "label": "₁" },
|
||||
{ "code": 8528, "label": "⅐" },
|
||||
{ "code": 8539, "label": "⅛" },
|
||||
{ "code": 8529, "label": "⅑" },
|
||||
{ "code": 8530, "label": "⅒" },
|
||||
{ "code": 8543, "label": "⅟" },
|
||||
{ "code": 189, "label": "½" },
|
||||
{ "code": 8531, "label": "⅓" },
|
||||
{ "code": 188, "label": "¼" },
|
||||
{ "code": 8533, "label": "⅕" }
|
||||
{ "code": 8533, "label": "⅕" },
|
||||
{ "code": 8537, "label": "⅙" }
|
||||
]
|
||||
} },
|
||||
{ "code": 3666, "label": "๒", "type": "numeric", "popup": {
|
||||
"main": { "code": 178, "label": "²" },
|
||||
"relevant": [
|
||||
{ "code": 8322, "label": "₂"},
|
||||
{ "code": 8532, "label": "⅔" },
|
||||
{ "code": 8534, "label": "⅖" }
|
||||
]
|
||||
@@ -24,44 +27,59 @@
|
||||
{ "code": 3667, "label": "๓", "type": "numeric", "popup": {
|
||||
"main": { "code": 179, "label": "³" },
|
||||
"relevant": [
|
||||
{ "code": 8535, "label": "⅗" },
|
||||
{ "code": 8540, "label": "⅜" },
|
||||
{ "code": 8323, "label": "₃"},
|
||||
{ "code": 190, "label": "¾" },
|
||||
{ "code": 8540, "label": "⅜" }
|
||||
{ "code": 8535, "label": "⅗" }
|
||||
]
|
||||
} },
|
||||
{ "code": 3668, "label": "๔", "type": "numeric", "popup": {
|
||||
"main": { "code": 8308, "label": "⁴" },
|
||||
"relevant": [
|
||||
{ "code": 8324, "label": "₄" },
|
||||
{ "code": 8536, "label": "⅘" }
|
||||
]
|
||||
} },
|
||||
{ "code": 3669, "label": "๕", "type": "numeric", "popup": {
|
||||
"main": { "code": 8309, "label": "⁵" },
|
||||
"relevant": [
|
||||
{ "code": 8325, "label": "₅" },
|
||||
{ "code": 8538, "label": "⅚" },
|
||||
{ "code": 8541, "label": "⅝" }
|
||||
]
|
||||
} },
|
||||
{ "code": 3670, "label": "๖", "type": "numeric", "popup": {
|
||||
"main": { "code": 8310, "label": "⁶" }
|
||||
"main": { "code": 8310, "label": "⁶" },
|
||||
"relevant": [
|
||||
{ "code": 8326, "label": "₆" }
|
||||
]
|
||||
} },
|
||||
{ "code": 3671, "label": "๗", "type": "numeric", "popup": {
|
||||
"main": { "code": 8311, "label": "⁷" },
|
||||
"relevant": [
|
||||
{ "code": 8327, "label": "₇" },
|
||||
{ "code": 8542, "label": "⅞" }
|
||||
]
|
||||
} },
|
||||
{ "code": 3672, "label": "๘", "type": "numeric", "popup": {
|
||||
"main": { "code": 8312, "label": "⁸" }
|
||||
"main": { "code": 8312, "label": "⁸" },
|
||||
"relevant": [
|
||||
{ "code": 8328, "label": "₈" }
|
||||
]
|
||||
} },
|
||||
{ "code": 3673, "label": "๙", "type": "numeric", "popup": {
|
||||
"main": { "code": 8313, "label": "⁹" }
|
||||
"main": { "code": 8313, "label": "⁹" },
|
||||
"relevant": [
|
||||
{ "code": 8329, "label": "₉" }
|
||||
]
|
||||
} },
|
||||
{ "code": 3664, "label": "๐", "type": "numeric", "popup": {
|
||||
"main": { "code": 8304, "label": "⁰" },
|
||||
"relevant": [
|
||||
{ "code": 8709, "label": "∅" },
|
||||
{ "code": 8319, "label": "ⁿ" }
|
||||
{ "code": 8319, "label": "ⁿ" },
|
||||
{ "code": 8585, "label": "↉" },
|
||||
{ "code": 8320, "label": "₀" }
|
||||
]
|
||||
} }
|
||||
]
|
||||
|
||||
@@ -3,46 +3,52 @@
|
||||
{ "code": 71905, "label": "𑣡", "type": "numeric", "popup": {
|
||||
"main": { "code": 49, "label": "1" },
|
||||
"relevant": [
|
||||
{ "code": 8537, "label": "⅙" },
|
||||
{ "code": 8321, "label": "₁" },
|
||||
{ "code": 8528, "label": "⅐" },
|
||||
{ "code": 8539, "label": "⅛" },
|
||||
{ "code": 8529, "label": "⅑" },
|
||||
{ "code": 8530, "label": "⅒" },
|
||||
{ "code": 8543, "label": "⅟" },
|
||||
{ "code": 185, "label": "¹" },
|
||||
{ "code": 189, "label": "½" },
|
||||
{ "code": 8531, "label": "⅓" },
|
||||
{ "code": 188, "label": "¼" },
|
||||
{ "code": 8533, "label": "⅕" }
|
||||
{ "code": 8533, "label": "⅕" },
|
||||
{ "code": 8537, "label": "⅙" }
|
||||
]
|
||||
} },
|
||||
{ "code": 71906, "label": "𑣢", "type": "numeric", "popup": {
|
||||
"main": { "code": 50, "label": "2" },
|
||||
"relevant": [
|
||||
{ "code": 8532, "label": "⅔" },
|
||||
{ "code": 8322, "label": "₂"},
|
||||
{ "code": 178, "label": "²" },
|
||||
{ "code": 8532, "label": "⅔" },
|
||||
{ "code": 8534, "label": "⅖" }
|
||||
]
|
||||
} },
|
||||
{ "code": 71907, "label": "𑣣", "type": "numeric", "popup": {
|
||||
"main": { "code": 51, "label": "3" },
|
||||
"relevant": [
|
||||
{ "code": 8535, "label": "⅗" },
|
||||
{ "code": 190, "label": "¾" },
|
||||
{ "code": 179, "label": "³" },
|
||||
{ "code": 8540, "label": "⅜" }
|
||||
{ "code": 8535, "label": "⅗" },
|
||||
{ "code": 8540, "label": "⅜" },
|
||||
{ "code": 8323, "label": "₃"},
|
||||
{ "code": 179, "label": "³" }
|
||||
]
|
||||
} },
|
||||
{ "code": 71908, "label": "𑣤", "type": "numeric", "popup": {
|
||||
"main": { "code": 52, "label": "4" },
|
||||
"relevant": [
|
||||
{ "code": 8536, "label": "⅘" },
|
||||
{ "code": 8308, "label": "⁴" }
|
||||
{ "code": 8324, "label": "₄" },
|
||||
{ "code": 8308, "label": "⁴" },
|
||||
{ "code": 8536, "label": "⅘" }
|
||||
]
|
||||
} },
|
||||
{ "code": 71909, "label": "𑣥", "type": "numeric", "popup": {
|
||||
"main": { "code": 53, "label": "5" },
|
||||
"relevant": [
|
||||
{ "code": 8538, "label": "⅚" },
|
||||
{ "code": 8325, "label": "₅" },
|
||||
{ "code": 8309, "label": "⁵" },
|
||||
{ "code": 8541, "label": "⅝" }
|
||||
]
|
||||
@@ -50,6 +56,7 @@
|
||||
{ "code": 71910, "label": "𑣦", "type": "numeric", "popup": {
|
||||
"main": { "code": 54, "label": "6" },
|
||||
"relevant": [
|
||||
{ "code": 8326, "label": "₆" },
|
||||
{ "code": 8310, "label": "⁶" }
|
||||
]
|
||||
} },
|
||||
@@ -57,27 +64,32 @@
|
||||
"main": { "code": 55, "label": "7" },
|
||||
"relevant": [
|
||||
{ "code": 8542, "label": "⅞" },
|
||||
{ "code": 8327, "label": "₇" },
|
||||
{ "code": 8311, "label": "⁷" }
|
||||
]
|
||||
} },
|
||||
{ "code": 71912, "label": "𑣨", "type": "numeric", "popup": {
|
||||
"main": { "code": 56, "label": "8" },
|
||||
"relevant": [
|
||||
{ "code": 8328, "label": "₈" },
|
||||
{ "code": 8312, "label": "⁸" }
|
||||
]
|
||||
} },
|
||||
{ "code": 71913, "label": "𑣩", "type": "numeric", "popup": {
|
||||
"main": { "code": 57, "label": "9" },
|
||||
"relevant": [
|
||||
{ "code": 8329, "label": "₉" },
|
||||
{ "code": 8313, "label": "⁹" }
|
||||
]
|
||||
} },
|
||||
{ "code": 71904, "label": "𑣠", "type": "numeric", "popup": {
|
||||
"main": { "code": 48, "label": "0" },
|
||||
"relevant": [
|
||||
{ "code": 8319, "label": "ⁿ" },
|
||||
{ "code": 8709, "label": "∅" },
|
||||
{ "code": 8304, "label": "⁰" }
|
||||
{ "code": 8319, "label": "ⁿ" },
|
||||
{ "code": 8304, "label": "⁰" },
|
||||
{ "code": 8585, "label": "↉" },
|
||||
{ "code": 8320, "label": "₀" }
|
||||
]
|
||||
} }
|
||||
]
|
||||
|
||||
@@ -10,15 +10,17 @@
|
||||
"code": 49, "label": "1", "type": "numeric", "popup": {
|
||||
"main": { "code": 185, "label": "¹" },
|
||||
"relevant": [
|
||||
{ "code": 8537, "label": "⅙" },
|
||||
{ "code": 8321, "label": "₁" },
|
||||
{ "code": 8528, "label": "⅐" },
|
||||
{ "code": 8539, "label": "⅛" },
|
||||
{ "code": 8529, "label": "⅑" },
|
||||
{ "code": 8530, "label": "⅒" },
|
||||
{ "code": 8543, "label": "⅟" },
|
||||
{ "code": 189, "label": "½" },
|
||||
{ "code": 8531, "label": "⅓" },
|
||||
{ "code": 188, "label": "¼" },
|
||||
{ "code": 8533, "label": "⅕" }
|
||||
{ "code": 8533, "label": "⅕" },
|
||||
{ "code": 8537, "label": "⅙" }
|
||||
]
|
||||
}
|
||||
}
|
||||
@@ -29,6 +31,7 @@
|
||||
"code": 50, "label": "2", "type": "numeric", "popup": {
|
||||
"main": { "code": 178, "label": "²" },
|
||||
"relevant": [
|
||||
{ "code": 8322, "label": "₂"},
|
||||
{ "code": 8532, "label": "⅔" },
|
||||
{ "code": 8534, "label": "⅖" }
|
||||
]
|
||||
@@ -45,9 +48,10 @@
|
||||
"code": 51, "label": "3", "type": "numeric", "popup": {
|
||||
"main": { "code": 179, "label": "³" },
|
||||
"relevant": [
|
||||
{ "code": 8535, "label": "⅗" },
|
||||
{ "code": 8540, "label": "⅜" },
|
||||
{ "code": 8323, "label": "₃"},
|
||||
{ "code": 190, "label": "¾" },
|
||||
{ "code": 8540, "label": "⅜" }
|
||||
{ "code": 8535, "label": "⅗" }
|
||||
]
|
||||
}
|
||||
}
|
||||
@@ -68,6 +72,7 @@
|
||||
"code": 52, "label": "4", "type": "numeric", "popup": {
|
||||
"main": { "code": 8308, "label": "⁴" },
|
||||
"relevant": [
|
||||
{ "code": 8324, "label": "₄" },
|
||||
{ "code": 8536, "label": "⅘" }
|
||||
]
|
||||
}
|
||||
@@ -86,6 +91,7 @@
|
||||
"code": 53, "label": "5", "type": "numeric", "popup": {
|
||||
"main": { "code": 8309, "label": "⁵" },
|
||||
"relevant": [
|
||||
{ "code": 8325, "label": "₅" },
|
||||
{ "code": 8538, "label": "⅚" },
|
||||
{ "code": 8541, "label": "⅝" }
|
||||
]
|
||||
@@ -105,7 +111,10 @@
|
||||
},
|
||||
"default": {
|
||||
"code": 54, "label": "6", "type": "numeric", "popup": {
|
||||
"main": { "code": 8310, "label": "⁶" }
|
||||
"main": { "code": 8310, "label": "⁶" },
|
||||
"relevant": [
|
||||
{ "code": 8326, "label": "₆" }
|
||||
]
|
||||
}
|
||||
}
|
||||
},
|
||||
@@ -115,6 +124,7 @@
|
||||
"code": 55, "label": "7", "type": "numeric", "popup": {
|
||||
"main": { "code": 8311, "label": "⁷" },
|
||||
"relevant": [
|
||||
{ "code": 8327, "label": "₇" },
|
||||
{ "code": 8542, "label": "⅞" }
|
||||
]
|
||||
}
|
||||
@@ -132,7 +142,10 @@
|
||||
},
|
||||
"default": {
|
||||
"code": 56, "label": "8", "type": "numeric", "popup": {
|
||||
"main": { "code": 8312, "label": "⁸" }
|
||||
"main": { "code": 8312, "label": "⁸" },
|
||||
"relevant": [
|
||||
{ "code": 8328, "label": "₈" }
|
||||
]
|
||||
}
|
||||
}
|
||||
},
|
||||
@@ -160,7 +173,10 @@
|
||||
},
|
||||
"default": {
|
||||
"code": 57, "label": "9", "type": "numeric", "popup": {
|
||||
"main": { "code": 8313, "label": "⁹" }
|
||||
"main": { "code": 8313, "label": "⁹" },
|
||||
"relevant": [
|
||||
{ "code": 8329, "label": "₉" }
|
||||
]
|
||||
}
|
||||
}
|
||||
},
|
||||
@@ -191,7 +207,9 @@
|
||||
"main": { "code": 8304, "label": "⁰" },
|
||||
"relevant": [
|
||||
{ "code": 8709, "label": "∅" },
|
||||
{ "code": 8319, "label": "ⁿ" }
|
||||
{ "code": 8319, "label": "ⁿ" },
|
||||
{ "code": 8585, "label": "↉" },
|
||||
{ "code": 8320, "label": "₀" }
|
||||
]
|
||||
}
|
||||
}
|
||||
|
||||
@@ -401,6 +401,16 @@
|
||||
"characters": "org.florisboard.layouts:qwertz"
|
||||
}
|
||||
},
|
||||
{
|
||||
"languageTag": "hy",
|
||||
"composer": "org.florisboard.composers:appender",
|
||||
"currencySet": "org.florisboard.currencysets:armenian_dram",
|
||||
"popupMapping": "org.florisboard.localization:hy",
|
||||
"preferred": {
|
||||
"characters": "org.florisboard.layouts:armenian_alt_phonetic",
|
||||
"symbols": "org.florisboard.layouts:armenian"
|
||||
}
|
||||
},
|
||||
{
|
||||
"languageTag": "hy",
|
||||
"composer": "org.florisboard.composers:appender",
|
||||
|
||||
@@ -10,9 +10,9 @@
|
||||
"main": { "$": "auto_text_key" ,"code" : 237, "label": "í" }
|
||||
},
|
||||
"o": {
|
||||
"main": { "$": "auto_text_key", "code" : 246, "label": "ö" },
|
||||
"main": { "$": "auto_text_key", "code" : 243, "label": "ó" },
|
||||
"relevant": [
|
||||
{ "$": "auto_text_key", "code" : 243, "label": "ó" },
|
||||
{ "$": "auto_text_key", "code" : 246, "label": "ö" },
|
||||
{ "$": "auto_text_key", "code" : 337, "label": "ő" }
|
||||
]
|
||||
},
|
||||
@@ -22,9 +22,9 @@
|
||||
]
|
||||
},
|
||||
"u": {
|
||||
"main": { "$": "auto_text_key", "code" : 252, "label": "ü" },
|
||||
"main": { "$": "auto_text_key", "code" : 250, "label": "ú" },
|
||||
"relevant": [
|
||||
{ "$": "auto_text_key", "code" : 250, "label": "ú" },
|
||||
{ "$": "auto_text_key", "code" : 252, "label": "ü" },
|
||||
{ "$": "auto_text_key", "code" : 369, "label": "ű" }
|
||||
]
|
||||
},
|
||||
|
||||
@@ -6,6 +6,7 @@
|
||||
"--secondary": "#ff9800",
|
||||
"--secondary-variant": "#e65100",
|
||||
"--background": "#e0e0e0",
|
||||
"--background-variant": "#d0d0d0",
|
||||
"--surface": "#ffffff",
|
||||
"--surface-variant": "#f5f5f5",
|
||||
|
||||
@@ -27,13 +28,13 @@
|
||||
"--on-surface-variant": "#5f5f5f",
|
||||
|
||||
"--shape": "rounded-corner(8dp, 8dp, 8dp, 8dp)",
|
||||
"--shape-variant": "rounded-corner(12dp, 12dp, 12dp, 12dp)"
|
||||
"--shape-variant": "rounded-corner(12dp, 12dp, 12dp, 12dp)",
|
||||
"--shape-chip": "rounded-corner(50%, 50%, 50%, 50%)"
|
||||
},
|
||||
|
||||
"window": {
|
||||
"background": "var(--background)",
|
||||
"foreground": "var(--on-background)",
|
||||
"clip": "no"
|
||||
"foreground": "var(--on-background)"
|
||||
},
|
||||
|
||||
"key": {
|
||||
@@ -110,6 +111,7 @@
|
||||
"smartbar-extended-actions-toggle": {
|
||||
"background": "transparent",
|
||||
"foreground": "var(--on-surface-variant)",
|
||||
"margin": "6dp",
|
||||
"shape": "circle()"
|
||||
},
|
||||
"smartbar-action-key": {
|
||||
@@ -120,23 +122,34 @@
|
||||
"smartbar-action-key:disabled": {
|
||||
"foreground": "var(--on-background-disabled)"
|
||||
},
|
||||
|
||||
"smartbar-actions-overflow": {
|
||||
"margin": "4dp"
|
||||
},
|
||||
"smartbar-actions-overflow-customize-button": {
|
||||
"background": "var(--primary)",
|
||||
"foreground": "var(--on-primary)",
|
||||
"font-size": "14sp",
|
||||
"margin": "0dp 8dp 0dp 0dp",
|
||||
"shape": "rounded-corner(24dp, 24dp, 24dp, 24dp)"
|
||||
},
|
||||
"smartbar-action-tile": {
|
||||
"background": "transparent",
|
||||
"background": "var(--background-variant)",
|
||||
"foreground": "var(--on-background)",
|
||||
"font-size": "14sp",
|
||||
"shape": "var(--shape)",
|
||||
"text-max-lines": "2",
|
||||
"margin": "4dp",
|
||||
"padding": "4dp",
|
||||
"shape": "rounded-corner(20%, 20%, 20%, 20%)",
|
||||
"text-align": "center",
|
||||
"text-max-lines": "2",
|
||||
"text-overflow": "ellipsis"
|
||||
},
|
||||
"smartbar-action-tile:disabled": {
|
||||
"foreground": "var(--on-background-disabled)"
|
||||
},
|
||||
"smartbar-actions-overflow-customize-button": {
|
||||
"background": "var(--surface)",
|
||||
"foreground": "var(--on-surface)",
|
||||
"font-size": "14sp",
|
||||
"shape": "circle()"
|
||||
"smartbar-action-tile-icon": {
|
||||
"font-size": "24sp",
|
||||
"margin": "0dp 0dp 0dp 8dp"
|
||||
},
|
||||
|
||||
"smartbar-actions-editor": {
|
||||
@@ -194,6 +207,10 @@
|
||||
"background": "var(--surface)",
|
||||
"foreground": "var(--on-surface)"
|
||||
},
|
||||
"smartbar-candidate-word-secondary-text": {
|
||||
"font-size": "8sp",
|
||||
"margin": "0dp 2dp 0dp 0dp"
|
||||
},
|
||||
"smartbar-candidate-clip": {
|
||||
"background": "transparent",
|
||||
"foreground": "var(--on-background)",
|
||||
@@ -208,6 +225,9 @@
|
||||
"background": "var(--surface)",
|
||||
"foreground": "var(--on-surface)"
|
||||
},
|
||||
"smartbar-candidate-clip-icon": {
|
||||
"margin": "0dp 0dp 4dp 0dp"
|
||||
},
|
||||
"smartbar-candidate-spacer": {
|
||||
"foreground": "var(--spacer-color)"
|
||||
},
|
||||
@@ -229,31 +249,80 @@
|
||||
},
|
||||
"clipboard-subheader": {
|
||||
"font-size": "14sp",
|
||||
"margin": "6dp"
|
||||
"margin": "6dp 10dp 6dp 6dp"
|
||||
},
|
||||
"clipboard-content": {
|
||||
"padding": "10dp"
|
||||
"padding": "10dp 0dp"
|
||||
},
|
||||
"clipboard-filter-row": {
|
||||
"background": "var(--background-variant)",
|
||||
"foreground": "var(--on-background)",
|
||||
"padding": "0dp 0dp 4dp 0dp",
|
||||
"shape": "var(--shape-variant)"
|
||||
},
|
||||
"clipboard-filter-chip": {
|
||||
"background": "var(--surface)",
|
||||
"foreground": "var(--on-surface)",
|
||||
"margin": "4dp 4dp 0dp 4dp",
|
||||
"padding": "8dp 4dp",
|
||||
"shape": "var(--shape-chip)"
|
||||
},
|
||||
"clipboard-filter-chip[state=`active`]": {
|
||||
"background": "var(--primary)",
|
||||
"foreground": "var(--on-primary)"
|
||||
},
|
||||
"clipboard-filter-chip-text": {
|
||||
"margin": "4dp 0dp 0dp 0dp"
|
||||
},
|
||||
"clipboard-grid": {
|
||||
"shape": "var(--shape-variant)"
|
||||
},
|
||||
"clipboard-item": {
|
||||
"background": "var(--surface)",
|
||||
"foreground": "var(--on-surface)",
|
||||
"font-size": "14sp",
|
||||
"margin": "4dp",
|
||||
"padding": "12dp 8dp",
|
||||
"shape": "var(--shape-variant)",
|
||||
"shadow-elevation": "2dp",
|
||||
"text-max-lines": "10",
|
||||
"text-overflow": "ellipsis"
|
||||
},
|
||||
"clipboard-item[type=`text`]": {
|
||||
"padding": "12dp 8dp"
|
||||
},
|
||||
"clipboard-item-description": {
|
||||
"font-size": "12sp",
|
||||
"font-style": "italic"
|
||||
},
|
||||
"clipboard-item-popup": {
|
||||
"background": "var(--surface)",
|
||||
"foreground": "var(--on-surface)",
|
||||
"font-size": "14sp",
|
||||
"margin": "4dp",
|
||||
"shape": "var(--shape-variant)",
|
||||
"shadow-elevation": "2dp"
|
||||
},
|
||||
"clipboard-item-popup": {
|
||||
"clipboard-item-popup[type=`text`]": {
|
||||
"padding": "12dp 8dp"
|
||||
},
|
||||
"clipboard-item-timestamp": {
|
||||
"font-size": "11sp",
|
||||
"padding": "16dp 8dp"
|
||||
},
|
||||
"clipboard-item-actions": {
|
||||
"background": "var(--surface)",
|
||||
"foreground": "var(--on-surface)",
|
||||
"margin": "4dp",
|
||||
"shape": "var(--shape-variant)",
|
||||
"shadow-elevation": "2dp"
|
||||
},
|
||||
"clipboard-item-popup-action": {
|
||||
"clipboard-item-action": {
|
||||
"font-size": "16sp",
|
||||
"padding": "12dp"
|
||||
},
|
||||
"clipboard-item-action-text": {
|
||||
"margin": "4dp 0dp 0dp 0dp"
|
||||
},
|
||||
"clipboard-clear-all-dialog": {
|
||||
"background": "var(--surface)",
|
||||
"foreground": "var(--on-surface)",
|
||||
@@ -316,6 +385,11 @@
|
||||
"foreground": "var(--incognito-icon-color)"
|
||||
},
|
||||
|
||||
"inline-autofill-chip": {
|
||||
"background": "var(--surface)",
|
||||
"foreground": "var(--on-surface)"
|
||||
},
|
||||
|
||||
"media-emoji-subheader": {
|
||||
"font-weight": "bold",
|
||||
"margin": "4dp"
|
||||
@@ -373,5 +447,17 @@
|
||||
"text-align": "center",
|
||||
"text-max-lines": "1",
|
||||
"text-overflow": "ellipsis"
|
||||
},
|
||||
"subtype-panel-list-item": {
|
||||
"font-size": "16sp",
|
||||
"padding": "16dp"
|
||||
},
|
||||
"subtype-panel-list-item-icon-leading": {
|
||||
"font-size": "24sp",
|
||||
"padding": "0dp 0dp 16dp 0dp"
|
||||
},
|
||||
"subtype-panel-list-item-text": {
|
||||
"text-max-lines": "1",
|
||||
"text-overflow": "ellipsis"
|
||||
}
|
||||
}
|
||||
|
||||
@@ -6,6 +6,7 @@
|
||||
"--secondary": "#ff9800",
|
||||
"--secondary-variant": "#e65100",
|
||||
"--background": "#e0e0e0",
|
||||
"--background-variant": "#d0d0d0",
|
||||
"--surface": "#f0f0f0",
|
||||
"--surface-variant": "#ffffff",
|
||||
|
||||
@@ -27,13 +28,13 @@
|
||||
"--on-surface-variant": "#5f5f5f",
|
||||
|
||||
"--shape": "rounded-corner(8dp, 8dp, 8dp, 8dp)",
|
||||
"--shape-variant": "rounded-corner(12dp, 12dp, 12dp, 12dp)"
|
||||
"--shape-variant": "rounded-corner(12dp, 12dp, 12dp, 12dp)",
|
||||
"--shape-chip": "rounded-corner(50%, 50%, 50%, 50%)"
|
||||
},
|
||||
|
||||
"window": {
|
||||
"background": "var(--background)",
|
||||
"foreground": "var(--on-background)",
|
||||
"clip": "no"
|
||||
"foreground": "var(--on-background)"
|
||||
},
|
||||
|
||||
"key": {
|
||||
@@ -112,6 +113,7 @@
|
||||
"smartbar-extended-actions-toggle": {
|
||||
"background": "transparent",
|
||||
"foreground": "var(--on-surface-variant)",
|
||||
"margin": "6dp",
|
||||
"shape": "circle()"
|
||||
},
|
||||
"smartbar-action-key": {
|
||||
@@ -126,28 +128,36 @@
|
||||
"smartbar-action-key:disabled": {
|
||||
"foreground": "var(--on-background-disabled)"
|
||||
},
|
||||
|
||||
"smartbar-actions-overflow": {
|
||||
"margin": "4dp"
|
||||
},
|
||||
"smartbar-actions-overflow-customize-button": {
|
||||
"background": "var(--primary)",
|
||||
"foreground": "var(--on-primary)",
|
||||
"font-size": "14sp",
|
||||
"margin": "0dp 8dp 0dp 0dp",
|
||||
"shape": "rounded-corner(24dp, 24dp, 24dp, 24dp)"
|
||||
},
|
||||
"smartbar-action-tile": {
|
||||
"background": "transparent",
|
||||
"background": "var(--background-variant)",
|
||||
"foreground": "var(--on-background)",
|
||||
"font-size": "14sp",
|
||||
"shape": "var(--shape)",
|
||||
"text-max-lines": "2",
|
||||
"margin": "4dp",
|
||||
"padding": "4dp",
|
||||
"shape": "rounded-corner(20%, 20%, 20%, 20%)",
|
||||
"text-align": "center",
|
||||
"text-max-lines": "2",
|
||||
"text-overflow": "ellipsis"
|
||||
},
|
||||
"smartbar-action-tile:pressed": {
|
||||
"background": "var(--surface)",
|
||||
"foreground": "var(--on-surface)"
|
||||
},
|
||||
"smartbar-action-tile:disabled": {
|
||||
"foreground": "var(--on-background-disabled)"
|
||||
},
|
||||
"smartbar-actions-overflow-customize-button": {
|
||||
"background": "var(--surface)",
|
||||
"foreground": "var(--on-surface)",
|
||||
"font-size": "14sp",
|
||||
"shape": "circle()"
|
||||
"smartbar-action-tile-icon": {
|
||||
"font-size": "24sp",
|
||||
"margin": "0dp 0dp 0dp 8dp"
|
||||
},
|
||||
|
||||
"smartbar-actions-editor": {
|
||||
"background": "var(--background)",
|
||||
"foreground": "var(--on-background)",
|
||||
@@ -203,6 +213,10 @@
|
||||
"background": "var(--surface)",
|
||||
"foreground": "var(--on-background)"
|
||||
},
|
||||
"smartbar-candidate-word-secondary-text": {
|
||||
"font-size": "8sp",
|
||||
"margin": "0dp 2dp 0dp 0dp"
|
||||
},
|
||||
"smartbar-candidate-clip": {
|
||||
"background": "transparent",
|
||||
"foreground": "var(--on-background)",
|
||||
@@ -217,13 +231,15 @@
|
||||
"background": "var(--surface)",
|
||||
"foreground": "var(--on-background)"
|
||||
},
|
||||
"smartbar-candidate-clip-icon": {
|
||||
"margin": "0dp 0dp 4dp 0dp"
|
||||
},
|
||||
"smartbar-candidate-spacer": {
|
||||
"foreground": "var(--surface)"
|
||||
},
|
||||
|
||||
"clipboard-header": {
|
||||
"background": "transparent",
|
||||
"foreground": "var(--on-surface)",
|
||||
"foreground": "var(--on-background)",
|
||||
"font-size": "16sp"
|
||||
},
|
||||
"clipboard-header-button": {
|
||||
@@ -239,32 +255,80 @@
|
||||
},
|
||||
"clipboard-subheader": {
|
||||
"font-size": "14sp",
|
||||
"margin": "6dp"
|
||||
"margin": "6dp 10dp 6dp 6dp"
|
||||
},
|
||||
"clipboard-content": {
|
||||
"padding": "10dp"
|
||||
"padding": "10dp 0dp"
|
||||
},
|
||||
"clipboard-filter-row": {
|
||||
"background": "var(--background-variant)",
|
||||
"foreground": "var(--on-background)",
|
||||
"padding": "0dp 0dp 4dp 0dp",
|
||||
"shape": "var(--shape-variant)"
|
||||
},
|
||||
"clipboard-filter-chip": {
|
||||
"background": "var(--surface)",
|
||||
"foreground": "var(--on-surface)",
|
||||
"margin": "4dp 4dp 0dp 4dp",
|
||||
"padding": "8dp 4dp",
|
||||
"shape": "var(--shape-chip)"
|
||||
},
|
||||
"clipboard-filter-chip[state=`active`]": {
|
||||
"background": "var(--primary)",
|
||||
"foreground": "var(--on-primary)"
|
||||
},
|
||||
"clipboard-filter-chip-text": {
|
||||
"margin": "4dp 0dp 0dp 0dp"
|
||||
},
|
||||
"clipboard-grid": {
|
||||
"shape": "var(--shape-variant)"
|
||||
},
|
||||
"clipboard-item": {
|
||||
"background": "var(--surface)",
|
||||
"foreground": "var(--on-surface)",
|
||||
"font-size": "14sp",
|
||||
"margin": "4dp",
|
||||
"padding": "12dp 8dp",
|
||||
"shape": "var(--shape-variant)",
|
||||
"shadow-elevation": "2dp"
|
||||
"shadow-elevation": "2dp",
|
||||
"text-max-lines": "10",
|
||||
"text-overflow": "ellipsis"
|
||||
},
|
||||
"clipboard-item[type=`text`]": {
|
||||
"padding": "12dp 8dp"
|
||||
},
|
||||
"clipboard-item-description": {
|
||||
"font-size": "12sp",
|
||||
"font-style": "italic"
|
||||
},
|
||||
"clipboard-item-popup": {
|
||||
"background": "var(--surface-variant)",
|
||||
"background": "var(--surface)",
|
||||
"foreground": "var(--on-surface)",
|
||||
"font-size": "14sp",
|
||||
"margin": "4dp",
|
||||
"padding": "12dp 8dp",
|
||||
"shape": "var(--shape-variant)",
|
||||
"shadow-elevation": "2dp"
|
||||
},
|
||||
"clipboard-item-popup-action": {
|
||||
"clipboard-item-popup[type=`text`]": {
|
||||
"padding": "12dp 8dp"
|
||||
},
|
||||
"clipboard-item-timestamp": {
|
||||
"font-size": "11sp",
|
||||
"padding": "16dp 8dp"
|
||||
},
|
||||
"clipboard-item-actions": {
|
||||
"background": "var(--surface)",
|
||||
"foreground": "var(--on-surface)",
|
||||
"margin": "4dp",
|
||||
"shape": "var(--shape-variant)",
|
||||
"shadow-elevation": "2dp"
|
||||
},
|
||||
"clipboard-item-action": {
|
||||
"font-size": "16sp",
|
||||
"padding": "12dp"
|
||||
},
|
||||
"clipboard-item-action-text": {
|
||||
"margin": "4dp 0dp 0dp 0dp"
|
||||
},
|
||||
"clipboard-clear-all-dialog": {
|
||||
"background": "var(--surface)",
|
||||
"foreground": "var(--on-surface)",
|
||||
@@ -327,6 +391,11 @@
|
||||
"foreground": "var(--incognito-icon-color)"
|
||||
},
|
||||
|
||||
"inline-autofill-chip": {
|
||||
"background": "var(--surface)",
|
||||
"foreground": "var(--on-surface)"
|
||||
},
|
||||
|
||||
"media-emoji-subheader": {
|
||||
"font-weight": "bold",
|
||||
"margin": "4dp"
|
||||
@@ -384,6 +453,17 @@
|
||||
"text-align": "center",
|
||||
"text-max-lines": "1",
|
||||
"text-overflow": "ellipsis"
|
||||
},
|
||||
"subtype-panel-list-item": {
|
||||
"font-size": "16sp",
|
||||
"padding": "16dp"
|
||||
},
|
||||
"subtype-panel-list-item-icon-leading": {
|
||||
"font-size": "24sp",
|
||||
"padding": "0dp 0dp 16dp 0dp"
|
||||
},
|
||||
"subtype-panel-list-item-text": {
|
||||
"text-max-lines": "1",
|
||||
"text-overflow": "ellipsis"
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
@@ -6,6 +6,7 @@
|
||||
"--secondary": "#f57c00",
|
||||
"--secondary-variant": "#e65100",
|
||||
"--background": "#212121",
|
||||
"--background-variant": "#313131",
|
||||
"--surface": "#424242",
|
||||
"--surface-variant": "#616161",
|
||||
"--popup-surface": "#757575",
|
||||
@@ -22,13 +23,13 @@
|
||||
"--on-surface-variant": "#a0a0a0",
|
||||
|
||||
"--shape": "rounded-corner(8dp, 8dp, 8dp, 8dp)",
|
||||
"--shape-variant": "rounded-corner(12dp, 12dp, 12dp, 12dp)"
|
||||
"--shape-variant": "rounded-corner(12dp, 12dp, 12dp, 12dp)",
|
||||
"--shape-chip": "rounded-corner(50%, 50%, 50%, 50%)"
|
||||
},
|
||||
|
||||
"window": {
|
||||
"background": "var(--background)",
|
||||
"foreground": "var(--on-background)",
|
||||
"clip": "no"
|
||||
"foreground": "var(--on-background)"
|
||||
},
|
||||
|
||||
"key": {
|
||||
@@ -91,6 +92,7 @@
|
||||
"key-popup-extended-indicator": {
|
||||
"font-size": "16sp"
|
||||
},
|
||||
|
||||
"smartbar": {
|
||||
"font-size": "18sp"
|
||||
},
|
||||
@@ -104,6 +106,7 @@
|
||||
"smartbar-extended-actions-toggle": {
|
||||
"background": "transparent",
|
||||
"foreground": "var(--on-surface-variant)",
|
||||
"margin": "6dp",
|
||||
"shape": "circle()"
|
||||
},
|
||||
"smartbar-action-key": {
|
||||
@@ -114,23 +117,34 @@
|
||||
"smartbar-action-key:disabled": {
|
||||
"foreground": "var(--on-background-disabled)"
|
||||
},
|
||||
|
||||
"smartbar-actions-overflow": {
|
||||
"margin": "4dp"
|
||||
},
|
||||
"smartbar-actions-overflow-customize-button": {
|
||||
"background": "var(--primary)",
|
||||
"foreground": "var(--on-primary)",
|
||||
"font-size": "14sp",
|
||||
"margin": "0dp 8dp 0dp 0dp",
|
||||
"shape": "rounded-corner(24dp, 24dp, 24dp, 24dp)"
|
||||
},
|
||||
"smartbar-action-tile": {
|
||||
"background": "transparent",
|
||||
"background": "var(--background-variant)",
|
||||
"foreground": "var(--on-background)",
|
||||
"font-size": "14sp",
|
||||
"shape": "var(--shape)",
|
||||
"text-max-lines": "2",
|
||||
"margin": "4dp",
|
||||
"padding": "4dp",
|
||||
"shape": "rounded-corner(20%, 20%, 20%, 20%)",
|
||||
"text-align": "center",
|
||||
"text-max-lines": "2",
|
||||
"text-overflow": "ellipsis"
|
||||
},
|
||||
"smartbar-action-tile:disabled": {
|
||||
"foreground": "var(--on-background-disabled)"
|
||||
},
|
||||
"smartbar-actions-overflow-customize-button": {
|
||||
"background": "var(--surface)",
|
||||
"foreground": "var(--on-surface)",
|
||||
"font-size": "14sp",
|
||||
"shape": "circle()"
|
||||
"smartbar-action-tile-icon": {
|
||||
"font-size": "24sp",
|
||||
"margin": "0dp 0dp 0dp 8dp"
|
||||
},
|
||||
|
||||
"smartbar-actions-editor": {
|
||||
@@ -188,6 +202,10 @@
|
||||
"background": "var(--surface)",
|
||||
"foreground": "var(--on-surface)"
|
||||
},
|
||||
"smartbar-candidate-word-secondary-text": {
|
||||
"font-size": "8sp",
|
||||
"margin": "0dp 2dp 0dp 0dp"
|
||||
},
|
||||
"smartbar-candidate-clip": {
|
||||
"background": "transparent",
|
||||
"foreground": "var(--on-background)",
|
||||
@@ -202,6 +220,9 @@
|
||||
"background": "var(--surface)",
|
||||
"foreground": "var(--on-surface)"
|
||||
},
|
||||
"smartbar-candidate-clip-icon": {
|
||||
"margin": "0dp 0dp 4dp 0dp"
|
||||
},
|
||||
"smartbar-candidate-spacer": {
|
||||
"foreground": "var(--spacer-color)"
|
||||
},
|
||||
@@ -223,31 +244,80 @@
|
||||
},
|
||||
"clipboard-subheader": {
|
||||
"font-size": "14sp",
|
||||
"margin": "6dp"
|
||||
"margin": "6dp 10dp 6dp 6dp"
|
||||
},
|
||||
"clipboard-content": {
|
||||
"padding": "10dp"
|
||||
"padding": "10dp 0dp"
|
||||
},
|
||||
"clipboard-filter-row": {
|
||||
"background": "var(--background-variant)",
|
||||
"foreground": "var(--on-background)",
|
||||
"padding": "0dp 0dp 4dp 0dp",
|
||||
"shape": "var(--shape-variant)"
|
||||
},
|
||||
"clipboard-filter-chip": {
|
||||
"background": "var(--surface)",
|
||||
"foreground": "var(--on-surface)",
|
||||
"margin": "4dp 4dp 0dp 4dp",
|
||||
"padding": "8dp 4dp",
|
||||
"shape": "var(--shape-chip)"
|
||||
},
|
||||
"clipboard-filter-chip[state=`active`]": {
|
||||
"background": "var(--primary)",
|
||||
"foreground": "var(--on-primary)"
|
||||
},
|
||||
"clipboard-filter-chip-text": {
|
||||
"margin": "4dp 0dp 0dp 0dp"
|
||||
},
|
||||
"clipboard-grid": {
|
||||
"shape": "var(--shape-variant)"
|
||||
},
|
||||
"clipboard-item": {
|
||||
"background": "var(--surface)",
|
||||
"foreground": "var(--on-surface)",
|
||||
"font-size": "14sp",
|
||||
"margin": "4dp",
|
||||
"padding": "12dp 8dp",
|
||||
"shape": "var(--shape-variant)",
|
||||
"shadow-elevation": "2dp",
|
||||
"text-max-lines": "10",
|
||||
"text-overflow": "ellipsis"
|
||||
},
|
||||
"clipboard-item[type=`text`]": {
|
||||
"padding": "12dp 8dp"
|
||||
},
|
||||
"clipboard-item-description": {
|
||||
"font-size": "12sp",
|
||||
"font-style": "italic"
|
||||
},
|
||||
"clipboard-item-popup": {
|
||||
"background": "var(--surface)",
|
||||
"foreground": "var(--on-surface)",
|
||||
"font-size": "14sp",
|
||||
"margin": "4dp",
|
||||
"shape": "var(--shape-variant)",
|
||||
"shadow-elevation": "2dp"
|
||||
},
|
||||
"clipboard-item-popup": {
|
||||
"clipboard-item-popup[type=`text`]": {
|
||||
"padding": "12dp 8dp"
|
||||
},
|
||||
"clipboard-item-timestamp": {
|
||||
"font-size": "11sp",
|
||||
"padding": "16dp 8dp"
|
||||
},
|
||||
"clipboard-item-actions": {
|
||||
"background": "var(--surface)",
|
||||
"foreground": "var(--on-surface)",
|
||||
"margin": "4dp",
|
||||
"shape": "var(--shape-variant)",
|
||||
"shadow-elevation": "2dp"
|
||||
},
|
||||
"clipboard-item-popup-action": {
|
||||
"clipboard-item-action": {
|
||||
"font-size": "16sp",
|
||||
"padding": "12dp"
|
||||
},
|
||||
"clipboard-item-action-text": {
|
||||
"margin": "4dp 0dp 0dp 0dp"
|
||||
},
|
||||
"clipboard-clear-all-dialog": {
|
||||
"background": "var(--surface)",
|
||||
"foreground": "var(--on-surface)",
|
||||
@@ -309,6 +379,12 @@
|
||||
"incognito-mode-indicator": {
|
||||
"foreground": "var(--incognito-icon-color)"
|
||||
},
|
||||
|
||||
"inline-autofill-chip": {
|
||||
"background": "var(--surface)",
|
||||
"foreground": "var(--on-surface)"
|
||||
},
|
||||
|
||||
"media-emoji-subheader": {
|
||||
"font-weight": "bold",
|
||||
"margin": "4dp"
|
||||
@@ -365,5 +441,17 @@
|
||||
"text-align": "center",
|
||||
"text-max-lines": "1",
|
||||
"text-overflow": "ellipsis"
|
||||
},
|
||||
"subtype-panel-list-item": {
|
||||
"font-size": "16sp",
|
||||
"padding": "16dp"
|
||||
},
|
||||
"subtype-panel-list-item-icon-leading": {
|
||||
"font-size": "24sp",
|
||||
"padding": "0dp 0dp 16dp 0dp"
|
||||
},
|
||||
"subtype-panel-list-item-text": {
|
||||
"text-max-lines": "1",
|
||||
"text-overflow": "ellipsis"
|
||||
}
|
||||
}
|
||||
|
||||
@@ -6,6 +6,7 @@
|
||||
"--secondary": "#f57c00",
|
||||
"--secondary-variant": "#e65100",
|
||||
"--background": "#212121",
|
||||
"--background-variant": "#313131",
|
||||
"--surface": "#424242",
|
||||
"--surface-variant": "#616161",
|
||||
"--popup-surface": "#757575",
|
||||
@@ -22,13 +23,13 @@
|
||||
"--on-surface-variant": "#a0a0a0",
|
||||
|
||||
"--shape": "rounded-corner(8dp, 8dp, 8dp, 8dp)",
|
||||
"--shape-variant": "rounded-corner(12dp, 12dp, 12dp, 12dp)"
|
||||
"--shape-variant": "rounded-corner(12dp, 12dp, 12dp, 12dp)",
|
||||
"--shape-chip": "rounded-corner(50%, 50%, 50%, 50%)"
|
||||
},
|
||||
|
||||
"window": {
|
||||
"background": "var(--background)",
|
||||
"foreground": "var(--on-background)",
|
||||
"clip": "no"
|
||||
"foreground": "var(--on-background)"
|
||||
},
|
||||
|
||||
"key": {
|
||||
@@ -93,6 +94,7 @@
|
||||
"key-popup-extended-indicator": {
|
||||
"font-size": "16sp"
|
||||
},
|
||||
|
||||
"smartbar": {
|
||||
"font-size": "18sp"
|
||||
},
|
||||
@@ -106,6 +108,7 @@
|
||||
"smartbar-extended-actions-toggle": {
|
||||
"background": "transparent",
|
||||
"foreground": "var(--on-surface-variant)",
|
||||
"margin": "6dp",
|
||||
"shape": "circle()"
|
||||
},
|
||||
"smartbar-action-key": {
|
||||
@@ -120,28 +123,36 @@
|
||||
"smartbar-action-key:disabled": {
|
||||
"foreground": "var(--on-background-disabled)"
|
||||
},
|
||||
|
||||
"smartbar-actions-overflow": {
|
||||
"margin": "4dp"
|
||||
},
|
||||
"smartbar-actions-overflow-customize-button": {
|
||||
"background": "var(--primary)",
|
||||
"foreground": "var(--on-primary)",
|
||||
"font-size": "14sp",
|
||||
"margin": "0dp 8dp 0dp 0dp",
|
||||
"shape": "rounded-corner(24dp, 24dp, 24dp, 24dp)"
|
||||
},
|
||||
"smartbar-action-tile": {
|
||||
"background": "transparent",
|
||||
"background": "var(--background-variant)",
|
||||
"foreground": "var(--on-background)",
|
||||
"font-size": "14sp",
|
||||
"shape": "var(--shape)",
|
||||
"text-max-lines": "2",
|
||||
"margin": "4dp",
|
||||
"padding": "4dp",
|
||||
"shape": "rounded-corner(20%, 20%, 20%, 20%)",
|
||||
"text-align": "center",
|
||||
"text-max-lines": "2",
|
||||
"text-overflow": "ellipsis"
|
||||
},
|
||||
"smartbar-action-tile:pressed": {
|
||||
"background": "var(--surface)",
|
||||
"foreground": "var(--on-surface)"
|
||||
},
|
||||
"smartbar-action-tile:disabled": {
|
||||
"foreground": "var(--on-background-disabled)"
|
||||
},
|
||||
"smartbar-actions-overflow-customize-button": {
|
||||
"background": "var(--surface)",
|
||||
"foreground": "var(--on-surface)",
|
||||
"font-size": "14sp",
|
||||
"shape": "circle()"
|
||||
"smartbar-action-tile-icon": {
|
||||
"font-size": "24sp",
|
||||
"margin": "0dp 0dp 0dp 8dp"
|
||||
},
|
||||
|
||||
"smartbar-actions-editor": {
|
||||
"background": "var(--background)",
|
||||
"foreground": "var(--on-background)",
|
||||
@@ -197,6 +208,10 @@
|
||||
"background": "var(--surface)",
|
||||
"foreground": "var(--on-background)"
|
||||
},
|
||||
"smartbar-candidate-word-secondary-text": {
|
||||
"font-size": "8sp",
|
||||
"margin": "0dp 2dp 0dp 0dp"
|
||||
},
|
||||
"smartbar-candidate-clip": {
|
||||
"background": "transparent",
|
||||
"foreground": "var(--on-background)",
|
||||
@@ -211,13 +226,15 @@
|
||||
"background": "var(--surface)",
|
||||
"foreground": "var(--on-background)"
|
||||
},
|
||||
"smartbar-candidate-clip-icon": {
|
||||
"margin": "0dp 0dp 4dp 0dp"
|
||||
},
|
||||
"smartbar-candidate-spacer": {
|
||||
"foreground": "var(--surface)"
|
||||
},
|
||||
|
||||
"clipboard-header": {
|
||||
"background": "transparent",
|
||||
"foreground": "var(--on-surface)",
|
||||
"foreground": "var(--on-background)",
|
||||
"font-size": "16sp"
|
||||
},
|
||||
"clipboard-header-button": {
|
||||
@@ -233,32 +250,80 @@
|
||||
},
|
||||
"clipboard-subheader": {
|
||||
"font-size": "14sp",
|
||||
"margin": "6dp"
|
||||
"margin": "6dp 10dp 6dp 6dp"
|
||||
},
|
||||
"clipboard-content": {
|
||||
"padding": "10dp"
|
||||
"padding": "10dp 0dp"
|
||||
},
|
||||
"clipboard-filter-row": {
|
||||
"background": "var(--background-variant)",
|
||||
"foreground": "var(--on-background)",
|
||||
"padding": "0dp 0dp 4dp 0dp",
|
||||
"shape": "var(--shape-variant)"
|
||||
},
|
||||
"clipboard-filter-chip": {
|
||||
"background": "var(--surface)",
|
||||
"foreground": "var(--on-surface)",
|
||||
"margin": "4dp 4dp 0dp 4dp",
|
||||
"padding": "8dp 4dp",
|
||||
"shape": "var(--shape-chip)"
|
||||
},
|
||||
"clipboard-filter-chip[state=`active`]": {
|
||||
"background": "var(--primary)",
|
||||
"foreground": "var(--on-primary)"
|
||||
},
|
||||
"clipboard-filter-chip-text": {
|
||||
"margin": "4dp 0dp 0dp 0dp"
|
||||
},
|
||||
"clipboard-grid": {
|
||||
"shape": "var(--shape-variant)"
|
||||
},
|
||||
"clipboard-item": {
|
||||
"background": "var(--surface)",
|
||||
"foreground": "var(--on-surface)",
|
||||
"font-size": "14sp",
|
||||
"margin": "4dp",
|
||||
"padding": "12dp 8dp",
|
||||
"shape": "var(--shape-variant)",
|
||||
"shadow-elevation": "2dp"
|
||||
"shadow-elevation": "2dp",
|
||||
"text-max-lines": "10",
|
||||
"text-overflow": "ellipsis"
|
||||
},
|
||||
"clipboard-item[type=`text`]": {
|
||||
"padding": "12dp 8dp"
|
||||
},
|
||||
"clipboard-item-description": {
|
||||
"font-size": "12sp",
|
||||
"font-style": "italic"
|
||||
},
|
||||
"clipboard-item-popup": {
|
||||
"background": "var(--surface-variant)",
|
||||
"background": "var(--surface)",
|
||||
"foreground": "var(--on-surface)",
|
||||
"font-size": "14sp",
|
||||
"margin": "4dp",
|
||||
"padding": "12dp 8dp",
|
||||
"shape": "var(--shape-variant)",
|
||||
"shadow-elevation": "2dp"
|
||||
},
|
||||
"clipboard-item-popup-action": {
|
||||
"clipboard-item-popup[type=`text`]": {
|
||||
"padding": "12dp 8dp"
|
||||
},
|
||||
"clipboard-item-timestamp": {
|
||||
"font-size": "11sp",
|
||||
"padding": "16dp 8dp"
|
||||
},
|
||||
"clipboard-item-actions": {
|
||||
"background": "var(--surface)",
|
||||
"foreground": "var(--on-surface)",
|
||||
"margin": "4dp",
|
||||
"shape": "var(--shape-variant)",
|
||||
"shadow-elevation": "2dp"
|
||||
},
|
||||
"clipboard-item-action": {
|
||||
"font-size": "16sp",
|
||||
"padding": "12dp"
|
||||
},
|
||||
"clipboard-item-action-text": {
|
||||
"margin": "4dp 0dp 0dp 0dp"
|
||||
},
|
||||
"clipboard-clear-all-dialog": {
|
||||
"background": "var(--surface)",
|
||||
"foreground": "var(--on-surface)",
|
||||
@@ -320,6 +385,12 @@
|
||||
"incognito-mode-indicator": {
|
||||
"foreground": "var(--incognito-icon-color)"
|
||||
},
|
||||
|
||||
"inline-autofill-chip": {
|
||||
"background": "var(--surface)",
|
||||
"foreground": "var(--on-surface)"
|
||||
},
|
||||
|
||||
"media-emoji-subheader": {
|
||||
"font-weight": "bold",
|
||||
"margin": "4dp"
|
||||
@@ -376,5 +447,17 @@
|
||||
"text-align": "center",
|
||||
"text-max-lines": "1",
|
||||
"text-overflow": "ellipsis"
|
||||
},
|
||||
"subtype-panel-list-item": {
|
||||
"font-size": "16sp",
|
||||
"padding": "16dp"
|
||||
},
|
||||
"subtype-panel-list-item-icon-leading": {
|
||||
"font-size": "24sp",
|
||||
"padding": "0dp 0dp 16dp 0dp"
|
||||
},
|
||||
"subtype-panel-list-item-text": {
|
||||
"text-max-lines": "1",
|
||||
"text-overflow": "ellipsis"
|
||||
}
|
||||
}
|
||||
|
||||
@@ -6,6 +6,7 @@
|
||||
"--secondary": "#ff9800",
|
||||
"--secondary-variant": "#804c00",
|
||||
"--background": "#000000",
|
||||
"--background-variant": "#111111",
|
||||
"--surface": "#212121",
|
||||
"--surface-variant": "#3d3d3d",
|
||||
"--popup-surface": "#424242",
|
||||
@@ -22,13 +23,13 @@
|
||||
"--on-surface-variant": "#ffffff73",
|
||||
|
||||
"--shape": "rounded-corner(8dp, 8dp, 8dp, 8dp)",
|
||||
"--shape-variant": "rounded-corner(12dp, 12dp, 12dp, 12dp)"
|
||||
"--shape-variant": "rounded-corner(12dp, 12dp, 12dp, 12dp)",
|
||||
"--shape-chip": "rounded-corner(50%, 50%, 50%, 50%)"
|
||||
},
|
||||
|
||||
"window": {
|
||||
"background": "var(--background)",
|
||||
"foreground": "var(--on-background)",
|
||||
"clip": "no"
|
||||
"foreground": "var(--on-background)"
|
||||
},
|
||||
|
||||
"key": {
|
||||
@@ -91,6 +92,7 @@
|
||||
"key-popup-extended-indicator": {
|
||||
"font-size": "16sp"
|
||||
},
|
||||
|
||||
"smartbar": {
|
||||
"font-size": "18sp"
|
||||
},
|
||||
@@ -104,6 +106,7 @@
|
||||
"smartbar-extended-actions-toggle": {
|
||||
"background": "transparent",
|
||||
"foreground": "var(--on-surface-variant)",
|
||||
"margin": "6dp",
|
||||
"shape": "circle()"
|
||||
},
|
||||
"smartbar-action-key": {
|
||||
@@ -118,23 +121,34 @@
|
||||
"smartbar-action-key:disabled": {
|
||||
"foreground": "var(--on-background-disabled)"
|
||||
},
|
||||
|
||||
"smartbar-actions-overflow": {
|
||||
"margin": "4dp"
|
||||
},
|
||||
"smartbar-actions-overflow-customize-button": {
|
||||
"background": "var(--primary)",
|
||||
"foreground": "var(--on-primary)",
|
||||
"font-size": "14sp",
|
||||
"margin": "0dp 8dp 0dp 0dp",
|
||||
"shape": "rounded-corner(24dp, 24dp, 24dp, 24dp)"
|
||||
},
|
||||
"smartbar-action-tile": {
|
||||
"background": "transparent",
|
||||
"background": "var(--background-variant)",
|
||||
"foreground": "var(--on-background)",
|
||||
"font-size": "14sp",
|
||||
"shape": "var(--shape)",
|
||||
"text-max-lines": "2",
|
||||
"margin": "4dp",
|
||||
"padding": "4dp",
|
||||
"shape": "rounded-corner(20%, 20%, 20%, 20%)",
|
||||
"text-align": "center",
|
||||
"text-max-lines": "2",
|
||||
"text-overflow": "ellipsis"
|
||||
},
|
||||
"smartbar-action-tile:disabled": {
|
||||
"foreground": "var(--on-background-disabled)"
|
||||
},
|
||||
"smartbar-actions-overflow-customize-button": {
|
||||
"background": "var(--surface)",
|
||||
"foreground": "var(--on-surface)",
|
||||
"font-size": "14sp",
|
||||
"shape": "circle()"
|
||||
"smartbar-action-tile-icon": {
|
||||
"font-size": "24sp",
|
||||
"margin": "0dp 0dp 0dp 8dp"
|
||||
},
|
||||
|
||||
"smartbar-actions-editor": {
|
||||
@@ -192,6 +206,10 @@
|
||||
"background": "var(--surface)",
|
||||
"foreground": "var(--on-surface)"
|
||||
},
|
||||
"smartbar-candidate-word-secondary-text": {
|
||||
"font-size": "8sp",
|
||||
"margin": "0dp 2dp 0dp 0dp"
|
||||
},
|
||||
"smartbar-candidate-clip": {
|
||||
"background": "transparent",
|
||||
"foreground": "var(--on-background)",
|
||||
@@ -206,6 +224,9 @@
|
||||
"background": "var(--surface)",
|
||||
"foreground": "var(--on-surface)"
|
||||
},
|
||||
"smartbar-candidate-clip-icon": {
|
||||
"margin": "0dp 0dp 4dp 0dp"
|
||||
},
|
||||
"smartbar-candidate-spacer": {
|
||||
"foreground": "var(--spacer-color)"
|
||||
},
|
||||
@@ -227,31 +248,80 @@
|
||||
},
|
||||
"clipboard-subheader": {
|
||||
"font-size": "14sp",
|
||||
"margin": "6dp"
|
||||
"margin": "6dp 10dp 6dp 6dp"
|
||||
},
|
||||
"clipboard-content": {
|
||||
"padding": "10dp"
|
||||
"padding": "10dp 0dp"
|
||||
},
|
||||
"clipboard-filter-row": {
|
||||
"background": "var(--background-variant)",
|
||||
"foreground": "var(--on-background)",
|
||||
"padding": "0dp 0dp 4dp 0dp",
|
||||
"shape": "var(--shape-variant)"
|
||||
},
|
||||
"clipboard-filter-chip": {
|
||||
"background": "var(--surface)",
|
||||
"foreground": "var(--on-surface)",
|
||||
"margin": "4dp 4dp 0dp 4dp",
|
||||
"padding": "8dp 4dp",
|
||||
"shape": "var(--shape-chip)"
|
||||
},
|
||||
"clipboard-filter-chip[state=`active`]": {
|
||||
"background": "var(--primary)",
|
||||
"foreground": "var(--on-primary)"
|
||||
},
|
||||
"clipboard-filter-chip-text": {
|
||||
"margin": "4dp 0dp 0dp 0dp"
|
||||
},
|
||||
"clipboard-grid": {
|
||||
"shape": "var(--shape-variant)"
|
||||
},
|
||||
"clipboard-item": {
|
||||
"background": "var(--surface)",
|
||||
"foreground": "var(--on-surface)",
|
||||
"font-size": "14sp",
|
||||
"margin": "4dp",
|
||||
"padding": "12dp 8dp",
|
||||
"shape": "var(--shape-variant)",
|
||||
"shadow-elevation": "2dp",
|
||||
"text-max-lines": "10",
|
||||
"text-overflow": "ellipsis"
|
||||
},
|
||||
"clipboard-item[type=`text`]": {
|
||||
"padding": "12dp 8dp"
|
||||
},
|
||||
"clipboard-item-description": {
|
||||
"font-size": "12sp",
|
||||
"font-style": "italic"
|
||||
},
|
||||
"clipboard-item-popup": {
|
||||
"background": "var(--surface)",
|
||||
"foreground": "var(--on-surface)",
|
||||
"font-size": "14sp",
|
||||
"margin": "4dp",
|
||||
"shape": "var(--shape-variant)",
|
||||
"shadow-elevation": "2dp"
|
||||
},
|
||||
"clipboard-item-popup": {
|
||||
"clipboard-item-popup[type=`text`]": {
|
||||
"padding": "12dp 8dp"
|
||||
},
|
||||
"clipboard-item-timestamp": {
|
||||
"font-size": "11sp",
|
||||
"padding": "16dp 8dp"
|
||||
},
|
||||
"clipboard-item-actions": {
|
||||
"background": "var(--surface)",
|
||||
"foreground": "var(--on-surface)",
|
||||
"margin": "4dp",
|
||||
"shape": "var(--shape-variant)",
|
||||
"shadow-elevation": "2dp"
|
||||
},
|
||||
"clipboard-item-popup-action": {
|
||||
"clipboard-item-action": {
|
||||
"font-size": "16sp",
|
||||
"padding": "12dp"
|
||||
},
|
||||
"clipboard-item-action-text": {
|
||||
"margin": "4dp 0dp 0dp 0dp"
|
||||
},
|
||||
"clipboard-clear-all-dialog": {
|
||||
"background": "var(--surface)",
|
||||
"foreground": "var(--on-surface)",
|
||||
@@ -313,6 +383,12 @@
|
||||
"incognito-mode-indicator": {
|
||||
"foreground": "var(--incognito-icon-color)"
|
||||
},
|
||||
|
||||
"inline-autofill-chip": {
|
||||
"background": "var(--surface)",
|
||||
"foreground": "var(--on-surface)"
|
||||
},
|
||||
|
||||
"media-emoji-subheader": {
|
||||
"font-weight": "bold",
|
||||
"margin": "4dp"
|
||||
@@ -369,5 +445,17 @@
|
||||
"text-align": "center",
|
||||
"text-max-lines": "1",
|
||||
"text-overflow": "ellipsis"
|
||||
},
|
||||
"subtype-panel-list-item": {
|
||||
"font-size": "16sp",
|
||||
"padding": "16dp"
|
||||
},
|
||||
"subtype-panel-list-item-icon-leading": {
|
||||
"font-size": "24sp",
|
||||
"padding": "0dp 0dp 16dp 0dp"
|
||||
},
|
||||
"subtype-panel-list-item-text": {
|
||||
"text-max-lines": "1",
|
||||
"text-overflow": "ellipsis"
|
||||
}
|
||||
}
|
||||
|
||||
@@ -6,6 +6,7 @@
|
||||
"--secondary": "#ff9800",
|
||||
"--secondary-variant": "#804c00",
|
||||
"--background": "#000000",
|
||||
"--background-variant": "#111111",
|
||||
"--surface": "#212121",
|
||||
"--surface-variant": "#3d3d3d",
|
||||
"--popup-surface": "#424242",
|
||||
@@ -22,13 +23,13 @@
|
||||
"--on-surface-variant": "#ffffff73",
|
||||
|
||||
"--shape": "rounded-corner(8dp, 8dp, 8dp, 8dp)",
|
||||
"--shape-variant": "rounded-corner(12dp, 12dp, 12dp, 12dp)"
|
||||
"--shape-variant": "rounded-corner(12dp, 12dp, 12dp, 12dp)",
|
||||
"--shape-chip": "rounded-corner(50%, 50%, 50%, 50%)"
|
||||
},
|
||||
|
||||
"window": {
|
||||
"background": "var(--background)",
|
||||
"foreground": "var(--on-background)",
|
||||
"clip": "no"
|
||||
"foreground": "var(--on-background)"
|
||||
},
|
||||
|
||||
"key": {
|
||||
@@ -93,6 +94,7 @@
|
||||
"key-popup-extended-indicator": {
|
||||
"font-size": "16sp"
|
||||
},
|
||||
|
||||
"smartbar": {
|
||||
"font-size": "18sp"
|
||||
},
|
||||
@@ -106,6 +108,7 @@
|
||||
"smartbar-extended-actions-toggle": {
|
||||
"background": "transparent",
|
||||
"foreground": "var(--on-surface-variant)",
|
||||
"margin": "6dp",
|
||||
"shape": "circle()"
|
||||
},
|
||||
"smartbar-action-key": {
|
||||
@@ -120,28 +123,36 @@
|
||||
"smartbar-action-key:disabled": {
|
||||
"foreground": "var(--on-background-disabled)"
|
||||
},
|
||||
|
||||
"smartbar-actions-overflow": {
|
||||
"margin": "4dp"
|
||||
},
|
||||
"smartbar-actions-overflow-customize-button": {
|
||||
"background": "var(--primary)",
|
||||
"foreground": "var(--on-primary)",
|
||||
"font-size": "14sp",
|
||||
"margin": "0dp 8dp 0dp 0dp",
|
||||
"shape": "rounded-corner(24dp, 24dp, 24dp, 24dp)"
|
||||
},
|
||||
"smartbar-action-tile": {
|
||||
"background": "transparent",
|
||||
"background": "var(--background-variant)",
|
||||
"foreground": "var(--on-background)",
|
||||
"font-size": "14sp",
|
||||
"shape": "var(--shape)",
|
||||
"text-max-lines": "2",
|
||||
"margin": "4dp",
|
||||
"padding": "4dp",
|
||||
"shape": "rounded-corner(20%, 20%, 20%, 20%)",
|
||||
"text-align": "center",
|
||||
"text-max-lines": "2",
|
||||
"text-overflow": "ellipsis"
|
||||
},
|
||||
"smartbar-action-tile:pressed": {
|
||||
"background": "var(--surface)",
|
||||
"foreground": "var(--on-surface)"
|
||||
},
|
||||
"smartbar-action-tile:disabled": {
|
||||
"foreground": "var(--on-background-disabled)"
|
||||
},
|
||||
"smartbar-actions-overflow-customize-button": {
|
||||
"background": "var(--surface)",
|
||||
"foreground": "var(--on-surface)",
|
||||
"font-size": "14sp",
|
||||
"shape": "circle()"
|
||||
"smartbar-action-tile-icon": {
|
||||
"font-size": "24sp",
|
||||
"margin": "0dp 0dp 0dp 8dp"
|
||||
},
|
||||
|
||||
"smartbar-actions-editor": {
|
||||
"background": "var(--background)",
|
||||
"foreground": "var(--on-background)",
|
||||
@@ -197,6 +208,10 @@
|
||||
"background": "var(--surface)",
|
||||
"foreground": "var(--on-background)"
|
||||
},
|
||||
"smartbar-candidate-word-secondary-text": {
|
||||
"font-size": "8sp",
|
||||
"margin": "0dp 2dp 0dp 0dp"
|
||||
},
|
||||
"smartbar-candidate-clip": {
|
||||
"background": "transparent",
|
||||
"foreground": "var(--on-background)",
|
||||
@@ -211,13 +226,15 @@
|
||||
"background": "var(--surface)",
|
||||
"foreground": "var(--on-background)"
|
||||
},
|
||||
"smartbar-candidate-clip-icon": {
|
||||
"margin": "0dp 0dp 4dp 0dp"
|
||||
},
|
||||
"smartbar-candidate-spacer": {
|
||||
"foreground": "var(--surface)"
|
||||
},
|
||||
|
||||
"clipboard-header": {
|
||||
"background": "transparent",
|
||||
"foreground": "var(--on-surface)",
|
||||
"foreground": "var(--on-background)",
|
||||
"font-size": "16sp"
|
||||
},
|
||||
"clipboard-header-button": {
|
||||
@@ -233,32 +250,80 @@
|
||||
},
|
||||
"clipboard-subheader": {
|
||||
"font-size": "14sp",
|
||||
"margin": "6dp"
|
||||
"margin": "6dp 10dp 6dp 6dp"
|
||||
},
|
||||
"clipboard-content": {
|
||||
"padding": "10dp"
|
||||
"padding": "10dp 0dp"
|
||||
},
|
||||
"clipboard-filter-row": {
|
||||
"background": "var(--background-variant)",
|
||||
"foreground": "var(--on-background)",
|
||||
"padding": "0dp 0dp 4dp 0dp",
|
||||
"shape": "var(--shape-variant)"
|
||||
},
|
||||
"clipboard-filter-chip": {
|
||||
"background": "var(--surface)",
|
||||
"foreground": "var(--on-surface)",
|
||||
"margin": "4dp 4dp 0dp 4dp",
|
||||
"padding": "8dp 4dp",
|
||||
"shape": "var(--shape-chip)"
|
||||
},
|
||||
"clipboard-filter-chip[state=`active`]": {
|
||||
"background": "var(--primary)",
|
||||
"foreground": "var(--on-primary)"
|
||||
},
|
||||
"clipboard-filter-chip-text": {
|
||||
"margin": "4dp 0dp 0dp 0dp"
|
||||
},
|
||||
"clipboard-grid": {
|
||||
"shape": "var(--shape-variant)"
|
||||
},
|
||||
"clipboard-item": {
|
||||
"background": "var(--surface)",
|
||||
"foreground": "var(--on-surface)",
|
||||
"font-size": "14sp",
|
||||
"margin": "4dp",
|
||||
"padding": "12dp 8dp",
|
||||
"shape": "var(--shape-variant)",
|
||||
"shadow-elevation": "2dp"
|
||||
"shadow-elevation": "2dp",
|
||||
"text-max-lines": "10",
|
||||
"text-overflow": "ellipsis"
|
||||
},
|
||||
"clipboard-item[type=`text`]": {
|
||||
"padding": "12dp 8dp"
|
||||
},
|
||||
"clipboard-item-description": {
|
||||
"font-size": "12sp",
|
||||
"font-style": "italic"
|
||||
},
|
||||
"clipboard-item-popup": {
|
||||
"background": "var(--surface-variant)",
|
||||
"background": "var(--surface)",
|
||||
"foreground": "var(--on-surface)",
|
||||
"font-size": "14sp",
|
||||
"margin": "4dp",
|
||||
"padding": "12dp 8dp",
|
||||
"shape": "var(--shape-variant)",
|
||||
"shadow-elevation": "2dp"
|
||||
},
|
||||
"clipboard-item-popup-action": {
|
||||
"clipboard-item-popup[type=`text`]": {
|
||||
"padding": "12dp 8dp"
|
||||
},
|
||||
"clipboard-item-timestamp": {
|
||||
"font-size": "11sp",
|
||||
"padding": "16dp 8dp"
|
||||
},
|
||||
"clipboard-item-actions": {
|
||||
"background": "var(--surface)",
|
||||
"foreground": "var(--on-surface)",
|
||||
"margin": "4dp",
|
||||
"shape": "var(--shape-variant)",
|
||||
"shadow-elevation": "2dp"
|
||||
},
|
||||
"clipboard-item-action": {
|
||||
"font-size": "16sp",
|
||||
"padding": "12dp"
|
||||
},
|
||||
"clipboard-item-action-text": {
|
||||
"margin": "4dp 0dp 0dp 0dp"
|
||||
},
|
||||
"clipboard-clear-all-dialog": {
|
||||
"background": "var(--surface)",
|
||||
"foreground": "var(--on-surface)",
|
||||
@@ -320,6 +385,12 @@
|
||||
"incognito-mode-indicator": {
|
||||
"foreground": "var(--incognito-icon-color)"
|
||||
},
|
||||
|
||||
"inline-autofill-chip": {
|
||||
"background": "var(--surface)",
|
||||
"foreground": "var(--on-surface)"
|
||||
},
|
||||
|
||||
"media-emoji-subheader": {
|
||||
"font-weight": "bold",
|
||||
"margin": "4dp"
|
||||
@@ -376,5 +447,17 @@
|
||||
"text-align": "center",
|
||||
"text-max-lines": "1",
|
||||
"text-overflow": "ellipsis"
|
||||
},
|
||||
"subtype-panel-list-item": {
|
||||
"font-size": "16sp",
|
||||
"padding": "16dp"
|
||||
},
|
||||
"subtype-panel-list-item-icon-leading": {
|
||||
"font-size": "24sp",
|
||||
"padding": "0dp 0dp 16dp 0dp"
|
||||
},
|
||||
"subtype-panel-list-item-text": {
|
||||
"text-max-lines": "1",
|
||||
"text-overflow": "ellipsis"
|
||||
}
|
||||
}
|
||||
|
||||
@@ -291,6 +291,9 @@ class FlorisImeService : LifecycleInputMethodService() {
|
||||
}
|
||||
resourcesContext = createConfigurationContext(config)
|
||||
}
|
||||
prefs.physicalKeyboard.showOnScreenKeyboard.observeForever {
|
||||
updateInputViewShown()
|
||||
}
|
||||
@Suppress("DEPRECATION") // We do not retrieve the wallpaper but only listen to changes
|
||||
registerReceiver(wallpaperChangeReceiver, IntentFilter(Intent.ACTION_WALLPAPER_CHANGED))
|
||||
}
|
||||
@@ -356,6 +359,13 @@ class FlorisImeService : LifecycleInputMethodService() {
|
||||
}
|
||||
}
|
||||
|
||||
override fun onEvaluateInputViewShown(): Boolean {
|
||||
val config = resources.configuration
|
||||
return super.onEvaluateInputViewShown()
|
||||
|| config.keyboard == Configuration.KEYBOARD_NOKEYS
|
||||
|| prefs.physicalKeyboard.showOnScreenKeyboard.get()
|
||||
}
|
||||
|
||||
override fun onUpdateSelection(
|
||||
oldSelStart: Int,
|
||||
oldSelEnd: Int,
|
||||
@@ -528,8 +538,8 @@ class FlorisImeService : LifecycleInputMethodService() {
|
||||
*/
|
||||
private fun updateSoftInputWindowLayoutParameters() {
|
||||
val w = window?.window ?: return
|
||||
// TODO: setting this to false kinda helps with the nav bar color bug, but introduces padding issues...
|
||||
WindowCompat.setDecorFitsSystemWindows(w, true)
|
||||
// TODO: Verify that this doesn't give us a padding problem
|
||||
WindowCompat.setDecorFitsSystemWindows(w, false)
|
||||
ViewUtils.updateLayoutHeightOf(w, WindowManager.LayoutParams.MATCH_PARENT)
|
||||
val layoutHeight = if (isFullscreenUiMode) {
|
||||
WindowManager.LayoutParams.WRAP_CONTENT
|
||||
@@ -588,6 +598,10 @@ class FlorisImeService : LifecycleInputMethodService() {
|
||||
@Composable
|
||||
private fun ImeUi() {
|
||||
val state by keyboardManager.activeState.collectAsState()
|
||||
val attributes = mapOf(
|
||||
FlorisImeUi.Attr.Mode to state.keyboardMode.toString(),
|
||||
FlorisImeUi.Attr.ShiftState to state.inputShiftState.toString(),
|
||||
)
|
||||
val layoutDirection = LocalLayoutDirection.current
|
||||
LaunchedEffect(layoutDirection) {
|
||||
keyboardManager.activeState.layoutDirection = layoutDirection
|
||||
@@ -595,7 +609,7 @@ class FlorisImeService : LifecycleInputMethodService() {
|
||||
CompositionLocalProvider(LocalLayoutDirection provides LayoutDirection.Ltr) {
|
||||
SnyggBox(
|
||||
elementName = FlorisImeUi.Window.elementName,
|
||||
attributes = mapOf(FlorisImeUi.Attr.ShiftState to state.inputShiftState.attrName()),
|
||||
attributes = attributes,
|
||||
modifier = Modifier
|
||||
.fillMaxWidth()
|
||||
.wrapContentHeight()
|
||||
@@ -604,6 +618,7 @@ class FlorisImeService : LifecycleInputMethodService() {
|
||||
// Do not remove below line or touch input may get stuck
|
||||
.pointerInteropFilter { false },
|
||||
supportsBackgroundImage = true,
|
||||
allowClip = false,
|
||||
) {
|
||||
val configuration = LocalConfiguration.current
|
||||
val bottomOffset by if (configuration.isOrientationPortrait()) {
|
||||
@@ -754,7 +769,8 @@ class FlorisImeService : LifecycleInputMethodService() {
|
||||
modifier = Modifier.fillMaxSize(),
|
||||
verticalAlignment = Alignment.CenterVertically,
|
||||
) {
|
||||
SnyggBox(FlorisImeUi.ExtractedLandscapeInputLayout.elementName,
|
||||
SnyggBox(
|
||||
elementName = FlorisImeUi.ExtractedLandscapeInputLayout.elementName,
|
||||
modifier = Modifier
|
||||
.fillMaxHeight()
|
||||
.weight(1f),
|
||||
|
||||
@@ -23,6 +23,7 @@ import androidx.compose.ui.platform.LocalConfiguration
|
||||
import dev.patrickgold.florisboard.app.settings.theme.DisplayKbdAfterDialogs
|
||||
import dev.patrickgold.florisboard.app.settings.theme.SnyggLevel
|
||||
import dev.patrickgold.florisboard.app.setup.NotificationPermissionState
|
||||
import dev.patrickgold.florisboard.ime.clipboard.CLIPBOARD_HISTORY_NUM_GRID_COLUMNS_AUTO
|
||||
import dev.patrickgold.florisboard.ime.core.DisplayLanguageNamesIn
|
||||
import dev.patrickgold.florisboard.ime.core.Subtype
|
||||
import dev.patrickgold.florisboard.ime.input.CapitalizationBehavior
|
||||
@@ -57,6 +58,8 @@ import dev.patrickgold.florisboard.lib.ext.ExtensionComponentName
|
||||
import dev.patrickgold.florisboard.lib.observeAsTransformingState
|
||||
import dev.patrickgold.florisboard.lib.util.VersionName
|
||||
import dev.patrickgold.jetpref.datastore.JetPref
|
||||
import dev.patrickgold.jetpref.datastore.model.LocalTime
|
||||
import dev.patrickgold.jetpref.datastore.model.PreferenceData
|
||||
import dev.patrickgold.jetpref.datastore.model.PreferenceMigrationEntry
|
||||
import dev.patrickgold.jetpref.datastore.model.PreferenceModel
|
||||
import dev.patrickgold.jetpref.datastore.model.observeAsState
|
||||
@@ -87,6 +90,23 @@ class AppPrefs : PreferenceModel("florisboard-app-prefs") {
|
||||
key = "clipboard__history_enabled",
|
||||
default = false,
|
||||
)
|
||||
val numHistoryGridColumnsPortrait = int(
|
||||
key = "clipboard__num_history_grid_columns_portrait",
|
||||
default = CLIPBOARD_HISTORY_NUM_GRID_COLUMNS_AUTO,
|
||||
)
|
||||
val numHistoryGridColumnsLandscape = int(
|
||||
key = "clipboard__num_history_grid_columns_landscape",
|
||||
default = CLIPBOARD_HISTORY_NUM_GRID_COLUMNS_AUTO,
|
||||
)
|
||||
@Composable
|
||||
fun numHistoryGridColumns(): PreferenceData<Int> {
|
||||
val configuration = LocalConfiguration.current
|
||||
return if (configuration.isOrientationPortrait()) {
|
||||
numHistoryGridColumnsPortrait
|
||||
} else {
|
||||
numHistoryGridColumnsLandscape
|
||||
}
|
||||
}
|
||||
val cleanUpOld = boolean(
|
||||
key = "clipboard__clean_up_old",
|
||||
default = false,
|
||||
@@ -619,6 +639,14 @@ class AppPrefs : PreferenceModel("florisboard-app-prefs") {
|
||||
)
|
||||
}
|
||||
|
||||
val physicalKeyboard = PhysicalKeyboard()
|
||||
inner class PhysicalKeyboard {
|
||||
val showOnScreenKeyboard = boolean(
|
||||
key = "physical_keyboard__show_on_screen_keyboard",
|
||||
default = false,
|
||||
)
|
||||
}
|
||||
|
||||
val smartbar = Smartbar()
|
||||
inner class Smartbar {
|
||||
val enabled = boolean(
|
||||
@@ -730,14 +758,14 @@ class AppPrefs : PreferenceModel("florisboard-app-prefs") {
|
||||
},
|
||||
serializer = ColorPreferenceSerializer,
|
||||
)
|
||||
//val sunriseTime = localTime(
|
||||
// key = "theme__sunrise_time",
|
||||
// default = LocalTime.of(6, 0),
|
||||
//)
|
||||
//val sunsetTime = localTime(
|
||||
// key = "theme__sunset_time",
|
||||
// default = LocalTime.of(18, 0),
|
||||
//)
|
||||
val sunriseTime = time(
|
||||
key = "theme__sunrise_time",
|
||||
default = LocalTime(6, 0),
|
||||
)
|
||||
val sunsetTime = time(
|
||||
key = "theme__sunset_time",
|
||||
default = LocalTime(18, 0),
|
||||
)
|
||||
val editorColorRepresentation = enum(
|
||||
key = "theme__editor_color_representation",
|
||||
default = ColorRepresentation.HEX,
|
||||
@@ -800,26 +828,33 @@ class AppPrefs : PreferenceModel("florisboard-app-prefs") {
|
||||
|
||||
//Migrate one hand mode prefs keep until: 0.7 dev cycle
|
||||
"keyboard__one_handed_mode" -> {
|
||||
if (entry.rawValue != "OFF") {
|
||||
val prefs by florisPreferenceModel()
|
||||
prefs.keyboard.oneHandedModeEnabled.set(true)
|
||||
entry.keepAsIs()
|
||||
} else {
|
||||
if (entry.rawValue == "OFF") {
|
||||
entry.reset()
|
||||
} else {
|
||||
entry.keepAsIs()
|
||||
}
|
||||
}
|
||||
"smartbar__action_arrangement" -> {
|
||||
val arrangement = QuickActionJsonConfig.decodeFromString<QuickActionArrangement>(entry.rawValue)
|
||||
val newArrangement = arrangement.copy(
|
||||
dynamicActions = arrangement.dynamicActions.map { action ->
|
||||
if (action is QuickAction.InsertKey && action.data.code == KeyCode.COMPACT_LAYOUT_TO_RIGHT) {
|
||||
action.copy(TextKeyData.TOGGLE_COMPACT_LAYOUT)
|
||||
} else {
|
||||
action
|
||||
}
|
||||
fun migrateAction(action: QuickAction): QuickAction {
|
||||
return if (action is QuickAction.InsertKey && action.data.code == KeyCode.COMPACT_LAYOUT_TO_RIGHT) {
|
||||
action.copy(TextKeyData.TOGGLE_COMPACT_LAYOUT)
|
||||
} else {
|
||||
action
|
||||
}
|
||||
}
|
||||
|
||||
val arrangement = QuickActionJsonConfig.decodeFromString<QuickActionArrangement>(entry.rawValue)
|
||||
var newArrangement = arrangement.copy(
|
||||
stickyAction = arrangement.stickyAction?.let{ migrateAction(it) },
|
||||
dynamicActions = arrangement.dynamicActions.map { migrateAction(it) },
|
||||
hiddenActions = arrangement.hiddenActions.map { migrateAction(it) },
|
||||
)
|
||||
val json = QuickActionJsonConfig.encodeToString(newArrangement)
|
||||
if (QuickAction.InsertKey(TextKeyData.LANGUAGE_SWITCH) !in newArrangement) {
|
||||
newArrangement = newArrangement.copy(
|
||||
dynamicActions = newArrangement.dynamicActions.plus(QuickAction.InsertKey(TextKeyData.LANGUAGE_SWITCH))
|
||||
)
|
||||
}
|
||||
val json = QuickActionJsonConfig.encodeToString(newArrangement.distinct())
|
||||
entry.transform(rawValue = json)
|
||||
}
|
||||
|
||||
|
||||
@@ -24,7 +24,9 @@ import dev.patrickgold.florisboard.ime.core.DisplayLanguageNamesIn
|
||||
import dev.patrickgold.florisboard.ime.input.CapitalizationBehavior
|
||||
import dev.patrickgold.florisboard.ime.input.HapticVibrationMode
|
||||
import dev.patrickgold.florisboard.ime.input.InputFeedbackActivationMode
|
||||
import dev.patrickgold.florisboard.ime.input.InputShiftState
|
||||
import dev.patrickgold.florisboard.ime.keyboard.IncognitoMode
|
||||
import dev.patrickgold.florisboard.ime.keyboard.KeyboardMode
|
||||
import dev.patrickgold.florisboard.ime.keyboard.SpaceBarMode
|
||||
import dev.patrickgold.florisboard.ime.landscapeinput.LandscapeInputUiMode
|
||||
import dev.patrickgold.florisboard.ime.media.emoji.EmojiHistory
|
||||
@@ -364,6 +366,58 @@ private val ENUM_DISPLAY_ENTRIES = mapOf<Pair<KClass<*>, String>, @Composable ()
|
||||
)
|
||||
}
|
||||
},
|
||||
InputShiftState::class to DEFAULT to {
|
||||
listPrefEntries {
|
||||
entry(
|
||||
key = InputShiftState.UNSHIFTED,
|
||||
label = stringRes(R.string.enum__input_shift_state__unshifted),
|
||||
)
|
||||
entry(
|
||||
key = InputShiftState.SHIFTED_MANUAL,
|
||||
label = stringRes(R.string.enum__input_shift_state__shifted_manual),
|
||||
)
|
||||
entry(
|
||||
key = InputShiftState.SHIFTED_AUTOMATIC,
|
||||
label = stringRes(R.string.enum__input_shift_state__shifted_automatic),
|
||||
)
|
||||
entry(
|
||||
key = InputShiftState.CAPS_LOCK,
|
||||
label = stringRes(R.string.enum__input_shift_state__caps_lock),
|
||||
)
|
||||
}
|
||||
},
|
||||
KeyboardMode::class to DEFAULT to {
|
||||
listPrefEntries {
|
||||
entry(
|
||||
key = KeyboardMode.CHARACTERS,
|
||||
label = stringRes(R.string.enum__keyboard_mode__characters),
|
||||
)
|
||||
entry(
|
||||
key = KeyboardMode.SYMBOLS,
|
||||
label = stringRes(R.string.enum__keyboard_mode__symbols),
|
||||
)
|
||||
entry(
|
||||
key = KeyboardMode.SYMBOLS2,
|
||||
label = stringRes(R.string.enum__keyboard_mode__symbols2),
|
||||
)
|
||||
entry(
|
||||
key = KeyboardMode.NUMERIC,
|
||||
label = stringRes(R.string.enum__keyboard_mode__numeric),
|
||||
)
|
||||
entry(
|
||||
key = KeyboardMode.NUMERIC_ADVANCED,
|
||||
label = stringRes(R.string.enum__keyboard_mode__numeric_advanced),
|
||||
)
|
||||
entry(
|
||||
key = KeyboardMode.PHONE,
|
||||
label = stringRes(R.string.enum__keyboard_mode__phone),
|
||||
)
|
||||
entry(
|
||||
key = KeyboardMode.PHONE2,
|
||||
label = stringRes(R.string.enum__keyboard_mode__phone2),
|
||||
)
|
||||
}
|
||||
},
|
||||
LandscapeInputUiMode::class to DEFAULT to {
|
||||
listPrefEntries {
|
||||
entry(
|
||||
|
||||
@@ -47,8 +47,9 @@ import dev.patrickgold.florisboard.app.settings.HomeScreen
|
||||
import dev.patrickgold.florisboard.app.settings.about.AboutScreen
|
||||
import dev.patrickgold.florisboard.app.settings.about.ProjectLicenseScreen
|
||||
import dev.patrickgold.florisboard.app.settings.about.ThirdPartyLicensesScreen
|
||||
import dev.patrickgold.florisboard.app.settings.advanced.OtherScreen
|
||||
import dev.patrickgold.florisboard.app.settings.advanced.BackupScreen
|
||||
import dev.patrickgold.florisboard.app.settings.advanced.OtherScreen
|
||||
import dev.patrickgold.florisboard.app.settings.advanced.PhysicalKeyboardScreen
|
||||
import dev.patrickgold.florisboard.app.settings.advanced.RestoreScreen
|
||||
import dev.patrickgold.florisboard.app.settings.clipboard.ClipboardScreen
|
||||
import dev.patrickgold.florisboard.app.settings.dictionary.DictionaryScreen
|
||||
@@ -111,6 +112,7 @@ object Routes {
|
||||
const val Media = "settings/media"
|
||||
|
||||
const val Other = "settings/other"
|
||||
const val PhysicalKeyboard = "settings/other/physical-keyboard"
|
||||
const val Backup = "settings/other/backup"
|
||||
const val Restore = "settings/other/restore"
|
||||
|
||||
@@ -240,6 +242,7 @@ object Routes {
|
||||
composableWithDeepLink(Settings.Media) { MediaScreen() }
|
||||
|
||||
composableWithDeepLink(Settings.Other) { OtherScreen() }
|
||||
composableWithDeepLink(Settings.PhysicalKeyboard) { PhysicalKeyboardScreen() }
|
||||
composableWithDeepLink(Settings.Backup) { BackupScreen() }
|
||||
composableWithDeepLink(Settings.Restore) { RestoreScreen() }
|
||||
|
||||
|
||||
@@ -27,6 +27,8 @@ import dev.patrickgold.florisboard.app.Routes
|
||||
import dev.patrickgold.florisboard.extensionManager
|
||||
import dev.patrickgold.florisboard.ime.dictionary.DictionaryManager
|
||||
import dev.patrickgold.florisboard.ime.dictionary.FlorisUserDictionaryDatabase
|
||||
import dev.patrickgold.florisboard.ime.smartbar.quickaction.QuickActionArrangement
|
||||
import dev.patrickgold.florisboard.ime.smartbar.quickaction.QuickActionJsonConfig
|
||||
import org.florisboard.lib.android.AndroidSettings
|
||||
import org.florisboard.lib.android.showLongToast
|
||||
import dev.patrickgold.florisboard.lib.compose.FlorisConfirmDeleteDialog
|
||||
@@ -104,6 +106,15 @@ fun DevtoolsScreen() = FlorisScreen {
|
||||
onClick = { setShowDialog(true) },
|
||||
enabledIf = { prefs.devtools.enabled isEqualTo true },
|
||||
)
|
||||
Preference(
|
||||
title = stringRes(R.string.devtools__reset_quick_actions_to_default__label),
|
||||
summary = stringRes(R.string.devtools__reset_quick_actions_to_default__summary),
|
||||
onClick = {
|
||||
prefs.smartbar.actionArrangement.set(QuickActionArrangement.Default)
|
||||
context.showLongToast(R.string.devtools__reset_quick_actions_to_default__toast_success)
|
||||
},
|
||||
enabledIf = { prefs.devtools.enabled isEqualTo true },
|
||||
)
|
||||
Preference(
|
||||
title = stringRes(R.string.devtools__reset_flag__label, "flag_name" to "isImeSetUp"),
|
||||
summary = stringRes(R.string.devtools__reset_flag_is_ime_set_up__summary),
|
||||
|
||||
@@ -46,7 +46,6 @@ import androidx.compose.ui.platform.LocalContext
|
||||
import androidx.compose.ui.text.font.FontWeight
|
||||
import androidx.compose.ui.text.style.TextOverflow
|
||||
import androidx.compose.ui.unit.dp
|
||||
import androidx.core.content.MimeTypeFilter
|
||||
import dev.patrickgold.florisboard.R
|
||||
import dev.patrickgold.florisboard.lib.cache.CacheManager
|
||||
import dev.patrickgold.florisboard.lib.compose.FlorisIconButton
|
||||
@@ -64,20 +63,20 @@ import org.florisboard.lib.android.showShortToast
|
||||
import org.florisboard.lib.kotlin.io.parentDir
|
||||
import org.florisboard.lib.kotlin.io.subDir
|
||||
import org.florisboard.lib.kotlin.io.subFile
|
||||
import org.florisboard.lib.kotlin.mimeTypeFilterOf
|
||||
|
||||
const val FONTS = "fonts"
|
||||
const val IMAGES = "images"
|
||||
|
||||
val MIME_TYPES = mapOf(
|
||||
FONTS to listOf(
|
||||
FONTS to mimeTypeFilterOf(
|
||||
// Source: https://www.alienfactory.co.uk/articles/mime-types-for-web-fonts-in-bedsheet#mimeTypes
|
||||
"font/*",
|
||||
"application/vnd.ms-fontobject", // .eot
|
||||
"application/font-woff", // .woff
|
||||
"application/x-font-truetype", // .ttf
|
||||
"application/x-font-opentype", // .otf
|
||||
"application/font-*",
|
||||
"application/x-font-*",
|
||||
"application/vnd.ms-fontobject",
|
||||
),
|
||||
IMAGES to listOf(
|
||||
IMAGES to mimeTypeFilterOf(
|
||||
"image/*",
|
||||
),
|
||||
)
|
||||
@@ -118,9 +117,9 @@ fun ExtensionEditFilesScreen(workspace: CacheManager.ExtEditorWorkspace<*>) = Fl
|
||||
val tempFile = context.cacheDir.subFile("temp_${UUID.randomUUID()}")
|
||||
context.contentResolver.readToFile(uri, tempFile)
|
||||
val mimeType = context.contentResolver.getType(uri)
|
||||
val types = MIME_TYPES[currentImportDest!!]!!
|
||||
checkNotNull(MimeTypeFilter.matches(mimeType, types.toTypedArray())) {
|
||||
"Given file mime type was '$mimeType', expected one of $types"
|
||||
val filter = MIME_TYPES[currentImportDest!!]!!
|
||||
check(filter.matches(mimeType)) {
|
||||
"Given file mime type was '$mimeType', expected one of ${filter.types}"
|
||||
}
|
||||
val fileName = context.contentResolver.query(uri, arrayOf(OpenableColumns.DISPLAY_NAME)).use { cursor ->
|
||||
if (cursor == null || !cursor.moveToFirst()) return@use null
|
||||
@@ -180,7 +179,7 @@ fun ExtensionEditFilesScreen(workspace: CacheManager.ExtEditorWorkspace<*>) = Fl
|
||||
dialogFile?.let { file ->
|
||||
var fileNameInput by rememberSaveable { mutableStateOf(file.name) }
|
||||
JetPrefAlertDialog(
|
||||
title = "Rename or remove",
|
||||
title = stringRes(R.string.general__properties),
|
||||
confirmLabel = stringRes(R.string.action__apply),
|
||||
dismissLabel = stringRes(R.string.action__cancel),
|
||||
neutralLabel = stringRes(R.string.action__delete),
|
||||
@@ -189,7 +188,7 @@ fun ExtensionEditFilesScreen(workspace: CacheManager.ExtEditorWorkspace<*>) = Fl
|
||||
if (file.delete()) {
|
||||
context.showShortToast("Successfully deleted")
|
||||
} else {
|
||||
context.showShortToast("Failed to remove")
|
||||
context.showShortToast("Failed to delete")
|
||||
}
|
||||
dialogFile = null
|
||||
version++
|
||||
@@ -218,6 +217,7 @@ fun ExtensionEditFilesScreen(workspace: CacheManager.ExtEditorWorkspace<*>) = Fl
|
||||
},
|
||||
) {
|
||||
JetPrefTextField(
|
||||
labelText = stringRes(R.string.general__file_name),
|
||||
value = fileNameInput,
|
||||
onValueChange = { fileNameInput = it },
|
||||
singleLine = true,
|
||||
@@ -227,7 +227,7 @@ fun ExtensionEditFilesScreen(workspace: CacheManager.ExtEditorWorkspace<*>) = Fl
|
||||
}
|
||||
|
||||
FileList(
|
||||
title = FONTS.replaceFirstChar { it.uppercase() },
|
||||
title = stringRes(R.string.ext__editor__files__type_fonts),
|
||||
icon = Icons.Default.TextFields,
|
||||
files = fontFiles,
|
||||
) {
|
||||
@@ -236,7 +236,7 @@ fun ExtensionEditFilesScreen(workspace: CacheManager.ExtEditorWorkspace<*>) = Fl
|
||||
}
|
||||
|
||||
FileList(
|
||||
title = IMAGES.replaceFirstChar { it.uppercase() },
|
||||
title = stringRes(R.string.ext__editor__files__type_images),
|
||||
icon = Icons.Default.Photo,
|
||||
files = imageFiles,
|
||||
) {
|
||||
@@ -249,7 +249,7 @@ fun ExtensionEditFilesScreen(workspace: CacheManager.ExtEditorWorkspace<*>) = Fl
|
||||
if (dest != null && result != null) {
|
||||
var fileNameInput by rememberSaveable { mutableStateOf(result.second) }
|
||||
JetPrefAlertDialog(
|
||||
title = "Import ${dest.substring(0, dest.length - 1)}",
|
||||
title = stringRes(R.string.action__import_file),
|
||||
confirmLabel = stringRes(R.string.action__add),
|
||||
onConfirm = {
|
||||
val fileName = fileNameInput.trim()
|
||||
|
||||
@@ -19,7 +19,6 @@ package dev.patrickgold.florisboard.app.settings
|
||||
import androidx.compose.foundation.layout.padding
|
||||
import androidx.compose.material.icons.Icons
|
||||
import androidx.compose.material.icons.automirrored.outlined.Assignment
|
||||
import androidx.compose.material.icons.filled.Adb
|
||||
import androidx.compose.material.icons.filled.Extension
|
||||
import androidx.compose.material.icons.filled.Gesture
|
||||
import androidx.compose.material.icons.filled.Language
|
||||
|
||||
@@ -21,8 +21,9 @@ import androidx.compose.foundation.lazy.rememberLazyListState
|
||||
import androidx.compose.material3.MaterialTheme
|
||||
import androidx.compose.runtime.Composable
|
||||
import androidx.compose.ui.Modifier
|
||||
import com.mikepenz.aboutlibraries.ui.compose.LibraryDefaults
|
||||
import com.mikepenz.aboutlibraries.ui.compose.m3.LibrariesContainer
|
||||
import com.mikepenz.aboutlibraries.ui.compose.m3.LibraryDefaults
|
||||
import com.mikepenz.aboutlibraries.ui.compose.m3.libraryColors
|
||||
import dev.patrickgold.florisboard.R
|
||||
import dev.patrickgold.florisboard.lib.compose.FlorisScreen
|
||||
import dev.patrickgold.florisboard.lib.compose.florisScrollbar
|
||||
|
||||
@@ -45,6 +45,7 @@ import dev.patrickgold.jetpref.datastore.ui.PreferenceGroup
|
||||
import dev.patrickgold.jetpref.datastore.ui.SwitchPreference
|
||||
import dev.patrickgold.jetpref.datastore.ui.isMaterialYou
|
||||
import dev.patrickgold.jetpref.datastore.ui.listPrefEntries
|
||||
import dev.patrickgold.jetpref.datastore.ui.vectorResource
|
||||
import org.florisboard.lib.android.AndroidVersion
|
||||
import org.florisboard.lib.color.ColorMappings
|
||||
|
||||
@@ -154,6 +155,11 @@ fun OtherScreen() = FlorisScreen {
|
||||
},
|
||||
enabledIf = { AndroidVersion.ATMOST_API28_P },
|
||||
)
|
||||
Preference(
|
||||
icon = vectorResource(R.drawable.ic_keyboard_keys),
|
||||
title = stringRes(R.string.physical_keyboard__title),
|
||||
onClick = { navController.navigate(Routes.Settings.PhysicalKeyboard) },
|
||||
)
|
||||
Preference(
|
||||
icon = Icons.Default.Adb,
|
||||
title = stringRes(R.string.devtools__title),
|
||||
|
||||
@@ -0,0 +1,69 @@
|
||||
/*
|
||||
* Copyright (C) 2025 The FlorisBoard Contributors
|
||||
*
|
||||
* 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.app.settings.advanced
|
||||
|
||||
import android.content.Intent
|
||||
import android.content.res.Configuration
|
||||
import android.provider.Settings
|
||||
import androidx.activity.compose.rememberLauncherForActivityResult
|
||||
import androidx.activity.result.contract.ActivityResultContracts
|
||||
import androidx.compose.runtime.Composable
|
||||
import androidx.compose.runtime.getValue
|
||||
import androidx.compose.runtime.mutableStateOf
|
||||
import androidx.compose.runtime.remember
|
||||
import androidx.compose.ui.platform.LocalContext
|
||||
import dev.patrickgold.florisboard.R
|
||||
import dev.patrickgold.florisboard.lib.compose.FlorisScreen
|
||||
import dev.patrickgold.florisboard.lib.compose.stringRes
|
||||
import dev.patrickgold.jetpref.datastore.ui.Preference
|
||||
import dev.patrickgold.jetpref.datastore.ui.SwitchPreference
|
||||
|
||||
@Composable
|
||||
fun PhysicalKeyboardScreen() = FlorisScreen {
|
||||
title = stringRes(R.string.physical_keyboard__title)
|
||||
|
||||
val context = LocalContext.current
|
||||
val physicalKeyboardAttached by remember {
|
||||
mutableStateOf(context.resources.configuration.keyboard != Configuration.KEYBOARD_NOKEYS)
|
||||
}
|
||||
|
||||
val activityForResult = rememberLauncherForActivityResult(
|
||||
ActivityResultContracts.StartActivityForResult()
|
||||
) { }
|
||||
|
||||
content {
|
||||
if (physicalKeyboardAttached) {
|
||||
Preference(
|
||||
title = stringRes(R.string.physical_keyboard__system_settings__title),
|
||||
summary = stringRes(R.string.physical_keyboard__system_settings__summary),
|
||||
onClick = {
|
||||
activityForResult.launch(Intent(Settings.ACTION_HARD_KEYBOARD_SETTINGS))
|
||||
}
|
||||
)
|
||||
} else {
|
||||
Preference(
|
||||
title = stringRes(R.string.physical_keyboard__system_settings__title),
|
||||
summary = stringRes(R.string.physical_keyboard__system_settings__summary_not_attached),
|
||||
)
|
||||
}
|
||||
SwitchPreference(
|
||||
pref = prefs.physicalKeyboard.showOnScreenKeyboard,
|
||||
title = stringRes(R.string.physical_keyboard__show_on_screen_keyboard__title),
|
||||
summary = stringRes(R.string.physical_keyboard__show_on_screen_keyboard__summary),
|
||||
)
|
||||
}
|
||||
}
|
||||
@@ -18,6 +18,7 @@ package dev.patrickgold.florisboard.app.settings.clipboard
|
||||
|
||||
import androidx.compose.runtime.Composable
|
||||
import dev.patrickgold.florisboard.R
|
||||
import dev.patrickgold.florisboard.ime.clipboard.CLIPBOARD_HISTORY_NUM_GRID_COLUMNS_AUTO
|
||||
import dev.patrickgold.florisboard.lib.compose.FlorisScreen
|
||||
import dev.patrickgold.florisboard.lib.compose.pluralsRes
|
||||
import dev.patrickgold.florisboard.lib.compose.stringRes
|
||||
@@ -75,6 +76,24 @@ fun ClipboardScreen() = FlorisScreen {
|
||||
title = stringRes(R.string.pref__clipboard__enable_clipboard_history__label),
|
||||
summary = stringRes(R.string.pref__clipboard__enable_clipboard_history__summary),
|
||||
)
|
||||
DialogSliderPreference(
|
||||
primaryPref = prefs.clipboard.numHistoryGridColumnsPortrait,
|
||||
secondaryPref = prefs.clipboard.numHistoryGridColumnsLandscape,
|
||||
title = stringRes(R.string.pref__clipboard__num_history_grid_columns__label),
|
||||
primaryLabel = stringRes(R.string.screen_orientation__portrait),
|
||||
secondaryLabel = stringRes(R.string.screen_orientation__landscape),
|
||||
valueLabel = { numGridColumns ->
|
||||
if (numGridColumns == CLIPBOARD_HISTORY_NUM_GRID_COLUMNS_AUTO) {
|
||||
stringRes(R.string.general__auto)
|
||||
} else {
|
||||
numGridColumns.toString()
|
||||
}
|
||||
},
|
||||
min = 0,
|
||||
max = 10,
|
||||
stepIncrement = 1,
|
||||
enabledIf = { prefs.clipboard.historyEnabled isEqualTo true },
|
||||
)
|
||||
SwitchPreference(
|
||||
prefs.clipboard.cleanUpOld,
|
||||
title = stringRes(R.string.pref__clipboard__clean_up_old__label),
|
||||
|
||||
@@ -20,11 +20,8 @@ import androidx.compose.runtime.Composable
|
||||
import androidx.compose.ui.platform.LocalContext
|
||||
import dev.patrickgold.florisboard.R
|
||||
import dev.patrickgold.florisboard.app.enumDisplayEntriesOf
|
||||
import dev.patrickgold.florisboard.ime.input.InputFeedbackActivationMode
|
||||
import dev.patrickgold.florisboard.ime.input.HapticVibrationMode
|
||||
import org.florisboard.lib.android.AndroidVersion
|
||||
import org.florisboard.lib.android.systemVibratorOrNull
|
||||
import org.florisboard.lib.android.vibrate
|
||||
import dev.patrickgold.florisboard.ime.input.InputFeedbackActivationMode
|
||||
import dev.patrickgold.florisboard.lib.compose.FlorisScreen
|
||||
import dev.patrickgold.florisboard.lib.compose.stringRes
|
||||
import dev.patrickgold.jetpref.datastore.ui.DialogSliderPreference
|
||||
@@ -32,6 +29,8 @@ import dev.patrickgold.jetpref.datastore.ui.ExperimentalJetPrefDatastoreUi
|
||||
import dev.patrickgold.jetpref.datastore.ui.ListPreference
|
||||
import dev.patrickgold.jetpref.datastore.ui.PreferenceGroup
|
||||
import dev.patrickgold.jetpref.datastore.ui.SwitchPreference
|
||||
import org.florisboard.lib.android.systemVibratorOrNull
|
||||
import org.florisboard.lib.android.vibrate
|
||||
|
||||
@OptIn(ExperimentalJetPrefDatastoreUi::class)
|
||||
@Composable
|
||||
@@ -138,8 +137,6 @@ fun InputFeedbackScreen() = FlorisScreen {
|
||||
summary = { strength ->
|
||||
if (vibrator == null || !vibrator.hasVibrator()) {
|
||||
stringRes(R.string.pref__input_feedback__haptic_vibration_strength__summary_no_vibrator)
|
||||
} else if (AndroidVersion.ATMOST_API25_N_MR1) {
|
||||
stringRes(R.string.pref__input_feedback__haptic_vibration_strength__summary_unsupported_android_version)
|
||||
} else if (!vibrator.hasAmplitudeControl()) {
|
||||
stringRes(R.string.pref__input_feedback__haptic_vibration_strength__summary_no_amplitude_ctrl)
|
||||
} else {
|
||||
@@ -157,7 +154,7 @@ fun InputFeedbackScreen() = FlorisScreen {
|
||||
prefs.inputFeedback.hapticEnabled isEqualTo true &&
|
||||
prefs.inputFeedback.hapticVibrationMode isEqualTo HapticVibrationMode.USE_VIBRATOR_DIRECTLY &&
|
||||
vibrator != null && vibrator.hasVibrator() &&
|
||||
AndroidVersion.ATLEAST_API26_O && vibrator.hasAmplitudeControl()
|
||||
vibrator.hasAmplitudeControl()
|
||||
},
|
||||
)
|
||||
SwitchPreference(
|
||||
|
||||
@@ -16,6 +16,7 @@
|
||||
|
||||
package dev.patrickgold.florisboard.app.settings.theme
|
||||
|
||||
import android.net.Uri
|
||||
import androidx.compose.animation.AnimatedVisibility
|
||||
import androidx.compose.foundation.background
|
||||
import androidx.compose.foundation.border
|
||||
@@ -41,6 +42,7 @@ import androidx.compose.material.icons.Icons
|
||||
import androidx.compose.material.icons.automirrored.filled.ManageSearch
|
||||
import androidx.compose.material3.AlertDialogDefaults
|
||||
import androidx.compose.material3.ButtonDefaults
|
||||
import androidx.compose.material3.ListItem
|
||||
import androidx.compose.material3.ListItemDefaults
|
||||
import androidx.compose.material3.MaterialTheme
|
||||
import androidx.compose.material3.Text
|
||||
@@ -60,8 +62,10 @@ import androidx.compose.ui.platform.LocalContext
|
||||
import androidx.compose.ui.platform.LocalFocusManager
|
||||
import androidx.compose.ui.platform.LocalLayoutDirection
|
||||
import androidx.compose.ui.text.font.FontFamily
|
||||
import androidx.compose.ui.text.font.FontWeight
|
||||
import androidx.compose.ui.text.input.ImeAction
|
||||
import androidx.compose.ui.text.input.KeyboardType
|
||||
import androidx.compose.ui.text.style.TextOverflow
|
||||
import androidx.compose.ui.unit.Dp
|
||||
import androidx.compose.ui.unit.LayoutDirection
|
||||
import androidx.compose.ui.unit.TextUnit
|
||||
@@ -78,6 +82,7 @@ import dev.patrickgold.florisboard.lib.compose.FlorisChip
|
||||
import dev.patrickgold.florisboard.lib.compose.FlorisIconButton
|
||||
import dev.patrickgold.florisboard.lib.compose.FlorisTextButton
|
||||
import dev.patrickgold.florisboard.lib.compose.Validation
|
||||
import dev.patrickgold.florisboard.lib.compose.florisVerticalScroll
|
||||
import dev.patrickgold.florisboard.lib.compose.stringRes
|
||||
import dev.patrickgold.florisboard.lib.ext.ExtensionValidation
|
||||
import dev.patrickgold.florisboard.lib.rememberValidationResult
|
||||
@@ -126,6 +131,7 @@ import org.florisboard.lib.snygg.value.SnyggUndefinedValue
|
||||
import org.florisboard.lib.snygg.value.SnyggUriValue
|
||||
import org.florisboard.lib.snygg.value.SnyggValue
|
||||
import org.florisboard.lib.snygg.value.SnyggValueEncoder
|
||||
import java.io.File
|
||||
|
||||
internal val SnyggEmptyPropertyInfoForAdding = PropertyInfo(
|
||||
rule = SnyggEmptyRuleForAdding,
|
||||
@@ -622,35 +628,67 @@ private fun PropertyValueEditor(
|
||||
mutableStateOf(value.uri)
|
||||
}
|
||||
Column(modifier) {
|
||||
val workspaceFiles = remember {
|
||||
buildList {
|
||||
addAll(workspace.extDir.subDir(FONTS).listFiles { it.isFile }.orEmpty().asList())
|
||||
addAll(workspace.extDir.subDir(IMAGES).listFiles { it.isFile }.orEmpty().asList())
|
||||
}
|
||||
val fontFiles = remember {
|
||||
workspace.extDir.subDir(FONTS).listFiles { it.isFile }.orEmpty().asList()
|
||||
}
|
||||
val imageFiles = remember {
|
||||
workspace.extDir.subDir(IMAGES).listFiles { it.isFile }.orEmpty().asList()
|
||||
}
|
||||
var showSelectFileDialog by rememberSaveable { mutableStateOf(false) }
|
||||
if (showSelectFileDialog) {
|
||||
@Composable
|
||||
fun ClickableFilesWithHeading(title: String, files: List<File>) {
|
||||
ListItem(
|
||||
headlineContent = {
|
||||
Text(
|
||||
text = title,
|
||||
color = MaterialTheme.colorScheme.secondary,
|
||||
fontWeight = FontWeight.Bold,
|
||||
maxLines = 1,
|
||||
overflow = TextOverflow.Ellipsis,
|
||||
)
|
||||
},
|
||||
colors = ListItemDefaults.colors(
|
||||
containerColor = AlertDialogDefaults.containerColor
|
||||
),
|
||||
)
|
||||
files.forEach { file ->
|
||||
JetPrefListItem(
|
||||
modifier = Modifier.clickable {
|
||||
val relPath = file.path.removePrefix(workspace.extDir.path)
|
||||
inputStr = "flex:" + Uri.encode(relPath, "/")
|
||||
onValueChange(SnyggUriValue(inputStr))
|
||||
showSelectFileDialog = false
|
||||
},
|
||||
text = file.name,
|
||||
colors = ListItemDefaults.colors(
|
||||
containerColor = AlertDialogDefaults.containerColor
|
||||
),
|
||||
)
|
||||
}
|
||||
}
|
||||
JetPrefAlertDialog(
|
||||
title = "Select file",
|
||||
title = stringRes(R.string.settings__theme_editor__file_selector_dialog_title),
|
||||
dismissLabel = stringRes(R.string.action__cancel),
|
||||
onDismiss = {
|
||||
showSelectFileDialog = false
|
||||
},
|
||||
contentPadding = PaddingValues(horizontal = 8.dp),
|
||||
scrollModifier = Modifier.florisVerticalScroll(),
|
||||
) {
|
||||
Column {
|
||||
workspaceFiles.forEach { file ->
|
||||
JetPrefListItem(
|
||||
modifier = Modifier.clickable {
|
||||
val relPath = file.path.removePrefix(workspace.extDir.path)
|
||||
inputStr = "flex:$relPath"
|
||||
onValueChange(SnyggUriValue(inputStr))
|
||||
showSelectFileDialog = false
|
||||
},
|
||||
text = file.name,
|
||||
colors = ListItemDefaults.colors(
|
||||
containerColor = AlertDialogDefaults.containerColor
|
||||
)
|
||||
if (fontFiles.isNotEmpty()) {
|
||||
ClickableFilesWithHeading(stringRes(R.string.ext__editor__files__type_fonts), fontFiles)
|
||||
}
|
||||
if (imageFiles.isNotEmpty()) {
|
||||
ClickableFilesWithHeading(stringRes(R.string.ext__editor__files__type_images), imageFiles)
|
||||
}
|
||||
if (fontFiles.isEmpty() && imageFiles.isEmpty()) {
|
||||
Text(
|
||||
modifier = Modifier.padding(horizontal = 16.dp),
|
||||
text = stringRes(R.string.settings__theme_editor__file_selector_no_files_text,
|
||||
"action_title" to stringRes(R.string.ext__editor__files__title)),
|
||||
style = MaterialTheme.typography.bodySmall,
|
||||
)
|
||||
}
|
||||
}
|
||||
|
||||
@@ -69,6 +69,7 @@ import androidx.compose.ui.text.font.FontStyle
|
||||
import androidx.compose.ui.unit.dp
|
||||
import androidx.compose.ui.unit.sp
|
||||
import dev.patrickgold.florisboard.R
|
||||
import dev.patrickgold.florisboard.app.enumDisplayEntriesOf
|
||||
import dev.patrickgold.florisboard.ime.input.InputKeyEventReceiver
|
||||
import dev.patrickgold.florisboard.ime.input.InputShiftState
|
||||
import dev.patrickgold.florisboard.ime.keyboard.ComputingEvaluator
|
||||
@@ -98,10 +99,12 @@ import org.florisboard.lib.android.showShortToast
|
||||
import org.florisboard.lib.android.stringRes
|
||||
import org.florisboard.lib.kotlin.curlyFormat
|
||||
import org.florisboard.lib.snygg.SnyggAnnotationRule
|
||||
import org.florisboard.lib.snygg.SnyggAttributes
|
||||
import org.florisboard.lib.snygg.SnyggElementRule
|
||||
import org.florisboard.lib.snygg.SnyggRule
|
||||
import org.florisboard.lib.snygg.SnyggSelector
|
||||
import org.florisboard.lib.snygg.ui.NonNullSaver
|
||||
import kotlin.reflect.KClass
|
||||
|
||||
private val TransparentTextSelectionColors = TextSelectionColors(
|
||||
handleColor = Color.Transparent,
|
||||
@@ -240,11 +243,13 @@ internal fun EditRuleDialog(
|
||||
}
|
||||
}
|
||||
DialogProperty(text = stringRes(R.string.settings__theme_editor__rule_selectors)) {
|
||||
Row(modifier = Modifier.florisHorizontalScroll()) {
|
||||
//TODO: LazyRow
|
||||
Row(
|
||||
modifier = Modifier.florisHorizontalScroll(),
|
||||
horizontalArrangement = Arrangement.spacedBy(8.dp),
|
||||
) {
|
||||
// TODO: avoid code duplication
|
||||
FlorisChip(
|
||||
onClick = { updateCurrentRule(SnyggSelector.PRESSED) },
|
||||
modifier = Modifier.padding(end = 4.dp),
|
||||
text = when (level) {
|
||||
SnyggLevel.DEVELOPER -> SnyggSelector.PRESSED.id
|
||||
else -> stringRes(R.string.snygg__rule_selector__pressed)
|
||||
@@ -253,7 +258,6 @@ internal fun EditRuleDialog(
|
||||
)
|
||||
FlorisChip(
|
||||
onClick = { updateCurrentRule(SnyggSelector.FOCUS) },
|
||||
modifier = Modifier.padding( end = 4.dp),
|
||||
text = when (level) {
|
||||
SnyggLevel.DEVELOPER -> SnyggSelector.FOCUS.id
|
||||
else -> stringRes(R.string.snygg__rule_selector__focus)
|
||||
@@ -262,7 +266,6 @@ internal fun EditRuleDialog(
|
||||
)
|
||||
FlorisChip(
|
||||
onClick = { updateCurrentRule(SnyggSelector.HOVER) },
|
||||
modifier = Modifier.padding( end = 4.dp),
|
||||
text = when (level) {
|
||||
SnyggLevel.DEVELOPER -> SnyggSelector.HOVER.id
|
||||
else -> stringRes(R.string.snygg__rule_selector__hover)
|
||||
@@ -312,22 +315,17 @@ internal fun EditRuleDialog(
|
||||
)
|
||||
},
|
||||
) {
|
||||
Text(
|
||||
modifier = Modifier.padding(vertical = 4.dp),
|
||||
text = stringRes(
|
||||
if (codes.isEmpty()) {
|
||||
R.string.settings__theme_editor__no_codes_defined
|
||||
} else {
|
||||
R.string.settings__theme_editor__codes_defined
|
||||
}
|
||||
),
|
||||
fontStyle = FontStyle.Italic,
|
||||
)
|
||||
FlowRow {
|
||||
if (codes.isEmpty()) {
|
||||
Text(
|
||||
text = stringRes(R.string.settings__theme_editor__no_codes_defined),
|
||||
fontStyle = FontStyle.Italic,
|
||||
)
|
||||
}
|
||||
FlowRow(horizontalArrangement = Arrangement.spacedBy(8.dp)) {
|
||||
for (code in codes) {
|
||||
FlorisChip(
|
||||
onClick = { editCodeDialogValue = code },
|
||||
text = code.toString(),
|
||||
text = code,
|
||||
selected = editCodeDialogValue == code,
|
||||
shape = MaterialTheme.shapes.medium,
|
||||
)
|
||||
@@ -335,78 +333,23 @@ internal fun EditRuleDialog(
|
||||
}
|
||||
}
|
||||
|
||||
val shiftStateUnshifted = remember(currentRule) {
|
||||
attributes[FlorisImeUi.Attr.ShiftState]?.contains(InputShiftState.UNSHIFTED.attrName()) == true
|
||||
}
|
||||
val shiftStateShiftedManual = remember(currentRule) {
|
||||
attributes[FlorisImeUi.Attr.ShiftState]?.contains(InputShiftState.SHIFTED_MANUAL.attrName()) == true
|
||||
}
|
||||
val shiftStateShiftedAutomatic = remember(currentRule) {
|
||||
attributes[FlorisImeUi.Attr.ShiftState]?.contains(InputShiftState.SHIFTED_AUTOMATIC.attrName()) == true
|
||||
}
|
||||
val shiftStateCapsLock = remember(currentRule) {
|
||||
attributes[FlorisImeUi.Attr.ShiftState]?.contains(InputShiftState.CAPS_LOCK.attrName()) == true
|
||||
}
|
||||
DialogProperty(text = stringRes(R.string.settings__theme_editor__rule_shift_states)) {
|
||||
FlowRow(horizontalArrangement = Arrangement.spacedBy(4.dp)) {
|
||||
FlorisChip(
|
||||
onClick = {
|
||||
currentRule = copy(
|
||||
attributes = attributes.toggling(
|
||||
FlorisImeUi.Attr.ShiftState to InputShiftState.UNSHIFTED.attrName()
|
||||
)
|
||||
)
|
||||
},
|
||||
text = when (level) {
|
||||
SnyggLevel.DEVELOPER -> InputShiftState.UNSHIFTED.attrName()
|
||||
else -> stringRes(R.string.enum__input_shift_state__unshifted)
|
||||
},
|
||||
selected = shiftStateUnshifted,
|
||||
)
|
||||
FlorisChip(
|
||||
onClick = {
|
||||
currentRule = copy(
|
||||
attributes = attributes.toggling(
|
||||
FlorisImeUi.Attr.ShiftState to InputShiftState.SHIFTED_MANUAL.attrName()
|
||||
)
|
||||
)
|
||||
},
|
||||
text = when (level) {
|
||||
SnyggLevel.DEVELOPER -> InputShiftState.SHIFTED_MANUAL.attrName()
|
||||
else -> stringRes(R.string.enum__input_shift_state__shifted_manual)
|
||||
},
|
||||
selected = shiftStateShiftedManual,
|
||||
)
|
||||
FlorisChip(
|
||||
onClick = {
|
||||
currentRule = copy(
|
||||
attributes = attributes.toggling(
|
||||
FlorisImeUi.Attr.ShiftState to InputShiftState.SHIFTED_AUTOMATIC.attrName()
|
||||
)
|
||||
)
|
||||
},
|
||||
text = when (level) {
|
||||
SnyggLevel.DEVELOPER -> InputShiftState.SHIFTED_AUTOMATIC.attrName()
|
||||
else -> stringRes(R.string.enum__input_shift_state__shifted_automatic)
|
||||
},
|
||||
selected = shiftStateShiftedAutomatic,
|
||||
)
|
||||
FlorisChip(
|
||||
onClick = {
|
||||
currentRule = copy(
|
||||
attributes = attributes.toggling(
|
||||
FlorisImeUi.Attr.ShiftState to InputShiftState.CAPS_LOCK.attrName()
|
||||
)
|
||||
)
|
||||
},
|
||||
text = when (level) {
|
||||
SnyggLevel.DEVELOPER -> InputShiftState.CAPS_LOCK.attrName()
|
||||
else -> stringRes(R.string.enum__input_shift_state__caps_lock)
|
||||
},
|
||||
selected = shiftStateCapsLock,
|
||||
)
|
||||
}
|
||||
}
|
||||
EnumLikeAttributeBox(
|
||||
text = stringRes(R.string.settings__theme_editor__rule_modes),
|
||||
enumClass = KeyboardMode::class,
|
||||
attribute = FlorisImeUi.Attr.Mode,
|
||||
attributes = attributes,
|
||||
setAttributes = { currentRule = copy(attributes = it) },
|
||||
level = level,
|
||||
)
|
||||
|
||||
EnumLikeAttributeBox(
|
||||
text = stringRes(R.string.settings__theme_editor__rule_shift_states),
|
||||
enumClass = InputShiftState::class,
|
||||
attribute = FlorisImeUi.Attr.ShiftState,
|
||||
attributes = attributes,
|
||||
setAttributes = { currentRule = copy(attributes = it) },
|
||||
level = level,
|
||||
)
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -715,3 +658,79 @@ private fun TextKeyDataPreviewBox(
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@OptIn(ExperimentalLayoutApi::class)
|
||||
@Composable
|
||||
private fun <V : Any> EnumLikeAttributeBox(
|
||||
text: String,
|
||||
enumClass: KClass<V>,
|
||||
attribute: String,
|
||||
attributes: SnyggAttributes,
|
||||
setAttributes: (SnyggAttributes) -> Unit,
|
||||
level: SnyggLevel,
|
||||
) {
|
||||
val allEntries = enumDisplayEntriesOf(enumClass)
|
||||
val (alreadyAddedEntries, notYetAddedEntries) = remember(attributes, attribute) {
|
||||
allEntries.partition { entry ->
|
||||
attributes[attribute]?.contains(entry.key.toString()) == true
|
||||
}
|
||||
}
|
||||
var showAddDialog by remember { mutableStateOf(false) }
|
||||
|
||||
DialogProperty(
|
||||
text = text,
|
||||
trailingIconTitle = {
|
||||
FlorisIconButton(
|
||||
onClick = { showAddDialog = true },
|
||||
modifier = Modifier.offset(x = 12.dp),
|
||||
icon = Icons.Default.Add,
|
||||
)
|
||||
},
|
||||
) {
|
||||
FlowRow(horizontalArrangement = Arrangement.spacedBy(8.dp)) {
|
||||
for (entry in alreadyAddedEntries) {
|
||||
FlorisChip(
|
||||
onClick = {
|
||||
setAttributes(attributes.excluding(attribute to entry.key.toString()))
|
||||
},
|
||||
text = entry.label,
|
||||
)
|
||||
}
|
||||
if (alreadyAddedEntries.isEmpty()) {
|
||||
Text(
|
||||
text = stringRes(R.string.settings__theme_editor__no_codes_defined),
|
||||
fontStyle = FontStyle.Italic,
|
||||
)
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
if (showAddDialog) {
|
||||
JetPrefAlertDialog(
|
||||
title = stringRes(R.string.action__add),
|
||||
dismissLabel = stringRes(R.string.action__cancel),
|
||||
onDismiss = { showAddDialog = false },
|
||||
) {
|
||||
FlowRow(horizontalArrangement = Arrangement.spacedBy(8.dp)) {
|
||||
for (entry in notYetAddedEntries) {
|
||||
FlorisChip(
|
||||
onClick = {
|
||||
setAttributes(attributes.including(attribute to entry.key.toString()))
|
||||
showAddDialog = false
|
||||
},
|
||||
text = when (level) {
|
||||
SnyggLevel.DEVELOPER -> entry.key.toString()
|
||||
else -> entry.label
|
||||
},
|
||||
)
|
||||
}
|
||||
}
|
||||
if (notYetAddedEntries.isEmpty()) {
|
||||
Text(
|
||||
text = stringRes(R.string.settings__theme_editor__no_enum_value_to_add_anymore),
|
||||
fontStyle = FontStyle.Italic,
|
||||
)
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -186,7 +186,7 @@ fun ThemeEditorScreen(
|
||||
}.also { editor.stylesheetEditor = it }
|
||||
}
|
||||
|
||||
val definedVariables = remember(stylesheetEditor.rules) {
|
||||
val definedVariables = remember(stylesheetEditor.rules, workspace.version) {
|
||||
stylesheetEditor.rules.firstNotNullOfOrNull { (rule, propertySet) ->
|
||||
if (rule is SnyggAnnotationRule.Defines && propertySet is SnyggSinglePropertySetEditor) {
|
||||
propertySet.properties
|
||||
@@ -196,7 +196,7 @@ fun ThemeEditorScreen(
|
||||
} ?: emptyMap()
|
||||
}
|
||||
|
||||
val fontNames = remember(stylesheetEditor.rules) {
|
||||
val fontNames = remember(stylesheetEditor.rules, workspace.version) {
|
||||
stylesheetEditor.rules.mapNotNull { (rule, _) ->
|
||||
if (rule is SnyggAnnotationRule.Font) {
|
||||
rule.fontName
|
||||
@@ -311,6 +311,7 @@ fun ThemeEditorScreen(
|
||||
DisposableEffect(workspace.version) {
|
||||
themeManager.previewThemeInfo = ThemeManager.ThemeInfo.DEFAULT.copy(
|
||||
name = extPreviewTheme(System.currentTimeMillis().toString()),
|
||||
config = editor.build(),
|
||||
stylesheet = stylesheetEditor.build(),
|
||||
loadedDir = workspace.extDir,
|
||||
)
|
||||
@@ -730,7 +731,6 @@ private fun SnyggRuleRow(
|
||||
style = MaterialTheme.typography.bodyMedium,
|
||||
color = LocalContentColor.current.copy(alpha = 0.56f),
|
||||
fontFamily = FontFamily.Monospace,
|
||||
maxLines = 1,
|
||||
overflow = TextOverflow.Ellipsis,
|
||||
)
|
||||
}
|
||||
@@ -750,7 +750,7 @@ private fun SnyggRuleRow(
|
||||
text = context.translateElementName(rule, level),
|
||||
style = MaterialTheme.typography.bodyMedium,
|
||||
fontFamily = FontFamily.Monospace,
|
||||
maxLines = 1,
|
||||
maxLines = 2,
|
||||
overflow = TextOverflow.Ellipsis,
|
||||
)
|
||||
Row(modifier = Modifier.fillMaxWidth()) {
|
||||
|
||||
@@ -16,19 +16,18 @@
|
||||
|
||||
package dev.patrickgold.florisboard.app.settings.theme
|
||||
|
||||
import androidx.compose.foundation.layout.padding
|
||||
import androidx.compose.material.icons.Icons
|
||||
import androidx.compose.material.icons.filled.Brightness2
|
||||
import androidx.compose.material.icons.filled.BrightnessAuto
|
||||
import androidx.compose.material.icons.filled.ColorLens
|
||||
import androidx.compose.material.icons.filled.DarkMode
|
||||
import androidx.compose.material.icons.filled.LightMode
|
||||
import androidx.compose.material.icons.filled.WbTwilight
|
||||
import androidx.compose.runtime.Composable
|
||||
import androidx.compose.runtime.getValue
|
||||
import androidx.compose.runtime.livedata.observeAsState
|
||||
import androidx.compose.ui.Modifier
|
||||
import androidx.compose.ui.graphics.Color
|
||||
import androidx.compose.ui.platform.LocalContext
|
||||
import androidx.compose.ui.unit.dp
|
||||
import dev.patrickgold.florisboard.R
|
||||
import dev.patrickgold.florisboard.app.LocalNavController
|
||||
import dev.patrickgold.florisboard.app.Routes
|
||||
@@ -37,7 +36,6 @@ import dev.patrickgold.florisboard.app.ext.AddonManagementReferenceBox
|
||||
import dev.patrickgold.florisboard.app.ext.ExtensionListScreenType
|
||||
import dev.patrickgold.florisboard.ime.theme.ThemeManager
|
||||
import dev.patrickgold.florisboard.ime.theme.ThemeMode
|
||||
import dev.patrickgold.florisboard.lib.compose.FlorisInfoCard
|
||||
import dev.patrickgold.florisboard.lib.compose.FlorisScreen
|
||||
import dev.patrickgold.florisboard.lib.compose.stringRes
|
||||
import dev.patrickgold.florisboard.lib.ext.ExtensionComponentName
|
||||
@@ -45,6 +43,7 @@ import dev.patrickgold.florisboard.themeManager
|
||||
import dev.patrickgold.jetpref.datastore.model.observeAsState
|
||||
import dev.patrickgold.jetpref.datastore.ui.ColorPickerPreference
|
||||
import dev.patrickgold.jetpref.datastore.ui.ListPreference
|
||||
import dev.patrickgold.jetpref.datastore.ui.LocalTimePickerPreference
|
||||
import dev.patrickgold.jetpref.datastore.ui.Preference
|
||||
import dev.patrickgold.jetpref.datastore.ui.isMaterialYou
|
||||
import org.florisboard.lib.color.ColorMappings
|
||||
@@ -66,35 +65,15 @@ fun ThemeScreen() = FlorisScreen {
|
||||
}
|
||||
|
||||
content {
|
||||
val themeMode by prefs.theme.mode.observeAsState()
|
||||
val dayThemeId by prefs.theme.dayThemeId.observeAsState()
|
||||
val nightThemeId by prefs.theme.nightThemeId.observeAsState()
|
||||
|
||||
/*Card(modifier = Modifier.padding(8.dp)) {
|
||||
Column(modifier = Modifier.padding(8.dp)) {
|
||||
Text("If you want to give feedback on the new stylesheet editor and theme engine, please do so in below linked feedback thread:\n")
|
||||
Button(onClick = {
|
||||
context.launchUrl("https://github.com/florisboard/florisboard/discussions/1531")
|
||||
}) {
|
||||
Text("Open Feedback Thread")
|
||||
}
|
||||
}
|
||||
}*/
|
||||
|
||||
ListPreference(
|
||||
prefs.theme.mode,
|
||||
icon = Icons.Default.BrightnessAuto,
|
||||
title = stringRes(R.string.pref__theme__mode__label),
|
||||
entries = enumDisplayEntriesOf(ThemeMode::class),
|
||||
)
|
||||
if (themeMode == ThemeMode.FOLLOW_TIME) {
|
||||
FlorisInfoCard(
|
||||
modifier = Modifier.padding(8.dp),
|
||||
text = """
|
||||
The theme mode "Follow time" is not available in this beta release.
|
||||
""".trimIndent()
|
||||
)
|
||||
}
|
||||
Preference(
|
||||
icon = Icons.Default.LightMode,
|
||||
title = stringRes(R.string.pref__theme__day),
|
||||
@@ -113,6 +92,18 @@ fun ThemeScreen() = FlorisScreen {
|
||||
navController.navigate(Routes.Settings.ThemeManager(ThemeManagerScreenAction.SELECT_NIGHT))
|
||||
},
|
||||
)
|
||||
LocalTimePickerPreference(
|
||||
pref = prefs.theme.sunriseTime,
|
||||
title = stringRes(R.string.pref__theme__sunrise_time__label),
|
||||
icon = Icons.Default.WbTwilight,
|
||||
enabledIf = { prefs.theme.mode isEqualTo ThemeMode.FOLLOW_TIME },
|
||||
)
|
||||
LocalTimePickerPreference(
|
||||
pref = prefs.theme.sunsetTime,
|
||||
title = stringRes(R.string.pref__theme__sunset_time__label),
|
||||
icon = Icons.Default.Brightness2,
|
||||
enabledIf = { prefs.theme.mode isEqualTo ThemeMode.FOLLOW_TIME },
|
||||
)
|
||||
ColorPickerPreference(
|
||||
pref = prefs.theme.accentColor,
|
||||
title = stringRes(R.string.pref__theme__theme_accent_color__label),
|
||||
|
||||
@@ -22,9 +22,9 @@ import android.media.MediaMetadataRetriever
|
||||
import android.media.ThumbnailUtils
|
||||
import android.provider.MediaStore
|
||||
import android.util.Size
|
||||
import androidx.annotation.DrawableRes
|
||||
import androidx.annotation.StringRes
|
||||
import androidx.compose.animation.AnimatedVisibility
|
||||
import androidx.compose.animation.core.animateFloatAsState
|
||||
import androidx.compose.foundation.ExperimentalFoundationApi
|
||||
import androidx.compose.foundation.Image
|
||||
import androidx.compose.foundation.background
|
||||
import androidx.compose.foundation.combinedClickable
|
||||
@@ -41,20 +41,38 @@ import androidx.compose.foundation.layout.padding
|
||||
import androidx.compose.foundation.layout.sizeIn
|
||||
import androidx.compose.foundation.layout.width
|
||||
import androidx.compose.foundation.layout.widthIn
|
||||
import androidx.compose.foundation.lazy.staggeredgrid.LazyStaggeredGridScope
|
||||
import androidx.compose.foundation.lazy.staggeredgrid.LazyVerticalStaggeredGrid
|
||||
import androidx.compose.foundation.lazy.staggeredgrid.StaggeredGridCells
|
||||
import androidx.compose.foundation.lazy.staggeredgrid.StaggeredGridItemSpan
|
||||
import androidx.compose.foundation.lazy.staggeredgrid.items
|
||||
import androidx.compose.foundation.lazy.staggeredgrid.rememberLazyStaggeredGridState
|
||||
import androidx.compose.foundation.shape.CircleShape
|
||||
import androidx.compose.material.icons.Icons
|
||||
import androidx.compose.material.icons.automirrored.filled.ArrowBack
|
||||
import androidx.compose.material.icons.automirrored.outlined.Backspace
|
||||
import androidx.compose.material.icons.filled.ClearAll
|
||||
import androidx.compose.material.icons.filled.Edit
|
||||
import androidx.compose.material.icons.filled.Delete
|
||||
import androidx.compose.material.icons.filled.DeleteSweep
|
||||
import androidx.compose.material.icons.filled.FilterList
|
||||
import androidx.compose.material.icons.filled.FilterListOff
|
||||
import androidx.compose.material.icons.filled.Image
|
||||
import androidx.compose.material.icons.filled.Link
|
||||
import androidx.compose.material.icons.filled.Movie
|
||||
import androidx.compose.material.icons.filled.Phone
|
||||
import androidx.compose.material.icons.filled.TextFields
|
||||
import androidx.compose.material.icons.filled.ToggleOff
|
||||
import androidx.compose.material.icons.filled.ToggleOn
|
||||
import androidx.compose.material.icons.filled.Videocam
|
||||
import androidx.compose.material.icons.outlined.ContentPaste
|
||||
import androidx.compose.material.icons.outlined.Email
|
||||
import androidx.compose.material.icons.outlined.PushPin
|
||||
import androidx.compose.material3.Icon
|
||||
import androidx.compose.material3.ripple
|
||||
import androidx.compose.runtime.Composable
|
||||
import androidx.compose.runtime.LaunchedEffect
|
||||
import androidx.compose.runtime.getValue
|
||||
import androidx.compose.runtime.mutableStateOf
|
||||
import androidx.compose.runtime.mutableStateSetOf
|
||||
import androidx.compose.runtime.remember
|
||||
import androidx.compose.runtime.setValue
|
||||
import androidx.compose.ui.Alignment
|
||||
@@ -62,11 +80,11 @@ import androidx.compose.ui.Modifier
|
||||
import androidx.compose.ui.draw.alpha
|
||||
import androidx.compose.ui.graphics.Color
|
||||
import androidx.compose.ui.graphics.asImageBitmap
|
||||
import androidx.compose.ui.graphics.vector.ImageVector
|
||||
import androidx.compose.ui.input.pointer.pointerInput
|
||||
import androidx.compose.ui.layout.ContentScale
|
||||
import androidx.compose.ui.platform.LocalContext
|
||||
import androidx.compose.ui.platform.LocalDensity
|
||||
import androidx.compose.ui.res.painterResource
|
||||
import androidx.compose.ui.unit.dp
|
||||
import dev.patrickgold.florisboard.R
|
||||
import dev.patrickgold.florisboard.app.florisPreferenceModel
|
||||
@@ -77,32 +95,43 @@ import dev.patrickgold.florisboard.ime.clipboard.provider.ClipboardItem
|
||||
import dev.patrickgold.florisboard.ime.clipboard.provider.ItemType
|
||||
import dev.patrickgold.florisboard.ime.keyboard.FlorisImeSizing
|
||||
import dev.patrickgold.florisboard.ime.media.KeyboardLikeButton
|
||||
import dev.patrickgold.florisboard.ime.smartbar.AnimationDuration
|
||||
import dev.patrickgold.florisboard.ime.smartbar.VerticalEnterTransition
|
||||
import dev.patrickgold.florisboard.ime.smartbar.VerticalExitTransition
|
||||
import dev.patrickgold.florisboard.ime.text.keyboard.TextKeyData
|
||||
import dev.patrickgold.florisboard.ime.theme.FlorisImeUi
|
||||
import dev.patrickgold.florisboard.keyboardManager
|
||||
import dev.patrickgold.florisboard.lib.compose.FlorisStaggeredVerticalGrid
|
||||
import dev.patrickgold.florisboard.lib.compose.LocalLocalizedDateTimeFormatter
|
||||
import dev.patrickgold.florisboard.lib.compose.autoMirrorForRtl
|
||||
import dev.patrickgold.florisboard.lib.compose.florisHorizontalScroll
|
||||
import dev.patrickgold.florisboard.lib.compose.florisVerticalScroll
|
||||
import dev.patrickgold.florisboard.lib.compose.rippleClickable
|
||||
import dev.patrickgold.florisboard.lib.compose.stringRes
|
||||
import dev.patrickgold.florisboard.lib.observeAsNonNullState
|
||||
import dev.patrickgold.florisboard.lib.observeAsTransformingState
|
||||
import dev.patrickgold.florisboard.lib.util.NetworkUtils
|
||||
import dev.patrickgold.jetpref.datastore.model.observeAsState
|
||||
import kotlinx.coroutines.delay
|
||||
import org.florisboard.lib.android.AndroidKeyguardManager
|
||||
import org.florisboard.lib.android.AndroidVersion
|
||||
import org.florisboard.lib.android.showShortToast
|
||||
import org.florisboard.lib.android.systemService
|
||||
import org.florisboard.lib.snygg.SnyggQueryAttributes
|
||||
import org.florisboard.lib.snygg.ui.SnyggBox
|
||||
import org.florisboard.lib.snygg.ui.SnyggButton
|
||||
import org.florisboard.lib.snygg.ui.SnyggChip
|
||||
import org.florisboard.lib.snygg.ui.SnyggColumn
|
||||
import org.florisboard.lib.snygg.ui.SnyggIcon
|
||||
import org.florisboard.lib.snygg.ui.SnyggIconButton
|
||||
import org.florisboard.lib.snygg.ui.SnyggRow
|
||||
import org.florisboard.lib.snygg.ui.SnyggText
|
||||
import java.time.Instant
|
||||
|
||||
private val ItemWidth = 200.dp
|
||||
private val DialogWidth = 240.dp
|
||||
|
||||
const val CLIPBOARD_HISTORY_NUM_GRID_COLUMNS_AUTO: Int = 0
|
||||
|
||||
@Composable
|
||||
fun ClipboardInputLayout(
|
||||
modifier: Modifier = Modifier,
|
||||
@@ -115,13 +144,38 @@ fun ClipboardInputLayout(
|
||||
|
||||
val deviceLocked = androidKeyguardManager.let { it.isDeviceLocked || it.isKeyguardLocked }
|
||||
val historyEnabled by prefs.clipboard.historyEnabled.observeAsState()
|
||||
val history by clipboardManager.history.observeAsNonNullState()
|
||||
val unfilteredHistory by clipboardManager.history.observeAsNonNullState()
|
||||
|
||||
var isFilterRowShown by remember { mutableStateOf(false) }
|
||||
val activeFilterTypes = remember { mutableStateSetOf<ItemType>() }
|
||||
|
||||
val history = remember(unfilteredHistory, activeFilterTypes.toSet()) {
|
||||
if (activeFilterTypes.isEmpty()) {
|
||||
unfilteredHistory
|
||||
} else {
|
||||
unfilteredHistory.all
|
||||
.filter { activeFilterTypes.contains(it.type) }
|
||||
.let { ClipboardManager.ClipboardHistory(it) }
|
||||
}
|
||||
}
|
||||
|
||||
val gridState = rememberLazyStaggeredGridState()
|
||||
var popupItem by remember(history) { mutableStateOf<ClipboardItem?>(null) }
|
||||
var showClearAllHistory by remember { mutableStateOf(false) }
|
||||
|
||||
fun isPopupSurfaceActive() = popupItem != null || showClearAllHistory
|
||||
|
||||
LaunchedEffect(isFilterRowShown) {
|
||||
delay(AnimationDuration.toLong())
|
||||
if (!isFilterRowShown) {
|
||||
activeFilterTypes.clear()
|
||||
}
|
||||
}
|
||||
|
||||
LaunchedEffect(activeFilterTypes.toSet()) {
|
||||
gridState.scrollToItem(0)
|
||||
}
|
||||
|
||||
@Composable
|
||||
fun HeaderRow() {
|
||||
SnyggRow(FlorisImeUi.ClipboardHeader.elementName,
|
||||
@@ -165,22 +219,24 @@ fun ClipboardInputLayout(
|
||||
elementName = FlorisImeUi.ClipboardHeaderButton.elementName,
|
||||
onClick = { showClearAllHistory = true },
|
||||
modifier = sizeModifier.autoMirrorForRtl(),
|
||||
enabled = !deviceLocked && historyEnabled && history.all.isNotEmpty() && !isPopupSurfaceActive(),
|
||||
enabled = !deviceLocked && historyEnabled && unfilteredHistory.all.isNotEmpty() && !isPopupSurfaceActive(),
|
||||
) {
|
||||
SnyggIcon(
|
||||
imageVector = Icons.Default.ClearAll,
|
||||
imageVector = Icons.Default.DeleteSweep,
|
||||
)
|
||||
}
|
||||
SnyggIconButton(
|
||||
elementName = FlorisImeUi.ClipboardHeaderButton.elementName,
|
||||
onClick = {
|
||||
context.showShortToast("TODO: implement inline clip item editing")
|
||||
},
|
||||
onClick = { isFilterRowShown = !isFilterRowShown },
|
||||
modifier = sizeModifier,
|
||||
enabled = !deviceLocked && historyEnabled && !isPopupSurfaceActive(),
|
||||
enabled = !deviceLocked && historyEnabled && unfilteredHistory.all.isNotEmpty() && !isPopupSurfaceActive(),
|
||||
) {
|
||||
SnyggIcon(
|
||||
imageVector = Icons.Default.Edit,
|
||||
imageVector = if (!isFilterRowShown) {
|
||||
Icons.Default.FilterList
|
||||
} else {
|
||||
Icons.Default.FilterListOff
|
||||
},
|
||||
)
|
||||
}
|
||||
KeyboardLikeButton(
|
||||
@@ -194,14 +250,19 @@ fun ClipboardInputLayout(
|
||||
}
|
||||
}
|
||||
|
||||
@OptIn(ExperimentalFoundationApi::class)
|
||||
@Composable
|
||||
fun ClipItemView(
|
||||
elementName: String,
|
||||
item: ClipboardItem,
|
||||
contentScrollInsteadOfClip: Boolean,
|
||||
modifier: Modifier = Modifier,
|
||||
) {
|
||||
SnyggBox(FlorisImeUi.ClipboardItem.elementName,
|
||||
val attributes = remember(item) {
|
||||
mapOf("type" to item.type.toString().lowercase())
|
||||
}
|
||||
SnyggBox(
|
||||
elementName = elementName,
|
||||
attributes = attributes,
|
||||
modifier = modifier.fillMaxWidth(),
|
||||
clickAndSemanticsModifier = Modifier.combinedClickable(
|
||||
interactionSource = remember { MutableInteractionSource() },
|
||||
@@ -284,7 +345,11 @@ fun ClipboardInputLayout(
|
||||
} else {
|
||||
val text = item.stringRepresentation()
|
||||
Column {
|
||||
ClipTextItemDescription(text)
|
||||
ClipTextItemDescription(
|
||||
elementName = FlorisImeUi.ClipboardItemDescription.elementName,
|
||||
attributes = attributes,
|
||||
text = text,
|
||||
)
|
||||
SnyggText(
|
||||
modifier = Modifier
|
||||
.fillMaxWidth()
|
||||
@@ -302,43 +367,121 @@ fun ClipboardInputLayout(
|
||||
modifier = Modifier.fillMaxSize(),
|
||||
) {
|
||||
val historyAlpha by animateFloatAsState(targetValue = if (isPopupSurfaceActive()) 0.12f else 1f)
|
||||
SnyggColumn(
|
||||
modifier = Modifier
|
||||
.fillMaxSize()
|
||||
.alpha(historyAlpha)
|
||||
.florisVerticalScroll(),
|
||||
val staggeredGridCells by prefs.clipboard.numHistoryGridColumns()
|
||||
.observeAsTransformingState { numGridColumns ->
|
||||
if (numGridColumns == CLIPBOARD_HISTORY_NUM_GRID_COLUMNS_AUTO) {
|
||||
StaggeredGridCells.Adaptive(160.dp)
|
||||
} else {
|
||||
StaggeredGridCells.Fixed(numGridColumns)
|
||||
}
|
||||
}
|
||||
|
||||
fun LazyStaggeredGridScope.clipboardItems(
|
||||
items: List<ClipboardItem>,
|
||||
key: String,
|
||||
@StringRes title: Int,
|
||||
) {
|
||||
if (history.pinned.isNotEmpty()) {
|
||||
ClipCategoryTitle(
|
||||
text = stringRes(R.string.clipboard__group_pinned),
|
||||
)
|
||||
FlorisStaggeredVerticalGrid(maxColumnWidth = ItemWidth) {
|
||||
for (item in history.pinned) {
|
||||
ClipItemView(item, contentScrollInsteadOfClip = false)
|
||||
}
|
||||
if (items.isNotEmpty()) {
|
||||
item(key, span = StaggeredGridItemSpan.FullLine) {
|
||||
ClipCategoryTitle(text = stringRes(title))
|
||||
}
|
||||
}
|
||||
if (history.recent.isNotEmpty()) {
|
||||
ClipCategoryTitle(
|
||||
text = stringRes(R.string.clipboard__group_recent),
|
||||
)
|
||||
FlorisStaggeredVerticalGrid(maxColumnWidth = ItemWidth) {
|
||||
for (item in history.recent) {
|
||||
ClipItemView(item, contentScrollInsteadOfClip = false)
|
||||
}
|
||||
}
|
||||
}
|
||||
if (history.other.isNotEmpty()) {
|
||||
ClipCategoryTitle(
|
||||
text = stringRes(R.string.clipboard__group_other),
|
||||
)
|
||||
FlorisStaggeredVerticalGrid(maxColumnWidth = ItemWidth) {
|
||||
for (item in history.other) {
|
||||
ClipItemView(item, contentScrollInsteadOfClip = false)
|
||||
}
|
||||
items(items) { item ->
|
||||
ClipItemView(
|
||||
elementName = FlorisImeUi.ClipboardItem.elementName,
|
||||
item = item,
|
||||
contentScrollInsteadOfClip = false,
|
||||
)
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
Column(
|
||||
modifier = Modifier
|
||||
.matchParentSize()
|
||||
.alpha(historyAlpha),
|
||||
) {
|
||||
AnimatedVisibility(
|
||||
visible = isFilterRowShown,
|
||||
enter = VerticalEnterTransition,
|
||||
exit = VerticalExitTransition,
|
||||
) {
|
||||
SnyggRow(
|
||||
elementName = FlorisImeUi.ClipboardFilterRow.elementName,
|
||||
modifier = Modifier.fillMaxWidth(),
|
||||
clickAndSemanticsModifier = Modifier.florisHorizontalScroll(),
|
||||
) {
|
||||
@Composable
|
||||
fun FilterChip(
|
||||
imageVector: ImageVector,
|
||||
text: String,
|
||||
itemType: ItemType,
|
||||
) {
|
||||
val active = activeFilterTypes.contains(itemType)
|
||||
val attributes = remember(active) {
|
||||
mapOf(
|
||||
"state" to if (active) "active" else "inactive",
|
||||
"type" to itemType.toString().lowercase(),
|
||||
)
|
||||
}
|
||||
SnyggChip(
|
||||
elementName = FlorisImeUi.ClipboardFilterChip.elementName,
|
||||
attributes = attributes,
|
||||
onClick = {
|
||||
if (!activeFilterTypes.add(itemType)) {
|
||||
activeFilterTypes.remove(itemType)
|
||||
}
|
||||
},
|
||||
imageVector = imageVector,
|
||||
text = text,
|
||||
)
|
||||
}
|
||||
|
||||
FilterChip(
|
||||
imageVector = Icons.Default.TextFields,
|
||||
text = "Text",
|
||||
itemType = ItemType.TEXT,
|
||||
)
|
||||
FilterChip(
|
||||
imageVector = Icons.Default.Image,
|
||||
text = "Images",
|
||||
itemType = ItemType.IMAGE,
|
||||
)
|
||||
FilterChip(
|
||||
imageVector = Icons.Default.Movie,
|
||||
text = "Videos",
|
||||
itemType = ItemType.VIDEO,
|
||||
)
|
||||
}
|
||||
}
|
||||
SnyggBox(FlorisImeUi.ClipboardGrid.elementName,
|
||||
modifier = Modifier
|
||||
.fillMaxWidth()
|
||||
.weight(1f),
|
||||
) {
|
||||
LazyVerticalStaggeredGrid(
|
||||
modifier = Modifier.fillMaxSize(),
|
||||
state = gridState,
|
||||
columns = staggeredGridCells,
|
||||
) {
|
||||
clipboardItems(
|
||||
items = history.pinned,
|
||||
key = "pinned-header",
|
||||
title = R.string.clipboard__group_pinned,
|
||||
)
|
||||
clipboardItems(
|
||||
items = history.recent,
|
||||
key = "recent-header",
|
||||
title = R.string.clipboard__group_recent,
|
||||
)
|
||||
clipboardItems(
|
||||
items = history.other,
|
||||
key = "other-header",
|
||||
title = R.string.clipboard__group_other,
|
||||
)
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
if (popupItem != null) {
|
||||
SnyggRow(
|
||||
modifier = Modifier
|
||||
@@ -349,44 +492,57 @@ fun ClipboardInputLayout(
|
||||
verticalAlignment = Alignment.CenterVertically,
|
||||
horizontalArrangement = Arrangement.SpaceAround,
|
||||
) {
|
||||
ClipItemView(
|
||||
modifier = Modifier.widthIn(max = ItemWidth),
|
||||
item = popupItem!!,
|
||||
contentScrollInsteadOfClip = true,
|
||||
)
|
||||
SnyggColumn(FlorisImeUi.ClipboardItemPopup.elementName) {
|
||||
PopupAction(
|
||||
iconId = R.drawable.ic_pin,
|
||||
text = stringRes(if (popupItem!!.isPinned) {
|
||||
R.string.clip__unpin_item
|
||||
} else {
|
||||
R.string.clip__pin_item
|
||||
}),
|
||||
) {
|
||||
if (popupItem!!.isPinned) {
|
||||
clipboardManager.unpinClip(popupItem!!)
|
||||
} else {
|
||||
clipboardManager.pinClip(popupItem!!)
|
||||
SnyggColumn(modifier = Modifier.weight(0.5f)) {
|
||||
ClipItemView(
|
||||
elementName = FlorisImeUi.ClipboardItemPopup.elementName,
|
||||
modifier = Modifier.widthIn(max = ItemWidth),
|
||||
item = popupItem!!,
|
||||
contentScrollInsteadOfClip = true,
|
||||
)
|
||||
SnyggBox(FlorisImeUi.ClipboardItemTimestamp.elementName) {
|
||||
val formatter = LocalLocalizedDateTimeFormatter.current
|
||||
SnyggText(
|
||||
modifier = Modifier.fillMaxWidth(),
|
||||
text = formatter.format(Instant.ofEpochMilli(popupItem!!.creationTimestampMs)),
|
||||
)
|
||||
}
|
||||
}
|
||||
SnyggColumn(modifier = Modifier.weight(0.5f)) {
|
||||
SnyggColumn(FlorisImeUi.ClipboardItemActions.elementName) {
|
||||
PopupAction(
|
||||
icon = Icons.Outlined.PushPin,
|
||||
text = stringRes(if (popupItem!!.isPinned) {
|
||||
R.string.clip__unpin_item
|
||||
} else {
|
||||
R.string.clip__pin_item
|
||||
}),
|
||||
) {
|
||||
if (popupItem!!.isPinned) {
|
||||
clipboardManager.unpinClip(popupItem!!)
|
||||
} else {
|
||||
clipboardManager.pinClip(popupItem!!)
|
||||
}
|
||||
popupItem = null
|
||||
}
|
||||
PopupAction(
|
||||
icon = Icons.Default.Delete,
|
||||
text = stringRes(R.string.clip__delete_item),
|
||||
) {
|
||||
clipboardManager.deleteClip(popupItem!!)
|
||||
popupItem = null
|
||||
}
|
||||
PopupAction(
|
||||
icon = Icons.Outlined.ContentPaste,
|
||||
text = stringRes(R.string.clip__paste_item),
|
||||
) {
|
||||
clipboardManager.pasteItem(popupItem!!)
|
||||
popupItem = null
|
||||
}
|
||||
popupItem = null
|
||||
}
|
||||
PopupAction(
|
||||
iconId = R.drawable.ic_delete,
|
||||
text = stringRes(R.string.clip__delete_item),
|
||||
) {
|
||||
clipboardManager.deleteClip(popupItem!!)
|
||||
popupItem = null
|
||||
}
|
||||
PopupAction(
|
||||
iconId = R.drawable.ic_content_paste,
|
||||
text = stringRes(R.string.clip__paste_item),
|
||||
) {
|
||||
clipboardManager.pasteItem(popupItem!!)
|
||||
popupItem = null
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
if (showClearAllHistory) {
|
||||
SnyggRow(
|
||||
modifier = Modifier
|
||||
@@ -429,6 +585,7 @@ fun ClipboardInputLayout(
|
||||
clipboardManager.clearHistory()
|
||||
context.showShortToast(R.string.clipboard__cleared_history)
|
||||
showClearAllHistory = false
|
||||
isFilterRowShown = false
|
||||
},
|
||||
) {
|
||||
SnyggText(
|
||||
@@ -509,7 +666,7 @@ fun ClipboardInputLayout(
|
||||
HistoryLockedView()
|
||||
} else {
|
||||
if (historyEnabled) {
|
||||
if (history.all.isNotEmpty()) {
|
||||
if (history.all.isNotEmpty() || !activeFilterTypes.isEmpty()) {
|
||||
HistoryMainView()
|
||||
} else {
|
||||
HistoryEmptyView()
|
||||
@@ -534,36 +691,40 @@ private fun ClipCategoryTitle(
|
||||
|
||||
@Composable
|
||||
private fun ClipTextItemDescription(
|
||||
elementName: String,
|
||||
attributes: SnyggQueryAttributes,
|
||||
text: String,
|
||||
modifier: Modifier = Modifier,
|
||||
): Unit = with(LocalDensity.current) {
|
||||
val iconId: Int?
|
||||
val icon: ImageVector?
|
||||
val description: String?
|
||||
when {
|
||||
NetworkUtils.isEmailAddress(text) -> {
|
||||
iconId = R.drawable.ic_email
|
||||
icon = Icons.Outlined.Email
|
||||
description = stringRes(R.string.clipboard__item_description_email)
|
||||
}
|
||||
NetworkUtils.isUrl(text) -> {
|
||||
iconId = R.drawable.ic_link
|
||||
icon = Icons.Default.Link
|
||||
description = stringRes(R.string.clipboard__item_description_url)
|
||||
}
|
||||
NetworkUtils.isPhoneNumber(text) -> {
|
||||
iconId = R.drawable.ic_phone
|
||||
icon = Icons.Default.Phone
|
||||
description = stringRes(R.string.clipboard__item_description_phone)
|
||||
}
|
||||
else -> {
|
||||
iconId = null
|
||||
icon = null
|
||||
description = null
|
||||
}
|
||||
}
|
||||
if (iconId != null && description != null) {
|
||||
if (icon != null && description != null) {
|
||||
SnyggRow(
|
||||
elementName = elementName,
|
||||
attributes = attributes,
|
||||
modifier = modifier,
|
||||
verticalAlignment = Alignment.CenterVertically,
|
||||
) {
|
||||
SnyggIcon(
|
||||
painter = painterResource(id = iconId),
|
||||
imageVector = icon,
|
||||
)
|
||||
SnyggText(
|
||||
modifier = Modifier.weight(1f),
|
||||
@@ -575,19 +736,19 @@ private fun ClipTextItemDescription(
|
||||
|
||||
@Composable
|
||||
private fun PopupAction(
|
||||
@DrawableRes iconId: Int,
|
||||
icon: ImageVector,
|
||||
text: String,
|
||||
modifier: Modifier = Modifier,
|
||||
onClick: () -> Unit,
|
||||
) {
|
||||
SnyggRow(FlorisImeUi.ClipboardItemPopupAction.elementName,
|
||||
SnyggRow(FlorisImeUi.ClipboardItemAction.elementName,
|
||||
modifier = modifier.rippleClickable(onClick = onClick),
|
||||
verticalAlignment = Alignment.CenterVertically,
|
||||
) {
|
||||
SnyggIcon(FlorisImeUi.ClipboardItemPopupActionIcon.elementName,
|
||||
painter = painterResource(iconId),
|
||||
SnyggIcon(FlorisImeUi.ClipboardItemActionIcon.elementName,
|
||||
imageVector = icon,
|
||||
)
|
||||
SnyggText(FlorisImeUi.ClipboardItemPopupActionText.elementName,
|
||||
SnyggText(FlorisImeUi.ClipboardItemActionText.elementName,
|
||||
modifier = Modifier.weight(1f),
|
||||
text = text,
|
||||
)
|
||||
|
||||
@@ -19,8 +19,8 @@ package dev.patrickgold.florisboard.ime.clipboard
|
||||
import android.content.ClipData
|
||||
import android.content.Intent
|
||||
import android.graphics.Bitmap
|
||||
import android.graphics.ImageDecoder
|
||||
import android.net.Uri
|
||||
import android.os.Build
|
||||
import android.os.Bundle
|
||||
import android.provider.MediaStore
|
||||
import androidx.activity.ComponentActivity
|
||||
@@ -53,16 +53,19 @@ import dev.patrickgold.florisboard.lib.compose.ProvideLocalizedResources
|
||||
import dev.patrickgold.florisboard.lib.compose.stringRes
|
||||
import dev.patrickgold.jetpref.datastore.model.observeAsState
|
||||
import org.florisboard.lib.android.AndroidClipboardManager
|
||||
import org.florisboard.lib.android.AndroidVersion
|
||||
import org.florisboard.lib.android.stringRes
|
||||
import org.florisboard.lib.android.systemService
|
||||
import org.florisboard.lib.kotlin.mimeTypeFilterOf
|
||||
|
||||
class FlorisCopyToClipboardActivity : ComponentActivity() {
|
||||
private var error: CopyToClipboardError? = null
|
||||
private var bitmap: Bitmap? = null
|
||||
private val clipboardManager by lazy { systemService(AndroidClipboardManager::class) }
|
||||
private val filter = mimeTypeFilterOf("image/*")
|
||||
|
||||
internal enum class CopyToClipboardError {
|
||||
UNKNOWN_ERROR,
|
||||
ANDROID_VERSION_TO_OLD_ERROR,
|
||||
TYPE_NOT_SUPPORTED_ERROR;
|
||||
|
||||
@Composable
|
||||
@@ -70,88 +73,100 @@ class FlorisCopyToClipboardActivity : ComponentActivity() {
|
||||
val textId = when (this) {
|
||||
UNKNOWN_ERROR -> R.string.send_to_clipboard__unknown_error
|
||||
TYPE_NOT_SUPPORTED_ERROR -> R.string.send_to_clipboard__type_not_supported_error
|
||||
ANDROID_VERSION_TO_OLD_ERROR -> R.string.send_to_clipboard__android_version_to_old_error
|
||||
}
|
||||
return stringRes(id = textId)
|
||||
}
|
||||
}
|
||||
|
||||
override fun onCreate(savedInstanceState: Bundle?) {
|
||||
super.onCreate(savedInstanceState)
|
||||
|
||||
handleIntent(intent)
|
||||
|
||||
setContent {
|
||||
Content()
|
||||
}
|
||||
}
|
||||
|
||||
override fun onPause() {
|
||||
finish()
|
||||
super.onPause()
|
||||
}
|
||||
|
||||
override fun onCreate(savedInstanceState: Bundle?) {
|
||||
super.onCreate(savedInstanceState)
|
||||
val systemClipboardManager = this.systemService(AndroidClipboardManager::class)
|
||||
private fun handleIntent(intent: Intent) {
|
||||
val type = intent.type
|
||||
val action = intent.action
|
||||
|
||||
val prefs by florisPreferenceModel()
|
||||
|
||||
if (Intent.ACTION_SEND != action || type == null) {
|
||||
error = CopyToClipboardError.UNKNOWN_ERROR
|
||||
} else {
|
||||
if (type.startsWith("image/")) {
|
||||
val hasExtraStream = intent.hasExtra(Intent.EXTRA_STREAM)
|
||||
if (!hasExtraStream) {
|
||||
error = CopyToClipboardError.TYPE_NOT_SUPPORTED_ERROR
|
||||
} else {
|
||||
// pasting images via virtual keyboard only available since Android 7.1 (API 25)
|
||||
if (Build.VERSION.SDK_INT < Build.VERSION_CODES.N_MR1) {
|
||||
error = CopyToClipboardError.ANDROID_VERSION_TO_OLD_ERROR
|
||||
} else {
|
||||
val uri: Uri? =
|
||||
if (Build.VERSION.SDK_INT < Build.VERSION_CODES.TIRAMISU) {
|
||||
@Suppress("DEPRECATION")
|
||||
intent.getParcelableExtra(Intent.EXTRA_STREAM)
|
||||
} else {
|
||||
intent.getParcelableExtra(Intent.EXTRA_STREAM, Uri::class.java)
|
||||
}
|
||||
val clip = ClipData.newUri(contentResolver, "image", uri)
|
||||
systemClipboardManager.setPrimaryClip(clip)
|
||||
bitmap = MediaStore.Images.Media.getBitmap(this.contentResolver, uri)
|
||||
}
|
||||
}
|
||||
} else {
|
||||
error = CopyToClipboardError.TYPE_NOT_SUPPORTED_ERROR
|
||||
}
|
||||
return
|
||||
}
|
||||
if (!filter.matches(type) || !intent.hasExtra(Intent.EXTRA_STREAM)) {
|
||||
error = CopyToClipboardError.TYPE_NOT_SUPPORTED_ERROR
|
||||
return
|
||||
}
|
||||
|
||||
setContent {
|
||||
ProvideLocalizedResources(this, forceLayoutDirection = LayoutDirection.Ltr) {
|
||||
val theme by prefs.other.settingsTheme.observeAsState()
|
||||
FlorisAppTheme(theme) {
|
||||
BottomSheet {
|
||||
Row {
|
||||
Text(
|
||||
text = error?.showError()
|
||||
?: bitmap?.let { stringRes(id = R.string.send_to_clipboard__description__copied_image_to_clipboard) }
|
||||
?: stringRes(R.string.send_to_clipboard__unknown_error),
|
||||
textAlign = TextAlign.Center,
|
||||
modifier = Modifier.weight(1f),
|
||||
val uri: Uri? =
|
||||
if (AndroidVersion.ATLEAST_API33_T) {
|
||||
intent.getParcelableExtra(Intent.EXTRA_STREAM, Uri::class.java)
|
||||
} else {
|
||||
@Suppress("DEPRECATION")
|
||||
intent.getParcelableExtra(Intent.EXTRA_STREAM)
|
||||
}
|
||||
|
||||
if (uri == null) {
|
||||
error = CopyToClipboardError.TYPE_NOT_SUPPORTED_ERROR
|
||||
return
|
||||
}
|
||||
bitmap = uriToBitmap(uri)
|
||||
}
|
||||
|
||||
private fun uriToBitmap(uri: Uri): Bitmap {
|
||||
val clip = ClipData.newUri(contentResolver, "image", uri)
|
||||
clipboardManager.setPrimaryClip(clip)
|
||||
return if (AndroidVersion.ATLEAST_API28_P) {
|
||||
val source = ImageDecoder.createSource(contentResolver, uri)
|
||||
ImageDecoder.decodeBitmap(source)
|
||||
} else {
|
||||
@Suppress("DEPRECATION")
|
||||
MediaStore.Images.Media.getBitmap(contentResolver, uri)
|
||||
}
|
||||
}
|
||||
|
||||
@Composable
|
||||
private fun Content() {
|
||||
val prefs by florisPreferenceModel()
|
||||
ProvideLocalizedResources(this, forceLayoutDirection = LayoutDirection.Ltr) {
|
||||
val theme by prefs.other.settingsTheme.observeAsState()
|
||||
FlorisAppTheme(theme) {
|
||||
BottomSheet {
|
||||
Row {
|
||||
Text(
|
||||
text = error?.showError()
|
||||
?: bitmap?.let { stringRes(id = R.string.send_to_clipboard__description__copied_image_to_clipboard) }
|
||||
?: stringRes(R.string.send_to_clipboard__unknown_error),
|
||||
textAlign = TextAlign.Center,
|
||||
modifier = Modifier.weight(1f),
|
||||
)
|
||||
}
|
||||
bitmap?.let {
|
||||
Box(modifier = Modifier.fillMaxWidth(), contentAlignment = Alignment.Center) {
|
||||
Image(
|
||||
modifier = Modifier
|
||||
.padding(start = 64.dp, end = 64.dp, top = 32.dp, bottom = 8.dp),
|
||||
bitmap = bitmap!!.asImageBitmap(),
|
||||
contentDescription = null
|
||||
)
|
||||
}
|
||||
bitmap?.let {
|
||||
Box(modifier = Modifier.fillMaxWidth(), contentAlignment = Alignment.Center) {
|
||||
Image(
|
||||
modifier = Modifier
|
||||
.padding(start = 64.dp, end = 64.dp, top = 32.dp, bottom = 8.dp),
|
||||
bitmap = bitmap!!.asImageBitmap(),
|
||||
contentDescription = null
|
||||
)
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@OptIn(ExperimentalMaterial3Api::class)
|
||||
@Composable
|
||||
internal fun BottomSheet(
|
||||
private fun BottomSheet(
|
||||
content: @Composable ColumnScope.() -> Unit,
|
||||
) {
|
||||
ModalBottomSheet(
|
||||
@@ -165,9 +180,7 @@ class FlorisCopyToClipboardActivity : ComponentActivity() {
|
||||
.align(Alignment.End)
|
||||
.padding(16.dp),
|
||||
onClick = { finish() },
|
||||
colors = ButtonDefaults.textButtonColors(
|
||||
//containerColor = buttonContainer.background.solidColor(context = context),
|
||||
)
|
||||
colors = ButtonDefaults.textButtonColors(),
|
||||
) {
|
||||
Text(text = stringRes(id = R.string.action__ok))
|
||||
}
|
||||
|
||||
@@ -260,7 +260,7 @@ data class ClipboardItem @OptIn(ExperimentalSerializationApi::class) constructor
|
||||
|
||||
fun stringRepresentation(): String {
|
||||
return when {
|
||||
text != null -> text.take(500)
|
||||
text != null -> text
|
||||
uri != null -> "(Image) $uri"
|
||||
else -> "#ERROR"
|
||||
}
|
||||
|
||||
@@ -17,7 +17,6 @@
|
||||
package dev.patrickgold.florisboard.ime.core
|
||||
|
||||
import androidx.compose.foundation.clickable
|
||||
import androidx.compose.foundation.layout.Box
|
||||
import androidx.compose.foundation.layout.fillMaxWidth
|
||||
import androidx.compose.foundation.layout.safeDrawingPadding
|
||||
import androidx.compose.foundation.lazy.LazyColumn
|
||||
@@ -26,8 +25,6 @@ import androidx.compose.foundation.lazy.rememberLazyListState
|
||||
import androidx.compose.material.icons.Icons
|
||||
import androidx.compose.material.icons.filled.RadioButtonChecked
|
||||
import androidx.compose.material.icons.filled.RadioButtonUnchecked
|
||||
import androidx.compose.material3.Icon
|
||||
import androidx.compose.material3.ListItemDefaults
|
||||
import androidx.compose.runtime.Composable
|
||||
import androidx.compose.runtime.collectAsState
|
||||
import androidx.compose.runtime.getValue
|
||||
@@ -38,11 +35,11 @@ import dev.patrickgold.florisboard.R
|
||||
import dev.patrickgold.florisboard.ime.keyboard.KeyboardState
|
||||
import dev.patrickgold.florisboard.ime.theme.FlorisImeUi
|
||||
import dev.patrickgold.florisboard.keyboardManager
|
||||
import dev.patrickgold.florisboard.lib.compose.rippleClickable
|
||||
import dev.patrickgold.florisboard.lib.compose.stringRes
|
||||
import dev.patrickgold.florisboard.subtypeManager
|
||||
import dev.patrickgold.jetpref.material.ui.JetPrefListItem
|
||||
import org.florisboard.lib.snygg.ui.SnyggBox
|
||||
import org.florisboard.lib.snygg.ui.SnyggColumn
|
||||
import org.florisboard.lib.snygg.ui.SnyggListItem
|
||||
import org.florisboard.lib.snygg.ui.SnyggRow
|
||||
import org.florisboard.lib.snygg.ui.SnyggText
|
||||
|
||||
@@ -71,7 +68,7 @@ fun SelectSubtypePanel(modifier: Modifier = Modifier) {
|
||||
)
|
||||
}
|
||||
|
||||
Box {
|
||||
SnyggBox(FlorisImeUi.SubtypePanelList.elementName) {
|
||||
LazyColumn(
|
||||
state = listState,
|
||||
) {
|
||||
@@ -81,22 +78,17 @@ fun SelectSubtypePanel(modifier: Modifier = Modifier) {
|
||||
it.id
|
||||
}
|
||||
) {
|
||||
JetPrefListItem(
|
||||
modifier = Modifier
|
||||
.fillMaxWidth()
|
||||
.rippleClickable {
|
||||
subtypeManager.switchToSubtypeById(it.id)
|
||||
keyboardManager.activeState.isSubtypeSelectionVisible = false
|
||||
},
|
||||
icon = {
|
||||
if (currentlySelected == it.id) {
|
||||
Icon(Icons.Default.RadioButtonChecked, null)
|
||||
} else {
|
||||
Icon(Icons.Default.RadioButtonUnchecked, null)
|
||||
}
|
||||
SnyggListItem(
|
||||
elementName = FlorisImeUi.SubtypePanelListItem.elementName,
|
||||
onClick = {
|
||||
subtypeManager.switchToSubtypeById(it.id)
|
||||
keyboardManager.activeState.isSubtypeSelectionVisible = false
|
||||
},
|
||||
leadingImageVector = when {
|
||||
currentlySelected == it.id -> Icons.Default.RadioButtonChecked
|
||||
else -> Icons.Default.RadioButtonUnchecked
|
||||
},
|
||||
text = it.primaryLocale.displayName(),
|
||||
colors = ListItemDefaults.colors(),
|
||||
)
|
||||
}
|
||||
}
|
||||
|
||||
@@ -19,7 +19,6 @@ package dev.patrickgold.florisboard.ime.editor
|
||||
import android.content.ClipDescription
|
||||
import android.content.ContentUris
|
||||
import android.content.Context
|
||||
import android.content.Intent
|
||||
import android.view.KeyEvent
|
||||
import androidx.core.view.inputmethod.InputConnectionCompat
|
||||
import androidx.core.view.inputmethod.InputContentInfoCompat
|
||||
@@ -30,21 +29,20 @@ import dev.patrickgold.florisboard.clipboardManager
|
||||
import dev.patrickgold.florisboard.ime.clipboard.provider.ClipboardFileStorage
|
||||
import dev.patrickgold.florisboard.ime.clipboard.provider.ClipboardItem
|
||||
import dev.patrickgold.florisboard.ime.clipboard.provider.ItemType
|
||||
import dev.patrickgold.florisboard.ime.keyboard.KeyboardMode
|
||||
import dev.patrickgold.florisboard.ime.input.InputShiftState
|
||||
import dev.patrickgold.florisboard.ime.keyboard.IncognitoMode
|
||||
import dev.patrickgold.florisboard.ime.keyboard.KeyboardMode
|
||||
import dev.patrickgold.florisboard.ime.nlp.SuggestionCandidate
|
||||
import dev.patrickgold.florisboard.ime.text.composing.Appender
|
||||
import dev.patrickgold.florisboard.ime.text.composing.Composer
|
||||
import dev.patrickgold.florisboard.ime.text.key.KeyVariation
|
||||
import dev.patrickgold.florisboard.keyboardManager
|
||||
import org.florisboard.lib.android.AndroidVersion
|
||||
import org.florisboard.lib.android.showShortToast
|
||||
import dev.patrickgold.florisboard.lib.ext.ExtensionComponentName
|
||||
import dev.patrickgold.florisboard.nlpManager
|
||||
import dev.patrickgold.florisboard.subtypeManager
|
||||
import kotlinx.coroutines.runBlocking
|
||||
import java.util.concurrent.atomic.AtomicInteger
|
||||
import kotlinx.coroutines.runBlocking
|
||||
import org.florisboard.lib.android.showShortToast
|
||||
|
||||
class EditorInstance(context: Context) : AbstractEditorInstance(context) {
|
||||
companion object {
|
||||
@@ -324,16 +322,7 @@ class EditorInstance(context: Context) : AbstractEditorInstance(context) {
|
||||
)
|
||||
val ic = currentInputConnection() ?: return false
|
||||
ic.finishComposingText()
|
||||
var flags = 0
|
||||
if (AndroidVersion.ATLEAST_API25_N_MR1) {
|
||||
flags = flags or InputConnectionCompat.INPUT_CONTENT_GRANT_READ_URI_PERMISSION
|
||||
} else {
|
||||
appContext.grantUriPermission(
|
||||
activeInfo.packageName,
|
||||
item.uri,
|
||||
Intent.FLAG_GRANT_READ_URI_PERMISSION,
|
||||
)
|
||||
}
|
||||
val flags = InputConnectionCompat.INPUT_CONTENT_GRANT_READ_URI_PERMISSION
|
||||
InputConnectionCompat.commitContent(ic, activeInfo.base, inputContentInfo, flags, null)
|
||||
}
|
||||
}
|
||||
|
||||
@@ -43,7 +43,7 @@ enum class InputShiftState(val value: Int) {
|
||||
fun fromInt(int: Int) = entries.firstOrNull { it.value == int } ?: UNSHIFTED
|
||||
}
|
||||
|
||||
fun attrName() = name.lowercase()
|
||||
override fun toString() = name.lowercase()
|
||||
|
||||
fun toInt() = value
|
||||
}
|
||||
|
||||
@@ -63,6 +63,7 @@ import dev.patrickgold.florisboard.lib.uppercase
|
||||
import dev.patrickgold.florisboard.lib.util.InputMethodUtils
|
||||
import dev.patrickgold.florisboard.nlpManager
|
||||
import dev.patrickgold.florisboard.subtypeManager
|
||||
import java.lang.ref.WeakReference
|
||||
import kotlinx.coroutines.CoroutineScope
|
||||
import kotlinx.coroutines.Dispatchers
|
||||
import kotlinx.coroutines.SupervisorJob
|
||||
@@ -77,7 +78,7 @@ import org.florisboard.lib.android.showShortToast
|
||||
import org.florisboard.lib.android.systemService
|
||||
import org.florisboard.lib.kotlin.collectIn
|
||||
import org.florisboard.lib.kotlin.collectLatestIn
|
||||
import java.lang.ref.WeakReference
|
||||
import java.util.concurrent.atomic.AtomicInteger
|
||||
|
||||
private val DoubleSpacePeriodMatcher = """([^.!?‽\s]\s)""".toRegex()
|
||||
|
||||
@@ -100,7 +101,7 @@ class KeyboardManager(context: Context) : InputKeyEventReceiver {
|
||||
private var lastToastReference = WeakReference<Toast>(null)
|
||||
|
||||
private val activeEvaluatorGuard = Mutex(locked = false)
|
||||
private var activeEvaluatorVersion: Int = 1
|
||||
private var activeEvaluatorVersion = AtomicInteger(0)
|
||||
private val _activeEvaluator = MutableStateFlow<ComputingEvaluator>(DefaultComputingEvaluator)
|
||||
val activeEvaluator get() = _activeEvaluator.asStateFlow()
|
||||
private val _activeSmartbarEvaluator = MutableStateFlow<ComputingEvaluator>(DefaultComputingEvaluator)
|
||||
@@ -191,7 +192,7 @@ class KeyboardManager(context: Context) : InputKeyEventReceiver {
|
||||
).await()
|
||||
}
|
||||
val computingEvaluator = ComputingEvaluatorImpl(
|
||||
version = activeEvaluatorVersion++,
|
||||
version = activeEvaluatorVersion.getAndAdd(1),
|
||||
keyboard = computedKeyboard,
|
||||
editorInfo = editorInfo,
|
||||
state = state,
|
||||
@@ -973,6 +974,9 @@ class KeyboardManager(context: Context) : InputKeyEventReceiver {
|
||||
IncognitoMode.FORCE_OFF, IncognitoMode.FORCE_ON -> false
|
||||
IncognitoMode.DYNAMIC_ON_OFF -> !editorInfo.imeOptions.flagNoPersonalizedLearning
|
||||
}
|
||||
KeyCode.LANGUAGE_SWITCH -> {
|
||||
subtypeManager.subtypes.size > 1
|
||||
}
|
||||
else -> true
|
||||
}
|
||||
}
|
||||
@@ -1020,7 +1024,7 @@ class KeyboardManager(context: Context) : InputKeyEventReceiver {
|
||||
|
||||
fun asSmartbarQuickActionsEvaluator(): ComputingEvaluatorImpl {
|
||||
return ComputingEvaluatorImpl(
|
||||
version = activeEvaluatorVersion,
|
||||
version = version,
|
||||
keyboard = SmartbarQuickActionsKeyboard,
|
||||
editorInfo = editorInfo,
|
||||
state = state,
|
||||
|
||||
@@ -19,6 +19,7 @@ package dev.patrickgold.florisboard.ime.keyboard
|
||||
enum class KeyboardMode(val value: Int) {
|
||||
UNSPECIFIED(-1),
|
||||
CHARACTERS(0),
|
||||
@Deprecated(message = "TODO: remove")
|
||||
EDITING(1),
|
||||
SYMBOLS(2),
|
||||
SYMBOLS2(3),
|
||||
@@ -26,7 +27,9 @@ enum class KeyboardMode(val value: Int) {
|
||||
NUMERIC_ADVANCED(5),
|
||||
PHONE(6),
|
||||
PHONE2(7),
|
||||
@Deprecated(message = "TODO: remove")
|
||||
SMARTBAR_CLIPBOARD_CURSOR_ROW(8),
|
||||
@Deprecated(message = "TODO: remove")
|
||||
SMARTBAR_NUMBER_ROW(9),
|
||||
SMARTBAR_QUICK_ACTIONS(10);
|
||||
|
||||
@@ -34,7 +37,7 @@ enum class KeyboardMode(val value: Int) {
|
||||
fun fromInt(int: Int) = entries.firstOrNull { it.value == int } ?: CHARACTERS
|
||||
}
|
||||
|
||||
fun attrName() = name.lowercase()
|
||||
override fun toString() = name.lowercase()
|
||||
|
||||
fun toInt() = value
|
||||
}
|
||||
|
||||
@@ -17,7 +17,6 @@
|
||||
package dev.patrickgold.florisboard.ime.popup
|
||||
|
||||
import androidx.compose.foundation.layout.Arrangement
|
||||
import androidx.compose.foundation.layout.Row
|
||||
import androidx.compose.foundation.layout.fillMaxWidth
|
||||
import androidx.compose.foundation.layout.height
|
||||
import androidx.compose.foundation.layout.requiredHeight
|
||||
@@ -31,6 +30,7 @@ import androidx.compose.ui.platform.LocalDensity
|
||||
import androidx.compose.ui.unit.Dp
|
||||
import dev.patrickgold.florisboard.ime.keyboard.Key
|
||||
import dev.patrickgold.florisboard.ime.theme.FlorisImeUi
|
||||
import org.florisboard.lib.snygg.SnyggQueryAttributes
|
||||
import org.florisboard.lib.snygg.SnyggSelector
|
||||
import org.florisboard.lib.snygg.ui.SnyggBox
|
||||
import org.florisboard.lib.snygg.ui.SnyggColumn
|
||||
@@ -41,11 +41,13 @@ import org.florisboard.lib.snygg.ui.SnyggText
|
||||
@Composable
|
||||
fun PopupBaseBox(
|
||||
modifier: Modifier = Modifier,
|
||||
attributes: SnyggQueryAttributes,
|
||||
key: Key,
|
||||
shouldIndicateExtendedPopups: Boolean,
|
||||
): Unit = with(LocalDensity.current) {
|
||||
SnyggBox(
|
||||
elementName = FlorisImeUi.KeyPopupBox.elementName,
|
||||
attributes = attributes,
|
||||
modifier = modifier,
|
||||
) {
|
||||
key.label?.let { label ->
|
||||
@@ -64,6 +66,7 @@ fun PopupBaseBox(
|
||||
if (shouldIndicateExtendedPopups) {
|
||||
SnyggIcon(
|
||||
elementName = FlorisImeUi.KeyPopupExtendedIndicator.elementName,
|
||||
attributes = attributes,
|
||||
modifier = Modifier.align(Alignment.CenterEnd),
|
||||
imageVector = Icons.Default.MoreHoriz,
|
||||
)
|
||||
@@ -74,13 +77,14 @@ fun PopupBaseBox(
|
||||
@Composable
|
||||
fun PopupExtBox(
|
||||
modifier: Modifier = Modifier,
|
||||
attributes: SnyggQueryAttributes,
|
||||
elements: List<List<PopupUiController.Element>>,
|
||||
elemArrangement: Arrangement.Horizontal,
|
||||
elemWidth: Dp,
|
||||
elemHeight: Dp,
|
||||
activeElementIndex: Int,
|
||||
): Unit = with(LocalDensity.current) {
|
||||
SnyggColumn(FlorisImeUi.KeyPopupBox.elementName, modifier = modifier) {
|
||||
SnyggColumn(FlorisImeUi.KeyPopupBox.elementName, attributes, modifier = modifier) {
|
||||
for (row in elements.asReversed()) {
|
||||
SnyggRow(
|
||||
modifier = Modifier
|
||||
@@ -96,6 +100,7 @@ fun PopupExtBox(
|
||||
}
|
||||
SnyggBox(
|
||||
elementName = FlorisImeUi.KeyPopupElement.elementName,
|
||||
attributes = attributes,
|
||||
selector = selector,
|
||||
modifier = Modifier.size(elemWidth, elemHeight),
|
||||
) {
|
||||
|
||||
@@ -42,6 +42,7 @@ import dev.patrickgold.florisboard.ime.text.key.KeyCode
|
||||
import dev.patrickgold.florisboard.ime.text.key.KeyHintConfiguration
|
||||
import dev.patrickgold.florisboard.ime.text.keyboard.TextKey
|
||||
import dev.patrickgold.florisboard.ime.text.keyboard.TextKeyData
|
||||
import dev.patrickgold.florisboard.ime.theme.FlorisImeUi
|
||||
import dev.patrickgold.florisboard.lib.FlorisRect
|
||||
import dev.patrickgold.florisboard.lib.toIntOffset
|
||||
|
||||
@@ -81,7 +82,6 @@ class PopupUiController(
|
||||
|
||||
private var activeElementIndex by mutableIntStateOf(-1)
|
||||
var evaluator: ComputingEvaluator = DefaultComputingEvaluator
|
||||
var fontSizeMultiplier: Float = 1.0f
|
||||
var keyHintConfiguration: KeyHintConfiguration = KeyHintConfiguration.HINTS_DISABLED
|
||||
|
||||
/** Is true if the preview popup is visible to the user, else false */
|
||||
@@ -448,11 +448,16 @@ class PopupUiController(
|
||||
|
||||
@Composable
|
||||
fun RenderPopups(): Unit = with(LocalDensity.current) {
|
||||
val attributes = mapOf(
|
||||
FlorisImeUi.Attr.Mode to evaluator.keyboard.mode.toString(),
|
||||
FlorisImeUi.Attr.ShiftState to evaluator.state.inputShiftState.toString(),
|
||||
)
|
||||
baseRenderInfo?.let { renderInfo ->
|
||||
PopupBaseBox(
|
||||
modifier = Modifier
|
||||
.requiredSize(renderInfo.bounds.size.toDpSize())
|
||||
.absoluteOffset { renderInfo.bounds.topLeft.toIntOffset() },
|
||||
attributes = attributes,
|
||||
key = renderInfo.key,
|
||||
shouldIndicateExtendedPopups = renderInfo.shouldIndicateExtendedPopups && extRenderInfo == null,
|
||||
)
|
||||
@@ -465,6 +470,7 @@ class PopupUiController(
|
||||
modifier = Modifier
|
||||
.requiredSize(renderInfo.bounds.size.toDpSize())
|
||||
.absoluteOffset { renderInfo.bounds.topLeft.toIntOffset() },
|
||||
attributes = attributes,
|
||||
elements = renderInfo.elements,
|
||||
elemArrangement = if (renderInfo.anchorLeft) {
|
||||
Arrangement.Start
|
||||
|
||||
@@ -51,6 +51,7 @@ import dev.patrickgold.florisboard.nlpManager
|
||||
import dev.patrickgold.florisboard.subtypeManager
|
||||
import dev.patrickgold.jetpref.datastore.model.observeAsState
|
||||
import org.florisboard.lib.snygg.SnyggSelector
|
||||
import org.florisboard.lib.snygg.ui.SnyggBox
|
||||
import org.florisboard.lib.snygg.ui.SnyggColumn
|
||||
import org.florisboard.lib.snygg.ui.SnyggIcon
|
||||
import org.florisboard.lib.snygg.ui.SnyggRow
|
||||
@@ -152,10 +153,13 @@ private fun CandidateItem(
|
||||
} else {
|
||||
FlorisImeUi.SmartbarCandidateWord
|
||||
}.elementName
|
||||
val attributes = mapOf("auto-commit" to if (candidate.isEligibleForAutoCommit) 1 else 0)
|
||||
val selector = if (isPressed) SnyggSelector.PRESSED else SnyggSelector.NONE
|
||||
|
||||
SnyggRow(
|
||||
elementName = elementName,
|
||||
selector = if (isPressed) SnyggSelector.PRESSED else SnyggSelector.NONE,
|
||||
attributes = attributes,
|
||||
selector = selector,
|
||||
modifier = modifier
|
||||
.pointerInput(Unit) {
|
||||
awaitEachGesture {
|
||||
@@ -184,7 +188,13 @@ private fun CandidateItem(
|
||||
verticalAlignment = Alignment.CenterVertically,
|
||||
) {
|
||||
if (candidate.icon != null) {
|
||||
SnyggIcon(imageVector = candidate.icon!!)
|
||||
SnyggBox(
|
||||
elementName = "$elementName-icon",
|
||||
attributes = attributes,
|
||||
selector = selector,
|
||||
) {
|
||||
SnyggIcon(imageVector = candidate.icon!!)
|
||||
}
|
||||
}
|
||||
SnyggColumn(
|
||||
modifier = if (displayMode == CandidatesDisplayMode.CLASSIC) Modifier.weight(1f) else Modifier,
|
||||
@@ -192,14 +202,16 @@ private fun CandidateItem(
|
||||
horizontalAlignment = Alignment.CenterHorizontally,
|
||||
) {
|
||||
SnyggText(
|
||||
elementName = null,
|
||||
attributes = mapOf("auto-commit" to if (candidate.isEligibleForAutoCommit) 1 else 0),
|
||||
elementName = "$elementName-text",
|
||||
attributes = attributes,
|
||||
selector = selector,
|
||||
text = candidate.text.toString(),
|
||||
)
|
||||
if (candidate.secondaryText != null) {
|
||||
SnyggText(
|
||||
elementName = null,
|
||||
attributes = mapOf("auto-commit" to if (candidate.isEligibleForAutoCommit) 1 else 0),
|
||||
elementName = "$elementName-secondary-text",
|
||||
attributes = attributes,
|
||||
selector = selector,
|
||||
text = candidate.secondaryText!!.toString(),
|
||||
)
|
||||
}
|
||||
|
||||
@@ -66,15 +66,17 @@ import dev.patrickgold.florisboard.nlpManager
|
||||
import dev.patrickgold.jetpref.datastore.model.observeAsState
|
||||
import dev.patrickgold.jetpref.datastore.ui.vectorResource
|
||||
import org.florisboard.lib.android.AndroidVersion
|
||||
import org.florisboard.lib.snygg.ui.SnyggBox
|
||||
import org.florisboard.lib.snygg.ui.SnyggColumn
|
||||
import org.florisboard.lib.snygg.ui.SnyggIcon
|
||||
import org.florisboard.lib.snygg.ui.SnyggIconButton
|
||||
import org.florisboard.lib.snygg.ui.SnyggRow
|
||||
import org.florisboard.lib.snygg.ui.rememberSnyggThemeQuery
|
||||
|
||||
private const val AnimationDuration = 200
|
||||
const val AnimationDuration = 200
|
||||
|
||||
private val VerticalEnterTransition = EnterTransition.verticalTween(AnimationDuration)
|
||||
private val VerticalExitTransition = ExitTransition.verticalTween(AnimationDuration)
|
||||
val VerticalEnterTransition = EnterTransition.verticalTween(AnimationDuration)
|
||||
val VerticalExitTransition = ExitTransition.verticalTween(AnimationDuration)
|
||||
|
||||
private val HorizontalEnterTransition = EnterTransition.horizontalTween(AnimationDuration)
|
||||
private val HorizontalExitTransition = ExitTransition.horizontalTween(AnimationDuration)
|
||||
@@ -98,24 +100,25 @@ fun Smartbar() {
|
||||
) {
|
||||
when (extendedActionsPlacement) {
|
||||
ExtendedActionsPlacement.ABOVE_CANDIDATES -> {
|
||||
Column {
|
||||
SnyggColumn(FlorisImeUi.Smartbar.elementName) {
|
||||
SmartbarSecondaryRow()
|
||||
SmartbarMainRow()
|
||||
}
|
||||
}
|
||||
|
||||
ExtendedActionsPlacement.BELOW_CANDIDATES -> {
|
||||
Column {
|
||||
SnyggColumn(FlorisImeUi.Smartbar.elementName) {
|
||||
SmartbarMainRow()
|
||||
SmartbarSecondaryRow()
|
||||
}
|
||||
}
|
||||
|
||||
ExtendedActionsPlacement.OVERLAY_APP_UI -> {
|
||||
Box(
|
||||
SnyggBox(FlorisImeUi.Smartbar.elementName,
|
||||
modifier = Modifier
|
||||
.fillMaxWidth()
|
||||
.height(FlorisImeSizing.smartbarHeight),
|
||||
allowClip = false,
|
||||
) {
|
||||
Box(
|
||||
modifier = Modifier
|
||||
@@ -243,6 +246,7 @@ private fun SmartbarMainRow(modifier: Modifier = Modifier) {
|
||||
}
|
||||
prefs.smartbar.extendedActionsExpanded.set(!extendedActionsExpanded)
|
||||
},
|
||||
modifier = Modifier.sizeIn(maxHeight = FlorisImeSizing.smartbarHeight).aspectRatio(1f)
|
||||
) {
|
||||
val transition = updateTransition(extendedActionsExpanded, label = "smartbarSecondaryRowToggleBtn")
|
||||
val alpha by transition.animateFloat(label = "alpha") { if (it) 1f else 0f }
|
||||
@@ -305,7 +309,6 @@ private fun SmartbarMainRow(modifier: Modifier = Modifier) {
|
||||
}
|
||||
|
||||
SnyggRow(
|
||||
FlorisImeUi.Smartbar.elementName,
|
||||
modifier = modifier
|
||||
.fillMaxWidth()
|
||||
.height(FlorisImeSizing.smartbarHeight),
|
||||
|
||||
@@ -89,6 +89,7 @@ fun QuickAction.computeDisplayName(evaluator: ComputingEvaluator): String {
|
||||
KeyCode.CLIPBOARD_SELECT_ALL -> R.string.quick_action__clipboard_select_all
|
||||
KeyCode.IME_UI_MODE_CLIPBOARD -> R.string.quick_action__ime_ui_mode_clipboard
|
||||
KeyCode.IME_UI_MODE_MEDIA -> R.string.quick_action__ime_ui_mode_media
|
||||
KeyCode.LANGUAGE_SWITCH -> R.string.quick_action__language_switch
|
||||
KeyCode.SETTINGS -> R.string.quick_action__settings
|
||||
KeyCode.UNDO -> R.string.quick_action__undo
|
||||
KeyCode.REDO -> R.string.quick_action__redo
|
||||
@@ -125,6 +126,7 @@ fun QuickAction.computeTooltip(evaluator: ComputingEvaluator): String {
|
||||
KeyCode.CLIPBOARD_SELECT_ALL -> R.string.quick_action__clipboard_select_all__tooltip
|
||||
KeyCode.IME_UI_MODE_CLIPBOARD -> R.string.quick_action__ime_ui_mode_clipboard__tooltip
|
||||
KeyCode.IME_UI_MODE_MEDIA -> R.string.quick_action__ime_ui_mode_media__tooltip
|
||||
KeyCode.LANGUAGE_SWITCH -> R.string.quick_action__language_switch__tooltip
|
||||
KeyCode.SETTINGS -> R.string.quick_action__settings__tooltip
|
||||
KeyCode.UNDO -> R.string.quick_action__undo__tooltip
|
||||
KeyCode.REDO -> R.string.quick_action__redo__tooltip
|
||||
|
||||
@@ -20,7 +20,6 @@ import dev.patrickgold.florisboard.ime.text.keyboard.TextKeyData
|
||||
import dev.patrickgold.florisboard.lib.io.DefaultJsonConfig
|
||||
import dev.patrickgold.jetpref.datastore.model.PreferenceSerializer
|
||||
import kotlinx.serialization.Serializable
|
||||
import kotlinx.serialization.encodeToString
|
||||
import kotlinx.serialization.json.Json
|
||||
import kotlinx.serialization.modules.SerializersModule
|
||||
import kotlinx.serialization.modules.plus
|
||||
@@ -47,10 +46,24 @@ data class QuickActionArrangement(
|
||||
val dynamicActions: List<QuickAction>,
|
||||
val hiddenActions: List<QuickAction>,
|
||||
) {
|
||||
fun contains(action: QuickAction): Boolean {
|
||||
operator fun contains(action: QuickAction): Boolean {
|
||||
return stickyAction == action || dynamicActions.contains(action) || hiddenActions.contains(action)
|
||||
}
|
||||
|
||||
fun distinct(): QuickActionArrangement {
|
||||
val distinctSet = mutableSetOf<QuickAction>()
|
||||
if (stickyAction != null) {
|
||||
distinctSet.add(stickyAction)
|
||||
}
|
||||
val distinctDynamicActions = dynamicActions.filter { distinctSet.add(it) }
|
||||
val distinctHiddenActions = hiddenActions.filter { distinctSet.add(it) }
|
||||
return QuickActionArrangement(
|
||||
stickyAction = stickyAction,
|
||||
dynamicActions = distinctDynamicActions,
|
||||
hiddenActions = distinctHiddenActions,
|
||||
)
|
||||
}
|
||||
|
||||
companion object {
|
||||
val Default = QuickActionArrangement(
|
||||
stickyAction = QuickAction.InsertKey(TextKeyData.VOICE_INPUT),
|
||||
@@ -72,6 +85,7 @@ data class QuickActionArrangement(
|
||||
QuickAction.InsertKey(TextKeyData.CLIPBOARD_CUT),
|
||||
QuickAction.InsertKey(TextKeyData.CLIPBOARD_PASTE),
|
||||
QuickAction.InsertKey(TextKeyData.CLIPBOARD_SELECT_ALL),
|
||||
QuickAction.InsertKey(TextKeyData.LANGUAGE_SWITCH),
|
||||
),
|
||||
hiddenActions = listOf(
|
||||
),
|
||||
|
||||
@@ -24,10 +24,8 @@ import androidx.compose.foundation.indication
|
||||
import androidx.compose.foundation.interaction.MutableInteractionSource
|
||||
import androidx.compose.foundation.interaction.PressInteraction
|
||||
import androidx.compose.foundation.interaction.collectIsPressedAsState
|
||||
import androidx.compose.foundation.layout.Box
|
||||
import androidx.compose.foundation.layout.Column
|
||||
import androidx.compose.foundation.layout.aspectRatio
|
||||
import androidx.compose.foundation.layout.size
|
||||
import androidx.compose.runtime.Composable
|
||||
import androidx.compose.runtime.DisposableEffect
|
||||
import androidx.compose.runtime.getValue
|
||||
@@ -39,7 +37,6 @@ import androidx.compose.ui.platform.LocalContext
|
||||
import dev.patrickgold.compose.tooltip.PlainTooltip
|
||||
import dev.patrickgold.florisboard.FlorisImeService
|
||||
import dev.patrickgold.florisboard.ime.keyboard.ComputingEvaluator
|
||||
import dev.patrickgold.florisboard.ime.keyboard.FlorisImeSizing
|
||||
import dev.patrickgold.florisboard.ime.keyboard.computeImageVector
|
||||
import dev.patrickgold.florisboard.ime.keyboard.computeLabel
|
||||
import dev.patrickgold.florisboard.ime.text.keyboard.TextKeyData
|
||||
@@ -73,6 +70,7 @@ fun QuickActionButton(
|
||||
QuickActionBarType.INTERACTIVE_TILE -> FlorisImeUi.SmartbarActionTile
|
||||
QuickActionBarType.EDITOR_TILE -> FlorisImeUi.SmartbarActionsEditorTile
|
||||
}.elementName
|
||||
val attributes = mapOf(FlorisImeUi.Attr.Code to action.keyData().code)
|
||||
val selector = when {
|
||||
isPressed -> SnyggSelector.PRESSED
|
||||
!isEnabled -> SnyggSelector.DISABLED
|
||||
@@ -92,7 +90,7 @@ fun QuickActionButton(
|
||||
PlainTooltip(action.computeTooltip(evaluator), enabled = type == QuickActionBarType.INTERACTIVE_BUTTON) {
|
||||
SnyggBox(
|
||||
elementName = elementName,
|
||||
attributes = mapOf(FlorisImeUi.Attr.Code to action.keyData().code),
|
||||
attributes = attributes,
|
||||
selector = selector,
|
||||
modifier = modifier,
|
||||
clickAndSemanticsModifier = Modifier
|
||||
@@ -123,33 +121,45 @@ fun QuickActionButton(
|
||||
) {
|
||||
Column(horizontalAlignment = Alignment.CenterHorizontally) {
|
||||
// Render foreground
|
||||
Box(
|
||||
modifier = Modifier.size(FlorisImeSizing.smartbarHeight * 0.5f),
|
||||
contentAlignment = Alignment.Center,
|
||||
) {
|
||||
when (action) {
|
||||
is QuickAction.InsertKey -> {
|
||||
val (imageVector, label) = remember(action, evaluator) {
|
||||
evaluator.computeImageVector(action.data) to evaluator.computeLabel(action.data)
|
||||
}
|
||||
if (imageVector != null) {
|
||||
SnyggIcon(imageVector = imageVector)
|
||||
} else if (label != null) {
|
||||
SnyggText(text = label)
|
||||
}
|
||||
when (action) {
|
||||
is QuickAction.InsertKey -> {
|
||||
val (imageVector, label) = remember(action, evaluator) {
|
||||
evaluator.computeImageVector(action.data) to evaluator.computeLabel(action.data)
|
||||
}
|
||||
|
||||
is QuickAction.InsertText -> {
|
||||
if (imageVector != null) {
|
||||
SnyggBox(
|
||||
elementName = "$elementName-icon",
|
||||
attributes = attributes,
|
||||
selector = selector,
|
||||
) {
|
||||
SnyggIcon(imageVector = imageVector)
|
||||
}
|
||||
} else if (label != null) {
|
||||
SnyggText(
|
||||
text = action.data.firstOrNull().toString().ifBlank { "?" },
|
||||
elementName = "$elementName-text",
|
||||
attributes = attributes,
|
||||
selector = selector,
|
||||
text = label,
|
||||
)
|
||||
}
|
||||
}
|
||||
|
||||
is QuickAction.InsertText -> {
|
||||
SnyggText(
|
||||
elementName = "$elementName-text",
|
||||
attributes = attributes,
|
||||
selector = selector,
|
||||
text = action.data.firstOrNull().toString().ifBlank { "?" },
|
||||
)
|
||||
}
|
||||
}
|
||||
|
||||
// Render additional info if this is a tile
|
||||
if (type != QuickActionBarType.INTERACTIVE_BUTTON) {
|
||||
SnyggText(
|
||||
elementName = "$elementName-text",
|
||||
attributes = attributes,
|
||||
selector = selector,
|
||||
text = action.computeDisplayName(evaluator = evaluator),
|
||||
)
|
||||
}
|
||||
|
||||
@@ -40,8 +40,6 @@ import dev.patrickgold.florisboard.ime.text.keyboard.TextKeyboardLayout
|
||||
import dev.patrickgold.florisboard.ime.theme.FlorisImeUi
|
||||
import dev.patrickgold.florisboard.keyboardManager
|
||||
import dev.patrickgold.jetpref.datastore.model.observeAsState
|
||||
import org.florisboard.lib.snygg.ui.SnyggBox
|
||||
import org.florisboard.lib.snygg.ui.SnyggColumn
|
||||
import org.florisboard.lib.snygg.ui.SnyggIcon
|
||||
|
||||
@Composable
|
||||
|
||||
@@ -44,7 +44,7 @@ import kotlinx.serialization.Transient
|
||||
*/
|
||||
@Serializable
|
||||
@SerialName("text_key")
|
||||
class TextKeyData(
|
||||
data class TextKeyData(
|
||||
override val type: KeyType = KeyType.CHARACTER,
|
||||
override val code: Int = KeyCode.UNSPECIFIED,
|
||||
override val label: String = "",
|
||||
|
||||
@@ -21,19 +21,14 @@ import android.annotation.SuppressLint
|
||||
import android.content.Context
|
||||
import android.view.MotionEvent
|
||||
import android.view.animation.AccelerateInterpolator
|
||||
import androidx.compose.foundation.background
|
||||
import androidx.compose.foundation.border
|
||||
import androidx.compose.foundation.layout.Box
|
||||
import androidx.compose.foundation.layout.BoxWithConstraints
|
||||
import androidx.compose.foundation.layout.absoluteOffset
|
||||
import androidx.compose.foundation.layout.fillMaxSize
|
||||
import androidx.compose.foundation.layout.fillMaxWidth
|
||||
import androidx.compose.foundation.layout.height
|
||||
import androidx.compose.foundation.layout.padding
|
||||
import androidx.compose.foundation.layout.requiredSize
|
||||
import androidx.compose.foundation.layout.wrapContentSize
|
||||
import androidx.compose.material3.Icon
|
||||
import androidx.compose.material3.Text
|
||||
import androidx.compose.runtime.Composable
|
||||
import androidx.compose.runtime.DisposableEffect
|
||||
import androidx.compose.runtime.LaunchedEffect
|
||||
@@ -57,7 +52,6 @@ import androidx.compose.ui.layout.onGloballyPositioned
|
||||
import androidx.compose.ui.platform.LocalConfiguration
|
||||
import androidx.compose.ui.platform.LocalContext
|
||||
import androidx.compose.ui.platform.LocalDensity
|
||||
import androidx.compose.ui.text.style.TextOverflow
|
||||
import androidx.compose.ui.unit.Dp
|
||||
import androidx.compose.ui.unit.dp
|
||||
import androidx.compose.ui.unit.toSize
|
||||
@@ -85,7 +79,6 @@ import dev.patrickgold.florisboard.lib.FlorisRect
|
||||
import dev.patrickgold.florisboard.lib.Pointer
|
||||
import dev.patrickgold.florisboard.lib.PointerMap
|
||||
import dev.patrickgold.florisboard.lib.compose.DisposableLifecycleEffect
|
||||
import dev.patrickgold.florisboard.lib.compose.safeTimes
|
||||
import dev.patrickgold.florisboard.lib.devtools.LogTopic
|
||||
import dev.patrickgold.florisboard.lib.devtools.flogDebug
|
||||
import dev.patrickgold.florisboard.lib.observeAsTransformingState
|
||||
@@ -174,9 +167,9 @@ fun TextKeyboardLayout(
|
||||
MotionEvent.ACTION_MOVE,
|
||||
MotionEvent.ACTION_POINTER_UP,
|
||||
MotionEvent.ACTION_UP,
|
||||
MotionEvent.ACTION_CANCEL
|
||||
-> {
|
||||
val clonedEvent = MotionEvent.obtainNoHistory(event)
|
||||
MotionEvent.ACTION_CANCEL,
|
||||
-> {
|
||||
val clonedEvent = MotionEvent.obtain(event)
|
||||
touchEventChannel
|
||||
.trySend(clonedEvent)
|
||||
.onFailure {
|
||||
@@ -244,7 +237,6 @@ fun TextKeyboardLayout(
|
||||
}
|
||||
}
|
||||
|
||||
val fontSizeMultiplier = prefs.keyboard.fontSizeMultiplier()
|
||||
val popupUiController = rememberPopupUiController(
|
||||
key1 = keyboard,
|
||||
key2 = desiredKey,
|
||||
@@ -291,13 +283,12 @@ fun TextKeyboardLayout(
|
||||
},
|
||||
)
|
||||
popupUiController.evaluator = evaluator
|
||||
popupUiController.fontSizeMultiplier = fontSizeMultiplier
|
||||
popupUiController.keyHintConfiguration = prefs.keyboard.keyHintConfiguration()
|
||||
controller.popupUiController = popupUiController
|
||||
val debugShowTouchBoundaries by prefs.devtools.showKeyTouchBoundaries.observeAsState()
|
||||
for (textKey in keyboard.keys()) {
|
||||
TextKeyButton(
|
||||
textKey, evaluator,
|
||||
textKey, evaluator, desiredKey,
|
||||
debugShowTouchBoundaries,
|
||||
)
|
||||
}
|
||||
@@ -318,20 +309,22 @@ fun TextKeyboardLayout(
|
||||
private fun TextKeyButton(
|
||||
key: TextKey,
|
||||
evaluator: ComputingEvaluator,
|
||||
desiredKey: TextKey,
|
||||
debugShowTouchBoundaries: Boolean,
|
||||
) = with(LocalDensity.current) {
|
||||
evaluator.keyboard.mode
|
||||
val attributes = mapOf(
|
||||
FlorisImeUi.Attr.Code to key.computedData.code,
|
||||
FlorisImeUi.Attr.Mode to evaluator.keyboard.mode.attrName(),
|
||||
FlorisImeUi.Attr.ShiftState to evaluator.state.inputShiftState.attrName(),
|
||||
FlorisImeUi.Attr.Mode to evaluator.keyboard.mode.toString(),
|
||||
FlorisImeUi.Attr.ShiftState to evaluator.state.inputShiftState.toString(),
|
||||
)
|
||||
val selector = when {
|
||||
!key.isEnabled -> SnyggSelector.DISABLED
|
||||
key.isPressed -> SnyggSelector.PRESSED
|
||||
else -> SnyggSelector.NONE
|
||||
}
|
||||
val size = key.visibleBounds.size.toDpSize()
|
||||
val size = remember(key, desiredKey) {
|
||||
key.visibleBounds.size.toDpSize()
|
||||
}
|
||||
SnyggBox(
|
||||
FlorisImeUi.Key.elementName,
|
||||
attributes = attributes,
|
||||
|
||||
@@ -21,15 +21,19 @@ import androidx.compose.material3.MaterialTheme
|
||||
import androidx.compose.runtime.Composable
|
||||
import androidx.compose.runtime.CompositionLocalProvider
|
||||
import androidx.compose.runtime.ReadOnlyComposable
|
||||
import androidx.compose.runtime.collectAsState
|
||||
import androidx.compose.runtime.getValue
|
||||
import androidx.compose.runtime.remember
|
||||
import androidx.compose.runtime.staticCompositionLocalOf
|
||||
import androidx.compose.ui.platform.LocalContext
|
||||
import androidx.compose.ui.text.TextStyle
|
||||
import dev.patrickgold.florisboard.app.florisPreferenceModel
|
||||
import dev.patrickgold.florisboard.keyboardManager
|
||||
import dev.patrickgold.florisboard.lib.observeAsNonNullState
|
||||
import dev.patrickgold.florisboard.themeManager
|
||||
import dev.patrickgold.jetpref.datastore.model.observeAsState
|
||||
import org.florisboard.lib.snygg.SnyggAttributes
|
||||
import org.florisboard.lib.snygg.SnyggQueryAttributes
|
||||
import org.florisboard.lib.snygg.ui.ProvideSnyggTheme
|
||||
import org.florisboard.lib.snygg.ui.rememberSnyggTheme
|
||||
|
||||
@@ -45,6 +49,7 @@ object FlorisImeTheme {
|
||||
@Composable
|
||||
fun FlorisImeTheme(content: @Composable () -> Unit) {
|
||||
val context = LocalContext.current
|
||||
val keyboardManager by context.keyboardManager()
|
||||
val themeManager by context.themeManager()
|
||||
|
||||
val prefs by florisPreferenceModel()
|
||||
@@ -58,6 +63,13 @@ fun FlorisImeTheme(content: @Composable () -> Unit) {
|
||||
FlorisAssetResolver(context, activeThemeInfo)
|
||||
}
|
||||
val snyggTheme = rememberSnyggTheme(activeStyle, assetResolver)
|
||||
val fontSizeMultiplier = prefs.keyboard.fontSizeMultiplier()
|
||||
|
||||
val state by keyboardManager.activeState.collectAsState()
|
||||
val attributes = mapOf(
|
||||
FlorisImeUi.Attr.Mode to state.keyboardMode.toString(),
|
||||
FlorisImeUi.Attr.ShiftState to state.inputShiftState.toString(),
|
||||
)
|
||||
|
||||
MaterialTheme {
|
||||
CompositionLocalProvider(
|
||||
@@ -67,7 +79,9 @@ fun FlorisImeTheme(content: @Composable () -> Unit) {
|
||||
ProvideSnyggTheme(
|
||||
snyggTheme = snyggTheme,
|
||||
dynamicAccentColor = accentColor,
|
||||
fontSizeMultiplier = fontSizeMultiplier,
|
||||
assetResolver = assetResolver,
|
||||
rootAttributes = attributes,
|
||||
content = content,
|
||||
)
|
||||
}
|
||||
|
||||
@@ -34,6 +34,7 @@ val FlorisImeThemeBaseStyle = SnyggStylesheet.v2 {
|
||||
"--secondary" to rgbaColor(245, 124, 0)
|
||||
"--secondary-variant" to rgbaColor(230, 81, 0)
|
||||
"--background" to rgbaColor(33, 33, 33)
|
||||
"--background-variant" to rgbaColor(44, 44, 44)
|
||||
"--surface" to rgbaColor(66, 66, 66)
|
||||
"--surface-variant" to rgbaColor(97, 97, 97)
|
||||
|
||||
@@ -95,7 +96,7 @@ val FlorisImeThemeBaseStyle = SnyggStylesheet.v2 {
|
||||
}
|
||||
FlorisImeUi.Key.elementName(
|
||||
FlorisImeUi.Attr.Code to listOf(KeyCode.SHIFT),
|
||||
FlorisImeUi.Attr.ShiftState to listOf(InputShiftState.CAPS_LOCK.attrName()),
|
||||
FlorisImeUi.Attr.ShiftState to listOf(InputShiftState.CAPS_LOCK.toString()),
|
||||
) {
|
||||
foreground = rgbaColor(255, 152, 0)
|
||||
}
|
||||
@@ -125,54 +126,61 @@ val FlorisImeThemeBaseStyle = SnyggStylesheet.v2 {
|
||||
FlorisImeUi.Smartbar.elementName {
|
||||
fontSize = fontSize(18.sp)
|
||||
}
|
||||
FlorisImeUi.SmartbarSharedActionsRow.elementName {
|
||||
background = rgbaColor(0, 0, 0, 0f)
|
||||
}
|
||||
FlorisImeUi.SmartbarSharedActionsToggle.elementName {
|
||||
background = `var`("--surface")
|
||||
foreground = `var`("--on-surface")
|
||||
margin = padding(6.dp)
|
||||
shape = circleShape()
|
||||
}
|
||||
FlorisImeUi.SmartbarExtendedActionsRow.elementName {
|
||||
background = rgbaColor(0, 0, 0, 0f)
|
||||
shadowElevation = size(2.dp)
|
||||
}
|
||||
FlorisImeUi.SmartbarExtendedActionsToggle.elementName {
|
||||
background = rgbaColor(0, 0, 0, 0f)
|
||||
foreground = rgbaColor(144, 144, 144)
|
||||
margin = padding(6.dp)
|
||||
shape = circleShape()
|
||||
}
|
||||
FlorisImeUi.SmartbarActionKey.elementName {
|
||||
background = rgbaColor(0, 0, 0, 0f)
|
||||
foreground = rgbaColor(220, 220, 220)
|
||||
shape = `var`("--shape")
|
||||
clip = yes()
|
||||
}
|
||||
FlorisImeUi.SmartbarActionKey.elementName(selector = SnyggSelector.DISABLED) {
|
||||
foreground = `var`("--on-background-disabled")
|
||||
}
|
||||
FlorisImeUi.SmartbarActionTile.elementName {
|
||||
background = rgbaColor(0, 0, 0, 0f)
|
||||
foreground = `var`("--on-background")
|
||||
|
||||
FlorisImeUi.SmartbarActionsOverflow.elementName {
|
||||
margin = padding(4.dp)
|
||||
}
|
||||
FlorisImeUi.SmartbarActionsOverflowCustomizeButton.elementName {
|
||||
background = `var`("--primary")
|
||||
foreground = `var`("--on-primary")
|
||||
fontSize = fontSize(14.sp)
|
||||
margin = padding(0.dp, 8.dp, 0.dp, 0.dp)
|
||||
shape = roundedCornerShape(24.dp)
|
||||
}
|
||||
FlorisImeUi.SmartbarActionTile.elementName {
|
||||
background = `var`("--background-variant")
|
||||
foreground = `var`("--on-background")
|
||||
fontSize = fontSize(14.sp)
|
||||
margin = padding(4.dp)
|
||||
padding = padding(4.dp)
|
||||
shape = roundedCornerShape(20)
|
||||
clip = yes()
|
||||
textAlign = textAlign(TextAlign.Center)
|
||||
textMaxLines = textMaxLines(2)
|
||||
textOverflow = textOverflow(TextOverflow.Ellipsis)
|
||||
}
|
||||
FlorisImeUi.SmartbarActionTile.elementName(selector = SnyggSelector.DISABLED) {
|
||||
foreground = `var`("--on-background-disabled")
|
||||
}
|
||||
FlorisImeUi.SmartbarActionsOverflowCustomizeButton.elementName {
|
||||
background = `var`("--primary")
|
||||
foreground = `var`("--on-primary")
|
||||
shape = roundedCornerShape(24.dp)
|
||||
FlorisImeUi.SmartbarActionTileIcon.elementName {
|
||||
fontSize = fontSize(24.sp)
|
||||
margin = padding(0.dp, 0.dp, 0.dp, 8.dp)
|
||||
}
|
||||
|
||||
FlorisImeUi.SmartbarActionsEditor.elementName {
|
||||
background = `var`("--background")
|
||||
foreground = `var`("--on-background")
|
||||
shape = roundedCornerShape(24.dp, 24.dp, 0.dp, 0.dp)
|
||||
clip = yes()
|
||||
}
|
||||
FlorisImeUi.SmartbarActionsEditorHeader.elementName {
|
||||
background = `var`("--surface")
|
||||
@@ -181,6 +189,10 @@ val FlorisImeThemeBaseStyle = SnyggStylesheet.v2 {
|
||||
textMaxLines = textMaxLines(1)
|
||||
textOverflow = textOverflow(TextOverflow.Ellipsis)
|
||||
}
|
||||
FlorisImeUi.SmartbarActionsEditorHeaderButton.elementName {
|
||||
margin = padding(4.dp)
|
||||
shape = circleShape()
|
||||
}
|
||||
FlorisImeUi.SmartbarActionsEditorSubheader.elementName {
|
||||
foreground = `var`("--secondary")
|
||||
fontSize = fontSize(16.sp)
|
||||
@@ -220,6 +232,10 @@ val FlorisImeThemeBaseStyle = SnyggStylesheet.v2 {
|
||||
background = `var`("--surface")
|
||||
foreground = `var`("--on-surface")
|
||||
}
|
||||
FlorisImeUi.SmartbarCandidateWordSecondaryText.elementName {
|
||||
fontSize = fontSize(8.sp)
|
||||
margin = padding(0.dp, 2.dp, 0.dp, 0.dp)
|
||||
}
|
||||
FlorisImeUi.SmartbarCandidateClip.elementName {
|
||||
background = rgbaColor(0, 0, 0, 0f)
|
||||
foreground = rgbaColor(220, 220, 220)
|
||||
@@ -234,6 +250,9 @@ val FlorisImeThemeBaseStyle = SnyggStylesheet.v2 {
|
||||
background = `var`("--surface")
|
||||
foreground = `var`("--on-surface")
|
||||
}
|
||||
FlorisImeUi.SmartbarCandidateClipIcon.elementName {
|
||||
margin = padding(0.dp, 0.dp, 4.dp, 0.dp)
|
||||
}
|
||||
FlorisImeUi.SmartbarCandidateSpacer.elementName {
|
||||
foreground = rgbaColor(255, 255, 255, 0.25f)
|
||||
}
|
||||
@@ -256,22 +275,31 @@ val FlorisImeThemeBaseStyle = SnyggStylesheet.v2 {
|
||||
margin = padding(4.dp)
|
||||
padding = padding(12.dp, 8.dp)
|
||||
shape = `var`("--shape-variant")
|
||||
clip = yes()
|
||||
shadowElevation = size(2.dp)
|
||||
textMaxLines = textMaxLines(10)
|
||||
textOverflow = textOverflow(TextOverflow.Ellipsis)
|
||||
}
|
||||
FlorisImeUi.ClipboardItemPopup.elementName {
|
||||
background = `var`("--surface")
|
||||
foreground = `var`("--on-surface")
|
||||
fontSize = fontSize(14.sp)
|
||||
margin = padding(4.dp)
|
||||
padding = padding(12.dp, 8.dp)
|
||||
shape = `var`("--shape-variant")
|
||||
clip = yes()
|
||||
shadowElevation = size(2.dp)
|
||||
}
|
||||
FlorisImeUi.ClipboardItemPopupAction.elementName {
|
||||
FlorisImeUi.ClipboardItemActions.elementName {
|
||||
background = `var`("--surface")
|
||||
foreground = `var`("--on-surface")
|
||||
margin = padding(4.dp)
|
||||
shape = `var`("--shape-variant")
|
||||
shadowElevation = size(2.dp)
|
||||
}
|
||||
FlorisImeUi.ClipboardItemAction.elementName {
|
||||
fontSize = fontSize(16.sp)
|
||||
padding = padding(12.dp)
|
||||
}
|
||||
FlorisImeUi.ClipboardItemPopupActionText.elementName {
|
||||
FlorisImeUi.ClipboardItemActionText.elementName {
|
||||
margin = padding(8.dp, 0.dp, 0.dp, 0.dp)
|
||||
}
|
||||
FlorisImeUi.ClipboardHistoryDisabledButton.elementName {
|
||||
@@ -295,6 +323,11 @@ val FlorisImeThemeBaseStyle = SnyggStylesheet.v2 {
|
||||
foreground = `var`("--primary")
|
||||
}
|
||||
|
||||
FlorisImeUi.InlineAutofillChip.elementName {
|
||||
background = `var`("--surface")
|
||||
foreground = `var`("--on-surface")
|
||||
}
|
||||
|
||||
FlorisImeUi.IncognitoModeIndicator.elementName {
|
||||
foreground = rgbaColor(255, 255, 255, 0.067f)
|
||||
}
|
||||
@@ -303,4 +336,31 @@ val FlorisImeThemeBaseStyle = SnyggStylesheet.v2 {
|
||||
background = rgbaColor(27, 94, 32)
|
||||
foreground = rgbaColor(238, 238, 238)
|
||||
}
|
||||
|
||||
FlorisImeUi.SubtypePanel.elementName {
|
||||
background = `var`("--background")
|
||||
foreground = `var`("--on-background")
|
||||
shape = roundedCornerShape(24.dp, 24.dp, 0.dp, 0.dp)
|
||||
}
|
||||
FlorisImeUi.SubtypePanelHeader.elementName {
|
||||
background = `var`("--surface")
|
||||
foreground = `var`("--on-surface")
|
||||
fontSize = fontSize(18.sp)
|
||||
padding = padding(12.dp)
|
||||
textAlign = textAlign(TextAlign.Center)
|
||||
textMaxLines = textMaxLines(1)
|
||||
textOverflow = textOverflow(TextOverflow.Ellipsis)
|
||||
}
|
||||
FlorisImeUi.SubtypePanelListItem.elementName {
|
||||
fontSize = fontSize(16.sp)
|
||||
padding = padding(16.dp)
|
||||
}
|
||||
FlorisImeUi.SubtypePanelListItemIconLeading.elementName {
|
||||
fontSize = fontSize(24.sp)
|
||||
padding = padding(0.dp, 0.dp, 16.dp, 0.dp)
|
||||
}
|
||||
FlorisImeUi.SubtypePanelListItemText.elementName {
|
||||
textMaxLines = textMaxLines(1)
|
||||
textOverflow = textOverflow(TextOverflow.Ellipsis)
|
||||
}
|
||||
}
|
||||
|
||||
@@ -69,25 +69,57 @@ enum class FlorisImeUi(val elementName: String, val resId: Int?) {
|
||||
elementName = "clipboard-content",
|
||||
resId = R.string.snygg__rule_element__clipboard_content,
|
||||
),
|
||||
ClipboardFilterRow(
|
||||
elementName = "clipboard-filter-row",
|
||||
resId = R.string.snygg__rule_element__clipboard_filter_row,
|
||||
),
|
||||
ClipboardFilterChip(
|
||||
elementName = "clipboard-filter-chip",
|
||||
resId = R.string.snygg__rule_element__clipboard_filter_chip,
|
||||
),
|
||||
ClipboardFilterChipIcon(
|
||||
elementName = "clipboard-filter-chip-icon",
|
||||
resId = R.string.snygg__rule_element__clipboard_filter_chip_icon,
|
||||
),
|
||||
ClipboardFilterChipText(
|
||||
elementName = "clipboard-filter-chip-text",
|
||||
resId = R.string.snygg__rule_element__clipboard_filter_chip_text,
|
||||
),
|
||||
ClipboardGrid(
|
||||
elementName = "clipboard-grid",
|
||||
resId = R.string.snygg__rule_element__clipboard_grid,
|
||||
),
|
||||
ClipboardItem(
|
||||
elementName = "clipboard-item",
|
||||
resId = R.string.snygg__rule_element__clipboard_item,
|
||||
),
|
||||
ClipboardItemDescription(
|
||||
elementName = "clipboard-item-description",
|
||||
resId = R.string.snygg__rule_element__clipboard_item_description,
|
||||
),
|
||||
ClipboardItemPopup(
|
||||
elementName = "clipboard-item-popup",
|
||||
resId = R.string.snygg__rule_element__clipboard_item_popup,
|
||||
),
|
||||
ClipboardItemPopupAction(
|
||||
elementName = "clipboard-item-popup-action",
|
||||
resId = R.string.snygg__rule_element__clipboard_item_popup_action,
|
||||
ClipboardItemTimestamp(
|
||||
elementName = "clipboard-item-timestamp",
|
||||
resId = R.string.snygg__rule_element__clipboard_item_timestamp,
|
||||
),
|
||||
ClipboardItemPopupActionIcon(
|
||||
elementName = "clipboard-item-popup-action-icon",
|
||||
resId = R.string.snygg__rule_element__clipboard_item_popup_action_icon,
|
||||
ClipboardItemActions(
|
||||
elementName = "clipboard-item-actions",
|
||||
resId = R.string.snygg__rule_element__clipboard_item_actions,
|
||||
),
|
||||
ClipboardItemPopupActionText(
|
||||
elementName = "clipboard-item-popup-action-text",
|
||||
resId = R.string.snygg__rule_element__clipboard_item_popup_action_text,
|
||||
ClipboardItemAction(
|
||||
elementName = "clipboard-item-action",
|
||||
resId = R.string.snygg__rule_element__clipboard_item_action,
|
||||
),
|
||||
ClipboardItemActionIcon(
|
||||
elementName = "clipboard-item-action-icon",
|
||||
resId = R.string.snygg__rule_element__clipboard_item_action_icon,
|
||||
),
|
||||
ClipboardItemActionText(
|
||||
elementName = "clipboard-item-action-text",
|
||||
resId = R.string.snygg__rule_element__clipboard_item_action_text,
|
||||
),
|
||||
ClipboardClearAllDialog(
|
||||
elementName = "clipboard-clear-all-dialog",
|
||||
@@ -226,10 +258,19 @@ enum class FlorisImeUi(val elementName: String, val resId: Int?) {
|
||||
elementName = "smartbar-action-key",
|
||||
resId = R.string.snygg__rule_element__smartbar_action_key,
|
||||
),
|
||||
|
||||
SmartbarActionTile(
|
||||
elementName = "smartbar-action-tile",
|
||||
resId = R.string.snygg__rule_element__smartbar_action_tile,
|
||||
),
|
||||
SmartbarActionTileIcon(
|
||||
elementName = "smartbar-action-tile-icon",
|
||||
resId = R.string.snygg__rule_element__smartbar_action_tile_icon,
|
||||
),
|
||||
SmartbarActionTileText(
|
||||
elementName = "smartbar-action-tile-text",
|
||||
resId = R.string.snygg__rule_element__smartbar_action_tile_text,
|
||||
),
|
||||
SmartbarActionsOverflow(
|
||||
elementName = "smartbar-actions-overflow",
|
||||
resId = R.string.snygg__rule_element__smartbar_actions_overflow,
|
||||
@@ -272,10 +313,26 @@ enum class FlorisImeUi(val elementName: String, val resId: Int?) {
|
||||
elementName = "smartbar-candidate-word",
|
||||
resId = R.string.snygg__rule_element__smartbar_candidate_word,
|
||||
),
|
||||
SmartbarCandidateWordText(
|
||||
elementName = "smartbar-candidate-word-text",
|
||||
resId = R.string.snygg__rule_element__smartbar_candidate_word_text,
|
||||
),
|
||||
SmartbarCandidateWordSecondaryText(
|
||||
elementName = "smartbar-candidate-word-secondary-text",
|
||||
resId = R.string.snygg__rule_element__smartbar_candidate_word_secondary_text,
|
||||
),
|
||||
SmartbarCandidateClip(
|
||||
elementName = "smartbar-candidate-clip",
|
||||
resId = R.string.snygg__rule_element__smartbar_candidate_clip,
|
||||
),
|
||||
SmartbarCandidateClipIcon(
|
||||
elementName = "smartbar-candidate-clip-icon",
|
||||
resId = R.string.snygg__rule_element__smartbar_candidate_clip_icon,
|
||||
),
|
||||
SmartbarCandidateClipText(
|
||||
elementName = "smartbar-candidate-clip-text",
|
||||
resId = R.string.snygg__rule_element__smartbar_candidate_clip_text,
|
||||
),
|
||||
SmartbarCandidateSpacer(
|
||||
elementName = "smartbar-candidate-spacer",
|
||||
resId = R.string.snygg__rule_element__smartbar_candidate_spacer,
|
||||
@@ -288,6 +345,22 @@ enum class FlorisImeUi(val elementName: String, val resId: Int?) {
|
||||
SubtypePanelHeader(
|
||||
elementName = "subtype-panel-header",
|
||||
resId = R.string.snygg__rule_element__subtype_panel_header,
|
||||
),
|
||||
SubtypePanelList(
|
||||
elementName = "subtype-panel-list",
|
||||
resId = R.string.snygg__rule_element__subtype_panel_list,
|
||||
),
|
||||
SubtypePanelListItem(
|
||||
elementName = "subtype-panel-list-item",
|
||||
resId = R.string.snygg__rule_element__subtype_panel_list_item,
|
||||
),
|
||||
SubtypePanelListItemIconLeading(
|
||||
elementName = "subtype-panel-list-item-icon-leading",
|
||||
resId = R.string.snygg__rule_element__subtype_panel_list_item_icon_leading,
|
||||
),
|
||||
SubtypePanelListItemText(
|
||||
elementName = "subtype-panel-list-item-text",
|
||||
resId = R.string.snygg__rule_element__subtype_panel_list_item_text,
|
||||
);
|
||||
|
||||
companion object {
|
||||
|
||||
@@ -50,7 +50,10 @@ import dev.patrickgold.florisboard.lib.devtools.flogInfo
|
||||
import dev.patrickgold.florisboard.lib.ext.ExtensionComponentName
|
||||
import dev.patrickgold.florisboard.lib.ext.ExtensionMeta
|
||||
import dev.patrickgold.florisboard.lib.io.ZipUtils
|
||||
import dev.patrickgold.florisboard.lib.util.TimeUtils.javaLocalTime
|
||||
import dev.patrickgold.florisboard.lib.util.ViewUtils
|
||||
import java.time.LocalTime
|
||||
import java.util.*
|
||||
import kotlinx.coroutines.CoroutineScope
|
||||
import kotlinx.coroutines.Dispatchers
|
||||
import kotlinx.coroutines.SupervisorJob
|
||||
@@ -63,7 +66,6 @@ import org.florisboard.lib.kotlin.io.subDir
|
||||
import org.florisboard.lib.kotlin.io.subFile
|
||||
import org.florisboard.lib.snygg.SnyggStylesheet
|
||||
import org.florisboard.lib.snygg.value.SnyggStaticColorValue
|
||||
import java.util.UUID
|
||||
import kotlin.properties.Delegates
|
||||
|
||||
/**
|
||||
@@ -187,18 +189,14 @@ class ThemeManager(context: Context) {
|
||||
prefs.theme.dayThemeId.get()
|
||||
}
|
||||
ThemeMode.FOLLOW_TIME -> {
|
||||
//if (AndroidVersion.ATLEAST_API26_O) {
|
||||
// val current = LocalTime.now()
|
||||
// val sunrise = prefs.theme.sunriseTime.get()
|
||||
// val sunset = prefs.theme.sunsetTime.get()
|
||||
// if (current in sunrise..sunset) {
|
||||
// prefs.theme.dayThemeId.get()
|
||||
// } else {
|
||||
// prefs.theme.nightThemeId.get()
|
||||
// }
|
||||
//} else {
|
||||
val current = LocalTime.now()
|
||||
val sunrise = prefs.theme.sunriseTime.get().javaLocalTime
|
||||
val sunset = prefs.theme.sunsetTime.get().javaLocalTime
|
||||
if (current in sunrise..sunset) {
|
||||
prefs.theme.dayThemeId.get()
|
||||
} else {
|
||||
prefs.theme.nightThemeId.get()
|
||||
//}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -1,84 +0,0 @@
|
||||
/*
|
||||
* Copyright (C) 2021-2025 The FlorisBoard Contributors
|
||||
*
|
||||
* 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.lib.compose
|
||||
|
||||
import androidx.compose.runtime.Composable
|
||||
import androidx.compose.ui.Modifier
|
||||
import androidx.compose.ui.layout.Layout
|
||||
import androidx.compose.ui.unit.Dp
|
||||
import kotlin.math.ceil
|
||||
|
||||
/**
|
||||
* Original source: https://github.com/android/compose-samples/blob/88e078542a341c3bdd138fc2db2f132703925956/Owl/app/src/main/java/com/example/owl/ui/courses/FeaturedCourses.kt#L178-L219
|
||||
*/
|
||||
@Composable
|
||||
fun FlorisStaggeredVerticalGrid(
|
||||
modifier: Modifier = Modifier,
|
||||
maxColumnWidth: Dp,
|
||||
content: @Composable () -> Unit
|
||||
) {
|
||||
Layout(
|
||||
content = content,
|
||||
modifier = modifier
|
||||
) { measurables, constraints ->
|
||||
check(constraints.hasBoundedWidth) {
|
||||
"Unbounded width not supported"
|
||||
}
|
||||
val columns = ceil(constraints.maxWidth / maxColumnWidth.toPx()).toInt()
|
||||
val columnWidth = constraints.maxWidth / columns
|
||||
val itemConstraints = constraints.copy(maxWidth = columnWidth)
|
||||
val colHeights = IntArray(columns) { 0 } // track each column's height
|
||||
val placeables = measurables.map { measurable ->
|
||||
val column = shortestColumn(colHeights)
|
||||
val placeable = measurable.measure(itemConstraints)
|
||||
colHeights[column] += placeable.height
|
||||
placeable
|
||||
}
|
||||
|
||||
val height = colHeights.maxOrNull()?.coerceIn(constraints.minHeight, constraints.maxHeight)
|
||||
?: constraints.minHeight
|
||||
layout(
|
||||
width = constraints.maxWidth,
|
||||
height = height
|
||||
) {
|
||||
val colY = IntArray(columns) { 0 }
|
||||
placeables.forEach { placeable ->
|
||||
val column = shortestColumn(colY)
|
||||
placeable.place(
|
||||
x = columnWidth * column,
|
||||
y = colY[column]
|
||||
)
|
||||
colY[column] += placeable.height
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Original source: https://github.com/android/compose-samples/blob/88e078542a341c3bdd138fc2db2f132703925956/Owl/app/src/main/java/com/example/owl/ui/courses/FeaturedCourses.kt#L221-L231
|
||||
*/
|
||||
private fun shortestColumn(colHeights: IntArray): Int {
|
||||
var minHeight = Int.MAX_VALUE
|
||||
var column = 0
|
||||
colHeights.forEachIndexed { index, height ->
|
||||
if (height < minHeight) {
|
||||
minHeight = height
|
||||
column = index
|
||||
}
|
||||
}
|
||||
return column
|
||||
}
|
||||
@@ -168,10 +168,11 @@ fun FlorisStepLayout(
|
||||
) {
|
||||
val scope = FlorisStepLayoutScope(this, primaryColor)
|
||||
header(scope)
|
||||
for (step in steps) {
|
||||
for ((index, step) in steps.withIndex()) {
|
||||
key(step.id) {
|
||||
Step(
|
||||
ownStepId = step.id,
|
||||
index = index + 1, // Start numbering with 1
|
||||
stepState = stepState,
|
||||
title = step.title,
|
||||
primaryColor = primaryColor,
|
||||
@@ -188,6 +189,7 @@ fun FlorisStepLayout(
|
||||
@Composable
|
||||
private fun ColumnScope.Step(
|
||||
ownStepId: Int,
|
||||
index: Int,
|
||||
stepState: FlorisStepState,
|
||||
title: String,
|
||||
primaryColor: Color,
|
||||
@@ -207,7 +209,7 @@ private fun ColumnScope.Step(
|
||||
else -> Modifier.alpha(0.38f)
|
||||
},
|
||||
backgroundColor = backgroundColor,
|
||||
step = ownStepId,
|
||||
step = index,
|
||||
title = title,
|
||||
)
|
||||
val animSpec = spring<Float>(stiffness = Spring.StiffnessMedium)
|
||||
|
||||
@@ -22,6 +22,7 @@ import androidx.annotation.PluralsRes
|
||||
import androidx.annotation.StringRes
|
||||
import androidx.compose.runtime.Composable
|
||||
import androidx.compose.runtime.CompositionLocalProvider
|
||||
import androidx.compose.runtime.remember
|
||||
import androidx.compose.runtime.staticCompositionLocalOf
|
||||
import androidx.compose.ui.platform.LocalLayoutDirection
|
||||
import androidx.compose.ui.res.stringResource
|
||||
@@ -29,6 +30,10 @@ import androidx.compose.ui.unit.LayoutDirection
|
||||
import dev.patrickgold.florisboard.R
|
||||
import org.florisboard.lib.kotlin.CurlyArg
|
||||
import org.florisboard.lib.kotlin.curlyFormat
|
||||
import java.time.ZoneId
|
||||
import java.time.format.DateTimeFormatter
|
||||
import java.time.format.FormatStyle
|
||||
import java.util.*
|
||||
|
||||
private val LocalResourcesContext = staticCompositionLocalOf<Context> {
|
||||
error("resources context not initialized!!")
|
||||
@@ -38,6 +43,13 @@ private val LocalAppNameString = staticCompositionLocalOf {
|
||||
"FlorisBoard"
|
||||
}
|
||||
|
||||
internal val LocalLocalizedDateTimeFormatter = staticCompositionLocalOf {
|
||||
DateTimeFormatter
|
||||
.ofLocalizedDateTime(FormatStyle.MEDIUM)
|
||||
.withLocale(Locale.ROOT)
|
||||
.withZone(ZoneId.systemDefault())
|
||||
}
|
||||
|
||||
@Composable
|
||||
fun ProvideLocalizedResources(
|
||||
resourcesContext: Context,
|
||||
@@ -49,8 +61,16 @@ fun ProvideLocalizedResources(
|
||||
View.LAYOUT_DIRECTION_RTL -> LayoutDirection.Rtl
|
||||
else -> error("Given configuration specifies invalid layout direction!")
|
||||
}
|
||||
val localeList = resourcesContext.resources.configuration.locales
|
||||
val dateTimeFormatter = remember(resourcesContext) {
|
||||
DateTimeFormatter
|
||||
.ofLocalizedDateTime(FormatStyle.MEDIUM)
|
||||
.withLocale(if (localeList.isEmpty) Locale.getDefault() else localeList.get(0))
|
||||
.withZone(ZoneId.systemDefault())
|
||||
}
|
||||
CompositionLocalProvider(
|
||||
LocalResourcesContext provides resourcesContext,
|
||||
LocalLocalizedDateTimeFormatter provides dateTimeFormatter,
|
||||
LocalLayoutDirection provides layoutDirection,
|
||||
LocalAppNameString provides stringResource(R.string.floris_app_name),
|
||||
) {
|
||||
|
||||
@@ -35,12 +35,11 @@ import dev.patrickgold.florisboard.R
|
||||
import dev.patrickgold.florisboard.lib.devtools.LogTopic
|
||||
import dev.patrickgold.florisboard.lib.devtools.flogError
|
||||
import dev.patrickgold.florisboard.lib.devtools.flogInfo
|
||||
import org.florisboard.lib.android.AndroidVersion
|
||||
import java.lang.ref.WeakReference
|
||||
import org.florisboard.lib.kotlin.io.FsDir
|
||||
import org.florisboard.lib.kotlin.io.FsFile
|
||||
import org.florisboard.lib.kotlin.io.subDir
|
||||
import org.florisboard.lib.kotlin.io.subFile
|
||||
import java.lang.ref.WeakReference
|
||||
import kotlin.system.exitProcess
|
||||
|
||||
/**
|
||||
@@ -113,7 +112,7 @@ abstract class CrashUtility private constructor() {
|
||||
application.registerActivityLifecycleCallbacks(object : ActivityLifecycleCallbacks {
|
||||
override fun onActivityCreated(
|
||||
activity: Activity,
|
||||
savedInstanceState: Bundle?
|
||||
savedInstanceState: Bundle?,
|
||||
) {
|
||||
if (activity !is CrashDialogActivity) {
|
||||
lastActivityCreated = WeakReference(activity)
|
||||
@@ -125,28 +124,26 @@ abstract class CrashUtility private constructor() {
|
||||
override fun onActivityStopped(activity: Activity) {}
|
||||
override fun onActivitySaveInstanceState(
|
||||
activity: Activity,
|
||||
outState: Bundle
|
||||
outState: Bundle,
|
||||
) {}
|
||||
override fun onActivityDestroyed(activity: Activity) {}
|
||||
})
|
||||
if (AndroidVersion.ATLEAST_API26_O) {
|
||||
try {
|
||||
val notificationManager = context.getSystemService(Context.NOTIFICATION_SERVICE)
|
||||
if (notificationManager != null && notificationManager is NotificationManager) {
|
||||
val notificationChannel = NotificationChannel(
|
||||
NOTIFICATION_CHANNEL_ID,
|
||||
context.resources.getString(R.string.crash_notification_channel__title),
|
||||
NotificationManager.IMPORTANCE_HIGH
|
||||
)
|
||||
notificationManager.createNotificationChannel(notificationChannel)
|
||||
}
|
||||
flogInfo(LogTopic.CRASH_UTILITY) {
|
||||
"Successfully created crash handler notification channel!"
|
||||
}
|
||||
} catch (e: Exception) {
|
||||
flogError(LogTopic.CRASH_UTILITY) {
|
||||
"Failed to create crash handler notification channel due to an unspecified error:\n$e"
|
||||
}
|
||||
try {
|
||||
val notificationManager = context.getSystemService(Context.NOTIFICATION_SERVICE)
|
||||
if (notificationManager != null && notificationManager is NotificationManager) {
|
||||
val notificationChannel = NotificationChannel(
|
||||
NOTIFICATION_CHANNEL_ID,
|
||||
context.resources.getString(R.string.crash_notification_channel__title),
|
||||
NotificationManager.IMPORTANCE_HIGH
|
||||
)
|
||||
notificationManager.createNotificationChannel(notificationChannel)
|
||||
}
|
||||
flogInfo(LogTopic.CRASH_UTILITY) {
|
||||
"Successfully created crash handler notification channel!"
|
||||
}
|
||||
} catch (e: Exception) {
|
||||
flogError(LogTopic.CRASH_UTILITY) {
|
||||
"Failed to create crash handler notification channel due to an unspecified error:\n$e"
|
||||
}
|
||||
}
|
||||
} else {
|
||||
@@ -274,14 +271,7 @@ abstract class CrashUtility private constructor() {
|
||||
context ?: return
|
||||
val notificationManager = context.getSystemService(Context.NOTIFICATION_SERVICE)
|
||||
if (notificationManager != null && notificationManager is NotificationManager) {
|
||||
val notificationBuilder = if (AndroidVersion.ATLEAST_API26_O) {
|
||||
Notification.Builder(context.applicationContext, NOTIFICATION_CHANNEL_ID)
|
||||
} else {
|
||||
@Suppress("DEPRECATION")
|
||||
Notification.Builder(context.applicationContext).apply {
|
||||
setPriority(Notification.PRIORITY_MAX)
|
||||
}
|
||||
}
|
||||
val notificationBuilder = Notification.Builder(context.applicationContext, NOTIFICATION_CHANNEL_ID)
|
||||
val crashDialogIntent = Intent(context, CrashDialogActivity::class.java)
|
||||
val notification = notificationBuilder.run {
|
||||
setContentTitle(title)
|
||||
@@ -369,7 +359,7 @@ abstract class CrashUtility private constructor() {
|
||||
*/
|
||||
data class Stacktrace(
|
||||
val name: String,
|
||||
val details: String
|
||||
val details: String,
|
||||
)
|
||||
|
||||
/**
|
||||
|
||||
@@ -36,7 +36,6 @@ object NetworkUtils {
|
||||
}
|
||||
|
||||
fun getUrls(str: CharSequence): List<MatchGroup> {
|
||||
if (AndroidVersion.ATMOST_API25_N_MR1) return emptyList() // See issue #1970
|
||||
return UrlRegex.findAll(str).mapNotNull { it.groups["Url"] }.toList()
|
||||
}
|
||||
|
||||
@@ -45,7 +44,6 @@ object NetworkUtils {
|
||||
}
|
||||
|
||||
fun getEmailAddresses(str: CharSequence): List<MatchGroup> {
|
||||
if (AndroidVersion.ATMOST_API25_N_MR1) return emptyList() // See issue #1970
|
||||
return EmailRegex.findAll(str).mapNotNull { it.groups["Email"] }.toList()
|
||||
}
|
||||
|
||||
@@ -54,7 +52,6 @@ object NetworkUtils {
|
||||
}
|
||||
|
||||
fun getPhoneNumbers(str: CharSequence): List<MatchGroup> {
|
||||
if (AndroidVersion.ATMOST_API25_N_MR1) return emptyList() // See issue #1970
|
||||
return PhoneNumberRegex.findAll(str).mapNotNull { it.groups["Phone"] }.toList()
|
||||
}
|
||||
}
|
||||
|
||||
@@ -17,10 +17,8 @@
|
||||
package dev.patrickgold.florisboard.lib.util
|
||||
|
||||
import android.icu.text.SimpleDateFormat
|
||||
import android.icu.util.Calendar
|
||||
import android.icu.util.TimeZone
|
||||
import dev.patrickgold.florisboard.lib.FlorisLocale
|
||||
import org.florisboard.lib.android.AndroidVersion
|
||||
import dev.patrickgold.jetpref.datastore.model.LocalTime
|
||||
import java.time.Instant
|
||||
import java.time.format.DateTimeFormatter
|
||||
|
||||
@@ -28,10 +26,9 @@ object TimeUtils {
|
||||
private val ISO_INSTANT = SimpleDateFormat("yyyy-MM-dd'T'HH:mm:ss.SSSZ", FlorisLocale.ENGLISH.base)
|
||||
|
||||
fun currentUtcTimestamp(): CharSequence {
|
||||
return if (AndroidVersion.ATLEAST_API26_O) {
|
||||
DateTimeFormatter.ISO_INSTANT.format(Instant.now())
|
||||
} else {
|
||||
ISO_INSTANT.format(Calendar.getInstance(TimeZone.GMT_ZONE, FlorisLocale.ENGLISH.base))
|
||||
}
|
||||
return DateTimeFormatter.ISO_INSTANT.format(Instant.now())
|
||||
}
|
||||
|
||||
val LocalTime.javaLocalTime: java.time.LocalTime
|
||||
get() = java.time.LocalTime.of(hour, minute)
|
||||
}
|
||||
|
||||
@@ -1,5 +0,0 @@
|
||||
<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="#000000" android:pathData="M19,2h-4.18C14.4,0.84 13.3,0 12,0c-1.3,0 -2.4,0.84 -2.82,2L5,2c-1.1,0 -2,0.9 -2,2v16c0,1.1 0.9,2 2,2h14c1.1,0 2,-0.9 2,-2L21,4c0,-1.1 -0.9,-2 -2,-2zM12,2c0.55,0 1,0.45 1,1s-0.45,1 -1,1 -1,-0.45 -1,-1 0.45,-1 1,-1zM19,20L5,20L5,4h2v3h10L17,4h2v16z"/>
|
||||
</vector>
|
||||
@@ -1,5 +0,0 @@
|
||||
<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="#000000" android:pathData="M6,19c0,1.1 0.9,2 2,2h8c1.1,0 2,-0.9 2,-2V7H6v12zM19,4h-3.5l-1,-1h-5l-1,1H5v2h14V4z"/>
|
||||
</vector>
|
||||
@@ -1,5 +0,0 @@
|
||||
<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="#000000" android:pathData="M22,6c0,-1.1 -0.9,-2 -2,-2L4,4c-1.1,0 -2,0.9 -2,2v12c0,1.1 0.9,2 2,2h16c1.1,0 2,-0.9 2,-2L22,6zM20,6l-8,5 -8,-5h16zM20,18L4,18L4,8l8,5 8,-5v10z"/>
|
||||
</vector>
|
||||
9
app/src/main/res/drawable/ic_keyboard_keys.xml
Normal file
9
app/src/main/res/drawable/ic_keyboard_keys.xml
Normal file
@@ -0,0 +1,9 @@
|
||||
<vector xmlns:android="http://schemas.android.com/apk/res/android"
|
||||
android:width="24dp"
|
||||
android:height="24dp"
|
||||
android:viewportWidth="960"
|
||||
android:viewportHeight="960">
|
||||
<path
|
||||
android:fillColor="#000000"
|
||||
android:pathData="M280,680L280,600L680,600L680,680L280,680ZM120,520L120,440L200,440L200,520L120,520ZM280,520L280,440L360,440L360,520L280,520ZM440,520L440,440L520,440L520,520L440,520ZM600,520L600,440L680,440L680,520L600,520ZM760,520L760,440L840,440L840,520L760,520ZM120,360L120,280L200,280L200,360L120,360ZM280,360L280,280L360,280L360,360L280,360ZM440,360L440,280L520,280L520,360L440,360ZM600,360L600,280L680,280L680,360L600,360ZM760,360L760,280L840,280L840,360L760,360Z"/>
|
||||
</vector>
|
||||
@@ -1,5 +0,0 @@
|
||||
<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="#000000" android:pathData="M3.9,12c0,-1.71 1.39,-3.1 3.1,-3.1h4L11,7L7,7c-2.76,0 -5,2.24 -5,5s2.24,5 5,5h4v-1.9L7,15.1c-1.71,0 -3.1,-1.39 -3.1,-3.1zM8,13h8v-2L8,11v2zM17,7h-4v1.9h4c1.71,0 3.1,1.39 3.1,3.1s-1.39,3.1 -3.1,3.1h-4L13,17h4c2.76,0 5,-2.24 5,-5s-2.24,-5 -5,-5z"/>
|
||||
</vector>
|
||||
@@ -1,5 +0,0 @@
|
||||
<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="#000000" android:pathData="M6.62,10.79c1.44,2.83 3.76,5.14 6.59,6.59l2.2,-2.2c0.27,-0.27 0.67,-0.36 1.02,-0.24 1.12,0.37 2.33,0.57 3.57,0.57 0.55,0 1,0.45 1,1V20c0,0.55 -0.45,1 -1,1 -9.39,0 -17,-7.61 -17,-17 0,-0.55 0.45,-1 1,-1h3.5c0.55,0 1,0.45 1,1 0,1.25 0.2,2.45 0.57,3.57 0.11,0.35 0.03,0.74 -0.25,1.02l-2.2,2.2z"/>
|
||||
</vector>
|
||||
@@ -1,6 +0,0 @@
|
||||
<vector xmlns:android="http://schemas.android.com/apk/res/android"
|
||||
android:width="24dp" android:height="24dp"
|
||||
android:viewportWidth="24" android:viewportHeight="24"
|
||||
android:autoMirrored="true">
|
||||
<path android:fillColor="#000000" android:pathData="M14,4v5c0,1.12,0.37,2.16,1,3H9c0.65-0.86,1-1.9,1-3V4H14 M17,2H7C6.45,2,6,2.45,6,3c0,0.55,0.45,1,1,1c0,0,0,0,0,0l1,0v5 c0,1.66-1.34,3-3,3v2h5.97v7l1,1l1-1v-7H19v-2c0,0,0,0,0,0c-1.66,0-3-1.34-3-3V4l1,0c0,0,0,0,0,0c0.55,0,1-0.45,1-1 C18,2.45,17.55,2,17,2L17,2z"/>
|
||||
</vector>
|
||||
@@ -72,6 +72,8 @@
|
||||
<string name="quick_action__ime_ui_mode_clipboard__tooltip">فتح سجل الحافظة</string>
|
||||
<string name="quick_action__ime_ui_mode_media" maxLength="12">رمز تعبيري</string>
|
||||
<string name="quick_action__ime_ui_mode_media__tooltip">فتح نافذة الرموز التعبيرية</string>
|
||||
<string name="quick_action__language_switch" maxLength="12">تبديل اللغة</string>
|
||||
<string name="quick_action__language_switch__tooltip">تنفيذ تبديل اللغة</string>
|
||||
<string name="quick_action__settings" maxLength="12">الإعدادات</string>
|
||||
<string name="quick_action__settings__tooltip">فتح الإعدادات</string>
|
||||
<string name="quick_action__undo" maxLength="12">تراجع</string>
|
||||
@@ -167,12 +169,10 @@
|
||||
<string name="settings__theme_editor__rule_already_exists">تم تعريف قاعدة ورقة الأنماط هذه بالفعل.</string>
|
||||
<string name="settings__theme_editor__rule_codes">رموز المفتاح المستهدف</string>
|
||||
<string name="settings__theme_editor__rule_groups">مجموعات</string>
|
||||
<string name="settings__theme_editor__rule_shift_states">حالة زر shift</string>
|
||||
<string name="settings__theme_editor__rule_selectors">محددات</string>
|
||||
<string name="settings__theme_editor__add_code">إضافة رموز المفتاح</string>
|
||||
<string name="settings__theme_editor__edit_code">تعديل رمز المفتاح</string>
|
||||
<string name="settings__theme_editor__no_codes_defined">تطبيق القاعدة على جميع العناصر المستهدفة.</string>
|
||||
<string name="settings__theme_editor__codes_defined">تطبيق القاعدة فقط على العناصر المستهدفة ذات الرموز الرئيسية التالية:</string>
|
||||
<string name="settings__theme_editor__code_already_exists">تم تعريف رمز المفتاح هذا بالفعل.</string>
|
||||
<string name="settings__theme_editor__code_invalid">رمز المفتاح هذا غير صالح. تأكد من أن رمز المفتاح يقع في نطاق {c_min} إلى {c_max} للأحرف أو {i_min} إلى {i_max} للمفاتيح الخاصة الداخلية.</string>
|
||||
<string name="settings__theme_editor__code_help_text">بدلاً من ذلك ، ستساعدك الروابط التالية في العثور على رمز المفتاح المقابل:</string>
|
||||
@@ -279,7 +279,6 @@
|
||||
<string name="pref__input_feedback__haptic_vibration_strength__label" comment="Preference title">قوة الاهتزاز</string>
|
||||
<string name="pref__input_feedback__haptic_vibration_strength__summary_no_vibrator" comment="Preference summary">تتطلب هذه الميزة عتاد الهزاز في جهازك ، والذي يبدو أنه مفقود</string>
|
||||
<string name="pref__input_feedback__haptic_vibration_strength__summary_no_amplitude_ctrl" comment="Preference summary">تتطلب هذه الميزة دعم التحكم في مدى الأجهزة ، وهو مفقود على جهازك</string>
|
||||
<string name="pref__input_feedback__haptic_vibration_strength__summary_unsupported_android_version" comment="Preference summary">تتطلب هذه الميزة دعم التحكم في المدى ، والذي لا يتوفر إلا على نظام اندرويد 8.0 أو أحدث</string>
|
||||
<string name="pref__input_feedback__haptic_feat_key_press__label" comment="Preference title">اهتزاز الضغط على المفتاح</string>
|
||||
<string name="pref__input_feedback__haptic_feat_key_long_press__label" comment="Preference title">اهتزاز الضغط المطول على المفاتيح</string>
|
||||
<string name="pref__input_feedback__haptic_feat_key_repeated_action__label" comment="Preference title">اهتزاز عند الضغط المتكرر</string>
|
||||
@@ -462,6 +461,7 @@
|
||||
<string name="setup__finish_up__description_p1">تم تمكين{app_name} في النظام وجاهز للتخصيص بأسلوبك.</string>
|
||||
<string name="setup__finish_up__description_p2">إذا واجهت أي مشاكل أو أخطاء أو أعطال أو اذا كنت ترغب فقط في تقديم اقتراح ، تحقق من مستودع المشروع من شاشة \"حول التطبيق\"!</string>
|
||||
<string name="setup__finish_up__finish_btn">أبدأ بالتخصيص</string>
|
||||
<!-- Physical keyboard -->
|
||||
<!-- Back up & Restore -->
|
||||
<string name="backup_and_restore__title">النسخ الإحتياطي و الإستعادة</string>
|
||||
<string name="backup_and_restore__back_up__title">النسخ الاحتياطي للبيانات</string>
|
||||
@@ -532,7 +532,6 @@
|
||||
<string name="clipboard__cleared_primary_clip">تنظيف الحافظة الأساسية</string>
|
||||
<string name="clipboard__cleared_history">مسح التاريخ</string>
|
||||
<string name="clipboard__cleared_full_history">مسح التاريخ الكامل</string>
|
||||
<string name="clipboard__confirm_clear_history__message">هل ترغب حقًا في مسح سجل الحافظة؟</string>
|
||||
<string name="settings__clipboard__title">الحافظة</string>
|
||||
<string name="pref__clipboard__use_internal_clipboard__label">استخدم الحافظة الداخلية</string>
|
||||
<string name="pref__clipboard__use_internal_clipboard__summary">استخدم الحافظة الداخلية بدلا من حافظة النظام</string>
|
||||
@@ -558,7 +557,6 @@
|
||||
<string name="pref__clipboard__clear_primary_clip_deletes_last_item__summary">يؤدي مسح السجل الأساسي للحافظة أيضًا إلى حذف آخر إدخال للمحفوظات</string>
|
||||
<string name="send_to_clipboard__unknown_error">حدث خطأ غير معروف. حاول مرة اخرى!</string>
|
||||
<string name="send_to_clipboard__type_not_supported_error">هذا النوع من الوسائط غير مدعوم.</string>
|
||||
<string name="send_to_clipboard__android_version_to_old_error">إصدار Android قديم جدًا لهذه الميزة. </string>
|
||||
<string name="send_to_clipboard__description__copied_image_to_clipboard">نسخ الصورة أدناه إلى الحافظة.</string>
|
||||
<!-- Devtools strings -->
|
||||
<string name="devtools__title" comment="Title of Devtools screen. Translators: treat this string as 'Developer tools' for translation, except a similar short term is available for your language.">أدوات المطور</string>
|
||||
|
||||
@@ -188,6 +188,7 @@
|
||||
<string name="setup__finish_up__description_p1">{app_name} ta activáu nel sistema y yá pues personalizalu.</string>
|
||||
<string name="setup__finish_up__description_p2">Si atopes cualesquier problema, fallu, casque o namás quier facer dalguna suxerencia, consulta\'l depósitu del proyeutu na pantalla «Tocante a».</string>
|
||||
<string name="setup__finish_up__finish_btn">Comenzar a personalizar</string>
|
||||
<!-- Physical keyboard -->
|
||||
<!-- Back up & Restore -->
|
||||
<string name="backup_and_restore__back_up__destination_file_sys">Sistema de ficheros llocal</string>
|
||||
<string name="backup_and_restore__back_up__destination_share_intent">Aplicación de terceros pel menú de compartición</string>
|
||||
|
||||
@@ -72,6 +72,8 @@
|
||||
<string name="quick_action__ime_ui_mode_clipboard__tooltip">Хронология на междинната памет</string>
|
||||
<string name="quick_action__ime_ui_mode_media" maxLength="12">Емоции</string>
|
||||
<string name="quick_action__ime_ui_mode_media__tooltip">Отваря панела с емоции</string>
|
||||
<string name="quick_action__language_switch" maxLength="12">Превкл. език</string>
|
||||
<string name="quick_action__language_switch__tooltip">Изпълнява превключване на езика</string>
|
||||
<string name="quick_action__settings" maxLength="12">Настройки</string>
|
||||
<string name="quick_action__settings__tooltip">Отваря настройките</string>
|
||||
<string name="quick_action__undo" maxLength="12">Отменяне</string>
|
||||
@@ -153,6 +155,7 @@
|
||||
<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__theme_accent_color__label" comment="Label of accent color preference in Theme">Допълнителен цвят (за теми на Material You)</string>
|
||||
<string name="settings__theme_manager__title_manage" comment="Title of the theme manager screen for managing installed and custom themes">Управление на теми</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>
|
||||
@@ -161,19 +164,22 @@
|
||||
<string name="settings__theme_manager__title_night" comment="Title of the theme manager screen for night theme selection">Избор на нощна тема</string>
|
||||
<string name="settings__theme_editor__fine_tune__title">Настройки на редактора</string>
|
||||
<string name="settings__theme_editor__fine_tune__level">Режим</string>
|
||||
<string name="settings__theme_editor__fine_tune__color_representation">Цветовъзпроизвеждане</string>
|
||||
<string name="settings__theme_editor__fine_tune__display_kbd_after_dialogs">Видима клавиатура след диалог</string>
|
||||
<string name="settings__theme_editor__add_rule">Добавяне на правило</string>
|
||||
<string name="settings__theme_editor__edit_rule">Променяне на правило</string>
|
||||
<string name="settings__theme_editor__no_rules_defined">Стиловият лист няма правила. За да промените стиловете добавете правила.</string>
|
||||
<string name="settings__theme_editor__rule_already_exists">Вече има такова правило.</string>
|
||||
<string name="settings__theme_editor__rule_name">Елемент / бележка</string>
|
||||
<string name="settings__theme_editor__rule_codes">Целеви кодове</string>
|
||||
<string name="settings__theme_editor__rule_groups">Групи</string>
|
||||
<string name="settings__theme_editor__rule_shift_states">Състояние на Shift</string>
|
||||
<string name="settings__theme_editor__rule_modes">Целеви режими (слоеве)</string>
|
||||
<string name="settings__theme_editor__rule_shift_states">Целеви режими при Shift</string>
|
||||
<string name="settings__theme_editor__rule_selectors">Селектор</string>
|
||||
<string name="settings__theme_editor__add_code">Добавяне на код</string>
|
||||
<string name="settings__theme_editor__edit_code">Промяна на код</string>
|
||||
<string name="settings__theme_editor__no_codes_defined">Правилото се прилага към всички целеви елементи.</string>
|
||||
<string name="settings__theme_editor__codes_defined">Правилото се прилага само към целевите елементи със следните кодове:</string>
|
||||
<string name="settings__theme_editor__no_enum_value_to_add_anymore">Всички възможни стойности са добавени.</string>
|
||||
<string name="settings__theme_editor__code_already_exists">Кодът вече е дефиниран.</string>
|
||||
<string name="settings__theme_editor__code_invalid">Кодът не е валиден. Уверете се че стойността му е между {c_min} и {c_max} за букви и между {i_min} и {i_max} за вградените спициални клавиши.</string>
|
||||
<string name="settings__theme_editor__code_help_text">Следните препратки ще са ви от полза при намиране на кода на клавиш:</string>
|
||||
@@ -190,20 +196,68 @@
|
||||
<string name="settings__theme_editor__property_value">Стойност на свойство</string>
|
||||
<string name="settings__theme_editor__property_value_shape_apply_for_all_corners">Прилагане към всички ъгли</string>
|
||||
<string name="settings__theme_editor__property_value_color_dialog_title">Промяна на низа на цвета</string>
|
||||
<string name="settings__theme_editor__file_selector_dialog_title">Избиране на файл</string>
|
||||
<string name="settings__theme_editor__file_selector_no_files_text">Към добавката все още няма файлове. За да внесете файлове използвайте действието „{action_title}“ на предния екран.</string>
|
||||
<string name="settings__theme_editor__component_meta_is_night_theme">Нощна тема</string>
|
||||
<string name="settings__theme_editor__component_meta_is_borderless">Без кант</string>
|
||||
<string name="settings__theme_editor__component_meta_stylesheet_path">Път към стиловия лист</string>
|
||||
<string name="settings__theme_editor__stylesheet_error_title">Грешка в стила</string>
|
||||
<string name="settings__theme_editor__stylesheet_error_description">Приложението {app_name} може надоверие да зареди стиловете и да добави липсващите схеми и правила или да премахне неправилните правила, свойства и стойности. Желаете ли приложението {app_name} да приложи тези промени?</string>
|
||||
<string name="snygg__rule_annotation__defines">Променливи</string>
|
||||
<string name="snygg__rule_annotation__defines_description">Създайте променливи в това правило, за да използвате общи цветове или размери в стиловия лист.</string>
|
||||
<string name="snygg__rule_annotation__font">Шрифт</string>
|
||||
<string name="snygg__rule_annotation__font_name">Име на шрифт</string>
|
||||
<string name="snygg__rule_element__root">Коренов възел</string>
|
||||
<string name="snygg__rule_element__window">Прозорец</string>
|
||||
<string name="snygg__rule_element__key">Клавиш</string>
|
||||
<string name="snygg__rule_element__key_hint">Горен индекс на клавиш</string>
|
||||
<string name="snygg__rule_element__key_popup_box">Кутия на подсказка на клавиш</string>
|
||||
<string name="snygg__rule_element__key_popup_element">Елемент на подсказка на клавиш</string>
|
||||
<string name="snygg__rule_element__key_popup_extended_indicator">Разширен индикатор на подсказка</string>
|
||||
<string name="snygg__rule_element__clipboard_header">Заглавка на междинната памет</string>
|
||||
<string name="snygg__rule_element__clipboard_header_button">Бутон в заглавката на межд. памет</string>
|
||||
<string name="snygg__rule_element__clipboard_header_text">Текст в заглавката на межд. памет</string>
|
||||
<string name="snygg__rule_element__clipboard_subheader">Подзаглавие на междинната памет</string>
|
||||
<string name="snygg__rule_element__clipboard_content">Съдържание на междинната памет</string>
|
||||
<string name="snygg__rule_element__clipboard_filter_row">Ред на филтър на междинната памет</string>
|
||||
<string name="snygg__rule_element__clipboard_filter_chip">Елемент на филтър на междинната памет</string>
|
||||
<string name="snygg__rule_element__clipboard_filter_chip_icon">Пиктограма на елемент на филтър на междинната памет</string>
|
||||
<string name="snygg__rule_element__clipboard_filter_chip_text">Текст на елемент на филтър на междинната памет</string>
|
||||
<string name="snygg__rule_element__clipboard_grid">Мрежа на междинната памет</string>
|
||||
<string name="snygg__rule_element__clipboard_item">Елемент от междинната памет</string>
|
||||
<string name="snygg__rule_element__clipboard_item_description">Описание на елемент от междинната памет</string>
|
||||
<string name="snygg__rule_element__clipboard_item_popup">Подсказка на елемент от междинната памет</string>
|
||||
<string name="snygg__rule_element__clipboard_item_timestamp">Времеви маркер на елемент от междинната памет</string>
|
||||
<string name="snygg__rule_element__clipboard_item_actions">Действия на елемент от междинната памет</string>
|
||||
<string name="snygg__rule_element__clipboard_item_action">Действие на елемент от междинната памет</string>
|
||||
<string name="snygg__rule_element__clipboard_item_action_icon">Пиктограма с действие на елемент от междинната памет</string>
|
||||
<string name="snygg__rule_element__clipboard_item_action_text">Текст на действие на елемент от междинната памет</string>
|
||||
<string name="snygg__rule_element__clipboard_clear_all_dialog">Диалог за изчистване на елементите от междинната памет</string>
|
||||
<string name="snygg__rule_element__clipboard_clear_all_dialog_message">Съобщение в диалога за изчистване на елементите от междинната памет</string>
|
||||
<string name="snygg__rule_element__clipboard_clear_all_dialog_buttons">Бутони в диалога за изчистване на елементите от междинната памет</string>
|
||||
<string name="snygg__rule_element__clipboard_clear_all_dialog_button">Бутон в диалога за изчистване на елементите от междинната памет</string>
|
||||
<string name="snygg__rule_element__clipboard_history_disabled_title">Заглавие при изключена история на межд. памет</string>
|
||||
<string name="snygg__rule_element__clipboard_history_disabled_message">Съобщение при изключена история на межд. памет</string>
|
||||
<string name="snygg__rule_element__clipboard_history_disabled_button">Бутон при изключена история на межд. памет</string>
|
||||
<string name="snygg__rule_element__clipboard_history_locked_title">Заглавие при заключена история на межд. памет</string>
|
||||
<string name="snygg__rule_element__clipboard_history_locked_message">Съобщение при заключена история на межд. памет</string>
|
||||
<string name="snygg__rule_element__extracted_landscape_input_layout">Пейзажен изглед за въвеждане</string>
|
||||
<string name="snygg__rule_element__extracted_landscape_input_field">Пейзажно поле за въвеждане</string>
|
||||
<string name="snygg__rule_element__extracted_landscape_input_action">Действие на пейзажно поле за въвеждане</string>
|
||||
<string name="snygg__rule_element__glide_trail">Следа от плъзгане</string>
|
||||
<string name="snygg__rule_element__incognito_mode_indicator">Индикатор за режим инкогнито</string>
|
||||
<string name="snygg__rule_element__inline_autofill_chip">Елемент при попълване на място</string>
|
||||
<string name="snygg__rule_element__media">Медия</string>
|
||||
<string name="snygg__rule_element__media_emoji_subheader">Подзаглавие на медийна емоция</string>
|
||||
<string name="snygg__rule_element__media_emoji_key">Клавиш на медийна емоция</string>
|
||||
<string name="snygg__rule_element__media_emoji_key_popup_box">Кутия на подсказка на клавиш на медийна емоция</string>
|
||||
<string name="snygg__rule_element__media_emoji_key_popup_element">Елемент на подсказка на клавиш на медийна емоция</string>
|
||||
<string name="snygg__rule_element__media_emoji_key_popup_extended_indicator">Разширен индикатор на подсказка на клавиш на медийна емоция</string>
|
||||
<string name="snygg__rule_element__media_emoji_tab">Раздел с медийни емоции</string>
|
||||
<string name="snygg__rule_element__media_bottom_row">Долен ред на медия</string>
|
||||
<string name="snygg__rule_element__media_bottom_row_button">Бутон на долен ред на медия</string>
|
||||
<string name="snygg__rule_element__one_handed_panel">Панел за работа с една ръка</string>
|
||||
<string name="snygg__rule_element__one_handed_panel_button">Бутон на панела за една ръка</string>
|
||||
<string name="snygg__rule_element__smartbar">Интелигентна лента</string>
|
||||
<string name="snygg__rule_element__smartbar_shared_actions_row">Интелигентна лента, ред с действия</string>
|
||||
<string name="snygg__rule_element__smartbar_shared_actions_toggle">Интелигентна лента, клавиш за превкл. на действията</string>
|
||||
@@ -211,20 +265,38 @@
|
||||
<string name="snygg__rule_element__smartbar_extended_actions_toggle">Интелигентна лента, клавиш за превкл. на допълнителните действия</string>
|
||||
<string name="snygg__rule_element__smartbar_action_key">Интелигентна лента, клавиш за действие</string>
|
||||
<string name="snygg__rule_element__smartbar_action_tile">Интелигентна лента, плочка с действие</string>
|
||||
<string name="snygg__rule_element__smartbar_action_tile_icon">Интелигентна лента, пиктограма на плочка с действие</string>
|
||||
<string name="snygg__rule_element__smartbar_action_tile_text">Интелигентна лента, надпис на плочка с действие</string>
|
||||
<string name="snygg__rule_element__smartbar_actions_overflow">Интелигентна лента, панел с действията</string>
|
||||
<string name="snygg__rule_element__smartbar_actions_overflow_customize_button">Интелигентна лента, панел, бутон за настройка</string>
|
||||
<string name="snygg__rule_element__smartbar_actions_editor">Интелигентна лента, редактор на действията</string>
|
||||
<string name="snygg__rule_element__smartbar_actions_editor_header">Интелигентна лента, редактор на действията, заглавие</string>
|
||||
<string name="snygg__rule_element__smartbar_actions_editor_header_button">Интелигентна лента, редактор на действия, бутон в заглавката</string>
|
||||
<string name="snygg__rule_element__smartbar_actions_editor_subheader">Интелигентна лента, редактор на действията, подзаглавие</string>
|
||||
<string name="snygg__rule_element__smartbar_actions_editor_tile_grid">Интелигентна лента, редактор на действия, мрежа</string>
|
||||
<string name="snygg__rule_element__smartbar_actions_editor_tile">Интелигентна лента, редактор на действия, плочка</string>
|
||||
<string name="snygg__rule_element__smartbar_candidates_row">Интелигентна лента, ред с кандидати</string>
|
||||
<string name="snygg__rule_element__smartbar_candidate_word">Интелигентна лента, кандидат за дума</string>
|
||||
<string name="snygg__rule_element__smartbar_candidate_word_text">Интелигентна лента, текст на кандидат за дума</string>
|
||||
<string name="snygg__rule_element__smartbar_candidate_word_secondary_text">Интелигентна лента, вторичен текст на кандидат за дума</string>
|
||||
<string name="snygg__rule_element__smartbar_candidate_clip">Интелигентна лента, контейнер с кандидати</string>
|
||||
<string name="snygg__rule_element__smartbar_candidate_clip_icon">Интелигентна лента, пиктограма на контейнер с кандидати</string>
|
||||
<string name="snygg__rule_element__smartbar_candidate_clip_text">Интелигентна лента, текст на контейнер с кандидати</string>
|
||||
<string name="snygg__rule_element__smartbar_candidate_spacer">Интелигентна лента, разделител на кандидати</string>
|
||||
<string name="snygg__rule_element__subtype_panel">Панел с подвидове</string>
|
||||
<string name="snygg__rule_element__subtype_panel_header">Заглавие на панела с подвидове</string>
|
||||
<string name="snygg__rule_element__subtype_panel_list">Панел на списъка с подвидове</string>
|
||||
<string name="snygg__rule_element__subtype_panel_list_item">Елемент на панела със списъка с подвидове</string>
|
||||
<string name="snygg__rule_element__subtype_panel_list_item_icon_leading">Пиктограма на елемент на панела със списъка с подвидове (водеща)</string>
|
||||
<string name="snygg__rule_element__subtype_panel_list_item_text">Текст на елемент на панела със списъка с подвидове</string>
|
||||
<string name="snygg__rule_selector__pressed">Натиснат</string>
|
||||
<string name="snygg__rule_selector__focus">На фокус</string>
|
||||
<string name="snygg__rule_selector__hover">При посочване</string>
|
||||
<string name="snygg__rule_selector__disabled">Изключен</string>
|
||||
<string name="snygg__property_name__background">Фон</string>
|
||||
<string name="snygg__property_name__foreground">Преден план</string>
|
||||
<string name="snygg__property_name__background_image">Фоново изображение</string>
|
||||
<string name="snygg__property_name__content_scale">Мащаб на съдържанието</string>
|
||||
<string name="snygg__property_name__border_color">Цвят на канта</string>
|
||||
<string name="snygg__property_name__border_style">Стил на канта</string>
|
||||
<string name="snygg__property_name__border_width">Дебелина на канта</string>
|
||||
@@ -232,8 +304,19 @@
|
||||
<string name="snygg__property_name__font_size">Размер на шрифта</string>
|
||||
<string name="snygg__property_name__font_style">Стил на шрифта</string>
|
||||
<string name="snygg__property_name__font_weight">Тежест на шрифта</string>
|
||||
<string name="snygg__property_name__letter_spacing">Междубуквие</string>
|
||||
<string name="snygg__property_name__line_height">Височина на реда</string>
|
||||
<string name="snygg__property_name__margin">Поле</string>
|
||||
<string name="snygg__property_name__padding">Отстъп</string>
|
||||
<string name="snygg__property_name__shadow_color">Цвят на сянката</string>
|
||||
<string name="snygg__property_name__shadow_elevation">Големина на сянката</string>
|
||||
<string name="snygg__property_name__shape">Форма</string>
|
||||
<string name="snygg__property_name__clip">Елемент</string>
|
||||
<string name="snygg__property_name__src">Източник</string>
|
||||
<string name="snygg__property_name__text_align">Подравняване на текста</string>
|
||||
<string name="snygg__property_name__text_decoration_line">Декорация на текста</string>
|
||||
<string name="snygg__property_name__text_max_lines">Ограничение на броя редове</string>
|
||||
<string name="snygg__property_name__text_overflow">Преливане на текста</string>
|
||||
<string name="snygg__property_name__var_primary">Основен цвят</string>
|
||||
<string name="snygg__property_name__var_primary_variant">Основен цвят (вариант)</string>
|
||||
<string name="snygg__property_name__var_secondary">Допълнителен цвят</string>
|
||||
@@ -250,9 +333,16 @@
|
||||
<string name="snygg__property_name__var_shape_variant">Обща форма (вариант)</string>
|
||||
<string name="snygg__property_value__explicit_inherit">Наследяване</string>
|
||||
<string name="snygg__property_value__defined_var">От променлива</string>
|
||||
<string name="snygg__property_value__yes">Да</string>
|
||||
<string name="snygg__property_value__no">Не</string>
|
||||
<string name="snygg__property_value__solid_color">Плътен цвят</string>
|
||||
<string name="snygg__property_value__material_you_light_color">Цвят на Material You (светъл)</string>
|
||||
<string name="snygg__property_value__material_you_dark_color">Цвят на Material You (тъмен)</string>
|
||||
<string name="snygg__property_value__font_family_generic">Семейство шрифтове (общо)</string>
|
||||
<string name="snygg__property_value__font_family_custom">Семейство шрифтове (потребителско)</string>
|
||||
<string name="snygg__property_value__font_style">Стил на шрифта</string>
|
||||
<string name="snygg__property_value__font_weight">Тежест на шрифта</string>
|
||||
<string name="snygg__property_value__padding">Отстъп или поле</string>
|
||||
<string name="snygg__property_value__rectangle_shape">Правоъгълна форма</string>
|
||||
<string name="snygg__property_value__circle_shape">Кръгла форма</string>
|
||||
<string name="snygg__property_value__cut_corner_shape_dp">Форма с рязани ъгли (dp)</string>
|
||||
@@ -262,6 +352,12 @@
|
||||
<string name="snygg__property_value__dp_size">Размер (dp)</string>
|
||||
<string name="snygg__property_value__sp_size">Размер (sp)</string>
|
||||
<string name="snygg__property_value__percentage_size">Размер (%)</string>
|
||||
<string name="snygg__property_value__content_scale">Мащаб на съдържанието</string>
|
||||
<string name="snygg__property_value__text_align">Подравняване на текста</string>
|
||||
<string name="snygg__property_value__text_decoration_line">Декорация на текста</string>
|
||||
<string name="snygg__property_value__text_max_lines">Ограничение на броя редове</string>
|
||||
<string name="snygg__property_value__text_overflow">Преливане на текста</string>
|
||||
<string name="snygg__property_value__uri">Адрес в интернет</string>
|
||||
<string name="settings__input_feedback__title" comment="Title of Input Feedback screen">Звук и вибрация</string>
|
||||
<string name="pref__input_feedback__group_audio__label" comment="Preference group title">Звукова обратна връзка / звуци</string>
|
||||
<string name="pref__input_feedback__audio_enabled__label" comment="Preference title">Звукова обратна връзка</string>
|
||||
@@ -280,7 +376,6 @@
|
||||
<string name="pref__input_feedback__haptic_vibration_strength__label" comment="Preference title">Сила на вибрацията</string>
|
||||
<string name="pref__input_feedback__haptic_vibration_strength__summary_no_vibrator" comment="Preference summary">Тази възможност изисква модул за вибрации, какъвто изглежда липсва на устройството</string>
|
||||
<string name="pref__input_feedback__haptic_vibration_strength__summary_no_amplitude_ctrl" comment="Preference summary">Тази възможност изисква поддръжка на апаратен контрол на амплитудата, каквато липсва на устройството</string>
|
||||
<string name="pref__input_feedback__haptic_vibration_strength__summary_unsupported_android_version" comment="Preference summary">Тази възможност изисква поддръжка на апаратен контрол на амплитудата, каквато е налична от Android 8.0 и по-нов</string>
|
||||
<string name="pref__input_feedback__haptic_feat_key_press__label" comment="Preference title">Вибрация при докосване на клавиш</string>
|
||||
<string name="pref__input_feedback__haptic_feat_key_long_press__label" comment="Preference title">Вибрация при задържане на клавиш</string>
|
||||
<string name="pref__input_feedback__haptic_feat_key_repeated_action__label" comment="Preference title">Вибрация при продължително задържане на клавиш</string>
|
||||
@@ -462,6 +557,13 @@
|
||||
<string name="setup__finish_up__description_p1">Клавииатурата на {app_name} вече е включена в системата и готова да я настроите според вашите предпочитения.</string>
|
||||
<string name="setup__finish_up__description_p2">Акосе сблъскате с проблеми, дефекти, сривове или просто искате да направите предложение, разгледайте хранилището на проекта от екрана Относно!</string>
|
||||
<string name="setup__finish_up__finish_btn">Започнете да настройвате</string>
|
||||
<!-- Physical keyboard -->
|
||||
<string name="physical_keyboard__title">Физическа клавиатура</string>
|
||||
<string name="physical_keyboard__system_settings__title">Системни настройки на физическа клавиатура</string>
|
||||
<string name="physical_keyboard__system_settings__summary">Подредби, клав. комбинации и специални клавиши</string>
|
||||
<string name="physical_keyboard__system_settings__summary_not_attached">Достъпно само при включена клавиатура</string>
|
||||
<string name="physical_keyboard__show_on_screen_keyboard__title">Екранна клавиатура</string>
|
||||
<string name="physical_keyboard__show_on_screen_keyboard__summary">Показване на екранна клавиатура при използване на физкческа клавиатура</string>
|
||||
<!-- Back up & Restore -->
|
||||
<string name="backup_and_restore__title">Резервно копие и възстановяване</string>
|
||||
<string name="backup_and_restore__back_up__title">Резервно копие на данни</string>
|
||||
@@ -532,7 +634,7 @@
|
||||
<string name="clipboard__cleared_primary_clip">Текущото съдържание на междинната памет е изчистено</string>
|
||||
<string name="clipboard__cleared_history">Историята е изчистена</string>
|
||||
<string name="clipboard__cleared_full_history">Цялата история е изчистена</string>
|
||||
<string name="clipboard__confirm_clear_history__message">Желаете ли да премахнете историята на междинната памет?</string>
|
||||
<string name="clipboard__confirm_clear_history__message">Желаете ли историята на междинната памет да бъде изчистена? Всички елементи, с изключение на закачените ще бъдат премахнати без значение на използвания филтър.</string>
|
||||
<string name="settings__clipboard__title">Междинна памет</string>
|
||||
<string name="pref__clipboard__use_internal_clipboard__label">Междинна памет на приложението</string>
|
||||
<string name="pref__clipboard__use_internal_clipboard__summary">Използва се междинната памет на приложението вместо системната</string>
|
||||
@@ -543,6 +645,7 @@
|
||||
<string name="pref__clipboard__group_clipboard_suggestion__label">Предложения от междинната памет</string>
|
||||
<string name="pref__clipboard__suggestion_enabled__label" comment="Preference title">Предложения от съдържанието на междинната памет</string>
|
||||
<string name="pref__clipboard__suggestion_enabled__summary" comment="Preference summary">Предлага вече копирано съдържание</string>
|
||||
<string name="pref__clipboard__num_history_grid_columns__label">Брой колони на решетката</string>
|
||||
<string name="pref__clipboard__suggestion_timeout__label" comment="Preference title; Translators: This should form a sentence together with `pref__clipboard__suggestion_timeout__summary` and is the first part">Ограничаване на предложенията от междинната памет до</string>
|
||||
<string name="pref__clipboard__suggestion_timeout__summary" comment="Preference summary; Translators: This should form a sentence together with `pref__clipboard__suggestion_timeout__label` and is the second part">Елементи, копирани през последните {v} секунди</string>
|
||||
<string name="pref__clipboard__group_clipboard_history__label">История на междинната памет</string>
|
||||
@@ -558,7 +661,6 @@
|
||||
<string name="pref__clipboard__clear_primary_clip_deletes_last_item__summary">Изчистване на текущото съдържание на междинната памет изчиства и последния елемент от историята</string>
|
||||
<string name="send_to_clipboard__unknown_error">Възникна неизвестна грешка. Опитайте отново!</string>
|
||||
<string name="send_to_clipboard__type_not_supported_error">Този вид медия не се поддържа.</string>
|
||||
<string name="send_to_clipboard__android_version_to_old_error">Това издание на Андроид е твърде остаряло за тази възможност.</string>
|
||||
<string name="send_to_clipboard__description__copied_image_to_clipboard">Долното изображение е копирано в междинната памет.</string>
|
||||
<!-- Devtools strings -->
|
||||
<string name="devtools__title" comment="Title of Devtools screen. Translators: treat this string as 'Developer tools' for translation, except a similar short term is available for your language.">Развойни инструменти</string>
|
||||
@@ -578,6 +680,9 @@
|
||||
<string name="devtools__show_drag_and_drop_helpers__summary" comment="Summary of Show drag and drop helpers in Devtools">Показват се иначе невидимите манипулатори в екраните за влачене и пускане, за отстраняване на дефекти</string>
|
||||
<string name="devtools__clear_udm_internal_database__label" comment="Label of Clear internal user dictionary database in Devtools">Изтриване на данните от речника към приложението</string>
|
||||
<string name="devtools__clear_udm_internal_database__summary" comment="Summary of Clear internal user dictionary database in Devtools">Премахват се всички думи от таблицата с речника</string>
|
||||
<string name="devtools__reset_quick_actions_to_default__label">Нулиране на действията на интелигентната лента</string>
|
||||
<string name="devtools__reset_quick_actions_to_default__summary">Нулиране на бързите действия на интелигентната лента до подразбираната подредба</string>
|
||||
<string name="devtools__reset_quick_actions_to_default__toast_success">Бързите действия на интелигентната лента са нулирани</string>
|
||||
<string name="devtools__reset_flag__label" comment="Label of Reset flag preferences in Devtools">Нулиране на „{flag_name}“</string>
|
||||
<string name="devtools__reset_flag_is_ime_set_up__summary" comment="Summary of Reset is IME set up flag in Devtools">За отстраняване на дефекти в първоначалния екран</string>
|
||||
<string name="devtools__test_crash_report__label" comment="Label of Test Crash Report in Devtools">Изпробване на доклада на грешка</string>
|
||||
@@ -626,6 +731,8 @@
|
||||
<string name="ext__editor__metadata__message_invalid">Описателните данни на резширението са недействителни. Проверете редактора за описателни данни за подробности!</string>
|
||||
<string name="ext__editor__dependencies__title">Управление на зависимости</string>
|
||||
<string name="ext__editor__files__title">Управление на архиви</string>
|
||||
<string name="ext__editor__files__type_fonts">Шрифтове</string>
|
||||
<string name="ext__editor__files__type_images">Изображения</string>
|
||||
<string name="ext__editor__create_component__title">Създаване на компонент</string>
|
||||
<string name="ext__editor__create_component__title_theme">Създаване на тема</string>
|
||||
<string name="ext__editor__create_component__from_empty">Празна</string>
|
||||
@@ -699,7 +806,11 @@
|
||||
<string name="action__discard_confirm_message">Наистина ли искате да отхвърлите незапазените промени? Веднъж изпълнено действието не може да бъде отменено.</string>
|
||||
<string name="action__edit">Променяне</string>
|
||||
<string name="action__export">Изнасяне</string>
|
||||
<string name="action__export_file">Внасяне на файл</string>
|
||||
<string name="action__export_files">Внасяне на файлове</string>
|
||||
<string name="action__import">Внасяне</string>
|
||||
<string name="action__import_file">Внасяне на файл</string>
|
||||
<string name="action__import_files">Внасяне на файлове</string>
|
||||
<string name="action__no">Не</string>
|
||||
<string name="action__ok">Добре</string>
|
||||
<string name="action__restore">Възстановяване</string>
|
||||
@@ -721,6 +832,9 @@
|
||||
<string name="general__no_browser_app_found_for_url">Не е намерено приложение, което да отвори адреса {url}</string>
|
||||
<string name="general__select_dropdown_value_placeholder">- изберете -</string>
|
||||
<string name="general__unlimited">Неограничено</string>
|
||||
<string name="general__file_name">Име на файла</string>
|
||||
<string name="general__properties">Свойства</string>
|
||||
<string name="general__auto" comment="Generic shorthand for 'Automatic' value">Авто</string>
|
||||
<!-- Screen orientation strings -->
|
||||
<string name="screen_orientation__portrait">Портрет</string>
|
||||
<string name="screen_orientation__landscape">Пейзаж</string>
|
||||
@@ -739,6 +853,9 @@
|
||||
<string name="enum__candidates_display_mode__dynamic_scrollable" comment="Enum value label">Динамична ширина с плъзгач</string>
|
||||
<string name="enum__capitalization_behavior__capslock_by_double_tap" comment="Enum value label">Само главни букви при двойно докосване на клавиша Shift</string>
|
||||
<string name="enum__capitalization_behavior__capslock_by_cycle" comment="Enum value label">Превключва способите за въвеждане на главни букви при всяко докосване на Shift</string>
|
||||
<string name="enum__color_representation__hex" comment="Enum value label">Шестнадесетично</string>
|
||||
<string name="enum__color_representation__rgb" comment="Enum value label">Червено, зелено, синьо</string>
|
||||
<string name="enum__color_representation__hsv" comment="Enum value label">Нюанс, наситеност, стойност</string>
|
||||
<string name="enum__display_kbd_after_dialogs__always" comment="Enum value label">Винаги се показва</string>
|
||||
<string name="enum__display_kbd_after_dialogs__always__description" comment="Enum value description">Клавиатурата се показва винаги след затваряне на диалог</string>
|
||||
<string name="enum__display_kbd_after_dialogs__never" comment="Enum value label">Никога не се показва</string>
|
||||
@@ -804,6 +921,13 @@
|
||||
<string name="enum__input_shift_state__shifted_manual" comment="Enum value label">Shift (ръчно)</string>
|
||||
<string name="enum__input_shift_state__shifted_automatic" comment="Enum value label">Shift (автоматично)</string>
|
||||
<string name="enum__input_shift_state__caps_lock" comment="Enum value label">Caps Lock</string>
|
||||
<string name="enum__keyboard_mode__characters" comment="Enum value label">Знаци</string>
|
||||
<string name="enum__keyboard_mode__symbols" comment="Enum value label">Символи</string>
|
||||
<string name="enum__keyboard_mode__symbols2" comment="Enum value label">Символи 2</string>
|
||||
<string name="enum__keyboard_mode__numeric" comment="Enum value label">Числа</string>
|
||||
<string name="enum__keyboard_mode__numeric_advanced" comment="Enum value label">Числа, разширени</string>
|
||||
<string name="enum__keyboard_mode__phone" comment="Enum value label">Телефон</string>
|
||||
<string name="enum__keyboard_mode__phone2" comment="Enum value label">Телефон 2</string>
|
||||
<string name="enum__landscape_input_ui_mode__never_show" comment="Enum value label">Не се показва</string>
|
||||
<string name="enum__landscape_input_ui_mode__always_show" comment="Enum value label">Винаги се показва</string>
|
||||
<string name="enum__landscape_input_ui_mode__dynamically_show" comment="Enum value label">Показва се динамично</string>
|
||||
|
||||
@@ -57,6 +57,7 @@
|
||||
<string name="about__view_source_code" comment="Label of View source code button in About">Izvorni kod</string>
|
||||
<!-- Setup UI strings -->
|
||||
<string name="setup__title" comment="Title of Setup">Dobrodošli!</string>
|
||||
<!-- Physical keyboard -->
|
||||
<!-- Back up & Restore -->
|
||||
<!-- Crash Dialog strings -->
|
||||
<string name="crash_dialog__close" comment="Label of Close button in crash dialog">Zatvori</string>
|
||||
|
||||
@@ -15,8 +15,26 @@
|
||||
<string name="media__tab__kaomoji" comment="Tab description for kaomoji in the media UI">Kaomoji</string>
|
||||
<string name="prefs__media__emoji_preferred_skin_tone">To de pell preferit dels emojis</string>
|
||||
<string name="prefs__media__emoji_preferred_hair_style">Pentinat preferit dels emojis</string>
|
||||
<string name="prefs__media__emoji_history__title" comment="Preference group title">Historial d\'emojis</string>
|
||||
<string name="prefs__media__emoji_history_enabled" comment="Preference title">Habilita l\'historial d\'emojis</string>
|
||||
<string name="prefs__media__emoji_history_enabled__summary" comment="Preference summary">Recorda els emojis usats fa poc per a un accés ràpid</string>
|
||||
<string name="prefs__media__emoji_history_pinned_update_strategy" comment="Preference title">Estratègia d\'actualització (Fixats)</string>
|
||||
<string name="prefs__media__emoji_history_recent_update_strategy" comment="Preference title">Estratègia d\'actualització (Recents)</string>
|
||||
<string name="prefs__media__emoji_history_max_size">Nombre màxim d\'elements que es desaran</string>
|
||||
<string name="prefs__media__emoji_history_pinned_reset">Restableix els emojis fixats</string>
|
||||
<string name="prefs__media__emoji_history_reset">Restableix els emojis recents</string>
|
||||
<string name="prefs__media__emoji_suggestion__title" comment="Preference group title">Suggeriment d\'emojis</string>
|
||||
<string name="prefs__media__emoji_suggestion_enabled" comment="Preference title">Habilita el suggeriment d\'emojis</string>
|
||||
<string name="prefs__media__emoji_suggestion_enabled__summary" comment="Preference summary">Suggereix emojis mentre escrius</string>
|
||||
<string name="prefs__media__emoji_suggestion_type" comment="Preference title">Tipus d\'activador</string>
|
||||
<string name="prefs__media__emoji_suggestion_update_history" comment="Preference title">Actualitza l\'historial dels emojis</string>
|
||||
<string name="prefs__media__emoji_suggestion_update_history__summary" comment="Preference summary">Acceptar els emojis suggerits els afegeix a l\'historial d\'emojis</string>
|
||||
<string name="prefs__media__emoji_suggestion_candidate_show_name" comment="Preference title">Mostra el nom de l\'emoji</string>
|
||||
<string name="prefs__media__emoji_suggestion_candidate_show_name__summary" comment="Preference summary">El suggeriment d\'emojis mostra el nom amb l\'emoji</string>
|
||||
<string name="prefs__media__emoji_suggestion_query_min_length" comment="Preference title">Longitud mínima de la consulta</string>
|
||||
<string name="prefs__media__emoji_suggestion_candidate_max_count" comment="Preference title">Nombre màxim de suggeriments</string>
|
||||
<!-- Emoji strings -->
|
||||
<string name="emoji__category__smileys_emotion" comment="Emoji category name">Emoticones & emocions</string>
|
||||
<string name="emoji__category__smileys_emotion" comment="Emoji category name">Emoticones & Emocions</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">Menjar & Beure</string>
|
||||
@@ -25,19 +43,78 @@
|
||||
<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>
|
||||
<string name="emoji__history__empty_message" comment="Message if the emoji history is empty">No s\'han trobat emojis recents. Un cop comencis a entrar-ne apareixeran automàticament aquí.</string>
|
||||
<string name="emoji__history__phone_locked_message" comment="Message to show if phone is locked">Per accedir a l\'historial d\'emojis has de desbloquejar primer el dispositiu.</string>
|
||||
<string name="emoji__history__usage_tip" comment="Feature discoverability for actions of emoji history">Consell d\'amic: Fes un toc llarg sobre l\'emoji de l\'historial per fixar-la o suprimir-la!</string>
|
||||
<string name="emoji__history__removal_success_message" comment="Toast message if user has used the delete action on an emoji in the emoji history">S\'ha suprimit {emoji} de l\'historial d\'emojis</string>
|
||||
<string name="emoji__history__pinned">Fixats</string>
|
||||
<string name="emoji__history__recent">Recents</string>
|
||||
<!-- Quick action strings -->
|
||||
<string name="quick_action__arrow_up" maxLength="12">Amunt</string>
|
||||
<string name="quick_action__arrow_up__tooltip">Ves amunt</string>
|
||||
<string name="quick_action__arrow_down" maxLength="12">Avall</string>
|
||||
<string name="quick_action__arrow_down__tooltip">Ves avall</string>
|
||||
<string name="quick_action__arrow_left" maxLength="12">Esquerra</string>
|
||||
<string name="quick_action__arrow_left__tooltip">Cap a l\'esquerra</string>
|
||||
<string name="quick_action__arrow_right" maxLength="12">Dreta</string>
|
||||
<string name="quick_action__arrow_right__tooltip">Cap a la dreta</string>
|
||||
<string name="quick_action__clipboard_clear_primary_clip" maxLength="12">Buidar clip</string>
|
||||
<string name="quick_action__clipboard_clear_primary_clip__tooltip">Suprimeix l\'entrada del porta-retalls principal</string>
|
||||
<string name="quick_action__clipboard_copy" maxLength="12">Copia</string>
|
||||
<string name="quick_action__clipboard_copy__tooltip">Copia el contingut al porta-retalls</string>
|
||||
<string name="quick_action__clipboard_cut" maxLength="12">Retalla</string>
|
||||
<string name="quick_action__clipboard_cut__tooltip">Retalla i desa al porta-retalls</string>
|
||||
<string name="quick_action__clipboard_paste" maxLength="12">Enganxa</string>
|
||||
<string name="quick_action__clipboard_paste__tooltip">Enganxa del porta-retalls</string>
|
||||
<string name="quick_action__clipboard_select_all" maxLength="12">Escull tot</string>
|
||||
<string name="quick_action__clipboard_select_all__tooltip">Selecciona-ho tot i desa-ho al porta-retalls</string>
|
||||
<string name="quick_action__ime_ui_mode_clipboard" maxLength="12">Porta-retall</string>
|
||||
<string name="quick_action__ime_ui_mode_clipboard__tooltip">Obre l\'historial del porta-retalls</string>
|
||||
<string name="quick_action__ime_ui_mode_media" maxLength="12">Emoji</string>
|
||||
<string name="quick_action__ime_ui_mode_media__tooltip">Obre el tauler d\'emojis</string>
|
||||
<string name="quick_action__language_switch" maxLength="12">Canvi idioma</string>
|
||||
<string name="quick_action__language_switch__tooltip">Canvia l\'idioma</string>
|
||||
<string name="quick_action__settings" maxLength="12">Paràmetres</string>
|
||||
<string name="quick_action__settings__tooltip">Obre la configuració</string>
|
||||
<string name="quick_action__undo" maxLength="12">Desfés</string>
|
||||
<string name="quick_action__undo__tooltip">Desfà la darrera acció</string>
|
||||
<string name="quick_action__redo" maxLength="12">Refés</string>
|
||||
<string name="quick_action__redo__tooltip">Refà la darrera acció</string>
|
||||
<string name="quick_action__toggle_actions_overflow" maxLength="12">Més accions</string>
|
||||
<string name="quick_action__toggle_actions_overflow__tooltip">Mostra o amaga les accions addicionals</string>
|
||||
<string name="quick_action__toggle_incognito_mode" maxLength="12">Incògnit</string>
|
||||
<string name="quick_action__toggle_incognito_mode__tooltip">Passa al mode incògnit</string>
|
||||
<string name="quick_action__toggle_autocorrect" maxLength="12">Correc. auto</string>
|
||||
<string name="quick_action__toggle_autocorrect__tooltip">Habilita la correcció automàtica</string>
|
||||
<string name="quick_action__voice_input" maxLength="12">Entrada veu</string>
|
||||
<string name="quick_action__voice_input__tooltip" comment="IME stands for Input Method Editor and is indirectly equivalent to 'keyboard'.">Obre el proveïdor d\'entrada de veu</string>
|
||||
<string name="quick_action__one_handed_mode" maxLength="12">Amb una mà</string>
|
||||
<string name="quick_action__one_handed_mode__tooltip">Passa al mode d\'Amb una mà</string>
|
||||
<string name="quick_action__drag_marker" maxLength="12" comment="This action is only used as a placeholder in the actions editor drag and drop screen and only visible in debug mode">Arrossega</string>
|
||||
<string name="quick_action__drag_marker__tooltip" comment="This action is only used as a placeholder in the actions editor drag and drop screen and only visible in debug mode">Posició actual del cursor</string>
|
||||
<string name="quick_action__noop" maxLength="12" comment="Noop=no operation; this action is only used as a placeholder in the actions editor drag and drop screen">Cap</string>
|
||||
<string name="quick_action__noop__tooltip" comment="Noop=no operation; this action is only used as a placeholder in the actions editor drag and drop screen">Cap operació</string>
|
||||
<string name="quick_actions_overflow__customize_actions_button">Reorganitza les accions</string>
|
||||
<string name="quick_actions_editor__header">Personalitza l\'ordre de les accions</string>
|
||||
<string name="quick_actions_editor__subheader_sticky_action">Acció fixada ({n})</string>
|
||||
<string name="quick_actions_editor__subheader_dynamic_actions">Accions dinàmiques ({n})</string>
|
||||
<string name="quick_actions_editor__subheader_hidden_actions">Accions ocultes ({n})</string>
|
||||
<string name="select_subtype_panel__header">Escull un subtipus</string>
|
||||
<!-- Incognito mode strings -->
|
||||
<string name="incognito_mode__toast_after_enabled">Estàs en mode incògnit, en aquest mode\n\n{app_name} no aprendrà les paraules que entris</string>
|
||||
<string name="incognito_mode__toast_after_disabled">El mode incògnit ara està inhabilitat per defecte</string>
|
||||
<!-- Settings UI strings -->
|
||||
<string name="settings__title" comment="Title of Settings">Preferències</string>
|
||||
<string name="settings__preview_keyboard" comment="Hint for try your setup box">Prova la configuració</string>
|
||||
<string name="settings__help" comment="General label for help buttons in Settings">Ajuda</string>
|
||||
<string name="settings__default" comment="General string which is used when a preference has the default value set">Predefinit</string>
|
||||
<string name="settings__system_default" comment="General string which is used when a preference has the system default value set">Predefinit pel sistema</string>
|
||||
<string name="settings__default" comment="General string which is used when a preference has the default value set">Per defecte</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 screen">Us donem la benvinguda a {app_name}</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 a 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 a resoldre aquest problema.</string>
|
||||
<string name="settings__localization__title" comment="Title of languages and Layout screen">Llengües & Disposicions</string>
|
||||
<string name="settings__localization__display_language_names_in__label" comment="Label of Display language names in preference">Mostra els noms de les llengües en</string>
|
||||
<string name="settings__localization__display_keyboard_labels_in_subtype_language" comment="Label of Display keyboard labels in subtype language preference">Mostra les etiquetes del teclat en l\'idioma del subtipus</string>
|
||||
<string name="settings__localization__group_subtypes__label" comment="Label of subtypes group">Subtipus</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__language_pack_title" comment="Title of the language pack manager screen for managing installed and custom language packs">Gestiona els paquets de llengua instal·lats</string>
|
||||
@@ -70,26 +147,127 @@
|
||||
<string name="settings__localization__subtype_error_fields_no_value" comment="Error message shown in subtype editor if at least one field is set to '- select -' (means no value specified)">Almenys un camp no té cap valor seleccionat. Trieu un valor per al(s) camp(s).</string>
|
||||
<string name="settings__localization__subtype_error_layout_not_installed" comment="Error message shown in subtype list when a layout is not installed, where %s will be replaced by the layout ID">{layout_id} (no instal·lat)</string>
|
||||
<string name="settings__localization__group_layouts__label" comment="Label of layouts group">Dissenys</string>
|
||||
<string name="settings__localization__subtype_delete_confirmation_title" comment="Title of the subtype delete confirmation dialog">Confirmació de la supressió</string>
|
||||
<string name="settings__localization__subtype_delete_confirmation_warning" comment="Warning message in the confirmation dialog to confirm the user's intent to delete">Segur que vols suprimir aquest subtipus?</string>
|
||||
<string name="settings__theme__title" comment="Title of the Theme screen">Tema</string>
|
||||
<string name="pref__theme__mode__label" comment="Label of the theme mode preference">Mode del tema</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__theme_accent_color__label" comment="Label of accent color preference in Theme"> Color de ressalt (Temes Material You)
|
||||
</string>
|
||||
<string name="settings__theme_manager__title_manage" comment="Title of the theme manager screen for managing installed and custom themes">Gestiona els temes instal·lats</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 screen for day theme selection">Selecciona el tema del dia</string>
|
||||
<string name="settings__theme_manager__title_night" comment="Title of the theme manager screen for night theme selection">Selecciona el tema de nit</string>
|
||||
<string name="settings__theme_editor__fine_tune__title">Editor d\'ajusts precisos</string>
|
||||
<string name="settings__theme_editor__fine_tune__level">Nivell d\'edició</string>
|
||||
<string name="settings__theme_editor__fine_tune__color_representation">Representació dels colors</string>
|
||||
<string name="settings__theme_editor__fine_tune__display_kbd_after_dialogs">Mostra el teclat després dels diàlegs</string>
|
||||
<string name="settings__theme_editor__add_rule">Afegir norma</string>
|
||||
<string name="settings__theme_editor__edit_rule">Editar norma</string>
|
||||
<string name="settings__theme_editor__no_rules_defined">Aquest full d\'estil no té regles definides. Afegeix-hi una regla per començar a personalitzar-lo.</string>
|
||||
<string name="settings__theme_editor__rule_already_exists">Aquesta regla de full d\'estil ja ha estat definida.</string>
|
||||
<string name="settings__theme_editor__rule_name">Element / Anotació</string>
|
||||
<string name="settings__theme_editor__rule_codes">Codis de tecla de destinació</string>
|
||||
<string name="settings__theme_editor__rule_groups">Grups</string>
|
||||
<string name="settings__theme_editor__rule_modes">Modes de destinació (capes)</string>
|
||||
<string name="settings__theme_editor__rule_shift_states">Estats de destinació a majúscules</string>
|
||||
<string name="settings__theme_editor__rule_selectors">Selectors</string>
|
||||
<string name="settings__theme_editor__add_code">Afegeix un codi de tecla</string>
|
||||
<string name="settings__theme_editor__edit_code">Edita el codi de tecla</string>
|
||||
<string name="settings__theme_editor__no_codes_defined">Aplica la regla a tots els elements de destinació.</string>
|
||||
<string name="settings__theme_editor__no_enum_value_to_add_anymore">S\'han afegit tots els valors possibles.</string>
|
||||
<string name="settings__theme_editor__code_already_exists">Aquest codi de tecla ja ha estat definit.</string>
|
||||
<string name="settings__theme_editor__code_invalid">Aquest codi de tecla no és vàlid. Assegura\'t que el codi de tecla està dins del rang de {c_min} a {c_max} per als caràcters o {i_min} a {i_max} per als caràcters especials.</string>
|
||||
<string name="settings__theme_editor__code_help_text">Els enllaços següents t\'ajudaran a trobar el codi de tecla corresponent:</string>
|
||||
<string name="settings__theme_editor__code_placeholder">Codi</string>
|
||||
<string name="settings__theme_editor__code_recording_help_text">Per trobar el codi d\'una tecla usa el botó que hi ha al costat del camp d\'entrada de codis. Quan l\'habilites enregistrarà el següent toc de tecla i inserirà el codi al camp d\'entrada.</string>
|
||||
<string name="settings__theme_editor__code_recording_started">S\'ha iniciat l\'enregistrament del codi de tecla</string>
|
||||
<string name="settings__theme_editor__code_recording_stopped">S\'ha aturat l\'enregistrament del codi de tecla</string>
|
||||
<string name="settings__theme_editor__code_recording_requires_default_ime_floris">{app_name} ha de ser el teclat per defecte per enregistrar un codi de tecla</string>
|
||||
<string name="settings__theme_editor__code_recording_placeholder">Enregistrant…</string>
|
||||
<string name="settings__theme_editor__add_property">Afegir propietat</string>
|
||||
<string name="settings__theme_editor__edit_property">Editar propietat</string>
|
||||
<string name="settings__theme_editor__property_already_exists">Ja hi ha una propietat amb aquest nom en la regla actual.</string>
|
||||
<string name="settings__theme_editor__property_name">Nom de la propietat</string>
|
||||
<string name="settings__theme_editor__property_value">Valor de la propietat</string>
|
||||
<string name="settings__theme_editor__property_value_shape_apply_for_all_corners">Aplica-ho per a tots els cantons</string>
|
||||
<string name="settings__theme_editor__property_value_color_dialog_title">Edita la cadena de colors</string>
|
||||
<string name="settings__theme_editor__file_selector_dialog_title">Escull un fitxer</string>
|
||||
<string name="settings__theme_editor__file_selector_no_files_text">Encara no s\'ha afegit cap fitxer a aquesta extensió. Usa l\'acció {action_title} de la pantalla anterior per importar fitxers.</string>
|
||||
<string name="settings__theme_editor__component_meta_is_night_theme">És tema fosc</string>
|
||||
<string name="settings__theme_editor__component_meta_is_borderless">És sense vores</string>
|
||||
<string name="settings__theme_editor__component_meta_stylesheet_path">Camí al full d\'estil</string>
|
||||
<string name="settings__theme_editor__stylesheet_error_title">Error amb el full d\'estil</string>
|
||||
<string name="settings__theme_editor__stylesheet_error_description">{app_name} pot carregar el full d\'estil i afegir-hi les regles i esquemes que falten, o suprimir-ne les regles, propietats o valors no vàlids. Vols que {app_name} faci aquests canvis?</string>
|
||||
<string name="snygg__rule_annotation__defines">Variables</string>
|
||||
<string name="snygg__rule_annotation__defines_description">Defineix les variables dins d\'aquesta regla per reutilitzar els colors o les mides comunes en el teu full d\'estil.</string>
|
||||
<string name="snygg__rule_annotation__font">Fonts</string>
|
||||
<string name="snygg__rule_annotation__font_name">Nom de la font</string>
|
||||
<string name="snygg__rule_element__root">Arrel</string>
|
||||
<string name="snygg__rule_element__window">Finestra</string>
|
||||
<string name="snygg__rule_element__key">Tecla</string>
|
||||
<string name="snygg__rule_element__key_hint">Suggeriment de tecla</string>
|
||||
<string name="snygg__rule_element__key_popup_box">Tecla de la finestra emergent</string>
|
||||
<string name="snygg__rule_element__key_popup_element">Tecla de l\'element emergent</string>
|
||||
<string name="snygg__rule_element__key_popup_extended_indicator">Tecla de l\'indicador ampliat emergent</string>
|
||||
<string name="snygg__rule_element__clipboard_header">Capçalera del porta-retalls</string>
|
||||
<string name="snygg__rule_element__clipboard_header_button">Botó de la capçalera del porta-retalls</string>
|
||||
<string name="snygg__rule_element__clipboard_header_text">Text de la capçalera del porta-retalls</string>
|
||||
<string name="snygg__rule_element__clipboard_subheader">Subcapçalera del porta-retalls</string>
|
||||
<string name="snygg__rule_element__clipboard_content">Contingut del porta-retalls</string>
|
||||
<string name="snygg__rule_element__clipboard_item">Element del porta-retalls</string>
|
||||
<string name="snygg__rule_element__clipboard_item_popup">Element del porta-retalls emergent</string>
|
||||
<string name="snygg__rule_element__clipboard_item_actions">Accions de l\'element del porta-retalls</string>
|
||||
<string name="snygg__rule_element__clipboard_item_action">Acció de l\'element del porta-retalls</string>
|
||||
<string name="snygg__rule_element__clipboard_item_action_icon">Icona d\'acció de l\'element del porta-retalls</string>
|
||||
<string name="snygg__rule_element__clipboard_item_action_text">Text d\'acció de l\'element del porta-retalls</string>
|
||||
<string name="snygg__rule_element__clipboard_clear_all_dialog">Diàleg de supressió de tot el porta-retalls</string>
|
||||
<string name="snygg__rule_element__clipboard_clear_all_dialog_message">Missatge del diàleg de supressió de tot el porta-retalls</string>
|
||||
<string name="snygg__rule_element__clipboard_clear_all_dialog_buttons">Botons del diàleg de supressió de tot el porta-retalls</string>
|
||||
<string name="snygg__rule_element__clipboard_clear_all_dialog_button">Botó del diàleg de supressió de tot el porta-retalls</string>
|
||||
<string name="snygg__rule_element__clipboard_history_disabled_title">Títol de l\'historial del porta-retalls inhabilitat</string>
|
||||
<string name="snygg__rule_element__clipboard_history_disabled_message">Missatge de l\'historial del porta-retalls inhabilitat</string>
|
||||
<string name="snygg__rule_element__clipboard_history_disabled_button">Botó de l\'historial del porta-retalls inhabilitat</string>
|
||||
<string name="snygg__rule_element__clipboard_history_locked_title">Títol de l\'historial del porta-retalls bloquejat</string>
|
||||
<string name="snygg__rule_element__clipboard_history_locked_message">Missatge de l\'historial del porta-retalls bloquejat</string>
|
||||
<string name="snygg__rule_element__extracted_landscape_input_layout">Disposició d\'entrada en mode horitzontal</string>
|
||||
<string name="snygg__rule_element__extracted_landscape_input_field">Camp d\'entrada en mode horitzontal</string>
|
||||
<string name="snygg__rule_element__extracted_landscape_input_action">Acció d\'entrada en mode horitzontal</string>
|
||||
<string name="snygg__rule_element__glide_trail">Recorregut del gest</string>
|
||||
<string name="snygg__rule_element__incognito_mode_indicator">Indicador del mode incògnit</string>
|
||||
<string name="snygg__rule_element__inline_autofill_chip">Xip de compleció automàtica en línia</string>
|
||||
<string name="snygg__rule_element__media">Multimèdia</string>
|
||||
<string name="snygg__rule_element__media_emoji_subheader">Subcapçalera de l\'emoji multimèdia</string>
|
||||
<string name="snygg__rule_element__media_emoji_key">Tecla de l\'emoji multimèdia</string>
|
||||
<string name="snygg__rule_element__media_emoji_key_popup_box">Finestra emergent de la tecla de l\'emoji multimèdia</string>
|
||||
<string name="snygg__rule_element__media_emoji_key_popup_element">Element emergent de la tecla de l\'emoji multimèdia</string>
|
||||
<string name="snygg__rule_element__media_emoji_tab">Pestanya de l\'emoji multimèdia</string>
|
||||
<string name="snygg__rule_element__media_bottom_row">Fila inferior multimèdia</string>
|
||||
<string name="snygg__rule_element__media_bottom_row_button">Botó de la fila inferior multimèdia</string>
|
||||
<string name="snygg__rule_element__one_handed_panel">Tauler d\'Amb una mà</string>
|
||||
<string name="snygg__rule_element__one_handed_panel_button">Botó del tauler d\'Amb una mà</string>
|
||||
<string name="snygg__rule_element__smartbar">Barra intel·ligent</string>
|
||||
<string name="snygg__rule_element__smartbar_shared_actions_row">Fila d\'accions compartides de la barra intel·ligent</string>
|
||||
<string name="snygg__rule_element__smartbar_shared_actions_toggle">Habilita o no les accions compartides de la barra intel·ligent</string>
|
||||
<string name="snygg__rule_element__smartbar_extended_actions_row">Fila d\'accions ampliada de la barra intel·ligent</string>
|
||||
<string name="snygg__rule_element__smartbar_extended_actions_toggle">Habilita o no les accions ampliades de la barra intel·ligent</string>
|
||||
<string name="snygg__rule_element__smartbar_action_key">Tecla d\'acció de la barra intel·ligent</string>
|
||||
<string name="snygg__rule_element__smartbar_action_tile">Mosaic d\'acció de la barra intel·ligent</string>
|
||||
<string name="snygg__rule_element__smartbar_action_tile_icon">Icona del mosaic d\'acció de la barra intel·ligent</string>
|
||||
<string name="snygg__rule_element__smartbar_action_tile_text">Text del mosaic d\'acció de la barra intel·ligent</string>
|
||||
<string name="snygg__rule_element__smartbar_actions_overflow">Desbordament de les accions de la barra intel·ligent</string>
|
||||
<string name="snygg__rule_element__smartbar_actions_overflow_customize_button">Botó de personalització del desbordament de les accions de la barra intel·ligent</string>
|
||||
<string name="snygg__rule_element__smartbar_actions_editor">Editor de les accions de la barra intel·ligent</string>
|
||||
<string name="snygg__rule_element__smartbar_actions_editor_header">Capçalera de l\'editor de les accions de la barra intel·ligent</string>
|
||||
<string name="snygg__rule_element__smartbar_actions_editor_header_button">Botó de la capçalera de l\'editor de les accions de la barra intel·ligent</string>
|
||||
<string name="snygg__rule_element__smartbar_actions_editor_subheader">Subcapçalera de l\'editor de les accions de la barra intel·ligent</string>
|
||||
<string name="snygg__rule_element__smartbar_actions_editor_tile_grid">Graella del mosaic de l\'editor de les accions de la barra intel·ligent</string>
|
||||
<string name="snygg__rule_element__smartbar_actions_editor_tile">Mosaic de l\'editor de les accions de la barra intel·ligent</string>
|
||||
<string name="snygg__rule_selector__pressed">Premut</string>
|
||||
<string name="snygg__rule_selector__focus">Enfocat</string>
|
||||
<string name="snygg__rule_selector__disabled">Desactivat</string>
|
||||
@@ -104,59 +282,476 @@
|
||||
<string name="settings__input_feedback__title" comment="Title of Input Feedback screen">Sons & vibracions</string>
|
||||
<string name="pref__input_feedback__group_audio__label" comment="Preference group title">Retroacció hàptica / Sons</string>
|
||||
<string name="pref__input_feedback__audio_enabled__label" comment="Preference title">Habilita la retroacció hàptica</string>
|
||||
<string name="pref__input_feedback__audio_enabled__summary_disabled" comment="Preference summary">Sense so per als esdeveniments d\'entrada, independentment de la configuració del sistema</string>
|
||||
<string name="pref__input_feedback__audio_volume__label" comment="Preference title">Volum per als esdeveniments d\'entrada</string>
|
||||
<string name="pref__input_feedback__audio_feat_key_press__label" comment="Preference title">Sons en pitjar la tecla</string>
|
||||
<string name="pref__input_feedback__audio_feat_key_long_press__label" comment="Preference title">Sons de toc llarg de la tecla</string>
|
||||
<string name="pref__input_feedback__audio_feat_key_repeated_action__label" comment="Preference title">Sons d\'acció repetida de la tecla</string>
|
||||
<string name="pref__input_feedback__audio_feat_gesture_swipe__label" comment="Preference title">Sons del gest arrossegar</string>
|
||||
<string name="pref__input_feedback__audio_feat_gesture_moving_swipe__label" comment="Preference title">Sons en fer el gest d\'arrossegar</string>
|
||||
<string name="pref__input_feedback__group_haptic__label" comment="Preference group title">Resposta tàctil / Vibració</string>
|
||||
<string name="pref__input_feedback__haptic_enabled__label" comment="Preference title">Habilita la resposta tàctil</string>
|
||||
<string name="pref__input_feedback__haptic_enabled__summary_disabled" comment="Preference summary">Sense vibració per als esdeveniments d\'entrada, independentment de la configuració del sistema</string>
|
||||
<string name="pref__input_feedback__haptic_vibration_mode__label" comment="Preference title">Mode de vibració</string>
|
||||
<string name="pref__input_feedback__haptic_vibration_duration__label" comment="Preference title">Durada de la vibració</string>
|
||||
<string name="pref__input_feedback__haptic_vibration_strength__label" comment="Preference title">Intensitat de la vibració</string>
|
||||
<string name="pref__input_feedback__haptic_vibration_strength__summary_no_vibrator" comment="Preference summary">A aquesta funció li cal un maquinari de vibració, però sembla que el vostre dispositiu no en té cap</string>
|
||||
<string name="pref__input_feedback__haptic_vibration_strength__summary_no_amplitude_ctrl" comment="Preference summary">A aquesta funció li cal un maquinari de suport de control d\'amplificació, però sembla que el vostre dispositiu no en té cap</string>
|
||||
<string name="pref__input_feedback__haptic_feat_key_press__label" comment="Preference title">Vibració en pitjar la tecla</string>
|
||||
<string name="pref__input_feedback__haptic_feat_key_long_press__label" comment="Preference title">Vibració de toc llarg de la tecla</string>
|
||||
<string name="pref__input_feedback__haptic_feat_key_repeated_action__label" comment="Preference title">Vibració d\'acció repetida de la tecla</string>
|
||||
<string name="pref__input_feedback__haptic_feat_gesture_swipe__label" comment="Preference title">Vibració del gest arrossegar</string>
|
||||
<string name="pref__input_feedback__haptic_feat_gesture_moving_swipe__label" comment="Preference title">Vibració en fer el gest d\'arrossegar</string>
|
||||
<string name="pref__input_feedback__any_feat_key_press__summary" comment="Preference summary">p. e. tecles, botons, pestanyes d\'emojis</string>
|
||||
<string name="pref__input_feedback__any_feat_key_long_press__summary" comment="Preference summary">p. e. menú emergent</string>
|
||||
<string name="pref__input_feedback__any_feat_key_repeated_action__summary" comment="Preference summary">p. e. tecla de supressió</string>
|
||||
<string name="pref__input_feedback__any_feat_gesture_swipe__summary" comment="Preference summary">No implementat</string>
|
||||
<string name="pref__input_feedback__any_feat_gesture_moving_swipe__summary" comment="Preference summary">p. e. el control d\'arrossegament del cursor</string>
|
||||
<string name="settings__keyboard__title" comment="Title of Keyboard preferences screen">Teclat</string>
|
||||
<string name="pref__keyboard__number_row__label" comment="Preference title">Número de fila</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__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__label" comment="Preference title">Acció de la clau d\'utilitat</string>
|
||||
<string name="pref__keyboard__number_row__label" comment="Preference title">Fila amb els números</string>
|
||||
<string name="pref__keyboard__number_row__summary" comment="Preference summary">Mostra una fila amb els números a la part superior del teclat</string>
|
||||
<string name="pref__keyboard__hinted_number_row_mode__label" comment="Preference title">Números suggerits a les tecles</string>
|
||||
<string name="pref__keyboard__hinted_symbols_mode__label" comment="Preference title">Símbols suggerits a les tecles</string>
|
||||
<string name="pref__keyboard__utility_key_enabled__label" comment="Preference title">Mostra la tecla d\'utilitat</string>
|
||||
<string name="pref__keyboard__utility_key_enabled__summary" comment="Preference summary">Mostra una tecla d\'utilitat configurable al costat de la barra d\'espai</string>
|
||||
<string name="pref__keyboard__utility_key_action__label" comment="Preference title">Acció de la tecla d\'utilitat</string>
|
||||
<string name="pref__keyboard__space_bar_mode__label" comment="Preference title">Etiqueta de la barra espaiadora</string>
|
||||
<string name="pref__keyboard__capitalization_behavior__label" comment="Preference title">Comportament de les majúscules</string>
|
||||
<string name="pref__keyboard__font_size_multiplier__label" comment="Preference title">Multiplicador de la mida de la font</string>
|
||||
<string name="pref__keyboard__group_layout__label" comment="Preference group title">Disposició</string>
|
||||
<string name="pref__keyboard__one_handed_mode__label" comment="Preference title">Mode d\'una sola mà</string>
|
||||
<string name="pref__keyboard__one_handed_mode_scale_factor__label" comment="Preference title">Amplada del teclat en mode una sola mà</string>
|
||||
<string name="pref__keyboard__landscape_input_ui_mode__label" comment="Preference value">Entrada a pantalla completa apaïsada</string>
|
||||
<string name="pref__keyboard__height_factor__label" comment="Preference title">Alçada del teclat</string>
|
||||
<string name="pref__keyboard__key_spacing__label" comment="Preference title">Espai entre tecles</string>
|
||||
<string name="pref__keyboard__bottom_offset__label" comment="Preference title">Espai a sota</string>
|
||||
<string name="pref__keyboard__group_keypress__label" comment="Preference group title">Tecla premuda</string>
|
||||
<string name="pref__keyboard__popup_enabled__label" comment="Preference title">Visibilitat de les tecles emergents</string>
|
||||
<string name="pref__keyboard__popup_enabled__summary" comment="Preference summary">Mostra una finestra emergent quan premeu una tecla</string>
|
||||
<string name="pref__keyboard__merge_hint_popups_enabled__label" comment="Preference title">Els accents inclouen emergents de símbols</string>
|
||||
<string name="pref__keyboard__merge_hint_popups_enabled__summary" comment="Preference summary">Afegeix emergents de símbols als accents per defecte del teclat</string>
|
||||
<string name="pref__keyboard__long_press_delay__label" comment="Preference title">Retard de la premuda de tecla llarga</string>
|
||||
<string name="pref__keyboard__space_bar_switches_to_characters__label" comment="Preference title">La barra espaiadora canvia a caràcters</string>
|
||||
<string name="pref__keyboard__space_bar_switches_to_characters__summary" comment="Preference summary">Torna automàticament a caràcters quan és a símbols o números</string>
|
||||
<string name="pref__keyboard__incognito_indicator__label" comment="Preference title">Indicador d\'incògnit</string>
|
||||
<!-- Smartbar strings -->
|
||||
<string name="settings__smartbar__title" comment="Title of Smartbar screen">Barra intel·ligent</string>
|
||||
<string name="pref__smartbar__enabled__label" comment="Preference title">Habilita la barra intel·ligent</string>
|
||||
<string name="pref__smartbar__enabled__summary" comment="Preference summary">Es mostrarà a la part superior del teclat</string>
|
||||
<string name="pref__smartbar__layout__label" comment="Preference title">Disposició</string>
|
||||
<string name="pref__smartbar__group_layout_specific__label" comment="Preference group title">Opcions específiques de disposició</string>
|
||||
<string name="pref__smartbar__flip_toggles__label" comment="Preference title">Commuta els botons</string>
|
||||
<string name="pref__smartbar__flip_toggles__summary" comment="Preference summary">Commuta la posició dels botons a la fila d\'accions</string>
|
||||
<string name="pref__smartbar__shared_actions_auto_expand_collapse__label" comment="Preference title">Desplega / Replega automàticament</string>
|
||||
<string name="pref__smartbar__shared_actions_auto_expand_collapse__summary" comment="Preference summary">Desplega / Replega automàticament la fila d\'accions en relació amb l\'estat actual</string>
|
||||
<string name="pref__smartbar__extended_actions_placement__label" comment="Preference title">Ubicació de la fila d\'accions</string>
|
||||
<!-- Typing strings -->
|
||||
<string name="settings__typing__title" comment="Title of Typing screen">Escriptura</string>
|
||||
<string name="pref__suggestion__title" comment="Preference group title">Suggeriments</string>
|
||||
<string name="pref__suggestion__enabled__label" comment="Preference title">Mostra suggeriments</string>
|
||||
<string name="pref__suggestion__enabled__summary" comment="Preference summary">Mostra suggeriments mentre escrius</string>
|
||||
<string name="pref__suggestion__display_mode__label" comment="Preference title">Mode de visualització de suggeriments</string>
|
||||
<string name="pref__suggestion__block_possibly_offensive__label" comment="Preference title">Bloqueja les paraules potencialment ofensives</string>
|
||||
<string name="pref__suggestion__api30_inline_suggestions_enabled__summary" comment="Preference summary">Mostra els suggeriments en línia proveïts pels serveis d\'emplenament automàtic</string>
|
||||
<string name="pref__suggestion__incognito_mode__label" comment="Label of Incognito mode preference in Typing">Mode incògnit</string>
|
||||
<string name="pref__correction__title" comment="Preference group title">Correccions</string>
|
||||
<string name="pref__correction__auto_capitalization__label" comment="Preference title">Majúscules automàtiques</string>
|
||||
<string name="pref__correction__auto_capitalization__summary" comment="Preference summary">Posa en majúscula les paraules en base al context d\'entrada actual</string>
|
||||
<string name="pref__correction__auto_space_punctuation__label" comment="Preference title">Espaiat automàtic després de punt</string>
|
||||
<string name="pref__correction__auto_space_punctuation__summary" comment="Preference summary">Insereix automàticament un espai després de posar un punt</string>
|
||||
<string name="pref__correction__remember_caps_lock_state__label" comment="Preference title">Recorda l\'estat de bloqueig de les majúscules</string>
|
||||
<string name="pref__correction__remember_caps_lock_state__summary" comment="Preference summary">Es mantindrà el bloqueig de les majúscules en moure\'s a un altre camp de text</string>
|
||||
<string name="pref__correction__double_space_period__label" comment="Preference title">Doble espai final de frase</string>
|
||||
<string name="pref__correction__double_space_period__summary" comment="Preference summary">Si toques dues vegades la barra espaiadora posa un punt i un espai</string>
|
||||
<string name="pref__spelling__title" comment="Preference group title">Ortografia</string>
|
||||
<string name="pref__spelling__active_spellchecker__summary_disabled">Inhabilitada a nivell sistema. No es mostraran línies vermelles al text per a les paraules incorrectes. Toca per canviar-ho.</string>
|
||||
<string name="pref__spelling__active_spellchecker__summary_none">No s\'ha habilitat cap servei de correcció ortogràfica. Toca per canviar-ho.</string>
|
||||
<string name="pref__spelling__language_mode__label" comment="Label of Language mode pref">Idiomes</string>
|
||||
<string name="pref__spelling__use_contacts__label" comment="Label of Use contact list pref">Usa els noms dels contactes</string>
|
||||
<string name="pref__spelling__use_contacts__summary" comment="Summary of Use contact list pref">Cerca els noms a la teva llista de contactes</string>
|
||||
<string name="pref__spelling__use_udm_entries__label" comment="Label of Use user dictionary entries pref">Usa les entrades del diccionari d\'usuari</string>
|
||||
<string name="pref__spelling__use_udm_entries__summary" comment="Summary of Use user dictionary entries pref">Cerca a les entrades del diccionari d\'usuari</string>
|
||||
<string name="settings__dictionary__title" comment="Title of the User dictionaries screen">Diccionaris d\'usuari</string>
|
||||
<string name="pref__dictionary__enable_system_user_dictionary__label" comment="Preference title">Habilita el diccionari d\'usuari del sistema</string>
|
||||
<string name="pref__dictionary__enable_system_user_dictionary__summary" comment="Preference summary">Suggereix paraules emmagatzemades al diccionari d\'usuari del sistema</string>
|
||||
<string name="pref__dictionary__manage_system_user_dictionary__label" comment="Preference title">Gestiona el diccionari d\'usuari del sistema</string>
|
||||
<string name="pref__dictionary__manage_system_user_dictionary__summary" comment="Preference summary">Afegeix, visualitza i suprimeix entrades per al diccionari d\'usuari del sistema</string>
|
||||
<string name="pref__dictionary__enable_internal_user_dictionary__label" comment="Preference title">Habilita el diccionari intern d\'usuari</string>
|
||||
<string name="pref__dictionary__enable_internal_user_dictionary__summary" comment="Preference summary">Suggereix les paraules emmagatzemades al diccionari intern d\'usuari</string>
|
||||
<string name="pref__dictionary__manage_floris_user_dictionary__label" comment="Preference title">Gestiona el diccionari intern d\'usuari</string>
|
||||
<string name="pref__dictionary__manage_floris_user_dictionary__summary" comment="Preference summary">Afegeix, visualitza i suprimeix entrades per al diccionari intern d\'usuari</string>
|
||||
<string name="settings__udm__title_floris" comment="Title of the User Dictionary Manager activity for internal">Diccionari intern d\'usuari</string>
|
||||
<string name="settings__udm__title_system" comment="Title of the User Dictionary Manager activity for system">Diccionari d\'usuari del sistema</string>
|
||||
<string name="settings__udm__no_words_in_dictionary" comment="String to show if no words are present in the dictionary">Aquest diccionari d\'usuari no conté cap paraula.</string>
|
||||
<string name="settings__udm__word_summary_freq" comment="Summary label for a word entry. The decimal placeholder inserts the frequency for the word it summarizes.">Freqüència: {freq}</string>
|
||||
<string name="settings__udm__word_summary_freq_shortcut" comment="Summary label for a word entry. The first placeholder inserts the frequency for the word it summarizes, the second placeholder the shortcut defined.">Freqüència: {freq} | Drecera: {shortcut}</string>
|
||||
<string name="settings__udm__all_languages" comment="Label of the For all languages entry in the language list">Per a tots els idiomes</string>
|
||||
<string name="settings__udm__open_system_manager_ui" comment="Label of the Open system manager UI menu option">Obre la interfície d\'usuari de l\'administrador del sistema</string>
|
||||
<string name="settings__udm__dictionary_import_success" comment="Message for dictionary import success">El diccionari d\'usuari s\'ha importat correctament!</string>
|
||||
<string name="settings__udm__dictionary_export_success" comment="Message for dictionary export success">El diccionari d\'usuari s\'ha exportat correctament!</string>
|
||||
<string name="settings__udm__dialog__title_add" comment="Label for the title (when in adding mode) in the user dictionary add/edit dialog">Afegeix una paraula</string>
|
||||
<string name="settings__udm__dialog__title_edit" comment="Label for the title (when in editing mode) in the user dictionary add/edit dialog">Edita la paraula</string>
|
||||
<string name="settings__udm__dialog__word_label" comment="Label for the word in the user dictionary add/edit dialog">Paraula</string>
|
||||
<string name="settings__udm__dialog__word_error_empty" comment="Error label for the word in the user dictionary add/edit dialog">Introdueix una paraula</string>
|
||||
<string name="settings__udm__dialog__word_error_invalid" comment="Error label for the word in the user dictionary add/edit dialog">Introdueix una paraula que coincideixi amb {regex}</string>
|
||||
<string name="settings__udm__dialog__freq_label" comment="Label for the frequency in the user dictionary add/edit dialog. The two decimal placeholders are the minimum and maximum frequency, both inclusive.">Freqüència (entre {f_min} i {f_max})</string>
|
||||
<string name="settings__udm__dialog__freq_error_empty" comment="Error label for the frequency in the user dictionary add/edit dialog">Introdueix un valor de freqüència</string>
|
||||
<string name="settings__udm__dialog__freq_error_invalid" comment="Error label for the frequency in the user dictionary add/edit dialog">Introdueix una xifra vàlida entre els límits especificats</string>
|
||||
<string name="settings__udm__dialog__shortcut_label" comment="Label for the shortcut in the user dictionary add/edit dialog">Drecera (opcional)</string>
|
||||
<string name="settings__udm__dialog__shortcut_error_invalid" comment="Error label for the shortcut in the user dictionary add/edit dialog">Introdueix una drecera que coincideixi amb {regex}</string>
|
||||
<string name="settings__udm__dialog__locale_label" comment="Label for the language code in the user dictionary add/edit dialog">Codi d\'idioma (opcional)</string>
|
||||
<string name="settings__udm__dialog__locale_error_invalid" comment="Error label for the language code in the user dictionary add/edit dialog">Aquest codi d\'idioma no té la sintaxi esperada. El codi ha de ser només un idioma (com ara ca), un idioma i país (com ara ca_AD) o un idioma, país i script (com ara ca_AD-script).</string>
|
||||
<string name="settings__gestures__title" comment="Title of Gestures screen">Gestos & Escriure lliscant</string>
|
||||
<string name="pref__glide__title" comment="Preference group title">Escriure lliscant</string>
|
||||
<string name="pref__glide__enabled__label" comment="Preference title">Habilita escriure lliscant</string>
|
||||
<string name="pref__glide__enabled__summary" comment="Preference summary">Escriu una paraula fent lliscar el dit sobre les lletres que la componen</string>
|
||||
<string name="pref__glide__show_trail__label" comment="Preference title">Mostra el recorregut del gest</string>
|
||||
<string name="pref__glide__show_trail__summary" comment="Preference summary">Desapareixerà després de cada paraula</string>
|
||||
<string name="pref__glide_trail_fade_duration">Temps d\'esvaniment del recorregut del gest</string>
|
||||
<string name="pref__glide_preview_refresh_delay">Retard de l\'actualització de la vista prèvia</string>
|
||||
<string name="pref__glide__show_preview">Mostra la vista prèvia mentre escrius lliscant</string>
|
||||
<string name="pref__glide__immediate_backspace_deletes_word__label">Suprimeix sempre la paraula</string>
|
||||
<string name="pref__glide__immediate_backspace_deletes_word__summary">En prémer \"suprimeix\" just després d\'un lliscament s\'esborra tota la paraula</string>
|
||||
<string name="pref__gestures__general_title" comment="Preference group title">Gestos generals</string>
|
||||
<string name="pref__gestures__space_bar_title" comment="Preference group title">Gestos de la barra espaiadora</string>
|
||||
<string name="pref__gestures__other_title" comment="Preference group title">Altres gestos / Límits dels gestos</string>
|
||||
<string name="pref__gestures__swipe_up__label" comment="Preference title">En lliscar cap amunt</string>
|
||||
<string name="pref__gestures__swipe_down__label" comment="Preference title">En lliscar cap avall</string>
|
||||
<string name="pref__gestures__swipe_left__label" comment="Preference title">En lliscar cap a l\'esquerra</string>
|
||||
<string name="pref__gestures__swipe_right__label" comment="Preference title">En lliscar cap a la dreta</string>
|
||||
<string name="pref__gestures__space_bar_swipe_up__label" comment="Preference title">Lliscar cap amunt a la barra espaiadora</string>
|
||||
<string name="pref__gestures__space_bar_swipe_left__label" comment="Preference title">Lliscar cap a l\'esquerra a la barra espaiadora</string>
|
||||
<string name="pref__gestures__space_bar_swipe_right__label" comment="Preference title">Lliscar cap a la dreta a la barra espaiadora</string>
|
||||
<string name="pref__gestures__space_bar_long_press__label" comment="Preference title">Toc llarg a la barra espaiadora</string>
|
||||
<string name="pref__gestures__delete_key_swipe_left__label" comment="Preference title">Lliscar cap a l\'esquerra a la tecla suprimeix</string>
|
||||
<string name="pref__gestures__delete_key_long_press__label" comment="Preference title">Toc llarg a la tecla suprimeix</string>
|
||||
<string name="pref__gestures__swipe_velocity_threshold__label" comment="Preference title">Límit de velocitat del lliscament</string>
|
||||
<string name="pref__gestures__swipe_distance_threshold__label" comment="Preference title">Límit de distància del lliscament</string>
|
||||
<string name="settings__other__title" comment="Title of Other settings">Altres</string>
|
||||
<string name="pref__other__settings_theme__label" comment="Label of Settings theme preference in Other">Paràmetres del tema</string>
|
||||
<string name="pref__other__settings_theme__auto_amoled" comment="Possible value of Settings theme preference in Other">Per defecte del sistema (AMOLED)</string>
|
||||
<string name="pref__other__settings_theme__light" comment="Possible value of Settings theme preference in Other">Clar</string>
|
||||
<string name="pref__other__settings_theme__dark" comment="Possible value of Settings theme preference in Other">Fosc</string>
|
||||
<string name="pref__other__settings_theme__amoled_dark" comment="Possible value of Settings theme preference in Other">AMOLED fosc</string>
|
||||
<string name="pref__other__settings_accent_color__label" comment="Label of accent color preference in Other"> Paràmetres de color de ressalt
|
||||
</string>
|
||||
<string name="pref__other__settings_language__label" comment="Label of Settings language preference in Other">Paràmetres d\'idioma</string>
|
||||
<string name="pref__other__show_app_icon__label" comment="Label of Show app icon preference in Other">Mostra la icona de l\'aplicació al llançador</string>
|
||||
<string name="pref__other__show_app_icon__summary_atleast_q" comment="Summary of Show app icon preference in Other for Android 10+">Habilitat sempre a Android 10 i posteriors a conseqüència de les restriccions del sistema</string>
|
||||
<!-- About UI strings -->
|
||||
<string name="about__title" comment="Title of About activity">Quant a</string>
|
||||
<string name="about__app_icon_content_description" comment="Content description of app icon in About">Icona de l\'aplicació de FlorisBoard</string>
|
||||
<string name="about__view_licenses" comment="Label of View licenses button in About">Llicències de codi obert</string>
|
||||
<string name="about__view_privacy_policy" comment="Label of View privacy policy button in About">Política de privacitat</string>
|
||||
<string name="about__view_source_code" comment="Label of View source code button in About">Codi font</string>
|
||||
<string name="about__license__title" comment="Title of Open-source licenses dialog">Llicències de codi obert</string>
|
||||
<string name="about__version__title" comment="Preference title">Versió</string>
|
||||
<string name="about__version_copied__title" comment="Title of the toast for copying the version string">Versió copiada al porta-retalls</string>
|
||||
<string name="about__version_copied__error" comment="Title of the error toast for copying the version string">Alguna cosa ha anat malament: {error_message}</string>
|
||||
<string name="about__changelog__title" comment="Preference title">Registre de canvis</string>
|
||||
<string name="about__changelog__summary" comment="Preference summary">Novetats</string>
|
||||
<string name="about__repository__title" comment="Preference title">Repositori (GitHub)</string>
|
||||
<string name="about__repository__summary" comment="Preference summary">Codi font, debats, incidències i informació</string>
|
||||
<string name="about__privacy_policy__title" comment="Preference title">Política de privacitat</string>
|
||||
<string name="about__privacy_policy__summary" comment="Preference summary">La política de privacitat per a aquest projecte</string>
|
||||
<string name="about__project_license__title" comment="Preference title">Llicència del projecte</string>
|
||||
<string name="about__project_license__summary" comment="Preference summary">FlorisBoard està sota la llicència de {license_name}</string>
|
||||
<string name="about__project_license__error_license_text_failed" comment="Error text for license text loading failure">Error: No s\'ha pogut carregar la llicència.\n-> Motiu: {error_message}</string>
|
||||
<string name="about__project_license__error_reason_asset_manager_null" comment="Error text if asset manager is null">La referència al gestor de recursos és nul·la</string>
|
||||
<string name="about__third_party_licenses__title" comment="Preference title">Llicències de tercers</string>
|
||||
<string name="about__third_party_licenses__summary" comment="Preference summary">Llicències de les biblioteques de tercers incloses en aquesta aplicació</string>
|
||||
<!-- Setup UI strings -->
|
||||
<string name="setup__title" comment="Title of Setup">Benvinguts!</string>
|
||||
<string name="setup__intro_message" comment="Short intro message welcoming new users">Gràcies per usar {app_name}! Aquesta configuració ràpida t\'acompanyarà en els passos necessaris per poder usar {app_name} al teu dispositiu.</string>
|
||||
<string name="setup__footer__privacy_policy" comment="Privacy policy label for URL">Política de privacitat</string>
|
||||
<string name="setup__footer__repository" comment="Repository label for URL">Repositori</string>
|
||||
<string name="setup__enable_ime__title">Habilita {app_name}</string>
|
||||
<string name="setup__enable_ime__description">Android requereix que cada teclat personalitzat s\'habiliti per separat abans de poder usar-lo. Obre els paràmetres de <i>Idioma i entrada</i> a Sistema i allà habilita \"{app_name}\".</string>
|
||||
<string name="setup__enable_ime__open_settings_btn">Obre els paràmetres del sistema</string>
|
||||
<string name="setup__select_ime__title">Selecciona {app_name}</string>
|
||||
<string name="setup__select_ime__description">{app_name} s\'ha habilitat al sistema. Per usar-lo canvia a {app_name} al diàleg de selecció de mètode d\'entrada!</string>
|
||||
<string name="setup__select_ime__switch_keyboard_btn">Canvia el teclat</string>
|
||||
<string name="setup__grant_notification_permission__title">Permet les notificacions d\'informes d\'errors</string>
|
||||
<string name="setup__grant_notification_permission__description">Des d\'Android 13 i posteriors les aplicacions han de demanar permís per
|
||||
enviar notificacions. FlorisBoard només en fa ús per obrir una pantalla d\'informe d\'error en cas de fallada.
|
||||
Aquest permís es pot modificar en qualsevol moment als paràmetres del sistema.
|
||||
</string>
|
||||
<string name="setup__grant_notification_permission__btn">Concedeix permís</string>
|
||||
<string name="setup__finish_up__title">Finalitza</string>
|
||||
<string name="setup__finish_up__description_p1">{app_name} s\'habilitat al sistema i està preparat perquè el personalitzis.</string>
|
||||
<string name="setup__finish_up__description_p2">Si trobes cap incidència, error, fallada o simplement vols suggerir alguna cosa, només has d\'anar al repositori del projecte des de la pantalla Quant a!</string>
|
||||
<string name="setup__finish_up__finish_btn">Comença a personalitzar</string>
|
||||
<!-- Physical keyboard -->
|
||||
<!-- Back up & Restore -->
|
||||
<string name="backup_and_restore__title">Còpia de seguretat & Restauració</string>
|
||||
<string name="backup_and_restore__back_up__title">Còpia de seguretat de les dades</string>
|
||||
<string name="backup_and_restore__back_up__summary">Genera un fitxer de còpia de seguretat amb les preferències i les personalitzacions</string>
|
||||
<string name="backup_and_restore__back_up__destination">Tria el camí per a la còpia de seguretat</string>
|
||||
<string name="backup_and_restore__back_up__destination_file_sys">Sistema de fitxers local</string>
|
||||
<string name="backup_and_restore__back_up__destination_share_intent">Aplicació de tercers via el menú compartir</string>
|
||||
<string name="backup_and_restore__back_up__files">Tria de què fer còpia de seguretat</string>
|
||||
<string name="backup_and_restore__back_up__files_jetpref_datastore">Preferències</string>
|
||||
<string name="backup_and_restore__back_up__files_ime_keyboard">Extensions del teclat</string>
|
||||
<string name="backup_and_restore__back_up__files_ime_spelling">Extensions de correcció ortogràfica / diccionaris</string>
|
||||
<string name="backup_and_restore__back_up__files_ime_theme">Extensions del tema</string>
|
||||
<string name="backup_and_restore__back_up__files_clipboard_history">Historial del porta-retalls</string>
|
||||
<string name="backup_and_restore__back_up__files_clipboard_history__clipboard_text_items">Entrades de text</string>
|
||||
<string name="backup_and_restore__back_up__files_clipboard_history__clipboard_image_items">Imatges</string>
|
||||
<string name="backup_and_restore__back_up__files_clipboard_history__clipboard_video_items">Vídeos</string>
|
||||
<string name="backup_and_restore__back_up__success">El fitxer de còpia de seguretat s\'ha exportat correctament!</string>
|
||||
<string name="backup_and_restore__back_up__failure">Ha fallat en exportar el fitxer de còpia de seguretat: {error_message}</string>
|
||||
<string name="backup_and_restore__restore__title">Restauració de les dades</string>
|
||||
<string name="backup_and_restore__restore__summary">Restaura les preferències i personalitzacions des d\'un fitxer de còpia de seguretat</string>
|
||||
<string name="backup_and_restore__restore__files">Tria què cal restaurar</string>
|
||||
<string name="backup_and_restore__restore__metadata">Fitxer de còpia de seguretat seleccionat</string>
|
||||
<string name="backup_and_restore__restore__metadata_warn_different_version">Aquest fitxer de còpia de seguretat ha estat generat per una versió diferent a l\'actual que, en general, hauria de ser compatible. Tingues present que hi pot haver algunes petites incidències o que algunes preferències poden no ser transferides correctament a conseqüència de diferències en les característiques.</string>
|
||||
<string name="backup_and_restore__restore__metadata_warn_different_vendor">Aquest fitxer de còpia de seguretat ha estat generat per una aplicació de tercers que, en general, no és compatible. Hi pot haver una pèrdua de dades, si ho restaures serà sota la teva responsabilitat!</string>
|
||||
<string name="backup_and_restore__restore__metadata_error_invalid_metadata">Aquest fitxer de còpia de seguretat conté metadades no vàlides. O està corromput o ha estat mal modificat. No es pot fer una restauració des d\'aquest fitxer, tria\'n un altre.</string>
|
||||
<string name="backup_and_restore__restore__metadata_error_nothing_to_restore">Aquest fitxer de còpia de seguretat no conté res per restaurar, tria\'n un altre.</string>
|
||||
<string name="backup_and_restore__restore__mode">Mode de restauració</string>
|
||||
<string name="backup_and_restore__restore__mode_merge">Combina-ho amb les dades actuals</string>
|
||||
<string name="backup_and_restore__restore__mode_erase_and_overwrite">Suprimeix o sobreescriu les dades actuals</string>
|
||||
<string name="backup_and_restore__restore__success">Les dades s\'han restaurat correctament!</string>
|
||||
<string name="backup_and_restore__restore__failure">Ha fallat en restaurar les dades: {error_message}</string>
|
||||
<!-- Crash Dialog strings -->
|
||||
<string name="crash_dialog__title" comment="Title of crash dialog">Informe d\'errors de FlorisBoard</string>
|
||||
<string name="crash_dialog__description" comment="Description of crash dialog">Disculpa les molèsties, però FlorisBoard ha fallat a conseqüència d\'un error inesperat.</string>
|
||||
<string name="crash_dialog__report_instructions" comment="Issue tracker report instructions for the crash dialog. The %s placeholder is the name of the crash report template and always in English/LTR.">Si vols informar d\'aquest error, mira\'t primer si ja s\'ha informat al rastrejador d\'incidències de GitHub.\nSi no, copia el registre de l\'error i obre una incidència nova. Usa la plantilla %s i emplena-la amb la descripció, els passos per reproduir-lo i enganxa el registre d\'error generat al final. Això ens ajuda a millorar FlorisBoard i fer-lo més estable per a tothom. Gràcies!</string>
|
||||
<string name="crash_dialog__copy_to_clipboard" comment="Label of Copy to clipboard button in crash dialog">Copia al porta-retalls del sistema</string>
|
||||
<string name="crash_dialog__copy_to_clipboard_success" comment="Label of Copy to clipboard success message in crash dialog">S\'ha copiat al porta-retalls del sistema</string>
|
||||
<string name="crash_dialog__copy_to_clipboard_failure" comment="Label of Copy to clipboard failure message in crash dialog">No es pot copiar al porta-retalls del sistema: No s\'ha trobat la instància d\'administració del porta-retalls</string>
|
||||
<string name="crash_dialog__open_issue_tracker" comment="Label of Open issue tracker button in crash dialog">Obre el rastrejador d\'incidències (github.com)</string>
|
||||
<string name="crash_dialog__close" comment="Label of Close button in crash dialog">Tanca</string>
|
||||
<string name="crash_notification_channel__title" comment="Title of crash notification channel">Informes d\'error de FlorisBoard</string>
|
||||
<string name="crash_once_notification__title" comment="Title of the notification for a single crash">FlorisBoard ha deixat de funcionar…</string>
|
||||
<string name="crash_once_notification__body" comment="Body of the notification for a single crash">Toca per veure els detalls de l\'error</string>
|
||||
<string name="crash_multiple_notification__title" comment="Title of the notification for consecutive crashes">Sembla que FlorisBoard ha deixat de funcionar repetidament…</string>
|
||||
<string name="crash_multiple_notification__body" comment="Body of the notification for consecutive crashes">Tornant al teclat anterior per aturar el bucle de fallada infinit. Toca per veure els detalls de l\'error</string>
|
||||
<!-- Clipboard strings -->
|
||||
<string name="clipboard__header_title">Porta-retalls</string>
|
||||
<string name="clipboard__disabled__title">L\'historial del porta-retalls està inhabilitat actualment</string>
|
||||
<string name="clipboard__disabled__message">L\'historial del porta-retalls de {app_name} et permet emmagatzemar i accedir al text i a les imatges que has copiat ràpidament, amb la possibilitat de fixar entrades, configurar la neteja automàtica i definir un límit màxim d\'entrades.</string>
|
||||
<string name="clipboard__disabled__enable_button">Habilita l\'historial del porta-retalls</string>
|
||||
<string name="clipboard__empty__title">El porta-retalls és buit</string>
|
||||
<string name="clipboard__empty__message">Els textos o imatges que hagis copiat es mostraran aquí.</string>
|
||||
<string name="clipboard__locked__title">El porta-retalls està bloquejat</string>
|
||||
<string name="clipboard__locked__message">Per accedir a l\'historial del porta-retalls desbloqueja primer el dispositiu.</string>
|
||||
<string name="clipboard__group_pinned">Fixat</string>
|
||||
<string name="clipboard__group_recent">Recent</string>
|
||||
<string name="clipboard__group_other">Altres</string>
|
||||
<string name="clipboard__item_description_email">Correu</string>
|
||||
<string name="clipboard__item_description_url">Enllaç</string>
|
||||
<string name="clipboard__item_description_phone">Telèfon</string>
|
||||
<string name="clip__clear_history">Suprimeix l\'historial</string>
|
||||
<string name="clip__unpin_item">Solta l\'entrada</string>
|
||||
<string name="clip__pin_item">Fixa l\'entrada</string>
|
||||
<string name="clip__delete_item">Eliminar</string>
|
||||
<string name="clip__paste_item">Enganxa</string>
|
||||
<string name="clip__back_to_text_input">Torna a l\'entrada de text</string>
|
||||
<string name="clip__cant_paste">Aquesta aplicació no permet enganxar aquest contingut.</string>
|
||||
<string name="clipboard__cleared_primary_clip">S\'ha suprimit el clip principal</string>
|
||||
<string name="clipboard__cleared_history">S\'ha suprimit l\'historial</string>
|
||||
<string name="clipboard__cleared_full_history">S\'ha suprimit tot l\'historial</string>
|
||||
<string name="settings__clipboard__title">Porta-retalls</string>
|
||||
<string name="pref__clipboard__use_internal_clipboard__label">Usa el porta-retalls intern</string>
|
||||
<string name="pref__clipboard__use_internal_clipboard__summary">Usa un porta-retalls intern en lloc del porta-retalls del sistema</string>
|
||||
<string name="pref__clipboard__sync_from_system_clipboard__label">Sincronitza des del porta-retalls del sistema</string>
|
||||
<string name="pref__clipboard__sync_from_system_clipboard__summary">Les actualitzacions al porta-retalls del sistema també s\'actualitzaran al port-retalls de Floris</string>
|
||||
<string name="pref__clipboard__sync_to_system_clipboard__label">Sincronitza cap al porta-retalls del sistema</string>
|
||||
<string name="pref__clipboard__sync_to_system_clipboard__summary">Les actualitzacions al porta-retalls de Floris també s\'actualitzaran al port-retalls del sistema</string>
|
||||
<string name="pref__clipboard__group_clipboard_suggestion__label">Suggeriments del porta-retalls</string>
|
||||
<string name="pref__clipboard__suggestion_enabled__label" comment="Preference title">Suggeriments del contingut del porta-retalls</string>
|
||||
<string name="pref__clipboard__suggestion_enabled__summary" comment="Preference summary">Suggereix continguts copiats prèviament al porta-retalls</string>
|
||||
<string name="pref__clipboard__num_history_grid_columns__label">Nombre de columnes de la graella</string>
|
||||
<string name="pref__clipboard__suggestion_timeout__label" comment="Preference title; Translators: This should form a sentence together with `pref__clipboard__suggestion_timeout__summary` and is the first part">Limita els suggeriments del porta-retalls a</string>
|
||||
<string name="pref__clipboard__suggestion_timeout__summary" comment="Preference summary; Translators: This should form a sentence together with `pref__clipboard__suggestion_timeout__label` and is the second part">Entrades copiades en els darrers {v} s</string>
|
||||
<string name="pref__clipboard__group_clipboard_history__label">Historial del porta-retalls</string>
|
||||
<string name="pref__clipboard__enable_clipboard_history__label">Habilita l\'historial del porta-retalls</string>
|
||||
<string name="pref__clipboard__enable_clipboard_history__summary">Conserva les entrades del porta-retalls per accedir ràpidament</string>
|
||||
<string name="pref__clipboard__clean_up_old__label">Suprimeix les entrades antigues</string>
|
||||
<string name="pref__clipboard__clean_up_after__label">Suprimeix les entrades antigues després de</string>
|
||||
<string name="pref__clipboard__auto_clean_sensitive__label">Suprimeix automàticament les entrades sensibles</string>
|
||||
<string name="pref__clipboard__auto_clean_sensitive_after__label">Suprimeix automàticament les entrades sensibles després de</string>
|
||||
<string name="pref__clipboard__limit_history_size__label">Límit de la mida de l\'historial</string>
|
||||
<string name="pref__clipboard__max_history_size__label">Mida màxima de l\'historial</string>
|
||||
<string name="pref__clipboard__clear_primary_clip_deletes_last_item__label">Suprimir l\'entrada principal afecta l\'historial</string>
|
||||
<string name="pref__clipboard__clear_primary_clip_deletes_last_item__summary">Si suprimeixes l\'entrada principal, també suprimiràs la darrera entrada de l\'historial</string>
|
||||
<string name="send_to_clipboard__unknown_error">S\'ha produït un error desconegut. Torna-ho a provar!</string>
|
||||
<string name="send_to_clipboard__type_not_supported_error">Aquest tipus de mitjà no és compatible.</string>
|
||||
<string name="send_to_clipboard__description__copied_image_to_clipboard">La imatge de sota s\'ha copiat al porta-retalls.</string>
|
||||
<!-- Devtools strings -->
|
||||
<string name="devtools__title" comment="Title of Devtools screen. Translators: treat this string as 'Developer tools' for translation, except a similar short term is available for your language.">Eines de desenvolupament</string>
|
||||
<string name="devtools__enabled__label" comment="Label of Enable developer tools in Devtools">Habilita les eines de desenvolupament</string>
|
||||
<string name="devtools__enabled__summary" comment="Summary of Enable developer tools in Devtools">Eines específicament adreçades a la depuració i resolució de problemes</string>
|
||||
<string name="devtools__show_primary_clip__label" comment="Label of Show primary clip in Devtools">Mostra l\'entrada principal</string>
|
||||
<string name="devtools__show_primary_clip__summary" comment="Summary of Show primary clip in Devtools">Superposa l\'entrada principal actual del porta-retalls</string>
|
||||
<string name="devtools__show_input_state_overlay__label" comment="Label of Show input cache overlay in Devtools">Mostra la superposició de l\'estat de l\'entrada</string>
|
||||
<string name="devtools__show_input_state_overlay__summary" comment="Summary of Show input cache overlay in Devtools">Superposa l\'estat actual de l\'entrada per a la depuració</string>
|
||||
<string name="devtools__show_spelling_overlay__label" comment="Label of Show spelling overlay in Devtools">Mostra la superposició de la correcció ortogràfica</string>
|
||||
<string name="devtools__show_spelling_overlay__summary" comment="Summary of Show spelling overlay in Devtools">Superposa els resultats actuals de correcció ortogràfica per a la depuració</string>
|
||||
<string name="devtools__show_inline_autofill_overlay__label">Mostra la superposició de la compleció automàtica</string>
|
||||
<string name="devtools__show_inline_autofill_overlay__summary">Superposa els resultats actuals de la compleció automàtica per a la depuració</string>
|
||||
<string name="devtools__show_key_touch_boundaries__label" comment="Label of Show key touch boundaries in Devtools">Mostra els límits de toc de les tecles</string>
|
||||
<string name="devtools__show_key_touch_boundaries__summary" comment="Summary of Show key touch boundaries in Devtools">Ressalta en vermell els límits de toc de les tecles</string>
|
||||
<string name="devtools__show_drag_and_drop_helpers__label" comment="Label of Show drag and drop helpers in Devtools">Mostra les ajudes per a Arrossega&Deixa anar</string>
|
||||
<string name="devtools__show_drag_and_drop_helpers__summary" comment="Summary of Show drag and drop helpers in Devtools">Fa visibles les ajudes, d\'altra banda invisibles, a les pantalles d\'Arrossega&Deixa anar per a la depuració</string>
|
||||
<string name="devtools__clear_udm_internal_database__label" comment="Label of Clear internal user dictionary database in Devtools">Suprimeix la base de dades del diccionari intern de l\'usuari</string>
|
||||
<string name="devtools__clear_udm_internal_database__summary" comment="Summary of Clear internal user dictionary database in Devtools">Suprimeix totes les paraules de la taula de la base de dades del diccionari</string>
|
||||
<string name="devtools__reset_quick_actions_to_default__label">Restableix les accions ràpides de la barra intel·ligent</string>
|
||||
<string name="devtools__reset_quick_actions_to_default__summary">Restableix les accions ràpides de la barra intel·ligent a la disposició per defecte</string>
|
||||
<string name="devtools__reset_quick_actions_to_default__toast_success">S\'han restablit correctament les accions ràpides de la barra intel·ligent a la disposició per defecte</string>
|
||||
<string name="devtools__reset_flag__label" comment="Label of Reset flag preferences in Devtools">Restableix l\'indicador {flag_name}</string>
|
||||
<string name="devtools__reset_flag_is_ime_set_up__summary" comment="Summary of Reset is IME set up flag in Devtools">Acció de depuració per tornar a mostrar la pantalla de configuració</string>
|
||||
<string name="devtools__test_crash_report__label" comment="Label of Test Crash Report in Devtools">Prova la pantalla d\'informe de fallades</string>
|
||||
<string name="devtools__test_crash_report__summary" comment="Summary of Test Crash Report in Devtools">Acció de depuració per produir una fallada intencionadament</string>
|
||||
<string name="devtools__group_android__title" comment="Title of Android group in Devtools">Eines del sistema d\'Android</string>
|
||||
<string name="devtools__android_settings_global__title" comment="Title of Android settings (global) screen">Paràmetres globals d\'Android</string>
|
||||
<string name="devtools__android_settings_secure__title" comment="Title of Android settings (secure) screen">Paràmetres de seguretat d\'Android</string>
|
||||
<string name="devtools__android_settings_system__title" comment="Title of Android settings (system) screen">Paràmetres de sistema d\'Android</string>
|
||||
<string name="devtools__android_locales__title" comment="Title of Android locales screen">Paràmetres d\'idiomes</string>
|
||||
<string name="devtools__debuglog__title">Registre de depuració</string>
|
||||
<string name="devtools__debuglog__copied_to_clipboard">El registre de depuració s\'ha copiat al porta-retalls</string>
|
||||
<string name="devtools__debuglog__copy_log">Copia el registre</string>
|
||||
<string name="devtools__debuglog__copy_for_github">Copia el registre (en format GitHub)</string>
|
||||
<string name="devtools__debuglog__loading">Carregant…</string>
|
||||
<!-- Extension strings -->
|
||||
<string name="ext__home__title">Complements & Extensions</string>
|
||||
<string name="ext__list__ext_theme">Extensions del tema</string>
|
||||
<string name="ext__list__ext_keyboard">Extensions del teclat</string>
|
||||
<string name="ext__list__ext_languagepack">Extensions del paquet d\'idiomes</string>
|
||||
<string name="ext__meta__authors">Autors</string>
|
||||
<string name="ext__meta__components">Components agrupats</string>
|
||||
<string name="ext__meta__components_theme">Temes agrupats</string>
|
||||
<string name="ext__meta__components_language_pack">Paquets d\'idiomes fornits</string>
|
||||
<string name="ext__meta__components_none_found">Aquest fitxer d\'extensió no conté cap component agrupat.</string>
|
||||
<string name="ext__meta__description">Descripció</string>
|
||||
<string name="ext__meta__homepage">Pàgina d\'inici</string>
|
||||
<string name="ext__meta__id">ID</string>
|
||||
<string name="ext__meta__issue_tracker">Rastrejador d\'incidències</string>
|
||||
<string name="ext__meta__keywords">Paraules clau</string>
|
||||
<string name="ext__meta__label">Etiqueta</string>
|
||||
<string name="ext__meta__license">Llicència</string>
|
||||
<string name="ext__meta__maintainers">Mantenidors</string>
|
||||
<string name="ext__meta__maintainers_by">Per: {maintainers}</string>
|
||||
<string name="ext__meta__title">Títol</string>
|
||||
<string name="ext__meta__version">Versió</string>
|
||||
<string name="ext__error__not_found_title">Extensió no trobada</string>
|
||||
<string name="ext__error__not_found_description">No s\'ha trobat cap extensió amb ID \"{id}\".</string>
|
||||
<string name="ext__editor__title_create_any">Crea una extensió</string>
|
||||
<string name="ext__editor__title_create_keyboard">Crea una extensió de teclat</string>
|
||||
<string name="ext__editor__title_create_theme">Crea una extensió de tema</string>
|
||||
<string name="ext__editor__title_edit_any">Edita l\'extensió</string>
|
||||
<string name="ext__editor__title_edit_keyboard">Edita l\'extensió de teclat</string>
|
||||
<string name="ext__editor__title_edit_theme">Edita l\'extensió de tema</string>
|
||||
<string name="ext__editor__metadata__title">Gestiona les metadades</string>
|
||||
<string name="ext__editor__metadata__title_invalid">Metadades no vàlides</string>
|
||||
<string name="ext__editor__metadata__message_invalid">Les metadades per a aquesta extensió no són vàlides, comprova l\'editor de metadades per obtenir-ne més detalls!</string>
|
||||
<string name="ext__editor__dependencies__title">Gestiona les dependències</string>
|
||||
<string name="ext__editor__files__title">Gestiona els fitxers d\'arxius</string>
|
||||
<string name="ext__editor__files__type_fonts">Fonts</string>
|
||||
<string name="ext__editor__files__type_images">Imatges</string>
|
||||
<string name="ext__editor__create_component__title">Crea un component</string>
|
||||
<string name="ext__editor__create_component__title_theme">Crea un tema</string>
|
||||
<string name="ext__editor__create_component__from_empty">Buit</string>
|
||||
<string name="ext__editor__create_component__from_existing">D\'un existent</string>
|
||||
<string name="ext__editor__create_component__from_empty_warning">Crear i configurar un component buit pot ser difícil si ets nou a {app_name} o si no estàs familiaritzat amb els detalls. Sempre pots copiar un component existent i modificar-lo al teu gust si és el cas.</string>
|
||||
<string name="ext__editor__edit_component__title">Edita el component</string>
|
||||
<string name="ext__editor__edit_component__title_theme">Edita el component de tema</string>
|
||||
<string name="ext__export__success">L\'extensió s\'ha exportat correctament!</string>
|
||||
<string name="ext__export__failure">Error en exportar l\'extensió: {error_message}</string>
|
||||
<string name="ext__import__success">L\'extensió s\'ha importat correctament!</string>
|
||||
<string name="ext__import__failure">Error en importar l\'extensió: {error_message}</string>
|
||||
<string name="ext__import__ext_any" comment="Title of Importer screen for import of any supported FlorisBoard extension">Importa l\'extensió</string>
|
||||
<string name="ext__import__ext_keyboard" comment="Title of Importer screen for keyboard extension import">Importa l\'extensió de teclat</string>
|
||||
<string name="ext__import__ext_theme" comment="Title of Importer screen for theme extension import">Importa l\'extensió de tema</string>
|
||||
<string name="ext__import__ext_languagepack" comment="Title of Importer screen for language pack extension import">Importa l\'extensió de paquet d\'idioma</string>
|
||||
<string name="ext__import__file_skip" comment="Label when a file cannot be imported in the current context. The actual reason string is in a separate text view below this string.">No es pot importar el fitxer. Motiu:</string>
|
||||
<string name="ext__import__file_skip_unsupported" comment="Reason string when file is unsupported">Tipus de fitxer incompatible o no reconegut.</string>
|
||||
<string name="ext__import__file_skip_ext_core" comment="Reason string when ext has core extension ID">Impossible substituir o actualitzar els paquets d\'extensió per defecte proveïts amb els recursos base de l\'aplicació. Planteja\'t d\'actualitzar l\'aplicació mateixa si vols usar una versió nova d\'un paquet d\'extensió base.</string>
|
||||
<string name="ext__import__file_skip_ext_corrupted" comment="Reason string when file seems to be ext but is corrupted">El fitxer sembla un arxiu d\'extensió però l\'anàlisi de dades de l\'arxiu ha fallat. O l\'arxiu està malmès o el fitxer no és realment una extensió.</string>
|
||||
<string name="ext__import__file_skip_ext_incorrect_type" comment="Reason string when file is of incorrect extension serial type">S\'esperava un arxiu d\'extensió amb tipus de sèrie \"{expected_serial_type}\" però era \"{actual_serial_type}\".</string>
|
||||
<string name="ext__import__file_skip_ext_not_supported" comment="Reason string when file is loaded in incorrect context">S\'esperava un fitxer multimèdia (imatge, àudio, font, etc.) però s\'ha trobat un arxiu d\'extensió.</string>
|
||||
<string name="ext__import__file_skip_media_not_supported" comment="Reason string when file is loaded in incorrect context">S\'esperava un arxiu d\'extensió però s\'ha trobat un fitxer multimèdia (imatge, àudio, font, etc.).</string>
|
||||
<string name="ext__import__error_unexpected_exception" comment="Label when an error occurred during import. The error message will be appended below this text view">S\'ha produït un error inesperat durant la importació. Els detalls són els següents:</string>
|
||||
<string name="ext__validation__enter_package_name">Introdueix el nom del paquet</string>
|
||||
<string name="ext__validation__error_package_name">El nom del paquet no coincideix amb l\'expressió regular {id_regex}</string>
|
||||
<string name="ext__validation__enter_version">Introdueix una versió</string>
|
||||
<string name="ext__validation__enter_title">Introdueix un títol</string>
|
||||
<string name="ext__validation__enter_maintainer">Introdueix almenys un mantenidor vàlid</string>
|
||||
<string name="ext__validation__enter_license">Introdueix un identificador de llicència</string>
|
||||
<string name="ext__validation__enter_component_id">Introdueix un ID de component</string>
|
||||
<string name="ext__validation__error_component_id">Introdueix un ID de component que coincideixi amb {component_id_regex}</string>
|
||||
<string name="ext__validation__enter_component_label">Introdueix una etiqueta de component</string>
|
||||
<string name="ext__validation__hint_component_label_to_long">La teva etiqueta de component és molt llarga i per això podria mostrar-se retallada la interfície d\'usuari</string>
|
||||
<string name="ext__validation__error_author">Introdueix almenys un autor vàlid</string>
|
||||
<string name="ext__validation__error_stylesheet_path_blank">El camí al full d\'estil no pot ser buit</string>
|
||||
<string name="ext__validation__error_stylesheet_path">Introdueix un camí vàlid al full d\'estil que coincideixi amb {stylesheet_path_regex}</string>
|
||||
<string name="ext__validation__enter_property">Introdueix un nom de variable</string>
|
||||
<string name="ext__validation__error_property">Introdueix un nom vàlid de variable que coincideixi amb {variable_name_regex}</string>
|
||||
<string name="ext__validation__enter_color">Introdueix una cadena de color</string>
|
||||
<string name="ext__validation__error_color">Introdueix una cadena de color vàlida</string>
|
||||
<string name="ext__validation__enter_dp_size">Introdueix la mida de densitat de píxels</string>
|
||||
<string name="ext__validation__enter_valid_number">Introdueix un nombre vàlid</string>
|
||||
<string name="ext__validation__enter_positive_number">Introdueix un nombre positiu (>=0)</string>
|
||||
<string name="ext__validation__enter_percent_size">Introdueix un percentatge</string>
|
||||
<string name="ext__validation__enter_number_between_0_100">Introdueix un nombre positiu entre 0 i 100</string>
|
||||
<string name="ext__validation__hint_value_above_50_percent">Qualsevol valor superior al 50% es comportarà com si fos el 50%, considera de disminuir-ne el percentatge</string>
|
||||
<string name="ext__update_box__internet_permission_hint">Com que aquesta aplicació no té permisos per accedir a internet, les actualitzacions de les extensions instal·lades s\'han de comprovar manualment.</string>
|
||||
<string name="ext__update_box__search_for_updates">Cerca actualitzacions</string>
|
||||
<string name="ext__addon_management_box__managing_placeholder">Gestionant {extensions}</string>
|
||||
<string name="ext__addon_management_box__addon_manager_info">Totes les tasques referides a la importació, exportació, creació, personalització i supressió d\'extensions es poden gestionar a través de l\'administrador de complements centralitzat.</string>
|
||||
<string name="ext__addon_management_box__go_to_page">Ves a {ext_home_title}</string>
|
||||
<string name="ext__home__info">Pots descarregar i instal·lar les extensions des de la botiga de complements de FlorisBoard o importar qualsevol fitxer d\'extensió que hagis descarregat d\'internet.</string>
|
||||
<string name="ext__home__visit_store">Visita la botiga de complements</string>
|
||||
<string name="ext__home__manage_extensions">Administra les extensions instal·lades</string>
|
||||
<string name="ext__list__view_details">Visualitza els detalls</string>
|
||||
<string name="ext__check_updates__title">Comprova les actualitzacions</string>
|
||||
<!-- Action strings -->
|
||||
<string name="action__add">Afegeix</string>
|
||||
<string name="action__apply">Aplica</string>
|
||||
<string name="action__back_up">Còpia de seguretat</string>
|
||||
<string name="action__cancel">Cancel·la</string>
|
||||
<string name="action__create">Crea</string>
|
||||
<string name="action__default">Per defecte</string>
|
||||
<string name="action__delete">Suprimeix</string>
|
||||
<string name="action__delete_confirm_title">Confirma la supressió</string>
|
||||
<string name="action__delete_confirm_message">Segur que vols suprimir \"{name}\"? Aquesta acció no es podrà revertir un cop s\'hagi fet.</string>
|
||||
<string name="action__reset_confirm_title">Confirma el restabliment</string>
|
||||
<string name="action__reset_confirm_message">Segur que vols restablir \"{name}\"? Aquesta acció no es podrà revertir un cop s\'hagi fet.</string>
|
||||
<string name="action__discard">Descarta</string>
|
||||
<string name="action__discard_confirm_title">Canvis no desats</string>
|
||||
<string name="action__discard_confirm_message">Segur que vols descartar els canvis no desats\"? Aquesta acció no es podrà revertir un cop s\'hagi fet.</string>
|
||||
<string name="action__edit">Edita</string>
|
||||
<string name="action__export">Exporta</string>
|
||||
<string name="action__export_file">Exporta el fitxer</string>
|
||||
<string name="action__export_files">Exporta els fitxers</string>
|
||||
<string name="action__import">Importa</string>
|
||||
<string name="action__import_file">Importa el fitxer</string>
|
||||
<string name="action__import_files">Importa els fitxers</string>
|
||||
<string name="action__no">No</string>
|
||||
<string name="action__ok">D\'acord</string>
|
||||
<string name="action__restore">Restaura</string>
|
||||
<string name="action__save">Desa</string>
|
||||
<string name="action__select">Selecciona</string>
|
||||
<string name="action__select_dir">Selecciona el directori</string>
|
||||
<string name="action__select_dirs">Selecciona els directoris</string>
|
||||
<string name="action__select_file">Selecciona el fitxer</string>
|
||||
<string name="action__select_files">Selecciona els fitxers</string>
|
||||
<string name="action__yes">Sí</string>
|
||||
<!-- Error strings (generic) -->
|
||||
<string name="error__title">Error</string>
|
||||
<string name="error__details">Detalls</string>
|
||||
<string name="error__invalid">No és vàlid</string>
|
||||
<string name="error__snackbar_message">Alguna cosa ha anat malament</string>
|
||||
<string name="error__snackbar_message_template">Alguna cosa ha anat malament: {error_message}</string>
|
||||
<!-- General strings -->
|
||||
<string name="general__example_given" comment="This string is used where an example will be inserted in the {example} block. When translating, use the abbreviation used in your language for 'example given'.">p. ex. {example}</string>
|
||||
<string name="general__no_browser_app_found_for_url">No s\'ha trobat cap aplicació de navegació per gestionar URL \"{url}\"</string>
|
||||
<string name="general__select_dropdown_value_placeholder">- selecciona -</string>
|
||||
<string name="general__unlimited">Sense límit</string>
|
||||
<string name="general__file_name">Nom del fitxer</string>
|
||||
<string name="general__properties">Propietats</string>
|
||||
<string name="general__auto" comment="Generic shorthand for 'Automatic' value">Automàtic</string>
|
||||
<!-- Screen orientation strings -->
|
||||
<string name="screen_orientation__portrait">Vertical</string>
|
||||
<string name="screen_orientation__landscape">Apaïsat</string>
|
||||
@@ -165,17 +760,147 @@
|
||||
<!-- State strings -->
|
||||
<string name="state__disabled">Deshabilitat</string>
|
||||
<string name="state__enabled">Habilitat</string>
|
||||
<string name="state__no_dir_selected">No s\'ha seleccionat cap directori</string>
|
||||
<string name="state__no_dirs_selected">No s\'han seleccionat directoris</string>
|
||||
<string name="state__no_file_selected">No s\'ha seleccionat cap fitxer</string>
|
||||
<string name="state__no_files_selected">No s\'han seleccionat fitxers</string>
|
||||
<!-- Enum label and description strings -->
|
||||
<string name="enum__key_hint_mode__accent_priority" comment="Enum value label">Accent està prioritzat</string>
|
||||
<string name="enum__candidates_display_mode__classic" comment="Enum value label">Clàssic (3 columnes)</string>
|
||||
<string name="enum__candidates_display_mode__dynamic" comment="Enum value label">Amplada dinàmica</string>
|
||||
<string name="enum__candidates_display_mode__dynamic_scrollable" comment="Enum value label">Amplada dinàmica & Desplaçable</string>
|
||||
<string name="enum__capitalization_behavior__capslock_by_double_tap" comment="Enum value label">Habilita el bloqueig de majúscules amb doble toc a majúscules</string>
|
||||
<string name="enum__capitalization_behavior__capslock_by_cycle" comment="Enum value label">Canvia al següent mode de majúscules cada cop que toques la tecla majúscules</string>
|
||||
<string name="enum__color_representation__hex" comment="Enum value label">Hexadecimal</string>
|
||||
<string name="enum__color_representation__rgb" comment="Enum value label">Vermell Verd Blau</string>
|
||||
<string name="enum__color_representation__hsv" comment="Enum value label">To Saturació Valor</string>
|
||||
<string name="enum__display_kbd_after_dialogs__always" comment="Enum value label">Mostra-ho sempre</string>
|
||||
<string name="enum__display_kbd_after_dialogs__always__description" comment="Enum value description">Mostra sempre el teclat després de tancar qualsevol finestra de diàleg de l\'editor</string>
|
||||
<string name="enum__display_kbd_after_dialogs__never" comment="Enum value label">No ho mostris mai</string>
|
||||
<string name="enum__display_kbd_after_dialogs__never__description" comment="Enum value description">No mostra mai el teclat després de tancar qualsevol finestra de diàleg de l\'editor</string>
|
||||
<string name="enum__display_kbd_after_dialogs__remember" comment="Enum value label">Recorda l\'últim estat</string>
|
||||
<string name="enum__display_kbd_after_dialogs__remember__description" comment="Enum value description">Només mostra el teclat després de tancar qualsevol finestra de diàleg de l\'editor si era visible prèviament</string>
|
||||
<string name="enum__display_language_names_in__system_locale" comment="Enum value label">Idioma del sistema</string>
|
||||
<string name="enum__display_language_names_in__system_locale__description" comment="Enum value description">Els noms dels idiomes a l\'aplicació i a la interfície d\'usuari del teclat es mostren als paràmetres d\'idioma configurats per a tot el dispositiu</string>
|
||||
<string name="enum__display_language_names_in__native_locale" comment="Enum value label">Idioma nadiu</string>
|
||||
<string name="enum__display_language_names_in__native_locale__description" comment="Enum value description">Els noms dels idiomes a l\'aplicació i a la interfície d\'usuari del teclat es mostren en l\'idioma referit per a ell mateix</string>
|
||||
<string name="enum__emoji_history_update_strategy__auto_sort_prepend" comment="Enum value label">Ordena automàticament (anteposa)</string>
|
||||
<string name="enum__emoji_history_update_strategy__auto_sort_prepend__description" comment="Enum value description">Reordena automàticament els emojis en funció de l\'ús. Els emojis nous s\'afegeixen a l\'inici.</string>
|
||||
<string name="enum__emoji_history_update_strategy__auto_sort_append" comment="Enum value label">Ordena automàticament (annexa al final)</string>
|
||||
<string name="enum__emoji_history_update_strategy__auto_sort_append__description" comment="Enum value description">Reordena automàticament els emojis en funció de l\'ús. Els emojis nous s\'afegeixen al final.</string>
|
||||
<string name="enum__emoji_history_update_strategy__manual_sort_prepend" comment="Enum value label">Ordena manualment (anteposa)</string>
|
||||
<string name="enum__emoji_history_update_strategy__manual_sort_prepend__description" comment="Enum value description">No reordena automàticament els emojis en funció de l\'ús. Els emojis nous s\'afegeixen a l\'inici.</string>
|
||||
<string name="enum__emoji_history_update_strategy__manual_sort_append" comment="Enum value label">Ordena manualment (annexa al final)</string>
|
||||
<string name="enum__emoji_history_update_strategy__manual_sort_append__description" comment="Enum value description">No reordena automàticament els emojis en funció de l\'ús. Els emojis nous s\'afegeixen al final.</string>
|
||||
<string name="enum__emoji_skin_tone__default" comment="Enum value label">{emoji} To de pell per defecte</string>
|
||||
<string name="enum__emoji_skin_tone__light_skin_tone" comment="Enum value label">{emoji} To de pell clar</string>
|
||||
<string name="enum__emoji_skin_tone__medium_light_skin_tone" comment="Enum value label">{emoji} To de pell mitjà-clar</string>
|
||||
<string name="enum__emoji_skin_tone__medium_skin_tone" comment="Enum value label">{emoji} To de pell mitjà</string>
|
||||
<string name="enum__emoji_skin_tone__medium_dark_skin_tone" comment="Enum value label">{emoji} To de pell mitjà-fosc</string>
|
||||
<string name="enum__emoji_skin_tone__dark_skin_tone" comment="Enum value label">{emoji} To de pell fosc</string>
|
||||
<string name="enum__emoji_hair_style__default" comment="Enum value label">{emoji} Cabell per defecte</string>
|
||||
<string name="enum__emoji_hair_style__red_hair" comment="Enum value label">{emoji} Pèl-roig</string>
|
||||
<string name="enum__emoji_hair_style__curly_hair" comment="Enum value label">{emoji} Rull</string>
|
||||
<string name="enum__emoji_hair_style__white_hair" comment="Enum value label">{emoji} Blanc</string>
|
||||
<string name="enum__emoji_hair_style__bald" comment="Enum value label">{emoji} Calb</string>
|
||||
<string name="enum__emoji_suggestion_type__leading_colon">Dos punts a l\'inici</string>
|
||||
<string name="enum__emoji_suggestion_type__leading_colon__description" comment="Keep the :emoji_name while translating, this is a syntax guide">Suggereix emojis fent servir la sintaxi :nom_emoji</string>
|
||||
<string name="enum__emoji_suggestion_type__inline_text">Integrat al text</string>
|
||||
<string name="enum__emoji_suggestion_type__inline_text__description">Suggereix els emojis simplement en escriure el nom de l\'emoji com una paraula més</string>
|
||||
<string name="enum__extended_actions_placement__above_candidates" comment="Enum value label">Damunt dels suggeriments</string>
|
||||
<string name="enum__extended_actions_placement__above_candidates__description" comment="Enum value description">Situa la fila ampliada d\'accions entre la interfície d\'usuari de l\'aplicació i la fila de suggeriments</string>
|
||||
<string name="enum__extended_actions_placement__below_candidates" comment="Enum value label">Sota els suggeriments</string>
|
||||
<string name="enum__extended_actions_placement__below_candidates__description" comment="Enum value description">Situa la fila ampliada d\'accions entre la fila de suggeriments i el teclat</string>
|
||||
<string name="enum__extended_actions_placement__overlay_app_ui" comment="Enum value label">Superposa la interfície d\'usuari de l\'aplicació</string>
|
||||
<string name="enum__extended_actions_placement__overlay_app_ui__description" comment="Enum value description">Situa la fila ampliada d\'accions com una superposició sobre la interfície d\'usuari de l\'aplicació per tal de no afectar l\'alçada resultant del teclat. Tingues present que aquesta ubicació pot fer que el camp d\'entrada de l\'aplicació sigui parcialment superposat</string>
|
||||
<string name="enum__haptic_vibration_mode__use_vibrator_directly" comment="Enum value label">Usa el vibrador directament</string>
|
||||
<string name="enum__haptic_vibration_mode__use_vibrator_directly__description" comment="Enum value description">{app_name} interacciona directament amb el maquinari de vibració per defecte. Això dona més control sobre la durada i la força de la vibració, però pot no ser tan suau ni optimitzada com si s\'usa la interfície de resposta tàctil</string>
|
||||
<string name="enum__haptic_vibration_mode__use_haptic_feedback_interface" comment="Enum value label">Usa la interfície de resposta tàctil</string>
|
||||
<string name="enum__haptic_vibration_mode__use_haptic_feedback_interface__description" comment="Enum value description">{app_name} usa la interfície de resposta tàctil per activar una seqüència predeterminada de vibració en tocar les tecles. Això funciona de forma excepcional en alguns dispositius, però falla completament o funciona malament en d\'altres</string>
|
||||
<string name="enum__key_hint_mode__accent_priority" comment="Enum value label">Accent prioritzat</string>
|
||||
<string name="enum__key_hint_mode__accent_priority__description" comment="Enum value description">El caràcter inicial escollit després d\'un toc llarg serà sempre l\'accent principal, o el símbol si no hi ha cap accent principal disponible</string>
|
||||
<string name="enum__key_hint_mode__hint_priority" comment="Enum value label">Símbol suggerit prioritzat</string>
|
||||
<string name="enum__key_hint_mode__hint_priority__description" comment="Enum value description">El caràcter inicial escollit després d\'un toc llarg serà sempre el símbol, o l\'accent principal si no hi ha cap símbol disponible</string>
|
||||
<string name="enum__key_hint_mode__smart_priority" comment="Enum value label">Priorització intel·ligent</string>
|
||||
<string name="enum__key_hint_mode__smart_priority__description" comment="Enum value description">El caràcter inicial escollit després d\'un toc llarg decideix dinàmicament si serà l\'accent principal o el símbol en funció de l\'idioma i la distribució del teclat actuals</string>
|
||||
<string name="enum__incognito_display_mode__replace_shared_actions_toggle" comment="Enum value label">Substitueix la icona de commutació d\'accions compartides per l\'indicador d\'incògnit</string>
|
||||
<string name="enum__incognito_display_mode__display_behind_keyboard" comment="Enum value label">Mostra l\'indicador d\'incògnit darrere del teclat</string>
|
||||
<string name="enum__incognito_mode__force_off" comment="Enum value label">Força la inhabilitació</string>
|
||||
<string name="enum__incognito_mode__force_off__description" comment="Enum value description">El mode incògnit sempre estarà inhabilitat, independent de les opcions anteriors de l\'aplicació de destí. L\'acció ràpida d\'incògnit a la barra intel·ligent no estarà disponible amb aquesta opció.</string>
|
||||
<string name="enum__incognito_mode__force_on" comment="Enum value label">Força l\'habilitació</string>
|
||||
<string name="enum__incognito_mode__force_on__description" comment="Enum value description">El mode incògnit sempre estarà habilitat, independent de les opcions anteriors de l\'aplicació de destí. L\'acció ràpida d\'incògnit a la barra intel·ligent no estarà disponible amb aquesta opció.</string>
|
||||
<string name="enum__incognito_mode__dynamic_on_off" comment="Enum value label">Habilitació/Inhabililitació dinàmica</string>
|
||||
<string name="enum__incognito_mode__dynamic_on_off__description" comment="Enum value description">Opció recomanada. El mode incògnit s\'habilitarà o inhabilitarà dinàmicament a través de les opcions anteriors de l\'aplicació de destí o commutant-lo manualment amb l\'acció ràpida d\'incògnit a la barra intel·ligent.</string>
|
||||
<string name="enum__input_feedback_activation_mode__audio_respect_system_settings" comment="Enum value label">Reproducció dinàmica dels sons per als esdeveniments d\'entrada, segons la configuració del sistema</string>
|
||||
<string name="enum__input_feedback_activation_mode__audio_ignore_system_settings" comment="Enum value label">Reprodueix sempre els sons per als esdeveniments d\'entrada, independentment de la configuració del sistema</string>
|
||||
<string name="enum__input_feedback_activation_mode__haptic_respect_system_settings" comment="Enum value label">Vibració dinàmica per als esdeveniments d\'entrada, segons la configuració del sistema</string>
|
||||
<string name="enum__input_feedback_activation_mode__haptic_ignore_system_settings" comment="Enum value label">Vibra sempre en els esdeveniments d\'entrada, independentment de la configuració del sistema</string>
|
||||
<string name="enum__input_shift_state__unshifted" comment="Enum value label">Sense desplaçament</string>
|
||||
<string name="enum__input_shift_state__shifted_manual" comment="Enum value label">Desplaçament (manual)</string>
|
||||
<string name="enum__input_shift_state__shifted_automatic" comment="Enum value label">Desplaçament (automàtic)</string>
|
||||
<string name="enum__input_shift_state__caps_lock" comment="Enum value label">Bloq Majús</string>
|
||||
<string name="enum__keyboard_mode__characters" comment="Enum value label">Caràcters</string>
|
||||
<string name="enum__keyboard_mode__symbols" comment="Enum value label">Símbols</string>
|
||||
<string name="enum__keyboard_mode__symbols2" comment="Enum value label">Símbols 2</string>
|
||||
<string name="enum__keyboard_mode__numeric" comment="Enum value label">Numèric</string>
|
||||
<string name="enum__keyboard_mode__numeric_advanced" comment="Enum value label">Numèric avançat</string>
|
||||
<string name="enum__keyboard_mode__phone" comment="Enum value label">Telèfon</string>
|
||||
<string name="enum__keyboard_mode__phone2" comment="Enum value label">Telèfon 2</string>
|
||||
<string name="enum__landscape_input_ui_mode__never_show" comment="Enum value label">No mostrar mai</string>
|
||||
<string name="enum__landscape_input_ui_mode__always_show" comment="Enum value label">Mostrar sempre</string>
|
||||
<string name="enum__landscape_input_ui_mode__dynamically_show" comment="Enum value label">Mostrar dinàmicament</string>
|
||||
<string name="enum__one_handed_mode__start" comment="Enum value label">Mode esquerrà</string>
|
||||
<string name="enum__one_handed_mode__end" comment="Enum value label">Mode dretà</string>
|
||||
<string name="enum__shape_corner__top_start" comment="Enum value label">Dalt a l\'esquerra</string>
|
||||
<string name="enum__shape_corner__top_end" comment="Enum value label">Dalt a la dreta</string>
|
||||
<string name="enum__shape_corner__bottom_end" comment="Enum value label">A sota a la dreta</string>
|
||||
<string name="enum__shape_corner__bottom_start" comment="Enum value label">A sota a l\'esquerra</string>
|
||||
<string name="enum__smartbar_layout__suggestions_only" comment="Enum value label">Només suggeriments</string>
|
||||
<string name="enum__smartbar_layout__suggestions_only__description" comment="Enum value description">Mostra només la fila de suggeriments sense cap commutació/fila d\'accions ni acció fixa</string>
|
||||
<string name="enum__smartbar_layout__actions_only" comment="Enum value label">Només accions</string>
|
||||
<string name="enum__smartbar_layout__actions_only__description" comment="Enum value description">Mostra només la fila d\'accions sense cap fila de suggeriments ni cap acció fixa explicita</string>
|
||||
<string name="enum__smartbar_layout__suggestions_action_shared" comment="Enum value label">Suggeriments & Accions totes dues</string>
|
||||
<string name="enum__smartbar_layout__suggestions_action_shared__description" comment="Enum value description">Fila compartida commutable de suggeriments i accions, inclosa l\'acció fixa</string>
|
||||
<string name="enum__smartbar_layout__suggestions_actions_extended" comment="Enum value label">Extensió de Suggeriments & Accions</string>
|
||||
<string name="enum__smartbar_layout__suggestions_actions_extended__description" comment="Enum value description">Fila d\'accions estàtica ampliable amb la fila d\'accions i l\'acció fixa</string>
|
||||
<string name="enum__snygg_level__basic" comment="Enum value label">Bàsic</string>
|
||||
<string name="enum__snygg_level__basic__description" comment="Enum value description">Només es mostren les propietats del color, les propietats i les regles es tradueixen.</string>
|
||||
<string name="enum__snygg_level__advanced" comment="Enum value label">Avançat</string>
|
||||
<string name="enum__snygg_level__advanced__description" comment="Enum value description">Es mostren totes les propietats, les propietats i les regles es tradueixen.</string>
|
||||
<string name="enum__snygg_level__developer" comment="Enum value label">Desenvolupador</string>
|
||||
<string name="enum__snygg_level__developer__description" comment="Enum value description">Es mostren totes les propietats, les propietats i les regles es mostren tal com estan escrites al full d\'estils.</string>
|
||||
<string name="enum__space_bar_mode__nothing" comment="Enum value label">Sense etiqueta</string>
|
||||
<string name="enum__space_bar_mode__current_language" comment="Enum value label">Idioma actual</string>
|
||||
<string name="enum__space_bar_mode__space_bar_key" comment="Enum value label">␣</string>
|
||||
<string name="enum__spelling_language_mode__use_system_languages" comment="Enum value label">Usa els idiomes del sistema</string>
|
||||
<string name="enum__spelling_language_mode__use_keyboard_subtypes" comment="Enum value label">Usa els subtipus de teclat</string>
|
||||
<string name="enum__swipe_action__no_action" comment="Enum value label">Cap acció</string>
|
||||
<string name="enum__swipe_action__cycle_to_previous_keyboard_mode" comment="Enum value label">Passa al mode de teclat precedent</string>
|
||||
<string name="enum__swipe_action__cycle_to_next_keyboard_mode" comment="Enum value label">Passa al mode de teclat següent</string>
|
||||
<string name="enum__swipe_action__delete_character" comment="Enum value label">Suprimeix el caràcter d\'abans del cursor</string>
|
||||
<string name="enum__swipe_action__delete_characters_precisely" comment="Enum value label">Suprimeix els caràcters amb precisió</string>
|
||||
<string name="enum__swipe_action__delete_word" comment="Enum value label">Suprimeix la paraula d\'abans del cursor</string>
|
||||
<string name="enum__swipe_action__delete_words_precisely" comment="Enum value label">Suprimeix les paraules amb precisió</string>
|
||||
<string name="enum__swipe_action__hide_keyboard" comment="Enum value label">Amagar el teclat</string>
|
||||
<string name="enum__swipe_action__insert_space" comment="Enum value label">Insereix un espai</string>
|
||||
<string name="enum__swipe_action__move_cursor_up" comment="Enum value label">Mou el cursor cap amunt</string>
|
||||
<string name="enum__swipe_action__move_cursor_down" comment="Enum value label">Mou el cursor cap avall</string>
|
||||
<string name="enum__swipe_action__move_cursor_left" comment="Enum value label">Mou el cursor cap a l\'esquerra</string>
|
||||
<string name="enum__swipe_action__move_cursor_right" comment="Enum value label">Mou el cursor cap a la dreta</string>
|
||||
<string name="enum__swipe_action__move_cursor_start_of_line" comment="Enum value label">Mou el cursor al principi de la línia</string>
|
||||
<string name="enum__swipe_action__move_cursor_end_of_line" comment="Enum value label">Mou el cursor al final de la línia</string>
|
||||
<string name="enum__swipe_action__move_cursor_start_of_page" comment="Enum value label">Mou el cursor al principi de la pàgina</string>
|
||||
<string name="enum__swipe_action__move_cursor_end_of_page" comment="Enum value label">Mou el cursor al final de la pàgina</string>
|
||||
<string name="enum__swipe_action__switch_to_clipboard_context" comment="Enum value label">Obre l\'historial/administrador del porta-retalls</string>
|
||||
<string name="enum__swipe_action__shift" comment="Enum value label">Majúscules</string>
|
||||
<string name="enum__swipe_action__redo" comment="Enum value label">Refés</string>
|
||||
<string name="enum__swipe_action__undo" comment="Enum value label">Desfés</string>
|
||||
<string name="enum__swipe_action__select_characters_precisely" comment="Enum value label">Selecciona els caràcters amb precisió</string>
|
||||
<string name="enum__swipe_action__select_words_precisely" comment="Enum value label">Selecciona les paraules amb precisió</string>
|
||||
<string name="enum__swipe_action__show_input_method_picker" comment="Enum value label">Mostra el selector de mode d\'introducció</string>
|
||||
<string name="enum__swipe_action__switch_to_prev_keyboard" comment="Enum value label">Canvia a teclat previ</string>
|
||||
<string name="enum__swipe_action__switch_to_prev_subtype" comment="Enum value label">Canvia a subtipus anterior</string>
|
||||
<string name="enum__swipe_action__switch_to_next_subtype" comment="Enum value label">Canvia a subtipus següent</string>
|
||||
<string name="enum__swipe_action__toggle_smartbar_visibility" comment="Enum value label">Commuta la visibilitat de la barra intel·ligent</string>
|
||||
<string name="enum__theme_mode__always_day" comment="Enum value label">Sempre diürn</string>
|
||||
<string name="enum__theme_mode__always_night" comment="Enum value label">Sempre nocturn</string>
|
||||
<string name="enum__theme_mode__follow_system" comment="Enum value label">Segueix sistema</string>
|
||||
@@ -186,4 +911,28 @@
|
||||
<string name="enum__utility_key_action__dynamic_switch_language_emojis" comment="Enum value label">Dinámic: Canviar a emojis/Canviar idioma</string>
|
||||
<!-- Unit strings (symbols) -->
|
||||
<!-- Unit strings (written words) -->
|
||||
<plurals name="unit__hours__written">
|
||||
<item quantity="one">{v} hora</item>
|
||||
<item quantity="other">{v} hores</item>
|
||||
</plurals>
|
||||
<plurals name="unit__minutes__written">
|
||||
<item quantity="one">{v} minut</item>
|
||||
<item quantity="other">{v} minuts</item>
|
||||
</plurals>
|
||||
<plurals name="unit__seconds__written">
|
||||
<item quantity="one">{v} segon</item>
|
||||
<item quantity="other">{v} segons</item>
|
||||
</plurals>
|
||||
<plurals name="unit__items__written">
|
||||
<item quantity="one">{v} ítem</item>
|
||||
<item quantity="other">{v} ítems</item>
|
||||
</plurals>
|
||||
<plurals name="unit__characters__written">
|
||||
<item quantity="one">{v} caràcter</item>
|
||||
<item quantity="other">{v} caràcters</item>
|
||||
</plurals>
|
||||
<plurals name="unit__candidates__written">
|
||||
<item quantity="one">{v} suggeriment</item>
|
||||
<item quantity="other">{v} suggeriments</item>
|
||||
</plurals>
|
||||
</resources>
|
||||
|
||||
@@ -15,6 +15,19 @@
|
||||
<string name="media__tab__kaomoji" comment="Tab description for kaomoji in the media UI">کامۆجی</string>
|
||||
<string name="prefs__media__emoji_preferred_skin_tone">ڕەنگی بنەڕەتی خەندەکان</string>
|
||||
<string name="prefs__media__emoji_preferred_hair_style">ڕەنگی بنەڕەتی قژی خەندەکان</string>
|
||||
<string name="prefs__media__emoji_history__title" comment="Preference group title">مێژووی ئیمۆجی</string>
|
||||
<string name="prefs__media__emoji_history_enabled" comment="Preference title">مێژووی ئیمۆجی کارا بکە</string>
|
||||
<string name="prefs__media__emoji_history_enabled__summary" comment="Preference summary">دوایین ئیمۆجییە بەکارھێندراوەکان بھێڵەوە بۆ ئاسانکاری</string>
|
||||
<string name="prefs__media__emoji_history_pinned_update_strategy" comment="Preference title">ماوەی نوێبونەوە (جێگیرکراو)</string>
|
||||
<string name="prefs__media__emoji_history_recent_update_strategy" comment="Preference title">ماوەی نوێبونەوە (دوایین)</string>
|
||||
<string name="prefs__media__emoji_history_max_size">زۆرترین ڕێژەی هەڵگرتن</string>
|
||||
<string name="prefs__media__emoji_history_pinned_reset">ڕێکخستنەوەی لیستی خەندە جێگیرکراوەکان</string>
|
||||
<string name="prefs__media__emoji_history_reset">ڕێکخستنەوەی لیستی خەندەکان</string>
|
||||
<string name="prefs__media__emoji_suggestion__title" comment="Preference group title">پێشنیارکردنی خەندەکان</string>
|
||||
<string name="prefs__media__emoji_suggestion_enabled" comment="Preference title">چالاککردنی پێشنیاری خەندەکان</string>
|
||||
<string name="prefs__media__emoji_suggestion_enabled__summary" comment="Preference summary">پێشنیارکردنی خەندە و کاردانەوەکان لەکاتی نووسیندا</string>
|
||||
<string name="prefs__media__emoji_suggestion_type" comment="Preference title">شێوازی پێشنیاری خەندەکان</string>
|
||||
<string name="prefs__media__emoji_suggestion_candidate_show_name" comment="Preference title">پیشاندانی ناوی خەندەکان</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>
|
||||
@@ -25,6 +38,8 @@
|
||||
<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>
|
||||
<string name="emoji__history__pinned">جێگیرکراو</string>
|
||||
<string name="emoji__history__recent">دوایین</string>
|
||||
<!-- Quick action strings -->
|
||||
<string name="quick_action__arrow_up" maxLength="12">چونە سەرەوە</string>
|
||||
<string name="quick_action__arrow_up__tooltip">چوونە سەرەتای دێڕ</string>
|
||||
@@ -48,6 +63,8 @@
|
||||
<string name="quick_action__ime_ui_mode_clipboard__tooltip">پیشاندانی لەبەرگیراوەکان</string>
|
||||
<string name="quick_action__ime_ui_mode_media" maxLength="12">ئیمۆجی</string>
|
||||
<string name="quick_action__ime_ui_mode_media__tooltip">کردنەوەی لیستی ئیمۆجیەکان</string>
|
||||
<string name="quick_action__language_switch" maxLength="12">گۆڕینی زمان</string>
|
||||
<string name="quick_action__language_switch__tooltip">گۆڕینی زمانی تەختەکلیل</string>
|
||||
<string name="quick_action__settings" maxLength="12">ڕێکخستنەکان</string>
|
||||
<string name="quick_action__settings__tooltip">کردنەوەی ڕێکخستنەکان</string>
|
||||
<string name="quick_action__undo" maxLength="12">دواتر</string>
|
||||
@@ -140,12 +157,10 @@
|
||||
<string name="settings__theme_editor__rule_already_exists">ئەم یاسای پەڕەی ستایڵ پێشتر پێناسە کراوە.</string>
|
||||
<string name="settings__theme_editor__rule_codes">سەرچاوەی کۆدی مەبەست</string>
|
||||
<string name="settings__theme_editor__rule_groups">گرووپ</string>
|
||||
<string name="settings__theme_editor__rule_shift_states">دۆخی شێفت</string>
|
||||
<string name="settings__theme_editor__rule_selectors">هەڵبژاردن</string>
|
||||
<string name="settings__theme_editor__add_code">زیادکردنی کۆدی دوگمە</string>
|
||||
<string name="settings__theme_editor__edit_code">دەستکاریکردنی کۆد</string>
|
||||
<string name="settings__theme_editor__no_codes_defined">جێبەجێکردن بۆ سەرجەم بەشەکان</string>
|
||||
<string name="settings__theme_editor__codes_defined">جێبەجێ کردنی یاسا تەنها بۆ ئامانج توخمەکان لەگەڵ کۆدەکانی کلیلی خوارەوە:</string>
|
||||
<string name="settings__theme_editor__code_already_exists">ئەم دوگمەیە پێشتر زیادکراوە</string>
|
||||
<string name="settings__theme_editor__code_invalid">ئەم کۆدە کلیلە دروست نیە، دڵنیابە لەوەی کە کۆدی کلیلەکە لەناو مەودای {c_min} بۆ {c_max} بۆ پیتەکان یان {i_min} بۆ {i_max} بۆ کلیلە تایبەتەکان.</string>
|
||||
<string name="settings__theme_editor__code_help_text">ئەم لینکانەی خوارەوە یارمەتیت ئەدەن بۆ دۆزینەوەی کۆدی کلیلی هاوتا:</string>
|
||||
@@ -165,6 +180,10 @@
|
||||
<string name="settings__theme_editor__component_meta_is_night_theme">ڕووکاری تاریکە</string>
|
||||
<string name="settings__theme_editor__component_meta_is_borderless">بێ لێوار</string>
|
||||
<string name="settings__theme_editor__component_meta_stylesheet_path">شوێنی هەڵگرتن</string>
|
||||
<string name="snygg__rule_annotation__font">فۆنت</string>
|
||||
<string name="snygg__rule_annotation__font_name">ناوی فۆنت</string>
|
||||
<string name="snygg__rule_element__root">بنەڕەتی</string>
|
||||
<string name="snygg__rule_element__window">پەنجەرە</string>
|
||||
<string name="snygg__rule_element__key">دوگمە</string>
|
||||
<string name="snygg__rule_element__key_hint">پیتە لاوەکییەکان</string>
|
||||
<string name="snygg__rule_element__clipboard_header">سەرەوەی لەبەرگیراوەکان</string>
|
||||
@@ -216,6 +235,7 @@
|
||||
<string name="snygg__property_name__var_shape_variant">شێوەی دوگمەکان (هەمەجۆر)</string>
|
||||
<string name="snygg__property_value__explicit_inherit">بنەڕەتی</string>
|
||||
<string name="snygg__property_value__defined_var">سەرچاوە</string>
|
||||
<string name="snygg__property_value__no">نەخێر</string>
|
||||
<string name="snygg__property_value__solid_color">ڕەنگ</string>
|
||||
<string name="snygg__property_value__rectangle_shape">چوارگۆشەیی</string>
|
||||
<string name="snygg__property_value__circle_shape">بازنەیی</string>
|
||||
@@ -244,7 +264,6 @@
|
||||
<string name="pref__input_feedback__haptic_vibration_strength__label" comment="Preference title">هێزی لەرزین</string>
|
||||
<string name="pref__input_feedback__haptic_vibration_strength__summary_no_vibrator" comment="Preference summary">ئەم تایبەتمەندییە پێویستی بە هاردوێری لەرینەوەیە کە لە ئامێرەکەتدا بوونی نییە</string>
|
||||
<string name="pref__input_feedback__haptic_vibration_strength__summary_no_amplitude_ctrl" comment="Preference summary">مۆبایلەکەت پشتگری ئەم تایبەتمەندییە ناکات</string>
|
||||
<string name="pref__input_feedback__haptic_vibration_strength__summary_unsupported_android_version" comment="Preference summary">ئەم تایبەتمەندییە تەنها لە ئەندرۆیدی ٨. ٠ و بەرەو سەر کاردەکات</string>
|
||||
<string name="pref__input_feedback__haptic_feat_key_press__label" comment="Preference title">لەرزین لەکاتی نووسین</string>
|
||||
<string name="pref__input_feedback__haptic_feat_key_long_press__label" comment="Preference title">لەرزین لەکاتی دەست ڕاگرتن</string>
|
||||
<string name="pref__input_feedback__haptic_feat_key_repeated_action__label" comment="Preference title">لەرزین لەکاتی فرمانە دووبارەکان</string>
|
||||
@@ -404,6 +423,7 @@
|
||||
<string name="setup__finish_up__description_p1">{app_name} ئێستا چالاکە بۆ بەکارهێنان و نووسین لەسەر مۆبایلەکەت.</string>
|
||||
<string name="setup__finish_up__description_p2">لەکاتی بوونی هەر پرسیار و سەرنج و پێشنیارێک ئەتوانن سەردانی بەشی تایبەتی یارمەتیدان بکەن!</string>
|
||||
<string name="setup__finish_up__finish_btn">ڕێکخستنەکانی تەختەکلیل</string>
|
||||
<!-- Physical keyboard -->
|
||||
<!-- Back up & Restore -->
|
||||
<string name="backup_and_restore__title">پاشەکەوتکردن و گێڕانەوە</string>
|
||||
<string name="backup_and_restore__back_up__title">پاشەکەوتکردنی داتاکان</string>
|
||||
@@ -471,7 +491,6 @@
|
||||
<string name="clipboard__cleared_primary_clip">سڕینەوەی گشتی</string>
|
||||
<string name="clipboard__cleared_history">سڕینەوەی مێژوو</string>
|
||||
<string name="clipboard__cleared_full_history">سڕینەوەی هەموو شتێک</string>
|
||||
<string name="clipboard__confirm_clear_history__message">ئایا دڵنیایت لە سڕینەوەی لەبەرگیراوەکان؟</string>
|
||||
<string name="settings__clipboard__title">لەبەرگیراوەکان</string>
|
||||
<string name="pref__clipboard__use_internal_clipboard__label">بەشی لەبەرگیراوەکان</string>
|
||||
<string name="pref__clipboard__use_internal_clipboard__summary">بەکارهێنانی بەشی لەبەرگیراوەکان بۆ هەڵگرتنی شتەکان</string>
|
||||
@@ -602,6 +621,8 @@
|
||||
<string name="general__no_browser_app_found_for_url">هیچ بەرنامەیەکی وێبگەڕ نەدۆزرایەوە بۆ کردنەوەی {url}</string>
|
||||
<string name="general__select_dropdown_value_placeholder">- دیاریبکە -</string>
|
||||
<string name="general__unlimited">بێ سنوور</string>
|
||||
<string name="general__file_name">ناوی فایل</string>
|
||||
<string name="general__auto" comment="Generic shorthand for 'Automatic' value">خۆکار</string>
|
||||
<!-- Screen orientation strings -->
|
||||
<string name="screen_orientation__portrait">دۆخی ئاسایی</string>
|
||||
<string name="screen_orientation__landscape">دۆخی خستنە سەرلا</string>
|
||||
@@ -618,6 +639,7 @@
|
||||
<string name="enum__candidates_display_mode__classic" comment="Enum value label">ئاسایی (٣ ڕیز)</string>
|
||||
<string name="enum__candidates_display_mode__dynamic" comment="Enum value label">جوڵاو</string>
|
||||
<string name="enum__candidates_display_mode__dynamic_scrollable" comment="Enum value label">جوڵاو و ڕاکێشان</string>
|
||||
<string name="enum__color_representation__rgb" comment="Enum value label">سوور سەوز شین</string>
|
||||
<string name="enum__display_kbd_after_dialogs__always" comment="Enum value label">هەمیشە پیشاندان</string>
|
||||
<string name="enum__display_kbd_after_dialogs__always__description" comment="Enum value description">پیشاندانی تەختەکلیل دوای داخستنی بەشی دەستکاریکردنی ڕووکار</string>
|
||||
<string name="enum__display_kbd_after_dialogs__never" comment="Enum value label">پیشان نەدان</string>
|
||||
@@ -674,6 +696,9 @@
|
||||
<string name="enum__snygg_level__advanced__description" comment="Enum value description">هەموو زانیارییەکانی ڕەنگەکان پیشان ئەدرێن، درێژە و بەشەکانی تر وەردەگێڕدرێن.</string>
|
||||
<string name="enum__snygg_level__developer" comment="Enum value label">گەشەپێدەر</string>
|
||||
<string name="enum__snygg_level__developer__description" comment="Enum value description">هەموو زانیارییەکانی ڕەنگەکان پیشان ئەدرێن، زانیاری ڕووکار هەمان ناوی فایل پیشان ئەدات.</string>
|
||||
<string name="enum__space_bar_mode__nothing" comment="Enum value label">بێ ناو</string>
|
||||
<string name="enum__space_bar_mode__current_language" comment="Enum value label">ناوی زمان</string>
|
||||
<string name="enum__space_bar_mode__space_bar_key" comment="Enum value label">␣</string>
|
||||
<string name="enum__spelling_language_mode__use_system_languages" comment="Enum value label">بەکارهێنانی زمانی سیستەم</string>
|
||||
<string name="enum__spelling_language_mode__use_keyboard_subtypes" comment="Enum value label">بەکارهێنانی ناوی تەختەکلیل</string>
|
||||
<string name="enum__swipe_action__no_action" comment="Enum value label">هیچ فرمانێک</string>
|
||||
@@ -730,4 +755,12 @@
|
||||
<item quantity="one">{v} دانە</item>
|
||||
<item quantity="other">{v} دانە</item>
|
||||
</plurals>
|
||||
<plurals name="unit__characters__written">
|
||||
<item quantity="one">{v} پیت</item>
|
||||
<item quantity="other">{v} پیت</item>
|
||||
</plurals>
|
||||
<plurals name="unit__candidates__written">
|
||||
<item quantity="one">{v} دانە</item>
|
||||
<item quantity="other">{v} دانە</item>
|
||||
</plurals>
|
||||
</resources>
|
||||
|
||||
@@ -58,8 +58,7 @@
|
||||
<string name="quick_action__arrow_left__tooltip">Vykonat šipku vlevo</string>
|
||||
<string name="quick_action__arrow_right" maxLength="12">Šipka vpravo</string>
|
||||
<string name="quick_action__arrow_right__tooltip">Vykonat šipku vpravo</string>
|
||||
<string name="quick_action__clipboard_clear_primary_clip" maxLength="12">Vy. p. k. s.</string>
|
||||
<string name="quick_action__clipboard_clear_primary_clip__tooltip">Vykonat vymazání primárního klipu schránky</string>
|
||||
<string name="quick_action__clipboard_clear_primary_clip__tooltip">Vykonat vymazání primární položky schránky</string>
|
||||
<string name="quick_action__clipboard_copy" maxLength="12">Kopírovat</string>
|
||||
<string name="quick_action__clipboard_copy__tooltip">Vykonat kopírování do schránky</string>
|
||||
<string name="quick_action__clipboard_cut" maxLength="12">Vyjmout</string>
|
||||
@@ -72,6 +71,7 @@
|
||||
<string name="quick_action__ime_ui_mode_clipboard__tooltip">Otevřít historii schránky</string>
|
||||
<string name="quick_action__ime_ui_mode_media" maxLength="12">Emotikony</string>
|
||||
<string name="quick_action__ime_ui_mode_media__tooltip">Otevřít panel emotikonů</string>
|
||||
<string name="quick_action__language_switch__tooltip">Provést přepnutí jazyku</string>
|
||||
<string name="quick_action__settings" maxLength="12">Nastavení</string>
|
||||
<string name="quick_action__settings__tooltip">Otevřít nastavení</string>
|
||||
<string name="quick_action__undo" maxLength="12">Vrátit zpět</string>
|
||||
@@ -153,6 +153,8 @@
|
||||
<string name="pref__theme__sunset_time__label" comment="Label of the sunset time preference">Čas západu slunce</string>
|
||||
<string name="pref__theme__day" comment="Label of the day group (day means light theme)">Denní motiv</string>
|
||||
<string name="pref__theme__night" comment="Label of the night group (night means dark theme)">Noční motiv</string>
|
||||
<string name="pref__theme__theme_accent_color__label" comment="Label of accent color preference in Theme"> Dynamická barva (motivy Material You)
|
||||
</string>
|
||||
<string name="settings__theme_manager__title_manage" comment="Title of the theme manager screen for managing installed and custom themes">Spravovat nainstalované motivy</string>
|
||||
<string name="pref__theme__source_assets" comment="Label for the theme source field">Podklady aplikace FlorisBoard</string>
|
||||
<string name="pref__theme__source_internal" comment="Label for the theme source field">Interní úložiště</string>
|
||||
@@ -161,19 +163,22 @@
|
||||
<string name="settings__theme_manager__title_night" comment="Title of the theme manager screen for night theme selection">Vyberte noční motiv</string>
|
||||
<string name="settings__theme_editor__fine_tune__title">Jemné doladění editoru</string>
|
||||
<string name="settings__theme_editor__fine_tune__level">Úprava úrovně</string>
|
||||
<string name="settings__theme_editor__fine_tune__color_representation">Zobrazení barev</string>
|
||||
<string name="settings__theme_editor__fine_tune__display_kbd_after_dialogs">Zobrazit klávesnici po dialozích</string>
|
||||
<string name="settings__theme_editor__add_rule">Přidat pravidlo</string>
|
||||
<string name="settings__theme_editor__edit_rule">Upravit pravidlo</string>
|
||||
<string name="settings__theme_editor__no_rules_defined">Tato tabulka stylů nemá definována žádná pravidla. Přidejte pravidlo, abyste mohli začít přizpůsobovat tuto tabulku.</string>
|
||||
<string name="settings__theme_editor__rule_already_exists">Pravidlo této tabulky stylů je již definováno.</string>
|
||||
<string name="settings__theme_editor__rule_name">Prvek / anotace</string>
|
||||
<string name="settings__theme_editor__rule_codes">Kódy cílových kláves</string>
|
||||
<string name="settings__theme_editor__rule_groups">Skupiny</string>
|
||||
<string name="settings__theme_editor__rule_shift_states">Stavy shiftu</string>
|
||||
<string name="settings__theme_editor__rule_modes">Cílové režimy (vrstvy)</string>
|
||||
<string name="settings__theme_editor__rule_shift_states">Cílové stavy Shiftu</string>
|
||||
<string name="settings__theme_editor__rule_selectors">Selektory</string>
|
||||
<string name="settings__theme_editor__add_code">Přidat kód klávesy</string>
|
||||
<string name="settings__theme_editor__edit_code">Upravit kód klávesy</string>
|
||||
<string name="settings__theme_editor__no_codes_defined">Použít pravidlo na všechny prvky.</string>
|
||||
<string name="settings__theme_editor__codes_defined">Použít pravidlo pouze na cílové prvky s následujícími kódy kláves:</string>
|
||||
<string name="settings__theme_editor__no_enum_value_to_add_anymore">Byly přidány všechny možné hodnoty.</string>
|
||||
<string name="settings__theme_editor__code_already_exists">Tento klávesový kód je již definován.</string>
|
||||
<string name="settings__theme_editor__code_invalid">Tento kód klávesy není platný. Ujistěte se, že kód klávesy je v rozmezí od {c_min} do {c_max} pro znaky nebo od {i_min} do {i_max} pro interní speciální klávesy.</string>
|
||||
<string name="settings__theme_editor__code_help_text">Případně použijte následující odkazy, které vám pomohou zjistit odpovídající kód klávesy:</string>
|
||||
@@ -190,20 +195,68 @@
|
||||
<string name="settings__theme_editor__property_value">Hodnota vlastnosti</string>
|
||||
<string name="settings__theme_editor__property_value_shape_apply_for_all_corners">Použít pro všechny rohy</string>
|
||||
<string name="settings__theme_editor__property_value_color_dialog_title">Upravit řetězec barvy</string>
|
||||
<string name="settings__theme_editor__file_selector_dialog_title">Vybrat soubor</string>
|
||||
<string name="settings__theme_editor__file_selector_no_files_text">Do tohoto rozšíření zatím nebyly vybrány žádné soubory. Pro importování souborů prosím použijte akci „{action_title}“ na předchozí obrazovce.</string>
|
||||
<string name="settings__theme_editor__component_meta_is_night_theme">Noční motiv</string>
|
||||
<string name="settings__theme_editor__component_meta_is_borderless">Bez okrajů</string>
|
||||
<string name="settings__theme_editor__component_meta_stylesheet_path">Cesta tabulky stylů</string>
|
||||
<string name="settings__theme_editor__stylesheet_error_title">Chyba stylů</string>
|
||||
<string name="settings__theme_editor__stylesheet_error_description">{app_name} se přesto může pokusit načíst soubor stylů a přidat chybějící schémata, pravidla nebo odstranit neplatná pravidla, vlastnosti nebo hodnoty. Chcete, aby aplikace {app_name} tyto změny použila?</string>
|
||||
<string name="snygg__rule_annotation__defines">Proměnné</string>
|
||||
<string name="snygg__rule_annotation__defines_description">Pomocí tohoto pravidla definujte proměnné pro opětovné použití běžných barev nebo velikostí ve vaší tabulce stylů.</string>
|
||||
<string name="snygg__rule_annotation__font">Písmo</string>
|
||||
<string name="snygg__rule_annotation__font_name">Název písma</string>
|
||||
<string name="snygg__rule_element__root">Kořen</string>
|
||||
<string name="snygg__rule_element__window">Okno</string>
|
||||
<string name="snygg__rule_element__key">Klávesa</string>
|
||||
<string name="snygg__rule_element__key_hint">Nápovědy klávesy</string>
|
||||
<string name="snygg__rule_element__key_popup_box">Box vyskakovací klávesy</string>
|
||||
<string name="snygg__rule_element__key_popup_element">Prvek vyskakovací klávesy</string>
|
||||
<string name="snygg__rule_element__key_popup_extended_indicator">Rozšířený indikátor vyskakovací klávesy</string>
|
||||
<string name="snygg__rule_element__clipboard_header">Záhlaví schránky</string>
|
||||
<string name="snygg__rule_element__clipboard_header_button">Tlačítko záhlaví schránky</string>
|
||||
<string name="snygg__rule_element__clipboard_header_text">Text záhlaví schránky</string>
|
||||
<string name="snygg__rule_element__clipboard_subheader">Podzáhlaví schránky</string>
|
||||
<string name="snygg__rule_element__clipboard_content">Obsah schránky</string>
|
||||
<string name="snygg__rule_element__clipboard_filter_row">Řádek filtru schránky</string>
|
||||
<string name="snygg__rule_element__clipboard_filter_chip">Pilulka filtru schránky</string>
|
||||
<string name="snygg__rule_element__clipboard_filter_chip_icon">Ikona pilulky filtru schránky</string>
|
||||
<string name="snygg__rule_element__clipboard_filter_chip_text">Text pilulky filtru schránky</string>
|
||||
<string name="snygg__rule_element__clipboard_grid">Mřížka schránky</string>
|
||||
<string name="snygg__rule_element__clipboard_item">Položka schránky</string>
|
||||
<string name="snygg__rule_element__clipboard_item_description">Popis položky schránky</string>
|
||||
<string name="snygg__rule_element__clipboard_item_popup">Vyskakovací nabídka položky schránky</string>
|
||||
<string name="snygg__rule_element__clipboard_item_timestamp">Čas položky schránky</string>
|
||||
<string name="snygg__rule_element__clipboard_item_actions">Akce položky schránky</string>
|
||||
<string name="snygg__rule_element__clipboard_item_action">Akce položky schránky</string>
|
||||
<string name="snygg__rule_element__clipboard_item_action_icon">Ikona akce položky schránky</string>
|
||||
<string name="snygg__rule_element__clipboard_item_action_text">Text akce položky schránky</string>
|
||||
<string name="snygg__rule_element__clipboard_clear_all_dialog">Dialog vymazání všeho ze schránky</string>
|
||||
<string name="snygg__rule_element__clipboard_clear_all_dialog_message">Zpráva dialogu vymazání všeho ze schránky</string>
|
||||
<string name="snygg__rule_element__clipboard_clear_all_dialog_buttons">Tlačítka dialogu vymazání všeho ze schránky</string>
|
||||
<string name="snygg__rule_element__clipboard_clear_all_dialog_button">Tlačítko dialogu vymazání všeho ze schránky</string>
|
||||
<string name="snygg__rule_element__clipboard_history_disabled_title">Nadpis zakázané historie schránky</string>
|
||||
<string name="snygg__rule_element__clipboard_history_disabled_message">Zpráva zakázané historie schránky</string>
|
||||
<string name="snygg__rule_element__clipboard_history_disabled_button">Tlačítko zakázané historie schránky</string>
|
||||
<string name="snygg__rule_element__clipboard_history_locked_title">Nadpis uzamčené historie schránky</string>
|
||||
<string name="snygg__rule_element__clipboard_history_locked_message">Zpráva uzamčené historie schránky</string>
|
||||
<string name="snygg__rule_element__extracted_landscape_input_layout">Rozložení vstupu na šířku</string>
|
||||
<string name="snygg__rule_element__extracted_landscape_input_field">Pole vstupu na šířku</string>
|
||||
<string name="snygg__rule_element__extracted_landscape_input_action">Akce vstupu na šířku</string>
|
||||
<string name="snygg__rule_element__glide_trail">Stopa tahu</string>
|
||||
<string name="snygg__rule_element__incognito_mode_indicator">Indikátor anonymního režimu</string>
|
||||
<string name="snygg__rule_element__inline_autofill_chip">Pilulka automatického vyplnění na řádku</string>
|
||||
<string name="snygg__rule_element__media">Média</string>
|
||||
<string name="snygg__rule_element__media_emoji_subheader">Podzáhlaví médií emotikonů</string>
|
||||
<string name="snygg__rule_element__media_emoji_key">Klávesa médií emotikonů</string>
|
||||
<string name="snygg__rule_element__media_emoji_key_popup_box">Box vyskakovací klávesy médií emotikonů</string>
|
||||
<string name="snygg__rule_element__media_emoji_key_popup_element">Prvek vyskakovací klávesy médií emotikonů</string>
|
||||
<string name="snygg__rule_element__media_emoji_key_popup_extended_indicator">Rozšířený indikátor vyskakovací klávesy médií emotikonů</string>
|
||||
<string name="snygg__rule_element__media_emoji_tab">Karta médií emotikonů</string>
|
||||
<string name="snygg__rule_element__media_bottom_row">Spodní řádek médií</string>
|
||||
<string name="snygg__rule_element__media_bottom_row_button">Tlačítko spodního řádku médií</string>
|
||||
<string name="snygg__rule_element__one_handed_panel">Režim jedné ruky</string>
|
||||
<string name="snygg__rule_element__one_handed_panel_button">Tlačítko panelu režimu jedné ruky</string>
|
||||
<string name="snygg__rule_element__smartbar">Chytrá lišta</string>
|
||||
<string name="snygg__rule_element__smartbar_shared_actions_row">Řádek sdílených akcí chytré lišty</string>
|
||||
<string name="snygg__rule_element__smartbar_shared_actions_toggle">Přepínač sdílených akcí chytré lišty</string>
|
||||
@@ -211,20 +264,38 @@
|
||||
<string name="snygg__rule_element__smartbar_extended_actions_toggle">Přepínač rozšířených akcí chytré lišty</string>
|
||||
<string name="snygg__rule_element__smartbar_action_key">Akční klávesa chytré lišty</string>
|
||||
<string name="snygg__rule_element__smartbar_action_tile">Akční dlaždice chytré lišty</string>
|
||||
<string name="snygg__rule_element__smartbar_action_tile_icon">Ikona akční dlaždice chytré lišty</string>
|
||||
<string name="snygg__rule_element__smartbar_action_tile_text">Text akční dlaždice chytré lišty</string>
|
||||
<string name="snygg__rule_element__smartbar_actions_overflow">Přetečení akcí chytré lišty</string>
|
||||
<string name="snygg__rule_element__smartbar_actions_overflow_customize_button">Tlačítko přizpůsobení přetečení akcí chytré lišty</string>
|
||||
<string name="snygg__rule_element__smartbar_actions_editor">Editor akcí chytré lišty</string>
|
||||
<string name="snygg__rule_element__smartbar_actions_editor_header">Záhlaví editoru akcí chytré lišty</string>
|
||||
<string name="snygg__rule_element__smartbar_actions_editor_header_button">Tlačítko záhlaví editoru akcí chytré lišty</string>
|
||||
<string name="snygg__rule_element__smartbar_actions_editor_subheader">Podzáhlaví editoru akcí chytré lišty</string>
|
||||
<string name="snygg__rule_element__smartbar_actions_editor_tile_grid">Mřížka dlaždic editoru akcí chytré lišty</string>
|
||||
<string name="snygg__rule_element__smartbar_actions_editor_tile">Dlaždice editoru akcí chytré lišty</string>
|
||||
<string name="snygg__rule_element__smartbar_candidates_row">Řádek navrhnutých slov chytré lišty</string>
|
||||
<string name="snygg__rule_element__smartbar_candidate_word">Navrhnuté slovo v chytré liště</string>
|
||||
<string name="snygg__rule_element__smartbar_candidate_clip">Navrhnutá položka v chytré liště</string>
|
||||
<string name="snygg__rule_element__smartbar_candidate_spacer">Odsazení navrhnutí v chytré liště</string>
|
||||
<string name="snygg__rule_element__smartbar_candidate_word">Navržené slovo v chytré liště</string>
|
||||
<string name="snygg__rule_element__smartbar_candidate_word_text">Text navrženého slova v chytré liště</string>
|
||||
<string name="snygg__rule_element__smartbar_candidate_word_secondary_text">Sekundární text navrženého slova v chytré liště</string>
|
||||
<string name="snygg__rule_element__smartbar_candidate_clip">Navržená položka v chytré liště</string>
|
||||
<string name="snygg__rule_element__smartbar_candidate_clip_icon">Ikona navržené položky v chytré liště</string>
|
||||
<string name="snygg__rule_element__smartbar_candidate_clip_text">Text navržené položky v chytré liště</string>
|
||||
<string name="snygg__rule_element__smartbar_candidate_spacer">Odsazení návrhu v chytré liště</string>
|
||||
<string name="snygg__rule_element__subtype_panel">Panel podtypu</string>
|
||||
<string name="snygg__rule_element__subtype_panel_header">Záhlaví panelu podtypu</string>
|
||||
<string name="snygg__rule_element__subtype_panel_list">Seznam panelu podtypů</string>
|
||||
<string name="snygg__rule_element__subtype_panel_list_item">Položka seznamu panelu podtypů</string>
|
||||
<string name="snygg__rule_element__subtype_panel_list_item_icon_leading">Ikona položky seznamu panelu podtypů (první)</string>
|
||||
<string name="snygg__rule_element__subtype_panel_list_item_text">Text položky seznamu panelu podtypů</string>
|
||||
<string name="snygg__rule_selector__pressed">Stisknuto</string>
|
||||
<string name="snygg__rule_selector__focus">Zaměřeno</string>
|
||||
<string name="snygg__rule_selector__hover">Přejetí</string>
|
||||
<string name="snygg__rule_selector__disabled">Zakázáno</string>
|
||||
<string name="snygg__property_name__background">Pozadí</string>
|
||||
<string name="snygg__property_name__foreground">Popředí</string>
|
||||
<string name="snygg__property_name__background_image">Obrázek na pozadí</string>
|
||||
<string name="snygg__property_name__content_scale">Škálování obashu</string>
|
||||
<string name="snygg__property_name__border_color">Barva okraje</string>
|
||||
<string name="snygg__property_name__border_style">Styl okraje</string>
|
||||
<string name="snygg__property_name__border_width">Šířka okraje</string>
|
||||
@@ -232,8 +303,19 @@
|
||||
<string name="snygg__property_name__font_size">Velikost písma</string>
|
||||
<string name="snygg__property_name__font_style">Styl písma</string>
|
||||
<string name="snygg__property_name__font_weight">Tloušťka písma</string>
|
||||
<string name="snygg__property_name__letter_spacing">Mezery mezi písmeny</string>
|
||||
<string name="snygg__property_name__line_height">Výška řádku</string>
|
||||
<string name="snygg__property_name__margin">Odskočení</string>
|
||||
<string name="snygg__property_name__padding">Odsazení</string>
|
||||
<string name="snygg__property_name__shadow_color">Barva stínu</string>
|
||||
<string name="snygg__property_name__shadow_elevation">Výška stínu</string>
|
||||
<string name="snygg__property_name__shape">Tvar</string>
|
||||
<string name="snygg__property_name__clip">Oříznutí</string>
|
||||
<string name="snygg__property_name__src">Zdroj</string>
|
||||
<string name="snygg__property_name__text_align">Zarovnání textu</string>
|
||||
<string name="snygg__property_name__text_decoration_line">Linka dekorace textu</string>
|
||||
<string name="snygg__property_name__text_max_lines">Maximální počet linek textu</string>
|
||||
<string name="snygg__property_name__text_overflow">Přetékání textu</string>
|
||||
<string name="snygg__property_name__var_primary">Hlavní barva</string>
|
||||
<string name="snygg__property_name__var_primary_variant">Hlavní barva (varianta)</string>
|
||||
<string name="snygg__property_name__var_secondary">Sekundární barva</string>
|
||||
@@ -250,9 +332,16 @@
|
||||
<string name="snygg__property_name__var_shape_variant">Běžný tvar (varianta)</string>
|
||||
<string name="snygg__property_value__explicit_inherit">Zdědit</string>
|
||||
<string name="snygg__property_value__defined_var">Odkaz na proměnnou</string>
|
||||
<string name="snygg__property_value__yes">Ano</string>
|
||||
<string name="snygg__property_value__no">Ne</string>
|
||||
<string name="snygg__property_value__solid_color">Pevná barva</string>
|
||||
<string name="snygg__property_value__material_you_light_color">Barva Material You (světlá)</string>
|
||||
<string name="snygg__property_value__material_you_dark_color">Barva Material You (tmavá)</string>
|
||||
<string name="snygg__property_value__font_family_generic">Rodina písem (obecná)</string>
|
||||
<string name="snygg__property_value__font_family_custom">Rodina písem (vlastní)</string>
|
||||
<string name="snygg__property_value__font_style">Styl písma</string>
|
||||
<string name="snygg__property_value__font_weight">Tloušťka písma</string>
|
||||
<string name="snygg__property_value__padding">Odsazení nebo velikost okraje</string>
|
||||
<string name="snygg__property_value__rectangle_shape">Obdélníkový tvar</string>
|
||||
<string name="snygg__property_value__circle_shape">Kruhový tvar</string>
|
||||
<string name="snygg__property_value__cut_corner_shape_dp">Tvar ořezaného rohu (dp)</string>
|
||||
@@ -262,6 +351,12 @@
|
||||
<string name="snygg__property_value__dp_size">Velikost (dp)</string>
|
||||
<string name="snygg__property_value__sp_size">Velikost (sp)</string>
|
||||
<string name="snygg__property_value__percentage_size">Velikost (%)</string>
|
||||
<string name="snygg__property_value__content_scale">Škálování obashu</string>
|
||||
<string name="snygg__property_value__text_align">Zarovnání textu</string>
|
||||
<string name="snygg__property_value__text_decoration_line">Linka dekorace textu</string>
|
||||
<string name="snygg__property_value__text_max_lines">Maximální počet linek textu</string>
|
||||
<string name="snygg__property_value__text_overflow">Přetékání textu</string>
|
||||
<string name="snygg__property_value__uri">Reference URI</string>
|
||||
<string name="settings__input_feedback__title" comment="Title of Input Feedback screen">Zvuky a vibrace</string>
|
||||
<string name="pref__input_feedback__group_audio__label" comment="Preference group title">Zvuková odezva / zvuky</string>
|
||||
<string name="pref__input_feedback__audio_enabled__label" comment="Preference title">Povolit zvukovou odezvu</string>
|
||||
@@ -280,7 +375,6 @@
|
||||
<string name="pref__input_feedback__haptic_vibration_strength__label" comment="Preference title">Síla vibrací</string>
|
||||
<string name="pref__input_feedback__haptic_vibration_strength__summary_no_vibrator" comment="Preference summary">Tato funkce vyžaduje hardwarové vibrační zařízení, které na tomto zařízení nejspíše chybí</string>
|
||||
<string name="pref__input_feedback__haptic_vibration_strength__summary_no_amplitude_ctrl" comment="Preference summary">Tato funkce vyžaduje hardwarovou podporu řízení amplitudy, která ve vašem zařízení chybí</string>
|
||||
<string name="pref__input_feedback__haptic_vibration_strength__summary_unsupported_android_version" comment="Preference summary">Tato funkce vyžaduje podporu řízení amplitudy, která je dostupná pouze na systému Android 8.0 nebo vyšším</string>
|
||||
<string name="pref__input_feedback__haptic_feat_key_press__label" comment="Preference title">Vibrace při stisku klávesy</string>
|
||||
<string name="pref__input_feedback__haptic_feat_key_long_press__label" comment="Preference title">Vibrace při dlouhém stisku klávesy</string>
|
||||
<string name="pref__input_feedback__haptic_feat_key_repeated_action__label" comment="Preference title">Vibrace při opakované akci klávesy</string>
|
||||
@@ -465,6 +559,13 @@
|
||||
<string name="setup__finish_up__description_p1">{app_name} je nyní povolena ve vašem systému a je připravena na přizpůsobení.</string>
|
||||
<string name="setup__finish_up__description_p2">Pokud objevíte jakékoli problémy, chyby, pády nebo prostě jen budete chtít podat návrh, podívejte se na repozitář projektu na obrazovce O aplikaci!</string>
|
||||
<string name="setup__finish_up__finish_btn">Začít přizpůsobovat</string>
|
||||
<!-- Physical keyboard -->
|
||||
<string name="physical_keyboard__title">Fyzická klávesnice</string>
|
||||
<string name="physical_keyboard__system_settings__title">Systémová nastavení fyzické klávesnice</string>
|
||||
<string name="physical_keyboard__system_settings__summary">Rozložení, klávesové zkratky a modifikátory</string>
|
||||
<string name="physical_keyboard__system_settings__summary_not_attached">Dostupné pouze při připojené klávesnici</string>
|
||||
<string name="physical_keyboard__show_on_screen_keyboard__title">Zobrazit klávesnici na obrazovce</string>
|
||||
<string name="physical_keyboard__show_on_screen_keyboard__summary">Zobrazí klávesnici na obrazovce při používání fyzické klávesnice</string>
|
||||
<!-- Back up & Restore -->
|
||||
<string name="backup_and_restore__title">Záloha a obnovení</string>
|
||||
<string name="backup_and_restore__back_up__title">Zálohovat data</string>
|
||||
@@ -505,7 +606,7 @@
|
||||
<string name="crash_dialog__copy_to_clipboard_failure" comment="Label of Copy to clipboard failure message in crash dialog">Nepodařilo se zkopírovat do systémové schránky: Instance správce schránky nenalezena</string>
|
||||
<string name="crash_dialog__open_issue_tracker" comment="Label of Open issue tracker button in crash dialog">Nahlásit problém (github.com)</string>
|
||||
<string name="crash_dialog__close" comment="Label of Close button in crash dialog">Zavřít</string>
|
||||
<string name="crash_notification_channel__title" comment="Title of crash notification channel">FlorisBoard chybová hlášení</string>
|
||||
<string name="crash_notification_channel__title" comment="Title of crash notification channel">Chybová hlášení FlorisBoard</string>
|
||||
<string name="crash_once_notification__title" comment="Title of the notification for a single crash">FlorisBoard přestal pracovat…</string>
|
||||
<string name="crash_once_notification__body" comment="Body of the notification for a single crash">Klepnutím zobrazíte podrobnosti o chybě</string>
|
||||
<string name="crash_multiple_notification__title" comment="Title of the notification for consecutive crashes">Zdá se, že FlorisBoard přestal opakovaně pracovat…</string>
|
||||
@@ -535,7 +636,7 @@
|
||||
<string name="clipboard__cleared_primary_clip">Primární zkopírovaná položka vymazána</string>
|
||||
<string name="clipboard__cleared_history">Historie vymazána</string>
|
||||
<string name="clipboard__cleared_full_history">Celá historie vymazána</string>
|
||||
<string name="clipboard__confirm_clear_history__message">Opravdu chcete vymazat historii své schránky?</string>
|
||||
<string name="clipboard__confirm_clear_history__message">Opravdu chcete vymazat historii schránky? Smažete tím všechny položky kromě připnutých, nezávisle na aktivních filtrech.</string>
|
||||
<string name="settings__clipboard__title">Schránka</string>
|
||||
<string name="pref__clipboard__use_internal_clipboard__label">Použít interní schránku</string>
|
||||
<string name="pref__clipboard__use_internal_clipboard__summary">Použít interní schránku místo systémové schránky</string>
|
||||
@@ -546,6 +647,7 @@
|
||||
<string name="pref__clipboard__group_clipboard_suggestion__label">Návrhy schránky</string>
|
||||
<string name="pref__clipboard__suggestion_enabled__label" comment="Preference title">Obsah návrhu schránky</string>
|
||||
<string name="pref__clipboard__suggestion_enabled__summary" comment="Preference summary">Navrhnout obsah dříve zkopírovaný do schránky</string>
|
||||
<string name="pref__clipboard__num_history_grid_columns__label">Počet sloupců mřížky</string>
|
||||
<string name="pref__clipboard__suggestion_timeout__label" comment="Preference title; Translators: This should form a sentence together with `pref__clipboard__suggestion_timeout__summary` and is the first part">Omezit návrhy ze schránky na</string>
|
||||
<string name="pref__clipboard__suggestion_timeout__summary" comment="Preference summary; Translators: This should form a sentence together with `pref__clipboard__suggestion_timeout__label` and is the second part">Položky zkopírované v posledních {v} s</string>
|
||||
<string name="pref__clipboard__group_clipboard_history__label">Historie schránky</string>
|
||||
@@ -561,8 +663,6 @@
|
||||
<string name="pref__clipboard__clear_primary_clip_deletes_last_item__summary">Vymazání primární položky také vymaže poslední zápis v historii</string>
|
||||
<string name="send_to_clipboard__unknown_error">Došlo k neznámé chybě. Zkuste to prosím znovu!</string>
|
||||
<string name="send_to_clipboard__type_not_supported_error">Tento typ médií není podporován.</string>
|
||||
<string name="send_to_clipboard__android_version_to_old_error">Pro použití této funkce máte příliš starou verzi systému.
|
||||
</string>
|
||||
<string name="send_to_clipboard__description__copied_image_to_clipboard">Obrázek níže zkopírován do schránky.</string>
|
||||
<!-- Devtools strings -->
|
||||
<string name="devtools__title" comment="Title of Devtools screen. Translators: treat this string as 'Developer tools' for translation, except a similar short term is available for your language.">Vývojářské nástroje</string>
|
||||
@@ -582,6 +682,9 @@
|
||||
<string name="devtools__show_drag_and_drop_helpers__summary" comment="Summary of Show drag and drop helpers in Devtools">Vykreslit jinak neviditelné pomocíky v obrazovkách se systémem drag&drop pro ladění</string>
|
||||
<string name="devtools__clear_udm_internal_database__label" comment="Label of Clear internal user dictionary database in Devtools">Vymazat interní databázi uživatelského slovníku</string>
|
||||
<string name="devtools__clear_udm_internal_database__summary" comment="Summary of Clear internal user dictionary database in Devtools">Vymaže všechna slova z tabulky databáze slovníku</string>
|
||||
<string name="devtools__reset_quick_actions_to_default__label">Resetovat rychlé akce chytré lišty</string>
|
||||
<string name="devtools__reset_quick_actions_to_default__summary">Resetovat rychlé akce chytré lišty na výchozí uspořádání</string>
|
||||
<string name="devtools__reset_quick_actions_to_default__toast_success">Rychlé akce chytré lišty úspěšně resetovány na výchozí nastavení</string>
|
||||
<string name="devtools__reset_flag__label" comment="Label of Reset flag preferences in Devtools">Resetovat vlajku \"{flag_name}\"</string>
|
||||
<string name="devtools__reset_flag_is_ime_set_up__summary" comment="Summary of Reset is IME set up flag in Devtools">Akce ladění pro opětovné ukázání obrazovky prvního nastavení</string>
|
||||
<string name="devtools__test_crash_report__label" comment="Label of Test Crash Report in Devtools">Testovací obrazovka hlášení pádu</string>
|
||||
@@ -630,6 +733,8 @@
|
||||
<string name="ext__editor__metadata__message_invalid">Metadata tohoto rozšíření nejsou platná, zkontrolujte prosím editor metadat pro podrobnosti!</string>
|
||||
<string name="ext__editor__dependencies__title">Spravovat závislosti</string>
|
||||
<string name="ext__editor__files__title">Spravovat soubory archivu</string>
|
||||
<string name="ext__editor__files__type_fonts">Písma</string>
|
||||
<string name="ext__editor__files__type_images">Obrázky</string>
|
||||
<string name="ext__editor__create_component__title">Vytvořit komponentu</string>
|
||||
<string name="ext__editor__create_component__title_theme">Vytvořit téma</string>
|
||||
<string name="ext__editor__create_component__from_empty">Prázdné</string>
|
||||
@@ -703,7 +808,11 @@
|
||||
<string name="action__discard_confirm_message">Opravdu chcete zahodit všechny neuložené změny? Tuto operaci nelze po provedení vrátit zpět.</string>
|
||||
<string name="action__edit">Upravit</string>
|
||||
<string name="action__export">Exportovat</string>
|
||||
<string name="action__export_file">Importovat soubor</string>
|
||||
<string name="action__export_files">Importovat soubory</string>
|
||||
<string name="action__import">Importovat</string>
|
||||
<string name="action__import_file">Importovat soubor</string>
|
||||
<string name="action__import_files">Importovat soubory</string>
|
||||
<string name="action__no">Ne</string>
|
||||
<string name="action__ok">OK</string>
|
||||
<string name="action__restore">Obnovit</string>
|
||||
@@ -725,6 +834,9 @@
|
||||
<string name="general__no_browser_app_found_for_url">Nenalezen žádný prohlížeč pro zobrazení URL {url}</string>
|
||||
<string name="general__select_dropdown_value_placeholder">- vybrat -</string>
|
||||
<string name="general__unlimited">Neomezené</string>
|
||||
<string name="general__file_name">Název souboru</string>
|
||||
<string name="general__properties">Vlastnosti</string>
|
||||
<string name="general__auto" comment="Generic shorthand for 'Automatic' value">Automaticky</string>
|
||||
<!-- Screen orientation strings -->
|
||||
<string name="screen_orientation__portrait">Na výšku</string>
|
||||
<string name="screen_orientation__landscape">Na šířku</string>
|
||||
@@ -743,6 +855,9 @@
|
||||
<string name="enum__candidates_display_mode__dynamic_scrollable" comment="Enum value label">Dynamická šířka a skrolovatelné</string>
|
||||
<string name="enum__capitalization_behavior__capslock_by_double_tap" comment="Enum value label">Zapnout Caps Lock při dvojitém klepnutí na Shift</string>
|
||||
<string name="enum__capitalization_behavior__capslock_by_cycle" comment="Enum value label">Přepnout na další krok kapitalizace při každém stisknutí klávesy Shift</string>
|
||||
<string name="enum__color_representation__hex" comment="Enum value label">Hexadecimální</string>
|
||||
<string name="enum__color_representation__rgb" comment="Enum value label">Červená Zelená Modrá</string>
|
||||
<string name="enum__color_representation__hsv" comment="Enum value label">Odstín Sytost Hodnota</string>
|
||||
<string name="enum__display_kbd_after_dialogs__always" comment="Enum value label">Vždy zobrazit</string>
|
||||
<string name="enum__display_kbd_after_dialogs__always__description" comment="Enum value description">Vždy zobrazit klávesnici po zavření jakéhokoli dialogu editoru</string>
|
||||
<string name="enum__display_kbd_after_dialogs__never" comment="Enum value label">Nikdy nezobrazovat</string>
|
||||
@@ -808,6 +923,13 @@
|
||||
<string name="enum__input_shift_state__shifted_manual" comment="Enum value label">Se shiftem (manuální)</string>
|
||||
<string name="enum__input_shift_state__shifted_automatic" comment="Enum value label">Se shiftem (automatické)</string>
|
||||
<string name="enum__input_shift_state__caps_lock" comment="Enum value label">Caps lock</string>
|
||||
<string name="enum__keyboard_mode__characters" comment="Enum value label">Znaky</string>
|
||||
<string name="enum__keyboard_mode__symbols" comment="Enum value label">Symboly</string>
|
||||
<string name="enum__keyboard_mode__symbols2" comment="Enum value label">Symboly 2</string>
|
||||
<string name="enum__keyboard_mode__numeric" comment="Enum value label">Číselné</string>
|
||||
<string name="enum__keyboard_mode__numeric_advanced" comment="Enum value label">Číselné pokročilé</string>
|
||||
<string name="enum__keyboard_mode__phone" comment="Enum value label">Telefon</string>
|
||||
<string name="enum__keyboard_mode__phone2" comment="Enum value label">Telefon 2</string>
|
||||
<string name="enum__landscape_input_ui_mode__never_show" comment="Enum value label">Nikdy nezobrazovat</string>
|
||||
<string name="enum__landscape_input_ui_mode__always_show" comment="Enum value label">Vždy zobrazovat</string>
|
||||
<string name="enum__landscape_input_ui_mode__dynamically_show" comment="Enum value label">Dynamicky zobrazovat</string>
|
||||
|
||||
@@ -252,6 +252,7 @@
|
||||
<string name="setup__enable_ime__title">Aktivér {app_name}</string>
|
||||
<string name="setup__select_ime__title">Vælg {app_name}</string>
|
||||
<string name="setup__select_ime__switch_keyboard_btn">Skift tastatur</string>
|
||||
<!-- Physical keyboard -->
|
||||
<!-- Back up & Restore -->
|
||||
<!-- Crash Dialog strings -->
|
||||
<string name="crash_dialog__title" comment="Title of crash dialog">FlorisBoard fejlrapport</string>
|
||||
|
||||
@@ -72,6 +72,7 @@
|
||||
<string name="quick_action__ime_ui_mode_clipboard__tooltip">Zwischenablage Verlauf öffnen</string>
|
||||
<string name="quick_action__ime_ui_mode_media" maxLength="12">Emoji</string>
|
||||
<string name="quick_action__ime_ui_mode_media__tooltip">Öffne Emoji-Panel</string>
|
||||
<string name="quick_action__language_switch__tooltip">Sprachwechsel ausführen</string>
|
||||
<string name="quick_action__settings" maxLength="12">Einstellung</string>
|
||||
<string name="quick_action__settings__tooltip">Einstellungen öffnen</string>
|
||||
<string name="quick_action__undo" maxLength="12">Rückgängig</string>
|
||||
@@ -152,6 +153,7 @@
|
||||
<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__theme_accent_color__label" comment="Label of accent color preference in Theme">Akzentfarbe (Material You Designs)</string>
|
||||
<string name="settings__theme_manager__title_manage" comment="Title of the theme manager screen for managing installed and custom themes">Installierte Designs verwalten</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>
|
||||
@@ -167,12 +169,11 @@
|
||||
<string name="settings__theme_editor__rule_already_exists">Diese Stylesheetregel ist schon definiert.</string>
|
||||
<string name="settings__theme_editor__rule_codes">Ziel-Codes</string>
|
||||
<string name="settings__theme_editor__rule_groups">Gruppen</string>
|
||||
<string name="settings__theme_editor__rule_shift_states">Umschalt-Status</string>
|
||||
<string name="settings__theme_editor__rule_selectors">Selektoren</string>
|
||||
<string name="settings__theme_editor__add_code">Key code hinzufügen</string>
|
||||
<string name="settings__theme_editor__edit_code">Key code bearbeiten</string>
|
||||
<string name="settings__theme_editor__no_codes_defined">Regel auf alle Zielelemente anwenden.</string>
|
||||
<string name="settings__theme_editor__codes_defined">Regel nur auf Zielelemente mit folgenden Codes anwenden:</string>
|
||||
<string name="settings__theme_editor__no_enum_value_to_add_anymore">Alle möglichen Werte wurden hinzugefügt.</string>
|
||||
<string name="settings__theme_editor__code_already_exists">Dieser Tastencode ist bereits definiert.</string>
|
||||
<string name="settings__theme_editor__code_invalid">Dieser Tastencode ist nicht gültig. Stelle sicher, dass der Tastencode innerhalb der Spanne von {c_min} bis {c_max} für Zeichen oder von {i_min} bis {i_max} für interne Spezialschlüssel liegt.</string>
|
||||
<string name="settings__theme_editor__code_help_text">Alternativ werden die folgenden Links helfen die korrespondierenden Codes zu finden:</string>
|
||||
@@ -189,19 +190,34 @@
|
||||
<string name="settings__theme_editor__property_value">Eigenschaftswert</string>
|
||||
<string name="settings__theme_editor__property_value_shape_apply_for_all_corners">Auf alle Ecken anwenden</string>
|
||||
<string name="settings__theme_editor__property_value_color_dialog_title">Farbzeichenkette bearbeiten</string>
|
||||
<string name="settings__theme_editor__file_selector_dialog_title">Datei auswählen</string>
|
||||
<string name="settings__theme_editor__file_selector_no_files_text">Es wurden noch keine Dateien zu der Erweiterung hinzugefügt. Bitte nutze {action_title} auf der vorherigen Seite um die Dateien zu importieren.</string>
|
||||
<string name="settings__theme_editor__component_meta_is_night_theme">Ist Nachtthema</string>
|
||||
<string name="settings__theme_editor__component_meta_is_borderless">Ist randlos</string>
|
||||
<string name="settings__theme_editor__component_meta_stylesheet_path">Stylesheetpfad</string>
|
||||
<string name="settings__theme_editor__stylesheet_error_title">Stylesheet Fehler</string>
|
||||
<string name="snygg__rule_annotation__defines">Variablen</string>
|
||||
<string name="snygg__rule_annotation__font">Schriftart</string>
|
||||
<string name="snygg__rule_annotation__font_name">Schriftname</string>
|
||||
<string name="snygg__rule_element__root">Wurzel</string>
|
||||
<string name="snygg__rule_element__window">Fenster</string>
|
||||
<string name="snygg__rule_element__key">Taste</string>
|
||||
<string name="snygg__rule_element__key_hint">Tastenhinweis</string>
|
||||
<string name="snygg__rule_element__clipboard_header">Zwischenablagekopfzeile</string>
|
||||
<string name="snygg__rule_element__clipboard_header_button">Zwischenablagekopfzeilen Knopf</string>
|
||||
<string name="snygg__rule_element__clipboard_header_text">Zwischenablagekopfzeilentext</string>
|
||||
<string name="snygg__rule_element__clipboard_subheader">Zwischenablagenuntertitel</string>
|
||||
<string name="snygg__rule_element__clipboard_content">Zwischenablageninhalt</string>
|
||||
<string name="snygg__rule_element__clipboard_item">Zwischenablagenitem</string>
|
||||
<string name="snygg__rule_element__clipboard_item_popup">Zwischensblagenitem-Popup</string>
|
||||
<string name="snygg__rule_element__clipboard_history_disabled_message">Zwischenablagehistorie Deaktivierungsnachricht</string>
|
||||
<string name="snygg__rule_element__clipboard_history_disabled_button">Zwischenablagehistorie Deaktivierungsknopf</string>
|
||||
<string name="snygg__rule_element__extracted_landscape_input_layout">Eingabeanordnung im Querformat</string>
|
||||
<string name="snygg__rule_element__extracted_landscape_input_field">Eingabefeld im Querformat</string>
|
||||
<string name="snygg__rule_element__extracted_landscape_input_action">Eingabeaktion im Querformat</string>
|
||||
<string name="snygg__rule_element__glide_trail">Bewegungsspur</string>
|
||||
<string name="snygg__rule_element__incognito_mode_indicator">Inkognito-Modus Indikator</string>
|
||||
<string name="snygg__rule_element__media">Medien</string>
|
||||
<string name="snygg__rule_element__one_handed_panel">Einhändiges Feld</string>
|
||||
<string name="snygg__rule_element__smartbar">Schnellzugriffsleiste</string>
|
||||
<string name="snygg__rule_element__smartbar_shared_actions_row">Smartbar geteilte Aktionsleiste</string>
|
||||
@@ -221,9 +237,11 @@
|
||||
<string name="snygg__rule_element__smartbar_candidate_spacer">Smartbar Kandidaten-Abstandshalter</string>
|
||||
<string name="snygg__rule_selector__pressed">Gedrückt</string>
|
||||
<string name="snygg__rule_selector__focus">Fokussiert</string>
|
||||
<string name="snygg__rule_selector__hover">Schweben</string>
|
||||
<string name="snygg__rule_selector__disabled">Deaktiviert</string>
|
||||
<string name="snygg__property_name__background">Hintergrund</string>
|
||||
<string name="snygg__property_name__foreground">Vordergrund</string>
|
||||
<string name="snygg__property_name__background_image">Hintergrundbild</string>
|
||||
<string name="snygg__property_name__border_color">Rahmenfarbe</string>
|
||||
<string name="snygg__property_name__border_style">Rahmenstil</string>
|
||||
<string name="snygg__property_name__border_width">Rahmenbreite</string>
|
||||
@@ -231,6 +249,8 @@
|
||||
<string name="snygg__property_name__font_size">Schriftgröße</string>
|
||||
<string name="snygg__property_name__font_style">Schriftstil</string>
|
||||
<string name="snygg__property_name__font_weight">Schriftstärke</string>
|
||||
<string name="snygg__property_name__letter_spacing">Zeichenabstand</string>
|
||||
<string name="snygg__property_name__line_height">Zeilenhöhe</string>
|
||||
<string name="snygg__property_name__shadow_elevation">Höhe des Schattens</string>
|
||||
<string name="snygg__property_name__shape">Form</string>
|
||||
<string name="snygg__property_name__var_primary">Primärfarbe</string>
|
||||
@@ -249,9 +269,12 @@
|
||||
<string name="snygg__property_name__var_shape_variant">Gemeinsame Form (Variante)</string>
|
||||
<string name="snygg__property_value__explicit_inherit">Erben</string>
|
||||
<string name="snygg__property_value__defined_var">Variable referenzieren</string>
|
||||
<string name="snygg__property_value__yes">Ja</string>
|
||||
<string name="snygg__property_value__no">Nein</string>
|
||||
<string name="snygg__property_value__solid_color">Einfarbig</string>
|
||||
<string name="snygg__property_value__material_you_light_color">Material You Farbe (Hell)</string>
|
||||
<string name="snygg__property_value__material_you_dark_color">Material You Farbe (Dunkel)</string>
|
||||
<string name="snygg__property_value__font_style">Schriftart</string>
|
||||
<string name="snygg__property_value__rectangle_shape">Rechteckform</string>
|
||||
<string name="snygg__property_value__circle_shape">Kreisform</string>
|
||||
<string name="snygg__property_value__cut_corner_shape_dp">Form mit eckigen Ecken (dp)</string>
|
||||
@@ -279,7 +302,6 @@
|
||||
<string name="pref__input_feedback__haptic_vibration_strength__label" comment="Preference title">Vibrationsstärke</string>
|
||||
<string name="pref__input_feedback__haptic_vibration_strength__summary_no_vibrator" comment="Preference summary">Diese Funktion benötigt einen Vibrationsmotor, der bei diesem Gerät anscheinend fehlt</string>
|
||||
<string name="pref__input_feedback__haptic_vibration_strength__summary_no_amplitude_ctrl" comment="Preference summary">Diese Funktion erfordert hardwareseitige Unterstützung zur Festlegung der Stärke von Vibrationsimpulsen, die auf diesem Gerät fehlt</string>
|
||||
<string name="pref__input_feedback__haptic_vibration_strength__summary_unsupported_android_version" comment="Preference summary">Diese Funktion verwendet Api Funktionen zur Steuerung der Stärke von Vibrationsimpulsen, die erst ab Android 8.0 unterstützt werden</string>
|
||||
<string name="pref__input_feedback__haptic_feat_key_press__label" comment="Preference title">Bei Tastendruck vibrieren</string>
|
||||
<string name="pref__input_feedback__haptic_feat_key_long_press__label" comment="Preference title">Bei langem Drücken einer Taste vibrieren</string>
|
||||
<string name="pref__input_feedback__haptic_feat_key_repeated_action__label" comment="Preference title">Bei Doppeltippen auf eine Taste vibrieren</string>
|
||||
@@ -336,6 +358,7 @@
|
||||
<string name="pref__suggestion__display_mode__label" comment="Preference title">Darstellungsart für Vorschläge</string>
|
||||
<string name="pref__suggestion__block_possibly_offensive__label" comment="Preference title">Möglicherweise unangebrachte Wörter blockieren</string>
|
||||
<string name="pref__suggestion__api30_inline_suggestions_enabled__summary" comment="Preference summary">Zeige Inline-Vorschläge von Autofill-Diensten</string>
|
||||
<string name="pref__suggestion__incognito_mode__label" comment="Label of Incognito mode preference in Typing">Inkognito-Modus</string>
|
||||
<string name="pref__correction__title" comment="Preference group title">Korrekturen</string>
|
||||
<string name="pref__correction__auto_capitalization__label" comment="Preference title">Autom. Groß-/Kleinschreibung</string>
|
||||
<string name="pref__correction__auto_capitalization__summary" comment="Preference summary">Automatisches Großschreiben je nach aktuellem Kontext</string>
|
||||
@@ -409,7 +432,16 @@
|
||||
<string name="pref__gestures__delete_key_long_press__label" comment="Preference title">Aktion bei lang gedrückter Löschtaste</string>
|
||||
<string name="pref__gestures__swipe_velocity_threshold__label" comment="Preference title">Gesten-Geschwindigkeitsschwelle</string>
|
||||
<string name="pref__gestures__swipe_distance_threshold__label" comment="Preference title">Gesten-Distanzschwelle</string>
|
||||
<string name="settings__other__title" comment="Title of Other settings">Sonstige</string>
|
||||
<string name="pref__other__settings_theme__label" comment="Label of Settings theme preference in Other">App-Design</string>
|
||||
<string name="pref__other__settings_theme__auto_amoled" comment="Possible value of Settings theme preference in Other">Systemstandard (AMOLED)</string>
|
||||
<string name="pref__other__settings_theme__light" comment="Possible value of Settings theme preference in Other">Hell</string>
|
||||
<string name="pref__other__settings_theme__dark" comment="Possible value of Settings theme preference in Other">Dunkel</string>
|
||||
<string name="pref__other__settings_theme__amoled_dark" comment="Possible value of Settings theme preference in Other">AMOLED Dunkel</string>
|
||||
<string name="pref__other__settings_accent_color__label" comment="Label of accent color preference in Other">Akzentfarben der Einstellungen </string>
|
||||
<string name="pref__other__settings_language__label" comment="Label of Settings language preference in Other">App-Sprache</string>
|
||||
<string name="pref__other__show_app_icon__label" comment="Label of Show app icon preference in Other">Zeige die App in der Übersicht</string>
|
||||
<string name="pref__other__show_app_icon__summary_atleast_q" comment="Summary of Show app icon preference in Other for Android 10+">Immer aktiviert in Android 10+ aufgrund von System-Beschränkungen</string>
|
||||
<!-- About UI strings -->
|
||||
<string name="about__title" comment="Title of About activity">Über</string>
|
||||
<string name="about__app_icon_content_description" comment="Content description of app icon in About">App-Icon von FlorisBoard</string>
|
||||
@@ -450,6 +482,7 @@
|
||||
<string name="setup__finish_up__description_p1">{app_name} ist nun im System aktiviert und bereit von dir angepasst zu werden.</string>
|
||||
<string name="setup__finish_up__description_p2">Falls dir irgendwelche Probleme, Bugs oder Abstürze begegnen, oder du einfach einen Vorschlag machen möchtest, besuche einfach die GitHub Seite des Projekts (zu finden im About \"Über die App\" Screen)!</string>
|
||||
<string name="setup__finish_up__finish_btn">Anpassung beginnen</string>
|
||||
<!-- Physical keyboard -->
|
||||
<!-- Back up & Restore -->
|
||||
<string name="backup_and_restore__title">Sichern & Wiederherstellen</string>
|
||||
<string name="backup_and_restore__back_up__title">Daten sichern</string>
|
||||
@@ -520,7 +553,6 @@
|
||||
<string name="clipboard__cleared_primary_clip">Aktives Element gelöscht</string>
|
||||
<string name="clipboard__cleared_history">Verlauf gelöscht</string>
|
||||
<string name="clipboard__cleared_full_history">Kompletten Verlauf gelöscht</string>
|
||||
<string name="clipboard__confirm_clear_history__message">Soll der Zwischenablagenverlauf wirklich gelöscht werden?</string>
|
||||
<string name="settings__clipboard__title">Zwischenablage</string>
|
||||
<string name="pref__clipboard__use_internal_clipboard__label">Interne Zwischenablage nutzen</string>
|
||||
<string name="pref__clipboard__use_internal_clipboard__summary">Interne Zwischenablage anstatt der Systemzwischenablage verwenden</string>
|
||||
@@ -529,6 +561,10 @@
|
||||
<string name="pref__clipboard__sync_to_system_clipboard__label">Zur Systemzwischenablage synchronisieren</string>
|
||||
<string name="pref__clipboard__sync_to_system_clipboard__summary">Aktualisierungen der Floris Zwischenablage aktualisieren auch die Systemzwischenablage</string>
|
||||
<string name="pref__clipboard__group_clipboard_suggestion__label">Vorschläge aus der Zwischenablage</string>
|
||||
<string name="pref__clipboard__suggestion_enabled__label" comment="Preference title">Vorschläge aus der Zwischenablage</string>
|
||||
<string name="pref__clipboard__suggestion_enabled__summary" comment="Preference summary">Zuvor kopierte Inhalte vorschlagen</string>
|
||||
<string name="pref__clipboard__suggestion_timeout__label" comment="Preference title; Translators: This should form a sentence together with `pref__clipboard__suggestion_timeout__summary` and is the first part">Beschränkung für die Vorschläge der Zwischenablage</string>
|
||||
<string name="pref__clipboard__suggestion_timeout__summary" comment="Preference summary; Translators: This should form a sentence together with `pref__clipboard__suggestion_timeout__label` and is the second part">Elemente, kopiert in den letzten {v} s</string>
|
||||
<string name="pref__clipboard__group_clipboard_history__label">Zwischenablageverlauf</string>
|
||||
<string name="pref__clipboard__enable_clipboard_history__label">Verlauf für Zwischenablage aktivieren</string>
|
||||
<string name="pref__clipboard__enable_clipboard_history__summary">Speichere Elemente der Zwischenablage für schnellen Zugriff</string>
|
||||
@@ -542,7 +578,6 @@
|
||||
<string name="pref__clipboard__clear_primary_clip_deletes_last_item__summary">Durch das Löschen des aktiven Elements wird auch das neueste Verlaufselement entfernt</string>
|
||||
<string name="send_to_clipboard__unknown_error">Ein unbekannter Fehler ist aufgetreten. Bitte versuche es erneut!</string>
|
||||
<string name="send_to_clipboard__type_not_supported_error">Dieser Media-Typ wird nicht unterstützt.</string>
|
||||
<string name="send_to_clipboard__android_version_to_old_error">Die Androidversion ist zu alt für diese Funktion. </string>
|
||||
<string name="send_to_clipboard__description__copied_image_to_clipboard">Nachfolgendes Bild wurde in die Zwischenablage kopiert.</string>
|
||||
<!-- Devtools strings -->
|
||||
<string name="devtools__title" comment="Title of Devtools screen. Translators: treat this string as 'Developer tools' for translation, except a similar short term is available for your language.">Entwicklerwerkzeuge</string>
|
||||
@@ -554,7 +589,7 @@
|
||||
<string name="devtools__show_input_state_overlay__summary" comment="Summary of Show input cache overlay in Devtools">Blendet Eingabe-Overlay zur Fehlersuche ein</string>
|
||||
<string name="devtools__show_spelling_overlay__label" comment="Label of Show spelling overlay in Devtools">Zeige Rechtschreibprüfungs-Overlay</string>
|
||||
<string name="devtools__show_spelling_overlay__summary" comment="Summary of Show spelling overlay in Devtools">Blendet die aktuellen Ergebnisse der Rechtschreibprüfung fürs Debugging ein</string>
|
||||
<string name="devtools__show_inline_autofill_overlay__label">Zeige Autofill-Overlay</string>
|
||||
<string name="devtools__show_inline_autofill_overlay__label">Zeige zeileneingeschobene automatisch einfügende überlage</string>
|
||||
<string name="devtools__show_inline_autofill_overlay__summary">Blendet das aktuelle Autofill-Ergebnis für das Debugging ein</string>
|
||||
<string name="devtools__show_key_touch_boundaries__label" comment="Label of Show key touch boundaries in Devtools">Tastendruck-Umrandungen einschalten</string>
|
||||
<string name="devtools__show_key_touch_boundaries__summary" comment="Summary of Show key touch boundaries in Devtools">Umrandet die gedrückte Taste in Rot</string>
|
||||
@@ -562,6 +597,9 @@
|
||||
<string name="devtools__show_drag_and_drop_helpers__summary" comment="Summary of Show drag and drop helpers in Devtools">Zeige andernfalls unsichtbare Hilfen in Verschiebe-Bildschirmen für Fehlerfindungen</string>
|
||||
<string name="devtools__clear_udm_internal_database__label" comment="Label of Clear internal user dictionary database in Devtools">Interne Benutzerwörterbuch-Datenbank leeren</string>
|
||||
<string name="devtools__clear_udm_internal_database__summary" comment="Summary of Clear internal user dictionary database in Devtools">Leert alle Wörter von der Wörterbuch-Datenbank</string>
|
||||
<string name="devtools__reset_quick_actions_to_default__label">Setzte den Smartbar Schnellzugriff zurück</string>
|
||||
<string name="devtools__reset_quick_actions_to_default__summary">Setzte den Smartbar Schnellzugriff auf Normalzustand zurück</string>
|
||||
<string name="devtools__reset_quick_actions_to_default__toast_success">Zurücksetzen der Smartbar Schnellzugriff auf Normalzustand war Erfolgreich</string>
|
||||
<string name="devtools__reset_flag__label" comment="Label of Reset flag preferences in Devtools">\"{flag_name}\"-Einstellung zurücksetzen</string>
|
||||
<string name="devtools__reset_flag_is_ime_set_up__summary" comment="Summary of Reset is IME set up flag in Devtools">Debug Aktion: Setup Bildschirm erneut anzeigen</string>
|
||||
<string name="devtools__test_crash_report__label" comment="Label of Test Crash Report in Devtools">Ansicht des Absturzberichts testen</string>
|
||||
@@ -610,6 +648,8 @@
|
||||
<string name="ext__editor__metadata__message_invalid">Die Meta-Daten für diese Erweiterunf ist nicht gültig, bitte den Meta-Daten-Editor für Details überprüfen!</string>
|
||||
<string name="ext__editor__dependencies__title">Abhängigkeiten verwalten</string>
|
||||
<string name="ext__editor__files__title">Archivdateien verwalten</string>
|
||||
<string name="ext__editor__files__type_fonts">Schriftarten</string>
|
||||
<string name="ext__editor__files__type_images">Bilder</string>
|
||||
<string name="ext__editor__create_component__title">Komponente erstellen</string>
|
||||
<string name="ext__editor__create_component__title_theme">Design erstellen</string>
|
||||
<string name="ext__editor__create_component__from_empty">Leer</string>
|
||||
@@ -683,7 +723,11 @@
|
||||
<string name="action__discard_confirm_message">Bist du sicher, dass du deine ungespeicherten Änderungen verwerfen möchtest? Diese Aktion kann nicht rückgängig gemacht werden.</string>
|
||||
<string name="action__edit">Bearbeiten</string>
|
||||
<string name="action__export">Exportieren</string>
|
||||
<string name="action__export_file">Datei importieren</string>
|
||||
<string name="action__export_files">Dateien importieren</string>
|
||||
<string name="action__import">Importieren</string>
|
||||
<string name="action__import_file">Datei importieren</string>
|
||||
<string name="action__import_files">Dateien importieren</string>
|
||||
<string name="action__no">Nein</string>
|
||||
<string name="action__ok">Okay</string>
|
||||
<string name="action__restore">Wiederherstellen</string>
|
||||
@@ -705,6 +749,8 @@
|
||||
<string name="general__no_browser_app_found_for_url">Keine Browseranwendung für die URL {url} gefunden</string>
|
||||
<string name="general__select_dropdown_value_placeholder">- wählen -</string>
|
||||
<string name="general__unlimited">Unbegrenzt</string>
|
||||
<string name="general__file_name">Dateiname</string>
|
||||
<string name="general__properties">Eigenschaften</string>
|
||||
<!-- Screen orientation strings -->
|
||||
<string name="screen_orientation__portrait">Hochformat</string>
|
||||
<string name="screen_orientation__landscape">Querformat</string>
|
||||
@@ -723,6 +769,9 @@
|
||||
<string name="enum__candidates_display_mode__dynamic_scrollable" comment="Enum value label">Dynamische Breite & scrollbar</string>
|
||||
<string name="enum__capitalization_behavior__capslock_by_double_tap" comment="Enum value label">Aktiviere die Feststelltaste durch Doppeltippen von Shift</string>
|
||||
<string name="enum__capitalization_behavior__capslock_by_cycle" comment="Enum value label">Wechsel mit jedem Drücken der Shift-Taste zur nächsten Großschreibstufe</string>
|
||||
<string name="enum__color_representation__hex" comment="Enum value label">Hexadezimal</string>
|
||||
<string name="enum__color_representation__rgb" comment="Enum value label">Rot Grün Blau</string>
|
||||
<string name="enum__color_representation__hsv" comment="Enum value label">Farbton Sättigung Wert</string>
|
||||
<string name="enum__display_kbd_after_dialogs__always" comment="Enum value label">Immer anzeigen</string>
|
||||
<string name="enum__display_kbd_after_dialogs__always__description" comment="Enum value description">Immer die Tastatur nach Schließen eines Editordialogs anzeigen</string>
|
||||
<string name="enum__display_kbd_after_dialogs__never" comment="Enum value label">Nie anzeigen</string>
|
||||
|
||||
@@ -95,7 +95,6 @@
|
||||
<string name="pref__input_feedback__haptic_vibration_duration__label" comment="Preference title">Διάρκεια δόνησης</string>
|
||||
<string name="pref__input_feedback__haptic_vibration_strength__label" comment="Preference title">Ένταση δόνησης</string>
|
||||
<string name="pref__input_feedback__haptic_vibration_strength__summary_no_amplitude_ctrl" comment="Preference summary">Αυτό το χαρακτηριστικό απαιτεί υποστήριξη ελέγχου εύρους στο υλισμικό, η οποία απουσιάζει από τη συσκευή σας</string>
|
||||
<string name="pref__input_feedback__haptic_vibration_strength__summary_unsupported_android_version" comment="Preference summary">Αυτό το χαρακτηριστικό απαιτεί υποστήριξη ελέγχου εύρους, η οποία είναι διαθέσιμη μόνο στο Android 8.0 ή νεότερο</string>
|
||||
<string name="pref__input_feedback__haptic_feat_key_press__label" comment="Preference title">Δόνηση πατήματος πλήκτρου</string>
|
||||
<string name="pref__input_feedback__haptic_feat_key_long_press__label" comment="Preference title">Δόνηση παρατεταμένου πατήματος πλήκτρου</string>
|
||||
<string name="pref__input_feedback__haptic_feat_key_repeated_action__label" comment="Preference title">Δόνηση επαναλαμβανόμενης ενέργειας πλήκτρου</string>
|
||||
@@ -227,6 +226,7 @@
|
||||
<string name="setup__finish_up__description_p1">{app_name} είναι τώρα ενεργοποιημένο στο σύστημα και έτοιμο να προσαρμοστεί από εσάς.</string>
|
||||
<string name="setup__finish_up__description_p2">Εάν αντιμετωπίσετε τυχόν θέματα, προβλήματα, σφάλματα ή απλώς θέλετε να κάνετε μία πρόταση, ρίξτε μία ματιά στο αποθετήριο από το πεδίο σχετικά με!</string>
|
||||
<string name="setup__finish_up__finish_btn">Ξεκινήστε την προσαρμογή</string>
|
||||
<!-- Physical keyboard -->
|
||||
<!-- Back up & Restore -->
|
||||
<string name="backup_and_restore__restore__title">Επαναφορά δεδομένων</string>
|
||||
<string name="backup_and_restore__restore__mode">Λειτουργία επαναφοράς</string>
|
||||
|
||||
@@ -19,14 +19,14 @@
|
||||
<string name="prefs__media__emoji_history_enabled" comment="Preference title">Aktivigi emoĝian historion</string>
|
||||
<string name="prefs__media__emoji_history_enabled__summary" comment="Preference summary">Memorigi antaŭ ne longe uzitaj emoĝioj por rapida alireblo</string>
|
||||
<string name="prefs__media__emoji_history_pinned_update_strategy" comment="Preference title">Ĝisdatigon strategio (Alpinglitaj)</string>
|
||||
<string name="prefs__media__emoji_history_recent_update_strategy" comment="Preference title">Ĝisdatigon strategio (Ĵusaj)</string>
|
||||
<string name="prefs__media__emoji_history_recent_update_strategy" comment="Preference title">Ĝisdatigon strategio (Lastaj)</string>
|
||||
<string name="prefs__media__emoji_history_max_size">Maksimumo da konservendaj eroj</string>
|
||||
<string name="prefs__media__emoji_history_pinned_reset">Forgesi alpinglitajn emoĝiojn</string>
|
||||
<string name="prefs__media__emoji_history_reset">Forgesi ĵusajn emoĝiojn</string>
|
||||
<string name="prefs__media__emoji_history_reset">Forgesi lastajn emoĝiojn</string>
|
||||
<string name="prefs__media__emoji_suggestion__title" comment="Preference group title">Emoĝiaj sugestoj</string>
|
||||
<string name="prefs__media__emoji_suggestion_enabled" comment="Preference title">Aktivigi emoĝiajn sugestojn</string>
|
||||
<string name="prefs__media__emoji_suggestion_enabled__summary" comment="Preference summary">Havigi emoĝiajn sugestojn dum ke vi tajpas</string>
|
||||
<string name="prefs__media__emoji_suggestion_type" comment="Preference title">Ekigon tipo</string>
|
||||
<string name="prefs__media__emoji_suggestion_type" comment="Preference title">Ekigon speco</string>
|
||||
<string name="prefs__media__emoji_suggestion_update_history" comment="Preference title">Ĝisdatigi emoĝian historion</string>
|
||||
<string name="prefs__media__emoji_suggestion_update_history__summary" comment="Preference summary">Akcepti sugestitajn emoĝiojn aldonas ilin al la emoĝia historio</string>
|
||||
<string name="prefs__media__emoji_suggestion_candidate_show_name" comment="Preference title">Montri la nomojn de la emoĝioj</string>
|
||||
@@ -48,9 +48,9 @@
|
||||
<string name="emoji__history__usage_tip" comment="Feature discoverability for actions of emoji history">Informo: Vi povas longe tuŝi emoĝiojn en la historio por alpingli aŭ forigi ilin!</string>
|
||||
<string name="emoji__history__removal_success_message" comment="Toast message if user has used the delete action on an emoji in the emoji history">Forigis {emoji} el emoĝiojn historio</string>
|
||||
<string name="emoji__history__pinned">Alpinglitaj</string>
|
||||
<string name="emoji__history__recent">Ĵusaj</string>
|
||||
<string name="emoji__history__recent">Lastaj</string>
|
||||
<!-- Quick action strings -->
|
||||
<string name="quick_action__arrow_up" maxLength="12">Sago supren</string>
|
||||
<string name="quick_action__arrow_up" maxLength="12">Supren</string>
|
||||
<string name="quick_action__arrow_up__tooltip">Movi la kursoron al la supra linio</string>
|
||||
<string name="quick_action__arrow_down" maxLength="12">Suben</string>
|
||||
<string name="quick_action__arrow_down__tooltip">Movi la kursoron al la malsupra linio</string>
|
||||
@@ -72,8 +72,10 @@
|
||||
<string name="quick_action__ime_ui_mode_clipboard__tooltip">Malfermi tondujan historion</string>
|
||||
<string name="quick_action__ime_ui_mode_media" maxLength="12">Emoĝioj</string>
|
||||
<string name="quick_action__ime_ui_mode_media__tooltip">Malfermi emoĝian panelon</string>
|
||||
<string name="quick_action__settings" maxLength="12">Agordo</string>
|
||||
<string name="quick_action__settings__tooltip">Malfermi agordon</string>
|
||||
<string name="quick_action__language_switch" maxLength="12">Lingva ŝanĝo</string>
|
||||
<string name="quick_action__language_switch__tooltip">Baskuligi lingvon</string>
|
||||
<string name="quick_action__settings" maxLength="12">Agordoj</string>
|
||||
<string name="quick_action__settings__tooltip">Malfermi agordojn</string>
|
||||
<string name="quick_action__undo" maxLength="12">Malfari</string>
|
||||
<string name="quick_action__undo__tooltip">Malfari la lastan enigon</string>
|
||||
<string name="quick_action__redo" maxLength="12">Refari</string>
|
||||
@@ -112,6 +114,7 @@
|
||||
<string name="settings__home__ime_not_selected" comment="Warning message shown in Home fragment when FlorisBoard is not selected as the default keyboard">FlorisBoard ne estas elektita kiel la implicita enigmetodo. Klaku ĉi tie por solvi la problemon.</string>
|
||||
<string name="settings__localization__title" comment="Title of languages and Layout screen">Lingvoj & Aranĝoj</string>
|
||||
<string name="settings__localization__display_language_names_in__label" comment="Label of Display language names in preference">Montri lingvajn nomojn en</string>
|
||||
<string name="settings__localization__display_keyboard_labels_in_subtype_language" comment="Label of Display keyboard labels in subtype language preference">Montri klavarajn etikedojn en la subspeca lingvo</string>
|
||||
<string name="settings__localization__group_subtypes__label" comment="Label of subtypes group">Subspecoj</string>
|
||||
<string name="settings__localization__subtype_add_title" comment="Title of subtype dialog when adding a new subtype">Aldoni subspecon</string>
|
||||
<string name="settings__localization__language_pack_title" comment="Title of the language pack manager screen for managing installed and custom language packs">Mastrumi instalitajn lingvajn pakojn</string>
|
||||
@@ -139,6 +142,7 @@
|
||||
<string name="settings__localization__suggested_subtype_presets_none_found" comment="Suggested presets none found">Neniu subspeco jam agordita disponebla. Uzu suban butonon por vidi ĉiujn jam agorditajn subspecojn.</string>
|
||||
<string name="settings__localization__subtype_presets" comment="Subtype presets dialog title">Subspecoj jam agorditaj</string>
|
||||
<string name="settings__localization__subtype_presets_view_all" comment="View all presets button">Montri ĉiujn</string>
|
||||
<string name="settings__localization__subtype_no_subtypes_configured_warning" comment="Warning message that no subtype has been defined">Ŝajnas ke vi agordis neniun subspecon. La subspeco English/QWERTY estos uzata por solvi tiun problemon!</string>
|
||||
<string name="settings__localization__subtype_error_already_exists" comment="Error message shown in subtype dialog when a subtype to add already exists">Ĉi tiu subspeco jam ekzistas!</string>
|
||||
<string name="settings__localization__subtype_error_fields_no_value" comment="Error message shown in subtype editor if at least one field is set to '- select -' (means no value specified)">Almenaŭ unu kampo ne havas valoron elektitan. Bonvolu elekti valoro(j)n por tiu(j) kampo(j).</string>
|
||||
<string name="settings__localization__subtype_error_layout_not_installed" comment="Error message shown in subtype list when a layout is not installed, where %s will be replaced by the layout ID">{layout_id} (ne instalita)</string>
|
||||
@@ -151,6 +155,8 @@
|
||||
<string name="pref__theme__sunset_time__label" comment="Label of the sunset time preference">Sunsubira horo</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="pref__theme__theme_accent_color__label" comment="Label of accent color preference in Theme"> Baza koloro (etosoj Material You)
|
||||
</string>
|
||||
<string name="settings__theme_manager__title_manage" comment="Title of the theme manager screen for managing installed and custom themes">Administri instalitajn etosojn</string>
|
||||
<string name="pref__theme__source_assets" comment="Label for the theme source field">Rimedoj apon FlorisBoard</string>
|
||||
<string name="pref__theme__source_internal" comment="Label for the theme source field">Interna memoro</string>
|
||||
@@ -164,7 +170,6 @@
|
||||
<string name="settings__theme_editor__no_rules_defined">Tiu stilfolio havas neniun regulon difinitan. Aldonu regulon por komenci agordi tiu stilfolio.</string>
|
||||
<string name="settings__theme_editor__rule_already_exists">Tiu stilfolia regulo estas jam difinita.</string>
|
||||
<string name="settings__theme_editor__rule_groups">Grupoj</string>
|
||||
<string name="settings__theme_editor__rule_shift_states">Usklaj statoj</string>
|
||||
<string name="settings__theme_editor__add_code">Aldoni klavaran kodon</string>
|
||||
<string name="settings__theme_editor__edit_code">Redakti klavaran kodon</string>
|
||||
<string name="settings__theme_editor__code_already_exists">Tiu klavaran kodon estas jam difinita.</string>
|
||||
@@ -227,7 +232,6 @@
|
||||
<string name="pref__input_feedback__haptic_vibration_strength__label" comment="Preference title">Vibradon intenseco</string>
|
||||
<string name="pref__input_feedback__haptic_vibration_strength__summary_no_vibrator" comment="Preference summary">Tiu funkcio bezonas aparatan vibrilon, kiu ŝajnas malesti en tiu aparato</string>
|
||||
<string name="pref__input_feedback__haptic_vibration_strength__summary_no_amplitude_ctrl" comment="Preference summary">Tiu funkcio necesas subtenon de la kontrolo aparataran amplitudon, kiu mankas en via aparato</string>
|
||||
<string name="pref__input_feedback__haptic_vibration_strength__summary_unsupported_android_version" comment="Preference summary">Tiu funkcio necesas subtenon de la kontrolo amplitudon, kiu estas nur disponebla en Android 8.0 aŭ pli nova</string>
|
||||
<string name="pref__input_feedback__haptic_feat_key_press__label" comment="Preference title">Vibrado je tuŝoj klavojn</string>
|
||||
<string name="pref__input_feedback__haptic_feat_key_long_press__label" comment="Preference title">Vibrado je longaj tuŝoj klavojn</string>
|
||||
<string name="pref__input_feedback__haptic_feat_key_repeated_action__label" comment="Preference title">Vibrado je ripetitaj klavaj agoj</string>
|
||||
@@ -264,8 +268,10 @@
|
||||
<string name="pref__smartbar__layout__label" comment="Preference title">Aranĝo</string>
|
||||
<string name="pref__smartbar__group_layout_specific__label" comment="Preference group title">Aranĝo-specifaj opcioj</string>
|
||||
<string name="pref__smartbar__flip_toggles__label" comment="Preference title">Inversigi baskulajn butonojn</string>
|
||||
<string name="pref__smartbar__flip_toggles__summary" comment="Preference summary">Inversigi baskulojn de la agojn vico</string>
|
||||
<string name="pref__smartbar__extended_actions_placement__label" comment="Preference title">Pozicio de la agojn-vico</string>
|
||||
<string name="pref__smartbar__flip_toggles__summary" comment="Preference summary">Inversigi baskulojn de la aga vico</string>
|
||||
<string name="pref__smartbar__shared_actions_auto_expand_collapse__label" comment="Preference title">Aŭtomate etendi/maletendi</string>
|
||||
<string name="pref__smartbar__shared_actions_auto_expand_collapse__summary" comment="Preference summary">Aŭtomate etendi/maletendi la kunan agan vicon laŭ nuna stato</string>
|
||||
<string name="pref__smartbar__extended_actions_placement__label" comment="Preference title">Pozicio de la aga vico</string>
|
||||
<!-- Typing strings -->
|
||||
<string name="settings__typing__title" comment="Title of Typing screen">Tajpado</string>
|
||||
<string name="pref__suggestion__title" comment="Preference group title">Sugestoj</string>
|
||||
@@ -367,11 +373,11 @@
|
||||
<string name="about__repository__title" comment="Preference title">Deponejo (GitHub)</string>
|
||||
<string name="about__repository__summary" comment="Preference summary">Fontkodo, diskutoj, problemoj kaj informoj</string>
|
||||
<string name="about__privacy_policy__title" comment="Preference title">Privateca politiko</string>
|
||||
<string name="about__privacy_policy__summary" comment="Preference summary">La privateca politiko de tiu projekto</string>
|
||||
<string name="about__privacy_policy__summary" comment="Preference summary">La privateca politiko de tiu ĉi projekto</string>
|
||||
<string name="about__project_license__title" comment="Preference title">Projekton permesilo</string>
|
||||
<string name="about__project_license__error_license_text_failed" comment="Error text for license text loading failure">Eraro: Fiaskis elŝuti la permesilan tekston.\n-> Kaŭzo: {error_message}</string>
|
||||
<string name="about__third_party_licenses__title" comment="Preference title">Tria-partaj permesiloj</string>
|
||||
<string name="about__third_party_licenses__summary" comment="Preference summary">Permesiloj de la tria-partaj bibliotekoj enhavata en tiu apo</string>
|
||||
<string name="about__third_party_licenses__summary" comment="Preference summary">Permesiloj de la tria-partaj bibliotekoj enhavata en tiu ĉi apo</string>
|
||||
<!-- Setup UI strings -->
|
||||
<string name="setup__title" comment="Title of Setup">Bonvenon!</string>
|
||||
<string name="setup__footer__privacy_policy" comment="Privacy policy label for URL">Privateca politiko</string>
|
||||
@@ -382,6 +388,7 @@
|
||||
<string name="setup__grant_notification_permission__btn">Permesi</string>
|
||||
<string name="setup__finish_up__title">Plenumi</string>
|
||||
<string name="setup__finish_up__finish_btn">Komenci agordi</string>
|
||||
<!-- Physical keyboard -->
|
||||
<!-- Back up & Restore -->
|
||||
<string name="backup_and_restore__title">Savkopiado & Restaŭrigo</string>
|
||||
<string name="backup_and_restore__back_up__title">Savi datumojn</string>
|
||||
@@ -431,7 +438,7 @@
|
||||
<string name="clipboard__locked__title">Via tondujo estas ŝlosita</string>
|
||||
<string name="clipboard__locked__message">Por iri al via tonduja historio, bonvolu unue malŝlosi vian aparaton.</string>
|
||||
<string name="clipboard__group_pinned">Alpinglitaj</string>
|
||||
<string name="clipboard__group_recent">Ĵusaj</string>
|
||||
<string name="clipboard__group_recent">Lastaj</string>
|
||||
<string name="clipboard__group_other">Alia</string>
|
||||
<string name="clipboard__item_description_email">Retpoŝtadreso</string>
|
||||
<string name="clipboard__item_description_url">URL</string>
|
||||
@@ -446,7 +453,6 @@
|
||||
<string name="clipboard__cleared_primary_clip">Viŝis lastan tondujan eron</string>
|
||||
<string name="clipboard__cleared_history">Historio forviŝita</string>
|
||||
<string name="clipboard__cleared_full_history">Historio plene forviŝita</string>
|
||||
<string name="clipboard__confirm_clear_history__message">Ĉu vi estas certa ke vi volas forviŝi vian tondujan historion?</string>
|
||||
<string name="settings__clipboard__title">Tondujo</string>
|
||||
<string name="pref__clipboard__use_internal_clipboard__label">Uzi internan tondujon</string>
|
||||
<string name="pref__clipboard__use_internal_clipboard__summary">Uzi internan tondujon anstataŭ la sistema tondujo</string>
|
||||
@@ -472,8 +478,6 @@
|
||||
<string name="pref__clipboard__clear_primary_clip_deletes_last_item__summary">Viŝi lastan tondujan eron ankaŭ forigas la lastan historian enigaĵon</string>
|
||||
<string name="send_to_clipboard__unknown_error">Nekonata eraro okazis. Bonvolu ree provi!</string>
|
||||
<string name="send_to_clipboard__type_not_supported_error">Tiu aŭdvidaĵon tipo estas ne subtenata.</string>
|
||||
<string name="send_to_clipboard__android_version_to_old_error">La Androidon versio estas tro malnova por tiu funkcio.
|
||||
</string>
|
||||
<string name="send_to_clipboard__description__copied_image_to_clipboard">Malsupra bildo kopiita al tondujo.</string>
|
||||
<!-- Devtools strings -->
|
||||
<string name="devtools__title" comment="Title of Devtools screen. Translators: treat this string as 'Developer tools' for translation, except a similar short term is available for your language.">Programiloj</string>
|
||||
@@ -633,13 +637,13 @@
|
||||
<string name="enum__display_language_names_in__system_locale" comment="Enum value label">Sistemon lingvo</string>
|
||||
<string name="enum__display_language_names_in__native_locale" comment="Enum value label">Nomata lingvo</string>
|
||||
<string name="enum__emoji_history_update_strategy__auto_sort_prepend" comment="Enum value label">Aŭtomate ordigi (komenco)</string>
|
||||
<string name="enum__emoji_history_update_strategy__auto_sort_prepend__description" comment="Enum value description">Aŭtomate ordigi emoĝiojn laŭ uzo. Ĵusaj emoĝioj estos aldonitaj al komenco.</string>
|
||||
<string name="enum__emoji_history_update_strategy__auto_sort_prepend__description" comment="Enum value description">Aŭtomate ordigi emoĝiojn laŭ uzo. Lastaj emoĝioj estos aldonitaj al komenco.</string>
|
||||
<string name="enum__emoji_history_update_strategy__auto_sort_append" comment="Enum value label">Aŭtomate ordigi (fino)</string>
|
||||
<string name="enum__emoji_history_update_strategy__auto_sort_append__description" comment="Enum value description">Aŭtomate ordigi emoĝiojn laŭ uzo. Ĵusaj emoĝioj estos aldonitaj al fino.</string>
|
||||
<string name="enum__emoji_history_update_strategy__auto_sort_append__description" comment="Enum value description">Aŭtomate ordigi emoĝiojn laŭ uzo. Lastaj emoĝioj estos aldonitaj al fino.</string>
|
||||
<string name="enum__emoji_history_update_strategy__manual_sort_prepend" comment="Enum value label">Mane ordigi (komenco)</string>
|
||||
<string name="enum__emoji_history_update_strategy__manual_sort_prepend__description" comment="Enum value description">Ne aŭtomate ordigi emoĝiojn laŭ uzo. Ĵusaj emoĝioj estos aldonitaj al komenco.</string>
|
||||
<string name="enum__emoji_history_update_strategy__manual_sort_prepend__description" comment="Enum value description">Ne aŭtomate ordigi emoĝiojn laŭ uzo. Lastaj emoĝioj estos aldonitaj al komenco.</string>
|
||||
<string name="enum__emoji_history_update_strategy__manual_sort_append" comment="Enum value label">Mane ordigi (fino)</string>
|
||||
<string name="enum__emoji_history_update_strategy__manual_sort_append__description" comment="Enum value description">Ne aŭtomate ordigi emoĝiojn laŭ uzo. Ĵusaj emoĝioj estos aldonitaj al fino.</string>
|
||||
<string name="enum__emoji_history_update_strategy__manual_sort_append__description" comment="Enum value description">Ne aŭtomate ordigi emoĝiojn laŭ uzo. Lastaj emoĝioj estos aldonitaj al fino.</string>
|
||||
<string name="enum__emoji_skin_tone__default" comment="Enum value label">{emoji} Defaŭlta haŭtkoloro</string>
|
||||
<string name="enum__emoji_skin_tone__light_skin_tone" comment="Enum value label">{emoji} Hela haŭtkoloro</string>
|
||||
<string name="enum__emoji_skin_tone__medium_light_skin_tone" comment="Enum value label">{emoji} Heleta haŭtkoloro</string>
|
||||
@@ -687,13 +691,13 @@
|
||||
<string name="enum__shape_corner__bottom_end" comment="Enum value label">Sube dekstre</string>
|
||||
<string name="enum__shape_corner__bottom_start" comment="Enum value label">Supre maldekstre</string>
|
||||
<string name="enum__smartbar_layout__suggestions_only" comment="Enum value label">Nur sugestoj</string>
|
||||
<string name="enum__smartbar_layout__suggestions_only__description" comment="Enum value description">Montri nur la sugestojn-vicon, sen ia ajn agojn-vico/ŝaltilo aŭ fiksita ago</string>
|
||||
<string name="enum__smartbar_layout__suggestions_only__description" comment="Enum value description">Montri nur la sugestan vicon, sen ia ajn aga vico/ŝaltilo aŭ fiksita ago</string>
|
||||
<string name="enum__smartbar_layout__actions_only" comment="Enum value label">Nur agoj</string>
|
||||
<string name="enum__smartbar_layout__actions_only__description" comment="Enum value description">Montri nur la agojn-vicon, sen la sugestojn-vico aŭ eksplicite fiksita ago</string>
|
||||
<string name="enum__smartbar_layout__actions_only__description" comment="Enum value description">Montri nur la agan vicon, sen la sugesta vico aŭ eksplicite fiksita ago</string>
|
||||
<string name="enum__smartbar_layout__suggestions_action_shared" comment="Enum value label">Sugestoj & Agoj kune</string>
|
||||
<string name="enum__smartbar_layout__suggestions_action_shared__description" comment="Enum value description">Komuna ŝaltebla sugestojn kaj agojn vico, kun fiksita ago</string>
|
||||
<string name="enum__smartbar_layout__suggestions_actions_extended" comment="Enum value label">Sugestoj & Agoj plie</string>
|
||||
<string name="enum__smartbar_layout__suggestions_actions_extended__description" comment="Enum value description">Statika sugestojn-vico kaj aldona ŝaltebla agojn-vico, kun fiksita ago</string>
|
||||
<string name="enum__smartbar_layout__suggestions_actions_extended__description" comment="Enum value description">Statika sugesta vico kaj aldona ŝaltebla aga vico, kun fiksita ago</string>
|
||||
<string name="enum__snygg_level__basic" comment="Enum value label">Baza</string>
|
||||
<string name="enum__snygg_level__basic__description" comment="Enum value description">Nur koloraj propraĵoj estas montritaj, propraĵoj kaj reguloj estas tradukitaj.</string>
|
||||
<string name="enum__snygg_level__advanced" comment="Enum value label">Spertula</string>
|
||||
|
||||
@@ -17,24 +17,24 @@
|
||||
<string name="prefs__media__emoji_preferred_hair_style">Estilo del pelo preferido para los emojis</string>
|
||||
<string name="prefs__media__emoji_history__title" comment="Preference group title">Historial de emojis</string>
|
||||
<string name="prefs__media__emoji_history_enabled" comment="Preference title">Habilitar historial de emojis</string>
|
||||
<string name="prefs__media__emoji_history_enabled__summary" comment="Preference summary">Conserva los emojis utilizados recientemente para acceder a ellos rápidamente</string>
|
||||
<string name="prefs__media__emoji_history_enabled__summary" comment="Preference summary">Mantener emojis usados recientemente para un acceso rápido</string>
|
||||
<string name="prefs__media__emoji_history_pinned_update_strategy" comment="Preference title">Estrategia de actualización (fijada)</string>
|
||||
<string name="prefs__media__emoji_history_recent_update_strategy" comment="Preference title">Estrategia de actualización (reciente)</string>
|
||||
<string name="prefs__media__emoji_history_max_size">Número máximo de artículos a guardar</string>
|
||||
<string name="prefs__media__emoji_history_recent_update_strategy" comment="Preference title">Estrategia de actualización (Reciente)</string>
|
||||
<string name="prefs__media__emoji_history_max_size">Cantidad máxima de elementos a guardar</string>
|
||||
<string name="prefs__media__emoji_history_pinned_reset">Restablecer emojis fijados</string>
|
||||
<string name="prefs__media__emoji_history_reset">Restablecer emojis recientes</string>
|
||||
<string name="prefs__media__emoji_suggestion__title" comment="Preference group title">Sugerencias de emoticonos</string>
|
||||
<string name="prefs__media__emoji_suggestion_enabled" comment="Preference title">Habilitar sugerencias de emoticonos</string>
|
||||
<string name="prefs__media__emoji_suggestion_enabled__summary" comment="Preference summary">Proporciona sugerencias de emoji mientras escribes</string>
|
||||
<string name="prefs__media__emoji_suggestion__title" comment="Preference group title">Sugerencias de emojis</string>
|
||||
<string name="prefs__media__emoji_suggestion_enabled" comment="Preference title">Habilitar sugerencias de emojis</string>
|
||||
<string name="prefs__media__emoji_suggestion_enabled__summary" comment="Preference summary">Proporcionar sugerencias de emoji mientras escribes</string>
|
||||
<string name="prefs__media__emoji_suggestion_type" comment="Preference title">Tipo de activador</string>
|
||||
<string name="prefs__media__emoji_suggestion_update_history" comment="Preference title">Actualizar el historial de emojis</string>
|
||||
<string name="prefs__media__emoji_suggestion_update_history__summary" comment="Preference summary">Aceptar emojis sugeridos los añade al historial de emojis</string>
|
||||
<string name="prefs__media__emoji_suggestion_candidate_show_name" comment="Preference title">Mostrar el nombre del emoji</string>
|
||||
<string name="prefs__media__emoji_suggestion_candidate_show_name__summary" comment="Preference summary">Las sugerencias de los emojis muestran su nombre junto al emoji</string>
|
||||
<string name="prefs__media__emoji_suggestion_query_min_length" comment="Preference title">Longitud mínima de la consulta</string>
|
||||
<string name="prefs__media__emoji_suggestion_query_min_length" comment="Preference title">Longitud mínima de consulta</string>
|
||||
<string name="prefs__media__emoji_suggestion_candidate_max_count" comment="Preference title">Número máximo de sugerencias</string>
|
||||
<!-- Emoji strings -->
|
||||
<string name="emoji__category__smileys_emotion" comment="Emoji category name">Smileys & Emociones</string>
|
||||
<string name="emoji__category__smileys_emotion" comment="Emoji category name">Emojis & Emociones</string>
|
||||
<string name="emoji__category__people_body" comment="Emoji category name">Personas & Cuerpo</string>
|
||||
<string name="emoji__category__animals_nature" comment="Emoji category name">Animales & Naturaleza</string>
|
||||
<string name="emoji__category__food_drink" comment="Emoji category name">Comida & Bebida</string>
|
||||
@@ -43,10 +43,10 @@
|
||||
<string name="emoji__category__objects" comment="Emoji category name">Objetos</string>
|
||||
<string name="emoji__category__symbols" comment="Emoji category name">Símbolos</string>
|
||||
<string name="emoji__category__flags" comment="Emoji category name">Banderas</string>
|
||||
<string name="emoji__history__empty_message" comment="Message if the emoji history is empty">No se han encontrado emojis que se hayan usado recientemente. Una vez empieces a usar emojis, aparecerán automáticamente aquí.</string>
|
||||
<string name="emoji__history__empty_message" comment="Message if the emoji history is empty">No se han encontrado emojis recientemente usados. Una vez que empieces a escribir emojis aparecerán aquí.</string>
|
||||
<string name="emoji__history__phone_locked_message" comment="Message to show if phone is locked">Para acceder a tu historial de emojis, por favor, desbloquea primero tu dispositivo.</string>
|
||||
<string name="emoji__history__usage_tip" comment="Feature discoverability for actions of emoji history">Consejo: ¡Mantén presionados los emoticonos en el historial de los mismos para fijarlos o eliminarlos!</string>
|
||||
<string name="emoji__history__removal_success_message" comment="Toast message if user has used the delete action on an emoji in the emoji history">Se ha eliminado {emoji} del historial de emoticonos.</string>
|
||||
<string name="emoji__history__removal_success_message" comment="Toast message if user has used the delete action on an emoji in the emoji history">Se ha eliminado {emoji} del historial de emojis</string>
|
||||
<string name="emoji__history__pinned">Fijado</string>
|
||||
<string name="emoji__history__recent">Reciente</string>
|
||||
<!-- Quick action strings -->
|
||||
@@ -72,6 +72,8 @@
|
||||
<string name="quick_action__ime_ui_mode_clipboard__tooltip">Abrir historial del portapapeles</string>
|
||||
<string name="quick_action__ime_ui_mode_media" maxLength="12">Emoji</string>
|
||||
<string name="quick_action__ime_ui_mode_media__tooltip">Abrir el panel de emojis</string>
|
||||
<string name="quick_action__language_switch" maxLength="12">Mudar idioma</string>
|
||||
<string name="quick_action__language_switch__tooltip">Realizar el cambio del idioma</string>
|
||||
<string name="quick_action__settings" maxLength="12">Ajustes</string>
|
||||
<string name="quick_action__settings__tooltip">Abrir ajustes</string>
|
||||
<string name="quick_action__undo" maxLength="12">Deshacer</string>
|
||||
@@ -153,6 +155,8 @@
|
||||
<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__theme_accent_color__label" comment="Label of accent color preference in Theme"> Color del énfasis (Temas Material You)
|
||||
</string>
|
||||
<string name="settings__theme_manager__title_manage" comment="Title of the theme manager screen for managing installed and custom themes">Gestionar temas instalados</string>
|
||||
<string name="pref__theme__source_assets" comment="Label for the theme source field">Recursos de aplicación de FlorisBoard</string>
|
||||
<string name="pref__theme__source_internal" comment="Label for the theme source field">Almacenamiento interno</string>
|
||||
@@ -161,19 +165,22 @@
|
||||
<string name="settings__theme_manager__title_night" comment="Title of the theme manager screen for night theme selection">Elegir tema oscuro</string>
|
||||
<string name="settings__theme_editor__fine_tune__title">Editor de ajuste fino</string>
|
||||
<string name="settings__theme_editor__fine_tune__level">Nivel de edición</string>
|
||||
<string name="settings__theme_editor__fine_tune__color_representation">Representación de los colores</string>
|
||||
<string name="settings__theme_editor__fine_tune__display_kbd_after_dialogs">Mostrar teclado después de diálogos</string>
|
||||
<string name="settings__theme_editor__add_rule">Añadir regla</string>
|
||||
<string name="settings__theme_editor__edit_rule">Editar regla</string>
|
||||
<string name="settings__theme_editor__no_rules_defined">Esta hoja de estilo no tiene reglas definidas. Agregue una regla para comenzar a personalizar esta hoja de estilo.</string>
|
||||
<string name="settings__theme_editor__rule_already_exists">Esta regla de hoja de estilo ya está definida.</string>
|
||||
<string name="settings__theme_editor__rule_name">Elemento / Nota</string>
|
||||
<string name="settings__theme_editor__rule_codes">Códigos de clave destino</string>
|
||||
<string name="settings__theme_editor__rule_groups">Grupos</string>
|
||||
<string name="settings__theme_editor__rule_shift_states">Cambiar estados</string>
|
||||
<string name="settings__theme_editor__rule_modes">Modos de destino (capas)</string>
|
||||
<string name="settings__theme_editor__rule_shift_states">Estados de destino a mayúsculas</string>
|
||||
<string name="settings__theme_editor__rule_selectors">Selectores</string>
|
||||
<string name="settings__theme_editor__add_code">Añadir código clave</string>
|
||||
<string name="settings__theme_editor__edit_code">Editar código clave</string>
|
||||
<string name="settings__theme_editor__no_codes_defined">Aplicar la regla a todos los elementos de destino.</string>
|
||||
<string name="settings__theme_editor__codes_defined">Aplicar regla solo para desviar los elementos con los siguientes códigos clave:</string>
|
||||
<string name="settings__theme_editor__no_enum_value_to_add_anymore">Todos los valores posibles han sido añadidos.</string>
|
||||
<string name="settings__theme_editor__code_already_exists">Este código clave ya está definido.</string>
|
||||
<string name="settings__theme_editor__code_invalid">Este código clave no es válido. Asegúrese de que el código clave esté dentro del rango de {c_min} a {c_max} para los caracteres o {i_min} a {i_max} para las teclas especiales internas.</string>
|
||||
<string name="settings__theme_editor__code_help_text">Alternativamente, los siguientes enlaces lo ayudarán a encontrar el código clave correspondiente:</string>
|
||||
@@ -190,20 +197,61 @@
|
||||
<string name="settings__theme_editor__property_value">Valor de propiedad</string>
|
||||
<string name="settings__theme_editor__property_value_shape_apply_for_all_corners">Aplicar para todas las esquinas</string>
|
||||
<string name="settings__theme_editor__property_value_color_dialog_title">Editar cadena de colores</string>
|
||||
<string name="settings__theme_editor__file_selector_dialog_title">Seleccionar archivo</string>
|
||||
<string name="settings__theme_editor__file_selector_no_files_text">Aún no se han añadido archivos a esta extensión. Utilice la acción \"{action_title}\" de la pantalla anterior para importar archivos.</string>
|
||||
<string name="settings__theme_editor__component_meta_is_night_theme">Es tema oscuro</string>
|
||||
<string name="settings__theme_editor__component_meta_is_borderless">Es sin borde</string>
|
||||
<string name="settings__theme_editor__component_meta_stylesheet_path">Ruta de la hoja de estilo</string>
|
||||
<string name="settings__theme_editor__stylesheet_error_title">Error en la hoja de estilos</string>
|
||||
<string name="settings__theme_editor__stylesheet_error_description">{app_name} puede intentar cargar con flexibilidad las hojas de estilo y añadir esquemas, reglas, o remover reglas inválidas, propiedades, o valores. ¿Desea que {app_name} aplique esos cambios? </string>
|
||||
<string name="snygg__rule_annotation__defines">Variables</string>
|
||||
<string name="snygg__rule_annotation__defines_description">Defina variables dentro de esta regla para reutilizar colores o tamaños comunes en su hoja de estilo.</string>
|
||||
<string name="snygg__rule_annotation__font">Fuente</string>
|
||||
<string name="snygg__rule_annotation__font_name">Nombre de la fuente</string>
|
||||
<string name="snygg__rule_element__root">Root</string>
|
||||
<string name="snygg__rule_element__window">Ventana</string>
|
||||
<string name="snygg__rule_element__key">Tecla</string>
|
||||
<string name="snygg__rule_element__key_hint">Tecla sugerida</string>
|
||||
<string name="snygg__rule_element__key_popup_box">Caja emergente de tecla</string>
|
||||
<string name="snygg__rule_element__key_popup_element">Elemento emergente de tecla</string>
|
||||
<string name="snygg__rule_element__key_popup_extended_indicator">Indicador extendido emergente de tecla</string>
|
||||
<string name="snygg__rule_element__clipboard_header">Encabezado del portapapeles</string>
|
||||
<string name="snygg__rule_element__clipboard_header_button">Botón de encabezado del portapapeles</string>
|
||||
<string name="snygg__rule_element__clipboard_header_text">Texto de encabezado del portapapeles</string>
|
||||
<string name="snygg__rule_element__clipboard_subheader">Subencabezado del portapapeles</string>
|
||||
<string name="snygg__rule_element__clipboard_content">Contenido del portapapeles</string>
|
||||
<string name="snygg__rule_element__clipboard_item">Ítem de portapapeles</string>
|
||||
<string name="snygg__rule_element__clipboard_item_popup">Ítem de portapapeles emergente</string>
|
||||
<string name="snygg__rule_element__clipboard_item_actions">Acciones de elemento del portapapeles</string>
|
||||
<string name="snygg__rule_element__clipboard_item_action">Acción de elemento del portapapeles</string>
|
||||
<string name="snygg__rule_element__clipboard_item_action_icon">Icono de acción de elemento del portapapeles</string>
|
||||
<string name="snygg__rule_element__clipboard_item_action_text">Texto de acción de elemento del portapapeles</string>
|
||||
<string name="snygg__rule_element__clipboard_clear_all_dialog">Diálogo de borrar todo del portapapeles</string>
|
||||
<string name="snygg__rule_element__clipboard_clear_all_dialog_message">Mensaje de diálogo de borrar todo del portapapeles</string>
|
||||
<string name="snygg__rule_element__clipboard_clear_all_dialog_buttons">Botones de diálogo de borrar todo del portapapeles</string>
|
||||
<string name="snygg__rule_element__clipboard_clear_all_dialog_button">Botón de diálogo de borrar todo del portapapeles</string>
|
||||
<string name="snygg__rule_element__clipboard_history_disabled_title">Título de historial deshabilitado del portapapeles</string>
|
||||
<string name="snygg__rule_element__clipboard_history_disabled_message">Mensaje de historial deshabilitado del portapapeles</string>
|
||||
<string name="snygg__rule_element__clipboard_history_disabled_button">Botón de historial deshabilitado del portapapeles</string>
|
||||
<string name="snygg__rule_element__clipboard_history_locked_title">Título de historial bloqueado del portapapeles</string>
|
||||
<string name="snygg__rule_element__clipboard_history_locked_message">Mensaje de historial bloqueado del portapapeles</string>
|
||||
<string name="snygg__rule_element__extracted_landscape_input_layout">Disposición de la entrada del paisaje</string>
|
||||
<string name="snygg__rule_element__extracted_landscape_input_field">Campo de entrada en paisaje</string>
|
||||
<string name="snygg__rule_element__extracted_landscape_input_action">Acción de entrada apaisada</string>
|
||||
<string name="snygg__rule_element__glide_trail">Rastro del gesto</string>
|
||||
<string name="snygg__rule_element__incognito_mode_indicator">Indicador de modo incógnito</string>
|
||||
<string name="snygg__rule_element__inline_autofill_chip">Chip de autollenado en línea</string>
|
||||
<string name="snygg__rule_element__media">Multimedia</string>
|
||||
<string name="snygg__rule_element__media_emoji_subheader">Subencabezado de emoji multimedia</string>
|
||||
<string name="snygg__rule_element__media_emoji_key">Tecla de emoji multimedia</string>
|
||||
<string name="snygg__rule_element__media_emoji_key_popup_box">Caja emergente de la tecla de emoji multimedia</string>
|
||||
<string name="snygg__rule_element__media_emoji_key_popup_element">Elemento emergente de la tecla de emoji multimedia</string>
|
||||
<string name="snygg__rule_element__media_emoji_key_popup_extended_indicator">Indicador extendido emergente de la tecla de emoji multimedia</string>
|
||||
<string name="snygg__rule_element__media_emoji_tab">Pestaña de emoji multimedia</string>
|
||||
<string name="snygg__rule_element__media_bottom_row">Fila inferior multimedia</string>
|
||||
<string name="snygg__rule_element__media_bottom_row_button">Botón de fila inferior multimedia</string>
|
||||
<string name="snygg__rule_element__one_handed_panel">Panel a una mano</string>
|
||||
<string name="snygg__rule_element__one_handed_panel_button">Botón de panel a una mano</string>
|
||||
<string name="snygg__rule_element__smartbar">Barra inteligente</string>
|
||||
<string name="snygg__rule_element__smartbar_shared_actions_row">Fila de acciones compartidas de la barra inteligente</string>
|
||||
<string name="snygg__rule_element__smartbar_shared_actions_toggle">Alternar acciones compartidas de la barra inteligente</string>
|
||||
@@ -211,20 +259,38 @@
|
||||
<string name="snygg__rule_element__smartbar_extended_actions_toggle">Alternar acciones extendidas de la barra inteligente</string>
|
||||
<string name="snygg__rule_element__smartbar_action_key">Tecla de acción de la barra inteligente</string>
|
||||
<string name="snygg__rule_element__smartbar_action_tile">Mosaico de acción de la barra inteligente</string>
|
||||
<string name="snygg__rule_element__smartbar_action_tile_icon">Icono de mosaico de acción de la barra inteligente</string>
|
||||
<string name="snygg__rule_element__smartbar_action_tile_text">Texto de mosaico de acción de la barra inteligente</string>
|
||||
<string name="snygg__rule_element__smartbar_actions_overflow">Acciones de overflow de la barra inteligente</string>
|
||||
<string name="snygg__rule_element__smartbar_actions_overflow_customize_button">Botón de personalización de overflow de acciones de la barra inteligente</string>
|
||||
<string name="snygg__rule_element__smartbar_actions_editor">Editor de acciones de la barra inteligente</string>
|
||||
<string name="snygg__rule_element__smartbar_actions_editor_header">Cabecera del editor de acciones de la barra inteligente</string>
|
||||
<string name="snygg__rule_element__smartbar_actions_editor_header_button">Botón de encabezado del editor de acciones de la barra inteligente</string>
|
||||
<string name="snygg__rule_element__smartbar_actions_editor_subheader">Subencabezado del editor de acciones de la barra inteligente</string>
|
||||
<string name="snygg__rule_element__smartbar_actions_editor_tile_grid">Cuadrícula del editor de acciones de la barra inteligente</string>
|
||||
<string name="snygg__rule_element__smartbar_actions_editor_tile">Mosaico del editor de acciones de la barra inteligente</string>
|
||||
<string name="snygg__rule_element__smartbar_candidates_row">Fila de candidatos de la barra inteligente</string>
|
||||
<string name="snygg__rule_element__smartbar_candidate_word">Palabra candidata de barra inteligente</string>
|
||||
<string name="snygg__rule_element__smartbar_candidate_word_text">Texto de palabra candidata de la barra inteligente</string>
|
||||
<string name="snygg__rule_element__smartbar_candidate_word_secondary_text">Texto secundario de palabra candidata de la barra inteligente</string>
|
||||
<string name="snygg__rule_element__smartbar_candidate_clip">Clip candidato de barra inteligente</string>
|
||||
<string name="snygg__rule_element__smartbar_candidate_clip_icon">Icono de clip candidato de la barra inteligente</string>
|
||||
<string name="snygg__rule_element__smartbar_candidate_clip_text">Texto de clip candidato de la barra inteligente</string>
|
||||
<string name="snygg__rule_element__smartbar_candidate_spacer">Espaciado candidato de barra inteligente</string>
|
||||
<string name="snygg__rule_element__subtype_panel">Panel subtipo</string>
|
||||
<string name="snygg__rule_element__subtype_panel_header">Encabezado de panel subtipo</string>
|
||||
<string name="snygg__rule_element__subtype_panel_list">Lista de panel subtipo</string>
|
||||
<string name="snygg__rule_element__subtype_panel_list_item">Elemento de lista de panel subtipo</string>
|
||||
<string name="snygg__rule_element__subtype_panel_list_item_icon_leading">Icono de elemento de lista de panel subtipo (importante)</string>
|
||||
<string name="snygg__rule_element__subtype_panel_list_item_text">Texto de elemento de lista de panel subtipo</string>
|
||||
<string name="snygg__rule_selector__pressed">Presionado</string>
|
||||
<string name="snygg__rule_selector__focus">Focalizado</string>
|
||||
<string name="snygg__rule_selector__hover">Flotar</string>
|
||||
<string name="snygg__rule_selector__disabled">Deshabilitado</string>
|
||||
<string name="snygg__property_name__background">Fondo</string>
|
||||
<string name="snygg__property_name__foreground">Primer plano</string>
|
||||
<string name="snygg__property_name__background_image">Imagen de fondo</string>
|
||||
<string name="snygg__property_name__content_scale">Escala de contenido</string>
|
||||
<string name="snygg__property_name__border_color">Color de borde</string>
|
||||
<string name="snygg__property_name__border_style">Estilo de borde</string>
|
||||
<string name="snygg__property_name__border_width">Ancho de borde</string>
|
||||
@@ -232,8 +298,19 @@
|
||||
<string name="snygg__property_name__font_size">Tamaño de fuente</string>
|
||||
<string name="snygg__property_name__font_style">Estilo de fuente</string>
|
||||
<string name="snygg__property_name__font_weight">Ancho de fuente</string>
|
||||
<string name="snygg__property_name__letter_spacing">Espaciado de letras</string>
|
||||
<string name="snygg__property_name__line_height">Altura de la línea</string>
|
||||
<string name="snygg__property_name__margin">Margen</string>
|
||||
<string name="snygg__property_name__padding">Espaciado</string>
|
||||
<string name="snygg__property_name__shadow_color">Color de sombra</string>
|
||||
<string name="snygg__property_name__shadow_elevation">Elevación de sombra</string>
|
||||
<string name="snygg__property_name__shape">Forma</string>
|
||||
<string name="snygg__property_name__clip">Clip</string>
|
||||
<string name="snygg__property_name__src">Fuente</string>
|
||||
<string name="snygg__property_name__text_align">Alineado de texto</string>
|
||||
<string name="snygg__property_name__text_decoration_line">Línea de decoración del texto</string>
|
||||
<string name="snygg__property_name__text_max_lines">Líneas máximas del texto</string>
|
||||
<string name="snygg__property_name__text_overflow">Desbordamiento de texto</string>
|
||||
<string name="snygg__property_name__var_primary">Color principal</string>
|
||||
<string name="snygg__property_name__var_primary_variant">Color principal (variante)</string>
|
||||
<string name="snygg__property_name__var_secondary">Color secundario</string>
|
||||
@@ -250,9 +327,16 @@
|
||||
<string name="snygg__property_name__var_shape_variant">Forma común (variante)</string>
|
||||
<string name="snygg__property_value__explicit_inherit">Heredar</string>
|
||||
<string name="snygg__property_value__defined_var">Referencia de Var</string>
|
||||
<string name="snygg__property_value__yes">Sí</string>
|
||||
<string name="snygg__property_value__no">No</string>
|
||||
<string name="snygg__property_value__solid_color">Color sólido</string>
|
||||
<string name="snygg__property_value__material_you_light_color">Color Material You (claro)</string>
|
||||
<string name="snygg__property_value__material_you_dark_color">Color Material You (oscuro)</string>
|
||||
<string name="snygg__property_value__font_family_generic">Familia de fuente (genérico)</string>
|
||||
<string name="snygg__property_value__font_family_custom">Familia de fuente (personalizado)</string>
|
||||
<string name="snygg__property_value__font_style">Estilo de fuente</string>
|
||||
<string name="snygg__property_value__font_weight">Ancho de fuente</string>
|
||||
<string name="snygg__property_value__padding">Espaciado o margen</string>
|
||||
<string name="snygg__property_value__rectangle_shape">Forma rectangular</string>
|
||||
<string name="snygg__property_value__circle_shape">Forma circular</string>
|
||||
<string name="snygg__property_value__cut_corner_shape_dp">Forma de esquina recortada (dp)</string>
|
||||
@@ -262,6 +346,12 @@
|
||||
<string name="snygg__property_value__dp_size">Tamaño (dp)</string>
|
||||
<string name="snygg__property_value__sp_size">Tamaño (sp)</string>
|
||||
<string name="snygg__property_value__percentage_size">Tamaño (%)</string>
|
||||
<string name="snygg__property_value__content_scale">Escala de contenido</string>
|
||||
<string name="snygg__property_value__text_align">Alineado de texto</string>
|
||||
<string name="snygg__property_value__text_decoration_line">Línea de decoración de texto</string>
|
||||
<string name="snygg__property_value__text_max_lines">Líneas máximas de texto</string>
|
||||
<string name="snygg__property_value__text_overflow">Desbordamiento de texto</string>
|
||||
<string name="snygg__property_value__uri">Referencia URI</string>
|
||||
<string name="settings__input_feedback__title" comment="Title of Input Feedback screen">Sonidos & Vibración</string>
|
||||
<string name="pref__input_feedback__group_audio__label" comment="Preference group title">Respuesta de audio / Sonidos</string>
|
||||
<string name="pref__input_feedback__audio_enabled__label" comment="Preference title">Habilitar respuesta de audio</string>
|
||||
@@ -280,7 +370,6 @@
|
||||
<string name="pref__input_feedback__haptic_vibration_strength__label" comment="Preference title">Intensidad de vibración</string>
|
||||
<string name="pref__input_feedback__haptic_vibration_strength__summary_no_vibrator" comment="Preference summary">Esta función requiere de un motor de vibración, el cual al parecer no está presente en este dispositivo</string>
|
||||
<string name="pref__input_feedback__haptic_vibration_strength__summary_no_amplitude_ctrl" comment="Preference summary">Esta función requiere soporte de control de amplitud de hardware, el cual falta en su dispositivo</string>
|
||||
<string name="pref__input_feedback__haptic_vibration_strength__summary_unsupported_android_version" comment="Preference summary">Esta función requiere soporte de control de amplitud, el cual solo está disponible desde Android 8.0 en adelante</string>
|
||||
<string name="pref__input_feedback__haptic_feat_key_press__label" comment="Preference title">Vibración al presionar una tecla</string>
|
||||
<string name="pref__input_feedback__haptic_feat_key_long_press__label" comment="Preference title">Vibración al presionar prolongadamente</string>
|
||||
<string name="pref__input_feedback__haptic_feat_key_repeated_action__label" comment="Preference title">Vibración al presionar repetidamente</string>
|
||||
@@ -465,6 +554,13 @@
|
||||
<string name="setup__finish_up__description_p1">{app_name} ahora está habilitado en su sistema y listo para ser personalizado.</string>
|
||||
<string name="setup__finish_up__description_p2">Si encuentra algún problema, errores, fallos o sólo desea hacer alguna sugerencia, ¡revise el repositorio del proyecto en el menú de \"Acerca de\"!</string>
|
||||
<string name="setup__finish_up__finish_btn">Empiece a personalizar</string>
|
||||
<!-- Physical keyboard -->
|
||||
<string name="physical_keyboard__title">Teclado físico</string>
|
||||
<string name="physical_keyboard__system_settings__title">Configuración del teclado físico del sistema</string>
|
||||
<string name="physical_keyboard__system_settings__summary">Distribuciones, atajos de teclado y teclas modificadoras</string>
|
||||
<string name="physical_keyboard__system_settings__summary_not_attached">Solo disponible cuando el teclado está conectado</string>
|
||||
<string name="physical_keyboard__show_on_screen_keyboard__title">Mostrar teclado en pantalla</string>
|
||||
<string name="physical_keyboard__show_on_screen_keyboard__summary">Mostrar el teclado en pantalla mientras se utiliza el teclado físico</string>
|
||||
<!-- Back up & Restore -->
|
||||
<string name="backup_and_restore__title">Respaldar & Restaurar</string>
|
||||
<string name="backup_and_restore__back_up__title">Respaldar datos</string>
|
||||
@@ -535,7 +631,6 @@
|
||||
<string name="clipboard__cleared_primary_clip">Clip principal borrado</string>
|
||||
<string name="clipboard__cleared_history">Historial borrado</string>
|
||||
<string name="clipboard__cleared_full_history">Historial completo borrado</string>
|
||||
<string name="clipboard__confirm_clear_history__message">¿Está seguro de querer borrar su historial de portapapeles?</string>
|
||||
<string name="settings__clipboard__title">Portapapeles</string>
|
||||
<string name="pref__clipboard__use_internal_clipboard__label">Usar portapapeles interno</string>
|
||||
<string name="pref__clipboard__use_internal_clipboard__summary">Usar portapapeles interno en vez del portapapeles del sistema</string>
|
||||
@@ -546,6 +641,7 @@
|
||||
<string name="pref__clipboard__group_clipboard_suggestion__label">Sugerencias del portapapeles</string>
|
||||
<string name="pref__clipboard__suggestion_enabled__label" comment="Preference title">Sugerencias del contenido del portapapeles</string>
|
||||
<string name="pref__clipboard__suggestion_enabled__summary" comment="Preference summary">Sugerir contenido del portapapeles copiado anteriormente</string>
|
||||
<string name="pref__clipboard__num_history_grid_columns__label">Número de columnas de la cuadrícula</string>
|
||||
<string name="pref__clipboard__suggestion_timeout__label" comment="Preference title; Translators: This should form a sentence together with `pref__clipboard__suggestion_timeout__summary` and is the first part">Limitar las sugerencias del portapapeles a</string>
|
||||
<string name="pref__clipboard__suggestion_timeout__summary" comment="Preference summary; Translators: This should form a sentence together with `pref__clipboard__suggestion_timeout__label` and is the second part">Elementos copiados en los últimos {v} s</string>
|
||||
<string name="pref__clipboard__group_clipboard_history__label">Historial del portapapeles</string>
|
||||
@@ -561,7 +657,6 @@
|
||||
<string name="pref__clipboard__clear_primary_clip_deletes_last_item__summary">Al borrar el clip principal también se borra la última entrada del historial</string>
|
||||
<string name="send_to_clipboard__unknown_error">Ha ocurrido un error desconocido. Por favor, vuelve a intentarlo.</string>
|
||||
<string name="send_to_clipboard__type_not_supported_error">Este tipo de medio no está soportado.</string>
|
||||
<string name="send_to_clipboard__android_version_to_old_error">La versión de android es demasiado antigua para esta función.</string>
|
||||
<string name="send_to_clipboard__description__copied_image_to_clipboard">Imagen copiada en el portapapeles.</string>
|
||||
<!-- Devtools strings -->
|
||||
<string name="devtools__title" comment="Title of Devtools screen. Translators: treat this string as 'Developer tools' for translation, except a similar short term is available for your language.">Herramientas de desarrollo</string>
|
||||
@@ -581,6 +676,9 @@
|
||||
<string name="devtools__show_drag_and_drop_helpers__summary" comment="Summary of Show drag and drop helpers in Devtools">Renderiza los ayudantes, que de otro modo serían invisibles, en las pantallas de arrastrar & soltar para la depuración</string>
|
||||
<string name="devtools__clear_udm_internal_database__label" comment="Label of Clear internal user dictionary database in Devtools">Borrar base de datos del diccionario interno</string>
|
||||
<string name="devtools__clear_udm_internal_database__summary" comment="Summary of Clear internal user dictionary database in Devtools">Borrar todas las palabras de la tabla de base de datos del diccionario</string>
|
||||
<string name="devtools__reset_quick_actions_to_default__label">Restablecer acciones rápidas de la Smartbar</string>
|
||||
<string name="devtools__reset_quick_actions_to_default__summary">Restablecer la disposición por defecto de las acciones rápidas de la Smartbar</string>
|
||||
<string name="devtools__reset_quick_actions_to_default__toast_success">Las acciones rápidas de la Smartbar se restablecieron correctamente a su valor predeterminado</string>
|
||||
<string name="devtools__reset_flag__label" comment="Label of Reset flag preferences in Devtools">Restablecer flag \"{flag_name}\"</string>
|
||||
<string name="devtools__reset_flag_is_ime_set_up__summary" comment="Summary of Reset is IME set up flag in Devtools">Acción de depuración para mostrar nuevamente la pantalla de configuración</string>
|
||||
<string name="devtools__test_crash_report__label" comment="Label of Test Crash Report in Devtools">Probar pantalla de reporte de fallos</string>
|
||||
@@ -629,6 +727,8 @@
|
||||
<string name="ext__editor__metadata__message_invalid">Los metadatos para esta extensión no son válidos, ¡por favor verifique el editor de metadatos para más detalles!</string>
|
||||
<string name="ext__editor__dependencies__title">Administrar dependencias</string>
|
||||
<string name="ext__editor__files__title">Administrar ficheros de archivos</string>
|
||||
<string name="ext__editor__files__type_fonts">Tipo de letra</string>
|
||||
<string name="ext__editor__files__type_images">Imágenes</string>
|
||||
<string name="ext__editor__create_component__title">Crear componente</string>
|
||||
<string name="ext__editor__create_component__title_theme">Crear tema</string>
|
||||
<string name="ext__editor__create_component__from_empty">Vacío</string>
|
||||
@@ -702,7 +802,11 @@
|
||||
<string name="action__discard_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="action__edit">Editar</string>
|
||||
<string name="action__export">Exportar</string>
|
||||
<string name="action__export_file">Importar archivo</string>
|
||||
<string name="action__export_files">Importar archivos</string>
|
||||
<string name="action__import">Importar</string>
|
||||
<string name="action__import_file">Importar archivo</string>
|
||||
<string name="action__import_files">Importar archivos</string>
|
||||
<string name="action__no">No</string>
|
||||
<string name="action__ok">OK</string>
|
||||
<string name="action__restore">Restaurar</string>
|
||||
@@ -724,6 +828,9 @@
|
||||
<string name="general__no_browser_app_found_for_url">No se ha encontrado ninguna aplicación de navegador para manejar la URL {url}</string>
|
||||
<string name="general__select_dropdown_value_placeholder">- seleccionar -</string>
|
||||
<string name="general__unlimited">Sin límite</string>
|
||||
<string name="general__file_name">Nombre del archivo</string>
|
||||
<string name="general__properties">Propiedades</string>
|
||||
<string name="general__auto" comment="Generic shorthand for 'Automatic' value">Auto</string>
|
||||
<!-- Screen orientation strings -->
|
||||
<string name="screen_orientation__portrait">Retrato</string>
|
||||
<string name="screen_orientation__landscape">Paisaje</string>
|
||||
@@ -742,6 +849,9 @@
|
||||
<string name="enum__candidates_display_mode__dynamic_scrollable" comment="Enum value label">Ancho dinámico & desplazable</string>
|
||||
<string name="enum__capitalization_behavior__capslock_by_double_tap" comment="Enum value label">Permitr Bloq May haciendo doble toque en mayúscula</string>
|
||||
<string name="enum__capitalization_behavior__capslock_by_cycle" comment="Enum value label">Cambiar modo de capitalización cada vez que se pulsa la tecla Mayús</string>
|
||||
<string name="enum__color_representation__hex" comment="Enum value label">Hexadecimal</string>
|
||||
<string name="enum__color_representation__rgb" comment="Enum value label">Rojo Verde Azul</string>
|
||||
<string name="enum__color_representation__hsv" comment="Enum value label">Tono Saturación Valor</string>
|
||||
<string name="enum__display_kbd_after_dialogs__always" comment="Enum value label">Mostrar siempre</string>
|
||||
<string name="enum__display_kbd_after_dialogs__always__description" comment="Enum value description">Mostrar siempre el teclado al cerrar un editor de diálogo</string>
|
||||
<string name="enum__display_kbd_after_dialogs__never" comment="Enum value label">No mostrar nunca</string>
|
||||
@@ -807,6 +917,13 @@
|
||||
<string name="enum__input_shift_state__shifted_manual" comment="Enum value label">Cambio (manual)</string>
|
||||
<string name="enum__input_shift_state__shifted_automatic" comment="Enum value label">Cambio (automático)</string>
|
||||
<string name="enum__input_shift_state__caps_lock" comment="Enum value label">Bloq Mayús</string>
|
||||
<string name="enum__keyboard_mode__characters" comment="Enum value label">Caracteres</string>
|
||||
<string name="enum__keyboard_mode__symbols" comment="Enum value label">Símbolos</string>
|
||||
<string name="enum__keyboard_mode__symbols2" comment="Enum value label">Símbolos 2</string>
|
||||
<string name="enum__keyboard_mode__numeric" comment="Enum value label">Numérico</string>
|
||||
<string name="enum__keyboard_mode__numeric_advanced" comment="Enum value label">Avanzado numérico</string>
|
||||
<string name="enum__keyboard_mode__phone" comment="Enum value label">Teléfono</string>
|
||||
<string name="enum__keyboard_mode__phone2" comment="Enum value label">Teléfono 2</string>
|
||||
<string name="enum__landscape_input_ui_mode__never_show" comment="Enum value label">No mostrar nunca</string>
|
||||
<string name="enum__landscape_input_ui_mode__always_show" comment="Enum value label">Mostrar siempre</string>
|
||||
<string name="enum__landscape_input_ui_mode__dynamically_show" comment="Enum value label">Mostrar dinámicamente</string>
|
||||
|
||||
100
app/src/main/res/values-et-rEE/strings.xml
Normal file
100
app/src/main/res/values-et-rEE/strings.xml
Normal file
@@ -0,0 +1,100 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<resources xmlns:tools="http://schemas.android.com/tools" tools:ignore="MissingTranslation">
|
||||
<string name="app_name">FlorisBoard</string>
|
||||
<string name="key__phone_pause" comment="Label for the Pause key in the telephone keyboard layout">Paus</string>
|
||||
<string name="key__phone_wait" comment="Label for the Wait key in the telephone keyboard layout">Oota</string>
|
||||
<string name="key_popup__threedots_alt" comment="Content description for the three-dots icon in a key popup">Kolme punktiga ikoon. Kui nähtav, siis saab pikemal vajutusel kasutada rohkem tähti.</string>
|
||||
<!-- One-handed strings -->
|
||||
<string name="one_handed__close_btn_content_description" comment="Content description for the one-handed close button">Sule ühe käe režiim.</string>
|
||||
<string name="one_handed__move_start_btn_content_description" comment="Content description for the one-handed move to left button">Liiguta klaviatuur vasakule.</string>
|
||||
<string name="one_handed__move_end_btn_content_description" comment="Content description for the one-handed move to right button">Liiguta klaviatuur paremale.</string>
|
||||
<!-- Media strings -->
|
||||
<string name="settings__media__title">Emojid</string>
|
||||
<string name="media__tab__emojis" comment="Tab description for emojis in the media UI">Emojid</string>
|
||||
<string name="media__tab__emoticons" comment="Tab description for emoticons in the media UI">Emootikonid</string>
|
||||
<string name="media__tab__kaomoji" comment="Tab description for kaomoji in the media UI">Kaomoji</string>
|
||||
<string name="prefs__media__emoji_preferred_skin_tone">Eelistatud emoji nahavärv</string>
|
||||
<string name="prefs__media__emoji_preferred_hair_style">Eelistatud emoji soeng</string>
|
||||
<string name="prefs__media__emoji_history__title" comment="Preference group title">Emojide ajalugu</string>
|
||||
<string name="prefs__media__emoji_history_enabled" comment="Preference title">Luba emojide ajalugu</string>
|
||||
<string name="prefs__media__emoji_history_enabled__summary" comment="Preference summary">Säilita hijuti kasutatud emojid kiireks juurdepääsuks</string>
|
||||
<string name="prefs__media__emoji_history_pinned_update_strategy" comment="Preference title">Uuendusmeetod (Kinnitatud)</string>
|
||||
<string name="prefs__media__emoji_history_recent_update_strategy" comment="Preference title">Uuendusmeetod (Hiljutine)</string>
|
||||
<string name="prefs__media__emoji_history_max_size">Maksimum säilitatud emojide arv</string>
|
||||
<string name="prefs__media__emoji_history_pinned_reset">Lähtesta kinnitatud emojid</string>
|
||||
<string name="prefs__media__emoji_history_reset">Lähtesta hiljutised emojid</string>
|
||||
<string name="prefs__media__emoji_suggestion__title" comment="Preference group title">Emojide soovitused</string>
|
||||
<string name="prefs__media__emoji_suggestion_enabled" comment="Preference title">Luba emojide soovitused</string>
|
||||
<string name="prefs__media__emoji_suggestion_enabled__summary" comment="Preference summary">Kirjutamisel emojide soovitamine</string>
|
||||
<string name="prefs__media__emoji_suggestion_type" comment="Preference title">Käivitusmeetod</string>
|
||||
<string name="prefs__media__emoji_suggestion_update_history" comment="Preference title">UUenda emojide ajalugu</string>
|
||||
<string name="prefs__media__emoji_suggestion_update_history__summary" comment="Preference summary">Soovitatud emojide kasutamine lisab need emojidde ajalukku</string>
|
||||
<string name="prefs__media__emoji_suggestion_candidate_show_name" comment="Preference title">Näita emoji nime</string>
|
||||
<string name="prefs__media__emoji_suggestion_candidate_show_name__summary" comment="Preference summary">Soovitatud emoji kõrval nime kuvamine</string>
|
||||
<string name="prefs__media__emoji_suggestion_query_min_length" comment="Preference title">Miinimum päringu pikkus</string>
|
||||
<string name="prefs__media__emoji_suggestion_candidate_max_count" comment="Preference title">Maksimum kandidaatide arv</string>
|
||||
<!-- Emoji strings -->
|
||||
<string name="emoji__category__smileys_emotion" comment="Emoji category name">Naerunäod & Emotsioonid</string>
|
||||
<string name="emoji__category__people_body" comment="Emoji category name">Inimesed & Keha</string>
|
||||
<string name="emoji__category__animals_nature" comment="Emoji category name">Loomad & Loodus</string>
|
||||
<string name="emoji__category__food_drink" comment="Emoji category name">Toit & Jook</string>
|
||||
<string name="emoji__category__travel_places" comment="Emoji category name">Reisimine & Kohad</string>
|
||||
<string name="emoji__category__activities" comment="Emoji category name">Tegevused</string>
|
||||
<string name="emoji__category__objects" comment="Emoji category name">Objektid</string>
|
||||
<string name="emoji__category__symbols" comment="Emoji category name">Sümbolid</string>
|
||||
<string name="emoji__category__flags" comment="Emoji category name">Lipud</string>
|
||||
<string name="emoji__history__empty_message" comment="Message if the emoji history is empty">Hiljuti kasutatud emojisid ei leitud. Kui hakkad emojisid sisestama, siis need ilmuvad automaatselt siia</string>
|
||||
<string name="emoji__history__phone_locked_message" comment="Message to show if phone is locked">Et emojide ajaloole ligi pääseda, palun avage oma seade lukust.</string>
|
||||
<string name="emoji__history__usage_tip" comment="Feature discoverability for actions of emoji history">Hea näpunäide: Vajuta pikalt emojide ajaloos nende peale, et neid kinnitada või eemaldada!</string>
|
||||
<string name="emoji__history__removal_success_message" comment="Toast message if user has used the delete action on an emoji in the emoji history">{emoji} on emojide ajaloost eemaldatud</string>
|
||||
<string name="emoji__history__pinned">Kinnitatud</string>
|
||||
<string name="emoji__history__recent">Hiljutine</string>
|
||||
<!-- Quick action strings -->
|
||||
<string name="quick_action__arrow_up" maxLength="12">Nool üles</string>
|
||||
<string name="quick_action__arrow_up__tooltip">Soorita nool üles</string>
|
||||
<string name="quick_action__arrow_down" maxLength="12">Nool alla</string>
|
||||
<string name="quick_action__arrow_down__tooltip">Soorita nool alla</string>
|
||||
<string name="quick_action__arrow_left__tooltip">Soorita nool vasakule</string>
|
||||
<string name="quick_action__arrow_right__tooltip">Soorita nool paremale</string>
|
||||
<string name="quick_action__clipboard_clear_primary_clip__tooltip">Soorita põhilõikelaua tühjendus</string>
|
||||
<string name="quick_action__clipboard_copy" maxLength="12">Kopeeri</string>
|
||||
<string name="quick_action__clipboard_copy__tooltip">Soorita lõikelaual kopeeri</string>
|
||||
<string name="quick_action__clipboard_cut" maxLength="12">Lõika</string>
|
||||
<string name="quick_action__clipboard_cut__tooltip">Soorita lõikelaual lõika</string>
|
||||
<string name="quick_action__clipboard_paste" maxLength="12">Kleebi</string>
|
||||
<string name="quick_action__clipboard_paste__tooltip">Soorita lõikelaual kleebi</string>
|
||||
<string name="quick_action__clipboard_select_all" maxLength="12">Vali kõik</string>
|
||||
<string name="quick_action__clipboard_select_all__tooltip">Soorita lõikelaual vali kõik</string>
|
||||
<string name="quick_action__ime_ui_mode_clipboard" maxLength="12">Lõikelaud</string>
|
||||
<string name="quick_action__ime_ui_mode_clipboard__tooltip">Ava lõikelaua ajalugu</string>
|
||||
<string name="quick_action__ime_ui_mode_media" maxLength="12">Emoji</string>
|
||||
<string name="quick_action__ime_ui_mode_media__tooltip">Ava emojide paneel</string>
|
||||
<string name="quick_action__language_switch" maxLength="12">Vaheta keelt</string>
|
||||
<string name="quick_action__language_switch__tooltip">Soorita keelevahetus</string>
|
||||
<string name="quick_action__settings" maxLength="12">Sätted</string>
|
||||
<string name="quick_action__settings__tooltip">Ava sätted</string>
|
||||
<string name="quick_action__undo" maxLength="12">Võta tagasi</string>
|
||||
<string name="quick_action__undo__tooltip">Võta viimane sisestus tagasi</string>
|
||||
<string name="quick_action__redo" maxLength="12">Tee uuesti</string>
|
||||
<string name="quick_action__redo__tooltip">Tee viimane sisestus uuesti</string>
|
||||
<!-- Incognito mode strings -->
|
||||
<!-- Settings UI strings -->
|
||||
<!-- Smartbar strings -->
|
||||
<!-- Typing strings -->
|
||||
<!-- About UI strings -->
|
||||
<!-- Setup UI strings -->
|
||||
<!-- Physical keyboard -->
|
||||
<!-- Back up & Restore -->
|
||||
<!-- Crash Dialog strings -->
|
||||
<!-- Clipboard strings -->
|
||||
<!-- Devtools strings -->
|
||||
<!-- Extension strings -->
|
||||
<!-- Action strings -->
|
||||
<!-- Error strings (generic) -->
|
||||
<!-- General strings -->
|
||||
<!-- Screen orientation strings -->
|
||||
<!-- State strings -->
|
||||
<!-- Enum label and description strings -->
|
||||
<!-- Unit strings (symbols) -->
|
||||
<!-- Unit strings (written words) -->
|
||||
</resources>
|
||||
Some files were not shown because too many files have changed in this diff Show More
Reference in New Issue
Block a user