Compare commits

...
65 Commits
Author SHA1 Message Date
Michael Schättgen edd608cd96 Minor tweaks
build / build (push) Canceled after 0s
build / test (push) Canceled after 0s
2026-01-17 17:42:36 +01:00
Artem Klyuev a9bf4ab0da Add support for the Material Design 3 FAB Menu component 2025-11-21 01:23:28 +04:00
Alexander Bakker 491a81584d Release v3.4.1
build / build (push) Canceled after 0s
build / test (push) Canceled after 0s
2025-08-03 13:28:30 +02:00
Alexander Bakker 7038816afd Update translations from Crowdin 2025-08-03 13:21:54 +02:00
Alexander BakkerandGitHub bc600de7ab Merge pull request #1691 from michaelschattgen/feature/proton-importer
Add support for Proton Authenticator exports
2025-08-01 21:49:31 +02:00
Michael Schättgen da9adf6490 Add support for Proton Authenticator exports 2025-08-01 21:07:30 +02:00
Alexander BakkerandGitHub aa4877607d Merge pull request #1673 from michaelschattgen/feature/disable-autofill-pin-keyboard
Add custom EditText to prevent Autofill service from popping up
2025-07-20 14:34:27 +02:00
Michael Schättgen 90315996f4 Add custom EditText to prevent Autofill service from popping up 2025-06-25 03:08:39 +02:00
Michael Schättgen 9d32a426f9 Update translations from Crowdin 2025-06-25 03:06:32 +02:00
Michael Schättgen 36bd8f945a Release v3.4
build / build (push) Canceled after 0s
build / test (push) Canceled after 0s
2025-06-04 22:20:24 +02:00
Michael Schättgen ab9cdabddc Add support for 5 new languages 2025-06-04 22:15:01 +02:00
Michael Schättgen d35c67d9d3 Update translations from Crowdin 2025-06-04 22:14:46 +02:00
Michael Schättgen 313b33793f Add preview for every icon pack to README 2025-06-03 22:55:45 +02:00
Alexander Bakker 94aabdcd88 Add comment to string dialog_duplicate_entry_title 2025-05-31 14:26:10 +02:00
Alexander Bakker d6b372bad5 Release v3.4-beta1
build / build (push) Canceled after 0s
build / test (push) Canceled after 0s
2025-05-29 13:48:10 +02:00
Alexander Bakker af4e3d9566 Update translations from Crowdin 2025-05-29 13:44:23 +02:00
Alexander BakkerandGitHub 8d667cd26c Merge pull request #1652 from michaelschattgen/feature/duplicate-check
Add check for duplicates upon saving entry
2025-05-29 13:18:15 +02:00
Michael Schättgen 1335be6787 Add check for duplicates upon saving entry 2025-05-29 13:13:23 +02:00
Alexander BakkerandGitHub efaa6afda6 Merge pull request #1654 from michaelschattgen/fix/negative-animation-period
Fix animation crash when using period of 7
2025-05-29 13:10:10 +02:00
Michael Schättgen 1c30557779 Fix animation crash when using period of 7 2025-05-29 12:59:24 +02:00
Alexander BakkerandGitHub 6f270144e2 Merge pull request #1599 from michaelschattgen/feature/haptic-feedback
Add haptic feedback toggle for code refresh
2025-05-29 12:41:57 +02:00
Michael SchättgenandGitHub 62c0d273a5 Merge pull request #1649 from alexbakker/minsdk-23
Update gradle, update dependencies and bump minSdkVersion to 23
2025-05-28 13:38:10 +02:00
Michael SchättgenandGitHub 3c4e8b44a0 Merge pull request #1650 from alexbakker/fix-1244
Disable PNG cruncher and PNG generation for vector drawables
2025-05-28 13:23:22 +02:00
Michael Schättgen 63d2666230 Add haptic feedback toggle for code refresh
Improve haptic feedback logic
2025-05-28 13:21:37 +02:00
Alexander Bakker 6c40cfa748 Disable PNG cruncher and PNG generation for vector drawables 2025-05-23 14:33:21 +02:00
Alexander Bakker 6758ec498b Update gradle, update dependencies and bump minSdkVersion to 23
New versions of Jetpack libraries require minSdkVersion 23.

There are a couple of changes in the code to fix incorrect usage of
annotations that started breaking the build after this Gradle update.
2025-05-23 14:01:58 +02:00
Michael SchättgenandGitHub 819865230f Merge pull request #1642 from alexbakker/fix-1616
Specify country code for the Portuguese translation
2025-04-23 20:57:15 +02:00
Michael SchättgenandGitHub 97762fa146 Merge pull request #1641 from alexbakker/fix-1605
Fall back to default values in the FreeOTP importer
2025-04-23 20:56:59 +02:00
Alexander BakkerandGitHub 60eea0bcb2 Merge pull request #1612 from michaelschattgen/feature/brightness-slider-transfer
Add brightness slider for transfer activity
2025-04-23 17:54:54 +02:00
Michael Schättgen 3818f9408d Add brightness slider for transfer activity 2025-04-23 17:48:15 +02:00
mimi89999andAlexander Bakker 03c00d51ba Add Crowdin config file and update crowdin-cli
Co-authored-by: Alexander Bakker <ab@alexbakker.me>
2025-04-23 17:08:36 +02:00
Alexander Bakker afa1fbd3ae Specify country code for the Portuguese translation 2025-04-23 16:20:34 +02:00
Alexander Bakker c81e08bf1f Fall back to default values in the FreeOTP importer 2025-04-23 15:51:49 +02:00
Alexander BakkerandGitHub a5dc861336 Merge pull request #1637 from jahway603/faq_encrypted-export
[FAQ] clarified about which password to use when importing your vault
2025-04-23 14:24:28 +02:00
jahway603 fbfdd50069 [FAQ] clarified about which password to use when importing your vault to resolve Issue #1636 2025-04-15 18:54:46 -04:00
Michael SchättgenandGitHub 19fe7bd4d2 Merge pull request #1611 from alexbakker/update-divider-decor
Update divider decoration when filter/sort changes
2025-02-25 18:22:19 +01:00
Michael SchättgenandGitHub 7882ecc33a Merge pull request #1604 from alexbakker/flush-export
Flush temporary export file before starting ExportTask
2025-02-24 23:43:56 +01:00
Alexander Bakker d39b44f0c3 Update divider decoration when filter/sort changes
This fixes an issue where the item decoration may be wrong in some
cases. For example, adding a new entry to the bottom of the list may not
update the decoration of the item that was previously the last one in
the list.

To reproduce, use this vault: https://alexbakker.me/u/mov4455gp5.json.
Start without a group filter, apply sorting based on Issuer (A to Z) and
enable group multiselect. Then:
- Tap the "Test" chip
- Tap the "Test2" chip
- Tap the "No group" chip
- Notice that the offset between the last 2 entries looks wrong: https://alexbakker.me/u/nedcyiro2q.png

Probably introduced in 9131cae944.
2025-02-24 14:16:43 +01:00
Alexander BakkerandGitHub 7c6e3ae2a8 Merge pull request #1559 from michaelschattgen/feature/multiselect-groups
Add ability to multiselect groups
2025-02-24 13:38:29 +01:00
Michael Schättgen 78ee38ba7d Add ability to multiselect groups 2025-01-25 20:21:02 +01:00
Alexander BakkerandGitHub 8ddf8c58da Merge pull request #1602 from michaelschattgen/feature/color-contrast-hidden-codes
Improve color contrast on hidden codes
2025-01-24 16:42:30 +01:00
Alexander BakkerandGitHub ce29d120a9 Merge pull request #1600 from michaelschattgen/fix/import-entries-padding
Fix obstructing snackbar padding
2025-01-24 16:15:33 +01:00
Alexander BakkerandGitHub 6bbb42fb83 Merge pull request #1593 from dcrewi/feature/test-html-exports
add test for html exports
2025-01-24 14:41:29 +01:00
Alexander Bakker e8d712ec71 Flush temporary export file before starting ExportTask
The previous logic was not an issue because FileOutputStream is
unbuffered, but still, this is more correct.
2025-01-24 14:34:41 +01:00
Alexander BakkerandGitHub ad2dc803fb Merge pull request #1592 from dcrewi/feature/delete-temp-file
delete temporary export file when finished
2025-01-24 14:17:01 +01:00
Michael Schättgen 3d50ab1b65 Improve color contrast on hidden codes 2025-01-22 22:17:52 +01:00
Michael Schättgen a4812c530d Fix obstructing snackbar padding 2025-01-22 18:33:54 +01:00
Alexander Bakker 9ab949a59e Release v3.3.4
build / build (push) Canceled after 0s
build / test (push) Canceled after 0s
2025-01-12 19:01:02 +01:00
Alexander Bakker e8bf7b0506 Update translations from Crowdin 2025-01-12 18:49:41 +01:00
Michael SchättgenandGitHub ec92fb2b31 Merge pull request #1591 from alexbakker/resize-icons
Store non-SVG icons at a maximum of 512x512 and migrate existing icons
2025-01-12 15:29:08 +01:00
David Creswick 919e6854e8 add test for html exports
Do some basic tests of the html export code.

- Make sure that a file was created.
- Make sure that the file can be parsed by an xml parser without error.
- Make sure that the document tag is "html".
2025-01-05 16:31:49 -06:00
David Creswick d98e23a1e5 delete temporary export file when finished 2025-01-05 16:19:45 -06:00
Alexander Bakker e59df63e94 Store non-SVG icons at a maximum of 512x512 and migrate existing icons 2025-01-05 22:47:26 +01:00
Michael SchättgenandGitHub 14643b4000 Merge pull request #1588 from alexbakker/stratum
Rename Authenticator Pro -> Stratum
2025-01-05 17:22:58 +01:00
Alexander Bakker 5439067e9f Rename Authenticator Pro -> Stratum 2025-01-05 13:49:51 +01:00
Alexander Bakker 81a26ccad8 Release v3.3.3
build / build (push) Canceled after 0s
build / test (push) Canceled after 0s
2025-01-02 22:08:00 +01:00
Alexander Bakker 1fb36b0578 Update translations from Crowdin 2025-01-02 22:01:35 +01:00
Alexander BakkerandGitHub de74daef33 Merge pull request #1584 from alexbakker/large-heap
Set largeHeap to true in AndroidManifest
2025-01-02 21:59:41 +01:00
Alexander Bakker fe8b638818 Set largeHeap to true in AndroidManifest
This is a temporary measure to help users who are stuck in a situation
where they run into OOM conditions due to large icons in their vault
file.
2025-01-02 21:46:57 +01:00
Alexander Bakker 05a415bb38 Only run the scheduled codeql job on the upstream repo 2024-12-31 19:44:52 +01:00
Michael SchättgenandGitHub 920df1d9be Merge pull request #1577 from alexbakker/2fas-fixes
Store service name as issuer and tolerate spaces in secret for 2FAS
2024-12-22 23:53:46 +01:00
Alexander Bakker 19a77209d8 Store service name as issuer and tolerate spaces in secret for 2FAS 2024-12-20 15:51:06 +01:00
Alexander Bakker aec16f22c1 Update reactivecircus/android-emulator-runner
Required for the ubuntu-latest switch to ubuntu-24.04
2024-12-20 15:50:35 +01:00
Alexander BakkerandGitHub a76f3394f3 Merge pull request #1550 from cillyvms/window-insets
Apply window insets to accommodate system UI.
2024-12-04 21:18:34 +01:00
cillyvms 6039cfa20e Apply window insets to prevent UI elements from going behind system windows. 2024-12-04 19:50:51 +01:00
167 changed files with 6601 additions and 1134 deletions
-10
View File
@@ -1,10 +0,0 @@
project_id: "372633"
api_token: "<api-token-here>"
base_path: "../app/src/main"
base_url: "https://api.crowdin.com"
preserve_hierarchy: true
files:
- source: "res/values/strings.xml"
dest: "strings.xml"
translation: "res/values-%android_code%/%original_file_name%"
+1 -1
View File
@@ -35,7 +35,7 @@ jobs:
sudo udevadm control --reload-rules
sudo udevadm trigger --name-match=kvm
- name: Tests
uses: reactivecircus/android-emulator-runner@6b0df4b0efb23bb0ec63d881db79aefbc976e4b2
uses: reactivecircus/android-emulator-runner@62dbb605bba737720e10b196cb4220d374026a6d
with:
api-level: 31
arch: x86_64
+1
View File
@@ -14,6 +14,7 @@ jobs:
actions: read
contents: read
security-events: write
if: github.event_name != 'schedule' || github.repository == 'beemdevelopment/Aegis'
steps:
- name: Checkout
uses: actions/checkout@v4
+4 -10
View File
@@ -13,19 +13,13 @@ jobs:
- uses: actions/checkout@v4
- name: Install crowdin-cli
run: |
wget https://github.com/crowdin/crowdin-cli/releases/download/3.7.2/crowdin-cli.zip
echo "ee9f838b819ccedc33c9b2537055e5ba7d7934561b24df1e1a6274cbd6e27f2d crowdin-cli.zip" | sha256sum -c
wget https://github.com/crowdin/crowdin-cli/releases/download/4.6.1/crowdin-cli.zip
echo "7afd70de3a747ac631a5bad7866008163ae1d50c4606b5773f0b90a5481ffde2 crowdin-cli.zip" | sha256sum -c
unzip crowdin-cli.zip -d crowdin-cli
- name: Upload to Crowdin
env:
CROWDIN_TOKEN: "${{ secrets.CROWDIN_TOKEN }}"
CROWDIN_PERSONAL_TOKEN: "${{ secrets.CROWDIN_TOKEN }}"
run: |
java -jar ./crowdin-cli/3.7.2/crowdin-cli.jar upload sources \
java -jar ./crowdin-cli/4.6.1/crowdin-cli.jar upload sources \
--no-progress \
--token "$CROWDIN_TOKEN" \
--project-id 372633 \
--base-path app/src/main \
--source res/values/strings.xml \
--translation "res/values-%android_code%/%original_file_name%" \
--dest strings.xml \
--branch master
+8
View File
@@ -86,6 +86,14 @@ Another common setup is to configure Aegis to back up to a folder on local
storage of your device and then have a separate app (like
[Syncthing](https://syncthing.net/)) sync that folder anywhere you want.
## Encrypted Backups
### Why do I not get prompted to enter an encryption password when exporting?
Aegis uses the same password you have configured to encrypt your vault as the
password which is used when exporting and importing your vault; so when prompted,
you will enter that when importing your vault.
## Importing
### When importing from Authenticator Plus, an error is shown claiming that Accounts.txt is missing
+16 -6
View File
@@ -123,24 +123,33 @@ documentation](docs/iconpacks.md).
Unofficial monochrome-styled 2FA icons.
[<img width=500 alt="aegis-icons preview"
src="https://raw.githubusercontent.com/aegis-icons/aegis-icons/master/showcase.png">](https://github.com/aegis-icons/aegis-icons)
src="metadata/en-US/images/iconPacks/aegis-icons.png">](https://github.com/aegis-icons/aegis-icons)
- [delta-aegis-icons](https://github.com/Delta-Icons/aegis-icons)
Delta version of the unofficial monochrome-styled 2FA icon pack aegis-icons.
- [aegis-simple-icons](https://github.com/alexbakker/aegis-simple-icons) *
[<img width=500 alt="delta-icons preview"
src="metadata/en-US/images/iconPacks/delta-icons.png">](https://github.com/Delta-Icons/aegis-icons)
- [aegis-simple-icons](https://github.com/alexbakker/aegis-simple-icons) \*
This project periodically generates an icon pack for Aegis based on [Simple
Icons](https://simpleicons.org/).
- [aegis-simple-icons-outlined](https://github.com/michaelschattgen/aegis-simple-icons-outlined) *
[<img width=500 alt="aegis-simple-icons preview"
src="metadata/en-US/images/iconPacks/aegis-simple-icons.png">](https://github.com/alexbakker/aegis-simple-icons)
- [aegis-simple-icons-outlined](https://github.com/michaelschattgen/aegis-simple-icons-outlined) \*
This is a variant on the aegis-simple-icons pack where the icons contain no solid background and just the outlines are being used.
[<img width=500 alt="aegis-simple-icons-outlined preview"
src="metadata/en-US/images/iconPacks/aegis-simple-icons-outlined.png">](https://github.com/michaelschattgen/aegis-simple-icons-outlined)
\* The icons are automatically generated, so
not all of them are as high quality as the ones you'll find in
[aegis-icons](https://github.com/aegis-icons/aegis-icons).
not all of them are as high quality as the ones you'll find in
[aegis-icons](https://github.com/aegis-icons/aegis-icons).
## Contributing
@@ -158,5 +167,6 @@ This project is licensed under the GNU General Public License v3.0. See the
A couple of libraries vendored in Aegis' repository are licensed under a
different license:
- [TextDrawable](app/src/main/java/com/amulyakhare/textdrawable)
- [TrustedIntents](app/src/main/java/info/guardianproject/trustedintents)
+32 -21
View File
@@ -26,10 +26,10 @@ android {
defaultConfig {
applicationId "${packageName}"
minSdkVersion 21
minSdkVersion 23
targetSdkVersion 35
versionCode 75
versionName "3.3.2"
versionCode 80
versionName "3.4.1"
multiDexEnabled true
buildConfigField "String", "GIT_HASH", "\"${getGitHash()}\""
buildConfigField "String", "GIT_BRANCH", "\"${getGitBranch()}\""
@@ -93,16 +93,27 @@ android {
}
}
// Required to make the APK reproducible
aaptOptions {
cruncherEnabled = false
}
defaultConfig {
vectorDrawables.generatedDensities = []
}
packagingOptions {
// R8 doesn't remove these resources, so exclude them manually. This reduces APK size by 4MB.
resources {
excludes += ['/org/bouncycastle/pqc/**/*.properties']
excludes += [
'/org/bouncycastle/pqc/**/*.properties',
'META-INF/versions/9/OSGI-INF/MANIFEST.MF'
]
}
}
compileOptions {
targetCompatibility 1.8
sourceCompatibility 1.8
targetCompatibility JavaVersion.VERSION_17
sourceCompatibility JavaVersion.VERSION_17
coreLibraryDesugaringEnabled true
}
lint {
@@ -141,13 +152,13 @@ aboutLibraries {
}
dependencies {
def cameraxVersion = '1.4.0'
def cameraxVersion = '1.4.2'
def glideVersion = '4.16.0'
def guavaVersion = '33.3.1'
def hiltVersion = '2.52'
def guavaVersion = '33.4.8'
def hiltVersion = '2.56.2'
def junitVersion = '4.13.2'
def libsuVersion = '6.0.0'
def roomVersion = "2.6.1"
def roomVersion = '2.7.1'
annotationProcessor 'androidx.annotation:annotation:1.9.1'
annotationProcessor "androidx.room:room-compiler:$roomVersion"
@@ -155,18 +166,18 @@ dependencies {
annotationProcessor "com.github.bumptech.glide:compiler:${glideVersion}"
implementation fileTree(dir: 'libs', include: ['*.jar'])
implementation 'androidx.activity:activity:1.9.3'
implementation 'androidx.activity:activity:1.10.1'
implementation 'androidx.appcompat:appcompat:1.7.0'
implementation "androidx.biometric:biometric:1.1.0"
implementation "androidx.camera:camera-camera2:$cameraxVersion"
implementation "androidx.camera:camera-lifecycle:$cameraxVersion"
implementation "androidx.camera:camera-view:$cameraxVersion"
implementation 'androidx.core:core:1.15.0'
implementation 'androidx.constraintlayout:constraintlayout:2.2.0'
implementation 'androidx.documentfile:documentfile:1.0.1'
implementation 'androidx.lifecycle:lifecycle-process:2.8.7'
implementation 'androidx.core:core:1.16.0'
implementation 'androidx.constraintlayout:constraintlayout:2.2.1'
implementation 'androidx.documentfile:documentfile:1.1.0'
implementation 'androidx.lifecycle:lifecycle-process:2.9.0'
implementation "androidx.preference:preference:1.2.1"
implementation 'androidx.recyclerview:recyclerview:1.3.2'
implementation 'androidx.recyclerview:recyclerview:1.4.0'
implementation "androidx.room:room-runtime:$roomVersion"
implementation 'androidx.viewpager2:viewpager2:1.1.0'
implementation 'com.caverock:androidsvg-aar:1.4'
@@ -181,7 +192,7 @@ dependencies {
implementation "com.github.topjohnwu.libsu:io:${libsuVersion}"
implementation "com.google.guava:guava:${guavaVersion}-android"
implementation 'com.google.android.material:material:1.12.0'
implementation 'com.google.protobuf:protobuf-javalite:4.28.3'
implementation 'com.google.protobuf:protobuf-javalite:4.31.0'
implementation 'com.google.zxing:core:3.5.3'
implementation('com.mikepenz:aboutlibraries:11.2.3') {
exclude group: 'com.mikepenz', module: 'aboutlibraries-core'
@@ -189,7 +200,7 @@ dependencies {
implementation 'com.mikepenz:aboutlibraries-core-android:11.2.3'
implementation 'com.nulab-inc:zxcvbn:1.9.0'
implementation 'net.lingala.zip4j:zip4j:2.11.5'
implementation 'org.bouncycastle:bcprov-jdk18on:1.79'
implementation 'org.bouncycastle:bcprov-jdk18on:1.80'
implementation 'org.simpleflatmapper:sfm-csv:8.2.3'
androidTestAnnotationProcessor "com.google.dagger:hilt-android-compiler:$hiltVersion"
@@ -207,8 +218,8 @@ dependencies {
testImplementation 'androidx.test:core:1.6.1'
testImplementation "com.google.guava:guava:${guavaVersion}-jre"
testImplementation "junit:junit:${junitVersion}"
testImplementation 'org.json:json:20240303'
testImplementation 'org.robolectric:robolectric:4.14'
testImplementation 'org.json:json:20250517'
testImplementation 'org.robolectric:robolectric:4.14.1'
coreLibraryDesugaring 'com.android.tools:desugar_jdk_libs:2.1.3'
coreLibraryDesugaring 'com.android.tools:desugar_jdk_libs:2.1.5'
}
@@ -61,13 +61,20 @@ import org.junit.Test;
import org.junit.rules.RuleChain;
import org.junit.rules.TestRule;
import org.junit.runner.RunWith;
import org.xmlpull.v1.XmlPullParser;
import org.xmlpull.v1.XmlPullParserException;
import org.xmlpull.v1.XmlPullParserFactory;
import java.io.File;
import java.io.FileInputStream;
import java.io.IOException;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.io.Reader;
import java.nio.charset.StandardCharsets;
import java.util.Collection;
import java.util.List;
import java.util.Locale;
import javax.crypto.Cipher;
import javax.crypto.SecretKey;
@@ -183,7 +190,9 @@ public class BackupExportTest extends AegisTest {
onView(withText(R.string.export_format_html)).inRoot(RootMatchers.isPlatformPopup()).perform(click());
onView(withId(android.R.id.button1)).perform(click());
onView(withId(R.id.checkbox_accept)).perform(click());
doExport();
File file = doExport();
checkHtmlExport(file);
}
@Test
@@ -196,7 +205,9 @@ public class BackupExportTest extends AegisTest {
onView(withText(R.string.export_format_html)).inRoot(RootMatchers.isPlatformPopup()).perform(click());
onView(withId(android.R.id.button1)).perform(click());
onView(withId(R.id.checkbox_accept)).perform(click());
doExport();
File file = doExport();
checkHtmlExport(file);
}
@Test
@@ -380,6 +391,26 @@ public class BackupExportTest extends AegisTest {
checkReadEntries(entries);
}
private void checkHtmlExport(File file) {
try (InputStream inStream = new FileInputStream(file)) {
Reader inReader = new InputStreamReader(inStream, StandardCharsets.UTF_8);
XmlPullParserFactory factory = XmlPullParserFactory.newInstance();
XmlPullParser parser = factory.newPullParser();
parser.setInput(inReader);
while (parser.getEventType() != XmlPullParser.START_TAG) {
parser.next();
}
if (!parser.getName().toLowerCase(Locale.ROOT).equals("html")) {
throw new RuntimeException("not an html document!");
}
while (parser.getEventType() != XmlPullParser.END_DOCUMENT) {
parser.next();
}
} catch (IOException | XmlPullParserException e) {
throw new RuntimeException("Unable to read html export file", e);
}
}
private void checkReadEntries(Collection<VaultEntry> entries) {
List<VaultEntry> vectors = VaultEntries.get();
assertEquals(vectors.size(), entries.size());
+3 -1
View File
@@ -4,6 +4,7 @@
<uses-permission android:name="android.permission.CAMERA" />
<uses-permission android:name="android.permission.USE_BIOMETRIC" />
<uses-permission android:name="android.permission.VIBRATE" />
<!-- NOTE: Disabled for now. See issue: #1047
<uses-permission android:name="android.permission.POST_NOTIFICATIONS" />
@@ -27,6 +28,7 @@
android:icon="@mipmap/${iconName}"
android:label="Aegis"
android:supportsRtl="true"
android:largeHeap="true"
android:theme="@style/Theme.Aegis.Launch"
tools:targetApi="tiramisu">
<activity android:name=".ui.TransferEntriesActivity"
@@ -149,7 +151,7 @@
</application>
<queries>
<package android:name="me.jmh.authenticatorpro" />
<package android:name="com.stratumauth.app" />
<package android:name="com.authy.authy" />
<package android:name="org.fedorahosted.freeotp" />
<package android:name="org.liberty.android.freeotpplus" />
+43
View File
@@ -31,6 +31,49 @@
</head>
<body>
<div></div>
<h3>Version 3.4.1</h3>
<h4>New</h4>
<ul>
<li>Support for importing from Proton Authenticator</li>
</ul>
<h4>Fixes</h4>
<ul>
<li>The autofill service would show a prompt to save the PIN as a password</li>
</ul>
<h3>Version 3.4</h3>
<h4>New</h4>
<ul>
<li>Haptic feedback when an entry is about to expire</li>
<li>Brightness increase is now toggleable in the entry transfer view</li>
<li>Filter on multiple groups simultaneously</li>
<li>Color contrast on hidden codes has been improved</li>
<li>Prompt before the user is about to save an entry with a duplicate name/issuer combination</li>
<li>New languages: Estonian, Korean, Malayalam, Norwegian (Bokmål) and Serbian</li>
</ul>
<h4>Fixes</h4>
<ul>
<li>A crash could occur if an entry with period 7 exists and code expiry indication is enabled</li>
<li>The Portuguese (Brazilian) locale was used even if Portuguese was configured</li>
<li>FreeOTP import would fail if the algorithm or digits field was not specified for an entry</li>
<li>The divider between entries would be missing in certain filter configurations</li>
<li>The snackbar in try entry importing view could obstruct the name of an entry</li>
</ul>
<h4>Miscellaneous</h4>
<ul>
<li>Android 6 or newer is now required the run the app</li>
</ul>
<h3>Version 3.3.4</h3>
<h4>Fixes</h4>
<ul>
<li>Icons are now resized to 512x512 to reduce the size of the vault file and to reduce the chance of encountering out of memory conditions</li>
</ul>
<h3>Version 3.3.3</h3>
<h4>Fixes</h4>
<ul>
<li>Some users ran into out of memory conditions due to large icons in their vault file. We've introduced a temporary measure that should help in most cases, but we'll follow up with a more comprehensive fix soon.</li>
<li>Window insets were not always applied correctly, causing parts of the UI to appear off-screen</li>
<li>The 2FAS importer did not tolerate spaces for secrets and was not always able to extract the issuer</li>
</ul>
<h3>Version 3.3.2</h3>
<h4>New</h4>
<ul>
@@ -17,23 +17,14 @@ import androidx.lifecycle.Lifecycle;
import androidx.lifecycle.LifecycleEventObserver;
import androidx.lifecycle.LifecycleOwner;
import androidx.lifecycle.ProcessLifecycleOwner;
import androidx.room.Room;
import com.beemdevelopment.aegis.database.AppDatabase;
import com.beemdevelopment.aegis.database.AuditLogEntry;
import com.beemdevelopment.aegis.database.AuditLogRepository;
import com.beemdevelopment.aegis.receivers.VaultLockReceiver;
import com.beemdevelopment.aegis.ui.MainActivity;
import com.beemdevelopment.aegis.util.IOUtils;
import com.beemdevelopment.aegis.vault.VaultManager;
import com.topjohnwu.superuser.Shell;
import org.checkerframework.checker.units.qual.A;
import java.util.Collections;
import java.util.List;
import java.util.concurrent.ExecutorService;
import java.util.concurrent.Executors;
import dagger.hilt.InstallIn;
import dagger.hilt.android.EarlyEntryPoint;
@@ -86,10 +86,18 @@ public class Preferences {
return _prefs.getBoolean("pref_tap_to_reveal", false);
}
public boolean isGroupMultiselectEnabled() {
return _prefs.getBoolean("pref_groups_multiselect", false);
}
public boolean isEntryHighlightEnabled() {
return _prefs.getBoolean("pref_highlight_entry", false);
}
public boolean isHapticFeedbackEnabled() {
return _prefs.getBoolean("pref_haptic_feedback", true);
}
public boolean isPauseFocusedEnabled() {
boolean dependenciesEnabled = isTapToRevealEnabled() || isEntryHighlightEnabled();
if (!dependenciesEnabled) return false;
@@ -0,0 +1,12 @@
package com.beemdevelopment.aegis;
import java.util.Arrays;
public class VibrationPatterns {
public static final long[] EXPIRING = {475, 20, 5, 20, 965, 20, 5, 20, 965, 20, 5, 20, 420};
public static final long[] REFRESH_CODE = {0, 100};
public static long getLengthInMillis(long[] pattern) {
return Arrays.stream(pattern).sum();
}
}
@@ -1,7 +1,5 @@
package com.beemdevelopment.aegis.crypto;
import android.os.Build;
import com.beemdevelopment.aegis.crypto.bc.SCrypt;
import java.io.ByteArrayOutputStream;
@@ -23,7 +21,6 @@ import javax.crypto.KeyGenerator;
import javax.crypto.NoSuchPaddingException;
import javax.crypto.SecretKey;
import javax.crypto.spec.GCMParameterSpec;
import javax.crypto.spec.IvParameterSpec;
import javax.crypto.spec.SecretKeySpec;
public class CryptoUtils {
@@ -66,13 +63,7 @@ public class CryptoUtils {
// generate the nonce if none is given
// we are not allowed to do this ourselves as "setRandomizedEncryptionRequired" is set to true
if (nonce != null) {
AlgorithmParameterSpec spec;
// apparently kitkat doesn't support GCMParameterSpec
if (Build.VERSION.SDK_INT == Build.VERSION_CODES.KITKAT) {
spec = new IvParameterSpec(nonce);
} else {
spec = new GCMParameterSpec(CRYPTO_AEAD_TAG_SIZE * 8, nonce);
}
AlgorithmParameterSpec spec = new GCMParameterSpec(CRYPTO_AEAD_TAG_SIZE * 8, nonce);
cipher.init(opmode, key, spec);
} else {
cipher.init(opmode, key);
@@ -1,11 +1,8 @@
package com.beemdevelopment.aegis.crypto;
import android.os.Build;
import android.security.keystore.KeyGenParameterSpec;
import android.security.keystore.KeyProperties;
import androidx.annotation.RequiresApi;
import java.io.IOException;
import java.security.InvalidAlgorithmParameterException;
import java.security.InvalidKeyException;
@@ -45,10 +42,6 @@ public class KeyStoreHandle {
}
public SecretKey generateKey(String id) throws KeyStoreHandleException {
if (!isSupported()) {
throw new KeyStoreHandleException("Symmetric KeyStore keys are not supported in this version of Android");
}
try {
KeyGenerator generator = KeyGenerator.getInstance(KeyProperties.KEY_ALGORITHM_AES, STORE_NAME);
generator.init(new KeyGenParameterSpec.Builder(id,
@@ -87,14 +80,13 @@ public class KeyStoreHandle {
throw new KeyStoreHandleException(e);
}
if (isSupported() && isKeyPermanentlyInvalidated(key)) {
if (isKeyPermanentlyInvalidated(key)) {
return null;
}
return key;
}
@RequiresApi(api = Build.VERSION_CODES.M)
private static boolean isKeyPermanentlyInvalidated(SecretKey key) {
// try to initialize a dummy cipher and see if an InvalidKeyException is thrown
try {
@@ -127,8 +119,4 @@ public class KeyStoreHandle {
throw new KeyStoreHandleException(e);
}
}
public static boolean isSupported() {
return Build.VERSION.SDK_INT >= Build.VERSION_CODES.M;
}
}
@@ -1,6 +1,13 @@
package com.beemdevelopment.aegis.helpers;
import android.graphics.Bitmap;
import android.graphics.BitmapFactory;
import com.beemdevelopment.aegis.icons.IconType;
import com.beemdevelopment.aegis.vault.VaultEntryIcon;
import java.io.ByteArrayOutputStream;
import java.util.Objects;
public class BitmapHelper {
private BitmapHelper() {
@@ -28,4 +35,29 @@ public class BitmapHelper {
return Bitmap.createScaledBitmap(bitmap, width, height, true);
}
public static boolean isVaultEntryIconOptimized(VaultEntryIcon icon) {
BitmapFactory.Options opts = new BitmapFactory.Options();
opts.inJustDecodeBounds = true;
BitmapFactory.decodeByteArray(icon.getBytes(), 0, icon.getBytes().length, opts);
return opts.outWidth <= VaultEntryIcon.MAX_DIMENS && opts.outHeight <= VaultEntryIcon.MAX_DIMENS;
}
public static VaultEntryIcon toVaultEntryIcon(Bitmap bitmap, IconType iconType) {
if (bitmap.getWidth() > VaultEntryIcon.MAX_DIMENS
|| bitmap.getHeight() > VaultEntryIcon.MAX_DIMENS) {
bitmap = resize(bitmap, VaultEntryIcon.MAX_DIMENS, VaultEntryIcon.MAX_DIMENS);
}
ByteArrayOutputStream stream = new ByteArrayOutputStream();
if (Objects.equals(iconType, IconType.PNG)) {
bitmap.compress(Bitmap.CompressFormat.PNG, 100, stream);
} else {
iconType = IconType.JPEG;
bitmap.compress(Bitmap.CompressFormat.JPEG, 90, stream);
}
byte[] data = stream.toByteArray();
return new VaultEntryIcon(data, iconType);
}
}
@@ -0,0 +1,192 @@
package com.beemdevelopment.aegis.helpers;
import android.animation.ValueAnimator;
import android.graphics.Matrix;
import android.graphics.drawable.Drawable;
import android.view.View;
import android.view.ViewGroup;
import android.view.animation.OvershootInterpolator;
import android.widget.ImageView;
import com.google.android.material.floatingactionbutton.FloatingActionButton;
import java.util.Map;
import java.util.SequencedMap;
import java.util.SequencedSet;
import java.util.function.Consumer;
public class FabMenuHelper {
private final static long ANIMATION_DURATION = 300L;
private final static long ANIMATION_ACTION_DELAY = 50L;
private final View _scrim;
private final View _menuItemsContainer;
private final FloatingActionButton _mainFab;
private final SequencedSet<View> _actions;
private Consumer<Boolean> _stateListener;
private boolean _isOpen = false;
public FabMenuHelper(
View scrim,
ViewGroup menuItemsContainer,
FloatingActionButton fab,
SequencedMap<View, Runnable> actions
) {
_scrim = scrim;
_menuItemsContainer = menuItemsContainer;
_mainFab = fab;
_actions = actions.sequencedKeySet();
for (View action : _actions) {
action.setVisibility(View.GONE);
action.setAlpha(0f);
action.setScaleX(0f);
action.setScaleY(0f);
}
setupClickListeners(actions);
}
public void setOnFabMenuStateChangeListener(Consumer<Boolean> listener) {
_stateListener = listener;
}
private void setupClickListeners(Map<View, Runnable> actions) {
_mainFab.setOnClickListener(v -> toggle());
_scrim.setOnClickListener(v -> close());
actions.forEach((action, onClick) -> {
action.setOnClickListener(v -> {
if (onClick != null) {
onClick.run();
}
close();
});
});
}
public void toggle() {
if (_isOpen) {
close();
} else {
open();
}
}
public void open() {
if (_isOpen) {
return;
}
_isOpen = true;
_scrim.animate()
.alpha(0.5f)
.setDuration(ANIMATION_DURATION)
.withStartAction(() -> _scrim.setVisibility(View.VISIBLE))
.start();
_menuItemsContainer.setVisibility(View.VISIBLE);
long delay = 0L;
for (View action : _actions.reversed()) {
animateActionIn(action, delay);
delay += ANIMATION_ACTION_DELAY;
}
animateFabIconForward(_mainFab);
if (_stateListener != null) {
_stateListener.accept(true);
}
}
public void close() {
if (!_isOpen) {
return;
}
_isOpen = false;
_scrim.animate()
.alpha(0f)
.setDuration(ANIMATION_DURATION)
.withEndAction(() -> _scrim.setVisibility(View.GONE))
.start();
long delay = 0L;
for (View action : _actions) {
animateActionOut(action, delay);
delay += ANIMATION_ACTION_DELAY;
}
animateFabIconBackward(_mainFab);
_mainFab.postDelayed(() -> {
if (!_isOpen) {
_menuItemsContainer.setVisibility(View.GONE);
}
}, ANIMATION_DURATION);
if (_stateListener != null) {
_stateListener.accept(false);
}
}
private void animateFabIconForward(FloatingActionButton fab) {
animateFabIcon(fab, 0f, 45f);
}
private void animateFabIconBackward(FloatingActionButton fab) {
animateFabIcon(fab, 45f, 0f);
}
private void animateFabIcon(FloatingActionButton fab, float from, float to) {
Drawable drawable = _mainFab.getDrawable();
int width = drawable.getIntrinsicWidth();
int height = drawable.getIntrinsicHeight();
fab.setScaleType(ImageView.ScaleType.MATRIX);
Matrix matrix = new Matrix();
ValueAnimator anim = ValueAnimator.ofFloat(from, to);
anim.setDuration(100L);
anim.addUpdateListener(valueAnimator -> {
Float angle = (Float) valueAnimator.getAnimatedValue();
matrix.reset();
matrix.postRotate(angle, width / 2f, height / 2f);
fab.setImageMatrix(matrix);
});
anim.start();
}
private void animateActionIn(View action, long delay) {
action.setVisibility(View.VISIBLE);
action.setAlpha(0f);
action.setScaleX(0.4f);
action.setScaleY(0.4f);
action.animate()
.alpha(1f)
.scaleX(1f)
.scaleY(1f)
.setDuration(ANIMATION_DURATION)
.setStartDelay(delay)
.setInterpolator(new OvershootInterpolator(1.2f))
.start();
}
private void animateActionOut(View action, long delay) {
action.animate()
.alpha(0f)
.scaleX(0f)
.scaleY(0f)
.setDuration(ANIMATION_DURATION)
.setStartDelay(delay)
.withEndAction(() -> action.setVisibility(View.GONE))
.start();
}
public boolean isOpen() {
return _isOpen;
}
}
@@ -2,6 +2,8 @@ package com.beemdevelopment.aegis.helpers;
import android.os.Handler;
import com.beemdevelopment.aegis.VibrationPatterns;
public class UiRefresher {
private boolean _running;
private Listener _listener;
@@ -23,7 +25,6 @@ public class UiRefresher {
}
_running = true;
_listener.onRefresh();
_handler.postDelayed(new Runnable() {
@Override
public void run() {
@@ -31,6 +32,27 @@ public class UiRefresher {
_handler.postDelayed(this, _listener.getMillisTillNextRefresh());
}
}, _listener.getMillisTillNextRefresh());
_handler.postDelayed(new Runnable() {
@Override
public void run() {
_listener.onExpiring();
_handler.postDelayed(this, getNextRun());
}
}, getInitialRun());
}
private long getInitialRun() {
long sum = _listener.getMillisTillNextRefresh() - VibrationPatterns.getLengthInMillis(VibrationPatterns.EXPIRING);
if (sum < 0) {
return getNextRun();
}
return sum;
}
private long getNextRun() {
return (_listener.getMillisTillNextRefresh() + _listener.getPeriodMillis()) - VibrationPatterns.getLengthInMillis(VibrationPatterns.EXPIRING);
}
public void stop() {
@@ -40,6 +62,8 @@ public class UiRefresher {
public interface Listener {
void onRefresh();
void onExpiring();
long getMillisTillNextRefresh();
long getPeriodMillis();
}
}
@@ -0,0 +1,44 @@
package com.beemdevelopment.aegis.helpers;
import android.content.Context;
import android.os.Build;
import android.os.VibrationEffect;
import android.os.Vibrator;
import android.os.VibratorManager;
import com.beemdevelopment.aegis.Preferences;
public class VibrationHelper {
private Preferences _preferences;
public VibrationHelper(Context context) {
_preferences = new Preferences(context);
}
public void vibratePattern(Context context, long[] pattern) {
if (!isHapticFeedbackEnabled()) {
return;
}
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.S) {
VibratorManager vibratorManager = (VibratorManager) context.getSystemService(Context.VIBRATOR_MANAGER_SERVICE);
if (vibratorManager != null) {
Vibrator vibrator = vibratorManager.getDefaultVibrator();
VibrationEffect effect = VibrationEffect.createWaveform(pattern, -1);
vibrator.vibrate(effect);
}
} else {
Vibrator vibrator = (Vibrator) context.getSystemService(Context.VIBRATOR_SERVICE);
if (vibrator != null) {
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.O) {
VibrationEffect effect = VibrationEffect.createWaveform(pattern, -1);
vibrator.vibrate(effect);
}
}
}
}
public boolean isHapticFeedbackEnabled() {
return _preferences.isHapticFeedbackEnabled();
}
}
@@ -0,0 +1,26 @@
package com.beemdevelopment.aegis.helpers;
import androidx.core.graphics.Insets;
import androidx.core.view.ViewCompat;
import androidx.core.view.WindowInsetsCompat;
import com.google.android.material.appbar.AppBarLayout;
public class ViewHelper {
private ViewHelper() {
}
public static void setupAppBarInsets(AppBarLayout appBar) {
ViewCompat.setOnApplyWindowInsetsListener(appBar, (targetView, windowInsets) -> {
Insets insets = windowInsets.getInsets(WindowInsetsCompat.Type.systemBars() | WindowInsetsCompat.Type.displayCutout());
targetView.setPadding(
insets.left,
insets.top,
insets.right,
0
);
return WindowInsetsCompat.CONSUMED;
});
}
}
@@ -34,7 +34,6 @@ public abstract class DatabaseImporter {
_importers.add(new Definition("Aegis", AegisImporter.class, R.string.importer_help_aegis, false));
_importers.add(new Definition("andOTP", AndOtpImporter.class, R.string.importer_help_andotp, false));
_importers.add(new Definition("Authenticator Plus", AuthenticatorPlusImporter.class, R.string.importer_help_authenticator_plus, false));
_importers.add(new Definition("Authenticator Pro", AuthenticatorProImporter.class, R.string.importer_help_authenticator_pro, true));
_importers.add(new Definition("Authy", AuthyImporter.class, R.string.importer_help_authy, true));
_importers.add(new Definition("Battle.net Authenticator", BattleNetImporter.class, R.string.importer_help_battle_net_authenticator, true));
_importers.add(new Definition("Bitwarden", BitwardenImporter.class, R.string.importer_help_bitwarden, false));
@@ -45,7 +44,9 @@ public abstract class DatabaseImporter {
_importers.add(new Definition("Google Authenticator", GoogleAuthImporter.class, R.string.importer_help_google_authenticator, true));
_importers.add(new Definition("Microsoft Authenticator", MicrosoftAuthImporter.class, R.string.importer_help_microsoft_authenticator, true));
_importers.add(new Definition("Plain text", GoogleAuthUriImporter.class, R.string.importer_help_plain_text, false));
_importers.add(new Definition("Proton Authenticator", ProtonAuthenticatorImporter.class, R.string.importer_help_proton_authenticator, false));
_importers.add(new Definition("Steam", SteamImporter.class, R.string.importer_help_steam, true));
_importers.add(new Definition("Stratum (Authenticator Pro)", StratumImporter.class, R.string.importer_help_stratum, true));
_importers.add(new Definition("TOTP Authenticator", TotpAuthenticatorImporter.class, R.string.importer_help_totp_authenticator, true));
_importers.add(new Definition("WinAuth", WinAuthImporter.class, R.string.importer_help_winauth, false));
}
@@ -298,8 +298,8 @@ public class FreeOtpImporter extends DatabaseImporter {
private static VaultEntry convertEntry(JSONObject obj) throws DatabaseImporterEntryException {
try {
String type = obj.getString("type").toLowerCase(Locale.ROOT);
String algo = obj.getString("algo");
int digits = obj.getInt("digits");
String algo = obj.optString("algo", OtpInfo.DEFAULT_ALGORITHM);
int digits = obj.optInt("digits", OtpInfo.DEFAULT_DIGITS);
byte[] secret = toBytes(obj.getJSONArray("secret"));
String issuer = obj.getString("issuerExt");
@@ -308,7 +308,7 @@ public class FreeOtpImporter extends DatabaseImporter {
OtpInfo info;
switch (type) {
case "totp":
int period = obj.getInt("period");
int period = obj.optInt("period", TotpInfo.DEFAULT_PERIOD);
if (issuer.equals("Steam")) {
info = new SteamInfo(secret, algo, digits, period);
} else {
@@ -0,0 +1,96 @@
package com.beemdevelopment.aegis.importers;
import static java.nio.charset.StandardCharsets.UTF_8;
import android.content.Context;
import android.net.Uri;
import androidx.annotation.NonNull;
import com.beemdevelopment.aegis.otp.GoogleAuthInfo;
import com.beemdevelopment.aegis.otp.GoogleAuthInfoException;
import com.beemdevelopment.aegis.otp.OtpInfo;
import com.beemdevelopment.aegis.util.IOUtils;
import com.beemdevelopment.aegis.vault.VaultEntry;
import com.topjohnwu.superuser.io.SuFile;
import org.json.JSONArray;
import org.json.JSONException;
import org.json.JSONObject;
import java.io.IOException;
import java.io.InputStream;
public class ProtonAuthenticatorImporter extends DatabaseImporter {
public ProtonAuthenticatorImporter(Context context) {
super(context);
}
@Override
protected SuFile getAppPath() {
throw new UnsupportedOperationException();
}
@Override
protected @NonNull State read(@NonNull InputStream stream, boolean isInternal) throws DatabaseImporterException {
try {
String contents = new String(IOUtils.readAll(stream), UTF_8);
JSONObject json = new JSONObject(contents);
return new DecryptedState(json);
} catch (JSONException | IOException e) {
throw new DatabaseImporterException(e);
}
}
public static class DecryptedState extends DatabaseImporter.State {
private final JSONObject _json;
public DecryptedState(@NonNull JSONObject json) {
super(false);
_json = json;
}
@Override
public @NonNull Result convert() throws DatabaseImporterException {
Result result = new Result();
try {
JSONArray entries = _json.getJSONArray("entries");
for (int i = 0; i < entries.length(); i++) {
JSONObject entry = entries.getJSONObject(i);
try {
result.addEntry(convertEntry(entry));
} catch (DatabaseImporterEntryException e) {
result.addError(e);
}
}
} catch (JSONException e) {
throw new DatabaseImporterException(e);
}
return result;
}
private static @NonNull VaultEntry convertEntry(@NonNull JSONObject entry) throws DatabaseImporterEntryException {
try {
JSONObject content = entry.getJSONObject("content");
String name = content.getString("name");
String uriString = content.getString("uri");
Uri uri = Uri.parse(uriString);
try {
GoogleAuthInfo info = GoogleAuthInfo.parseUri(uri);
OtpInfo otp = info.getOtpInfo();
return new VaultEntry(otp, name, info.getIssuer());
} catch (GoogleAuthInfoException e) {
throw new DatabaseImporterEntryException(e, uriString);
}
} catch (JSONException e) {
throw new DatabaseImporterEntryException(e, entry.toString());
}
}
}
}
@@ -45,11 +45,11 @@ import javax.crypto.NoSuchPaddingException;
import javax.crypto.SecretKey;
import javax.crypto.spec.IvParameterSpec;
public class AuthenticatorProImporter extends DatabaseImporter {
public class StratumImporter extends DatabaseImporter {
private static final String HEADER = "AUTHENTICATORPRO";
private static final String HEADER_LEGACY = "AuthenticatorPro";
private static final String PKG_NAME = "me.jmh.authenticatorpro";
private static final String PKG_DB_PATH = "files/proauth.db3";
private static final String PKG_NAME = "com.stratumauth.app";
private static final String PKG_DB_PATH = "databases/authenticator.db3";
private enum Algorithm {
SHA1,
@@ -57,7 +57,7 @@ public class AuthenticatorProImporter extends DatabaseImporter {
SHA512
}
public AuthenticatorProImporter(Context context) {
public StratumImporter(Context context) {
super(context);
}
@@ -169,7 +169,7 @@ public class AuthenticatorProImporter extends DatabaseImporter {
Argon2Task.Params params = getKeyDerivationParams(password);
Argon2Task task = new Argon2Task(context, key -> {
try {
AuthenticatorProImporter.JsonState state = decrypt(key);
StratumImporter.JsonState state = decrypt(key);
listener.onStateDecrypted(state);
} catch (DatabaseImporterException e) {
listener.onError(e);
@@ -244,7 +244,7 @@ public class AuthenticatorProImporter extends DatabaseImporter {
PBKDFTask.Params params = getKeyDerivationParams(password);
PBKDFTask task = new PBKDFTask(context, key -> {
try {
AuthenticatorProImporter.JsonState state = decrypt(key);
StratumImporter.JsonState state = decrypt(key);
listener.onStateDecrypted(state);
} catch (DatabaseImporterException e) {
listener.onError(e);
@@ -4,9 +4,9 @@ import android.content.Context;
import com.beemdevelopment.aegis.R;
import com.beemdevelopment.aegis.crypto.CryptoUtils;
import com.beemdevelopment.aegis.encoding.Base32;
import com.beemdevelopment.aegis.encoding.Base64;
import com.beemdevelopment.aegis.encoding.EncodingException;
import com.beemdevelopment.aegis.otp.GoogleAuthInfo;
import com.beemdevelopment.aegis.otp.HotpInfo;
import com.beemdevelopment.aegis.otp.OtpInfo;
import com.beemdevelopment.aegis.otp.OtpInfoException;
@@ -16,6 +16,7 @@ import com.beemdevelopment.aegis.ui.dialogs.Dialogs;
import com.beemdevelopment.aegis.util.IOUtils;
import com.beemdevelopment.aegis.util.JsonUtils;
import com.beemdevelopment.aegis.vault.VaultEntry;
import com.google.common.base.Strings;
import com.topjohnwu.superuser.io.SuFile;
import org.json.JSONArray;
@@ -173,9 +174,12 @@ public class TwoFASImporter extends DatabaseImporter {
private static VaultEntry convertEntry(JSONObject obj) throws DatabaseImporterEntryException {
try {
byte[] secret = Base32.decode(obj.getString("secret"));
byte[] secret = GoogleAuthInfo.parseSecret(obj.getString("secret"));
JSONObject info = obj.getJSONObject("otp");
String issuer = info.optString("issuer");
String issuer = obj.optString("name");
if (Strings.isNullOrEmpty(issuer)) {
issuer = info.optString("issuer");
}
String name = info.optString("account");
int digits = info.optInt("digits", TotpInfo.DEFAULT_DIGITS);
String algorithm = info.optString("algorithm", TotpInfo.DEFAULT_ALGORITHM);
@@ -4,7 +4,6 @@ import android.annotation.SuppressLint;
import android.app.PendingIntent;
import android.app.Service;
import android.content.Intent;
import android.os.Build;
import android.os.IBinder;
import androidx.annotation.Nullable;
@@ -29,11 +28,7 @@ public class NotificationService extends Service {
@SuppressLint("LaunchActivityFromNotification")
public void serviceMethod() {
int flags = PendingIntent.FLAG_ONE_SHOT;
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M) {
flags |= PendingIntent.FLAG_IMMUTABLE;
}
int flags = PendingIntent.FLAG_ONE_SHOT | PendingIntent.FLAG_IMMUTABLE;
Intent intent = new Intent(this, VaultLockReceiver.class);
intent.setAction(VaultLockReceiver.ACTION_LOCK_VAULT);
intent.setPackage(BuildConfig.APPLICATION_ID);
@@ -13,11 +13,15 @@ import android.widget.Toast;
import androidx.annotation.AttrRes;
import androidx.annotation.StringRes;
import androidx.core.graphics.Insets;
import androidx.core.view.ViewCompat;
import androidx.core.view.WindowInsetsCompat;
import com.beemdevelopment.aegis.BuildConfig;
import com.beemdevelopment.aegis.R;
import com.beemdevelopment.aegis.ui.dialogs.ChangelogDialog;
import com.beemdevelopment.aegis.ui.dialogs.LicenseDialog;
import com.beemdevelopment.aegis.helpers.ViewHelper;
import com.google.android.material.color.MaterialColors;
public class AboutActivity extends AegisActivity {
@@ -39,6 +43,7 @@ public class AboutActivity extends AegisActivity {
setContentView(R.layout.activity_about);
setSupportActionBar(findViewById(R.id.toolbar));
ViewHelper.setupAppBarInsets(findViewById(R.id.app_bar_layout));
if (getSupportActionBar() != null) {
getSupportActionBar().setDisplayHomeAsUpEnabled(true);
@@ -90,6 +95,17 @@ public class AboutActivity extends AegisActivity {
.setTheme(_themeHelper.getConfiguredTheme())
.show(getSupportFragmentManager(), null);
});
ViewCompat.setOnApplyWindowInsetsListener(findViewById(R.id.about_scroll_view), (targetView, windowInsets) -> {
Insets insets = windowInsets.getInsets(WindowInsetsCompat.Type.systemBars() | WindowInsetsCompat.Type.displayCutout());
targetView.setPadding(
0,
0,
0,
insets.bottom
);
return WindowInsetsCompat.CONSUMED;
});
}
private static String getCurrentAppVersion() {
@@ -25,6 +25,7 @@ import com.beemdevelopment.aegis.ui.models.AssignIconEntry;
import com.beemdevelopment.aegis.ui.views.AssignIconAdapter;
import com.beemdevelopment.aegis.ui.views.IconAdapter;
import com.beemdevelopment.aegis.util.IOUtils;
import com.beemdevelopment.aegis.helpers.ViewHelper;
import com.beemdevelopment.aegis.vault.VaultEntry;
import com.beemdevelopment.aegis.vault.VaultEntryIcon;
import com.bumptech.glide.Glide;
@@ -61,6 +62,7 @@ public class AssignIconsActivity extends AegisActivity implements AssignIconAdap
setContentView(R.layout.activity_assign_icons);
setSupportActionBar(findViewById(R.id.toolbar));
ViewHelper.setupAppBarInsets(findViewById(R.id.app_bar_layout));
if (getSupportActionBar() != null) {
getSupportActionBar().setDisplayHomeAsUpEnabled(true);
getSupportActionBar().setDisplayShowHomeEnabled(true);
@@ -42,6 +42,7 @@ import com.beemdevelopment.aegis.vault.slots.SlotException;
import com.beemdevelopment.aegis.vault.slots.SlotIntegrityException;
import com.beemdevelopment.aegis.vault.slots.SlotList;
import com.google.android.material.dialog.MaterialAlertDialogBuilder;
import com.google.android.material.textfield.TextInputLayout;
import java.util.List;
@@ -72,7 +73,22 @@ public class AuthActivity extends AegisActivity {
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_auth);
_textPassword = findViewById(R.id.text_password);
TextInputLayout layoutStandard = findViewById(R.id.layout_standard);
TextInputLayout layoutNoAutofill = findViewById(R.id.layout_no_autofill);
EditText editStandard = findViewById(R.id.text_password);
EditText editNoAutofill = findViewById(R.id.text_password_no_autofill);
if (_prefs.isPinKeyboardEnabled()) {
layoutStandard.setVisibility(View.GONE);
layoutNoAutofill.setVisibility(View.VISIBLE);
_textPassword = editNoAutofill;
} else {
layoutStandard.setVisibility(View.VISIBLE);
layoutNoAutofill.setVisibility(View.GONE);
_textPassword = editStandard;
}
LinearLayout boxBiometricInfo = findViewById(R.id.box_biometric_info);
_decryptButton = findViewById(R.id.button_decrypt);
TextView biometricsButton = findViewById(R.id.button_biometrics);
@@ -86,10 +102,6 @@ public class AuthActivity extends AegisActivity {
return false;
});
if (_prefs.isPinKeyboardEnabled()) {
_textPassword.setInputType(InputType.TYPE_CLASS_NUMBER | InputType.TYPE_NUMBER_VARIATION_PASSWORD);
}
Intent intent = getIntent();
if (savedInstanceState == null) {
_inhibitBioPrompt = intent.getBooleanExtra("inhibitBioPrompt", false);
@@ -1,6 +1,7 @@
package com.beemdevelopment.aegis.ui;
import android.content.Intent;
import android.content.res.Resources;
import android.graphics.Bitmap;
import android.graphics.drawable.BitmapDrawable;
import android.graphics.drawable.Drawable;
@@ -27,6 +28,7 @@ import androidx.activity.result.contract.ActivityResultContracts.StartActivityFo
import androidx.annotation.NonNull;
import androidx.annotation.Nullable;
import androidx.appcompat.app.ActionBar;
import androidx.appcompat.app.AlertDialog;
import com.amulyakhare.textdrawable.TextDrawable;
import com.avito.android.krop.KropView;
@@ -35,12 +37,14 @@ import com.beemdevelopment.aegis.encoding.Base32;
import com.beemdevelopment.aegis.encoding.EncodingException;
import com.beemdevelopment.aegis.encoding.Hex;
import com.beemdevelopment.aegis.helpers.AnimationsHelper;
import com.beemdevelopment.aegis.helpers.BitmapHelper;
import com.beemdevelopment.aegis.helpers.DropdownHelper;
import com.beemdevelopment.aegis.helpers.EditTextHelper;
import com.beemdevelopment.aegis.helpers.SafHelper;
import com.beemdevelopment.aegis.helpers.SimpleAnimationEndListener;
import com.beemdevelopment.aegis.helpers.SimpleTextWatcher;
import com.beemdevelopment.aegis.helpers.TextDrawableHelper;
import com.beemdevelopment.aegis.helpers.ViewHelper;
import com.beemdevelopment.aegis.icons.IconPack;
import com.beemdevelopment.aegis.icons.IconType;
import com.beemdevelopment.aegis.otp.GoogleAuthInfo;
@@ -75,7 +79,6 @@ import com.google.android.material.imageview.ShapeableImageView;
import com.google.android.material.textfield.TextInputEditText;
import com.google.android.material.textfield.TextInputLayout;
import java.io.ByteArrayOutputStream;
import java.io.File;
import java.io.FileInputStream;
import java.io.IOException;
@@ -86,6 +89,7 @@ import java.util.Collections;
import java.util.Comparator;
import java.util.Date;
import java.util.HashSet;
import java.util.Iterator;
import java.util.List;
import java.util.Locale;
import java.util.Set;
@@ -102,6 +106,7 @@ public class EditEntryActivity extends AegisActivity {
// keep track of icon changes separately as the generated jpeg's are not deterministic
private boolean _hasChangedIcon = false;
private IconPack.Icon _selectedIcon;
private String _pickedMimeType;
private ShapeableImageView _iconView;
private ImageView _saveImageButton;
@@ -139,8 +144,8 @@ public class EditEntryActivity extends AegisActivity {
if (activityResult.getResultCode() != RESULT_OK || data == null || data.getData() == null) {
return;
}
String fileType = SafHelper.getMimeType(this, data.getData());
if (fileType != null && fileType.equals(IconType.SVG.toMimeType())) {
_pickedMimeType = SafHelper.getMimeType(this, data.getData());
if (_pickedMimeType != null && _pickedMimeType.equals(IconType.SVG.toMimeType())) {
ImportFileTask.Params params = new ImportFileTask.Params(data.getData(), "icon", null);
ImportFileTask task = new ImportFileTask(this, result -> {
if (result.getError() == null) {
@@ -164,6 +169,7 @@ public class EditEntryActivity extends AegisActivity {
}
setContentView(R.layout.activity_edit_entry);
setSupportActionBar(findViewById(R.id.toolbar));
ViewHelper.setupAppBarInsets(findViewById(R.id.app_bar_layout));
_groups = _vaultManager.getVault().getGroups();
@@ -802,11 +808,12 @@ public class EditEntryActivity extends AegisActivity {
VaultEntryIcon icon;
if (_selectedIcon == null) {
Bitmap bitmap = ((BitmapDrawable) _iconView.getDrawable()).getBitmap();
ByteArrayOutputStream stream = new ByteArrayOutputStream();
// the quality parameter is ignored for PNG
bitmap.compress(Bitmap.CompressFormat.PNG, 100, stream);
byte[] data = stream.toByteArray();
icon = new VaultEntryIcon(data, IconType.PNG);
IconType iconType = _pickedMimeType == null
? IconType.INVALID : IconType.fromMimeType(_pickedMimeType);
if (iconType == IconType.INVALID) {
iconType = bitmap.hasAlpha() ? IconType.PNG : IconType.JPEG;
}
icon = BitmapHelper.toVaultEntryIcon(bitmap, iconType);
} else {
byte[] iconBytes;
try (FileInputStream inStream = new FileInputStream(_selectedIcon.getFile())){
@@ -848,10 +855,92 @@ public class EditEntryActivity extends AegisActivity {
return false;
}
if (_isNew) {
for (VaultEntry existing : _vaultManager.getVault().getEntries()) {
if (entry.hasSameNameAndIssuer(existing)) {
showDuplicateBottomSheet(entry);
return false;
}
}
}
addAndFinish(entry);
return true;
}
private void showDuplicateBottomSheet(VaultEntry newEntry) {
BottomSheetDialog dialog = new BottomSheetDialog(this);
View view = getLayoutInflater().inflate(R.layout.dialog_duplicate_entry, null);
dialog.setContentView(view);
dialog.setCancelable(false);
View overwrite = view.findViewById(R.id.overwrite_entry);
View addSuffix = view.findViewById(R.id.create_new_entry);
View cancel = view.findViewById(R.id.cancel_save);
TextView suffixSubtext = view.findViewById(R.id.duplicate_suffix_subtitle);
String baseName = newEntry.getName();
Set<String> existingNames = new HashSet<>();
for (VaultEntry e : _vaultManager.getVault().getEntries()) {
if (e.getIssuer().equals(newEntry.getIssuer())) {
existingNames.add(e.getName());
}
}
int counter = 2;
String newName;
do {
newName = baseName + " #" + counter++;
} while (existingNames.contains(newName));
suffixSubtext.setText(getString(R.string.dialog_duplicate_entry_suffix_subtitle, newName));
overwrite.setOnClickListener(v -> {
List<VaultEntry> duplicates = new ArrayList<>();
for (VaultEntry existing : _vaultManager.getVault().getEntries()) {
if (existing.hasSameNameAndIssuer(newEntry)) {
duplicates.add(existing);
}
}
Resources res = getResources();
String message = res.getQuantityString(
R.plurals.dialog_duplicate_entry_overwrite_dialog_message,
duplicates.size(),
duplicates.size(),
newEntry.getIssuer(),
newEntry.getName()
);
new MaterialAlertDialogBuilder(this)
.setTitle(R.string.dialog_duplicate_entry_overwrite_dialog_title)
.setMessage(message)
.setPositiveButton(R.string.action_delete, (d, which) -> {
for (VaultEntry dup : duplicates) {
_vaultManager.getVault().removeEntry(dup);
}
dialog.dismiss();
addAndFinish(newEntry);
})
.setNegativeButton(android.R.string.no, null)
.show();
});
String finalNewName = newName;
addSuffix.setOnClickListener(v -> {
newEntry.setName(finalNewName);
dialog.dismiss();
addAndFinish(newEntry);
});
cancel.setOnClickListener(v -> dialog.dismiss());
Dialogs.showSecureDialog(dialog);
}
private static void setViewEnabled(View view, boolean enabled) {
view.setEnabled(enabled);
@@ -15,6 +15,7 @@ import com.beemdevelopment.aegis.R;
import com.beemdevelopment.aegis.ui.dialogs.Dialogs;
import com.beemdevelopment.aegis.ui.views.GroupAdapter;
import com.beemdevelopment.aegis.util.Cloner;
import com.beemdevelopment.aegis.helpers.ViewHelper;
import com.beemdevelopment.aegis.vault.VaultGroup;
import com.google.android.material.dialog.MaterialAlertDialogBuilder;
@@ -39,6 +40,7 @@ public class GroupManagerActivity extends AegisActivity implements GroupAdapter.
}
setContentView(R.layout.activity_groups);
setSupportActionBar(findViewById(R.id.toolbar));
ViewHelper.setupAppBarInsets(findViewById(R.id.app_bar_layout));
if (getSupportActionBar() != null) {
getSupportActionBar().setDisplayHomeAsUpEnabled(true);
getSupportActionBar().setDisplayShowHomeEnabled(true);
@@ -15,16 +15,21 @@ import androidx.recyclerview.widget.LinearLayoutManager;
import androidx.recyclerview.widget.RecyclerView;
import com.beemdevelopment.aegis.R;
import com.beemdevelopment.aegis.helpers.BitmapHelper;
import com.beemdevelopment.aegis.helpers.FabScrollHelper;
import com.beemdevelopment.aegis.helpers.ViewHelper;
import com.beemdevelopment.aegis.icons.IconType;
import com.beemdevelopment.aegis.importers.DatabaseImporter;
import com.beemdevelopment.aegis.importers.DatabaseImporterEntryException;
import com.beemdevelopment.aegis.importers.DatabaseImporterException;
import com.beemdevelopment.aegis.ui.dialogs.Dialogs;
import com.beemdevelopment.aegis.ui.models.ImportEntry;
import com.beemdevelopment.aegis.ui.tasks.IconOptimizationTask;
import com.beemdevelopment.aegis.ui.tasks.RootShellTask;
import com.beemdevelopment.aegis.ui.views.ImportEntriesAdapter;
import com.beemdevelopment.aegis.util.UUIDMap;
import com.beemdevelopment.aegis.vault.VaultEntry;
import com.beemdevelopment.aegis.vault.VaultEntryIcon;
import com.beemdevelopment.aegis.vault.VaultGroup;
import com.beemdevelopment.aegis.vault.VaultRepository;
import com.google.android.material.dialog.MaterialAlertDialogBuilder;
@@ -39,12 +44,15 @@ import java.io.InputStream;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.List;
import java.util.Map;
import java.util.Set;
import java.util.UUID;
import java.util.stream.Collectors;
public class ImportEntriesActivity extends AegisActivity {
private View _view;
private Menu _menu;
private RecyclerView _entriesView;
private ImportEntriesAdapter _adapter;
private FabScrollHelper _fabScrollHelper;
@@ -58,6 +66,7 @@ public class ImportEntriesActivity extends AegisActivity {
}
setContentView(R.layout.activity_import_entries);
setSupportActionBar(findViewById(R.id.toolbar));
ViewHelper.setupAppBarInsets(findViewById(R.id.app_bar_layout));
_view = findViewById(R.id.importEntriesRootView);
@@ -66,8 +75,8 @@ public class ImportEntriesActivity extends AegisActivity {
bar.setDisplayHomeAsUpEnabled(true);
_adapter = new ImportEntriesAdapter();
RecyclerView entriesView = findViewById(R.id.list_entries);
entriesView.addOnScrollListener(new RecyclerView.OnScrollListener() {
_entriesView = findViewById(R.id.list_entries);
_entriesView.addOnScrollListener(new RecyclerView.OnScrollListener() {
@Override
public void onScrolled(@NonNull RecyclerView recyclerView, int dx, int dy) {
super.onScrolled(recyclerView, dx, dy);
@@ -76,9 +85,9 @@ public class ImportEntriesActivity extends AegisActivity {
});
LinearLayoutManager layoutManager = new LinearLayoutManager(this);
entriesView.setLayoutManager(layoutManager);
entriesView.setAdapter(_adapter);
entriesView.setNestedScrollingEnabled(false);
_entriesView.setLayoutManager(layoutManager);
_entriesView.setAdapter(_adapter);
_entriesView.setNestedScrollingEnabled(false);
FloatingActionButton fab = findViewById(R.id.fab);
fab.setOnClickListener(v -> {
@@ -170,7 +179,7 @@ public class ImportEntriesActivity extends AegisActivity {
state.decrypt(this, new DatabaseImporter.DecryptListener() {
@Override
public void onStateDecrypted(DatabaseImporter.State state) {
importDatabase(state);
processDecryptedImporterState(state);
}
@Override
@@ -185,7 +194,7 @@ public class ImportEntriesActivity extends AegisActivity {
}
});
} else {
importDatabase(state);
processDecryptedImporterState(state);
}
} catch (DatabaseImporterException e) {
e.printStackTrace();
@@ -193,8 +202,7 @@ public class ImportEntriesActivity extends AegisActivity {
}
}
private void importDatabase(DatabaseImporter.State state) {
List<ImportEntry> importEntries = new ArrayList<>();
private void processDecryptedImporterState(DatabaseImporter.State state) {
DatabaseImporter.Result result;
try {
result = state.convert();
@@ -204,8 +212,29 @@ public class ImportEntriesActivity extends AegisActivity {
return;
}
UUIDMap<VaultEntry> entries = result.getEntries();
for (VaultEntry entry : entries.getValues()) {
Map<UUID, VaultEntryIcon> icons = result.getEntries().getValues().stream()
.filter(e -> e.getIcon() != null
&& !e.getIcon().getType().equals(IconType.SVG)
&& !BitmapHelper.isVaultEntryIconOptimized(e.getIcon()))
.collect(Collectors.toMap(VaultEntry::getUUID, VaultEntry::getIcon));
if (!icons.isEmpty()) {
IconOptimizationTask task = new IconOptimizationTask(this, newIcons -> {
for (Map.Entry<UUID, VaultEntryIcon> mapEntry : newIcons.entrySet()) {
VaultEntry entry = result.getEntries().getByUUID(mapEntry.getKey());
entry.setIcon(mapEntry.getValue());
}
processImporterResult(result);
});
task.execute(getLifecycle(), icons);
} else {
processImporterResult(result);
}
}
private void processImporterResult(DatabaseImporter.Result result) {
List<ImportEntry> importEntries = new ArrayList<>();
for (VaultEntry entry : result.getEntries().getValues()) {
ImportEntry importEntry = new ImportEntry(entry);
_adapter.addEntry(importEntry);
importEntries.add(importEntry);
@@ -330,6 +359,31 @@ public class ImportEntriesActivity extends AegisActivity {
_adapter.setCheckboxStates(duplicateEntries, false);
Snackbar snackbar = Snackbar.make(_view, getResources().getQuantityString(R.plurals.import_duplicate_toast, duplicateEntries.size(), duplicateEntries.size()), Snackbar.LENGTH_INDEFINITE);
snackbar.addCallback(new Snackbar.Callback() {
@Override
public void onShown(Snackbar sb) {
int snackbarHeight = sb.getView().getHeight();
_entriesView.setPadding(
_entriesView.getPaddingLeft(),
_entriesView.getPaddingTop(),
_entriesView.getPaddingRight(),
_entriesView.getPaddingBottom() + snackbarHeight * 2
);
}
@Override
public void onDismissed(Snackbar sb, int event) {
int snackbarHeight = sb.getView().getHeight();
_entriesView.setPadding(
_entriesView.getPaddingLeft(),
_entriesView.getPaddingTop(),
_entriesView.getPaddingRight(),
_entriesView.getPaddingBottom() - snackbarHeight * 2
);
}
});
snackbar.setAction(R.string.undo, new View.OnClickListener() {
@Override
public void onClick(View v) {
@@ -23,6 +23,7 @@ import android.view.Menu;
import android.view.MenuInflater;
import android.view.MenuItem;
import android.view.View;
import android.view.ViewGroup;
import android.view.inputmethod.InputMethodManager;
import android.widget.AutoCompleteTextView;
import android.widget.Button;
@@ -44,9 +45,13 @@ import com.beemdevelopment.aegis.GroupPlaceholderType;
import com.beemdevelopment.aegis.Preferences;
import com.beemdevelopment.aegis.R;
import com.beemdevelopment.aegis.SortCategory;
import com.beemdevelopment.aegis.helpers.BitmapHelper;
import com.beemdevelopment.aegis.helpers.DropdownHelper;
import com.beemdevelopment.aegis.helpers.FabMenuHelper;
import com.beemdevelopment.aegis.helpers.FabScrollHelper;
import com.beemdevelopment.aegis.helpers.PermissionHelper;
import com.beemdevelopment.aegis.helpers.ViewHelper;
import com.beemdevelopment.aegis.icons.IconType;
import com.beemdevelopment.aegis.otp.GoogleAuthInfo;
import com.beemdevelopment.aegis.otp.GoogleAuthInfoException;
import com.beemdevelopment.aegis.otp.OtpInfoException;
@@ -55,16 +60,17 @@ import com.beemdevelopment.aegis.ui.fragments.preferences.BackupsPreferencesFrag
import com.beemdevelopment.aegis.ui.fragments.preferences.PreferencesFragment;
import com.beemdevelopment.aegis.ui.models.ErrorCardInfo;
import com.beemdevelopment.aegis.ui.models.VaultGroupModel;
import com.beemdevelopment.aegis.ui.tasks.IconOptimizationTask;
import com.beemdevelopment.aegis.ui.tasks.QrDecodeTask;
import com.beemdevelopment.aegis.ui.views.EntryListView;
import com.beemdevelopment.aegis.util.TimeUtils;
import com.beemdevelopment.aegis.util.UUIDMap;
import com.beemdevelopment.aegis.vault.VaultEntry;
import com.beemdevelopment.aegis.vault.VaultEntryIcon;
import com.beemdevelopment.aegis.vault.VaultFile;
import com.beemdevelopment.aegis.vault.VaultGroup;
import com.beemdevelopment.aegis.vault.VaultRepository;
import com.beemdevelopment.aegis.vault.VaultRepositoryException;
import com.google.android.material.bottomsheet.BottomSheetDialog;
import com.google.android.material.chip.Chip;
import com.google.android.material.chip.ChipGroup;
import com.google.android.material.color.MaterialColors;
@@ -79,9 +85,11 @@ import java.util.Collection;
import java.util.Collections;
import java.util.Date;
import java.util.HashSet;
import java.util.LinkedHashMap;
import java.util.List;
import java.util.Map;
import java.util.Objects;
import java.util.SequencedMap;
import java.util.Set;
import java.util.UUID;
import java.util.concurrent.atomic.AtomicReference;
@@ -112,6 +120,7 @@ public class MainActivity extends AegisActivity implements EntryListView.Listene
private Set<UUID> _prefGroupFilter;
private FabScrollHelper _fabScrollHelper;
private FabMenuHelper _fabMenuHelper;
private ActionMode _actionMode;
private ActionMode.Callback _actionModeCallbacks = new ActionModeCallbacks();
@@ -119,6 +128,7 @@ public class MainActivity extends AegisActivity implements EntryListView.Listene
private LockBackPressHandler _lockBackPressHandler;
private SearchViewBackPressHandler _searchViewBackPressHandler;
private ActionModeBackPressHandler _actionModeBackPressHandler;
private FabMenuBackPressHandler _fabMenuBackPressHandler;
private final ActivityResultLauncher<Intent> authResultLauncher =
registerForActivityResult(new StartActivityForResult(), activityResult -> {
@@ -183,6 +193,7 @@ public class MainActivity extends AegisActivity implements EntryListView.Listene
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
setSupportActionBar(findViewById(R.id.toolbar));
ViewHelper.setupAppBarInsets(findViewById(R.id.app_bar_layout));
_loaded = false;
_isDPadPressed = false;
_isDoingIntro = false;
@@ -201,6 +212,8 @@ public class MainActivity extends AegisActivity implements EntryListView.Listene
getOnBackPressedDispatcher().addCallback(this, _searchViewBackPressHandler);
_actionModeBackPressHandler = new ActionModeBackPressHandler();
getOnBackPressedDispatcher().addCallback(this, _actionModeBackPressHandler);
_fabMenuBackPressHandler = new FabMenuBackPressHandler();
getOnBackPressedDispatcher().addCallback(this, _fabMenuBackPressHandler);
_entryListView = (EntryListView) getSupportFragmentManager().findFragmentById(R.id.key_profiles);
_entryListView.setListener(this);
@@ -214,33 +227,36 @@ public class MainActivity extends AegisActivity implements EntryListView.Listene
_entryListView.setPauseFocused(_prefs.isPauseFocusedEnabled());
_entryListView.setTapToReveal(_prefs.isTapToRevealEnabled());
_entryListView.setTapToRevealTime(_prefs.getTapToRevealTime());
_entryListView.setSortCategory(_prefs.getCurrentSortCategory(), false);
_entryListView.setViewMode(_prefs.getCurrentViewMode());
_entryListView.setSortCategory(_prefs.getCurrentSortCategory(), false);
_entryListView.setCopyBehavior(_prefs.getCopyBehavior());
_entryListView.setSearchBehaviorMask(_prefs.getSearchBehaviorMask());
_prefGroupFilter = _prefs.getGroupFilter();
View scrimOverlayLayout = LayoutInflater.from(this).inflate(R.layout.scrim_layout, null);
View scrimOverlay = scrimOverlayLayout.findViewById(R.id.scrim);
addContentView(scrimOverlayLayout, new ViewGroup.LayoutParams(
ViewGroup.LayoutParams.MATCH_PARENT,
ViewGroup.LayoutParams.MATCH_PARENT
));
View fabMenuLayout = LayoutInflater.from(this).inflate(R.layout.fab_menu, null);
addContentView(fabMenuLayout, new ViewGroup.LayoutParams(
ViewGroup.LayoutParams.MATCH_PARENT,
ViewGroup.LayoutParams.MATCH_PARENT
));
ViewGroup menuItemsContainer = findViewById(R.id.fab_menu_items_container);
FloatingActionButton fab = findViewById(R.id.fab);
fab.setOnClickListener(v -> {
View view = getLayoutInflater().inflate(R.layout.dialog_add_entry, null);
BottomSheetDialog dialog = new BottomSheetDialog(this);
dialog.setContentView(view);
view.findViewById(R.id.fab_enter).setOnClickListener(v1 -> {
dialog.dismiss();
startEditEntryActivityForManual();
});
view.findViewById(R.id.fab_scan_image).setOnClickListener(v2 -> {
dialog.dismiss();
startScanImageActivity();
});
view.findViewById(R.id.fab_scan).setOnClickListener(v3 -> {
dialog.dismiss();
startScanActivity();
});
SequencedMap<View, Runnable> actions = new LinkedHashMap<>();
actions.put(findViewById(R.id.fab_menu_item_scan), this::startScanActivity);
actions.put(findViewById(R.id.fab_menu_item_scan_image), this::startScanImageActivity);
actions.put(findViewById(R.id.fab_menu_item_enter), this::startEditEntryActivityForManual);
Dialogs.showSecureDialog(dialog);
});
_fabMenuHelper = new FabMenuHelper(scrimOverlay, menuItemsContainer, fab, actions);
_fabMenuHelper.setOnFabMenuStateChangeListener(_fabMenuBackPressHandler::setEnabled);
_groupChip = findViewById(R.id.groupChipGroup);
_fabScrollHelper = new FabScrollHelper(fab);
@@ -272,6 +288,7 @@ public class MainActivity extends AegisActivity implements EntryListView.Listene
private void initializeGroups() {
_groupChip.removeAllViews();
_groupChip.setSingleSelection(!_prefs.isGroupMultiselectEnabled());
for (VaultGroup group : _groups) {
addChipTo(_groupChip, new VaultGroupModel(group));
@@ -311,29 +328,24 @@ public class MainActivity extends AegisActivity implements EntryListView.Listene
}
chip.setOnCheckedChangeListener((group1, isChecked) -> {
Set<UUID> groupFilter = new HashSet<>();
if (_actionMode != null) {
_actionMode.finish();
}
setSaveChipVisibility(true);
if (!isChecked) {
group1.setChecked(false);
// Reset group filter if last checked group gets unchecked
if (!isChecked && _groupFilter.size() == 1) {
Set<UUID> groupFilter = new HashSet<>();
chipGroup.clearCheck();
_groupFilter = groupFilter;
_entryListView.setGroupFilter(groupFilter);
return;
}
Object chipTag = group1.getTag();
if (chipTag == GroupPlaceholderType.NO_GROUP) {
groupFilter.add(null);
} else {
groupFilter = getGroupFilter(chipGroup);
}
_groupFilter = groupFilter;
_entryListView.setGroupFilter(groupFilter);
_groupFilter = getGroupFilter(chipGroup);
_entryListView.setGroupFilter(_groupFilter);
});
chipGroup.addView(chip);
@@ -366,8 +378,10 @@ public class MainActivity extends AegisActivity implements EntryListView.Listene
private static Set<UUID> getGroupFilter(ChipGroup chipGroup) {
return chipGroup.getCheckedChipIds().stream()
.filter(Objects::nonNull)
.map(i -> {
Chip chip = chipGroup.findViewById(i);
if (chip.getTag() instanceof VaultGroupModel) {
VaultGroupModel group = (VaultGroupModel) chip.getTag();
return group.getUUID();
@@ -375,7 +389,6 @@ public class MainActivity extends AegisActivity implements EntryListView.Listene
return null;
})
.filter(Objects::nonNull)
.collect(Collectors.toSet());
}
@@ -722,6 +735,37 @@ public class MainActivity extends AegisActivity implements EntryListView.Listene
}
}
private void checkIconOptimization() {
if (!_vaultManager.getVault().areIconsOptimized()) {
Map<UUID, VaultEntryIcon> oldIcons = _vaultManager.getVault().getEntries().stream()
.filter(e -> e.getIcon() != null
&& !e.getIcon().getType().equals(IconType.SVG)
&& !BitmapHelper.isVaultEntryIconOptimized(e.getIcon()))
.collect(Collectors.toMap(VaultEntry::getUUID, VaultEntry::getIcon));
if (!oldIcons.isEmpty()) {
IconOptimizationTask task = new IconOptimizationTask(this, this::onIconsOptimized);
task.execute(getLifecycle(), oldIcons);
} else {
onIconsOptimized(Collections.emptyMap());
}
}
}
private void onIconsOptimized(Map<UUID, VaultEntryIcon> newIcons) {
for (Map.Entry<UUID, VaultEntryIcon> mapEntry : newIcons.entrySet()) {
VaultEntry entry = _vaultManager.getVault().getEntryByUUID(mapEntry.getKey());
entry.setIcon(mapEntry.getValue());
}
_vaultManager.getVault().setIconsOptimized(true);
saveAndBackupVault();
if (!newIcons.isEmpty()) {
_entryListView.setEntries(_vaultManager.getVault().getEntries());
}
}
private void onDecryptResult() {
_auditLogRepository.addVaultUnlockedEvent();
@@ -856,6 +900,13 @@ public class MainActivity extends AegisActivity implements EntryListView.Listene
}
}
@Override
protected void onStop() {
super.onStop();
_entryListView.onRefreshStop();
}
@Override
protected void onStart() {
super.onStart();
@@ -907,13 +958,18 @@ public class MainActivity extends AegisActivity implements EntryListView.Listene
// refresh all codes to prevent showing old ones
_entryListView.refresh(false);
_entryListView.onRefreshStart();
} else {
loadEntries();
checkTimeSyncSetting();
checkIconOptimization();
_entryListView.onRefreshStart();
}
_lockBackPressHandler.setEnabled(
_vaultManager.isAutoLockEnabled(Preferences.AUTO_LOCK_ON_BACK_BUTTON)
_vaultManager.isAutoLockEnabled(Preferences.AUTO_LOCK_ON_BACK_BUTTON)
);
handleIncomingIntent();
@@ -1268,6 +1324,9 @@ public class MainActivity extends AegisActivity implements EntryListView.Listene
if (_searchView != null && !_searchView.isIconified()) {
collapseSearchView();
}
if (_fabMenuHelper != null && _fabMenuHelper.isOpen()) {
_fabMenuHelper.close();
}
_entryListView.clearEntries();
_loaded = false;
@@ -1353,6 +1412,19 @@ public class MainActivity extends AegisActivity implements EntryListView.Listene
}
}
private class FabMenuBackPressHandler extends OnBackPressedCallback {
public FabMenuBackPressHandler() {
super(false);
}
@Override
public void handleOnBackPressed() {
if (_fabMenuHelper != null && _fabMenuHelper.isOpen()) {
_fabMenuHelper.close();
}
}
}
private class ActionModeCallbacks implements ActionMode.Callback {
@Override
public boolean onCreateActionMode(ActionMode mode, Menu menu) {
@@ -13,6 +13,7 @@ import com.beemdevelopment.aegis.R;
import com.beemdevelopment.aegis.ui.fragments.preferences.AppearancePreferencesFragment;
import com.beemdevelopment.aegis.ui.fragments.preferences.MainPreferencesFragment;
import com.beemdevelopment.aegis.ui.fragments.preferences.PreferencesFragment;
import com.beemdevelopment.aegis.helpers.ViewHelper;
public class PreferencesActivity extends AegisActivity implements
PreferenceFragmentCompat.OnPreferenceStartFragmentCallback {
@@ -27,6 +28,7 @@ public class PreferencesActivity extends AegisActivity implements
}
setContentView(R.layout.activity_preferences);
setSupportActionBar(findViewById(R.id.toolbar));
ViewHelper.setupAppBarInsets(findViewById(R.id.app_bar_layout));
getSupportFragmentManager()
.registerFragmentLifecycleCallbacks(new FragmentResumeListener(), true);
@@ -22,6 +22,7 @@ import com.beemdevelopment.aegis.helpers.QrCodeAnalyzer;
import com.beemdevelopment.aegis.otp.GoogleAuthInfo;
import com.beemdevelopment.aegis.otp.GoogleAuthInfoException;
import com.beemdevelopment.aegis.ui.dialogs.Dialogs;
import com.beemdevelopment.aegis.helpers.ViewHelper;
import com.beemdevelopment.aegis.vault.VaultEntry;
import com.google.common.util.concurrent.ListenableFuture;
import com.google.zxing.Result;
@@ -56,6 +57,7 @@ public class ScannerActivity extends AegisActivity implements QrCodeAnalyzer.Lis
}
setContentView(R.layout.activity_scanner);
setSupportActionBar(findViewById(R.id.toolbar));
ViewHelper.setupAppBarInsets(findViewById(R.id.app_bar_layout));
_entries = new ArrayList<>();
_lenses = new ArrayList<>();
@@ -10,6 +10,7 @@ import android.graphics.Color;
import android.os.Build;
import android.os.Bundle;
import android.os.PersistableBundle;
import android.provider.Settings;
import android.view.MenuItem;
import android.view.View;
import android.view.ViewGroup;
@@ -28,6 +29,7 @@ import com.beemdevelopment.aegis.otp.GoogleAuthInfo;
import com.beemdevelopment.aegis.otp.GoogleAuthInfoException;
import com.beemdevelopment.aegis.otp.Transferable;
import com.beemdevelopment.aegis.ui.dialogs.Dialogs;
import com.beemdevelopment.aegis.helpers.ViewHelper;
import com.google.android.material.color.MaterialColors;
import com.google.android.material.imageview.ShapeableImageView;
import com.google.zxing.WriterException;
@@ -46,6 +48,8 @@ public class TransferEntriesActivity extends AegisActivity {
private Button _previousButton;
private Button _copyButton;
private int _currentEntryCount = 1;
private float _deviceBrightness;
private boolean _isMaxBrightnessSet = false;
@Override
protected void onCreate(Bundle savedInstanceState) {
@@ -55,6 +59,7 @@ public class TransferEntriesActivity extends AegisActivity {
}
setContentView(R.layout.activity_share_entry);
setSupportActionBar(findViewById(R.id.toolbar));
ViewHelper.setupAppBarInsets(findViewById(R.id.app_bar_layout));
_qrImage = findViewById(R.id.ivQrCode);
_description = findViewById(R.id.tvDescription);
@@ -144,13 +149,33 @@ public class TransferEntriesActivity extends AegisActivity {
_qrImage.getViewTreeObserver().removeOnGlobalLayoutListener(this);
}
});
_deviceBrightness = getSystemBrightness();
_qrImage.setOnClickListener(v -> {
if (!_isMaxBrightnessSet) {
setBrightness(1f);
_isMaxBrightnessSet = true;
} else {
setBrightness(_deviceBrightness);
_isMaxBrightnessSet = false;
}
});
}
@Override
public void onAttachedToWindow() {
// Max brightness to make the QR codes easier to scan
private float getSystemBrightness() {
int brightness = 0;
try {
brightness = Settings.System.getInt(getContentResolver(), Settings.System.SCREEN_BRIGHTNESS);
} catch (Settings.SettingNotFoundException e) {
e.printStackTrace();
}
return brightness / 255f;
}
private void setBrightness(float brightnessAmount) {
WindowManager.LayoutParams attrs = getWindow().getAttributes();
attrs.screenBrightness = 1.0f;
attrs.screenBrightness = brightnessAmount;
getWindow().setAttributes(attrs);
}
@@ -0,0 +1,35 @@
package com.beemdevelopment.aegis.ui.components;
import android.content.Context;
import android.os.Build;
import android.util.AttributeSet;
import android.view.View;
import androidx.annotation.NonNull;
import androidx.annotation.Nullable;
import com.google.android.material.textfield.TextInputEditText;
public class NoAutofillEditText extends TextInputEditText {
public NoAutofillEditText(@NonNull Context context) {
super(context);
}
public NoAutofillEditText(@NonNull Context context, @Nullable AttributeSet attrs) {
super(context, attrs);
}
public NoAutofillEditText(@NonNull Context context, @Nullable AttributeSet attrs, int defStyleAttr) {
super(context, attrs, defStyleAttr);
}
@Override
public int getAutofillType() {
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.O) {
return View.AUTOFILL_TYPE_NONE;
} else {
return super.getAutofillType();
}
}
}
@@ -6,6 +6,9 @@ import android.view.View;
import android.widget.LinearLayout;
import androidx.annotation.NonNull;
import androidx.core.graphics.Insets;
import androidx.core.view.ViewCompat;
import androidx.core.view.WindowInsetsCompat;
import androidx.fragment.app.Fragment;
import androidx.lifecycle.LiveData;
import androidx.recyclerview.widget.LinearLayoutManager;
@@ -58,6 +61,17 @@ public class AuditLogPreferencesFragment extends Fragment {
_auditLogRecyclerView.setAdapter(_adapter);
_auditLogRecyclerView.setNestedScrollingEnabled(false);
ViewCompat.setOnApplyWindowInsetsListener(_auditLogRecyclerView, (targetView, windowInsets) -> {
Insets insets = windowInsets.getInsets(WindowInsetsCompat.Type.systemBars() | WindowInsetsCompat.Type.displayCutout());
targetView.setPadding(
0,
0,
0,
insets.bottom
);
return WindowInsetsCompat.CONSUMED;
});
entries.observe(getViewLifecycleOwner(), entries1 -> {
_noAuditLogsView.setVisibility(entries1.isEmpty() ? View.VISIBLE : View.GONE);
@@ -6,6 +6,7 @@ import android.net.Uri;
import android.os.Bundle;
import android.text.method.LinkMovementMethod;
import android.view.View;
import android.view.ViewGroup.MarginLayoutParams;
import android.view.animation.Animation;
import android.widget.LinearLayout;
import android.widget.TextView;
@@ -14,6 +15,9 @@ import androidx.activity.result.ActivityResultLauncher;
import androidx.activity.result.contract.ActivityResultContracts.StartActivityForResult;
import androidx.annotation.NonNull;
import androidx.annotation.Nullable;
import androidx.core.graphics.Insets;
import androidx.core.view.ViewCompat;
import androidx.core.view.WindowInsetsCompat;
import androidx.fragment.app.Fragment;
import androidx.recyclerview.widget.LinearLayoutManager;
import androidx.recyclerview.widget.RecyclerView;
@@ -67,6 +71,19 @@ public class IconPacksManagerFragment extends Fragment implements IconPackAdapte
fab.setOnClickListener(v -> startImportIconPack());
_fabScrollHelper = new FabScrollHelper(fab);
final MarginLayoutParams fabInitialMargin = (MarginLayoutParams) fab.getLayoutParams();
ViewCompat.setOnApplyWindowInsetsListener(fab, (targetView, windowInsets) -> {
Insets insets = windowInsets.getInsets(WindowInsetsCompat.Type.systemBars() | WindowInsetsCompat.Type.displayCutout());
MarginLayoutParams marginParams = (MarginLayoutParams) targetView.getLayoutParams();
marginParams.leftMargin = fabInitialMargin.leftMargin + insets.left;
marginParams.bottomMargin = fabInitialMargin.bottomMargin + insets.bottom;
marginParams.rightMargin = fabInitialMargin.rightMargin + insets.right;
targetView.setLayoutParams(marginParams);
return WindowInsetsCompat.CONSUMED;
});
_noIconPacksView = view.findViewById(R.id.vEmptyList);
((TextView) view.findViewById(R.id.txt_no_icon_packs)).setMovementMethod(LinkMovementMethod.getInstance());
_adapter = new IconPackAdapter(this);
@@ -518,11 +518,10 @@ public class ImportExportPreferencesFragment extends PreferencesFragment {
file = File.createTempFile(VaultRepository.FILENAME_PREFIX_EXPORT + "-", ".json", getExportCacheDir());
outStream = new FileOutputStream(file);
cb.exportVault(outStream);
new ExportTask(requireContext(), new ExportResultListener()).execute(getLifecycle(), new ExportTask.Params(file, uri));
} catch (VaultRepositoryException | IOException e) {
e.printStackTrace();
Dialogs.showErrorDialog(requireContext(), R.string.exporting_vault_error, e);
return;
} finally {
try {
if (outStream != null) {
@@ -532,6 +531,8 @@ public class ImportExportPreferencesFragment extends PreferencesFragment {
e.printStackTrace();
}
}
new ExportTask(requireContext(), new ExportResultListener()).execute(getLifecycle(), new ExportTask.Params(file, uri));
}, _exportFilter);
_exportFilter = null;
}
@@ -1,13 +1,20 @@
package com.beemdevelopment.aegis.ui.fragments.preferences;
import android.content.Intent;
import android.os.Bundle;
import android.view.LayoutInflater;
import android.view.ViewGroup;
import android.view.animation.Animation;
import androidx.annotation.CallSuper;
import androidx.annotation.NonNull;
import androidx.annotation.Nullable;
import androidx.core.graphics.Insets;
import androidx.core.view.ViewCompat;
import androidx.core.view.WindowInsetsCompat;
import androidx.preference.Preference;
import androidx.preference.PreferenceFragmentCompat;
import androidx.recyclerview.widget.RecyclerView;
import com.beemdevelopment.aegis.Preferences;
import com.beemdevelopment.aegis.R;
@@ -61,6 +68,23 @@ public abstract class PreferencesFragment extends PreferenceFragmentCompat {
return super.onCreateAnimation(transit, enter, nextAnim);
}
@NonNull
@Override
public RecyclerView onCreateRecyclerView(@NonNull LayoutInflater inflater, @NonNull ViewGroup parent, @Nullable Bundle savedInstanceState) {
RecyclerView recyclerView = super.onCreateRecyclerView(inflater, parent, savedInstanceState);
ViewCompat.setOnApplyWindowInsetsListener(recyclerView, (targetView, windowInsets) -> {
Insets insets = windowInsets.getInsets(WindowInsetsCompat.Type.systemBars() | WindowInsetsCompat.Type.displayCutout());
targetView.setPadding(
0,
0,
0,
insets.bottom
);
return WindowInsetsCompat.CONSUMED;
});
return recyclerView;
}
protected boolean saveAndBackupVault() {
try {
_vaultManager.saveAndBackup();
@@ -1,17 +1,14 @@
package com.beemdevelopment.aegis.ui.preferences;
import android.content.Context;
import android.os.Build;
import android.util.AttributeSet;
import androidx.annotation.RequiresApi;
import androidx.preference.Preference;
import androidx.preference.SwitchPreferenceCompat;
public class SwitchPreference extends SwitchPreferenceCompat {
private Preference.OnPreferenceChangeListener _listener;
@RequiresApi(api = Build.VERSION_CODES.LOLLIPOP)
public SwitchPreference(Context context, AttributeSet attrs, int defStyleAttr, int defStyleRes) {
super(context, attrs, defStyleAttr, defStyleRes);
}
@@ -34,6 +34,8 @@ public class ExportTask extends ProgressDialogTask<ExportTask.Params, Exception>
return null;
} catch (IOException e) {
return e;
} finally {
boolean ignored = params.getFile().delete();
}
}
@@ -0,0 +1,63 @@
package com.beemdevelopment.aegis.ui.tasks;
import android.content.Context;
import android.graphics.Bitmap;
import android.graphics.BitmapFactory;
import com.beemdevelopment.aegis.R;
import com.beemdevelopment.aegis.helpers.BitmapHelper;
import com.beemdevelopment.aegis.icons.IconType;
import com.beemdevelopment.aegis.vault.VaultEntryIcon;
import java.util.HashMap;
import java.util.Map;
import java.util.UUID;
public class IconOptimizationTask extends ProgressDialogTask<Map<UUID, VaultEntryIcon>, Map<UUID, VaultEntryIcon>> {
private final Callback _cb;
public IconOptimizationTask(Context context, Callback cb) {
super(context, context.getString(R.string.optimizing_icon));
_cb = cb;
}
@Override
protected Map<UUID, VaultEntryIcon> doInBackground(Map<UUID, VaultEntryIcon>... params) {
Map<UUID, VaultEntryIcon> res = new HashMap<>();
Context context = getDialog().getContext();
int i = 0;
Map<UUID, VaultEntryIcon> icons = params[0];
for (Map.Entry<UUID, VaultEntryIcon> entry : icons.entrySet()) {
if (icons.size() > 1) {
publishProgress(context.getString(R.string.optimizing_icon_multiple, i + 1, icons.size()));
}
i++;
VaultEntryIcon oldIcon = entry.getValue();
if (oldIcon == null || oldIcon.getType().equals(IconType.SVG)) {
continue;
}
if (BitmapHelper.isVaultEntryIconOptimized(oldIcon)) {
continue;
}
Bitmap bitmap = BitmapFactory.decodeByteArray(oldIcon.getBytes(), 0, oldIcon.getBytes().length);
VaultEntryIcon newIcon = BitmapHelper.toVaultEntryIcon(bitmap, oldIcon.getType());
bitmap.recycle();
res.put(entry.getKey(), newIcon);
}
return res;
}
@Override
protected void onPostExecute(Map<UUID, VaultEntryIcon> results) {
super.onPostExecute(results);
_cb.onTaskFinished(results);
}
public interface Callback {
void onTaskFinished(Map<UUID, VaultEntryIcon> results);
}
}
@@ -67,7 +67,6 @@ public class EntryHolder extends RecyclerView.ViewHolder {
private boolean _hidden;
private boolean _paused;
private TotpProgressBar _progressBar;
private MaterialCardView _view;
@@ -111,14 +110,22 @@ public class EntryHolder extends RecyclerView.ViewHolder {
refreshCode();
}
@Override
public void onExpiring() { }
@Override
public long getMillisTillNextRefresh() {
return ((TotpInfo) _entry.getInfo()).getMillisTillNextRotation();
}
@Override
public long getPeriodMillis() {
return ((TotpInfo) _entry.getInfo()).getPeriod() * 1000L;
}
});
}
public void setData(VaultEntry entry, Preferences.CodeGrouping groupSize, ViewMode viewMode, AccountNamePosition accountNamePosition, boolean showIcon, boolean showProgress, boolean hidden, boolean paused, boolean dimmed, boolean showExpirationState, boolean showNextCode) {
public void setData(VaultEntry entry, Preferences.CodeGrouping groupSize, ViewMode viewMode, AccountNamePosition accountNamePosition, boolean showIcon, boolean nonUniform, boolean hidden, boolean paused, boolean dimmed, boolean showExpirationState, boolean showNextCode) {
_entry = entry;
_hidden = hidden;
_paused = paused;
@@ -140,7 +147,7 @@ public class EntryHolder extends RecyclerView.ViewHolder {
_favoriteIndicator.setVisibility(_entry.isFavorite() ? View.VISIBLE : View.INVISIBLE);
// only show the progress bar if there is no uniform period and the entry type is TotpInfo
setShowProgress(showProgress);
setShowProgress(nonUniform);
// only show the button if this entry is of type HotpInfo
_buttonRefresh.setVisibility(entry.getInfo() instanceof HotpInfo ? View.VISIBLE : View.GONE);
@@ -369,9 +376,11 @@ public class EntryHolder extends RecyclerView.ViewHolder {
public void hideCode() {
String code = getOtp();
String hiddenText = code.replaceAll("\\S", Character.toString(HIDDEN_CHAR));
stopExpirationAnimation();
updateTextViewWithDots(_profileCode, hiddenText, code);
updateTextViewWithDots(_nextProfileCode, hiddenText, code);
stopExpirationAnimation();
_hidden = true;
}
@@ -384,6 +393,7 @@ public class EntryHolder extends RecyclerView.ViewHolder {
float dotsWidth = paint.measureText(hiddenCode);
float scaleFactor = codeWidth / dotsWidth;
scaleFactor = (float)(Math.round(scaleFactor * 10.0) / 10.0);
textView.setTextColor(MaterialColors.getColor(textView, R.attr.colorCodeHidden));
// If scale is higher or equal to 0.8, do nothing and proceed with the normal text rendering
if (scaleFactor >= 0.8) {
@@ -423,7 +433,7 @@ public class EntryHolder extends RecyclerView.ViewHolder {
final int totalStateDuration = 7000;
TotpInfo info = (TotpInfo) _entry.getInfo();
if (info.getPeriod() * 1000 < totalStateDuration) {
if (info.getPeriod() * 1000 <= totalStateDuration) {
_profileCode.setTextColor(MaterialColors.getColor(_profileCode, com.google.android.material.R.attr.colorError));
return;
}
@@ -19,6 +19,9 @@ import androidx.annotation.AttrRes;
import androidx.annotation.NonNull;
import androidx.annotation.Nullable;
import androidx.annotation.StyleRes;
import androidx.core.graphics.Insets;
import androidx.core.view.ViewCompat;
import androidx.core.view.WindowInsetsCompat;
import androidx.fragment.app.Fragment;
import androidx.recyclerview.widget.GridLayoutManager;
import androidx.recyclerview.widget.ItemTouchHelper;
@@ -30,11 +33,13 @@ import com.beemdevelopment.aegis.CopyBehavior;
import com.beemdevelopment.aegis.Preferences;
import com.beemdevelopment.aegis.R;
import com.beemdevelopment.aegis.SortCategory;
import com.beemdevelopment.aegis.VibrationPatterns;
import com.beemdevelopment.aegis.ViewMode;
import com.beemdevelopment.aegis.helpers.AnimationsHelper;
import com.beemdevelopment.aegis.helpers.MetricsHelper;
import com.beemdevelopment.aegis.helpers.SimpleItemTouchHelperCallback;
import com.beemdevelopment.aegis.helpers.UiRefresher;
import com.beemdevelopment.aegis.helpers.VibrationHelper;
import com.beemdevelopment.aegis.otp.TotpInfo;
import com.beemdevelopment.aegis.ui.glide.GlideHelper;
import com.beemdevelopment.aegis.ui.models.ErrorCardInfo;
@@ -63,13 +68,13 @@ public class EntryListView extends Fragment implements EntryAdapter.Listener {
private Listener _listener;
private SimpleItemTouchHelperCallback _touchCallback;
private ItemTouchHelper _touchHelper;
private VibrationHelper _vibrationHelper;
private RecyclerView _recyclerView;
private RecyclerView.ItemDecoration _itemDecoration;
private ViewPreloadSizeProvider<VaultEntry> _preloadSizeProvider;
private TotpProgressBar _progressBar;
private boolean _showProgress;
private boolean _showExpirationState;
private ViewMode _viewMode;
private LinearLayout _emptyStateView;
@@ -92,6 +97,7 @@ public class EntryListView extends Fragment implements EntryAdapter.Listener {
public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
View view = inflater.inflate(R.layout.fragment_entry_list_view, container, false);
_progressBar = view.findViewById(R.id.progressBar);
_vibrationHelper = new VibrationHelper(getContext());
// set up the recycler view
_recyclerView = view.findViewById(R.id.rvKeyProfiles);
@@ -141,12 +147,40 @@ public class EntryListView extends Fragment implements EntryAdapter.Listener {
@Override
public void onRefresh() {
refresh(false);
_vibrationHelper.vibratePattern(getContext(), VibrationPatterns.REFRESH_CODE);
}
@Override
public void onExpiring() {
_vibrationHelper.vibratePattern(getContext(), VibrationPatterns.EXPIRING);
}
@Override
public long getMillisTillNextRefresh() {
return TotpInfo.getMillisTillNextRotation(_adapter.getMostFrequentPeriod());
}
@Override
public long getPeriodMillis() {
return _adapter.getMostFrequentPeriod() * 1000L;
}
});
final int rvInitialPaddingLeft = _recyclerView.getPaddingLeft();
final int rvInitialPaddingTop = _recyclerView.getPaddingTop();
final int rvInitialPaddingRight = _recyclerView.getPaddingRight();
final int rvInitialPaddingBottom = _recyclerView.getPaddingBottom();
ViewCompat.setOnApplyWindowInsetsListener(_recyclerView, (targetView, windowInsets) -> {
Insets insets = windowInsets.getInsets(WindowInsetsCompat.Type.systemBars() | WindowInsetsCompat.Type.displayCutout());
// left and right padding seems to be handled by fitsSystemWindows="true" on the CoordinatorLayout in activity_main.xml
targetView.setPadding(
rvInitialPaddingLeft,
rvInitialPaddingTop,
rvInitialPaddingRight,
rvInitialPaddingBottom + insets.bottom
);
return WindowInsetsCompat.CONSUMED;
});
_emptyStateView = view.findViewById(R.id.vEmptyList);
@@ -171,6 +205,16 @@ public class EntryListView extends Fragment implements EntryAdapter.Listener {
super.onDestroyView();
}
public void onRefreshStop() {
_refresher.stop();
}
public void onRefreshStart() {
if (_adapter.getMostFrequentPeriod() != -1){
_refresher.start();
}
}
public void setGroups(Collection<VaultGroup> groups) {
_adapter.setGroups(groups);
updateDividerDecoration();
@@ -180,6 +224,7 @@ public class EntryListView extends Fragment implements EntryAdapter.Listener {
_adapter.setGroupFilter(groups);
_touchCallback.setIsLongPressDragEnabled(_adapter.isDragAndDropAllowed());
updateEmptyState();
updateDividerDecoration();
}
public void setIsLongPressDragEnabled(boolean enabled) {
@@ -212,6 +257,7 @@ public class EntryListView extends Fragment implements EntryAdapter.Listener {
public void setSortCategory(SortCategory sortCategory, boolean apply) {
_adapter.setSortCategory(sortCategory, apply);
_touchCallback.setIsLongPressDragEnabled(_adapter.isDragAndDropAllowed());
updateDividerDecoration();
}
public void setUsageCounts(Map<UUID, Integer> usageCounts) {
@@ -233,8 +279,8 @@ public class EntryListView extends Fragment implements EntryAdapter.Listener {
public void setSearchFilter(String search) {
_adapter.setSearchFilter(search);
_touchCallback.setIsLongPressDragEnabled(_adapter.isDragAndDropAllowed());
updateEmptyState();
updateDividerDecoration();
}
public void setSelectedEntry(VaultEntry entry) {
@@ -333,11 +379,11 @@ public class EntryListView extends Fragment implements EntryAdapter.Listener {
_progressBar.setVisibility(View.VISIBLE);
_progressBar.setPeriod(period);
_progressBar.start();
_refresher.start();
onRefreshStart();
} else {
_progressBar.setVisibility(View.GONE);
_progressBar.stop();
_refresher.stop();
onRefreshStop();
}
}
@@ -369,7 +415,6 @@ public class EntryListView extends Fragment implements EntryAdapter.Listener {
}
public void setShowExpirationState(boolean showExpirationState) {
_showExpirationState = showExpirationState;
_adapter.setShowExpirationState(showExpirationState);
}
@@ -2,14 +2,11 @@ package com.beemdevelopment.aegis.ui.views;
import android.animation.ObjectAnimator;
import android.content.Context;
import android.os.Build;
import android.os.Handler;
import android.util.AttributeSet;
import android.view.animation.LinearInterpolator;
import android.widget.ProgressBar;
import androidx.annotation.RequiresApi;
import com.beemdevelopment.aegis.helpers.AnimationsHelper;
import com.beemdevelopment.aegis.otp.TotpInfo;
@@ -30,7 +27,6 @@ public class TotpProgressBar extends ProgressBar {
super(context, attrs, defStyleAttr);
}
@RequiresApi(api = Build.VERSION_CODES.LOLLIPOP)
public TotpProgressBar(Context context, AttributeSet attrs, int defStyleAttr, int defStyleRes) {
super(context, attrs, defStyleAttr, defStyleRes);
}
@@ -15,6 +15,7 @@ public class Vault {
private static final int VERSION = 3;
private final UUIDMap<VaultEntry> _entries = new UUIDMap<>();
private final UUIDMap<VaultGroup> _groups = new UUIDMap<>();
private boolean _iconsOptimized = true;
// Whether we've migrated the group list to the new format while parsing the vault
private boolean _isGroupsMigrationFresh = false;
@@ -42,6 +43,7 @@ public class Vault {
obj.put("version", VERSION);
obj.put("entries", entriesArray);
obj.put("groups", groupsArray);
obj.put("icons_optimized", _iconsOptimized);
return obj;
} catch (JSONException e) {
@@ -86,6 +88,10 @@ public class Vault {
entries.add(entry);
}
if (!obj.optBoolean("icons_optimized")) {
vault.setIconsOptimized(false);
}
} catch (VaultEntryException | JSONException e) {
throw new VaultException(e);
}
@@ -101,6 +107,14 @@ public class Vault {
return _isGroupsMigrationFresh;
}
public void setIconsOptimized(boolean optimized) {
_iconsOptimized = optimized;
}
public boolean areIconsOptimized() {
return _iconsOptimized;
}
public boolean migrateOldGroup(VaultEntry entry) {
if (entry.getOldGroup() != null) {
Optional<VaultGroup> optGroup = getGroups().getValues()
@@ -103,8 +103,14 @@ public class VaultEntry extends UUIDMap.Value {
entry.setOldGroup(JsonUtils.optString(obj, "group"));
}
VaultEntryIcon icon = VaultEntryIcon.fromJson(obj);
entry.setIcon(icon);
// Silently ignore any errors that occur when trying to parse the icon of an
// entry. This allows us to introduce new icon types in the future (e.g. WebP)
// without breaking compatibility with older versions of Aegis.
try {
VaultEntryIcon icon = VaultEntryIcon.fromJson(obj);
entry.setIcon(icon);
} catch (VaultEntryIconException ignored) {
}
return entry;
} catch (OtpInfoException | JSONException e) {
@@ -233,6 +239,10 @@ public class VaultEntry extends UUIDMap.Value {
&& getGroups().equals(entry.getGroups());
}
public boolean hasSameNameAndIssuer(VaultEntry entry) {
return getName().equals(entry.getName()) && getIssuer().equals(entry.getIssuer());
}
/**
* Reports whether this entry has its values set to the defaults.
*/
@@ -1,5 +1,8 @@
package com.beemdevelopment.aegis.vault;
import androidx.annotation.NonNull;
import androidx.annotation.Nullable;
import com.beemdevelopment.aegis.encoding.Base64;
import com.beemdevelopment.aegis.encoding.EncodingException;
import com.beemdevelopment.aegis.encoding.Hex;
@@ -7,8 +10,6 @@ import com.beemdevelopment.aegis.icons.IconType;
import com.beemdevelopment.aegis.util.JsonUtils;
import com.google.common.hash.HashCode;
import org.checkerframework.checker.nullness.qual.NonNull;
import org.checkerframework.checker.nullness.qual.Nullable;
import org.json.JSONException;
import org.json.JSONObject;
@@ -23,21 +24,23 @@ public class VaultEntryIcon implements Serializable {
private final byte[] _hash;
private final IconType _type;
public VaultEntryIcon(byte @NonNull [] bytes, @NonNull IconType type) {
public static final int MAX_DIMENS = 512;
public VaultEntryIcon(@NonNull byte[] bytes, @NonNull IconType type) {
this(bytes, type, generateHash(bytes, type));
}
VaultEntryIcon(byte @NonNull [] bytes, @NonNull IconType type, byte @NonNull [] hash) {
VaultEntryIcon(@NonNull byte[] bytes, @NonNull IconType type, @NonNull byte[] hash) {
_bytes = bytes;
_hash = hash;
_type = type;
}
public byte @NonNull [] getBytes() {
public @NonNull byte[] getBytes() {
return _bytes;
}
public byte @NonNull [] getHash() {
public @NonNull byte[] getHash() {
return _hash;
}
@@ -70,7 +73,7 @@ public class VaultEntryIcon implements Serializable {
}
@Nullable
static VaultEntryIcon fromJson(@NonNull JSONObject obj) throws VaultEntryException {
static VaultEntryIcon fromJson(@NonNull JSONObject obj) throws VaultEntryIconException {
try {
Object icon = obj.get("icon");
if (icon == JSONObject.NULL) {
@@ -80,7 +83,7 @@ public class VaultEntryIcon implements Serializable {
String mime = JsonUtils.optString(obj, "icon_mime");
IconType iconType = mime == null ? IconType.JPEG : IconType.fromMimeType(mime);
if (iconType == IconType.INVALID) {
throw new VaultEntryException(String.format("Bad icon MIME type: %s", mime));
throw new VaultEntryIconException(String.format("Bad icon MIME type: %s", mime));
}
byte[] iconBytes = Base64.decode((String) icon);
@@ -92,11 +95,11 @@ public class VaultEntryIcon implements Serializable {
return new VaultEntryIcon(iconBytes, iconType);
} catch (JSONException | EncodingException e) {
throw new VaultEntryException(e);
throw new VaultEntryIconException(e);
}
}
private static byte @NonNull [] generateHash(byte @NonNull [] bytes, @NonNull IconType type) {
private static @NonNull byte[] generateHash(@NonNull byte[] bytes, @NonNull IconType type) {
try {
MessageDigest md = MessageDigest.getInstance("SHA-256");
md.update(type.toMimeType().getBytes(StandardCharsets.UTF_8));
@@ -0,0 +1,11 @@
package com.beemdevelopment.aegis.vault;
public class VaultEntryIconException extends Exception {
public VaultEntryIconException(Throwable cause) {
super(cause);
}
public VaultEntryIconException(String message) {
super(message);
}
}
@@ -333,6 +333,14 @@ public class VaultRepository {
return _vault.isGroupsMigrationFresh();
}
public boolean areIconsOptimized() {
return _vault.areIconsOptimized();
}
public void setIconsOptimized(boolean optimized) {
_vault.setIconsOptimized(optimized);
}
public VaultFileCredentials getCredentials() {
return _creds == null ? null : _creds.clone();
}
+9
View 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:pathData="m240,800 l40,-160L120,640l20,-80h160l40,-160L180,400l20,-80h160l40,-160h80l-40,160h160l40,-160h80l-40,160h160l-20,80L660,400l-40,160h160l-20,80L600,640l-40,160h-80l40,-160L360,640l-40,160h-80ZM380,560h160l40,-160L420,400l-40,160Z"
android:fillColor="#e3e3e3"/>
</vector>
@@ -17,6 +17,7 @@
android:layout_height="?attr/actionBarSize" />
</com.google.android.material.appbar.AppBarLayout>
<ScrollView
android:id="@+id/about_scroll_view"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:clipToPadding="false"
+22 -2
View File
@@ -42,19 +42,39 @@
android:orientation="vertical">
<com.google.android.material.textfield.TextInputLayout
android:id="@+id/layout_standard"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:paddingBottom="12dp"
app:hintEnabled="false"
app:passwordToggleEnabled="true"
app:passwordToggleTint="?attr/colorOnSurface">
app:passwordToggleTint="?attr/colorOnSurface"
android:visibility="visible">
<com.google.android.material.textfield.TextInputEditText
android:id="@+id/text_password"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:hint="@string/password"
android:inputType="textPassword" />
android:inputType="textPassword"/>
</com.google.android.material.textfield.TextInputLayout>
<com.google.android.material.textfield.TextInputLayout
android:id="@+id/layout_no_autofill"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:paddingBottom="12dp"
app:hintEnabled="false"
app:passwordToggleEnabled="true"
app:passwordToggleTint="?attr/colorOnSurface"
android:visibility="gone">
<com.beemdevelopment.aegis.ui.components.NoAutofillEditText
android:id="@+id/text_password_no_autofill"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:hint="@string/password"
android:inputType="numberPassword"/>
</com.google.android.material.textfield.TextInputLayout>
<LinearLayout
@@ -23,7 +23,6 @@
android:id="@+id/list_entries"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:paddingBottom="60dp"
android:clipToPadding="false"
android:scrollbars="vertical"
app:layout_behavior="@string/appbar_scrolling_view_behavior"/>
+1 -10
View File
@@ -39,8 +39,7 @@
android:id="@+id/groupChipGroup"
android:layout_width="match_parent"
android:layout_height="wrap_content"
app:selectionRequired="true"
app:singleSelection="true"/>
app:selectionRequired="true"/>
</LinearLayout>
</HorizontalScrollView>
</com.google.android.material.appbar.AppBarLayout>
@@ -60,12 +59,4 @@
app:layout_behavior="@string/appbar_scrolling_view_behavior" />
</LinearLayout>
<com.google.android.material.floatingactionbutton.FloatingActionButton
android:id="@+id/fab"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_gravity="bottom|end"
android:layout_margin="@dimen/fab_margin"
android:src="@drawable/ic_outline_add_24" />
</androidx.coordinatorlayout.widget.CoordinatorLayout>
@@ -25,8 +25,8 @@
android:id="@+id/layoutShareEntry"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:paddingHorizontal="30dp"
android:layout_marginTop="?attr/actionBarSize">
android:layout_marginTop="?attr/actionBarSize"
android:paddingHorizontal="30dp">
<TextView
android:id="@+id/tvDescription"
@@ -34,44 +34,44 @@
android:layout_height="wrap_content"
android:gravity="center"
android:text="@string/transfer_entry_description"
app:layout_constraintTop_toTopOf="parent"
app:layout_constraintBottom_toTopOf="@+id/ivQrCode"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintStart_toStartOf="parent" />
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toTopOf="parent" />
<com.google.android.material.imageview.ShapeableImageView
android:id="@+id/ivQrCode"
android:layout_width="0dp"
android:layout_height="0dp"
app:shapeAppearanceOverlay="@style/ShapeAppearanceOverlay.Aegis.ImageView.Rounded"
app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintDimensionRatio="1:1"
app:layout_constraintVertical_bias="0.3"
app:layout_constraintTop_toTopOf="parent"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintBottom_toBottomOf="parent" />
app:layout_constraintTop_toTopOf="parent"
app:layout_constraintVertical_bias="0.3"
app:shapeAppearanceOverlay="@style/ShapeAppearanceOverlay.Aegis.ImageView.Rounded" />
<TextView
android:id="@+id/tvIssuer"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginTop="20dp"
tools:text="Issuer"
android:textSize="18sp"
android:textStyle="bold"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toBottomOf="@+id/ivQrCode" />
app:layout_constraintTop_toBottomOf="@+id/ivQrCode"
tools:text="Issuer" />
<TextView
android:id="@+id/tvAccountName"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginTop="4dp"
tools:text="Accountname"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toBottomOf="@+id/tvIssuer" />
app:layout_constraintTop_toBottomOf="@+id/tvIssuer"
tools:text="Accountname" />
<Button
android:id="@+id/btnCopyClipboard"
@@ -80,17 +80,19 @@
android:text="@string/copy_uri"
android:textAllCaps="false"
android:visibility="invisible"
app:layout_constraintBottom_toTopOf="@id/tvEntriesCount"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintHorizontal_bias="0.497"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toBottomOf="@id/tvAccountName"
app:layout_constraintBottom_toTopOf="@id/tvEntriesCount" />
app:layout_constraintVertical_bias="0.134" />
<Button
android:id="@+id/btnNext"
style="@style/Widget.Material3.Button.TextButton"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginBottom="4dp"
style="@style/Widget.Material3.Button.TextButton"
android:text="@string/next"
android:textAllCaps="false"
app:layout_constraintBottom_toBottomOf="parent"
@@ -98,11 +100,11 @@
<Button
android:id="@+id/btnPrevious"
style="@style/Widget.Material3.Button.TextButton"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginEnd="4dp"
android:layout_marginBottom="4dp"
style="@style/Widget.Material3.Button.TextButton"
android:text="@string/previous"
android:textAllCaps="false"
android:visibility="invisible"
@@ -118,6 +120,16 @@
app:layout_constraintEnd_toEndOf="@+id/btnNext"
app:layout_constraintStart_toStartOf="@+id/btnPrevious" />
<TextView
android:id="@+id/textView3"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="@string/transfer_entry_brightness"
app:layout_constraintBottom_toTopOf="@+id/tvEntriesCount"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toBottomOf="@+id/btnCopyClipboard" />
</androidx.constraintlayout.widget.ConstraintLayout>
</androidx.coordinatorlayout.widget.CoordinatorLayout>
@@ -0,0 +1,151 @@
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout
xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:orientation="vertical"
android:padding="20dp">
<TextView
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:gravity="center"
android:paddingTop="16dp"
android:text="@string/dialog_duplicate_entry_title"
android:textSize="20sp" />
<TextView
android:id="@+id/duplicate_warning_text"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:text="@string/dialog_duplicate_entry_message"
android:textSize="16sp"
android:textColor="?android:attr/textColorPrimary"
android:paddingTop="10dp"
android:paddingBottom="20dp" />
<LinearLayout
android:id="@+id/overwrite_entry"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:orientation="horizontal"
android:paddingVertical="15dp"
android:paddingHorizontal="10dp"
android:background="?android:attr/selectableItemBackground"
android:clickable="true"
android:focusable="true">
<ImageView
android:layout_width="24dp"
android:layout_height="24dp"
android:layout_gravity="center_vertical"
android:src="@drawable/ic_outline_brush_24"
app:tint="?attr/colorOnSurfaceVariant" />
<LinearLayout
android:layout_width="0dp"
android:layout_height="wrap_content"
android:layout_weight="1"
android:orientation="vertical"
android:layout_marginStart="16dp">
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="@string/dialog_duplicate_entry_overwrite_title"
android:textSize="17sp"
android:textStyle="bold" />
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="@string/dialog_duplicate_entry_overwrite_subtitle"
android:textSize="14sp"
android:textColor="?attr/colorOnSurfaceVariant" />
</LinearLayout>
</LinearLayout>
<LinearLayout
android:id="@+id/create_new_entry"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:orientation="horizontal"
android:paddingVertical="15dp"
android:paddingHorizontal="10dp"
android:background="?android:attr/selectableItemBackground"
android:clickable="true"
android:focusable="true">
<ImageView
android:layout_width="24dp"
android:layout_height="24dp"
android:layout_gravity="center_vertical"
android:src="@drawable/ic_tag_24"
app:tint="?attr/colorOnSurfaceVariant" />
<LinearLayout
android:layout_width="0dp"
android:layout_height="wrap_content"
android:layout_weight="1"
android:orientation="vertical"
android:layout_marginStart="16dp">
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="@string/dialog_duplicate_entry_suffix_title"
android:textSize="17sp"
android:textStyle="bold" />
<TextView
android:id="@+id/duplicate_suffix_subtitle"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="@string/dialog_duplicate_entry_suffix_subtitle"
android:textSize="14sp"
android:textColor="?attr/colorOnSurfaceVariant" />
</LinearLayout>
</LinearLayout>
<LinearLayout
android:id="@+id/cancel_save"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:orientation="horizontal"
android:paddingVertical="15dp"
android:paddingHorizontal="10dp"
android:background="?android:attr/selectableItemBackground"
android:clickable="true"
android:focusable="true">
<ImageView
android:layout_width="24dp"
android:layout_height="24dp"
android:layout_gravity="center_vertical"
android:src="@drawable/ic_outline_close_24"
app:tint="?attr/colorOnSurfaceVariant" />
<LinearLayout
android:layout_width="0dp"
android:layout_height="wrap_content"
android:layout_weight="1"
android:orientation="vertical"
android:layout_marginStart="16dp">
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="@string/dialog_duplicate_entry_cancel_title"
android:textSize="17sp"
android:textStyle="bold" />
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="@string/dialog_duplicate_entry_cancel_subtitle"
android:textSize="14sp"
android:textColor="?attr/colorOnSurfaceVariant" />
</LinearLayout>
</LinearLayout>
</LinearLayout>
+141
View File
@@ -0,0 +1,141 @@
<?xml version="1.0" encoding="utf-8"?>
<androidx.coordinatorlayout.widget.CoordinatorLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:fitsSystemWindows="true"
android:clipChildren="false"
android:clipToPadding="false">
<LinearLayout
android:id="@+id/fab_menu_items_container"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_gravity="bottom|end"
android:layout_marginHorizontal="@dimen/fab_margin"
android:layout_marginBottom="75dp"
android:clipChildren="false"
android:clipToPadding="false"
android:orientation="vertical"
android:visibility="gone">
<com.google.android.material.card.MaterialCardView
android:id="@+id/fab_menu_item_scan"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_gravity="end"
android:layout_marginBottom="6dp"
app:cardCornerRadius="100dp"
app:cardElevation="6dp"
app:contentPadding="6dp"
app:strokeWidth="0dp">
<LinearLayout
android:layout_width="wrap_content"
android:layout_height="48dp"
android:gravity="center_vertical"
android:orientation="horizontal"
android:paddingHorizontal="16dp">
<ImageView
android:layout_width="@dimen/fab_menu_item_image_size"
android:layout_height="@dimen/fab_menu_item_image_size"
android:src="@drawable/ic_qrcode_scan" />
<Space
android:layout_width="12dp"
android:layout_height="0dp" />
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="@string/scan"
android:textAppearance="?attr/textAppearanceLargePopupMenu" />
</LinearLayout>
</com.google.android.material.card.MaterialCardView>
<com.google.android.material.card.MaterialCardView
android:id="@+id/fab_menu_item_scan_image"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_gravity="end"
android:layout_marginBottom="6dp"
app:cardCornerRadius="100dp"
app:cardElevation="6dp"
app:contentPadding="6dp"
app:strokeWidth="0dp">
<LinearLayout
android:layout_width="wrap_content"
android:layout_height="48dp"
android:gravity="center_vertical"
android:orientation="horizontal"
android:paddingHorizontal="16dp">
<ImageView
android:layout_width="@dimen/fab_menu_item_image_size"
android:layout_height="@dimen/fab_menu_item_image_size"
android:src="@drawable/ic_outline_add_photo_alternate_24" />
<Space
android:layout_width="12dp"
android:layout_height="0dp" />
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="@string/scan_image"
android:textAppearance="?attr/textAppearanceLargePopupMenu" />
</LinearLayout>
</com.google.android.material.card.MaterialCardView>
<com.google.android.material.card.MaterialCardView
android:id="@+id/fab_menu_item_enter"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_gravity="end"
android:layout_marginBottom="6dp"
app:cardCornerRadius="100dp"
app:cardElevation="6dp"
app:contentPadding="6dp"
app:strokeWidth="0dp">
<LinearLayout
android:layout_width="wrap_content"
android:layout_height="48dp"
android:gravity="center_vertical"
android:orientation="horizontal"
android:paddingHorizontal="16dp">
<ImageView
android:layout_width="@dimen/fab_menu_item_image_size"
android:layout_height="@dimen/fab_menu_item_image_size"
android:src="@drawable/ic_outline_edit_24" />
<Space
android:layout_width="12dp"
android:layout_height="0dp" />
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="@string/enter_manually"
android:textAppearance="?attr/textAppearanceLargePopupMenu" />
</LinearLayout>
</com.google.android.material.card.MaterialCardView>
</LinearLayout>
<com.google.android.material.floatingactionbutton.FloatingActionButton
android:id="@+id/fab"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_gravity="bottom|end"
android:layout_margin="@dimen/fab_margin"
android:contentDescription="@string/add_new_entry"
android:src="@drawable/ic_outline_add_24" />
</androidx.coordinatorlayout.widget.CoordinatorLayout>
@@ -51,6 +51,7 @@
android:layout_height="match_parent"
android:scrollbars="vertical"
android:scrollbarStyle="outsideOverlay"
android:clipToPadding="false"
app:layout_behavior="com.google.android.material.appbar.AppBarLayout$ScrollingViewBehavior" />
</androidx.coordinatorlayout.widget.CoordinatorLayout>
@@ -20,6 +20,7 @@
android:paddingHorizontal="8dp"
android:scrollbars="vertical"
android:scrollbarStyle="outsideOverlay"
android:clipToPadding="false"
android:id="@+id/rvKeyProfiles"
android:layout_weight="1"/>
+16
View File
@@ -0,0 +1,16 @@
<?xml version="1.0" encoding="utf-8"?>
<androidx.coordinatorlayout.widget.CoordinatorLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent">
<View
android:id="@+id/scrim"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:background="#000000"
android:alpha="0"
android:clickable="true"
android:focusable="true"
android:visibility="gone" />
</androidx.coordinatorlayout.widget.CoordinatorLayout>
File diff suppressed because it is too large Load Diff
@@ -0,0 +1,5 @@
<?xml version="1.0" encoding="utf-8"?>
<resources>
<string name="system_theme_title">الإفتراضي للنظام</string>
<string name="system_amoled_theme_title">افتراضي النظام (أموليد AMOLED)</string>
</resources>
+248 -187
View File
@@ -26,16 +26,16 @@
<string name="pref_section_appearance_title">المظهر</string>
<string name="pref_section_appearance_summary">اضبط السِمة واللغة والإعدادات الأخرى التي تؤثر على مظهر التطبيق.</string>
<string name="pref_section_security_title">الحماية</string>
<string name="pref_section_security_summary">اضبط التشفير، وفك القفل البيومتري، والقفل التلقائي وإعدادات الأمان الأخرى.</string>
<string name="pref_section_import_export_title">استيراد &amp; تصدير</string>
<string name="pref_section_import_export_summary">استيراد النسخ الاحتياطية من Aegis أو من تطبيقات مصادقة أخرى. إنشاء تصدير يدوي لمخزن Aegis.</string>
<string name="pref_section_security_summary">اضبط التعمية، وفك القفل المقاييس الحيوية، والقفل التلقائي وإعدادات الأمان الأخرى.</string>
<string name="pref_section_import_export_title">الاستيراد والتصدير</string>
<string name="pref_section_import_export_summary">استورد النسخ الاحتياطية من Aegis أو من تطبيقات استيثاق أخرى. أنشئ تصدير يدوي لمخزن Aegis.</string>
<string name="pref_section_audit_log_title">سجل المراجعة</string>
<string name="pref_section_audit_log_summary">العثور على قائمة بجميع الأحداث الهامة المبلغ عنها التي حدثت داخل التطبيق.</string>
<string name="pref_section_backups_title">نُسخ احتياطية</string>
<string name="pref_section_backups_summary">أنشئ نسخ احتياطية تلقائية إلى موقع من اختيارك أو فَعِّل المشاركة في نظام النسخ الاحتياطي السحابي للأندرويد.</string>
<string name="pref_section_icon_packs">حزم الأيقونات</string>
<string name="pref_section_icon_packs_summary">أدِر واستورد حزم الأيقونات</string>
<string name="pref_select_theme_title">سِمة</string>
<string name="pref_select_theme_title">السمة</string>
<string name="pref_dynamic_colors_title">ألوان ديناميكية</string>
<string name="pref_dynamic_colors_summary">قم بتطبيق تراكب يعتمد على ألوان سمة الأندرويد الخاصة بك</string>
<string name="pref_view_mode_title">نمط العرض</string>
@@ -44,24 +44,36 @@
<string name="pref_show_icons_summary">اعرض الأيقونات بجانب كل مدخل</string>
<string name="pref_code_group_size_title">تجميع أرقام الرمز</string>
<string name="pref_code_group_size_summary">حدد عدد الأرقام لتجميع الرموز حسبها</string>
<string name="pref_account_name_position_title">اضهِر اسم الحساب</string>
<string name="pref_show_next_code_title">أظهِر الرمز التالي</string>
<string name="pref_shared_issuer_account_name_title">اضهِر اسم الحساب فقط عند الضرورة</string>
<string name="pref_shared_issuer_account_name_summary">أضهِر أسماء الحسابات فقط عندما يشتركون نفس المصدر. سيتم إخفاء أسماء الحسابات الأخرى.</string>
<string name="pref_import_file_title">استيراد من ملف</string>
<string name="pref_import_file_summary">استيراد الرموز من ملف</string>
<string name="pref_android_backups_title">النسخ الاحتياطية السحابية للأندرويد</string>
<string name="pref_android_backups_summary">السماح لنظام النسخ الاحتياطي لأندرويد بإدراج خزانة Aegis في النسخ الاحتياطية الخاصة به. هذا مدعوم فقط للمخازن المشفرة.</string>
<string name="pref_account_name_position_title">أظهر اسم الحساب</string>
<string name="pref_show_next_code_title">أظهر الرمز التالي</string>
<string name="pref_show_next_code_summary">ولّد وأظهر الرمز التالي قبل الوقت</string>
<string name="pref_expiration_state_title">أشر متى تكون الرموز على وشك الانتهاء</string>
<string name="pref_expiration_state_summary">غيّر لون الرموز البرمجية وجعلها غير واضحة عندما تكون على وشك الانتهاء</string>
<string name="pref_expiration_state_fallback">غيّر لون الرموز عندما تكون على وشك الانتهاء</string>
<string name="pref_shared_issuer_account_name_title">أظهر اسم الحساب فقط عند الضرورة</string>
<string name="pref_shared_issuer_account_name_summary">أظهر أسماء الحسابات فقط عندما يشتركون نفس المصدر. سيتم إخفاء أسماء الحسابات الأخرى.</string>
<string name="pref_account_name_position_summary_override">تم تجاوز هذا الإعداد بوضع عرض المربعات. سيتم عرض اسم الحساب أسفل المُصدّر.</string>
<string name="pref_import_file_title">استورد من ملف</string>
<string name="pref_import_file_summary">استورد الرموز من ملف</string>
<string name="pref_android_backups_title">النُسخ الاحتياطية السحابية للأندرويد</string>
<string name="pref_android_backups_summary">اسمح لنظام النسخ الاحتياطي لأندرويد بإدراج خزانة Aegis في النُسخ الاحتياطية الخاصة به. هذا مدعوم فقط للمخازن المُعمَّاة.</string>
<string name="pref_android_backups_hint"><i>النسخ الاحتياطي من جهاز لجهاز (D2D) مسموح به دائماً، بغض النظر عن الخَيار أعلاه</i></string>
<string name="pref_backups_title">نسخ تلقائي للخزينة</string>
<string name="pref_backups_summary">قم تلقائيًا بعمل نسخ احتياطية للمخزن على الذاكرة الخارجية عند إجراء تغييرات هذا مدعوم للمخازن المشفرة فقط</string>
<string name="pref_backups_title">انسخ تلقائيًا الخزينة</string>
<string name="pref_backups_summary">أنشئ تلقائيًا نُسخ احتياطية للمخزن على الذاكرة الخارجية عند إجراء تغييرات هذا مدعوم للمخازن المُعمَّاة فقط.</string>
<string name="pref_backups_reminder_title">تذكير النسخ الاحتياطية</string>
<string name="pref_backups_reminder_summary">أظهر تذكيرًا للاحتفاظ بنسخة احتياطية من مخزنك في حالة عدم إجراء نسخ احتياطي لآخر تغييراتك.</string>
<string name="pref_backups_reminder_dialog_title">تعطيل تذكير النسخ الاحتياطي</string>
<string name="pref_backups_reminder_dialog_summary">يعني تعطيل هذا التذكير أن Aegis لن يخبرك بما إذا كان لديك تغييرات لم يتم نسخها احتياطيًا حتى الآن أم لا. هذا يعرضك لخطر فقدان الوصول إلى الرموز الخاصة بك. هل أنت متأكد أنك تريد تعطيل التذكير؟</string>
<string name="pref_backups_reminder_dialog_title">عطِّل تذكير النسخ الاحتياطي</string>
<string name="pref_backups_reminder_dialog_summary">يعني تعطيل هذا التذكير أن Aegis لن يخبرك بما إذا كان لديك تغييرات لم يتم نسخها احتياطيًا حتى الآن أم لا. هذا يعرضك لخطر فقدان الوصول إلى رموزك. هل أنت متأكد أنك تريد تعطيل التذكير؟</string>
<string name="pref_backups_versioning_strategy_title">استراتيجية النسخ الاحتياطي</string>
<string name="pref_backups_versioning_strategy_keep_x_versions">احتفظ بعدد من الإصدارات</string>
<string name="pref_backups_versioning_strategy_single_backup">نُسخة احتياطية واحدة</string>
<string name="pref_backups_versioning_strategy_single_backup_warning">استراتيجية النسخ الاحتياطي المحددة غير موثوقة ولا يُنصح بها. فشل احتياطي واحد يمكن أن يؤدي إلى فقدان النسخة الاحتياطية الوحيدة.</string>
<string name="pref_backups_versioning_strategy_dialog_title">حدد استراتيجية النسخ الاحتياطي</string>
<string name="pref_backups_location_title">موقع النسخة الاحتياطية</string>
<string name="pref_backups_location_summary">سيتم تخزين النسخ الاحتياطية في</string>
<string name="pref_backup_location_summary">سيتم تخزين النسخ الاحتياطي في</string>
<string name="pref_backups_trigger_title">اصنع نسخة احتياطية</string>
<string name="pref_backups_trigger_summary">قم بعمل نسخة احتياطية يدويًّا</string>
<string name="pref_backups_trigger_summary">اصنع نسخة احتياطية يدويًّا</string>
<string name="pref_backups_versions_title">عدد الإصدارات المراد الاحتفاظ بها</string>
<string name="pref_backups_versions_infinite">\u221E</string>
<plurals name="pref_backups_versions_summary">
@@ -72,14 +84,14 @@
<item quantity="many">احتفظ ب%1$d إصدارات من النسخ الاحتياطية</item>
<item quantity="other">احتفظ ب%1$d إصدارات من النسخ الاحتياطية</item>
</plurals>
<string name="pref_backups_versions_infinite_summary">الاحتفاظ بعدد غير محدود من النُسخ الاحتياطية</string>
<string name="pref_import_app_title">استيراد من تطبيق</string>
<string name="pref_import_app_summary">استيراد الرموز من تطبيق (يتطلب الوصول إلى الجذر root)</string>
<string name="pref_export_title">تصدير</string>
<string name="pref_export_summary">قم بتصدير المخزن</string>
<string name="pref_backups_versions_infinite_summary">احتفظ بعدد غير محدود من النُسخ الاحتياطية</string>
<string name="pref_import_app_title">استورد من تطبيق</string>
<string name="pref_import_app_summary">استورد رموزك من تطبيق (يتطلب الوصول إلى الجذر root)</string>
<string name="pref_export_title">صدِّر</string>
<string name="pref_export_summary">صدِّر المخزن</string>
<string name="pref_password_reminder_title">تذكير كلمة المرور</string>
<string name="pref_google_auth_export_title">تصدير إلى Google Authenticator</string>
<string name="pref_google_auth_export_descriptor">يولد تصدير رموز QR متوافقة مع Google Authenticator</string>
<string name="pref_google_auth_export_title">صدِّر إلى Google Authenticator</string>
<string name="pref_google_auth_export_descriptor">يولّد تصدير رموز QR متوافقة مع Google Authenticator</string>
<string name="pref_google_auth_export_no_data">لا توجد بيانات للتصدير</string>
<plurals name="pref_google_auth_export_incompatible_entries">
<item quantity="zero">تم تجاوز %d مدخل غير متوافق</item>
@@ -92,63 +104,65 @@
<string name="pref_password_reminder_summary">أظهر %s تذكيرًا لإدخال كلمة المرور، حتى لا تنساها.</string>
<string name="pref_password_reminder_summary_disabled">معطَّل</string>
<string name="pref_secure_screen_title">أمان الشاشة</string>
<string name="pref_secure_screen_summary">حظر صور الشاشة والمحاولات الأخرى لالتقاط شاشة التطبيق</string>
<string name="pref_secure_screen_summary">احظر لقطات الشاشة والمحاولات الأخرى لالتقاط شاشة التطبيق</string>
<string name="pref_tap_to_reveal_title">انقر للكشف</string>
<string name="pref_tap_to_reveal_summary">سيتم اخفاء الرموز افتراضيًا. انقر على الرموز لكشف الكود.</string>
<string name="pref_tap_to_reveal_time_title">مهلة النقر للكشف</string>
<string name="pref_auto_lock_title">القفل التلقائي</string>
<string name="pref_auto_lock_summary">متى %s</string>
<string name="pref_auto_lock_summary_disabled">معطَّل</string>
<string name="pref_auto_lock_prompt">قفل Aegis تلقائيًا عند</string>
<string name="pref_auto_lock_prompt">اقفل Aegis تلقائيًا عند</string>
<string name="pref_auto_lock_type_back_button">ضغط زر الرجوع</string>
<string name="pref_auto_lock_type_minimize">تصغير التطبيق</string>
<string name="pref_auto_lock_type_device_lock">قفل الجهاز</string>
<string name="pref_backup_password_category">النسخ الاحتياطي والتصدير</string>
<string name="pref_backup_password_title">كلمة مرور منفصلة للتصدير &amp; الاحتياطي</string>
<string name="pref_backup_password_summary">في حالة التفعيل فإن كلمة المرور المستخدمة لفتح قفل التطبيق لن يمكن استخدامها لفك تشفير النسخ الاحتياطية و التصديرات بعد الآن.</string>
<string name="pref_backup_password_change_title">تغيير كلمة المرور للنسخ الاحتياطي و التصديرات</string>
<string name="pref_backup_password_change_summary">تعيين كلمة مرور جديدة لتشفير المخزن خلال النسخ الاحتياطي والتصدير.</string>
<string name="pref_encryption_title">التشفير</string>
<string name="pref_encryption_summary">قم بتشفير المخزن وفك قفله بكملة مرور أو مصادقة بيومترية</string>
<string name="pref_biometrics_title">الفتح البيومتري</string>
<string name="pref_biometrics_summary">السماح بالمصادقة البيومترية لفتح قفل المخزن</string>
<string name="pref_backup_password_title">كلمة مرور منفصلة للنسخ الاحتياطي والتصدير</string>
<string name="pref_backup_password_summary">في حالة التمكين فإن كلمة المرور المستخدمة لفتح قفل التطبيق لن يمكن استخدامها لفك تعمية النُسخ الاحتياطية و التصديرات بعد الآن.</string>
<string name="pref_backup_password_change_title">غيّر كلمة المرور للنسخ الاحتياطي والتصديرات</string>
<string name="pref_backup_password_change_summary">عيّن كلمة مرور جديدة لتعمية المخزن خلال النسخ الاحتياطي والتصدير.</string>
<string name="pref_encryption_title">التعمية</string>
<string name="pref_encryption_summary">عمِّ المخزن وفك قفله بكملة مرور أو استيثاق المقاييس الحيوية</string>
<string name="pref_biometrics_title">فتح المقاييس الحيوية</string>
<string name="pref_biometrics_summary">اسمح بالاستيثاق المقاييس الحيوية لفتح قفل المخزن</string>
<string name="pref_search_behavior_summary">البحث من خلال: %s</string>
<string name="pref_search_behavior_prompt">البحث في أي من الحقول التالية</string>
<string name="pref_search_behavior_type_name">الاسم</string>
<string name="pref_search_behavior_type_issuer">المصدِّر</string>
<string name="pref_search_behavior_type_note">ملاحظة</string>
<string name="pref_search_behavior_type_groups">المجموعات</string>
<string name="pref_set_password_title">تغيير كلمة المرور</string>
<string name="pref_set_password_summary">تعيين كلمة مرور جديدة، ستحتاجها لفتح قفل المخزن</string>
<string name="pref_set_password_title">غيّر كلمة المرور</string>
<string name="pref_set_password_summary">عيّن كلمة مرور جديدة، ستحتاجها لفتح قفل المخزن</string>
<string name="no_events_title">لا توجد أحداث مبلّغ عنها</string>
<string name="no_events_description">لم يتم الإبلاغ عن أي أحداث مهمة داخل التطبيق</string>
<string name="event_title_vault_unlocked">المخزن غير مقفل</string>
<string name="event_description_vault_unlocked">تم إلغاء قفل المخزن بنجاح</string>
<string name="event_description_vault_unlocked">فُتح قفل المخزن بنجاح</string>
<string name="event_title_backup_created">أُنشئت نُسخة أحتياطية</string>
<string name="event_description_backup_created">أُنشئت نُسخة احتياطية من المخزن بنجاح</string>
<string name="event_title_android_backup_created">أُنشئت نُسخة احتياطية بواسطة أندرويد</string>
<string name="event_description_android_backup_created">أُنشئت نُسخة احتياطية من المخزن بنجاح من قِبل أندرويد</string>
<string name="event_title_vault_exported">تم تصدير المخزن</string>
<string name="event_description_vault_exported">تم تصدير نسخة من المخزن</string>
<string name="event_title_entry_shared">الإدخال المشترك</string>
<string name="event_title_vault_exported">صُدِّر المخزن</string>
<string name="event_description_vault_exported">صُدِّر نُسخة من المخزن</string>
<string name="event_title_entry_shared">الإدخال المُشارك</string>
<string name="event_description_entry_shared">تم مشاركة مدخل</string>
<string name="event_title_vault_unlock_failed_password">فشل فتح القفل (كلمة المرور)</string>
<string name="event_description_vault_unlock_failed_password">فشلت محاولة لفتح المخزن بكلمة مرور</string>
<string name="event_title_vault_unlock_failed_biometrics">فشل فتح القفل (القياسات الحيوية)</string>
<string name="event_description_vault_unlock_failed_biometrics">فشلت محاولة لفتح المخزن باستخدام القياسات الحيوية</string>
<string name="event_title_vault_unlock_failed_biometrics">فشل فتح القفل (المقاييس الحيوية)</string>
<string name="event_description_vault_unlock_failed_biometrics">فشلت محاولة لفتح المخزن باستخدام المقاييس الحيوية</string>
<string name="event_unknown">نوع الحدث غير معروف</string>
<string name="audit_log_entry_deleted">(محذوف)</string>
<string name="today_at_time">اليوم على %1$s</string>
<string name="day_of_week_at_time">%1$s في %2$s</string>
<string name="export_encrypted">تشفير المخزن</string>
<string name="export_help">هذا الإجراء سيصدر المخزن خارج ذاكرة تخزين Aegis الداخلية. حدد الصيغة التي ترغب بأن يكون التصدير عليها:</string>
<string name="export_warning_unencrypted">أنت على وشك تصدير نسخة غير مشفرة من مخزن Aegis. <b>لا يُنصح بهذا</b>.</string>
<string name="export_warning_password">يتم تشفير عمليات التصدير باستخدام كلمة مرور منفصلة مكوّنة في إعدادات الأمان.</string>
<string name="export_encrypted">عمِّ المخزن</string>
<string name="export_help">هذا الإجراء سيصدِّر المخزن خارج ذاكرة تخزين Aegis الداخلية. حدد الصيغة التي ترغب بأن يكون التصدير عليها:</string>
<string name="export_warning_unencrypted">أنت على وشك تصدير نسخة غير مُعمّى من مخزن Aegis. <b>لا يُنصح بهذا</b>.</string>
<string name="export_warning_password">يتم تعمية عمليات التصدير باستخدام كلمة مرور منفصلة مضبطة في إعدادات اﻷمن.</string>
<string name="understand_risk_accept">أنا أفهم المخاطر</string>
<string name="export_format_aegis">Aegis (.JSON)</string>
<string name="export_format_google_auth_uri">ملف نصي (.TXT)</string>
<string name="export_format_html">صفحة ويب (.HTML)</string>
<string name="export_format_hint">تصدير الصيغة</string>
<string name="export_all_groups">تصدير جميع المجموعات</string>
<string name="export_choose_groups">حدد المجموعات التي سيتم تصديرها</string>
<string name="export_format_hint">صدِّر الصيغة</string>
<string name="export_all_groups">صدِّر جميع المجموعات</string>
<string name="export_choose_groups">حدد المجموعات التي ستُصدِّر</string>
<plurals name="export_groups_selected_count">
<item quantity="zero">المجموعة المحددة صفر</item>
<item quantity="one">%d مجموعة حُددت</item>
@@ -158,36 +172,36 @@
<item quantity="other">%d مجموعة حُددت</item>
</plurals>
<string name="export_no_groups_selected">لم يُحدد مجموعات للتصدير</string>
<string name="export_html_title" comment="The title of an HTML export document">Aegis تصدير أداة المصادقة</string>
<string name="choose_authentication_method">الأمان</string>
<string name="authentication_method_explanation">تطبيق Aegis هو تطبيق مصادقة يركز على الأمان. تخزّن الرموز في مخزن، يمكن تشفيره اختياريًا بكلمة مرور من اختيارك. إذا حصل مهاجم على ملف المخزن المشفر الخاص بك، فإنه لن يتمكن من الوصول إلى المحتوى بدون معرفة كلمة المرور.\n\nلقد حددنا مسبقًا الخيار الذي نعتقد أنه يناسب جهازك.</string>
<string name="export_html_title" comment="The title of an HTML export document">تصدير Aegis Authenticator</string>
<string name="choose_authentication_method">الأمن</string>
<string name="authentication_method_explanation">تطبيق Aegis هو تطبيق استيثاق يركز على الأمان. تُخزّن الرموز في مخزن، يمكن تعميتها اختياريًا بكلمة مرور من اختيارك. إذا حصل مهاجم على ملف المخزن المُعمّى الخاص بك، فإنه لن يتمكن من الوصول إلى المحتوى بدون معرفة كلمة المرور.\n\nلقد حددنا مسبقًا الخيار الذي نعتقد أنه يناسب جهازك.</string>
<string name="authentication_method_none">بلا</string>
<string name="authentication_method_none_description">لا حاجة لكلمة المرور لفك قفل المخزن، ولن يتم تشفيره. <b>لا ينصح بهذا الخيار</b>.</string>
<string name="authentication_method_none_description">لا حاجة لكلمة المرور لفك قفل المخزن، ولن يتم تعميته. <b>لا يُنصح بهذا الخيار</b>.</string>
<string name="authentication_method_password">كلمة المرور</string>
<string name="authentication_method_password_description">كلمة المرور مطلوبة لفك قفل المخزن.</string>
<string name="authentication_method_password_explanation">تحذير: إذا نسيت كلمة المرور، فلن تستطيع الوصول للرموز نهائيًا. لا توجد طريقة لاستعادتهم بدون كلمة المرور.</string>
<string name="authentication_method_biometrics">البيومترية</string>
<string name="authentication_method_biometrics_description">بالإضافة إلى كلمة المرور، يمكن استعمال البيومترية المسجلة على هذا الجهاز، مثل البصمة أو وجهك، لفك قفل المخزن</string>
<string name="authentication">افتح قفل لمخزن</string>
<string name="authentication_multiline" comment="The newline in the middle is used for aesthetic purposes">افتح قفل\nالمخزن</string>
<string name="auth_use_biometrics">أو انقر هنا لاستعمال <font fgcolor="#FF0D86C1">البيومترية</font></string>
<string name="authentication_method_password_explanation">تحذير: إذا نسيت كلمة المرور، فلن تستطيع الوصول الرموز نهائيًا. لا توجد طريقة لاستعادتهم بدون كلمة المرور.</string>
<string name="authentication_method_biometrics">المقاييس الحيوية</string>
<string name="authentication_method_biometrics_description">بالإضافة إلى كلمة المرور، يمكن استعمال المقاييس الحيوية المسجلة على هذا الجهاز، مثل البصمة أو وجهك، لفك قفل المخزن.</string>
<string name="authentication">افتح المخزن</string>
<string name="authentication_multiline" comment="The newline in the middle is used for aesthetic purposes">افتح \nالمخزن</string>
<string name="auth_use_biometrics">أو انقر هنا لاستعمال <font fgcolor="#FF0D86C1">المقاييس الحيوية</font></string>
<string name="set_password">الرجاء إدخال كلمة المرور</string>
<string name="set_group">الرجاء إدخال اسم المجموعة</string>
<string name="set_number">الرجاء إدخال رقم</string>
<string name="set_password_confirm">الرجاء تأكيد كلمة المرور</string>
<string name="invalid_password">كلمة المرور غير صحيحة</string>
<string name="invalidated_biometrics">تم كشف تغيير في إعدادات أمان جهازك. الرجاء الذَّهاب إلى \"Aegis -&gt; الإعدادات -&gt; الأمن -&gt; الفتح البيومتري\" لتعطيل وإعادة التمكين الفتح البيومتري.</string>
<string name="invalidated_biometrics">اكتُشف تغيير في إعدادات أمان جهازك. الرجاء الذهاب إلى \"Aegis -&gt; الإعدادات -&gt; الأمن -&gt; الفتح بالمقاييس الحيوية\" لتعطيل وإعادة التمكين الفتح بالمقاييس الحيوية.</string>
<string name="password_reminder">من فضلك أدخل كلمة المرور. نطلب منك أحيانًا القيام بذلك حتى لا تنساه.</string>
<string name="password_reminder_dialog_title">فتح بيومتري بشكل افتراضي</string>
<string name="password_reminder_dialog_message">نطلب منك أحيانًا إدخال كلمة مرورك بدلاً من ذلك للتأكد من أنك لم تنساها ولن يتم قفله من المخزن الخاص بك. بعد إدخال كلمة المرور مرة واحدة، سيعود Aegis افتراضيًا إلى إلغاء القُفْل الببيومتري حتى يحين وقت تذكير آخر بكلمة المرور.</string>
<string name="password_reminder_dialog_title">افتح المقاييس الحيوية افتراضيًا</string>
<string name="password_reminder_dialog_message">نطلب منك أحيانًا إدخال كلمة مرورك بدلاً من ذلك للتأكد من أنك لم تنساها ولن يتم قفله من المخزن الخاص بك. بعد إدخال كلمة المرور مرة واحدة، سيعود Aegis افتراضيًا إلى فتح المقاييس الحيوية حتى يحين وقت تذكير آخر بكلمة المرور.</string>
<string name="password_reminder_freq_never">أبدًا</string>
<string name="password_reminder_freq_weekly">أسبوعيًا</string>
<string name="password_reminder_freq_biweekly">كل أسبوعين</string>
<string name="password_reminder_freq_monthly">شهرياً</string>
<string name="password_reminder_freq_monthly">شهريًا</string>
<string name="password_reminder_freq_quarterly">كل ثلاثة أشهر</string>
<string name="enter_password_2fas_message">يبدو أن نسخة 2FAS الاحتياطية مشفرة، الرجاء إدخال كلمة المرور أدناه.</string>
<string name="enter_password_authy_message">يبدو أن رموز Authy الخاصة بك مشفرة. الرجاء إغلاق Aegis، وفتح Authy وفتح قفل الرموز بكلمة مرورك. بدلًا من ذلك، Aegis يمكنه أيضًا محاولة فك تشفير رموز Authy الخاصة بك، إذا قمت بإدخال كلمة مرورك أدناه.</string>
<string name="enter_password_aegis_title">يرجى إدخال كلمة المرور الخاصة بالاسترجاع</string>
<string name="enter_password_2fas_message">يبدو أن نسخة 2FAS الاحتياطية مُعمَّاة، الرجاء إدخال كلمة المرور أدناه.</string>
<string name="enter_password_authy_message">يبدو أن رموز Authy الخاصة بك مُعمَّاة. الرجاء إغلاق Aegis، وفتح Authy وفتح قفل الرموز بكلمة مرورك. بدلًا من ذلك، Aegis يمكنه أيضًا محاولة فك تعمية رموز Authy الخاصة بك، إذا أدخلت كلمة مرورك أدناه.</string>
<string name="enter_password_aegis_title">الرجاء إدخال كلمة مرور الاستيراد</string>
<string name="period_hint">الفترة (بالثواني)</string>
<string name="algorithm_hint">دالات/وظائف التجزئة (Hash Functions)</string>
<string name="type">النوع</string>
@@ -200,48 +214,50 @@
<string name="counter">العداد</string>
<string name="digits">الأرقام</string>
<string name="secret">السر</string>
<string name="scan">امسح كود QR</string>
<string name="scan">امسح رمز QR</string>
<string name="scan_image">امسح الصورة</string>
<string name="enter_manually">أدخل يدويًا</string>
<string name="set_up_biometric">تعيين الفتح البيومتري</string>
<string name="copy">نسخ</string>
<string name="edit">تعديل</string>
<string name="set_up_biometric">عيّن الفتح المقاييس الحيوية</string>
<string name="copy">انسخ</string>
<string name="edit">عدّل</string>
<string name="select_all">حدد الكل</string>
<string name="assign_icons">تعيين أيقونات</string>
<string name="assign_groups">تعيين للمجموعة</string>
<string name="assign_icons">عيّن أيقونات</string>
<string name="assign_groups">عيّن لمجموعة</string>
<string name="assign_groups_dialog_summary">حدد مجموعة ترغب في تعيين المواد المختارة إليها.</string>
<string name="assign_groups_dialog_dropdown">حدد المجموعة</string>
<string name="favorite" comment="Verb">أضِف للمفضلة</string>
<string name="unfavorite" comment="Verb">أزِل من المفضلة</string>
<string name="error_all_caps">خطأ</string>
<string name="password">كلمة المرور</string>
<string name="confirm_password">تأكيد كلمة المرور</string>
<string name="show_password">عرض كلمة المرور</string>
<string name="confirm_password">أكّد كلمة المرور</string>
<string name="show_password">أظهر كلمة المرور</string>
<string name="new_entry">مدخل جديد</string>
<string name="add_new_entry">أضف مدخلات جديدة</string>
<string name="unlock_vault_error">لم نتمكن من فتح قفل المخزن</string>
<string name="unlock_vault_error_description">كلمة المرور خاطئة. تأكد من أنك لم تخطئ كتابة كلمة المرور</string>
<string name="password_equality_error">كلمات المرور يجب أن تكون متطابقة وغير فارغة</string>
<string name="snackbar_authentication_method">الرجاء تحديد طريقة مصادقة</string>
<string name="encrypting_vault">يتم تشفير المخزن</string>
<string name="exporting_vault">يجري تصدير المخزن</string>
<string name="snackbar_authentication_method">الرجاء تحديد طريقة الاستيثاق</string>
<string name="encrypting_vault">جارِ تعمية المخزن</string>
<string name="exporting_vault">جارِ تصدير المخزن</string>
<string name="optimizing_icon">تحسين الأيقونة</string>
<string name="optimizing_icon_multiple">تحسين الأيقونات %1$d/%2$d</string>
<string name="reading_file">قراءة الملف</string>
<string name="requesting_root_access">طلب صلاحية الجذر</string>
<string name="analyzing_qr">تحليل رمز QR</string>
<string name="requesting_root_access">جارِ طلب صلاحية الجذر</string>
<string name="analyzing_qr">جارِ تحليل رمز QR</string>
<string name="analyzing_qr_multiple">جارِ تحليل الرمز %1$d/%2$d (%3$s)</string>
<plurals name="added_new_entries">
<item quantity="zero">تم إضافة %d مدخل جديد إلى المخزن</item>
<item quantity="one">تم إضافة %d مدخل جديد إلى المخزن</item>
<item quantity="two">تم إضافة %d مدخلان جديدان إلى المخزن</item>
<item quantity="zero">أُضيف %d مدخل جديد إلى المخزن</item>
<item quantity="one">أُضيف %d مدخل جديد إلى المخزن</item>
<item quantity="two">أُضيف مدخلان جديدان إلى المخزن</item>
<item quantity="few">تم إضافة %d مدخلات جديدة إلى المخزن</item>
<item quantity="many">تم إضافة %d مدخلات جديدة إلى المخزن</item>
<item quantity="other">تم إضافة %d مدخل جديد إلى المخزن</item>
<item quantity="many">أُضيف %d مدخلات جديدة إلى المخزن</item>
<item quantity="other">أُضيف %d مدخل جديد إلى المخزن</item>
</plurals>
<string name="importing_icon_pack">جارِ استيراد حزمة الأيقونات</string>
<string name="delete_entry">حذف المدخلات</string>
<string name="delete_entry">احذف المدخلات</string>
<string name="delete_entry_description">هل ترغب حقًا في حذف هذا المدخل؟</string>
<string name="delete_entry_explanation">هذا الإجراء لا يعطل 2FA الخاص ب:\n<b>%s</b>\n\n لتجنب فقدان الوصول، تأكد أنك قد قما بتعطيل 2FA أو من أنك تملك طريقة بديلة لتوليد الرموز لهذه الخدمة.</string>
<string name="delete_entries">حذف المدخلات</string>
<string name="delete_entry_explanation">هذا الإجراء لا يعطل 2FA الخاص ب:\n<b>%s</b>\n\n لتجنب فقدان الوصول، تأكد من تعطيل الاستيثاق الثنائي (2FA) أو أن لديك طريقة بديلة لتوليد الرموز لهذه الخدمة.</string>
<string name="delete_entries">احذف المدخلات</string>
<plurals name="delete_entries_description">
<item quantity="zero">هل ترغب حقًا بحذف 0 مدخل؟</item>
<item quantity="one">هل ترغب حقًا بحذف مدخل %d؟</item>
@@ -251,40 +267,40 @@
<item quantity="other">هل ترغب حقًا في حذف %d مدخلات؟</item>
</plurals>
<string name="discard_changes">تجاهل التغييرات؟</string>
<string name="discard_changes_description">لم يتم حفظ تغييراتك</string>
<string name="discard_changes_description">لم تُحفظ تغييراتك</string>
<string name="saving_profile_error">حدث خطأ أثناء حفظ الملف الشخصي</string>
<string name="saving_assign_icons_error">خطأ في تعيين الأيقونات</string>
<string name="welcome">مرحبًا</string>
<string name="app_description">Aegis تطبيق مصادقة ثنائية مجاني، وآمن، ومفتوح المصدر</string>
<string name="setup_completed">اكتمل الإعداد</string>
<string name="setup_completed_description">تم إعداد Aegis وهو جاهز للعمل.</string>
<string name="setup_completed_description">أُعِد Aegis وهو جاهز للعمل.</string>
<string name="vault_not_found">لم يُعثر على مخزن، بدء الإعداد…</string>
<string name="copied">تم النسخ</string>
<string name="errors_copied">تم نسخ الخطأ للحافظة</string>
<string name="version_copied">تم نسخ الإصدار إلى الحافظة</string>
<string name="copied">نُسِخ</string>
<string name="errors_copied">نُسِخ الخطأ للحافظة</string>
<string name="version_copied">نُسِخ الإصدار إلى الحافظة</string>
<string name="error_required_field">يُرجى ملء الحقل</string>
<string name="error_occurred">حدث خطأ ما</string>
<string name="decryption_error">حدث خطأ أثناء محاولة فك قفل المخزن</string>
<string name="decryption_corrupt_error">حدث خطأ أثناء محاولة فك قفل المخزن. قد يكون ملف المخزن الخاص بك تالف.</string>
<string name="decryption_corrupt_error">حدث خطأ أثناء محاولة فك قفل المخزن. قد يكون ملف مخزنك تالف.</string>
<string name="saving_error">حدث خطأ أثناء محاولة حفظ المخزن</string>
<string name="vault_init_error">حدث خطأ أثناء محاولة تهيئة المخزن</string>
<string name="vault_load_error">حدث خطأ أثناء محاولة تحميل المخزن من الذاكرة</string>
<string name="biometric_decrypt_error">حدث خطأ أثناء محاولة فك تشفير المخزن بالمصادقة البيومترية. هذا يحدث فقط عادة إن تم تغيير إعدادات أمان جهازك. الرجاء فك قفل المخزن بكلمة مرورك وإعادة تعيين المصادقة البيومترية داخل إعدادات Aegis.</string>
<string name="biometric_init_error">حدث خطأ أثناء محاولة تحضير المصادقة البيومترية. هذا يحدث فقط عادة إن تم تغيير إعدادات أمان جهازك. الرجاء فك قفل المخزن بكلمة مرورك وإعادة تعيين المصادقة البيومترية داخل إعدادات Aegis.</string>
<string name="disable_encryption">تعطيل التشفير</string>
<string name="disable_encryption_description">&lt;/b&gt;</string>
<string name="enable_encryption_error">حدث خطأ أثناء تفعيل التشفير</string>
<string name="disable_encryption_error">حدث خطأ أثناء تعطيل التشفير</string>
<string name="biometric_decrypt_error">حدث خطأ أثناء محاولة فك تعمية المخزن بالاستيثاق المقاييس الحيوية. هذا يحدث عادةً فقط إن غُيّر إعدادات أمان جهازك. الرجاء فك قفل المخزن بكلمة مرورك وإعادة تعيين الاستيثاق المقاييس الحيوية داخل إعدادات Aegis.</string>
<string name="biometric_init_error">حدث خطأ أثناء محاولة تحضير الاستيثاق المقاييس الحيوية. هذا يحدث عادةً فقط إن غُيّر إعدادات أمان جهازك. الرجاء فك قفل المخزن بكلمة مرورك وإعادة تعيين الاستيثاق المقاييس الحيوية داخل إعدادات Aegis.</string>
<string name="disable_encryption">عطِّل التعمية</string>
<string name="disable_encryption_description">هل أنت متأكد من أنك تريد تعطيل التعمية؟ سيؤدي هذا إلى تخزين المخزن في نص عادي. <b>سيتم تعطيل النُسخ الاحتياطية التلقائية أيضًا</b>.</string>
<string name="enable_encryption_error">حدث خطأ أثناء تفعيل التعمية</string>
<string name="disable_encryption_error">حدث خطأ أثناء تعطيل التعمية</string>
<string name="backup_successful">تم جدولة النسخ الاحتياطي بنجاح</string>
<string name="backup_error">حدث خطأ أثناء محاولة عمل نسخة احتياطية</string>
<string name="backup_status_success">نجح أحدث نسخ احتياطي: %s</string>
<string name="backup_status_failed">فشل أحدث نسخ احتياطي: %s</string>
<string name="backup_status_none">لم يتم عمل نسخ احتياطي بعد</string>
<string name="backup_warning_password">النسخ الاحتياطية مشفرة باستعمال كلمة مرور منفصلة تم إعدادها في خيارات الأمان</string>
<string name="documentsui_error">يبدو أن الوثائق مفقودة من جهازك. هذا عنصر نظام مهم ضروري لاختيار الوثائق وإنشائها. إذا كنت تستخدم أداة ل &quot;debloat&quot; جهازك، ربما قمت بحذفها عن طريق الخطأ وسيتعين عليك إعادة تثبيتها.</string>
<string name="backup_warning_password">النُسخ الاحتياطية مُعمَّاة باستعمال كلمة مرور منفصلة ضُبطت في خيارات الأمن</string>
<string name="documentsui_error">يبدو أن الوثائق مفقودة من جهازك. هذا عنصر نظام مهم ضروري لاختيار الوثائق وإنشائها. إذا كنت تستخدم أداة ل &quot;debloat&quot; جهازك، ربما حذفتها عن طريق الخطأ وسيتعين عليك إعادة تثبيتها.</string>
<string name="icon_pack_import_error">حدث خطأ أثناء محاولة استيراد حزمة أيقونات</string>
<string name="icon_pack_import_exists_error">حزمة الأيقونات التي تحاول استيرادها موجودة بالفعل. هل تريد الكتابة فوقها؟</string>
<string name="icon_pack_delete_error">حدث خطأ أثناء محاولة قراءة كود QR</string>
<string name="icon_pack_delete_error">حدث خطأ أثناء محاولة حذف حزمة الأيقونات</string>
<plurals name="icon_pack_info">
<item quantity="zero">لا أيقونات</item>
<item quantity="one">أيقونة واحدة</item>
@@ -293,30 +309,30 @@
<item quantity="many">%d أيقونة</item>
<item quantity="other">%d أيقونة</item>
</plurals>
<string name="icon_custom">مخصص</string>
<string name="icon_custom">مخصّص</string>
<string name="permission_denied">طلب الاذن مرفوض</string>
<string name="andotp_new_format">الصيغة الجديدة (الإصدار v0.6.3 أو أحدث)</string>
<string name="andotp_old_format">الصيغة القديمة (الإصدار v0.6.2 أو أقدم)</string>
<string name="choose_andotp_importer">أي صيغة يحتويها ملف نسخة andOTP الاحتياطية؟</string>
<string name="choose_totpauth_importer">هل نسخة TOTP Authenticator الاحتياطية هذه مشفرة بكلمة مرور؟</string>
<string name="choose_totpauth_importer">هل نُسخة TOTP Authenticator الاحتياطية هذه مُعمَّاة بكلمة مرور؟</string>
<string name="choose_application">اختر التطبيق الذي تريد الاستيراد منه</string>
<string name="choose_theme">اختر النمط الذي ترغب به</string>
<string name="choose_theme">حدد السمة المطلوبة</string>
<string name="choose_account_name_position">حدد موضع اسم الحساب المطلوب</string>
<string name="choose_view_mode">اختر وضع العرض الذي ترغب به</string>
<string name="choose_copy_behavior">حدد سلوك نسخك</string>
<string name="choose_view_mode">حدد وضع العرض المطلوب</string>
<string name="choose_copy_behavior">حدد سلوك نُسختك</string>
<string name="parsing_file_error">حدث خطأ أثناء محاولة تحليل الملف</string>
<string name="file_not_found">خطأ: لم يتم العثور على الملف</string>
<string name="reading_file_error">حدث خطأ أثناء محاولة قراءة الملف</string>
<string name="app_lookup_error">ّخطأ: التطبيق غير مثبت</string>
<string name="app_version_error">نسخة %s التي تم تثبيتها غير مدعومة. أصبحت الإصدارات الحديثة تقوم بتشفير بعض الملفات في مجلد التخزين الداخلي، مما يجعل Aegis غير قادر على الوصول إلى المعلومات التي يحتاجها من أجل الاستيراد. محاولة الاستيراد من المرجح أن تؤدي إلى خطأ. هل ترغب في الاستمرار على أي حال؟</string>
<string name="app_lookup_error">خطأ: التطبيق غير مثبت</string>
<string name="app_version_error">نُسخة %s المثبتة غير مدعومة. أصبحت الإصدارات الحديثة تقوم بتعمية بعض الملفات في مجلد التخزين الداخلي، مما يجعل Aegis غير قادر على الوصول إلى المعلومات التي يحتاجها من أجل الاستيراد. محاولة الاستيراد من المرجح أن تؤدي إلى خطأ. هل ترغب في الاستمرار على أي حال؟</string>
<string name="root_error">خطأ: تعذر الحصول على حق الوصول إلى الجذر</string>
<plurals name="imported_entries_count">
<item quantity="zero">تم استيراد %d مدخلات</item>
<item quantity="one">تم استيراد مدخل %d</item>
<item quantity="two">تم استيراد مدخلان</item>
<item quantity="few">تم استيراد %d مدخلات</item>
<item quantity="many">تم استيراد %d مدخلات</item>
<item quantity="other">تم استيراد %d مدخلات</item>
<item quantity="zero">استوردت %d مدخلات</item>
<item quantity="one">استوردت مدخل</item>
<item quantity="two">استوردت مدخلان</item>
<item quantity="few">استوردت %d مدخلات</item>
<item quantity="many">استوردت %d مدخلات</item>
<item quantity="other">استوردت %d مدخل</item>
</plurals>
<plurals name="entries_shown">
<item quantity="zero">إظهار %d مدخل</item>
@@ -329,70 +345,99 @@
<string name="intro_import_error_title">حدث خطأ أثناء استيراد المخزن</string>
<string name="import_error_title">حدث خطأ أو أكثر أثناء الاستيراد</string>
<string name="exporting_vault_error">حدث خطأ أثناء محاولة تصدير المخزن</string>
<string name="exported_vault">تم تصدير المخزن</string>
<string name="exported_vault">صُدِّر المخزن</string>
<string name="encryption_set_password_error">حدث خطأ أثناء محاولة تعيين كلمة مرور.</string>
<string name="encryption_enable_biometrics_error">حدث خطأ أثناء محاولة تفعيل الفتح البيومتري. لبعض الأجهزة تنفيذ رديئ للمصادقة البيومترية، والأرجح أن جهازك أحدها. بدلًا من ذلك، فكّر بتحويل الإعدادات إلى كلمة مرور فقط.</string>
<string name="no_cameras_available">لا توجد كاميرا متاحة</string>
<string name="read_qr_error">حدث خطأ أثناء محاولة قراءة كود QR</string>
<string name="read_qr_error">حدث خطأ أثناء محاولة قراءة رمز QR</string>
<string name="read_qr_error_phonefactor">Aegis غير متوافق مع خوارزمة 2FA الخاصة بمايكروسوفت. الرجاء التأكد من تحديد \"إعداد التطبيق دون إشعارات\" عند إعداد 2FA في Office 365.</string>
<string name="partial_google_auth_import">اكتُشف تصدير Google Authenticator غير مكتمل</string>
<string name="partial_google_auth_import_warning">بعض رموز QR مفقودة من الاستيراد. لم يتم العثور على الرموز التالية:\n\n<b>%s</b>\n\nيمكنك الاستمرار في استيراد هذا التصدير الجزئي ولكننا نوصي بإعادة المحاولة باستخدام جميع رموز QR حتى لا تخاطر بفقدان الوصول إلى أي رموز.</string>
<string name="missing_qr_code_descriptor">• رمز QR %d</string>
<plurals name="import_partial_export_anyway">
<item quantity="zero">استورد %d رموز على أي حال</item>
<item quantity="one">استورد رمز على أي حال</item>
<item quantity="two">استورد أماراتين على أي حال</item>
<item quantity="few">استورد %d أمارة على أي حال</item>
<item quantity="many">استورد %d رموز على أي حال</item>
<item quantity="other">استورد %d أمارة على أي حال</item>
</plurals>
<string name="import_google_auth_failure">فشل استيراد تصدير Google Authenticator</string>
<string name="unrelated_google_auth_batches_error">يحتوي التصدير على معلومات عن دُفعة غير ذات صلة. حاول استيراد دفعة واحدة في كل مرة.</string>
<string name="no_tokens_can_be_imported">نتيجة لذلك، لا يمكن استيراد أي رموز</string>
<string name="unlocking_vault">يتم فتح قفل المخزن</string>
<string name="rename_group">إعادة تسمية المجموعة</string>
<string name="no_group_selection">إذا لم يكن الإدخال جزءا من أي مجموعة، يمكن العثور عليه تحت \"بلا مجموعة\".</string>
<string name="remove_group">إزالة المجموعة</string>
<string name="unlocking_vault">جارِ فتح المخزن</string>
<string name="rename_group">أعد تسمية المجموعة</string>
<string name="no_group_selection">إذا كان الإدخال لا ينتمي إلى أي مجموعة، فيمكن العثور عليه تحت \"بلا مجموعة\".</string>
<string name="remove_group">أزل المجموعة</string>
<string name="remove_group_description">هل ترغب حقًا في إزالة هذه المجموعة؟ ستتحول المدخلات في هذه المجموعة تلقائيًا إلى \'بلا مجموعة\'.</string>
<string name="remove_unused_groups">حذف المجموعات غير المستخدمة</string>
<string name="remove_unused_groups">احذف المجموعات غير المستخدمة</string>
<string name="remove_unused_groups_description">هل أنت متأكد من أنك تريد حذف جميع المجموعات التي لم يتم تعيينها إلى إدخال؟</string>
<string name="remove_icon_pack">حذف حزمة الأيقونات</string>
<string name="remove_icon_pack">أزل حزمة الأيقونات</string>
<string name="remove_icon_pack_description">هل أنت متأكد من أنك تريد إزالة حزمة الأيقونات هذه؟ لن تتأثر المدخلات التي تستخدم الرموز من هذه الحزمة.</string>
<string name="details">التفاصيل</string>
<string name="show_error_details">عرض تفاصيل الخطأ</string>
<string name="show_error_details">أظهر تفاصيل الخطأ</string>
<string name="lock">قفل</string>
<string name="name">الاسم</string>
<string name="no_group">بلا مجموعة</string>
<string name="sort" comment="Title of the Sort button in the top action bar of the main view">الفرز</string>
<string name="sort" comment="Title of the Sort button in the top action bar of the main view">افرز</string>
<string name="sort_alphabetically">المصدِّر (أ إلى ي)</string>
<string name="sort_alphabetically_reverse">المصدِّر (ي إلى أ)</string>
<string name="sort_alphabetically_name">الحساب (أ إلى ي)</string>
<string name="sort_alphabetically_name_reverse">الحساب (ي إلى أ)</string>
<string name="sort_usage_count">عدد مرات الاستخدام</string>
<string name="sort_last_used">آخر استخدام</string>
<string name="sort_custom">مخصص</string>
<string name="sort_custom">مخصّص</string>
<string name="last_used">آخر استخدام</string>
<string name="last_used_never">أبدًا</string>
<string name="new_group">مجموعة جديدة</string>
<string name="group">مجموعة</string>
<string name="group_name_hint">اسم المجموعة</string>
<string name="preference_manage_groups">تعديل المجموعات</string>
<string name="preference_manage_groups">عدّل المجموعات</string>
<string name="preference_manage_groups_summary">أدر واحذف مجموعاتك هنا</string>
<string name="preference_reset_usage_count">إعادة تعيين عدد الاستخدام</string>
<string name="preference_reset_usage_count_summary">إعادة تعيين عدد الاستخدام لكل إدخال في مخزنك</string>
<string name="preference_reset_usage_count">صفّر عدد الاستخدام</string>
<string name="preference_reset_usage_count_summary">صفّر عدد الاستخدام لكل إدخال في مخزنك</string>
<string name="preference_reset_usage_count_dialog">هل أنت متأكد من أنك تريد جعل العداد لكل مدخل في خزنتك يصبح 0؟</string>
<string name="note" comment="Users can add a note to an entry">ملاحظة</string>
<string name="clear">مسح</string>
<string name="clear">امحو</string>
<string name="dialog_duplicate_entry_title" comment="'Duplicate' is a noun here">إدخال مكرر</string>
<string name="dialog_duplicate_entry_message">هذا الإدخال يحمل نفس الاسم والمصدر كواحد أو أكثر من الإدخالات الموجودة. كيف ترغب في المتابعة؟</string>
<string name="dialog_duplicate_entry_overwrite_title">الكتابة فوق إدخال/إدخالات موجودة</string>
<string name="dialog_duplicate_entry_overwrite_subtitle">استبدل الإدخال أو الإدخالات الموجودة بالإدخال الجديد. لا يمكن التراجع عن هذا الإجراء</string>
<string name="dialog_duplicate_entry_suffix_title">أضف لاحقة</string>
<string name="dialog_duplicate_entry_suffix_subtitle">أضف لاحقة إلى اسم هذا الإدخال الجديد. الاسم الجديد سيكون هو: %s</string>
<string name="dialog_duplicate_entry_cancel_title">ألغِ الحفظ</string>
<string name="dialog_duplicate_entry_cancel_subtitle">يسمح لك بتعديل الإدخال قبل محاولة حفظه مرة أخرى</string>
<plurals name="dialog_duplicate_entry_overwrite_dialog_message">
<item quantity="zero">هل أنت متأكد من أنك تريد حذف الإدخال %d بالاسم التالي:\n\n%s - %s</item>
<item quantity="one">هل أنت متأكد من أنك تريد حذف مدخل بالاسم التالي:\n\n%s - %s</item>
<item quantity="two">هل أنت متأكد من أنك تريد حذف مدخلان بالاسم التالي:\n\n%s - %s</item>
<item quantity="few">هل أنت متأكد من أنك تريد حذف %d مدخلات بالاسم التالي:\n\n%s - %s</item>
<item quantity="many">هل أنت متأكد من أنك تريد حذف %d مدخل بالاسم التالي:\n\n%s - %s</item>
<item quantity="other">هل أنت متأكد من أنك تريد حذف %d مدخل بالاسم التالي:\n\n%s - %s</item>
</plurals>
<string name="dialog_duplicate_entry_overwrite_dialog_title">أكّد الحذف</string>
<string name="pref_haptic_feedback_summary">اجعل جهازك يهتز عند تحديث الرموز</string>
<string name="pref_haptic_feedback_title">الاستجابة اللمسية</string>
<string name="pref_highlight_entry_title">ابرز الرموز عندما تُنقر</string>
<string name="pref_highlight_entry_summary">يسهل تمييز الرموز عن بعضها بتسليط الضوء عليهم عندما يتم النقر عليهم</string>
<string name="pref_highlight_entry_summary">يسهل تمييز الرموز عن بعضها عن طريق تبريزهم عندما تُنقر عليهم</string>
<string name="pref_groups_multiselect_title">مجموعات متعددة الإختيار</string>
<string name="pref_groups_multiselect_summary">السماح باختيار مجموعات متعددة في نفس الوقت</string>
<string name="pref_minimize_on_copy_title">تصغير عند النسخ</string>
<string name="pref_minimize_on_copy_summary">تصغير التطبيق بعد نسخ رمز</string>
<string name="pref_copy_behavior_title">نسخ الرموز إلى الحافظة</string>
<string name="pref_copy_behavior_title">انسخ الرموز إلى الحافظة</string>
<string name="pref_search_behavior_title">سلوك البحث</string>
<string name="pref_pause_entry_title">تجميد الرموز عند النقر عليها</string>
<string name="pref_pause_entry_summary">أوقف التحديث التلقائي للرموز عن طريق النقر عليها. لن يُحديث الرموز طالما أنها مركزة. يتطلب \"تمييز الرموز عند النقر عليها\" أو \"النقر للكشف\".</string>
<string name="pref_pause_entry_title">جمّد الرموز عند النقر عليها</string>
<string name="pref_pause_entry_summary">أوقف التحديث التلقائي للرموز عن طريق النقر عليها. لن يُحدِّث الرموز مادام أنها مُركّزة. يتطلب \"ابرز الرموز عندما تُنقر\" أو \"انقر للكشف\".</string>
<string name="pin_keyboard_description">أدخل كلمة المرور لتفعيل لوحة مفاتيح PIN. لاحظ أن هذا يعمل فقط إذا كانت كلمة المرور الخاصة بك تتكون فقط من أرقام</string>
<string name="pin_keyboard_error">خطأ في تفعيل لوحة مفاتيح PIN</string>
<string name="pin_keyboard_error_description">لا يمكن تعيين لوحة مفاتيح PIN. يجب أن تتكون كلمة المرور من أرقام فقط.</string>
<string name="pin_keyboard_disabled">تغيرت كلمة المرور. لن تُعرض لوحة مفاتيح PIN.</string>
<string name="selected">محددة</string>
<string name="dark_theme_title">نمط داكن</string>
<string name="light_theme_title">نمط فاتح</string>
<string name="amoled_theme_title">نمط AMOLED</string>
<string name="system_theme_title">تعيين بواسطة توفير شحن البطارية</string>
<string name="system_amoled_theme_title">تعيين بواسطة توفير شحن البطارية (AMOLED)</string>
<string name="dark_theme_title">سمة داكنة</string>
<string name="light_theme_title">سمة فاتحة</string>
<string name="amoled_theme_title">سمة AMOLED</string>
<string name="system_theme_title">عيّن بواسطة توفير شحن البطارية</string>
<string name="system_amoled_theme_title">عيّن بواسطة توفير شحن البطارية (AMOLED)</string>
<string name="normal_viewmode_title">عادي</string>
<string name="compact_mode_title">مدمج</string>
<string name="small_mode_title">صغير</string>
@@ -402,15 +447,16 @@
<plurals name="import_error_dialog">
<item quantity="zero">تعذر Aegis استيراد %d رمز. سيتم تخطي هذا الرمز. اضغط \'التفاصيل\' للاطلاع على مزيد من المعلومات حول الخطأ.</item>
<item quantity="one">تعذر Aegis استيراد %d رمز. سيتم تخطي هذا الرمز. اضغط \'التفاصيل\' للاطلاع على مزيد من المعلومات حول الخطأ.</item>
<item quantity="two">تعذر Aegis استيراد %d رمز. سيتم تخطي هذا الرمز. اضغط \'التفاصيل\' للاطلاع على مزيد من المعلومات حول الخطأ.</item>
<item quantity="few">تعذر Aegis استيراد %d رموز. سيتم تخطي هذا الرمز. اضغط \'التفاصيل\' للاطلاع على مزيد من المعلومات حول الخطأ.</item>
<item quantity="many">تعذر Aegis استيراد %d رموز. سيتم تخطي هذا الرمز. اضغط \'التفاصيل\' للاطلاع على مزيد من المعلومات حول الخطأ.</item>
<item quantity="other">تعذر Aegis استيراد %d رموز. سيتم تخطي هذا الرمز. اضغط \'التفاصيل\' للاطلاع على مزيد من المعلومات حول الخطأ.</item>
<item quantity="two">تعذر Aegis استيراد رمزين. سيتم تخطي هذه اﻷماراة. اضغط \'التفاصيل\' للاطلاع على مزيد من المعلومات حول الخطأ.</item>
<item quantity="few">تعذر Aegis استيراد %d رمز. سيتم تخطي هذه اﻷمارة. اضغط \'التفاصيل\' للاطلاع على مزيد من المعلومات حول الخطأ.</item>
<item quantity="many">تعذر Aegis استيراد %d رمز. سيتم تخطي هذه اﻷمارة. اضغط \'التفاصيل\' للاطلاع على مزيد من المعلومات حول الخطأ.</item>
<item quantity="other">تعذر Aegis استيراد %d رمز. سيتم تخطي هذه اﻷمارة. اضغط \'التفاصيل\' للاطلاع على مزيد من المعلومات حول الخطأ.</item>
</plurals>
<string name="unable_to_process_deeplink">تعذرت معالجة الارتباط العميق</string>
<string name="unable_to_read_qrcode_file">غير قادر على قراءة ومعالجة رمز QR من الملف: %s.</string>
<string name="unable_to_process_shared_text">غير قادر على معالجة النص المُشارك ك OTP</string>
<string name="unable_to_generate_qrcode">تعذّر توليد كود QR</string>
<string name="unable_to_read_qrcode_files">غير قادر على قراءة ومعالجة بعض رموز QR. سيتم استيراد %1$d/%2$d فقط من المدخلات.</string>
<string name="unable_to_generate_qrcode">تعذّر توليد رمز QR</string>
<string name="select_picture">اختر صورة</string>
<string name="select_icon">اختر أيقونة</string>
<string name="tile_open_vault" comment="label for a quick settings tile that opens the app when tapped">افتح المخزن</string>
@@ -421,16 +467,16 @@
<string name="channel_description_lock_status">يمكن لـ Aegis عرض إشعار مستمر لتنبيهك عند قفل المخزن</string>
<string name="vault_unlocked_state">قفل المخزن مفتوح. انقر هنا للقفل</string>
<string name="version">الإصدار</string>
<string name="changelog">سجل التغيير</string>
<string name="changelog">سجلّ التغيير</string>
<string name="whats_new">ما الجديد</string>
<string name="github_description">الكود المصدري، والمشاكل، والمعلومات</string>
<string name="github_description">المصدر البرمجي، والعلل، والمعلومات</string>
<string name="license">الرخصة</string>
<string name="license_description">Aegis Authenticator مرخص بموجب GPLv3</string>
<string name="third_party_licenses">تراخيص طرف ثالث</string>
<string name="third_party_licenses_description">تراخيص مكتبات الطرف الثالث التي يستعملها Aegis</string>
<string name="country_netherlands">هولندا</string>
<string name="email_us">اكتب بريد الكتروني</string>
<string name="visit_website">قم بزيارة موقعنا</string>
<string name="visit_website">زُر موقعنا</string>
<string name="about_support">الدعم</string>
<string name="support_rate">التقييم</string>
<string name="support_rate_description">ادعمنا بترك تقييم على متجر Google Play</string>
@@ -438,26 +484,38 @@
<string name="email">البريد الإلكتروني</string>
<string name="time_sync_warning_title">مزامنة الوقت تلقائيًا</string>
<string name="time_sync_warning_message">يعتمد Aegis على وقت النظام لتوليد الأكواد الصحيحة. انحراف بمقادر بضعة ثواني يمكن أن يؤدي إلى أكواد خاطئة. يبدوا أن جهازك غير معيّن إلى مزامنة الوقت تلقائيًا. هل ترغب بفعل ذلك الآن؟</string>
<string name="time_sync_warning_disable">إيقاف تحذيري. أنا أعرف ما أفعله.</string>
<string name="google_qr_export_unrelated">تم العثور على كود QR لا علاقة له. حاول إعادة تشغيل الماسح.</string>
<string name="time_sync_warning_disable">توقف عن تحذيري. أعرف ماذا أفعل.</string>
<string name="google_qr_export_unrelated">عُثر على رمز QR لا علاقة له. حاول إعادة تشغيل الماسح.</string>
<plurals name="google_qr_export_scanned">
<item quantity="zero">تم مسح %1$d/%2$d رموز QR</item>
<item quantity="one">تم مسح %1$d/%2$d رمز QR</item>
<item quantity="two">تم مسح %1$d/%2$d رموز QR</item>
<item quantity="few">تم مسح %1$d/%2$d رموز QR</item>
<item quantity="many">تم مسح %1$d/%2$d رموز QR</item>
<item quantity="other">تم مسح %1$d/%2$d رموز QR</item>
</plurals>
<string name="google_qr_export_unexpected">انتظرت رمز QR #%1$d، ولكن مسحت #%2$d بدلًا منه</string>
<string name="backup_error_bar_message"><b>النسخ الاحتياطي للمخزن فشل مؤخرًا</b></string>
<string name="backup_error_dialog_details" comment="The first parameter is the type of backup (e.g. built-in or Android backup). The second parameter is an elapsed time in the style of 'x seconds/minutes/days ago'."> فشلت محاولة النسخ الاحتياطي للمخزون باستخدام %1$s بسبب حدوث خطأ. تمت محاولة النسخ الاحتياطي %2$s. الرجاء التحقق من إعدادات النسخ الاحتياطي للتأكد من أن النسخ الاحتياطي يمكن أن يكتمل بنجاح.
</string>
<string name="backup_permission_error_dialog_details" comment="The first parameter is the type of backup (e.g. built-in or Android backup). The second parameter is an elapsed time in the style of 'x seconds/minutes/days ago'.">فشلت محاولة النسخ الاحتياطي الأخيرة للمخزون باستخدام %1$s لأن Aegis لم يكن لديه الإذن قراءة وجهة النسخ الاحتياطي. تمت محاولة النسخ الاحتياطي %2$s. يمكن أن يحدث هذا الخطأ إذا قمت بنقل/إعادة تسمية وجهة النسخ الاحتياطي أو إذا قمت للتو باستعادة Aegis من نسخة احتياطية. الرجاء إعادة إعداد وجهة النسخ الإحتياطي. </string>
<string name="backup_system_builtin">النسخ الاحتياطية التلقائية المضنة في Aegis</string>
<string name="backup_system_android">نظام النسخ الاحتياطي السحابي للأندرويد</string>
<string name="backup_reminder_bar_message_with_latest" comment="The parameter is an elapsed time in the style of 'x seconds/minutes/days ago'"> أحدث نسخة احتياطية قديمة (%s)
</string>
<string name="backup_reminder_bar_message"> لم يتم النسخ الاحتياطي للتغييرات
<string name="backup_reminder_bar_message"> التغييرات لا يتم نسخها احتياطيًا
</string>
<string name="backup_reminder_bar_dialog_title">لا يُنسخ التغييرات احتياطيًا</string>
<string name="backup_reminder_bar_dialog_summary"> لم يتم إجراء نسخ احتياطي للتغييرات الأخيرة التي تم إجراؤها على الخزنة حتى الآن. من المهم عمل نسخ احتياطية منتظمة لمنع فقدان الوصول إلى حساباتك. يرجى النظر في إعداد النسخ الاحتياطية التلقائية في قائمة الإعدادات.
</string>
<string name="backup_reminder_bar_dialog_accept">إعداد النسخ الاحتياطية</string>
<string name="backup_plaintext_export_warning"><b>تم تصدير المخزن مؤخرا ك نص مجرّد</b></string>
<string name="pref_show_plaintext_warning_hint">لا تظهر هذا التحذير مجدداً</string>
<string name="backup_plaintext_warning_explanation">يظهر هذا التحذير لأنك قمت مؤخراً بتصدير نسخة غير مشفرة من المخزن. للحفاظ على أمان الرموز الخاصة بك، نوصي بحذف هذا الملف بمجرد أن لا تكون هناك حاجة إليه.</string>
<string name="switch_camera">تبديل الكاميرا</string>
<string name="pref_show_plaintext_warning_hint">لا تُظهر هذا التحذير مجدداً</string>
<string name="backup_plaintext_warning_explanation">يظهر هذا التحذير لأنك صدَّرت مؤخراً نسخة غير مُعمَّاة من المخزن. للحفاظ على أمان رموزك، نُوصي بحذف هذا الملف بمجرد أن لا تكون هناك حاجة إليه.</string>
<string name="switch_camera">بدّل الكاميرا</string>
<string name="empty_list">لا توجد أكواد لعرضها. ابدأ بإضافة مدخلات بالنقر على علامة الزائد في أسفل الركن الأيسر</string>
<string name="empty_list_title">لم يتم العثور على مدخلات</string>
<string name="empty_group_list">لا توجد مجموعات لعرضها. أضف مجموعات من خلال شاشة التحرير لأحد المدخلات</string>
<string name="empty_group_list">لا توجد مجموعات لعرضها. أضف مجموعات من خلال شاشة التعديل لأحد المدخلات</string>
<string name="empty_group_list_title">لم يتم العثور على أي مجموعات.</string>
<string name="no_icon_packs">لم يتم استيراد أي حزم أيقونات بعد. انقر فوق علامة الزائد لاستيراد حزمة. نصيحة: جرب <a href="https://aegis-icons.github.io">aegis-icons</a>.</string>
<string name="no_icon_packs_title">لا توجد حزم أيقونات</string>
@@ -474,11 +532,12 @@
</plurals>
<string name="next">التالي</string>
<string name="previous">السابق</string>
<string name="copy_uri">نسخ URI</string>
<string name="copy_uri">انسخ عنوان URL</string>
<string name="unable_to_copy_uri_to_clipboard">تعذر نسخ URI إلى الحافظة</string>
<string name="uri_copied_to_clipboard">نُسخ URI إلى الحافظة</string>
<string name="transfer_entry_description">امسح كود QR هذا بتطبيق المصادقة الذي ترغب بنقل ذلك المدخل إليه</string>
<string name="google_auth_compatible_transfer_description">امسح رموز ال QR هذه بواسطة Aegis أو Google Authenticator.\n\nبسبب القيود في تطبيق Google Authenticator، فقط رموز TOTP &amp; HOTP التي تستعمل SHA1 وتنتِج كود من 6 خانات هي من سيتم إدراجها</string>
<string name="uri_copied_to_clipboard">نُسِخ URI إلى الحافظة</string>
<string name="transfer_entry_description">امسح رمز QR هذا بتطبيق الاستيثاق الذي ترغب بنقل ذلك المدخل إليه</string>
<string name="transfer_entry_brightness">انقر على رمز QR لتبديل سطوع الشاشة بالكامل</string>
<string name="google_auth_compatible_transfer_description">امسح رموز ال QR هذه بواسطة Aegis أو Google Authenticator.\n\n بسبب القيود في تطبيقGoogle Authenticator، فقط رموز TOTP &amp; HOTP التي تستعمل SHA1 وتنتِج رموز من 6 خانات هي من سيتم إدراجها</string>
<string name="password_strength_very_weak">ضعيف جدًا</string>
<string name="password_strength_weak">ضعيف</string>
<string name="password_strength_fair">مقبول</string>
@@ -486,23 +545,23 @@
<string name="password_strength_strong">قوي</string>
<string name="password_strength_unknown">كلمة المرور طويلة جدًا لتحليل القوة</string>
<string name="pref_pin_keyboard_title">استخدام لوحة المفاتيح PIN على شاشة القفل</string>
<string name="pref_pin_keyboard_summary">قم بتمكين هذا إذا كنت تريد تمكين لوحة مفاتيح PIN على شاشة القُفْل. هذا يعمل فقط مع كلمات المرور الرقمية</string>
<string name="pref_pin_keyboard_summary">مكّن هذا إذا كنت تريد تمكين لوحة مفاتيح PIN على شاشة القفل. هذا يعمل فقط مع كلمات المرور الرقمية</string>
<string name="title_activity_preferences">الإعدادات</string>
<string name="title_activity_manage_groups">إدارة المجموعات</string>
<string name="title_activity_transfer">نقل المدخلات</string>
<string name="title_activity_manage_groups">أدر المجموعات</string>
<string name="title_activity_transfer">انقل المدخلات</string>
<string name="title_activity_about">عن</string>
<string name="title_activity_edit_entry">تعديل الإدخال</string>
<string name="title_activity_scan_qr">قم بمسح رمز QR</string>
<string name="title_activity_import_entries">استيراد المدخلات</string>
<string name="title_activity_assign_icons">تعيين أيقونات</string>
<string name="title_activity_edit_entry">عدّل الإدخال</string>
<string name="title_activity_scan_qr">امسح رمز QR</string>
<string name="title_activity_import_entries">استورد مدخلات</string>
<string name="title_activity_assign_icons">عيّن أيقونات</string>
<string name="title_activity_licenses">تراخيص الطرف الثالث</string>
<string name="dialog_wipe_entries_title">حذف المدخلات</string>
<string name="dialog_wipe_entries_message">يحتوي مخزنك بالفعل على إدخالات. هل تريد إزالة هذه الإدخالات قبل استيراد هذا المِلَفّ؟\n\n<b>عند القيام بذلك، ستفقد الوصول بشكل دائم إلى الإدخالات الموجودة في الخزنة.</b></string>
<string name="dialog_wipe_entries_title">احذف المدخلات</string>
<string name="dialog_wipe_entries_message">يحتوي مخزنك بالفعل على إدخالات. هل تريد إزالة هذه الإدخالات قبل استيراد هذا الملف؟\n\n<b>عند القيام بذلك، ستفقد الوصول بشكل دائم إلى الإدخالات الموجودة في الخزنة.</b></string>
<string name="dialog_wipe_entries_checkbox">حذف محتويات المخزن</string>
<string name="panic_trigger_ignore_toast">تلقى Aegis حالة من الذعر ولكن الإعداد معطل، مع التجاهل</string>
<string name="pref_panic_trigger_title">حذف المخزن على الزناد الذعر</string>
<string name="panic_trigger_ignore_toast">تلقى Aegis حالة من الذعر ولكن الإعداد مُعطّل، يتجاهل</string>
<string name="pref_panic_trigger_title">احذف المخزن على الزناد الذعر</string>
<string name="pref_panic_trigger_summary">احذف المخزن عند تلقي مصدر ذعر من Ripple</string>
<string name="import_vault">استيراد مخزن Aegis</string>
<string name="import_vault">استورد مخزن Aegis</string>
<string name="import_vault_hint">هل تريد الاستيراد من تطبيق 2FA مختلف؟ أكمل الإعداد أولاً ثم انتقل إلى قائمة الإعدادات.</string>
<plurals name="import_duplicate_toast">
<item quantity="zero">لم يُؤشَّر %d من التكرار المحتمل. الرجاء مراجعة قائمة الإدخالات.</item>
@@ -512,28 +571,30 @@
<item quantity="many">لم يُؤشَّر %d من التكرارات المحتملة. الرجاء مراجعة قائمة الإدخالات.</item>
<item quantity="other">لم يُؤشَّر %d من التكرارات المحتملة. الرجاء مراجعة قائمة الإدخالات.</item>
</plurals>
<string name="importer_help_2fas">توفير مِلَفّ النسخ الاحتياطي 2FAS Authenticator.</string>
<string name="importer_help_aegis">توفير مِلَفّ Aegis للتصدير / النسخ الاحتياطي.</string>
<string name="importer_help_authenticator_plus">توفير مِلَفّ تصدير Authenticator Plus الذي تم الحصول عليه من خلال <b>الإعدادات -&gt; النسخ الاحتياطي &amp; استعادة -&gt; تصدير كنص و HTML</b>.</string>
<string name="importer_help_authenticator_pro">توفير مِلَفّ تصدير Authenticator Pro الذي تم الحصول عليه من خلال &lt;b&gt;الإعدادات -&gt; النسخ الاحتياطي -&gt; النسخ الاحتياطي إلى مِلَفّ مشفر (مستحسن).</string>
<string name="importer_help_authy">توفير نسخة من <b> /data/data/com.authy.authy/shared_prefs/com.authy.storage.tokens.authenticator.xml</b>، الموجود في دليل التخزين الداخلي لـ Authy.</string>
<string name="importer_help_andotp">توفير مِلَفّ تصدير / نسخ احتياطي andOTP.</string>
<string name="importer_help_bitwarden">توفير مِلَفّ تصدير / نسخ احتياطي لـ Bitwarden. الملفات المشفرة غير مدعومة.</string>
<string name="importer_help_2fas">وفّر ملف النسخ الاحتياطي 2FAS Authenticator.</string>
<string name="importer_help_aegis">وفّر ملف Aegis للتصدير / النسخ الاحتياطي.</string>
<string name="importer_help_authenticator_plus">وفّر ملف تصدير Authenticator Plus الذي حُصل عليه من خلال <b>الإعدادات -&gt; النسخ الاحتياطي &amp; استعادة -&gt; تصدير كنص و HTML</b>.</string>
<string name="importer_help_authy">وفّر نسخة من <b> /data/data/com.authy.authy/shared_prefs/com.authy.storage.tokens.authenticator.xml</b>، الموجود في دليل التخزين الداخلي لـ Authy.</string>
<string name="importer_help_andotp">توفير ملف andOTP تصدير / نسخ احتياطي.</string>
<string name="importer_help_bitwarden">وفّر ملف تصدير/نسخ احتياطي لـ Bitwarden. الملفات المُعمَّاة غير مدعومة.</string>
<string name="importer_help_battle_net_authenticator">يرجى توفير نسخة من <b>/data/data/com.blizzard.messenger/shared_prefs/com.blizzard.messenger.authenticator_preferences.xml</b>، الموجود في دليل التخزين الداخلي لـ Battle.net Authenticator.</string>
<string name="importer_help_duo">توفير نسخة من <b>/data/data/com.duosecurity.duomobile/files/duokit/accounts.json</b>، الموجودة في دليل التخزين الداخلي لـ DUO.</string>
<string name="importer_help_ente_auth">قم بتوفير ملف تصدير Ente Auth. حاليا فقط الملفات غير المشفرة مدعومة.</string>
<string name="importer_help_ente_auth">وفّر ملف تصدير Ente Auth. حاليًا فقط الملفات غير المُعمَّاة مدعومة.</string>
<string name="importer_help_freeotp">FreeOTP 2: توفير ملف احتياطي.\nFreeOTP 1.x: توفير نسخة من <b>/data/data/org.fedorahosted.freeotp/shared_prefs/tokens.xml</b>، الموجود في دليل التخزين الداخلي لـ FreeOTP.</string>
<string name="importer_help_freeotp_plus">توفير ملف تصدير FreeOTP +.</string>
<string name="importer_warning_title_freeotp2">توافق مع FreeOTP 2</string>
<string name="importer_warning_message_freeotp2">هناك عدد من المشاكل في FreeOTP 2 التي يمكن أن تؤدي إلى وجود نسخ احتياطية فاسدة. سوف يحاول درع إنقاذ أكبر عدد ممكن من الإدخالات، ولكن من الممكن أن يفشل البعض أو حتى الجميع في الاستيراد.</string>
<string name="importer_help_google_authenticator"><b>يتم دعم ملفات قاعدة البيانات فقط من Google Authenticator v5.10 والإصدارات السابقة</b>.\n\nتوفير نسخة من<b>/data/data/com.google.android.apps.authenticator2/databases/databases</b>،الموجود في دليل التخزين الداخلي لـ Google Authenticator.</string>
<string name="importer_help_microsoft_authenticator">توفير نسخة من<b>/data/data/com.azure.authenticator/databases/PhoneFactor</b>، الموجود في دليل التخزين الداخلي لـ Microsoft Authenticator.</string>
<string name="importer_help_plain_text">توفير مِلَفّ نصي عادي مع Google Authenticator URI في كل سطر.</string>
<string name="importer_help_plain_text">وفّر ملف نصي عادي مع Google Authenticator URI في كل سطر.</string>
<string name="importer_help_proton_authenticator">وفّر ملف تصدير Proton Authenticator (.json) الذي حُصل عليه من خلال <b>الإعدادات -&gt; صدِّر</b>.</string>
<string name="importer_help_steam"><b>لا يتم دعم Steam v3.0 والإصدارات الأحدث</b>. توفير نسخة من<b>/data/data/com.valvesoftware.android.steam.community/files/Steamguard-*.json</b>، الموجود في دليل التخزين الداخلي لـ Steam.</string>
<string name="importer_help_totp_authenticator">توفير مِلَفّ تصدير TOTP Authenticator.</string>
<string name="importer_help_winauth">توفير مِلَفّ تصدير WinAuth.</string>
<string name="import_assign_icons_dialog_title">تعيين أيقونات</string>
<string name="importer_help_stratum">جهّز ملف تصدير Stratum تم الحصول عليه من خلال <b>الإعدادات -&gt; النسخ الاحتياطي -&gt; النسخ الاحتياطي للملف المشفر (موصى به)</b>.</string>
<string name="importer_help_totp_authenticator">وفّر ملف تصدير TOTP Authenticator.</string>
<string name="importer_help_winauth">وفّر ملف تصدير WinAuth.</string>
<string name="import_assign_icons_dialog_title">عيّن أيقونات</string>
<string name="import_assign_icons_dialog_text">هل تريد تعيين أيقونات إلى المدخلات المستوردة؟</string>
<string name="importer_encrypted_exception_google_authenticator">تخطَّى الإدخال المشفر: %s</string>
<string name="importer_encrypted_exception_google_authenticator">تخطَّى الإدخال المُعمّى: %s</string>
<string name="importer_help_direct">استيراد الإدخالات مباشرة من %s. يتطلب هذا تثبيت التطبيق على هذا الجهاز ومنح حق الوصول إلى الجذر Aegis.</string>
<string name="groups">المجموعات</string>
<string name="pref_focus_search">التركيز على البحث عند بدء التطبيق</string>
@@ -543,7 +604,7 @@
<string name="pref_grouping_size_two">مجموعات من 2</string>
<string name="pref_grouping_size_three">مجموعات من 3</string>
<string name="pref_grouping_size_four">مجموعات من 4</string>
<string name="pref_copy_behavior_never">أبداً</string>
<string name="pref_copy_behavior_never">أبدًا</string>
<string name="pref_copy_behavior_single_tap">نقرة واحدة</string>
<string name="pref_copy_behavior_double_tap">نقرتين</string>
<string name="pref_account_name_position_hidden">مختفي</string>
@@ -551,11 +612,11 @@
<string name="pref_account_name_position_below">أسفل المصدر</string>
<plurals name="time_elapsed_seconds" tools:ignore="UnusedResources">
<item quantity="zero">منذ %d ثواني</item>
<item quantity="one">منذ %d ثانية</item>
<item quantity="two">منذ %d ثواني</item>
<item quantity="one">منذ ثانية</item>
<item quantity="two">منذ ثانيتين</item>
<item quantity="few">منذ %d ثواني</item>
<item quantity="many">منذ %d ثانية</item>
<item quantity="other">منذ %d ثواني</item>
<item quantity="other">منذ %d ثانية</item>
</plurals>
<plurals name="time_elapsed_minutes" tools:ignore="UnusedResources">
<item quantity="zero">منذ %d دقيقة</item>
@@ -0,0 +1,2 @@
<?xml version="1.0" encoding="utf-8"?>
<resources></resources>
@@ -10,6 +10,7 @@
<string name="action_default_icon">Reafitar l\'iconu</string>
<string name="discard">Escartar</string>
<string name="save">Guardar</string>
<string name="all">Too</string>
<string name="issuer">Emisor</string>
<string name="yandex_pin">PIN (416 díxitos)</string>
<string name="motp_pin">PIN (4 díxitos)</string>
@@ -28,17 +29,26 @@
<string name="pref_section_security_summary">Configura\'l cifráu, el bloquéu biométricu, el bloquéu automáticu ya otros valores de seguranza.</string>
<string name="pref_section_import_export_title">Importación ya esportación</string>
<string name="pref_section_import_export_summary">Importa les copies de seguranza d\'Aeguis o d\'otres aplicaciones del mesmu tipu. Crea ficheros d\'esportación manuales de l\'arca d\'Aeguis.</string>
<string name="pref_section_audit_log_title">Rexistros d\'auditoría</string>
<string name="pref_section_backups_title">Copies de seguranza</string>
<string name="pref_section_backups_summary">Configura\'l llugar onde s\'atroxen les copies de seguranza o activa la participación nel sistema de copies de seguranza na ñube d\'Android.</string>
<string name="pref_section_icon_packs">Paquetes d\'iconos</string>
<string name="pref_section_icon_packs_summary">Xestiona ya importa paquetes d\'iconos</string>
<string name="pref_select_theme_title">Estilu</string>
<string name="pref_dynamic_colors_title">Colores dinámicos</string>
<string name="pref_view_mode_title">Mou de la visualización</string>
<string name="pref_lang_title">Llingua</string>
<string name="pref_show_icons_title">Amosar los iconos</string>
<string name="pref_show_icons_summary">Amuesa los iconos al llau de cada entrada</string>
<string name="pref_code_group_size_title">Agrupamientu de díxitos</string>
<string name="pref_code_group_size_summary">Seleiciona\'l númberu de díxitos pol que s\'agrupen los códigos</string>
<string name="pref_account_name_position_title">Amosar el nome de la cuenta</string>
<string name="pref_show_next_code_title">Amosar el códigu siguiente</string>
<string name="pref_show_next_code_summary">Xenera y amuesa\'l códigu siguiente per adelantao</string>
<string name="pref_expiration_state_title">Indicar cuándo tán a piques de caducar los códigos</string>
<string name="pref_expiration_state_summary">Camuda\'l color de los códigos y fai que parpaguien cuando tán a piques de caducar</string>
<string name="pref_expiration_state_fallback">Camuda\'l color de los códigos cuando tán a piques de caducar</string>
<string name="pref_shared_issuer_account_name_title">Amosar el nome de la cuenta namás cuando seya necesariu</string>
<string name="pref_import_file_title">Importar d\'un ficheru</string>
<string name="pref_import_file_summary">Importa los pases d\'un ficheru</string>
<string name="pref_android_backups_title">Copies de seguranza na ñube</string>
@@ -46,7 +56,12 @@
<string name="pref_android_backups_hint"><i>Siempres se permiten les copies de seguranza D2D, independientemente de la configuración d\'arriba</i></string>
<string name="pref_backups_title">Crear automáticamente copies de seguranza</string>
<string name="pref_backups_summary">Crea automáticamente copies de seguranza de l\'arca nel almacenamientu esternu al facer cambeos. Esta opción namás ye compatible coles arques cifraes.</string>
<string name="pref_backups_reminder_title">Recordatoriu de copia de seguranza</string>
<string name="pref_backups_versioning_strategy_title">Estratexa de copies de seguranza</string>
<string name="pref_backups_versioning_strategy_dialog_title">Seleiciona una estratexa de copies de seguranza</string>
<string name="pref_backups_location_title">Llocalización de les copies de seguranza</string>
<string name="pref_backups_location_summary">Les copies de seguranza van atroxase en</string>
<string name="pref_backup_location_summary">La copia de seguranza va atroxase en</string>
<string name="pref_backups_trigger_title">Facer una copia de seguranza</string>
<string name="pref_backups_trigger_summary">Fai manualmente una copia de seguranza</string>
<string name="pref_backups_versions_title">Númberu de versiones a caltener</string>
@@ -89,8 +104,31 @@
<string name="pref_encryption_summary">Cifra l\'arca ya desblóquiala con una contraseña o cola biometría</string>
<string name="pref_biometrics_title">Desbloquéu biométricu</string>
<string name="pref_biometrics_summary">Permite que l\'autenticación biométrica desbloquie l\'arca</string>
<string name="pref_search_behavior_type_name">Nome</string>
<string name="pref_search_behavior_type_issuer">Emisor</string>
<string name="pref_search_behavior_type_note">Nota</string>
<string name="pref_search_behavior_type_groups">Grupos</string>
<string name="pref_set_password_title">Camudar la contraseña</string>
<string name="pref_set_password_summary">Configura la contraseña que vas precisar pa desbloquiar l\'arca</string>
<string name="no_events_title">Nun s\'informó de nengún eventu</string>
<string name="no_events_description">Nun s\'informó de nengún eventu importante na aplicación</string>
<string name="event_title_vault_unlocked">Arca desbloquiada</string>
<string name="event_description_vault_unlocked">L\'arca desbloquióse correutamente</string>
<string name="event_title_backup_created">Copia de seguranza creada</string>
<string name="event_description_backup_created">Creóse una copia de seguranza de l\'arca correutamente</string>
<string name="event_title_android_backup_created">Copia de seguranza creada por Android</string>
<string name="event_description_android_backup_created">Android creó una copia de seguranza de l\'arca correutamente</string>
<string name="event_title_vault_exported">Arca esportada</string>
<string name="event_description_vault_exported">Esportóse una copia de l\'arca</string>
<string name="event_title_entry_shared">Entrada compartida</string>
<string name="event_description_entry_shared">Compartióse una entrada</string>
<string name="event_title_vault_unlock_failed_password">Error de desbloquéu de l\'arca (contraseña)</string>
<string name="event_description_vault_unlock_failed_password">Hebo un intentu de desbloquiar l\'arca con una contraseña que falló</string>
<string name="event_title_vault_unlock_failed_biometrics">Error de desbloquéu de l\'arca (biometría)</string>
<string name="event_description_vault_unlock_failed_biometrics">Hebo un intentu de desbloquiar l\'arca cola biometría que falló</string>
<string name="event_unknown">Tipu d\'eventu desconocíu</string>
<string name="today_at_time">Güei a les %1$s</string>
<string name="day_of_week_at_time">%1$s a les %2$s</string>
<string name="export_encrypted">Cifrar l\'arca</string>
<string name="export_help">Esta aición esporta l\'arca fuera del almacenamientu internu d\'Aegis. Seleiciona\'l formatu col que quies esportar:</string>
<string name="export_warning_unencrypted">Tas a piques d\'esportar una copia ensin cifrar de l\'arca d\'Aegis. <b>Nun s\'aconseya</b>.</string>
@@ -100,6 +138,7 @@
<string name="export_format_google_auth_uri">Ficheru de testu (.TXT)</string>
<string name="export_format_html">Páxina web (.HTML)</string>
<string name="export_format_hint">Formatu de la esportación</string>
<string name="export_all_groups">Esportar tolos grupos</string>
<plurals name="export_groups_selected_count">
<item quantity="one">Seleicionóse %d grupu</item>
<item quantity="other">Seleicionáronse %d grupos</item>
@@ -137,6 +176,7 @@
<string name="share">Compartir</string>
<string name="yes"></string>
<string name="no">Non</string>
<string name="undo">Desfacer</string>
<string name="unlock">Desbloquiar</string>
<string name="advanced">Configuración avanzada</string>
<string name="counter">Contador</string>
@@ -148,6 +188,7 @@
<string name="set_up_biometric">Configuración del desbloquéu biométricu</string>
<string name="copy">Copiar</string>
<string name="edit">Editar</string>
<string name="assign_groups_dialog_dropdown">Seleiciona un grupu</string>
<string name="favorite" comment="Verb">Meter en Favoritos</string>
<string name="unfavorite" comment="Verb">Quitar en Favoritos</string>
<string name="error_all_caps">ERROR</string>
@@ -163,7 +204,9 @@
<string name="encrypting_vault">Cifrando l\'arca</string>
<string name="exporting_vault">Esportando l\'arca</string>
<string name="reading_file">Lleendo\'l ficheru</string>
<string name="requesting_root_access">Consiguiendo l\'accesu de superusuariu</string>
<string name="analyzing_qr">Analizándo\'l códigu QR</string>
<string name="analyzing_qr_multiple">Analizando\'l códigu QR %1$d/%2$d (%3$s)</string>
<plurals name="added_new_entries">
<item quantity="one">Amestóse %d entrada nueva a l\'arca</item>
<item quantity="other">Amestáronse %d entraes nueves a l\'arca</item>
@@ -228,6 +271,7 @@
<string name="reading_file_error">Prodúxose un error mentanto se lleía\'l ficheru</string>
<string name="app_lookup_error">Error: l\'aplicación nun ta instalada</string>
<string name="app_version_error">La versión instalada de «%s» nun ye compatible. Les versiones nueves comenzaron a cifrar dalgunos ficheros nel direutoriu del almacenamientu internu, lo que fai qu\'Aegis nun seya a acceder a la información que precisa pa la importación. Ye probable qu\'al tentar d\'importar se produza un error. ¿Quies siguir de toes toes?</string>
<string name="root_error">Error: nun ye posible consiguir l\'accesu de superusuariu</string>
<plurals name="imported_entries_count">
<item quantity="one">Importóse %d entrada</item>
<item quantity="other">Importáronse %d entraes</item>
@@ -252,8 +296,10 @@
<string name="unrelated_google_auth_batches_error">La esportación contién información d\'un llote que nun tien rellación. Prueba a importar llotes d\'unu nunu.</string>
<string name="no_tokens_can_be_imported">Como resultáu, nun se pue importar nengún pase</string>
<string name="unlocking_vault">Desbloquiando l\'arca</string>
<string name="rename_group">Renomar grupu</string>
<string name="remove_group">Desaniciu d\'un grupu</string>
<string name="remove_group_description">¿De xuru que quies quitar esti grupu? Les entraes d\'esti grupu cambien automáticamente al grupu «Ensin grupu».</string>
<string name="remove_unused_groups">Desaniciar grupos ensin usu</string>
<string name="remove_icon_pack">Desaniciu d\'un paquete d\'iconos</string>
<string name="remove_icon_pack_description">¿De xuru que quies quitar esti paquete d\'iconos? Esta aición nun va tener nengún efeutu sobre les entraes qu\'usen iconos d\'esti paquete.</string>
<string name="details">Detalles</string>
@@ -267,7 +313,9 @@
<string name="sort_alphabetically_name">Nome de cuenta (de l\'A a la Z)</string>
<string name="sort_alphabetically_name_reverse">Nome de cuenta (de la Z a l\'A)</string>
<string name="sort_usage_count">Númberu d\'usos</string>
<string name="sort_last_used">Últimu usu</string>
<string name="sort_custom">Orde personalizáu</string>
<string name="last_used">Últimu usu</string>
<string name="new_group">Grupu nuevu…</string>
<string name="group">Grupu</string>
<string name="group_name_hint">Nome del grupu</string>
@@ -282,6 +330,7 @@
<string name="pref_highlight_entry_summary">Fai que los pases s\'estremen meyor al rescamplalos temporalmente cuando toques nellos</string>
<string name="pref_minimize_on_copy_title">Minimizar al copiar</string>
<string name="pref_minimize_on_copy_summary">Minimiza l\'aplicación dempués de copiar un pase</string>
<string name="pref_search_behavior_title">Comportamientu de la busca</string>
<string name="pref_pause_entry_title">Paralizar los pases al tocalos</string>
<string name="pref_pause_entry_summary">Posa l\'anovamientu automáticu de los pases al tocar nellos y, polo tanto, nun s\'anueven mentanto tengan el focu. Esta opción rique l\'activación de les opciones «Rescamplar los pases al tocalos» o «Tocar pa desvelar».</string>
<string name="pin_keyboard_description">Activa la contraseña p\'activar el tecláu numbéricu. Decátate qu\'esta opción namás funciona si la contraseña ta formada namás por númberos</string>
@@ -302,6 +351,7 @@
<string name="unable_to_process_deeplink">Nun ye posible procesar l\'enllaz fondu</string>
<string name="unable_to_read_qrcode_file">Nun se posible lleer ya procesar el códigu QR del ficheru: %s.</string>
<string name="unable_to_process_shared_text">Nun ye posible procesar el testu compartíu como cadena d\'OTP</string>
<string name="unable_to_read_qrcode_files">Nun ye posible lleer ya procesar dalgunos códigos QR. Namás van importase %1$d/%2$d entraes.</string>
<string name="unable_to_generate_qrcode">Nun ye posible xenerar el códigu QR</string>
<string name="select_picture">Seleición d\'una semeya</string>
<string name="select_icon">Seleición d\'un iconu</string>
@@ -332,7 +382,10 @@
<string name="time_sync_warning_message">Aegis encóntase na hora del sistema pa xenerar códigos correutos ya la esviación d\'unos segundos na hora podría facer que se xeneren códigos incorreutos. Paez que\'l preséu nun ta configuráu pa sincronizar automáticamente la hora. ¿Quies facelo agora?</string>
<string name="time_sync_warning_disable">Dexar d\'alvertime, sé lo que faigo.</string>
<string name="google_qr_export_unrelated">Atopóse un códigu QR que nun tien rellación. Prueba a reaniciar l\'escaniador.</string>
<string name="google_qr_export_unexpected">Esperábase\'l códigu QR #%1$d, mas escanióse\'l #%2$d</string>
<string name="backup_error_bar_message"><b>La copia de seguranza de l\'arca falló apocayá</b></string>
<string name="backup_error_dialog_details" comment="The first parameter is the type of backup (e.g. built-in or Android backup). The second parameter is an elapsed time in the style of 'x seconds/minutes/days ago'."> Falló un intentu recién de facer una copia de seguranza de l\'arca con «%1$s» porque se produxo un error (data de l\'aición: %2$s). Revisa la configuración pa que les copies de seguranza puedan facese correutamente.
</string>
<string name="backup_system_builtin">Copies de seguranza automátiques d\'Aegis</string>
<string name="backup_system_android">Sistema de copies de segurazan na ñube d\'Android</string>
<string name="backup_plaintext_export_warning"><b>L\'arca esportóse apocayá a un ficheru de testu planu</b></string>
@@ -354,6 +407,7 @@
</plurals>
<string name="next">Siguiente</string>
<string name="previous">Anterior</string>
<string name="copy_uri">Copiar la URI</string>
<string name="unable_to_copy_uri_to_clipboard">Nun ye posible copiar la URI al cartafueyu</string>
<string name="uri_copied_to_clipboard">La URI copióse al cartafueyu</string>
<string name="transfer_entry_description">Escania esti códígu QR cola aplicación autenticadora a la que quies tresferir esta entrada</string>
@@ -372,20 +426,25 @@
<string name="title_activity_edit_entry">Edición d\'una entrada</string>
<string name="title_activity_scan_qr">Escanéu d\'un códigu QR</string>
<string name="title_activity_import_entries">Importación d\'entraes</string>
<string name="title_activity_licenses">Llicencies de terceros</string>
<string name="dialog_wipe_entries_title">Borráu d\'entraes</string>
<string name="dialog_wipe_entries_message">L\'arca xá contién entraes. ¿Quies quitales enantes d\'importar esti ficheru?\n\n<b>Al facelo, vas perder permanentemente l\'accesu a les entraes esistentes de l\'arca.</b></string>
<string name="dialog_wipe_entries_checkbox">Borrar el conteníu de l\'arca</string>
<string name="panic_trigger_ignore_toast">Aegis recibió un eventu de pánicu mas la opción ta desactivada</string>
<string name="pref_panic_trigger_title">Desaniciar l\'arca n\'eventos de pánicu</string>
<string name="pref_panic_trigger_summary">Desaniciar l\'arca al recibir un eventu de pánicu de Ripple</string>
<string name="import_vault">Importar un arca d\'Aegis</string>
<string name="importer_help_2fas">Forni una copia de seguranza de 2FAS Authenticator.</string>
<string name="importer_help_aegis">Forni un ficheru d\'esportación/copia de seguranza d\'Aegis.</string>
<string name="importer_help_authenticator_plus">Forni un ficheru d\'esportación d\'Authenticator Plus que se consigue pente <b>Configuración -&gt; Copia de seguranza ya restauración -&gt; Esportar como testu ya HTML</b>.</string>
<string name="importer_help_authy">Forni una copia del ficheru <b>com.authy.storage.tokens.authenticator.xml</b> que s\'alluga na direición «/data/data/com.authy.authy/shared_prefs/», dientro del direutoriu del almacenamientu internu d\'Authy.</string>
<string name="importer_help_andotp">Forni un ficheru d\'esportación/copia de seguranza d\'AndOTP.</string>
<string name="importer_help_bitwarden">Forni un ficheru d\'esportación/copia de seguranza de Bitwarden. Los ficheros cifraos nun son compatibles.</string>
<string name="importer_help_battle_net_authenticator">Forni una copia del ficheru <b>/data/data/com.blizzard.messenger/shared_prefs/com.blizzard.messenger.authenticator_preferences.xml</b>, llocalizáu nel direutoriu del almacenamientu internu de Battle.net Authenticator.</string>
<string name="importer_help_duo">Forni una copia del ficheru <b>accounts.json</b> que s\'alluga na direición «/data/data/com.duosecurity.duomobile/files/duokit/», dientro del direutoriu del almacenamientu internu de DUO.</string>
<string name="importer_help_freeotp">FreeOTP 2: forni una copia de seguranza.\nFreeOTP 1.x: forni una copia del ficheru <b>/data/data/org.fedorahosted.freeotp/shared_prefs/tokens.xml</b>, llocalizáu nel direutoriu del almacenamientu internu de FreeOTP.</string>
<string name="importer_help_freeotp_plus">Forni un ficheru d\'esportación de FreeOTP+.</string>
<string name="importer_warning_title_freeotp2">Compatibilidá con FreeOTP 2</string>
<string name="importer_help_google_authenticator"><b>Namás les bases de datos de la versión 5.10 ya les inferiores de Google Authenticator son compatibles.</b>\n\nForni una copia de <b>databases</b> que s\'alluga na direición «/data/data/com.google.android.apps.authenticator2/databases/», dientro del direutoriu del almacenamientu internu de Google Authenticator.</string>
<string name="importer_help_microsoft_authenticator">Forni una copia del ficheru <b>PhoneFactor</b> que s\'alluga na direición «/data/data/com.azure.authenticator/databases/», dientro del direutoriu del almacenamientu internu de Microsoft Authenticator.</string>
<string name="importer_help_plain_text">Forni un ficheru en testu planu con una URI de Google Authenticator en cada llinia.</string>
@@ -402,6 +461,15 @@
<string name="pref_grouping_size_two">Grupos de 2</string>
<string name="pref_grouping_size_three">Grupos de 3</string>
<string name="pref_grouping_size_four">Grupos de 4</string>
<string name="pref_copy_behavior_never">Enxamás</string>
<string name="pref_copy_behavior_single_tap">Un toque</string>
<string name="pref_copy_behavior_double_tap">Dos toques</string>
<string name="pref_account_name_position_end">Al llau l\'emisor</string>
<string name="pref_account_name_position_below">Embaxo l\'emisor</string>
<plurals name="time_elapsed_minutes" tools:ignore="UnusedResources">
<item quantity="one">fai %d minutu</item>
<item quantity="other">fai %d minutos</item>
</plurals>
<plurals name="dropdown_checkboxes_default_count">
<item quantity="one">Seleicionóse %d elementu</item>
<item quantity="other">Seleicionáronse %d elementos</item>
@@ -0,0 +1,5 @@
<?xml version="1.0" encoding="utf-8"?>
<resources>
<string name="system_theme_title">Системна</string>
<string name="system_amoled_theme_title">Системна (AMOLED)</string>
</resources>
+22 -1
View File
@@ -227,6 +227,8 @@
<string name="snackbar_authentication_method">Изберете метод за удостоверяване</string>
<string name="encrypting_vault">Шифроване на трезора</string>
<string name="exporting_vault">Изнасяне на трезора</string>
<string name="optimizing_icon">Оптимизиране на пиктограма</string>
<string name="optimizing_icon_multiple">Оптимизиране на пиктограми %1$d/%2$d</string>
<string name="reading_file">Прочитане на файла</string>
<string name="requesting_root_access">Достъп до правата на суперпотребителя</string>
<string name="analyzing_qr">Анализиране на QR кода</string>
@@ -361,8 +363,25 @@
<string name="preference_reset_usage_count_dialog">Сигурни ли сте, че желаете броя на използванията на всеки запис в хранилището да бъде нулиран?</string>
<string name="note" comment="Users can add a note to an entry">Бележка</string>
<string name="clear">Изчистване</string>
<string name="dialog_duplicate_entry_title" comment="'Duplicate' is a noun here">Дублирано</string>
<string name="dialog_duplicate_entry_message">Записът има същото име и издател като вече съществуващи записи. Как да продължим?</string>
<string name="dialog_duplicate_entry_overwrite_title">Презаписване на съществуващите записи</string>
<string name="dialog_duplicate_entry_overwrite_subtitle">Заменя съществуващите записи с новия. Действието е необратимо</string>
<string name="dialog_duplicate_entry_suffix_title">Добавяне на наставка</string>
<string name="dialog_duplicate_entry_suffix_subtitle">Добавяне на наставка към името на записа. Новото име ще бъде: %s</string>
<string name="dialog_duplicate_entry_cancel_title">Отказ от запазването</string>
<string name="dialog_duplicate_entry_cancel_subtitle">Дава възможност за повторна промяна преди запазване</string>
<plurals name="dialog_duplicate_entry_overwrite_dialog_message">
<item quantity="one">Желаете ли да бъде премахнат %d елемент с име: \n\n%s - %s</item>
<item quantity="other">Желаете ли да бъдат премахнати %d елемента с име: \n\n%s - %s</item>
</plurals>
<string name="dialog_duplicate_entry_overwrite_dialog_title">Потвърждаване на премахване</string>
<string name="pref_haptic_feedback_summary">Кара устройството да вибрира при презареждане на кодовете</string>
<string name="pref_haptic_feedback_title">Тактилна обратна връзка</string>
<string name="pref_highlight_entry_title">Осветяване на запис при докосване</string>
<string name="pref_highlight_entry_summary">Прави записите в списъка по-лесни за различаване един от друг, като при докосване временно ги осветява</string>
<string name="pref_groups_multiselect_title">Групи за множествен избор</string>
<string name="pref_groups_multiselect_summary">Дава възможност за избиране на няколко групи едновременно</string>
<string name="pref_minimize_on_copy_title">Свиване при копиране</string>
<string name="pref_minimize_on_copy_summary">Приложението се свива при копиране на код за достъп</string>
<string name="pref_copy_behavior_title">Копиране на кодове за защита в междинната памет</string>
@@ -466,6 +485,7 @@
<string name="unable_to_copy_uri_to_clipboard">Грешка при копиране на адреса</string>
<string name="uri_copied_to_clipboard">Адресът е копиран</string>
<string name="transfer_entry_description">Сканирайте QR кода с приложението за удостоверяване, в което искате да прехвърлите този запис</string>
<string name="transfer_entry_brightness">Докоснете QR, за да превключите пълна яркост при цял екран</string>
<string name="google_auth_compatible_transfer_description">Сканирайте тези кодове в Aegis или Google Authenticator.\n\nПоради ограничения в приложението на Google Authenticator са включени само кодовете, които използват SHA1 и извеждат 6 цифри</string>
<string name="password_strength_very_weak">Много слаба</string>
<string name="password_strength_weak">Слаба</string>
@@ -499,7 +519,6 @@
<string name="importer_help_2fas">Изберете файл с резервно копие на 2FAS Authenticator.</string>
<string name="importer_help_aegis">Изберете изнесен файл или резервно копие на Aegis.</string>
<string name="importer_help_authenticator_plus">Изберете файл с резервно копие на Authenticator Plus, получен от <b>Настройки → Резервни копия и възстановяване → Изнасяне като текст и HTML</b>.</string>
<string name="importer_help_authenticator_pro">Изберете файл с резервно копие на Authenticator Pro, получен от <b>Настройки → Резервно копие → Резервно копие в шифрован файл (препотъчително)</b>.</string>
<string name="importer_help_authy">Изберете копие на файла <b>/data/data/com.authy.authy/shared_prefs/com.authy.storage.tokens.authenticator.xml</b>, който се намира в папката с данни на Authy.</string>
<string name="importer_help_andotp">Изберете изнесен файл или резервно копие на andOTP.</string>
<string name="importer_help_bitwarden">Изберете изнесен файл или резервно копие на Bitwarden. Шифровани файлове не се поддържат.</string>
@@ -513,7 +532,9 @@
<string name="importer_help_google_authenticator"><b>Поддържат се файлове на Google Authenticator v5.10 и по-предишни издания.</b>\n\nИзберете копие на файла <b>/data/data/com.google.android.apps.authenticator2/databases/databases</b>, който се намира в папката с данни на Google Authenticator.</string>
<string name="importer_help_microsoft_authenticator">Изберете копие на файла <b>/data/data/com.azure.authenticator/databases/PhoneFactor</b>, който се намира в папката с данни на Microsoft Authenticator.</string>
<string name="importer_help_plain_text">Изберете чист текстов файл с Google Authenticator URI, по един на ред.</string>
<string name="importer_help_proton_authenticator">Изберете файл с резервно копие (.json) на Proton Authenticator, получен от <b>Настройки → Изнасяне</b>.</string>
<string name="importer_help_steam"><b>Поддържат се файлове на Steam v3.0 и по-нови издания.</b>\n\nИзберете копие на файла <b>/data/data/com.valvesoftware.android.steam.community/files/Steamguard-*.json</b>, който се намира в папката с данни на Steam.</string>
<string name="importer_help_stratum">Изберете файл с резервно копие на Stratum, получен от <b>Настройки → Резервно копие → Резервно копие в шифрован файл (препотъчително)</b>.</string>
<string name="importer_help_totp_authenticator">Изберете изнесен файл от TOTP Authenticator.</string>
<string name="importer_help_winauth">Изберете изнесен файл от WinAuth.</string>
<string name="import_assign_icons_dialog_title">Задаване на икони</string>
@@ -0,0 +1,5 @@
<?xml version="1.0" encoding="utf-8"?>
<resources>
<string name="system_theme_title">Predeterminat del sistema</string>
<string name="system_amoled_theme_title">Predeterminat del sistema (AMOLED)</string>
</resources>
+22 -1
View File
@@ -227,6 +227,8 @@
<string name="snackbar_authentication_method">Si us plau, tria un mètode d\'autenticació</string>
<string name="encrypting_vault">Xifrant la caixa forta</string>
<string name="exporting_vault">Exporta la caixa forta</string>
<string name="optimizing_icon">Optimitzant icona</string>
<string name="optimizing_icon_multiple">Optimitzant icones %1$d/%2$d</string>
<string name="reading_file">S\'està llegint el fitxer</string>
<string name="requesting_root_access">Demanant accés root</string>
<string name="analyzing_qr">Anàlisi del codi QR</string>
@@ -361,8 +363,25 @@
<string name="preference_reset_usage_count_dialog">Segur que vols reiniciar el comptador d\'us de cada entrada a 0?</string>
<string name="note" comment="Users can add a note to an entry">Nota</string>
<string name="clear">Neteja</string>
<string name="dialog_duplicate_entry_title" comment="'Duplicate' is a noun here">Entrada duplicada</string>
<string name="dialog_duplicate_entry_message">Aquesta entrada té el mateix nom i emissor que una altra entrada. Com vols continuar?</string>
<string name="dialog_duplicate_entry_overwrite_title">Sobreescriure l\'entrada/des existents</string>
<string name="dialog_duplicate_entry_overwrite_subtitle">Reemplaçar l\'entrada/des existents per la nova. Aquesta acció no es pot desfer</string>
<string name="dialog_duplicate_entry_suffix_title">Afegir un sufix</string>
<string name="dialog_duplicate_entry_suffix_subtitle">Afegir un sufix al nom d\'aquesta nova entrada. El nou nom serà: %s</string>
<string name="dialog_duplicate_entry_cancel_title">Cancel·la el guardat</string>
<string name="dialog_duplicate_entry_cancel_subtitle">Et permet editar l\'entrada abans de tornar a intentar el guardat</string>
<plurals name="dialog_duplicate_entry_overwrite_dialog_message">
<item quantity="one">Estàs segur de voler esborrar %d entrada amb aquest nom:\n\n%s - %s</item>
<item quantity="other">Estàs segur de voler esborrar %d entrades amb aquests noms:\n\n%s - %s</item>
</plurals>
<string name="dialog_duplicate_entry_overwrite_dialog_title">Confirma la supressió</string>
<string name="pref_haptic_feedback_summary">Fes que el dispositiu vibri quan s\'actualitzin els codis</string>
<string name="pref_haptic_feedback_title">Resposta hàptica</string>
<string name="pref_highlight_entry_title">Il·luminar les fitxes al tocar</string>
<string name="pref_highlight_entry_summary">Fes les fitxes més fàcils de distingir de la resta il·luminant-les temporalment quan les toquis</string>
<string name="pref_groups_multiselect_title">Selecció múltiple de grups</string>
<string name="pref_groups_multiselect_summary">Permet la selecció de múltiples grups al mateix temps</string>
<string name="pref_minimize_on_copy_title">Minimitzar al copiar</string>
<string name="pref_minimize_on_copy_summary">Minimitzar l\'aplicació després de copiar una fitxa</string>
<string name="pref_copy_behavior_title">Copia les fitxes al porta-retalls</string>
@@ -464,6 +483,7 @@
<string name="unable_to_copy_uri_to_clipboard">No s\'ha pogut copiar la URI</string>
<string name="uri_copied_to_clipboard">URI copiada al porta-retalls</string>
<string name="transfer_entry_description">Escaneja aquest codi QR amb l\'aplicació d\'autenticació a la que vols transferir aquesta entrada</string>
<string name="transfer_entry_brightness">Toca el codi QR per canviar a màxima brillantor</string>
<string name="google_auth_compatible_transfer_description">Escanegeu aquests codis QR amb Aegis o Google Authenticator.\n\n A causa de les limitacions de l\'aplicació Google Authenticator, només s\'inclouen tokens TOTP &amp; HOTP que utilitzen SHA1 i produeixen codis de 6 dígits</string>
<string name="password_strength_very_weak">Molt feble</string>
<string name="password_strength_weak">Feble</string>
@@ -497,7 +517,6 @@
<string name="importer_help_2fas">Subministra un fitxer exportat del 2FAS Authenticator.</string>
<string name="importer_help_aegis">Subministra un fitxer exportat del Aegis.</string>
<string name="importer_help_authenticator_plus">Subministra un fitxer exportat del Authenticator Plus, obtingut amb <b>Settings -&gt; Backup &amp; Restore -&gt; Export as Text and HTML</b>.</string>
<string name="importer_help_authenticator_pro">Proveeix un fitxer exportat d\'Authenticat Pro, aconseguit a <b>Settings &gt; Back up &gt; Back up to encrypted file (recommended)</b>.</string>
<string name="importer_help_authy">Subministra una còpia de <b>/data/data/com.authy.authy/shared_prefs/com.authy.storage.tokens.authenticator.xml</b>, que està a l\'emmagatzematge intern del teu dispositiu, al directori del Authy.</string>
<string name="importer_help_andotp">Subministra un fitxer exportat del andOTP.</string>
<string name="importer_help_bitwarden">Subministreu un fitxer d\'exportació/còpia de seguretat de Bitwarden. Els fitxers xifrats no són compatibles.</string>
@@ -511,7 +530,9 @@
<string name="importer_help_google_authenticator">&lt;b&gt;Només s\'admeten fitxers de bases de dades de Google Authenticator v5.10 i anteriors&lt;/b&gt;.\n\nProporcioneu una còpia de &lt;b&gt;/data/data/com.google.android.apps.authenticator2/databases/databases&lt; /b&gt;, situada al directori d\'emmagatzematge intern de Google Authenticator.</string>
<string name="importer_help_microsoft_authenticator">Subministra una còpia de <b>/data/data/com.azure.authenticator/databases/PhoneFactor</b>, que està a l\'emmagatzematge intern del teu dispositiu, al directori del Microsoft Authenticator.</string>
<string name="importer_help_plain_text">Subministra un fitxer de text pla amb una URI de Google Authenticator a cada línia.</string>
<string name="importer_help_proton_authenticator">Subministra un fitxer (.json) exportat del Proton Authenticator, obtingut a través de <b>Configuració -&gt; Exportar</b>.</string>
<string name="importer_help_steam"><b>Steam v3.0 i posteriors no són compatibles</b>. Proporcioneu una còpia de <b>/data/data/com.valvesoftware.android.steam.community/files/Steamguard-*.json</b>, que es troba al directori d\'emmagatzematge intern de Steam.</string>
<string name="importer_help_stratum">Proveeix un fitxer exportat de Stratum, aconseguit a <b>Settings &gt; Back up &gt; Back up to encrypted file (recommended)</b>.</string>
<string name="importer_help_totp_authenticator">Subministra un fitxer exportat del TOTP Authenticator.</string>
<string name="importer_help_winauth">Subministra un fitxer exportat del WinAuth.</string>
<string name="import_assign_icons_dialog_title">Assignar icones</string>
@@ -0,0 +1,5 @@
<?xml version="1.0" encoding="utf-8"?>
<resources>
<string name="system_theme_title">Podle systému</string>
<string name="system_amoled_theme_title">Podle systému (AMOLED)</string>
</resources>
+23 -1
View File
@@ -233,6 +233,8 @@
<string name="snackbar_authentication_method">Zvolte prosím způsob ověření</string>
<string name="encrypting_vault">Šifrování trezoru</string>
<string name="exporting_vault">Exportování trezoru</string>
<string name="optimizing_icon">Optimalizace ikony</string>
<string name="optimizing_icon_multiple">Optimalizace ikon %1$d/%2$d</string>
<string name="reading_file">Čtení souboru</string>
<string name="requesting_root_access">Žádání o přístup root</string>
<string name="analyzing_qr">Analyzování QR kódu</string>
@@ -379,8 +381,27 @@
<string name="preference_reset_usage_count_dialog">Opravdu chcete nastavit počet použití všech položek na 0?</string>
<string name="note" comment="Users can add a note to an entry">Poznámka</string>
<string name="clear">Vymazat</string>
<string name="dialog_duplicate_entry_title" comment="'Duplicate' is a noun here">Duplicitní položka</string>
<string name="dialog_duplicate_entry_message">Tato položka má stejný název a poskytovatele, jako jedna nebo více existujících. Jak chcete pokračovat?</string>
<string name="dialog_duplicate_entry_overwrite_title">Přepsat existující položky</string>
<string name="dialog_duplicate_entry_overwrite_subtitle">Nahradit existující položku nebo položky novou. Tato akce je nevratná</string>
<string name="dialog_duplicate_entry_suffix_title">Přidat příponu</string>
<string name="dialog_duplicate_entry_suffix_subtitle">Přidat příponu k názvu této položky. Nový název bude: %s</string>
<string name="dialog_duplicate_entry_cancel_title">Zrušit uložení</string>
<string name="dialog_duplicate_entry_cancel_subtitle">Umožňuje upravit položku před pokusem o její opětovné uložení</string>
<plurals name="dialog_duplicate_entry_overwrite_dialog_message">
<item quantity="one">Opravdu chcete odstranit %d položku s následujícím názvem:\n\n%s - %s</item>
<item quantity="few">Opravdu chcete odstranit %d položky s následujícím názvem:\n\n%s - %s</item>
<item quantity="many">Opravdu chcete odstranit %d položek s následujícím názvem:\n\n%s - %s</item>
<item quantity="other">Opravdu chcete odstranit %d položek s následujícím názvem:\n\n%s - %s</item>
</plurals>
<string name="dialog_duplicate_entry_overwrite_dialog_title">Potvrdit odstranění</string>
<string name="pref_haptic_feedback_summary">Vibrovat při změně kódů</string>
<string name="pref_haptic_feedback_title">Haptická odezva</string>
<string name="pref_highlight_entry_title">Zvýraznit tokeny po klepnutí</string>
<string name="pref_highlight_entry_summary">Usnadnit vzájemné rozlišení tokenů dočasným zvýrazněním po kleputí</string>
<string name="pref_groups_multiselect_title">Vícenásobný výběr skupin</string>
<string name="pref_groups_multiselect_summary">Povolit současný výběr více skupin</string>
<string name="pref_minimize_on_copy_title">Minimalizovat při kopírování</string>
<string name="pref_minimize_on_copy_summary">Minimalizovat aplikaci po zkopírování tokenu</string>
<string name="pref_copy_behavior_title">Zkopírovat tokeny do schránky</string>
@@ -490,6 +511,7 @@
<string name="unable_to_copy_uri_to_clipboard">Nepodařilo se zkopírovat URI do schránky</string>
<string name="uri_copied_to_clipboard">URI zkopírována do schránky</string>
<string name="transfer_entry_description">Naskenujte tento QR kód ověřovací aplikací, do které chcete položku přenést</string>
<string name="transfer_entry_brightness">Klepnutím na QR kód přepnete na jas celé obrazovky</string>
<string name="google_auth_compatible_transfer_description">Naskenujte tyto QR kódy s aplikací Aegis nebo Google Authenticator.\n\nKvůli limitacím aplikace Google Authenticator jsou zahrnuty pouze 6-místné tokeny TOTP a HOTP využívající SHA1</string>
<string name="password_strength_very_weak">Velmi slabé</string>
<string name="password_strength_weak">Slabé</string>
@@ -525,7 +547,6 @@
<string name="importer_help_2fas">Dodejte záložní soubor 2FAS Authenticator.</string>
<string name="importer_help_aegis">Dodejte soubor exportu/zálohy Aegis.</string>
<string name="importer_help_authenticator_plus">Dodejte exportovaný soubor Authenticator Plus získaný přes <b>Nastavení -&gt; Záloha a obnovení -&gt; Exportovat jako text a HTML</b>.</string>
<string name="importer_help_authenticator_pro">Dodejte exportovaný soubor Authenticator Pro získaný přes <b>Nastavení -&gt; Záloha -&gt; Exportovat do šifrovaného souboru (doporučeno)</b>.</string>
<string name="importer_help_authy">Dodejte kopii <b>/data/data/com.authy.authy/shared_prefs/com.authy.storage.tokens.authenticator.xml</b>, která se nachází v interním úložišti Authy.</string>
<string name="importer_help_andotp">Dodejte soubor exportu/zálohy andOTP.</string>
<string name="importer_help_bitwarden">Vyberte soubor exportu/zálohy Bitwardenu. Šifrované soubory nejsou podporovány.</string>
@@ -540,6 +561,7 @@
<string name="importer_help_microsoft_authenticator">Dodejte kopii <b>/data/data/com.azure.authenticator/databases/PhoneFactor</b>, která se nachází v interním úložišti Microsoft Authenticator.</string>
<string name="importer_help_plain_text">Dodejte prostý textový soubor Google Authenticator URI na každý řádek.</string>
<string name="importer_help_steam"><b>Steam v3.0 a novější nejsou podporovány</b>. Dodejte kopii souboru <b>/data/data/com.valvesoftware.android.steam.community/files/Steamguard-*.json</b> umístěného v interním úložném adresáři aplikace Steam.</string>
<string name="importer_help_stratum">Dodejte exportovaný soubor Stratum získaný přes <b>Nastavení -&gt; Záloha -&gt; Exportovat do šifrovaného souboru (doporučeno)</b>.</string>
<string name="importer_help_totp_authenticator">Dodejte soubor exportu TOTP.</string>
<string name="importer_help_winauth">Dodejte soubor exportu WinAuth.</string>
<string name="import_assign_icons_dialog_title">Přiřadit ikony</string>
@@ -0,0 +1,5 @@
<?xml version="1.0" encoding="utf-8"?>
<resources>
<string name="system_theme_title">Systemstandard</string>
<string name="system_amoled_theme_title">Systemstandard (AMOLED)</string>
</resources>
+21 -1
View File
@@ -227,6 +227,8 @@
<string name="snackbar_authentication_method">Vælg bekræftelsesmetode</string>
<string name="encrypting_vault">Krypterer Boksen</string>
<string name="exporting_vault">Eksporterer Boksen</string>
<string name="optimizing_icon">Optimerer ikon</string>
<string name="optimizing_icon_multiple">Optimerer ikoner %1$d/%2$d</string>
<string name="reading_file">Læser fil</string>
<string name="requesting_root_access">Anmoder om root-adgang</string>
<string name="analyzing_qr">Analyserer QR-kode</string>
@@ -361,8 +363,25 @@
<string name="preference_reset_usage_count_dialog">Sikker på, at alle brugstællingsposter i din Boks skal nulstilles?</string>
<string name="note" comment="Users can add a note to an entry">Notat</string>
<string name="clear">Ryd</string>
<string name="dialog_duplicate_entry_title" comment="'Duplicate' is a noun here">Dubletpost</string>
<string name="dialog_duplicate_entry_message">Denne post har samme navn og udsteder som mindst én eksisterende post. Hvordan skal der fortsættes?</string>
<string name="dialog_duplicate_entry_overwrite_title">Overskriv eksisterende post(er)</string>
<string name="dialog_duplicate_entry_overwrite_subtitle">Erstat eksisterende post(er) med den nye. Denne handling kan ikke fortrydes</string>
<string name="dialog_duplicate_entry_suffix_title">Tilføj endelse</string>
<string name="dialog_duplicate_entry_suffix_subtitle">Føj en endelse til navnet på denne nye post. Det nye navn vil være: %s</string>
<string name="dialog_duplicate_entry_cancel_title">Afbryd gem</string>
<string name="dialog_duplicate_entry_cancel_subtitle">Muliggør at redigere posten inden den igen forsøges gemt</string>
<plurals name="dialog_duplicate_entry_overwrite_dialog_message">
<item quantity="one">Sikker på, at der skal slettes %d post med flg. navn:\n\n%s - %s</item>
<item quantity="other">Sikker på, at der skal slettes %d poster med flg. navn:\n\n%s - %s</item>
</plurals>
<string name="dialog_duplicate_entry_overwrite_dialog_title">Bekræft sletning</string>
<string name="pref_haptic_feedback_summary">Få enheden til at vibrere, når koder opdateres</string>
<string name="pref_haptic_feedback_title">Haptisk feedback</string>
<string name="pref_highlight_entry_title">Fremhæv tokener ved tryk</string>
<string name="pref_highlight_entry_summary">Gør tokener lettere at skelne fra hinanden ved midlertidigt at fremhæve dem, når der trykkes på dem</string>
<string name="pref_groups_multiselect_title">Multivalg af grupper</string>
<string name="pref_groups_multiselect_summary">Muliggør valg af flere grupper samtidig</string>
<string name="pref_minimize_on_copy_title">Minimér under kopiering</string>
<string name="pref_minimize_on_copy_summary">Minimér appen efter kopiering af et token</string>
<string name="pref_copy_behavior_title">Kopiér tokener til udklipsholder</string>
@@ -466,6 +485,7 @@
<string name="unable_to_copy_uri_to_clipboard">Kunne ikke kopiere URI til udklipsholder</string>
<string name="uri_copied_to_clipboard">URI kopieret til udklipsholder</string>
<string name="transfer_entry_description">Scan denne QR-kode med den autentificerings-app, du gerne vil overføre denne post til</string>
<string name="transfer_entry_brightness">Tryk på QR-koden for at skifte fuldskærmslysstyrke</string>
<string name="google_auth_compatible_transfer_description">Skan disse QR-koder med Aegis eller Google Authenticator.\n\nGrundet begrænsninger i Google Authenticator-appen inkluderes kun TOTP- og HOTP-tokener, som bruger SHA1 og genererer 6-cifrede koder</string>
<string name="password_strength_very_weak">Meget svag</string>
<string name="password_strength_weak">Svag</string>
@@ -499,7 +519,6 @@
<string name="importer_help_2fas">Stil en 2FAS-godkendelse sikkerhedskopifil til rådighed.</string>
<string name="importer_help_aegis">Levér en Aegis eksport/backup fil.</string>
<string name="importer_help_authenticator_plus">Levér en Authenticator Plus-eksportfil opnået gennem <b>Indstillinger -&gt; Sikkerhedskopi &amp; Gendan -&gt; Eksport som tekst og HTML</b>.</string>
<string name="importer_help_authenticator_pro">Benyt en Authenticator Pro-eksportfil genereret via <b>Indstillinger -&gt; Sikkerhedskopiering -&gt; Sikkerhedskopiering til krypteret fil (anbefalet)</b>.</string>
<string name="importer_help_authy">Levér en kopi af <b>/data/data/com.authy.authy/shared_prefs/com.authy.storage.tokens.authenticator.xml</b>, der er placeret i den interne lagermappe i Authy.</string>
<string name="importer_help_andotp">Levér en andOTP eksport/backup fil.</string>
<string name="importer_help_bitwarden">Vælg en Bitwarden-eksport-/sikkerhedskopifil. Krypterede filer understøttes ikke.</string>
@@ -514,6 +533,7 @@
<string name="importer_help_microsoft_authenticator">Levér en kopi af <b>/data/data/com.azure.authenticator/databases/PhoneFactor</b>, der er placeret i den interne lagermappe i Microsoft Authenticator.</string>
<string name="importer_help_plain_text">Levér en almindelig tekstfil med en Google Authenticator URI på hver linje.</string>
<string name="importer_help_steam"><b>Steam v3.0 og nyere understøttes ikke</b>. Levér en kopi af <b>/data/data/com.valvesoftware.android.steam.community/files/Steamguard-*.json</b> fra den interne lagermappe i Steam.</string>
<string name="importer_help_stratum">Benyt en Stratum-eksportfil genereret via <b>Indstillinger -&gt; Sikkerhedskopiering -&gt; Sikkerhedskopiering til krypteret fil (anbefalet)</b>.</string>
<string name="importer_help_totp_authenticator">Levér en TOTP Authenticator eksportfil.</string>
<string name="importer_help_winauth">Levér en WinAuth eksportfil.</string>
<string name="import_assign_icons_dialog_title">Tildel ikoner</string>
@@ -0,0 +1,5 @@
<?xml version="1.0" encoding="utf-8"?>
<resources>
<string name="system_theme_title">Systemvorgabe</string>
<string name="system_amoled_theme_title">Systemvorgabe (AMOLED)</string>
</resources>
+23 -3
View File
@@ -104,7 +104,7 @@
<string name="pref_auto_lock_summary">Wenn %s</string>
<string name="pref_auto_lock_summary_disabled">Deaktiviert</string>
<string name="pref_auto_lock_prompt">Aegis automatisch sperren, wenn</string>
<string name="pref_auto_lock_type_back_button">Die Zurück-Taste gedrückt wird</string>
<string name="pref_auto_lock_type_back_button">Die \"Zurück-Taste\" gedrückt wird</string>
<string name="pref_auto_lock_type_minimize">Die App minimiert wird</string>
<string name="pref_auto_lock_type_device_lock">Das Gerät gesperrt wird</string>
<string name="pref_backup_password_category">Sicherung und Exportdatei</string>
@@ -128,7 +128,7 @@
<string name="no_events_description">Es wurden keine wichtigen Ereignisse innerhalb der App gemeldet</string>
<string name="event_title_vault_unlocked">Datenbank entsperrt</string>
<string name="event_description_vault_unlocked">Die Datenbank wurde erfolgreich entsperrt</string>
<string name="event_title_backup_created">Sicherungdsdatei erstellt</string>
<string name="event_title_backup_created">Sicherungsdatei erstellt</string>
<string name="event_description_backup_created">Eine Sicherungsdatei wurde erfolgreich erstellt</string>
<string name="event_title_android_backup_created">Sicherungsdatei von Android erstellt</string>
<string name="event_description_android_backup_created">Eine Sicherungsdatei wurde erfolgreich von Android erstellt</string>
@@ -227,6 +227,8 @@
<string name="snackbar_authentication_method">Bitte wähle eine Authentifizierungsmethode aus</string>
<string name="encrypting_vault">Verschlüsselung der Datenbank</string>
<string name="exporting_vault">Exportieren der Datenbank</string>
<string name="optimizing_icon">Symbol wird optimiert</string>
<string name="optimizing_icon_multiple">Symbol %1$d/%2$d wird optimiert</string>
<string name="reading_file">Datei wird gelesen</string>
<string name="requesting_root_access">Root-Zugriff wird angefordert</string>
<string name="analyzing_qr">QR-Code wird analysiert</string>
@@ -361,8 +363,25 @@
<string name="preference_reset_usage_count_dialog">Den Verwendungszähler aller Einträge in der Datenbank auf 0 setzen?</string>
<string name="note" comment="Users can add a note to an entry">Notiz</string>
<string name="clear">Löschen</string>
<string name="dialog_duplicate_entry_title" comment="'Duplicate' is a noun here">Eintrag bereits vorhanden</string>
<string name="dialog_duplicate_entry_message">Dieser Eintrag hat den gleichen Namen und Herausgeber wie ein oder mehrere bestehende Einträge. Wie möchtest du fortfahren?</string>
<string name="dialog_duplicate_entry_overwrite_title">Vorhandene(n) Eintrag/Einträge überschreiben</string>
<string name="dialog_duplicate_entry_overwrite_subtitle">Vorhandene(n) Eintrag/Einträge durch den neuen ersetzen. Die Aktion kann nicht rückgängig gemacht werden</string>
<string name="dialog_duplicate_entry_suffix_title">Suffix hinzufügen</string>
<string name="dialog_duplicate_entry_suffix_subtitle">Dem Namen des neuen Eintrags ein Suffix hinzufügen. Der neue Name lautet: %s</string>
<string name="dialog_duplicate_entry_cancel_title">Nicht speichern</string>
<string name="dialog_duplicate_entry_cancel_subtitle">Ermöglicht das Bearbeiten des Eintrags, um ihn anschließend erneut zu speichern</string>
<plurals name="dialog_duplicate_entry_overwrite_dialog_message">
<item quantity="one">Möchtest du wirklich %d Eintrag mit folgendem Namen löschen?\n\n%s %s</item>
<item quantity="other">Möchtest du wirklich %d Einträge mit folgendem Namen löschen?\n\n%s %s</item>
</plurals>
<string name="dialog_duplicate_entry_overwrite_dialog_title">Löschen bestätigen</string>
<string name="pref_haptic_feedback_summary">Gerät vibrieren lassen, wenn sich Codes aktualisieren</string>
<string name="pref_haptic_feedback_title">Haptisches Feedback</string>
<string name="pref_highlight_entry_title">Token beim Antippen hervorheben</string>
<string name="pref_highlight_entry_summary">Token beim Antippen hervorheben, um sie leichter voneinander unterscheiden zu können</string>
<string name="pref_groups_multiselect_title">Mehrere Gruppen auswählen</string>
<string name="pref_groups_multiselect_summary">Das Auswählen mehrerer Gruppen auf einmal ermöglichen</string>
<string name="pref_minimize_on_copy_title">Beim Kopieren minimieren</string>
<string name="pref_minimize_on_copy_summary">App nach dem Kopieren eines Tokens minimieren</string>
<string name="pref_copy_behavior_title">Token in die Zwischenablage kopieren</string>
@@ -466,6 +485,7 @@
<string name="unable_to_copy_uri_to_clipboard">URI konnte nicht in die Zwischenablage kopiert werden</string>
<string name="uri_copied_to_clipboard">URI in die Zwischenablage kopiert</string>
<string name="transfer_entry_description">Scanne diesen QR-Code mit der Authentifizierungs-App, zu der du diesen Eintrag übertragen möchtest</string>
<string name="transfer_entry_brightness">QR-Code antippen, um die Helligkeit zu ändern</string>
<string name="google_auth_compatible_transfer_description">Scanne diese QR-Codes mit Aegis oder Google Authenticator.\n\nAufgrund der Einschränkungen der Google Authenticator-App sind nur TOTP- und HOTP-Token enthalten, die SHA1 verwenden und 6-stellige Codes erzeugen</string>
<string name="password_strength_very_weak">Sehr schwach</string>
<string name="password_strength_weak">Schwach</string>
@@ -499,7 +519,6 @@
<string name="importer_help_2fas">Gib eine 2FAS-Authenticator-Sicherungsdatei an.</string>
<string name="importer_help_aegis">Gib eine Aegis-Export-/Sicherungsdatei an.</string>
<string name="importer_help_authenticator_plus">Gib eine Authenticator-Plus-Exportdatei an, die du über <b>Einstellungen -&gt; Sicherung &amp; Rücksicherung -&gt; Exportieren als Text und HTML Format</b> erhältst.</string>
<string name="importer_help_authenticator_pro">Gib eine Authenticator-Pro-Exportdatei an, die du über <b>Einstellungen -&gt; Sicherung -&gt; Als verschlüsselte Datei sichern (empfohlen)</b> erhältst.</string>
<string name="importer_help_authy">Gib eine Kopie von <b>/data/data/com.authy.authy/shared_prefs/com.authy.storage.tokens.authenticator.xml</b> an, die sich im internen Speicherverzeichnis von Authy befindet.</string>
<string name="importer_help_andotp">Gib eine andOTP-Export-/Sicherungsdatei an.</string>
<string name="importer_help_bitwarden">Gib eine Bitwarden-Export-/Sicherungsdatei an. Verschlüsselte Dateien werden nicht unterstützt.</string>
@@ -514,6 +533,7 @@
<string name="importer_help_microsoft_authenticator">Gib eine Kopie von <b>/data/data/com.azure.authenticator/databases/PhoneFactor</b> an, die sich im internen Speicherverzeichnis von Microsoft Authenticator befindet.</string>
<string name="importer_help_plain_text">Gib eine Klartextdatei an, die in jeder Zeile eine Google-Authenticator-URI enthält.</string>
<string name="importer_help_steam"><b>Steam v3.0 und neuer wird nicht unterstützt</b>. Gib eine Kopie von <b>/data/data/com.valvesoftware.android.steam.community/files/Steamguard-*.json</b> an, die sich im internen Speicherverzeichnis von Steam befindet.</string>
<string name="importer_help_stratum">Gib eine Stratum-Exportdatei an, die du über <b>Einstellungen -&gt; Sicherung -&gt; Als verschlüsselte Datei sichern (empfohlen)</b> erhältst.</string>
<string name="importer_help_totp_authenticator">Gib eine TOTP-Authenticator-Exportdatei an.</string>
<string name="importer_help_winauth">Gib eine WinAuth-Exportdatei an.</string>
<string name="import_assign_icons_dialog_title">Symbole zuweisen</string>
@@ -0,0 +1,5 @@
<?xml version="1.0" encoding="utf-8"?>
<resources>
<string name="system_theme_title">Προεπιλογή συστήματος</string>
<string name="system_amoled_theme_title">Προεπιλογή συστήματος (AMOLED)</string>
</resources>
+22 -1
View File
@@ -227,6 +227,8 @@
<string name="snackbar_authentication_method">Παρακαλώ επιλέξτε μέθοδο ελέγχου ταυτότητας</string>
<string name="encrypting_vault">Κρυπτογράφηση κρύπτης</string>
<string name="exporting_vault">Εξαγωγή της κρύπτης</string>
<string name="optimizing_icon">Βελτιστοποίηση εικονιδίου</string>
<string name="optimizing_icon_multiple">Βελτιστοποίηση εικονιδίων %1$d/%2$d</string>
<string name="reading_file">Ανάγνωση αρχείου</string>
<string name="requesting_root_access">Αίτηση πρόσβασης root</string>
<string name="analyzing_qr">Ανάλυση κωδικού QR</string>
@@ -361,8 +363,25 @@
<string name="preference_reset_usage_count_dialog">Είστε βέβαιοι ότι θέλετε να ορίσετε τον αριθμό χρήσης κάθε εισόδου στην κρύπτη σας στο 0;</string>
<string name="note" comment="Users can add a note to an entry">Σημείωση</string>
<string name="clear">Εκκαθάριση</string>
<string name="dialog_duplicate_entry_title" comment="'Duplicate' is a noun here">Διπλότυπη καταχώρηση</string>
<string name="dialog_duplicate_entry_message">Αυτή η καταχώρηση έχει το ίδιο όνομα και τον ίδιο εκδότη με μία ή περισσότερες υπάρχουσες καταχωρήσεις. Πώς θα θέλατε να προχωρήσετε;</string>
<string name="dialog_duplicate_entry_overwrite_title">Αντικατάσταση υπάρχουσας/ων καταχώρησης/ων</string>
<string name="dialog_duplicate_entry_overwrite_subtitle">Αντικατάσταση της υπάρχουσας καταχώρησης ή καταχωρήσεων με τη νέα. Αυτή η ενέργεια δεν μπορεί να αναιρεθεί</string>
<string name="dialog_duplicate_entry_suffix_title">Προσθήκη επιθήματος</string>
<string name="dialog_duplicate_entry_suffix_subtitle">Προσθέστε ένα επίθημα στο όνομα αυτής της νέας καταχώρησης. Το νέο όνομα θα είναι: %s</string>
<string name="dialog_duplicate_entry_cancel_title">Ακύρωση αποθήκευσης</string>
<string name="dialog_duplicate_entry_cancel_subtitle">Σας επιτρέπει να επεξεργαστείτε την καταχώρηση πριν επιχειρήσετε να την αποθηκεύσετε ξανά</string>
<plurals name="dialog_duplicate_entry_overwrite_dialog_message">
<item quantity="one">Είστε βέβαιοι ότι θέλετε να διαγράψετε την καταχώρηση %d με το ακόλουθο όνομα:\n\n%s - %s</item>
<item quantity="other">Είστε βέβαιοι ότι θέλετε να διαγράψετε καταχωρήσεις %d με το ακόλουθο όνομα:\n\n%s - %s</item>
</plurals>
<string name="dialog_duplicate_entry_overwrite_dialog_title">Επιβεβαίωση διαγραφής</string>
<string name="pref_haptic_feedback_summary">Κάντε τη συσκευή σας να δονείται όταν ανανεώνονται οι κωδικοί</string>
<string name="pref_haptic_feedback_title">Απτική ανάδραση</string>
<string name="pref_highlight_entry_title">Επισήμανση αναγνωριστικών όταν πατηθεί</string>
<string name="pref_highlight_entry_summary">Κάνετε τα αναγνωριστικά να ξεχωρίζουν ευκολότερα το ένα από το άλλο, επισημαίνοντας τα προσωρινά όταν τα πατήσετε</string>
<string name="pref_groups_multiselect_title">Πολλαπλή επιλογή ομάδων</string>
<string name="pref_groups_multiselect_summary">Να επιτρέπεται η επιλογή πολλαπλών ομάδων ταυτόχρονα</string>
<string name="pref_minimize_on_copy_title">Ελαχιστοποίηση κατά την αντιγραφή</string>
<string name="pref_minimize_on_copy_summary">Ελαχιστοποίηση της εφαρμογής μετά την αντιγραφή ενός αναγνωριστικού</string>
<string name="pref_copy_behavior_title">Αντιγραφή αναγνωριστικών στο πρόχειρο</string>
@@ -465,6 +484,7 @@
<string name="unable_to_copy_uri_to_clipboard">Αδυναμία αντιγραφής του URI στο πρόχειρο</string>
<string name="uri_copied_to_clipboard">Το URI αντιγράφηκε στο πρόχειρο</string>
<string name="transfer_entry_description">Σαρώστε αυτόν τον κωδικό QR με την εφαρμογή ελέγχου ταυτότητας στην οποία θέλετε να μεταφέρετε αυτήν την καταχώριση</string>
<string name="transfer_entry_brightness">Πατήστε τον κωδικό QR για εναλλαγή φωτεινότητας πλήρους οθόνης</string>
<string name="google_auth_compatible_transfer_description">Σαρώστε αυτούς τους κωδικούς QR με το Aegis ή το Google Authenticator.\n\nΛόγω περιορισμών της εφαρμογής Google Authenticator, περιλαμβάνονται μόνο αναγνωριστικά TOTP &amp; HOTP που χρησιμοποιούν SHA1 και παράγουν 6ψήφιους κωδικούς</string>
<string name="password_strength_very_weak">Πολύ αδύναμος</string>
<string name="password_strength_weak">Αδύναμος</string>
@@ -498,7 +518,6 @@
<string name="importer_help_2fas">Παρέχετε ένα αντίγραφο ασφαλείας 2FAS Authenticator.</string>
<string name="importer_help_aegis">Παρέχετε ένα αρχείο εξαγωγής/αντιγράφων ασφαλείας Aegis.</string>
<string name="importer_help_authenticator_plus">Παρέχετε ένα αρχείο εξαγωγής Authenticator Plus που αποκτήθηκε μέσω των <b> Ρυθμίσεων - &gt; Αντιγράφων ασφαλείας &amp; Επαναφορά - &gt; Εξαγωγή ως Κείμενο και HTML </b>.</string>
<string name="importer_help_authenticator_pro">Παρέχεται ένα αρχείο εξαγωγής Authenticator Pro που λαμβάνεται μέσω <b>Ρυθμίσεις -&gt; Δημιουργία αντιγράφων ασφαλείας -&gt; Δημιουργία σε κρυπτογραφημένο αρχείο (συνιστάται)</b>.</string>
<string name="importer_help_authy">Παρέχετε ένα αντίγραφο του <b>/data/data/com.authy.authy/shared_prefs/com.authy.storage.tokens.authenticator.xml</b>, που βρίσκεται στον κατάλογο εσωτερικής αποθήκευσης του Authy.</string>
<string name="importer_help_andotp">Παρέχετε ένα αρχείο εξαγωγής/αντιγράφου ασφαλείας andOTP.</string>
<string name="importer_help_bitwarden">Παρέχετε ένα αρχείο εξαγωγής/αντιγράφων ασφαλείας Bitwarden. Τα κρυπτογραφημένα αρχεία δεν υποστηρίζονται.</string>
@@ -512,7 +531,9 @@
<string name="importer_help_google_authenticator"><b>Υποστηρίζονται μόνο αρχεία βάσης δεδομένων από το Google Authenticator έκδοση 5.10 και παλαιότερα</b>.\n\nΠαρέχετε ένα αντίγραφο του <b>/data/data/com.google.android.apps.authenticator2/databases/databases</b>, που βρίσκεται στον εσωτερικό κατάλογο αποθήκευσης του Google Authenticator.</string>
<string name="importer_help_microsoft_authenticator">Παρέχεi ένα αντίγραφο του <b> /data/data/com.azure.authenticator/databases/PhoneFactor </b>, που βρίσκεται στον κατάλογο εσωτερικής αποθήκευσης του Microsoft Authenticator.</string>
<string name="importer_help_plain_text">Παρέχεi ένα αρχείο απλού κειμένου με ένα URI Επαληθευτή Google σε κάθε γραμμή.</string>
<string name="importer_help_proton_authenticator">Προμήθεια ενός αρχείου εξαγωγής επαληθευτή Proton (.json) που λαμβάνεται μέσω <b>Ρυθμίσεις -&gt; Εξαγωγή</b>.</string>
<string name="importer_help_steam"><b>Το Steam v3.0 και νεότερα δεν υποστηρίζονται</b>. Παρέχετε αντίγραφο του <b>/data/data/com.valvesoftware. ndroid.steam.community/files/Steamguard-*.json</b>, που βρίσκεται στον εσωτερικό κατάλογο αποθήκευσης του Steam.</string>
<string name="importer_help_stratum">Παροχή ενός αρχείου εξαγωγής Stratum που λαμβάνεται μέσω <b>Ρυθμίσεις -&gt; Αντίγραφα ασφαλείας -&gt; Δημιουργία αντιγράφου ασφαλείας σε κρυπτογραφημένο αρχείο (συνιστάται)</b>.</string>
<string name="importer_help_totp_authenticator">Παρέχετε ένα αρχείο εξαγωγής TOTP Authenticator.</string>
<string name="importer_help_winauth">Παρέχετε ένα αρχείο εξαγωγής WinAuth.</string>
<string name="import_assign_icons_dialog_title">Αντιστοίχιση εικονιδίων</string>
@@ -0,0 +1,5 @@
<?xml version="1.0" encoding="utf-8"?>
<resources>
<string name="system_theme_title">Del sistema</string>
<string name="system_amoled_theme_title">Del sistema (AMOLED)</string>
</resources>
+44 -23
View File
@@ -22,7 +22,7 @@
<string name="pref_cat_backups_android">Android</string>
<string name="pref_cat_backups_auto">Copias de seguridad automáticas</string>
<string name="pref_section_behavior_title">Comportamiento</string>
<string name="pref_section_behavior_summary">Personaliza la funcionalidad y cómo se interactua con la lista de claves.</string>
<string name="pref_section_behavior_summary">Personaliza la funcionalidad y cómo se interactúa con la lista de claves.</string>
<string name="pref_section_appearance_title">Apariencia</string>
<string name="pref_section_appearance_summary">Ajusta el esquema de colores, idioma y otros parámetros relacionados con el aspecto de la aplicación.</string>
<string name="pref_section_security_title">Seguridad</string>
@@ -34,7 +34,7 @@
<string name="pref_section_backups_title">Copias de seguridad</string>
<string name="pref_section_backups_summary">Configura copias de seguridad automáticas en una carpeta local o activa el sistema de copia de seguridad en la nube de Android.</string>
<string name="pref_section_icon_packs">Paquetes de iconos</string>
<string name="pref_section_icon_packs_summary">Gestiona e importa tus paquetes de iconos</string>
<string name="pref_section_icon_packs_summary">Gestiona e importa tus paquetes de iconos.</string>
<string name="pref_select_theme_title">Tema</string>
<string name="pref_dynamic_colors_title">Colores dinámicos</string>
<string name="pref_dynamic_colors_summary">Colorear la interfaz con el mismo esquema de colores de tu tema de Android</string>
@@ -43,7 +43,7 @@
<string name="pref_show_icons_title">Mostrar iconos</string>
<string name="pref_show_icons_summary">Mostrar iconos al lado de cada clave</string>
<string name="pref_code_group_size_title">Agrupación de los dígitos del código</string>
<string name="pref_code_group_size_summary">Elige el número de dígitos por los que agrupar los códigos</string>
<string name="pref_code_group_size_summary">Elige el número de dígitos por los que agrupar los códigos, dejando un espacio entre sí</string>
<string name="pref_account_name_position_title">Mostrar el nombre de la cuenta</string>
<string name="pref_show_next_code_title">Ver siguiente clave</string>
<string name="pref_show_next_code_summary">Generar y mostrar la siguiente clave antes de tiempo</string>
@@ -227,6 +227,8 @@
<string name="snackbar_authentication_method">Elige una forma de autenticarte</string>
<string name="encrypting_vault">Cifrando la bóveda</string>
<string name="exporting_vault">Exportando la bóveda</string>
<string name="optimizing_icon">Optimizando el icono</string>
<string name="optimizing_icon_multiple">Optimizando iconos: %1$d de %2$d</string>
<string name="reading_file">Leyendo archivo</string>
<string name="requesting_root_access">Solicitando acceso a la raíz</string>
<string name="analyzing_qr">Analizando código QR</string>
@@ -239,9 +241,9 @@
<string name="delete_entry">Borrar clave</string>
<string name="delete_entry_description">¿Seguro de que quieres borrar la clave?</string>
<string name="delete_entry_explanation">Esta acción no desactiva 2FA para:\n<b>%s</b>\n\nPara prevenir la pérdida de acceso, asegúrate de que has desactivado 2FA o que tienes una forma alternativa de generar códigos para este servicio.</string>
<string name="delete_entries">Eliminar elementos</string>
<string name="delete_entries">Borrar claves</string>
<plurals name="delete_entries_description">
<item quantity="one">¿Está seguro de que desea eliminar %d entrada?</item>
<item quantity="one">¿Seguro de que desea eliminar %d clave?</item>
<item quantity="other">¿Seguro que quieres borrar %d claves?</item>
</plurals>
<string name="discard_changes">¿Descartar cambios?</string>
@@ -276,9 +278,9 @@
<string name="backup_status_none">Aún no se han realizado copias de seguridad</string>
<string name="backup_warning_password">Las copias de seguridad se cifran usando una contraseña separada configurada en la configuración de seguridad</string>
<string name="documentsui_error">Tu dispositivo parece no tener DocumentsUI. Es un componente del sistema importante y necesario para elegir y crear archivos. Si utilizaste una herramienta para desinstalar (o hacer «debloat» de) aplicaciones que vienen de fábrica es posible que la hayas eliminado accidentalmente, tendrás que volverla a instalarla.</string>
<string name="icon_pack_import_error">Se ha producido un error tratando de importar un paquete de iconos</string>
<string name="icon_pack_import_error">Se ha producido un error al intentar importar un paquete de iconos</string>
<string name="icon_pack_import_exists_error">El paquete de iconos a importar ya existe. ¿Quieres reemplazarlo?</string>
<string name="icon_pack_delete_error">Se ha producido un error tratando de eliminar un paquete de iconos</string>
<string name="icon_pack_delete_error">Se ha producido un error al intentar borrar un paquete de iconos</string>
<plurals name="icon_pack_info">
<item quantity="one">%d icono</item>
<item quantity="other">%d iconos</item>
@@ -301,11 +303,11 @@
<string name="app_version_error">La versión de %s que está instalada no es compatible. Las versiones recientes han comenzado a cifrar algunos de los archivos en el directorio de almacenamiento interno, haciendo que Aegis no pueda acceder a la información que necesita para la importación. Intentar importar probablemente resultará en un error. ¿Deseas continuar de todos modos?</string>
<string name="root_error">Error: No se puede obtener acceso a la raíz</string>
<plurals name="imported_entries_count">
<item quantity="one">Importada %d entrada</item>
<item quantity="one">Importada %d clave</item>
<item quantity="other">Importadas %d claves</item>
</plurals>
<plurals name="entries_shown">
<item quantity="one">Mostrando %d entrada</item>
<item quantity="one">Mostrando %d clave</item>
<item quantity="other">Mostrando %d claves</item>
</plurals>
<string name="intro_import_error_title">Se ha producido un error al importar la bóveda</string>
@@ -321,7 +323,7 @@
<string name="partial_google_auth_import_warning">Algunos código QR de importación no están. Faltan los siguientes códigos:\n\n<b>%s</b>\n\nPuedes seguir adelante con esta importación parcial, pero te recomendamos volver a probar otra vez a escanear todos los códigos QR para evitar que pierdas el acceso a alguno de ellos.</string>
<string name="missing_qr_code_descriptor">• código QR %d</string>
<plurals name="import_partial_export_anyway">
<item quantity="one">Aún así quieres seguir con la importación de este código</item>
<item quantity="one">Seguir con la importación de este código</item>
<item quantity="other">Seguir con la importación de estos %d códigos</item>
</plurals>
<string name="import_google_auth_failure">Ha fallado la importación de lo exportado de Google Authenticator</string>
@@ -334,8 +336,8 @@
<string name="remove_group_description">¿Seguro que quieres borrar este grupo? Sus elementos se moverán automáticamente a «Sin grupo».</string>
<string name="remove_unused_groups">Eliminar grupos no utilizados</string>
<string name="remove_unused_groups_description">¿Seguro que quieres borrar todos los grupos que estén vacíos y no tengan ninguna clave dentro?</string>
<string name="remove_icon_pack">Eliminar paquete de iconos</string>
<string name="remove_icon_pack_description">¿Está seguro de que desea eliminar este paquete de iconos? Las entradas que usen iconos de este paquete no se verán afectadas.</string>
<string name="remove_icon_pack">Borrar paquete de iconos</string>
<string name="remove_icon_pack_description">¿Seguro que quieres borrar este paquete de iconos? Las claves que ya utilicen algún icono de este paquete no se verán afectadas.</string>
<string name="details">Más detalles</string>
<string name="show_error_details">Mostrar detalles del error</string>
<string name="lock">Bloquear</string>
@@ -361,8 +363,25 @@
<string name="preference_reset_usage_count_dialog">¿Seguro de que quieres resetear el contador de uso de todas las claves y dejarlos a cero?</string>
<string name="note" comment="Users can add a note to an entry">Nota</string>
<string name="clear">Restablecer</string>
<string name="dialog_duplicate_entry_title" comment="'Duplicate' is a noun here">Hay un código duplicado</string>
<string name="dialog_duplicate_entry_message">Este código tiene el mismo nombre y emisor que otros que ya están en la lista. ¿Qué quieres hacer?</string>
<string name="dialog_duplicate_entry_overwrite_title">Sobrescribir códigos</string>
<string name="dialog_duplicate_entry_overwrite_subtitle">Reemplazarlos. Esta acción no se puede deshacer</string>
<string name="dialog_duplicate_entry_suffix_title">Añadir sufijo</string>
<string name="dialog_duplicate_entry_suffix_subtitle">Añade un sufijo al nombre de este nuevo código. El nuevo nombre será: %s</string>
<string name="dialog_duplicate_entry_cancel_title">No guardar</string>
<string name="dialog_duplicate_entry_cancel_subtitle">Permite editarlo antes de volverlo a guardar</string>
<plurals name="dialog_duplicate_entry_overwrite_dialog_message">
<item quantity="one">¿Seguro que quieres borrar %d elemento con el siguiente nombre:\n\n%s - %s?</item>
<item quantity="other">¿Seguro que quieres borrar %d elementos con el siguiente nombre:\n\n%s - %s?</item>
</plurals>
<string name="dialog_duplicate_entry_overwrite_dialog_title">Confirmar borrado</string>
<string name="pref_haptic_feedback_summary">Hace vibrar tu dispositivo al actualizar los códigos</string>
<string name="pref_haptic_feedback_title">Vibración</string>
<string name="pref_highlight_entry_title">Resaltar códigos al pulsar</string>
<string name="pref_highlight_entry_summary">Resalta temporalmente cada código temporal que toques sobre los demás para que sea más fácil de distinguir</string>
<string name="pref_highlight_entry_summary">Resalta temporalmente cada clave que toques sobre las demás para que sea más fácil de distinguir</string>
<string name="pref_groups_multiselect_title">Selección multiple de grupos</string>
<string name="pref_groups_multiselect_summary">Permite seleccionar varios grupos a la vez</string>
<string name="pref_minimize_on_copy_title">Minimizar al copiar</string>
<string name="pref_minimize_on_copy_summary">Minimiza la aplicación tras copiar claves</string>
<string name="pref_copy_behavior_title">Copiar claves en el portapapeles</string>
@@ -408,11 +427,11 @@
<string name="whats_new">Novedades</string>
<string name="github_description">Código fuente, problemas e información</string>
<string name="license">Licencia</string>
<string name="license_description">Aegis Authenticator está licenciado bajo GPLv3</string>
<string name="license_description">Aegis Authenticator se distribuye bajo los términos de la licencia GPLv3</string>
<string name="third_party_licenses">Licencias de terceros</string>
<string name="third_party_licenses_description">Licencias de las bibliotecas de terceros usadas por Aegis</string>
<string name="country_netherlands">Países Bajos</string>
<string name="email_us">Escribir un correo</string>
<string name="email_us">Contacta por correo electrónico</string>
<string name="visit_website">Visita nuestra web</string>
<string name="about_support">Soporte</string>
<string name="support_rate">Valorar</string>
@@ -451,8 +470,8 @@
<string name="empty_list_title">No hay ninguna clave</string>
<string name="empty_group_list">Todavía no hay ningún grupo; añade uno en la pantalla de editar claves</string>
<string name="empty_group_list_title">No se encontraron grupos</string>
<string name="no_icon_packs">Aún no se ha importado ningún paquete de iconos. Pulse el signo + para importar uno. Consejo: pruebe <a href="https://aegis-icons.github.io">aegis-icons</a>.</string>
<string name="no_icon_packs_title">Sin paquetes de iconos</string>
<string name="no_icon_packs">Aún no se ha importado ningún paquete de iconos. Pulsa «+» para importar uno. Consejo: te recomendamos que pruebes <a href="https://aegis-icons.github.io">aegis-icons</a>.</string>
<string name="no_icon_packs_title">No parece haber ningún paquete de iconos</string>
<string name="pick_icon">Seleccione un icono</string>
<string name="uncategorized">Sin categorizar</string>
<string name="done">Hecho</string>
@@ -466,6 +485,7 @@
<string name="unable_to_copy_uri_to_clipboard">No se puede copiar la dirección URI en el portapapeles</string>
<string name="uri_copied_to_clipboard">Se ha copiado la dirección URI al portapapeles</string>
<string name="transfer_entry_description">Escanea este código QR con la aplicación de autenticación a la que vayas a importar esta clave</string>
<string name="transfer_entry_brightness">Pulsa el código QR para subir/bajar el brillo a pantalla completa</string>
<string name="google_auth_compatible_transfer_description">Escanea estos códigos QR con Aegis o Google Authenticator.\n\nDebido a limitaciones técnicas de Google Authenticator solo se incluirán claves de tipo TOTP y HOTP que usen SHA1 y produzcan códigos de 6 dígitos</string>
<string name="password_strength_very_weak">Muy débil</string>
<string name="password_strength_weak">Débil</string>
@@ -499,7 +519,6 @@
<string name="importer_help_2fas">Suministre un archivo exportado de 2FAS Authenticator.</string>
<string name="importer_help_aegis">Suministre un archivo exportado/copia de seguridad de Aegis.</string>
<string name="importer_help_authenticator_plus">Suministre un archivo exportado de Authenticator Plus obtenido a través de <b>Ajustes -&gt; Copias de seguridad -&gt; Exportar como texto y HTML</b>.</string>
<string name="importer_help_authenticator_pro">Suministra un archivo de exportación de Authenticator Pro obtenido a través de <b>Configuración -&gt; Copias de seguridad -&gt; Copia de seguridad en archivo cifrado (recomendado)</b>.</string>
<string name="importer_help_authy">Proporciona una copia del archivo <b>/data/data/com.authy.authy/shared_prefs/com.authy.storage.tokens.authenticator.xml</b>, ubicado en la carpeta de almacenamiento interno de Authy.</string>
<string name="importer_help_andotp">Suministre un archivo exportado/copia de seguridad de andOTP.</string>
<string name="importer_help_bitwarden">Suministra un archivo de exportación/copia de seguridad de Bitwarden. Los archivos encriptados no están soportados.</string>
@@ -513,7 +532,9 @@
<string name="importer_help_google_authenticator"><b>Solo funcionará con archivos de base de datos de Google Authenticator v5.10 e inferiores</b>.\n\nProporciona una copia del archivo <b>/data/data/com.google.android.apps.authenticator2/databases/databases</b>, ubicado en la carpeta de almacenamiento interno de Google Authenticator.</string>
<string name="importer_help_microsoft_authenticator">Suministre una copia de <b>/data/data/com.azure.authenticator/databases/PhoneFactor</b>, localizado en el directorio de almacenamiento interno de Microsoft Authenticator.</string>
<string name="importer_help_plain_text">Suministre un archivo de texto plano con una URI de Google Authenticator en cada línea.</string>
<string name="importer_help_proton_authenticator">Proporciona un archivo de exportación de Proton Authenticator (.json) obtenido a través de <b>Ajustes -&gt; Exportar</b>.</string>
<string name="importer_help_steam"><b>Steam v3.0 y posteriores no son compatibles</b>. Proporcione una copia de <b>/data/data/com.valvesoftware.android.steam.community/files/Steamguard-*.json</b>, ubicado en el directorio de almacenamiento interno de Steam.</string>
<string name="importer_help_stratum">Suministra un archivo de exportación de Stratum obtenido a través de <b>Configuración -&gt; Copias de seguridad -&gt; Copia de seguridad en archivo cifrado (recomendado)</b>.</string>
<string name="importer_help_totp_authenticator">Suministre un archivo exportado de TOTP Authenticator.</string>
<string name="importer_help_winauth">Suministre un archivo exportado de WinAuth.</string>
<string name="import_assign_icons_dialog_title">Asignar iconos</string>
@@ -523,11 +544,11 @@
<string name="groups">Grupos</string>
<string name="pref_focus_search">Resaltar el buscador al inicio</string>
<string name="pref_focus_search_summary">Enfoca la búsqueda inmediatamente después de abrir la aplicación.</string>
<string name="pref_grouping_halves">Mitades</string>
<string name="pref_grouping_none">Sin agrupación</string>
<string name="pref_grouping_size_two">Grupos de 2</string>
<string name="pref_grouping_size_three">Grupos de 3</string>
<string name="pref_grouping_size_four">Grupos de 4</string>
<string name="pref_grouping_halves">En dos mitades</string>
<string name="pref_grouping_none">Sin agrupar</string>
<string name="pref_grouping_size_two">En grupos de dos</string>
<string name="pref_grouping_size_three">En grupos de tres</string>
<string name="pref_grouping_size_four">En grupos de cuatro</string>
<string name="pref_copy_behavior_never">Nunca</string>
<string name="pref_copy_behavior_single_tap">Un toque</string>
<string name="pref_copy_behavior_double_tap">Dos toques</string>
@@ -0,0 +1,5 @@
<?xml version="1.0" encoding="utf-8"?>
<resources>
<string name="system_theme_title">Süsteemi vaikeseadistus</string>
<string name="system_amoled_theme_title">Süsteemi vaikeseadistus (AMOLED)</string>
</resources>
+576
View File
@@ -0,0 +1,576 @@
<?xml version="1.0" encoding="utf-8"?>
<resources xmlns:tools="http://schemas.android.com/tools">
<string name="action_settings">Seadistused</string>
<string name="action_about">Rakenduse teave</string>
<string name="action_delete">Kustuta</string>
<string name="action_transfer">Teisalda</string>
<string name="action_edit_icon">Muuda ikooni</string>
<string name="action_reset_usage_count">Nulli kasutuskordade loendur</string>
<string name="action_reset_usage_count_dialog">Kas sa oled kindel, et soovid nullida selle kirje kasutuskordade loenduri?</string>
<string name="action_default_icon">Taasta vaikimisi ikoon</string>
<string name="discard">Loobu</string>
<string name="save">Salvesta</string>
<string name="all">Kõik</string>
<string name="issuer">Väljaandja</string>
<string name="yandex_pin">PIN-kood (416 numbrit)</string>
<string name="motp_pin">PIN-kood (4 numbrit)</string>
<string name="suggested">Soovitatud</string>
<string name="usage_count">Kasutuskordi</string>
<string name="warning">Hoiatus</string>
<string name="pref_cat_appearance_app">Rakendus</string>
<string name="pref_cat_appearance_entries">Kirjeid</string>
<string name="pref_cat_backups_android">Android</string>
<string name="pref_cat_backups_auto">Automaatsed varukoopiad</string>
<string name="pref_section_behavior_title">Käitumine</string>
<string name="pref_section_behavior_summary">Kirjete loendi kohendamise võimalused.</string>
<string name="pref_section_appearance_title">Välimus</string>
<string name="pref_section_appearance_summary">Muuda kujundust, keelt ja muid seadistusi, mis mõjutavad rakenduse välimust.</string>
<string name="pref_section_security_title">Turvalisus</string>
<string name="pref_section_security_summary">Seadista krüptimist, biomeetrilist tuvastust, automaatset lukustust ja muid turvaseadistusi.</string>
<string name="pref_section_import_export_title">Andmete import ja eksport</string>
<string name="pref_section_import_export_summary">Impordi Aegise või teiste autentimisrakenduste varukoopiaid. Tee Aegise andmehoidlast käsitsi varukoopia.</string>
<string name="pref_section_audit_log_title">Rakenduse logi</string>
<string name="pref_section_audit_log_summary">Kõikide oluliste rakendusega juhtunud sündmuste logi hilisema auditeerimise jaoks.</string>
<string name="pref_section_backups_title">Varukoopiad</string>
<string name="pref_section_backups_summary">Seadista varukoopiate loomine sinu valitud asukohta või võta kasutusele Androidi pilvevarunduse lahendus.</string>
<string name="pref_section_icon_packs">Ikoonipakid</string>
<string name="pref_section_icon_packs_summary">Halda ja impordi ikoonipakke</string>
<string name="pref_select_theme_title">Kujundus</string>
<string name="pref_dynamic_colors_title">Dünaamilised värvid</string>
<string name="pref_dynamic_colors_summary">Kasuta ülekatte jaoks Androidi kasutajaliidese kujunduse värve</string>
<string name="pref_view_mode_title">Kasutatav vaade</string>
<string name="pref_lang_title">Keel</string>
<string name="pref_show_icons_title">Näita ikoone</string>
<string name="pref_show_icons_summary">Näita iga kirje kõrval ikoone</string>
<string name="pref_code_group_size_title">Koodinumbrite rühmitamine</string>
<string name="pref_code_group_size_summary">Vali koodide rühmitamise viis</string>
<string name="pref_account_name_position_title">Näita kasutajakonto nime</string>
<string name="pref_show_next_code_title">Näita järgmist koodi</string>
<string name="pref_show_next_code_summary">Loo järgmine kood ja näita seda enne õiget aega</string>
<string name="pref_expiration_state_title">Anna märku koodide aegumisest</string>
<string name="pref_expiration_state_summary">Enne aegumist muuda kinnituskoodi värvi ja vilguta neid</string>
<string name="pref_expiration_state_fallback">Enne aegumist muuda kinnituskoodi värvi</string>
<string name="pref_shared_issuer_account_name_title">Näita kasutajakonto nime vaid siis, kui see vajalik on</string>
<string name="pref_shared_issuer_account_name_summary">Näita kasutajakontode nimesid vaid siis, kui neil on sama väljaandja. Muul juhul on kasutajakontode nimed peidetud.</string>
<string name="pref_account_name_position_summary_override">See seadistus ei toimi ruudustikuvaates. Kasutajakonto nimi on näha väljaandja all.</string>
<string name="pref_import_file_title">Impordi failist</string>
<string name="pref_import_file_summary">Impordi andmekirjed failist</string>
<string name="pref_android_backups_title">Androidi pilvevarundus</string>
<string name="pref_android_backups_summary">Luba kaasata Aegise varukoopiaid Androidi sisseehitatud pilvevarundusse. Kehtib vaid krüptitud andmehoidla puhul.</string>
<string name="pref_android_backups_hint"><i>Seadmelt seadmele (Device-to-device, D2D) varukoopiad on lubatud alati, sõltumata ülaltoodud seadistusest</i></string>
<string name="pref_backups_title">Tee andmehoidlast automaatselt varukoopiaid</string>
<string name="pref_backups_summary">Peale iga muudatust tee automaatselt andmehoidlast varukoopia. See funktsionaalsus toimib vaid krüptitud andmehoidlate puhul.</string>
<string name="pref_backups_reminder_title">Varunduse meeldetuletus</string>
<string name="pref_backups_reminder_summary">Kui sa pole viimaseid muudatusi varundanud, näita meeldetuletust sinu andmehoidla kohta.</string>
<string name="pref_backups_reminder_dialog_title">Lülita varunduse meeldetuletus välja</string>
<string name="pref_backups_reminder_dialog_summary">Selle meeldetuletuse väljalülitamisel Aegis ei anna sulle enam teada, kas muudatused on varundatud või mitte. Sellega tekib aga võimalus, et võid kaotada ligipääsu oma tunnuslubadele. Kas sa oled kindel, et soovid meeldetuletuse välja lülitada?</string>
<string name="pref_backups_versioning_strategy_title">Varundusplaan</string>
<string name="pref_backups_versioning_strategy_keep_x_versions">Säilita mitu varukoopiat</string>
<string name="pref_backups_versioning_strategy_single_backup">Tee vaid üks varukoopia</string>
<string name="pref_backups_versioning_strategy_single_backup_warning">Sinu valitud varundusplaan pole töökindel ja me ei soovita seda. Vaid ühe varukoopia tegemisel võid selle kaotada.</string>
<string name="pref_backups_versioning_strategy_dialog_title">Vali varundusplaan</string>
<string name="pref_backups_location_title">Varukoopia asukoht</string>
<string name="pref_backups_location_summary">Varukoopiad salvestuvad siin:</string>
<string name="pref_backup_location_summary">Varukoopia salvestub siin:</string>
<string name="pref_backups_trigger_title">Käivita kohe varundus</string>
<string name="pref_backups_trigger_summary">Tee varundus käsitsi</string>
<string name="pref_backups_versions_title">Säilitatavate versioonide arv</string>
<string name="pref_backups_versions_infinite">\u221E</string>
<plurals name="pref_backups_versions_summary">
<item quantity="one">Säilita varukoopiast %1$d versioon</item>
<item quantity="other">Säilita varukoopiast %1$d versiooni</item>
</plurals>
<string name="pref_backups_versions_infinite_summary">Säilita varukooiate lõputu arv versioone</string>
<string name="pref_import_app_title">Impordi rakendusest</string>
<string name="pref_import_app_summary">Impordi tunnusload rakendusest (eeldab juurkasutaja õigusi)</string>
<string name="pref_export_title">Ekspordi</string>
<string name="pref_export_summary">Ekspordi andmehoidla</string>
<string name="pref_password_reminder_title">Salasõna meeldetuletus</string>
<string name="pref_google_auth_export_title">Eksportimine Google Authenticatori jaoks</string>
<string name="pref_google_auth_export_descriptor">Selle valikuga saad luua eksportimiseks QR-koode, mis sobivad Google Authenticatori jaoks</string>
<string name="pref_google_auth_export_no_data">Pole andmeid, mida saaks eksportida</string>
<plurals name="pref_google_auth_export_incompatible_entries">
<item quantity="one">Jätsin vahele %d mitteühilduva kirje</item>
<item quantity="other">Jätsin vahele %d mitteühilduvat kirjet</item>
</plurals>
<string name="pref_password_reminder_summary">Selleks, et sa salasõna ei unustaks, näita %s meeldetuletust salasõna sisestamiseks.</string>
<string name="pref_password_reminder_summary_disabled">Pole kasutusel</string>
<string name="pref_secure_screen_title">Ekraanivaate turvalisus</string>
<string name="pref_secure_screen_summary">Rakenduse kasutamisel keela ekraanitõmmiste tegemine ja muul viisil ekraanipildi jäädvustamine</string>
<string name="pref_tap_to_reveal_title">Näitamiseks puuduta</string>
<string name="pref_tap_to_reveal_summary">Vaikimisi on kinnituskoodid peidetud. Selle nägemiseks klõpsi kirjel.</string>
<string name="pref_tap_to_reveal_time_title">Näitamise kestus peale puudutamist</string>
<string name="pref_auto_lock_title">Automaatne lukustus</string>
<string name="pref_auto_lock_summary">Kui %s</string>
<string name="pref_auto_lock_summary_disabled">Pole kasutusel</string>
<string name="pref_auto_lock_prompt">Lukusta Aegis automaatselt</string>
<string name="pref_auto_lock_type_back_button">Androidi „Tagasi“ nupu vajutamisel</string>
<string name="pref_auto_lock_type_minimize">Rakenduse minimeerimisel</string>
<string name="pref_auto_lock_type_device_lock">Seadme lukustamisel</string>
<string name="pref_backup_password_category">Varundus ja eksport</string>
<string name="pref_backup_password_title">Eraldi salasõna varunduse ja ekspordi jaoks</string>
<string name="pref_backup_password_summary">Kui see eelistus on kasutusel, siis rakenduse lukustuse eemaldamiseks kasutatav salasõna enam ei toimi varukoopiate ja ekspordifailide dekrüptimisel.</string>
<string name="pref_backup_password_change_title">Muuda varunduse ja ekspordi salasõna</string>
<string name="pref_backup_password_change_summary">Muuda salasõna, mida kasutatakse andmehoidla krüptimiseks varukoopia tegemisel ja eksportimisel.</string>
<string name="pref_encryption_title">Krüptimine</string>
<string name="pref_encryption_summary">Krüpti andmehoidla salasõna või biomeetrilise tuvastusega ning kasuta neid ka lukustuse eemaldamisel</string>
<string name="pref_biometrics_title">Biomeetriline tuvastus</string>
<string name="pref_biometrics_summary">Kasuta andmehoidla lukustuse eemaldamiseks biomeetrilist tuvastust</string>
<string name="pref_search_behavior_summary">Otsi väljadest: %s</string>
<string name="pref_search_behavior_prompt">Otsi neist märgitud väljadest</string>
<string name="pref_search_behavior_type_name">Nimi</string>
<string name="pref_search_behavior_type_issuer">Väljaandja</string>
<string name="pref_search_behavior_type_note">Märkus</string>
<string name="pref_search_behavior_type_groups">Grupid</string>
<string name="pref_set_password_title">Muuda salasõna</string>
<string name="pref_set_password_summary">Muuda salasõna, mida kasutatakse andmehoidla lukustuse eemaldamiseks</string>
<string name="no_events_title">Teadaolevaid sündmusi pole</string>
<string name="no_events_description">Raenduses pole teada ühtegi olulist sündmust</string>
<string name="event_title_vault_unlocked">Andmehoidla lukustus on eemaldatud</string>
<string name="event_description_vault_unlocked">Andmehoidla lukustus on kenasti eemaldatud</string>
<string name="event_title_backup_created">Varukoopia on loodud</string>
<string name="event_description_backup_created">Andmehoidla varukoopia loomine õnnestus</string>
<string name="event_title_android_backup_created">Varukoopia on loodud Androidi poolt</string>
<string name="event_description_android_backup_created">Androidid õnnestus luua andmehoidla varukoopia</string>
<string name="event_title_vault_exported">Andmehoidla on eksporditud</string>
<string name="event_description_vault_exported">Andmehoidla koopia on eksporditud</string>
<string name="event_title_entry_shared">Kirje on jagatud</string>
<string name="event_description_entry_shared">Kirjet jagati</string>
<string name="event_title_vault_unlock_failed_password">Ei õnnestunud eemaldada andmehoidla lukustust (salasõnaga)</string>
<string name="event_description_vault_unlock_failed_password">Katse eemaldada andmehoidla lukustust salasõnaga ei õnnestunud</string>
<string name="event_title_vault_unlock_failed_biometrics">Ei õnnestunud eemaldada andmehoidla lukustust (biomeetrilise tuvastusega)</string>
<string name="event_description_vault_unlock_failed_biometrics">Katse eemaldada andmehoidla lukustust biomeetrilise tuvastusega ei õnnestunud</string>
<string name="event_unknown">Tundmastu sündmuse tüüp</string>
<string name="audit_log_entry_deleted">(kustutatud)</string>
<string name="today_at_time">Täna kell %1$s</string>
<string name="day_of_week_at_time">%1$s kell %2$s</string>
<string name="export_encrypted">Krüpti andmehoidla</string>
<string name="export_help">Selle toiminguga ekspordid andmehoidla Aegise sisemisest andmeruumist. Palun vali vorming, mida soovid eksportimiseks kasutada:</string>
<string name="export_warning_unencrypted">Sa oled eksportimas Aegise andmehoidla krüptimata koopiat. <b>Me ei soovita sellist tegevust</b>.</string>
<string name="export_warning_password">Ekspordifailid on krüptitud eraldi salasõnaga, mis on lisatud seadistuste sektsioonist Turvalisus.</string>
<string name="understand_risk_accept">Ma mõistan seda riski</string>
<string name="export_format_aegis">Aegis (.JSON)</string>
<string name="export_format_google_auth_uri">Tekstifail (.TXT)</string>
<string name="export_format_html">Veebileht (.HTML)</string>
<string name="export_format_hint">Eksportimise vorming</string>
<string name="export_all_groups">Ekspordi kõik grupid</string>
<string name="export_choose_groups">Vali eksporditavad grupid</string>
<plurals name="export_groups_selected_count">
<item quantity="one">%d grupp on valitud</item>
<item quantity="other">%d gruppi on valitud</item>
</plurals>
<string name="export_no_groups_selected">Sa pole eksportimiseks valinud ühtegi gruppi</string>
<string name="export_html_title" comment="The title of an HTML export document">Eksport Aegis Authenticatorist</string>
<string name="choose_authentication_method">Turvalisus</string>
<string name="authentication_method_explanation">Aegis on turvalisuskeskne kaheastmelise autentimise haldusrakendus. Kirjed on salvestatud andmehoidlas, mida saad soovi korral enda valitud salasõnaga krüptida. Kui see krüptitud andmehoidla satub pahatahtlike kavatsustega kolmanda osapoole kätte, siis pole tal ilma salasõna teadmata võimalust sisu lugeda.\n\nJärgnevalt oleme eelvalinud eelistuse, mis võiks sinu nutiseadmele parimal viisil sobida.</string>
<string name="authentication_method_none">Puudub</string>
<string name="authentication_method_none_description">Andmehoidla lukustuse eemaldamiseks pole vaja kasutada salasõna ning ta on ka krüptimata. <b>Me ei soovita selle valiku kasutamist</b>.</string>
<string name="authentication_method_password">Salasõna</string>
<string name="authentication_method_password_description">Andmehoidla lukustuse eemaldamiseks pead kasutama salasõna.</string>
<string name="authentication_method_password_explanation">Hoiatus: Kui sa unustad oma salasõna, siis kaotad jäädavalt ligipääsu oma tunnuslubadele. Pole ühtegi viisi ligipääsuks neile ilma salasõnata.</string>
<string name="authentication_method_biometrics">Biomeetria</string>
<string name="authentication_method_biometrics_description">Lisaks salasõnale, on siin nutiseadmes biomeetrilise tuvastuse võimalus. Näiteks sõrmejälje või näotuvastusega on võimalik andmehoidlat lukust lahti võtta.</string>
<string name="authentication">Võta andmehoidla lukust lahti</string>
<string name="authentication_multiline" comment="The newline in the middle is used for aesthetic purposes">Võta andmehoidla\nlukust lahti</string>
<string name="auth_use_biometrics">Või klõpsi siin <font fgcolor="#FF0D86C1">biomeetrilise tuvastuse</font> kasutamiseks</string>
<string name="set_password">Palun sisesta salasõna</string>
<string name="set_group">Palun sisesta grupi nimi</string>
<string name="set_number">Palun sisesta number</string>
<string name="set_password_confirm">Palun korda salasõna</string>
<string name="invalid_password">Sisestatud salasõna pole õige</string>
<string name="invalidated_biometrics">Tuvastasin muudatuse sinu nutiseadme turvaseadistustes. Palun ava Aegise „Seadistused“ → „Turvalisus“ → „Biomeetriline tuvastus“ ning lülita ta korraks välja ning seejärel uuesti sisse.</string>
<string name="password_reminder">Palun sisesta oma salasõna. Selleks, et sa salasõna ei unustaks, me vahetevahel palume sind seda sisestada.</string>
<string name="password_reminder_dialog_title">Vaikimisi on lukustuse eemaldamiseks kasutusel biomeetriline tuvastus</string>
<string name="password_reminder_dialog_message">Selleks, et sa salasõna ei unustaks ja kaotaks ligipääsu oma andmehoidlale, me vahetevahel palume sind seda sisestada. Peale salasõna kasutamist Aegis pruugib jälle biomeetrilist tuvastust seni, kuni jõuab kätte järjekordne salasõna sisestamise hetk.</string>
<string name="password_reminder_freq_never">Mitte kunagi</string>
<string name="password_reminder_freq_weekly">kord nädalas</string>
<string name="password_reminder_freq_biweekly">kaks korda nädalas</string>
<string name="password_reminder_freq_monthly">kord kuus</string>
<string name="password_reminder_freq_quarterly">kord kvartalis</string>
<string name="enter_password_2fas_message">Tundub, et 2FAS rakenduse varukoopia on krüptitud. Palun sisesta alljärgnevalt salasõna.</string>
<string name="enter_password_authy_message">Tundub, et Authy rakenduse kirjed on krüptitud. Palun sulge Aegis, ava Authy ning eemalda kirjete lukustus oma salasõnaga. Võid ka proovida, kas Aegis saab dekrüptimisega hakkama. Selleks sisesta alljärgnevalt vajalik salasõna.</string>
<string name="enter_password_aegis_title">Palun sisesta importimise salasõna</string>
<string name="period_hint">Välp (sekundites)</string>
<string name="algorithm_hint">Räsifunktsioon</string>
<string name="type">Tüüp</string>
<string name="share">Jaga</string>
<string name="yes">Jah</string>
<string name="no">Ei</string>
<string name="undo">Võta toiming tagasi</string>
<string name="unlock">Lukusta lahti</string>
<string name="advanced">Lisavalikud</string>
<string name="counter">Loendur</string>
<string name="digits">Numbreid</string>
<string name="secret">Salakood</string>
<string name="scan">Skaneeri QR-koodi</string>
<string name="scan_image">Skaneeri pilti</string>
<string name="enter_manually">Sisesta käsitsi</string>
<string name="set_up_biometric">Seadista lukustuse eemaldamine biomeetrilise tuvastusega</string>
<string name="copy">Kopeeri</string>
<string name="edit">Muuda</string>
<string name="select_all">Vali kõik</string>
<string name="assign_icons">Lisa ikoone</string>
<string name="assign_groups">Lisa gruppi</string>
<string name="assign_groups_dialog_summary">Vali grupp, kuhu soovid antud kirjed lisada.</string>
<string name="assign_groups_dialog_dropdown">Vali grupp</string>
<string name="favorite" comment="Verb">Lisa lemmikuks</string>
<string name="unfavorite" comment="Verb">Eemalda lemmikutest</string>
<string name="error_all_caps">VIGA</string>
<string name="password">Salasõna</string>
<string name="confirm_password">Korda salasõna</string>
<string name="show_password">Näita salasõna</string>
<string name="new_entry">Uus kirje</string>
<string name="add_new_entry">Lisa uus kirje</string>
<string name="unlock_vault_error">Andmehoidla lukustuse eemaldamine ei õnnestunud</string>
<string name="unlock_vault_error_description">Vale salasõna. Palun kontrolli, et kasutasid õiget salasõna.</string>
<string name="password_equality_error">Salasõnad peavad olema identsed ega tohi olla tühjad</string>
<string name="snackbar_authentication_method">Palun vali autentimise meetod</string>
<string name="encrypting_vault">Andmehoidla on krüptimisel</string>
<string name="exporting_vault">Andmehoidla on eksportimisel</string>
<string name="optimizing_icon">Optimeerin ikoone</string>
<string name="optimizing_icon_multiple">Optimeerin ikoone %1$d/%2$d</string>
<string name="reading_file">Loen faili</string>
<string name="requesting_root_access">Küsin juurkasutaja õigusi</string>
<string name="analyzing_qr">Analüüsin QR-koodi</string>
<string name="analyzing_qr_multiple">Analüüsin QR-koodi %1$d/%2$d (%3$s)</string>
<plurals name="added_new_entries">
<item quantity="one">Lisasin %d uue kirje andmehoidlasse</item>
<item quantity="other">Lisasin %d uut kirjet andmehoidlasse</item>
</plurals>
<string name="importing_icon_pack">Impordin ikoonipakki</string>
<string name="delete_entry">Kustuta kirje</string>
<string name="delete_entry_description">Kas sa oled kindel, et soovid selle kirje kustutada?</string>
<string name="delete_entry_explanation">Selle tegevusega sa ei lülita kaheastmelist autentimist välja siin teenuses:\n<b>%s</b>\n\nEt sa ei kaotaks ligipääsu teenusele, siis palun kontrolli, et oleksid seal kaheastmelise autentimise välja lülitanud või sul on olemas alternatiivne viis selle teenuse jaoks autentimiskoode luua.</string>
<string name="delete_entries">Kustuta kirjed</string>
<plurals name="delete_entries_description">
<item quantity="one">Kas oled kindel, et soovid kustutada %d kirje?</item>
<item quantity="other">Kas oled kindel, et soovid kustutada %d kirjet?</item>
</plurals>
<string name="discard_changes">Kas loobud muudatustest?</string>
<string name="discard_changes_description">Sinu muudatused pole salvestatud</string>
<string name="saving_profile_error">Viga profiili salvestamisel</string>
<string name="saving_assign_icons_error">Viga ikoonide lisamisel</string>
<string name="welcome">Tere tulemast</string>
<string name="app_description">Aegis on vaba, turvaline ja avatud lähtekoodil põhinev kaheastmelise autentimise haldusrakendus</string>
<string name="setup_completed">Alseadistamine on lõppenud</string>
<string name="setup_completed_description">Aegis on seadistatud ja valmis tööks.</string>
<string name="vault_not_found">Andmehoidlat ei leidu, alustan algseadistamisega…</string>
<string name="copied">Kopeeritud</string>
<string name="errors_copied">Vead on kopeeritud lõikelauale</string>
<string name="version_copied">Versiooninumber on kopeeritud lõikelauale</string>
<string name="error_required_field">See väli on kohustuslik</string>
<string name="error_occurred">Tekkis viga</string>
<string name="decryption_error">Andmehoidla lukustuse eemaldamisel tekkis viga</string>
<string name="decryption_corrupt_error">Andmehoidla lukustuse eemaldamisel tekkis viga. Andmehoidla fail võib olla vigane.</string>
<string name="saving_error">Andmehoidla salvestamisel tekkis viga</string>
<string name="vault_init_error">Andmehoidla valmendamisel tekkis viga</string>
<string name="vault_load_error">Andmehoidla laadimisel nutiseadme andmeruumist tekkis viga</string>
<string name="biometric_decrypt_error">Andmehoidla dekrüptimisel biomeetrilise isikutuvastuse abil tekkis viga. Tavaliselt juhtub see siis, kui nutiseadme turvaseadistused on muutunud. Palun eemalda andmehoidla lukustus salasõnaga ja kohenda Aegise seadistustest uuesti biomeetrilist tuvastust.</string>
<string name="biometric_init_error">Biomeetrilise isikutuvastuse valmendamisel tekkis viga. Tavaliselt juhtub see siis, kui nutiseadme turvaseadistused on muutunud. Palun eemalda andmehoidla lukustus salasõnaga ja kohenda Aegise seadistustest uuesti biomeetrilist tuvastust.</string>
<string name="disable_encryption">Lülita krüptimine välja</string>
<string name="disable_encryption_description">Kas sa oled kindel, et soovid krüptimist välja lülitada? Selle tulemusel salvestatakse andmehoidla lihtteksti vormingus. <b>Lisaks ei saa enam kasutada automaatset varundust</b>.</string>
<string name="enable_encryption_error">Krüptimise sisselülitamisel tekkis viga</string>
<string name="disable_encryption_error">Krüptimise väljalülitamisel tekkis viga</string>
<string name="backup_successful">Varukoopia ajastamine õnnestus</string>
<string name="backup_error">Varukoopia tegemisel tekkis viga</string>
<string name="backup_status_success">Viimane õnnestunud varukoopia: %s</string>
<string name="backup_status_failed">Viimane ebaõnnestunud varukoopia: %s</string>
<string name="backup_status_none">Ühtegi varukoopiat pole veel tehtud</string>
<string name="backup_warning_password">Varukoopiad on krüptitud eraldi salasõnaga, mis on lisatud seadistuste sektsioonist Turvalisus</string>
<string name="documentsui_error">DocumentsUI liidestus tundub olema sinu nutiseadmest puudu. Tegemist on olulise süsteemse komponendiga, mis on kasutusel dokumentide loomisel ja valimisel. Kui oled kasutanud mõnda rakendust oma nutiseadmest erisuguste mittevajalike komponentide eemaldamiseks, siis võid olla ka selle teegi eemaldanud ja pead ta uuesti paigaldama.</string>
<string name="icon_pack_import_error">Ikoonipaki importimisel tekkis viga</string>
<string name="icon_pack_import_exists_error">Ikoonipakk, mida proovid importida, on juba olemas. Kas tahad selle üle kirjutada?</string>
<string name="icon_pack_delete_error">Ikoonipaki kustutamisel tekkis viga</string>
<plurals name="icon_pack_info">
<item quantity="one">%d ikoon</item>
<item quantity="other">%d ikooni</item>
</plurals>
<string name="icon_custom">Kohandatud</string>
<string name="permission_denied">Õigused puuduvad</string>
<string name="andotp_new_format">Uus vorming (versioon 0.6.3 või uuem) </string>
<string name="andotp_old_format">Vana vorming (versioon 0.6.2 või vanem) </string>
<string name="choose_andotp_importer">Mis vormingus on andOTP varukoopia?</string>
<string name="choose_totpauth_importer">Kas see TOTP Authenticatori varukoopai on kaitstud salasõnaga?</string>
<string name="choose_application">Vali rakendus, kust sa tahaksid andmeid importida</string>
<string name="choose_theme">Valid soovitud kujundus</string>
<string name="choose_account_name_position">Vali sinu kasutajakonto nime asukoht</string>
<string name="choose_view_mode">Vali sinu soovitud vaade</string>
<string name="choose_copy_behavior">Vali soovitud käitumine kopeerimisel</string>
<string name="parsing_file_error">Faili töötlemisel tekkis viga</string>
<string name="file_not_found">Viga: faili ei leidu</string>
<string name="reading_file_error">Faili lugemisel tekkis viga</string>
<string name="app_lookup_error">Viga: rakendus pole paigaldatud</string>
<string name="app_version_error">Paigaldatud „%s“ rakenduse versioon pole toetatud. Viimased versioonid krüptivad osasid faile oma andmekaustas ja seega puudub Aegisel ligipääs nende importimiseks. Kui proovid importida, siis ilmselt lõppeb see veaga. Kas ikkagi tahad jätkata?</string>
<string name="root_error">Viga: ei õnnestu kasutada juurkasutaja õigusi</string>
<plurals name="imported_entries_count">
<item quantity="one">Importisin %d kirje</item>
<item quantity="other">Importisin %d kirjet</item>
</plurals>
<plurals name="entries_shown">
<item quantity="one">Näitan %d kirjet</item>
<item quantity="other">Näitan %d kirjet</item>
</plurals>
<string name="intro_import_error_title">Andmehoidla importimisel tekkis viga</string>
<string name="import_error_title">Importimisel tekkis üks või enam viga</string>
<string name="exporting_vault_error">Andmehoidla eksportimisel tekkis viga</string>
<string name="exported_vault">Andmehoidla on eksporditud</string>
<string name="encryption_set_password_error">Salasõna salvestamisel tekkis viga.</string>
<string name="encryption_enable_biometrics_error">Biomeetrilise isikutuvastuse kasutuselevõtmisel lukustuse eemaldamise jaoks tekkis viga. Mõnede nutiseadmete biomeetrilise tuvastuse teostused on puudulikud ning tundub, et see on üks niisugustest seadmetest. Me soovitame, et kasutad vaid salasõnapõhist tuvastust.</string>
<string name="no_cameras_available">Ühtegi kaamerat pole saadaval</string>
<string name="read_qr_error">QR-koodi lugemisel tekkis viga</string>
<string name="read_qr_error_phonefactor">Aegis pole ühilduv Microsofti kaheastmelise autentimise suletud algoritmiga. Kui oled seadistamas kaheastmelist autentimist Office 365 teenuses, siis palun vali eelistus „Seadista rakendus ilma teavitusteta“.</string>
<string name="partial_google_auth_import">Tuvastasin pooliku Google Authenticatori ekspordifaili</string>
<string name="partial_google_auth_import_warning">Mõned QR-koodid on imporditavatest andmetest puudu. Järgnevaid koode ei leidunud: \n\n<b>%s</b>\n\nSa võid küll jätkata selle pooliku impordiga, kuid me soovitame, et proovid uuesti kõikide andmetega ning väldid mõmõnede kirjete kadumaminekut.</string>
<string name="missing_qr_code_descriptor">• QR-kood %d</string>
<plurals name="import_partial_export_anyway">
<item quantity="one">Impordi %d tunnusluba ikkagi</item>
<item quantity="other">Impordi %d tunnusluba ikkagi</item>
</plurals>
<string name="import_google_auth_failure">Google Authenticatori ekspordifaili importimine ei õnnestunud</string>
<string name="unrelated_google_auth_batches_error">Ekspordis on teave mitteseotud töötluspakkide kohta. Proovida importida ühe paki kaupa.</string>
<string name="no_tokens_can_be_imported">Tulemusena pole võimalik ühtegi kirjet importida</string>
<string name="unlocking_vault">Andmehoidla lukustus on eemaldamisel</string>
<string name="rename_group">Muuda grupi nime</string>
<string name="no_group_selection">Kui kirje ei kuulu ühtegi gruppi, siis leidub ta valikus „Grupp puudub“.</string>
<string name="remove_group">Eemalda grupp</string>
<string name="remove_group_description">Kas sa oled kindel, et soovid selle grupi eemaldada? Selle ja teiste sama grupiga kirjete uus grupp saab olema „Grupp puudub“.</string>
<string name="remove_unused_groups">Kustuta kasutamata grupid</string>
<string name="remove_unused_groups_description">Kas sa oled kindel, et soovid kustutada kõik grupid, mis pole ühegi kirjega seotud?</string>
<string name="remove_icon_pack">Eemalda ikoonipakk</string>
<string name="remove_icon_pack_description">Kas sa oled kindel, et soovid selle ikoonipaki eemaldada? Sellest pakist ikoone kasutavad kirjed jäävad alles.</string>
<string name="details">Üksikasjad</string>
<string name="show_error_details">Näita vea üksikasju</string>
<string name="lock">Lukusta</string>
<string name="name">Nimi</string>
<string name="no_group">Grupp puudub</string>
<string name="sort" comment="Title of the Sort button in the top action bar of the main view">Järjesta</string>
<string name="sort_alphabetically">Väljaandja (A kuni Z)</string>
<string name="sort_alphabetically_reverse">Väljaandja (Z kuni A)</string>
<string name="sort_alphabetically_name">Kasutajakonto (A kuni Z)</string>
<string name="sort_alphabetically_name_reverse">Kasutajakonto (Z kuni A)</string>
<string name="sort_usage_count">Kasutuskorrad</string>
<string name="sort_last_used">Viimati kasutatud</string>
<string name="sort_custom">Sinu järjestus</string>
<string name="last_used">Viimati kasutatud</string>
<string name="last_used_never">mitte kunagi</string>
<string name="new_group">Uus grupp…</string>
<string name="group">Grupp</string>
<string name="group_name_hint">Grupi nimi</string>
<string name="preference_manage_groups">Muuda gruppe</string>
<string name="preference_manage_groups_summary">Halda ja kustuta oma gruppe siin</string>
<string name="preference_reset_usage_count">Nulli kasutuskordade loendur</string>
<string name="preference_reset_usage_count_summary">Lähtesta andmehoidla kõikide kirjete loendurid</string>
<string name="preference_reset_usage_count_dialog">Kas sa oled kindel, et soovid nullida andmehoidla kõikide kirjete kasutuskordade loenduri?</string>
<string name="note" comment="Users can add a note to an entry">Märkus</string>
<string name="clear">Tühjenda</string>
<string name="dialog_duplicate_entry_title" comment="'Duplicate' is a noun here">Topeltkirje</string>
<string name="dialog_duplicate_entry_message">Sellel kirjel on sama nimi ja väljaandja, kui veel ühel või mitmel kirjel. Kuidas peaksime jätkama?</string>
<string name="dialog_duplicate_entry_overwrite_title">Kirjuta olemasolev kirje või kirjed üle</string>
<string name="dialog_duplicate_entry_overwrite_subtitle">Asenda olemasolev(ad) kirje või kirjed uuega. Seda tegevust ei saa tagasi pöörata</string>
<string name="dialog_duplicate_entry_suffix_title">Lisa eesliide</string>
<string name="dialog_duplicate_entry_suffix_subtitle">Lisa eesliide uuele kirje nimele. Seega uus nimi saab olema: %s</string>
<string name="dialog_duplicate_entry_cancel_title">Katkesta salvestamine</string>
<string name="dialog_duplicate_entry_cancel_subtitle">Võimaldab sul enne uut salvestuskatset muuta kirjet</string>
<plurals name="dialog_duplicate_entry_overwrite_dialog_message">
<item quantity="one">Kas sa oled kindel, et soovid kustutada %d kirje järgneva nimega:\n\n%s - %s</item>
<item quantity="other">Kas sa oled kindel, et soovid kustutada %d kirjet järgnevate nimedega:\n\n%s - %s</item>
</plurals>
<string name="dialog_duplicate_entry_overwrite_dialog_title">Kinnita kustutamine</string>
<string name="pref_haptic_feedback_summary">Anna koodide muutumisest märgi värinaga</string>
<string name="pref_haptic_feedback_title">Haptiline tagasiside</string>
<string name="pref_highlight_entry_title">Puudutamisel tõsta kinnituskood esile</string>
<string name="pref_highlight_entry_summary">Peale kinnituskoodi puudutamist tõsta ta ajutiselt esile ja tee seeläbi teistest kergemini eristatavaks</string>
<string name="pref_groups_multiselect_title">Vali mitu grupi korraga</string>
<string name="pref_groups_multiselect_summary">Võimalda mitme grupi korraga valimist</string>
<string name="pref_minimize_on_copy_title">Kopeerimisel peida rakendus</string>
<string name="pref_minimize_on_copy_summary">Peale kinnituskoodi kopeerimist minimeeri rakendus</string>
<string name="pref_copy_behavior_title">Kopeeri kinnituskoodid lõikelauale</string>
<string name="pref_search_behavior_title">Otsingu toimimine</string>
<string name="pref_pause_entry_title">Peale puudutamist peata kinnituskoodide muutumine</string>
<string name="pref_pause_entry_summary">Puudutamisel peata kinnituskoodide automaatne uuendamine - seni kuni ta on fookuses kood ei muutu. Eeldab, et „Puudutamisel tõsta kinnituskood esile“ või „Näitamiseks puuduta“ on sisse lülitatud.</string>
<string name="pin_keyboard_description">Numbriklahvistiku sisselülitamiseks sisesta uus salasõna. Palun arvesta, et selleks peab salasõna koosnema ainult numbritest</string>
<string name="pin_keyboard_error">Lukustusvaate numbriklahvistiku kasutuselevõtmisel tekkis viga</string>
<string name="pin_keyboard_error_description">Lukustusvaate numbriklahvistiku pole võimalik kasutusele võtta. Sinu salasõna peab koosnema ainult numbritest.</string>
<string name="pin_keyboard_disabled">Salasõna on muudetud. Lukustusvaate numbriklahvistik pole enam kasutusel.</string>
<string name="selected">Valitud</string>
<string name="dark_theme_title">Tume kujundus</string>
<string name="light_theme_title">Hele kujundus</string>
<string name="amoled_theme_title">Must kujundus AMOLED-i jaoks</string>
<string name="system_theme_title">Määratud akukasutuse optimeerija poolt</string>
<string name="system_amoled_theme_title">Määratud akukasutuse optimeerija poolt (AMOLED)</string>
<string name="normal_viewmode_title">Tavaline</string>
<string name="compact_mode_title">Kompaktne</string>
<string name="small_mode_title">Väike</string>
<string name="tiles_mode_title">Ruudustik</string>
<string name="unknown_issuer">Tundmatu väljaandja</string>
<string name="unknown_account_name">Tundmatu kasutajakonto nimi</string>
<plurals name="import_error_dialog">
<item quantity="one">Aegis ei suutnud importida %d-t kirjet ja see kirje jääb vahele. Leiad täpsemat teavet vea kohta, kui klõpsid viidet „üksikasjad“.</item>
<item quantity="other">Aegis ei suutnud importida %d-t kirjet ja need kirjed jäävad vahele. Leiad täpsemat teavet vea kohta, kui klõpsid viidet „üksikasjad“.</item>
</plurals>
<string name="unable_to_process_deeplink">Süvalinki ei õnnestunud töödelda</string>
<string name="unable_to_read_qrcode_file">Failis leiduvad QR-koodi ei õnnestunud töödelda: %s.</string>
<string name="unable_to_process_shared_text">Jagatud teksti pole võimalik töödelda ühekordse salasõnana</string>
<string name="unable_to_read_qrcode_files">Mõnede QR-koodide lugemine ja töötlemine pole võimalik. Importimisele kuuluvad vaid %1$d kirjet %2$d-st.</string>
<string name="unable_to_generate_qrcode">QR-koodi loomine ei õnnestu</string>
<string name="select_picture">Vali pilt</string>
<string name="select_icon">Vali ikoon</string>
<string name="tile_open_vault" comment="label for a quick settings tile that opens the app when tapped">Ava andmehoidla</string>
<string name="tile_open_scanner" comment="label for a quick settings tile that opens the QR code scanner when tapped">Ava skanner</string>
<string name="toggle_checkboxes">Märgista märkeruudud või eemalda märgistus</string>
<string name="search">Otsi</string>
<string name="channel_name_lock_status">Lukustuse olek</string>
<string name="channel_description_lock_status">Aegis võib luua püsiteavituse, mis kinnitab sulle, kui andmehoidla lukustub</string>
<string name="vault_unlocked_state">Andmehoidla pole lukus. Lukustamiseks klõpsi siin.</string>
<string name="version">Versioon</string>
<string name="changelog">Muudatuste logi</string>
<string name="whats_new">Mida on uut</string>
<string name="github_description">Lähtekood, veahaldus ja teave</string>
<string name="license">Litsents</string>
<string name="license_description">Aegis Authenticator on litsentseeritud GPLv3 alusel</string>
<string name="third_party_licenses">Kolmandate osapoolte litsentsid</string>
<string name="third_party_licenses_description">Aegise kasutatavate kolmandate osapoolte teekide litsentsid</string>
<string name="country_netherlands">Madalmaad</string>
<string name="email_us">Saada e-kiri</string>
<string name="visit_website">Külasta meie veebisaiti</string>
<string name="about_support">Kasutajatugi</string>
<string name="support_rate">Hinda meie rakendust</string>
<string name="support_rate_description">Toeta meid koostades arvustuse Google Play rakendustepoes</string>
<string name="webview_error">Selles nutiseadmes puudub webview-teegi tugi. Seda on vaja muudatuste logi ja litsentside kuvamiseks. Tegemist on operatsioonisüsteemi komponendiga.</string>
<string name="email">E-post</string>
<string name="time_sync_warning_title">Kellaaja automaatne sünkroniseerimine</string>
<string name="time_sync_warning_message">Õigete tuvastusskoodide loomiseks vajab Aegis, et kellaajad nutiserdme ja serveri vahel on sünkroonis. Isegi mõnesekundiline erinevus võib tulemuseks anda vale koodi. Tundub, et sinu nutiseadmes on puudu automaatne aja sünkroniseerimine. Kas sa tahaksid seda nüüd teha?</string>
<string name="time_sync_warning_disable">Ära hoiata mind enam. Ma tean, mida ma teen.</string>
<string name="google_qr_export_unrelated">Tuvastasin mitteseotud QR-koodi. Proovi skanneri uuesti käivitamist.</string>
<plurals name="google_qr_export_scanned">
<item quantity="one">Skaneerisin %1$d/%2$d QR-koodi</item>
<item quantity="other">Skaneerisin %1$d/%2$d QR-koodi</item>
</plurals>
<string name="google_qr_export_unexpected">Eeldasin näga QR-koodi #%1$d, aga selle asemel skaneerisin #%2$d</string>
<string name="backup_error_bar_message"><b>Andmehoidla hiljutine varundamine ei õnnestunud</b></string>
<string name="backup_error_dialog_details" comment="The first parameter is the type of backup (e.g. built-in or Android backup). The second parameter is an elapsed time in the style of 'x seconds/minutes/days ago'.">Vea tekkimise tõttu hiljutine andmehoidla varundus %1$s abil ei õnnestunud. Varukoopia loomise katse toimus %2$s. Selleks, et varundus toimiks korrektselt, palun kontrolli varunduse seadistusi. </string>
<string name="backup_permission_error_dialog_details" comment="The first parameter is the type of backup (e.g. built-in or Android backup). The second parameter is an elapsed time in the style of 'x seconds/minutes/days ago'.">Kuna Aegisel polnud õigust kirjutada varunduse kausta, siis hiljutine andmehoidla varundus %1$s abil ei õnnestunud. Varukoopia loomise katse toimus %2$s. Selline viga võib tekkida, kui sa oled hiljuti muutnud varukoopia kausta nime või ta teisaldanud, samuti ka kui oled hiljuti Aegise varukoopiast taastanud. Palun seadista varukoopia kaust uuesti. </string>
<string name="backup_system_builtin">Aegise sisseehitatud automaatne varundus</string>
<string name="backup_system_android">Androidi pilvevarundus</string>
<string name="backup_reminder_bar_message_with_latest" comment="The parameter is an elapsed time in the style of 'x seconds/minutes/days ago'">Viimane varukoopia on aegunud (%s) </string>
<string name="backup_reminder_bar_message">Muudatused on varundamata </string>
<string name="backup_reminder_bar_dialog_title">Muudatused on varundamata</string>
<string name="backup_reminder_bar_dialog_summary">Andmehoidla viimased muudatused on veel varundamata. Vältimaks, et kaotad ligipääsu oma kasutajakontodele, on oluline, et teed sagedasti varukoopiaid. Palun kaalu automaatse varunduse kasutuselevõtmist seadistuste menüüst. </string>
<string name="backup_reminder_bar_dialog_accept">Seadista varundamine</string>
<string name="backup_plaintext_export_warning"><b>Andmehoidla on hiljuti eksporditud lihtteksti vormingus</b></string>
<string name="pref_show_plaintext_warning_hint">Ära näita seda hoiatust uuesti</string>
<string name="backup_plaintext_warning_explanation">Sa näed seda hoiatusest, sest oled hiljuti andmehoidlat eksportinud krüptimata vormingus. Säilitamaks sinu autentimiskirjete turvalisust soovitame me sul selle faili kustutada kohe, kui teda enam vaja pole.</string>
<string name="switch_camera">Vaheta kaamerat</string>
<string name="empty_list">Me ei saa sulle näidata ühtegi koodi. Kirjete lisamiseks klõpsi + ikooni lehe all paremas nurgas</string>
<string name="empty_list_title">Ühtegi kirjet ei leidu</string>
<string name="empty_group_list">Ühtegi gruppi pole näidatud. Saad neid lisada kirje muutmisvaatest</string>
<string name="empty_group_list_title">Ühtegi gruppi ei leidu</string>
<string name="no_icon_packs">Ühtegi ikoonipakki pole veel imporditud. Mõne sellise importimisejs klõpsi + ikooni. Soovitus: vaata ka <a href="https://aegis-icons.github.io">aegise ikoone</a>.</string>
<string name="no_icon_packs_title">Ikoonipakke pole</string>
<string name="pick_icon">Vali ikoon</string>
<string name="uncategorized">Kategoriseerimata</string>
<string name="done">Valmis</string>
<plurals name="qr_count">
<item quantity="one">%d / %d QR-koodi</item>
<item quantity="other">%d / %d QR-koodi</item>
</plurals>
<string name="next">Edasi</string>
<string name="previous">Tagasi</string>
<string name="copy_uri">Kopeeri URI</string>
<string name="unable_to_copy_uri_to_clipboard">URI kopeerimine lõikelauale ei õnnestunud</string>
<string name="uri_copied_to_clipboard">URI on kopeeritud lõikelauale</string>
<string name="transfer_entry_description">Skaneeri seda QR-koodi autentimisrakendusega, kuhu soovid seda kirjet eksportida</string>
<string name="transfer_entry_brightness">Täisekraani ereduse sisse/välja lülitamiseks klõosi QR-koodi</string>
<string name="google_auth_compatible_transfer_description">Skaneeri neid QR-koode Aegise või Google Authenticatoriga.\n\nGoogle Authenticatori tehniliste piirangute tõttu on võimalik eksportida vaid TOTP ja HOTP tunnuslube, mis kasutavad SHA1 räsi ning kuvavad tulemuseks 6-kohalisi koode</string>
<string name="password_strength_very_weak">Väga nõrk</string>
<string name="password_strength_weak">Nõrk</string>
<string name="password_strength_fair">Keskpärane</string>
<string name="password_strength_good">Hea</string>
<string name="password_strength_strong">Tugev</string>
<string name="password_strength_unknown">Salasõna tugevuse analüüsimiseks on ta liiga pikk</string>
<string name="pref_pin_keyboard_title">Kasuta lukustusvaates numbriklahvistikku</string>
<string name="pref_pin_keyboard_summary">Kasuta seda eelistust, kui soovid lukustusvaates näha numbriklahvistikku. Kasutatav vaid numbritest koosneva salasõna puhul</string>
<string name="title_activity_preferences">Seadistused</string>
<string name="title_activity_manage_groups">Halda gruppe</string>
<string name="title_activity_transfer">Kirjete teisaldamine mujale</string>
<string name="title_activity_about">Rakenduse teave</string>
<string name="title_activity_edit_entry">Muuda kirjet</string>
<string name="title_activity_scan_qr">Skanneeri QR-koodi</string>
<string name="title_activity_import_entries">Impordi kirjeid</string>
<string name="title_activity_assign_icons">Lisa ikoone</string>
<string name="title_activity_licenses">Kolmandate osapoolte litsentsid</string>
<string name="dialog_wipe_entries_title">Kõikide kirjete kustutamine</string>
<string name="dialog_wipe_entries_message">Sinu andmehoidlas juba leidub kirjeid. Kas sa soovid enne importimist need kirjed eemaldada?\n\n<b>Seda tehes kaotad sa jäädavalt ligipääsu eemaldatud kirjetele ja vastavale autentimisteenusele</b>.</string>
<string name="dialog_wipe_entries_checkbox">Kustuta andmehoidla sisu</string>
<string name="panic_trigger_ignore_toast">Aegis tuvastas paanikanupu vajutuse, kuid kuna vastav seadistus on keelatud, siis me ei tee midagi</string>
<string name="pref_panic_trigger_title">Paanikanupu vajutusel kustuta andmehoidla</string>
<string name="pref_panic_trigger_summary">Kui Guardian Projekti Ripple\'i rakenduses vajutatakse paanikanuppu, siis kustuta andmehoidla</string>
<string name="import_vault">Impordi Aegise andmehoidla</string>
<string name="import_vault_hint">Kas soovid andmeid importida mõnest teisest kaheastmelise autentimise haldusrakendusest? Esmalt lõpeta algseadistamine ja seejärel ava rakenduse seadistustest importimise valikud.</string>
<plurals name="import_duplicate_toast">
<item quantity="one">%d võimalik kontrollimata duplikaat. Palun vaata kirjete loend üle.</item>
<item quantity="other">%d võimalikku kontrollimata duplikaati. Palun vaata kirjete loend üle.</item>
</plurals>
<string name="importer_help_2fas">Ava 2FAS Authenticatori varukoopia fail.</string>
<string name="importer_help_aegis">Ava Aegise ekspordi- või varukoopia fail.</string>
<string name="importer_help_authenticator_plus">Määratle Authenticator Plusi ekspordifail, mille saad rakendusest siit: <b>Seadistused -&gt; Varundus ja taastamine -&gt; Ekspordi teksti- või html-failina</b>.</string>
<string name="importer_help_authy">Ava <b>/data/data/com.authy.authy/shared_prefs/com.authy.storage.tokens.authenticator.xml</b> faili koopia, leiad Authy sisemisest andmeruumist.</string>
<string name="importer_help_andotp">Ava andOTP ekspordi- või varukoopia fail.</string>
<string name="importer_help_bitwarden">Ava Bitwardeni ekspordi- või varukoopia fail. Krüptitud failid pole toetatud.</string>
<string name="importer_help_battle_net_authenticator">Ava <b>/data/data/com.blizzard.messenger/shared_prefs/com.blizzard.messenger.authenticator_preferences.xml</b> faili koopia, mille leiad Battle.net Authenticatori sisemisest andmeruumist.</string>
<string name="importer_help_duo">Ava <b>/data/data/com.duosecurity.duomobile/files/duokit/accounts.json</b> faili koopia, mille leiad DUO sisemisest andmeruumist.</string>
<string name="importer_help_ente_auth">Ava Ente Authi ekspordifail. Hetkel on toetatud vaid krüptimata failidest importimine.</string>
<string name="importer_help_freeotp">FreeOTP 2: Ava varundatud fail.\nFreeOTP 1.x: Ava <b>/data/data/org.fedorahosted.freeotp/shared_prefs/tokens.xml</b> faili koopia, mille leiad FreeOTP sisemise andmeruumi kaustast.</string>
<string name="importer_help_freeotp_plus">Ava FreeOTP+ ekspordifail.</string>
<string name="importer_warning_title_freeotp2">FreeOTP 2 ühilduvus</string>
<string name="importer_warning_message_freeotp2">FreeOTP 2 rakendusega on seotud mitu viga, mis võib tekitada olukorra, kus varukoopiad on vigased. Aegis proovib olukorrast päästa maksimumi, aga võib juhtuda, et mõned või lausa kõik kirjed jäävad importimata.</string>
<string name="importer_help_google_authenticator"><b>Toetatud on ainult Google Authenticatori versiooni 5.10 või varasemad failid</b>.\n\nAva <b>/data/data/com.google.android.apps.authenticator2/databases/databases</b> faili koopia, mille leiad Google Authenticatori sisemise andmeruumi kaustast.</string>
<string name="importer_help_microsoft_authenticator">Ava <b>/data/data/com.azure.authenticator/databases/PhoneFactor</b> faili koopia, mille leiad Microsoft Authenticatori sisemisest andmeruumist.</string>
<string name="importer_help_plain_text">Lisa siia lihttekstina vormindatud fail, kus iga Google Authenticatori URI asub omaette real.</string>
<string name="importer_help_steam"><b>Steam 3.0 ja uuemad pole toetatud</b>. Ava <b>/data/data/com.valvesoftware.android.steam.community/files/Steamguard-*.json</b> faili koopia, mille leiad Steami sisemise andmeruumi kaustast.</string>
<string name="importer_help_stratum">Ava Stratumi ekspordifail, mille saad rakendusest valides <b>„Seadistused“ → „Varundus“ → „Varunda krüptitud faili (soovitatud)“</b>.</string>
<string name="importer_help_totp_authenticator">Ava TOTP Authenticatori ekspordifail.</string>
<string name="importer_help_winauth">Ava WinAuthi ekspordifail.</string>
<string name="import_assign_icons_dialog_title">Lisa ikoone</string>
<string name="import_assign_icons_dialog_text">Kas sa sooviksid lisada imporditud kirjetele ikoone?</string>
<string name="importer_encrypted_exception_google_authenticator">Krüptitud kirje jäi vahele: %s</string>
<string name="importer_help_direct">Impordi kirjed otse „%s“ rakendusest. See eeldab, et rakendus on nutiseadmesse paigaldatud ja Aegisel on juurkasutaja õigused.</string>
<string name="groups">Grupid</string>
<string name="pref_focus_search">Rakenduse käivitamisel pane fookus otsingule</string>
<string name="pref_focus_search_summary">Rakenduse käivitamisel võimalda kohe alustada otsingut.</string>
<string name="pref_grouping_halves">Rühmita kahes osas</string>
<string name="pref_grouping_none">Ära rühmita</string>
<string name="pref_grouping_size_two">Rühmita kahekaupa</string>
<string name="pref_grouping_size_three">Rühmita kolmekaupa</string>
<string name="pref_grouping_size_four">Rühmita neljakaupa</string>
<string name="pref_copy_behavior_never">Ära kopeeri iialgi</string>
<string name="pref_copy_behavior_single_tap">Kopeeri ühe puudutusega</string>
<string name="pref_copy_behavior_double_tap">Kopeeri kahe puudutusega</string>
<string name="pref_account_name_position_hidden">Peidetud</string>
<string name="pref_account_name_position_end">Väljaandja kõrval</string>
<string name="pref_account_name_position_below">Väljaandja all</string>
<plurals name="time_elapsed_seconds" tools:ignore="UnusedResources">
<item quantity="one">%d sekund tagasi</item>
<item quantity="other">%d sekundit tagasi</item>
</plurals>
<plurals name="time_elapsed_minutes" tools:ignore="UnusedResources">
<item quantity="one">%d minut tagasi</item>
<item quantity="other">%d minutit tagasi</item>
</plurals>
<plurals name="time_elapsed_hours" tools:ignore="UnusedResources">
<item quantity="one">%d tund tagasi</item>
<item quantity="other">%d tundi tagasi</item>
</plurals>
<plurals name="time_elapsed_days" tools:ignore="UnusedResources">
<item quantity="one">%d päev tagasi</item>
<item quantity="other">%d päeva tagasi</item>
</plurals>
<plurals name="time_elapsed_years" tools:ignore="UnusedResources">
<item quantity="one">%d aasta tagasi</item>
<item quantity="other">%d aastat tagasi</item>
</plurals>
<plurals name="dropdown_checkboxes_default_count">
<item quantity="one">%d kirje on valitud</item>
<item quantity="other">%d kirjet on valitud</item>
</plurals>
</resources>
@@ -0,0 +1,5 @@
<?xml version="1.0" encoding="utf-8"?>
<resources>
<string name="system_theme_title">Sistemaren defektuzkoa</string>
<string name="system_amoled_theme_title">Sistemaren defektuzkoa (AMOLED)</string>
</resources>
+13 -1
View File
@@ -64,7 +64,14 @@
<string name="pref_backups_reminder_summary">Erakutsi segurtasun kopia egiteko gogorarazpena zure azken aldaketen kopiarik ez bada egin.</string>
<string name="pref_backups_reminder_dialog_title">Desaktibatu segurtasun kopiaren gogorarazpena</string>
<string name="pref_backups_reminder_dialog_summary">Gogorarazpena desaktibatzean Aegisek ez dizu kopien inguruko abisurik emango. Honek zure gakoak galtzea ekar dezake. Gogorarazpena desaktibatu egin nahi duzu?</string>
<string name="pref_backups_versioning_strategy_title">Segurtasun kopien estrategia</string>
<string name="pref_backups_versioning_strategy_keep_x_versions">Bertsio kopuru bat mantendu</string>
<string name="pref_backups_versioning_strategy_single_backup">Segurtasun kopia bakarra</string>
<string name="pref_backups_versioning_strategy_single_backup_warning">Aukeratutako estrategia ez da fidagarria eta ez dugu gomendatzen. Segurtasun kopia bakarrak huts egiten badu datuak galdu egin ditzakezu.</string>
<string name="pref_backups_versioning_strategy_dialog_title">Aukeratu segurtasun kopien estrategia</string>
<string name="pref_backups_location_title">Segurtasun kopien kokalekua</string>
<string name="pref_backups_location_summary">Segurtasun-kopiak hemen gordeko dira</string>
<string name="pref_backup_location_summary">Segurtasun-kopiak hemen gordeko dira</string>
<string name="pref_backups_trigger_title">Segurtasun-kopien abiarazlea</string>
<string name="pref_backups_trigger_summary">Abiarazi segurtasun-kopia eskuz</string>
<string name="pref_backups_versions_title">Gorde beharreko bertsio kopurua</string>
@@ -220,6 +227,8 @@
<string name="snackbar_authentication_method">Aukeratu autentifikazio modua mesedez</string>
<string name="encrypting_vault">Biltegia zifratzen</string>
<string name="exporting_vault">Biltegia esportatzen</string>
<string name="optimizing_icon">Ikonoak optimizatzen</string>
<string name="optimizing_icon_multiple">Ikonoak optimizatzen %1$d/%2$d</string>
<string name="reading_file">Fitxategia irakurtzen</string>
<string name="requesting_root_access">Root sarbidea eskatzen</string>
<string name="analyzing_qr">QR kodea aztertzen</string>
@@ -356,6 +365,8 @@
<string name="clear">Garbitu</string>
<string name="pref_highlight_entry_title">Nabarmendu tokenak ukitzean</string>
<string name="pref_highlight_entry_summary">Egin elkarrengandik errazago bereizten diren tokenak, sakatzen dituzunean aldi baterako nabarmenduz</string>
<string name="pref_groups_multiselect_title">Talde bat baino gehiago aukeratu</string>
<string name="pref_groups_multiselect_summary">Talde bat baino gehiago aldi berean aukeratzea baimendu</string>
<string name="pref_minimize_on_copy_title">Txikitu kopiatzean</string>
<string name="pref_minimize_on_copy_summary">Aplikazioa txikitu tokena kopiatutakoan</string>
<string name="pref_copy_behavior_title">Kopiatu tokenak arbelera</string>
@@ -456,6 +467,7 @@
<string name="unable_to_copy_uri_to_clipboard">Ezin da URIa arbelean kopiatu</string>
<string name="uri_copied_to_clipboard">URIa arbelean kopiatu da</string>
<string name="transfer_entry_description">Eskaneatu QR kode hau sarrera transferitu nahi diozun aitentifikazio-aplikazioarekin</string>
<string name="transfer_entry_brightness">Sakatu QR kodea pantaila osoan ikusteko</string>
<string name="google_auth_compatible_transfer_description">Eskaneatu QR kode hauek Aegis edo Google Authenticator erabiliz.\n\nGoogle Authenticator aplikazioaren mugak direla eta, SHA1 darabilten eta 6 zenbakiko kodeak erabiltzen dituzten TOTP &amp; HOTP tokenak bakarrik sartzen dira</string>
<string name="password_strength_very_weak">Oso ahula</string>
<string name="password_strength_weak">Ahula</string>
@@ -489,7 +501,6 @@
<string name="importer_help_2fas">Aukeratu 2FAS Authenticator segurtasun-kopia fitxategia.</string>
<string name="importer_help_aegis">Aegisen esportazio/segurtasun-kopia fitxategia aukeratu.</string>
<string name="importer_help_authenticator_plus">Authenticator Plus esportazio fitxategia aukeratu. Lortzeko modua: <b>Settings -&gt; Backup &amp; Restore -&gt; Export as Text and HTML</b>.</string>
<string name="importer_help_authenticator_pro">Aukeratu Authenticator Proren esportazio fitxategia <b>Settings -&gt; Back up -&gt; Back up to encrypted file (recommended)</b> aukeratik lortu bezala.</string>
<string name="importer_help_authy"><b>/data/data/com.authy.authy/shared_prefs/com.authy.storage.tokens.authenticator.xml</b> fitxategia aukeratu.</string>
<string name="importer_help_andotp">andOTPren esportazio/segurtasun-kopia fitxategia aukeratu.</string>
<string name="importer_help_bitwarden">Kargatu Bitwardenen esportazio/segurtasun-kopia fitxategi bat. Ezin dituzu zifratutako fitxategiak kargatu.</string>
@@ -505,6 +516,7 @@
<string name="importer_help_plain_text">Google Authenticator URIak dituen testu hutseko fitxategia aukeratu.</string>
<string name="importer_help_steam"><b>Steam v3.0 eta berriagoak ezin dira erabili.</b>erabili
<b>/data/data/com.valvesoftware.android.steam.community/files/Steamguard-*.json</b> fitxategiaren kopia, berau Steamen barne biltegiratzearen karpetan egongo da.</string>
<string name="importer_help_stratum">Aukeratu Stratumen esportazio fitxategia <b>Settings -&gt; Back up -&gt; Back up to encrypted file (recommended)</b> aukeratik lortu bezala.</string>
<string name="importer_help_totp_authenticator">TOTP Authenticatoren esportazio fitxategia aukeratu.</string>
<string name="importer_help_winauth">WinAuthen esportazio fitxategia aukeratu.</string>
<string name="import_assign_icons_dialog_title">Esleitu ikonoak</string>
@@ -0,0 +1,2 @@
<?xml version="1.0" encoding="utf-8"?>
<resources></resources>
@@ -14,6 +14,7 @@
<string name="yandex_pin">پین (۴ تا ١۶ رقم)</string>
<string name="suggested">پیشنهادی</string>
<string name="usage_count">تعداد دفعات استفاده</string>
<string name="warning">اخطار</string>
<string name="pref_cat_appearance_app">نرم افزار</string>
<string name="pref_cat_appearance_entries">مطالب</string>
<string name="pref_cat_backups_android">اندروید</string>
@@ -33,7 +34,10 @@
<string name="pref_select_theme_title">پوسته</string>
<string name="pref_view_mode_title">حالت نمایش</string>
<string name="pref_lang_title">زبان</string>
<string name="pref_show_icons_title">نمایش آیکون ها</string>
<string name="pref_code_group_size_title">حالت نمایش کد</string>
<string name="pref_account_name_position_title">نمایش نام حساب کاربری</string>
<string name="pref_shared_issuer_account_name_title">نمایش نام اکانت فقط در مواقع لازم</string>
<string name="pref_import_file_title">وارد کردن از فایل</string>
<string name="pref_import_file_summary">وارد کردن توکن ها از فایل</string>
<string name="pref_android_backups_title">پشتیبان‌گیری ابری Android</string>
@@ -41,7 +45,16 @@
<string name="pref_android_backups_hint"><i>پشتیبان‌گیریِ دستگاه به دستگاه (D2D) بدون در نظر گرفتن تنظیمات بالا، همواره مجاز است</i></string>
<string name="pref_backups_title">بصورت خودکار از مخزن پشتیبانگیری شود</string>
<string name="pref_backups_summary">به صورت خودکار از مخزن ها در کارت حافظه پیشتیبان گیری شود. این ویژگی فقط مخصوص مخزن های رمزگذاری شده است.</string>
<string name="pref_backups_reminder_title">یادآوری پشتیبان‌گیری</string>
<string name="pref_backups_reminder_summary">نمایش یادآوری برای پشتیبان گیری از داده ها در صورتی که شما تغییرات اخیرتان را پشتیبان گیری نکرده اید.</string>
<string name="pref_backups_reminder_dialog_title">غیر فعال کردن یادآوری پشتیبان گیری</string>
<string name="pref_backups_versioning_strategy_title">روش پشتیبان‌گیری</string>
<string name="pref_backups_versioning_strategy_keep_x_versions">نگه داشتن تعدادی نسخه پشتیبان</string>
<string name="pref_backups_versioning_strategy_single_backup">یک نسخه پشتیبان</string>
<string name="pref_backups_versioning_strategy_dialog_title">یک روش پشتیبان‌گیری انتخاب کنید</string>
<string name="pref_backups_location_title">مکان ذخیره پشتیبان</string>
<string name="pref_backups_location_summary">فایل‌ها پشتیبان گیری در این آدرس ذخیره می‌شوند</string>
<string name="pref_backup_location_summary">فایل های پشتیبان گیری در این مکان ذخیره می‌شوند</string>
<string name="pref_backups_trigger_title">پشتیبان‌گیری</string>
<string name="pref_backups_trigger_summary">گرفتن پیشتیبان به صورت دستی</string>
<string name="pref_backups_versions_title">تعداد نسخه‌هایی که مایلید نگه‌دارید</string>
@@ -49,11 +62,13 @@
<item quantity="one">نگه داشتن %1$d نسخه از فایل پشتیبان‌گیری</item>
<item quantity="other">نگه داشتن %1$d نسخه از فایل پشتیبان‌گیری</item>
</plurals>
<string name="pref_backups_versions_infinite_summary">بی‌نهایت نسخه پشتیبان ذخیره شود</string>
<string name="pref_import_app_title">وارد کردن از برنامه</string>
<string name="pref_import_app_summary">وارد کردن توکن‌ها از برنامه (نیاز به دسترسی روت)</string>
<string name="pref_export_title">صادر کردن</string>
<string name="pref_export_summary">صادر کردن مخزن</string>
<string name="pref_password_reminder_title">یادآوری کلمه عبور</string>
<string name="pref_google_auth_export_title">استخراج داده ها برای Google Authenticator</string>
<string name="pref_password_reminder_summary">یک یادآوری %s هنگام وارد کردن گذرواژه نمایش دهید، تا آن را فراموش نکنید.</string>
<string name="pref_password_reminder_summary_disabled">غیرفعال</string>
<string name="pref_secure_screen_title">امنیت صفحه</string>
@@ -0,0 +1,5 @@
<?xml version="1.0" encoding="utf-8"?>
<resources>
<string name="system_theme_title">Järjestelmän oletus</string>
<string name="system_amoled_theme_title">Järjestelmän oletus (AMOLED)</string>
</resources>
+13 -1
View File
@@ -227,6 +227,8 @@
<string name="snackbar_authentication_method">Valitse todennusmenetelmä</string>
<string name="encrypting_vault">Holvia salataan</string>
<string name="exporting_vault">Viedään holvia</string>
<string name="optimizing_icon">Optimoidaan kuvaketta</string>
<string name="optimizing_icon_multiple">Optimoidaan kuvakkeita %1$d/%2$d</string>
<string name="reading_file">Luetaan tiedostoa</string>
<string name="requesting_root_access">Pyydetään root-oikeuksia</string>
<string name="analyzing_qr">Analysoidaan QR-koodia</string>
@@ -361,8 +363,17 @@
<string name="preference_reset_usage_count_dialog">Haluatko varmasti nollata kaikkien holvisi kohteiden käyttömäärän?</string>
<string name="note" comment="Users can add a note to an entry">Muistiinpano</string>
<string name="clear">Tyhjennä</string>
<string name="dialog_duplicate_entry_overwrite_title">Korvaa olemassa olevat kohteet</string>
<string name="dialog_duplicate_entry_overwrite_subtitle">Korvaa olemassa olevat kohteet uusilla. Tätä toimintoa ei voi kumota</string>
<string name="dialog_duplicate_entry_suffix_title">Lisää pääte</string>
<string name="dialog_duplicate_entry_cancel_title">Peruuta tallennus</string>
<string name="dialog_duplicate_entry_overwrite_dialog_title">Vahvista poisto</string>
<string name="pref_haptic_feedback_summary">Laitteesi värisee, kun koodit päivittyvät</string>
<string name="pref_haptic_feedback_title">Haptinen palaute</string>
<string name="pref_highlight_entry_title">Korosta todennuskoodit napauttamalla</string>
<string name="pref_highlight_entry_summary">Tee todennuskoodeista helpompi erottaa toisistaan korostamalla niitä tilapäisesti napauttamalla</string>
<string name="pref_groups_multiselect_title">Valitse useita ryhmiä</string>
<string name="pref_groups_multiselect_summary">Salli useiden ryhmien valitseminen samanaikaisesti</string>
<string name="pref_minimize_on_copy_title">Pienennä kopioidessa</string>
<string name="pref_minimize_on_copy_summary">Pienennä sovellus todennuskoodin kopioinnin jälkeen</string>
<string name="pref_copy_behavior_title">Kopioi todennuskoodit leikepöydälle</string>
@@ -466,6 +477,7 @@
<string name="unable_to_copy_uri_to_clipboard">URI:a ei voitu kopioida leikepöydälle</string>
<string name="uri_copied_to_clipboard">URI kopioitiin leikepöydälle</string>
<string name="transfer_entry_description">Skannaa tämä QR-koodi todennussovelluksella, johon haluat siirtää tämän kohteen</string>
<string name="transfer_entry_brightness">Napauta QR-koodia muuttaaksesi koko näytön kirkkautta</string>
<string name="google_auth_compatible_transfer_description">Skannaa nämä QR-koodit Aegisilla tai Google Authenticatorilla.\n\nGoogle Authenticator -sovelluksen rajoitusten vuoksi, vain SHA1-suojausta ja 6-numeroisia koodeja tuottavat TOTP- ja HOTP-todennuskoodit sisällytetään</string>
<string name="password_strength_very_weak">Erittäin heikko</string>
<string name="password_strength_weak">Heikko</string>
@@ -499,7 +511,6 @@
<string name="importer_help_2fas">Anna 2FAS Authenticatorin varmuuskopiotiedosto.</string>
<string name="importer_help_aegis">Anna Aegisisin vienti-/varmuuskopiotiedosto.</string>
<string name="importer_help_authenticator_plus">Anna Authenticator Plus -varmuuskopiotiedosto, jonka saat menemällä <b>Asetukset -&gt;Varmuuskopiointi ja palautus -&gt; Vie teksti- tai HTML-tiedostona</b>.</string>
<string name="importer_help_authenticator_pro">Toimita Authenticator Pro -vientitiedosto, jonka löydät menemällä <b>Asetukset -&gt; Varmuuskopioi -&gt; Varmuuskopioi salattuun tiedostoon (suositus)</b>.</string>
<string name="importer_help_authy">Anna kopio tiedostosta <b>/data/data/com.authy.authy/shared_prefs/com.authy.storage.tokens.authenticator.xml</b>, joka sijaitsee Authyn sisäisessä tallennushakemistossa.</string>
<string name="importer_help_andotp">Anna andOTP:n vienti-/varmuuskopiotiedosto.</string>
<string name="importer_help_bitwarden">Anna Bitwardenin vienti-/varmuuskopiotiedosto. Salattuja tiedostoja ei tueta.</string>
@@ -514,6 +525,7 @@
<string name="importer_help_microsoft_authenticator">Anna kopio tiedostosta <b>/data/data/com.azure.authenticator/databases/PhoneFactor</b>, joka sijaitsee Microsoft Authenticatorin sisäisessä tallennushakemistossa.</string>
<string name="importer_help_plain_text">Anna raakatekstitiedosto, joka sisältää Google Authenticatorin URIn jokaisella rivillä.</string>
<string name="importer_help_steam"><b>Steamin versiota 3.0 ja uudempia ei tueta</b>. Toimita kopio tiedostosta <b>/data/data/com.valvesoftware.android.steam.community/files/Steamguard-*.json</b>, joka sijaitsee Steamin sisäisen tallennustilan hakemistossa.</string>
<string name="importer_help_stratum">Toimita Starum-vientitiedosto, jonka löydät menemällä <b>Asetukset -&gt; Varmuuskopioi -&gt; Varmuuskopioi salattuun tiedostoon (suositus)</b>.</string>
<string name="importer_help_totp_authenticator">Anna TOTP Authenticatorin vientitiedosto.</string>
<string name="importer_help_winauth">Anna WinAuthin vientitiedosto.</string>
<string name="import_assign_icons_dialog_title">Määritä kuvakkeet</string>
@@ -0,0 +1,5 @@
<?xml version="1.0" encoding="utf-8"?>
<resources>
<string name="system_theme_title">Valeurs par défaut du système</string>
<string name="system_amoled_theme_title">Valeur par défaut du système (AMOLED)</string>
</resources>
+22 -1
View File
@@ -227,6 +227,8 @@
<string name="snackbar_authentication_method">Veuillez sélectionner une méthode d\'authentification</string>
<string name="encrypting_vault">Chiffrement du coffre-fort</string>
<string name="exporting_vault">Export du coffre-fort</string>
<string name="optimizing_icon">Optimisation de l\'icône</string>
<string name="optimizing_icon_multiple">Optimisation des icônes %1$d/%2$d</string>
<string name="reading_file">Lecture du fichier</string>
<string name="requesting_root_access">Demande d\'accès root</string>
<string name="analyzing_qr">Analyse du code QR</string>
@@ -361,8 +363,25 @@
<string name="preference_reset_usage_count_dialog">Êtes-vous sûr de vouloir définir le nombre d\'utilisations de chaque entrée de votre coffre-fort à 0 ?</string>
<string name="note" comment="Users can add a note to an entry">Note</string>
<string name="clear">Effacer</string>
<string name="dialog_duplicate_entry_title" comment="'Duplicate' is a noun here">Dupliquer l\'entrée</string>
<string name="dialog_duplicate_entry_message">Cette entrée a le même nom et émetteur qu\'une ou plusieurs entrées existantes. Comment voulez-vous procéder?</string>
<string name="dialog_duplicate_entry_overwrite_title">Écraser la ou les entrées existantes</string>
<string name="dialog_duplicate_entry_overwrite_subtitle">Remplacer la ou les entrées existantes par la nouvelle. Cette action ne peut pas être annulée</string>
<string name="dialog_duplicate_entry_suffix_title">Ajouter un suffixe</string>
<string name="dialog_duplicate_entry_suffix_subtitle">Ajouter un suffixe au nom de cette nouvelle entrée. Le nouveau nom sera : %s</string>
<string name="dialog_duplicate_entry_cancel_title">Annuler l\'enregistrement</string>
<string name="dialog_duplicate_entry_cancel_subtitle">Vous permet de modifier l\'entrée avant de tenter de l\'enregistrer à nouveau</string>
<plurals name="dialog_duplicate_entry_overwrite_dialog_message">
<item quantity="one">Êtes-vous sûr de vouloir supprimer %d entrée avec le nom suivant :\n\n%s - %s</item>
<item quantity="other">Êtes-vous sûr de vouloir supprimer %d entrées avec le nom suivant :\n\n%s - %s</item>
</plurals>
<string name="dialog_duplicate_entry_overwrite_dialog_title">Confirmer la suppression</string>
<string name="pref_haptic_feedback_summary">Faire vibrer votre appareil lorsque les codes sont actualisés</string>
<string name="pref_haptic_feedback_title">Retour haptique</string>
<string name="pref_highlight_entry_title">Surligner les jetons lorsqu\'ils sont appuyés</string>
<string name="pref_highlight_entry_summary">Rendre les jetons plus faciles à distinguer les uns des autres en les surlignant temporairement lorsqu\'ils sont appuyés</string>
<string name="pref_groups_multiselect_title">Groupes avec sélection multiple</string>
<string name="pref_groups_multiselect_summary">Autoriser la sélection de plusieurs groupes en même temps</string>
<string name="pref_minimize_on_copy_title">Minimiser lors de la copie</string>
<string name="pref_minimize_on_copy_summary">Minimiser l\'application après avoir copié un jeton</string>
<string name="pref_copy_behavior_title">Copier les jetons dans le presse-papier</string>
@@ -466,6 +485,7 @@
<string name="unable_to_copy_uri_to_clipboard">Impossible de copier l\'URI dans le presse-papier</string>
<string name="uri_copied_to_clipboard">URI copiée dans le presse-papier</string>
<string name="transfer_entry_description">Scannez ce code QR avec l\'application d\'authentification vers laquelle vous souhaitez transférer cette entrée</string>
<string name="transfer_entry_brightness">Appuyer sur le code QR pour activer la luminosité maximale</string>
<string name="google_auth_compatible_transfer_description">Scannez ces codes QR avec Aegis ou Google Authenticator.\n\nEn raison des limitations de l\'application Google Authenticator, seuls les jetons TOTP &amp; HOTP qui utilisent SHA1 et produisent des codes à 6 chiffres sont inclus</string>
<string name="password_strength_very_weak">Très faible</string>
<string name="password_strength_weak">Faible</string>
@@ -499,7 +519,6 @@
<string name="importer_help_2fas">Fournir une sauvegarde 2FAS Authenticator.</string>
<string name="importer_help_aegis">Fournir un export/sauvegarde Aegis.</string>
<string name="importer_help_authenticator_plus">Fournir un export Authenticator Plus obtenu via <b>Paramètres -&gt; Sauvegarde &amp; Restauration -&gt; Exporter en tant que texte et HTML</b>.</string>
<string name="importer_help_authenticator_pro">Fournir un export Authenticator Pro obtenu via <b>Paramètres -&gt; Sauvegarde -&gt; Sauvegarder en tant que fichier chiffré (recommandé)</b>.</string>
<string name="importer_help_authy">Fournir une copie de <b>/data/com.authy.authy/shared_prefs/com.authy.storage.tokens.authenticator.xml</b>, situé dans le répertoire de stockage interne d\'Authy.</string>
<string name="importer_help_andotp">Fournir un export/sauvegarde andOTP.</string>
<string name="importer_help_bitwarden">Fournir un export/sauvegarde Bitwarden. Les fichiers chiffrés ne sont pas pris en charge.</string>
@@ -513,7 +532,9 @@
<string name="importer_help_google_authenticator"><b>Seuls les fichiers de base de données de Google Authenticator v5.10 et antérieures sont pris en charge</b>.\n\nFournir une copie de <b>/data/data/com.google.android.apps.authenticator2/databases/databases</b>, situé dans le répertoire de stockage interne de Google Authenticator.</string>
<string name="importer_help_microsoft_authenticator">Fournir une copie de <b>/data/data/com.azure.authenticator/databases/PhoneFactor</b>, situé dans le répertoire de stockage interne de Microsoft Authenticator.</string>
<string name="importer_help_plain_text">Fournir un fichier texte brut avec une URI Google Authenticator sur chaque ligne.</string>
<string name="importer_help_proton_authenticator">Fournir un export Proton Authenticator (.json) obtenu via <b>Paramètres -&gt; Exporter</b>.</string>
<string name="importer_help_steam"><b>Steam 3.0 et plus récents ne sont pas pris en charge</b>. Fournissez une copie de <b>/data/data/com.valvesoftware. ndroid.steam.community/files/Steamguard-*.json</b>, situé dans le répertoire de stockage interne de Steam.</string>
<string name="importer_help_stratum">Fournir un export Stratum obtenu via <b>Paramètres -&gt; Sauvegarde -&gt; Sauvegarder en tant que fichier chiffré (recommandé)</b>.</string>
<string name="importer_help_totp_authenticator">Fournir un export TOTP Authenticator.</string>
<string name="importer_help_winauth">Fournir un export WinAuth.</string>
<string name="import_assign_icons_dialog_title">Association des icônes</string>
@@ -0,0 +1,5 @@
<?xml version="1.0" encoding="utf-8"?>
<resources>
<string name="system_theme_title">Systeemstandert</string>
<string name="system_amoled_theme_title">Systeemstandert (AMOLED)</string>
</resources>
+21 -1
View File
@@ -227,6 +227,8 @@
<string name="snackbar_authentication_method">Kies in oanmeldmetoade</string>
<string name="encrypting_vault">De klûs wurdt fersifere</string>
<string name="exporting_vault">De klûs wurdt eksportearre</string>
<string name="optimizing_icon">Piktogram wurdt optimalisearre</string>
<string name="optimizing_icon_multiple">Piktogrammen %1$d/%2$d wurde optimalisearre</string>
<string name="reading_file">Bestân lêze</string>
<string name="requesting_root_access">Root-tagong wurdt oanfrege</string>
<string name="analyzing_qr">QR-koade analysearje</string>
@@ -361,8 +363,25 @@
<string name="preference_reset_usage_count_dialog">Binne jo wis dat jo de gebrûksteller fan alle items yn de klûs op 0 sette wolle?</string>
<string name="note" comment="Users can add a note to an entry">Notysje</string>
<string name="clear">Wiskje</string>
<string name="dialog_duplicate_entry_title" comment="'Duplicate' is a noun here">Ynfier bestiet al</string>
<string name="dialog_duplicate_entry_message">Dizze ynfier hat deselde namme en útjouwer as ien of mear besteande fermeldingen. Hoe wolsto fierder gean?</string>
<string name="dialog_duplicate_entry_overwrite_title">Besteande ynfier/items oerskriuwe</string>
<string name="dialog_duplicate_entry_overwrite_subtitle">Ferfang de besteande ynfier of fermeldingen troch de nije. Dizze aksje kin net ûngedien makke wurde</string>
<string name="dialog_duplicate_entry_suffix_title">Foegje suffix ta</string>
<string name="dialog_duplicate_entry_suffix_subtitle">Foegje in achterfoechsel ta oan de namme fan dizze nije ynfier. De nije namme wurdt %s</string>
<string name="dialog_duplicate_entry_cancel_title">Bewarjen annulearje</string>
<string name="dialog_duplicate_entry_cancel_subtitle">Hjirmei kinne jo it item bewurkjen eardat jo it opnij probearje te bewarjen</string>
<plurals name="dialog_duplicate_entry_overwrite_dialog_message">
<item quantity="one">Bisto wis datsto %d ynfier mei de folgjende namme fuortsmite wolst:\n\n%s - %s</item>
<item quantity="other">Bisto wis datsto %d ynfier mei de folgjende namme fuortsmite wolst:\n\n%s - %s</item>
</plurals>
<string name="dialog_duplicate_entry_overwrite_dialog_title">Fuortsmiten befêstigje</string>
<string name="pref_haptic_feedback_summary">Lit dy apparaat trille wanneart de koaden fernije</string>
<string name="pref_haptic_feedback_title">Haptyske feedback</string>
<string name="pref_highlight_entry_title">Koaden markearje nei oantikken</string>
<string name="pref_highlight_entry_summary">Meitsje koaden makliker te ûnderskieden fan inoar troch se tydlik te markearjen nei it oantikken</string>
<string name="pref_groups_multiselect_title">Meardere groepen selektearje</string>
<string name="pref_groups_multiselect_summary">Seleksje fan meardere groepen tagelyk tastean</string>
<string name="pref_minimize_on_copy_title">By kopiearjen minimalisearje</string>
<string name="pref_minimize_on_copy_summary">App nei kopiearjen fan in koade minimalisearje</string>
<string name="pref_copy_behavior_title">Koaden nei it klamboerd kopiearje</string>
@@ -466,6 +485,7 @@
<string name="unable_to_copy_uri_to_clipboard">Kin URI net nei klamboerd kopiearje</string>
<string name="uri_copied_to_clipboard">URI nei klamboerd kopiearre</string>
<string name="transfer_entry_description">Scan dizze QR-koade mei de autentikator-app wêrt jo dit item nei oerbringe wolle</string>
<string name="transfer_entry_brightness">Tik op de QR-koade om helderheid op folslein skerm te skeakeljen</string>
<string name="google_auth_compatible_transfer_description">Scan dizze QR-koaden mei Aegis of Google Authenticator.\n\nFanwegen beheiningen fan de Google Authenticator-app, binne allinnich TOTP- &amp; HOTP-tokens dyt SHA1 brûke en 6-siferige koaden produsearje opnommen</string>
<string name="password_strength_very_weak">Hiel swak</string>
<string name="password_strength_weak">Swak</string>
@@ -499,7 +519,6 @@
<string name="importer_help_2fas">Leverje in 2FAS-autentikator-eksportbestân oan.</string>
<string name="importer_help_aegis">Leverje in Aegis-eksport-/reservekopybestân oan.</string>
<string name="importer_help_authenticator_plus">Leverje in Authenticator Plus-eksportbestân oan krigen fia <b>Ynstellingen -&gt; Reservekopy &amp; Werstelle -&gt; Eksportearje as Tekst en HTML</b>.</string>
<string name="importer_help_authenticator_pro">Leverje in Authenticator Pro-eksportbestân oan krigen fia <b>Ynstellingen -&gt; Reservekopy -&gt; Reservekopy nei fersifere bestân (oanrekommandearre)</b>.</string>
<string name="importer_help_authy">Leverje in kopy oan fan <b>/data/data/com.authy.authy/shared_prefs/com.authy.storage.tokens.authenticator.xml</b>, pleatst yn de ynterne ûnthâldmap fan Authy.</string>
<string name="importer_help_andotp">Leverje in andOTP-eksport-/reservekopybestân oan.</string>
<string name="importer_help_bitwarden">Leverje in Bitwarden-eksport-/reservekopybestân oan. Fersifere bestannen wurde net stipe.</string>
@@ -514,6 +533,7 @@
<string name="importer_help_microsoft_authenticator">Leverje in kopy oan fan <b>/data/data/com.azure.authenticator/databases/PhoneFactor</b>, pleatst yn de ynterne ûnthâldmap fan Microsoft Authenticator.</string>
<string name="importer_help_plain_text">Leverje in tekstbestân oan mei in Google Authenticator-URI op elke rigel.</string>
<string name="importer_help_steam"><b>Steam v3.0 en nijer wurde net stipe</b>. Soargje foar in kopy fan <b>/data/data/com.valvesoftware.android.steam.community/files/Steamguard-*.json</b>, te finen yn de ynterne ûnthâldmap fan Steam.</string>
<string name="importer_help_stratum">Leverje in Stratum-eksportbestân oan, ûntfongen fia <b>Ynstellingen -&gt; Reservekopy -&gt; Reservekopy nei fersifere bestân (oanrekommandearre)</b>.</string>
<string name="importer_help_totp_authenticator">Leverje in TOTP-autentikator-eksportbestân oan.</string>
<string name="importer_help_winauth">Leverje in WinAuth-eksportbestân oan.</string>
<string name="import_assign_icons_dialog_title">Piktogrammen tawize</string>
@@ -0,0 +1,5 @@
<?xml version="1.0" encoding="utf-8"?>
<resources>
<string name="system_theme_title">Predeterminado do sistema</string>
<string name="system_amoled_theme_title">Predeterminado do sistema (AMOLED)</string>
</resources>
+59 -9
View File
@@ -10,6 +10,7 @@
<string name="action_default_icon">Restablecer icona predeterminada</string>
<string name="discard">Desbotar</string>
<string name="save">Gardar</string>
<string name="all">Todo</string>
<string name="issuer">Provedor</string>
<string name="yandex_pin">PIN (416 cifras)</string>
<string name="motp_pin">PIN (4 cifras)</string>
@@ -39,13 +40,19 @@
<string name="pref_dynamic_colors_summary">Aplica unha superposición baseada nas cores do teu tema de Android</string>
<string name="pref_view_mode_title">Modo de visualización</string>
<string name="pref_lang_title">Idioma</string>
<string name="pref_show_icons_title">Amosar iconas</string>
<string name="pref_show_icons_summary">Amosar iconas ao lado de cada entrada</string>
<string name="pref_show_icons_title">Mostrar iconas</string>
<string name="pref_show_icons_summary">Mostra iconas ao lado de cada entrada</string>
<string name="pref_code_group_size_title">Agrupación dos díxitos do código</string>
<string name="pref_code_group_size_summary">Escolle o número de díxitos polos que agrupar os códigos</string>
<string name="pref_account_name_position_title">Mostrar o nome da conta</string>
<string name="pref_show_next_code_title">Mostrar código seguinte</string>
<string name="pref_show_next_code_summary">Xera e amosa o seguinte código antes de tempo</string>
<string name="pref_expiration_state_title">Indicar que os códigos van caducar</string>
<string name="pref_expiration_state_summary">Cambia a cor dos códigos e fainos titilar cando estean a piques de caducar</string>
<string name="pref_expiration_state_fallback">Cambia a cor dos códigos cando estean a piques de caducar</string>
<string name="pref_shared_issuer_account_name_title">Mostrar o nome da conta só cando sexa necesario</string>
<string name="pref_shared_issuer_account_name_summary">Mostrar nomes de conta só cando teñan o mesmo emisor. Os demáis nomes de conta ocultaranse.</string>
<string name="pref_shared_issuer_account_name_summary">Mostrar nomes de conta só cando teñan o mesmo provedor. Os demáis nomes de conta ocultaranse.</string>
<string name="pref_account_name_position_summary_override">Este axuste está anulado polo modo de visualización de mosaico. O nome da conta mostrarase debaixo do provedor.</string>
<string name="pref_import_file_title">Importar desde un ficheiro</string>
<string name="pref_import_file_summary">Importar tokens desde un ficheiro</string>
<string name="pref_android_backups_title">Copias de seguridade na nube de Android</string>
@@ -57,7 +64,14 @@
<string name="pref_backups_reminder_summary">Mostra un recordatorio para facer a copia de seguridade do almacén, no caso de que non fixeras ningunha copia dos teus últimos cambios.</string>
<string name="pref_backups_reminder_dialog_title">Desactivar recordatorio da copia de seguridade</string>
<string name="pref_backups_reminder_dialog_summary">Se desactivas este recordatorio, Aegis non che dirá se hai cambios sen gardar ou non nas copias de seguridade, polo que estarás no risco de perder o acceso aos teus tokens. Tes a certeza de que queres desactivar o recordatorio?</string>
<string name="pref_backups_versioning_strategy_title">Estratexia da copia de seguridade</string>
<string name="pref_backups_versioning_strategy_keep_x_versions">Manter certo número de versións</string>
<string name="pref_backups_versioning_strategy_single_backup">Copia de seguridade única</string>
<string name="pref_backups_versioning_strategy_single_backup_warning">A estratexia escollida non é fiable nin recomendable. Un único fallo ao facer a copia de seguridade pode levar a que quedes sen a única copia que tiveras.</string>
<string name="pref_backups_versioning_strategy_dialog_title">Escolle unha estratexia para a copia de seguridade</string>
<string name="pref_backups_location_title">Localización da copia de seguridade</string>
<string name="pref_backups_location_summary">As copias de seguridade gardaranse en</string>
<string name="pref_backup_location_summary">A copia de seguridade gardarase en</string>
<string name="pref_backups_trigger_title">Executar copia de seguridade</string>
<string name="pref_backups_trigger_summary">Lanza manualmente unha copia de seguridade</string>
<string name="pref_backups_versions_title">Número de versións a manter</string>
@@ -102,6 +116,12 @@
<string name="pref_encryption_summary">Cifra o almacén e permite desbloquealo mediante un contrasinal ou por biometría</string>
<string name="pref_biometrics_title">Desbloqueo biométrico</string>
<string name="pref_biometrics_summary">Permite a autenticación mediante biometría para desbloquear o almacén</string>
<string name="pref_search_behavior_summary">Buscar en: %s</string>
<string name="pref_search_behavior_prompt">Buscar nos seguintes campos</string>
<string name="pref_search_behavior_type_name">Nome</string>
<string name="pref_search_behavior_type_issuer">Provedor</string>
<string name="pref_search_behavior_type_note">Nota</string>
<string name="pref_search_behavior_type_groups">Grupos</string>
<string name="pref_set_password_title">Cambiar contrasinal</string>
<string name="pref_set_password_summary">Establece un novo contrasinal co que desbloquear o teu almacén</string>
<string name="no_events_title">Non hai ningún evento rexistrado</string>
@@ -121,6 +141,7 @@
<string name="event_title_vault_unlock_failed_biometrics">Fallo de desbloqueo do almacén (biometría)</string>
<string name="event_description_vault_unlock_failed_biometrics">Houbo un intento errado de desbloquear o almacén mediante datos biométricos</string>
<string name="event_unknown">Tipo de evento descoñecido</string>
<string name="audit_log_entry_deleted">(borrado)</string>
<string name="today_at_time">Hoxe ás %1$s</string>
<string name="day_of_week_at_time">%1$s ás %2$s</string>
<string name="export_encrypted">Cifrar o almacén</string>
@@ -189,6 +210,9 @@
<string name="edit">Editar</string>
<string name="select_all">Seleccionar todo</string>
<string name="assign_icons">Asignar iconas</string>
<string name="assign_groups">Asignar a un grupo</string>
<string name="assign_groups_dialog_summary">Escolle o grupo ao que queiras asignar os elementos seleccionados.</string>
<string name="assign_groups_dialog_dropdown">Escolle o grupo</string>
<string name="favorite" comment="Verb">Marcar como favorito</string>
<string name="unfavorite" comment="Verb">Desmarcar como favorito</string>
<string name="error_all_caps">ERRO</string>
@@ -203,9 +227,12 @@
<string name="snackbar_authentication_method">Tes que escoller un método de autenticación</string>
<string name="encrypting_vault">Cifrando o almacén</string>
<string name="exporting_vault">Exportando o almacén</string>
<string name="optimizing_icon">Optimizando a icona</string>
<string name="optimizing_icon_multiple">Optimizando iconas %1$d/%2$d</string>
<string name="reading_file">Lendo ficheiro</string>
<string name="requesting_root_access">Pedindo acceso root</string>
<string name="analyzing_qr">Analizando código QR</string>
<string name="analyzing_qr_multiple">Analizando código QR %1$d/%2$d (%3$s)</string>
<plurals name="added_new_entries">
<item quantity="one">Engadida %d nova entrada ao almacén</item>
<item quantity="other">Engadidas %d novas entradas ao almacén</item>
@@ -231,6 +258,7 @@
<string name="copied">Copiado</string>
<string name="errors_copied">Copiáronse os erros no portapapeis</string>
<string name="version_copied">Versión copiada no portapapeis</string>
<string name="error_required_field">Este campo é obrigatorio</string>
<string name="error_occurred">Ocorreu un erro</string>
<string name="decryption_error">Ocorreu un erro ao intentar desbloquear o almacén</string>
<string name="decryption_corrupt_error">Ocorreu un erro ao intentar desbloquear o almacén. O ficheiro do almacén podería estar corrompido.</string>
@@ -294,6 +322,10 @@
<string name="partial_google_auth_import">Detectouse una exportación de Google Authenticator incompleta</string>
<string name="partial_google_auth_import_warning">Faltan algúns códigos QR na importación. Os seguintes códigos non se atoparon:\n\n<b>%s</b>\n\nPodes continuar importando esta exportación parcial, pero o recomendable é volvelo a intentar con tódolos códigos QR para que non te arrisques a perder o acceso a ningún token.</string>
<string name="missing_qr_code_descriptor">• código QR %d</string>
<plurals name="import_partial_export_anyway">
<item quantity="one">Importar %d token de tódolos xeitos</item>
<item quantity="other">Importar %d tokens de tódolos xeitos</item>
</plurals>
<string name="import_google_auth_failure">Fallou a importación do exportado con Google Authenticator</string>
<string name="unrelated_google_auth_batches_error">A exportación contén información sobre un lote non relacionado. Intenta importar 1 lote de cada vez.</string>
<string name="no_tokens_can_be_imported">Polo tanto, non se pode importar ningún token</string>
@@ -312,8 +344,8 @@
<string name="name">Nome</string>
<string name="no_group">Sen grupo</string>
<string name="sort" comment="Title of the Sort button in the top action bar of the main view">Ordenar</string>
<string name="sort_alphabetically">Emisor (A a Z)</string>
<string name="sort_alphabetically_reverse">Emisor (Z a A)</string>
<string name="sort_alphabetically">Provedor (A a Z)</string>
<string name="sort_alphabetically_reverse">Provedor (Z a A)</string>
<string name="sort_alphabetically_name">Conta (A a Z)</string>
<string name="sort_alphabetically_name_reverse">Conta (Z a A)</string>
<string name="sort_usage_count">Contador de usos</string>
@@ -333,9 +365,12 @@
<string name="clear">Restablecer</string>
<string name="pref_highlight_entry_title">Resaltar tokens ao premelos</string>
<string name="pref_highlight_entry_summary">Resalta temporalmente os tokens cando se preman para podelos distinguir máis facilmente</string>
<string name="pref_groups_multiselect_title">Selección múltiple de grupos</string>
<string name="pref_groups_multiselect_summary">Permite ter seleccionados varios grupos ao mesmo tempo</string>
<string name="pref_minimize_on_copy_title">Minimizar ao copiar</string>
<string name="pref_minimize_on_copy_summary">Minimiza a aplicación despois de copiar un token</string>
<string name="pref_copy_behavior_title">Copiar códigos no portapapeis</string>
<string name="pref_search_behavior_title">Comportamento da busca</string>
<string name="pref_pause_entry_title">Conxelar tokens ao premelos</string>
<string name="pref_pause_entry_summary">Pausa a actualización automática dos tokens ao premer neles. Os tokens non se actualizarán mentres teñan o foco. Require \"Resaltar tokens ao premelos\" ou \"Tocar para mostrar\".</string>
<string name="pin_keyboard_description">Introduce o teu contrasinal para activar o teclado do PIN. Ten en conta que isto só funciona se o teu contrasinal consiste só de números</string>
@@ -352,7 +387,7 @@
<string name="compact_mode_title">Compacto</string>
<string name="small_mode_title">Pequeno</string>
<string name="tiles_mode_title">Mosaico</string>
<string name="unknown_issuer">Emisor descoñecido</string>
<string name="unknown_issuer">Provedor descoñecido</string>
<string name="unknown_account_name">Nome de conta descoñecido</string>
<plurals name="import_error_dialog">
<item quantity="one">Aegis non puido importar %d token. Este token omitirase. Preme en \"detalles\" para ver máis información sobre o erro.</item>
@@ -361,6 +396,7 @@
<string name="unable_to_process_deeplink">Non se puido procesar o enlace profundo</string>
<string name="unable_to_read_qrcode_file">Non se puido ler e procesar o código QR do ficheiro: %s.</string>
<string name="unable_to_process_shared_text">Non se puido procesar o texto compartido como OTP</string>
<string name="unable_to_read_qrcode_files">Non se puideron ler e procesar algúns dos códigos QR. Só se importarán %1$d/%2$d elementos.</string>
<string name="unable_to_generate_qrcode">Non se puido xerar o código QR</string>
<string name="select_picture">Seleccionar imaxe</string>
<string name="select_icon">Seleccionar icona</string>
@@ -391,7 +427,16 @@
<string name="time_sync_warning_message">Aegis depende de que a hora do sistema estea sincronizada para poder xerar códigos correctos. Unha desviación de tan só uns poucos segundos pode resultar en que os códigos sexan incorrectos. Semella que o teu dispositivo non está configurado para sincronizar automaticamente a hora. Queres configuralo agora?</string>
<string name="time_sync_warning_disable">Non me avises máis. Sei o que fago.</string>
<string name="google_qr_export_unrelated">Atopouse un código QR non relacionado. Proba a reiniciar o escáner.</string>
<plurals name="google_qr_export_scanned">
<item quantity="one">%1$d/%2$d código QR escaneado</item>
<item quantity="other">%1$d/%2$d códigos QR escaneados</item>
</plurals>
<string name="google_qr_export_unexpected">Esperábase o código QR nº %1$d, pero escaneouse o nº %2$d</string>
<string name="backup_error_bar_message"><b>A copia de seguridade do almacén fallou recentemente</b></string>
<string name="backup_error_dialog_details" comment="The first parameter is the type of backup (e.g. built-in or Android backup). The second parameter is an elapsed time in the style of 'x seconds/minutes/days ago'."> Un intento de facer unha copia de seguridade do almacén usando %1$s fallou debido a algún erro. A copia de seguridade intentouse %2$s. Comproba os axustes da copia de seguridade para asegurarte de que poidan completar correctamente.
</string>
<string name="backup_permission_error_dialog_details" comment="The first parameter is the type of backup (e.g. built-in or Android backup). The second parameter is an elapsed time in the style of 'x seconds/minutes/days ago'."> Un recente intento de copia de seguridade utilizando %1$s fallou porque Aegis non tiña permiso de escritura no destino da copia de seguridade. A copia de seguridade intentouse %2$s. Este erro pode ocorrer se moviches ou renomeaches o destino ou se fai pouco que recuperaches Aegis desde unha copia de seguridade. Volve a configurar o destino da copia de seguridade.
</string>
<string name="backup_system_builtin">Copias de seguridade automáticas de Aegis</string>
<string name="backup_system_android">Copias de seguridade na nube de Android</string>
<string name="backup_reminder_bar_message_with_latest" comment="The parameter is an elapsed time in the style of 'x seconds/minutes/days ago'"> A última copia de seguridade está desactualizada (%s)
@@ -425,6 +470,7 @@
<string name="unable_to_copy_uri_to_clipboard">Non se puido copiar a URI no portapapeis</string>
<string name="uri_copied_to_clipboard">URI copiada no portapapeis</string>
<string name="transfer_entry_description">Escanea este código QR coa aplicación de autenticación á que queiras transferirlle esta entrada</string>
<string name="transfer_entry_brightness">Preme no código QR para poñer ou quitar o brillo da pantalla ao máximo</string>
<string name="google_auth_compatible_transfer_description">Escanea estes códigos QR con Aegis ou con Google Authenticator.\n\nDebido ás limitacións de Google Authenticator, só se inclúen os tokens TOTP e HOTP que usen SHA1 e produzan códigos de 6 cifras</string>
<string name="password_strength_very_weak">Moi feble</string>
<string name="password_strength_weak">Feble</string>
@@ -458,17 +504,21 @@
<string name="importer_help_2fas">Proporciona un ficheiro de copia de seguridade de 2FAS Authenticator.</string>
<string name="importer_help_aegis">Proporciona un ficheiro de copia de seguridade ou de exportación de Aegis.</string>
<string name="importer_help_authenticator_plus">Proporciona un ficheiro de exportación de Authenticator Plus obtido mediante <b>Axustes -&gt; Copia de seguridade e restauración -&gt; Exportar como texto e HTML</b>.</string>
<string name="importer_help_authenticator_pro">Proporciona un ficheiro de exportación de Authenticator Pro, obtido desde <b>Axustes -&gt; Copia de seguridade -&gt; Facer copia de seguridade nun ficheiro cifrado (recomendado)</b>.</string>
<string name="importer_help_authy">Proporciona unha copia de <b>/data/data/com.authy.authy/shared_prefs/com.authy.storage.tokens.authenticator.xml</b>, localizado no directorio do almacenamento interno de Authy.</string>
<string name="importer_help_andotp">Proporciona un ficheiro de copia de seguridade ou de exportación de andOTP.</string>
<string name="importer_help_bitwarden">Proporciona un ficheiro de copia de seguridade ou de exportación de Bitwarden. Non se admiten os ficheiros cifrados.</string>
<string name="importer_help_battle_net_authenticator">Proporciona unha copia de <b>/data/data/com.blizzard.messenger/shared_prefs/com.blizzard.messenger.authenticator_preferences.xml</b>, localizado no directorio do almacenamento interno de Battle.net Authenticator.</string>
<string name="importer_help_duo">Proporciona unha copia de <b>/data/data/com.duosecurity.duomobile/files/duokit/accounts.json</b>, localizado no directorio do almacenamento interno de DUO.</string>
<string name="importer_help_ente_auth">Proporciona un ficheiro de exportación de Ente Auth. Polo momento só se admiten ficheiros sen cifrar.</string>
<string name="importer_help_freeotp">FreeOTP 2: Proporciona unha copia de seguridade.\nFreeOTP 1.x: Proporciona unha copia de <b>/data/data/org.fedorahosted.freeotp/shared_prefs/tokens.xml</b>, localizado no directorio do almacenamento interno de FreeOTP.</string>
<string name="importer_help_freeotp_plus">Proporciona un ficheiro de exportación de FreeOTP+.</string>
<string name="importer_warning_title_freeotp2">Compatibilidade con FreeOTP 2</string>
<string name="importer_warning_message_freeotp2">Hai varios problemas en FreeOTP 2 que poden provocar copias de seguridade corrompidas. Aegis intentará recuperar o máximo número de elementos posible, pero pode que haxa algúns, ou incluso todos, que non se poidan importar.</string>
<string name="importer_help_google_authenticator"><b>Só se admiten ficheiros de base de datos de Google Authenticator v5.10 e anteriores</b>.\n\nProporciona unha copia de <b>/data/data/com.google.android.apps.authenticator2/databases/databases</b>, localizado no directorio do almacenamento interno de Google Authenticator.</string>
<string name="importer_help_microsoft_authenticator">Proporciona unha copia de <b>/data/data/com.azure.authenticator/databases/PhoneFactor</b>, localizado no directorio do almacenamento interno de Microsoft Authenticator.</string>
<string name="importer_help_plain_text">Proporciona un ficheiro de texto plano cunha URI de Google Authenticator en cada liña.</string>
<string name="importer_help_steam"><b>Steam v3.0 e versións superiores non son compatibles</b>. Proporciona unha copia de <b>/data/data/com.valvesoftware.android.steam.community/files/Steamguard-*.json</b>, localizado no directorio do almacenamento interno de Steam.</string>
<string name="importer_help_stratum">Proporciona un ficheiro de exportación de Stratum, obtido desde <b>Axustes -&gt; Copia de seguridade -&gt; Facer copia de seguridade nun ficheiro cifrado (recomendado)</b>.</string>
<string name="importer_help_totp_authenticator">Proporciona un ficheiro de exportación de TOTP Authenticator.</string>
<string name="importer_help_winauth">Proporciona un ficheiro de exportación de WinAuth.</string>
<string name="import_assign_icons_dialog_title">Asignar iconas</string>
@@ -487,8 +537,8 @@
<string name="pref_copy_behavior_single_tap">Un toque</string>
<string name="pref_copy_behavior_double_tap">Dobre toque</string>
<string name="pref_account_name_position_hidden">Oculto</string>
<string name="pref_account_name_position_end">Ao lado do emisor</string>
<string name="pref_account_name_position_below">Debaixo do emisor</string>
<string name="pref_account_name_position_end">Ao lado do provedor</string>
<string name="pref_account_name_position_below">Debaixo do provedor</string>
<plurals name="time_elapsed_seconds" tools:ignore="UnusedResources">
<item quantity="one">fai %d segundo</item>
<item quantity="other">fai %d segundos</item>
@@ -0,0 +1,2 @@
<?xml version="1.0" encoding="utf-8"?>
<resources></resources>
@@ -399,7 +399,6 @@
<string name="importer_help_aegis">एजिस निर्यात/बैकअप फ़ाइल की आपूर्ति करें।</string>
<string name="importer_help_authenticator_plus">एक प्रमाणक प्लस निर्यात फ़ाइल की आपूर्ति करें
<b>सेटिंग्स -&gt; बैकअप &amp; पुनर्स्थापना -&gt; पाठ और HTML के रूप में निर्यात करें</b></string>
<string name="importer_help_authenticator_pro"><b>सेटिंग्स -&gt; बैक अप -&gt; के माध्यम से प्राप्त ऑथेंटिकेटर प्रो एक्सपोर्ट फ़ाइल की आपूर्ति करें। एन्क्रिप्टेड फ़ाइल का बैकअप लें (अनुशंसित)</b></string>
<string name="importer_help_authy">Authy की आंतरिक संग्रहण निर्देशिका में स्थित <b>/data/data/com.authy.authy/shared_prefs/com.authy.storage.tokens.authenticator.xml</b> की एक प्रति प्रदान करें।</string>
<string name="importer_help_andotp">एक andOTP निर्यात/बैकअप फ़ाइल की आपूर्ति करें।</string>
<string name="importer_help_bitwarden">एक बिटवर्डन निर्यात/बैकअप फ़ाइल की आपूर्ति करें। एन्क्रिप्टेड फ़ाइलें समर्थित नहीं हैं।</string>
@@ -0,0 +1,5 @@
<?xml version="1.0" encoding="utf-8"?>
<resources>
<string name="system_theme_title">Rendszer alapértelmezése</string>
<string name="system_amoled_theme_title">Rendszer alapértelmezése (AMOLED)</string>
</resources>
+22 -2
View File
@@ -227,6 +227,8 @@
<string name="snackbar_authentication_method">Válasszon hitelesítési módot</string>
<string name="encrypting_vault">A széf titkosítása</string>
<string name="exporting_vault">A széf exportálása</string>
<string name="optimizing_icon">Ikon optimalizálása</string>
<string name="optimizing_icon_multiple">Ikonok optimalizálása %1$d/%2$d</string>
<string name="reading_file">Fájl olvasása</string>
<string name="requesting_root_access">Root hozzáférés igénylése</string>
<string name="analyzing_qr">QR-kód elemzése</string>
@@ -358,11 +360,28 @@
<string name="preference_manage_groups_summary">Itt kezelheti és törölheti a csoportokat</string>
<string name="preference_reset_usage_count">Használati számláló visszaállítása</string>
<string name="preference_reset_usage_count_summary">Minden bejegyzés használati számlálójának visszaállítása</string>
<string name="preference_reset_usage_count_dialog">Biztos, hogy visszaállítja a széf összes bejegyzésének használati számlálóját 0-ra?</string>
<string name="preference_reset_usage_count_dialog">Biztos, hogy visszaállítja a széf összes bejegyzésének használati számlálóját nullára?</string>
<string name="note" comment="Users can add a note to an entry">Megjegyzés</string>
<string name="clear">Törlés</string>
<string name="dialog_duplicate_entry_title" comment="'Duplicate' is a noun here">Ismétlődő bejegyzés</string>
<string name="dialog_duplicate_entry_message">Ennek a bejegyzésnek ugyanaz a neve és kibocsátója, mint egy vagy több meglévő bejegyzésnek. Hogyan folytatja?</string>
<string name="dialog_duplicate_entry_overwrite_title">Meglévő bejegyzések felülírása</string>
<string name="dialog_duplicate_entry_overwrite_subtitle">A meglévő bejegyzések lecserélése egy újjal. Ez a művelet nem vonható vissza.</string>
<string name="dialog_duplicate_entry_suffix_title">Utótag hozzáadása</string>
<string name="dialog_duplicate_entry_suffix_subtitle">Utótag hozzáadása ehhez a bejegyzéshez. Az új név ez lesz: %s</string>
<string name="dialog_duplicate_entry_cancel_title">Mentés megszakítása</string>
<string name="dialog_duplicate_entry_cancel_subtitle">Lehetővé teszi a bejegyzés szerkesztését mielőtt újból megpróbálná menteni</string>
<plurals name="dialog_duplicate_entry_overwrite_dialog_message">
<item quantity="one">Biztos, hogy töröl %d bejegyzést a következő névvel:\n\n%s %s</item>
<item quantity="other">Biztos, hogy töröl %d bejegyzést a következő névvel:\n\n%s %s</item>
</plurals>
<string name="dialog_duplicate_entry_overwrite_dialog_title">Törlés megerősítése</string>
<string name="pref_haptic_feedback_summary">Az eszköz rezgetése, amikor a kódok frissülnek</string>
<string name="pref_haptic_feedback_title">Haptikus visszajelzés</string>
<string name="pref_highlight_entry_title">Tokenek kiemelése koppintáskor</string>
<string name="pref_highlight_entry_summary">A tokenek könnyebb megkülönböztethetősége érdekében ideiglenesen ki lesznek emelve koppintáskor</string>
<string name="pref_groups_multiselect_title">Csoportok többszörös kiválasztása</string>
<string name="pref_groups_multiselect_summary">Több csoport egyidejű kiválasztásának engedélyezése</string>
<string name="pref_minimize_on_copy_title">Minimalizálás másoláskor</string>
<string name="pref_minimize_on_copy_summary">Az alkalmazás minimalizálása a token másolása után</string>
<string name="pref_copy_behavior_title">Tokenek másolása a vágólapra</string>
@@ -466,6 +485,7 @@
<string name="unable_to_copy_uri_to_clipboard">Nem lehet az URI-t a vágólapra másolni</string>
<string name="uri_copied_to_clipboard">Az URI a vágólapra másolva</string>
<string name="transfer_entry_description">Olvassa le ezt a QR-kódot azzal hitelesítő alkalmazással, amelybe át akarja vinni</string>
<string name="transfer_entry_brightness">Koppintson a QR-kódra a teljes fényerő be- és kikapcsolásához</string>
<string name="google_auth_compatible_transfer_description">Olvassa le ezeket a QR-kódokat az Aegisszel vagy a Google Hitelesítővel.\n\nA Google Hitelesítő korlátozásai miatt csak az SHA1-et használó és 6 számjegyű kódot előállító TOTP és HOTP tokenek szerepelnek itt.</string>
<string name="password_strength_very_weak">Nagyon gyenge</string>
<string name="password_strength_weak">Gyenge</string>
@@ -499,7 +519,6 @@
<string name="importer_help_2fas">Adja meg a 2FAS Authenticator egy biztonsági mentési fájlját.</string>
<string name="importer_help_aegis">Adja meg az Aegis egy exportját vagy biztonsági mentési fájlját.</string>
<string name="importer_help_authenticator_plus">Adja meg az Authenticator Plus egy exportfájlját, melyet a <b>Beállítások -&gt; Mentés és visszaállítás -&gt; Exportálás szövegként vagy HTML-ként</b> résznél állíthat elő.</string>
<string name="importer_help_authenticator_pro">Adja meg az Authenticator Plus egy exportfájlját, melyet a <b>Beállítások -&gt; Biztonsági mentés -&gt; Biztonsági mentés titkosított fájlba (ajánlott)</b> résznél állíthat elő.</string>
<string name="importer_help_authy">Adja meg a <b>/data/data/com.authy.authy/shared_prefs/com.authy.storage.tokens.authenticator.xml</b> másolatát, mely az Authy belső háttértáron levő mappájában található.</string>
<string name="importer_help_andotp">Adja meg az andOTP egy exportját vagy biztonsági mentési fájlját.</string>
<string name="importer_help_bitwarden">Adja meg a Bitwarden egy exportját vagy biztonsági mentési fájlját. A titkosított fájlok nem támogatottak.</string>
@@ -514,6 +533,7 @@
<string name="importer_help_microsoft_authenticator">Adja meg a <b>/data/data/com.azure.authenticator/databases/PhoneFactor</b> másolatát, mely a Microsoft Authenticator belső háttértáron levő mappájában található.</string>
<string name="importer_help_plain_text">Adjon meg egy szöveges fájlt, melynek minden sorában Google Hitelesítő URI található.</string>
<string name="importer_help_steam"><b>A Steam v3.0 és újabb verziói nem támogatottak</b>. Adja hozzá a <b>/data/data/com.valvesoftware.android.steam.community/files/Steamguard-*.json</b> mappából, mely a Steam belső háttértáron levő mappája.</string>
<string name="importer_help_stratum">Adjon meg egy Stratum exportálási fájlt, amelyet a <b>Beállítások &gt; Biztonsági mentés &gt; Biztonsági mentés titkosított fájlba (ajánlott)</b> menüpontban lehet előállítani.</string>
<string name="importer_help_totp_authenticator">Adjon meg egy TOTP Autheticator exportfájlt.</string>
<string name="importer_help_winauth">Adjon meg egy WinAuth exportfájlt.</string>
<string name="import_assign_icons_dialog_title">Ikonok hozzárendelése</string>

Some files were not shown because too many files have changed in this diff Show More