Compare commits

..
171 Commits
Author SHA1 Message Date
Sylvia van Os e68dbe255f Merge pull request #3319 from CatimaLoyalty/fix/pkpasses_import
Fix importing pkpasses file from network location
2026-09-08 19:28:00 +02:00
Sylvia van Os 3fffc83c08 Fix importing pkpasses file from network location
In the scan activity, the mime type info is not always available. This
made pkpasses files fail to parse, because they only went down the
pkpass path
2026-09-07 21:23:34 +02:00
Sylvia van Os 03e1f5c672 Merge pull request #3318 from CatimaLoyalty/create-pull-request/patch-1788682987
Update contributors
2026-09-06 11:00:15 +02:00
TheLastProject 40295f7f37 Update contributors 2026-09-06 08:23:06 +00:00
Sylvia van Os bbf00e1d90 Merge pull request #3317 from CatimaLoyalty/create-pull-request/patch-1788604415
Update Fastlane changelogs
2026-09-05 12:37:56 +02:00
TheLastProject 61637599e3 Update Fastlane changelogs 2026-09-05 10:33:35 +00:00
Sylvia van Os b748f2e002 Update CHANGELOG 2026-09-05 12:32:28 +02:00
Matt Van HornandMatt Van Horn f3424b716d fix: Import cloud-backed PKPASS files off the main thread (#3282)
* fix: Import cloud-backed PKPASS files off the main thread

Fixes #2464

* Address review: move all import parsing off the main thread, restore failure toasts

- Route image/PDF/pkpass/espass imports through one background importFile
- Restore errorReadingFile / errorReadingImage / noBarcodeFound toasts via a
  main-looper-marshalling showToast helper
- Replace fixed-timeout awaits in the activity tests with a waitFor predicate

* Start the import coroutine on the main dispatcher, hop to IO for the read

launch(Dispatchers.IO) starts the coroutine on a background thread immediately,
so a paused Robolectric main looper never drives it and the activity tests time
out. Launch on the lifecycle scope's default (main) dispatcher and wrap only the
blocking read in withContext(Dispatchers.IO).

* Fix the two failing import tests

Two separate bugs, both in the tests I added:

- new Intent(ACTION_VIEW, uri).setType(...) clears the data URI (setType and
  setData clear each other), so the activity received a null Uri and the read
  never started. Use setDataAndType.
- The intermediate-state assertions (no started activity / RESULT_CANCELED)
  are not observable: waiting on the main looper drains it, and Robolectric
  drains it again during .visible(), so the import has already run to
  completion by the time the test regains control. Assert the off-main-thread
  read directly instead, which is the property these tests exist to prove.

* fix: make showToast reusable with a caller-supplied duration

Take the toast length as a parameter instead of hardcoding LENGTH_LONG, so
the helper can serve short toasts too, and document why it exists: it shows
the toast directly when already on the main looper and otherwise posts it
there, which is what the off-main-thread import path needs.

Reorders the modifiers to the file's `static private` convention.

All existing call sites pass LENGTH_LONG, so behavior is unchanged.

---------

Co-authored-by: Matt Van Horn <455140+mvanhorn@users.noreply.github.com>
2026-09-05 12:31:04 +02:00
Sylvia van Os 3a413127a5 Merge pull request #3315 from weblate/weblate-catima-catima
Translations update from Hosted Weblate
2026-09-05 00:53:23 +02:00
NooB9496 352086887d Translated using Weblate (Polish)
Currently translated at 100.0% (170 of 170 strings)

Translation: Catima/Android (Fastlane)
Translate-URL: https://hosted.weblate.org/projects/catima/fastlane/pl/
2026-09-03 10:54:23 +02:00
Sylvia van Os 2e3770706c Merge pull request #3314 from CatimaLoyalty/dependabot/gradle/com.android.application-9.4.0
Bump com.android.application from 9.3.2 to 9.4.0
2026-09-02 08:11:23 +02:00
dependabot[bot] 92abf69236 Bump com.android.application from 9.3.2 to 9.4.0
Bumps com.android.application from 9.3.2 to 9.4.0.

---
updated-dependencies:
- dependency-name: com.android.application
  dependency-version: 9.4.0
  dependency-type: direct:production
  update-type: version-update:semver-minor
...

Signed-off-by: dependabot[bot] <support@github.com>
2026-09-02 05:57:27 +00:00
Sylvia van Os c9e6606524 Merge pull request #3313 from CatimaLoyalty/dependabot/gradle/com.android.library-9.4.0
Bump com.android.library from 9.3.2 to 9.4.0
2026-09-02 07:55:20 +02:00
dependabot[bot] 9e58c9da44 Bump com.android.library from 9.3.2 to 9.4.0
Bumps com.android.library from 9.3.2 to 9.4.0.

---
updated-dependencies:
- dependency-name: com.android.library
  dependency-version: 9.4.0
  dependency-type: direct:production
  update-type: version-update:semver-minor
...

Signed-off-by: dependabot[bot] <support@github.com>
2026-09-02 02:54:29 +00:00
Sylvia van Os b99204c55b Merge pull request #3312 from weblate/weblate-catima-catima
Translations update from Hosted Weblate
2026-09-01 23:12:13 +02:00
Liner Seven 15035fe38e Translated using Weblate (Japanese)
Currently translated at 100.0% (170 of 170 strings)

Translation: Catima/Android (Fastlane)
Translate-URL: https://hosted.weblate.org/projects/catima/fastlane/ja/
2026-09-01 20:52:39 +02:00
Sylvain Pichon 5d58fae618 Translated using Weblate (French)
Currently translated at 100.0% (170 of 170 strings)

Translation: Catima/Android (Fastlane)
Translate-URL: https://hosted.weblate.org/projects/catima/fastlane/fr/
2026-09-01 20:52:39 +02:00
Sylvia van Os 363fce3064 Merge pull request #3311 from weblate/weblate-catima-catima
Translations update from Hosted Weblate
2026-08-31 20:33:32 +02:00
Gabriel 868f12f072 Translated using Weblate (Portuguese (Brazil))
Currently translated at 100.0% (170 of 170 strings)

Translation: Catima/Android (Fastlane)
Translate-URL: https://hosted.weblate.org/projects/catima/fastlane/pt_BR/
2026-08-31 19:01:57 +02:00
Hosted Weblate user 54392 3332cf732e Translated using Weblate (Chinese (Simplified Han script))
Currently translated at 100.0% (170 of 170 strings)

Translation: Catima/Android (Fastlane)
Translate-URL: https://hosted.weblate.org/projects/catima/fastlane/zh_Hans/
2026-08-31 19:01:56 +02:00
Fjuro abec7ea821 Translated using Weblate (Czech)
Currently translated at 100.0% (170 of 170 strings)

Translation: Catima/Android (Fastlane)
Translate-URL: https://hosted.weblate.org/projects/catima/fastlane/cs/
2026-08-31 19:01:55 +02:00
Stephan Paternotte 555f3dff46 Translated using Weblate (Dutch)
Currently translated at 100.0% (170 of 170 strings)

Translation: Catima/Android (Fastlane)
Translate-URL: https://hosted.weblate.org/projects/catima/fastlane/nl/
2026-08-31 19:01:55 +02:00
solokot 59e14a516f Translated using Weblate (Russian)
Currently translated at 100.0% (170 of 170 strings)

Translation: Catima/Android (Fastlane)
Translate-URL: https://hosted.weblate.org/projects/catima/fastlane/ru/
2026-08-31 19:01:54 +02:00
B o d o 6fc798dfc6 Translated using Weblate (German)
Currently translated at 100.0% (170 of 170 strings)

Translation: Catima/Android (Fastlane)
Translate-URL: https://hosted.weblate.org/projects/catima/fastlane/de/
2026-08-31 19:01:53 +02:00
Sylvia van Os b9462df24a Merge pull request #3310 from weblate/weblate-catima-catima
Translations update from Hosted Weblate
2026-08-30 20:40:58 +02:00
Arif Budiman 9344df33d7 Translated using Weblate (Indonesian)
Currently translated at 100.0% (359 of 359 strings)

Translation: Catima/Android
Translate-URL: https://hosted.weblate.org/projects/catima/catima/id/
2026-08-30 17:52:49 +02:00
泥鰍 fbec74ae54 Translated using Weblate (Chinese (Traditional Han script))
Currently translated at 90.8% (326 of 359 strings)

Translation: Catima/Android
Translate-URL: https://hosted.weblate.org/projects/catima/catima/zh_Hant/
2026-08-30 17:52:48 +02:00
Joel A d493733abd Translated using Weblate (Swedish)
Currently translated at 95.2% (342 of 359 strings)

Translation: Catima/Android
Translate-URL: https://hosted.weblate.org/projects/catima/catima/sv/
2026-08-30 17:52:47 +02:00
solokot dbae33492d Translated using Weblate (Russian)
Currently translated at 100.0% (170 of 170 strings)

Translation: Catima/Android (Fastlane)
Translate-URL: https://hosted.weblate.org/projects/catima/fastlane/ru/
2026-08-30 17:52:47 +02:00
Sylvia van Os 2b8b48afdc Merge pull request #3309 from CatimaLoyalty/create-pull-request/patch-1788083003
Update contributors
2026-08-30 11:46:00 +02:00
TheLastProject 3bb8b94c6d Update contributors 2026-08-30 09:43:23 +00:00
Sylvia van Os 3b0f3b3a5b Merge pull request #3011 from hidrohase/patch-1
Add Obtainum Link and Pic
2026-08-30 11:13:16 +02:00
Sylvia van Os 2885357b80 Move Obtainium button above Google Play button
I still would much rather people use IzzyOnDroid or F-Droid than
Obtainium, as Obtainium has 0 security measures against me getting
hacked and publishing a malicious release. However, many Obtainium users
exist and right now adding Catima is just broken due to the Wear OS
releases.

Also, Google just constantly treats me horrendously so.... yeah.
Anything is better than Google Play.
2026-08-30 11:12:49 +02:00
hidrohase d08bbb5e3c Add Obtainum Link and Pic
The button filters out Wear OS releases
2026-08-30 11:08:00 +02:00
Sylvia van Os 1da01b846a Merge pull request #3308 from CatimaLoyalty/TheLastProject-patch-1
Split GitHub badge into core and Wear OS
2026-08-29 11:28:27 +02:00
Sylvia van Os 1f2870d3d8 Split GitHub badge into core and Wear OS 2026-08-29 11:06:00 +02:00
Sylvia van Os a0a2f061bd Release Catima Wear OS 1.0.1 2026-08-28 17:09:28 +02:00
Sylvia van Os c70b3ec172 Merge pull request #3306 from weblate/weblate-catima-catima
Translations update from Hosted Weblate
2026-08-28 17:08:26 +02:00
Sylvia van Os a3ad6a8568 Merge pull request #3305 from CatimaLoyalty/create-pull-request/patch-1787928982
Update Fastlane changelogs
2026-08-28 17:07:33 +02:00
Hosted Weblate 1a9d162370 Update translation files
Updated by "Remove blank strings" hook in Weblate.

Translation: Catima/Android
Translate-URL: https://hosted.weblate.org/projects/catima/catima/
2026-08-28 17:06:43 +02:00
Sylvia van Os 950d19ce8c Translated using Weblate (Persian)
Currently translated at 81.8% (294 of 359 strings)

Translation: Catima/Android
Translate-URL: https://hosted.weblate.org/projects/catima/catima/fa/
2026-08-28 17:06:43 +02:00
Sylvain Pichon b531081806 Translated using Weblate (French)
Currently translated at 100.0% (170 of 170 strings)

Translation: Catima/Android (Fastlane)
Translate-URL: https://hosted.weblate.org/projects/catima/fastlane/fr/
2026-08-28 17:06:43 +02:00
TheLastProject b46313a112 Update Fastlane changelogs 2026-08-28 14:56:22 +00:00
Sylvia van Os b54fc85fdb Update CHANGELOG 2026-08-28 16:56:09 +02:00
Sylvia van Os b71a2a0bbf Merge pull request #3303 from CatimaLoyalty/feature/update_wearos_screenshots
Update WearOS screenshots based on current state
2026-08-28 16:55:29 +02:00
Sylvia van Os 8ba44eeba5 Update WearOS screenshots based on current state 2026-08-28 16:25:41 +02:00
Sylvia van Os 8ef9f39fb7 Merge pull request #3302 from CatimaLoyalty/fix/hide_barcode_wearos
WearOS: Hide barcode as a hack for Google approval
2026-08-28 16:21:28 +02:00
Sylvia van Os 86543c8fb9 WearOS: Hide barcode as a hack for Google approval 2026-08-28 15:56:24 +02:00
Sylvia van Os 3c8bae3acc Merge pull request #3300 from weblate/weblate-catima-catima
Translations update from Hosted Weblate
2026-08-27 23:32:07 +02:00
Sylvia van Os 0a19db7c7e Merge pull request #3301 from CatimaLoyalty/dependabot/gradle/gradle-wrapper-9.7.1
Bump gradle-wrapper from 9.7.0 to 9.7.1
2026-08-27 11:24:32 +02:00
dependabot[bot] 7b55f593d0 Bump gradle-wrapper from 9.7.0 to 9.7.1
Bumps [gradle-wrapper](https://github.com/gradle/gradle) from 9.7.0 to 9.7.1.
- [Release notes](https://github.com/gradle/gradle/releases)
- [Commits](https://github.com/gradle/gradle/compare/v9.7.0...v9.7.1)

---
updated-dependencies:
- dependency-name: gradle-wrapper
  dependency-version: 9.7.1
  dependency-type: direct:production
  update-type: version-update:semver-patch
...

Signed-off-by: dependabot[bot] <support@github.com>
2026-08-27 02:55:14 +00:00
Fjuro ced6b08e6c Translated using Weblate (Czech)
Currently translated at 100.0% (1 of 1 strings)

Translation: Catima/Wear OS (Debug)
Translate-URL: https://hosted.weblate.org/projects/catima/wear-os-debug/cs/
2026-08-26 19:52:20 +00:00
Fjuro 23589e88df Translated using Weblate (Czech)
Currently translated at 100.0% (13 of 13 strings)

Translation: Catima/Wear OS
Translate-URL: https://hosted.weblate.org/projects/catima/wear-os/cs/
2026-08-26 19:52:20 +00:00
delvani 4bc38a1162 Translated using Weblate (Portuguese (Brazil))
Currently translated at 100.0% (359 of 359 strings)

Translation: Catima/Android
Translate-URL: https://hosted.weblate.org/projects/catima/catima/pt_BR/
2026-08-26 19:52:19 +00:00
امیرضا 69ce67cda4 Translated using Weblate (Persian)
Currently translated at 82.4% (296 of 359 strings)

Translation: Catima/Android
Translate-URL: https://hosted.weblate.org/projects/catima/catima/fa/
2026-08-26 19:52:19 +00:00
Fjuro ce76901d6e Translated using Weblate (Czech)
Currently translated at 100.0% (1 of 1 strings)

Translation: Catima/Android (Debug)
Translate-URL: https://hosted.weblate.org/projects/catima/android-debug/cs/
2026-08-26 19:52:18 +00:00
Hosted Weblate user 54392 fa4b89d3a9 Translated using Weblate (Chinese (Simplified Han script))
Currently translated at 100.0% (170 of 170 strings)

Translation: Catima/Android (Fastlane)
Translate-URL: https://hosted.weblate.org/projects/catima/fastlane/zh_Hans/
2026-08-26 19:52:18 +00:00
Watchman89 3bac76db8f Translated using Weblate (Dutch)
Currently translated at 100.0% (170 of 170 strings)

Translation: Catima/Android (Fastlane)
Translate-URL: https://hosted.weblate.org/projects/catima/fastlane/nl/
2026-08-26 19:52:17 +00:00
J. Lavoie f93e7d857a Translated using Weblate (Italian)
Currently translated at 90.8% (326 of 359 strings)

Translation: Catima/Android
Translate-URL: https://hosted.weblate.org/projects/catima/catima/it/
2026-08-26 19:52:17 +00:00
J. Lavoie 1b894e5043 Translated using Weblate (French)
Currently translated at 100.0% (359 of 359 strings)

Translation: Catima/Android
Translate-URL: https://hosted.weblate.org/projects/catima/catima/fr/
2026-08-26 19:52:17 +00:00
Sylvia van Os 08508952fc Merge pull request #3299 from weblate/weblate-catima-catima
Translations update from Hosted Weblate
2026-08-26 10:50:48 +02:00
Fjuro e7159b7980 Added translation using Weblate (Czech) 2026-08-25 21:38:58 +02:00
Fjuro 223b5a04db Added translation using Weblate (Czech) 2026-08-25 21:38:27 +02:00
Fjuro b7aa25a5e3 Translated using Weblate (Czech)
Currently translated at 100.0% (170 of 170 strings)

Translation: Catima/Android (Fastlane)
Translate-URL: https://hosted.weblate.org/projects/catima/fastlane/cs/
2026-08-25 21:38:27 +02:00
B o d o 1d9fbd6633 Translated using Weblate (German)
Currently translated at 100.0% (170 of 170 strings)

Translation: Catima/Android (Fastlane)
Translate-URL: https://hosted.weblate.org/projects/catima/fastlane/de/
2026-08-25 21:38:27 +02:00
Sylvia van Os 4be04fb057 Merge pull request #3298 from weblate/weblate-catima-catima
Translations update from Hosted Weblate
2026-08-25 19:12:41 +02:00
Hugo Perez Montero efdb68cb90 Translated using Weblate (Catalan)
Currently translated at 71.5% (257 of 359 strings)

Translation: Catima/Android
Translate-URL: https://hosted.weblate.org/projects/catima/catima/ca/
2026-08-25 16:51:43 +00:00
Sylvia van Os 1f61b00ed5 Merge pull request #3297 from CatimaLoyalty/dependabot/gradle/com.android.library-9.3.2
Bump com.android.library from 9.3.1 to 9.3.2
2026-08-25 12:26:44 +02:00
dependabot[bot] 7afa0399d4 Bump com.android.library from 9.3.1 to 9.3.2
Bumps com.android.library from 9.3.1 to 9.3.2.

---
updated-dependencies:
- dependency-name: com.android.library
  dependency-version: 9.3.2
  dependency-type: direct:production
  update-type: version-update:semver-patch
...

Signed-off-by: dependabot[bot] <support@github.com>
2026-08-25 09:54:55 +00:00
Sylvia van Os efe441b0bd Merge pull request #3296 from CatimaLoyalty/dependabot/gradle/com.android.application-9.3.2
Bump com.android.application from 9.3.1 to 9.3.2
2026-08-25 11:53:01 +02:00
dependabot[bot] 59efd0892f Bump com.android.application from 9.3.1 to 9.3.2
Bumps com.android.application from 9.3.1 to 9.3.2.

---
updated-dependencies:
- dependency-name: com.android.application
  dependency-version: 9.3.2
  dependency-type: direct:production
  update-type: version-update:semver-patch
...

Signed-off-by: dependabot[bot] <support@github.com>
2026-08-25 02:53:10 +00:00
Sylvia van Os 1cee23baad Merge pull request #3295 from CatimaLoyalty/create-pull-request/patch-1787608078
Update Fastlane changelogs
2026-08-24 23:50:34 +02:00
TheLastProject d13519a75f Update Fastlane changelogs 2026-08-24 21:47:57 +00:00
Sylvia van Os 5a12769f22 Update CHANGELOG 2026-08-24 23:47:45 +02:00
Sylvia van Os 14ed18c4d0 Merge pull request #3294 from CatimaLoyalty/fix/card_list_widget_update
Update list widgets on card open
2026-08-24 23:45:56 +02:00
Sylvia van Os 59e2083511 Update list widgets on card open
This ensures the order is correct for users who sort by most recently
used
2026-08-24 23:22:46 +02:00
Sylvia van Os a9daca77a2 Merge pull request #3293 from CatimaLoyalty/create-pull-request/patch-1787582401
Update Fastlane changelogs
2026-08-24 16:47:33 +02:00
TheLastProject 8b67797e71 Update Fastlane changelogs 2026-08-24 14:40:01 +00:00
Sylvia van Os 4195c2b75e Update CHANGELOG 2026-08-24 16:39:47 +02:00
Sylvia van Os 5e3bb55ba5 Merge pull request #3292 from CatimaLoyalty/feature/wearos_scrollbar
Add scroll bar and fix some padding bugs
2026-08-24 16:38:03 +02:00
Sylvia van Os 0a0c378f56 Merge pull request #3291 from CatimaLoyalty/feature/wear_os_splashscreen
Implement Wear OS splash screen
2026-08-24 16:20:37 +02:00
Sylvia van Os 2e4fb34dbe Add scroll bar and fix some padding bugs 2026-08-24 16:20:19 +02:00
Sylvia van Os 2df681a5b8 Implement Wear OS splash screen 2026-08-24 15:45:25 +02:00
Sylvia van Os 7c11508b12 Merge pull request #3289 from weblate/weblate-catima-catima
Translations update from Hosted Weblate
2026-08-24 14:46:38 +02:00
Audrick Stephan Moraes 54bbe1e99a Translated using Weblate (Portuguese (Brazil))
Currently translated at 99.4% (167 of 168 strings)

Translation: Catima/Android (Fastlane)
Translate-URL: https://hosted.weblate.org/projects/catima/fastlane/pt_BR/
2026-08-24 08:52:42 +02:00
Audrick Stephan Moraes 24bd17eb9c Translated using Weblate (Portuguese (Brazil))
Currently translated at 97.4% (350 of 359 strings)

Translation: Catima/Android
Translate-URL: https://hosted.weblate.org/projects/catima/catima/pt_BR/
2026-08-24 08:52:41 +02:00
Arif Budiman 33653fab99 Translated using Weblate (Indonesian)
Currently translated at 99.7% (358 of 359 strings)

Translation: Catima/Android
Translate-URL: https://hosted.weblate.org/projects/catima/catima/id/
2026-08-24 08:52:41 +02:00
109247019824 9efb246133 Translated using Weblate (Bulgarian)
Currently translated at 91.6% (329 of 359 strings)

Translation: Catima/Android
Translate-URL: https://hosted.weblate.org/projects/catima/catima/bg/
2026-08-24 08:52:40 +02:00
Roberto Angel e807e1f4ff Translated using Weblate (Spanish)
Currently translated at 100.0% (359 of 359 strings)

Translation: Catima/Android
Translate-URL: https://hosted.weblate.org/projects/catima/catima/es/
2026-08-24 08:52:39 +02:00
Sylvia van Os d1d8eaacae Merge pull request #3288 from CatimaLoyalty/create-pull-request/patch-1787459658
Update contributors
2026-08-23 14:31:49 +02:00
TheLastProject 4030cd0284 Update contributors 2026-08-23 04:34:18 +00:00
Sylvia van Os 80ec71d9d9 Merge pull request #3286 from weblate/weblate-catima-catima
Translations update from Hosted Weblate
2026-08-21 17:31:07 +02:00
josé m. 2cd3b4a131 Translated using Weblate (Galician)
Currently translated at 100.0% (359 of 359 strings)

Translation: Catima/Android
Translate-URL: https://hosted.weblate.org/projects/catima/catima/gl/
2026-08-21 11:53:24 +00:00
NooB9496 e90ab64194 Translated using Weblate (Polish)
Currently translated at 100.0% (168 of 168 strings)

Translation: Catima/Android (Fastlane)
Translate-URL: https://hosted.weblate.org/projects/catima/fastlane/pl/
2026-08-21 11:53:22 +00:00
NooB9496 0656767d07 Translated using Weblate (Polish)
Currently translated at 100.0% (359 of 359 strings)

Translation: Catima/Android
Translate-URL: https://hosted.weblate.org/projects/catima/catima/pl/
2026-08-21 11:53:21 +00:00
Sylvia van Os ab4685b725 Merge pull request #3280 from CatimaLoyalty/dependabot/gradle/androidx.appcompat-appcompat-1.8.0
Bump androidx.appcompat:appcompat from 1.7.1 to 1.8.0
2026-08-20 12:07:34 +02:00
dependabot[bot] 42beafa255 Bump androidx.appcompat:appcompat from 1.7.1 to 1.8.0
Bumps androidx.appcompat:appcompat from 1.7.1 to 1.8.0.

---
updated-dependencies:
- dependency-name: androidx.appcompat:appcompat
  dependency-version: 1.8.0
  dependency-type: direct:production
  update-type: version-update:semver-minor
...

Signed-off-by: dependabot[bot] <support@github.com>
2026-08-20 02:54:28 +00:00
Sylvia van Os 3df40a8808 Merge pull request #3278 from weblate/weblate-catima-catima
Translations update from Hosted Weblate
2026-08-18 13:19:01 +02:00
Priit Jõerüüt eefe52320a Translated using Weblate (Estonian)
Currently translated at 100.0% (13 of 13 strings)

Translation: Catima/Wear OS
Translate-URL: https://hosted.weblate.org/projects/catima/wear-os/et/
2026-08-18 11:51:58 +02:00
Priit Jõerüüt 96cf6c04be Translated using Weblate (Estonian)
Currently translated at 12.5% (21 of 168 strings)

Translation: Catima/Android (Fastlane)
Translate-URL: https://hosted.weblate.org/projects/catima/fastlane/et/
2026-08-18 11:51:58 +02:00
Sylvia van Os f397692f3b Merge pull request #3277 from weblate/weblate-catima-catima
Translations update from Hosted Weblate
2026-08-17 21:54:29 +02:00
AhmedAwad ec17b3a8d9 Translated using Weblate (Arabic)
Currently translated at 41.0% (69 of 168 strings)

Translation: Catima/Android (Fastlane)
Translate-URL: https://hosted.weblate.org/projects/catima/fastlane/ar/
2026-08-17 00:50:38 +02:00
AhmedAwad 03ba942423 Translated using Weblate (Arabic)
Currently translated at 99.7% (358 of 359 strings)

Translation: Catima/Android
Translate-URL: https://hosted.weblate.org/projects/catima/catima/ar/
2026-08-17 00:50:38 +02:00
Eisa Ali 67d812b291 Translated using Weblate (Arabic)
Currently translated at 99.7% (358 of 359 strings)

Translation: Catima/Android
Translate-URL: https://hosted.weblate.org/projects/catima/catima/ar/
2026-08-17 00:50:38 +02:00
B o d o e9ca16ffd3 Translated using Weblate (German)
Currently translated at 100.0% (359 of 359 strings)

Translation: Catima/Android
Translate-URL: https://hosted.weblate.org/projects/catima/catima/de/
2026-08-17 00:50:38 +02:00
Sylvia van Os 66f96b64e2 Merge pull request #3275 from weblate/weblate-catima-catima
Translations update from Hosted Weblate
2026-08-16 09:42:20 +02:00
Sylvia van Os f165ae525a Merge pull request #3276 from CatimaLoyalty/create-pull-request/patch-1786854833
Update contributors
2026-08-16 09:28:03 +02:00
TheLastProject dfc27cf4fe Update contributors 2026-08-16 04:33:53 +00:00
Eisa Ali c6bf7101c3 Translated using Weblate (Arabic)
Currently translated at 100.0% (13 of 13 strings)

Translation: Catima/Wear OS
Translate-URL: https://hosted.weblate.org/projects/catima/wear-os/ar/
2026-08-15 22:52:25 +02:00
Sylvia van Os a1a97aea9c Merge pull request #3274 from weblate/weblate-catima-catima
Translations update from Hosted Weblate
2026-08-15 21:08:25 +02:00
Eisa Ali a338eb6e1b Added translation using Weblate (Arabic) 2026-08-15 15:10:05 +02:00
Sylvia van Os 74b248f565 Translated using Weblate (Serbian)
Currently translated at 97.2% (349 of 359 strings)

Translation: Catima/Android
Translate-URL: https://hosted.weblate.org/projects/catima/catima/sr/
2026-08-15 15:10:05 +02:00
Sylvain Pichon dae297a41f Translated using Weblate (French)
Currently translated at 100.0% (168 of 168 strings)

Translation: Catima/Android (Fastlane)
Translate-URL: https://hosted.weblate.org/projects/catima/fastlane/fr/
2026-08-15 15:10:04 +02:00
Stephan Paternotte 944fa35f83 Translated using Weblate (Dutch)
Currently translated at 100.0% (359 of 359 strings)

Translation: Catima/Android
Translate-URL: https://hosted.weblate.org/projects/catima/catima/nl/
2026-08-15 15:10:03 +02:00
Sylvia van Os d4196e4029 Translated using Weblate (Dutch)
Currently translated at 100.0% (359 of 359 strings)

Translation: Catima/Android
Translate-URL: https://hosted.weblate.org/projects/catima/catima/nl/
2026-08-15 15:10:03 +02:00
Sylvain Pichon 62866c93db Translated using Weblate (French)
Currently translated at 100.0% (359 of 359 strings)

Translation: Catima/Android
Translate-URL: https://hosted.weblate.org/projects/catima/catima/fr/
2026-08-15 15:10:02 +02:00
Vasilis K. db03cdcb3e Translated using Weblate (Greek)
Currently translated at 100.0% (359 of 359 strings)

Translation: Catima/Android
Translate-URL: https://hosted.weblate.org/projects/catima/catima/el/
2026-08-15 15:10:02 +02:00
Sylvia van Os 0c28c3e5f7 Merge pull request #3271 from CatimaLoyalty/dependabot/gradle/gradle-wrapper-9.7.0
Bump gradle-wrapper from 9.6.1 to 9.7.0
2026-08-14 19:40:08 +02:00
Sylvia van Os bbe39f3d6a Merge pull request #3272 from weblate/weblate-catima-catima
Translations update from Hosted Weblate
2026-08-14 19:38:04 +02:00
Petar Mladenović (retr0_master) 4e976caaaf Translated using Weblate (Serbian)
Currently translated at 97.2% (349 of 359 strings)

Translation: Catima/Android
Translate-URL: https://hosted.weblate.org/projects/catima/catima/sr/
2026-08-14 09:14:14 +02:00
Edgars Andersons ff804f9352 Translated using Weblate (Latvian)
Currently translated at 16.0% (27 of 168 strings)

Translation: Catima/Android (Fastlane)
Translate-URL: https://hosted.weblate.org/projects/catima/fastlane/lv/
2026-08-14 09:14:13 +02:00
Stephan Paternotte a3805c48d3 Translated using Weblate (Dutch)
Currently translated at 100.0% (168 of 168 strings)

Translation: Catima/Android (Fastlane)
Translate-URL: https://hosted.weblate.org/projects/catima/fastlane/nl/
2026-08-14 09:14:11 +02:00
Stephan Paternotte 8eb2dc61d7 Translated using Weblate (Dutch)
Currently translated at 100.0% (359 of 359 strings)

Translation: Catima/Android
Translate-URL: https://hosted.weblate.org/projects/catima/catima/nl/
2026-08-14 09:14:09 +02:00
Priit Jõerüüt 5b7bb3acc4 Translated using Weblate (Estonian)
Currently translated at 15.3% (2 of 13 strings)

Translation: Catima/Wear OS
Translate-URL: https://hosted.weblate.org/projects/catima/wear-os/et/
2026-08-14 03:59:35 +00:00
Petar Mladenović (retr0_master) c001e317ec Translated using Weblate (Serbian)
Currently translated at 91.0% (327 of 359 strings)

Translation: Catima/Android
Translate-URL: https://hosted.weblate.org/projects/catima/catima/sr/
2026-08-14 03:59:34 +00:00
Edgars Andersons 4eb02446aa Translated using Weblate (Latvian)
Currently translated at 15.4% (26 of 168 strings)

Translation: Catima/Android (Fastlane)
Translate-URL: https://hosted.weblate.org/projects/catima/fastlane/lv/
2026-08-14 03:59:34 +00:00
Edgars Andersons 84e092fce4 Translated using Weblate (Latvian)
Currently translated at 100.0% (359 of 359 strings)

Translation: Catima/Android
Translate-URL: https://hosted.weblate.org/projects/catima/catima/lv/
2026-08-14 03:59:33 +00:00
Sylvia van Os b84730877b Translated using Weblate (Chinese (Simplified Han script))
Currently translated at 100.0% (168 of 168 strings)

Translation: Catima/Android (Fastlane)
Translate-URL: https://hosted.weblate.org/projects/catima/fastlane/zh_Hans/
2026-08-14 03:59:33 +00:00
dependabot[bot] bad9e0d9d8 Bump gradle-wrapper from 9.6.1 to 9.7.0
Bumps [gradle-wrapper](https://github.com/gradle/gradle) from 9.6.1 to 9.7.0.
- [Release notes](https://github.com/gradle/gradle/releases)
- [Commits](https://github.com/gradle/gradle/compare/v9.6.1...v9.7.0)

---
updated-dependencies:
- dependency-name: gradle-wrapper
  dependency-version: 9.7.0
  dependency-type: direct:production
  update-type: version-update:semver-minor
...

Signed-off-by: dependabot[bot] <support@github.com>
2026-08-14 02:55:47 +00:00
Sylvia van Os 10ea218b34 Merge pull request #3267 from weblate/weblate-catima-catima
Translations update from Hosted Weblate
2026-08-13 20:40:40 +02:00
Sylvia van Os 59f52608db Merge pull request #3269 from CatimaLoyalty/wearos/readme_update
Mention smartwatch support in README
2026-08-13 20:27:49 +02:00
Sylvia van Os 239fc9754d Mention smartwatch support in README 2026-08-13 20:24:22 +02:00
Priit Jõerüüt f520534890 Added translation using Weblate (Estonian) 2026-08-13 19:38:48 +02:00
Priit Jõerüüt d91a7dd4a1 Translated using Weblate (Estonian)
Currently translated at 100.0% (1 of 1 strings)

Translation: Catima/Wear OS (Debug)
Translate-URL: https://hosted.weblate.org/projects/catima/wear-os-debug/et/
2026-08-13 19:38:48 +02:00
Priit Jõerüüt b3573891bf Translated using Weblate (Estonian)
Currently translated at 100.0% (1 of 1 strings)

Translation: Catima/Android (Debug)
Translate-URL: https://hosted.weblate.org/projects/catima/android-debug/et/
2026-08-13 19:38:47 +02:00
Priit Jõerüüt fb75cf91c3 Added translation using Weblate (Estonian) 2026-08-13 19:38:01 +02:00
Oğuz Ersen 15022515bf Translated using Weblate (Turkish)
Currently translated at 100.0% (13 of 13 strings)

Translation: Catima/Wear OS
Translate-URL: https://hosted.weblate.org/projects/catima/wear-os/tr/
2026-08-13 19:38:01 +02:00
Priit Jõerüüt 19c277b5b7 Translated using Weblate (Estonian)
Currently translated at 100.0% (359 of 359 strings)

Translation: Catima/Android
Translate-URL: https://hosted.weblate.org/projects/catima/catima/et/
2026-08-13 19:38:01 +02:00
Oğuz Ersen 0af89b9516 Added translation using Weblate (Turkish) 2026-08-13 19:38:00 +02:00
Oğuz Ersen 0450bc5e9b Translated using Weblate (Turkish)
Currently translated at 100.0% (1 of 1 strings)

Translation: Catima/Wear OS (Debug)
Translate-URL: https://hosted.weblate.org/projects/catima/wear-os-debug/tr/
2026-08-13 19:37:59 +02:00
Oğuz Ersen 2ca2840c3c Added translation using Weblate (Turkish) 2026-08-13 19:37:59 +02:00
B o d o 192d516acd Translated using Weblate (German)
Currently translated at 100.0% (13 of 13 strings)

Translation: Catima/Wear OS
Translate-URL: https://hosted.weblate.org/projects/catima/wear-os/de/
2026-08-13 19:37:58 +02:00
B o d o d636097845 Translated using Weblate (German)
Currently translated at 100.0% (1 of 1 strings)

Translation: Catima/Wear OS (Debug)
Translate-URL: https://hosted.weblate.org/projects/catima/wear-os-debug/de/
2026-08-13 19:37:58 +02:00
Oğuz Ersen e5b1c209de Translated using Weblate (Turkish)
Currently translated at 100.0% (359 of 359 strings)

Translation: Catima/Android
Translate-URL: https://hosted.weblate.org/projects/catima/catima/tr/
2026-08-13 19:37:57 +02:00
Hosted Weblate user 54392 61ddf10df5 Translated using Weblate (Chinese (Simplified Han script))
Currently translated at 100.0% (168 of 168 strings)

Translation: Catima/Android (Fastlane)
Translate-URL: https://hosted.weblate.org/projects/catima/fastlane/zh_Hans/
2026-08-13 19:37:57 +02:00
Hosted Weblate user 54392 96533db864 Translated using Weblate (Chinese (Simplified Han script))
Currently translated at 100.0% (359 of 359 strings)

Translation: Catima/Android
Translate-URL: https://hosted.weblate.org/projects/catima/catima/zh_Hans/
2026-08-13 19:37:56 +02:00
Fjuro 2f84e53257 Translated using Weblate (Czech)
Currently translated at 100.0% (168 of 168 strings)

Translation: Catima/Android (Fastlane)
Translate-URL: https://hosted.weblate.org/projects/catima/fastlane/cs/
2026-08-13 19:37:56 +02:00
Liner Seven bb760c5db4 Translated using Weblate (Japanese)
Currently translated at 100.0% (168 of 168 strings)

Translation: Catima/Android (Fastlane)
Translate-URL: https://hosted.weblate.org/projects/catima/fastlane/ja/
2026-08-13 19:37:55 +02:00
Liner Seven 078b708c8a Translated using Weblate (Japanese)
Currently translated at 100.0% (359 of 359 strings)

Translation: Catima/Android
Translate-URL: https://hosted.weblate.org/projects/catima/catima/ja/
2026-08-13 19:37:54 +02:00
solokot edb14da576 Translated using Weblate (Russian)
Currently translated at 100.0% (168 of 168 strings)

Translation: Catima/Android (Fastlane)
Translate-URL: https://hosted.weblate.org/projects/catima/fastlane/ru/
2026-08-13 19:37:54 +02:00
B o d o a321edde1c Translated using Weblate (German)
Currently translated at 100.0% (168 of 168 strings)

Translation: Catima/Android (Fastlane)
Translate-URL: https://hosted.weblate.org/projects/catima/fastlane/de/
2026-08-13 19:37:53 +02:00
solokot 449a89a6f3 Translated using Weblate (Russian)
Currently translated at 100.0% (359 of 359 strings)

Translation: Catima/Android
Translate-URL: https://hosted.weblate.org/projects/catima/catima/ru/
2026-08-13 19:37:53 +02:00
Kachelkaiser 246605e3ca Translated using Weblate (German)
Currently translated at 100.0% (359 of 359 strings)

Translation: Catima/Android
Translate-URL: https://hosted.weblate.org/projects/catima/catima/de/
2026-08-13 19:37:52 +02:00
Fjuro 2ddc36bada Translated using Weblate (Czech)
Currently translated at 100.0% (359 of 359 strings)

Translation: Catima/Android
Translate-URL: https://hosted.weblate.org/projects/catima/catima/cs/
2026-08-13 19:37:52 +02:00
ChaoticNeutralCzech 1e512bac09 Translated using Weblate (Czech)
Currently translated at 100.0% (359 of 359 strings)

Translation: Catima/Android
Translate-URL: https://hosted.weblate.org/projects/catima/catima/cs/
2026-08-13 19:37:51 +02:00
Slávek Banko 60ec5d2520 Translated using Weblate (Czech)
Currently translated at 100.0% (359 of 359 strings)

Translation: Catima/Android
Translate-URL: https://hosted.weblate.org/projects/catima/catima/cs/
2026-08-13 19:37:51 +02:00
Sylvia van Os a790762071 Merge pull request #3268 from CatimaLoyalty/wear/lint
Set up basic lint for Wear OS
2026-08-13 17:48:46 +02:00
Sylvia van Os 07709873c9 Merge pull request #3266 from CatimaLoyalty/dependabot/github_actions/gradle/actions-6.3.0
Bump gradle/actions from 6.2.0 to 6.3.0
2026-08-13 17:24:43 +02:00
Sylvia van Os fa06b40a97 Set up basic lint for Wear OS 2026-08-13 17:24:00 +02:00
Sylvia van Os 537a66ad5d Fix missing dates on CHANGELOGs 2026-08-13 17:20:47 +02:00
dependabot[bot] 0b618e57a9 Bump gradle/actions from 6.2.0 to 6.3.0
Bumps [gradle/actions](https://github.com/gradle/actions) from 6.2.0 to 6.3.0.
- [Release notes](https://github.com/gradle/actions/releases)
- [Commits](https://github.com/gradle/actions/compare/v6.2.0...v6.3.0)

---
updated-dependencies:
- dependency-name: gradle/actions
  dependency-version: 6.3.0
  dependency-type: direct:production
  update-type: version-update:semver-minor
...

Signed-off-by: dependabot[bot] <support@github.com>
2026-08-13 15:09:40 +00:00
Sylvia van Os 28c6afa9ba Merge pull request #3265 from CatimaLoyalty/dependabot/github_actions/actions/checkout-7.0.1
Bump actions/checkout from 7.0.0 to 7.0.1
2026-08-13 17:07:22 +02:00
Sylvia van Os 0ccc29bfc6 Merge pull request #3264 from CatimaLoyalty/dependabot/gradle/com.android.library-9.3.1
Bump com.android.library from 9.2.1 to 9.3.1
2026-08-13 17:06:50 +02:00
dependabot[bot] 85ea4c0000 Bump actions/checkout from 7.0.0 to 7.0.1
Bumps [actions/checkout](https://github.com/actions/checkout) from 7.0.0 to 7.0.1.
- [Release notes](https://github.com/actions/checkout/releases)
- [Changelog](https://github.com/actions/checkout/blob/main/CHANGELOG.md)
- [Commits](https://github.com/actions/checkout/compare/v7...v7.0.1)

---
updated-dependencies:
- dependency-name: actions/checkout
  dependency-version: 7.0.1
  dependency-type: direct:production
  update-type: version-update:semver-patch
...

Signed-off-by: dependabot[bot] <support@github.com>
2026-08-13 02:52:40 +00:00
dependabot[bot] 9c21e1f3c1 Bump com.android.library from 9.2.1 to 9.3.1
Bumps com.android.library from 9.2.1 to 9.3.1.

---
updated-dependencies:
- dependency-name: com.android.library
  dependency-version: 9.3.1
  dependency-type: direct:production
  update-type: version-update:semver-minor
...

Signed-off-by: dependabot[bot] <support@github.com>
2026-08-13 02:52:40 +00:00
Sylvia van Os 1ba2a44dde Merge pull request #3263 from weblate/weblate-catima-catima
Translations update from Hosted Weblate
2026-08-12 21:06:14 +02:00
B o d o 3a2d125bb2 Added translation using Weblate (German) 2026-08-12 20:46:13 +02:00
B o d o de8d2f78c2 Added translation using Weblate (German) 2026-08-12 20:46:13 +02:00
B o d o e55d6f3189 Translated using Weblate (German)
Currently translated at 100.0% (166 of 166 strings)

Translation: Catima/Android (Fastlane)
Translate-URL: https://hosted.weblate.org/projects/catima/fastlane/de/
2026-08-12 20:46:13 +02:00
Vasilis K. ad5449488f Translated using Weblate (Greek)
Currently translated at 91.0% (327 of 359 strings)

Translation: Catima/Android
Translate-URL: https://hosted.weblate.org/projects/catima/catima/el/
2026-08-12 20:46:13 +02:00
B o d o 5d9caa27fe Translated using Weblate (German)
Currently translated at 100.0% (359 of 359 strings)

Translation: Catima/Android
Translate-URL: https://hosted.weblate.org/projects/catima/catima/de/
2026-08-12 20:46:13 +02:00
126 changed files with 1775 additions and 294 deletions

No files matched your search

+1 -1
View File
@@ -33,7 +33,7 @@ jobs:
run: |
flavor="$(echo ${{ matrix.flavor }})"
echo "sentenceCasedFlavor=${flavor^}" >> "$GITHUB_ENV"
- uses: gradle/actions/wrapper-validation@v6.2.0
- uses: gradle/actions/wrapper-validation@v6.3.0
- name: set up OpenJDK 25
run: |
sudo apt-get update
+2 -2
View File
@@ -25,8 +25,8 @@ jobs:
build:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v7.0.0
- uses: gradle/actions/wrapper-validation@v6.2.0
- uses: actions/checkout@v7.0.1
- uses: gradle/actions/wrapper-validation@v6.3.0
- name: set up OpenJDK 25
run: |
sudo apt-get update
+14 -2
View File
@@ -1,11 +1,23 @@
# Changelog
## v2.45.0 (Android) - 1002
## Unreleased (Android) - 1003
- Fix list widget not updating when opening a card from it
- Fix opening pkpass/pdf files from network locations sometimes failing
## v1.0.1 (Wear OS) - 201 (2026-08-28)
- Add scroll bar to card list
- Add splash screen
- Fix some padding issues
- Remove barcode value from card view
## v2.45.0 (Android) - 1002 (2026-08-12)
- Add a Bluetooth server for Wear OS companion app support
- Remove embedded CHANGELOG
## v1.0.0 (Wear OS) - 200
## v1.0.0 (Wear OS) - 200 (2026-08-12)
- Initial release of Wear OS companion app
+1 -1
View File
@@ -1,4 +1,4 @@
<?xml version="1.0" encoding="utf-8"?>
<resources>
<string name="app_name">Catima Ladění</string>
<string name="app_name">Catima (ladicí verze)</string>
</resources>
+2 -2
View File
@@ -1,4 +1,4 @@
<?xml version="1.0" encoding="utf-8"?>
<resources>
<string name="app_name">Catima Debug</string>
</resources>
<string name="app_name">Catima silumine ja veaotsing</string>
</resources>
@@ -23,7 +23,9 @@ import androidx.activity.result.ActivityResultLauncher
import androidx.activity.result.contract.ActivityResultContracts.StartActivityForResult
import androidx.appcompat.view.ActionMode
import androidx.appcompat.widget.SearchView
import androidx.core.content.edit
import androidx.core.splashscreen.SplashScreen.Companion.installSplashScreen
import androidx.lifecycle.lifecycleScope
import androidx.recyclerview.widget.GridLayoutManager
import com.google.android.material.dialog.MaterialAlertDialogBuilder
import com.google.android.material.tabs.TabLayout
@@ -40,7 +42,9 @@ import protect.card_locker.preferences.SettingsActivity
import protect.card_locker.wearos.WearSyncPermissionRequester
import java.io.UnsupportedEncodingException
import java.util.concurrent.atomic.AtomicInteger
import androidx.core.content.edit
import kotlinx.coroutines.Dispatchers
import kotlinx.coroutines.launch
import kotlinx.coroutines.withContext
class MainActivity : CatimaAppCompatActivity(), CardAdapterListener {
private lateinit var binding: MainActivityBinding
@@ -502,13 +506,11 @@ class MainActivity : CatimaAppCompatActivity(), CardAdapterListener {
return
}
val parseResultList: MutableList<ParseResult?>?
// Check for shared text
if (receivedAction == Intent.ACTION_SEND && receivedType == "text/plain") {
val loyaltyCard = LoyaltyCard()
loyaltyCard.setCardId(intent.getStringExtra(Intent.EXTRA_TEXT)!!)
parseResultList = mutableListOf(ParseResult(ParseResultType.BARCODE_ONLY, loyaltyCard))
processParseResultList(mutableListOf(ParseResult(ParseResultType.BARCODE_ONLY, loyaltyCard)))
} else {
// Parse whatever file was sent, regardless of opening or sharing
val data: Uri? = when (receivedAction) {
@@ -524,36 +526,54 @@ class MainActivity : CatimaAppCompatActivity(), CardAdapterListener {
}
}
if (receivedType.startsWith("image/")) {
parseResultList = Utils.retrieveBarcodesFromImage(this, data)
} else if (receivedType == "application/pdf") {
parseResultList = Utils.retrieveBarcodesFromPdf(this, data)
} else if (mutableListOf<String?>(
"application/vnd.apple.pkpass",
"application/vnd-com.apple.pkpass"
).contains(receivedType)
) {
parseResultList = Utils.retrieveBarcodesFromPkPass(this, data)
} else if (receivedType == "application/vnd.espass-espass") {
// FIXME: espass is not pkpass
// However, several users stated in https://github.com/CatimaLoyalty/Android/issues/2197 that the formats are extremely similar to the point they could rename an .espass file to .pkpass and have it imported
// So it makes sense to "unofficially" treat it as a PKPASS for now, even though not completely correct
parseResultList = Utils.retrieveBarcodesFromPkPass(this, data)
} else if (receivedType == "application/vnd.apple.pkpasses") {
parseResultList = Utils.retrieveBarcodesFromPkPasses(this, data)
} else {
Log.e(TAG, "Wrong mime-type")
return
importFile(data, receivedType)
}
}
private fun importFile(data: Uri?, receivedType: String) {
lifecycleScope.launch {
val parseResultList: MutableList<ParseResult?> = withContext(Dispatchers.IO) {
try {
when {
receivedType.startsWith("image/") ->
Utils.retrieveBarcodesFromImage(this@MainActivity, data)
receivedType == "application/pdf" ->
Utils.retrieveBarcodesFromPdf(this@MainActivity, data)
receivedType == "application/vnd.apple.pkpass" ||
receivedType == "application/vnd-com.apple.pkpass" ->
Utils.retrieveBarcodesFromPkPass(this@MainActivity, data)
// FIXME: espass is not pkpass
// However, several users stated in https://github.com/CatimaLoyalty/Android/issues/2197 that the formats are extremely similar to the point they could rename an .espass file to .pkpass and have it imported
// So it makes sense to "unofficially" treat it as a PKPASS for now, even though not completely correct
receivedType == "application/vnd.espass-espass" ->
Utils.retrieveBarcodesFromPkPass(this@MainActivity, data)
receivedType == "application/vnd.apple.pkpasses" ->
Utils.retrieveBarcodesFromPkPasses(this@MainActivity, data)
else -> {
Log.e(TAG, "Wrong mime-type")
return@withContext null
}
}
} catch (e: Exception) {
Log.e(TAG, "Parsing failed: $e");
e.printStackTrace();
Utils.showToast(this@MainActivity, R.string.errorReadingFile, Toast.LENGTH_LONG);
return@withContext null;
}
} ?: return@launch
if (parseResultList.isEmpty()) {
Utils.showToast(this@MainActivity, R.string.noBarcodeFound, Toast.LENGTH_LONG);
finish()
return@launch
}
}
// Give up if we should parse but there is nothing to parse
if (parseResultList == null || parseResultList.isEmpty()) {
finish()
return
processParseResultList(parseResultList)
}
processParseResultList(parseResultList)
}
private fun extractIntentFields(intent: Intent) {
@@ -22,6 +22,8 @@ class PkpassesParser(context: Context, uri: Uri?) {
throw IOException(context.getString(R.string.errorReadingFile))
}
var hasPkpassFiles = false
try {
mContext.contentResolver.openInputStream(uri).use { inputStream ->
ZipInputStream(inputStream).use { zipInputStream ->
@@ -42,6 +44,9 @@ class PkpassesParser(context: Context, uri: Uri?) {
// Ignore non-pkpass files
if (!localFileHeader.fileName.endsWith(".pkpass")) continue
// Mark as found
hasPkpassFiles = true
// Extract .pkpass (.zip) inside .pkpasses to cache directory
val tempFileName = "pkpassparser_" + System.currentTimeMillis() + "_" + localFileHeader.fileName
val tempFile = Utils.copyToTempFile(mContext, zipInputStream, tempFileName)
@@ -61,6 +66,11 @@ class PkpassesParser(context: Context, uri: Uri?) {
} catch (e: Exception) {
throw e
}
if (!hasPkpassFiles) {
Log.d(TAG, "No pkpass files found")
throw IOException(mContext.getString(R.string.errorReadingFile))
}
}
fun getPkpassParsers(): ArrayList<PkpassParser> {
@@ -30,6 +30,7 @@ import androidx.activity.result.contract.ActivityResultContracts
import androidx.appcompat.app.AlertDialog
import androidx.core.content.ContextCompat
import androidx.core.widget.doOnTextChanged
import androidx.lifecycle.lifecycleScope
import com.google.android.material.dialog.MaterialAlertDialogBuilder
import com.google.zxing.DecodeHintType
import com.google.zxing.ResultPoint
@@ -37,6 +38,9 @@ import com.journeyapps.barcodescanner.BarcodeCallback
import com.journeyapps.barcodescanner.BarcodeResult
import com.journeyapps.barcodescanner.CaptureManager
import com.journeyapps.barcodescanner.DecoratedBarcodeView
import kotlinx.coroutines.Dispatchers
import kotlinx.coroutines.launch
import kotlinx.coroutines.withContext
import protect.card_locker.databinding.CustomBarcodeScannerBinding
import protect.card_locker.databinding.ScanActivityBinding
@@ -322,15 +326,29 @@ class ScanActivity : CatimaAppCompatActivity() {
private fun handleActivityResult(requestCode: Int, resultCode: Int, intent: Intent?) {
super.onActivityResult(resultCode, resultCode, intent)
val parseResultList: List<ParseResult> =
Utils.parseSetBarcodeActivityResult(requestCode, resultCode, intent, this)
lifecycleScope.launch(Dispatchers.IO) {
val parseResultList =
Utils.parseSetBarcodeActivityResult(requestCode, resultCode, intent, this@ScanActivity)
if (parseResultList.isEmpty()) {
setScannerActive(true)
return
withContext(Dispatchers.Main) {
if (parseResultList == null) {
Utils.showToast(this@ScanActivity, R.string.errorReadingFile, Toast.LENGTH_LONG)
setScannerActive(true)
return@withContext
}
if (parseResultList.isEmpty()) {
Utils.showToast(this@ScanActivity, R.string.noBarcodeFound, Toast.LENGTH_LONG)
setScannerActive(true)
return@withContext
}
processParseResultList(parseResultList)
}
}
}
private fun processParseResultList(parseResultList: List<ParseResult>) {
Utils.makeUserChooseParseResultFromList(
this,
parseResultList,
@@ -19,6 +19,8 @@ import android.hardware.camera2.CameraAccessException;
import android.hardware.camera2.CameraManager;
import android.net.Uri;
import android.os.Build;
import android.os.Handler;
import android.os.Looper;
import android.os.ParcelFileDescriptor;
import android.provider.MediaStore;
import android.text.Layout;
@@ -118,6 +120,16 @@ public class Utils {
static final int BITMAP_SIZE_SMALL = 512;
static final int BITMAP_SIZE_BIG = 1600;
// Displays the toast immediately on the main UI loop, or asks Android to display it there otherwise.
static public void showToast(Context context, int message, int duration) {
if (Looper.myLooper() == Looper.getMainLooper()) {
Toast.makeText(context, message, duration).show();
} else {
new Handler(Looper.getMainLooper()).post(
() -> Toast.makeText(context, message, duration).show());
}
}
static public LetterBitmap generateIcon(Context context, LoyaltyCard loyaltyCard, boolean forShortcut) {
return generateIcon(context, loyaltyCard.store, loyaltyCard.headerColor, forShortcut);
}
@@ -148,50 +160,35 @@ public class Utils {
tileLetterFontSize, pixelSize, pixelSize, backgroundColor, ForegroundColorHelper.Companion.needsDarkForeground(backgroundColor) ? Color.BLACK : Color.WHITE);
}
static public List<ParseResult> retrieveBarcodesFromImage(Context context, Uri uri) {
static public List<ParseResult> retrieveBarcodesFromImage(Context context, Uri uri) throws FileNotFoundException {
Log.i(TAG, "Received image file with possible barcode");
if (uri == null) {
Log.e(TAG, "Uri did not contain any data");
Toast.makeText(context, R.string.errorReadingImage, Toast.LENGTH_LONG).show();
return new ArrayList<>();
throw new FileNotFoundException("Uri did not contain any data");
}
Bitmap bitmap;
try {
bitmap = retrieveImageFromUri(context, uri);
} catch (IOException e) {
Log.e(TAG, "Error getting data from image file");
e.printStackTrace();
Toast.makeText(context, R.string.errorReadingImage, Toast.LENGTH_LONG).show();
return new ArrayList<>();
throw new IllegalArgumentException("Error reading image file", e);
}
List<ParseResult> barcodesFromBitmap = getBarcodesFromBitmap(bitmap);
if (barcodesFromBitmap.isEmpty()) {
Log.i(TAG, "No barcode found in image file");
Toast.makeText(context, R.string.noBarcodeFound, Toast.LENGTH_LONG).show();
}
return barcodesFromBitmap;
// Returns barcodes or an empty list if nothing found
return getBarcodesFromBitmap(bitmap);
}
static public List<ParseResult> retrieveBarcodesFromPkPass(Context context, Uri uri) {
static public List<ParseResult> retrieveBarcodesFromPkPass(Context context, Uri uri) throws FileNotFoundException {
Log.i(TAG, "Received Pkpass file with possible barcode");
if (uri == null) {
Log.e(TAG, "Pkpass did not contain any data");
Toast.makeText(context, R.string.errorReadingFile, Toast.LENGTH_LONG).show();
return new ArrayList<>();
throw new FileNotFoundException("Uri did not contain any data");
}
PkpassParser pkpassParser;
try {
pkpassParser = new PkpassParser(context, uri);
} catch (Exception e) {
Log.e(TAG, "Error reading pkpass file", e);
Toast.makeText(context, R.string.errorReadingFile, Toast.LENGTH_LONG).show();
return new ArrayList<>();
throw new IllegalArgumentException("Error reading pkpass file", e);
}
List<String> locales = pkpassParser.listLocales();
@@ -199,9 +196,7 @@ public class Utils {
try {
return Collections.singletonList(new ParseResult(ParseResultType.FULL, pkpassParser.toLoyaltyCard(null)));
} catch (Exception e) {
Log.e(TAG, "Error calling toLoyaltyCard on pkpass file", e);
Toast.makeText(context, R.string.errorReadingFile, Toast.LENGTH_LONG).show();
return new ArrayList<>();
throw new IllegalArgumentException("Error calling toLoyaltyCard on pkpass file", e);
}
}
@@ -211,9 +206,7 @@ public class Utils {
try {
parseResult = new ParseResult(ParseResultType.FULL, pkpassParser.toLoyaltyCard(locale));
} catch (Exception e) {
Log.e(TAG, "Error calling toLoyaltyCard on pkpass file", e);
Toast.makeText(context, R.string.errorReadingFile, Toast.LENGTH_LONG).show();
return new ArrayList<>();
throw new IllegalArgumentException("Error calling toLoyaltyCard on pkpass file", e);
}
parseResult.setNote(locale);
parseResultList.add(parseResult);
@@ -222,21 +215,17 @@ public class Utils {
return parseResultList;
}
static public List<ParseResult> retrieveBarcodesFromPkPasses(Context context, Uri uri) {
static public List<ParseResult> retrieveBarcodesFromPkPasses(Context context, Uri uri) throws FileNotFoundException {
Log.i(TAG, "Received Pkpasses file with possible barcode");
if (uri == null) {
Log.e(TAG, "Pkpasses did not contain any data");
Toast.makeText(context, R.string.errorReadingFile, Toast.LENGTH_LONG).show();
return new ArrayList<>();
throw new FileNotFoundException("Uri did not contain any data");
}
PkpassesParser pkpassesParser;
try {
pkpassesParser = new PkpassesParser(context, uri);
} catch (Exception e) {
Log.e(TAG, "Error reading pkpasses file", e);
Toast.makeText(context, R.string.errorReadingFile, Toast.LENGTH_LONG).show();
return new ArrayList<>();
throw new IllegalArgumentException("Error reading pkpasses file", e);
}
List<ParseResult> parseResultList = new ArrayList<>();
@@ -248,9 +237,7 @@ public class Utils {
try {
parseResult = new ParseResult(ParseResultType.FULL, pkpassParser.toLoyaltyCard(null));
} catch (Exception e) {
Log.e(TAG, "Error calling toLoyaltyCard on pkpass file", e);
Toast.makeText(context, R.string.errorReadingFile, Toast.LENGTH_LONG).show();
return new ArrayList<>();
throw new IllegalArgumentException("Error calling toLoyaltyCard on pkpass file", e);
}
parseResult.setNote(String.format(context.getString(R.string.cardWithNumber), i+1));
parseResultList.add(parseResult);
@@ -259,9 +246,7 @@ public class Utils {
try {
parseResult = new ParseResult(ParseResultType.FULL, pkpassParser.toLoyaltyCard(locale));
} catch (Exception e) {
Log.e(TAG, "Error calling toLoyaltyCard on pkpass file", e);
Toast.makeText(context, R.string.errorReadingFile, Toast.LENGTH_LONG).show();
return new ArrayList<>();
throw new IllegalArgumentException("Error calling toLoyaltyCard on pkpass file", e);
}
parseResult.setNote(String.format(context.getString(R.string.cardWithNumberAndLocale), i+1, locale));
parseResultList.add(parseResult);
@@ -274,12 +259,10 @@ public class Utils {
return parseResultList;
}
static public List<ParseResult> retrieveBarcodesFromPdf(Context context, Uri uri) {
static public List<ParseResult> retrieveBarcodesFromPdf(Context context, Uri uri) throws FileNotFoundException {
Log.i(TAG, "Received PDF file with possible barcode");
if (uri == null) {
Log.e(TAG, "Uri did not contain any data");
Toast.makeText(context, R.string.errorReadingFile, Toast.LENGTH_LONG).show();
return new ArrayList<>();
throw new FileNotFoundException("Uri did not contain any data");
}
ParcelFileDescriptor parcelFileDescriptor = null;
@@ -314,8 +297,7 @@ public class Utils {
}
}
} catch (IOException e) {
Log.e(TAG, "Error reading PDF file", e);
Toast.makeText(context, R.string.errorReadingFile, Toast.LENGTH_LONG).show();
throw new IllegalArgumentException("Error reading PDF file", e);
} finally {
// Resource handling
if (renderer != null) {
@@ -330,10 +312,7 @@ public class Utils {
}
}
if (barcodesFromPdfPages.isEmpty()) {
Log.i(TAG, "No barcode found in pdf file");
Toast.makeText(context, R.string.noBarcodeFound, Toast.LENGTH_LONG).show();
}
// Returns barcodes or an empty list if nothing found
return barcodesFromPdfPages;
}
@@ -348,6 +327,7 @@ public class Utils {
* @param context
* @return List<ParseResult>
*/
@Nullable
static public List<ParseResult> parseSetBarcodeActivityResult(int requestCode, int resultCode, Intent intent, Context context) {
String contents;
String format;
@@ -356,28 +336,35 @@ public class Utils {
return new ArrayList<>();
}
if (requestCode == Utils.BARCODE_IMPORT_FROM_IMAGE_FILE) {
return retrieveBarcodesFromImage(context, intent.getData());
}
if (requestCode == Utils.BARCODE_IMPORT_FROM_PDF_FILE) {
return retrieveBarcodesFromPdf(context, intent.getData());
}
if (requestCode == Utils.BARCODE_IMPORT_FROM_PKPASS_FILE) {
Uri intentData = intent.getData();
if (intentData == null) {
Log.e(TAG, "Uri did not contain any data");
Toast.makeText(context, R.string.errorReadingFile, Toast.LENGTH_LONG).show();
return new ArrayList<>();
try {
if (requestCode == Utils.BARCODE_IMPORT_FROM_IMAGE_FILE) {
return retrieveBarcodesFromImage(context, intent.getData());
}
if (Objects.equals(context.getContentResolver().getType(intentData), "application/vnd.apple.pkpasses")) {
return retrieveBarcodesFromPkPasses(context, intentData);
if (requestCode == Utils.BARCODE_IMPORT_FROM_PDF_FILE) {
return retrieveBarcodesFromPdf(context, intent.getData());
}
return retrieveBarcodesFromPkPass(context, intentData);
if (requestCode == Utils.BARCODE_IMPORT_FROM_PKPASS_FILE) {
Uri intentData = intent != null ? intent.getData() : null;
if (intentData == null) {
throw new FileNotFoundException("Uri did not contain any data");
}
// Mime type info is not always available. So we're going to first guess it's a pkpass file and if that fails, try pkpasses
try {
return retrieveBarcodesFromPkPass(context, intentData);
} catch (Exception e) {
Log.e(TAG, "Error reading pkpass file, attempting as pkpasses file", e);
return retrieveBarcodesFromPkPasses(context, intentData);
}
}
} catch (Exception e) {
// Return null instead of an empty list to differentiate between error or no result
Log.e(TAG, "Parsing failed: " + e);
e.printStackTrace();
return null;
}
if (requestCode == Utils.BARCODE_SCAN || requestCode == Utils.SELECT_BARCODE_REQUEST) {
@@ -96,6 +96,8 @@ public class LoyaltyCardViewActivity extends CatimaAppCompatActivity implements
private long initTime = System.currentTimeMillis();
private final ListWidget listWidget = new ListWidget();
private enum AdjacentCardDirection {
PREVIOUS,
NEXT
@@ -454,6 +456,7 @@ public class LoyaltyCardViewActivity extends CatimaAppCompatActivity implements
invalidateOptionsMenu();
ShortcutHelper.updateShortcuts(this);
listWidget.updateAll(LoyaltyCardViewActivity.this);
}
@Override
@@ -775,7 +778,7 @@ public class LoyaltyCardViewActivity extends CatimaAppCompatActivity implements
} else if (id == R.id.action_star_unstar) {
DBHelper.updateLoyaltyCardStarStatus(database, loyaltyCardId, loyaltyCard.starStatus == 0 ? 1 : 0);
new ListWidget().updateAll(LoyaltyCardViewActivity.this);
listWidget.updateAll(LoyaltyCardViewActivity.this);
// Re-init loyaltyCard with new data from DB
onResume();
@@ -786,7 +789,7 @@ public class LoyaltyCardViewActivity extends CatimaAppCompatActivity implements
DBHelper.updateLoyaltyCardArchiveStatus(database, loyaltyCardId, 1);
Toast.makeText(LoyaltyCardViewActivity.this, R.string.archived, Toast.LENGTH_LONG).show();
new ListWidget().updateAll(LoyaltyCardViewActivity.this);
listWidget.updateAll(LoyaltyCardViewActivity.this);
// Re-init loyaltyCard with new data from DB
onResume();
@@ -811,7 +814,7 @@ public class LoyaltyCardViewActivity extends CatimaAppCompatActivity implements
DBHelper.deleteLoyaltyCard(database, LoyaltyCardViewActivity.this, loyaltyCardId);
new ListWidget().updateAll(LoyaltyCardViewActivity.this);
listWidget.updateAll(LoyaltyCardViewActivity.this);
finish();
dialog.dismiss();
+26 -24
View File
@@ -1,11 +1,11 @@
Sylvia van Os
Branden Archer
J. Lavoie
solokot
J. Lavoie
Allan Nordhøy
Oğuz Ersen
Heimen Stoffels
B o d o
Heimen Stoffels
FC (Fay) Stegerman
大王叫我来巡山
StoyanDimitrov
@@ -14,14 +14,14 @@ Katharine Chui / Katie
Silvério Santos
mondstern
IllusiveMan196
Максим Горпиніч
Fjuro
Edgars Andersons
Liner Seven
Fjuro
Максим Горпиніч
GitSpoon
Priit Jõerüüt
Joel A
Altonss
Priit Jõerüüt
Michael Moroni
Eric
GM
@@ -36,31 +36,33 @@ Aayush Gupta
damjang
Scrambled777
josé m
Kachelkaiser
ikanakova
Nyatsuki
Jiri Grönroos
Giovanni Donisi
Kachelkaiser
109247019824
HudobniVolk
Warder
Balázs Meskó
Traductor
AMIR-G98
Samantaz Fox
mdvhimself
AMIR-G98
NooB9496
Cliff Heraldo
Sergio Paredes
Ankit Tiwari
Feike
Arno-github
Feike
Jose Delvani
Milan Šalka
Robin
தமிழ்நேரம்
huuhaa
Watchman89
Skrripy
NooB9496
Hosted Weblate user 54392
Govindgopalyadav
Gideon
waffshappen
@@ -68,35 +70,35 @@ Marnick L'Eau
JungHee Lee
pacavarn
ngocanhtve
josé m.
aradxxx
Watchman89
StellarSand
Quentin PAGÈS
Projjal Moitra
Aliaksandr Trush
e-michalak
தமிழ் நேரம்
josé m.
hajertabbane
inavleb
Ziad OUALHADJ
Robin Liu
Ricky Tigg
Renko
Denis Shilin
Renko
Ricky Tigg
Robin Liu
Ziad OUALHADJ
inavleb
しいたけ
Alexander Ivanov
Thu-Trang Pham
Tim Trek
Virginie
dukezas
ehrt74
ezn24
mrestivill
stavpup
Miha Frangež
stavpup
mrestivill
ezn24
ehrt74
dukezas
Virginie
Tim Trek
Thu-Trang Pham
Alì Mortacci
Andre Costa
Arif Budiman
arshbeerSingh
Augustin LAVILLE
Freddo espresso
+46 -3
View File
@@ -2,7 +2,7 @@
<resources xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2" xmlns:tools="http://schemas.android.com/tools">
<string name="action_search">بحث</string>
<string name="action_add">إضافة</string>
<string name="noGiftCards">انقر على زر + لإضافة بطاقة، أو استوردها من قائمة </string>
<string name="noGiftCards">انقر على زر ”+“ لإضافة بطاقة، أو استوردها من قائمة ”⋮“</string>
<string name="noMatchingGiftCards">لا توجد نتائج. حاول تغيير بحثك.</string>
<string name="storeName">الاسم</string>
<string name="note">ملاحظة</string>
@@ -255,9 +255,9 @@
<string name="show_note">إظهار الملاحظة</string>
<string name="switchToBackImage">التبديل إلى الصورة الخلفية</string>
<string name="switchToFrontImage">التبديل إلى الصورة الأمامية</string>
<string name="settings_allow_content_provider_read_summary">سيظل يتعين على التطبيقات طلب الإذن لمنحها حق الوصول</string>
<string name="settings_allow_content_provider_read_summary">يسمح لتطبيق Gadgetbridge بمزامنة بطاقاتك مع الساعات المدعومة</string>
<string name="setBarcodeHeight">ضبط ارتفاع الباركود</string>
<string name="settings_allow_content_provider_read_title">السماح للتطبيقات الأخرى بالوصول إلى بياناتي</string>
<string name="settings_allow_content_provider_read_title">المزامنة مع Gadgetbridge</string>
<string name="donate">تبرّع</string>
<string name="show_archived_cards">عرض البطاقات المؤرشفة</string>
<string name="settings_category_title_privacy">خصوصية</string>
@@ -327,4 +327,47 @@
<string name="nfc_blocked_while_viewing_card">NFC موقوف</string>
<string name="change_settings">تغير الاعدادات</string>
<string name="nfc_block_system_error">فشل في ايقاف NFC</string>
<string name="sort_by_most_recently_added">تمت إضافته مؤخرًا</string>
<string name="zoomFrontImage">تكبير الصورة الأمامية</string>
<string name="zoomBackImage">تكبير الصورة للخلف</string>
<string name="show_card_id">عرض رقم ID للبطاقة</string>
<string name="settings_wear_sync">المزامنة مع Wear OS</string>
<string name="settings_wear_sync_summary">يسمح التطبيق لـ Wear OS بقراءة بطاقاتك عبر البلوتوث</string>
<string name="wear_sync_permission_required">كاتيما تحتاج الأذونات التي رفضتها للمزامنة مع ساعة Wear OS الذكية الخاصة بك</string>
<string name="settings_wear_sync_devices">أجهزة Wear OS المسموح بها</string>
<string name="settings_wear_sync_devices_summary">إدارة الأجهزة المسموح لها بالمزامنة عبر البلوتوث</string>
<string name="settings_wear_sync_no_devices">لا توجد أجهزة مسموحة</string>
<plurals name="settings_wear_sync_devices_summary_count">
<item quantity="zero"><xliff:g>%d</xliff:g> جهاز مسموح</item>
<item quantity="one"><xliff:g>%d</xliff:g> جهاز مسموح</item>
<item quantity="two"><xliff:g>%d</xliff:g> جهازان مسموحان</item>
<item quantity="few"><xliff:g>%d</xliff:g> أجهزة مسموحة</item>
<item quantity="many"><xliff:g>%d</xliff:g> أجهزة مسموحة</item>
<item quantity="other"><xliff:g>%d</xliff:g> جهاز مسموح</item>
</plurals>
<string name="settings_wear_sync_blocked_devices">أجهزة Wear OS المحجوبة</string>
<string name="settings_wear_sync_blocked_devices_summary">إدارة أجهزة Wear OS المحجوبة</string>
<string name="settings_wear_sync_no_blocked_devices">لا توجد أجهزة محجوبة</string>
<string name="open_in_gallery">افتح في معرض الصور</string>
<string name="settings_wear_sync_unpair_title">هل تريد إزالة الجهاز؟</string>
<string name="settings_wear_sync_unpair_message">هل تريد إزالة <xliff:g>%1$s</xliff:g> من كاتيما؟ لن تكون قادرًا بعد الآن على مزامنة بطاقاتك.</string>
<string name="settings_wear_sync_unblock_message">هل تريد إزالة <xliff:g>%1$s</xliff:g> من القائمة المحظورة؟ سيتمكن من طلب الوصول مرة أخرى.</string>
<string name="settings_wear_sync_unpair">إزالة</string>
<string name="settings_wear_sync_device_name"><xliff:g>%1$s</xliff:g> (<xliff:g>%2$s</xliff:g>)</string>
<string name="settings_wear_sync_tap_to_remove">اضغط على جهاز لإزالته.</string>
<string name="wear_bt_pairing_channel_name">إقران جهاز Wear OS</string>
<string name="wear_bt_pairing_title">جهاز Wear OS يريد المزامنة</string>
<string name="wear_bt_pairing_message">هل تريد السماح لـ <xliff:g>%1$s</xliff:g> بالوصول إلى بطاقاتك؟</string>
<string name="wear_bt_pairing_allow">سماح</string>
<string name="wear_bt_pairing_block">حظر</string>
<string name="wear_bt_pairing_allowed"><xliff:g>%1$s</xliff:g> مسموح له بالمزامنة.</string>
<string name="wear_bt_pairing_blocked"><xliff:g>%1$s</xliff:g> تم حظره.</string>
<string name="wear_bt_pairing_mismatch_title">طلب تفويض جديد من <xliff:g>%1$s</xliff:g></string>
<string name="wear_bt_pairing_mismatch_message">تمت الموافقة على هذا الجهاز سابقًا، لكنه يعرض الآن رمز هوية مختلف. يحدث هذا عندما يتم إعادة تثبيت تطبيق Wear OS أو مسح بياناته. كما يمكن أن يشير إلى محاولة انتحال عنوان MAC عبر البلوتوث.\n\nاقبل فقط إذا قمت مؤخرًا بإعادة تثبيت تطبيق كاتيما Wear OS على هذه الساعة.</string>
<string name="open_settings">فتح الإعدادات</string>
<string name="wear_bt_channel_name">رفيق Wear OS</string>
<string name="wear_bt_notification_title">مزامنة كاتيما لـ Wear OS نشطة</string>
<string name="settings_category_title_smartwatch">الساعة الذكية مدعومة</string>
<string name="wear_bt_failed_foreground_notification_title">فشل في بدء خدمة مزامنة Wear OS</string>
<string name="wear_bt_critical_error_channel_name">خطأ كبير في مزامنة Wear OS</string>
</resources>
+4 -2
View File
@@ -226,10 +226,10 @@
<string name="show_name_below_image_thumbnail">Наименование</string>
<string name="permissionReadCardsLabel">Четене на карти на Catima</string>
<string name="permissionReadCardsDescription">четене на картите на Catima с всички подробности, включително бележки и изображения</string>
<string name="settings_allow_content_provider_read_title">Разрешаване на достъп на други приложения до данните</string>
<string name="settings_allow_content_provider_read_title">Синхронизиране чрез Gadgetbridge</string>
<string name="settings_display_barcode_max_brightness_summary">Необходимо за работата на някои скенери</string>
<string name="settings_disable_lockscreen_while_viewing_card_summary">Без заключване на екрана при преглед на карта</string>
<string name="settings_allow_content_provider_read_summary">Приложенията ще искат разрешение, за да получат достъп</string>
<string name="settings_allow_content_provider_read_summary">Разрешава на приложението Gadgetbridge да синхронизира картите с поддържаните часовници</string>
<string name="settings_oled_dark_summary">Намалява разхода на батерия от OLED дисплеи</string>
<string name="settings_category_title_cards">Преглед на карта</string>
<string name="settings_category_title_general">Общи</string>
@@ -308,4 +308,6 @@
<string name="zoomBackImage">Увеличаване на задното изображение</string>
<string name="show_card_id">Показване номера на картата</string>
<string name="open_in_gallery">Отваряне в галерията</string>
<string name="settings_wear_sync">Синхронизиране с Wear OS</string>
<string name="settings_wear_sync_summary">Разрешава на приложението за Wear OS да чете картите чрез Bluetooth</string>
</resources>
+3 -3
View File
@@ -12,7 +12,7 @@
<string name="action_search">Cerca</string>
<string name="deleteTitle">Elimina la targeta</string>
<string name="welcome">Benvingut a Catima</string>
<string name="noGiftCards">Fes clic al botó + per afegir una targeta, o importa des del menú ⋮</string>
<string name="noGiftCards">Fes clic al botó mes + per afegir una targeta, o importa des del menú ⋮</string>
<string name="photos">Fotos</string>
<string name="app_name">Catima</string>
<string name="moveDown">Baixar abaix</string>
@@ -91,7 +91,7 @@
<string name="importCancelled">Importació anulada</string>
<string name="exportCancelled">Exportació cancelada</string>
<string name="noGiftCardsGroup">Crea algunes targetes i després asigna-les en al grup aquí</string>
<string name="noMatchingGiftCards">No hi ha resultats; prova de modificar la cerca.</string>
<string name="noMatchingGiftCards">No hi ha resultats. Prova de modificar la cerca.</string>
<string name="storeName">Nom</string>
<string name="note">Nota</string>
<string name="cardId">Id. de la Targeta</string>
@@ -153,7 +153,7 @@
<string name="enter_card_id">Introdueixi el nombre ID o text de la seva targeta</string>
<string name="card_id_must_not_be_empty">ID de la Targeta no pot estar buit</string>
<string name="add_a_card_in_a_different_way">Afegeix una targeta de forma diferent</string>
<string name="unstar">Treure entre les preferides</string>
<string name="unstar">Treure de les preferides</string>
<string name="star">Afegir a les preferides</string>
<string name="cancel">Cancel•la</string>
<string name="deleteConfirmation">Vols eliminar de forma permanent aquesta targeta?</string>
+44 -2
View File
@@ -230,9 +230,9 @@
<string name="show_validity">Zobrazit platnost</string>
<string name="show_balance">Zobrazit zůstatek</string>
<string name="permissionReadCardsDescription">číst vaše karty Catima a všechny jejich podrobnosti, včetně poznámek a obrázků</string>
<string name="settings_allow_content_provider_read_summary">Aplikace budou i tak muset požádat o povolení k poskytnutí přístupu</string>
<string name="settings_allow_content_provider_read_summary">Umožňuje aplikaci Gadgetbridge synchronizovat vaše karty do podporovaných chytrých hodinek</string>
<string name="permissionReadCardsLabel">Číst karty Catima</string>
<string name="settings_allow_content_provider_read_title">Umožnit ostatním aplikacím přístup k mým datům</string>
<string name="settings_allow_content_provider_read_title">Synchronizace s Gadgetbridge</string>
<string name="settings_keep_screen_on_summary">Při prohlížení karty vypnout časovač zhasnutí obrazovky</string>
<string name="settings_oled_dark_summary">Snižuje používání baterie na displejích OLED</string>
<string name="settings_category_title_privacy">Soukromí</string>
@@ -314,4 +314,46 @@
<string name="zoomBackImage">Přiblížit zadní obrázek</string>
<string name="show_card_id">Zobrazit ID karty</string>
<string name="open_in_gallery">Otevřít v galerii</string>
<string name="settings_wear_sync">Synchronizovat s Wear OS</string>
<string name="settings_wear_sync_summary">Umožňuje doprovodné aplikaci Wear OS číst vaše karty skrze Bluetooth</string>
<string name="wear_sync_permission_required">Catima potřebuje oprávnění, které jste zamítli, k synchronizaci s vašimi chytrými hodinkami Wear OS</string>
<string name="settings_wear_sync_devices">Povolená zařízení Wear OS</string>
<string name="settings_wear_sync_devices_summary">Správa zařízení, u kterých je povolena synchronizace skrze Bluetooth</string>
<string name="settings_wear_sync_no_devices">Žádná povolená zařízení</string>
<plurals name="settings_wear_sync_devices_summary_count">
<item quantity="one"><xliff:g>%d</xliff:g> povolené zařízení</item>
<item quantity="few"><xliff:g>%d</xliff:g> povolená zařízení</item>
<item quantity="many"><xliff:g>%d</xliff:g> povolených zařízení</item>
<item quantity="other"><xliff:g>%d</xliff:g> povolených zařízení</item>
</plurals>
<string name="settings_wear_sync_blocked_devices">Zablokovaná zařízení Wear OS</string>
<string name="settings_wear_sync_blocked_devices_summary">Spravovat zablokovaná zařízení Wear OS</string>
<string name="settings_wear_sync_no_blocked_devices">Žádná zablokovaná zařízení</string>
<plurals name="settings_wear_sync_blocked_devices_summary_count">
<item quantity="one"><xliff:g>%d</xliff:g> zablokované zařízení</item>
<item quantity="few"><xliff:g>%d</xliff:g> zablokovaná zařízení</item>
<item quantity="many"><xliff:g>%d</xliff:g> zablokovaných zařízení</item>
<item quantity="other"><xliff:g>%d</xliff:g> zablokovaných zařízení</item>
</plurals>
<string name="settings_wear_sync_unpair_title">Odstranit zařízení?</string>
<string name="settings_wear_sync_unpair_message">Odstranit zařízení <xliff:g>%1$s</xliff:g> z aplikace Catima? Již nebude moci synchronizovat vaše karty.</string>
<string name="settings_wear_sync_unblock_message">Odstranit zařízení <xliff:g>%1$s</xliff:g> ze seznamu zablokovaných? Bude moci znovu žádat o přístup.</string>
<string name="settings_wear_sync_unpair">Odstranit</string>
<string name="settings_wear_sync_device_name"><xliff:g>%1$s</xliff:g> (<xliff:g>%2$s</xliff:g>)</string>
<string name="settings_wear_sync_tap_to_remove">Klepněte na zařízení pro jeho odstranění.</string>
<string name="wear_bt_pairing_channel_name">Párování zařízení s Wear OS</string>
<string name="wear_bt_pairing_title">Zařízení s Wear OS požaduje synchronizaci</string>
<string name="wear_bt_pairing_message">Povolit zařízení <xliff:g>%1$s</xliff:g> přístup k vašim kartám?</string>
<string name="wear_bt_pairing_allow">Povolit</string>
<string name="wear_bt_pairing_block">Zablokovat</string>
<string name="wear_bt_pairing_allowed">Zařízení <xliff:g>%1$s</xliff:g> má nyní povolenou synchronizaci.</string>
<string name="wear_bt_pairing_blocked">Zařízení <xliff:g>%1$s</xliff:g> bylo zablokováno.</string>
<string name="wear_bt_pairing_mismatch_title">Nový požadavek na autorizaci ze zařízení <xliff:g>%1$s</xliff:g></string>
<string name="wear_bt_pairing_mismatch_message">Toto zařízení bylo v minulosti autorizováno, nyní se ale prezentuje jiným tokenem identity. K této situaci může dojít při reinstalaci aplikace Wear OS nebo vymazání jejích dat. Může to ale také značit pokus o maskování adresy Bluetooth MAC.\n\nPřijměte pouze, pokud jste na těchto hodinkách nedávno přeinstalovali aplikaci Catima pro Wear OS.</string>
<string name="open_settings">Otevřít nastavení</string>
<string name="wear_bt_channel_name">Doprovoná aplikace na Wear OS</string>
<string name="wear_bt_notification_title">Synchronizace s Catima Wear OS je aktivní</string>
<string name="settings_category_title_smartwatch">Podpora chytrých hodinek</string>
<string name="wear_bt_failed_foreground_notification_title">Nepodařilo se spustit synchronizační službu Wear OS</string>
<string name="wear_bt_critical_error_channel_name">Kritická chyba synchronizace s Wear OS</string>
</resources>
+40 -2
View File
@@ -223,10 +223,10 @@
<string name="show_balance">Betrag anzeigen</string>
<string name="show_validity">Gültigkeitsdauer anzeigen</string>
<string name="show_name_below_image_thumbnail">Namen unter dem Vorschaubild anzeigen</string>
<string name="settings_allow_content_provider_read_title">Anderen Apps den Zugriff auf meine Daten gestatten</string>
<string name="settings_allow_content_provider_read_title">Synchronisation mit Gadgetbrigde</string>
<string name="permissionReadCardsLabel">Catima-Karten lesen</string>
<string name="permissionReadCardsDescription">Lesen deiner Catima Karten mit allen Details, einschließlich Notizen und Bildern</string>
<string name="settings_allow_content_provider_read_summary">Apps müssen weiterhin eine Genehmigung beantragen, um Zugriff zu erhalten</string>
<string name="settings_allow_content_provider_read_summary">Ermöglicht der Gadgetbridge-App, deine Karten mit unterstützten Uhren zu synchronisieren</string>
<string name="settings_display_barcode_max_brightness_summary">Erforderlich für das Funktionieren einiger Scanner</string>
<string name="settings_keep_screen_on_summary">Deaktiviert die Bildschirmzeitüberschreitung beim Anzeigen einer Karte</string>
<string name="settings_disable_lockscreen_while_viewing_card_summary">Deaktiviert die Bildschirmsperre während der Anzeige einer Karte</string>
@@ -308,4 +308,42 @@
<string name="zoomFrontImage">Vorderseite vergrößern</string>
<string name="sort_by_most_recently_added">Zuletzt hinzugefügt</string>
<string name="open_in_gallery">In Bildergalerie öffnen</string>
<string name="wear_bt_critical_error_channel_name">Kritischer Wear OS Synchronisierungsfehler</string>
<string name="wear_bt_failed_foreground_notification_title">Synchronisierungsdienst zu Wear OS konnte nicht gestartet werden</string>
<string name="settings_category_title_smartwatch">Smartwatch Unterstützung</string>
<string name="wear_bt_notification_title">Catima Wear OS Synchronisierung ist aktiv</string>
<string name="wear_bt_channel_name">Wear OS Begleit-App</string>
<string name="open_settings">Einstellungen öffnen</string>
<string name="wear_bt_pairing_mismatch_message">Dieses Gerät wurde zuvor autorisiert, besitzt nun aber einen anderen Identitäts-Token. Dies kann vorkommen, wenn die Daten der Wear OS App gelöscht wurden oder die App erneut installiert wurde. Es kann ebenso auf den Versuch einer Bluetooth MAC Manipulation hindeuten.\n\nAkzeptiere die Autorisierung nur, wenn die Catima Wear OS App kürzlich neu auf dieser Uhr installiert wurde.</string>
<string name="wear_bt_pairing_mismatch_title">Neue Anfrage zur Autorisation von <xliff:g>%1$s</xliff:g></string>
<string name="wear_bt_pairing_blocked"><xliff:g>%1$s</xliff:g> wurde blockiert.</string>
<string name="wear_bt_pairing_allowed"><xliff:g>%1$s</xliff:g> darf jetzt synchronisieren.</string>
<string name="wear_bt_pairing_block">Blockiert</string>
<string name="wear_bt_pairing_allow">Zugelassen</string>
<string name="wear_bt_pairing_message">Erlaube <xliff:g>%1$s</xliff:g> den Zugang zu deinen Karten?</string>
<string name="wear_bt_pairing_title">Wear OS Gerät möchte synchronisieren</string>
<string name="wear_bt_pairing_channel_name">Wear OS Gerät koppeln</string>
<string name="settings_wear_sync_tap_to_remove">Tippe auf ein Gerät, um es zu entfernen.</string>
<string name="settings_wear_sync_device_name"><xliff:g>%1$s</xliff:g> (<xliff:g>%2$s</xliff:g>)</string>
<string name="settings_wear_sync_unpair">Entfernen</string>
<string name="settings_wear_sync_unblock_message">Entferne <xliff:g>%1$s</xliff:g> von der Blockierungsliste? Eine erneute Anfrage zum Zugriff ist dann möglich.</string>
<string name="settings_wear_sync_unpair_message">Entferne <xliff:g>%1$s</xliff:g> von Catima? Es wird dann nicht mehr möglich sein Karten zu synchronisieren.</string>
<string name="settings_wear_sync_unpair_title">Entferne Gerät?</string>
<plurals name="settings_wear_sync_blocked_devices_summary_count">
<item quantity="one"><xliff:g>%d</xliff:g> Gerät blockiert</item>
<item quantity="other"><xliff:g>%d</xliff:g> Geräte blockiert</item>
</plurals>
<string name="settings_wear_sync_no_blocked_devices">Keine blockierten Geräte</string>
<string name="settings_wear_sync_blocked_devices_summary">Blockierte Wear OS Geräte verwalten</string>
<string name="settings_wear_sync_blocked_devices">Blockierte Wear OS Geräte</string>
<plurals name="settings_wear_sync_devices_summary_count">
<item quantity="one"><xliff:g>%d</xliff:g> Gerät zugelassen</item>
<item quantity="other"><xliff:g>%d</xliff:g> Geräte zugelassen</item>
</plurals>
<string name="settings_wear_sync_no_devices">Keine zugelassenen Geräte</string>
<string name="settings_wear_sync_devices_summary">Verwalte die Geräte, die per Bluetooth synchronisieren dürfen</string>
<string name="settings_wear_sync_devices">Zugelassene Wear OS Geräte</string>
<string name="wear_sync_permission_required">Catima benötigt die von dir verweigerte Erlaubnis, um mit deiner Wear OS Smartwatch zu synchronisieren</string>
<string name="settings_wear_sync_summary">Erlaube der Wear OS Begleit-App die Karten per Bluetooth auszulesen</string>
<string name="settings_wear_sync">Synchronisiere mit Wear OS</string>
</resources>
+40 -2
View File
@@ -210,7 +210,7 @@
<string name="settings_disable_lockscreen_while_viewing_card_summary">Απενεργοποιεί το κλείδωμα οθόνης κατά την προβολή μιας κάρτας</string>
<string name="settings_display_barcode_max_brightness_summary">Απαραίτητο για να δουλέψει σε κάποιους σαρωτές</string>
<string name="cameraPermissionRequired">Δικαίωμα πρόσβασης στην κάμερα απαραίτητο γι\' αυτή την ενέργεια…</string>
<string name="settings_allow_content_provider_read_title">Να επιτρέπεται σε άλλες εφαρμογές να έχουν πρόσβαση στα δεδομένα μου</string>
<string name="settings_allow_content_provider_read_title">Συγχρονισμός με Gadgetbridge</string>
<string name="app_copyright_short">Πνευματικά δικαιώματα © Sylvia van Os και συνεργάτες</string>
<string name="height">Ύψος</string>
<string name="switchToFrontImage">Μετάβαση στην εμπρόσθια εικόνα</string>
@@ -255,7 +255,7 @@
<string name="show_validity">Εμφάνιση εγκυρότητας</string>
<string name="add_a_card_in_a_different_way">Προσθέστε μια κάρτα με διαφορετικό τρόπο</string>
<string name="card_id_must_not_be_empty">Ο κωδικός αριθμός της κάρτας δεν πρέπει να είναι κενός</string>
<string name="settings_allow_content_provider_read_summary">Οι εφαρμογές θα πρέπει ωστόσο να ζητήσουν άδεια για να τους δοθεί πρόσβαση</string>
<string name="settings_allow_content_provider_read_summary">Επιτρέπει στην εφαρμογή Gadgetbridge να συγχρονίζει τις κάρτες σας με τα υποστηριζόμενα ρολόγια</string>
<string name="field_must_not_be_empty">Το πεδίο δεν πρέπει να είναι κενό</string>
<string name="manually_enter_barcode_instructions">Εισάγετε τον κωδικό αριθμό ή το κείμενο στην κάρτα σας και πατήστε τον γραμμωτό κώδικα που μοιάζει με αυτόν της κάρτας σας.</string>
<string name="add_manually_warning_title">Συνιστάται η σάρωση</string>
@@ -308,4 +308,42 @@
<string name="zoomBackImage">Μεγέθυνση πίσω εικόνας</string>
<string name="show_card_id">Εμφάνιση ταυτότητας κάρτας</string>
<string name="open_in_gallery">Άνοιγμα στη συλλογή εικόνων</string>
<string name="settings_wear_sync">Συγχρονισμός με Wear OS</string>
<string name="settings_wear_sync_summary">Επιτρέπει στην συνοδευτική εφαρμογή Wear OS να διαβάζει τις κάρτες σας μέσω Bluetooth</string>
<string name="wear_sync_permission_required">Η Catima χρειάζεται τα δικαιώματα που απορρίψατε για να συγχρονιστεί με το Wear OS smartwatch σας</string>
<string name="settings_wear_sync_devices">Επιτρεπόμενες συσκευές Wear OS</string>
<string name="settings_wear_sync_devices_summary">Διαχείριση συσκευών που επιτρέπεται να συγχρονίζονται μέσω Bluetooth</string>
<string name="settings_wear_sync_no_devices">Δεν επιτρέπονται συσκευές</string>
<plurals name="settings_wear_sync_devices_summary_count">
<item quantity="one"><xliff:g>%d</xliff:g> συσκευή επιτρέπεται</item>
<item quantity="other"><xliff:g>%d</xliff:g> συσκευές επιτρέπονται</item>
</plurals>
<string name="settings_wear_sync_blocked_devices">Αποκλεισμένες συσκευές Wear OS</string>
<string name="settings_wear_sync_blocked_devices_summary">Διαχείριση αποκλεισμένων συσκευών Wear OS</string>
<string name="settings_wear_sync_no_blocked_devices">Δεν υπάρχουν αποκλεισμένες συσκευές</string>
<plurals name="settings_wear_sync_blocked_devices_summary_count">
<item quantity="one"><xliff:g>%d</xliff:g> συσκευή αποκλεισμένη</item>
<item quantity="other"><xliff:g>%d</xliff:g> συσκευές αποκλεισμένες</item>
</plurals>
<string name="settings_wear_sync_unpair_title">Αφαίρεση συσκευής;</string>
<string name="settings_wear_sync_unpair_message">Να καταργηθεί η <xliff:g>%1$s</xliff:g> από το Catima; Δεν θα είναι πλέον δυνατός ο συγχρονισμός των καρτών σας.</string>
<string name="settings_wear_sync_unblock_message">Να καταργηθεί η <xliff:g>%1$s</xliff:g> από τη λίστα αποκλεισμένων; Θα μπορεί να ζητήσει ξανά πρόσβαση.</string>
<string name="settings_wear_sync_unpair">Αφαίρεση</string>
<string name="settings_wear_sync_device_name"><xliff:g>%1$s</xliff:g> (<xliff:g>%2$s</xliff:g>)</string>
<string name="settings_wear_sync_tap_to_remove">Αγγίξτε μια συσκευή για να την καταργήσετε.</string>
<string name="wear_bt_pairing_channel_name">Σύζευξη συσκευών Wear OS</string>
<string name="wear_bt_pairing_title">Η συσκευή Wear OS θέλει συγχρονισμό</string>
<string name="wear_bt_pairing_message">Να επιτραπεί στη <xliff:g>%1$s</xliff:g> η πρόσβαση στις κάρτες σας;</string>
<string name="wear_bt_pairing_allow">Να επιτραπεί</string>
<string name="wear_bt_pairing_block">Φραγή</string>
<string name="wear_bt_pairing_allowed">Η <xliff:g>%1$s</xliff:g> έχει πλέον δικαίωμα συγχρονισμού.</string>
<string name="wear_bt_pairing_blocked">Η <xliff:g>%1$s</xliff:g> έχει αποκλειστεί.</string>
<string name="wear_bt_pairing_mismatch_title">Νέο αίτημα εξουσιοδότησης από <xliff:g>%1$s</xliff:g></string>
<string name="wear_bt_pairing_mismatch_message">Αυτή η συσκευή είχε προηγουμένως εξουσιοδοτηθεί, αλλά τώρα παρουσιάζει διαφορετικό διακριτικό ταυτότητας. Αυτό συμβαίνει όταν η εφαρμογή Wear OS επανεγκαθίσταται ή τα δεδομένα της διαγράφονται. Μπορεί επίσης να υποδεικνύει μια προσπάθεια πλαστογράφησης MAC Bluetooth.\n\nΑποδεχθείτε μόνο εάν επανεγκαταστήσατε πρόσφατα την εφαρμογή Catima Wear OS σε αυτό το ρολόι.</string>
<string name="open_settings">Άνοιγμα ρυθμίσεων</string>
<string name="wear_bt_channel_name">Συνοδευτική εφαρμογή Wear OS</string>
<string name="wear_bt_notification_title">Ο συγχρονισμός Wear OS του Catima είναι ενεργός</string>
<string name="settings_category_title_smartwatch">Συγχρονισμός smartwatch</string>
<string name="wear_bt_failed_foreground_notification_title">Αποτυχία εκκίνησης της υπηρεσίας συγχρονισμού Wear OS</string>
<string name="wear_bt_critical_error_channel_name">Σοβαρό σφάλμα συγχρονισμού Wear OS</string>
</resources>
+43 -2
View File
@@ -232,10 +232,10 @@
<string name="show_balance">Mostrar el saldo</string>
<string name="permissionReadCardsLabel">Leer Tarjetas Catima</string>
<string name="permissionReadCardsDescription">lea sus tarjetas Catima y todos sus detalles, incluyendo notas e imágenes</string>
<string name="settings_allow_content_provider_read_title">Permite a otras aplicaciones acceder a mis datos</string>
<string name="settings_allow_content_provider_read_title">Sincronizar con Gadgetbridge</string>
<string name="settings_display_barcode_max_brightness_summary">Necesario para que funcione en algunos escáneres</string>
<string name="settings_keep_screen_on_summary">Deshabilita el tiempo de espera de la pantalla mientras se ve una tarjeta</string>
<string name="settings_allow_content_provider_read_summary">Las aplicaciones todavía tendrán que solicitar permiso para conseguir acceso</string>
<string name="settings_allow_content_provider_read_summary">Permite a la app Gadgetbridge sincronizar tus tarjetas con los relojes soportados</string>
<string name="settings_oled_dark_summary">Reduce el uso de batería en pantallas OLED</string>
<string name="settings_category_title_cards">Vista de tarjeta</string>
<string name="settings_category_title_general">General</string>
@@ -313,4 +313,45 @@
<string name="zoomFrontImage">Imagen frontal de zoom</string>
<string name="zoomBackImage">Imagen trasera de zoom</string>
<string name="show_card_id">Mostrar ID de tarjeta</string>
<string name="settings_wear_sync">Sincronizar con Wear OS</string>
<string name="settings_wear_sync_summary">Permite a la app de acompañamiento de Wear OS leer tus tarjetas a través de Bluetooth</string>
<string name="wear_sync_permission_required">Catima necesita los permisos que has denegado para sincronizarse con tu reloj inteligente Wear OS</string>
<string name="settings_wear_sync_devices">Dispositivos Wear OS permitidos</string>
<string name="settings_wear_sync_devices_summary">Gestiona los dispositivos con permiso para sincronizarse por Bluetooth</string>
<string name="settings_wear_sync_no_devices">No hay dispositivos permitidos</string>
<plurals name="settings_wear_sync_devices_summary_count">
<item quantity="one"><xliff:g>%d</xliff:g> dispositivo permitido</item>
<item quantity="many"><xliff:g>%d</xliff:g> dispositivos permitidos</item>
<item quantity="other"><xliff:g>%d</xliff:g> dispositivos permitidos</item>
</plurals>
<string name="settings_wear_sync_blocked_devices">Dispositivos Wear OS bloqueados</string>
<string name="settings_wear_sync_blocked_devices_summary">Gestiona los dispositivos Wear OS bloqueados</string>
<string name="settings_wear_sync_no_blocked_devices">No hay dispositivos bloqueados</string>
<plurals name="settings_wear_sync_blocked_devices_summary_count">
<item quantity="one"><xliff:g>%d</xliff:g> dispositivo bloqueado</item>
<item quantity="many"><xliff:g>%d</xliff:g> dispositivos bloqueados</item>
<item quantity="other"><xliff:g>%d</xliff:g> dispositivos bloqueados</item>
</plurals>
<string name="settings_wear_sync_unpair_title">¿Eliminar dispositivo?</string>
<string name="settings_wear_sync_unpair_message">¿Eliminar <xliff:g>%1$s</xliff:g> de Catima? No podrá seguir sincronizándose con tus tarjetas.</string>
<string name="settings_wear_sync_unblock_message">¿Eliminar <xliff:g>%1$s</xliff:g> de la lista de bloqueos? Podrá volver a solicitar acceso de nuevo.</string>
<string name="settings_wear_sync_unpair">Eliminar</string>
<string name="settings_wear_sync_device_name"><xliff:g>%1$s</xliff:g> (<xliff:g>%2$s</xliff:g>)</string>
<string name="settings_wear_sync_tap_to_remove">Toca un dispositivo para eliminarlo.</string>
<string name="wear_bt_pairing_channel_name">Emparejamiento de dispositivos Wear OS</string>
<string name="wear_bt_pairing_title">Un dispositivo Wear OS solicita sincronización</string>
<string name="wear_bt_pairing_message">¿Conceder a <xliff:g>%1$s</xliff:g> acceso a tus tarjetas?</string>
<string name="wear_bt_pairing_allow">Permitir</string>
<string name="wear_bt_pairing_block">Bloquear</string>
<string name="wear_bt_pairing_allowed">Ahora <xliff:g>%1$s</xliff:g> tiene permitido sincronizarse.</string>
<string name="wear_bt_pairing_blocked"><xliff:g>%1$s</xliff:g> ha sido bloqueado.</string>
<string name="wear_bt_pairing_mismatch_title">Nueva petición de autorización desde <xliff:g>%1$s</xliff:g></string>
<string name="wear_bt_pairing_mismatch_message">Este dispositivo había sido autorizado previamente pero ahora emite un identificador diferente. Esto ocurre cuando la app de Wear OS se reinstala o se borran sus datos. También puede indicar un intento de suplantación MAC por Bluetooth.\n\nAcepta solo si has reinstalado recientemente la app de Catima para Wear OS en este reloj.</string>
<string name="open_settings">Abrir ajustes</string>
<string name="open_in_gallery">Abrir en galería de imágenes</string>
<string name="wear_bt_channel_name">Aplicación de acompañamiento de Wear OS</string>
<string name="wear_bt_notification_title">Sincronización activa con Catima Wear OS</string>
<string name="settings_category_title_smartwatch">Soporte para reloj inteligente</string>
<string name="wear_bt_failed_foreground_notification_title">Fallo al iniciar el servicio de sincronización de Wear OS</string>
<string name="wear_bt_critical_error_channel_name">Error crítico de sincronización con Wear OS</string>
</resources>
+40 -2
View File
@@ -86,7 +86,7 @@
<string name="settings_system_theme">Süsteemi kujundus</string>
<string name="settings_display_barcode_max_brightness_summary">See on vajalik mõnede skännerite toimimiseks</string>
<string name="expiryStateSentenceExpired">Aegus: <xliff:g>%s</xliff:g></string>
<string name="settings_allow_content_provider_read_summary">Selle valiku sisselülitamisel peavad muud rakendused lisaks küsima õigust vaadata kaartide andmeid</string>
<string name="settings_allow_content_provider_read_summary">Selle valiku sisselülitamisel lubad Gadgetbridge\'i abil sünkroonida kaarte toetatud nutikelladesse</string>
<string name="noGroups">Kui soovid sarnaseid kaarte omavahel liigitada, siis + pluss nupuga lisa kaardigruppe</string>
<string name="group_name_is_empty">Kaardigrupi nimi ei saa jääda tühjaks</string>
<string name="groupsList">Grupid: <xliff:g>%s</xliff:g></string>
@@ -139,7 +139,7 @@
<string name="settings_keep_screen_on_summary">Lülitab kaardi vaatamise ajaks välja ekraani energiahalduse</string>
<string name="settings_disable_lockscreen_while_viewing_card">Keela ekraanilukustus</string>
<string name="settings_disable_lockscreen_while_viewing_card_summary">Lülitab kaardi vaatamise ajaks välja ekraani lukustamise</string>
<string name="settings_allow_content_provider_read_title">Luba teistel rakendustel minu andmeid lugeda</string>
<string name="settings_allow_content_provider_read_title">Sünkrooni Gadgetbridge\'iga</string>
<string name="importSuccessful">Andmed on imporditud</string>
<string name="exportSuccessful">Andmed on eksporditud</string>
<string name="enter_group_name">Sisesta kaardigrupi nimi</string>
@@ -308,4 +308,42 @@
<string name="zoomBackImage">Suumi tagakaane pilti</string>
<string name="show_card_id">Näita kaardi tunnust</string>
<string name="open_in_gallery">Ava pildigaleriis</string>
<string name="settings_wear_sync">Sünkrooni Wear OS-iga</string>
<string name="settings_wear_sync_devices">Lubatud Wear OS-i seadmed</string>
<string name="settings_wear_sync_devices_summary">Halda seadmeid, mis võivad Bluetoothi abil kaarte sünkroonida</string>
<string name="settings_wear_sync_summary">Võimaldab Wear OS-i kaasrakendusel lugeda sinu kaarte Bluetoothi abil</string>
<string name="wear_sync_permission_required">Catima sinu Wear OS-i põhise nutikellaga sünkroonimiseks sinu luba</string>
<string name="settings_wear_sync_no_devices">Ühtegi lubatud seadet pole</string>
<plurals name="settings_wear_sync_devices_summary_count">
<item quantity="one"><xliff:g>%d</xliff:g> lubatud seade</item>
<item quantity="other"><xliff:g>%d</xliff:g> lubatud seadet</item>
</plurals>
<string name="settings_wear_sync_blocked_devices">Blokeeritud Wear OS-i seadmed</string>
<string name="settings_wear_sync_blocked_devices_summary">Halda blokeeritud Wear OS-i seadmeid</string>
<string name="settings_wear_sync_no_blocked_devices">Ühtegi blokeeritud seadet pole</string>
<plurals name="settings_wear_sync_blocked_devices_summary_count">
<item quantity="one"><xliff:g>%d</xliff:g> blokeeritud seade</item>
<item quantity="other"><xliff:g>%d</xliff:g> blokeeritud seadet</item>
</plurals>
<string name="settings_wear_sync_unpair_title">Kas eemaldad seadme?</string>
<string name="settings_wear_sync_unpair_message">Kas eemaldad <xliff:g>%1$s</xliff:g> seadme Catimast? Peale seda pole enam sinu kaarte võimalik sinna sünkroonida.</string>
<string name="settings_wear_sync_unblock_message">Kas eemaldad <xliff:g>%1$s</xliff:g> seadme blokeeritud seadmete loendist? Peale seda saab ta uuesti küsida ligipääsuõigusi.</string>
<string name="settings_wear_sync_unpair">Eemalda</string>
<string name="settings_wear_sync_tap_to_remove">Seadme eemaldamiseks klõpsa temal.</string>
<string name="wear_bt_pairing_channel_name">Paardumine Wear OS-i seadmega</string>
<string name="wear_bt_pairing_title">Wear OS-i seade soovib sünkroonida</string>
<string name="wear_bt_pairing_message">Kas lubad <xliff:g>%1$s</xliff:g> seadmele ligipääsu sinu kaartidele?</string>
<string name="wear_bt_pairing_allow">Luba</string>
<string name="wear_bt_pairing_block">Blokeeri</string>
<string name="wear_bt_pairing_allowed"><xliff:g>%1$s</xliff:g> võib nüüd sünkroonida.</string>
<string name="wear_bt_pairing_blocked"><xliff:g>%1$s</xliff:g> on nüüd blokeeritud.</string>
<string name="wear_bt_pairing_mismatch_title">Uus autentimispäring <xliff:g>%1$s</xliff:g> seadmest</string>
<string name="open_settings">Ava seadistused</string>
<string name="wear_bt_channel_name">Wear OS-i kaaslasrakendus</string>
<string name="wear_bt_notification_title">Catima Wear OS-i sünkroonimine on aktiivne</string>
<string name="settings_category_title_smartwatch">Nutikellade tugi</string>
<string name="wear_bt_failed_foreground_notification_title">Wear OS-i sünkroonimisteenuse käivitamine ei õnnestunud</string>
<string name="wear_bt_critical_error_channel_name">Kriitiline viga Wear OS-iga sünkroonimisel</string>
<string name="wear_bt_pairing_mismatch_message">See seade oli varem autoriseeritud, kuid esitab nüüd päringutele teise tunnusloa. See juhtub siis, kui Wear OS-i rakendus on uuesti paigaldatud või selle andmed on kustutatud. See võib viidata ka Bluetoothi MAC-aadressi võltsimise katsele.\n\nNõustu sellega ainult juhul, kui oled hiljuti sellele kellale Catima Wear OS-i rakenduse uuesti paigaldanud.</string>
<string name="settings_wear_sync_device_name"><xliff:g>%1$s</xliff:g> (<xliff:g>%2$s</xliff:g>)</string>
</resources>
+5
View File
@@ -287,4 +287,9 @@
<string name="cardWithNumber">کارت <xliff:g>%d</xliff:g></string>
<string name="cardWithNumberAndLocale">کارت <xliff:g>%d</xliff:g> (<xliff:g>%s</xliff:g>)</string>
<string name="pleaseDoNotRotateTheDevice">لطفا دستگاه‌تان را نچرخوانید، زیرا کار در حال انجام را لغو میکند</string>
<string name="settings_disable_nfc_while_viewing_card">توقف NFC</string>
<string name="settings_disable_nfc_while_viewing_card_summary">NFC را متوقف می‌کند تا هنگام مشاهده کارت، پرداخت‌های NFC فعال نشوند.</string>
<string name="settings_wear_sync_blocked_devices">دستگاه‌های Wear OS مسدودشده</string>
<string name="settings_wear_sync_blocked_devices_summary">مدیریت دستگاه‌های Wear OS مسدودشده</string>
<string name="settings_wear_sync_no_blocked_devices">هیچ دستگاه مسدودشده‌ای وجود ندارد</string>
</resources>
+43 -3
View File
@@ -168,7 +168,7 @@
<string name="version_history">Historique des versions</string>
<string name="exportPassword">Définissez un mot de passe pour protéger vos exportations (facultatif)</string>
<string name="exportPasswordHint">Entrez le mot de passe</string>
<string name="editGroup">Modification du groupe : <xliff:g> %s </xliff:g></string>
<string name="editGroup">Modification du groupe : <xliff:g>%s</xliff:g></string>
<string name="noGiftCardsGroup">Créez des cartes, puis affectez-les au groupe ici</string>
<string name="group_edit">Modifier le groupe</string>
<string name="group_name_already_in_use">Nom de groupe déjà utilisé</string>
@@ -231,8 +231,8 @@
<string name="show_balance">Afficher le solde</string>
<string name="permissionReadCardsLabel">Lire les cartes Catima</string>
<string name="permissionReadCardsDescription">lisez vos cartes Catima et tous leurs détails, y compris les notes et les images</string>
<string name="settings_allow_content_provider_read_title">Autoriser d\'autres applications à accéder à mes données</string>
<string name="settings_allow_content_provider_read_summary">Les applications devront toujours demander une autorisation pour obtenir l\'accès</string>
<string name="settings_allow_content_provider_read_title">Synchroniser avec Gadgetbridge</string>
<string name="settings_allow_content_provider_read_summary">Permet à l\'appli Gadgetbridge de synchroniser vos cartes vers des montres prises en charge</string>
<string name="settings_display_barcode_max_brightness_summary">Nécessaire au fonctionnement de certains scanneurs</string>
<string name="settings_keep_screen_on_summary">Désactive la temporisation de l\'écran lors de la visualisation d\'une carte</string>
<string name="settings_oled_dark_summary">Réduit l\'utilisation de la batterie sur les écrans OLED</string>
@@ -314,4 +314,44 @@
<string name="zoomBackImage">Grossir l\'image arrière</string>
<string name="show_card_id">Afficher l\'ID de carte</string>
<string name="open_in_gallery">Ouvrir dans la galerie d\'images</string>
<string name="settings_wear_sync">Synchroniser avec Wear OS</string>
<string name="settings_wear_sync_summary">Permet à l\'appli compagnon Wear OS de lire vos cartes par Bluetooth</string>
<string name="wear_sync_permission_required">Catima a besoin de l\'autorisation que vous avez refusée pour se synchroniser avec votre montre connectée Wear OS</string>
<string name="settings_wear_sync_devices">Appareils Wear OS autorisés</string>
<string name="settings_wear_sync_devices_summary">Gérer les appareils autorisés à se synchroniser par Bluetooth</string>
<string name="settings_wear_sync_no_devices">Aucun appareil autorisé</string>
<plurals name="settings_wear_sync_devices_summary_count">
<item quantity="one"><xliff:g>%d</xliff:g> appareil autorisé</item>
<item quantity="many"><xliff:g>%d</xliff:g> appareils autorisés</item>
<item quantity="other"><xliff:g>%d</xliff:g> appareils autorisés</item>
</plurals>
<string name="settings_wear_sync_blocked_devices">Appareils Wear OS bloqués</string>
<string name="settings_wear_sync_blocked_devices_summary">Gérer les appareils Wear OS bloqués</string>
<string name="settings_wear_sync_no_blocked_devices">Aucun appareil bloqué</string>
<plurals name="settings_wear_sync_blocked_devices_summary_count">
<item quantity="one"><xliff:g>%d</xliff:g> appareil bloqué</item>
<item quantity="many"><xliff:g>%d</xliff:g> appareils bloqués</item>
<item quantity="other"><xliff:g>%d</xliff:g> appareils bloqués</item>
</plurals>
<string name="settings_wear_sync_unpair_title">Supprimer l\'appareil?</string>
<string name="settings_wear_sync_unpair_message">Retirer <xliff:g>%1$s</xliff:g> de Catima? Il ne pourra plus synchroniser de cartes.</string>
<string name="settings_wear_sync_unblock_message">Retirer <xliff:g>%1$s</xliff:g> de la liste des appareils bloqués? Il pourra demander l\'accès à nouveau.</string>
<string name="settings_wear_sync_unpair">Retirer</string>
<string name="settings_wear_sync_device_name"><xliff:g>%1$s</xliff:g> (<xliff:g>%2$s</xliff:g>)</string>
<string name="settings_wear_sync_tap_to_remove">Appuyer sur un appareil pour le supprimer.</string>
<string name="wear_bt_pairing_channel_name">Appairage d\'appareil Wear OS</string>
<string name="wear_bt_pairing_title">L\'appareil Wear OS souhaite se synchroniser</string>
<string name="wear_bt_pairing_message">Autoriser <xliff:g>%1$s</xliff:g> à accéder à vos cartes?</string>
<string name="wear_bt_pairing_allow">Autoriser</string>
<string name="wear_bt_pairing_block">Bloquer</string>
<string name="wear_bt_pairing_allowed"><xliff:g>%1$s</xliff:g> est maintenant autorisé à se synchroniser.</string>
<string name="wear_bt_pairing_blocked"><xliff:g>%1$s</xliff:g> a été bloqué.</string>
<string name="wear_bt_pairing_mismatch_title">Nouvelle demande d\'autorisation de <xliff:g>%1$s</xliff:g></string>
<string name="open_settings">Ouvrir les paramètres</string>
<string name="wear_bt_channel_name">Compagnon Wear OS</string>
<string name="wear_bt_notification_title">Synchronisation Catima Wear OS active</string>
<string name="settings_category_title_smartwatch">Prise en charge des montres connectées</string>
<string name="wear_bt_failed_foreground_notification_title">Erreur au démarrage du service de synchronisation Wear OS</string>
<string name="wear_bt_critical_error_channel_name">Erreur critique de synchronisation Wear OS</string>
<string name="wear_bt_pairing_mismatch_message">Cet appareil était autorisé précédemment mais affiche maintenant un jeton d\'identité différent. Cela arrive lorsque l\'appli Wear OS est réinstallée ou ses données sont supprimées. Cela peut aussi indiquer une tentative d\'usurpation d\'adresse MAC du Bluetooth.\n\nAcceptez uniquement si vous avez récemment réinstallée l\'appli Catima Wear OS sur cette montre.</string>
</resources>
+40 -2
View File
@@ -64,8 +64,8 @@
<string name="settings_keep_screen_on_summary">Evita que se apague a pantalla cando se ve unha tarxeta</string>
<string name="settings_disable_lockscreen_while_viewing_card">Evitar bloqueo da pantalla</string>
<string name="settings_disable_lockscreen_while_viewing_card_summary">Desactiva o bloqueo da pantalla cando se ve unha tarxeta</string>
<string name="settings_allow_content_provider_read_title">Permitir a outras apps acceder aos meus datos</string>
<string name="settings_allow_content_provider_read_summary">As app terán que solicitar igualmente o permiso para acceder aos datos</string>
<string name="settings_allow_content_provider_read_title">Sincronizar con Gadgetbridge</string>
<string name="settings_allow_content_provider_read_summary">Permite á app Gadgetbridge sincronizar as túas tarxetas cos reloxos compatibles</string>
<string name="settings_use_volume_keys_navigation">Cambiar de tarxeta cos botóns de volume</string>
<string name="settings_use_volume_keys_navigation_summary">Usar os botóns de volume para cambiar a tarxeta que se mostra</string>
<string name="intent_import_card_from_url_share_text">Quero compartir unha tarxeta contigo</string>
@@ -307,4 +307,42 @@
<string name="zoomBackImage">Zoom na imaxe posterior</string>
<string name="show_card_id">Mostrar ID da tarxeta</string>
<string name="open_in_gallery">Abrir na galería de imaxes</string>
<string name="settings_wear_sync">Sincronizar con Wear OS</string>
<string name="settings_wear_sync_summary">Permite que a app asocidada de Wear OS lea as túas tarxetas utilizando Bluetooth</string>
<string name="wear_sync_permission_required">Catima precisa os permisos que non concedeches para sincronizar co teu reloxo Wear OS</string>
<string name="settings_wear_sync_devices">Dispositivos Wear OS permitidos</string>
<string name="settings_wear_sync_devices_summary">Xestiona os dispositivos con permiso para sincronizar usando Bluetooth</string>
<string name="settings_wear_sync_no_devices">Sen dispositivos permitidos</string>
<plurals name="settings_wear_sync_devices_summary_count">
<item quantity="one"><xliff:g>%d</xliff:g> dispositivo permitido</item>
<item quantity="other"><xliff:g>%d</xliff:g> dispositivos permitidos</item>
</plurals>
<string name="settings_wear_sync_blocked_devices">Dispositivos Wear OS bloqueados</string>
<string name="settings_wear_sync_blocked_devices_summary">Xestiona os dispositivos Wear OS bloquedos</string>
<string name="settings_wear_sync_no_blocked_devices">Sen dispositivos bloqueados</string>
<plurals name="settings_wear_sync_blocked_devices_summary_count">
<item quantity="one"><xliff:g>%d</xliff:g> dispositivo bloqueado</item>
<item quantity="other"><xliff:g>%d</xliff:g> dispositivos bloqueados</item>
</plurals>
<string name="settings_wear_sync_unpair_title">Retirar dispositivo?</string>
<string name="settings_wear_sync_unpair_message">Retirar <xliff:g>%1$s</xliff:g> de Catima? Non poderá seguir sincronizándose coas túas tarxetas.</string>
<string name="settings_wear_sync_unblock_message">Retirar <xliff:g>%1$s</xliff:g> da lista de bloqueados? Poderá volver a solicitar o acceso.</string>
<string name="settings_wear_sync_unpair">Retirar</string>
<string name="settings_wear_sync_device_name"><xliff:g>%1$s</xliff:g> (<xliff:g>%2$s</xliff:g>)</string>
<string name="settings_wear_sync_tap_to_remove">Toca nun dispositivo para retiralo.</string>
<string name="wear_bt_pairing_channel_name">Emparellando dispositivo Wear OS</string>
<string name="wear_bt_pairing_title">O dispositivo Wear OS quere sincronizar</string>
<string name="wear_bt_pairing_message">Permitirlle a <xliff:g>%1$s</xliff:g> que acceda ás tarxetas?</string>
<string name="wear_bt_pairing_allow">Permitir</string>
<string name="wear_bt_pairing_block">Bloquear</string>
<string name="wear_bt_pairing_allowed">Agora <xliff:g>%1$s</xliff:g> ten permiso para sincronizar.</string>
<string name="wear_bt_pairing_blocked">Bloqueaches a <xliff:g>%1$s</xliff:g>.</string>
<string name="wear_bt_pairing_mismatch_title">Nova solicitude de autorización desde <xliff:g>%1$s</xliff:g></string>
<string name="wear_bt_pairing_mismatch_message">O dispositivo tiña permiso anteriormente pero agora presenta un token de identidade diferente. Isto acontece cando se reinstala a app Wear OS ou se limparon os datos. Tamén pode indicar un intento de suplantación utilizando a MAC de Bluetooth.\n\nSó acepta se reinstalaches recentemente a app Catima Wear OS neste reloxo.</string>
<string name="open_settings">Abrir os axustes</string>
<string name="wear_bt_channel_name">Aplicación Wear OS</string>
<string name="wear_bt_notification_title">Sincronización activa Wear OS para Catima</string>
<string name="settings_category_title_smartwatch">Compatibilidade con reloxos</string>
<string name="wear_bt_failed_foreground_notification_title">Fallou o inicio do servizo de sincronización con Wear OS</string>
<string name="wear_bt_critical_error_channel_name">Erro crítico ao sincronizar con Wear OS</string>
</resources>
+39 -2
View File
@@ -220,8 +220,8 @@
<string name="show_note">Tampilkan catatan</string>
<string name="permissionReadCardsLabel">Bacalah kartu Catima</string>
<string name="permissionReadCardsDescription">baca kartu Anda dan semua detailnya, termasuk catatan dan gambar</string>
<string name="settings_allow_content_provider_read_title">Izinkan aplikasi lain mengakses data saya</string>
<string name="settings_allow_content_provider_read_summary">Aplikasi masih harus meminta izin untuk diberikan akses</string>
<string name="settings_allow_content_provider_read_title">Sinkronkan dengan Gadgetbridge</string>
<string name="settings_allow_content_provider_read_summary">Memungkinkan aplikasi Gadgetbridge menyinkronkan kartu Anda ke jam tangan yang didukung</string>
<string name="settings_keep_screen_on_summary">Menonaktifkan batas waktu layar saat melihat kartu</string>
<string name="settings_oled_dark_summary">Mengurangi penggunaan baterai pada layar OLED</string>
<string name="settings_category_title_general">Umum</string>
@@ -301,4 +301,41 @@
<string name="sort_by_most_recently_added">Terakhir ditambahkan</string>
<string name="zoomFrontImage">Perbesar gambar depan</string>
<string name="zoomBackImage">Perbesar gambar belakang</string>
<string name="settings_wear_sync">Sinkronkan dengan Wear OS</string>
<string name="settings_wear_sync_summary">Memungkinkan aplikasi pendamping Wear OS membaca kartu Anda melalui Bluetooth</string>
<string name="wear_sync_permission_required">Catima memerlukan izin yang Anda tolak untuk menyinkronkan dengan smartwatch Wear OS Anda</string>
<string name="settings_wear_sync_devices">Perangkat Wear OS yang diizinkan</string>
<string name="settings_wear_sync_devices_summary">Kelola perangkat yang diizinkan untuk sinkronisasi melalui Bluetooth</string>
<string name="settings_wear_sync_no_devices">Tidak ada perangkat yang diizinkan</string>
<plurals name="settings_wear_sync_devices_summary_count">
<item quantity="other"><xliff:g>%d</xliff:g> perangkat diizinkan</item>
</plurals>
<string name="settings_wear_sync_blocked_devices">Perangkat Wear OS yang diblokir</string>
<string name="settings_wear_sync_blocked_devices_summary">Kelola perangkat Wear OS yang diblokir</string>
<string name="settings_wear_sync_no_blocked_devices">Tidak ada perangkat yang diblokir</string>
<plurals name="settings_wear_sync_blocked_devices_summary_count">
<item quantity="other"><xliff:g>%d</xliff:g> perangkat diblokir</item>
</plurals>
<string name="settings_wear_sync_unpair_title">Hapus perangkat?</string>
<string name="settings_wear_sync_unpair_message">Hapus <xliff:g>%1$s</xliff:g> dari Catima? Perangkat ini tidak akan dapat menyinkronkan kartu Anda lagi.</string>
<string name="settings_wear_sync_unblock_message">Hapus <xliff:g>%1$s</xliff:g> dari daftar yang diblokir? Perangkat ini akan dapat meminta akses lagi.</string>
<string name="settings_wear_sync_unpair">Hapus</string>
<string name="settings_wear_sync_device_name"><xliff:g>%1$s</xliff:g> (<xliff:g>%2$s</xliff:g>)</string>
<string name="settings_wear_sync_tap_to_remove">Ketuk perangkat untuk menghapusnya.</string>
<string name="wear_bt_pairing_channel_name">Pemasangan perangkat Wear OS</string>
<string name="wear_bt_pairing_title">Perangkat Wear OS ingin menyinkronkan</string>
<string name="wear_bt_pairing_message">Izinkan <xliff:g>%1$s</xliff:g> mengakses kartu Anda?</string>
<string name="wear_bt_pairing_allow">Izinkan</string>
<string name="wear_bt_pairing_block">Blokir</string>
<string name="wear_bt_pairing_allowed"><xliff:g>%1$s</xliff:g> kini diizinkan untuk menyinkronkan.</string>
<string name="wear_bt_pairing_blocked"><xliff:g>%1$s</xliff:g> telah diblokir.</string>
<string name="wear_bt_pairing_mismatch_title">Permintaan otorisasi baru dari <xliff:g>%1$s</xliff:g></string>
<string name="wear_bt_pairing_mismatch_message">Perangkat ini sebelumnya diotorisasi tetapi kini menampilkan token identitas yang berbeda. Hal ini terjadi ketika aplikasi Wear OS diinstal ulang atau datanya dihapus. Hal ini juga dapat mengindikasikan upaya spoofing MAC Bluetooth.\n\nTerima hanya jika Anda baru-baru ini menginstal ulang aplikasi Catima Wear OS di jam tangan ini.</string>
<string name="open_settings">Buka pengaturan</string>
<string name="open_in_gallery">Buka di galeri gambar</string>
<string name="wear_bt_channel_name">Pendamping Wear OS</string>
<string name="wear_bt_notification_title">Sinkronisasi Catima Wear OS aktif</string>
<string name="settings_category_title_smartwatch">Dukungan smartwatch</string>
<string name="wear_bt_failed_foreground_notification_title">Gagal memulai layanan sinkronisasi Wear OS</string>
<string name="wear_bt_critical_error_channel_name">Kesalahan kritis sinkronisasi Wear OS</string>
</resources>
+1
View File
@@ -314,4 +314,5 @@
<string name="zoomFrontImage">Zoom immagine fronte</string>
<string name="zoomBackImage">Zoom immagine retro</string>
<string name="open_in_gallery">Apri nella galleria immagini</string>
<string name="open_settings">Apri le impostazioni</string>
</resources>
+38 -2
View File
@@ -217,14 +217,14 @@
<string name="settings_column_count_4">4</string>
<string name="settings_category_title_privacy">プライバシー</string>
<string name="exportCancelled">輸出がキャンセルされた</string>
<string name="settings_allow_content_provider_read_title">他のアプリが自分のデータにアクセスすることを許可する</string>
<string name="settings_allow_content_provider_read_title">Gadgetbridgeと同期</string>
<string name="permissionReadCardsDescription">Catimaカードと、ノートや画像を含むすべての詳細を読み取る</string>
<string name="settings_use_volume_keys_navigation_summary">ボリュームボタンを使ってどのカードを表示するかを変更する</string>
<string name="unsupportedFile">このファイルはサポートされていません</string>
<string name="app_copyright_fmt" tools:ignore="PluralsCandidate">著作権 © 2019<xliff:g>%d</xliff:g> Sylvia van Os と貢献者一同</string>
<string name="app_copyright_short">著作権 © Sylvia van Os と貢献者一同</string>
<string name="app_copyright_old">Loyalty Card Keychain が基になりました\n著作権 © 20162020 Branden Archer</string>
<string name="settings_allow_content_provider_read_summary">アプリは継続したアクセス許可を要求します</string>
<string name="settings_allow_content_provider_read_summary">Gadgetbridge アプリによる対応スマートウォッチとカードの同期を許可する</string>
<string name="settings_use_volume_keys_navigation">音量ボタンでカードを切り替え</string>
<plurals name="balancePoints">
<item quantity="other"><xliff:g>%s</xliff:g> ポイント</item>
@@ -301,4 +301,40 @@
<string name="zoomBackImage">背面を拡大</string>
<string name="show_card_id">カードIDを表示</string>
<string name="open_in_gallery">ギャラリーを開く</string>
<string name="settings_wear_sync">Wear OS と同期</string>
<string name="settings_wear_sync_summary">Wear OS コンパニオンアプリによる Bluetooth 経由のカード読取を許可する</string>
<string name="wear_sync_permission_required">貴方が拒否した権限は Catima が Wear OS スマートウォッチと同期するのに必要です</string>
<string name="settings_wear_sync_devices">対応している Wear OS デバイス</string>
<string name="settings_wear_sync_devices_summary">Bluetooth 経由での同期が許可されたデバイスの管理</string>
<string name="settings_wear_sync_no_devices">デバイスが許可されていません</string>
<plurals name="settings_wear_sync_devices_summary_count">
<item quantity="other"><xliff:g>%d</xliff:g> 台のデバイスが許可されています</item>
</plurals>
<string name="settings_wear_sync_blocked_devices">ブロックされた Wear OS デバイス</string>
<string name="settings_wear_sync_blocked_devices_summary">ブロックされた Wear OS デバイスの管理</string>
<string name="settings_wear_sync_no_blocked_devices">ブロックされているデバイスはありません</string>
<plurals name="settings_wear_sync_blocked_devices_summary_count">
<item quantity="other"><xliff:g>%d</xliff:g> 台のデバイスがブロックされています</item>
</plurals>
<string name="settings_wear_sync_unpair_title">デバイスを削除しますか?</string>
<string name="settings_wear_sync_unpair_message">Catima から <xliff:g>%1$s</xliff:g> を削除しますか? 削除するとカードの同期は出来なくなります。</string>
<string name="settings_wear_sync_unblock_message">ブロックの一覧から <xliff:g>%1$s</xliff:g> を削除しますか? 削除すればアクセスを再要求できるようになります。</string>
<string name="settings_wear_sync_unpair">削除</string>
<string name="settings_wear_sync_device_name"><xliff:g>%1$s</xliff:g> <xliff:g>%2$s</xliff:g></string>
<string name="settings_wear_sync_tap_to_remove">タップしてデバイスを削除します。</string>
<string name="wear_bt_pairing_channel_name">Wear OS デバイスを接続しました</string>
<string name="wear_bt_pairing_title">Wear OS デバイスとの同期を要求</string>
<string name="wear_bt_pairing_message"><xliff:g>%1$s</xliff:g> にカードへのアクセスを許可しますか?</string>
<string name="wear_bt_pairing_allow">許可</string>
<string name="wear_bt_pairing_block">ブロック</string>
<string name="wear_bt_pairing_allowed"><xliff:g>%1$s</xliff:g> への同期が許可されました。</string>
<string name="wear_bt_pairing_blocked"><xliff:g>%1$s</xliff:g> はブロックされました。</string>
<string name="wear_bt_pairing_mismatch_title"><xliff:g>%1$s</xliff:g>からの新たな認証要求</string>
<string name="wear_bt_pairing_mismatch_message">当該デバイスは以前に認証済みでしたが異なる識別トークンを現段階で提示しています。これは Wear OS アプリを再インストールした場合もしくはそのデータが消去された場合に発生します。Bluetooth MACアドレスのなりすまし攻撃の試行の可能性もあります。\n\n当該スマートウォッチで最近 Catima Wear OS アプリを再インストールした場合のみ承認して下さい。</string>
<string name="open_settings">設定を開く</string>
<string name="wear_bt_channel_name">Wear OS コンパニオン</string>
<string name="wear_bt_notification_title">Catima は Wear OS と同期中です</string>
<string name="settings_category_title_smartwatch">対応するスマートウォッチです</string>
<string name="wear_bt_failed_foreground_notification_title">Wear OSとの同期サービスの開始が失敗しました</string>
<string name="wear_bt_critical_error_channel_name">Wear OS 同期の深刻なエラー</string>
</resources>
+42 -2
View File
@@ -220,8 +220,8 @@
<string name="add_a_card_in_a_different_way">Pievienot karti citā veidā</string>
<string name="add_manually_warning_message">Dažām kartēm svītrkoda vērtība atšķiras no numura, kas ir rakstīts uz tās. Šī iemesla dēļ pašrocīgi ievadīts svītrkods ne vienmēr var darboties. Ir ieteicams nolasīt svītrkodu ar kameru. Vai joprojām turpināt?</string>
<string name="noCameraFoundGuideText">Šķiet, ka ierīcei nav kameras. Ja tā tomēr ir, jāmēģina pārsāknēt ierīci. Pretējā gadījumā jāizmanto zemāk esošā poga \"Vairāk iespēju\", lai pievienot svītrkodu citā veidā.</string>
<string name="settings_allow_content_provider_read_title">Ļaut citām lietotnēm piekļūt maniem datiem</string>
<string name="settings_allow_content_provider_read_summary">Lietotnēm joprojām būs jāpieprasa atļauja, lai nodrošinātu piekļuvi</string>
<string name="settings_allow_content_provider_read_title">Vienādot ar Gadgetbridge</string>
<string name="settings_allow_content_provider_read_summary">Atļauj Gadgetbridge lietotnei vienādot kartes ar atbalstītajiem pulksteņiem</string>
<string name="show_note">Rādīt piezīmi</string>
<string name="show_balance">Rādīt atlikumu</string>
<string name="settings_category_title_privacy">Privātums</string>
@@ -314,4 +314,44 @@
<string name="zoomFrontImage">Pietuvināt priekšpuses attēlu</string>
<string name="zoomBackImage">Pietuvināt aizmugures attēlu</string>
<string name="show_card_id">Rādīt kartes Id</string>
<string name="settings_wear_sync">Vienādot ar Wear OS</string>
<string name="settings_wear_sync_summary">Ļauj Wear OS palīglietotnei lasīt kartes ar Bluetooth starpniecību</string>
<string name="wear_sync_permission_required">Catima ir nepieciešamas iepriekš noraidītās atļaujas, lai vienādotu ar Wear OS viedpulksteni</string>
<string name="settings_wear_sync_devices">Atļautās Wear OS ierīces</string>
<string name="wear_bt_critical_error_channel_name">Būtiska Wear OS vienādošanas kļūda</string>
<string name="wear_bt_failed_foreground_notification_title">Neizdevās palaist Wear OS vienādošanas pakalpojumu</string>
<string name="settings_category_title_smartwatch">Viedpulksteņu atbalsts</string>
<string name="wear_bt_notification_title">Catima Wear OS vienādošana darbojas</string>
<string name="wear_bt_channel_name">Wear OS palīgs</string>
<string name="open_settings">Atvērt iestatījumus</string>
<string name="wear_bt_pairing_mismatch_message">Šī ierīce iepriekš bija pilnvarota, bet tagad norāda citu identitātes pilnvaru. Tas notiek, kad Wear OS lietotne ir uzstādīta no jauna vai ir notīrīti tās dati. Tas var norādīt arī uz Bluetooth MAC atdarināšanas mēģinājumu.\n\nPieņemt tikai tad, ja šajā pulkstenī Catima Wear OS lietotne tika uzstādīta no jauna.</string>
<string name="wear_bt_pairing_mismatch_title">Jauns pilnvarošanas pieprasījums no <xliff:g>%1$s</xliff:g></string>
<string name="wear_bt_pairing_blocked"><xliff:g>%1$s</xliff:g> tika liegts.</string>
<string name="wear_bt_pairing_allowed"><xliff:g>%1$s</xliff:g> tagad ir atļauta vienādošana.</string>
<string name="wear_bt_pairing_block">Liegt</string>
<string name="wear_bt_pairing_allow">Atļaut</string>
<string name="wear_bt_pairing_message">Atļaut <xliff:g>%1$s</xliff:g> piekļūt kartēm?</string>
<string name="wear_bt_pairing_title">Wear OS ierīce vēlas vienādot</string>
<string name="wear_bt_pairing_channel_name">Wear OS ierīces pārošana</string>
<string name="settings_wear_sync_tap_to_remove">Piesist ierīces nosaukumam, lai to noņemtu.</string>
<string name="settings_wear_sync_device_name"><xliff:g>%1$s</xliff:g> (<xliff:g>%2$s</xliff:g>)</string>
<string name="settings_wear_sync_unpair">Noņemt</string>
<string name="settings_wear_sync_unblock_message">Noņemt <xliff:g>%1$s</xliff:g> no liegumu saraksta? Tā atkal varēs pieprasīt piekļuvi.</string>
<string name="settings_wear_sync_unpair_message">Noņemt <xliff:g>%1$s</xliff:g> no Catima? Tā vairs nevarēs vienādot kartes.</string>
<string name="settings_wear_sync_unpair_title">Noņemt ierīci?</string>
<plurals name="settings_wear_sync_blocked_devices_summary_count">
<item quantity="zero">Liegtas <xliff:g>%d</xliff:g> ierīces</item>
<item quantity="one">Liegta <xliff:g>%d</xliff:g> ierīce</item>
<item quantity="other">Liegtas <xliff:g>%d</xliff:g> ierīces</item>
</plurals>
<string name="settings_wear_sync_no_blocked_devices">Nav liegtu ierīču</string>
<string name="settings_wear_sync_blocked_devices_summary">Liegto Wear OS ierīču pārvaldīšana</string>
<string name="settings_wear_sync_blocked_devices">Liegtās Wear OS ierīces</string>
<plurals name="settings_wear_sync_devices_summary_count">
<item quantity="zero">Atļautas <xliff:g>%d</xliff:g> ierīces</item>
<item quantity="one">Atļauta <xliff:g>%d</xliff:g> ierīce</item>
<item quantity="other">Atļautas <xliff:g>%d</xliff:g> ierīces</item>
</plurals>
<string name="settings_wear_sync_no_devices">Nav atļautu ierīču</string>
<string name="settings_wear_sync_devices_summary">Ierīču, kurām ir atļauts vienādot ar Bluetooth starpniecību, pārvaldīšana</string>
</resources>
+49 -11
View File
@@ -32,10 +32,10 @@
<string name="exportSuccessfulTitle">Exporteren voltooid</string>
<string name="exportFailedTitle">Exporteren mislukt</string>
<string name="exportFailed">Het exporteren is mislukt</string>
<string name="importing">Bezig met importeren…</string>
<string name="importing">Importeren…</string>
<string name="exporting">Bezig met exporteren…</string>
<string name="exportOptionExplanation">De gegevens worden weggeschreven op een locatie naar keuze</string>
<string name="importOptionFilesystemTitle">Importeren uit bestandssysteem</string>
<string name="importOptionFilesystemTitle">Importeren</string>
<string name="importOptionFilesystemExplanation">Kies een specifiek bestand van het bestandssysteem</string>
<string name="importOptionFilesystemButton">Van bestandssysteem</string>
<string name="about">Over</string>
@@ -52,7 +52,7 @@
<string name="settings_display_barcode_max_brightness">Scherm oplichten bij tonen van barcode</string>
<string name="intent_import_card_from_url_share_text">Ik wil een klantenkaart met je delen</string>
<string name="all">Alles</string>
<string name="importSuccessful">De gegevens zijn geïmporteerd</string>
<string name="importSuccessful">Gegevens geïmporteerd</string>
<string name="deleteConfirmationGroup">Groep verwijderen\?</string>
<string name="noGroups">Druk op de plusknop (+) om een groep toe te voegen</string>
<string name="exportSuccessful">De gegevens zijn geëxporteerd</string>
@@ -95,8 +95,8 @@
<string name="accept">Accepteren</string>
<string name="importVoucherVaultMessage">Kies het te importeren exportbestand. \nGa naar het exportmenu van Voucher Vault om een exportbestand samen te stellen.</string>
<string name="importVoucherVault">Importeren uit Voucher Vault</string>
<string name="importLoyaltyCardKeychainMessage">Kies het te importeren exportbestand. \nGa naar het import-/exportmenu van Klantenkaartkluis om een exportbestand samen te stellen.</string>
<string name="importLoyaltyCardKeychain">Importeren uit Klantenkaartkluis</string>
<string name="importLoyaltyCardKeychainMessage">Kies het te importeren exportbestand. \nGa naar het import-/exportmenu van Loyalty Card Keychain om een exportbestand samen te stellen.</string>
<string name="importLoyaltyCardKeychain">Importeren uit Loyalty Card Keychain</string>
<string name="importFidmeMessage">Kies het te importeren exportbestand en kies nadien de juiste barcodes. \nGa naar je FidMe-profiel en druk op Gegevensbescherming om een exportbestand samen te stellen.</string>
<string name="importCatimaMessage">Kies het te importeren exportbestand. \nGa naar het import-/exportmenu van Catima op een ander apparaat om een exportbestand samen te stellen.</string>
<string name="importFidme">Importeren uit FidMe</string>
@@ -225,9 +225,9 @@
<string name="show_note">Aantekening tonen</string>
<string name="show_validity">Geldigheid tonen</string>
<string name="permissionReadCardsLabel">Catimakaarten uitlezen</string>
<string name="settings_allow_content_provider_read_summary">Let op: apps moeten nog steeds om toestemming vragen</string>
<string name="settings_allow_content_provider_read_summary">Hiermee kan de Gadgetbridge-app jouw kaarten synchroniseren met ondersteunde horloges</string>
<string name="permissionReadCardsDescription">Lees alle Catima-kaarten uit, inclusief alle details, aantekeningen en afbeeldingen</string>
<string name="settings_allow_content_provider_read_title">Andere apps toegang geven tot gegevens</string>
<string name="settings_allow_content_provider_read_title">Synchroniseren met Gadgetbridge</string>
<string name="settings_keep_screen_on_summary">Laat het scherm niet op zwart gaan tijdens het bekijken van een kaart</string>
<string name="settings_category_title_privacy">Privacy</string>
<string name="settings_display_barcode_max_brightness_summary">Benodigd voor de werking van sommige scanners</string>
@@ -249,7 +249,7 @@
<string name="field_must_not_be_empty">Dit veld is vereist</string>
<string name="app_name">Catima</string>
<string name="add_manually_warning_title">Scannen wordt aangeraden</string>
<string name="add_manually_warning_message">Bij sommige kaarten wijkt de barcodewaarde af van het nummer op de kaart. Hierdoor werkt het handmatig invoeren van een barcode niet altijd. Het wordt aangeraden om in plaats daarvan de barcode met je camera te scannen. Wilt u nog steeds doorgaan?</string>
<string name="add_manually_warning_message">Bij sommige kaarten wijkt de barcodewaarde af van het nummer op de kaart. Hierdoor werkt het handmatig invoeren van een barcode niet altijd. Het wordt aangeraden om in plaats daarvan de barcode met je camera te scannen. Wil je nog steeds doorgaan?</string>
<string name="continue_">Ga door</string>
<string name="spend">Geef uit</string>
<string name="receive">Ontvang</string>
@@ -259,7 +259,7 @@
<string name="failedLaunchingFileManager">Geen ondersteunde bestandsbeheerder aangetroffen</string>
<string name="multipleBarcodesFoundPleaseChooseOne">Welke van de gevonden barcodes wil je gebruiken?</string>
<string name="pageWithNumber">Pagina <xliff:g>%d</xliff:g></string>
<string name="noCameraFoundGuideText">Uw apparaat lijkt niet over een camera te beschikken. Als het dat wel doet, probeer uw apparaat dan opnieuw op te starten. Anders gebruikt u de knop \"Meer opties\" beneden om handmatig een streepjescode in te voeren.</string>
<string name="noCameraFoundGuideText">Jouw apparaat lijkt niet over een camera te beschikken. Als het dat wel doet, probeer het apparaat dan opnieuw op te starten. Gebruik anders de knop \"Meer opties\" beneden om handmatig een streepjescode in te voeren.</string>
<string name="importCancelled">Importeren geannuleerd</string>
<string name="exportCancelled">Exporteren geannuleerd</string>
<string name="useFrontImage">Gebruik voorzijde van kaart</string>
@@ -299,13 +299,51 @@
<string name="back">Terug</string>
<string name="barcodeEncoding">Barcodecodering</string>
<string name="change_settings">Verander instellingen</string>
<string name="settings_disable_nfc_while_viewing_card">Pauzeer NFC</string>
<string name="settings_disable_nfc_while_viewing_card">NFC pauzeren</string>
<string name="settings_disable_nfc_while_viewing_card_summary">Pauzeert NFC om te voorkomen dat NFC-betalingen activeren tijdens het bekijken van een kaart</string>
<string name="nfc_blocked_while_viewing_card">NFC is gepauzeerd</string>
<string name="nfc_block_system_error">Pauzeren van NFC mislukt</string>
<string name="nfc_block_system_error">NFC pauzeren is mislukt</string>
<string name="sort_by_most_recently_added">Op onlangs toegevoegd</string>
<string name="show_card_id">Kaart ID tonen</string>
<string name="zoomFrontImage">Voorzijde inzoomen</string>
<string name="zoomBackImage">Achterzijde inzoomen</string>
<string name="open_in_gallery">Open in afbeeldingsgalerij</string>
<string name="settings_wear_sync">Synchroniseren met Wear OS</string>
<string name="wear_sync_permission_required">Catima heeft toestemming nodig om te synchroniseren met je Wear OS smartwatch</string>
<string name="settings_wear_sync_devices">Toegestane Wear OS-apparaten</string>
<string name="settings_wear_sync_devices_summary">Apparaten beheren die via Bluetooth kunnen worden gesynchroniseerd</string>
<string name="settings_wear_sync_no_devices">Geen toegestane apparaten</string>
<plurals name="settings_wear_sync_devices_summary_count">
<item quantity="one"><xliff:g>%d</xliff:g> apparaat toegestaan</item>
<item quantity="other"><xliff:g>%d</xliff:g> apparaten toegestaan</item>
</plurals>
<string name="settings_wear_sync_blocked_devices">Geblokkeerde Wear OS-apparaten</string>
<string name="settings_wear_sync_blocked_devices_summary">Geblokkeerde Wear OS-apparaten beheren</string>
<string name="settings_wear_sync_no_blocked_devices">Geen geblokkeerde apparaten</string>
<plurals name="settings_wear_sync_blocked_devices_summary_count">
<item quantity="one"><xliff:g>%d</xliff:g> apparaat geblokkeerd</item>
<item quantity="other"><xliff:g>%d</xliff:g> apparaten geblokkeerd</item>
</plurals>
<string name="settings_wear_sync_unpair_title">Apparaat verwijderen?</string>
<string name="settings_wear_sync_unpair_message"><xliff:g>%1$s</xliff:g> van Catima verwijderen? Het zal je kaarten niet meer kunnen synchroniseren.</string>
<string name="wear_bt_pairing_message"><xliff:g>%1$s</xliff:g> toestaan om toegang te krijgen tot jouw kaarten?</string>
<string name="settings_wear_sync_summary">Stelt de Wear OS companion app in staat om jouw kaarten via Bluetooth te lezen</string>
<string name="wear_bt_channel_name">Wear OS companion</string>
<string name="settings_wear_sync_unblock_message"><xliff:g>%1$s</xliff:g> van de blokkeringslijst verwijderen? Het zal opnieuw toegang kunnen aanvragen.</string>
<string name="settings_wear_sync_unpair">Verwijderen</string>
<string name="settings_wear_sync_device_name"><xliff:g>%1$s</xliff:g> (<xliff:g>%2$s</xliff:g>)</string>
<string name="settings_wear_sync_tap_to_remove">Tik op een apparaat om het te verwijderen.</string>
<string name="wear_bt_pairing_channel_name">Wear OS-apparaat koppelen</string>
<string name="wear_bt_pairing_title">Wear OS-apparaat wil synchroniseren</string>
<string name="wear_bt_pairing_allow">Toestaan</string>
<string name="wear_bt_pairing_block">Blokkeren</string>
<string name="wear_bt_pairing_allowed"><xliff:g>%1$s</xliff:g> mag niet synchroniseren.</string>
<string name="wear_bt_pairing_blocked"><xliff:g>%1$s</xliff:g> is geblokkeerd.</string>
<string name="wear_bt_pairing_mismatch_title">Nieuw autorisatieverzoek van <xliff:g>%1$s</xliff:g></string>
<string name="wear_bt_pairing_mismatch_message">Dit apparaat was eerder geautoriseerd, maar presenteert nu een ander identiteitstoken. Dit gebeurt wanneer de Wear OS-app opnieuw wordt geïnstalleerd of de gegevens ervan worden gewist. Het kan ook duiden op een Bluetooth MAC-spoofingpoging.\n\nAccepteer alleen als je onlangs de Catima Wear OS-app opnieuw op dit horloge hebt geïnstalleerd.</string>
<string name="open_settings">Instellingen openen</string>
<string name="wear_bt_notification_title">Catima Wear OS synchronisatie is geactiveerd</string>
<string name="settings_category_title_smartwatch">Smartwatch-ondersteuning</string>
<string name="wear_bt_failed_foreground_notification_title">Starten van Wear OS-synchronisatieservice is mislukt</string>
<string name="wear_bt_critical_error_channel_name">Kritische fout met Wear OS-synchronisatie</string>
</resources>
+44 -2
View File
@@ -238,11 +238,11 @@
<string name="show_note">Pokaż notatkę</string>
<string name="permissionReadCardsLabel">Odczytaj karty Catima</string>
<string name="permissionReadCardsDescription">odczytywanie swoich kart Catima i ich szczegółów, włącznie z notatkami i obrazkami</string>
<string name="settings_allow_content_provider_read_title">Pozwól innym aplikacjom na dostęp do moich danych</string>
<string name="settings_allow_content_provider_read_title">Synchronizacja z Gadgetbridge</string>
<string name="settings_display_barcode_max_brightness_summary">Potrzebne aby niektóre skanery działały</string>
<string name="settings_keep_screen_on_summary">Wyłącza wygaszanie ekranu kiedy wyświetlana jest karta</string>
<string name="settings_disable_lockscreen_while_viewing_card_summary">Wyłącza blokadę ekranu kiedy wyświetlana jest karta</string>
<string name="settings_allow_content_provider_read_summary">Aplikacje będą wymagały pozwolenia aby otrzymać dostęp do danych</string>
<string name="settings_allow_content_provider_read_summary">Umożliwia aplikacji Gadgetbridge synchronizację kart z obsługiwanymi zegarkami</string>
<string name="settings_oled_dark_summary">Zmniejsza zużycie baterii na wyświetlaczach OLED</string>
<string name="settings_category_title_cards">Widok karty</string>
<string name="settings_category_title_general">Ogólne</string>
@@ -320,4 +320,46 @@
<string name="zoomBackImage">Powiększ zdjęcie z tyłu</string>
<string name="show_card_id">Pokaż ID karty</string>
<string name="open_in_gallery">Otwórz zdjęcie w galerii</string>
<string name="settings_wear_sync">Synchronizacja z systemem Wear OS</string>
<string name="settings_wear_sync_summary">Umożliwia aplikacji towarzyszącej Wear OS odczytywanie kart za pośrednictwem Bluetooth</string>
<string name="wear_sync_permission_required">Aplikacja Catima potrzebuje uprawnień, których nie przyznałeś, aby zsynchronizować się z Twoim smartwatchem z systemem Wear OS</string>
<string name="settings_wear_sync_devices">Obsługiwane urządzenia z systemem Wear OS</string>
<string name="settings_wear_sync_devices_summary">Zarządzaj urządzeniami, które mogą synchronizować się przez Bluetooth</string>
<string name="settings_wear_sync_no_devices">Żadne urządzenia nie są dozwolone</string>
<plurals name="settings_wear_sync_devices_summary_count">
<item quantity="one"><xliff:g>%d</xliff:g> urządzenie dozwolone</item>
<item quantity="few"><xliff:g>%d</xliff:g> urządzenia dozwolone</item>
<item quantity="many"><xliff:g>%d</xliff:g> urządzeń dozwolonych</item>
<item quantity="other"><xliff:g>%d</xliff:g> urządzeń dozwolonych</item>
</plurals>
<string name="settings_wear_sync_blocked_devices">Zablokowane urządzenia z systemem Wear OS</string>
<string name="settings_wear_sync_blocked_devices_summary">Zarządzanie zablokowanymi urządzeniami z systemem Wear OS</string>
<string name="settings_wear_sync_no_blocked_devices">Brak zablokowanych urządzeń</string>
<plurals name="settings_wear_sync_blocked_devices_summary_count">
<item quantity="one"><xliff:g>%d</xliff:g> urządzenie zablokowane</item>
<item quantity="few"><xliff:g>%d</xliff:g> urządzenia zablokowane</item>
<item quantity="many"><xliff:g>%d</xliff:g> urządzeń zablokowanych</item>
<item quantity="other"><xliff:g>%d</xliff:g> urządzeń zablokowanych</item>
</plurals>
<string name="settings_wear_sync_unpair_title">Usunąć urządzenie?</string>
<string name="settings_wear_sync_unpair_message">Czy chcesz usunąć <xliff:g>%1$s</xliff:g> z aplikacji Catima? W takim przypadku aplikacja nie będzie już mogła synchronizować Twoich kart.</string>
<string name="settings_wear_sync_unblock_message">Czy chcesz usunąć <xliff:g>%1$s</xliff:g> z listy zablokowanych? Wówczas będzie mogło ponownie poprosić o dostęp.</string>
<string name="settings_wear_sync_unpair">Usuń</string>
<string name="settings_wear_sync_device_name"><xliff:g>%1$s</xliff:g> (<xliff:g>%2$s</xliff:g>)</string>
<string name="settings_wear_sync_tap_to_remove">Dotknij urządzenia, aby je usunąć.</string>
<string name="wear_bt_pairing_channel_name">Parowanie urządzeń z systemem Wear OS</string>
<string name="wear_bt_pairing_title">Urządzenie z systemem Wear OS próbuje się zsynchronizować</string>
<string name="wear_bt_pairing_message">Czy zezwolić <xliff:g>%1$s</xliff:g> na dostęp do Twoich kart?</string>
<string name="wear_bt_pairing_allow">Zezwól</string>
<string name="wear_bt_pairing_block">Zablokuj</string>
<string name="wear_bt_pairing_allowed"><xliff:g>%1$s</xliff:g> może teraz zostać zsynchronizowane.</string>
<string name="wear_bt_pairing_blocked"><xliff:g>%1$s</xliff:g> zostało zablokowane.</string>
<string name="wear_bt_pairing_mismatch_title">Nowy wniosek o autoryzację od <xliff:g>%1$s</xliff:g></string>
<string name="wear_bt_pairing_mismatch_message">To urządzenie zostało wcześniej autoryzowane, ale obecnie przedstawia inny token tożsamości. Sytuacja ta ma miejsce po ponownej instalacji aplikacji Wear OS lub wyczyszczeniu jej danych. Może to również wskazywać na próbę sfałszowania adresu MAC przez Bluetooth.\n\nZatwierdź tylko wtedy, gdy niedawno ponownie zainstalowałeś aplikację Catima Wear OS na tym zegarku.</string>
<string name="open_settings">Otwórz ustawienia</string>
<string name="wear_bt_channel_name">Aplikacja towarzysząca dla Wear OS</string>
<string name="wear_bt_notification_title">Synchronizacja Catima Wear OS jest aktywna</string>
<string name="settings_category_title_smartwatch">Obsługa smartwatchów</string>
<string name="wear_bt_failed_foreground_notification_title">Nie udało się uruchomić usługi synchronizacji Wear OS</string>
<string name="wear_bt_critical_error_channel_name">Krytyczny błąd synchronizacji systemu Wear OS</string>
</resources>
+42 -2
View File
@@ -218,8 +218,8 @@
<string name="intent_import_card_from_url_share_text">Eu quero compartilhar um cartão com você</string>
<string name="settings_keep_screen_on">Manter tela ligada</string>
<string name="settings_disable_lockscreen_while_viewing_card">Previnir bloqueio de tela</string>
<string name="settings_allow_content_provider_read_title">Permitir que outros aplicativos acessem meus dados</string>
<string name="settings_allow_content_provider_read_summary">Aplicativos ainda precisarão pedir permissão para ter acesso concedido</string>
<string name="settings_allow_content_provider_read_title">Sincronização com o Gadgetbridge</string>
<string name="settings_allow_content_provider_read_summary">Permite que o aplicativo Gadgetbridge sincronize seus cartões com relógios suportados</string>
<string name="group_edit">Editar grupo</string>
<string name="exportSuccessful">Dados exportados</string>
<string name="noGroups">Clique no botão \"+\" para adicionar grupos a serem categorizados</string>
@@ -314,4 +314,44 @@
<string name="zoomBackImage">Reduzir o zoom da imagem</string>
<string name="show_card_id">Mostrar ID do cartão</string>
<string name="open_in_gallery">Abrir na galeria de imagens</string>
<string name="settings_wear_sync">Sincronizar com o Wear OS</string>
<string name="settings_wear_sync_summary">Permite que o aplicativo complementar do Wear OS leia seus cartões via Bluetooth</string>
<string name="wear_sync_permission_required">A Catima precisa das permissões que você negou para sincronizar com seu smartwatch Wear OS</string>
<string name="settings_wear_sync_devices">Dispositivos permitidos pelo Wear OS</string>
<string name="settings_wear_sync_devices_summary">Gerencie dispositivos autorizados a sincronizar via Bluetooth</string>
<string name="settings_wear_sync_no_devices">Dispositivos não permitidos</string>
<string name="settings_wear_sync_blocked_devices">Dispositivos Wear OS bloqueados</string>
<string name="settings_wear_sync_blocked_devices_summary">Gerencie dispositivos bloqueados do Wear OS</string>
<string name="settings_wear_sync_no_blocked_devices">Nenhum dispositivo bloqueado</string>
<string name="settings_wear_sync_unpair_title">Remover o dispositivo?</string>
<string name="settings_wear_sync_unpair">Remover</string>
<string name="settings_wear_sync_tap_to_remove">Toque em um dispositivo para removê-lo.</string>
<string name="wear_bt_pairing_channel_name">Pareamento de dispositivos Wear OS</string>
<string name="wear_bt_pairing_title">Dispositivo Wear OS quer sincronizar</string>
<string name="wear_bt_pairing_allow">Permita</string>
<string name="wear_bt_pairing_block">Bloquear</string>
<string name="wear_bt_pairing_mismatch_message">Este dispositivo já foi autorizado anteriormente, mas agora apresenta um token de identidade diferente. Isso acontece quando o app Wear OS é reinstalado ou seus dados são apagados. Também pode indicar uma tentativa de falsificação de MAC por Bluetooth.\n\nAceite apenas se você reinstalou recentemente o aplicativo Catima Wear OS neste relógio.</string>
<string name="open_settings">Abrir configurações</string>
<string name="wear_bt_channel_name">Companheiro Wear OS</string>
<string name="wear_bt_notification_title">Sincronização do Catima Wear OS ativa</string>
<string name="settings_category_title_smartwatch">Suporte a smartwatch</string>
<string name="wear_bt_failed_foreground_notification_title">Falhou ao iniciar o serviço de sincronização do Wear OS</string>
<string name="wear_bt_critical_error_channel_name">Erro crítico de sincronização do Wear OS</string>
<plurals name="settings_wear_sync_devices_summary_count">
<item quantity="one"><xliff:g>%d</xliff:g> dispositivo permitido</item>
<item quantity="many"><xliff:g>%d</xliff:g> dispositivos permitidos</item>
<item quantity="other"><xliff:g>%d</xliff:g> dispositivos permitidos</item>
</plurals>
<plurals name="settings_wear_sync_blocked_devices_summary_count">
<item quantity="one"><xliff:g>%d</xliff:g> dispositivo bloqueado</item>
<item quantity="many"><xliff:g>%d</xliff:g> dispositivos bloqueados</item>
<item quantity="other"><xliff:g>%d</xliff:g> dispositivos bloqueados</item>
</plurals>
<string name="settings_wear_sync_unpair_message">Remover <xliff:g>%1$s</xliff:g> do Catima? Ele não poderá mais sincronizar seus cartões.</string>
<string name="settings_wear_sync_unblock_message">Remover <xliff:g>%1$s</xliff:g> da lista de bloqueados? O item poderá solicitar acesso novamente.</string>
<string name="settings_wear_sync_device_name"><xliff:g>%1$s</xliff:g> (<xliff:g>%2$s</xliff:g>)</string>
<string name="wear_bt_pairing_message">Permitir que <xliff:g>%1$s</xliff:g> acesse seus cartões?</string>
<string name="wear_bt_pairing_allowed">Agora, a sincronização de <xliff:g>%1$s</xliff:g> é permitida.</string>
<string name="wear_bt_pairing_blocked"><xliff:g>%1$s</xliff:g> foi bloqueado.</string>
<string name="wear_bt_pairing_mismatch_title">Nova solicitação de autorização de <xliff:g>%1$s</xliff:g></string>
</resources>
+44 -2
View File
@@ -238,8 +238,8 @@
<string name="show_balance">Показывать баланс</string>
<string name="permissionReadCardsDescription">чтение ваших карт Catima и всех их данных, включая заметки и изображения</string>
<string name="permissionReadCardsLabel">Чтение карт Catima</string>
<string name="settings_allow_content_provider_read_summary">Приложениям по-прежнему придётся запрашивать разрешение для получения доступа</string>
<string name="settings_allow_content_provider_read_title">Разрешать другим приложениям доступ к моим данным</string>
<string name="settings_allow_content_provider_read_summary">Разрешить приложению Gadgetbridge синхронизировать ваши карты с поддерживаемыми часами</string>
<string name="settings_allow_content_provider_read_title">Синхронизация с Gadgetbridge</string>
<string name="settings_category_title_privacy">Конфиденциальность</string>
<string name="settings_display_barcode_max_brightness_summary">Необходимо для работы некоторых сканеров</string>
<string name="settings_keep_screen_on_summary">Отключение функции автоотключения экрана при отображении карты</string>
@@ -320,4 +320,46 @@
<string name="zoomFrontImage">Масштабирование лицевого изображения</string>
<string name="zoomBackImage">Масштабирование заднего изображения</string>
<string name="open_in_gallery">Открыть в галерее</string>
<string name="settings_wear_sync">Синхронизация с Wear OS</string>
<string name="settings_wear_sync_summary">Разрешить приложению-компаньону Wear OS читать ваши карты по Bluetooth</string>
<string name="wear_sync_permission_required">Для синхронизации умными часами Wear OS Catima требуются разрешения, в которых ранее было отказано</string>
<string name="settings_wear_sync_devices">Доверенные устройства Wear OS</string>
<string name="settings_wear_sync_devices_summary">Управление устройствами, которым разрешена синхронизация по Bluetooth</string>
<string name="settings_wear_sync_no_devices">Нет доверенных устройств</string>
<plurals name="settings_wear_sync_devices_summary_count">
<item quantity="one"><xliff:g>%d</xliff:g> доверенное устройство</item>
<item quantity="few"><xliff:g>%d</xliff:g> доверенных устройства</item>
<item quantity="many"><xliff:g>%d</xliff:g> доверенных устройств</item>
<item quantity="other"><xliff:g>%d</xliff:g> доверенных устройств</item>
</plurals>
<string name="settings_wear_sync_blocked_devices">Заблокированные устройства Wear OS</string>
<string name="settings_wear_sync_blocked_devices_summary">Управление заблокированными устройствами Wear OS</string>
<string name="settings_wear_sync_no_blocked_devices">Нет заблокированных устройств</string>
<plurals name="settings_wear_sync_blocked_devices_summary_count">
<item quantity="one"><xliff:g>%d</xliff:g> заблокированное устройство</item>
<item quantity="few"><xliff:g>%d</xliff:g> заблокированных устройства</item>
<item quantity="many"><xliff:g>%d</xliff:g> заблокированных устройств</item>
<item quantity="other"><xliff:g>%d</xliff:g> заблокированных устройств</item>
</plurals>
<string name="settings_wear_sync_unpair_title">Удалить устройство?</string>
<string name="settings_wear_sync_unpair_message">Удалить <xliff:g>%1$s</xliff:g> из Catima? Он больше не сможет синхронизировать ваши карты.</string>
<string name="settings_wear_sync_unblock_message">Удалить устройство <xliff:g>%1$s</xliff:g> из списка заблокированных? Оно снова сможет запросить доступ.</string>
<string name="settings_wear_sync_unpair">Удалить</string>
<string name="settings_wear_sync_device_name"><xliff:g>%1$s</xliff:g> (<xliff:g>%2$s</xliff:g>)</string>
<string name="settings_wear_sync_tap_to_remove">Нажмите на устройство, чтобы удалить его.</string>
<string name="wear_bt_pairing_channel_name">Сопряжение устройства Wear OS</string>
<string name="wear_bt_pairing_title">Устройство Wear OS запрашивает синхронизацию</string>
<string name="wear_bt_pairing_message">Разрешить устройству <xliff:g>%1$s</xliff:g> доступ к вашим картам?</string>
<string name="wear_bt_pairing_allow">Разрешить</string>
<string name="wear_bt_pairing_block">Заблокировать</string>
<string name="wear_bt_pairing_allowed">Устройству <xliff:g>%1$s</xliff:g> разрешена синхронизация.</string>
<string name="wear_bt_pairing_blocked">Устройство <xliff:g>%1$s</xliff:g> заблокировано.</string>
<string name="wear_bt_pairing_mismatch_title">Новый запрос на авторизацию от <xliff:g>%1$s</xliff:g></string>
<string name="wear_bt_pairing_mismatch_message">Данное устройство ранее было авторизовано, но теперь предоставляет другой токен идентификации. Это происходит, когда приложение Wear OS переустанавливается или его данные очищаются. Также это может указывать на попытку подделать MAC-адрес Bluetooth.\n\nРазрешайте только в том случае, если вы недавно переустановили приложение Catima Wear OS на этих часах.</string>
<string name="open_settings">Открыть настройки</string>
<string name="wear_bt_channel_name">Компаньон Wear OS</string>
<string name="wear_bt_notification_title">Синхронизация Catima с Wear OS активна</string>
<string name="settings_category_title_smartwatch">Поддержка умных часов</string>
<string name="wear_bt_failed_foreground_notification_title">Невозможно запустить службу синхронизации Wear OS</string>
<string name="wear_bt_critical_error_channel_name">Критическая ошибка синхронизации Wear OS</string>
</resources>
+33 -2
View File
@@ -62,8 +62,8 @@
<string name="selectBarcodeTitle">Odaberi bar-kod</string>
<string name="thumbnailDescription">Naslovna fotografija</string>
<string name="settings_disable_lockscreen_while_viewing_card">Spreči zaključavanje ekrana</string>
<string name="settings_allow_content_provider_read_title">Dozvoli drugim aplikacijama da pristupe mojim podacima</string>
<string name="settings_allow_content_provider_read_summary">Aplikacije će i dalje morati da zatraže dozvolu da bi im se odobrio pristup</string>
<string name="settings_allow_content_provider_read_title">Sinhronizuj sa Gadgetbridge-om</string>
<string name="settings_allow_content_provider_read_summary">Omogućava aplikaciji Gadgetbridge da sinhronizuje tvoje kartice na podržane satove</string>
<string name="intent_import_card_from_url_share_text">Želim da podelim karticu sa tobom</string>
<string name="importSuccessful">Podaci uvezeni</string>
<string name="exportSuccessful">Podaci izvezeni</string>
@@ -309,4 +309,35 @@
<string name="nfc_blocked_while_viewing_card">НФЦ је заустављен</string>
<string name="change_settings">Измени поставке</string>
<string name="nfc_block_system_error">Нисам успео застанути НФЦ</string>
<string name="sort_by_most_recently_added">Nedavno dodate</string>
<string name="zoomBackImage">Uvećaj zadnju sliku</string>
<string name="show_card_id">Prikaži ID kartice</string>
<string name="settings_wear_sync">Sinhronizuj sa Wear OS-om</string>
<string name="settings_wear_sync_summary">Omogućava Wear OS pratnoj aplikaciji da pročita tvoje kartice preko Bluetootha</string>
<string name="wear_sync_permission_required">Catima trebaju dozvole koje si odbio da bi mogla sinhronizovati sa tvojim Wear OS pametnim satom</string>
<string name="settings_wear_sync_devices">Dozvoljeni Wear OS uređaji</string>
<string name="settings_wear_sync_devices_summary">Upravljaj dozvoljenim uređajima za sinhronizovanje preko Bluetootha</string>
<string name="settings_wear_sync_no_devices">Nema dozvoljenih uređaja</string>
<plurals name="settings_wear_sync_devices_summary_count">
<item quantity="one"><xliff:g>%d</xliff:g> uređaj dozvoljen</item>
<item quantity="few"><xliff:g>%d</xliff:g> uređaja dozvoljena</item>
<item quantity="other"><xliff:g>%d</xliff:g> uređaja dozvoljeno</item>
</plurals>
<string name="settings_wear_sync_blocked_devices">Blokirani Wear OS uređaji</string>
<string name="settings_wear_sync_blocked_devices_summary">Upravljaj blokiranim Wear OS uređajima</string>
<string name="settings_wear_sync_no_blocked_devices">Nema blokiranih uređaja</string>
<string name="settings_wear_sync_unpair_title">Obriši uređaj?</string>
<string name="settings_wear_sync_unpair">Obriši</string>
<string name="settings_wear_sync_tap_to_remove">Dodirni uređaj da ga ukloniš.</string>
<string name="wear_bt_pairing_channel_name">Wear OS uređaj se uparuje</string>
<string name="wear_bt_pairing_title">Wear OS uređaj želi da se sinhronizuje</string>
<string name="wear_bt_pairing_allow">Dozvoli</string>
<string name="wear_bt_pairing_block">Blokiraj</string>
<string name="wear_bt_pairing_mismatch_message">Ovaj uređaj je bio prethodno autorizovan, ali sada prikazuje drugi token identiteta. Ovo se dešava kada se Wear OS aplikacija ponovno instalira ili se njeni podaci obrišu. To može takođe ukazivati na pokušaj MAC spoofinga preko Bluetootha.\n\nPrihvati samo ako si nedavno ponovno instalirao/la Catima Wear OS aplikaciju na ovaj sat.</string>
<string name="open_settings">Otvori podešavanja</string>
<string name="open_in_gallery">Otvori u galeriji slika</string>
<string name="wear_bt_notification_title">Catima Wear OS sinhronizacija aktivna</string>
<string name="settings_category_title_smartwatch">Podrška za pametni sat</string>
<string name="wear_bt_failed_foreground_notification_title">Greška pri pokretanju Wear OS servisa sinhronizacije</string>
<string name="wear_bt_critical_error_channel_name">Wear OS sinhronizacija - kritična greška</string>
</resources>
+23 -1
View File
@@ -232,7 +232,7 @@
<string name="settings_allow_content_provider_read_summary">Appar måste fortfarande begära åtkomst för att få tillgång</string>
<string name="setBarcodeHeight">Ställ in streckkodens höjd</string>
<string name="app_copyright_fmt" tools:ignore="PluralsCandidate">Kopieringsskydd © 2019<xliff:g>%d</xliff:g> Sylvia van Os och medverkande</string>
<string name="settings_allow_content_provider_read_title">Tillåt andra appar att komma åt min data</string>
<string name="settings_allow_content_provider_read_title">Synka med Gadgetbridge</string>
<string name="permissionReadCardsLabel">Läsa Catima-kort</string>
<string name="donate">Donera</string>
<string name="show_archived_cards">Visa arkiverade kort</string>
@@ -308,4 +308,26 @@
<string name="zoomBackImage">Zooma baksidesbilden</string>
<string name="show_card_id">Visa kort-ID</string>
<string name="open_in_gallery">Öppna i bildgalleriet</string>
<string name="settings_wear_sync">Synka med Wear OS</string>
<string name="wear_sync_permission_required">Catima behöver få de behörigheter du nekade appen för att kunna synka med din smarta klocka med Wear OS</string>
<string name="settings_wear_sync_devices">Tillåtna Wear OS-enheter</string>
<string name="settings_wear_sync_devices_summary">Hantera enheter som tillåts synka över Bluetooth</string>
<string name="settings_wear_sync_no_devices">Inga tillåtna enheter</string>
<plurals name="settings_wear_sync_devices_summary_count">
<item quantity="one"><xliff:g>%d</xliff:g> tillåten enhet</item>
<item quantity="other"><xliff:g>%d</xliff:g> tillåtna enheter</item>
</plurals>
<string name="settings_wear_sync_blocked_devices">Blockerade Wear OS-enheter</string>
<string name="settings_wear_sync_blocked_devices_summary">Hantera blockerade Wear OS-enheter</string>
<string name="settings_wear_sync_no_blocked_devices">Inga blockerade enheter</string>
<plurals name="settings_wear_sync_blocked_devices_summary_count">
<item quantity="one"><xliff:g>%d</xliff:g> blockerad enhet</item>
<item quantity="other"><xliff:g>%d</xliff:g> blockerade enheter</item>
</plurals>
<string name="wear_bt_pairing_allow">Tillåt</string>
<string name="wear_bt_pairing_block">Blockera</string>
<string name="wear_bt_pairing_allowed"><xliff:g>%1$s</xliff:g> tillåts nu synka.</string>
<string name="wear_bt_pairing_blocked"><xliff:g>%1$s</xliff:g> har blockerats.</string>
<string name="wear_bt_critical_error_channel_name">Kritiskt fel vid Wear OS-synkning</string>
<string name="open_settings">Öppna inställningar</string>
</resources>
+40 -2
View File
@@ -227,10 +227,10 @@
<string name="permissionReadCardsLabel">Catima kartlarını oku</string>
<string name="permissionReadCardsDescription">Catima kartlarınızı ve tüm detaylarını, notlar ve resimler de dahil olmak üzere okuyun</string>
<string name="settings_keep_screen_on_summary">Ekran zaman aşımını bir kart görüntülerken devre dışı bırakır</string>
<string name="settings_allow_content_provider_read_title">Diğer uygulamaların verilerime erişmesine izin ver</string>
<string name="settings_allow_content_provider_read_title">Gadgetbridge ile eşzamanla</string>
<string name="settings_display_barcode_max_brightness_summary">Bazı tarayıcıların çalışması için gereklidir</string>
<string name="settings_disable_lockscreen_while_viewing_card_summary">Ekran kilidini bir kart görüntülerken devre dışı bırakır</string>
<string name="settings_allow_content_provider_read_summary">Uygulamaların erişim izni almak için yine de izin istemesi gerekecek</string>
<string name="settings_allow_content_provider_read_summary">Gadgetbridge uygulamasının kartlarınızı desteklenen saatlerle eşzamanlamasına izin verir</string>
<string name="settings_category_title_general">Genel</string>
<string name="settings_category_title_privacy">Gizlilik</string>
<string name="settings_oled_dark_summary">OLED ekranlarda güç kullanımını düşürür</string>
@@ -308,4 +308,42 @@
<string name="zoomBackImage">Arka görüntüyü yakınlaştır</string>
<string name="show_card_id">Kart numarasını göster</string>
<string name="open_in_gallery">Resim galerisinde aç</string>
<string name="settings_wear_sync">Wear OS ile eşzamanla</string>
<string name="settings_wear_sync_summary">Wear OS yardımcı uygulamasının Bluetooth üzerinden kartlarınızı okumasına izin verir</string>
<string name="wear_sync_permission_required">Catima, Wear OS akıllı saatinizle eşzamanlama için reddettiğiniz izinlere ihtiyaç duyuyor</string>
<string name="settings_wear_sync_devices">İzin verilen Wear OS aygıtları</string>
<string name="settings_wear_sync_devices_summary">Bluetooth üzerinden eşzamanlanmasına izin verilen aygıtları yönetin</string>
<string name="settings_wear_sync_no_devices">İzin verilen aygıt yok</string>
<plurals name="settings_wear_sync_devices_summary_count">
<item quantity="one"><xliff:g>%d</xliff:g> aygıta izin verildi</item>
<item quantity="other"><xliff:g>%d</xliff:g> aygıta izin verildi</item>
</plurals>
<string name="settings_wear_sync_blocked_devices">Engellenen Wear OS aygıtları</string>
<string name="settings_wear_sync_blocked_devices_summary">Engellenen Wear OS aygıtlarını yönetin</string>
<string name="settings_wear_sync_no_blocked_devices">Engellenen aygıt yok</string>
<plurals name="settings_wear_sync_blocked_devices_summary_count">
<item quantity="one"><xliff:g>%d</xliff:g> aygıt engellendi</item>
<item quantity="other"><xliff:g>%d</xliff:g> aygıt engellendi</item>
</plurals>
<string name="settings_wear_sync_unpair_title">Aygıt kaldırılsın mı?</string>
<string name="settings_wear_sync_unpair_message"><xliff:g>%1$s</xliff:g> Catima\'dan kaldırılsın mı? Artık kartlarınızı eşzamanlayamayacak.</string>
<string name="settings_wear_sync_unblock_message"><xliff:g>%1$s</xliff:g> engellenen listesinden kaldırılsın mı? Tekrar erişim isteğinde bulunabilecek.</string>
<string name="settings_wear_sync_unpair">Kaldır</string>
<string name="settings_wear_sync_device_name"><xliff:g>%1$s</xliff:g> (<xliff:g>%2$s</xliff:g>)</string>
<string name="settings_wear_sync_tap_to_remove">Aygıtı kaldırmak için üzerine dokunun.</string>
<string name="wear_bt_pairing_channel_name">Wear OS aygıt eşleştirmesi</string>
<string name="wear_bt_pairing_title">Wear OS aygıtı eşzamanlamak istiyor</string>
<string name="wear_bt_pairing_message"><xliff:g>%1$s</xliff:g> için kartlarınıza erişim izni verilsin mi?</string>
<string name="wear_bt_pairing_allow">İzin ver</string>
<string name="wear_bt_pairing_block">Engelle</string>
<string name="wear_bt_pairing_allowed"><xliff:g>%1$s</xliff:g> artık eşzamanlayabilir.</string>
<string name="wear_bt_pairing_blocked"><xliff:g>%1$s</xliff:g> engellendi.</string>
<string name="wear_bt_pairing_mismatch_title"><xliff:g>%1$s</xliff:g> için yeni yetkilendirme isteği</string>
<string name="wear_bt_pairing_mismatch_message">Bu aygıt daha önce yetkilendirildi, ancak şu anda farklı bir kimlik belirteci sunuyor. Bu durum, Wear OS uygulamasının yeniden kurulması veya verilerinin silinmesi durumunda ortaya çıkar. Ayrıca, bir Bluetooth MAC sahteciliği girişimi olduğunu da gösterebilir.\n\nYalnızca bu saatte Catima Wear OS uygulamasını yakın zamanda yeniden kurduysanız kabul edin.</string>
<string name="open_settings">Ayarları</string>
<string name="wear_bt_channel_name">Wear OS yardımcısı</string>
<string name="wear_bt_notification_title">Catima Wear OS eşzamanlaması etkin</string>
<string name="settings_category_title_smartwatch">Akıllı saat desteği</string>
<string name="wear_bt_failed_foreground_notification_title">Wear OS eşzamanlama hizmeti başlatılamadı</string>
<string name="wear_bt_critical_error_channel_name">Wear OS eşzamanlaması önemli hata</string>
</resources>
+38 -2
View File
@@ -218,8 +218,8 @@
<string name="show_name_below_image_thumbnail">在图像缩略图下方显示名称</string>
<string name="show_validity">显示有效性</string>
<string name="permissionReadCardsLabel">读取 Catima 卡</string>
<string name="settings_allow_content_provider_read_summary">应用程序仍然需要请求权限</string>
<string name="settings_allow_content_provider_read_title">允许其他应用程序访问我的数据</string>
<string name="settings_allow_content_provider_read_summary">允许 Gadgetbridge 应用同步卡片到支持的手表</string>
<string name="settings_allow_content_provider_read_title">与 Gadgetbridge 同步</string>
<string name="permissionReadCardsDescription">读取你的 Catima 卡片及其所有细节,包括笔记和图像</string>
<string name="settings_keep_screen_on_summary">在查看卡片时禁止屏幕超时</string>
<string name="settings_oled_dark_summary">减少 OLED 显示屏上的电池使用量</string>
@@ -302,4 +302,40 @@
<string name="zoomBackImage">缩放反面图</string>
<string name="show_card_id">显示卡片 ID</string>
<string name="open_in_gallery">在图库中打开</string>
<string name="settings_wear_sync">与 WearOS 同步</string>
<string name="settings_wear_sync_summary">允许 WearOS 伴侣应用通过蓝牙读取你的卡片</string>
<string name="wear_sync_permission_required">Catima 需要你拒绝的权限来和你的 Wear OS 智能手表同步</string>
<string name="settings_wear_sync_devices">允许的 Wear OS 设备</string>
<string name="settings_wear_sync_devices_summary">管理允许经蓝牙同步的设备</string>
<string name="settings_wear_sync_no_devices">没有允许的设备</string>
<plurals name="settings_wear_sync_devices_summary_count">
<item quantity="other">允许了 <xliff:g>%d</xliff:g> 台设备</item>
</plurals>
<string name="settings_wear_sync_blocked_devices">阻止的 Wear OS 设备</string>
<string name="settings_wear_sync_blocked_devices_summary">管理阻止的 Wear OS 设备</string>
<string name="settings_wear_sync_no_blocked_devices">无阻止的设备</string>
<plurals name="settings_wear_sync_blocked_devices_summary_count">
<item quantity="other">阻止了 <xliff:g>%d</xliff:g> 台设备</item>
</plurals>
<string name="settings_wear_sync_unpair_title">删除设备?</string>
<string name="settings_wear_sync_unpair_message">从 Catima 删除 <xliff:g>%1$s</xliff:g> ?它将无法再和你的卡片同步。</string>
<string name="settings_wear_sync_unblock_message">从拦截列表删除 <xliff:g>%1$s</xliff:g> ?它将能再次请求访问。</string>
<string name="settings_wear_sync_unpair">删除</string>
<string name="wear_bt_pairing_mismatch_message">该设备先前已授权但现在提供了不同的身份令牌。重新安装 Wear OS 应用或应用数据被清除时可能发生这种情况。这种情况还可能表明存在蓝牙 MAC 伪造企图。\n\n除非你最近在这块手表上重新安装过 Catima Wear OS 应用,否则请不要接受。</string>
<string name="settings_wear_sync_device_name"><xliff:g>%1$s</xliff:g> (<xliff:g>%2$s</xliff:g>)</string>
<string name="settings_wear_sync_tap_to_remove">轻触设备删除。</string>
<string name="wear_bt_pairing_channel_name">Wear OS 设备配对</string>
<string name="wear_bt_pairing_title">Wear OS 设备想同步</string>
<string name="wear_bt_pairing_message">允许 <xliff:g>%1$s</xliff:g> 访问你的卡片?</string>
<string name="wear_bt_pairing_allow">允许</string>
<string name="wear_bt_pairing_block">拦截</string>
<string name="wear_bt_pairing_allowed">已允许 <xliff:g>%1$s</xliff:g> 同步。</string>
<string name="wear_bt_pairing_blocked">已拦截 <xliff:g>%1$s</xliff:g></string>
<string name="wear_bt_pairing_mismatch_title">来自 <xliff:g>%1$s</xliff:g> 的新授权请求</string>
<string name="open_settings">打开设置</string>
<string name="wear_bt_channel_name">Wear OS 伴侣</string>
<string name="wear_bt_notification_title">Catima Wear OS 同步活跃</string>
<string name="settings_category_title_smartwatch">智能手表支持</string>
<string name="wear_bt_failed_foreground_notification_title">未能启动 Wear OS 同步服务</string>
<string name="wear_bt_critical_error_channel_name">Wear OS 同步严重错误</string>
</resources>
+6 -2
View File
@@ -222,8 +222,8 @@
<string name="app_name">卡提碼</string>
<string name="permissionReadCardsDescription">讀取卡提碼卡片及卡片資訊,包含註記與圖片</string>
<string name="settings_disable_lockscreen_while_viewing_card_summary">觀看卡片時避免螢幕鎖定</string>
<string name="settings_allow_content_provider_read_summary">其他程式仍然需要取得權限</string>
<string name="settings_allow_content_provider_read_title">允許其他程式使用我的資料</string>
<string name="settings_allow_content_provider_read_summary">允許 Gadgetbridge 應用程式同步卡片到支援的手表</string>
<string name="settings_allow_content_provider_read_title">與 Gadgetbridge 同步</string>
<string name="settings_keep_screen_on_summary">觀看卡片時避免螢幕關閉</string>
<string name="balanceParsingFailed">無效餘額</string>
<string name="view_online">網站上顯示</string>
@@ -296,4 +296,8 @@
<string name="nfc_blocked_while_viewing_card">NFC 已暫停</string>
<string name="change_settings">變更設定</string>
<string name="nfc_block_system_error">暫停 NFC 失敗</string>
<string name="sort_by_most_recently_added">最近添加</string>
<string name="show_card_id">顯示卡片 ID</string>
<string name="settings_wear_sync">與 WearOS 同步</string>
<string name="settings_wear_sync_devices">允許的 Wear OS 裝置</string>
</resources>
@@ -2,16 +2,21 @@ package protect.card_locker;
import static android.os.Looper.getMainLooper;
import static org.junit.Assert.assertEquals;
import static org.junit.Assert.assertFalse;
import static org.junit.Assert.assertNotNull;
import static org.junit.Assert.assertNull;
import static org.junit.Assert.assertTrue;
import static org.robolectric.Shadows.shadowOf;
import android.app.Activity;
import android.content.ComponentName;
import android.content.Intent;
import android.content.SharedPreferences;
import android.content.res.Configuration;
import android.database.sqlite.SQLiteDatabase;
import android.graphics.Color;
import android.net.Uri;
import android.os.Looper;
import android.view.Menu;
import android.view.MenuItem;
import android.view.View;
@@ -30,17 +35,197 @@ import org.junit.runner.RunWith;
import org.robolectric.Robolectric;
import org.robolectric.RobolectricTestRunner;
import org.robolectric.android.controller.ActivityController;
import org.robolectric.annotation.LooperMode;
import org.robolectric.shadows.ShadowActivity;
import org.robolectric.shadows.ShadowContentResolver;
import org.robolectric.shadows.ShadowToast;
import java.io.FilterInputStream;
import java.io.IOException;
import java.io.InputStream;
import java.math.BigDecimal;
import java.nio.charset.StandardCharsets;
import java.util.ArrayList;
import java.util.List;
import java.util.concurrent.CountDownLatch;
import java.util.concurrent.TimeUnit;
import java.util.concurrent.atomic.AtomicReference;
import java.util.function.BooleanSupplier;
@RunWith(RobolectricTestRunner.class)
public class MainActivityTest {
private SharedPreferences prefs;
@Test
@LooperMode(LooperMode.Mode.PAUSED)
public void pkpassSharedIntentReadsOffMainThreadAndProcessesOnMainThread() throws Exception {
Uri uri = Uri.parse("content://test/cloud-backed.pkpass");
CountDownLatch readStarted = new CountDownLatch(1);
CountDownLatch streamClosed = new CountDownLatch(1);
AtomicReference<Looper> readLooper = new AtomicReference<>();
InputStream pkpass = getClass().getResourceAsStream(
"pkpass/DCBLN24/DCBLN24-QLUKT-1-passbook.pkpass");
assertNotNull(pkpass);
new ShadowContentResolver().registerInputStream(
uri, new RecordingInputStream(pkpass, readStarted, streamClosed, readLooper));
Intent intent = new Intent(Intent.ACTION_VIEW)
.setDataAndType(uri, "application/vnd.apple.pkpass");
ActivityController<MainActivity> controller =
Robolectric.buildActivity(MainActivity.class, intent).create().start().resume().visible();
MainActivity activity = controller.get();
// Do NOT idle the main looper here: the read runs on a real background
// thread, so the latch fires without it, and idling would run the
// main-thread continuation and defeat the ordering assertion below.
assertTrue(readStarted.await(5, TimeUnit.SECONDS));
// The read must not happen on the main looper. This is the property the
// fix is about; it is asserted directly rather than inferred from
// ordering. Robolectric drains the main looper during .visible(), so by
// the time the test regains control the whole import has already run to
// completion and there is no observable in-between state to assert on.
assertTrue(readLooper.get() != getMainLooper());
assertTrue(streamClosed.await(5, TimeUnit.SECONDS));
waitFor(() -> shadowOf(activity).peekNextStartedActivity() != null);
Intent editIntent = shadowOf(activity).getNextStartedActivity();
assertEquals(LoyaltyCardEditActivity.class.getName(), editIntent.getComponent().getClassName());
assertNotNull(editIntent.getExtras());
controller.destroy();
}
@Test
@LooperMode(LooperMode.Mode.PAUSED)
public void destroyingActivityCancelsPendingPkpassResult() throws Exception {
Uri uri = Uri.parse("content://test/pending-cloud-backed.pkpass");
CountDownLatch readStarted = new CountDownLatch(1);
CountDownLatch releaseRead = new CountDownLatch(1);
CountDownLatch streamClosed = new CountDownLatch(1);
InputStream pkpass = getClass().getResourceAsStream(
"pkpass/DCBLN24/DCBLN24-QLUKT-1-passbook.pkpass");
assertNotNull(pkpass);
new ShadowContentResolver().registerInputStream(
uri, new BlockingInputStream(pkpass, readStarted, releaseRead, streamClosed));
Intent intent = new Intent(Intent.ACTION_VIEW)
.setDataAndType(uri, "application/vnd.apple.pkpass");
ActivityController<MainActivity> controller =
Robolectric.buildActivity(MainActivity.class, intent).create().start().resume();
MainActivity activity = controller.get();
waitFor(() -> readStarted.getCount() == 0);
controller.destroy();
releaseRead.countDown();
assertTrue(streamClosed.await(5, TimeUnit.SECONDS));
shadowOf(getMainLooper()).idle();
assertNull(shadowOf(activity).peekNextStartedActivity());
assertFalse(ShadowToast.showedToast(activity.getString(R.string.errorReadingFile)));
}
private static void waitFor(BooleanSupplier condition) throws Exception {
long deadline = System.nanoTime() + TimeUnit.SECONDS.toNanos(5);
while (!condition.getAsBoolean() && System.nanoTime() < deadline) {
shadowOf(getMainLooper()).idle();
Thread.sleep(10);
}
shadowOf(getMainLooper()).idle();
assertTrue("Timed out waiting for asynchronous activity work", condition.getAsBoolean());
}
private static class RecordingInputStream extends FilterInputStream {
private final CountDownLatch readStarted;
private final CountDownLatch streamClosed;
private final AtomicReference<Looper> readLooper;
RecordingInputStream(
InputStream inputStream,
CountDownLatch readStarted,
CountDownLatch streamClosed,
AtomicReference<Looper> readLooper) {
super(inputStream);
this.readStarted = readStarted;
this.streamClosed = streamClosed;
this.readLooper = readLooper;
}
private void recordRead() {
readLooper.compareAndSet(null, Looper.myLooper());
readStarted.countDown();
}
@Override
public int read() throws IOException {
recordRead();
return super.read();
}
@Override
public int read(byte[] buffer, int offset, int length) throws IOException {
recordRead();
return super.read(buffer, offset, length);
}
@Override
public void close() throws IOException {
try {
super.close();
} finally {
streamClosed.countDown();
}
}
}
private static class BlockingInputStream extends FilterInputStream {
private final CountDownLatch readStarted;
private final CountDownLatch releaseRead;
private final CountDownLatch streamClosed;
BlockingInputStream(
InputStream inputStream,
CountDownLatch readStarted,
CountDownLatch releaseRead,
CountDownLatch streamClosed) {
super(inputStream);
this.readStarted = readStarted;
this.releaseRead = releaseRead;
this.streamClosed = streamClosed;
}
private void awaitRelease() throws IOException {
readStarted.countDown();
try {
if (!releaseRead.await(5, TimeUnit.SECONDS)) {
throw new IOException("Timed out waiting to release provider stream");
}
} catch (InterruptedException exception) {
Thread.currentThread().interrupt();
throw new IOException(exception);
}
}
@Override
public int read() throws IOException {
awaitRelease();
return super.read();
}
@Override
public int read(byte[] buffer, int offset, int length) throws IOException {
awaitRelease();
return super.read(buffer, offset, length);
}
@Override
public void close() throws IOException {
try {
super.close();
} finally {
streamClosed.countDown();
}
}
}
@Test
public void initiallyNoLoyaltyCards() {
Activity activity = Robolectric.setupActivity(MainActivity.class);
@@ -0,0 +1,225 @@
package protect.card_locker
import android.app.Activity
import android.content.Intent
import android.net.Uri
import android.os.Looper
import org.junit.Assert.assertEquals
import org.junit.Assert.assertFalse
import org.junit.Assert.assertNotNull
import org.junit.Assert.assertTrue
import org.junit.Before
import org.junit.Test
import org.junit.runner.RunWith
import org.robolectric.Robolectric
import org.robolectric.RobolectricTestRunner
import org.robolectric.Shadows.shadowOf
import org.robolectric.android.controller.ActivityController
import org.robolectric.annotation.LooperMode
import org.robolectric.shadows.ShadowContentResolver
import org.robolectric.shadows.ShadowToast
import java.io.FilterInputStream
import java.io.IOException
import java.io.InputStream
import java.util.concurrent.CountDownLatch
import java.util.concurrent.TimeUnit
import java.util.concurrent.atomic.AtomicReference
@RunWith(RobolectricTestRunner::class)
@LooperMode(LooperMode.Mode.PAUSED)
class ScanActivityTest {
@Before
fun setUp() {
ShadowToast.reset()
}
@Test
fun pkpassPickerReadsOffMainThreadAndReturnsResultOnMainThread() {
val uri = Uri.parse("content://test/picker-cloud-backed.pkpass")
val readStarted = CountDownLatch(1)
val streamClosed = CountDownLatch(1)
val readLooper = AtomicReference<Looper>()
val pkpass = javaClass.getResourceAsStream(
"pkpass/DCBLN24/DCBLN24-QLUKT-1-passbook.pkpass"
)
assertNotNull(pkpass)
ShadowContentResolver().registerInputStream(
uri,
RecordingInputStream(pkpass, readStarted, streamClosed, readLooper)
)
val controller = createActivity()
val activity = controller.get()
handlePkpassResult(activity, Intent().setData(uri))
assertTrue(readStarted.await(5, TimeUnit.SECONDS))
// The read must not happen on the main looper. Asserted directly rather
// than inferred from an intermediate result code: waiting on the main
// looper drains it, so the flow has already reached its final state by
// the time the test regains control.
assertTrue(readLooper.get() !== Looper.getMainLooper())
assertTrue(streamClosed.await(5, TimeUnit.SECONDS))
waitFor { shadowOf(activity).resultCode == Activity.RESULT_OK }
assertNotNull(shadowOf(activity).resultIntent)
assertTrue(activity.isFinishing)
controller.destroy()
}
@Test
fun providerFailureShowsOneErrorAndReenablesScanner() {
val uri = Uri.parse("content://test/unavailable-cloud-backed.pkpass")
ShadowContentResolver().registerInputStream(uri, FailingInputStream())
val controller = createActivity()
val activity = controller.get()
setScannerActive(activity, false)
val initialToastCount = ShadowToast.shownToastCount()
handlePkpassResult(activity, Intent().setData(uri))
waitFor { ShadowToast.shownToastCount() > initialToastCount }
assertEquals(initialToastCount + 1, ShadowToast.shownToastCount())
assertEquals(activity.getString(R.string.errorReadingFile), ShadowToast.getTextOfLatestToast())
assertTrue(isScannerActive(activity))
assertFalse(activity.isFinishing)
controller.destroy()
}
@Test
fun destroyingActivityCancelsPendingPkpassResult() {
val uri = Uri.parse("content://test/pending-picker-cloud-backed.pkpass")
val readStarted = CountDownLatch(1)
val releaseRead = CountDownLatch(1)
val streamClosed = CountDownLatch(1)
val pkpass = javaClass.getResourceAsStream(
"pkpass/DCBLN24/DCBLN24-QLUKT-1-passbook.pkpass"
)
assertNotNull(pkpass)
ShadowContentResolver().registerInputStream(
uri,
BlockingInputStream(pkpass, readStarted, releaseRead, streamClosed)
)
val controller = createActivity()
val activity = controller.get()
handlePkpassResult(activity, Intent().setData(uri))
waitFor { readStarted.count == 0L }
controller.destroy()
releaseRead.countDown()
assertTrue(streamClosed.await(5, TimeUnit.SECONDS))
shadowOf(Looper.getMainLooper()).idle()
assertEquals(Activity.RESULT_CANCELED, shadowOf(activity).resultCode)
assertFalse(ShadowToast.showedToast(activity.getString(R.string.errorReadingFile)))
}
private fun createActivity(): ActivityController<ScanActivity> =
Robolectric.buildActivity(ScanActivity::class.java).create().start().resume().visible()
private fun handlePkpassResult(activity: ScanActivity, intent: Intent) {
ScanActivity::class.java.getDeclaredMethod(
"handleActivityResult",
Int::class.javaPrimitiveType,
Int::class.javaPrimitiveType,
Intent::class.java
).apply { isAccessible = true }.invoke(
activity,
Utils.BARCODE_IMPORT_FROM_PKPASS_FILE,
Activity.RESULT_OK,
intent
)
}
private fun setScannerActive(activity: ScanActivity, active: Boolean) {
ScanActivity::class.java.getDeclaredMethod(
"setScannerActive",
Boolean::class.javaPrimitiveType
).apply { isAccessible = true }.invoke(activity, active)
}
private fun isScannerActive(activity: ScanActivity): Boolean =
ScanActivity::class.java.getDeclaredField("mScannerActive")
.apply { isAccessible = true }
.getBoolean(activity)
private fun waitFor(condition: () -> Boolean) {
val deadline = System.nanoTime() + TimeUnit.SECONDS.toNanos(5)
while (!condition() && System.nanoTime() < deadline) {
shadowOf(Looper.getMainLooper()).idle()
Thread.sleep(10)
}
shadowOf(Looper.getMainLooper()).idle()
assertTrue("Timed out waiting for asynchronous activity work", condition())
}
private class RecordingInputStream(
inputStream: InputStream,
private val readStarted: CountDownLatch,
private val streamClosed: CountDownLatch,
private val readLooper: AtomicReference<Looper>
) : FilterInputStream(inputStream) {
private fun recordRead() {
readLooper.compareAndSet(null, Looper.myLooper())
readStarted.countDown()
}
override fun read(): Int {
recordRead()
return super.read()
}
override fun read(buffer: ByteArray, offset: Int, length: Int): Int {
recordRead()
return super.read(buffer, offset, length)
}
override fun close() {
try {
super.close()
} finally {
streamClosed.countDown()
}
}
}
private class BlockingInputStream(
inputStream: InputStream,
private val readStarted: CountDownLatch,
private val releaseRead: CountDownLatch,
private val streamClosed: CountDownLatch
) : FilterInputStream(inputStream) {
private fun awaitRelease() {
readStarted.countDown()
try {
if (!releaseRead.await(5, TimeUnit.SECONDS)) {
throw IOException("Timed out waiting to release provider stream")
}
} catch (exception: InterruptedException) {
Thread.currentThread().interrupt()
throw IOException(exception)
}
}
override fun read(): Int {
awaitRelease()
return super.read()
}
override fun read(buffer: ByteArray, offset: Int, length: Int): Int {
awaitRelease()
return super.read(buffer, offset, length)
}
override fun close() {
try {
super.close()
} finally {
streamClosed.countDown()
}
}
}
private class FailingInputStream : InputStream() {
override fun read(): Int = throw IOException("Remote provider unavailable")
}
}
+15 -2
View File
@@ -1,8 +1,9 @@
# Catima
Copylefted libre software (GPLv3+) card management app.
Copylefted libre software (GPLv3+) card management app for Android 6.0 and up.
[![GitHub Version](https://img.shields.io/github/v/release/CatimaLoyalty/Android.svg?logo=github&label=GitHub)](https://github.com/CatimaLoyalty/Android/releases)
[![GitHub Version](https://img.shields.io/github/v/release/CatimaLoyalty/Android.svg?logo=github&label=GitHub&filter=!*-wearos)](https://github.com/CatimaLoyalty/Android/releases)
[![GitHub Wear OS Version](https://img.shields.io/github/v/release/CatimaLoyalty/Android.svg?logo=github&label=GitHub%20(Wear%20OS)&filter=*-wearos)](https://github.com/CatimaLoyalty/Android/releases)
[![IzzyOnDroid Version](https://img.shields.io/endpoint?url=https://apt.izzysoft.de/fdroid/api/v1/shield/me.hackerchick.catima)](https://apt.izzysoft.de/fdroid/index/apk/me.hackerchick.catima)
[![F-Droid Version](https://img.shields.io/f-droid/v/me.hackerchick.catima.svg?logo=f-droid&label=F-Droid)](https://f-droid.org/packages/me.hackerchick.catima/)
[![Google Play Store Version](https://img.shields.io/endpoint?color=blue&logo=google-play&url=https%3A%2F%2Fplay.cuzi.workers.dev%2Fplay%3Fi%3Dme.hackerchick.catima%26l%3DGoogle%2520Play%26m%3D%24version)](https://play.google.com/store/apps/details?id=me.hackerchick.catima)
@@ -18,6 +19,8 @@ Copylefted libre software (GPLv3+) card management app.
<img src="https://gitlab.com/IzzyOnDroid/repo/-/raw/master/assets/IzzyOnDroid.png" alt="Get it on IzzyOnDroid" height="90"/></a>
<a href="https://f-droid.org/repository/browse/?fdid=me.hackerchick.catima" target="_blank">
<img src="https://fdroid.gitlab.io/artwork/badge/get-it-on.png" alt="Get it on F-Droid" height="90"/></a>
<a href="https://apps.obtainium.imranr.dev/redirect?r=obtainium://app/%7B%22id%22%3A%22me.hackerchick.catima%22%2C%22url%22%3A%22https%3A%2F%2Fgithub.com%2FCatimaLoyalty%2FAndroid%22%2C%22author%22%3A%22CatimaLoyalty%22%2C%22name%22%3A%22Catima%22%2C%22preferredApkIndex%22%3A0%2C%22additionalSettings%22%3A%22%7B%5C%22includePrereleases%5C%22%3Afalse%2C%5C%22fallbackToOlderReleases%5C%22%3Atrue%2C%5C%22filterReleaseTitlesByRegEx%5C%22%3A%5C%22%5E((%3F!.*Wear.*).)*%24%5C%22%2C%5C%22filterReleaseNotesByRegEx%5C%22%3A%5C%22%5C%22%2C%5C%22verifyLatestTag%5C%22%3Afalse%2C%5C%22sortMethodChoice%5C%22%3A%5C%22smartname%5C%22%2C%5C%22useLatestAssetDateAsReleaseDate%5C%22%3Afalse%2C%5C%22releaseTitleAsVersion%5C%22%3Atrue%2C%5C%22trackOnly%5C%22%3Afalse%2C%5C%22versionExtractionRegEx%5C%22%3A%5C%22%5C%22%2C%5C%22matchGroupToUse%5C%22%3A%5C%22%5C%22%2C%5C%22versionDetection%5C%22%3Atrue%2C%5C%22releaseDateAsVersion%5C%22%3Afalse%2C%5C%22useVersionCodeAsOSVersion%5C%22%3Afalse%2C%5C%22apkFilterRegEx%5C%22%3A%5C%22%5C%22%2C%5C%22invertAPKFilter%5C%22%3Afalse%2C%5C%22autoApkFilterByArch%5C%22%3Atrue%2C%5C%22minimumUpdateAgeDays%5C%22%3A%5C%22%5C%22%2C%5C%22appName%5C%22%3A%5C%22%5C%22%2C%5C%22appAuthor%5C%22%3A%5C%22Sylvia%20van%20Os%5C%22%2C%5C%22shizukuPretendToBeGooglePlay%5C%22%3Afalse%2C%5C%22allowInsecure%5C%22%3Afalse%2C%5C%22exemptFromBackgroundUpdates%5C%22%3Afalse%2C%5C%22skipUpdateNotifications%5C%22%3Afalse%2C%5C%22about%5C%22%3A%5C%22%5C%22%2C%5C%22refreshBeforeDownload%5C%22%3Afalse%2C%5C%22includeZips%5C%22%3Afalse%2C%5C%22zippedApkFilterRegEx%5C%22%3A%5C%22%5C%22%2C%5C%22includeTarballs%5C%22%3Afalse%2C%5C%22tarballedApkFilterRegEx%5C%22%3A%5C%22%5C%22%7D%22%2C%22overrideSource%22%3Anull%7D" target="_blank">
<img src="https://github.com/user-attachments/assets/713d71c5-3dec-4ec4-a3f2-8d28d025a9c6" alt="Get it on Obtainium" height="90"/></a>
<a href="https://play.google.com/store/apps/details?id=me.hackerchick.catima" target="_blank">
<img src="https://play.google.com/intl/en_us/badges/images/generic/en-play-badge.png" alt="Get it on Google Play" height="90"/></a>
@@ -41,8 +44,12 @@ Supported barcodes:
- UPC_A
- UPC_E
Works fully offline, supports pkpass ("Add to Apple Wallet") files and select smartwatches through [Gadgetbridge](https://gadgetbridge.org/basics/integrations/cards/) and Wear OS companion app.
# Screenshots
## Core app
[<img src="https://github.com/CatimaLoyalty/Android/raw/main/fastlane/metadata/android/en-US/images/phoneScreenshots/screenshot-01.png" width=250>](https://github.com/CatimaLoyalty/Android/raw/main/fastlane/metadata/android/en-US/images/phoneScreenshots/screenshot-01.png)
[<img src="https://github.com/CatimaLoyalty/Android/raw/main/fastlane/metadata/android/en-US/images/phoneScreenshots/screenshot-02.png" width=250>](https://github.com/CatimaLoyalty/Android/raw/main/fastlane/metadata/android/en-US/images/phoneScreenshots/screenshot-02.png)
[<img src="https://github.com/CatimaLoyalty/Android/raw/main/fastlane/metadata/android/en-US/images/phoneScreenshots/screenshot-03.png" width=250>](https://github.com/CatimaLoyalty/Android/raw/main/fastlane/metadata/android/en-US/images/phoneScreenshots/screenshot-03.png)
@@ -52,6 +59,12 @@ Supported barcodes:
[<img src="https://github.com/CatimaLoyalty/Android/raw/main/fastlane/metadata/android/en-US/images/phoneScreenshots/screenshot-07.png" width=250>](https://github.com/CatimaLoyalty/Android/raw/main/fastlane/metadata/android/en-US/images/phoneScreenshots/screenshot-07.png)
[<img src="https://github.com/CatimaLoyalty/Android/raw/main/fastlane/metadata/android/en-US/images/phoneScreenshots/screenshot-08.png" width=250>](https://github.com/CatimaLoyalty/Android/raw/main/fastlane/metadata/android/en-US/images/phoneScreenshots/screenshot-08.png)
## Wear OS companion app
[<img src="https://github.com/CatimaLoyalty/Android/raw/main/fastlane/metadata/android/en-US/images/wearScreenshots/screenshot-01.png" width=250>](https://github.com/CatimaLoyalty/Android/raw/main/fastlane/metadata/android/en-US/images/wearScreenshots/screenshot-01.png)
[<img src="https://github.com/CatimaLoyalty/Android/raw/main/fastlane/metadata/android/en-US/images/wearScreenshots/screenshot-02.png" width=250>](https://github.com/CatimaLoyalty/Android/raw/main/fastlane/metadata/android/en-US/images/wearScreenshots/screenshot-02.png)
[<img src="https://github.com/CatimaLoyalty/Android/raw/main/fastlane/metadata/android/en-US/images/wearScreenshots/screenshot-03.png" width=250>](https://github.com/CatimaLoyalty/Android/raw/main/fastlane/metadata/android/en-US/images/wearScreenshots/screenshot-03.png)
# Moving data from other apps
Within the app you can import cards and codes from files, Catima, FidMe, Loyalty Card Keychain and Voucher Vault.
@@ -1,22 +1,25 @@
توقف عن بحثك لبطاقات المكافآت البلاستيكية عندما تخرج من المتجر أو تطبيق التسوق.
<b> امسح الباركود ضوئيًا إلى جهازك باستخدام الكاميرا ، وتجاهل تلك البطاقات الفعلية. </b>
توقف عن البحث عن بطاقات المكافآت البلاستيكية عند الدفع في المتجر أو على المتجر الإلكتروني.
<b>امسح الباركود إلى جهازك باستخدام الكاميرا، وانسَ البطاقات.</b>
انس محفظتك ، أو اجعلها خفيفة للغايةلتحفظ أغراضك الثمينة
انسَ محفظتك، أو احتفظ بها خفيفة جدًا للأغراض الثمينة.
باستخدام أداة الحمل اليومية الأساسية، يمكنك استبدال البلاستيك عديم الفائدة بالنقود.
مع هذه الأداة الأساسية للحمل اليومي (EDC) يمكنك استبدال البلاستيك عديم الفائدة بالنقد.
- يتميز بأذونات قليلة جدًا. لا اتصال بالإنترنت ولا إعلانات!
- أضف بطاقات أو أكواد بأسماء وألوان على ذوقك
- عندما لا يوجد رمز باركود، يمكنك إدخال الرمز يدويا ، أو لا يمكن استخدامه.
- استورد البطاقات والأكواد من الملفات، Stocard, Loyalty Card Keychain, FidMe, Catima و Voucher Vault.
- احم بياناتك من الضياع باستخدام نسخة احتياطية لجميع بطاقاتك وإذا أردت يمكنك نقلها إلى جهاز جديد.
- شارك القسائم والعروض الحصرية والرموز الترويجية أو البطاقات والرموز في أي تطبيق
- المظهر الداكن وخيارات إمكانية الوصول للمستخدمين ضعاف البصر.
- مصنوع للجميع من مطورين لبرامج مفتوحة المصدر!
- مترجم لأكثر من 20 لغة.
- مجاني بالكامل، بدعم من مساهمات المجتمع.
- استخدمها وادرسها وقم بتغييرها وشاركها كما يحلو لك ؛ <i> مع الجميع </i>.
- التطبيق ليس فقط مفتوح المصدر. بل إدارة بطاقات <i>متروكة الحقوق</i> البرمجيات الحرة (+GPLv3).
- تجنب التجسس مع أذونات قليلة جدًا. لا يوجد اتصال بالإنترنت ولا إعلانات.
- أضف البطاقات أو الأكواد مع الأسماء والألوان القابلة للتخصيص.
- إدخال الكود يدويًا إذا لم يكن هناك باركود لتخزينه، أو لا يمكن استخدامه.
- استيراد البطاقات والأكواد من الملفات، Catima، FidMe، سلسلة مفاتيح بطاقة الولاء وVoucher Vault.
- قم بعمل نسخة احتياطية لجميع بطاقاتك وانقلها إلى جهاز جديد إذا رغبت.
- شارك القسائم، العروض الحصرية، أكواد الترويج، أو البطاقات والأكواد باستخدام أي تطبيق.
- المزامنة مع الساعات الذكية المدعومة من Gadgetbridge أو Wear OS.
- الوضع الداكن وخيارات الوصول لمستخدمي ضعف البصر.
- مصمم للجميع من قبل مجتمع البرمجيات الحرة.
- ترجمات محلية مصنوعة يدوياً لأكثر من 40 لغة.
- مجانية، مدعومة بمساهمات المجتمع.
- استخدمها، ادرسها، عدلها وشاركها كما تشاء؛ <i>مع كل شيء</i>.
بسط حياتك وتجربة تسوقك ، ولا تخف من فقدان الإيصال الورقي أو بطاقة هدايا الدفع في المتجر أو تذكرة الطائرة مرة أخرى!
احفظ كل مكافآتك وهداياك معك أينما ذهبت.
- ليست فقط برامج مجانية / مفتوحة المصدر. إدارة بطاقات برامج <i>مفتوحة الحقوق</i> (GPLv3+).
بسّط حياتك وتسوقك، ولا تفقد أبداً إيصال ورقي، بطاقة هدايا للدفع في المتجر أو تذكرة طائرة.
خذ كل مكافآتك وبونصاتك معك، وتقدم.
@@ -0,0 +1,2 @@
- Přidán Bluetooth server pro podporu doprovodných aplikací Wear OS
- Odstraněn vložený CHANGELOG (seznam změn)
@@ -0,0 +1 @@
- Opravena neaktualizace seznamu widgetu při otevření karty z něj
@@ -0,0 +1 @@
- Prvotní vydání doprovodné aplikace Wear OS
@@ -0,0 +1,4 @@
- Přidán posuvník na seznam karet
- Přidána úvodní obrazovka
- Opraveny problémy s odsazením
- Odstraněna hodnota čárového kódu ze zobrazení karty
@@ -11,6 +11,7 @@ S tímto nezbytným nástrojem pro každodenní nošení (EDC) můžete nahradi
- Import karet a kódů ze souborů a aplikací Catima, FidMe, Loyalty Card Keychain a Voucher Vault.
- Vytvořte si zálohu všech karet a v případě potřeby je přeneste do nového zařízení.
- Sdílejte kupony, exkluzivní nabídky, propagační kódy nebo karty a kódy pomocí libovolné aplikace.
- Synchronizujte s podporovanými chytrými hodinkami Gadgetbridge nebo Wear OS.
- Tmavý motiv a možnosti zpřístupnění pro uživatele se zrakovým postižením.
- Vytvořeno pro všechny komunitou svobodného softwaru.
- Lokalizované ručně prováděné překlady pro více než 40 jazyků.
@@ -0,0 +1,2 @@
- Bluetooth Server zur Unterstützung der Wear OS Begleit-App hinzugefügt
- Eingebettete Änderungen entfernt
@@ -0,0 +1 @@
- Fehler behoben, bei welchem das Listen-Widget nicht aktualisiert, wenn eine Karte von dort geöffnet wird
@@ -0,0 +1 @@
- Erste Version der Wear OS Begleit-App
@@ -0,0 +1,4 @@
- Bildlaufleiste zur Kartenliste hinzugefügt
- Startbildschirm hinzugefügt
- Einige Probleme mit den Abständen zum Bildschirmrand behoben
- Barcode vorübergehend aus der Kartenansicht entfernt
@@ -11,6 +11,7 @@ Mit diesem unverzichtbaren Programm schaffst du Platz für Bargeld statt für nu
- Importiere Karten und Codes aus Dateien, von Catima, FidMe, Loyalty Card Keychain und Voucher Vault.
- Erstelle ein Backup aller deiner Karten und übertrage diese auf ein neues Gerät.
- Teile Gutscheine, exklusive Angebote, Werbeaktionscodes oder Karten und sonstige Codes mit allen Apps.
- Synchronisiere mit der unterstützten Gadgetbrigde oder Wear OS Smartuhren
- Dunkles Design und Barrierefreiheit für Nutzer mit Sehbehinderung.
- Von der Freien-Software-Gemeinschaft für alle Menschen gemacht.
- Lokalisierte, menschliche Übersetzungen für mehr als 40 Sprachen.
@@ -0,0 +1,2 @@
- Fix list widget not updating when opening a card from it
- Fix opening pkpass/pdf files from network locations sometimes failing
@@ -0,0 +1,4 @@
- Add scroll bar to card list
- Add splash screen
- Fix some padding issues
- Remove barcode value from card view
Binary file not shown.

Before

Width:  |  Height:  |  Size: 19 KiB

After

Width:  |  Height:  |  Size: 16 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 23 KiB

After

Width:  |  Height:  |  Size: 20 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 8.9 KiB

After

Width:  |  Height:  |  Size: 7.9 KiB

@@ -0,0 +1,2 @@
- väiksemad veaparandused
- norra keele tõlke kasutamisel ei jookse rakendus enam kokku
@@ -0,0 +1 @@
- Stocardi importimise parandused
@@ -0,0 +1,3 @@
- „Arhiveerimisviis“ on nüüd menüüvalikus „Ekraanieadistused“ (varem „Näita üksikasju“)
- lisandus Android 13 rakendusekohane keeletugi
- lisandusid rakendusse lõimitud andmekaitsepõhimõtted, muudatuste logi ja litsentsiteave
@@ -0,0 +1,2 @@
- Ajout d'un serveur Bluetooth pour le support de l'appli compagnon Wear OS
- Suppression du journal interne des changements
@@ -0,0 +1 @@
- Correction du widget de liste qui ne se met pas à jour lorsqu'on ouvre une carte depuis celui-ci
@@ -0,0 +1 @@
- Sortie initiale de l'appli compagnon Wear OS
@@ -0,0 +1,4 @@
- Ajout d'une barre de défilement dans la liste des cartes
- Ajout d'un écran de démarrage
- Correction de quelques soucis sur les marges
- Suppression de la valeur du code-barres dans la vue des cartes
@@ -11,6 +11,7 @@ Avec cet outil essentiel à emporter au quotidien, vous pouvez remplacer le plas
- Importez des cartes et des codes depuis des fichiers, Catima, FidMe, Loyalty Card Keychain et Voucher Vault.
- Faites une sauvegarde de toutes vos cartes et transférez-les sur un nouvel appareil si vous le souhaitez.
- Partagez des coupons, des offres exclusives, des codes promotionnels ou des cartes et des codes en utilisant n'importe quelle application.
- Synchroniser avec des montres connectées Gadgetbridge prises en charge ou Wear OS.
- Thème sombre et options d'accessibilité pour les utilisateurs malvoyants.
- Fait pour tout le monde par la communauté des logiciels libres.
- Traductions artisanales localisées pour plus de 40 langues.
@@ -0,0 +1,2 @@
- Wear OS のコンパニオンアプリにへ対応するため Bluetooth サーバーを追加
- 組込みの CHANGELOG を削除
@@ -0,0 +1 @@
- カードをリストウィジェットから開いた場合にリストが更新されない問題を修正しました
@@ -0,0 +1 @@
- Wear OS コンパニオンアプリの初回リリース
@@ -0,0 +1,4 @@
- スクロールばーをカード一覧に追加
- スプラッシュ画面を追加
- パディングに関する幾つかの問題を修正
- カード表示からバーコードの値を削除
@@ -11,6 +11,7 @@
- ファイル、Catima、FidMe、Loyalty Card Keychain、Voucher Vaultからカード・コードをインポートできます。
- 全カードのバックアップを作成し、必要に応じて新しいデバイスに転送できます。
- クーポン、限定オファー、プロモーションコード、またはカードやコードを、任意のアプリを使って共有できます。
- 対応する Gadgetbridge や Wear OS 搭載のスマートウォッチとの同期。
- 視覚障害者向けのダークテーマ・アクセシビリティオプション。
- 自由ソフトウェアコミュニティによって、全ての人々のために作られました。
- 手作業による40以上の言語に対応したローカライズ。
@@ -0,0 +1,2 @@
- Pievienots Bluetooth serveris Wear OS palīglietotnes atbalstam
- Noņemts iegultais CHANGELOG
@@ -0,0 +1,3 @@
- Salabota izskata krāsas neizmantošanas apcirpējā
- Salabotas sīkas izskata nepilnības
- Pievienots pilnīgi melns izskats OLED ekrāniem
@@ -0,0 +1,2 @@
- Dažādi sīki labojumi
- Novērsta avārija, kad tiek izmantots norvēģu tulkojums
@@ -1 +1,2 @@
- Automātiska URL noteikšana karšu identifikatora un to padarīšana par klikšķināmiem kartes identifikatora informācijas uznirstošajā logā
- Automātiska URL noteikšana karšu ID un to padarīšana par klikšķināmiem kartes ID informācijas uznirstošajā logā
- Salabota baltu kvadrātu rādīšanās svītrkoda vietā atlasītāja darbībā
@@ -1,3 +1,4 @@
Sākot ar šo laidienu Android 5.0 un 5.1 vairs netiek atbalstīts. Ja ir vēlēšanās izmantot Catima ar šīm versijām, lūgums izmantot Catima 2.41.6.
- Novērsta avārija, kad pārslēdzas starp kartēm ar skaļuma kartēm, ja ir pieejama tikai viena karte
- Salabots īsceļš, kas atgriež uz iepriekšējo karti pēc pagriešanas
@@ -0,0 +1 @@
- Sākotnējais Wear OS palīglietotnes laidiens
@@ -0,0 +1,23 @@
Pārstāj meklēt plastmasas klienšu kartes pie veikalu vai tīmekļveikalu kasēm!
<b>Ielasi svītrkodus savā ierīcē ar tās kameru un aizmirsti par kartēm!</b>
Aizmirsti par savu maku vai turi tajā tikai vērtīgo!
Ar šo būtisko ikdienas līdzņemamo rīku Tu vari aizvietot bezjēdzīgo plastmasu ar naudu.
- Izvairīšanās no spiegošanas ar ļoti nelielu atļauju daudzumu. Bez piekļuves internetam un reklāmām.
- Karšu vai kodu pievienošana ar nosaukumiem un pielāgojamām krāsām.
- Pašrocīga koda ievade, ja nav svītrkoda, ko glabāt, vai tas nav izmantojams.
- Karšu un kodu ievietošana no datnēm, Catima, FidMe, Loyalty Card Keychain un Voucher Vault.
- Visu karšu dublējumu veikšana un pārcelšana uz jaunu ierīci, ja ir vēlēšanās vai vajadzība.
- Kuponu kopīgošana, īpaši piedāvājumi, piesaistīšanas kodi vai kartes un kodi ar jebkuru lietotni.
- Vienādošana ar atbalstītiem Gadgetbridge vai Wear OS viedpulksteņiem.
- Tumšs izskats un piekļūstamības iespējas lietotājiem ar sliktu redzi.
- Brīvas programmatūras kopienas veidota ikvienam.
- Cilvēku veidoti tulkojumi 40+ valodās.
- Bez maksas, uzturēta ar kopienas līdzdalību.
- Izmantošana, izpētīšana un kopīgošana pēc saviem ieskatiem; <i>ar visiem</i>.
- Ne tikai brīva programmatūra / atvērta pirmkoda. <i>Ar tādiem pašiem nosacījumiem izplatāma (Copylefted)</i> brīvas programmatūras (GPLv3+) karšu pārvaldība.
Dzīves un iepirkšanās vienkāršošana, vairs nekādas papīra čeku, veikalā izmantojamu dāvanu karšu vai lidmašīnu biļešu pazaudēšanas.
Visu atlīdzību papildlabumu ņemšana sev līdzi un saglabāšana kustībā.
@@ -0,0 +1,2 @@
- Bluetooth-server toegevoegd voor ondersteuning van de Wear OS companion app
- Ingesloten CHANGELOG verwijderd
@@ -0,0 +1 @@
- Opgelost dat de lijstwidget niet update als er een kaart door geopend wordt
@@ -1,4 +1,4 @@
Adroid 5.0 en 5.1 zijn vanaf deze uitgave niet meer ondersteund. Als u Catima wilt gebruiken op deze versies, gebruik alstublieft versie 2.41.6.
Adroid 5.0 en 5.1 zijn vanaf deze uitgave niet meer ondersteund. Als je Catima wilt gebruiken op deze versies, gebruik alstublieft versie 2.41.6.
- Crash als kaarten gewisseld worden met de volumeknop maar er slechts één kaart beschikbaar is opgelost
- Opgelost dat een snelkoppeling terukeert op de vorige kaart na rotatie
@@ -0,0 +1 @@
- Eerste release van Wear OS companion app
@@ -0,0 +1,4 @@
- Scrollbalk toegevoegd aan kaartenlijst
- Welkomstscherm toegevoegd
- Enkele problemen met afstanden tot beeldschermrand opgelost
- Barcodewaarde verwijderd van kaartweergave
@@ -1,4 +1,4 @@
Android 4.4 wordt vanaf deze uitgave niet langer ondersteund. Als u Catima op Android 4.4 wilt gebruiken, gebruik dan alstublieft versie 2.6.1.
Android 4.4 wordt vanaf deze uitgave niet langer ondersteund. Als je Catima op Android 4.4 wilt gebruiken, gebruik dan alstublieft versie 2.6.1.
- Verbeterde Android 12 ondersteuning
- Verbeterd Over de App scherm
@@ -8,9 +8,10 @@ Met deze essentiële app kun je die waardeloze plastic kaarten weggooien.
- Weinig rechten vereist, geen spionage/tracking, geen internettoegang en geen reclame;
- Voorzie kaarten of codes van namen en zelfgekozen kleuren;
- Voer codes handmatig in als er geen barcode is;
- Importeer kaarten en codes uit bestanden, Catima, FidMe, Klantenkaartkluis en Voucher Vault;
- Importeer kaarten en codes uit bestanden, Catima, FidMe, Loyalty Card Keychain en Voucher Vault;
- Maak een back-up van al je kaarten en importeer deze op een ander apparaat;
- Deel coupons, exclusieve aanbiedingen, promocodes of kaarten en codes met andere apps;
- Synchronisatie met ondersteunde Gadgetbridge- of Wear OS-smartwatches;
- Donker thema en toegankelijkheidsopties voor blinden en slechtzienden;
- Gemaakt voor iedereen door de vrijesoftwaregemeenschap;
- De app is met de hand vertaald naar meer dan 40 talen;
@@ -0,0 +1,2 @@
- Dodano serwer Bluetooth w celu zapewnienia obsługi aplikacji towarzyszącej dla systemu Wear OS
- Usunięto wbudowany plik CHANGELOG
@@ -0,0 +1 @@
- Naprawiono błąd, w wyniku którego widżet listy nie aktualizował się po otwarciu karty z tego widżetu
@@ -0,0 +1 @@
- Pierwsza wersja aplikacji towarzyszącej dla systemu Wear OS
@@ -0,0 +1,4 @@
- Dodano pasek przewijania do listy kart
- Dodano ekran powitalny
- Naprawiono pewne problemy związane z odstępami
- Usunięto wartość kodu kreskowego z widoku karty
@@ -1,22 +1,23 @@
Skończ z szukaniem plastikowych kart w sklepie lub w sklepie internetowym.
<b>Skanuj kody kreskowe do urządzenia za pomocą jego kamery, zapomnij o kartach.</b>
Koniec z szukaniem plastikowych kart lojalnościowych przy kasie w sklepie stacjonarnym lub internetowym.
<b>Skanuj kody kreskowe za pomocą aparatu w swoim urządzeniu i zapomnij o kartach.</b>
Zapomnij o portfelu lub zachowaj ultralekki portfel na cenne przedmioty.
Zostaw portfel w domu lub zabierz ze sobą tylko najpotrzebniejsze rzeczy.
Dzięki temu niezbędnemu narzędziu codziennego noszenia (CDN) możesz zastąpić bezużyteczny plastik gotówką.
Dzięki temu niezbędnemu narzędziu do codziennego noszenia (EDC) możesz zastąpić bezużyteczny plastik gotówką.
- Unikaj szpiegowania dzięki niewielkiej liczbie uprawnień. Niepotrzebny dostęp do Internetu oraz brak reklam.
- Dodaj karty lub kody z nazwami i dostosuj je kolorami.
- Unikaj inwigilacji dzięki minimalnej liczbie uprawnień. Brak dostępu do Internetu i brak reklam.
- Dodawaj karty lub kody wraz z nazwami i dostosowywanymi kolorami.
- Ręczne wprowadzanie kodu, jeśli nie ma kodu kreskowego do zapisania lub nie można go użyć.
- Importuj karty lub kody z plików Catima, FidMe, Loyalty Card Keychain” oraz „Voucher Vault.
- Utwórz kopię zapasową wszystkich swoich kart i przenieś je na nowe urządzenie, jeśli chcesz.
- Importuj karty i kody z plików, aplikacji Catima, FidMe, Loyalty Card Keychain i Voucher Vault.
- Twórz kopie zapasowe wszystkich swoich kart i przenoś je na nowe urządzenie, jeśli chcesz.
- Udostępniaj kupony, ekskluzywne oferty, kody promocyjne lub karty i kody za pomocą dowolnej aplikacji.
- Ciemny motyw i opcje dostępności dla użytkowników z upośledzeniem wzroku.
- Stworzony dla wszystkich przez „libre software community”.
- Ręcznie wykonane lokalne tłumaczenia dla ponad 40 języków.
- Gratis, wspierany przez wkłady społeczności.
- Używajcie, studiujcie, zmieniajcie i dzielcie się tym, jak chcecie; <i>ze wszystkimi</i>.
- Nie tylko „Free Software” / „Open Source”. <i>Copylefted</i> libre software (GPLv3+) system zarządzający kartami.
- Synchronizuj z obsługiwanymi smartwatchami Gadgetbridge lub Wear OS.
- Ciemny motyw i opcje ułatwień dostępu dla użytkowników z wadami wzroku.
- Stworzone dla wszystkich przez społeczność wolnego oprogramowania.
- Ręcznie przygotowane tłumaczenia na ponad 40 języków.
- Bezpłatne, wspierane przez datki społeczności.
- Korzystaj, studiuj, modyfikuj i udostępniaj aplikację według własnego uznania; <i>z zachowaniem wszystkich</i>.
- To nie tylko wolne oprogramowanie / oprogramowanie open source. <i>Oprogramowanie wolne na licencji copyleft</i> (GPLv3+) do zarządzania kartami.
Uprość sobie życie i zakupy, i już nigdy nie zgubisz papierowego paragonu, karty podarunkowej do płatności w sklepie czy biletu lotniczego.
Zabierz ze sobą wszystkie nagrody i bonusy i oszczędzaj w trakcie podróży.
Uprość swoje życie i zakupy już nigdy nie zgubisz papierowego paragonu, karty podarunkowej do wykorzystania w sklepie ani biletu lotniczego.
Zabierz ze sobą wszystkie nagrody i bonusy i oszczędzaj na bieżąco.
@@ -0,0 +1,2 @@
- Adicionar um servidor Bluetooth para suporte ao aplicativo complementar do Wear OS
- Remover CHANGELOG embutido
@@ -0,0 +1 @@
- Corrigir a não atualização do widget de lista ao abrir um cartão a partir dele
@@ -1,3 +1,3 @@
- Adicionada opção de menu para bloquear a rotação da tela ao exibir um cartão. Se bloqueada, a tela muda para sua orientação "natural" e novas rotações serão impedidas. (pull #128 (https://github.com/brarcher/loyalty-card-locker/pull/128))
- Se um cartão for selecionado na tela principal, mas não puder ser carregado, o aplicativo trata a falha adequadamente e exibe uma mensagem
- Corrigido um caso em que os IDs de layout do assistente de introdução não eram encontrados.
- Adicionado bloqueio de rotação ao exibir cartão. Se bloqueado, a tela muda para orientação "natural" e impede novas rotações.
- Se um cartão na tela principal falhar ao carregar, o app trata o erro e exibe mensagem. (pull #132 (https://github.com/brarcher/loyalty-card-locker/pull/132))
- Corrigido erro de IDs de layout do assistente não encontrados. (pull #128 (https://github.com/brarcher/loyalty-card-locker/pull/128))
@@ -1,5 +1,5 @@
- Adicionado suporte para criar atalhos na tela inicial ao adicionar ou editar um cartão.
- Widget removido, pois era um substituto insatisfatório para os atalhos.
- Corrigida a exportação de backups no Android 7+.
- Informado um tipo mime mais preciso ao exportar dados de backup.
- Corrigido um erro que impedia a edição de cartões.
- Suporte a atalhos na tela inicial ao criar/editar cartão (pull #155)
- Removido widget por ser um péssimo substituto para atalhos (pull #155)
- Corrigida a exportação de backups no Android 7+ (pull #153)
- Tipo mime mais preciso ao exportar dados de backup (pull #156)
- Corrigido erro onde o cartão não podia ser editado (pull #155)
@@ -0,0 +1 @@
- Lançamento inicial do aplicativo companheiro Wear OS
@@ -0,0 +1,4 @@
- Adicionar barra de rolagem à lista de cartões
- Adicionar tela de abertura (splash screen)
- Corrigir alguns problemas de espaçamento (padding)
- Remover o valor do código de barras da visualização do cartão
@@ -1,2 +1,2 @@
- Permitir que o usuário insira o código de barras manualmente. Se o usuário optar por inserir um código de barras manualmente, uma lista de todas as imagens de código de barras válidas e suportadas é exibida. O usuário pode então selecionar a imagem do código de barras correspondente ao que deseja.
- Corrigir problema em que alguns códigos de barras exibidos ficavam borrados.
- Permite inserir código de barras manualmente. Se optado, é exibida lista de imagens válidas e suportadas para seleção. (issue #33, pull #44)
- Corrigido problema onde alguns códigos de barras exibidos ficavam borrados (issue #37)
@@ -1,2 +1,2 @@
- Um clique longo em um cartão exibe a opção de copiar o ID do cartão para a área de transferência. (pull #49 (https://github.com/brarcher/loyalty-card-locker/issues/49))
- O botão Voltar na visualização de Importação/Exportação agora funciona, levando o usuário de volta à visualização principal.
- O botão Voltar na visualização de Importação/Exportação agora funciona, levando o usuário para a tela principal
@@ -1,4 +1,4 @@
- O brilho da tela aumenta para o máximo ao exibir um cartão, para ajudar os leitores de código de barras a capturá-lo com sucesso.
- Adição de confirmação ao excluir um cartão.
- Adição de traduções para alemão e tcheco.
- Alteração para maior clareza na tradução para italiano.
- Brilho da tela aumenta ao máximo ao exibir cartão para ajudar os leitores na leitura. (pull #54)
- Adicionada confirmação ao excluir um cartão. (pull #55)
- Adicionadas traduções para alemão (pull #57) e tcheco (pull #58)
- Esclarecimento na tradução para o italiano (pull #66)
@@ -1,22 +1,23 @@
Pare de procurar cartões de fidelidade de plástico na hora de pagar em lojas físicas ou virtuais.
<b>Escaneie códigos de barras usando a câmera do seu dispositivo e esqueça os cartões físicos.</b>
<b>Escaneie códigos de barras com a câmera do seu dispositivo e esqueça os cartões físicos.</b>
Esqueça a carteira ou mantenha-a leve, guardando apenas itens essenciais.
Deixe a carteira em casa ou mantenha-a leve, guardando apenas itens essenciais de valor.
Com esta ferramenta indispensável para o dia a dia (EDC), você pode substituir o plástico inútil por uma solução digital prática.
Com esta ferramenta indispensável para o dia a dia (EDC), você substitui o plástico inútil pela praticidade digital.
- Privacidade garantida com o mínimo de permissões: sem acesso à internet e sem anúncios.
- Adicione cartões ou códigos com nomes e cores personalizáveis.
- Insira códigos manualmente caso não haja código de barras ou se ele não puder ser utilizado.
- Importe cartões e códigos de arquivos e de aplicativos como Catima, FidMe, Loyalty Card Keychain e Voucher Vault.
- Faça backup de todos os seus cartões e transfira-os para um novo dispositivo, se desejar.
- Compartilhe cupons, ofertas exclusivas, códigos promocionais ou os próprios cartões e códigos usando qualquer aplicativo.
- Insira códigos manualmente caso não haja código de barras ou se a leitura não for possível.
- Importe cartões e códigos de arquivos ou de aplicativos como Catima, FidMe, Loyalty Card Keychain e Voucher Vault.
- Faça backup de todos os seus cartões e transfira-os para um novo dispositivo quando quiser.
- Compartilhe cupons, ofertas exclusivas, códigos promocionais, cartões ou códigos usando qualquer aplicativo.
- Sincronize com smartwatches compatíveis (Gadgetbridge ou Wear OS).
- Inclui tema escuro e opções de acessibilidade para usuários com deficiência visual.
- Criado para todos pela comunidade de software livre.
- Traduções manuais e localizadas para mais de 40 idiomas.
- Gratuito e mantido por contribuições da comunidade.
- Use, estude, modifique e compartilhe como quiser; <i>com todos</i>.
- Mais do que apenas Software Livre / Código Aberto: um gerenciador de cartões de software livre sob licença <i>copyleft</i> (GPLv3+).
- Mais do que apenas Software Livre/Código Aberto: um gerenciador de cartões de software livre com licença <i>copyleft</i> (GPLv3+).
Simplifique sua vida e suas compras; nunca mais perca um recibo de papel, um cartão-presente ou uma passagem aérea.
Leve todos os seus cartões de fidelidade e bônus com você e economize sempre.
@@ -0,0 +1,2 @@
- Добавлен сервер Bluetooth для поддержки приложения-компаньона Wear OS
- Удалён встроенный журнал изменений
@@ -0,0 +1 @@
- Исправлена ошибка, при которой виджет списка не обновлялся при открытии карты из него
@@ -0,0 +1 @@
- Первый выпуск приложения-компаньона Wear OS
@@ -0,0 +1,4 @@
- Добавлена полоса прокрутки в список карт
- Добавлен заставочный экран
- Исправлены некоторые проблемы с отступами
- Убрано значение штрих-кода из отображения карты
Loaded 100 of 126 files, more files were not shown because too many files have changed in this diff. Show more