Compare commits

..
479 Commits
Author SHA1 Message Date
Sylvia van Os e212fb27cf Merge pull request #3321 from weblate/weblate-catima-catima
Translations update from Hosted Weblate
2026-09-09 17:20:51 +02:00
Damjan Gerl a8973296ee Translated using Weblate (Slovenian)
Currently translated at 100.0% (170 of 170 strings)

Translation: Catima/Android (Fastlane)
Translate-URL: https://hosted.weblate.org/projects/catima/fastlane/sl/
2026-09-09 13:52:15 +02:00
justcontributor 0d3fe0b253 Translated using Weblate (Korean)
Currently translated at 99.4% (169 of 170 strings)

Translation: Catima/Android (Fastlane)
Translate-URL: https://hosted.weblate.org/projects/catima/fastlane/ko/
2026-09-09 13:52:15 +02:00
justcontributor 275880944d Translated using Weblate (Korean)
Currently translated at 100.0% (359 of 359 strings)

Translation: Catima/Android
Translate-URL: https://hosted.weblate.org/projects/catima/catima/ko/
2026-09-09 13:52:15 +02:00
Damjan Gerl 36f38f9b3e Translated using Weblate (Slovenian)
Currently translated at 100.0% (359 of 359 strings)

Translation: Catima/Android
Translate-URL: https://hosted.weblate.org/projects/catima/catima/sl/
2026-09-09 13:52:15 +02:00
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
Sylvia van Os 22193b1872 Release Catima v2.45.0 2026-08-12 18:56:26 +02:00
Sylvia van Os 306e7b5201 Release Catima Wear OS v1.0.0 2026-08-12 18:46:49 +02:00
Sylvia van Os 0c8104af96 Merge pull request #3260 from CatimaLoyalty/create-pull-request/patch-1786549695
Update Fastlane changelogs
2026-08-12 18:40:58 +02:00
TheLastProject 3b06f7a105 Update Fastlane changelogs 2026-08-12 15:48:15 +00:00
Sylvia van Os 0869623c1d Merge pull request #3218 from CatimaLoyalty/wip/wearos
WearOS support
2026-08-12 17:48:01 +02:00
Sylvia van Os bfa79a6f68 Notify on foreground service start failure 2026-08-11 22:06:01 +02:00
Sylvia van Os cda842485f Update privacy policy 2026-08-11 22:06:01 +02:00
Sylvia van Os db35306a26 Add WearOS screenshots and description change 2026-08-11 22:06:01 +02:00
Sylvia van Os 2363861a62 Fail pipeline on bad libraries 2026-08-11 22:06:01 +02:00
Sylvia van Os 2960585250 Prepare new versioning and CHANGELOG structure 2026-08-11 22:06:01 +02:00
Sylvia van Os ff830ee50d Improve notification icons
This improves the sizing of the notification icons and uses a generic
sync icon for the Bluetooth server running (so users don't get used to
ignoring the Catima icon).

