## Description
Switch to custom ffmpeg kit.
Future actionables on this:
- Creating minimal ffmpeg configuration and using it
- Replace and use .aar for android plugin, currently it is fine and
using the published maven package
## Tests
## Description
This pull request adds mention of the Authy-iOS-MiTM method to Ente's
documentation on migrating from Authy. Currently, the only working
method to import Authy tokens into Ente is to use a rooted Android
device, which is not ideal due to most people not having rooted Android
devices. The Authy-iOS-MiTM method (that I made) only requires an iOS
device with Authy and a computer with Python and mitmproxy, making it
significantly more accessible to people looking to migrate their Authy
tokens. By mentioning my method in Ente's Authy import docs, it would
help more people discover it and would hopefully make some people's
lives easier since they wouldn't have to manually re-register 2FA on
every website. Let me know if you have any questions.
## Tests
N/A, this pull request does not modify any code
## Description
Add a custom icon for the [Mbin](https://joinmbin.org/) fediverse
software. SVG sourced from the linked page and modified to remove
background. Additional `altNames` for some popular or important Mbin
instances: `kbin` (several instances), `thebrainbin` (popular instance)
and `gehirneimer` (Mbin co-developer bentigorlich's instance).
## Tests
Untested
- Replaces `zero` with `=0` to avoid syntax errors.
- Replaces `one` with `=1` in the context of a single item for better
compatibility with non-English languages.
- Fixes grammar.
Noticed the ocr filter in `ffmpeg -filters`. It works on CLI! trying out using wasm version.
Incantation from: https://ffmpeg-user.ffmpeg.narkive.com/wfgWXwHf/how-to-use-ocr-filter
This doesn't work because the ffmpeg wasm we have isn't complied with the ocr
filter. Still committing this experiment to git history for potential future
reference (will revert next).
## Description
Use a task queue to manage local thumbnail requests with cancellation,
priority and timeout functionality.
This significantly improves the browsing experience of galleries with a
large number of local thumbnails. Previously, scrolling down deep into a
device folder would cause the thumbnails to take a long time to load.
Now, the loading speed has improved considerably.
A `maxQueueSize` of 200 for `smallLocalThumbnailQueue` should be
appropriate, as the maximum number of mounted `Thumbnailwidget`s is 186
when using a gallery grid size of 6 on a decently sized phone screen
(the screen length is the relevant factor here). With a grid size of 6,
the maximum number of mounted ThumbnailWidgets should be around 186 ± 12
for most phone screens.
Note: Thumbnails for HEIC images on android still take some time to
load. There is improvement, but not enough for seamless UX.
## Tests
Manually tested gallery scroll performance checks and if thumbnails load
as expected.
Contributors do not necessarily need to update to node 22, I tested that
the dev server works with node 20 also.
That said, if someone wishes to update - here is the dance I needed to
do on macOS. Garnish to taste and OS.
```sh
brew uninstall node@20
brew install node@22
brew link node@22
corepack disable
corepack enable
```
Previously in https://github.com/ente-io/ente/pull/5551 the icon.ico was
generated from icon.png. In this PR, based on user feedback we instead
generate
it from the icon.icns (the same as that used by the macOS app) - this
one has
rounded corners.
Previously in https://github.com/ente-io/ente/pull/5551 the icon.ico was
generated from icon.png. In this PR, based on user feedback we instead generate
it from the icon.icns (the same as that used by the macOS app) - this one has
rounded corners.
## Description
Bump packages, remove unused (used dependency_validator for detection of
them), change source to upstream for some and update comments for rest
of git deps.
## Tests
Unfortunately it is failing the Passkey deep link, will check.
## Description
`LockScreenSettings` and `Configuration` uses two different instances of
`FlutterSecureStorage`.
`lsSecureStorage = FlutterSecureStorage();`
```
configSecureStorage = const FlutterSecureStorage(
iOptions: IOSOptions(
accessibility: KeychainAccessibility.first_unlock_this_device,
),
);
```
On flutter_secure_storage v9.2.4, data written using `lsSecureStorage`
aren't getting deleted when calling `configSecureStorage.deleteAll()`
which is called on logging out and on initialisation of `Configuration`
because of different accessibility configurations of both instances.
v9.0.0 doesn't have this issue and so downgrading is the best solution.
Let's wait till the
[issue](https://github.com/juliansteenbakker/flutter_secure_storage/issues/870#issuecomment-2777447937)
is resolved by the package maintainer. If not resolved and we need to
upgrade, write a migration script.
## Tests
#### Tested the following cases:
- [x] Install with v9.0.0.
- [x] Login and create PIN lock.
- [x] Reinstall app to check if PIN exists in secure storage and if lock
screen comes up.
- [x] PIN is non-existent and lock screen doesn't come up.
##### And
- [x] Install with v9.2.4
- [x] Login and create PIN lock.
- [x] Reinstall with v9.0.0 and check if PIN exists in secure storage
and if lock screen comes up.
- [x] PIN is non-existent and lock screen doesn't come up.
**Tested by**
Modifying the compose.yaml to provide an environment variable:
```diff
environment:
ENTE_CREDENTIALS_FILE: /credentials.yaml
+ ENTE_HTTP_USE_TLS: 1
```
then observing that museum is honoring it
```
...
[GIN-debug] Listening and serving HTTPS on :443
```
## Description
Users can create a family, leave it and then join another.
In the `families` table, there will be one entry for each such family
they have been a part of (against their `admin_id`).
This PR removes this constraint for only a single row to be affected, so
users who have historically been associated with more than one family
can have a fresh start.
Based on customer feedback. The dock icon will hide when the window is
closed by using the "x" without quitting the app.
The menu bar icon remains as it is, and so does the existing preferences
(whose value is also retained if it were set explicitly).
Based on customer feedback. The dock icon will hide when the window is closed by
using the "x" without quitting the app. The menu bar icon remains as it is, and
so does the existing preferences (whose value is also retained if set
explicitly).
npm doesn't support the "@" character in package names (it's used for
scopes). We eventually want to move from yarn to npm, so in preparation,
rename
our internal packages accordingly so that they also work with npm
workspaces.
Methodology: No manual code changes, just automatic search replace of
```
"@/accounts => "ente-accounts
"@/utils => "ente-utils
...
"@ente/shared => "ente-shared
```
Then reran prettier.
--
EDIT: Updated the docs too later manually in a separate commit.
npm doesn't support the "@" character in package names (it's used for
scopes). We eventually want to move from yarn to npm, so in preparation, rename
our internal packages accordingly so that they also work with npm workspaces.
Methodology: No manual code changes, just automatic search replace of
```
"@/accounts => "ente-accounts
"@/utils => "ente-utils
...
"@ente/shared => "ente-shared
```
Then reran prettier.
Saw this when working with media-chrome. In WIP code, I am getting
[error] Unhandled error: ResizeObserver loop completed with undelivered notifications.
but that string comes as event.message (event.error is null).
## Description
Simplified the action of assigning "me" by sticky-ing the users email on
top (in case "me" is not assigned).
## Tests
Tested in debug mode on my pixel phone.
## Description
Switched to our own date picker in the last place we were using package
(link expiry page) and removed package.
## Tests
Tested in debug mode on my pixel phone.
## Description
Made changes to more efficiently handle image embeddings caching,
keeping them cached only in MLComputer and only for limited times when
the user needs it.
## Tests
Tested in debug mode on my pixel phone.
Here is the original autogenerated template on which this is based:
```yaml
# For most projects, this workflow file will not need changing; you simply need # to commit it to your repository.
#
# You may wish to alter this file to override the set of languages analyzed, # or to provide custom queries or build logic.
#
# ******** NOTE ********
# We have attempted to detect the languages in your repository. Please check # the `language` matrix defined below to confirm you have the correct set of # supported CodeQL languages.
#
name: "CodeQL Advanced"
on:
push:
branches: [ "main" ]
pull_request:
branches: [ "main" ]
schedule:
- cron: '22 1 * * 1'
jobs:
analyze:
name: Analyze (${{ matrix.language }}) # Runner size impacts CodeQL analysis time. To learn more, please see:
# - https://gh.io/recommended-hardware-resources-for-running-codeql
# - https://gh.io/supported-runners-and-hardware-resources
# - https://gh.io/using-larger-runners (GitHub.com only)
# Consider using larger runners or machines with greater resources for possible analysis time improvements.
runs-on: ${{ (matrix.language == 'swift' && 'macos-latest') || 'ubuntu-latest' }}
permissions:
# required for all workflows
security-events: write
# required to fetch internal or private CodeQL packs
packages: read
# only required for workflows in private repositories
actions: read
contents: read
strategy: fail-fast: false matrix: include:
- language: actions build-mode: none
- language: c-cpp build-mode: autobuild - language: go build-mode: autobuild - language: java-kotlin build-mode: autobuild - language: javascript-typescript build-mode: none - language: ruby build-mode: none - language: swift build-mode: autobuild # CodeQL supports the following values keywords for 'language': 'actions', 'c-cpp', 'csharp', 'go', 'java-kotlin', 'javascript-typescript', 'python', 'ruby', 'swift' # Use `c-cpp` to analyze code written in C, C++ or both # Use 'java-kotlin' to analyze code written in Java, Kotlin or both # Use 'javascript-typescript' to analyze code written in JavaScript, TypeScript or both # To learn more about changing the languages that are analyzed or customizing the build mode for your analysis, # see https://docs.github.com/en/code-security/code-scanning/creating-an-advanced-setup-for-code-scanning/customizing-your-advanced-setup-for-code-scanning. # If you are analyzing a compiled language, you can modify the 'build-mode' for that language to customize how # your codebase is analyzed, see https://docs.github.com/en/code-security/code-scanning/creating-an-advanced-setup-for-code-scanning/codeql-code-scanning-for-compiled-languages steps:
- name: Checkout repository uses: actions/checkout@v4
# Add any setup steps before running the `github/codeql-action/init` action.
# This includes steps like installing compilers or runtimes (`actions/setup-node`
# or others). This is typically only required for manual builds.
# - name: Setup runtime (example)
# uses: actions/setup-example@v1
# Initializes the CodeQL tools for scanning.
- name: Initialize CodeQL uses: github/codeql-action/init@v3 with: languages: ${{ matrix.language }} build-mode: ${{ matrix.build-mode }} # If you wish to specify custom queries, you can do so here or in a config file. # By default, queries listed here will override any specified in a config file. # Prefix the list here with "+" to use these queries and those in the config file.
# For more details on CodeQL's query packs, refer to: https://docs.github.com/en/code-security/code-scanning/automatically-scanning-your-code-for-vulnerabilities-and-errors/configuring-code-scanning#using-queries-in-ql-packs
# queries: security-extended,security-and-quality
# If the analyze step fails for one of the languages you are analyzing with
# "We were unable to automatically build your code", modify the matrix above
# to set the build mode to "manual" for that language. Then modify this step
# to build your code.
# ℹ️ Command-line programs to run using the OS shell.
# 📚 See https://docs.github.com/en/actions/using-workflows/workflow-syntax-for-github-actions#jobsjob_idstepsrun
- if: matrix.build-mode == 'manual' shell: bash run: | echo 'If you are using a "manual" build mode for one or more of the' \ 'languages you are analyzing, replace this with the commands to build' \ 'your code, for example:' echo ' make bootstrap' echo ' make release' exit 1
- name: Perform CodeQL Analysis uses: github/codeql-action/analyze@v3 with: category: "/language:${{matrix.language}}"
```
Here is the original autogenerated template from which this is based:
----
# For most projects, this workflow file will not need changing; you simply need
# to commit it to your repository.
#
# You may wish to alter this file to override the set of languages analyzed,
# or to provide custom queries or build logic.
#
# ******** NOTE ********
# We have attempted to detect the languages in your repository. Please check
# the `language` matrix defined below to confirm you have the correct set of
# supported CodeQL languages.
#
name: "CodeQL Advanced"
on:
push:
branches: [ "main" ]
pull_request:
branches: [ "main" ]
schedule:
- cron: '22 1 * * 1'
jobs:
analyze:
name: Analyze (${{ matrix.language }})
# Runner size impacts CodeQL analysis time. To learn more, please see:
# - https://gh.io/recommended-hardware-resources-for-running-codeql
# - https://gh.io/supported-runners-and-hardware-resources
# - https://gh.io/using-larger-runners (GitHub.com only)
# Consider using larger runners or machines with greater resources for possible analysis time improvements.
runs-on: ${{ (matrix.language == 'swift' && 'macos-latest') || 'ubuntu-latest' }}
permissions:
# required for all workflows
security-events: write
# required to fetch internal or private CodeQL packs
packages: read
# only required for workflows in private repositories
actions: read
contents: read
strategy:
fail-fast: false
matrix:
include:
- language: actions
build-mode: none
- language: c-cpp
build-mode: autobuild
- language: go
build-mode: autobuild
- language: java-kotlin
build-mode: autobuild
- language: javascript-typescript
build-mode: none
- language: ruby
build-mode: none
- language: swift
build-mode: autobuild
# CodeQL supports the following values keywords for 'language': 'actions', 'c-cpp', 'csharp', 'go', 'java-kotlin', 'javascript-typescript', 'python', 'ruby', 'swift'
# Use `c-cpp` to analyze code written in C, C++ or both
# Use 'java-kotlin' to analyze code written in Java, Kotlin or both
# Use 'javascript-typescript' to analyze code written in JavaScript, TypeScript or both
# To learn more about changing the languages that are analyzed or customizing the build mode for your analysis,
# see https://docs.github.com/en/code-security/code-scanning/creating-an-advanced-setup-for-code-scanning/customizing-your-advanced-setup-for-code-scanning.
# If you are analyzing a compiled language, you can modify the 'build-mode' for that language to customize how
# your codebase is analyzed, see https://docs.github.com/en/code-security/code-scanning/creating-an-advanced-setup-for-code-scanning/codeql-code-scanning-for-compiled-languages
steps:
- name: Checkout repository
uses: actions/checkout@v4
# Add any setup steps before running the `github/codeql-action/init` action.
# This includes steps like installing compilers or runtimes (`actions/setup-node`
# or others). This is typically only required for manual builds.
# - name: Setup runtime (example)
# uses: actions/setup-example@v1
# Initializes the CodeQL tools for scanning.
- name: Initialize CodeQL
uses: github/codeql-action/init@v3
with:
languages: ${{ matrix.language }}
build-mode: ${{ matrix.build-mode }}
# If you wish to specify custom queries, you can do so here or in a config file.
# By default, queries listed here will override any specified in a config file.
# Prefix the list here with "+" to use these queries and those in the config file.
# For more details on CodeQL's query packs, refer to: https://docs.github.com/en/code-security/code-scanning/automatically-scanning-your-code-for-vulnerabilities-and-errors/configuring-code-scanning#using-queries-in-ql-packs
# queries: security-extended,security-and-quality
# If the analyze step fails for one of the languages you are analyzing with
# "We were unable to automatically build your code", modify the matrix above
# to set the build mode to "manual" for that language. Then modify this step
# to build your code.
# ℹ️ Command-line programs to run using the OS shell.
# 📚 See https://docs.github.com/en/actions/using-workflows/workflow-syntax-for-github-actions#jobsjob_idstepsrun
- if: matrix.build-mode == 'manual'
shell: bash
run: |
echo 'If you are using a "manual" build mode for one or more of the' \
'languages you are analyzing, replace this with the commands to build' \
'your code, for example:'
echo ' make bootstrap'
echo ' make release'
exit 1
- name: Perform CodeQL Analysis
uses: github/codeql-action/analyze@v3
with:
category: "/language:${{matrix.language}}"
## Description
Hi, sincere apologies if there are any issues I’ve created. I’m new to
pull requests. I attach a Patient Access icon for Ente Auth. If
everything goes well I (if it’s okay) will be happy to help in the
future.
Kind regards,
Jack
try_files $uri/ matches the passkeys/ folder in accounts app, causing
nginx to
try loading (e.g.) http://localhost:3001/passkeys/?xxx instead of
http://localhost:3001/passkeys?xxx
The way Next is currently generating the static renders, we anyways
don't need
the slug/index.html lookup, the only index.html we have is at the root,
rest of
them are of the form slug.html.
try_files $uri/ matches the passkeys/ folder in accounts app, causing nginx to
try loading (e.g.) http://localhost:3001/passkeys/?xxx instead of
http://localhost:3001/passkeys?xxx
The way Next is currently generating the static renders, we anyways don't need
the slug/index.html lookup, the only index.html we have is at the root, rest of
them are of the form slug.html.
This reduces a sidecar file that is needed by the Docker compose file
(which is a prerequisite for a future change where we will provide a
zero-build variant that doesn't require cloning the repo).
## Description
- Added delete file option in cluster page (it's already there for named
persons, should be here too)
- Similar copy between cluster and named person for removing file
<pathstyle="display:inline;opacity:1;fill:url(#linearGradient9);fill-opacity:1;stroke:none;stroke-width:1;stroke-linecap:round;stroke-linejoin:round;stroke-dasharray:none;stroke-opacity:1"d="M 92.898977,-25.466506 23.616945,94.53349 a 4.9999999,4.9999999 60 0 0 4.330127,7.5 H 166.51114 a 4.9999996,4.9999996 120 0 0 4.33012,-7.499999 L 101.55923,-25.466506 a 5.0000002,5.0000002 180 0 0 -8.660253,0 z"id="path5"transform="translate(5.8501312,19.942587)"/>
<pathid="path1"style="display:inline;opacity:1;fill:#241734;fill-opacity:1;stroke:none;stroke-width:1;stroke-linecap:round;stroke-linejoin:round;stroke-dasharray:none;stroke-opacity:1"d="M 103.61607,27.033498 60.315284,102.0335 H 77.635596 L 90.625831,79.533498 103.61607,102.0335 116.60825,79.533498 129.59849,102.0335 h 17.32031 z m 0,15 10.82666,18.74973 a 7.4997612,7.4997612 90 0 1 0,7.50054 l -10.82666,18.74973 -10.824962,-18.74959 a 7.5008819,7.5008819 90 0 1 0,-7.50082 z"transform="translate(-0.5188027,0.07359983)"/>
<pathstyle="display:inline;opacity:1;fill:url(#linearGradient7);fill-opacity:1;stroke:none;stroke-width:1;stroke-linecap:round;stroke-linejoin:round;stroke-dasharray:none;stroke-opacity:1"d="M 27.947072,102.03349 H 166.51114 a 5.0000006,5.0000006 120 0 0 4.33012,-7.5 l -7.21687,-12.499996 h -40.41452 l -12.99038,-22.5 -12.990386,22.5 -12.990381,-22.5 -12.990381,22.5 H 30.833821 L 23.616945,94.53349 a 5,5 60 0 0 4.330127,7.5 z"id="path6"transform="matrix(1.0011548,0,0,1.0030727,5.7535451,19.687436)"/>
"secretCanNotBeEmpty": "لا يمكن أن يكون رمز السر فارغ",
"bothIssuerAndAccountCanNotBeEmpty": "لا يمكن أن يكون المُصدر والحساب فارغًا",
"incorrectDetails": "بيانات غير صحيحة",
"pleaseVerifyDetails": "من فضلك تأكد من بياناتك وحاول مرة أخرى",
"pleaseVerifyDetails": "الرجاء التأكد من البيانات وإعادة المحاولة",
"codeIssuerHint": "المصدِّر",
"codeSecretKeyHint": "الرمز السري",
"secret": "سري",
@@ -36,7 +36,7 @@
"codeAccountHint": "الحساب (you@domain.com)",
"codeTagHint": "وسم",
"accountKeyType": "نوع المفتاح",
"sessionExpired": "انتهت صلاحية الجلسة",
"sessionExpired": "انتهت صَلاحِيَة الجِلسة",
"@sessionExpired": {
"description": "Title of the dialog when the users current session is invalid/expired"
},
@@ -48,6 +48,8 @@
"nextTotpTitle": "التالي",
"deleteCodeTitle": "حذف الرمز؟",
"deleteCodeMessage": "هل أنت متأكد من أنك تريد حذف هذه الشيفرة؟ هذا الإجراء لا رجعة فيه.",
"trashCode": "حذف الكود؟",
"trashCodeMessage": "هل أنت متيقِّن أنك تريد حذف الكود الخاص بـ {account}؟",
"trash": "سلة المهملات",
"viewLogsAction": "عرض السجلات",
"sendLogsDescription": "سوف يُرسل هذا السجلات لنا لمساعدتنا على تصحيح مشكلتك. بينما نتخذ الاحتياطات لضمان عدم تسجيل المعلومات الحساسة، نشجعك على رؤية هذه السجلات قبل مشاركتها.",
@@ -63,7 +65,7 @@
},
"copyEmailAction": "نسخ البريد الإلكتروني",
"exportLogsAction": "تصدير السجلات",
"reportABug": "الابلاغ عن خلل تقني",
"reportABug": "ألإبلاغ عن خلل تقني",
"crashAndErrorReporting": "الإبلاغ عن الأعطال والأخطاء",
"recreatePasswordMessage": "الجهاز الحالي ليس قويًا بما يكفي للتحقق من كلمة المرور الخاصة بك، لذا نحتاج إلى إعادة إنشائها مرة واحدة بطريقة تعمل مع جميع الأجهزة.\n\nالرجاء تسجيل الدخول باستخدام مفتاح الاسترداد وإعادة إنشاء كلمة المرور الخاصة بك (يمكنك استخدام نفس كلمة المرور مرة أخرى إذا كنت ترغب في ذلك).",
"useRecoveryKey": "استخدم مفتاح الاسترداد",
"incorrectPasswordTitle": "كلمة المرور غير صحيحة",
"welcomeBack": "مرحبًا مجددًا!",
"madeWithLoveAtPrefix": "مصنوعة بـ❤️ في ",
"emailAlreadyRegistered": "البريد الإلكتروني مُسَجَّل من قبل.",
"emailNotRegistered": "البريد الإلكتروني غير مُسَجَّل.",
"madeWithLoveAtPrefix": "مصنوعة بـ❤️ في",
"supportDevs": "اشترك في <bold-green>ente</bold-green> لدعمنا",
"supportDiscount": "استخدم رمز القسيمة \"AUTH\" للحصول على 10% خصم من السنة الأولى",
"supportDiscount": "استخدم رمز القسيمة \"AUTH\" للحصول على 10% خَصْم من السنة الأولى",
"passwordEmptyError": "لا يمكن أن تكون كلمة المرور فارغة",
"importFromApp": "استورد الشيفرات من {appName}",
@@ -111,10 +115,11 @@
"importLabel": "استيراد",
"importInstruction": "الرجاء تحديد ملف يحتوي على قائمة بالرموز الخاصة بك بالشكل التالي",
"importCodeDelimiterInfo": "يمكن فصل الرموز بفاصلة أو سطر جديد",
"selectFile": "اختيار الملف",
"selectFile": "حدد مِلَفّ",
"emailVerificationToggle": "تأكيد عنوان البريد الإلكتروني",
"emailVerificationEnableWarning": "لتجنب إقفال حسابك، تأكد من تخزين نسخة من بريدك الإلكتروني 2FA خارج Ente Auth قبل تمكين التحقق من البريد الإلكتروني.",
"authToChangeEmailVerificationSetting": "الرجاء المصادقة لتغيير التحقق من البريد الإلكتروني",
"authenticateGeneric": "الرجاء المصادقة",
"authToViewYourRecoveryKey": "الرجاء المصادقة لعرض مفتاح الاسترداد الخاص بك",
"appLockOfflineModeWarning": "Избрахте да продължите без резервни копия. Ако забравите паролата на приложението си, ще бъдете заключени от достъп до вашите данни.",
"duplicateCodes": "Повтарящи се кодове",
"noDuplicates": "✨ Няма дубликати",
"youveNoDuplicateCodesThatCanBeCleared": "Нямате повтарящи се кодове, които могат да бъдат изчистени",
"deduplicateCodes": "Премахване на повтарящи се кодове",
"appLockOfflineModeWarning": "Vous avez choisi de fonctionner sans sauvegardes. Si vous oubliez votre outil Applock, vous serez bloqué dans l'accès à vos données.",
"duplicateCodes": "Codes dupliqués",
"noDuplicates": "✨ Pas de doublons",
"youveNoDuplicateCodesThatCanBeCleared": "Vous n'avez aucun code en doublon pouvant être supprimé",
"deduplicateCodes": "Codes dédupliqués",
"deselectAll": "Tout désélectionner",
"selectAll": "Tout sélectionner",
"deleteDuplicates": "Supprimer les doublons",
"plainHTML": "HTML Pur",
"tellUsWhatYouThink": "Dites-nous ce que vous pensez",
"dropReview": "Déposez un avis sur l'App/Play Store",
"dropReviewiOS": "Laisser un avis sur l'App Store",
"dropReviewAndroid": "Laisser un avis sur le Play Store",
"appLockOfflineModeWarning": "Je hebt ervoor gekozen om verder te gaan zonder backups. Als je jouw applock vergeet, wordt je uitgesloten van toegang tot je gegevens.",
"duplicateCodes": "Dubbele codes",
"noDuplicates": "✨ Geen dubbele",
"youveNoDuplicateCodesThatCanBeCleared": "Je hebt geen dubbele codes die kunnen worden gewist",
"deduplicateCodes": "Dubbele codes",
"deselectAll": "Alles deselecteren",
"selectAll": "Alles selecteren",
"deleteDuplicates": "Dubbelen verwijderen",
"plainHTML": "Alleen HTML",
"tellUsWhatYouThink": "Vertel ons wat je vindt",
"dropReview": "Laat een beoordeling achter in de App/Play Store",
"dropReviewiOS": "Laat een beoordeling achter in de App Store",
"dropReviewAndroid": "Laat een beoordeling achter in de Play Store",
"recreatePasswordMessage": "Текущее устройство недостаточно мощное для проверки пароля, поэтому нам нужно регенерировать его один раз таким образом, чтобы работать со всеми устройствами. \n\nПожалуйста, войдите, используя ваш ключ восстановления и сгенерируйте ваш пароль (вы можете использовать тот же самый, если пожелаете).",
"importEnteEncGuide": "Выберите зашифрованный JSON файл, экспортированный из Ente",
"importRaivoGuide": "Используйте опцию «Export OTPs to Zip archive» в настройках Raivo.\n\nРаспакуйте zip-архив и импортируйте JSON-файл.",
"importBitwardenGuide": "Используйте опцию \"Экспортировать хранилище\" в Bitwarden Tools и импортируйте незашифрованный JSONфайл.",
"importRaivoGuide": "Используйте опцию «Экспорт OTP-кодов в Zip-архив» в настройках Raivo.\n\nРаспакуйте zip-архив и импортируйте JSON-файл.",
"importBitwardenGuide": "Используйте опцию \"Экспортировать хранилище\" в Bitwarden и импортируйте незашифрованный JSON-файл.",
"importAegisGuide": "Используйте опцию «Экспортировать хранилище» в настройках Aegis.\n\nЕсли ваше хранилище зашифровано, то для его расшифровки потребуется ввести пароль хранилища.",
"import2FasGuide": "Используйте опцию \"Settings->Backup -Export\" в 2FAS.\n\nЕсли ваша резервная копия зашифрована, то для расшифровки резервной копии необходимо ввести пароль",
"importLastpassGuide": "Используйте опцию \"Перенести аккаунты\" в настройках Lastpass Authenticator и нажмите на \"Экспортировать учетные записи в файл\". Импортируйте загружённый JSONфайл.",
"import2FasGuide": "Используйте опцию \"Настройки->Резервное копирование -Экспорт\" в 2FAS.\n\nЕсли ваша резервная копия зашифрована, то для расшифровки резервной копии необходимо ввести пароль",
"importLastpassGuide": "Используйте опцию \"Перенести аккаунты\" в настройках Lastpass Authenticator и нажмите на \"Экспортировать учетные записи в файл\". Импортируйте загружённый JSON-файл.",
"exportCodes": "Экспортировать коды",
"importLabel": "Импорт",
"importInstruction": "Пожалуйста, выберите файл, содержащий список ваших кодов в следующем формате",
"importCodeDelimiterInfo": "Коды могут быть разделены запятой или новой строкой",
"selectFile": "Выбрать файл",
"emailVerificationToggle": "Подтверждение электронной почты",
"emailVerificationEnableWarning": "Если вы храните у нас двухфакторную аутентификацию в своей электронной почте, включение проверки электронной почты может привести к тупиковой ситуации. Если у вас заблокирован доступ к одной службе, возможно, вы не сможете войти в другую.",
"emailVerificationToggle": "Подтверждение адреса электронной почты",
"emailVerificationEnableWarning": "Чтобы избежать блокировки вашей учетной записи, обязательно сохранитекопию вашего электронного письма 2FA за пределами Ente Auth, прежде чем активировать проверку электронной почты.",
"authToChangeEmailVerificationSetting": "Авторизуйтесь, чтобы изменить подтверждение электронной почты",
"confirmAccountDeleteMessage": "Эта учетная запись связана с другими приложениями Ente, если вы ими пользуетесь.\n\nЗагруженные вами данные во всех приложениях ente будут запланированы к удалению, а ваша учетная запись будет удалена без возможности восстановления.",
"confirmAccountDeleteMessage": "Эта учетная запись связана с другими приложениями Ente, если вы ими пользуетесь.\n\nЗагруженные вами данные во всех приложениях Ente будут запланированы к удалению, а ваша учетная запись будет удалена без возможности восстановления.",
"androidBiometricHint": "Подтвердите личность",
"@androidBiometricHint": {
"description": "Hint message advising the user how to authenticate with biometrics. It is used on Android side. Maximum 60 characters."
@@ -436,7 +440,7 @@
"signOutOtherDevices": "Выйти из других устройств",
"doNotSignOut": "Не выходить",
"hearUsWhereTitle": "Как вы узнали о Ente? (необязательно)",
"hearUsExplanation": "Будет полезно, если вы укажете, где нашли нас, так как мы не отслеживаем установки приложения",
"hearUsExplanation": "Мы не отслеживаем установки приложений. Было бы полезно, если бы вы сказали, где нас нашли!",
"recoveryKeySaved": "Ключ восстановления сохранён в папке Загрузки!",
"deleteTagMessage": "Вы уверены, что хотите удалить эту метку? Это действие необратимо.",
"somethingWentWrongParsingCode": "Мы не смогли разобрать коды {x}.",
"updateNotAvailable": "Обновление недоступно",
"viewRawCodes": "Просмотр сырых кодов",
"rawCodes": "Сырые коды",
"rawCodeData": "Сырая информация кодов",
"viewRawCodes": "Просмотр необработанных кодов",
"rawCodes": "Необработанные коды",
"rawCodeData": "Необработанные кодовые данные",
"appLock": "Блокировка приложения",
"noSystemLockFound": "Системная блокировка не найдена",
"toEnableAppLockPleaseSetupDevicePasscodeOrScreen": "Чтобы включить блокировку, настройте пароль устройства или блокировку экрана в настройках системы.",
@@ -482,16 +489,29 @@
"hideContentDescriptioniOS": "Скрывает содержимое приложения в переключателе приложений",
"autoLockFeatureDescription": "Время в фоне, после которого приложение блокируется",
"appLockDescription": "Выберите между экраном блокировки вашего устройства и пользовательским экраном блокировки с PIN-кодом или паролем.",
"pinLock": "Pin Замок",
"pinLock": "Pin блокировка",
"enterPin": "Введите PIN",
"setNewPin": "Установите новый PIN",
"importFailureDescNew": "Не удалось обработать выбранный файл.",
"authToViewPasskey": "Пожалуйста, авторизуйтесь, чтобы просмотреть пароль",
"appLockOfflineModeWarning": "Вы решили продолжить работу без резервного копирования. Если вы забудете свой пароль, доступ к вашим данным будет заблокирован.",
"duplicateCodes": "Дублировать коды",
"noDuplicates": "✨ Дубликатов нет",
"youveNoDuplicateCodesThatCanBeCleared": "У вас нет повторяющихся кодов, которые можно было бы удалить",
"deduplicateCodes": "Дедупликационные коды",
"deselectAll": "Снять выделение",
"selectAll": "Выбрать все",
"plainHTML": "Обычный HTML"
"deleteDuplicates": "Удалить повторяющиеся",
"plainHTML": "Обычный HTML",
"tellUsWhatYouThink": "Расскажите нам, что вы думаете",
"dropReviewiOS": "Оставьте отзыв в App Store",
"dropReviewAndroid": "Оставьте отзыв в Play Store",
"recoveryKeyVerifyReason": "Din återställningsnyckel är det enda sättet att återställa dina foton om du glömmer ditt lösenord. Du hittar din återställningsnyckel i Inställningar > Säkerhet.\n\nAnge din återställningsnyckel här för att verifiera att du har sparat den ordentligt.",
"confirmYourRecoveryKey": "Bekräfta din återställningsnyckel",
"confirm": "Bekräfta",
"emailYourLogs": "Maila dina loggar",
@@ -358,6 +359,7 @@
"theRecoveryKeyYouEnteredIsIncorrect": "Återställningsnyckeln du angav är felaktig",
"enterPassword": "Ange lösenord",
"selectExportFormat": "Välj exportformat",
"exportDialogDesc": "Krypterad export skyddas av ett lösenord som du väljer.",
"encrypted": "Krypterad",
"plainText": "Enkel text",
"passwordToEncryptExport": "Lösenord för att kryptera export",
@@ -365,6 +367,7 @@
"useOffline": "Använd utan säkerhetskopior",
"signInToBackup": "Logga in för att säkerhetskopiera dina koder",
"singIn": "Logga in",
"sigInBackupReminder": "Vänligen exportera dina koder för att säkerställa att du har en säkerhetskopia som du kan återställa från.",
"appLockOfflineModeWarning": "Bạn đã chọn tiếp tục mà không có bản sao lưu. Nếu bạn quên khóa ứng dụng, bạn sẽ bị khóa khỏi việc truy cập dữ liệu của mình.",
"duplicateCodes": "Mã trùng lặp",
"noDuplicates": "✨ Không có trùng lặp",
"youveNoDuplicateCodesThatCanBeCleared": "Bạn không có mã nào bị trùng để xóa",
"deduplicateCodes": "Loại bỏ mã trùng lặp",
"deselectAll": "Bỏ chọn tất cả",
"selectAll": "Chọn tất cả",
"deleteDuplicates": "Xóa trùng lặp",
"plainHTML": "HTML thuần"
"plainHTML": "HTML thuần",
"tellUsWhatYouThink": "Hãy cho chúng tôi biết bạn nghĩ gì",
"confirmAccountDeleteMessage": "如果您使用其他 Ente 应用程序,该账户将会与其他应用程序链接。\n\n在所有 Ente 应用程序中,您上传的数据将被安排用于删除,并且您的账户将被永久删除。",
"androidBiometricHint": "验证身份",
"@androidBiometricHint": {
"description": "Hint message advising the user how to authenticate with biometrics. It is used on Android side. Maximum 60 characters."
},
"androidBiometricNotRecognized": "未能识别,请重试。",
"@androidBiometricNotRecognized": {
"description": "Message to let the user know that authentication was failed. It is used on Android side. Maximum 60 characters."
},
"androidBiometricSuccess": "成功",
"@androidBiometricSuccess": {
"description": "Message to let the user know that authentication was successful. It is used on Android side. Maximum 60 characters."
},
"androidCancelButton": "取消",
"@androidCancelButton": {
"description": "Message showed on a button that the user can click to leave the current dialog. It is used on Android side. Maximum 30 characters."
},
"androidSignInTitle": "需要进行身份验证",
"@androidSignInTitle": {
"description": "Message showed as a title in a dialog which indicates the user that they need to scan biometric to continue. It is used on Android side. Maximum 60 characters."
},
"androidBiometricRequiredTitle": "需要进行生物识别认证",
"@androidBiometricRequiredTitle": {
"description": "Message showed as a title in a dialog which indicates the user has not set up biometric authentication on their device. It is used on Android side. Maximum 60 characters."
"description": "Message showed as a title in a dialog which indicates the user has not set up credentials authentication on their device. It is used on Android side. Maximum 60 characters."
"description": "Message advising the user to go to the settings and configure device credentials on their device. It shows in a dialog on Android side."
},
"goToSettings": "前往设置",
"@goToSettings": {
"description": "Message showed on a button that the user can click to go to settings pages from the current dialog. It is used on both Android and iOS side. Maximum 30 characters."
"confirmAccountDeleteMessage": "如果您使用其他 Ente APP,該帳戶將會與其他APP連結。\n\n在所有 Ente APP中,您上傳的資料將被安排用於刪除,並且您的帳戶將被永久刪除。",
"androidBiometricHint": "驗證身份",
"@androidBiometricHint": {
"description": "Hint message advising the user how to authenticate with biometrics. It is used on Android side. Maximum 60 characters."
},
"androidBiometricNotRecognized": "未能辨識,請重試。",
"@androidBiometricNotRecognized": {
"description": "Message to let the user know that authentication was failed. It is used on Android side. Maximum 60 characters."
},
"androidBiometricSuccess": "成功",
"@androidBiometricSuccess": {
"description": "Message to let the user know that authentication was successful. It is used on Android side. Maximum 60 characters."
},
"androidCancelButton": "取消",
"@androidCancelButton": {
"description": "Message showed on a button that the user can click to leave the current dialog. It is used on Android side. Maximum 30 characters."
},
"androidSignInTitle": "需要進行身份驗證",
"@androidSignInTitle": {
"description": "Message showed as a title in a dialog which indicates the user that they need to scan biometric to continue. It is used on Android side. Maximum 60 characters."
},
"androidBiometricRequiredTitle": "需要進行生物辨識認證",
"@androidBiometricRequiredTitle": {
"description": "Message showed as a title in a dialog which indicates the user has not set up biometric authentication on their device. It is used on Android side. Maximum 60 characters."
"description": "Message showed as a title in a dialog which indicates the user has not set up credentials authentication on their device. It is used on Android side. Maximum 60 characters."
"description": "Message advising the user to go to the settings and configure device credentials on their device. It shows in a dialog on Android side."
},
"goToSettings": "前往設定",
"@goToSettings": {
"description": "Message showed on a button that the user can click to go to settings pages from the current dialog. It is used on both Android and iOS side. Maximum 30 characters."
* Note that `vips.js` would've already run once `beforeBuild.js` is run, but on
* our CI we prepare builds for multiple architectures in one go, so we need to
* unconditonally replace the binary with the relevant one for the current
* unconditionally replace the binary with the relevant one for the current
* architecture being built (which might be different from the one we're running
* on). `beforeBuild.js` runs for each architecture being built.
*
Some files were not shown because too many files have changed in this diff
Show More
Reference in New Issue
Block a user
Blocking a user prevents them from interacting with repositories, such as opening or commenting on pull requests or issues. Learn more about blocking a user.