Generated throudh Android Studio New -> Image Asset -> Notification
Icons -> Path: .design/master_monochrome.svg -> Trim: Yes -> Padding: 0%
2026-08-11 22:06:01 +02:00
Sylvia van Os 3c917da56a Modify code to support minor API versions 2026-08-11 22:06:01 +02:00
Sylvia van Os 6ea1d9ec73 Fix some documentation mistakes for the Content Provider 2026-08-11 22:06:01 +02:00
Sylvia van Os 5ebd7cbb63 Add documentation for Bluetooth server 2026-08-11 22:06:01 +02:00
Sylvia van Os 0d91444ee2 Consistently use Wear OS naming 2026-08-11 22:06:01 +02:00
Sylvia van Os 9459c78e7c Migrate WearOS app to Material3
Also always display sync status on screen
2026-08-11 22:06:01 +02:00
Fabio ManganielloandSylvia van Os b326a7148d feat(bluetooth): Add trusted device pairing (#3223)
Co-authored-by: Sylvia van Os <sylvia@hackerchick.me>
2026-08-11 22:06:01 +02:00
Sylvia van Os 5ae850dbe8 Restructure smartwatch support settings 2026-08-11 22:06:01 +02:00
Fabio ManganielloandSylvia van Os 2ef9c9c68e Add WearOS companion app (#3185)
Co-authored-by: Sylvia van Os <sylvia@hackerchick.me>
2026-08-11 22:06:01 +02:00
Sylvia van Os 613bd000d2 Merge pull request #3256 from CatimaLoyalty/create-pull-request/patch-1786251663
Update contributors
2026-08-09 10:37:08 +02:00
TheLastProject f7ea5bcb7b Update contributors 2026-08-09 05:01:02 +00:00
Sylvia van Os b8b5b8ae9b Merge pull request #3252 from weblate/weblate-catima-catima
Translations update from Hosted Weblate
2026-08-06 12:02:55 +02:00
Sylvia van Os e6085a64be Merge pull request #3253 from CatimaLoyalty/dependabot/gradle/androidx.constraintlayout-constraintlayout-2.2.2
Bump androidx.constraintlayout:constraintlayout from 2.2.1 to 2.2.2
2026-08-06 08:08:45 +02:00
dependabot[bot] e77acf9b1e Bump androidx.constraintlayout:constraintlayout from 2.2.1 to 2.2.2
Bumps androidx.constraintlayout:constraintlayout from 2.2.1 to 2.2.2.

---
updated-dependencies:
- dependency-name: androidx.constraintlayout:constraintlayout
  dependency-version: 2.2.2
  dependency-type: direct:production
  update-type: version-update:semver-patch
...

Signed-off-by: dependabot[bot] <support@github.com>
2026-08-06 02:53:46 +00:00
Joel A dc4299d315 Translated using Weblate (Swedish)
Currently translated at 100.0% (324 of 324 strings)

Translation: Catima/Android
Translate-URL: https://hosted.weblate.org/projects/catima/catima/sv/
2026-08-06 04:04:57 +02:00
Damjan Gerl 1c8d2ba19e Translated using Weblate (Slovenian)
Currently translated at 100.0% (166 of 166 strings)

Translation: Catima/Android (Fastlane)
Translate-URL: https://hosted.weblate.org/projects/catima/fastlane/sl/
2026-08-06 04:04:56 +02:00
NooB9496 d46455c021 Translated using Weblate (Polish)
Currently translated at 100.0% (166 of 166 strings)

Translation: Catima/Android (Fastlane)
Translate-URL: https://hosted.weblate.org/projects/catima/fastlane/pl/
2026-08-06 04:04:53 +02:00
Watchman89 abd4c24138 Translated using Weblate (Dutch)
Currently translated at 100.0% (166 of 166 strings)

Translation: Catima/Android (Fastlane)
Translate-URL: https://hosted.weblate.org/projects/catima/fastlane/nl/
2026-08-06 04:04:53 +02:00
NooB9496 1e922ae074 Translated using Weblate (Polish)
Currently translated at 100.0% (324 of 324 strings)

Translation: Catima/Android
Translate-URL: https://hosted.weblate.org/projects/catima/catima/pl/
2026-08-06 04:04:47 +02:00
Watchman89 335059a681 Translated using Weblate (Dutch)
Currently translated at 100.0% (324 of 324 strings)

Translation: Catima/Android
Translate-URL: https://hosted.weblate.org/projects/catima/catima/nl/
2026-08-06 04:04:45 +02:00
Sylvia van Os a530991119 Merge pull request #3248 from weblate/weblate-catima-catima
Translations update from Hosted Weblate
2026-08-05 18:12:01 +02:00
Edgars Andersons 45130b5f85 Translated using Weblate (Latvian)
Currently translated at 100.0% (324 of 324 strings)

Translation: Catima/Android
Translate-URL: https://hosted.weblate.org/projects/catima/catima/lv/
2026-08-05 00:03:39 +02:00
Damjan Gerl 70fd411640 Translated using Weblate (Slovenian)
Currently translated at 94.5% (157 of 166 strings)

Translation: Catima/Android (Fastlane)
Translate-URL: https://hosted.weblate.org/projects/catima/fastlane/sl/
2026-08-05 00:03:37 +02:00
Sylvia van Os 4d47cd4a4a Merge pull request #3246 from weblate/weblate-catima-catima
Translations update from Hosted Weblate
2026-08-03 19:46:26 +02:00
Sylvia van Os bb694ca9cb Translated using Weblate (Arabic)
Currently translated at 98.4% (319 of 324 strings)

Translation: Catima/Android
Translate-URL: https://hosted.weblate.org/projects/catima/catima/ar/
2026-08-03 17:21:05 +02:00
Damjan Gerl 7ede8424d0 Translated using Weblate (Slovenian)
Currently translated at 78.9% (131 of 166 strings)

Translation: Catima/Android (Fastlane)
Translate-URL: https://hosted.weblate.org/projects/catima/fastlane/sl/
2026-08-03 17:21:04 +02:00
Sylvia van Os 1167cf51b5 Translated using Weblate (Lithuanian)
Currently translated at 8.4% (14 of 166 strings)

Translation: Catima/Android (Fastlane)
Translate-URL: https://hosted.weblate.org/projects/catima/fastlane/lt/
2026-08-03 17:21:01 +02:00
Eduardo Augustinho 13d2c81c5c Translated using Weblate (Portuguese (Brazil))
Currently translated at 99.3% (165 of 166 strings)

Translation: Catima/Android (Fastlane)
Translate-URL: https://hosted.weblate.org/projects/catima/fastlane/pt_BR/
2026-08-02 15:05:14 +00:00
Eduardo Augustinho 102a34a3f3 Translated using Weblate (Portuguese (Brazil))
Currently translated at 100.0% (324 of 324 strings)

Translation: Catima/Android
Translate-URL: https://hosted.weblate.org/projects/catima/catima/pt_BR/
2026-08-02 15:05:12 +00:00
E Ta 0c490f2bdb Translated using Weblate (Arabic)
Currently translated at 98.4% (319 of 324 strings)

Translation: Catima/Android
Translate-URL: https://hosted.weblate.org/projects/catima/catima/ar/
2026-08-02 15:05:11 +00:00
Zeet Baral 8f69f9cef9 Translated using Weblate (Bengali (India))
Currently translated at 62.0% (201 of 324 strings)

Translation: Catima/Android
Translate-URL: https://hosted.weblate.org/projects/catima/catima/bn_IN/
2026-08-02 15:05:09 +00:00
109247019824 00e65a39de Translated using Weblate (Bulgarian)
Currently translated at 100.0% (324 of 324 strings)

Translation: Catima/Android
Translate-URL: https://hosted.weblate.org/projects/catima/catima/bg/
2026-08-02 15:05:08 +00:00
Damjan Gerl 8698c6099c Translated using Weblate (Slovenian)
Currently translated at 64.4% (107 of 166 strings)

Translation: Catima/Android (Fastlane)
Translate-URL: https://hosted.weblate.org/projects/catima/fastlane/sl/
2026-08-02 15:05:07 +00:00
dukezas da3fbdb401 Translated using Weblate (Lithuanian)
Currently translated at 8.4% (14 of 166 strings)

Translation: Catima/Android (Fastlane)
Translate-URL: https://hosted.weblate.org/projects/catima/fastlane/lt/
2026-08-02 15:05:06 +00:00
Nik b28052c46c Translated using Weblate (Italian)
Currently translated at 100.0% (166 of 166 strings)

Translation: Catima/Android (Fastlane)
Translate-URL: https://hosted.weblate.org/projects/catima/fastlane/it/
2026-08-02 15:05:04 +00:00
dukezas b438a7f03d Translated using Weblate (Lithuanian)
Currently translated at 83.9% (272 of 324 strings)

Translation: Catima/Android
Translate-URL: https://hosted.weblate.org/projects/catima/catima/lt/
2026-08-02 15:05:03 +00:00
Nik c144035d95 Translated using Weblate (Italian)
Currently translated at 100.0% (324 of 324 strings)

Translation: Catima/Android
Translate-URL: https://hosted.weblate.org/projects/catima/catima/it/
2026-08-02 15:05:02 +00:00
Sylvia van Os 7658c3980a Merge pull request #3245 from CatimaLoyalty/create-pull-request/patch-1785652221
Update contributors
2026-08-02 10:03:34 +02:00
TheLastProject c11297a733 Update contributors 2026-08-02 06:30:20 +00:00
Sylvia van Os c89e60adf6 Merge pull request #3239 from weblate/weblate-catima-catima
Translations update from Hosted Weblate
2026-07-31 17:07:41 +02:00
josé m. fa33f61183 Translated using Weblate (Galician)
Currently translated at 100.0% (324 of 324 strings)

Translation: Catima/Android
Translate-URL: https://hosted.weblate.org/projects/catima/catima/gl/
2026-07-31 03:02:41 +00:00
bruh f3e57d816c Translated using Weblate (Vietnamese)
Currently translated at 100.0% (324 of 324 strings)

Translation: Catima/Android
Translate-URL: https://hosted.weblate.org/projects/catima/catima/vi/
2026-07-31 03:02:39 +00:00
Fjuro bf2e1eface Translated using Weblate (Czech)
Currently translated at 100.0% (166 of 166 strings)

Translation: Catima/Android (Fastlane)
Translate-URL: https://hosted.weblate.org/projects/catima/fastlane/cs/
2026-07-31 03:02:37 +00:00
Fjuro a69fff9b53 Translated using Weblate (Czech)
Currently translated at 100.0% (324 of 324 strings)

Translation: Catima/Android
Translate-URL: https://hosted.weblate.org/projects/catima/catima/cs/
2026-07-31 03:02:34 +00:00
Sylvia van Os 9fc0038bd5 Merge pull request #3238 from CatimaLoyalty/dependabot/github_actions/actions/setup-python-7.0.0
Bump actions/setup-python from 6.3.0 to 7.0.0
2026-07-30 08:21:46 +02:00
dependabot[bot] ffd8dd5633 Bump actions/setup-python from 6.3.0 to 7.0.0
Bumps [actions/setup-python](https://github.com/actions/setup-python) from 6.3.0 to 7.0.0.
- [Release notes](https://github.com/actions/setup-python/releases)
- [Commits](https://github.com/actions/setup-python/compare/v6.3.0...v7.0.0)

---
updated-dependencies:
- dependency-name: actions/setup-python
  dependency-version: 7.0.0
  dependency-type: direct:production
  update-type: version-update:semver-major
...

Signed-off-by: dependabot[bot] <support@github.com>
2026-07-30 06:20:46 +00:00
Sylvia van Os c3947b0f6a Merge pull request #3237 from CatimaLoyalty/dependabot/github_actions/actions/checkout-7.0.1
Bump actions/checkout from 7.0.0 to 7.0.1
2026-07-30 08:19:02 +02:00
dependabot[bot] 84b17b17fe 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.0.0...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-07-30 02:52:41 +00:00
Sylvia van Os 3956a1123e Merge pull request #3236 from weblate/weblate-catima-catima
Translations update from Hosted Weblate
2026-07-29 20:55:24 +02:00
Sylvia van Os f04185f6fd Merge pull request #2580 from CatimaLoyalty/fix/weblate_missingquantity_fix
Re-enable missingQuantity lint checks
2026-07-29 20:48:07 +02:00
Sylvia van Os 10d188ee40 Re-enable missingQuantity lint checks where possible
https://github.com/WeblateOrg/weblate/issues/7520
2026-07-29 20:32:12 +02:00
Priit Jõerüüt 63e2d3740f Translated using Weblate (Estonian)
Currently translated at 100.0% (324 of 324 strings)

Translation: Catima/Android
Translate-URL: https://hosted.weblate.org/projects/catima/catima/et/
2026-07-29 20:04:49 +02:00
Damjan Gerl 672173437f Translated using Weblate (Slovenian)
Currently translated at 64.4% (107 of 166 strings)

Translation: Catima/Android (Fastlane)
Translate-URL: https://hosted.weblate.org/projects/catima/fastlane/sl/
2026-07-29 20:04:46 +02:00
B o d o 2c851158f5 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-07-29 20:04:38 +02:00
Sylvain Pichon 367733676a Translated using Weblate (French)
Currently translated at 100.0% (166 of 166 strings)

Translation: Catima/Android (Fastlane)
Translate-URL: https://hosted.weblate.org/projects/catima/fastlane/fr/
2026-07-29 20:04:38 +02:00
Damjan Gerl 538cd2078b Translated using Weblate (Slovenian)
Currently translated at 100.0% (324 of 324 strings)

Translation: Catima/Android
Translate-URL: https://hosted.weblate.org/projects/catima/catima/sl/
2026-07-29 20:04:37 +02:00
Sylvia van Os 731833d9be Release Catima 2.44.0 2026-07-28 18:21:59 +02:00
Sylvia van Os 7ebd71283f Merge pull request #3234 from weblate/weblate-catima-catima
Translations update from Hosted Weblate
2026-07-28 18:21:16 +02:00
Oğuz Ersen 5eb1942ad2 Translated using Weblate (Turkish)
Currently translated at 100.0% (324 of 324 strings)

Translation: Catima/Android
Translate-URL: https://hosted.weblate.org/projects/catima/catima/tr/
2026-07-28 18:07:24 +02:00
Jiri Grönroos 999222f3a4 Translated using Weblate (Finnish)
Currently translated at 99.3% (322 of 324 strings)

Translation: Catima/Android
Translate-URL: https://hosted.weblate.org/projects/catima/catima/fi/
2026-07-28 18:07:24 +02:00
Hosted Weblate user 54392 e82d726898 Translated using Weblate (Chinese (Simplified Han script))
Currently translated at 100.0% (166 of 166 strings)

Translation: Catima/Android (Fastlane)
Translate-URL: https://hosted.weblate.org/projects/catima/fastlane/zh_Hans/
2026-07-28 18:07:21 +02:00
Hosted Weblate user 54392 0f48c75512 Translated using Weblate (Chinese (Simplified Han script))
Currently translated at 100.0% (324 of 324 strings)

Translation: Catima/Android
Translate-URL: https://hosted.weblate.org/projects/catima/catima/zh_Hans/
2026-07-28 18:07:20 +02:00
Liner Seven 183d3ea666 Translated using Weblate (Japanese)
Currently translated at 100.0% (166 of 166 strings)

Translation: Catima/Android (Fastlane)
Translate-URL: https://hosted.weblate.org/projects/catima/fastlane/ja/
2026-07-28 18:07:20 +02:00
Liner Seven 4e4e9123f2 Translated using Weblate (Japanese)
Currently translated at 100.0% (324 of 324 strings)

Translation: Catima/Android
Translate-URL: https://hosted.weblate.org/projects/catima/catima/ja/
2026-07-28 18:07:19 +02:00
solokot c09566d38a Translated using Weblate (Russian)
Currently translated at 100.0% (166 of 166 strings)

Translation: Catima/Android (Fastlane)
Translate-URL: https://hosted.weblate.org/projects/catima/fastlane/ru/
2026-07-28 18:07:19 +02:00
B o d o 750ac6f2ec 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-07-28 18:07:18 +02:00
solokot 1ed78fa680 Translated using Weblate (Russian)
Currently translated at 100.0% (324 of 324 strings)

Translation: Catima/Android
Translate-URL: https://hosted.weblate.org/projects/catima/catima/ru/
2026-07-28 18:07:18 +02:00
Sylvain Pichon 48a26cf1f7 Translated using Weblate (French)
Currently translated at 100.0% (324 of 324 strings)

Translation: Catima/Android
Translate-URL: https://hosted.weblate.org/projects/catima/catima/fr/
2026-07-28 18:07:17 +02:00
Vasilis K. bc6a63a1f0 Translated using Weblate (Greek)
Currently translated at 100.0% (324 of 324 strings)

Translation: Catima/Android
Translate-URL: https://hosted.weblate.org/projects/catima/catima/el/
2026-07-28 18:07:16 +02:00
B o d o 45f360904f Translated using Weblate (German)
Currently translated at 100.0% (324 of 324 strings)

Translation: Catima/Android
Translate-URL: https://hosted.weblate.org/projects/catima/catima/de/
2026-07-28 18:07:16 +02:00
Sylvia van Os bdf39a1dd7 Merge pull request #3233 from weblate/weblate-catima-catima
Translations update from Hosted Weblate
2026-07-28 10:49:51 +02:00
Ricardo Xavier abff198d01 Translated using Weblate (Portuguese)
Currently translated at 99.6% (322 of 323 strings)

Translation: Catima/Android
Translate-URL: https://hosted.weblate.org/projects/catima/catima/pt/
2026-07-27 23:03:51 +00:00
Watchman89 6721ecf113 Translated using Weblate (Dutch)
Currently translated at 100.0% (165 of 165 strings)

Translation: Catima/Android (Fastlane)
Translate-URL: https://hosted.weblate.org/projects/catima/fastlane/nl/
2026-07-27 23:03:47 +00:00
Danny Bouwers 3899c71317 Translated using Weblate (Dutch)
Currently translated at 100.0% (323 of 323 strings)

Translation: Catima/Android
Translate-URL: https://hosted.weblate.org/projects/catima/catima/nl/
2026-07-27 23:03:44 +00:00
Sylvia van Os b8e4ec9c9f Merge pull request #3232 from CatimaLoyalty/create-pull-request/patch-1785086352
Update Fastlane changelogs
2026-07-26 19:19:34 +02:00
TheLastProject 92cb120dd0 Update Fastlane changelogs 2026-07-26 17:19:12 +00:00
Sylvia van Os 7a8f9c38eb Update CHANGELOG 2026-07-26 19:18:58 +02:00
KamiDaga dc7498e505 Merge pull request #3219 from KamiDaga/feature/overflow-menu-to-image-gallery
Added overflow menu to open card image in image gallery
2026-07-26 19:18:00 +02:00
Sylvia van Os 02e925f77a Merge pull request #3231 from CatimaLoyalty/create-pull-request/patch-1785047585
Update contributors
2026-07-26 09:51:28 +02:00
TheLastProject 7dc2a479b6 Update contributors 2026-07-26 06:33:05 +00:00
Sylvia van Os 1913d629e7 Merge pull request #3230 from weblate/weblate-catima-catima
Translations update from Hosted Weblate
2026-07-25 22:34:09 +02:00
ssantos 59a750f41c Translated using Weblate (Portuguese)
Currently translated at 99.3% (321 of 323 strings)

Translation: Catima/Android
Translate-URL: https://hosted.weblate.org/projects/catima/catima/pt/
2026-07-25 22:02:03 +02:00
ssantos 46dfafe0b2 Translated using Weblate (Portuguese (Portugal))
Currently translated at 99.3% (321 of 323 strings)

Translation: Catima/Android
Translate-URL: https://hosted.weblate.org/projects/catima/catima/pt_PT/
2026-07-25 22:02:02 +02:00
Sylvia van Os 1faab05032 Merge pull request #3228 from weblate/weblate-catima-catima
Translations update from Hosted Weblate
2026-07-24 14:43:26 +02:00
Oğuz Ersen c895f0db56 Translated using Weblate (Turkish)
Currently translated at 100.0% (323 of 323 strings)

Translation: Catima/Android
Translate-URL: https://hosted.weblate.org/projects/catima/catima/tr/
2026-07-24 11:02:09 +02:00
109247019824 c622df96f0 Translated using Weblate (Bulgarian)
Currently translated at 100.0% (323 of 323 strings)

Translation: Catima/Android
Translate-URL: https://hosted.weblate.org/projects/catima/catima/bg/
2026-07-24 11:02:08 +02:00
Sylvia van Os 30ac13ec73 Merge pull request #3227 from CatimaLoyalty/dependabot/gradle/com.android.application-9.3.1
Bump com.android.application from 9.3.0 to 9.3.1
2026-07-24 08:40:22 +02:00
dependabot[bot] efbe809982 Bump com.android.application from 9.3.0 to 9.3.1
Bumps com.android.application from 9.3.0 to 9.3.1.

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

Signed-off-by: dependabot[bot] <support@github.com>
2026-07-24 02:53:57 +00:00
Sylvia van Os 92df5dd36a Merge pull request #3226 from weblate/weblate-catima-catima
Translations update from Hosted Weblate
2026-07-23 10:25:00 +02:00
Rizqi Putra ebdf13678a Translated using Weblate (Indonesian)
Currently translated at 95.1% (157 of 165 strings)

Translation: Catima/Android (Fastlane)
Translate-URL: https://hosted.weblate.org/projects/catima/fastlane/id/
2026-07-23 08:02:09 +00:00
Rizqi Putra 0a0d46033c Translated using Weblate (Indonesian)
Currently translated at 100.0% (323 of 323 strings)

Translation: Catima/Android
Translate-URL: https://hosted.weblate.org/projects/catima/catima/id/
2026-07-23 08:02:08 +00:00
solokot 7f72565e24 Translated using Weblate (Russian)
Currently translated at 100.0% (165 of 165 strings)

Translation: Catima/Android (Fastlane)
Translate-URL: https://hosted.weblate.org/projects/catima/fastlane/ru/
2026-07-23 08:02:08 +00:00
Sylvia van Os cfcf1e2fcb Merge pull request #3224 from CatimaLoyalty/dependabot/gradle/kotlin-2.4.10
Bump kotlin from 2.4.0 to 2.4.10
2026-07-22 06:31:37 +02:00
dependabot[bot] faf2f7a38c Bump kotlin from 2.4.0 to 2.4.10
Bumps `kotlin` from 2.4.0 to 2.4.10.

Updates `org.jetbrains.kotlin.android` from 2.4.0 to 2.4.10
- [Release notes](https://github.com/JetBrains/kotlin/releases)
- [Changelog](https://github.com/JetBrains/kotlin/blob/master/ChangeLog.md)
- [Commits](https://github.com/JetBrains/kotlin/compare/v2.4.0...v2.4.10)

Updates `org.jetbrains.kotlin.plugin.compose` from 2.4.0 to 2.4.10
- [Release notes](https://github.com/JetBrains/kotlin/releases)
- [Changelog](https://github.com/JetBrains/kotlin/blob/master/ChangeLog.md)
- [Commits](https://github.com/JetBrains/kotlin/compare/v2.4.0...v2.4.10)

---
updated-dependencies:
- dependency-name: org.jetbrains.kotlin.android
  dependency-version: 2.4.10
  dependency-type: direct:production
  update-type: version-update:semver-patch
- dependency-name: org.jetbrains.kotlin.plugin.compose
  dependency-version: 2.4.10
  dependency-type: direct:production
  update-type: version-update:semver-patch
...

Signed-off-by: dependabot[bot] <support@github.com>
2026-07-22 02:57:36 +00:00
Sylvia van Os ace7e5abdd Merge pull request #3220 from weblate/weblate-catima-catima
Translations update from Hosted Weblate
2026-07-21 22:10:54 +02:00
Damjan Gerl f50e547980 Translated using Weblate (Slovenian)
Currently translated at 43.0% (71 of 165 strings)

Translation: Catima/Android (Fastlane)
Translate-URL: https://hosted.weblate.org/projects/catima/fastlane/sl/
2026-07-21 08:02:23 +00:00
KamiDaga c05a303568 Translated using Weblate (Italian)
Currently translated at 100.0% (165 of 165 strings)

Translation: Catima/Android (Fastlane)
Translate-URL: https://hosted.weblate.org/projects/catima/fastlane/it/
2026-07-21 08:02:22 +00:00
Damjan Gerl 4fcd41d3cc Translated using Weblate (Slovenian)
Currently translated at 100.0% (323 of 323 strings)

Translation: Catima/Android
Translate-URL: https://hosted.weblate.org/projects/catima/catima/sl/
2026-07-21 08:02:22 +00:00
KamiDaga 3e6c4c1b13 Translated using Weblate (Italian)
Currently translated at 100.0% (323 of 323 strings)

Translation: Catima/Android
Translate-URL: https://hosted.weblate.org/projects/catima/catima/it/
2026-07-21 08:02:21 +00:00
Sylvia van Os 55d356ea40 Merge pull request #3217 from weblate/weblate-catima-catima
Translations update from Hosted Weblate
2026-07-20 18:15:52 +02:00
Libre a752421efe Translated using Weblate (Spanish)
Currently translated at 95.7% (158 of 165 strings)

Translation: Catima/Android (Fastlane)
Translate-URL: https://hosted.weblate.org/projects/catima/fastlane/es/
2026-07-19 21:02:19 +00:00
NooB9496 aa4b41612f Translated using Weblate (Polish)
Currently translated at 100.0% (165 of 165 strings)

Translation: Catima/Android (Fastlane)
Translate-URL: https://hosted.weblate.org/projects/catima/fastlane/pl/
2026-07-19 21:02:18 +00:00
Fjuro f576228c2d Translated using Weblate (Czech)
Currently translated at 100.0% (165 of 165 strings)

Translation: Catima/Android (Fastlane)
Translate-URL: https://hosted.weblate.org/projects/catima/fastlane/cs/
2026-07-19 21:02:17 +00:00
NooB9496 c93add3b83 Translated using Weblate (Polish)
Currently translated at 100.0% (323 of 323 strings)

Translation: Catima/Android
Translate-URL: https://hosted.weblate.org/projects/catima/catima/pl/
2026-07-19 21:02:17 +00:00
Libre 117446cebb Translated using Weblate (Spanish)
Currently translated at 100.0% (323 of 323 strings)

Translation: Catima/Android
Translate-URL: https://hosted.weblate.org/projects/catima/catima/es/
2026-07-19 21:02:16 +00:00
Fjuro 4bee5ec6c8 Translated using Weblate (Czech)
Currently translated at 100.0% (323 of 323 strings)

Translation: Catima/Android
Translate-URL: https://hosted.weblate.org/projects/catima/catima/cs/
2026-07-19 21:02:16 +00:00
Sylvia van Os 92776c9e8d Merge pull request #3215 from CatimaLoyalty/create-pull-request/patch-1784442491
Update contributors
2026-07-19 10:44:47 +02:00
TheLastProject eea3fb5c54 Update contributors 2026-07-19 06:28:11 +00:00
Sylvia van Os dbd0727af2 Merge pull request #3213 from weblate/weblate-catima-catima
Translations update from Hosted Weblate
2026-07-17 22:21:16 +02:00
josé m. a4cf49754a Translated using Weblate (Galician)
Currently translated at 100.0% (323 of 323 strings)

Translation: Catima/Android
Translate-URL: https://hosted.weblate.org/projects/catima/catima/gl/
2026-07-17 22:02:29 +02:00
Priit Jõerüüt 587c5991f1 Translated using Weblate (Estonian)
Currently translated at 100.0% (323 of 323 strings)

Translation: Catima/Android
Translate-URL: https://hosted.weblate.org/projects/catima/catima/et/
2026-07-17 22:02:28 +02:00
Gabriel 10234ffcef Translated using Weblate (Portuguese (Brazil))
Currently translated at 100.0% (165 of 165 strings)

Translation: Catima/Android (Fastlane)
Translate-URL: https://hosted.weblate.org/projects/catima/fastlane/pt_BR/
2026-07-17 22:02:27 +02:00
Gabriel 2a2710e391 Translated using Weblate (Portuguese (Brazil))
Currently translated at 100.0% (323 of 323 strings)

Translation: Catima/Android
Translate-URL: https://hosted.weblate.org/projects/catima/catima/pt_BR/
2026-07-17 22:02:03 +02:00
Joel A f1b5423d94 Translated using Weblate (Swedish)
Currently translated at 99.0% (320 of 323 strings)

Translation: Catima/Android
Translate-URL: https://hosted.weblate.org/projects/catima/catima/sv/
2026-07-17 22:02:02 +02:00
Hosted Weblate user 54392 1cb916d16a Translated using Weblate (Chinese (Simplified Han script))
Currently translated at 100.0% (165 of 165 strings)

Translation: Catima/Android (Fastlane)
Translate-URL: https://hosted.weblate.org/projects/catima/fastlane/zh_Hans/
2026-07-17 22:01:59 +02:00
Hosted Weblate user 54392 6396120fb0 Translated using Weblate (Chinese (Simplified Han script))
Currently translated at 100.0% (323 of 323 strings)

Translation: Catima/Android
Translate-URL: https://hosted.weblate.org/projects/catima/catima/zh_Hans/
2026-07-17 22:01:53 +02:00
Liner Seven 2fe5157519 Translated using Weblate (Japanese)
Currently translated at 100.0% (165 of 165 strings)

Translation: Catima/Android (Fastlane)
Translate-URL: https://hosted.weblate.org/projects/catima/fastlane/ja/
2026-07-17 22:01:52 +02:00
Liner Seven 4ce480defb Translated using Weblate (Japanese)
Currently translated at 100.0% (323 of 323 strings)

Translation: Catima/Android
Translate-URL: https://hosted.weblate.org/projects/catima/catima/ja/
2026-07-17 22:01:44 +02:00
B o d o 3ea5d16f19 Translated using Weblate (German)
Currently translated at 100.0% (165 of 165 strings)

Translation: Catima/Android (Fastlane)
Translate-URL: https://hosted.weblate.org/projects/catima/fastlane/de/
2026-07-17 22:01:42 +02:00
Sylvain Pichon 31fc58576c Translated using Weblate (French)
Currently translated at 100.0% (165 of 165 strings)

Translation: Catima/Android (Fastlane)
Translate-URL: https://hosted.weblate.org/projects/catima/fastlane/fr/
2026-07-17 22:01:35 +02:00
solokot 9573799eba Translated using Weblate (Russian)
Currently translated at 100.0% (323 of 323 strings)

Translation: Catima/Android
Translate-URL: https://hosted.weblate.org/projects/catima/catima/ru/
2026-07-17 22:01:27 +02:00
Sylvain Pichon df94e94b31 Translated using Weblate (French)
Currently translated at 100.0% (323 of 323 strings)

Translation: Catima/Android
Translate-URL: https://hosted.weblate.org/projects/catima/catima/fr/
2026-07-17 22:01:25 +02:00
Vasilis K. 98b561b186 Translated using Weblate (Greek)
Currently translated at 100.0% (323 of 323 strings)

Translation: Catima/Android
Translate-URL: https://hosted.weblate.org/projects/catima/catima/el/
2026-07-17 22:01:24 +02:00
B o d o 8ee469343c Translated using Weblate (German)
Currently translated at 100.0% (323 of 323 strings)

Translation: Catima/Android
Translate-URL: https://hosted.weblate.org/projects/catima/catima/de/
2026-07-17 22:01:22 +02:00
Sylvia van Os e54d129577 Merge pull request #3210 from CatimaLoyalty/dependabot/github_actions/ReactiveCircus/android-emulator-runner-2.38.0
Bump ReactiveCircus/android-emulator-runner from 2.37.0 to 2.38.0
2026-07-16 08:21:01 +02:00
dependabot[bot] a7a3237f4f Bump ReactiveCircus/android-emulator-runner from 2.37.0 to 2.38.0
Bumps [ReactiveCircus/android-emulator-runner](https://github.com/reactivecircus/android-emulator-runner) from 2.37.0 to 2.38.0.
- [Release notes](https://github.com/reactivecircus/android-emulator-runner/releases)
- [Changelog](https://github.com/ReactiveCircus/android-emulator-runner/blob/main/CHANGELOG.md)
- [Commits](https://github.com/reactivecircus/android-emulator-runner/compare/v2.37.0...v2.38.0)

---
updated-dependencies:
- dependency-name: ReactiveCircus/android-emulator-runner
  dependency-version: 2.38.0
  dependency-type: direct:production
  update-type: version-update:semver-minor
...

Signed-off-by: dependabot[bot] <support@github.com>
2026-07-16 02:53:16 +00:00
Sylvia van Os 4b17c3963f Merge pull request #3207 from CatimaLoyalty/dependabot/gradle/com.android.application-9.3.0
Bump com.android.application from 9.2.1 to 9.3.0
2026-07-15 07:58:49 +02:00
dependabot[bot] 93925a03b9 Bump com.android.application from 9.2.1 to 9.3.0
Bumps com.android.application from 9.2.1 to 9.3.0.

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

Signed-off-by: dependabot[bot] <support@github.com>
2026-07-15 02:52:26 +00:00
Sylvia van Os a74707ee82 Bump Fastlane version 2026-07-14 19:12:23 +02:00
Sylvia van Os 909034d4f3 Release Catima 2.43.0 2026-07-12 18:55:29 +02:00
Sylvia van Os c261d33980 Merge pull request #3203 from CatimaLoyalty/create-pull-request/patch-1783871664
Update Fastlane changelogs
2026-07-12 17:55:35 +02:00
TheLastProject e9654c9b04 Update Fastlane changelogs 2026-07-12 15:54:23 +00:00
Sylvia van Os 4742a290c8 Update CHANGELOG 2026-07-12 17:54:11 +02:00
Ilya ZarubinandSylvia van Os bbae3351a5 Add internal image viewer for zooming (#3184)
Co-authored-by: Sylvia van Os <sylvia@hackerchick.me>
2026-07-12 17:52:24 +02:00
Sylvia van Os db149cd3aa Merge pull request #3199 from CatimaLoyalty/dependabot/gradle/androidx.test.uiautomator-uiautomator-2.4.0
Bump androidx.test.uiautomator:uiautomator from 2.3.0 to 2.4.0
2026-07-09 13:17:43 +02:00
dependabot[bot] 1a94748958 Bump androidx.test.uiautomator:uiautomator from 2.3.0 to 2.4.0
Bumps androidx.test.uiautomator:uiautomator from 2.3.0 to 2.4.0.

---
updated-dependencies:
- dependency-name: androidx.test.uiautomator:uiautomator
  dependency-version: 2.4.0
  dependency-type: direct:production
  update-type: version-update:semver-minor
...

Signed-off-by: dependabot[bot] <support@github.com>
2026-07-09 09:01:14 +00:00
Sylvia van Os a20ad88532 Merge pull request #3201 from CatimaLoyalty/dependabot/gradle/androidx.compose-compose-bom-2026.06.01
Bump androidx.compose:compose-bom from 2026.06.00 to 2026.06.01
2026-07-09 10:59:36 +02:00
dependabot[bot] 93b4ba1167 Bump androidx.compose:compose-bom from 2026.06.00 to 2026.06.01
Bumps androidx.compose:compose-bom from 2026.06.00 to 2026.06.01.

---
updated-dependencies:
- dependency-name: androidx.compose:compose-bom
  dependency-version: 2026.06.01
  dependency-type: direct:production
...

Signed-off-by: dependabot[bot] <support@github.com>
2026-07-09 07:18:13 +00:00
Sylvia van Os 693d6d6663 Merge pull request #3200 from CatimaLoyalty/dependabot/github_actions/ReactiveCircus/android-emulator-runner-2.37.0
Bump ReactiveCircus/android-emulator-runner from 2 to 2.37.0
2026-07-09 09:06:38 +02:00
dependabot[bot] 67bb1a2627 Bump ReactiveCircus/android-emulator-runner from 2 to 2.37.0
Bumps [ReactiveCircus/android-emulator-runner](https://github.com/reactivecircus/android-emulator-runner) from 2 to 2.37.0.
- [Release notes](https://github.com/reactivecircus/android-emulator-runner/releases)
- [Changelog](https://github.com/ReactiveCircus/android-emulator-runner/blob/main/CHANGELOG.md)
- [Commits](https://github.com/reactivecircus/android-emulator-runner/compare/v2...v2.37.0)

---
updated-dependencies:
- dependency-name: ReactiveCircus/android-emulator-runner
  dependency-version: 2.37.0
  dependency-type: direct:production
  update-type: version-update:semver-minor
...

Signed-off-by: dependabot[bot] <support@github.com>
2026-07-09 02:53:10 +00:00
Sylvia van Os d20f91018d Merge pull request #3198 from ilyaZar/refine-contributing-md
Refine contributing md
2026-07-06 18:55:09 +02:00
Sylvia van Os 9414627772 Update CONTRIBUTING.md 2026-07-06 18:54:23 +02:00
Sylvia van Os 6134fb26c6 Merge pull request #3195 from CatimaLoyalty/dependabot/gradle/gradle-wrapper-9.6.1
Bump gradle-wrapper from 9.6.0 to 9.6.1
2026-07-06 18:51:32 +02:00
IlyaZar 6445df4d2f docs: highlight llm usage note
its two paragraphs, so this might deserve a seperate lvl 3 header given
that the bottom paragraphs are shorter, and lvl 3 as well

also its worth highlighting a bit more
2026-07-06 16:06:12 +02:00
IlyaZar 1069803681 docs: note on migration for contributors
wording might be improved
2026-07-06 16:04:36 +02:00
dependabot[bot] 60f9d19c6c Bump gradle-wrapper from 9.6.0 to 9.6.1
Bumps [gradle-wrapper](https://github.com/gradle/gradle) from 9.6.0 to 9.6.1.
- [Release notes](https://github.com/gradle/gradle/releases)
- [Commits](https://github.com/gradle/gradle/compare/v9.6.0...v9.6.1)

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

Signed-off-by: dependabot[bot] <support@github.com>
2026-07-06 02:55:14 +00:00
Sylvia van Os b2d001d238 Merge pull request #3194 from CatimaLoyalty/create-pull-request/patch-1783196989
Update Fastlane changelogs
2026-07-04 22:30:44 +02:00
TheLastProject ea26cdbb9f Update Fastlane changelogs 2026-07-04 20:29:49 +00:00
Sylvia van Os f3154081f4 Update CHANGELOG 2026-07-04 22:27:48 +02:00
J. Bhargava Gopal 5388bbfc16 Merge pull request #3191 from Bhargav-24/add-most-recently-added-sort
Add most-recently-added card sort option
2026-07-04 22:27:08 +02:00
Sylvia van Os 48284acf06 Merge pull request #3193 from CatimaLoyalty/create-pull-request/patch-1783195711
Update Fastlane changelogs
2026-07-04 22:09:48 +02:00
TheLastProject 852830c894 Update Fastlane changelogs 2026-07-04 20:08:30 +00:00
Sylvia van Os 97b2c8f080 Update CHANGELOG 2026-07-04 22:08:17 +02:00
Matt Van Horn 888869d5fc Merge pull request #3174 from mvanhorn/feat/2742-display-card-id
Add option to display card ID in card list
2026-07-04 22:07:12 +02:00
Sylvia van Os 9452c65438 Merge pull request #3192 from weblate/weblate-catima-catima
Translations update from Hosted Weblate
2026-07-04 18:57:00 +02:00
Alireza Rashidi 08db580076 Translated using Weblate (Persian)
Currently translated at 90.0% (289 of 321 strings)

Translation: Catima/Android
Translate-URL: https://hosted.weblate.org/projects/catima/catima/fa/
2026-07-04 16:01:28 +00:00
Sylvia van Os 649135e6d4 Merge pull request #3190 from weblate/weblate-catima-catima
Translations update from Hosted Weblate
2026-07-03 16:48:41 +02:00
lexar-systems fb255fd46a Translated using Weblate (Russian)
Currently translated at 100.0% (164 of 164 strings)

Translation: Catima/Android (Fastlane)
Translate-URL: https://hosted.weblate.org/projects/catima/fastlane/ru/
2026-07-03 14:01:51 +00:00
Sylvia van Os ba01e9f0fe Check for non-free libraries (#3189) 2026-07-02 22:30:50 +02:00
Sylvia van Os c6b6a4012e Merge pull request #3187 from weblate/weblate-catima-catima
Translations update from Hosted Weblate
2026-07-02 21:30:27 +02:00
Sylvia van Os 964c1a82db Merge pull request #3186 from CatimaLoyalty/dependabot/github_actions/actions/setup-python-6.3.0
Bump actions/setup-python from 6.2.0 to 6.3.0
2026-07-02 21:27:07 +02:00
Libre 6eb2a8db45 Translated using Weblate (Spanish)
Currently translated at 100.0% (321 of 321 strings)

Translation: Catima/Android
Translate-URL: https://hosted.weblate.org/projects/catima/catima/es/
2026-07-02 10:01:29 +02:00
dependabot[bot] abf5466883 Bump actions/setup-python from 6.2.0 to 6.3.0
Bumps [actions/setup-python](https://github.com/actions/setup-python) from 6.2.0 to 6.3.0.
- [Release notes](https://github.com/actions/setup-python/releases)
- [Commits](https://github.com/actions/setup-python/compare/v6.2.0...v6.3.0)

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

Signed-off-by: dependabot[bot] <support@github.com>
2026-07-02 02:52:23 +00:00
Sylvia van Os c40fcdee9e Merge pull request #3182 from weblate/weblate-catima-catima
Translations update from Hosted Weblate
2026-06-30 12:39:53 +02:00
Arif Budiman ca66205493 Translated using Weblate (Indonesian)
Currently translated at 100.0% (321 of 321 strings)

Translation: Catima/Android
Translate-URL: https://hosted.weblate.org/projects/catima/catima/id/
2026-06-30 08:01:24 +02:00
Sylvia van Os 8bdea4a3cd Merge pull request #3181 from CatimaLoyalty/create-pull-request/patch-1782632954
Update contributors
2026-06-28 09:55:12 +02:00
TheLastProject d11797be41 Update contributors 2026-06-28 07:49:14 +00:00
Sylvia van Os 332a5df506 Merge pull request #3180 from CatimaLoyalty/dependabot/gradle/gradle-wrapper-9.6.0
Bump gradle-wrapper from 9.5.1 to 9.6.0
2026-06-26 20:40:05 +02:00
dependabot[bot] 024125cf52 Bump gradle-wrapper from 9.5.1 to 9.6.0
Bumps [gradle-wrapper](https://github.com/gradle/gradle) from 9.5.1 to 9.6.0.
- [Release notes](https://github.com/gradle/gradle/releases)
- [Commits](https://github.com/gradle/gradle/compare/v9.5.1...v9.6.0)

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

Signed-off-by: dependabot[bot] <support@github.com>
2026-06-26 02:53:59 +00:00
Sylvia van Os 5b747d6fea Merge pull request #3177 from CatimaLoyalty/dependabot/github_actions/gradle/actions-6.2.0
Bump gradle/actions from 6.1.1 to 6.2.0
2026-06-25 12:43:38 +02:00
Sylvia van Os f4b2597d95 Merge pull request #3179 from CatimaLoyalty/dependabot/gradle/androidx.compose-compose-bom-2026.06.00
Bump androidx.compose:compose-bom from 2026.05.01 to 2026.06.00
2026-06-25 10:35:38 +02:00
dependabot[bot] 4a24b98868 Bump gradle/actions from 6.1.1 to 6.2.0
Bumps [gradle/actions](https://github.com/gradle/actions) from 6.1.1 to 6.2.0.
- [Release notes](https://github.com/gradle/actions/releases)
- [Commits](https://github.com/gradle/actions/compare/v6.1.1...v6.2.0)

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

Signed-off-by: dependabot[bot] <support@github.com>
2026-06-25 06:25:34 +00:00
Sylvia van Os 932f82a08b Merge pull request #3178 from CatimaLoyalty/dependabot/github_actions/actions/checkout-7.0.0
Bump actions/checkout from 6.0.3 to 7.0.0
2026-06-25 08:23:11 +02:00
dependabot[bot] c20709b377 Bump androidx.compose:compose-bom from 2026.05.01 to 2026.06.00
Bumps androidx.compose:compose-bom from 2026.05.01 to 2026.06.00.

---
updated-dependencies:
- dependency-name: androidx.compose:compose-bom
  dependency-version: 2026.06.00
  dependency-type: direct:production
...

Signed-off-by: dependabot[bot] <support@github.com>
2026-06-25 02:53:57 +00:00
dependabot[bot] f1fd813ddc Bump actions/checkout from 6.0.3 to 7.0.0
Bumps [actions/checkout](https://github.com/actions/checkout) from 6.0.3 to 7.0.0.
- [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/v6.0.3...v7.0.0)

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

Signed-off-by: dependabot[bot] <support@github.com>
2026-06-25 02:53:16 +00:00
Sylvia van Os dfb8089db3 Merge pull request #3176 from weblate/weblate-catima-catima
Translations update from Hosted Weblate
2026-06-24 20:38:29 +02:00
தமிழ்நேரம் cf6cd74e8f Translated using Weblate (Tamil)
Currently translated at 100.0% (321 of 321 strings)

Translation: Catima/Android
Translate-URL: https://hosted.weblate.org/projects/catima/catima/ta/
2026-06-24 16:01:29 +00:00
Sylvia van Os 5b93bd79a9 Merge pull request #3175 from weblate/weblate-catima-catima
Translations update from Hosted Weblate
2026-06-23 13:37:41 +02:00
தமிழ்நேரம் 5831adbcc6 Translated using Weblate (Tamil)
Currently translated at 92.6% (152 of 164 strings)

Translation: Catima/Android (Fastlane)
Translate-URL: https://hosted.weblate.org/projects/catima/fastlane/ta/
2026-06-23 04:01:46 +00:00
Sylvia van Os 133b6df382 Merge pull request #3173 from CatimaLoyalty/create-pull-request/patch-1782030522
Update contributors
2026-06-21 10:56:38 +02:00
TheLastProject 0e9abac8a2 Update contributors 2026-06-21 08:28:42 +00:00
Sylvia van Os b6b172ebfd Merge pull request #3172 from weblate/weblate-catima-catima
Translations update from Hosted Weblate
2026-06-21 10:12:49 +02:00
Joel A 561f508e02 Translated using Weblate (Swedish)
Currently translated at 100.0% (321 of 321 strings)

Translation: Catima/Android
Translate-URL: https://hosted.weblate.org/projects/catima/catima/sv/
2026-06-21 03:01:29 +00:00
Sylvia van Os b36a29a5c7 Merge pull request #3170 from weblate/weblate-catima-catima
Translations update from Hosted Weblate
2026-06-20 09:45:44 +02:00
Joel A 938f17b559 Translated using Weblate (Swedish)
Currently translated at 98.7% (317 of 321 strings)

Translation: Catima/Android
Translate-URL: https://hosted.weblate.org/projects/catima/catima/sv/
2026-06-20 00:01:25 +02:00
Sylvia van Os 9feec7f6e3 Merge pull request #3169 from CatimaLoyalty/dependabot/github_actions/gradle/actions-6.1.1
Bump gradle/actions from 6.1.0 to 6.1.1
2026-06-18 08:30:08 +02:00
dependabot[bot] b1f0e7bbfd Bump gradle/actions from 6.1.0 to 6.1.1
Bumps [gradle/actions](https://github.com/gradle/actions) from 6.1.0 to 6.1.1.
- [Release notes](https://github.com/gradle/actions/releases)
- [Commits](https://github.com/gradle/actions/compare/v6.1.0...v6.1.1)

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

Signed-off-by: dependabot[bot] <support@github.com>
2026-06-18 02:53:18 +00:00
Sylvia van Os 24335cb2fc Merge pull request #3168 from CatimaLoyalty/create-pull-request/patch-1781424787
Update contributors
2026-06-14 11:30:00 +02:00
TheLastProject 4d41ae9448 Update contributors 2026-06-14 08:13:07 +00:00
Sylvia van Os d380560ff0 Merge pull request #3167 from weblate/weblate-catima-catima
Translations update from Hosted Weblate
2026-06-13 17:38:04 +02:00
Cosmin Humeniuc aa649ca9a9 Translated using Weblate (Romanian)
Currently translated at 100.0% (321 of 321 strings)

Translation: Catima/Android
Translate-URL: https://hosted.weblate.org/projects/catima/catima/ro/
2026-06-13 15:01:31 +00:00
Libre 754f9c51ea Translated using Weblate (Spanish)
Currently translated at 95.7% (157 of 164 strings)

Translation: Catima/Android (Fastlane)
Translate-URL: https://hosted.weblate.org/projects/catima/fastlane/es/
2026-06-13 15:01:30 +00:00
Sylvia van Os c6a2f79946 Merge pull request #3165 from CatimaLoyalty/dependabot/gradle/kotlin-2.4.0
Bump kotlin from 2.3.21 to 2.4.0
2026-06-12 16:24:03 +02:00
Sylvia van Os 3e6a735217 Merge pull request #3166 from weblate/weblate-catima-catima
Translations update from Hosted Weblate
2026-06-12 14:42:26 +02:00
E Sa d0d9d70445 Translated using Weblate (Arabic)
Currently translated at 100.0% (321 of 321 strings)

Translation: Catima/Android
Translate-URL: https://hosted.weblate.org/projects/catima/catima/ar/
2026-06-12 11:01:21 +02:00
Sylvia van Os 9db715b916 Merge pull request #3164 from CatimaLoyalty/dependabot/github_actions/actions/checkout-6.0.3
Bump actions/checkout from 6.0.2 to 6.0.3
2026-06-11 10:32:49 +02:00
dependabot[bot] 7c88c004b6 Bump actions/checkout from 6.0.2 to 6.0.3
Bumps [actions/checkout](https://github.com/actions/checkout) from 6.0.2 to 6.0.3.
- [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/v6.0.2...v6.0.3)

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

Signed-off-by: dependabot[bot] <support@github.com>
2026-06-11 07:29:37 +00:00
Sylvia van Os 6215d77b72 Merge pull request #3163 from CatimaLoyalty/dependabot/github_actions/gradle/actions-6.1.0
Bump gradle/actions from 6 to 6.1.0
2026-06-11 09:27:58 +02:00
dependabot[bot] c947f53d2c Bump kotlin from 2.3.21 to 2.4.0
Bumps `kotlin` from 2.3.21 to 2.4.0.

Updates `org.jetbrains.kotlin.android` from 2.3.21 to 2.4.0
- [Release notes](https://github.com/JetBrains/kotlin/releases)
- [Changelog](https://github.com/JetBrains/kotlin/blob/master/ChangeLog.md)
- [Commits](https://github.com/JetBrains/kotlin/compare/v2.3.21...v2.4.0)

Updates `org.jetbrains.kotlin.plugin.compose` from 2.3.21 to 2.4.0
- [Release notes](https://github.com/JetBrains/kotlin/releases)
- [Changelog](https://github.com/JetBrains/kotlin/blob/master/ChangeLog.md)
- [Commits](https://github.com/JetBrains/kotlin/compare/v2.3.21...v2.4.0)

---
updated-dependencies:
- dependency-name: org.jetbrains.kotlin.android
  dependency-version: 2.4.0
  dependency-type: direct:production
  update-type: version-update:semver-minor
- dependency-name: org.jetbrains.kotlin.plugin.compose
  dependency-version: 2.4.0
  dependency-type: direct:production
  update-type: version-update:semver-minor
...

Signed-off-by: dependabot[bot] <support@github.com>
2026-06-11 02:55:24 +00:00
dependabot[bot] d9029284c3 Bump gradle/actions from 6 to 6.1.0
Bumps [gradle/actions](https://github.com/gradle/actions) from 6 to 6.1.0.
- [Release notes](https://github.com/gradle/actions/releases)
- [Commits](https://github.com/gradle/actions/compare/v6...v6.1.0)

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

Signed-off-by: dependabot[bot] <support@github.com>
2026-06-11 02:53:05 +00:00
Sylvia van Os 48b099e182 Merge pull request #3160 from weblate/weblate-catima-catima
Translations update from Hosted Weblate
2026-06-10 09:59:48 +02:00
Hosted Weblate cbac258a6a Update translation files
Updated by "Remove blank strings" hook in Weblate.

Translation: Catima/Android (Fastlane)
Translate-URL: https://hosted.weblate.org/projects/catima/fastlane/
2026-06-10 02:04:07 +00:00
dukezas 256a39643b Translated using Weblate (Lithuanian)
Currently translated at 8.5% (14 of 164 strings)

Translation: Catima/Android (Fastlane)
Translate-URL: https://hosted.weblate.org/projects/catima/fastlane/lt/
2026-06-10 02:04:07 +00:00
Sylvia van Os 9dc21315b8 Merge pull request #3159 from CatimaLoyalty/create-pull-request/patch-1780821725
Update contributors
2026-06-07 11:50:49 +02:00
TheLastProject d27ada63b1 Update contributors 2026-06-07 08:42:05 +00:00
Sylvia van Os 97a2874218 Merge pull request #3158 from weblate/weblate-catima-catima
Translations update from Hosted Weblate
2026-06-06 23:13:49 +02:00
Jozef 1c3471f7b9 Translated using Weblate (Slovenian)
Currently translated at 100.0% (321 of 321 strings)

Translation: Catima/Android
Translate-URL: https://hosted.weblate.org/projects/catima/catima/sl/
2026-06-06 14:01:16 +00:00
Sylvia van Os b8b677e7a8 Merge pull request #3157 from weblate/weblate-catima-catima
Translations update from Hosted Weblate
2026-06-04 16:02:20 +02:00
Oğuz Ersen 986873e945 Translated using Weblate (Turkish)
Currently translated at 100.0% (321 of 321 strings)

Translation: Catima/Android
Translate-URL: https://hosted.weblate.org/projects/catima/catima/tr/
2026-06-04 12:01:15 +00:00
cirrro 7e90a439a6 Translated using Weblate (Ukrainian)
Currently translated at 100.0% (321 of 321 strings)

Translation: Catima/Android
Translate-URL: https://hosted.weblate.org/projects/catima/catima/uk/
2026-06-04 12:01:14 +00:00
Sylvia van Os ba2dab02a6 Merge pull request #3156 from CatimaLoyalty/dependabot/github_actions/actions/checkout-6.0.2
Bump actions/checkout from 6 to 6.0.2
2026-06-04 07:23:53 +02:00
dependabot[bot] 5aad361ebd Bump actions/checkout from 6 to 6.0.2
Bumps [actions/checkout](https://github.com/actions/checkout) from 6 to 6.0.2.
- [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/v6...v6.0.2)

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

Signed-off-by: dependabot[bot] <support@github.com>
2026-06-04 04:18:57 +00:00
Sylvia van Os 418443300c Merge pull request #3154 from weblate/weblate-catima-catima
Translations update from Hosted Weblate
2026-06-02 22:56:55 +02:00
Cristi 3958a48137 Translated using Weblate (Romanian)
Currently translated at 100.0% (321 of 321 strings)

Translation: Catima/Android
Translate-URL: https://hosted.weblate.org/projects/catima/catima/ro/
2026-06-02 17:01:13 +00:00
jaraandres176-oss c829b2d9bf Translated using Weblate (Spanish (Argentina))
Currently translated at 86.2% (277 of 321 strings)

Translation: Catima/Android
Translate-URL: https://hosted.weblate.org/projects/catima/catima/es_AR/
2026-06-02 17:01:12 +00:00
Sylvia van Os 12d78786f0 Merge pull request #3153 from CatimaLoyalty/create-pull-request/patch-1780255717
Update feature graphic
2026-05-31 21:51:21 +02:00
TheLastProject 87655c9e28 Update feature graphic 2026-05-31 19:28:37 +00:00
Sylvia van Os eb54d7c250 Merge pull request #3152 from weblate/weblate-catima-catima
Translations update from Hosted Weblate
2026-05-31 21:27:09 +02:00
dukezas 78a7b93c21 Translated using Weblate (Lithuanian)
Currently translated at 78.8% (253 of 321 strings)

Translation: Catima/Android
Translate-URL: https://hosted.weblate.org/projects/catima/catima/lt/
2026-05-31 21:01:28 +02:00
dukezas 4da8378aef Translated using Weblate (Lithuanian)
Currently translated at 2.4% (4 of 164 strings)

Translation: Catima/Android (Fastlane)
Translate-URL: https://hosted.weblate.org/projects/catima/fastlane/lt/
2026-05-31 21:01:27 +02:00
hugoalh 2f6687ec90 Translated using Weblate (Chinese (Traditional Han script))
Currently translated at 100.0% (321 of 321 strings)

Translation: Catima/Android
Translate-URL: https://hosted.weblate.org/projects/catima/catima/zh_Hant/
2026-05-31 21:01:26 +02:00
Sylvia van Os 38b2584153 Translated using Weblate (Icelandic)
Currently translated at 38.0% (122 of 321 strings)

Translation: Catima/Android
Translate-URL: https://hosted.weblate.org/projects/catima/catima/is/
2026-05-31 21:01:25 +02:00
Sylvia van Os a25d36da29 Merge pull request #3151 from CatimaLoyalty/create-pull-request/patch-1780213395
Update contributors
2026-05-31 16:00:34 +02:00
TheLastProject 6f7c3ec39c Update contributors 2026-05-31 07:43:15 +00:00
Sylvia van Os d9e94d52f5 Merge pull request #3150 from weblate/weblate-catima-catima
Translations update from Hosted Weblate
2026-05-30 20:07:18 +02:00
Sylvia van Os 035f651b9f Merge pull request #3076 from CatimaLoyalty/dependabot/github_actions/gradle/actions-6
Bump gradle/actions from 5 to 6
2026-05-30 20:00:03 +02:00
dependabot[bot] 98d2c69640 Bump gradle/actions from 5 to 6
Bumps [gradle/actions](https://github.com/gradle/actions) from 5 to 6.
- [Release notes](https://github.com/gradle/actions/releases)
- [Commits](https://github.com/gradle/actions/compare/v5...v6)

---
updated-dependencies:
- dependency-name: gradle/actions
  dependency-version: '6'
  dependency-type: direct:production
  update-type: version-update:semver-major
...

Signed-off-by: dependabot[bot] <support@github.com>
2026-05-30 17:46:58 +00:00
Hosted Weblate 0dfeb2dcc8 Update translation files
Updated by "Remove blank strings" hook in Weblate.

Translation: Catima/Android
Translate-URL: https://hosted.weblate.org/projects/catima/catima/
2026-05-30 07:56:47 +00:00
Seongho 645e7780f3 Translated using Weblate (Korean)
Currently translated at 100.0% (164 of 164 strings)

Translation: Catima/Android (Fastlane)
Translate-URL: https://hosted.weblate.org/projects/catima/fastlane/ko/
2026-05-30 07:56:47 +00:00
Seongho d635e31afc Translated using Weblate (Korean)
Currently translated at 100.0% (321 of 321 strings)

Translation: Catima/Android
Translate-URL: https://hosted.weblate.org/projects/catima/catima/ko/
2026-05-30 07:56:46 +00:00
Саша Петровић 91d0882ad8 Translated using Weblate (Serbian)
Currently translated at 100.0% (321 of 321 strings)

Translation: Catima/Android
Translate-URL: https://hosted.weblate.org/projects/catima/catima/sr/
2026-05-30 07:56:46 +00:00
Pjetur G. Hjaltason 4ab4ac7668 Translated using Weblate (Icelandic)
Currently translated at 37.6% (121 of 321 strings)

Translation: Catima/Android
Translate-URL: https://hosted.weblate.org/projects/catima/catima/is/
2026-05-30 07:56:45 +00:00
Sylvia van Os 48115b3f2d Merge pull request #3149 from weblate/weblate-catima-catima
Translations update from Hosted Weblate
2026-05-28 20:08:57 +02:00
Spell f55559d6d6 Translated using Weblate (Portuguese)
Currently translated at 100.0% (321 of 321 strings)

Translation: Catima/Android
Translate-URL: https://hosted.weblate.org/projects/catima/catima/pt/
2026-05-27 23:12:52 +00:00
Sylvia van Os 0bf1afd7af Merge pull request #3147 from weblate/weblate-catima-catima
Translations update from Hosted Weblate
2026-05-27 20:00:31 +02:00
Watchman89 1ff4f47102 Translated using Weblate (Dutch)
Currently translated at 89.6% (147 of 164 strings)

Translation: Catima/Android (Fastlane)
Translate-URL: https://hosted.weblate.org/projects/catima/fastlane/nl/
2026-05-27 15:24:51 +00:00
Sylvia van Os 70dbd7eac1 Translated using Weblate (Korean)
Currently translated at 99.6% (320 of 321 strings)

Translation: Catima/Android
Translate-URL: https://hosted.weblate.org/projects/catima/catima/ko/
2026-05-27 15:24:50 +00:00
MizoWNA ff7ebe0629 Translated using Weblate (Arabic)
Currently translated at 100.0% (321 of 321 strings)

Translation: Catima/Android
Translate-URL: https://hosted.weblate.org/projects/catima/catima/ar/
2026-05-27 15:24:49 +00:00
Sérgio Santos 0d847607a2 Translated using Weblate (Portuguese (Portugal))
Currently translated at 100.0% (321 of 321 strings)

Translation: Catima/Android
Translate-URL: https://hosted.weblate.org/projects/catima/catima/pt_PT/
2026-05-27 15:24:48 +00:00
Trash Soul dd53862d37 Translated using Weblate (Korean)
Currently translated at 99.6% (320 of 321 strings)

Translation: Catima/Android
Translate-URL: https://hosted.weblate.org/projects/catima/catima/ko/
2026-05-27 15:24:47 +00:00
Trash Soul 9df5366fc6 Translated using Weblate (Korean)
Currently translated at 92.0% (151 of 164 strings)

Translation: Catima/Android (Fastlane)
Translate-URL: https://hosted.weblate.org/projects/catima/fastlane/ko/
2026-05-27 15:24:47 +00:00
MizoWNA 69f888fe29 Translated using Weblate (Arabic)
Currently translated at 42.0% (69 of 164 strings)

Translation: Catima/Android (Fastlane)
Translate-URL: https://hosted.weblate.org/projects/catima/fastlane/ar/
2026-05-27 15:24:46 +00:00
Sylvia van Os bdc08ef95c Merge pull request #3148 from CatimaLoyalty/dependabot/gradle/androidx.compose-compose-bom-2026.05.01
Bump androidx.compose:compose-bom from 2026.05.00 to 2026.05.01
2026-05-27 07:57:57 +02:00
dependabot[bot] 7b098bb6dd Bump androidx.compose:compose-bom from 2026.05.00 to 2026.05.01
Bumps androidx.compose:compose-bom from 2026.05.00 to 2026.05.01.

---
updated-dependencies:
- dependency-name: androidx.compose:compose-bom
  dependency-version: 2026.05.01
  dependency-type: direct:production
...

Signed-off-by: dependabot[bot] <support@github.com>
2026-05-27 04:46:54 +00:00
Sylvia van Os 43085d0c13 Merge pull request #3146 from weblate/weblate-catima-catima
Translations update from Hosted Weblate
2026-05-26 14:29:16 +02:00
Roberto Chiarella 89885f5e9d Translated using Weblate (Italian)
Currently translated at 100.0% (164 of 164 strings)

Translation: Catima/Android (Fastlane)
Translate-URL: https://hosted.weblate.org/projects/catima/fastlane/it/
2026-05-26 01:11:57 +02:00
Roberto Chiarella 3d48bdeee6 Translated using Weblate (Italian)
Currently translated at 100.0% (321 of 321 strings)

Translation: Catima/Android
Translate-URL: https://hosted.weblate.org/projects/catima/catima/it/
2026-05-26 01:11:56 +02:00
Sylvia van Os e331f2e293 Merge pull request #3145 from CatimaLoyalty/create-pull-request/patch-1779605853
Update contributors
2026-05-24 10:22:43 +02:00
TheLastProject 0a605d518b Update contributors 2026-05-24 06:57:32 +00:00
Sylvia van Os 72f02bd16d Merge pull request #3144 from weblate/weblate-catima-catima
Translations update from Hosted Weblate
2026-05-23 13:06:20 +02:00
Watchman89 ff9a6884a9 Translated using Weblate (Dutch)
Currently translated at 79.8% (131 of 164 strings)

Translation: Catima/Android (Fastlane)
Translate-URL: https://hosted.weblate.org/projects/catima/fastlane/nl/
2026-05-23 12:12:09 +02:00
Watchman89 9fd6c89c5b Translated using Weblate (Dutch)
Currently translated at 100.0% (321 of 321 strings)

Translation: Catima/Android
Translate-URL: https://hosted.weblate.org/projects/catima/catima/nl/
2026-05-23 12:12:09 +02:00
Sylvia van Os 73d2644e96 Merge pull request #3143 from weblate/weblate-catima-catima
Translations update from Hosted Weblate
2026-05-22 17:18:56 +02:00
Libre e8de07bdb8 Translated using Weblate (Spanish)
Currently translated at 100.0% (321 of 321 strings)

Translation: Catima/Android
Translate-URL: https://hosted.weblate.org/projects/catima/catima/es/
2026-05-22 05:12:21 +02:00
Liner Seven 3003acdc81 Translated using Weblate (Japanese)
Currently translated at 100.0% (321 of 321 strings)

Translation: Catima/Android
Translate-URL: https://hosted.weblate.org/projects/catima/catima/ja/
2026-05-22 05:12:20 +02:00
Balázs Meskó 350241f517 Translated using Weblate (Hungarian)
Currently translated at 100.0% (321 of 321 strings)

Translation: Catima/Android
Translate-URL: https://hosted.weblate.org/projects/catima/catima/hu/
2026-05-22 05:12:20 +02:00
Vincze Dorottya ed6289341a Translated using Weblate (Hungarian)
Currently translated at 100.0% (321 of 321 strings)

Translation: Catima/Android
Translate-URL: https://hosted.weblate.org/projects/catima/catima/hu/
2026-05-22 05:12:19 +02:00
delvani 0811eb75df Translated using Weblate (Portuguese (Brazil))
Currently translated at 100.0% (321 of 321 strings)

Translation: Catima/Android
Translate-URL: https://hosted.weblate.org/projects/catima/catima/pt_BR/
2026-05-22 05:12:19 +02:00
Liner Seven 619408e272 Translated using Weblate (Japanese)
Currently translated at 100.0% (164 of 164 strings)

Translation: Catima/Android (Fastlane)
Translate-URL: https://hosted.weblate.org/projects/catima/fastlane/ja/
2026-05-22 05:12:18 +02:00
Watchman89 c43ff9dc95 Translated using Weblate (Dutch)
Currently translated at 68.9% (113 of 164 strings)

Translation: Catima/Android (Fastlane)
Translate-URL: https://hosted.weblate.org/projects/catima/fastlane/nl/
2026-05-22 05:12:18 +02:00
Thu Trang Pham 7fd461ef61 Translated using Weblate (Vietnamese)
Currently translated at 100.0% (321 of 321 strings)

Translation: Catima/Android
Translate-URL: https://hosted.weblate.org/projects/catima/catima/vi/
2026-05-22 05:12:15 +02:00
Sylvia van Os 3b17a24f29 Merge pull request #3141 from weblate/weblate-catima-catima
Translations update from Hosted Weblate
2026-05-21 17:10:59 +02:00
Sylvia van Os 95358bf16b Merge pull request #3142 from CatimaLoyalty/dependabot/gradle/com.google.android.material-material-1.14.0
Bump com.google.android.material:material from 1.13.0 to 1.14.0
2026-05-21 09:26:30 +02:00
dependabot[bot] d8de262111 Bump com.google.android.material:material from 1.13.0 to 1.14.0
Bumps [com.google.android.material:material](https://github.com/material-components/material-components-android) from 1.13.0 to 1.14.0.
- [Release notes](https://github.com/material-components/material-components-android/releases)
- [Commits](https://github.com/material-components/material-components-android/compare/1.13.0...1.14.0)

---
updated-dependencies:
- dependency-name: com.google.android.material:material
  dependency-version: 1.14.0
  dependency-type: direct:production
  update-type: version-update:semver-minor
...

Signed-off-by: dependabot[bot] <support@github.com>
2026-05-21 02:52:02 +00:00
Edgars Andersons 5f78ee7f95 Translated using Weblate (Latvian)
Currently translated at 100.0% (321 of 321 strings)

Translation: Catima/Android
Translate-URL: https://hosted.weblate.org/projects/catima/catima/lv/
2026-05-20 11:12:06 +02:00
Edgars Andersons c3cbdf5a24 Translated using Weblate (Latvian)
Currently translated at 12.1% (20 of 164 strings)

Translation: Catima/Android (Fastlane)
Translate-URL: https://hosted.weblate.org/projects/catima/fastlane/lv/
2026-05-20 11:12:05 +02:00
ssantos ac1f7d158a Translated using Weblate (Portuguese (Portugal))
Currently translated at 100.0% (164 of 164 strings)

Translation: Catima/Android (Fastlane)
Translate-URL: https://hosted.weblate.org/projects/catima/fastlane/pt_PT/
2026-05-20 11:12:05 +02:00
ssantos bdf8823855 Translated using Weblate (Portuguese)
Currently translated at 100.0% (164 of 164 strings)

Translation: Catima/Android (Fastlane)
Translate-URL: https://hosted.weblate.org/projects/catima/fastlane/pt/
2026-05-20 11:12:04 +02:00
Sylvia van Os 17693ec3f2 Merge pull request #3140 from CatimaLoyalty/dependabot/gradle/com.android.application-9.2.1
Bump com.android.application from 9.1.0 to 9.2.1
2026-05-19 17:13:21 +02:00
Sylvia van Os 1afea8f39c Merge pull request #3139 from CatimaLoyalty/dependabot/gradle/gradle-wrapper-9.5.1
Bump gradle-wrapper from 9.5.0 to 9.5.1
2026-05-19 17:13:02 +02:00
Sylvia van Os f0068144dc Merge pull request #3138 from weblate/weblate-catima-catima
Translations update from Hosted Weblate
2026-05-19 17:12:20 +02:00
dependabot[bot] 90a4de1343 Bump com.android.application from 9.1.0 to 9.2.1
Bumps com.android.application from 9.1.0 to 9.2.1.

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

Signed-off-by: dependabot[bot] <support@github.com>
2026-05-19 13:43:01 +00:00
dependabot[bot] e83a8ef7e7 Bump gradle-wrapper from 9.5.0 to 9.5.1
Bumps [gradle-wrapper](https://github.com/gradle/gradle) from 9.5.0 to 9.5.1.
- [Release notes](https://github.com/gradle/gradle/releases)
- [Commits](https://github.com/gradle/gradle/compare/v9.5.0...v9.5.1)

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

Signed-off-by: dependabot[bot] <support@github.com>
2026-05-19 13:42:15 +00:00
大王叫我来巡山 2526cb65ba Translated using Weblate (Chinese (Simplified Han script))
Currently translated at 100.0% (164 of 164 strings)

Translation: Catima/Android (Fastlane)
Translate-URL: https://hosted.weblate.org/projects/catima/fastlane/zh_Hans/
2026-05-19 10:12:45 +02:00
NooB9496 4f419b86e2 Translated using Weblate (Polish)
Currently translated at 100.0% (321 of 321 strings)

Translation: Catima/Android
Translate-URL: https://hosted.weblate.org/projects/catima/catima/pl/
2026-05-19 10:12:45 +02:00
josé m. 6c1baa9ec1 Translated using Weblate (Galician)
Currently translated at 100.0% (321 of 321 strings)

Translation: Catima/Android
Translate-URL: https://hosted.weblate.org/projects/catima/catima/gl/
2026-05-19 10:12:44 +02:00
Fjuro b499d540dc Translated using Weblate (Czech)
Currently translated at 100.0% (164 of 164 strings)

Translation: Catima/Android (Fastlane)
Translate-URL: https://hosted.weblate.org/projects/catima/fastlane/cs/
2026-05-19 10:12:43 +02:00
Sylvain Pichon 522bd5d4b0 Translated using Weblate (French)
Currently translated at 100.0% (164 of 164 strings)

Translation: Catima/Android (Fastlane)
Translate-URL: https://hosted.weblate.org/projects/catima/fastlane/fr/
2026-05-19 10:12:43 +02:00
Vasilis K. d3d6d1a565 Translated using Weblate (Greek)
Currently translated at 100.0% (321 of 321 strings)

Translation: Catima/Android
Translate-URL: https://hosted.weblate.org/projects/catima/catima/el/
2026-05-19 10:12:42 +02:00
Fjuro e6b639040b Translated using Weblate (Czech)
Currently translated at 100.0% (321 of 321 strings)

Translation: Catima/Android
Translate-URL: https://hosted.weblate.org/projects/catima/catima/cs/
2026-05-19 10:12:42 +02:00
大王叫我来巡山 64259502db Translated using Weblate (Chinese (Simplified Han script))
Currently translated at 100.0% (321 of 321 strings)

Translation: Catima/Android
Translate-URL: https://hosted.weblate.org/projects/catima/catima/zh_Hans/
2026-05-19 10:12:41 +02:00
B o d o a5a9c1330b Translated using Weblate (German)
Currently translated at 100.0% (321 of 321 strings)

Translation: Catima/Android
Translate-URL: https://hosted.weblate.org/projects/catima/catima/de/
2026-05-19 10:12:40 +02:00
NooB9496 c9fb6ad2ac Translated using Weblate (Polish)
Currently translated at 100.0% (164 of 164 strings)

Translation: Catima/Android (Fastlane)
Translate-URL: https://hosted.weblate.org/projects/catima/fastlane/pl/
2026-05-19 10:12:40 +02:00
Alyx.dev 3ecc752c6c Translated using Weblate (French)
Currently translated at 100.0% (321 of 321 strings)

Translation: Catima/Android
Translate-URL: https://hosted.weblate.org/projects/catima/catima/fr/
2026-05-19 10:12:39 +02:00
B o d o db0f97542f Translated using Weblate (German)
Currently translated at 100.0% (164 of 164 strings)

Translation: Catima/Android (Fastlane)
Translate-URL: https://hosted.weblate.org/projects/catima/fastlane/de/
2026-05-19 10:12:39 +02:00
Priit Jõerüüt c9d372223e Translated using Weblate (Estonian)
Currently translated at 100.0% (321 of 321 strings)

Translation: Catima/Android
Translate-URL: https://hosted.weblate.org/projects/catima/catima/et/
2026-05-19 10:12:38 +02:00
solokot d5be79198c Translated using Weblate (Russian)
Currently translated at 100.0% (321 of 321 strings)

Translation: Catima/Android
Translate-URL: https://hosted.weblate.org/projects/catima/catima/ru/
2026-05-19 10:12:38 +02:00
109247019824 b75a5b56d2 Translated using Weblate (Bulgarian)
Currently translated at 100.0% (321 of 321 strings)

Translation: Catima/Android
Translate-URL: https://hosted.weblate.org/projects/catima/catima/bg/
2026-05-19 10:12:37 +02:00
Sylvia van Os a1da000157 Update fastlane 2026-05-18 21:43:43 +02:00
Sylvia van Os 965d1fd2b7 Merge pull request #3137 from weblate/weblate-catima-catima
Translations update from Hosted Weblate
2026-05-18 21:04:27 +02:00
Саша Петровић bc34cd9b5e Translated using Weblate (Serbian)
Currently translated at 100.0% (320 of 320 strings)

Translation: Catima/Android
Translate-URL: https://hosted.weblate.org/projects/catima/catima/sr/
2026-05-18 09:11:40 +02:00
Sylvia van Os d3d2368be0 Merge pull request #3135 from CatimaLoyalty/create-pull-request/patch-1779002926
Update contributors
2026-05-17 10:42:22 +02:00
TheLastProject afb78ac8b8 Update contributors 2026-05-17 07:28:45 +00:00
671 changed files with 6752 additions and 805 deletions

No files matched your search

+30 -15
View File
@@ -4,11 +4,7 @@ on:
push:
branches:
- main
- staging
- trying
pull_request:
branches:
- main
permissions:
actions: none
checks: none
@@ -30,41 +26,60 @@ jobs:
runs-on: ubuntu-latest
strategy:
matrix:
flavor: [Foss, Gplay]
flavor: [fdroidLegacy, foss, gplay]
steps:
- uses: actions/checkout@v6
- uses: gradle/actions/wrapper-validation@v5
- uses: actions/checkout@v7.0.1
- name: Ensure sentence-cased flavor variables
run: |
flavor="$(echo ${{ matrix.flavor }})"
echo "sentenceCasedFlavor=${flavor^}" >> "$GITHUB_ENV"
- uses: gradle/actions/wrapper-validation@v6.3.0
- name: set up OpenJDK 25
run: |
sudo apt-get update
sudo apt-get install -y openjdk-25-jdk-headless
sudo update-alternatives --auto java
- name: Build
run: ./gradlew assemble${{ matrix.flavor }}Release
run: ./gradlew assemble${sentenceCasedFlavor}Release
- name: Check for non-free libraries
run: |
# Get Katastima APK scanner
wget -q https://codeberg.org/Katastima/apkscanner/releases/download/v0.0.9/apk-scanner_v0.0.9.jar
# Print pretty result
java -jar apk-scanner_v0.0.9.jar scan-apk "$(echo 'app/build/outputs/apk/${{ matrix.flavor }}/release/app-${{ matrix.flavor }}-release-unsigned.apk')"
# Check for offending libraries
# Exit code 4 = no result, which is what we want
set +e
java -jar apk-scanner_v0.0.9.jar scan-apk --json=yes "$(echo 'app/build/outputs/apk/${{ matrix.flavor }}/release/app-${{ matrix.flavor }}-release-unsigned.apk')" | jq --exit-status '.libraryCheckResult.offendingLibraries[] | select((.libraryId == "/org/acra" and .license == "Apache-2.0")|not)'
if [ "$?" -ne 4 ]; then
echo "Bad libraries found!"
exit 1
fi
set -e
- name: Check lint
run: ./gradlew lint${{ matrix.flavor }}Release
run: ./gradlew lint${sentenceCasedFlavor}Release
- name: Run unit tests
run: timeout 5m ./gradlew test${{ matrix.flavor }}DebugUnitTest || { ./gradlew --stop && timeout 5m ./gradlew test${{ matrix.flavor }}DebugUnitTest; }
run: timeout 5m ./gradlew test${sentenceCasedFlavor}DebugUnitTest || { ./gradlew --stop && timeout 5m ./gradlew test${sentenceCasedFlavor}DebugUnitTest; }
- name: Enable KVM
run: |
echo 'KERNEL=="kvm", GROUP="kvm", MODE="0666", OPTIONS+="static_node=kvm"' | sudo tee /etc/udev/rules.d/99-kvm4all.rules
sudo udevadm control --reload-rules
sudo udevadm trigger --name-match=kvm
- name: Run instrumented tests (API 23)
uses: ReactiveCircus/android-emulator-runner@v2
uses: ReactiveCircus/android-emulator-runner@v2.38.0
with:
api-level: 23
arch: x86_64
script: ./gradlew connected${{ matrix.flavor }}DebugAndroidTest
script: ./gradlew connected${sentenceCasedFlavor}DebugAndroidTest
- name: Run instrumented tests (API 35)
uses: ReactiveCircus/android-emulator-runner@v2
uses: ReactiveCircus/android-emulator-runner@v2.38.0
with:
api-level: 35
arch: x86_64
script: ./gradlew connected${{ matrix.flavor }}DebugAndroidTest
script: ./gradlew connected${sentenceCasedFlavor}DebugAndroidTest
- name: Archive test results
if: always()
uses: actions/upload-artifact@v7.0.1
with:
name: test-results-flavor${{ matrix.flavor }}
name: test-results-flavor-${{ matrix.flavor }}
path: app/build/reports
+2 -2
View File
@@ -19,9 +19,9 @@ jobs:
steps:
- name: Checkout repo
id: checkout
uses: actions/checkout@v6
uses: actions/checkout@v7.0.1
- name: Setup Python
uses: actions/setup-python@v6.2.0
uses: actions/setup-python@v7.0.0
with:
python-version: '3.x'
- name: Run converter script
+1 -1
View File
@@ -17,7 +17,7 @@ jobs:
steps:
- name: Checkout repo
id: checkout
uses: actions/checkout@v6
uses: actions/checkout@v7.0.1
- name: Update contributors
id: update_contributors
uses: TheLastProject/contributors-to-file-action@v3.2.0
@@ -17,7 +17,7 @@ jobs:
generate-feature-graphic:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v6
- uses: actions/checkout@v7.0.1
- name: Install requirements
run: |
sudo apt-get update
+1 -5
View File
@@ -4,11 +4,7 @@ on:
push:
branches:
- main
- staging
- trying
pull_request:
branches:
- main
permissions:
actions: none
checks: none
@@ -27,7 +23,7 @@ jobs:
build:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v6
- uses: actions/checkout@v7.0.1
- name: Fail on bad translations
run: if grep -ri "&lt;xliff" app/src/main/res/values*/strings.xml; then echo "Invalidly escaped translations found"; exit 1; fi
- name: Check app_name consistency
+1 -1
View File
@@ -17,7 +17,7 @@ jobs:
update-locales:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v6
- uses: actions/checkout@v7.0.1
- name: Add new locales
run: .scripts/new-locales.py
- name: Update locales
+53
View File
@@ -0,0 +1,53 @@
name: Android Wear CI
on:
workflow_dispatch:
push:
branches:
- main
pull_request:
permissions:
actions: none
checks: none
contents: read
deployments: none
discussions: none
id-token: none
issues: none
packages: none
pages: none
pull-requests: none
repository-projects: none
security-events: none
statuses: none
env:
JAVA_HOME: /usr/lib/jvm/java-25-openjdk-amd64
jobs:
build:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v7.0.1
- uses: gradle/actions/wrapper-validation@v6.3.0
- name: set up OpenJDK 25
run: |
sudo apt-get update
sudo apt-get install -y openjdk-25-jdk-headless
sudo update-alternatives --auto java
- name: Build
run: ./gradlew :wear:assembleRelease
- name: Check for non-free libraries
run: |
# Get Katastima APK scanner
wget -q https://codeberg.org/Katastima/apkscanner/releases/download/v0.0.9/apk-scanner_v0.0.9.jar
# Print pretty result
java -jar apk-scanner_v0.0.9.jar scan-apk "wear/build/outputs/apk/release/wear-release-unsigned.apk"
# Check for offending libraries
# Exit code 4 = no result, which is what we want
set +e
java -jar apk-scanner_v0.0.9.jar scan-apk --json=yes "wear/build/outputs/apk/release/wear-release-unsigned.apk" | jq --exit-status '.libraryCheckResult.offendingLibraries[]'
if [ "$?" -ne 4 ]; then
echo "Bad libraries found!"
exit 1
fi
set -e
- name: Check lint
run: ./gradlew :wear:lintRelease
+3
View File
@@ -19,6 +19,8 @@
/app/*.log
/app/build
/app/release
/wear/build
/wear/release
/.idea/*
!/.idea/icon.svg
# Bundle
@@ -28,3 +30,4 @@
# Catima-specific
SHA256SUMS
/shared/build
+1 -1
View File
@@ -15,7 +15,7 @@ with open('CHANGELOG.md') as changelog:
changelogs[version_code] = text
text = []
match = re.match("## \S* - (\d*).*", line)
match = re.match("## .+ - (\d*).*", line)
if not match:
raise ValueError(f"Invalid version line: {line}")
version_code = match.group(1)
+31
View File
@@ -1,5 +1,36 @@
# Changelog
## 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 (2026-08-12)
- Initial release of Wear OS companion app
## v2.44.0 - 168 (2026-07-28)
- Add option to open image in internal image viewer in gallery
## v2.43.0 - 167 (2026-07-12)
- Add support for showing the card ID in the card list
- Add support to sort by most recently added
- Add internal image viewer for zooming card front/back/icon images
## v2.42.1 - 166 (2026-05-16)
- Prevent crash on devices with misbehaving NFC
+11 -1
View File
@@ -23,7 +23,9 @@ for good reason.
## Code Changes
Note: submitting LLM ("AI") generated code is strongly discouraged, as such
### LLM ("AI") and coding agents
**Note:** submitting LLM ("AI") generated code is strongly discouraged, as such
code is often (subtly) incorrect or overcomplicated (for example: unnecessarily
pulling in extra libraries for functionality already covered by existing
libraries). It also often makes unrelated changes that increase the risk of
@@ -47,6 +49,14 @@ risk.
Please never submit LLM-generated code as-is.
### Kotlin and Compose migration
Catima uses a lot of "legacy" tech, Java, Android XML. This will be ported to Kotlin,
then Jetpack Compose; for further details, see
<https://github.com/CatimaLoyalty/Android/issues/2483>.
Thus, prefer Kotlin and Jetpack Compose for new code/UI where practical, especially new files/features.
### Test Your Code
There are four possible tests you can run to verify your code. The first
+66 -49
View File
@@ -8,8 +8,8 @@ GEM
artifactory (3.0.17)
atomos (0.1.3)
aws-eventstream (1.4.0)
aws-partitions (1.1246.0)
aws-sdk-core (3.246.0)
aws-partitions (1.1269.0)
aws-sdk-core (3.254.0)
aws-eventstream (~> 1, >= 1.3.0)
aws-partitions (~> 1, >= 1.992.0)
aws-sigv4 (~> 1.9)
@@ -17,17 +17,18 @@ GEM
bigdecimal
jmespath (~> 1, >= 1.6.1)
logger
aws-sdk-kms (1.124.0)
aws-sdk-core (~> 3, >= 3.244.0)
aws-sdk-kms (1.130.0)
aws-sdk-core (~> 3, >= 3.254.0)
aws-sigv4 (~> 1.5)
aws-sdk-s3 (1.221.0)
aws-sdk-core (~> 3, >= 3.244.0)
aws-sdk-s3 (1.227.0)
aws-sdk-core (~> 3, >= 3.254.0)
aws-sdk-kms (~> 1)
aws-sigv4 (~> 1.5)
aws-sigv4 (1.12.1)
aws-eventstream (~> 1, >= 1.0.2)
babosa (1.0.4)
base64 (0.3.0)
benchmark (0.5.0)
bigdecimal (4.1.2)
claide (1.1.0)
colored (1.2)
@@ -41,8 +42,9 @@ GEM
domain_name (0.6.20240107)
dotenv (2.8.1)
emoji_regex (3.2.3)
excon (0.112.0)
faraday (1.10.5)
excon (1.5.0)
logger
faraday (1.10.6)
faraday-em_http (~> 1.0)
faraday-em_synchrony (~> 1.0)
faraday-excon (~> 1.1)
@@ -71,39 +73,45 @@ GEM
faraday_middleware (1.2.1)
faraday (~> 1.0)
fastimage (2.4.1)
fastlane (2.229.0)
CFPropertyList (>= 2.3, < 4.0.0)
abbrev (~> 0.1.2)
addressable (>= 2.8, < 3.0.0)
fastlane (2.237.0)
CFPropertyList (>= 2.3, < 5.0.0)
abbrev (~> 0.1)
addressable (>= 2.9.0, < 3.0.0)
artifactory (~> 3.0)
aws-sdk-s3 (~> 1.0)
aws-sdk-s3 (~> 1.197)
babosa (>= 1.0.3, < 2.0.0)
bundler (>= 1.12.0, < 3.0.0)
base64 (~> 0.2)
benchmark (>= 0.1.0)
bundler (>= 2.4.0, < 5.0.0)
colored (~> 1.2)
commander (~> 4.6)
csv (~> 3.3)
dotenv (>= 2.1.1, < 3.0.0)
emoji_regex (>= 0.1, < 4.0)
excon (>= 0.71.0, < 1.0.0)
excon (>= 0.71.0, < 2.0.0)
faraday (~> 1.0)
faraday-cookie_jar (~> 0.0.6)
faraday_middleware (~> 1.0)
fastimage (>= 2.1.0, < 3.0.0)
fastlane-sirp (>= 1.0.0)
fastlane-sirp (>= 1.1.0)
gh_inspector (>= 1.1.2, < 2.0.0)
google-apis-androidpublisher_v3 (~> 0.3)
google-apis-playcustomapp_v1 (~> 0.1)
google-cloud-env (>= 1.6.0, < 2.0.0)
google-cloud-env (>= 1.6.0, < 2.3.0)
google-cloud-storage (~> 1.31)
highline (~> 2.0)
http-cookie (~> 1.0.5)
json (< 3.0.0)
jwt (>= 2.1.0, < 3)
jwt (>= 2.10.3, < 4)
logger (>= 1.6, < 2.0)
mini_magick (>= 4.9.4, < 5.0.0)
multi_json (~> 1.12)
multipart-post (>= 2.0.0, < 3.0.0)
mutex_m (~> 0.3.0)
mutex_m (~> 0.3)
naturally (~> 2.2)
nkf (~> 0.2)
optparse (>= 0.1.1, < 1.0.0)
ostruct (>= 0.1.0)
plist (>= 3.1.0, < 4.0.0)
rubyzip (>= 2.0.0, < 3.0.0)
security (= 0.1.5)
@@ -118,41 +126,46 @@ GEM
xcpretty-travis-formatter (>= 0.0.3, < 2.0.0)
fastlane-sirp (1.1.0)
gh_inspector (1.1.3)
google-apis-androidpublisher_v3 (0.54.0)
google-apis-core (>= 0.11.0, < 2.a)
google-apis-core (0.11.3)
google-apis-androidpublisher_v3 (0.104.0)
google-apis-core (>= 0.15.0, < 2.a)
google-apis-core (0.18.0)
addressable (~> 2.5, >= 2.5.1)
googleauth (>= 0.16.2, < 2.a)
httpclient (>= 2.8.1, < 3.a)
googleauth (~> 1.9)
httpclient (>= 2.8.3, < 3.a)
mini_mime (~> 1.0)
mutex_m
representable (~> 3.0)
retriable (>= 2.0, < 4.a)
rexml
google-apis-iamcredentials_v1 (0.17.0)
google-apis-core (>= 0.11.0, < 2.a)
google-apis-playcustomapp_v1 (0.13.0)
google-apis-core (>= 0.11.0, < 2.a)
google-apis-storage_v1 (0.31.0)
google-apis-core (>= 0.11.0, < 2.a)
google-cloud-core (1.8.0)
google-apis-iamcredentials_v1 (0.28.0)
google-apis-core (>= 0.15.0, < 2.a)
google-apis-playcustomapp_v1 (0.18.0)
google-apis-core (>= 0.15.0, < 2.a)
google-apis-storage_v1 (0.64.0)
google-apis-core (>= 0.15.0, < 2.a)
google-cloud-core (1.9.0)
google-cloud-env (>= 1.0, < 3.a)
google-cloud-errors (~> 1.0)
google-cloud-env (1.6.0)
faraday (>= 0.17.3, < 3.0)
google-cloud-errors (1.6.0)
google-cloud-storage (1.47.0)
google-cloud-env (2.2.2)
base64 (~> 0.2)
faraday (>= 1.0, < 3.a)
google-cloud-errors (1.7.0)
google-cloud-storage (1.62.0)
addressable (~> 2.8)
digest-crc (~> 0.4)
google-apis-iamcredentials_v1 (~> 0.1)
google-apis-storage_v1 (~> 0.31.0)
google-apis-core (>= 0.18, < 2)
google-apis-iamcredentials_v1 (~> 0.18)
google-apis-storage_v1 (>= 0.42)
google-cloud-core (~> 1.6)
googleauth (>= 0.16.2, < 2.a)
googleauth (~> 1.9)
mini_mime (~> 1.0)
googleauth (1.8.1)
faraday (>= 0.17.3, < 3.a)
jwt (>= 1.4, < 3.0)
multi_json (~> 1.11)
google-logging-utils (0.2.0)
googleauth (1.17.1)
faraday (>= 1.0, < 3.a)
google-cloud-env (~> 2.2)
google-logging-utils (~> 0.1)
jwt (>= 1.4, < 4.0)
os (>= 0.9, < 2.0)
pstore (~> 0.1)
signet (>= 0.16, < 2.a)
highline (2.0.3)
http-cookie (1.0.8)
@@ -160,8 +173,8 @@ GEM
httpclient (2.9.0)
mutex_m
jmespath (1.6.2)
json (2.19.5)
jwt (2.10.2)
json (2.21.1)
jwt (3.2.0)
base64
logger (1.7.0)
mini_magick (4.13.2)
@@ -171,26 +184,28 @@ GEM
mutex_m (0.3.0)
nanaimo (0.4.0)
naturally (2.3.0)
nkf (0.3.0)
optparse (0.8.1)
os (1.1.4)
ostruct (0.6.3)
plist (3.7.2)
pstore (0.2.1)
public_suffix (7.0.5)
rake (13.4.2)
representable (3.2.0)
declarative (< 0.1.0)
trailblazer-option (>= 0.1.1, < 0.2.0)
uber (< 0.2.0)
retriable (3.4.1)
retriable (3.8.0)
rexml (3.4.4)
rouge (3.28.0)
ruby2_keywords (0.0.5)
rubyzip (2.4.1)
security (0.1.5)
signet (0.21.0)
signet (0.22.0)
addressable (~> 2.8)
faraday (>= 0.17.5, < 3.a)
jwt (>= 1.5, < 4.0)
multi_json (~> 1.10)
simctl (1.6.10)
CFPropertyList
naturally
@@ -205,12 +220,14 @@ GEM
uber (0.1.0)
unicode-display_width (2.6.0)
word_wrap (1.0.0)
xcodeproj (1.27.0)
xcodeproj (1.28.1)
CFPropertyList (>= 2.3.3, < 4.0)
atomos (~> 0.1.3)
base64
claide (>= 1.0.2, < 2.0)
colored2 (~> 3.1)
nanaimo (~> 0.4.0)
nkf
rexml (>= 3.3.6, < 4.0)
xcpretty (0.4.1)
rouge (~> 3.28.0)
+2 -1
View File
@@ -1,11 +1,12 @@
**Last updated**
April 29 2026
August 7 2026
# Privacy Policy
Catima does not collect or transmit any personal information.
To ensure correct app functionality, we require access to the following:
- Bluetooth: When using Catima together with the Wear OS companion app, Bluetooth access is needed to be able to communicate to Wear OS. This may show up as "find, connect to, and determine the relative position of nearby devices" because Android considers Bluetooth as part of location, but location information is never collected or used. The app can still be used when Bluetooth permission is denied, but you will not be able to use the Wear OS companion app.
- Camera: We need access to your camera to be able to scan barcodes. The app can still be used when camera access is denied, but you will have to manually type the barcode information.
- NFC: We need NFC access to temporarily disable NFC while showing a barcode to prevent NFC payment apps from triggering (such as when using a check-in gates which support both barcodes and NFC payments). This functionality can be disabled in settings.
- Storage (Android 5 and 6 only): We need access to your device storage to create or import backups. The app can still be used when storage access is denied, but you will not be able to create or import backups.
+11 -4
View File
@@ -19,8 +19,8 @@ android {
applicationId = "me.hackerchick.catima"
minSdk = 23
targetSdk = 36
versionCode = 166
versionName = "2.42.1"
versionCode = 1002
versionName = "2.45.0"
vectorDrawables.useSupportLibrary = true
multiDexEnabled = true
@@ -59,8 +59,14 @@ android {
dimension = "type"
isDefault = true
}
create("fdroidLegacy") {
dimension = "type"
versionNameSuffix = " (F-Droid)"
versionCode = defaultConfig.versionCode!! - 1
}
create("gplay") {
dimension = "type"
versionNameSuffix = " (Google)"
// Google doesn't allow donation links
buildConfigField("boolean", "showDonate", "false")
@@ -113,6 +119,8 @@ android {
}
dependencies {
implementation(project(":shared"))
// AndroidX
implementation(libs.androidx.appcompat.appcompat)
implementation(libs.androidx.constraintlayout.constraintlayout)
@@ -165,7 +173,6 @@ dependencies {
tasks.register("copyRawResFiles", Copy::class) {
from(
layout.projectDirectory.file("../CHANGELOG.md"),
layout.projectDirectory.file("../PRIVACY.md")
)
into(layout.projectDirectory.dir("src/main/res/raw"))
@@ -173,7 +180,7 @@ tasks.register("copyRawResFiles", Copy::class) {
}.also {
tasks.preBuild.dependsOn(it)
tasks.getByName<Delete>("clean") {
val filesNamesToDelete = listOf("CHANGELOG", "PRIVACY")
val filesNamesToDelete = listOf("PRIVACY")
filesNamesToDelete.forEach { fileName ->
delete(layout.projectDirectory.file("src/main/res/raw/${fileName.lowercase()}.md"))
}
+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>
+30
View File
@@ -13,6 +13,12 @@
<uses-permission android:name="android.permission.CAMERA" />
<uses-permission android:name="android.permission.NFC" />
<uses-permission android:name="android.permission.BLUETOOTH" android:maxSdkVersion="30" />
<uses-permission android:name="android.permission.BLUETOOTH_ADMIN" android:maxSdkVersion="30" />
<uses-permission android:name="android.permission.BLUETOOTH_CONNECT" />
<uses-permission android:name="android.permission.POST_NOTIFICATIONS" />
<uses-permission android:name="android.permission.FOREGROUND_SERVICE" />
<uses-permission android:name="android.permission.FOREGROUND_SERVICE_CONNECTED_DEVICE" />
<uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE" android:maxSdkVersion="23" />
<uses-feature
@@ -101,6 +107,9 @@
android:name=".cardview.LoyaltyCardViewActivity"
android:exported="true"
android:theme="@style/AppTheme.NoActionBar" />
<activity
android:name=".cardimageview.LoyaltyCardImageViewActivity"
android:theme="@style/AppTheme.NoActionBar" />
<activity
android:name=".LoyaltyCardEditActivity"
android:exported="true"
@@ -223,5 +232,26 @@
<action android:name="android.service.controls.ControlsProviderService" />
</intent-filter>
</service>
<service
android:name=".wearos.BluetoothServerService"
android:exported="false"
android:foregroundServiceType="connectedDevice" />
<activity
android:name=".wearos.BluetoothPairingActivity"
android:exported="false"
android:excludeFromRecents="true"
android:launchMode="singleTop"
android:theme="@style/AppTheme.Transparent" />
<receiver
android:name=".wearos.BluetoothPairingReceiver"
android:exported="false">
<intent-filter>
<action android:name="protect.card_locker.wearos.action.ALLOW_DEVICE" />
<action android:name="protect.card_locker.wearos.action.BLOCK_DEVICE" />
</intent-filter>
</receiver>
</application>
</manifest>
@@ -69,16 +69,7 @@ fun AboutScreenContent(
stringResource(R.string.version_history),
content.versionHistory,
modifier = Modifier.testTag("card_version_history"),
onClickUrl = "https://catima.app/changelog/",
onClickDialogText = AnnotatedString.fromHtml(
htmlString = content.historyHtml,
linkStyles = TextLinkStyles(
style = SpanStyle(
textDecoration = TextDecoration.Underline,
color = MaterialTheme.colorScheme.primary
)
)
)
onClickUrl = "https://catima.app/changelog/"
)
CatimaAboutSection(
stringResource(R.string.credits),
@@ -62,18 +62,6 @@ public class AboutContent {
return contributors.replace("\n", "<br />");
}
public String getHistoryHtml() {
String versionHistory;
try {
versionHistory = Utils.readTextFile(context, R.raw.changelog)
.replace("# Changelog\n\n", "");
} catch (IOException ignored) {
return "";
}
return Utils.linkify(Utils.basicMDToHTML(versionHistory))
.replace("\n", "<br />");
}
public String getLicenseHtml() {
try {
return Utils.readTextFile(context, R.raw.license);
@@ -76,6 +76,7 @@ public class DBHelper extends SQLiteOpenHelper {
public enum LoyaltyCardOrder {
Alpha,
LastAdded,
LastUsed,
ValidFrom,
Expiry
@@ -1089,6 +1090,10 @@ public class DBHelper extends SQLiteOpenHelper {
return LoyaltyCardDbIds.STORE;
}
if (order == LoyaltyCardOrder.LastAdded) {
return LoyaltyCardDbIds.ID;
}
if (order == LoyaltyCardOrder.LastUsed) {
return LoyaltyCardDbIds.LAST_USED;
}
@@ -1105,8 +1110,8 @@ public class DBHelper extends SQLiteOpenHelper {
}
private static String getDbDirection(LoyaltyCardOrder order, LoyaltyCardOrderDirection direction) {
if (order == LoyaltyCardOrder.LastUsed) {
// We want the default sorting to put the most recently used first
if (order == LoyaltyCardOrder.LastAdded || order == LoyaltyCardOrder.LastUsed) {
// We want the default sorting to put the most recently added/used first
return direction == LoyaltyCardOrderDirection.Descending ? "ASC" : "DESC";
}
@@ -14,6 +14,7 @@ import android.widget.RemoteViews
import androidx.core.widget.RemoteViewsCompat
import protect.card_locker.DBHelper.LoyaltyCardArchiveFilter
import protect.card_locker.cardview.LoyaltyCardViewActivity
import protect.card_locker.shared.ForegroundColorHelper
class ListWidget : AppWidgetProvider() {
fun updateAll(context: Context) {
@@ -100,7 +101,7 @@ class ListWidget : AppWidgetProvider() {
// Note: Android 5 will not use bitmaps
val remoteViews = RemoteViews(context.packageName, R.layout.list_widget_item).apply {
val headerColor = Utils.getHeaderColor(context, loyaltyCard)
val foreground = if (Utils.needsDarkForeground(headerColor)) Color.BLACK else Color.WHITE
val foreground = if (ForegroundColorHelper.needsDarkForeground(headerColor)) Color.BLACK else Color.WHITE
setInt(R.id.item_container_foreground, "setBackgroundColor", headerColor)
val icon = loyaltyCard.getImageThumbnail(context)
// FIXME: The icon flow causes a crash up to Android 12L, so force anything below 33 down this path
@@ -105,6 +105,12 @@ public class LoyaltyCardCursorAdapter extends BaseCursorAdapter<LoyaltyCardCurso
inputHolder.setNoteField(null);
}
if (mLoyaltyCardListDisplayOptions.showingCardId() && !loyaltyCard.cardId.isEmpty()) {
inputHolder.setExtraField(inputHolder.mCardIdField, loyaltyCard.cardId, null, showDivider);
} else {
inputHolder.setExtraField(inputHolder.mCardIdField, null, null, false);
}
if (mLoyaltyCardListDisplayOptions.showingBalance() && !loyaltyCard.balance.equals(new BigDecimal("0"))) {
inputHolder.setExtraField(inputHolder.mBalanceField, Utils.formatBalance(mContext, loyaltyCard.balance, loyaltyCard.balanceType), null, showDivider);
} else {
@@ -211,7 +217,7 @@ public class LoyaltyCardCursorAdapter extends BaseCursorAdapter<LoyaltyCardCurso
public class LoyaltyCardListItemViewHolder extends RecyclerView.ViewHolder {
public TextView mCardText, mStoreField, mNoteField, mBalanceField, mValidFromField, mExpiryField;
public TextView mCardText, mStoreField, mNoteField, mCardIdField, mBalanceField, mValidFromField, mExpiryField;
public ImageView mCardIcon, mTickIcon;
public MaterialCardView mRow;
public ConstraintLayout mStar, mArchived;
@@ -224,6 +230,7 @@ public class LoyaltyCardCursorAdapter extends BaseCursorAdapter<LoyaltyCardCurso
mDivider = loyaltyCardLayoutBinding.infoDivider;
mStoreField = loyaltyCardLayoutBinding.store;
mNoteField = loyaltyCardLayoutBinding.note;
mCardIdField = loyaltyCardLayoutBinding.cardId;
mBalanceField = loyaltyCardLayoutBinding.balance;
mValidFromField = loyaltyCardLayoutBinding.validFrom;
mExpiryField = loyaltyCardLayoutBinding.expiry;
@@ -91,6 +91,7 @@ import java.util.concurrent.Callable;
import protect.card_locker.async.TaskHandler;
import protect.card_locker.databinding.LayoutChipChoiceBinding;
import protect.card_locker.databinding.LoyaltyCardEditActivityBinding;
import protect.card_locker.shared.ForegroundColorHelper;
import protect.card_locker.viewmodels.LoyaltyCardEditActivityViewModel;
public class LoyaltyCardEditActivity extends CatimaAppCompatActivity implements BarcodeImageWriterResultCallback, ColorPickerDialogListener {
@@ -896,8 +897,8 @@ public class LoyaltyCardEditActivity extends CatimaAppCompatActivity implements
Integer headerColor = viewModel.getLoyaltyCard().headerColor;
if (headerColor != null) {
thumbnail.setOnClickListener(new ChooseCardImage());
thumbnailEditIcon.setBackgroundColor(Utils.needsDarkForeground(headerColor) ? Color.BLACK : Color.WHITE);
thumbnailEditIcon.setColorFilter(Utils.needsDarkForeground(headerColor) ? Color.WHITE : Color.BLACK);
thumbnailEditIcon.setBackgroundColor(ForegroundColorHelper.Companion.needsDarkForeground(headerColor) ? Color.BLACK : Color.WHITE);
thumbnailEditIcon.setColorFilter(ForegroundColorHelper.Companion.needsDarkForeground(headerColor) ? Color.WHITE : Color.BLACK);
}
onResuming = false;
@@ -919,18 +920,18 @@ public class LoyaltyCardEditActivity extends CatimaAppCompatActivity implements
setLoyaltyCardHeaderColor(headerColor);
thumbnail.setBackgroundColor(Utils.needsDarkForeground(headerColor) ? Color.BLACK : Color.WHITE);
thumbnail.setBackgroundColor(ForegroundColorHelper.Companion.needsDarkForeground(headerColor) ? Color.BLACK : Color.WHITE);
thumbnailEditIcon.setBackgroundColor(Utils.needsDarkForeground(headerColor) ? Color.BLACK : Color.WHITE);
thumbnailEditIcon.setColorFilter(Utils.needsDarkForeground(headerColor) ? Color.WHITE : Color.BLACK);
thumbnailEditIcon.setBackgroundColor(ForegroundColorHelper.Companion.needsDarkForeground(headerColor) ? Color.BLACK : Color.WHITE);
thumbnailEditIcon.setColorFilter(ForegroundColorHelper.Companion.needsDarkForeground(headerColor) ? Color.WHITE : Color.BLACK);
} else {
generateIcon(storeFieldEdit.getText().toString().trim());
Integer headerColor = viewModel.getLoyaltyCard().headerColor;
if (headerColor != null) {
thumbnailEditIcon.setBackgroundColor(Utils.needsDarkForeground(headerColor) ? Color.BLACK : Color.WHITE);
thumbnailEditIcon.setColorFilter(Utils.needsDarkForeground(headerColor) ? Color.WHITE : Color.BLACK);
thumbnailEditIcon.setBackgroundColor(ForegroundColorHelper.Companion.needsDarkForeground(headerColor) ? Color.BLACK : Color.WHITE);
thumbnailEditIcon.setColorFilter(ForegroundColorHelper.Companion.needsDarkForeground(headerColor) ? Color.WHITE : Color.BLACK);
}
}
}
@@ -35,6 +35,7 @@ public class LoyaltyCardListDisplayOptionsManager {
private boolean mShowNameBelowThumbnail;
private boolean mShowNote;
private boolean mShowCardId;
private boolean mShowBalance;
private boolean mShowValidity;
private boolean mShowArchivedCards;
@@ -50,6 +51,7 @@ public class LoyaltyCardListDisplayOptionsManager {
Context.MODE_PRIVATE);
mShowNameBelowThumbnail = mCardDetailsPref.getBoolean(mContext.getString(R.string.sharedpreference_card_details_show_name_below_thumbnail), false);
mShowNote = mCardDetailsPref.getBoolean(mContext.getString(R.string.sharedpreference_card_details_show_note), true);
mShowCardId = mCardDetailsPref.getBoolean(mContext.getString(R.string.sharedpreference_card_details_show_card_id), false);
mShowBalance = mCardDetailsPref.getBoolean(mContext.getString(R.string.sharedpreference_card_details_show_balance), true);
mShowValidity = mCardDetailsPref.getBoolean(mContext.getString(R.string.sharedpreference_card_details_show_validity), true);
mShowArchivedCards = mCardDetailsPref.getBoolean(mContext.getString(R.string.sharedpreference_card_details_show_archived_cards), true);
@@ -83,6 +85,17 @@ public class LoyaltyCardListDisplayOptionsManager {
return mShowNote;
}
public void showCardId(boolean show) {
mShowCardId = show;
mRefreshCardsCallback.run();
saveDetailState(R.string.sharedpreference_card_details_show_card_id, show);
}
public boolean showingCardId() {
return mShowCardId;
}
public void showBalance(boolean show) {
mShowBalance = show;
mRefreshCardsCallback.run();
@@ -137,6 +150,11 @@ public class LoyaltyCardListDisplayOptionsManager {
showingNote(),
this::showNote
));
displayOptions.add(new LoyaltyCardDisplayOption(
mContext.getString(R.string.show_card_id),
showingCardId(),
this::showCardId
));
displayOptions.add(new LoyaltyCardDisplayOption(
mContext.getString(R.string.show_balance),
showingBalance(),
@@ -1,9 +1,9 @@
package protect.card_locker;
import android.app.Application;
import android.content.Intent;
import androidx.appcompat.app.AppCompatDelegate;
import org.acra.ACRA;
import org.acra.config.CoreConfigurationBuilder;
import org.acra.config.DialogConfigurationBuilder;
@@ -11,6 +11,7 @@ import org.acra.config.MailSenderConfigurationBuilder;
import org.acra.data.StringFormat;
import protect.card_locker.preferences.Settings;
import protect.card_locker.wearos.WearSyncServiceManager;
public class LoyaltyCardLockerApplication extends Application {
@@ -41,5 +42,10 @@ public class LoyaltyCardLockerApplication extends Application {
// Set theme
Settings settings = new Settings(this);
AppCompatDelegate.setDefaultNightMode(settings.getTheme());
// Start Bluetooth server for Wear OS companion if enabled.
// The service checks BLUETOOTH_CONNECT itself and stops if the permission is missing.
// The permission is requested from the launcher Activity when the UI resumes.
WearSyncServiceManager.INSTANCE.synchronize(this, null);
}
}
@@ -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
@@ -37,9 +39,12 @@ import protect.card_locker.databinding.MainActivityBinding
import protect.card_locker.databinding.SortingOptionBinding
import protect.card_locker.preferences.Settings
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
@@ -61,6 +66,7 @@ class MainActivity : CatimaAppCompatActivity(), CardAdapterListener {
private lateinit var mUpdateLoyaltyCardListRunnable: Runnable
private lateinit var mBarcodeScannerLauncher: ActivityResultLauncher<Intent>
private lateinit var mSettingsLauncher: ActivityResultLauncher<Intent>
private lateinit var mWearSyncPermissionRequester: WearSyncPermissionRequester
private val mCurrentActionModeCallback: ActionMode.Callback = object : ActionMode.Callback {
override fun onCreateActionMode(inputMode: ActionMode, inputMenu: Menu?): Boolean {
@@ -318,6 +324,8 @@ class MainActivity : CatimaAppCompatActivity(), CardAdapterListener {
}
}
mWearSyncPermissionRequester = WearSyncPermissionRequester(this, this)
onBackPressedDispatcher.addCallback(this, object : OnBackPressedCallback(true) {
override fun handleOnBackPressed() {
if (mSearchView != null && !mSearchView!!.isIconified) {
@@ -394,6 +402,8 @@ class MainActivity : CatimaAppCompatActivity(), CardAdapterListener {
val settings = Settings(this)
layoutManager.setSpanCount(settings.getPreferredColumnCount())
}
mWearSyncPermissionRequester.synchronize()
}
private fun displayCardSetupOptions(menu: Menu, shouldShow: Boolean) {
@@ -467,11 +477,7 @@ class MainActivity : CatimaAppCompatActivity(), CardAdapterListener {
ShortcutHelper.updateShortcuts(mAdapter.mContext)
}
private fun processParseResultList(
parseResultList: MutableList<ParseResult?>,
group: String?,
closeAppOnNoBarcode: Boolean
) {
private fun processParseResultList(parseResultList: MutableList<ParseResult?>) {
require(!parseResultList.isEmpty()) { "parseResultList may not be empty" }
Utils.makeUserChooseParseResultFromList(
@@ -482,17 +488,12 @@ class MainActivity : CatimaAppCompatActivity(), CardAdapterListener {
val intent =
Intent(applicationContext, LoyaltyCardEditActivity::class.java)
val bundle = parseResult.toLoyaltyCardBundle(this@MainActivity)
if (group != null) {
bundle.putString(LoyaltyCardEditActivity.BUNDLE_ADDGROUP, group)
}
intent.putExtras(bundle)
startActivity(intent)
}
override fun onUserDismissedSelector() {
if (closeAppOnNoBarcode) {
finish()
}
finish()
}
})
}
@@ -505,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) {
@@ -527,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, null, true)
}
private fun extractIntentFields(intent: Intent) {
@@ -0,0 +1,11 @@
package protect.card_locker
object NotificationInfo {
object WearBluetooth {
const val NOTIFICATION_ID = 1001
const val CHANNEL_ID = "catima_wear_bt"
const val PAIRING_CHANNEL_ID = "catima_wear_bt_pairing"
const val CRITICAL_ERROR_NOTIFICATION_ID = 1002
const val CRITICAL_ERROR_CHANNEL_ID = "catima_wear_bt_critical_error"
}
}
@@ -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,
@@ -18,6 +18,7 @@ import org.jetbrains.annotations.NotNull;
import java.util.LinkedList;
import protect.card_locker.cardview.LoyaltyCardViewActivity;
import protect.card_locker.shared.ForegroundColorHelper;
public class ShortcutHelper {
/**
@@ -102,7 +103,7 @@ public class ShortcutHelper {
if (iconBitmap == null) {
iconBitmap = Utils.generateIcon(context, loyaltyCard, true).getLetterTile();
} else {
iconBitmap = createAdaptiveBitmap(iconBitmap, Utils.needsDarkForeground(Utils.getHeaderColor(context, loyaltyCard)) ? Color.BLACK : Color.WHITE);
iconBitmap = createAdaptiveBitmap(iconBitmap, ForegroundColorHelper.Companion.needsDarkForeground(Utils.getHeaderColor(context, loyaltyCard)) ? Color.BLACK : Color.WHITE);
}
IconCompat icon = IconCompat.createWithAdaptiveBitmap(iconBitmap);
@@ -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;
@@ -39,7 +41,6 @@ import androidx.annotation.Nullable;
import androidx.annotation.RawRes;
import androidx.appcompat.app.AppCompatActivity;
import androidx.appcompat.app.AppCompatDelegate;
import androidx.core.graphics.ColorUtils;
import androidx.core.graphics.Insets;
import androidx.core.os.LocaleListCompat;
import androidx.core.view.ViewCompat;
@@ -95,6 +96,7 @@ import java.util.regex.Matcher;
import java.util.regex.Pattern;
import protect.card_locker.preferences.Settings;
import protect.card_locker.shared.ForegroundColorHelper;
public class Utils {
private static final String TAG = "Catima";
@@ -115,11 +117,19 @@ public class Utils {
public static final String CARD_IMAGE_FILENAME_REGEX = "^(card_)(\\d+)(_(?:front|back|icon)\\.png)$";
static final double LUMINANCE_MIDPOINT = 0.5;
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);
}
@@ -147,57 +157,38 @@ public class Utils {
}
return new LetterBitmap(context, store, store,
tileLetterFontSize, pixelSize, pixelSize, backgroundColor, needsDarkForeground(backgroundColor) ? Color.BLACK : Color.WHITE);
tileLetterFontSize, pixelSize, pixelSize, backgroundColor, ForegroundColorHelper.Companion.needsDarkForeground(backgroundColor) ? Color.BLACK : Color.WHITE);
}
static public boolean needsDarkForeground(Integer backgroundColor) {
return ColorUtils.calculateLuminance(backgroundColor) > LUMINANCE_MIDPOINT;
}
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();
@@ -205,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);
}
}
@@ -217,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);
@@ -228,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<>();
@@ -254,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);
@@ -265,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);
@@ -280,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;
@@ -320,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) {
@@ -336,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;
}
@@ -354,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;
@@ -362,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) {
@@ -1070,7 +1051,7 @@ public class Utils {
if (icon != null) {
// Use header colour to decide if this image will need a white or black background
backgroundOrIcon.setBackgroundColor(needsDarkForeground(headerColor) ? Color.BLACK : Color.WHITE);
backgroundOrIcon.setBackgroundColor(ForegroundColorHelper.Companion.needsDarkForeground(headerColor) ? Color.BLACK : Color.WHITE);
// Ensure correct cropping style
backgroundOrIcon.setScaleType(Utils.getRecommendedScaleTypeForThumbnailImage(icon));
@@ -1100,7 +1081,7 @@ public class Utils {
// Actually set the text and colour
textWhenNoImage.setVisibility(View.VISIBLE);
textWhenNoImage.setText(loyaltyCard.store);
textWhenNoImage.setTextColor(Utils.needsDarkForeground(headerColor) ? Color.BLACK : Color.WHITE);
textWhenNoImage.setTextColor(ForegroundColorHelper.Companion.needsDarkForeground(headerColor) ? Color.BLACK : Color.WHITE);
}
return headerColor;
@@ -0,0 +1,240 @@
package protect.card_locker.cardimageview
import android.content.Context
import android.content.Intent
import android.content.Intent.FLAG_GRANT_READ_URI_PERMISSION
import android.graphics.Bitmap
import android.os.Bundle
import android.view.WindowManager
import android.widget.Toast
import androidx.activity.OnBackPressedDispatcher
import androidx.activity.compose.setContent
import androidx.annotation.StringRes
import androidx.compose.foundation.Image
import androidx.compose.foundation.background
import androidx.compose.foundation.gestures.detectTapGestures
import androidx.compose.foundation.gestures.rememberTransformableState
import androidx.compose.foundation.gestures.transformable
import androidx.compose.foundation.layout.Box
import androidx.compose.foundation.layout.fillMaxSize
import androidx.compose.foundation.layout.padding
import androidx.compose.material.icons.Icons
import androidx.compose.material.icons.filled.MoreVert
import androidx.compose.material3.DropdownMenu
import androidx.compose.material3.DropdownMenuItem
import androidx.compose.material3.Icon
import androidx.compose.material3.IconButton
import androidx.compose.material3.MaterialTheme
import androidx.compose.material3.Scaffold
import androidx.compose.material3.Text
import androidx.compose.runtime.Composable
import androidx.compose.runtime.getValue
import androidx.compose.runtime.mutableFloatStateOf
import androidx.compose.runtime.mutableStateOf
import androidx.compose.runtime.remember
import androidx.compose.runtime.setValue
import androidx.compose.ui.Modifier
import androidx.compose.ui.geometry.Offset
import androidx.compose.ui.graphics.asImageBitmap
import androidx.compose.ui.graphics.graphicsLayer
import androidx.compose.ui.input.pointer.pointerInput
import androidx.compose.ui.layout.ContentScale
import androidx.compose.ui.layout.onSizeChanged
import androidx.compose.ui.platform.LocalContext
import androidx.compose.ui.platform.testTag
import androidx.compose.ui.res.stringResource
import androidx.compose.ui.unit.IntSize
import androidx.core.content.FileProvider
import protect.card_locker.CatimaComponentActivity
import protect.card_locker.ImageLocationType
import protect.card_locker.R
import protect.card_locker.Utils
import protect.card_locker.compose.CatimaTopAppBar
import protect.card_locker.compose.theme.CatimaTheme
import protect.card_locker.preferences.Settings
class LoyaltyCardImageViewActivity : CatimaComponentActivity() {
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
fixedEdgeToEdge()
applyWindowPreferences()
val imageLocationType = intent.imageLocationType()
val loyaltyCardId = intent.getIntExtra(BUNDLE_ID, 0)
val bitmap = imageLocationType?.let {
Utils.retrieveCardImage(this, loyaltyCardId, it)
}
if (loyaltyCardId == 0 || imageLocationType == null || bitmap == null) {
Toast.makeText(this, R.string.failedToRetrieveImageFile, Toast.LENGTH_SHORT).show()
finish()
return
}
title = getString(imageLocationType.descriptionRes())
setContent {
CatimaTheme {
LoyaltyCardImageViewScreen(
bitmap = bitmap,
imageLocationType = imageLocationType,
cardId = loyaltyCardId,
contentDescriptionRes = imageLocationType.descriptionRes(),
onBackPressedDispatcher = onBackPressedDispatcher
)
}
}
}
private fun applyWindowPreferences() {
val settings = Settings(this)
val currentWindow = window ?: return
val attributes = currentWindow.attributes
if (settings.useMaxBrightnessDisplayingBarcode()) {
attributes.screenBrightness = 1F
}
if (settings.keepScreenOn) {
currentWindow.addFlags(WindowManager.LayoutParams.FLAG_KEEP_SCREEN_ON)
}
currentWindow.attributes = attributes
}
private fun Intent.imageLocationType(): ImageLocationType? {
val name = getStringExtra(BUNDLE_IMAGE_LOCATION_TYPE) ?: return null
return runCatching { ImageLocationType.valueOf(name) }.getOrNull()
}
private fun ImageLocationType.descriptionRes(): Int {
return when (this) {
ImageLocationType.icon -> R.string.thumbnailDescription
ImageLocationType.front -> R.string.frontImageDescription
ImageLocationType.back -> R.string.backImageDescription
}
}
companion object {
const val BUNDLE_ID = "id"
const val BUNDLE_IMAGE_LOCATION_TYPE = "imageLocationType"
@JvmStatic
fun createIntent(
context: Context,
loyaltyCardId: Int,
imageLocationType: ImageLocationType
): Intent {
return Intent(context, LoyaltyCardImageViewActivity::class.java)
.putExtra(BUNDLE_ID, loyaltyCardId)
.putExtra(BUNDLE_IMAGE_LOCATION_TYPE, imageLocationType.name)
}
}
}
@Composable
fun LoyaltyCardImageViewScreen(
bitmap: Bitmap,
imageLocationType: ImageLocationType,
cardId: Int,
@StringRes contentDescriptionRes: Int,
onBackPressedDispatcher: OnBackPressedDispatcher,
) {
val context = LocalContext.current
var scale by remember { mutableFloatStateOf(1F) }
var offset by remember { mutableStateOf(Offset.Zero) }
var size by remember { mutableStateOf(IntSize.Zero) }
val zoomState = rememberTransformableState { _, zoomChange, panChange, _ ->
val nextScale = (scale * zoomChange).coerceIn(1F, MAX_IMAGE_SCALE)
scale = nextScale
offset = if (nextScale == 1F) {
Offset.Zero
} else {
(offset + panChange).clampTo(size, nextScale)
}
}
Scaffold(
topBar = {
CatimaTopAppBar(
title = stringResource(contentDescriptionRes),
onBackPressedDispatcher = onBackPressedDispatcher,
actions = {
var expanded by remember { mutableStateOf(false) }
IconButton(onClick = { expanded = !expanded }) {
Icon(
imageVector = Icons.Filled.MoreVert,
contentDescription = stringResource(R.string.action_more_options)
)
}
DropdownMenu(
expanded = expanded,
onDismissRequest = { expanded = false }
) {
DropdownMenuItem(onClick = { openInImageGallery(context, cardId, imageLocationType) },
text = { Text(stringResource(R.string.open_in_gallery)) },
)
}
}
)
}
) { innerPadding ->
Box(
modifier = Modifier
.fillMaxSize()
.padding(innerPadding)
.background(MaterialTheme.colorScheme.background)
.testTag("card_image_zoom")
) {
Image(
bitmap = bitmap.asImageBitmap(),
contentDescription = stringResource(contentDescriptionRes),
contentScale = ContentScale.Fit,
modifier = Modifier
.fillMaxSize()
.onSizeChanged { size = it }
.pointerInput(bitmap) {
detectTapGestures(
onDoubleTap = {
scale = 1F
offset = Offset.Zero
}
)
}
.transformable(zoomState)
.graphicsLayer {
scaleX = scale
scaleY = scale
translationX = offset.x
translationY = offset.y
}
.testTag("card_image")
)
}
}
}
private fun Offset.clampTo(size: IntSize, scale: Float): Offset {
if (size.width == 0 || size.height == 0) {
return this
}
val maxX = size.width * (scale - 1F) / 2F
val maxY = size.height * (scale - 1F) / 2F
return Offset(
x = x.coerceIn(-maxX, maxX),
y = y.coerceIn(-maxY, maxY)
)
}
private fun openInImageGallery(context: Context, cardId: Int, imageLocationType: ImageLocationType){
val imagePath = Utils.getCardImageFileName(cardId, imageLocationType)
val viewInGalleryIntent = Intent(Intent.ACTION_VIEW).apply {
setDataAndType(FileProvider.getUriForFile(context, context.packageName, context.getFileStreamPath(imagePath)), "image/*")
flags = FLAG_GRANT_READ_URI_PERMISSION
}
context.startActivity(viewInGalleryIntent)
}
private const val MAX_IMAGE_SCALE = 5F
@@ -1,6 +1,5 @@
package protect.card_locker.cardview;
import android.content.ActivityNotFoundException;
import android.content.ClipData;
import android.content.ClipboardManager;
import android.content.Intent;
@@ -34,7 +33,6 @@ import androidx.activity.OnBackPressedCallback;
import androidx.appcompat.app.ActionBar;
import androidx.appcompat.app.AlertDialog;
import androidx.appcompat.widget.Toolbar;
import androidx.core.content.FileProvider;
import androidx.core.graphics.BlendModeColorFilterCompat;
import androidx.core.graphics.BlendModeCompat;
import androidx.core.graphics.ColorUtils;
@@ -44,7 +42,6 @@ import androidx.core.view.accessibility.AccessibilityNodeInfoCompat;
import com.google.android.material.dialog.MaterialAlertDialogBuilder;
import com.google.android.material.snackbar.Snackbar;
import java.io.File;
import java.io.UnsupportedEncodingException;
import java.math.BigDecimal;
import java.nio.charset.Charset;
@@ -53,9 +50,11 @@ import java.util.Arrays;
import java.util.List;
import protect.card_locker.*;
import protect.card_locker.cardimageview.LoyaltyCardImageViewActivity;
import protect.card_locker.databinding.LoyaltyCardViewLayoutBinding;
import protect.card_locker.preferences.Settings;
import protect.card_locker.preferences.SettingsActivity;
import protect.card_locker.shared.ForegroundColorHelper;
public class LoyaltyCardViewActivity extends CatimaAppCompatActivity implements BarcodeImageWriterResultCallback {
private LoyaltyCardViewLayoutBinding binding;
@@ -97,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
@@ -136,46 +137,27 @@ public class LoyaltyCardViewActivity extends CatimaAppCompatActivity implements
return;
}
// If this is an image, open it in the gallery.
openImageInGallery(imageType);
openImage(imageType);
}
private void openImageInGallery(LoyaltyCardImageType imageType) {
File file = null;
private void openImage(LoyaltyCardImageType imageType) {
switch (imageType) {
case NONE:
return;
case ICON:
file = Utils.retrieveCardImageAsFile(this, loyaltyCardId, ImageLocationType.icon);
startImageActivity(ImageLocationType.icon);
break;
case IMAGE_FRONT:
file = Utils.retrieveCardImageAsFile(this, loyaltyCardId, ImageLocationType.front);
startImageActivity(ImageLocationType.front);
break;
case IMAGE_BACK:
file = Utils.retrieveCardImageAsFile(this, loyaltyCardId, ImageLocationType.back);
startImageActivity(ImageLocationType.back);
break;
case BARCODE:
Toast.makeText(this, R.string.barcodeLongPressMessage, Toast.LENGTH_SHORT).show();
return;
default:
Log.w(TAG, "openImage called with unsupported image type!");
}
}
// Do nothing if there is no file
if (file == null) {
Toast.makeText(this, R.string.failedToRetrieveImageFile, Toast.LENGTH_SHORT).show();
return;
}
try {
Intent intent = new Intent(Intent.ACTION_VIEW)
.setDataAndType(FileProvider.getUriForFile(this, BuildConfig.APPLICATION_ID, file), "image/*")
.addFlags(Intent.FLAG_GRANT_READ_URI_PERMISSION);
startActivity(intent);
} catch (ActivityNotFoundException e) {
// Display a toast message if an image viewer is not installed on device
Toast.makeText(this, R.string.failedLaunchingPhotoPicker, Toast.LENGTH_SHORT).show();
e.printStackTrace();
}
private void startImageActivity(ImageLocationType imageLocationType) {
startActivity(LoyaltyCardImageViewActivity.createIntent(this, loyaltyCardId, imageLocationType));
}
@Override
@@ -291,7 +273,7 @@ public class LoyaltyCardViewActivity extends CatimaAppCompatActivity implements
binding.iconContainer.setOnClickListener(view -> {
if (loyaltyCard.getImageThumbnail(this) != null) {
openImageInGallery(LoyaltyCardImageType.ICON);
openImage(LoyaltyCardImageType.ICON);
} else {
Toast.makeText(LoyaltyCardViewActivity.this, R.string.icon_header_click_text, Toast.LENGTH_LONG).show();
}
@@ -474,6 +456,7 @@ public class LoyaltyCardViewActivity extends CatimaAppCompatActivity implements
invalidateOptionsMenu();
ShortcutHelper.updateShortcuts(this);
listWidget.updateAll(LoyaltyCardViewActivity.this);
}
@Override
@@ -619,20 +602,20 @@ public class LoyaltyCardViewActivity extends CatimaAppCompatActivity implements
// Set bottomAppBar and system navigation bar color
binding.bottomAppBar.setBackgroundColor(darkenedColor);
Utils.setNavigationBarColor(null, window, darkenedColor, Utils.needsDarkForeground(darkenedColor));
Utils.setNavigationBarColor(null, window, darkenedColor, ForegroundColorHelper.Companion.needsDarkForeground(darkenedColor));
int complementaryColor = Utils.getComplementaryColor(darkenedColor);
binding.fabEdit.setBackgroundTintList(ColorStateList.valueOf(complementaryColor));
Drawable editButtonIcon = binding.fabEdit.getDrawable();
editButtonIcon.mutate();
editButtonIcon.setTint(Utils.needsDarkForeground(complementaryColor) ? Color.BLACK : Color.WHITE);
editButtonIcon.setTint(ForegroundColorHelper.Companion.needsDarkForeground(complementaryColor) ? Color.BLACK : Color.WHITE);
binding.fabEdit.setImageDrawable(editButtonIcon);
Bitmap icon = loyaltyCard.getImageThumbnail(this);
Utils.setIconOrTextWithBackground(this, loyaltyCard, icon, binding.iconImage, binding.iconText, 1);
// If the background is very bright, we should use dark icons
backgroundNeedsDarkIcons = Utils.needsDarkForeground(backgroundHeaderColor);
backgroundNeedsDarkIcons = ForegroundColorHelper.Companion.needsDarkForeground(backgroundHeaderColor);
fixBottomAppBarImageButtonColor(binding.bottomAppBarInfoButton);
fixBottomAppBarImageButtonColor(binding.bottomAppBarPreviousButton);
@@ -795,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();
@@ -806,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();
@@ -831,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();
@@ -887,9 +870,9 @@ public class LoyaltyCardViewActivity extends CatimaAppCompatActivity implements
int accessibilityClickAction;
LoyaltyCardImageType currentImageType = cardNavigator.getCurrent();
if (currentImageType == LoyaltyCardImageType.IMAGE_FRONT) {
accessibilityClickAction = R.string.openFrontImageInGalleryApp;
accessibilityClickAction = R.string.zoomFrontImage;
} else if (currentImageType == LoyaltyCardImageType.IMAGE_BACK) {
accessibilityClickAction = R.string.openBackImageInGalleryApp;
accessibilityClickAction = R.string.zoomBackImage;
} else {
accessibilityClickAction = R.string.moveBarcodeToTopOfScreen;
}
@@ -3,6 +3,7 @@ package protect.card_locker.compose
import androidx.activity.OnBackPressedDispatcher
import androidx.appcompat.app.AppCompatDelegate
import androidx.compose.foundation.isSystemInDarkTheme
import androidx.compose.foundation.layout.RowScope
import androidx.compose.material.icons.Icons
import androidx.compose.material.icons.automirrored.filled.ArrowBack
import androidx.compose.material3.ExperimentalMaterial3Api
@@ -22,7 +23,9 @@ import protect.card_locker.preferences.Settings
@OptIn(ExperimentalMaterial3Api::class)
@Composable
fun CatimaTopAppBar(title: String, onBackPressedDispatcher: OnBackPressedDispatcher?) {
fun CatimaTopAppBar(title: String,
onBackPressedDispatcher: OnBackPressedDispatcher?,
actions : @Composable RowScope.() -> Unit = {}) {
// Use pure black in OLED theme
val context = LocalContext.current
val settings = Settings(context)
@@ -51,6 +54,7 @@ fun CatimaTopAppBar(title: String, onBackPressedDispatcher: OnBackPressedDispatc
)
}
}
}
},
actions = actions
)
}
@@ -112,4 +112,8 @@ public class Settings {
public boolean useVolumeKeysForNavigation() {
return getBoolean(R.string.settings_key_use_volume_keys_navigation, false);
}
public boolean getWearSyncEnabled() {
return getBoolean(R.string.settings_key_wear_sync, false);
}
}
@@ -1,22 +1,42 @@
package protect.card_locker.preferences
import android.app.Activity
import android.annotation.SuppressLint
import android.bluetooth.BluetoothDevice
import android.bluetooth.BluetoothManager
import android.content.BroadcastReceiver
import android.content.Context
import android.content.Intent
import android.content.IntentFilter
import android.net.Uri
import android.os.Build
import android.os.Bundle
import android.provider.Settings
import android.view.LayoutInflater
import android.view.View
import android.view.MenuItem
import android.widget.LinearLayout
import android.widget.TextView
import androidx.activity.OnBackPressedCallback
import androidx.appcompat.app.AlertDialog
import androidx.appcompat.app.AppCompatDelegate
import androidx.core.content.ContextCompat
import androidx.core.os.LocaleListCompat
import androidx.preference.ListPreference
import androidx.preference.Preference
import androidx.preference.PreferenceFragmentCompat
import androidx.preference.SwitchPreferenceCompat
import com.google.android.material.dialog.MaterialAlertDialogBuilder
import com.google.android.material.snackbar.Snackbar
import protect.card_locker.BuildConfig
import protect.card_locker.CatimaAppCompatActivity
import protect.card_locker.MainActivity
import protect.card_locker.R
import protect.card_locker.Utils
import protect.card_locker.databinding.SettingsActivityBinding
import protect.card_locker.shared.BluetoothPermissionHelper
import protect.card_locker.shared.WearBluetoothSecurity
import protect.card_locker.wearos.BluetoothPairingNotificationManager
import protect.card_locker.wearos.WearSyncPermissionRequester
class SettingsActivity : CatimaAppCompatActivity() {
@@ -81,11 +101,62 @@ class SettingsActivity : CatimaAppCompatActivity() {
class SettingsFragment : PreferenceFragmentCompat() {
var mReloadMain: Boolean = false
private lateinit var wearSyncPermissionRequester: WearSyncPermissionRequester
private var currentDevicesDialog: AlertDialog? = null
private var currentDevicesDialogIsBlocked: Boolean = false
private val devicesChangedReceiver = object : BroadcastReceiver() {
override fun onReceive(context: Context, intent: Intent) {
if (intent.action != BluetoothPairingNotificationManager.ACTION_DEVICES_CHANGED) {
return
}
findPreference<Preference>(getString(R.string.settings_key_wear_sync_devices))?.let { updateWearSyncAllowedDevicesSummary(it) }
findPreference<Preference>(getString(R.string.settings_key_wear_sync_blocked_devices))?.let { updateWearSyncBlockedDevicesSummary(it) }
if (currentDevicesDialog?.isShowing != true) {
return
}
val isBlocked = currentDevicesDialogIsBlocked
currentDevicesDialog?.dismiss()
if (isBlocked) {
showWearSyncBlockedDevicesDialog()
} else {
showWearSyncAllowedDevicesDialog()
}
}
}
override fun onResume() {
super.onResume()
wearSyncPermissionRequester.synchronize()
findPreference<Preference>(getString(R.string.settings_key_wear_sync_devices))?.let { updateWearSyncAllowedDevicesSummary(it) }
findPreference<Preference>(getString(R.string.settings_key_wear_sync_blocked_devices))?.let { updateWearSyncBlockedDevicesSummary(it) }
ContextCompat.registerReceiver(
requireContext(),
devicesChangedReceiver,
IntentFilter(BluetoothPairingNotificationManager.ACTION_DEVICES_CHANGED),
ContextCompat.RECEIVER_NOT_EXPORTED
)
}
override fun onPause() {
super.onPause()
requireContext().unregisterReceiver(devicesChangedReceiver)
}
override fun onCreatePreferences(savedInstanceState: Bundle?, rootKey: String?) {
wearSyncPermissionRequester = WearSyncPermissionRequester(this, requireContext())
// Load the preferences from an XML resource
addPreferencesFromResource(R.xml.preferences)
// Show pretty names and summaries
setupThemePreference()
setupOledDarkPreference()
setupLocalePreference()
setupCrashReporterPreference()
setupWearSyncPreference()
setupWearSyncDevicePreferences()
}
private fun setupThemePreference() {
val themePreference = findPreference<ListPreference>(getString(R.string.settings_key_theme))
themePreference!!.setOnPreferenceChangeListener { _, o ->
when (o.toString()) {
@@ -101,13 +172,17 @@ class SettingsActivity : CatimaAppCompatActivity() {
}
true
}
}
private fun setupOledDarkPreference() {
val oledDarkPreference = findPreference<Preference>(getString(R.string.settings_key_oled_dark))
oledDarkPreference!!.setOnPreferenceChangeListener { _, _ ->
refreshActivity(true)
refreshActivity()
true
}
}
private fun setupLocalePreference() {
val localePreference =
findPreference<ListPreference>(getString(R.string.settings_key_locale))!!
localePreference.let {
@@ -148,7 +223,7 @@ class SettingsActivity : CatimaAppCompatActivity() {
localePreference.setOnPreferenceChangeListener { _, newValue ->
// See corresponding comment in Utils.updateBaseContextLocale for Android 6- notes
if (Build.VERSION.SDK_INT < Build.VERSION_CODES.N) {
refreshActivity(true)
refreshActivity()
return@setOnPreferenceChangeListener true
}
val newLocale = newValue as String
@@ -156,14 +231,205 @@ class SettingsActivity : CatimaAppCompatActivity() {
AppCompatDelegate.setApplicationLocales(if (newLocale.isEmpty()) LocaleListCompat.getEmptyLocaleList() else LocaleListCompat.create(Utils.stringToLocale(newLocale)))
true
}
}
private fun setupCrashReporterPreference() {
// Hide crash reporter settings on builds it's not enabled on
val crashReporterPreference = findPreference<Preference>("acra.enable")
crashReporterPreference!!.isVisible = BuildConfig.useAcraCrashReporter
}
private fun refreshActivity(reloadMain: Boolean) {
mReloadMain = reloadMain || mReloadMain
private fun setupWearSyncPreference() {
val wearSyncPreference = findPreference<SwitchPreferenceCompat>(getString(R.string.settings_key_wear_sync))
wearSyncPreference!!.setOnPreferenceChangeListener { preference, newValue ->
val enabled = newValue as Boolean
if (enabled) {
wearSyncPermissionRequester.onWearSyncChanged(true) { granted ->
if (granted) {
(preference as? SwitchPreferenceCompat)?.isChecked = true
} else {
showWearSyncPermissionDeniedSnackbar()
}
}
false
} else {
wearSyncPermissionRequester.onWearSyncChanged(false)
true
}
}
}
private fun setupWearSyncDevicePreferences() {
val allowedPreference = findPreference<Preference>(getString(R.string.settings_key_wear_sync_devices))
allowedPreference!!.setOnPreferenceClickListener {
showWearSyncAllowedDevicesDialog()
true
}
updateWearSyncAllowedDevicesSummary(allowedPreference)
val blockedPreference = findPreference<Preference>(getString(R.string.settings_key_wear_sync_blocked_devices))
blockedPreference!!.setOnPreferenceClickListener {
showWearSyncBlockedDevicesDialog()
true
}
updateWearSyncBlockedDevicesSummary(blockedPreference)
}
private fun updateWearSyncAllowedDevicesSummary(preference: Preference) {
val count = WearBluetoothSecurity.listTrustedDevices(requireContext()).size
preference.summary = if (count == 0) {
getString(R.string.settings_wear_sync_no_devices)
} else {
resources.getQuantityString(R.plurals.settings_wear_sync_devices_summary_count, count, count)
}
}
private fun updateWearSyncBlockedDevicesSummary(preference: Preference) {
val count = WearBluetoothSecurity.listBlockedDevices(requireContext()).size
preference.summary = if (count == 0) {
getString(R.string.settings_wear_sync_no_blocked_devices)
} else {
resources.getQuantityString(R.plurals.settings_wear_sync_blocked_devices_summary_count, count, count)
}
}
@SuppressLint("MissingPermission")
private fun showWearSyncDeviceListDialog(
titleRes: Int,
noDevicesRes: Int,
messageRes: Int,
addresses: Set<String>,
isBlocked: Boolean,
onRemove: (String, String) -> Unit
) {
val context = requireContext()
if (!BluetoothPermissionHelper.isBluetoothConnectGranted(context)) {
showWearSyncPermissionDeniedSnackbar()
return
}
val knownAddresses = addresses.toList()
currentDevicesDialog?.dismiss()
currentDevicesDialogIsBlocked = isBlocked
if (knownAddresses.isEmpty()) {
currentDevicesDialog = MaterialAlertDialogBuilder(context)
.setTitle(titleRes)
.setMessage(noDevicesRes)
.setOnDismissListener {
currentDevicesDialog = null
currentDevicesDialogIsBlocked = false
}
.setPositiveButton(android.R.string.ok) { dialog, _ -> dialog.dismiss() }
.show()
return
}
val adapter = context.getSystemService(BLUETOOTH_SERVICE) as? BluetoothManager
val bondedDevices = try {
adapter?.adapter?.bondedDevices ?: emptySet()
} catch (_: SecurityException) {
emptySet<BluetoothDevice>()
}
val deviceMap = bondedDevices.associateBy { it.address }
val content = View.inflate(context, R.layout.wear_sync_device_list, null)
content.findViewById<TextView>(R.id.wear_sync_device_list_message).text = getString(messageRes)
val container = content.findViewById<LinearLayout>(R.id.wear_sync_device_list_container)
knownAddresses.forEach { address ->
val name = deviceName(deviceMap[address], address)
val itemView = LayoutInflater.from(context).inflate(R.layout.wear_sync_device_list_item, container, false) as TextView
itemView.text = getString(R.string.settings_wear_sync_device_name, name, address)
itemView.setOnClickListener { onRemove(address, name) }
container.addView(itemView)
}
currentDevicesDialog = MaterialAlertDialogBuilder(context)
.setTitle(titleRes)
.setView(content)
.setOnDismissListener {
currentDevicesDialog = null
currentDevicesDialogIsBlocked = false
}
.setNegativeButton(android.R.string.cancel) { dialog, _ -> dialog.dismiss() }
.show()
}
private fun showWearSyncAllowedDevicesDialog() {
showWearSyncDeviceListDialog(
R.string.settings_wear_sync_devices,
R.string.settings_wear_sync_no_devices,
R.string.settings_wear_sync_tap_to_remove,
WearBluetoothSecurity.listTrustedDevices(requireContext()),
isBlocked = false
) { address, name -> confirmRemoveAllowedDevice(address, name) }
}
private fun showWearSyncBlockedDevicesDialog() {
showWearSyncDeviceListDialog(
R.string.settings_wear_sync_blocked_devices,
R.string.settings_wear_sync_no_blocked_devices,
R.string.settings_wear_sync_tap_to_remove,
WearBluetoothSecurity.listBlockedDevices(requireContext()),
isBlocked = true
) { address, name -> confirmRemoveBlockedDevice(address, name) }
}
private fun confirmRemoveAllowedDevice(address: String, name: String) {
confirmRemoveDevice(
address,
name,
R.string.settings_wear_sync_unpair_message,
onRemove = { WearBluetoothSecurity.untrustDevice(requireContext(), address) }
)
}
private fun confirmRemoveBlockedDevice(address: String, name: String) {
confirmRemoveDevice(
address,
name,
R.string.settings_wear_sync_unblock_message,
onRemove = { WearBluetoothSecurity.unblockDevice(requireContext(), address) }
)
}
private fun confirmRemoveDevice(address: String, name: String, messageRes: Int, onRemove: () -> Unit) {
val context = requireContext()
MaterialAlertDialogBuilder(context)
.setTitle(R.string.settings_wear_sync_unpair_title)
.setMessage(getString(messageRes, name))
.setPositiveButton(R.string.settings_wear_sync_unpair) { dialog, _ ->
onRemove()
BluetoothPairingNotificationManager.cancel(context, address)
BluetoothPairingNotificationManager.notifyDevicesChanged(context)
findPreference<Preference>(getString(R.string.settings_key_wear_sync_devices))?.let { updateWearSyncAllowedDevicesSummary(it) }
findPreference<Preference>(getString(R.string.settings_key_wear_sync_blocked_devices))?.let { updateWearSyncBlockedDevicesSummary(it) }
dialog.dismiss()
}
.setNegativeButton(android.R.string.cancel) { dialog, _ -> dialog.dismiss() }
.show()
}
private fun deviceName(device: BluetoothDevice?, fallback: String): String {
return try { device?.name } catch (_: SecurityException) { null } ?: fallback
}
private fun showWearSyncPermissionDeniedSnackbar() {
Snackbar.make(
requireView(),
R.string.wear_sync_permission_required,
Snackbar.LENGTH_LONG
).setAction(R.string.open_settings) {
startActivity(
Intent(
Settings.ACTION_APPLICATION_DETAILS_SETTINGS,
Uri.fromParts("package", requireContext().packageName, null)
)
)
}.show()
}
private fun refreshActivity() {
mReloadMain = true
activity?.recreate()
}
}
@@ -0,0 +1,68 @@
package protect.card_locker.wearos
import android.content.Intent
import android.os.Bundle
import androidx.appcompat.app.AlertDialog
import androidx.appcompat.app.AppCompatActivity
import com.google.android.material.dialog.MaterialAlertDialogBuilder
import protect.card_locker.R
import protect.card_locker.shared.WearBluetoothSecurity
class BluetoothPairingActivity : AppCompatActivity() {
private var currentDialog: AlertDialog? = null
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
showPairingDialog(intent)
}
override fun onNewIntent(intent: Intent) {
super.onNewIntent(intent)
showPairingDialog(intent)
}
override fun onDestroy() {
currentDialog?.dismiss()
currentDialog = null
super.onDestroy()
}
private fun showPairingDialog(intent: Intent) {
val address = intent.getStringExtra(BluetoothPairingConstants.DEVICE_ADDRESS) ?: return finish()
val deviceName = intent.getStringExtra(BluetoothPairingConstants.DEVICE_NAME) ?: address
val token = intent.getStringExtra(BluetoothPairingConstants.DEVICE_TOKEN)
val isMismatch = intent.getBooleanExtra(BluetoothPairingConstants.IS_MISMATCH, false)
val titleRes = if (isMismatch) {
R.string.wear_bt_pairing_mismatch_title
} else {
R.string.wear_bt_pairing_title
}
val messageRes = if (isMismatch) {
R.string.wear_bt_pairing_mismatch_message
} else {
R.string.wear_bt_pairing_message
}
currentDialog?.dismiss()
currentDialog = MaterialAlertDialogBuilder(this)
.setTitle(getString(titleRes, deviceName))
.setMessage(getString(messageRes, deviceName))
.setPositiveButton(R.string.wear_bt_pairing_allow) { _, _ ->
WearBluetoothSecurity.trustDevice(this, address, token)
BluetoothPairingNotificationManager.updateResultNotification(this, address, deviceName, true)
BluetoothPairingNotificationManager.notifyDevicesChanged(this)
finish()
}
.setNegativeButton(R.string.wear_bt_pairing_block) { _, _ ->
WearBluetoothSecurity.blockDevice(this, address)
BluetoothPairingNotificationManager.updateResultNotification(this, address, deviceName, false)
BluetoothPairingNotificationManager.notifyDevicesChanged(this)
finish()
}
.setOnCancelListener { finish() }
.setCancelable(true)
.show()
}
}
@@ -0,0 +1,8 @@
package protect.card_locker.wearos
object BluetoothPairingConstants {
const val DEVICE_ADDRESS = "device_address"
const val DEVICE_NAME = "device_name"
const val DEVICE_TOKEN = "device_token"
const val IS_MISMATCH = "is_mismatch"
}
@@ -0,0 +1,122 @@
package protect.card_locker.wearos
import android.app.NotificationChannel
import android.app.NotificationManager
import android.app.PendingIntent
import android.content.Context
import android.content.Intent
import android.os.Build
import android.widget.Toast
import androidx.core.app.NotificationCompat
import protect.card_locker.NotificationInfo
import protect.card_locker.R
object BluetoothPairingNotificationManager {
const val ACTION_DEVICES_CHANGED = "protect.card_locker.wearos.ACTION_DEVICES_CHANGED"
fun notifyDevicesChanged(context: Context) {
context.sendBroadcast(Intent(ACTION_DEVICES_CHANGED).apply { setPackage(context.packageName) })
}
fun showAuthorizationNotification(
context: Context,
deviceName: String,
address: String,
token: String,
isMismatch: Boolean = false
) {
val notificationManager = context.getSystemService(Context.NOTIFICATION_SERVICE) as NotificationManager
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.O) {
val channel = NotificationChannel(
NotificationInfo.WearBluetooth.PAIRING_CHANNEL_ID,
context.getString(R.string.wear_bt_pairing_channel_name),
NotificationManager.IMPORTANCE_HIGH
)
notificationManager.createNotificationChannel(channel)
}
val titleRes = if (isMismatch) {
R.string.wear_bt_pairing_mismatch_title
} else {
R.string.wear_bt_pairing_title
}
val messageRes = if (isMismatch) {
R.string.wear_bt_pairing_mismatch_message
} else {
R.string.wear_bt_pairing_message
}
val allowIntent = Intent(context, BluetoothPairingReceiver::class.java).apply {
action = BluetoothPairingReceiver.ACTION_ALLOW
putExtra(BluetoothPairingConstants.DEVICE_ADDRESS, address)
putExtra(BluetoothPairingConstants.DEVICE_NAME, deviceName)
putExtra(BluetoothPairingConstants.DEVICE_TOKEN, token)
}
val blockIntent = Intent(context, BluetoothPairingReceiver::class.java).apply {
action = BluetoothPairingReceiver.ACTION_BLOCK
putExtra(BluetoothPairingConstants.DEVICE_ADDRESS, address)
putExtra(BluetoothPairingConstants.DEVICE_NAME, deviceName)
putExtra(BluetoothPairingConstants.IS_MISMATCH, isMismatch)
}
val allowPendingIntent = PendingIntent.getBroadcast(
context,
address.hashCode(),
allowIntent,
PendingIntent.FLAG_UPDATE_CURRENT or PendingIntent.FLAG_IMMUTABLE
)
val blockPendingIntent = PendingIntent.getBroadcast(
context,
address.hashCode() + 1,
blockIntent,
PendingIntent.FLAG_UPDATE_CURRENT or PendingIntent.FLAG_IMMUTABLE
)
val contentIntent = PendingIntent.getActivity(
context,
address.hashCode() + 2,
Intent(context, BluetoothPairingActivity::class.java).apply {
putExtra(BluetoothPairingConstants.DEVICE_ADDRESS, address)
putExtra(BluetoothPairingConstants.DEVICE_NAME, deviceName)
putExtra(BluetoothPairingConstants.DEVICE_TOKEN, token)
putExtra(BluetoothPairingConstants.IS_MISMATCH, isMismatch)
},
PendingIntent.FLAG_UPDATE_CURRENT or PendingIntent.FLAG_IMMUTABLE
)
val notification = NotificationCompat.Builder(context, NotificationInfo.WearBluetooth.PAIRING_CHANNEL_ID)
.setSmallIcon(R.drawable.ic_notification_catima)
.setContentTitle(context.getString(titleRes, deviceName))
.setContentText(context.getString(messageRes, deviceName))
.setStyle(NotificationCompat.BigTextStyle().bigText(context.getString(messageRes, deviceName)))
.addAction(0, context.getString(R.string.wear_bt_pairing_allow), allowPendingIntent)
.addAction(0, context.getString(R.string.wear_bt_pairing_block), blockPendingIntent)
.setContentIntent(contentIntent)
.setAutoCancel(false)
.setPriority(NotificationCompat.PRIORITY_HIGH)
.setCategory(NotificationCompat.CATEGORY_STATUS)
.build()
notificationManager.notify(notificationId(address), notification)
}
fun cancel(context: Context, address: String) {
val notificationManager = context.getSystemService(Context.NOTIFICATION_SERVICE) as NotificationManager
notificationManager.cancel(notificationId(address))
}
fun updateResultNotification(context: Context, address: String, deviceName: String, allowed: Boolean) {
cancel(context, address)
val message = if (allowed) {
context.getString(R.string.wear_bt_pairing_allowed, deviceName)
} else {
context.getString(R.string.wear_bt_pairing_blocked, deviceName)
}
Toast.makeText(context, message, Toast.LENGTH_SHORT).show()
}
fun notificationId(address: String): Int = address.hashCode()
}
@@ -0,0 +1,33 @@
package protect.card_locker.wearos
import android.content.BroadcastReceiver
import android.content.Context
import android.content.Intent
import protect.card_locker.shared.WearBluetoothSecurity
class BluetoothPairingReceiver : BroadcastReceiver() {
override fun onReceive(context: Context, intent: Intent) {
val address = intent.getStringExtra(BluetoothPairingConstants.DEVICE_ADDRESS) ?: return
val deviceName = intent.getStringExtra(BluetoothPairingConstants.DEVICE_NAME) ?: address
val token = intent.getStringExtra(BluetoothPairingConstants.DEVICE_TOKEN)
when (intent.action) {
ACTION_ALLOW -> {
WearBluetoothSecurity.trustDevice(context, address, token)
BluetoothPairingNotificationManager.updateResultNotification(context, address, deviceName, true)
BluetoothPairingNotificationManager.notifyDevicesChanged(context)
}
ACTION_BLOCK -> {
WearBluetoothSecurity.blockDevice(context, address)
BluetoothPairingNotificationManager.updateResultNotification(context, address, deviceName, false)
BluetoothPairingNotificationManager.notifyDevicesChanged(context)
}
}
}
companion object {
const val ACTION_ALLOW = "protect.card_locker.wearos.action.ALLOW_DEVICE"
const val ACTION_BLOCK = "protect.card_locker.wearos.action.BLOCK_DEVICE"
}
}
@@ -0,0 +1,310 @@
package protect.card_locker.wearos
import android.app.NotificationChannel
import android.app.NotificationManager
import android.app.Service
import android.bluetooth.BluetoothAdapter
import android.bluetooth.BluetoothManager
import android.bluetooth.BluetoothServerSocket
import android.bluetooth.BluetoothSocket
import android.content.Intent
import android.os.Build
import android.os.IBinder
import android.util.Log
import androidx.core.app.NotificationCompat
import org.json.JSONArray
import org.json.JSONObject
import protect.card_locker.DBHelper
import protect.card_locker.NotificationInfo
import protect.card_locker.R
import protect.card_locker.Utils
import protect.card_locker.shared.BluetoothPermissionHelper
import protect.card_locker.shared.WearBluetoothProtocol
import protect.card_locker.shared.WearBluetoothSecurity
import java.io.BufferedReader
import java.io.IOException
import java.io.InputStreamReader
import java.io.OutputStreamWriter
import java.io.PrintWriter
class BluetoothServerService : Service() {
companion object {
private const val TAG = "CatimaBtServer"
private const val NOTIFICATION_ID = NotificationInfo.WearBluetooth.NOTIFICATION_ID
private const val CHANNEL_ID = NotificationInfo.WearBluetooth.CHANNEL_ID
}
private var serverThread: AcceptThread? = null
override fun onStartCommand(intent: Intent?, flags: Int, startId: Int): Int {
if (!BluetoothPermissionHelper.isBluetoothConnectGranted(this)) {
Log.w(TAG, "BLUETOOTH_CONNECT permission not granted, stopping")
stopSelf()
return START_NOT_STICKY
}
val adapter = (getSystemService(BLUETOOTH_SERVICE) as? BluetoothManager)?.adapter
if (adapter == null || !adapter.isEnabled) {
Log.w(TAG, "Bluetooth not available or disabled")
stopSelf()
return START_NOT_STICKY
}
// Avoid tearing down a working accept socket every time Settings is resumed.
if (serverThread?.isAlive == true) {
Log.d(TAG, "Bluetooth server already listening")
return START_STICKY
}
startForegroundWithNotification()
serverThread?.cancel()
serverThread = AcceptThread(adapter).also { it.start() }
Log.d(TAG, "Bluetooth server started")
return START_STICKY
}
private fun startForegroundWithNotification() {
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.O) {
val channel = NotificationChannel(
CHANNEL_ID,
getString(R.string.wear_bt_channel_name),
NotificationManager.IMPORTANCE_MIN
).apply { setShowBadge(false) }
getSystemService(NotificationManager::class.java).createNotificationChannel(channel)
}
val notification = NotificationCompat.Builder(this, CHANNEL_ID)
.setContentTitle(getString(R.string.wear_bt_notification_title))
.setSmallIcon(R.drawable.ic_notification_sync)
.setPriority(NotificationCompat.PRIORITY_MIN)
.setSilent(true)
.build()
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.UPSIDE_DOWN_CAKE) {
startForeground(NOTIFICATION_ID, notification,
android.content.pm.ServiceInfo.FOREGROUND_SERVICE_TYPE_CONNECTED_DEVICE)
} else {
startForeground(NOTIFICATION_ID, notification)
}
}
override fun onDestroy() {
serverThread?.cancel()
serverThread = null
super.onDestroy()
}
override fun onBind(intent: Intent?): IBinder? = null
private inner class AcceptThread(adapter: BluetoothAdapter) : Thread() {
private var serverSocket: BluetoothServerSocket? = null
@Volatile private var running = true
init {
try {
if (BluetoothPermissionHelper.isBluetoothConnectGranted(this@BluetoothServerService)) {
serverSocket = adapter.listenUsingRfcommWithServiceRecord(
WearBluetoothProtocol.BT_SERVICE_NAME,
WearBluetoothProtocol.BT_SERVICE_UUID
)
} else {
Log.w(TAG, "BLUETOOTH_CONNECT permission missing, cannot open server socket")
running = false
}
} catch (e: SecurityException) {
Log.e(TAG, "BLUETOOTH_CONNECT permission missing, cannot create server socket", e)
running = false
} catch (e: Exception) {
Log.e(TAG, "Failed to create server socket", e)
running = false
}
}
override fun run() {
Log.d(TAG, "Listening for Bluetooth connections")
while (running) {
val socket: BluetoothSocket = try {
serverSocket?.accept() ?: break
} catch (e: Exception) {
if (running) Log.e(TAG, "Accept failed", e)
break
}
// Handle each client on its own thread so a slow/stuck client
// cannot block the accept loop.
Thread { handleConnection(socket) }.start()
}
Log.d(TAG, "Accept loop ended")
if (running) {
Log.w(TAG, "Accept loop exited unexpectedly, restarting service")
stopSelf()
}
}
private fun handleConnection(socket: BluetoothSocket) {
val address = try { socket.remoteDevice.address } catch (_: SecurityException) { null } ?: return
val deviceName = try { socket.remoteDevice.name } catch (_: SecurityException) { address }
Log.d(TAG, "Connected to $deviceName ($address)")
try {
val reader = BufferedReader(InputStreamReader(socket.inputStream, "UTF-8"))
val writer = PrintWriter(OutputStreamWriter(socket.outputStream, "UTF-8"), false)
val firstLine = reader.readLine()?.trim() ?: return
if (firstLine == WearBluetoothProtocol.BT_CMD_VERSIONS) {
val versions = JSONArray().put("${WearBluetoothProtocol.PROTOCOL_VERSION}.${WearBluetoothProtocol.PROTOCOL_MINOR_VERSION}").toString()
writer.println(versions)
writer.flush()
Log.d(TAG, "Sent supported versions to $deviceName: $versions")
return
}
var commandLine: String? = firstLine
while (commandLine != null) {
val command = commandLine
Log.d(TAG, "Received command: $command from $deviceName")
if (!command.startsWith(WearBluetoothProtocol.BT_CMD_VERSION_PREFIX)) {
notAuthorized(writer)
Log.w(TAG, "Unsupported command from $deviceName: $command")
break
}
val tokenLine = reader.readLine()?.trim()
if (tokenLine == null || !tokenLine.startsWith(WearBluetoothProtocol.BT_CMD_TOKEN_PREFIX)) {
notAuthorized(writer)
Log.w(TAG, "Malformed token line from $deviceName: $tokenLine")
break
}
val token = tokenLine.removePrefix(WearBluetoothProtocol.BT_CMD_TOKEN_PREFIX)
val isTrusted = WearBluetoothSecurity.isDeviceTrusted(this@BluetoothServerService, address)
val storedToken = WearBluetoothSecurity.getDeviceToken(this@BluetoothServerService, address)
val tokenMatches = storedToken != null && storedToken == token
when {
WearBluetoothSecurity.isDeviceBlocked(this@BluetoothServerService, address) -> {
notAuthorized(writer)
Log.w(TAG, "Rejected blocked device $deviceName")
break
}
isTrusted && tokenMatches -> {
if (!serveCommand(writer, deviceName, command)) {
break
}
}
isTrusted && !tokenMatches -> {
BluetoothPairingNotificationManager.showAuthorizationNotification(
this@BluetoothServerService,
deviceName,
address,
token,
isMismatch = true
)
notAuthorized(writer)
Log.w(TAG, "Token mismatch for $deviceName")
break
}
else -> {
BluetoothPairingNotificationManager.showAuthorizationNotification(
this@BluetoothServerService,
deviceName,
address,
token,
isMismatch = false
)
notAuthorized(writer)
Log.d(TAG, "Requested authorization for $deviceName")
break
}
}
commandLine = reader.readLine()?.trim()
}
} catch (_: IOException) {
// Client closed the socket; this is a normal end-of-stream after
// the watch has received the pages it needs.
Log.d(TAG, "Connection closed by $deviceName")
} catch (e: Exception) {
Log.e(TAG, "Error handling connection from $deviceName", e)
} finally {
try { socket.close() } catch (_: Exception) { }
}
}
private fun notAuthorized(writer: PrintWriter) {
writer.println(WearBluetoothProtocol.BT_RESPONSE_NOT_AUTHORIZED)
writer.flush()
}
private fun serveCommand(
writer: PrintWriter,
deviceName: String,
command: String
): Boolean {
when {
command.startsWith(WearBluetoothProtocol.BT_CMD_CARDS_PAGE_PREFIX) -> {
val pageIndex = command.removePrefix(WearBluetoothProtocol.BT_CMD_CARDS_PAGE_PREFIX).toIntOrNull()
if (pageIndex == null || pageIndex < 0) {
Log.w(TAG, "Invalid page index from $deviceName: $command")
notAuthorized(writer)
return false
}
val json = buildCardsPageJson(pageIndex)
writer.println(json)
writer.flush()
Log.d(TAG, "Sent page $pageIndex to $deviceName")
return true
}
else -> {
Log.w(TAG, "Unsupported command from $deviceName: $command")
notAuthorized(writer)
return false
}
}
}
private fun buildCardsPageJson(pageIndex: Int): String {
val dbHelper = DBHelper(this@BluetoothServerService)
val db = dbHelper.readableDatabase
val order = Utils.getLoyaltyCardOrder(this@BluetoothServerService)
val orderDirection = Utils.getLoyaltyCardOrderDirection(this@BluetoothServerService)
val cursor = DBHelper.getLoyaltyCardCursor(
db, "", null, order, orderDirection,
DBHelper.LoyaltyCardArchiveFilter.Unarchived
)
val totalCards = cursor.count
val totalPages = if (totalCards == 0) 1 else (totalCards + WearBluetoothProtocol.PAGE_SIZE - 1) / WearBluetoothProtocol.PAGE_SIZE
val offset = pageIndex * WearBluetoothProtocol.PAGE_SIZE
val array = JSONArray()
cursor.use {
if (it.move(offset + 1)) {
val idIdx = it.getColumnIndexOrThrow(DBHelper.LoyaltyCardDbIds.ID)
val storeIdx = it.getColumnIndexOrThrow(DBHelper.LoyaltyCardDbIds.STORE)
val cardIdIdx = it.getColumnIndexOrThrow(DBHelper.LoyaltyCardDbIds.CARD_ID)
val barcodeIdIdx = it.getColumnIndexOrThrow(DBHelper.LoyaltyCardDbIds.BARCODE_ID)
val barcodeTypeIdx = it.getColumnIndexOrThrow(DBHelper.LoyaltyCardDbIds.BARCODE_TYPE)
val headerColorIdx = it.getColumnIndexOrThrow(DBHelper.LoyaltyCardDbIds.HEADER_COLOR)
var count = 0
do {
array.put(JSONObject().apply {
put("id", it.getInt(idIdx))
put("store", it.getString(storeIdx) ?: "")
put("cardId", it.getString(cardIdIdx) ?: "")
put("barcodeId", if (it.isNull(barcodeIdIdx)) JSONObject.NULL else it.getString(barcodeIdIdx))
put("barcodeType", if (it.isNull(barcodeTypeIdx)) JSONObject.NULL else it.getString(barcodeTypeIdx))
put("headerColor", if (it.isNull(headerColorIdx)) JSONObject.NULL else it.getInt(headerColorIdx))
})
count++
} while (count < WearBluetoothProtocol.PAGE_SIZE && it.moveToNext())
}
}
return JSONObject().apply {
put("page", pageIndex)
put("totalPages", totalPages)
put("cards", array)
}.toString()
}
fun cancel() {
running = false
try { serverSocket?.close() } catch (_: Exception) { }
}
}
}
@@ -0,0 +1,167 @@
package protect.card_locker.wearos
import android.Manifest
import android.app.ForegroundServiceStartNotAllowedException
import android.app.NotificationChannel
import android.app.NotificationManager
import android.content.Context
import android.content.Intent
import android.content.pm.PackageManager
import android.os.Build
import android.util.Log
import androidx.activity.result.ActivityResultCaller
import androidx.activity.result.contract.ActivityResultContracts
import androidx.core.app.ActivityCompat
import androidx.core.app.NotificationCompat
import androidx.core.app.NotificationManagerCompat
import androidx.core.content.ContextCompat
import androidx.core.content.edit
import androidx.preference.PreferenceManager
import protect.card_locker.NotificationInfo
import protect.card_locker.R
import protect.card_locker.preferences.Settings
import protect.card_locker.shared.BluetoothPermissionHelper
class WearSyncPermissionRequester(
caller: ActivityResultCaller,
context: Context
) {
private val context = context.applicationContext
private var pendingResultCallback: ((Boolean) -> Unit)? = null
private val permissionLauncher = caller.registerForActivityResult(
ActivityResultContracts.RequestMultiplePermissions()
) { results ->
val allGranted = results.all { it.value }
pendingResultCallback?.invoke(allGranted)
WearSyncServiceManager.onPermissionResult(this.context, allGranted)
pendingResultCallback = null
}
fun synchronize() {
WearSyncServiceManager.synchronize(context) {
permissionLauncher.launch(getRequiredPermissions())
}
}
fun onWearSyncChanged(enabled: Boolean, onPermissionResult: ((Boolean) -> Unit)? = null) {
val applied = WearSyncServiceManager.onWearSyncChanged(context, enabled) {
pendingResultCallback = onPermissionResult
permissionLauncher.launch(getRequiredPermissions())
}
if (applied) {
onPermissionResult?.invoke(true)
}
}
private fun getRequiredPermissions(): Array<String> = buildList {
if (BluetoothPermissionHelper.isBluetoothConnectRequired()) {
add(Manifest.permission.BLUETOOTH_CONNECT)
}
if (BluetoothPermissionHelper.isPostNotificationsRequired()) {
add(Manifest.permission.POST_NOTIFICATIONS)
}
}.toTypedArray()
}
object WearSyncServiceManager {
private const val TAG = "CatimaWearSyncServiceManager"
fun synchronize(context: Context, requestPermission: (() -> Unit)? = null) {
if (!Settings(context).wearSyncEnabled) {
stop(context)
} else if (arePermissionsGranted(context)) {
start(context)
} else if (requestPermission != null) {
requestPermission()
} else {
stop(context)
}
}
fun onWearSyncChanged(
context: Context,
enabled: Boolean,
requestPermission: () -> Unit
): Boolean {
return if (enabled) {
if (arePermissionsGranted(context)) {
start(context)
true
} else {
requestPermission()
false
}
} else {
stop(context)
true
}
}
private fun arePermissionsGranted(context: Context): Boolean {
return BluetoothPermissionHelper.isBluetoothConnectGranted(context) &&
BluetoothPermissionHelper.isPostNotificationsGranted(context)
}
fun onPermissionResult(context: Context, granted: Boolean) {
if (granted && Settings(context).wearSyncEnabled) {
start(context)
} else {
stop(context)
if (!granted) {
PreferenceManager.getDefaultSharedPreferences(context).edit {
putBoolean(context.getString(R.string.settings_key_wear_sync), false)
}
}
}
}
private fun start(context: Context) {
// Exception can only throw on API level 31 and up
if (Build.VERSION.SDK_INT >= 31) {
try {
ContextCompat.startForegroundService(
context,
Intent(context, BluetoothServerService::class.java)
)
} catch (e: ForegroundServiceStartNotAllowedException) {
// We naively assume we have enough permissions to show a notification as the service should never try to start
// before the user gave notification access anyway
Log.d(TAG, "Foreground service failed to launch: $e")
val channel = NotificationChannel(
NotificationInfo.WearBluetooth.CRITICAL_ERROR_CHANNEL_ID,
context.getString(R.string.wear_bt_critical_error_channel_name),
NotificationManager.IMPORTANCE_HIGH
).apply { setShowBadge(false) }
context.getSystemService(NotificationManager::class.java).createNotificationChannel(channel)
val notification = NotificationCompat.Builder(context, NotificationInfo.WearBluetooth.CRITICAL_ERROR_CHANNEL_ID)
.setSmallIcon(R.drawable.ic_notification_error)
.setContentTitle(context.getString(R.string.wear_bt_failed_foreground_notification_title))
.setContentText(e.message)
.build()
with(NotificationManagerCompat.from(context)) {
if (ActivityCompat.checkSelfPermission(
context,
Manifest.permission.POST_NOTIFICATIONS
) != PackageManager.PERMISSION_GRANTED
) {
return@with
}
notify(
NotificationInfo.WearBluetooth.CRITICAL_ERROR_NOTIFICATION_ID,
notification
)
}
}
} else {
ContextCompat.startForegroundService(
context,
Intent(context, BluetoothServerService::class.java)
)
}
}
private fun stop(context: Context) {
context.stopService(Intent(context, BluetoothServerService::class.java))
}
}
File diff suppressed because one or more lines are too long.
@@ -0,0 +1,30 @@
<!--
~ Copyright (C) 2026 The Android Open Source Project
~
~ Licensed under the Apache License, Version 2.0 (the "License");
~ you may not use this file except in compliance with the License.
~ You may obtain a copy of the License at
~
~ http://www.apache.org/licenses/LICENSE-2.0
~
~ Unless required by applicable law or agreed to in writing, software
~ distributed under the License is distributed on an "AS IS" BASIS,
~ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
~ See the License for the specific language governing permissions and
~ limitations under the License.
-->
<vector xmlns:android="http://schemas.android.com/apk/res/android"
android:width="24dp"
android:height="24dp"
android:viewportWidth="960"
android:viewportHeight="960"
android:tint="#FFFFFF">
<group android:scaleX="1.104"
android:scaleY="1.104"
android:translateX="-49.92"
android:translateY="-49.92">
<path
android:fillColor="@android:color/white"
android:pathData="M508.5,668.5Q520,657 520,640Q520,623 508.5,611.5Q497,600 480,600Q463,600 451.5,611.5Q440,623 440,640Q440,657 451.5,668.5Q463,680 480,680Q497,680 508.5,668.5ZM440,520L520,520L520,280L440,280L440,520ZM480,880Q397,880 324,848.5Q251,817 197,763Q143,709 111.5,636Q80,563 80,480Q80,397 111.5,324Q143,251 197,197Q251,143 324,111.5Q397,80 480,80Q563,80 636,111.5Q709,143 763,197Q817,251 848.5,324Q880,397 880,480Q880,563 848.5,636Q817,709 763,763Q709,817 636,848.5Q563,880 480,880ZM480,800Q614,800 707,707Q800,614 800,480Q800,346 707,253Q614,160 480,160Q346,160 253,253Q160,346 160,480Q160,614 253,707Q346,800 480,800ZM480,480Q480,480 480,480Q480,480 480,480Q480,480 480,480Q480,480 480,480Q480,480 480,480Q480,480 480,480Q480,480 480,480Q480,480 480,480Z"/>
</group>
</vector>
@@ -0,0 +1,30 @@
<!--
~ Copyright (C) 2026 The Android Open Source Project
~
~ Licensed under the Apache License, Version 2.0 (the "License");
~ you may not use this file except in compliance with the License.
~ You may obtain a copy of the License at
~
~ http://www.apache.org/licenses/LICENSE-2.0
~
~ Unless required by applicable law or agreed to in writing, software
~ distributed under the License is distributed on an "AS IS" BASIS,
~ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
~ See the License for the specific language governing permissions and
~ limitations under the License.
-->
<vector xmlns:android="http://schemas.android.com/apk/res/android"
android:width="24dp"
android:height="24dp"
android:viewportWidth="960"
android:viewportHeight="960"
android:tint="#FFFFFF">
<group android:scaleX="0.92"
android:scaleY="0.92"
android:translateX="38.4"
android:translateY="38.4">
<path
android:fillColor="@android:color/white"
android:pathData="M160,800L160,720L270,720L254,706Q202,660 181,601Q160,542 160,482Q160,371 226.5,284.5Q293,198 400,170L400,254Q328,280 284,342.5Q240,405 240,482Q240,527 257,569.5Q274,612 310,648L320,658L320,560L400,560L400,800L160,800ZM560,790L560,706Q632,680 676,617.5Q720,555 720,478Q720,433 703,390.5Q686,348 650,312L640,302L640,400L560,400L560,160L800,160L800,240L690,240L706,254Q755,303 777.5,360.5Q800,418 800,478Q800,589 733.5,675.5Q667,762 560,790Z"/>
</group>
</vector>
Binary file not shown.

After

Width:  |  Height:  |  Size: 790 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 752 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 499 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 509 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 478 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 346 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.1 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 919 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 656 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.6 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.5 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 918 B

@@ -0,0 +1,10 @@
<vector xmlns:android="http://schemas.android.com/apk/res/android"
android:width="24dp"
android:height="24dp"
android:viewportWidth="24"
android:viewportHeight="24"
android:tint="?attr/colorControlNormal">
<path
android:fillColor="@android:color/white"
android:pathData="M2,6h2v12L2,18L2,6zM5,6h1v12L5,18L5,6zM7,6h3v12L7,18L7,6zM11,6h1v12h-1L11,6zM13,6h2v12h-2L13,6zM16,6h2v12h-2L16,6zM19,6h1v12h-1L19,6zM21,6h1v12h-1L21,6z"/>
</vector>
@@ -158,10 +158,31 @@
android:visibility="gone"
tools:visibility="visible"
app:layout_constraintTop_toBottomOf="@+id/note"
app:layout_constraintBottom_toTopOf="@+id/balance"
app:layout_constraintBottom_toTopOf="@+id/cardId"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintStart_toStartOf="parent"/>
<TextView
android:id="@+id/cardId"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:gravity="center_vertical"
android:layout_marginStart="8dp"
android:layout_marginEnd="8dp"
android:layout_marginBottom="4dp"
android:textAppearance="?attr/textAppearanceBody2"
app:drawableLeftCompat="@drawable/ic_card_id_24dp"
android:drawablePadding="4dp"
android:maxLines="1"
android:ellipsize="end"
android:visibility="gone"
app:layout_constraintTop_toBottomOf="@+id/info_divider"
app:layout_constraintBottom_toTopOf="@+id/balance"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintStart_toStartOf="parent"
tools:visibility="visible"
tools:text="1234567890"/>
<TextView
android:id="@+id/balance"
android:layout_width="match_parent"
@@ -174,7 +195,7 @@
app:drawableLeftCompat="@drawable/ic_baseline_payments_24"
android:drawablePadding="4dp"
android:visibility="gone"
app:layout_constraintTop_toBottomOf="@+id/info_divider"
app:layout_constraintTop_toBottomOf="@+id/cardId"
app:layout_constraintBottom_toTopOf="@+id/validFrom"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintStart_toStartOf="parent"
@@ -0,0 +1,22 @@
<?xml version="1.0" encoding="utf-8"?>
<androidx.core.widget.NestedScrollView xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:clipToPadding="false">
<LinearLayout
android:id="@+id/wear_sync_device_list_container"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:orientation="vertical">
<TextView
android:id="@+id/wear_sync_device_list_message"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:paddingStart="?attr/dialogPreferredPadding"
android:paddingEnd="?attr/dialogPreferredPadding"
style="?attr/materialAlertDialogBodyTextStyle" />
</LinearLayout>
</androidx.core.widget.NestedScrollView>
@@ -0,0 +1,13 @@
<?xml version="1.0" encoding="utf-8"?>
<TextView xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:minHeight="?attr/listPreferredItemHeightSmall"
android:gravity="center_vertical"
android:paddingStart="?attr/listPreferredItemPaddingLeft"
android:paddingEnd="?attr/listPreferredItemPaddingRight"
android:background="?attr/selectableItemBackground"
android:ellipsize="marquee"
android:focusable="true"
android:clickable="true"
style="?attr/materialAlertDialogBodyTextStyle" />
+38 -30
View File
@@ -1,85 +1,90 @@
Sylvia van Os
Branden Archer
J. Lavoie
solokot
J. Lavoie
Allan Nordhøy
Heimen Stoffels
Oğuz Ersen
B o d o
Heimen Stoffels
FC (Fay) Stegerman
大王叫我来巡山
B o d o
StoyanDimitrov
SlavekB
Katharine Chui / Katie
Silvério Santos
mondstern
IllusiveMan196
Silvério Santos
Максим Горпиніч
Fjuro
Edgars Andersons
Liner Seven
Altonss
Fjuro
Joel A
Максим Горпиніч
GitSpoon
Michael Moroni
Priit Jõerüüt
Joel A
Altonss
Michael Moroni
Eric
GM
laralem
Petr Novák
laralem
Vasilis
Taco
Milo Ivir
nadiafekihahmed
pfaffenrodt
Vasilis
josé m
Scrambled777
Aayush Gupta
Giovanni Donisi
Nyatsuki
ikanakova
damjang
Scrambled777
josé m
Kachelkaiser
ikanakova
Nyatsuki
Jiri Grönroos
Giovanni Donisi
109247019824
HudobniVolk
Warder
109247019824
Traductor
Samantaz Fox
Balázs Meskó
mdvhimself
Traductor
AMIR-G98
Feike
Arno-github
Samantaz Fox
mdvhimself
NooB9496
Cliff Heraldo
Sergio Paredes
Ankit Tiwari
Arno-github
Feike
Jose Delvani
Robin
Milan Šalka
damjang
Gideon
Govindgopalyadav
Skrripy
huuhaa
Robin
தமிழ்நேரம்
huuhaa
Watchman89
Skrripy
Hosted Weblate user 54392
Govindgopalyadav
Gideon
waffshappen
Marnick L'Eau
JungHee Lee
pacavarn
ngocanhtve
josé m.
aradxxx
StellarSand
Quentin PAGÈS
Projjal Moitra
Aliaksandr Trush
e-michalak
தமிழ் நேரம்
hajertabbane
inavleb
Denis Shilin
Renko
Ricky Tigg
Robin Liu
Ziad OUALHADJ
inavleb
しいたけ
Alexander Ivanov
Miha Frangež
@@ -87,19 +92,22 @@ stavpup
mrestivill
ezn24
ehrt74
dukezas
Virginie
Tim Trek
Thu-Trang Pham
Alì Mortacci
Andre Costa
Arif Budiman
arshbeerSingh
Augustin LAVILLE
Freddo espresso
Govind S Nair
Kim Seohyun
Libre
echo r"0xX4H" | rev
rudy3
Michael Gangolf
PRATHAMESH BHAGAT
Peter Dave Hello
Thomas Bertels
Patrik
+62 -19
View File
@@ -2,21 +2,21 @@
<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="storeName">الاسم</string>
<string name="note">ملاحظة</string>
<string name="cardId">معرّف البطاقة</string>
<string name="barcodeType">نوع الباركود</string>
<string name="noBarcode">لا يوجد باركود</string>
<string name="star">إضافة إلى المفضّلة</string>
<string name="unstar">حذف من المفضّلة</string>
<string name="star">إضافة إلى المفضلة</string>
<string name="unstar">إزالة من المفضلة</string>
<string name="cancel">إلغاء</string>
<string name="save">حفظ</string>
<string name="edit">تعديل</string>
<string name="delete">حذف</string>
<string name="confirm">تأكيد</string>
<string name="deleteConfirmation">حذف هذه البطاقة نهائيًا؟</string>
<string name="deleteConfirmation">هل ترغب في حذف هذه البطاقة نهائيًّا؟</string>
<string name="ok">حسنًا</string>
<string name="share">مشاركة</string>
<string name="sendLabel">إرسال…</string>
@@ -122,15 +122,15 @@
<string name="archived">تمت أرشفة البطاقة</string>
<string name="unarchived">البطاقة غير مؤرشفة</string>
<string name="failedLaunchingPhotoPicker">تعذر العثور على تطبيق معرض مدعوم</string>
<string name="noGiftCardsGroup">أنشئ بعض البطاقات، ثم عيّنهم لهذه المجموعة</string>
<string name="noGiftCardsGroup">أنشئ بعض البطاقات، ثم عيّنها للمجموعة هنا</string>
<string name="deleteTitle">حذف البطاقة</string>
<plurals name="selectedCardCount">
<item quantity="zero"><xliff:g>%d</xliff:g> محدد</item>
<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>
<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="importing">جارٍ الاستيراد…</string>
<string name="exportName">تصدير</string>
@@ -161,9 +161,9 @@
<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>
<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="importOptionFilesystemTitle">الاستيراد من نظام الملفات</string>
<string name="importOptionFilesystemExplanation">اختر ملفًا محددًا من نظام الملفات</string>
@@ -220,7 +220,6 @@
<string name="previousCard">السابق</string>
<string name="nextCard">التالي</string>
<string name="failedToRetrieveImageFile">فشل في استخراج ملف الصورة</string>
<string name="barcodeLongPressMessage">يمكن فتح صور فقط في تطبيق معرض الصور</string>
<string name="failedToOpenUrl">ثبت متصفح ويب أولاً</string>
<string name="welcome">مرحبًا بك في كاتيما</string>
<string name="updateBalanceTitle">كم أنفقت أو استلمت؟</string>
@@ -243,7 +242,6 @@
<string name="permissionReadCardsLabel">اقرأ بطاقات كاتيما</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="openFrontImageInGalleryApp">افتح الصورة الأمامية في تطبيق المعرض</string>
<string name="show_name_below_image_thumbnail">إظهار الاسم أسفل الصورة المصغرة</string>
<string name="show_validity">إظهار الصلاحية</string>
<string name="view_online">مشاهدة حية</string>
@@ -257,10 +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="openBackImageInGalleryApp">فتح الصورة الخلفية في تطبيق المعرض</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 +324,50 @@
<string name="pref_enable_acra_summary">عند التفعيل, سيتم سؤالك للابلاغ بالاعطال عندما تحدث. لا ولن يتم الابلاغ بالاعطال تلفائيا.</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="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>
-3
View File
@@ -163,7 +163,6 @@
<string name="showMoreInfo">Паказаць інфармацыю</string>
<string name="updateBalance">Абнавіць баланс</string>
<string name="failedToRetrieveImageFile">Не ўдалося атрымаць файл відарысу</string>
<string name="barcodeLongPressMessage">У галерэі можна адкрываць толькі відарысы</string>
<string name="sort_by_name">Назва</string>
<string name="sort_by_most_recently_used">Частата выкарыстання</string>
<string name="sort_by_valid_from">Дзейнічае ад</string>
@@ -203,7 +202,6 @@
<string name="validFromSentence">Дзейнічае з: <xliff:g>%s</xliff:g></string>
<string name="height">Вышыня</string>
<string name="switchToFrontImage">Пераключыцца на пярэдні відарыс</string>
<string name="openBackImageInGalleryApp">Адкрыць задні відарыс у галерэі</string>
<string name="setBarcodeHeight">Задаць вышыню штрыхкода</string>
<string name="donate">Ахвяраваць</string>
<string name="icon_header_click_text">Доўгі націск для рэдагавання мініяцюры</string>
@@ -288,7 +286,6 @@
<string name="report_error">Паведаміць пра памылку</string>
<string name="failedLaunchingPhotoPicker">Не атрымалася знайсці праграму для галерэі, якая падтрымліваецца</string>
<string name="unsupportedFile">Гэты файл не падтрымліваецца</string>
<string name="openFrontImageInGalleryApp">Адкрыць пярэдні відарыс у галерэі</string>
<string name="field_must_not_be_empty">Поле не павінна быць пустым</string>
<string name="add_manually_warning_title">Рэкамендуецца сканаванне</string>
<string name="errorReadingFile">Не атрымалася прачытаць файл</string>
+10 -5
View File
@@ -198,7 +198,6 @@
<string name="nextCard">Следваща</string>
<string name="failedToOpenUrl">Първо инсталирайте уеб браузър</string>
<string name="welcome">Добре дошли при Катима</string>
<string name="barcodeLongPressMessage">В приложението галерия могат да бъдат отваряни само изображения</string>
<string name="failedToRetrieveImageFile">Не е възможно извличане на изображение</string>
<string name="noCameraPermissionDirectToSystemSetting">За да сканирате щрихкодове с Catima е необходим достъп до камерата. За да промените разрешението докоснете тук.</string>
<string name="updateBalanceTitle">Колко е похарчено или получено?</string>
@@ -218,8 +217,6 @@
<string name="switchToFrontImage">Показване на предната страна</string>
<string name="switchToBackImage">Показване на задната страна</string>
<string name="switchToBarcode">Показване на щрихкода</string>
<string name="openFrontImageInGalleryApp">Отваряне на изображението на предната страна в приложение за преглед за изображения</string>
<string name="openBackImageInGalleryApp">Отваряне на изображението на задната страна в приложение за преглед за изображения</string>
<string name="setBarcodeHeight">Задаване на височина на щрихкода</string>
<string name="donate">Даряване</string>
<string name="icon_header_click_text">Задръжте, за да промените миниатюрата</string>
@@ -229,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>
@@ -305,4 +302,12 @@
<string name="settings_disable_nfc_while_viewing_card_summary">Спира NFC, за да бъдат предотвратени безконтактни плащания при преглед на карта</string>
<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">Показване номера на картата</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>
+5 -8
View File
@@ -3,13 +3,13 @@
<string name="save">সংরক্ষণ</string>
<string name="cancel">বাতিল</string>
<string name="unstar">তারা মুক্ত</string>
<string name="star">তারা</string>
<string name="barcodeType">বারকোড ধরন</string>
<string name="note">বিঃদ্রঃ</string>
<string name="storeName">দোকানের নাম</string>
<string name="star">পছন্দের তালিকায় যোগ করুন</string>
<string name="barcodeType">বারকোডের ধরন</string>
<string name="note">উল্লেখ্য</string>
<string name="storeName">নাম</string>
<string name="noMatchingGiftCards">কোনো ফলাফল পাওয়া যায়নি। অনুসন্ধানের বাক্যটি বদলে দেখুন।</string>
<string name="noGiftCards">প্লাস বোতামটি টিপে একটি কার্ড যোগ করুন বা ⋮ মেনু থেকে কিছু নিয়ে আসুন।</string>
<string name="action_add">কর্ম যোগ</string>
<string name="action_add">যোগ করুন</string>
<string name="all">সব</string>
<string name="noGroupCards">এই গ্রুপটি খালি</string>
<string name="noGroups">+ যোগ বোতামটি টিপে গ্রুপ যোগ করুন যাতে তাদের শ্রেণীকরণ করা যায়।</string>
@@ -193,7 +193,6 @@
<string name="settings_oled_dark">অন্ধকার থিমের জন্য খাঁটি কালো পটভূমি</string>
<string name="setIcon">আইকন সেট করুন</string>
<string name="updateBalance">ব্যালেন্স আপডেট করুন</string>
<string name="barcodeLongPressMessage">গ্যালারি অ্যাপে শুধুমাত্র ছবি খোলা যাবে</string>
<string name="translate_platform">Weblate-এ</string>
<string name="on_google_play">Google Play-তে</string>
<string name="shortcutSelectCard">একটি কার্ড নির্বাচন করুন</string>
@@ -225,8 +224,6 @@
<string name="switchToBackImage">পিছনের ছবিটিতে সুইচ করুন</string>
<string name="switchToFrontImage">সামনের ছবিটিতে সুইচ করুন</string>
<string name="switchToBarcode">বারকোডে সুইচ করুন</string>
<string name="openFrontImageInGalleryApp">সামনের ছবিটি গ্যালারি অ্যাপে খুলুন</string>
<string name="openBackImageInGalleryApp">পিছনের ছবিটি গ্যালারি অ্যাপে খুলুন</string>
<string name="setBarcodeHeight">বারকোডের উচ্চতা সেট করুন</string>
<string name="icon_header_click_text">দীর্ঘক্ষন টাচ করে থাম্বনেইল এডিট করবেন</string>
<string name="show_balance">ব্যালান্স দেখান</string>
-3
View File
@@ -174,7 +174,6 @@
<string name="importLoyaltyCardKeychainMessage">Odaberite svoj izvoz iz Privjeska za ključeve s karticom vjernosti za uvoz.\nKreirajte ga iz menija Uvoz/Izvoz u Privjesku za ključeve s karticom vjernosti pritiskom na Izvoz.</string>
<string name="importVoucherVaultMessage">Odaberite izvoz iz Voucher Vaulta za uvoz. \nKreirajte ga pritiskom na Izvoz u Voucher Vaultu.</string>
<string name="switchToBarcode">Prebaci na barkod</string>
<string name="openFrontImageInGalleryApp">Otvorite prednju sliku u aplikaciji za pregled slika</string>
<string name="switchToBackImage">Prebaci na sliku iz pozadine</string>
<string name="switchToFrontImage">Prebaci na prednju sliku</string>
<string name="height">Visina</string>
@@ -213,7 +212,6 @@
<string name="credits">Zasluge</string>
<string name="version_history">Historija verzija</string>
<string name="sort_by_valid_from">Vrijedi od</string>
<string name="barcodeLongPressMessage">U aplikaciji galerija mogu se otvoriti samo slike</string>
<string name="failedToRetrieveImageFile">Neuspjevam preuzimanje slikovne datoteke</string>
<string name="updateBalance">Ažuriraj stanje</string>
<string name="showMoreInfo">Prikaži informacije</string>
@@ -241,7 +239,6 @@
<string name="group_name_is_empty">Naziv grupe ne smije biti prazan</string>
<string name="group_updated">Grupa ažurirana</string>
<string name="deleteConfirmationGroup">Izbrisati grupu?</string>
<string name="openBackImageInGalleryApp">Otvori sliku pozadi u aplikaciji za pregled slika</string>
<string name="setBarcodeHeight">Postavi visinu barkoda</string>
<string name="donate">Donirajte</string>
<string name="icon_header_click_text">Dugo pritisnite za uređivanje sličice</string>
+3 -6
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>
@@ -72,7 +72,6 @@
<string name="no">No</string>
<string name="sort">Ordenar</string>
<string name="failedToRetrieveImageFile">Ha fallat l\'obtenció del fitxer d\'imatge</string>
<string name="barcodeLongPressMessage">Les imatges només es poden obrir desde la app galeria</string>
<string name="settings_category_title_privacy">Privacitat</string>
<plurals name="deleteCardsTitle">
<item quantity="one">Eliminar <xliff:g>%d</xliff:g> targeta</item>
@@ -92,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>
@@ -154,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>
@@ -167,7 +166,6 @@
<string name="noCardsMessage">Afegeix primer una targeta</string>
<string name="noCardExistsError">No s\'ha pogut trobar aquesta targeta</string>
<string name="failedParsingImportUriError">No s\'ha pogut analitzar l\'URI d\'importació</string>
<string name="openFrontImageInGalleryApp">Obrir la imatge frontal a l\'app de galeria</string>
<string name="settings_use_volume_keys_navigation_summary">Utilitza els botons de volum per canviar la targeta que es mostra</string>
<string name="updateBarcodeQuestionText">Ha canviat el valor ID. Vol actualitzar també el codi de barres per uter utilitzar el mateix valor?</string>
<string name="starred">Preferides</string>
@@ -183,7 +181,6 @@
<string name="on_github">al Github</string>
<string name="include_if_asking_support">Si vol demanar suport tècnic, inclogui la següent informació:</string>
<string name="newBalanceSentence">Nou balanç: <xliff:g>%s</xliff:g></string>
<string name="openBackImageInGalleryApp">Obrir la imatge posterior a l\'app de la galeria</string>
<string name="generic_error_please_retry">Perdoni, alguna cosa ha anat malament, siusplau torni-ho a provar...</string>
<string name="settings_column_count_6">6</string>
<string name="useBackImage">Utilitzar la imatge posterior</string>
+50 -5
View File
@@ -203,7 +203,6 @@
<string name="nextCard">Následující</string>
<string name="failedToOpenUrl">Nejprve nainstalujte webový prohlížeč</string>
<string name="welcome">Vítejte v Catima</string>
<string name="barcodeLongPressMessage">V aplikaci pro galerii mohou být otevírány pouze obrázky</string>
<string name="failedToRetrieveImageFile">Nepodařilo se získat soubor obrázku</string>
<string name="cameraPermissionDeniedTitle">Nepodařilo se získat přístup k fotoaparátu</string>
<string name="importCards">Importovat karty</string>
@@ -223,8 +222,6 @@
<string name="switchToFrontImage">Přepnout na přední obrázek</string>
<string name="switchToBackImage">Přepnout na zadní obrázek</string>
<string name="switchToBarcode">Přepnout na čárový kód</string>
<string name="openFrontImageInGalleryApp">Otevřít přední obrázek v aplikaci prohlížeče obrázků</string>
<string name="openBackImageInGalleryApp">Otevřít zadní obrázek v aplikaci prohlížeče obrázků</string>
<string name="setBarcodeHeight">Nastavit výšku čárového kódu</string>
<string name="donate">Přispět</string>
<string name="icon_header_click_text">Dlouhým stisknutím miniaturu upravíte</string>
@@ -233,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>
@@ -311,4 +308,52 @@
<string name="settings_disable_nfc_while_viewing_card_summary">Pozastaví NFC pro zabránění spuštění NFC plateb při zobrazování karty</string>
<string name="nfc_blocked_while_viewing_card">NFC je pozastaveno</string>
<string name="change_settings">Změnit nastavení</string>
<string name="nfc_block_system_error">Nepodařilo se pozastavit NFC</string>
<string name="sort_by_most_recently_added">Nedávno přidáno</string>
<string name="zoomFrontImage">Přiblížit přední obrázek</string>
<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>
+46 -5
View File
@@ -197,7 +197,6 @@
<string name="nextCard">Nächste</string>
<string name="failedToOpenUrl">Bitte installiere zuerst einen Webbrowser</string>
<string name="welcome">Willkommen bei Catima</string>
<string name="barcodeLongPressMessage">In der Galerie können nur Bilder geöffnet werden</string>
<string name="failedToRetrieveImageFile">Bilddatei konnte nicht abgerufen werden</string>
<string name="updateBalanceTitle">Wie viel hast du ausgegeben oder erhalten?</string>
<string name="cameraPermissionDeniedTitle">Kein Zugriff auf die Kamera</string>
@@ -215,8 +214,6 @@
<string name="anyDate">Beliebiges Datum</string>
<string name="icon_header_click_text">Zum Bearbeiten des Vorschaubildes lang drücken</string>
<string name="switchToBarcode">Zum Barcode wechseln</string>
<string name="openFrontImageInGalleryApp">Vorderseite in Bildbetrachter öffnen</string>
<string name="openBackImageInGalleryApp">Rückseite in Bildbetrachter öffnen</string>
<string name="height">Höhe</string>
<string name="switchToFrontImage">Zur Vorderseite wechseln</string>
<string name="switchToBackImage">Zur Rückseite wechseln</string>
@@ -226,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>
@@ -305,4 +302,48 @@
<string name="nfc_blocked_while_viewing_card">NFC ist vorübergehend deaktiviert</string>
<string name="settings_disable_nfc_while_viewing_card_summary">Deaktiviert vorübergehend NFC, sodass keine NFC-Zahlungen ausgelöst werden können, während eine Karte angezeigt wird</string>
<string name="settings_disable_nfc_while_viewing_card">NFC vorübergehend deaktivieren</string>
<string name="nfc_block_system_error">Pausieren von NFC ist fehlgeschlagen</string>
<string name="show_card_id">Karten-ID anzeigen</string>
<string name="zoomBackImage">Rückseite vergrößern</string>
<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>
+46 -5
View File
@@ -200,7 +200,6 @@
<string name="previousCard">Προηγούμενη</string>
<string name="nextCard">Επόμενη</string>
<string name="updateBalance">Ενημέρωση υπολοίπου</string>
<string name="barcodeLongPressMessage">Μόνο εικόνες μπορούν να ανοιχτούν στην εφαρμογή φωτογραφιών</string>
<string name="noCameraPermissionDirectToSystemSetting">Για να σκανάρετε γραμμωτούς κώδικες, θα χρειαστεί πρόσβαση στην κάμερα από το Catima. Πατήστε εδώ για να δώσετε πρόσβαση.</string>
<string name="importCards">Εισαγωγή καρτών</string>
<string name="updateBalanceHint">Εισάγετε ποσό</string>
@@ -211,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>
@@ -219,11 +218,9 @@
<string name="switchToBarcode">Μετάβαση σε γραμμωτό κώδικα</string>
<string name="validFromSentence">Ισχύει από: <xliff:g>%s</xliff:g></string>
<string name="permissionReadCardsLabel">Διαβάστε τις κάρτες Catima</string>
<string name="openBackImageInGalleryApp">Ανοίξτε την οπίσθια εικόνα στη συλλογή εικόνων</string>
<string name="permissionReadCardsDescription">Διάβασε τις Κάρτες σου Catima και όλες τους τις λεπτομέρειες, συμπεριλαμβανομένων των σημειώσεων και των εικόνων</string>
<string name="donate">Δωρεά</string>
<string name="icon_header_click_text">Πατήστε παρατεταμένα για επεξεργασία του εικονιδίου</string>
<string name="openFrontImageInGalleryApp">Ανοίξτε την εμπρόσθια εικόνα στη συλλογή εικόνων</string>
<string name="storageReadPermissionRequired">Δικαίωμα ανάγνωσης του χώρου αποθήκευσης απαραίτητο για αυτήν την ενέργεια…</string>
<string name="validFromDate">Ισχύει από</string>
<string name="anyDate">Οποιαδήποτε ημερομηνία</string>
@@ -258,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>
@@ -305,4 +302,48 @@
<string name="settings_disable_nfc_while_viewing_card_summary">Παύση του NFC για την αποτροπή ενεργοποίησης πληρωμών NFC κατά την προβολή μιας κάρτας</string>
<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">Εμφάνιση ταυτότητας κάρτας</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>
-3
View File
@@ -165,7 +165,6 @@
<string name="chooseImportType">Importi datumojn de</string>
<string name="importCatima">Importi el Catima</string>
<string name="updateBalance">Ĝisdatigi saldon</string>
<string name="barcodeLongPressMessage">Nur bildoj povas esti malfermitaj en la galeria apo</string>
<string name="sort_by_name">Nomo</string>
<string name="sort_by_most_recently_used">Plej laste uzitaj</string>
<string name="sort_by_expiry">Dato de eksvalidiĝo</string>
@@ -180,8 +179,6 @@
<string name="newBalanceSentence">Nova saldo: <xliff:g>%s</xliff:g></string>
<string name="anyDate">Iam ajn</string>
<string name="switchToFrontImage">Ŝanĝi al antaŭa bildo</string>
<string name="openFrontImageInGalleryApp">Malfermi la antaŭan bildon en galeria apo</string>
<string name="openBackImageInGalleryApp">Malfermi la malantaŭan bildon en galeria apo</string>
<string name="show_name_below_image_thumbnail">Montri nomon sub la bildeto</string>
<string name="show_note">Montri noton</string>
<string name="settings_category_title_cards">Kartoj</string>
+1 -3
View File
@@ -182,7 +182,6 @@
<string name="selectColor">Seleccionar color</string>
<string name="sort">Ordenar</string>
<string name="app_contributors">Hecho posible por: <xliff:g id="app_contributors">%s</xliff:g></string>
<string name="barcodeLongPressMessage">Solo se puede abrir imágenes en la aplicación de galería</string>
<string name="yes">Si</string>
<string name="no">No</string>
<string name="passwordRequired">Ingresa la contraseña</string>
@@ -236,8 +235,6 @@
<string name="switchToFrontImage">Cambiar a imagen frontal</string>
<string name="switchToBackImage">Cambiar a imagen trasera</string>
<string name="switchToBarcode">Cambiar a código de barras</string>
<string name="openFrontImageInGalleryApp">Abrir imagen frontal en aplicación para ver imágenes</string>
<string name="openBackImageInGalleryApp">Abrir imagen trasera en galería de fotos</string>
<string name="setBarcodeHeight">Definir altura de código de barras</string>
<string name="show_name_below_image_thumbnail">Mostrar nombre de la imagen bajo su miniatura</string>
<string name="show_balance">Mostrar saldo</string>
@@ -263,4 +260,5 @@
<string name="show_archived_cards">Mostrar tarjetas archivadas</string>
<string name="view_online">Ver Online</string>
<string name="action_more_options">Más Opciones</string>
<string name="settings_disable_nfc_while_viewing_card">Pause NFC</string>
</resources>
+54 -11
View File
@@ -16,7 +16,7 @@
<string name="addCardTitle">Añadir tarjeta</string>
<string name="scanCardBarcode">Escanear código de barras</string>
<string name="cardShortcut">Atajo de tarjeta</string>
<string name="noCardsMessage">Añada una tarjeta primero</string>
<string name="noCardsMessage">Añada una primera tarjeta</string>
<string name="noCardExistsError">No se ha podido encontrar esa tarjeta</string>
<string name="importExport">Importar/Exportar</string>
<string name="exportName">Exportar</string>
@@ -25,7 +25,7 @@
<string name="importFailedTitle">Falló la importación</string>
<string name="importFailed">No se ha podido realizar la importación</string>
<string name="exportSuccessfulTitle">Exportado</string>
<string name="exportFailedTitle">Falló la exportación</string>
<string name="exportFailedTitle">Exportación incorrecta</string>
<string name="exportFailed">No se han podido exportar</string>
<string name="importing">Importando…</string>
<string name="exporting">Exportando…</string>
@@ -47,7 +47,7 @@
<string name="settings_theme">Tema</string>
<string name="app_copyright_old">Basado en Loyalty Card Keychain
\nderechos de autor © 2016-2020 de Branden Archer</string>
<string name="exportOptionExplanation">Los datos se guardarán en la ubicación que elija</string>
<string name="exportOptionExplanation">Los datos serán escritos en el lugar que elija</string>
<string name="failedParsingImportUriError">No se pudo procesar el URI de importación</string>
<string name="share">Compartir</string>
<string name="barcodeType">Tipo de código de barras</string>
@@ -205,13 +205,12 @@
</plurals>
<string name="starred">Estrellado</string>
<string name="failedToRetrieveImageFile">No se pudo recuperar el archivo de imagen</string>
<string name="barcodeLongPressMessage">Solo se pueden abrir imágenes en la aplicación de galería</string>
<string name="updateBalanceTitle">¿Cuánto has gastado o recibido?</string>
<string name="currentBalanceSentence">Saldo actual: <xliff:g>%s</xliff:g></string>
<string name="noCameraPermissionDirectToSystemSetting">Para escanear códigos de barras, Catima necesitará acceso a su cámara. Toque aquí para cambiar la configuración de sus permisos.</string>
<string name="noCameraPermissionDirectToSystemSetting">Para escanear códigos de barras, Catima necesitará acceso a su cámara. Toque aquí para cambiar los ajustes de su permiso.</string>
<string name="updateBalanceHint">Introduzca el importe</string>
<string name="newBalanceSentence">Nuevo balance: <xliff:g>%s</xliff:g></string>
<string name="cameraPermissionDeniedTitle">No se pudo acceder a la cámara</string>
<string name="cameraPermissionDeniedTitle">No pudo acceder a la cámara</string>
<string name="updateBalance">Actualizar el balance</string>
<string name="importCards">Importar tarjetas</string>
<string name="storageReadPermissionRequired">Se necesita permiso para leer el almacenamiento para esta acción…</string>
@@ -222,8 +221,6 @@
<string name="validFromSentence">Válido desde: <xliff:g>%s</xliff:g></string>
<string name="height">Alto</string>
<string name="switchToFrontImage">Cambiar a imagen frontal</string>
<string name="openFrontImageInGalleryApp">Abrir imagen frontal en la aplicación de la galería</string>
<string name="openBackImageInGalleryApp">Abrir imagen trasera en la aplicación de visor de imagen</string>
<string name="setBarcodeHeight">Ajustar la altura del código de barras</string>
<string name="donate">Donar</string>
<string name="switchToBarcode">Cambiar a código de barras</string>
@@ -234,11 +231,11 @@
<string name="show_validity">Mostrar la validez</string>
<string name="show_balance">Mostrar el saldo</string>
<string name="permissionReadCardsLabel">Leer Tarjetas Catima</string>
<string name="permissionReadCardsDescription">leer tus tarjetas Catima y todos sus detalles, incluidas notas e imágenes</string>
<string name="settings_allow_content_provider_read_title">Permite a otras aplicaciones acceder a mis datos</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">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>
@@ -311,4 +308,50 @@
<string name="settings_disable_nfc_while_viewing_card_summary">Pausa NFC para prevenir abonaciones NFC desde disparador mientras vea una tarjeta</string>
<string name="nfc_blocked_while_viewing_card">NFC está pausado</string>
<string name="change_settings">Cambiar ajustes</string>
<string name="nfc_block_system_error">Incorrecto al pausar NFC</string>
<string name="sort_by_most_recently_added">Más recientemente añadido</string>
<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>
+46 -5
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>
@@ -118,7 +118,6 @@
<string name="updateBarcodeQuestionTitle">Kas uuendame triipkoodi väärtust?</string>
<string name="yes">Jah</string>
<string name="no">Ei</string>
<string name="barcodeLongPressMessage">Galeriirakenduses saad avada vaid pilte</string>
<string name="sort_by_most_recently_used">Viimati kasutatud</string>
<string name="sort_by_expiry">Aegumine</string>
<string name="reverse">…tagurpidi järjekorras</string>
@@ -140,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>
@@ -230,8 +229,6 @@
<string name="switchToFrontImage">Vaata esikülje pilti</string>
<string name="switchToBackImage">Vaata tagakülje pilti</string>
<string name="switchToBarcode">Vaata triipkoodi</string>
<string name="openFrontImageInGalleryApp">Ava esikülje pilt pildivalijas</string>
<string name="openBackImageInGalleryApp">Ava tagakülje pilt pildivalijas</string>
<string name="setBarcodeHeight">Määra triipkoodi kõrgus</string>
<string name="donate">Toeta rahaliselt</string>
<string name="icon_header_click_text">Pisipildi muutmiseks vajuta pikalt</string>
@@ -305,4 +302,48 @@
<string name="nfc_blocked_while_viewing_card">Lähiväljaside (NFC) on peatatud</string>
<string name="change_settings">Muuda seadistusi</string>
<string name="settings_disable_nfc_while_viewing_card_summary">Vältimaks, et lähiväljaside (NFC) abil toimiv makseliides käivitub, lülitatakse kaardi vaatamisel lähiväljaside (NFC) välja</string>
<string name="nfc_block_system_error">Lähiväljaside (NFC) peatamine ei õnnestunud</string>
<string name="sort_by_most_recently_added">Viimasena lisatud</string>
<string name="zoomFrontImage">Suumi esikaane pilti</string>
<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>
+14 -8
View File
@@ -139,7 +139,7 @@
<string name="group_updated">گروه به روز شد</string>
<string name="all">همه</string>
<string name="deleteConfirmationGroup">حذف گروه؟</string>
<string name="failedOpeningFileManager">ابتدا یک مدیریت فایل نصب کنید.</string>
<string name="failedOpeningFileManager">نمی توان مدیر پرونده را باز کرد</string>
<string name="moveUp">به بالا حرکت کن</string>
<string name="moveDown">به پایین حرکت کن</string>
<string name="leaveWithoutSaveConfirmation">بدون ذخیره ترک می‌کنید؟</string>
@@ -179,7 +179,7 @@
<string name="importCards">واردات کارت ها</string>
<string name="height">ارتفاع</string>
<string name="add_manually_warning_message">برای برخی از فروشگاه‌ها، مقدار بارکد با عدد نوشته شده روی کارت متفاوت است. به همین دلیل، وارد کردن دستی بارکد ممکن است همیشه کار نکند. اکیداً توصیه می‌شود که به جای آن، بارکد را با دوربین خود اسکن کنید. آیا هنوز می‌خواهید ادامه دهید؟</string>
<string name="generic_error_please_retry">ببخشید، مشکلی پیش آمده، لطفا دوباره امتحان کنید...</string>
<string name="generic_error_please_retry">مشکلی پیش آمده</string>
<string name="welcome">یه کتیما خوش آمدید</string>
<string name="chooseValidFromDate">مقداری درست از تاریخ برگزینید</string>
<string name="intent_import_card_from_url_share_multiple_text">می‌خواهم چند کارت به شما بدهم</string>
@@ -191,7 +191,7 @@
<string name="no">نه</string>
<string name="updateBarcodeQuestionTitle">مقدار بارکد را به‌روز می‌کنید؟</string>
<string name="updateBarcodeQuestionText">شما شناسه را تغییر دادید. می‌خواهید بارکد را هم به‌روز کنید تا همین مقدار را به‌کار ببرید؟</string>
<string name="failedGeneratingShareURL">نتوانستم آدرس هم‌رسانی‌پذیر بسازم. لطفن این را گزارش کنید.</string>
<string name="failedGeneratingShareURL">نتوانستم نشانی هم‌رسانی‌پذیر بسازم.</string>
<string name="turn_flashlight_on">چراغ‌قوه را روشن کنید</string>
<string name="settings_locale">زبان</string>
<string name="settings_oled_dark">پس‌زمینه‌ی یک‌دست سیاه برای حالت تاریک</string>
@@ -209,11 +209,10 @@
<string name="wrongValueForBarcodeType">مقدار برای نوع بارکد برگزیده درست نیست</string>
<string name="setBackImage">عکس پشتِ‌سر را بگذارید</string>
<string name="removeImage">عکس را برچینید</string>
<string name="passwordRequired">لطفا گذرواژه را وارد کنید</string>
<string name="passwordRequired">گذرواژه را وارد کنید</string>
<string name="previousCard">پیشین</string>
<string name="turn_flashlight_off">چراغ‌قوه را خاموش کنید</string>
<string name="updateBalance">به‌روزرسانی موجودی</string>
<string name="barcodeLongPressMessage">تنها عکس می‌تواند در گالری برنامه باز شود</string>
<string name="sort_by_name">نام</string>
<string name="sort_by_most_recently_used">به‌تازگی استفاده‌شده</string>
<string name="sort_by_expiry">انقضا</string>
@@ -221,7 +220,6 @@
<string name="include_if_asking_support">اگر می‌خواهید پشتیبانی درخواست کنید، اطلاعات زیر را پر کنید:</string>
<string name="unarchive">برچیدن بایگانی</string>
<string name="switchToBackImage">به عکس پشتِ‌سر جابه‌جا کنید</string>
<string name="openBackImageInGalleryApp">عکس پشتِ‌سر را در برنامه‌ی گالری باز کنید</string>
<string name="setBarcodeHeight">ارتفاع بارگد را بگمارید</string>
<string name="donate">کمک مالی کنید</string>
<string name="icon_header_click_text">برای ویرایش قاب پیش‌نمایه فشار داده و نگه‌دارید</string>
@@ -235,7 +233,7 @@
<string name="settings_column_count_4">۴</string>
<string name="settings_column_count_5">۵</string>
<string name="settings_column_count_6">۶</string>
<string name="failedLaunchingPhotoPicker">نتوانستم یک برنامه‌ی گالری پشتیبانی‌شده بیابم</string>
<string name="failedLaunchingPhotoPicker">نتوانستم یک برنامه‌ی انتخاب تصویر پشتیبانی‌شده بیابم</string>
<string name="show_balance">موجودی را نشان دهید</string>
<string name="settings_column_count_landscape">ستون‌ها در حالت لنداسکیپ</string>
<string name="settings_column_count_1">۱</string>
@@ -265,7 +263,6 @@
<string name="failedToOpenUrl">نخست یک مرورگر وب نصب کنید</string>
<string name="updateBalanceTitle">چقدر خرج یا دریافت کردید؟</string>
<string name="switchToBarcode">به بارکد جابه‌جا کنید</string>
<string name="openFrontImageInGalleryApp">عکس روبه‌رو را در برنامه‌ی گالری باز کنید</string>
<string name="add_a_card_in_a_different_way">یک کارت به روشی متفاوت بیافزایید</string>
<string name="takePhoto">عکس بگیرید</string>
<string name="settings_column_count_7">۷</string>
@@ -286,4 +283,13 @@
<string name="addFromPkpass">یک فایل دفترچه حساب (.pkpass) انتخاب کنید</string>
<string name="noCameraFoundGuideText">به نظر نمی‌رسد دستگاه شما دوربین داشته باشد. اگر دارد، دستگاه را مجدداً راه‌اندازی کنید. در غیر این صورت، از دکمه گزینه‌های بیشتر در زیر برای افزودن بارکد به روش دیگری استفاده کنید.</string>
<string name="card_list_widget_empty">بعد از اینکه چند کارت وفاداری در کاتیما اضافه کردید، آنها اینجا ظاهر می‌شوند. اگر کارت دارید، مطمئن شوید که همه آنها بایگانی نشده‌اند.</string>
<string name="card_list_widget_name">فهرست کارت</string>
<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>
+10 -3
View File
@@ -200,7 +200,6 @@
<string name="welcome">Tervetuloa Catimaan</string>
<string name="updateBalanceTitle">Kuinka paljon kulutit tai tienasit?</string>
<string name="updateBalanceHint">Syötä summa</string>
<string name="barcodeLongPressMessage">Vain kuvia on mahdollista avata galleriasovelluksessa</string>
<string name="archive">Arkistoi</string>
<string name="importCards">Tuo kortteja</string>
<string name="failedToRetrieveImageFile">Kuvatiedoston noutaminen epäonnistui</string>
@@ -223,14 +222,12 @@
<string name="height">Korkeus</string>
<string name="switchToFrontImage">Vaihda etukuvaan</string>
<string name="switchToBarcode">Vaihda viivakoodiin</string>
<string name="openFrontImageInGalleryApp">Avaa etukuva kuvankatselusovelluksessa</string>
<string name="settings_display_barcode_max_brightness_summary">Välttämätön, jotta jotkin skannerit toimivat</string>
<string name="settings_keep_screen_on_summary">Poistaa näytön aikakatkaisun korttia katsellessa</string>
<string name="settings_disable_lockscreen_while_viewing_card_summary">Poistaa näyttölukituksen käytöstä korttia katsellessa</string>
<string name="settings_allow_content_provider_read_title">Salli muiden sovellusten käyttää omaa dataa</string>
<string name="settings_oled_dark_summary">Vähentää akun käyttöä OLED-näytöillä</string>
<string name="switchToBackImage">Vaihda takakuvaan</string>
<string name="openBackImageInGalleryApp">Avaa takakuva kuvankatselusovelluksessa</string>
<string name="setBarcodeHeight">Aseta viivakoodin korkeus</string>
<string name="icon_header_click_text">Pitkä painallus pikkukuvan muokkaamiseksi</string>
<string name="show_name_below_image_thumbnail">Näytä nimi pikkukuvan alapuolella</string>
@@ -302,4 +299,14 @@
<string name="back">Takaisin</string>
<string name="acra_explain_crash">Jos mahdollista lisää tietoja toiminnastasi täällä:</string>
<string name="acra_crash_email_subject"><xliff:g id="app_name">%s</xliff:g> pysähtymisraportti</string>
<string name="settings_disable_nfc_while_viewing_card">Keskeytä NFC</string>
<string name="settings_disable_nfc_while_viewing_card_summary">Keskeyttää NFC:n, jotta NFC-maksut eivät aktivoituisi korttia katsoessa</string>
<string name="sort_by_most_recently_added">Viimeksi lisätty</string>
<string name="zoomFrontImage">Suurenna etukuvaa</string>
<string name="zoomBackImage">Suurenna takakuvaa</string>
<string name="show_card_id">Näytä kortin tunniste</string>
<string name="nfc_blocked_while_viewing_card">NFC on keskeytetty</string>
<string name="change_settings">Muuta asetuksia</string>
<string name="nfc_block_system_error">NFC:n keskeyttäminen epäonnistui</string>
<string name="open_in_gallery">Avaa kuvagalleriassa</string>
</resources>
+49 -6
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>
@@ -203,7 +203,6 @@
<string name="previousCard">Précédent</string>
<string name="failedToOpenUrl">Installez d\'abord un navigateur web</string>
<string name="welcome">Bienvenue dans Catima</string>
<string name="barcodeLongPressMessage">Seules les images peuvent être ouvertes dans lapplication galerie</string>
<string name="failedToRetrieveImageFile">Impossible de récupérer le fichier image</string>
<string name="currentBalanceSentence">Solde actuel : <xliff:g>%s</xliff:g></string>
<string name="updateBalanceHint">Entrez le montant</string>
@@ -223,8 +222,6 @@
<string name="switchToFrontImage">Passer à l\'image avant</string>
<string name="switchToBackImage">Passer à l\'image arrière</string>
<string name="switchToBarcode">Passer au code barre</string>
<string name="openFrontImageInGalleryApp">Ouvrir l\'image du recto dans l\'application de visualisation des images</string>
<string name="openBackImageInGalleryApp">Ouvrir l\'image du verso dans l\'application de visualisation des images</string>
<string name="setBarcodeHeight">Définir la hauteur du code-barres</string>
<string name="donate">Faire un don</string>
<string name="icon_header_click_text">Appuyez longuement pour modifier la vignette</string>
@@ -234,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>
@@ -311,4 +308,50 @@
<string name="settings_disable_nfc_while_viewing_card_summary">Mettre en pause le NFC pour éviter le déclenchement de paiements NFC lors de la consultation d\'une carte</string>
<string name="nfc_blocked_while_viewing_card">Le NFC est en pause</string>
<string name="change_settings">Modifier les paramètres</string>
<string name="nfc_block_system_error">Erreur lors de la mise en pause du NFC</string>
<string name="sort_by_most_recently_added">Récemment ajoutés</string>
<string name="zoomFrontImage">Grossir l\'image avant</string>
<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>
+46 -5
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>
@@ -150,7 +150,6 @@
<string name="showMoreInfo">Ver info</string>
<string name="updateBalance">Actualizar saldo</string>
<string name="failedToRetrieveImageFile">Fallou a obtención do ficheiro de imaxe</string>
<string name="barcodeLongPressMessage">Só imaxes que se abren na app de galería</string>
<string name="sort_by_name">Nome</string>
<string name="sort_by_most_recently_used">Usadas recentemente</string>
<string name="sort_by_expiry">Caducidade</string>
@@ -194,8 +193,6 @@
<string name="height">Altura</string>
<string name="switchToFrontImage">Cambiar á imaxe frontal</string>
<string name="switchToBackImage">Cambiar á imaxe posterior</string>
<string name="openFrontImageInGalleryApp">Abrir imaxe frontal no visor de imaxes</string>
<string name="openBackImageInGalleryApp">Abrir imaxe posterior no visor de imaxes</string>
<string name="setBarcodeHeight">Establecer altura do código de barras</string>
<string name="icon_header_click_text">Pulsación longa para editar a miniatura</string>
<string name="show_name_below_image_thumbnail">Mostrar nome debaixo da miniatura</string>
@@ -304,4 +301,48 @@
<string name="settings_disable_nfc_while_viewing_card_summary">Detén o NFC para evitar a activación de pago con NFC cando se mira unha tarxeta</string>
<string name="nfc_blocked_while_viewing_card">NFC está en pausa</string>
<string name="change_settings">Cambiar axustes</string>
<string name="nfc_block_system_error">Non se detivo NFC</string>
<string name="sort_by_most_recently_added">Máis recentes</string>
<string name="zoomFrontImage">Zoom na imaxe frontal</string>
<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>
-3
View File
@@ -212,7 +212,6 @@
<string name="version_history">वर्जन तिहास</string>
<string name="archive">पुरालेख/संग्रहित (Archive)</string>
<string name="archived">कार्ड संग्रहीत (Archived)</string>
<string name="barcodeLongPressMessage">गैलरी ऐप में केवल छवियां ही खोली जा सकती हैं</string>
<string name="license">अनुज्ञप्ति (लाइसेंस)</string>
<string name="source_repository">स्रोत रिपोजिटरी</string>
<string name="include_if_asking_support">यदि आप सहायता का अनुरोध करना चाहते हैं, तो निम्नलिखित जानकारी शामिल करें:</string>
@@ -245,8 +244,6 @@
<string name="switchToFrontImage">सामने वाली छवि पर स्विच करें</string>
<string name="switchToBackImage">पिछली छवि पर स्विच करें</string>
<string name="switchToBarcode">बारकोड पर स्विच करें</string>
<string name="openFrontImageInGalleryApp">इमेज दर्शक सामने वाली इमेज खोलें</string>
<string name="openBackImageInGalleryApp">पिछली इमेज खोलें</string>
<string name="setBarcodeHeight">बारकोड ऊंचाई सेट करें</string>
<string name="icon_header_click_text">छोटी छवि (थंबनेल) संपादित करने के लिए देर तक दबाएँ</string>
<string name="enter_card_id">अपने कार्ड पर आईडी नंबर या टेक्स्ट दर्ज करें</string>
-3
View File
@@ -128,8 +128,6 @@
<string name="switchToFrontImage">Prebaci na prednju sliku</string>
<string name="switchToBackImage">Prebaci na stražnju sliku</string>
<string name="switchToBarcode">Prebaci na crtični kod</string>
<string name="openFrontImageInGalleryApp">Otvori prednju sliku u aplikaciji prikazivača slika</string>
<string name="openBackImageInGalleryApp">Otvori stražnju sliku u aplikaciji prikazivača slika</string>
<string name="setBarcodeHeight">Postavi visinu crtičnog koda</string>
<plurals name="selectedCardCount">
<item quantity="one"><xliff:g>%d</xliff:g> odabrana</item>
@@ -159,7 +157,6 @@
<string name="importVoucherVaultMessage">Odaberi tvoj izvoz iz Voucher Vault za uvoz. \nStvori ga u aplikaciji Voucher Vault pritiskom na „Izvoz”.</string>
<string name="failedToRetrieveImageFile">Neuspjelo dohvaćanje slikovne datoteke</string>
<string name="license">Licenca</string>
<string name="barcodeLongPressMessage">U aplikaciji galerije se mogu otvoriiti samo slike</string>
<string name="source_repository">Izvorni repozitorij</string>
<string name="on_github">na GitHubu</string>
<string name="on_google_play">na stranici Google Play</string>
+27 -29
View File
@@ -33,9 +33,9 @@
<string name="editCardTitle">Kártya szerkesztése</string>
<string name="addCardTitle">Kártya hozzáadása</string>
<string name="scanCardBarcode">Vonalkód beolvasása</string>
<string name="cardShortcut">Kártya parancsikon</string>
<string name="cardShortcut">Kártya indítóikon</string>
<string name="failedParsingImportUriError">Az importálási URI nem értelmezhető</string>
<string name="importExport">Importálás/Exportálás</string>
<string name="importExport">Importálás/exportálás</string>
<string name="exportName">Exportálás</string>
<string name="importExportHelp">Az adatok mentése lehetővé teszi, hogy egy másik eszközre helyezze át</string>
<string name="importSuccessfulTitle">Importálva</string>
@@ -49,9 +49,9 @@
</plurals>
<string name="deleteTitle">Kártya törlése</string>
<string name="barcodeImageDescriptionWithType">A(z) <xliff:g>%s</xliff:g> vonalkód képe</string>
<string name="noCardExistsError">Kártya nem található</string>
<string name="noCardExistsError">Ez a kártya nem található</string>
<string name="importVoucherVault">Importálás a Voucher Vaultból</string>
<string name="wrongValueForBarcodeType">Ez az érték meg megfelelő a kiválasztott vonalkódtípushoz</string>
<string name="wrongValueForBarcodeType">Ez az érték nem felel meg a kiválasztott vonalkódtípushoz</string>
<string name="setBackImage">Hátlapi kép beállítása</string>
<string name="no">Nem</string>
<string name="passwordRequired">Adja meg a jelszót</string>
@@ -74,7 +74,7 @@
<string name="app_license">Copyleft licencű szabad szoftver, GPLv3+ alatt közzétéve</string>
<string name="about_title_fmt">A <xliff:g id="app_name">%s</xliff:g> névjegye</string>
<string name="debug_version_fmt">Verzió: <xliff:g id="version">%s</xliff:g></string>
<string name="app_resources">Szabad külső erőforrások: <xliff:g id="app_resources_list">%s</xliff:g></string>
<string name="app_resources">Külső erőforrások: <xliff:g id="app_resources_list">%s</xliff:g></string>
<string name="selectBarcodeTitle">Vonalkód kiválasztása</string>
<string name="starImage">Kedvencek csillag</string>
<string name="settings">Beállítások</string>
@@ -91,14 +91,14 @@
<string name="groups">Csoportok</string>
<string name="group_edit">Csoport szerkesztése</string>
<string name="group_name_is_empty">A csoportnév nem lehet üres</string>
<string name="failedOpeningFileManager">Fájl böngésző nem elérhető</string>
<string name="failedOpeningFileManager">Nem sikerült a fájlkezelő megnyitása</string>
<string name="moveUp">Mozgatás felfelé</string>
<string name="moveDown">Mozgatás lefelé</string>
<string name="leaveWithoutSaveTitle">Kilépés</string>
<string name="leaveWithoutSaveConfirmation">Kilépés mentés nélkül\?</string>
<string name="addManually">A vonalkód kézi beírása</string>
<string name="addFromImage">Kép kiválasztása a galériából</string>
<string name="editGroup">Csoportok szerkesztése: <xliff:g>%s</xliff:g></string>
<string name="editGroup">Csoport szerkesztése: <xliff:g>%s</xliff:g></string>
<string name="expiryStateSentence">Lejárat: <xliff:g>%s</xliff:g></string>
<string name="balanceSentence">Egyenleg: <xliff:g>%s</xliff:g></string>
<string name="card">Kártya</string>
@@ -108,7 +108,7 @@
<string name="chooseExpiryDate">Lejárati dátum kiválasztása</string>
<string name="moveBarcodeToTopOfScreen">Vonalkód feltolása a képernyő tetejére</string>
<string name="noBarcodeFound">Nem található vonalkód</string>
<string name="errorReadingImage">Kép nem olvasható</string>
<string name="errorReadingImage">A kép nem olvasható</string>
<string name="balance">Egyenleg</string>
<string name="currency">Pénznem</string>
<string name="points">Pontok</string>
@@ -118,8 +118,8 @@
<string name="importCatima">Importálás a Catimából</string>
<string name="importFidme">Importálás a FidMeből</string>
<string name="importLoyaltyCardKeychain">Importálás a Loyalty Card Keychainből</string>
<string name="importLoyaltyCardKeychainMessage">Jelölje ki az importálandó Loyalty Card Keychain exportot. \nLétre tudja hozni a Loyalty Card Keychain Importálás/Exportálás menün belül az Exportálásra koppintva.</string>
<string name="importVoucherVaultMessage">Jelölje ki az importálandó Voucher Vault exportot. \nLétre tudja hozni a Voucher Vault-on belüli Exportálás menüben.</string>
<string name="importLoyaltyCardKeychainMessage">Jelölje ki az importálandó Loyalty Card Keychain exportot. \nA Loyalty Card Keychain Importálás/Exportálás menüjéből hozhatja létre, az Exportálásra koppintva.</string>
<string name="importVoucherVaultMessage">Jelölje ki az importálandó Voucher Vault exportot. \nA Voucher Vault-on belül az Exportálás gombra koppintva hozhatja létre.</string>
<string name="barcodeId">Vonalkód értéke</string>
<string name="sameAsCardId">Ugyanaz, mint az azonosító</string>
<string name="setBarcodeId">Vonalkód értékének beállítása</string>
@@ -169,7 +169,7 @@
<string name="about">Névjegy</string>
<string name="app_copyright_old">Készült a Loyalty Card Keychain alapján
\nCopyright © 20162020 Branden Archer</string>
<string name="app_libraries">Szabad külső programkönyvtárak: <xliff:g id="app_libraries_list">%s</xliff:g></string>
<string name="app_libraries">Külső programkönyvtárak: <xliff:g id="app_libraries_list">%s</xliff:g></string>
<string name="settings_dark_theme">Sötét</string>
<string name="deleteConfirmationGroup">Csoport törlése\?</string>
<string name="noGroups">Koppintson a + gombra a csoportok kategorizálásához</string>
@@ -179,8 +179,8 @@
<string name="group_updated">Csoport frissítve</string>
<string name="expiryStateSentenceExpired">Lejárt: <xliff:g>%s</xliff:g></string>
<string name="groupsList">Csoportok: <xliff:g>%s</xliff:g></string>
<string name="importCatimaMessage">Válassza ki a megfelelő exportált Catima elemet importálásra. \nA menüben található Importálás/Exportálásl importálhat egy korábbi Catima exportot.</string>
<string name="importFidmeMessage">Jelölje ki az importálandó FidMe exportot, ezt követően adja meg kézileg a vonalkód típust. \nLétre tudja hozni a FidMe profiljából az Adatvédelmen belül a Adatom kinyerése opcióval.</string>
<string name="importCatimaMessage">Válassza ki a megfelelő exportált Catima elemet importálásra. \nAz Importálás/exportálás menüelemmel importálhat egy korábbi Catima exportot.</string>
<string name="importFidmeMessage">Jelölje ki az importálandó FidMe exportot, ezt követően adja meg kézileg a vonalkód típusát. \nA FidMe profiljából tudja létrehozni, az Adatvédelem, majd a Saját adatok kinyerése lehetőséggel.</string>
<plurals name="groupCardCountWithArchived">
<item quantity="one"><xliff:g>%1$d</xliff:g> kártya (<xliff:g id="archivedCount">%2$d</xliff:g> archiválva)</item>
<item quantity="other"><xliff:g>%1$d</xliff:g> kártya (<xliff:g id="archivedCount">%2$d</xliff:g> archiválva)</item>
@@ -202,7 +202,6 @@
<string name="newBalanceSentence">Új egyenleg: <xliff:g>%s</xliff:g></string>
<string name="cameraPermissionDeniedTitle">Nem sikerült hozzáférni a kamerához</string>
<string name="failedToRetrieveImageFile">Nem sikerült lekérni a képfájlt</string>
<string name="barcodeLongPressMessage">Csak képek nyithatók meg a galéria alkalmazásban</string>
<string name="unarchived">Kártya archiválása megszüntetve</string>
<string name="welcome">Üdvözöljük a Catimában</string>
<string name="updateBalance">Egyenleg frissítése</string>
@@ -218,8 +217,6 @@
<string name="switchToBackImage">Hátulnézeti képre váltás</string>
<string name="switchToBarcode">Vonalkódra váltás</string>
<string name="donate">Adományozás</string>
<string name="openBackImageInGalleryApp">Hátulnézeti kép megnyitása a galéria alkalmazásban</string>
<string name="openFrontImageInGalleryApp">Elölnézeti kép megnyitása a galéria alkalmazásban</string>
<string name="setBarcodeHeight">Vonalkód magasságának megadása</string>
<string name="icon_header_click_text">Hosszan nyomja meg a miniatűr szerkesztéséhez</string>
<string name="show_note">Megjegyzés megjelenítése</string>
@@ -253,7 +250,7 @@
<string name="app_name">Catima</string>
<string name="amountParsingFailed">Hibás érték</string>
<string name="add_manually_warning_title">Szkennelés ajánlott</string>
<string name="add_manually_warning_message">Egyes kártyákon levő számsor különbözik a vonalkód számától. Emiatt a manuális szám beírás nem minden esetben működni. Ajánlott tehát a vonalkód beolvasása kamerával. Biztosan folytatja?</string>
<string name="add_manually_warning_message">Az egyes kártyákon levő számsor különbözik a vonalkód számától. Emiatt a kézi számbeírás nem minden esetben fog működni. Ajánlott tehát a vonalkód kamerával történő beolvasása. Biztos, hogy folytatja?</string>
<string name="continue_">Tovább</string>
<string name="spend">Költött</string>
<string name="receive">Megkapott</string>
@@ -285,24 +282,25 @@
<string name="settings_column_count_7">7</string>
<string name="sort_by_valid_from">Érvényesség kezdete</string>
<string name="width">Szélesség</string>
<string name="setBarcodeWidth">Vonalkód szélesség beállítása</string>
<string name="settings_disable_nfc_while_viewing_card">NFC leállítása</string>
<string name="settings_disable_nfc_while_viewing_card_summary">Az NFC leállítása a kártya megtekintés erejéig, hogy ne indítsa be az NFC fizetést</string>
<string name="card_list_widget_name">Kártya lista</string>
<string name="card_list_widget_empty">Miután hozzáadja a kártyákat a Catima-hoz, itt fognak megjelenni. Ha vannak kártyái, győződjön meg, hogy nincsenek e archiválva.</string>
<string name="setBarcodeWidth">Vonalkódszélesség beállítása</string>
<string name="settings_disable_nfc_while_viewing_card">NFC szüneteltetése</string>
<string name="settings_disable_nfc_while_viewing_card_summary">Az NFC szüneteltetése a kártya megtekintése idejére, hogy ne indítsa be az NFC-s fizetést</string>
<string name="card_list_widget_name">Kártyalista</string>
<string name="card_list_widget_empty">Miután hozzáadja a kártyákat a Catimához, itt fognak megjelenni. Ha vannak kártyái, győződjön meg arról, hogy nincsenek-e archiválva.</string>
<string name="cardWithNumber"><xliff:g>%d</xliff:g> kártya</string>
<string name="cardWithNumberAndLocale"><xliff:g>%d</xliff:g> (<xliff:g>%s</xliff:g>) kártya</string>
<string name="pleaseDoNotRotateTheDevice">Kérem ne forgassa el az eszközt, mert az megszakítja a műveletet</string>
<string name="acra_catima_has_crashed">Sajnos a <xliff:g id="app_name">%s</xliff:g> összeomlott. Segítsen ezt a hibát megoldani, azzal, hogy elküldi a jelentést számunkra.</string>
<string name="acra_explain_crash">Ha lehetséges adja meg, hogy éppen milyen műveletet végzett:</string>
<string name="pleaseDoNotRotateTheDevice">Ne forgassa el az eszközt, mert az megszakítja a műveletet</string>
<string name="acra_catima_has_crashed">Sajnos a <xliff:g id="app_name">%s</xliff:g> összeomlott. Segítsen a hiba megoldásában azzal, hogy küld nekünk egy jelentést.</string>
<string name="acra_explain_crash">Ha lehetséges, adja meg, hogy éppen milyen műveletet végzett:</string>
<string name="acra_crash_email_subject"><xliff:g id="app_name">%s</xliff:g> összeomlási jelentés</string>
<string name="pref_enable_acra">Kérje az összeomlási jelentéseket</string>
<string name="pref_enable_acra_summary">Bekapcsolása esetén mindig kéri az összeomlási jelentés küldését. A jelentések sosem kerülnek küldésre automatikusan.</string>
<string name="pref_enable_acra">Rákérdezés az összeomlási jelentések elküldésére</string>
<string name="pref_enable_acra_summary">Ha be van kapcsolva, akkor mindig kérdez az összeomlási jelentés elküldésére. A jelentések sosem kerülnek küldésre automatikusan.</string>
<string name="copy_value">Érték másolása</string>
<string name="copied_to_clipboard">Vágólapra másolva</string>
<string name="nothing_to_copy">Nem található érték</string>
<string name="barcodeEncoding">Vonalkód kódolás</string>
<string name="barcodeEncoding">Vonalkód kódolása</string>
<string name="back">Vissza</string>
<string name="nfc_blocked_while_viewing_card">NFC leállítva</string>
<string name="nfc_blocked_while_viewing_card">NFC szüneteltetve</string>
<string name="change_settings">Beállítások változtatása</string>
<string name="nfc_block_system_error">Nem sikerült szüneteltetni az NFC-t</string>
</resources>
+48 -5
View File
@@ -189,7 +189,6 @@
<string name="archive">Arsip</string>
<string name="archived">Kartu diarsipkan</string>
<string name="failedToRetrieveImageFile">Gagal mengambil file gambar</string>
<string name="barcodeLongPressMessage">Hanya gambar yang dapat dibuka di aplikasi galeri</string>
<string name="unarchive">Ekstrak</string>
<string name="unarchived">Kartu tidak diarsipkan</string>
<string name="options">Opsi</string>
@@ -212,8 +211,6 @@
<string name="switchToFrontImage">Ubah ke depan gambar</string>
<string name="switchToBackImage">Ubah ke belakang gambar</string>
<string name="switchToBarcode">Ubah ke kode batang</string>
<string name="openFrontImageInGalleryApp">Buka gambar depan di aplikasi penampil gambar</string>
<string name="openBackImageInGalleryApp">Buka gambar di aplikasi penampil gambar</string>
<string name="setBarcodeHeight">Atur tinggi kode batang</string>
<string name="donate">Donasi</string>
<string name="show_validity">Tunjukkan validitas</string>
@@ -223,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>
@@ -295,4 +292,50 @@
<string name="nothing_to_copy">Tidak ditemukan nilai</string>
<string name="barcodeEncoding">Pengkodean barcode</string>
<string name="back">Kembali</string>
<string name="settings_disable_nfc_while_viewing_card">Jeda NFC</string>
<string name="settings_disable_nfc_while_viewing_card_summary">Menjeda NFC untuk mencegah pembayaran NFC terpicu saat melihat kartu</string>
<string name="nfc_blocked_while_viewing_card">NFC dijeda</string>
<string name="change_settings">Ubah pengaturan</string>
<string name="nfc_block_system_error">Gagal menjeda NFC</string>
<string name="show_card_id">Tampilkan ID Kartu</string>
<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 -1
View File
@@ -86,7 +86,6 @@
<string name="barcodeImageDescriptionWithType">Mynd <xliff:g>%s</xliff:g> strikamerki</string>
<string name="importExport">Flytja inn/út</string>
<string name="importFailed">Gat ekki flutt inn</string>
<string name="app_name">Catima</string>
<plurals name="deleteCardsTitle">
<item quantity="one">Eyða <xliff:g>%d</xliff:g> korti</item>
<item quantity="other">Eyða <xliff:g>%d</xliff:g> kortum</item>
@@ -103,4 +102,5 @@
<string name="failedToOpenUrl">Settu inn vef-vafra fyrst</string>
<string name="welcome">Velkomin að Catima</string>
<string name="importCards">Flytja inn kort</string>
<string name="app_name">Catima</string>
</resources>
+9 -5
View File
@@ -110,8 +110,8 @@
<string name="addFromImage">Seleziona un\'immagine dalla galleria</string>
<string name="unsupportedBarcodeType">Questo tipo di codice a barre non può ancora essere visualizzato. Potrebbe essere supportato in una versione successiva dell\'applicazione.</string>
<string name="wrongValueForBarcodeType">Il valore non è valido per il tipo di codice a barre selezionato</string>
<string name="app_resources">Risorse di terze parti: <xliff:g id="app_resources_list"> %s </xliff:g></string>
<string name="app_libraries">Librerie di terze parti: <xliff:g id="app_libraries_list"> %s </xliff:g></string>
<string name="app_resources">Risorse di terze parti: <xliff:g id="app_resources_list">%s</xliff:g></string>
<string name="app_libraries">Librerie di terze parti: <xliff:g id="app_libraries_list">%s</xliff:g></string>
<string name="intent_import_card_from_url_share_multiple_text">Voglio condividere alcune carte con te</string>
<string name="no">No</string>
<string name="yes"></string>
@@ -204,7 +204,6 @@
<string name="welcome">Benvenuti su Catima</string>
<string name="failedToOpenUrl">Installa prima un browser web</string>
<string name="failedToRetrieveImageFile">Impossibile ottenere il file dell\'immagine</string>
<string name="barcodeLongPressMessage">Si possono aprire solo immagini dell\'app della galleria</string>
<string name="cameraPermissionDeniedTitle">Impossibile accedere alla fotocamera</string>
<string name="noCameraPermissionDirectToSystemSetting">Per poter scansionare i codici a barre, Catima ha bisogno di accedere alla tua fotocamera. Premi qui per poter cambiare le impostazioni dei permessi.</string>
<string name="updateBalance">Aggiorna bilancio</string>
@@ -223,9 +222,7 @@
<string name="switchToFrontImage">Passa all\'immagine frontale</string>
<string name="switchToBackImage">Passa all\'immagine dietro</string>
<string name="switchToBarcode">Passa al codice a barre</string>
<string name="openFrontImageInGalleryApp">Apri immagine frontale nell\'app per la visualizzazione di immagini</string>
<string name="donate">Dona</string>
<string name="openBackImageInGalleryApp">Apri l\'immagine retro nell\'app per la visualizzazione di immagini</string>
<string name="setBarcodeHeight">Imposta l\'altezza del codice a barre</string>
<string name="icon_header_click_text">Premi a lungo per modificare l\'immagine</string>
<string name="show_note">Mostra nota</string>
@@ -311,4 +308,11 @@
<string name="settings_disable_nfc_while_viewing_card_summary">Sospende la funzione NFC per impedire che i pagamenti NFC vengano attivati durante la visualizzazione di una carta</string>
<string name="nfc_blocked_while_viewing_card">La funzione NFC è disattivata</string>
<string name="change_settings">Modifica impostazioni</string>
<string name="nfc_block_system_error">Impossibile mettere in pausa l\'NFC</string>
<string name="sort_by_most_recently_added">Aggiunte più di recente</string>
<string name="show_card_id">Mostra ID carta</string>
<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>
+44 -5
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>
@@ -233,7 +233,6 @@
<string name="showMoreInfo">情報を確認</string>
<string name="updateBalance">残高を更新</string>
<string name="failedToRetrieveImageFile">画像ファイルを取得できませんでした</string>
<string name="barcodeLongPressMessage">ギャラリーアプリは画像のみ開けます</string>
<string name="sort_by_valid_from">有効期限</string>
<string name="starred">スター付き</string>
<string name="include_if_asking_support">サポートを依頼する場合、以下の情報を含めて下さい:</string>
@@ -250,8 +249,6 @@
<string name="switchToFrontImage">前面画像へ切り替え</string>
<string name="switchToBackImage">背面画像へ切り替え</string>
<string name="switchToBarcode">バーコードへ切り替え</string>
<string name="openFrontImageInGalleryApp">前面画像を画像ビューワーアプリで開く</string>
<string name="openBackImageInGalleryApp">背面画像を画像ビューワーアプリで開く</string>
<string name="setBarcodeHeight">バーコードの高さを設定</string>
<string name="icon_header_click_text">サムネイルを長押しして編集</string>
<string name="settings_category_title_cards_overview">カードの概要</string>
@@ -298,4 +295,46 @@
<string name="settings_disable_nfc_while_viewing_card_summary">カードの表示中にNFC決済が誤って実行されないようにNFCを一時停止します</string>
<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="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>
-1
View File
@@ -37,7 +37,6 @@
<string name="donate">ದಾನ ಮಾಡಿ</string>
<string name="action_more_options">ಹೆಚ್ಚಿನ ಆಯ್ಕೆಗಳು</string>
<string name="add_a_card_in_a_different_way">ಬೇರೆ ರೀತಿಯಲ್ಲಿ ಕಾರ್ಡ್ ಸೇರಿಸಿ</string>
<string name="barcodeLongPressMessage">ಗ್ಯಾಲರಿ ಅಪ್ಲಿಕೇಶನ್‌ನಲ್ಲಿ ಚಿತ್ರಗಳನ್ನು ಮಾತ್ರ ತೆರೆಯಬಹುದು</string>
<string name="all">ಎಲ್ಲವೂ</string>
<string name="chooseValidFromDate">ದಿನಾಂಕದಿಂದ ಮಾನ್ಯವಾಗಿ ಆಯ್ಕೆಮಾಡಿ</string>
<string name="delete">ಅಳಿಸಿ</string>
+66 -9
View File
@@ -82,7 +82,7 @@
<string name="takePhoto">사진 찍기</string>
<string name="yes"></string>
<string name="no">아니오</string>
<string name="failedGeneratingShareURL">공유 가능한 URL을 생성할 수 없습니다. 이를 개발자에게 알려 주십시오.</string>
<string name="failedGeneratingShareURL">공유 가능한 URL을 생성할 수 없습니다</string>
<string name="turn_flashlight_off">손전등 끄기</string>
<string name="settings_locale">언어</string>
<string name="settings_system_locale">시스템</string>
@@ -91,7 +91,6 @@
<string name="showMoreInfo">정보 보기</string>
<string name="updateBalance">잔액 업데이트</string>
<string name="failedToRetrieveImageFile">이미지 파일을 검색하지 못했습니다</string>
<string name="barcodeLongPressMessage">갤러리 앱에서는 이미지만 열 수 있습니다</string>
<string name="sort_by_name">이름</string>
<string name="reverse">... 역순으로</string>
<string name="sort_by">정렬 기준</string>
@@ -138,8 +137,6 @@
<string name="group_updated">그룹 업데이트됨</string>
<string name="moveBarcodeToTopOfScreen">바코드를 화면 상단으로 이동</string>
<string name="height"></string>
<string name="openFrontImageInGalleryApp">갤러리 앱에서 전면 이미지 열기</string>
<string name="openBackImageInGalleryApp">갤러리 앱에서 다시 이미지 열기</string>
<string name="setBarcodeHeight">바코드 높이 설정</string>
<string name="setFrontImage">전면 이미지 설정</string>
<plurals name="selectedCardCount">
@@ -149,12 +146,12 @@
<string name="noCameraPermissionDirectToSystemSetting">바코드를 스캔하려면 Catima가 카메라에 접근해야 합니다. 권한 설정을 변경하려면 여기를 탭하세요.</string>
<string name="exportOptionExplanation">데이터는 선택한 위치에 기록됩니다</string>
<string name="app_license">GPL v3+로 라이선스된 카피레프트 자유 소프트웨어</string>
<string name="failedOpeningFileManager">먼저 파일 관리자를 설치하십시오.</string>
<string name="failedOpeningFileManager">파일 관리자를 열 수 없습니다</string>
<string name="importSuccessful">데이터 들여옴</string>
<string name="group_name_is_empty">그룹 이름은 필수임</string>
<string name="chooseExpiryDate">만료일 선택</string>
<string name="settings_oled_dark">어두운 테마를 위한 검정색 배경</string>
<string name="noGroups">+ 더하기 버튼을 클릭하여 분류할 그룹 추가합니다.</string>
<string name="noGroups">+ 더하기 버튼을 눌러 카테고리 그룹 추가</string>
<string name="deleteConfirmationGroup">그룹을 삭제하시겠습니까\?</string>
<string name="errorReadingImage">이미지를 읽을 수 없습니다</string>
<string name="expiryStateSentence">만료: <xliff:g>%s</xliff:g></string>
@@ -225,8 +222,8 @@
<string name="permissionReadCardsDescription">당신의 Catima 카드와 그에 대한 모든 세부 정보, 메모 및 이미지를 읽으세요</string>
<string name="settings_oled_dark_summary">OLED 화면에서의 배터리 사용량 줄임</string>
<string name="app_copyright_short">저작권 © Sylvia van Os 및 기여자</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="permissionReadCardsLabel">Catima 카드 읽기</string>
<string name="settings_keep_screen_on_summary">카드가 보일 때 화면 꺼짐 방지</string>
<string name="view_online">온라인에서 보기</string>
@@ -262,7 +259,7 @@
<string name="useFrontImage">전면 이미지 사용</string>
<string name="useBackImage">후면 이미지 사용</string>
<string name="addFromPkpass">Passbook 파일 선택하기 (.pkpass)</string>
<string name="generic_error_please_retry">죄송합니다, 문제가 발생했습니다. 다시 시도해 주세요...</string>
<string name="generic_error_please_retry">오류가 발생했습니다</string>
<string name="settings_use_volume_keys_navigation">볼륨 버튼을 사용하여 카드 전환하기</string>
<string name="unsupportedFile">이 파일은 지원되지 않습니다</string>
<string name="settings_use_volume_keys_navigation_summary">볼륨 버튼을 사용하여 표시되는 카드를 변경합니다</string>
@@ -281,4 +278,64 @@
<string name="width">너비</string>
<string name="setBarcodeWidth">바코드 너비를 설정하세요</string>
<string name="card_list_widget_name">카드 목록</string>
<string name="settings_disable_nfc_while_viewing_card">NFC 일시 중지</string>
<string name="card_list_widget_empty">Catima에 멤버십 카드를 추가하면 여기에 표시됩니다. 카드가 있는데도 보이지 않는다면 모두 보관 처리되어 있지 않은지 확인해 보세요.</string>
<string name="pleaseDoNotRotateTheDevice">기기를 회전하지 마세요. 진행 중인 작업이 취소될 수 있습니다</string>
<string name="acra_catima_has_crashed">죄송합니다. <xliff:g id="app_name">%s</xliff:g> 앱이 종료되었습니다. 문제 해결을 위해 오류 리포트를 보내주세요.</string>
<string name="acra_crash_email_subject"><xliff:g id="app_name">%s</xliff:g> 크래시 리포트</string>
<string name="pref_enable_acra">오류 리포트 전송 요청</string>
<string name="pref_enable_acra_summary">이 기능을 켜면 오류가 발생했을 때 보고서 전송 여부를 확인합니다. 오류 리포트는 절대 자동으로 전송되지 않습니다.</string>
<string name="copy_value">값 복사</string>
<string name="copied_to_clipboard">클립보드에 복사됨</string>
<string name="nothing_to_copy">데이터를 찾을 수 없습니다</string>
<string name="back">돌아가기</string>
<string name="nfc_blocked_while_viewing_card">NFC 일시 중지됨</string>
<string name="change_settings">설정 변경</string>
<string name="nfc_block_system_error">NFC 일시 중지에 실패</string>
<string name="settings_disable_nfc_while_viewing_card_summary">카드를 보는 동안 NFC 결제가 실행되는 것을 방지하기 위해 NFC 기능을 일시 중지합니다</string>
<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="acra_explain_crash">가능하다면, 오류가 발생했을 때 어떤 작업을 하고 계셨는지 자세히 적어주세요:</string>
<string name="barcodeEncoding">바코드 인코딩</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="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최근 이 시계에 Catima Wear OS 앱을 재설치한 경우에만 수락하십시오.</string>
<string name="open_settings">설정 열기</string>
<string name="open_in_gallery">사진 갤러리에서 열기</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>
<string name="wear_bt_channel_name">Wear OS 컴패니언</string>
<string name="wear_bt_notification_title">Catima Wear OS 동기화 활성화됨</string>
<string name="sort_by_most_recently_added">가장 최근에 추가함</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">Catima에서 Wear OS 스마트워치와 동기화하려면 거절하셨던 권한이 필요합니다</string>
<string name="zoomFrontImage">전면 사진 확대</string>
<string name="zoomBackImage">후면 사진 확대</string>
</resources>
+21 -24
View File
@@ -1,7 +1,7 @@
<?xml version="1.0" encoding="utf-8"?>
<resources xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2" xmlns:tools="http://schemas.android.com/tools">
<string name="action_add">Pridėti</string>
<string name="noGiftCards">Norėdami pridėti kortelę, spustelėkite mygtuką + arba importuokite kortelę iš ⋮ meniu.</string>
<string name="noGiftCards">Norėdami pridėti kortelę, spustelėkite mygtuką + arba importuokite iš ⋮ meniu</string>
<string name="storeName">Pavadinimas</string>
<string name="note">Užrašas</string>
<string name="cardId">Kortelės ID</string>
@@ -11,10 +11,10 @@
<string name="delete">Ištrinti</string>
<string name="confirm">Patvirtinti</string>
<string name="ok">Gerai</string>
<string name="editCardTitle">Redaguoti lojalumo kortelę</string>
<string name="addCardTitle">Pridėti lojalumo kortelę</string>
<string name="editCardTitle">Redaguoti kortelę</string>
<string name="addCardTitle">Pridėti kortelę</string>
<string name="scanCardBarcode">Nuskaityti brūkšninį kodą</string>
<string name="importExport">Importuoti/Exportuoti</string>
<string name="importExport">Importas/Exportas</string>
<string name="exportName">Exportuoti</string>
<string name="importFailed">Nepavyko importuoti</string>
<string name="exportFailed">Nepavyko eksportuoti</string>
@@ -43,10 +43,10 @@
<string name="app_loyalty_card_keychain">Lojalumo kortelės</string>
<string name="moveBarcodeToTopOfScreen">Perkelti brūkšninį kodą į ekrano viršų</string>
<string name="settings_display_barcode_max_brightness">Šviesinti ekraną</string>
<string name="failedParsingImportUriError">Nepavyko iššifruoti importo URI</string>
<string name="failedParsingImportUriError">Nepavyko nuskaityti importo URI</string>
<string name="turn_flashlight_off">Išjunkti žibintuvėlį</string>
<string name="turn_flashlight_on">Įjunkti žibintuvėlį</string>
<string name="failedGeneratingShareURL">Nepavyko sugeneruoti bendrinamo URL. Praneškite apie tai.</string>
<string name="failedGeneratingShareURL">Nepavyko sugeneruoti bendrinamo URL</string>
<string name="passwordRequired">Įveskite slaptažodį</string>
<string name="no">Ne</string>
<string name="yes">Taip</string>
@@ -65,11 +65,9 @@
<string name="setBarcodeId">Nustatyti brūkšninio kodo reikšmę</string>
<string name="sameAsCardId">Tokia pat kaip ID</string>
<string name="barcodeId">Brūkšninio kodo reikšmė</string>
<string name="importFidmeMessage">Pasirinkite <i>fidme-export-request-xxxxxx.zip</i> eksportą iš FidMe, kurį norite importuoti, ir po to brūkšninių kodų tipus pasirinkite rankiniu būdu.
\nSukurkite jį iš savo FidMe profilio, pasirinkę Duomenų apsauga ir pirmiausia paspaudę Išgauti mano duomenis.</string>
<string name="importFidmeMessage">Importavimui pasirinkite eksportą iš FidMe ir po to brūkšninių kodų tipus pasirinkite rankiniu būdu. \nSukurkite jį iš savo FidMe profilio pasirinkę \"Duomenų apsauga\" ir po to paspausdami \"Išgauti mano duomenis\".</string>
<string name="importFidme">Importuoti iš FidMe</string>
<string name="importCatimaMessage">Norėdami importuoti, pasirinkite savo <i> catima.zip </i> eksportavimą iš Catima.
\nSukurkite ją iš kitos Catima programos importavimo / eksportavimo meniu, pirmiausia ten paspausdami Eksportuoti.</string>
<string name="importCatimaMessage">Norėdami importuoti, pasirinkite savo <i> catima.zip </i> eksportavimą iš Catima. \nSukurkite ją iš kitos Catima programos importavimo/eksportavimo meniu paspausdami \"Eksportuoti\".</string>
<string name="importCatima">Importuoti iš Catima</string>
<string name="accept">Priimti</string>
<string name="privacy_policy">Privatumo politika</string>
@@ -87,14 +85,14 @@
<string name="balanceSentence">Balansas: <xliff:g>%s</xliff:g></string>
<string name="expiryStateSentenceExpired">Galiojimas baigėsi: <xliff:g>%s</xliff:g></string>
<string name="expiryStateSentence">Nustoja galioti: <xliff:g>%s</xliff:g></string>
<string name="groupsList">Grupės: <xliff:g> %s </xliff:g></string>
<string name="groupsList">Grupės: <xliff:g>%s</xliff:g></string>
<string name="addFromImage">Pasirinkti vaizdą iš galerijos</string>
<string name="addManually">Rankiniu būdu įvesti ID</string>
<string name="addManually">Įvesti barcodą rankiniu būdu</string>
<string name="leaveWithoutSaveConfirmation">Išeiti neišsaugojus\?</string>
<string name="leaveWithoutSaveTitle">Išeiti</string>
<string name="moveDown">Judėti žemyn</string>
<string name="moveUp">Judėti aukštyn</string>
<string name="failedOpeningFileManager">Pirmiausia įdiekite failų tvarkyklę.</string>
<string name="failedOpeningFileManager">Nepavyko atidaryti failų tvarkyklės</string>
<string name="deleteConfirmationGroup">Ištrinti grupę\?</string>
<string name="all">Visos</string>
<plurals name="groupCardCount">
@@ -102,7 +100,7 @@
<item quantity="few"><xliff:g>%d</xliff:g> kortelės</item>
<item quantity="other"><xliff:g>%d</xliff:g> kortelių</item>
</plurals>
<string name="noGroups">Spustelėkite mygtuką +, kad pridėtumėte grupes kategorizavimui.</string>
<string name="noGroups">Spustelėkite mygtuką +, kad pridėtumėte grupes kategorizavimui</string>
<string name="groups">Grupės</string>
<string name="enter_group_name">Įvesti grupės pavadinimą</string>
<string name="exportSuccessful">Duomenys eksportuoti</string>
@@ -117,20 +115,20 @@
<string name="settings">Nustatymai</string>
<string name="starImage">Mėgstamiausia žvaigždė</string>
<string name="thumbnailDescription">Miniatiūra</string>
<string name="app_resources">Laisvosios trečiųjų šalių ištekliai: <xliff:g id="app_resources_list">%s</xliff:g></string>
<string name="app_libraries">Laisvosios trečiųjų šalių bibliotekos: <xliff:g id="app_libraries_list">%s</xliff:g></string>
<string name="app_resources">Trečiųjų šalių ištekliai: <xliff:g id="app_resources_list">%s</xliff:g></string>
<string name="app_libraries">Trečiųjų šalių bibliotekos: <xliff:g id="app_libraries_list">%s</xliff:g></string>
<string name="app_copyright_old">Paremta Loyalty Card Keychain
\nautorinės teisės © 20162020 Branden Archer</string>
<string name="app_copyright_fmt" tools:ignore="PluralsCandidate">Autorinės teisės © 2019<xliff:g>%d</xliff:g> Sylvia van Os</string>
<string name="importOptionFilesystemButton">Iš failų sistemos</string>
<string name="importOptionFilesystemExplanation">Pasirinkite konkretų failą iš failų sistemos.</string>
<string name="importOptionFilesystemExplanation">Pasirinkite konkretų failą iš failų sistemos</string>
<string name="importOptionFilesystemTitle">Importuoti iš failų sistemos</string>
<string name="exportOptionExplanation">Duomenys bus įrašyti į jūsų pasirinktą vietą.</string>
<string name="exportOptionExplanation">Duomenys bus įrašyti į jūsų pasirinktą vietą</string>
<string name="exportFailedTitle">Eksportuoti nepavyko</string>
<string name="exportSuccessfulTitle">Eksportuota</string>
<string name="importFailedTitle">Importuoti nepavyko</string>
<string name="importSuccessfulTitle">Importuota</string>
<string name="importExportHelp">Duomenų atsarginių kopijų darymas leidžia perkelti juos į kitą įrenginį.</string>
<string name="importExportHelp">Duomenų atsarginių kopijų darymas leidžia perkelti juos į kitą įrenginį</string>
<string name="noCardExistsError">Nepavyko rasti šios kortelės</string>
<string name="share">Dalintis</string>
<plurals name="selectedCardCount">
@@ -178,7 +176,7 @@
<string name="editGroup">Redaguojama grupė: <xliff:g>%s</xliff:g></string>
<string name="group_updated">Grupė atnaujinta</string>
<string name="group_edit">Redaguoti grupę</string>
<string name="noGiftCardsGroup">Sukurkite keletą kortelių ir priskirkite jas grupei čia.</string>
<string name="noGiftCardsGroup">Sukurkite keletą kortelių ir priskirkite jas grupei čia</string>
<string name="setIcon">Nustatyti piktogramą</string>
<string name="selectColor">Pasirinkti spalvą</string>
<string name="failedLaunchingPhotoPicker">Nepavyko rasti palaikomos galerijos programėlės</string>
@@ -191,7 +189,6 @@
</plurals>
<string name="updateBalance">Atnaujinti balansą</string>
<string name="failedToRetrieveImageFile">Nepavyko gauti vaizdo failo</string>
<string name="barcodeLongPressMessage">Galerijos programėlėje galima atidaryti tik vaizdus</string>
<string name="translate_platform">Weblate svetainėje</string>
<string name="shortcutSelectCard">Pasirinkti kortelę</string>
<string name="options">Parinktys</string>
@@ -220,7 +217,6 @@
<string name="importCards">Importuoti korteles</string>
<string name="storageReadPermissionRequired">Šio veiksmo atlikimui reikalinga prieiga prie saugyklos…</string>
<string name="cameraPermissionRequired">Šio veiksmo atlikimui reikalinga prieiga prie kameros…</string>
<string name="openBackImageInGalleryApp">Atidarykite galinį vaizdą galerijos programėlėje</string>
<string name="setBarcodeHeight">Nustatyti brūkšninio kodo aukštį</string>
<string name="validFromDate">Galioja nuo</string>
<string name="anyDate">Bet kuri data</string>
@@ -230,7 +226,6 @@
<string name="switchToBarcode">Perjungti į brūkšninį kodą</string>
<string name="height">Aukštis</string>
<string name="switchToFrontImage">Perjungti į priekinį vaizdą</string>
<string name="openFrontImageInGalleryApp">Atidarykite priekinį vaizdą galerijos programėlėje</string>
<string name="donate">Aukoti</string>
<string name="settings_keep_screen_on_summary">Išjungti ekrano užmigdymą kol peržiūrite kortelę</string>
<string name="manually_enter_barcode_instructions">Įveskite ID numerį arba tekstą ant jūsų kortelės ir paspauskite brūkšninį kodą, kuris atrodo kaip ant jūsų kortelės.</string>
@@ -251,7 +246,7 @@
<string name="add_manually_warning_title">Rekomenduojama skenuoti</string>
<string name="continue_">Tęsti</string>
<string name="add_manually_warning_message">Kai kuriuose parduotuvėse brūkšninio kodo vertė gali skirtis nuo kortelėje nurodyto numerio. Dėlto įvedus brūkšninį kodą rankiniu būdu gali nepavykti. Vietoj to, labai rekomenduojama nuskaityti brūkšninį kodą naudojant kamerą. Ar vis tiek norite tęsti?</string>
<string name="permissionReadCardsLabel">Skenuoti Catima Korteles</string>
<string name="permissionReadCardsLabel">Skaityti Catima korteles</string>
<string name="settings_category_title_cards">Kortelių peržiūra</string>
<string name="settings_category_title_general">Bendri</string>
<string name="settings_category_title_privacy">Privatumąi</string>
@@ -284,4 +279,6 @@
<string name="settings_column_count_portrait">Stulpeliai vertikaliame režime</string>
<string name="settings_column_count_landscape">Stulpeliai horizontaliame režime</string>
<string name="settings_automatic_column_count">Automatiškai</string>
<string name="settings_disable_nfc_while_viewing_card">NFC pauzė</string>
<string name="settings_disable_nfc_while_viewing_card_summary">Pristabdo NFC, kad peržiūrint kortelę nebūtų suaktyvinti NFC mokėjimai</string>
</resources>
+52 -5
View File
@@ -80,7 +80,6 @@
<string name="never">Nekad</string>
<string name="chooseExpiryDate">Izvēlēties beigu datumu</string>
<string name="failedToRetrieveImageFile">Neizdevās iegūt attēla datni</string>
<string name="barcodeLongPressMessage">Galerijas lietotnē var atvērt tikai attēlus</string>
<string name="sort_by_expiry">Derīgums</string>
<string name="reverse">...apgrieztā secībā</string>
<string name="credits">Pateicības</string>
@@ -215,16 +214,14 @@
<string name="icon_header_click_text">Ilgi piespiest, lai labotu sīktēlu</string>
<string name="anyDate">Jebkurš datums</string>
<string name="height">Augstums</string>
<string name="openBackImageInGalleryApp">Atvērt aizmugures attēlu attēlu skatītāja lietotnē</string>
<string name="donate">Ziedot</string>
<string name="field_must_not_be_empty">Lauks nedrīkst būt tukšs</string>
<string name="card_id_must_not_be_empty">Kartes identifikators nedrīkst būt tukšs</string>
<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="openFrontImageInGalleryApp">Atvērt priekšpuses attēlu attēlu skatītāja lietotnē</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>
@@ -307,4 +304,54 @@
<string name="nothing_to_copy">Nav atrasta vērtība</string>
<string name="barcodeEncoding">Svītrkoda šifrēšana</string>
<string name="back">Atpakaļ</string>
<string name="nfc_block_system_error">Neizdevās apturēt NFC</string>
<string name="settings_disable_nfc_while_viewing_card">Apturēt NFC</string>
<string name="settings_disable_nfc_while_viewing_card_summary">Aptur NFC, lai novērstu NFC maksājumu izsaukšanu kartes apskatīšanas laikā</string>
<string name="nfc_blocked_while_viewing_card">NFC ir apturēts</string>
<string name="change_settings">Mainīt iestatījumus</string>
<string name="open_in_gallery">Atvērt attēlu galerijā</string>
<string name="sort_by_most_recently_added">Visnesenāk pievienotās</string>
<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>
@@ -203,7 +203,6 @@
<string name="failedToOpenUrl">Installer en nettleser først</string>
<string name="welcome">Velkommen til Catima</string>
<string name="failedToRetrieveImageFile">Kunne ikke hente bildefil</string>
<string name="barcodeLongPressMessage">Kun bilder kan åpnes i galleriprogrammet</string>
<string name="cameraPermissionDeniedTitle">Fikk ikke tilgang til kameraet</string>
<string name="noCameraPermissionDirectToSystemSetting">Catima trenger kameratilgang for å skanne strekkoder. Trykk her for å endre tilgangsinnstillingene.</string>
<string name="importCards">Importer kort</string>
@@ -227,8 +226,6 @@
<string name="show_balance">Vis saldo</string>
<string name="show_note">Vis notat</string>
<string name="show_validity">Vis gyldighet</string>
<string name="openFrontImageInGalleryApp">Åpne frontbilde i galleriprogrammet</string>
<string name="openBackImageInGalleryApp">Åpne baksidebilde i galleriprogram</string>
<string name="setBarcodeHeight">Sett strekkodehøyde</string>
<string name="donate">Doner</string>
<string name="permissionReadCardsLabel">Les Catima-kort</string>
+54 -13
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>
@@ -199,7 +199,6 @@
<string name="welcome">Welkom bij Catima</string>
<string name="failedToOpenUrl">Installeer een webbrowser</string>
<string name="failedToRetrieveImageFile">De afbeelding kan niet worden opgehaald</string>
<string name="barcodeLongPressMessage">Alleen afbeeldingen kunnen worden geopend in de galerij-app</string>
<string name="cameraPermissionDeniedTitle">Geen cameratoegang</string>
<string name="updateBalanceTitle">Hoeveel heb je uitgegeven of ontvangen?</string>
<string name="noCameraPermissionDirectToSystemSetting">Catima heeft toegang tot je camera nodig om barcodes te kunnen scannen. Druk hier om toegang te verlenen.</string>
@@ -219,8 +218,6 @@
<string name="switchToFrontImage">Voorzijde tonen</string>
<string name="switchToBackImage">Achterzijde tonen</string>
<string name="switchToBarcode">Barcode tonen</string>
<string name="openFrontImageInGalleryApp">Voorzijde openen in afbeeldingsweergave-app</string>
<string name="openBackImageInGalleryApp">Achterzijde openen in afbeeldingsweergave-app</string>
<string name="donate">Doneren</string>
<string name="icon_header_click_text">Houd lang ingedrukt om miniatuur te bewerken</string>
<string name="show_balance">Saldo tonen</string>
@@ -228,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>
@@ -252,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>
@@ -262,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>
@@ -302,7 +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">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>
-3
View File
@@ -179,7 +179,6 @@
<string name="showMoreInfo">دیدن اطلاعات</string>
<string name="updateBalance">به‌روزرسانی موجودی</string>
<string name="failedToRetrieveImageFile">فایل تصویر بازیابی نشد</string>
<string name="barcodeLongPressMessage">فقط عکس میتونه تو گالری برنامه باز بشه</string>
<string name="sort_by_name">اسم</string>
<string name="sort_by_most_recently_used">جدیدا استفاده شده</string>
<string name="sort_by_valid_from">معتبر از</string>
@@ -228,8 +227,6 @@
<string name="switchToFrontImage">تغییر به عکس جلو</string>
<string name="switchToBackImage">تغییر به عکس عقب</string>
<string name="switchToBarcode">به بارکد تغییر بده</string>
<string name="openFrontImageInGalleryApp">عکس جلویی رو تو image viewer app باز کن</string>
<string name="openBackImageInGalleryApp">باز کردن عکس تو image viewer app</string>
<string name="setBarcodeHeight">تنظیم ارتفاع بارکد</string>
<string name="donate">کمک مالی کن</string>
<string name="icon_header_click_text">برای ویرایش عکس کوچیک، فشار طولانی بده</string>
+54 -5
View File
@@ -209,7 +209,6 @@
<item quantity="other"><xliff:g>%1$d</xliff:g> kart (<xliff:g id="archivedCount">%2$d</xliff:g> zarchwizowanych)</item>
</plurals>
<string name="failedToRetrieveImageFile">Nie udało się pobrać pliku obrazu</string>
<string name="barcodeLongPressMessage">W galerii możesz otworzyć tylko obrazy</string>
<string name="failedToOpenUrl">Najpierw zainstaluj przeglądarkę</string>
<string name="welcome">Witaj w Catima</string>
<string name="currentBalanceSentence">Bieżące saldo: <xliff:g>%s</xliff:g></string>
@@ -230,10 +229,8 @@
<string name="switchToFrontImage">Przełącz na obraz z przodu</string>
<string name="switchToBackImage">Przełącz na obraz z tyłu</string>
<string name="switchToBarcode">Przełącz na kod kreskowy</string>
<string name="openFrontImageInGalleryApp">Otwórz obraz z przodu w galerii</string>
<string name="setBarcodeHeight">Ustaw wysokość kodu kreskowego</string>
<string name="donate">Darowizna</string>
<string name="openBackImageInGalleryApp">Otwórz obraz z powrotem w galerii</string>
<string name="icon_header_click_text">Przytrzymaj, aby edytować miniaturę</string>
<string name="show_name_below_image_thumbnail">Pokaż nazwę pod miniaturką zdjęcia</string>
<string name="show_balance">Pokaż balans</string>
@@ -241,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>
@@ -313,4 +310,56 @@
<string name="nothing_to_copy">Nie znaleziono wartości</string>
<string name="back">Wstecz</string>
<string name="barcodeEncoding">Kodowanie kodów kreskowych</string>
<string name="settings_disable_nfc_while_viewing_card">Zatrzymaj NFC</string>
<string name="settings_disable_nfc_while_viewing_card_summary">Wstrzymuje działanie funkcji NFC, aby zapobiec uruchomieniu płatności NFC podczas przeglądania karty</string>
<string name="nfc_blocked_while_viewing_card">NFC zostało zatrzymane</string>
<string name="change_settings">Zmień ustawienia</string>
<string name="nfc_block_system_error">Błąd podczas zatrzymania NFC</string>
<string name="sort_by_most_recently_added">Najnowsze dodane</string>
<string name="zoomFrontImage">Powiększ zdjęcie z przodu</string>
<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>
+48 -5
View File
@@ -129,7 +129,6 @@
<string name="showMoreInfo">Mostrar informações</string>
<string name="updateBalance">Atualizar saldo</string>
<string name="failedToRetrieveImageFile">Falha ao recuperar o arquivo de imagem</string>
<string name="barcodeLongPressMessage">Apenas imagens podem ser abertas na galeria</string>
<string name="sort_by_most_recently_used">Usado mais recentemente</string>
<string name="reverse">...em ordem inversa</string>
<string name="sort_by">Ordenar por</string>
@@ -152,8 +151,6 @@
<string name="switchToBarcode">Mudar para código de barras</string>
<string name="switchToFrontImage">Mudar para imagem frontal</string>
<string name="switchToBackImage">Mudar para imagem traseira</string>
<string name="openFrontImageInGalleryApp">Abrir imagem frontal no visualizador de imagens</string>
<string name="openBackImageInGalleryApp">Abrir imagem traseira no visualizador de imagens</string>
<string name="setBarcodeHeight">Definir altura do código de barras</string>
<string name="donate">Doar</string>
<string name="icon_header_click_text">Pressione e segure para editar a miniatura</string>
@@ -221,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>
@@ -311,4 +308,50 @@
<string name="settings_disable_nfc_while_viewing_card_summary">Suspende a tecnologia NFC para impedir que pagamentos NFC sejam acionados enquanto o cartão estiver sendo visualizado</string>
<string name="nfc_blocked_while_viewing_card">NFC está pausado</string>
<string name="change_settings">Alterar configurações</string>
<string name="nfc_block_system_error">Falha ao pausar o NFC</string>
<string name="sort_by_most_recently_added">Adicionados mais recentemente</string>
<string name="zoomFrontImage">Ampliar imagem frontal</string>
<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>
+3 -3
View File
@@ -205,7 +205,6 @@
<string name="failedToOpenUrl">Instale primeiro um navegador de Internet</string>
<string name="welcome">Bem-vindo ao Catima</string>
<string name="failedToRetrieveImageFile">Falha ao recuperar o ficheiro de imagem</string>
<string name="barcodeLongPressMessage">Só podem ser abertas imagens na aplicação da galeria</string>
<string name="noCameraPermissionDirectToSystemSetting">Para digitalizar códigos de barras, o Catima tem de aceder à câmara. Clique aqui para mudar as configurações de permissão.</string>
<string name="cameraPermissionDeniedTitle">Não foi possível aceder à câmara</string>
<string name="importCards">Importar cartões</string>
@@ -224,8 +223,6 @@
<string name="height">Altura</string>
<string name="switchToBackImage">Mudar para a imagem de trás</string>
<string name="switchToBarcode">Mudar para o código de barras</string>
<string name="openFrontImageInGalleryApp">Abrir imagem frontal na app visualizadora de imagens</string>
<string name="openBackImageInGalleryApp">Abrir imagem traseira na app visualizadora de imagens</string>
<string name="setBarcodeHeight">Definir altura do código de barras</string>
<string name="donate">Doar</string>
<string name="show_validity">Mostrar validade</string>
@@ -311,4 +308,7 @@
<string name="settings_disable_nfc_while_viewing_card_summary">Pausa NFC para evitar que pagamentos de NFC sejam acionados enquanto visualiza um cartão</string>
<string name="nfc_blocked_while_viewing_card">NFC está pausado</string>
<string name="change_settings">Alterar configurações</string>
<string name="nfc_block_system_error">Falha ao pausar o NFC</string>
<string name="zoomFrontImage">Ampliar imagem frontal</string>
<string name="show_card_id">Mostrar ID do cartão</string>
</resources>
+4 -3
View File
@@ -194,7 +194,6 @@
<string name="showMoreInfo">Mostrar informações</string>
<string name="updateBalance">Atualizar saldo</string>
<string name="failedToRetrieveImageFile">Falha ao recuperar o arquivo de imagem</string>
<string name="barcodeLongPressMessage">Apenas imagens podem ser abertas na galeria</string>
<string name="sort_by_name">Nome</string>
<string name="sort_by_most_recently_used">Usado mais recentemente</string>
<string name="sort_by_valid_from">Válido a partir de</string>
@@ -244,8 +243,6 @@
<string name="switchToFrontImage">Mudar para imagem frontal</string>
<string name="switchToBackImage">Mudar para imagem traseira</string>
<string name="switchToBarcode">Mudar para código de barras</string>
<string name="openFrontImageInGalleryApp">Abrir imagem frontal no visualizador de imagens</string>
<string name="openBackImageInGalleryApp">Abrir imagem traseira no visualizador de imagens</string>
<string name="setBarcodeHeight">Definir altura do código de barras</string>
<string name="donate">Doar</string>
<string name="icon_header_click_text">Pressione e segure para editar a miniatura</string>
@@ -310,4 +307,8 @@
<string name="settings_disable_nfc_while_viewing_card_summary">Pausa NFC para evitar que pagamentos de NFC sejam acionados enquanto visualiza um cartão</string>
<string name="nfc_blocked_while_viewing_card">NFC está pausado</string>
<string name="change_settings">Alterar configurações</string>
<string name="nfc_block_system_error">Erro ao pausar o NFC</string>
<string name="zoomFrontImage">Ampliar imagem frontal</string>
<string name="show_card_id">Mostrar ID do cartão</string>
<string name="sort_by_most_recently_added">Adicionados mais recentemente</string>
</resources>
+57 -41
View File
@@ -1,11 +1,11 @@
<?xml version="1.0" encoding="utf-8"?>
<resources xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2" xmlns:tools="http://schemas.android.com/tools">
<string name="barcodeType">Tip cod de bare</string>
<string name="cardId">Identificatorul cardului</string>
<string name="note">Notă</string>
<string name="cardId">ID-ul cardului</string>
<string name="note">Nota</string>
<string name="storeName">Numele</string>
<string name="noMatchingGiftCards">Nu au fost găsite rezultate. Încercați să schimbați termenii de căutare.</string>
<string name="noGiftCards">Faceți clic pe butonul + plus pentru a adăuga o carte sau mai întâi importați una din meniu.</string>
<string name="noGiftCards">Faceți clic pe butonul + plus pentru a adăuga un card sau importă din meniu</string>
<string name="action_add">Adăugați</string>
<string name="action_search">Căutare</string>
<string name="sendLabel">Trimiteți…</string>
@@ -25,17 +25,17 @@
<string name="settings_theme">Tema</string>
<string name="all">Toate</string>
<string name="noCardsMessage">Adăugați mai întâi un card</string>
<string name="noCardExistsError">Cardul nu a putut fi găsit</string>
<string name="noCardExistsError">N-am găsit cardul respectiv</string>
<string name="failedParsingImportUriError">Nu s-a putut analiza URI-ul de import</string>
<string name="importExport">Importă/Exportă</string>
<string name="importExport">Importă/exportă</string>
<string name="exportName">Exportați</string>
<string name="importSuccessfulTitle">Importat</string>
<string name="importFailedTitle">Importul a eșuat</string>
<string name="importFailed">Nu s-a putut efectua importarea</string>
<string name="exportFailed">Nu s-a putut efectua exportarea</string>
<string name="importing">Importul</string>
<string name="exporting">Exportul</string>
<string name="exportOptionExplanation">Datele vor fi scrise într-o locație aleasă de dumneavoastră.</string>
<string name="importing">Importare</string>
<string name="exporting">Exportare</string>
<string name="exportOptionExplanation">Datele vor fi scrise într-o locație aleasă de dumneavoastră</string>
<string name="importOptionFilesystemTitle">Import din sistemul de fișiere</string>
<string name="starImage">Stea de preferintă</string>
<string name="settings">Setări</string>
@@ -56,15 +56,15 @@
<string name="balance">Balanță</string>
<string name="importSuccessful">Date importate</string>
<string name="exportSuccessful">Date exportate</string>
<string name="noGroups">Faceți clic pe butonul + plus pentru a adăuga grupuri pentru clasificare.</string>
<string name="noGroups">Faceți clic pe butonul + plus pentru a adăuga grupuri pentru clasificare</string>
<string name="deleteConfirmationGroup">Ștergeți grupul\?</string>
<string name="failedOpeningFileManager">Instalați mai întâi un manager de fișiere.</string>
<string name="failedOpeningFileManager">Eșec în a deschide managerul de fișiere</string>
<string name="leaveWithoutSaveTitle">Ieșire</string>
<string name="addManually">Introduceți codul de bare manual</string>
<string name="currency">Monedă</string>
<string name="editBarcode">Editarea codului de bare</string>
<string name="chooseExpiryDate">Alegeți data de expirare</string>
<string name="selectBarcodeTitle">Selectare cod de bare</string>
<string name="selectBarcodeTitle">Selectează codul de bare</string>
<string name="noGroupCards">Acest grup este gol</string>
<string name="addFromImage">Selectați o imagine din galerie</string>
<string name="never">Niciodată</string>
@@ -74,21 +74,21 @@
<string name="moveBarcodeToTopOfScreen">Mutați codul de bare în partea de sus a ecranului</string>
<string name="errorReadingImage">Nu s-a putut citi imaginea</string>
<string name="points">Puncte</string>
<string name="cardShortcut">Scurtătură de card</string>
<string name="cardShortcut">Comandă rapidă pentru card</string>
<string name="scanCardBarcode">Scanați codul de bare</string>
<string name="importExportHelp">Copia de rezervă a datelor vă permite să le mutați pe un alt dispozitiv.</string>
<string name="importExportHelp">Copia de rezervă a datelor vă permite să le mutați pe un alt dispozitiv</string>
<string name="exportSuccessfulTitle">Exportat</string>
<string name="exportFailedTitle">Export eșuat</string>
<string name="importOptionFilesystemExplanation">Alegeți un anumit fișier din sistemul de fișiere.</string>
<string name="importOptionFilesystemExplanation">Alegeți un anumit fișier din sistemul de fișiere</string>
<string name="thumbnailDescription">Miniatură</string>
<string name="enter_group_name">Introduceți numele grupului</string>
<string name="yes">Da</string>
<string name="no">Nu</string>
<string name="archive">Arhivare</string>
<string name="passwordRequired">Vă rugăm, introduceți parola</string>
<string name="passwordRequired">Introduceți parola</string>
<string name="unsupportedBarcodeType">Acest tip de cod de bare nu poate fi afișat. Este posibil ca acesta să se poată afișa într-o versiune mai nouă a aplicației.</string>
<string name="photos">Imagini</string>
<string name="noGiftCardsGroup">Creați câteva carduri, iar apoi atribuiți-le grupului de aici.</string>
<string name="noGiftCardsGroup">Creați câteva carduri, iar apoi atribuiți-le grupului de aici</string>
<string name="importCatima">Importați din Catima</string>
<string name="intent_import_card_from_url_share_multiple_text">Aș dori să partajez niște carduri cu tine</string>
<string name="app_copyright_fmt" tools:ignore="PluralsCandidate">Drepturi de autor © 2019<xliff:g>%d</xliff:g> Sylvia van Os și contribuitorii</string>
@@ -99,7 +99,6 @@
<string name="exportPasswordHint">Introduceți o parolă</string>
<string name="about_title_fmt">Despre <xliff:g id="app_name">%s</xliff:g></string>
<string name="barcodeImageDescriptionWithType">Imagine <xliff:g>%s</xliff:g> cod de bare</string>
<string name="openFrontImageInGalleryApp">Deschideți imaginea frontală în aplicația galerie</string>
<string name="show_name_below_image_thumbnail">Afișați numele sub imaginea miniaturii</string>
<string name="removeImage">Ștergeți imaginea</string>
<string name="help_translate_this_app">Ajutați la traducerea aplicației</string>
@@ -107,7 +106,7 @@
<string name="add_a_card_in_a_different_way">Adăugați un card într-o altă modalitate</string>
<string name="takePhoto">Faceți o poză</string>
<string name="validFromDate">Valid de la data de</string>
<string name="cameraPermissionDeniedTitle">Camera nu a putut fi accesată</string>
<string name="cameraPermissionDeniedTitle">Camera n-a putut fi accesată</string>
<string name="wrongValueForBarcodeType">Valoarea nu este validă pentru tipul de cod de bare selectat</string>
<string name="welcome">Bine ați venit la Catima</string>
<string name="and_data_usage">și utilizarea datelor</string>
@@ -122,7 +121,6 @@
<string name="height">Înălțime</string>
<string name="expiryStateSentence">Expiră: <xliff:g>%s</xliff:g></string>
<string name="setIcon">Setați miniatura</string>
<string name="barcodeLongPressMessage">Doar imagini pot fi deschise în aplicația galerie</string>
<string name="settings_category_title_general">General</string>
<string name="manually_enter_barcode_instructions">Introduceți numărul de identificare sau textul de pe cardul dumneavoastră iar apoi selectați codul de bare ce arată ca și cel de pe cardul dumneavoastră.</string>
<string name="balanceSentence">Sold: <xliff:g>%s</xliff:g></string>
@@ -132,7 +130,7 @@
<string name="action_more_options">Mai multe opțiuni</string>
<string name="app_copyright_old">Bazat pe Loyalty Card Keychain
\ndrepturi de autor rezervate © 2016-2020 Branden Archer</string>
<string name="importVoucherVaultMessage">Selectați exportul dvs. <i>vouchervault.json</i> din Voucher Vault pentru a-l importa.\nCreați întâi fișierul prin apăsarea butonului Export în Voucher Vault.</string>
<string name="importVoucherVaultMessage">Selectați exportul dumneavoastră din Voucher Vault pentru import.\nCreați întâi fișierul prin apăsarea butonului Export în Voucher Vault.</string>
<string name="chooseImportType">Importați date din</string>
<string name="frontImageDescription">Imagine frontală</string>
<string name="showMoreInfo">Afișați informații</string>
@@ -140,9 +138,9 @@
<string name="setBackImage">Setați imaginea din spate</string>
<string name="permissionReadCardsDescription">citiți cardurile dumneavoastră Catima și toate detaliile lor, inclusiv notițele și imaginile</string>
<string name="anyDate">Orice dată</string>
<string name="failedLaunchingPhotoPicker">Nu a putut fi găsită o aplicație galerie suportată</string>
<string name="failedLaunchingPhotoPicker">N-a putut fi găsită o aplicație galerie suportată</string>
<string name="expiryStateSentenceExpired">Expirat: <xliff:g>%s</xliff:g></string>
<string name="source_repository">Repozitor Sursă</string>
<string name="source_repository">Depozit sursă</string>
<string name="groupsList">Grupuri: <xliff:g>%s</xliff:g></string>
<string name="enter_card_id">Introduceți numărul de identificare sau textul de pe cardul dumneavoastră</string>
<string name="unarchived">Card dezarhivat</string>
@@ -181,19 +179,18 @@
<string name="settings_allow_content_provider_read_summary">Aplicațiile vor trebui totuși să solicite permisiunea pentru a primi acces</string>
<string name="license">Licență</string>
<string name="newBalanceSentence">Balanța nouă: <xliff:g>%s</xliff:g></string>
<string name="editGroup">Editarea grupului: <xliff:g>%s</xliff:g></string>
<string name="editGroup">Grup de editare: <xliff:g>%s</xliff:g></string>
<plurals name="groupCardCountWithArchived">
<item quantity="one"><xliff:g>%1$d</xliff:g> card (<xliff:g id="archivedCount">%2$d</xliff:g> arhivat)</item>
<item quantity="few"><xliff:g>%1$d</xliff:g> carduri (<xliff:g id="archivedCount">%2$d</xliff:g> arhivate)</item>
<item quantity="other"><xliff:g>%1$d</xliff:g> de carduri (<xliff:g id="archivedCount">%2$d</xliff:g> arhivate)</item>
</plurals>
<string name="sameAsCardId">Acelașil cu identificatorul</string>
<string name="sameAsCardId">Același cu identificatorul</string>
<string name="options">Opțiuni</string>
<string name="failedGeneratingShareURL">Nu s-a putut genera un URL partajabil. Vă rugăm să raportați aceasta eroare.</string>
<string name="failedGeneratingShareURL">Nu s-a putut genera o adresă URL care poate fi partajată.</string>
<string name="selectColor">Selectați o culoare</string>
<string name="setBarcodeHeight">Setați înălțimea codului de bare</string>
<string name="privacy_policy">Politica de Confidențialitate</string>
<string name="openBackImageInGalleryApp">Deschideți imaginea din spate în aplicația galerie</string>
<string name="privacy_policy">Politica de confidențialitate</string>
<string name="settings_system_locale">Sistem</string>
<string name="updateBalance">Actualizați balanța</string>
<string name="sort_by_most_recently_used">Cele mai recent utilizate</string>
@@ -202,10 +199,10 @@
<string name="settings_locale">Limbă</string>
<string name="sort_by_name">Nume</string>
<string name="setFrontImage">Setați imaginea din față</string>
<string name="cameraPermissionRequired">Pentru această acțiune este necesară permisiunea de acces la camera </string>
<string name="cameraPermissionRequired">Permisiunea de acces la cameră este necesară pentru această acțiune</string>
<string name="settings_allow_content_provider_read_title">Permiteți altor aplicații să acceseze datele mele</string>
<string name="updateBarcodeQuestionText">Ați schimbat identificatorul. Doriți să actualizați și codul de bare pentru a utiliza aceeași valoare?</string>
<string name="importLoyaltyCardKeychainMessage">Selectați exportul dvs. <i>LoyaltyCardKeychain.csv</i> din Loyalty Card Keychain pentru a-l importa. \nCreați întâi fișierul din meniul Import/Export în Loyalty Card Keychain prin apăsarea butonului Export.</string>
<string name="importLoyaltyCardKeychainMessage">Selectați exportul dumneavoastră din Loyalty Card Keychain pentru import.\nCreați întâi fișierul din meniul Import/Export în Loyalty Card Keychain prin apăsarea butonului Export.</string>
<string name="currentBalanceSentence">Balanța curentă: <xliff:g>%s</xliff:g></string>
<string name="importLoyaltyCardKeychain">Importați din Loyalty Card Keychain</string>
<string name="group_updated">Grup actualizat</string>
@@ -213,7 +210,7 @@
<string name="on_github">pe GitHub</string>
<string name="sort">Sortați</string>
<string name="permissionReadCardsLabel">Citiți cardurile Catima</string>
<string name="storageReadPermissionRequired">Pentru această acțiune este necesară permisiunea de citire a mediului de stocare …</string>
<string name="storageReadPermissionRequired">Permisiunea de citire a spațiului de stocare este necesară pentru această acțiune</string>
<plurals name="deleteCardsConfirmation">
<item quantity="one">Ștergeți acest <xliff:g>%d</xliff:g> card permanent?</item>
<item quantity="few">Ștergeți aceste <xliff:g>%d</xliff:g> carduri permanent?</item>
@@ -226,9 +223,9 @@
<string name="group_name_already_in_use">Acest nume de grup este deja utilizat</string>
<string name="include_if_asking_support">Dacă doriți să cereți ajutor, includeți informațiile următoare:</string>
<string name="show_archived_cards">Afișați cardurile arhivate</string>
<string name="app_libraries">Listă de biblioteci libere de la terți: <xliff:g id="app_libraries_list">%s</xliff:g></string>
<string name="app_libraries">Biblioteci terțe: <xliff:g id="app_libraries_list">%s</xliff:g></string>
<string name="updateBalanceTitle">Cât de mult ați cheltuit sau primit?</string>
<string name="app_resources">Listă de resurse gratuite de la terți: <xliff:g id="app_resources_list">%s</xliff:g></string>
<string name="app_resources">Resurse terțe: <xliff:g id="app_resources_list">%s</xliff:g></string>
<string name="app_name">Catima</string>
<string name="shortcutSelectCard">Selectați un card</string>
<string name="accept">Acceptă</string>
@@ -245,26 +242,26 @@
<item quantity="few"><xliff:g>%d</xliff:g> selectate</item>
<item quantity="other"><xliff:g>%d</xliff:g> selectate</item>
</plurals>
<string name="version_history">Istoric versiuni</string>
<string name="importCatimaMessage">Selectați exportul dvs. <i>catima.zip</i> din Catima pentru a importa. \nCreați întâi fișierul din meniul Import/Export al unei alte aplicații Catima apăsând acolo butonul de Export.</string>
<string name="version_history">Istoricul versiunilor</string>
<string name="importCatimaMessage">Selectați exportul dumneavoastră din Catima pentru import.\nCreați întâi fișierul din meniul Import/Export al unei alte aplicații Catima apăsând butonul de Export.</string>
<plurals name="balancePoints">
<item quantity="one"><xliff:g>%s</xliff:g> punct</item>
<item quantity="few"><xliff:g>%s</xliff:g> puncte</item>
<item quantity="other"><xliff:g>%s</xliff:g> de puncte</item>
</plurals>
<string name="importFidmeMessage">Selectați exportul dvs. <i>fidme-export-request-xxxxx.zip</i> din FidMe pentru a-l importa, și apoi selectați tipurile de cod de bare manual.\nCreați întâi fișierul din profilul dvs. FidMe prin alegerea Protecție Date și apoi apăsând Extrageți datele mele.</string>
<string name="importFidmeMessage">Selectați exportul dumneavoastră din FidMe pentru import si selectați manual tipurile de coduri de bare dupa.\nCreați întâi fișierul din profilul dvs. FidMe prin alegerea Protecție Date și apoi apăsând Extrageți datele mele.</string>
<string name="updateBarcodeQuestionTitle">Actualizați valoarea codului de bare?</string>
<string name="settings_keep_screen_on_summary">Dezactivează temporizatorul de ecran când vizualizați un card</string>
<string name="rate_this_app">Acordați o recenzie acestei aplicații</string>
<string name="credits">Contribuitori</string>
<string name="continue_">Continua</string>
<string name="add_manually_warning_title">Se recomandă scanarea</string>
<string name="add_manually_warning_message">Pentru unele magazine, valoarea codului de bare diferă de numărul scris pe card. Din acest motiv, este posibil ca introducerea manuală a unui cod de bare să nu funcționeze întotdeauna. În schimb, este recomandat să scanați codul de bare cu camera dvs. Mai vrei să continui?</string>
<string name="add_manually_warning_message">Pentru unele carduri, valoarea codului de bare diferă de numărul scris pe card. Din acest motiv, este posibil ca introducerea manuală a unui cod de bare să nu funcționeze întotdeauna. În schimb, este recomandat să scanați codul de bare cu camera dvs. Mai vrei să continui?</string>
<string name="spend">Cheltuie</string>
<string name="receive">Primește</string>
<string name="amountParsingFailed">Sumă invalidă</string>
<string name="addFromPdfFile">Selectați un fișier PDF</string>
<string name="errorReadingFile">Nu am putut citi fișierul</string>
<string name="errorReadingFile">N-am putut citi fișierul</string>
<string name="failedLaunchingFileManager">Nu s-a găsit un manager de fișiere suportat</string>
<string name="multipleBarcodesFoundPleaseChooseOne">Care dintre codurile de bare găsite dorești să-l folosești?</string>
<string name="pageWithNumber">Pagina <xliff:g>%d</xliff:g></string>
@@ -285,12 +282,31 @@
<string name="settings_column_count_7">7</string>
<string name="settings_column_count_landscape">Coloane in mod orizontal</string>
<string name="settings_category_title_cards_overview">Vedere de ansamblu al cardlui</string>
<string name="sort_by_valid_from">Forma validă</string>
<string name="sort_by_valid_from">Valabil de la</string>
<string name="settings_column_count_portrait">Coloane in mod portret</string>
<string name="addFromPkpass">Selectează un fișier de tip Passbook (.pkpass)</string>
<string name="addFromPkpass">Selectează un fișier de tip Passbook (.pkpass / .pkpasses)</string>
<string name="unsupportedFile">Acest fișier nu este suportat</string>
<string name="generic_error_please_retry">Scuze, ceva nu a funționat. Încearcă din nou ...</string>
<string name="generic_error_please_retry">A apărut o eroare</string>
<string name="width">Lățime</string>
<string name="setBarcodeWidth">Setează Lățimea Codului de Bare</string>
<string name="setBarcodeWidth">Setează lățimea codului de bare</string>
<string name="card_list_widget_name">Listă de carduri</string>
<string name="settings_disable_nfc_while_viewing_card">Pauză NFC</string>
<string name="settings_disable_nfc_while_viewing_card_summary">Pauză NFC pentru a preveni declanșarea plăților NFC în timpul vizualizării unui card</string>
<string name="card_list_widget_empty">După ce adăugați carduri de fidelitate în Catima, ele vor apărea aici. Dacă aveți carduri, fi-ți sigur că ele nu sunt arhivate.</string>
<string name="cardWithNumber">Card <xliff:g>%d</xliff:g></string>
<string name="cardWithNumberAndLocale">Card <xliff:g>%d</xliff:g> (<xliff:g>%s</xliff:g>)</string>
<string name="pleaseDoNotRotateTheDevice">Vă rog să nu rotiți dispozitivul, deoarece acest lucru va anula acțiunea</string>
<string name="acra_catima_has_crashed">Ne cerem scuze, dar <xliff:g id="app_name">%s</xliff:g> s-a oprit. Vă rog să ne ajutați să rezolvăm problema, trimițându-ne un raport de eroare.</string>
<string name="acra_explain_crash">Dacă este posibil, vă rog să adăugați mai multe detalii despre ce ați făcut aici:</string>
<string name="acra_crash_email_subject"><xliff:g id="app_name">%s</xliff:g> raport de crash</string>
<string name="pref_enable_acra">Cere să trimiți rapoarte de crash</string>
<string name="pref_enable_acra_summary">Când este activat, veți fi întrebat să raportați crash-ul când se întâmpla. Raporturile de crash nu sunt niciodata trimise automat.</string>
<string name="copy_value">Copiază valoarea</string>
<string name="copied_to_clipboard">Copiat în clipboard</string>
<string name="nothing_to_copy">Nicio valoare găsită</string>
<string name="barcodeEncoding">Codarea codului de bare</string>
<string name="back">Înapoi</string>
<string name="nfc_blocked_while_viewing_card">NFC este pus pe pauza</string>
<string name="change_settings">Schimbă setările</string>
<string name="nfc_block_system_error">Nu s-a putut întrerupe NFC-ul</string>
</resources>
+50 -5
View File
@@ -211,7 +211,6 @@
<string name="welcome">Добро пожаловать в Catima</string>
<string name="failedToOpenUrl">Сначала необходимо установить браузер</string>
<string name="failedToRetrieveImageFile">Невозможно получить файл изображения</string>
<string name="barcodeLongPressMessage">В приложении галереи можно открывать только изображения</string>
<string name="noCameraPermissionDirectToSystemSetting">Для сканирования штрих-кодов Catima требуется доступ к камере устройства. Нажмите здесь, чтобы изменить настройки разрешений.</string>
<string name="updateBalance">Обновить баланс</string>
<string name="newBalanceSentence">Новый баланс: <xliff:g>%s</xliff:g></string>
@@ -231,8 +230,6 @@
<string name="switchToBarcode">Переключить на штрих-код</string>
<string name="switchToFrontImage">Переключить на лицевую сторону</string>
<string name="switchToBackImage">Переключить на заднюю сторону</string>
<string name="openFrontImageInGalleryApp">Открыть лицевое изображение в приложении просмотра изображений</string>
<string name="openBackImageInGalleryApp">Открыть заднее изображение в приложении просмотра изображений</string>
<string name="donate">Пожертвовать</string>
<string name="icon_header_click_text">Долгое нажатие для редактирования</string>
<string name="show_note">Показывать примечание</string>
@@ -241,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>
@@ -317,4 +314,52 @@
<string name="settings_disable_nfc_while_viewing_card">Отключать NFC</string>
<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">Показывать номер карты</string>
<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>
-3
View File
@@ -210,7 +210,6 @@
<item quantity="few"><xliff:g>%1$d</xliff:g> karty (<xliff:g id="archivedCount">%2$d</xliff:g> archivované)</item>
<item quantity="other"><xliff:g>%1$d</xliff:g> kariet (<xliff:g id="archivedCount">%2$d</xliff:g> archivovaných)</item>
</plurals>
<string name="barcodeLongPressMessage">V aplikácii galéria je možné otvoriť iba obrázky</string>
<string name="cameraPermissionDeniedTitle">Nepodarilo sa získať prístup k fotoaparátu</string>
<string name="storageReadPermissionRequired">Pre túto akciu je potrebné oprávnenie na čítanie úložiska…</string>
<string name="importFidmeMessage">Vyberte svoj export zo služby FidMe pre import a potom vyberte typy čiarových kódov ručne.\nVytvorte ho z profilu FidMe tak, že vyberiete položku Ochrana údajov a potom stlačíte tlačidlo Extrahovať moje údaje.</string>
@@ -226,8 +225,6 @@
<string name="settings_keep_screen_on_summary">Ponechať obrazovku aktívnu počas prezerania karty</string>
<string name="settings_display_barcode_max_brightness_summary">Pre zaistenie čitateľnosti pre niektoré skenery</string>
<string name="settings_allow_content_provider_read_summary">Aplikácie budú musieť stále žiadať o povolenie, aby im bol udelený prístup</string>
<string name="openBackImageInGalleryApp">Otvorenie zadného obrázka v prehliadači obrázkov</string>
<string name="openFrontImageInGalleryApp">Otvorenie predného obrázka v prehliadači obrázkov</string>
<string name="setBarcodeHeight">Nastavenie výšky čiarového kódu</string>
<string name="show_balance">Ukážte zostatok</string>
<string name="show_name_below_image_thumbnail">Zobraziť názov pod miniatúrou obrázka</string>
Loaded 100 of 671 files, more files were not shown because too many files have changed in this diff. Show more