Compare commits

...

507 Commits

Author SHA1 Message Date
TheLastProject
1761465532 Update contributors 2025-03-09 04:14:48 +00:00
Sylvia van Os
c2ff763311 Merge pull request #2375 from CatimaLoyalty/create-pull-request/patch-1741191680
Update locales
2025-03-07 20:07:08 +01:00
Sylvia van Os
813287a657 Merge pull request #2376 from weblate/weblate-catima-catima
Translations update from Hosted Weblate
2025-03-07 20:06:47 +01:00
Fjuro
66c3046c4d Translated using Weblate (Czech)
Currently translated at 100.0% (333 of 333 strings)

Translation: Catima/Android
Translate-URL: https://hosted.weblate.org/projects/catima/catima/cs/
2025-03-07 04:06:57 +01:00
ssantos
acbdf79d79 Translated using Weblate (Portuguese)
Currently translated at 100.0% (333 of 333 strings)

Translation: Catima/Android
Translate-URL: https://hosted.weblate.org/projects/catima/catima/pt/
2025-03-07 04:06:57 +01:00
Sylvia van Os
ade3db0902 Merge pull request #2372 from CatimaLoyalty/dependabot/gradle/com.android.application-8.9.0
Bump com.android.application from 8.8.2 to 8.9.0
2025-03-05 18:31:24 +01:00
TheLastProject
d66066c195 Update locales 2025-03-05 16:21:19 +00:00
Sylvia van Os
0a222ca16a Merge pull request #2374 from weblate/weblate-catima-catima
Translations update from Hosted Weblate
2025-03-05 17:21:02 +01:00
ssantos
48fa369dc3 Added translation using Weblate (Portuguese) 2025-03-05 14:36:53 +00:00
ssantos
9e861b1b10 Translated using Weblate (Portuguese (Portugal))
Currently translated at 100.0% (333 of 333 strings)

Translation: Catima/Android
Translate-URL: https://hosted.weblate.org/projects/catima/catima/pt_PT/
2025-03-05 14:36:52 +00:00
dependabot[bot]
6b7926ecde Bump com.android.application from 8.8.2 to 8.9.0
Bumps com.android.application from 8.8.2 to 8.9.0.

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

Signed-off-by: dependabot[bot] <support@github.com>
2025-03-05 02:09:02 +00:00
Sylvia van Os
ccd6e12547 Merge pull request #2371 from weblate/weblate-catima-catima
Translations update from Hosted Weblate
2025-03-04 18:37:02 +01:00
Balázs Meskó
c869104e82 Translated using Weblate (Hungarian)
Currently translated at 100.0% (333 of 333 strings)

Translation: Catima/Android
Translate-URL: https://hosted.weblate.org/projects/catima/catima/hu/
2025-03-04 17:09:09 +01:00
Sylvia van Os
f430d3071b Merge pull request #2369 from CatimaLoyalty/dependabot/github_actions/peter-evans/create-pull-request-7.0.7
Bump peter-evans/create-pull-request from 7.0.6 to 7.0.7
2025-03-03 07:09:21 +01:00
dependabot[bot]
26460753a6 Bump peter-evans/create-pull-request from 7.0.6 to 7.0.7
Bumps [peter-evans/create-pull-request](https://github.com/peter-evans/create-pull-request) from 7.0.6 to 7.0.7.
- [Release notes](https://github.com/peter-evans/create-pull-request/releases)
- [Commits](https://github.com/peter-evans/create-pull-request/compare/v7.0.6...v7.0.7)

---
updated-dependencies:
- dependency-name: peter-evans/create-pull-request
  dependency-type: direct:production
  update-type: version-update:semver-patch
...

Signed-off-by: dependabot[bot] <support@github.com>
2025-03-03 02:30:19 +00:00
Sylvia van Os
2653c7aea3 Merge pull request #2367 from CatimaLoyalty/create-pull-request/patch-1740889044
Update contributors
2025-03-02 13:31:55 +01:00
juuce79
1a892b2de3 Kotlin conversion of AboutActivity with tests also in Kotlin (#2360) 2025-03-02 13:30:10 +01:00
TheLastProject
a9e9ee511d Update contributors 2025-03-02 04:17:23 +00:00
Sylvia van Os
7719a2d3fd Merge pull request #2365 from weblate/weblate-catima-catima
Translations update from Hosted Weblate
2025-02-28 18:50:07 +01:00
Ricky Tigg
84a6202db1 Translated using Weblate (Finnish)
Currently translated at 100.0% (333 of 333 strings)

Translation: Catima/Android
Translate-URL: https://hosted.weblate.org/projects/catima/catima/fi/
2025-02-28 12:51:42 +00:00
Sylvia van Os
4d8a4fbd6a Merge pull request #2364 from CatimaLoyalty/dependabot/gradle/com.android.application-8.8.2
Bump com.android.application from 8.8.1 to 8.8.2
2025-02-28 07:56:59 +01:00
dependabot[bot]
d556e7e0a2 Bump com.android.application from 8.8.1 to 8.8.2
Bumps com.android.application from 8.8.1 to 8.8.2.

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

Signed-off-by: dependabot[bot] <support@github.com>
2025-02-28 02:32:30 +00:00
Sylvia van Os
5f039c5c3f Merge pull request #2362 from CatimaLoyalty/dependabot/gradle/androidx.constraintlayout-constraintlayout-2.2.1
Bump androidx.constraintlayout:constraintlayout from 2.2.0 to 2.2.1
2025-02-27 08:14:49 +01:00
dependabot[bot]
5bf69db296 Bump androidx.constraintlayout:constraintlayout from 2.2.0 to 2.2.1
Bumps androidx.constraintlayout:constraintlayout from 2.2.0 to 2.2.1.

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

Signed-off-by: dependabot[bot] <support@github.com>
2025-02-27 07:03:05 +00:00
Sylvia van Os
f20cac5d85 Merge pull request #2361 from CatimaLoyalty/dependabot/gradle/androidx.exifinterface-exifinterface-1.4.0
Bump androidx.exifinterface:exifinterface from 1.3.7 to 1.4.0
2025-02-27 08:02:08 +01:00
dependabot[bot]
69976289ca Bump androidx.exifinterface:exifinterface from 1.3.7 to 1.4.0
Bumps androidx.exifinterface:exifinterface from 1.3.7 to 1.4.0.

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

Signed-off-by: dependabot[bot] <support@github.com>
2025-02-27 02:13:51 +00:00
Sylvia van Os
8b30f92dfd Merge pull request #2359 from CatimaLoyalty/create-pull-request/patch-1740551110
Update Gradle to 8.13
2025-02-26 19:03:36 +01:00
Sylvia van Os
477c70a8e5 Merge pull request #2358 from CatimaLoyalty/dependabot/gradle/com.android.tools-desugar_jdk_libs-2.1.5
Bump com.android.tools:desugar_jdk_libs from 2.1.4 to 2.1.5
2025-02-26 08:34:30 +01:00
TheLastProject
2e9d1a41f6 Update Gradle to 8.13 2025-02-26 06:25:09 +00:00
dependabot[bot]
ff617036c7 Bump com.android.tools:desugar_jdk_libs from 2.1.4 to 2.1.5
Bumps [com.android.tools:desugar_jdk_libs](https://github.com/google/desugar_jdk_libs) from 2.1.4 to 2.1.5.
- [Changelog](https://github.com/google/desugar_jdk_libs/blob/master/CHANGELOG.md)
- [Commits](https://github.com/google/desugar_jdk_libs/commits)

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

Signed-off-by: dependabot[bot] <support@github.com>
2025-02-26 02:16:31 +00:00
Sylvia van Os
2b4e8b1f8b Merge pull request #2357 from weblate/weblate-catima-catima
Translations update from Hosted Weblate
2025-02-25 16:56:33 +01:00
Priit Jõerüüt
7bcbdd8358 Translated using Weblate (Estonian)
Currently translated at 100.0% (333 of 333 strings)

Translation: Catima/Android
Translate-URL: https://hosted.weblate.org/projects/catima/catima/et/
2025-02-25 16:29:26 +01:00
Sylvia van Os
45c212c5cc Merge pull request #2356 from CatimaLoyalty/dependabot/github_actions/actions/upload-artifact-4.6.1
Bump actions/upload-artifact from 4.6.0 to 4.6.1
2025-02-24 08:14:07 +01:00
dependabot[bot]
00d7b5e231 Bump actions/upload-artifact from 4.6.0 to 4.6.1
Bumps [actions/upload-artifact](https://github.com/actions/upload-artifact) from 4.6.0 to 4.6.1.
- [Release notes](https://github.com/actions/upload-artifact/releases)
- [Commits](https://github.com/actions/upload-artifact/compare/v4.6.0...v4.6.1)

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

Signed-off-by: dependabot[bot] <support@github.com>
2025-02-24 02:57:08 +00:00
Sylvia van Os
0314d49b77 Merge pull request #2355 from CatimaLoyalty/create-pull-request/patch-1740284254
Update contributors
2025-02-23 09:09:05 +01:00
TheLastProject
6335b731df Update contributors 2025-02-23 04:17:34 +00:00
Sylvia van Os
c248d1e84c Merge pull request #2354 from weblate/weblate-catima-catima
Translations update from Hosted Weblate
2025-02-22 09:06:29 +01:00
தமிழ்நேரம்
94de9829b9 Translated using Weblate (Tamil)
Currently translated at 100.0% (333 of 333 strings)

Translation: Catima/Android
Translate-URL: https://hosted.weblate.org/projects/catima/catima/ta/
2025-02-22 00:40:54 +00:00
Edgars Andersons
0448efd04c Translated using Weblate (Latvian)
Currently translated at 100.0% (333 of 333 strings)

Translation: Catima/Android
Translate-URL: https://hosted.weblate.org/projects/catima/catima/lv/
2025-02-22 00:40:54 +00:00
Sylvia van Os
21f4b9b5cf Merge pull request #2352 from weblate/weblate-catima-catima
Translations update from Hosted Weblate
2025-02-17 17:11:47 +01:00
Trond Kjetil Bremnes
01a30db52e Translated using Weblate (Norwegian Bokmål)
Currently translated at 100.0% (333 of 333 strings)

Translation: Catima/Android
Translate-URL: https://hosted.weblate.org/projects/catima/catima/nb_NO/
2025-02-17 15:18:34 +00:00
Sylvia van Os
01ed9bd30f Merge pull request #2347 from CatimaLoyalty/dependabot/gradle/com.android.application-8.8.1
Bump com.android.application from 8.8.0 to 8.8.1
2025-02-14 08:32:51 +01:00
dependabot[bot]
583edb53d9 Bump com.android.application from 8.8.0 to 8.8.1
Bumps com.android.application from 8.8.0 to 8.8.1.

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

Signed-off-by: dependabot[bot] <support@github.com>
2025-02-14 02:50:40 +00:00
Sylvia van Os
f51cc70d8e Merge pull request #2346 from weblate/weblate-catima-catima
Translations update from Hosted Weblate
2025-02-13 19:09:14 +01:00
zedsansor
539d05a603 Translated using Weblate (Persian)
Currently translated at 45.0% (150 of 333 strings)

Translation: Catima/Android
Translate-URL: https://hosted.weblate.org/projects/catima/catima/fa/
2025-02-12 21:01:59 +01:00
Sylvia van Os
906162ebb4 Merge pull request #2343 from weblate/weblate-catima-catima
Translations update from Hosted Weblate
2025-02-11 20:02:28 +01:00
Lari Tanase
b06203dc8a Translated using Weblate (Romanian)
Currently translated at 100.0% (333 of 333 strings)

Translation: Catima/Android
Translate-URL: https://hosted.weblate.org/projects/catima/catima/ro/
2025-02-11 17:02:20 +00:00
Sylvia van Os
6aec4b93ff Merge pull request #2341 from weblate/weblate-catima-catima
Translations update from Hosted Weblate
2025-02-10 19:49:28 +01:00
Mahan Khalili
3ea6f64021 Translated using Weblate (Persian)
Currently translated at 37.5% (125 of 333 strings)

Translation: Catima/Android
Translate-URL: https://hosted.weblate.org/projects/catima/catima/fa/
2025-02-10 16:02:02 +00:00
Lari Tanase
51fb01b190 Translated using Weblate (Romanian)
Currently translated at 100.0% (333 of 333 strings)

Translation: Catima/Android
Translate-URL: https://hosted.weblate.org/projects/catima/catima/ro/
2025-02-10 16:02:01 +00:00
dicaeffe
01b23109ae Translated using Weblate (Italian)
Currently translated at 100.0% (333 of 333 strings)

Translation: Catima/Android
Translate-URL: https://hosted.weblate.org/projects/catima/catima/it/
2025-02-10 16:02:00 +00:00
Sylvia van Os
4e291b58d3 Merge pull request #2339 from CatimaLoyalty/create-pull-request/patch-1739074637
Update contributors
2025-02-09 11:45:49 +01:00
TheLastProject
1689cf1026 Update contributors 2025-02-09 04:17:17 +00:00
Sylvia van Os
a55ce2c952 Merge pull request #2338 from weblate/weblate-catima-catima
Translations update from Hosted Weblate
2025-02-06 18:58:05 +01:00
이정희
d2ff17a90e Translated using Weblate (Italian)
Currently translated at 81.9% (118 of 144 strings)

Translation: Catima/Android (Fastlane)
Translate-URL: https://hosted.weblate.org/projects/catima/fastlane/it/
2025-02-06 16:02:42 +00:00
Odoamar
70c446e88d Translated using Weblate (Polish)
Currently translated at 100.0% (333 of 333 strings)

Translation: Catima/Android
Translate-URL: https://hosted.weblate.org/projects/catima/catima/pl/
2025-02-06 16:02:41 +00:00
Sylvia van Os
0d6dc40da5 Merge pull request #2334 from weblate/weblate-catima-catima
Translations update from Hosted Weblate
2025-02-03 20:43:41 +01:00
Hosted Weblate
a4f3a81d58 Update translation files
Updated by "Remove blank strings" hook in Weblate.

Translation: Catima/Android
Translate-URL: https://hosted.weblate.org/projects/catima/catima/
2025-02-03 20:02:48 +01:00
Priit Jõerüüt
c64f75ffe4 Translated using Weblate (Estonian)
Currently translated at 10.4% (15 of 144 strings)

Translation: Catima/Android (Fastlane)
Translate-URL: https://hosted.weblate.org/projects/catima/fastlane/et/
2025-02-03 20:02:48 +01:00
Ricky Tigg
0fdb6ee567 Translated using Weblate (Finnish)
Currently translated at 99.6% (332 of 333 strings)

Translation: Catima/Android
Translate-URL: https://hosted.weblate.org/projects/catima/catima/fi/
2025-02-03 20:02:47 +01:00
이정희
9aa40fc88c Translated using Weblate (Korean)
Currently translated at 100.0% (333 of 333 strings)

Translation: Catima/Android
Translate-URL: https://hosted.weblate.org/projects/catima/catima/ko/
2025-02-03 20:02:46 +01:00
Sylvia van Os
4f4c0171c0 Translated using Weblate (Hebrew (Israel))
Currently translated at 29.4% (98 of 333 strings)

Translation: Catima/Android
Translate-URL: https://hosted.weblate.org/projects/catima/catima/he_IL/
2025-02-03 20:02:45 +01:00
Anonymous
e4644b3eb7 Translated using Weblate (Hebrew (Israel))
Currently translated at 29.4% (98 of 333 strings)

Translation: Catima/Android
Translate-URL: https://hosted.weblate.org/projects/catima/catima/he_IL/
2025-02-03 20:02:44 +01:00
Sylvia van Os
999cf241f8 Merge pull request #2331 from CatimaLoyalty/dependabot/github_actions/actions/setup-python-5.4.0
Bump actions/setup-python from 5.3.0 to 5.4.0
2025-02-03 19:30:38 +01:00
dependabot[bot]
42b964a324 Bump actions/setup-python from 5.3.0 to 5.4.0
Bumps [actions/setup-python](https://github.com/actions/setup-python) from 5.3.0 to 5.4.0.
- [Release notes](https://github.com/actions/setup-python/releases)
- [Commits](https://github.com/actions/setup-python/compare/v5.3.0...v5.4.0)

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

Signed-off-by: dependabot[bot] <support@github.com>
2025-02-03 02:47:52 +00:00
Sylvia van Os
1262bfd502 Merge pull request #2329 from weblate/weblate-catima-catima
Translations update from Hosted Weblate
2025-01-31 20:29:52 +01:00
Bruno Fragoso
81fe561678 Translated using Weblate (Portuguese (Brazil))
Currently translated at 100.0% (333 of 333 strings)

Translation: Catima/Android
Translate-URL: https://hosted.weblate.org/projects/catima/catima/pt_BR/
2025-01-31 18:07:38 +01:00
polarwood
9cb989155d Translated using Weblate (Turkish)
Currently translated at 100.0% (333 of 333 strings)

Translation: Catima/Android
Translate-URL: https://hosted.weblate.org/projects/catima/catima/tr/
2025-01-31 18:07:38 +01:00
Fermín Etcheverry
59587f4a40 Translated using Weblate (Spanish)
Currently translated at 100.0% (333 of 333 strings)

Translation: Catima/Android
Translate-URL: https://hosted.weblate.org/projects/catima/catima/es/
2025-01-31 18:07:38 +01:00
Sylvia van Os
4dc0d4cd24 Merge pull request #2326 from weblate/weblate-catima-catima
Translations update from Hosted Weblate
2025-01-29 18:00:50 +01:00
Ricky Tigg
89598be72e Translated using Weblate (Finnish)
Currently translated at 4.1% (6 of 144 strings)

Translation: Catima/Android (Fastlane)
Translate-URL: https://hosted.weblate.org/projects/catima/fastlane/fi/
2025-01-29 16:03:18 +01:00
Sylvia van Os
1d2359f295 Merge pull request #2324 from CatimaLoyalty/dependabot/gradle/org.jetbrains.kotlin.android-2.1.10
Bump org.jetbrains.kotlin.android from 2.1.0 to 2.1.10
2025-01-28 10:21:53 +01:00
dependabot[bot]
026984920b Bump org.jetbrains.kotlin.android from 2.1.0 to 2.1.10
Bumps [org.jetbrains.kotlin.android](https://github.com/JetBrains/kotlin) from 2.1.0 to 2.1.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.1.0...v2.1.10)

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

Signed-off-by: dependabot[bot] <support@github.com>
2025-01-28 02:50:47 +00:00
Sylvia van Os
03ed289ef9 Merge pull request #2319 from CatimaLoyalty/create-pull-request/patch-1737865002
Update contributors
2025-01-26 10:10:23 +01:00
TheLastProject
0ccbeb42dd Update contributors 2025-01-26 04:16:42 +00:00
Sylvia van Os
3f9b772a11 Merge pull request #2316 from CatimaLoyalty/create-pull-request/patch-1737786088
Update Gradle to 8.12.1
2025-01-25 13:33:46 +01:00
TheLastProject
e97c9de471 Update Gradle to 8.12.1 2025-01-25 06:21:27 +00:00
Sylvia van Os
872db6b966 Merge pull request #2315 from CatimaLoyalty/create-pull-request/patch-1737497854
Update feature graphic
2025-01-22 21:46:40 +01:00
Sylvia van Os
724d036df9 Merge pull request #2314 from CatimaLoyalty/fix/imagemagick
Fix feature graphic generation
2025-01-21 23:27:02 +01:00
TheLastProject
fc98e6651a Update feature graphic 2025-01-21 22:17:33 +00:00
Sylvia van Os
a70e4aa7a7 Fix feature graphic generation 2025-01-21 23:14:30 +01:00
Sylvia van Os
d542be322c Merge pull request #2312 from weblate/weblate-catima-catima
Translations update from Hosted Weblate
2025-01-21 23:05:55 +01:00
Sylvia van Os
d5a977c5b0 Translated using Weblate (Catalan)
Currently translated at 4.1% (6 of 144 strings)

Translation: Catima/Android (Fastlane)
Translate-URL: https://hosted.weblate.org/projects/catima/fastlane/ca/
2025-01-21 22:54:35 +01:00
mrestivill
bac9199974 Translated using Weblate (Catalan)
Currently translated at 3.4% (5 of 144 strings)

Translation: Catima/Android (Fastlane)
Translate-URL: https://hosted.weblate.org/projects/catima/fastlane/ca/
2025-01-21 22:19:26 +01:00
mrestivill
bb92ec2291 Translated using Weblate (Catalan)
Currently translated at 100.0% (1 of 1 strings)

Translation: Catima/Android (Debug)
Translate-URL: https://hosted.weblate.org/projects/catima/android-debug/ca/
2025-01-21 22:19:25 +01:00
mrestivill
b155f45b01 Translated using Weblate (Catalan)
Currently translated at 81.9% (273 of 333 strings)

Translation: Catima/Android
Translate-URL: https://hosted.weblate.org/projects/catima/catima/ca/
2025-01-21 22:19:24 +01:00
Milo Ivir
b2f79f836b Translated using Weblate (Croatian)
Currently translated at 100.0% (333 of 333 strings)

Translation: Catima/Android
Translate-URL: https://hosted.weblate.org/projects/catima/catima/hr/
2025-01-21 22:19:24 +01:00
ikanakova
9ba7e4a92b Translated using Weblate (Czech)
Currently translated at 100.0% (144 of 144 strings)

Translation: Catima/Android (Fastlane)
Translate-URL: https://hosted.weblate.org/projects/catima/fastlane/cs/
2025-01-21 22:19:23 +01:00
Sylvia van Os
28088beb72 Merge pull request #2311 from weblate/weblate-catima-catima
Translations update from Hosted Weblate
2025-01-20 22:21:27 +01:00
reimu105
25351f4138 Translated using Weblate (Chinese (Traditional Han script))
Currently translated at 100.0% (333 of 333 strings)

Translation: Catima/Android
Translate-URL: https://hosted.weblate.org/projects/catima/catima/zh_Hant/
2025-01-20 02:51:26 +00:00
B o d o
1ac4db8641 Translated using Weblate (German)
Currently translated at 100.0% (144 of 144 strings)

Translation: Catima/Android (Fastlane)
Translate-URL: https://hosted.weblate.org/projects/catima/fastlane/de/
2025-01-20 02:51:26 +00:00
J. Lavoie
5cee4ef497 Translated using Weblate (French)
Currently translated at 100.0% (333 of 333 strings)

Translation: Catima/Android
Translate-URL: https://hosted.weblate.org/projects/catima/catima/fr/
2025-01-20 02:51:25 +00:00
Sylvia van Os
b323c2e5cd Merge pull request #2310 from CatimaLoyalty/create-pull-request/patch-1737260228
Update contributors
2025-01-19 09:52:14 +01:00
TheLastProject
66be4a8c18 Update contributors 2025-01-19 04:17:08 +00:00
Sylvia van Os
dd2bd294ba Merge pull request #2308 from weblate/weblate-catima-catima
Translations update from Hosted Weblate
2025-01-18 13:02:13 +01:00
Edgars Andersons
e4db1e931a Translated using Weblate (Latvian)
Currently translated at 6.9% (10 of 144 strings)

Translation: Catima/Android (Fastlane)
Translate-URL: https://hosted.weblate.org/projects/catima/fastlane/lv/
2025-01-18 11:45:31 +00:00
Edgars Andersons
f8b3e9c65b Translated using Weblate (Latvian)
Currently translated at 100.0% (333 of 333 strings)

Translation: Catima/Android
Translate-URL: https://hosted.weblate.org/projects/catima/catima/lv/
2025-01-18 11:45:31 +00:00
reimu105
880a596621 Translated using Weblate (Chinese (Traditional Han script))
Currently translated at 87.5% (126 of 144 strings)

Translation: Catima/Android (Fastlane)
Translate-URL: https://hosted.weblate.org/projects/catima/fastlane/zh_Hant/
2025-01-18 11:45:30 +00:00
reimu105
9903b4d955 Translated using Weblate (Chinese (Traditional Han script))
Currently translated at 100.0% (333 of 333 strings)

Translation: Catima/Android
Translate-URL: https://hosted.weblate.org/projects/catima/catima/zh_Hant/
2025-01-18 11:45:29 +00:00
大王叫我来巡山
40bc87c772 Translated using Weblate (Chinese (Simplified Han script))
Currently translated at 100.0% (144 of 144 strings)

Translation: Catima/Android (Fastlane)
Translate-URL: https://hosted.weblate.org/projects/catima/fastlane/zh_Hans/
2025-01-18 11:45:28 +00:00
Максим Горпиніч
586642c6f6 Translated using Weblate (Ukrainian)
Currently translated at 100.0% (144 of 144 strings)

Translation: Catima/Android (Fastlane)
Translate-URL: https://hosted.weblate.org/projects/catima/fastlane/uk/
2025-01-18 11:45:28 +00:00
solokot
f3847a4a2b Translated using Weblate (Russian)
Currently translated at 100.0% (144 of 144 strings)

Translation: Catima/Android (Fastlane)
Translate-URL: https://hosted.weblate.org/projects/catima/fastlane/ru/
2025-01-18 11:45:27 +00:00
B o d o
63352c310e Translated using Weblate (German)
Currently translated at 100.0% (144 of 144 strings)

Translation: Catima/Android (Fastlane)
Translate-URL: https://hosted.weblate.org/projects/catima/fastlane/de/
2025-01-18 11:45:27 +00:00
Sylvia van Os
e7aac163c2 Release Catima 2.34.4 2025-01-17 19:23:43 +01:00
Sylvia van Os
5a3d61d8f0 Merge pull request #2306 from weblate/weblate-catima-catima
Translations update from Hosted Weblate
2025-01-17 19:20:18 +01:00
Sylvia van Os
33ba81d3b0 Translated using Weblate (Dutch)
Currently translated at 100.0% (333 of 333 strings)

Translation: Catima/Android
Translate-URL: https://hosted.weblate.org/projects/catima/catima/nl/
2025-01-17 19:08:14 +01:00
josé m
6a0956181d Translated using Weblate (Galician)
Currently translated at 100.0% (333 of 333 strings)

Translation: Catima/Android
Translate-URL: https://hosted.weblate.org/projects/catima/catima/gl/
2025-01-17 19:03:59 +01:00
Priit Jõerüüt
aca7d3bd9c Translated using Weblate (Estonian)
Currently translated at 100.0% (333 of 333 strings)

Translation: Catima/Android
Translate-URL: https://hosted.weblate.org/projects/catima/catima/et/
2025-01-17 19:03:59 +01:00
109247019824
e3e8378f8e Translated using Weblate (Bulgarian)
Currently translated at 100.0% (333 of 333 strings)

Translation: Catima/Android
Translate-URL: https://hosted.weblate.org/projects/catima/catima/bg/
2025-01-17 19:03:59 +01:00
大王叫我来巡山
61d235b497 Translated using Weblate (Chinese (Simplified Han script))
Currently translated at 100.0% (144 of 144 strings)

Translation: Catima/Android (Fastlane)
Translate-URL: https://hosted.weblate.org/projects/catima/fastlane/zh_Hans/
2025-01-17 19:03:59 +01:00
大王叫我来巡山
e069d7a956 Translated using Weblate (Chinese (Simplified Han script))
Currently translated at 100.0% (333 of 333 strings)

Translation: Catima/Android
Translate-URL: https://hosted.weblate.org/projects/catima/catima/zh_Hans/
2025-01-17 19:03:59 +01:00
ikanakova
3d8806e38c Translated using Weblate (Czech)
Currently translated at 100.0% (144 of 144 strings)

Translation: Catima/Android (Fastlane)
Translate-URL: https://hosted.weblate.org/projects/catima/fastlane/cs/
2025-01-17 19:03:59 +01:00
Максим Горпиніч
650da3bd6a Translated using Weblate (Ukrainian)
Currently translated at 100.0% (144 of 144 strings)

Translation: Catima/Android (Fastlane)
Translate-URL: https://hosted.weblate.org/projects/catima/fastlane/uk/
2025-01-17 19:03:59 +01:00
solokot
26b7cece35 Translated using Weblate (Russian)
Currently translated at 100.0% (144 of 144 strings)

Translation: Catima/Android (Fastlane)
Translate-URL: https://hosted.weblate.org/projects/catima/fastlane/ru/
2025-01-17 19:03:59 +01:00
B o d o
1d3da4d1d1 Translated using Weblate (German)
Currently translated at 100.0% (144 of 144 strings)

Translation: Catima/Android (Fastlane)
Translate-URL: https://hosted.weblate.org/projects/catima/fastlane/de/
2025-01-17 19:03:59 +01:00
Максим Горпиніч
bc3aeed090 Translated using Weblate (Ukrainian)
Currently translated at 100.0% (333 of 333 strings)

Translation: Catima/Android
Translate-URL: https://hosted.weblate.org/projects/catima/catima/uk/
2025-01-17 19:03:59 +01:00
solokot
6606eeb9a7 Translated using Weblate (Russian)
Currently translated at 100.0% (333 of 333 strings)

Translation: Catima/Android
Translate-URL: https://hosted.weblate.org/projects/catima/catima/ru/
2025-01-17 19:03:59 +01:00
Vasilis K
2401a3f8bf Translated using Weblate (Greek)
Currently translated at 100.0% (333 of 333 strings)

Translation: Catima/Android
Translate-URL: https://hosted.weblate.org/projects/catima/catima/el/
2025-01-17 19:03:59 +01:00
B o d o
b3685c0c7e Translated using Weblate (German)
Currently translated at 100.0% (333 of 333 strings)

Translation: Catima/Android
Translate-URL: https://hosted.weblate.org/projects/catima/catima/de/
2025-01-17 19:03:59 +01:00
ikanakova
868315948e Translated using Weblate (Czech)
Currently translated at 100.0% (333 of 333 strings)

Translation: Catima/Android
Translate-URL: https://hosted.weblate.org/projects/catima/catima/cs/
2025-01-17 19:03:59 +01:00
Sylvia van Os
19a68719fe Merge pull request #2305 from CatimaLoyalty/create-pull-request/patch-1737136973
Update Fastlane changelogs
2025-01-17 19:03:12 +01:00
TheLastProject
92570ec75c Update Fastlane changelogs 2025-01-17 18:02:53 +00:00
Sylvia van Os
573817f81d Update CHANGELOG 2025-01-17 19:02:39 +01:00
Sylvia van Os
21da1fed85 Merge pull request #2304 from CatimaLoyalty/fix/15_no_e2e
Revert to targeting Android 14
2025-01-17 19:02:05 +01:00
Sylvia van Os
c23527eb82 Revert to targeting Android 14
This reverts commit ff08dbe5d5.

I tried keeping the target at Android 15 and opting out of edge-to-edge
enforcement, but this is not a true compatibility mode and broke the
multi-selection UI in the main activity.
2025-01-17 18:38:57 +01:00
Sylvia van Os
926b9e0822 Merge pull request #2302 from weblate/weblate-catima-catima
Translations update from Hosted Weblate
2025-01-17 17:34:14 +01:00
Sebastian
d32a0b698d Translated using Weblate (Danish)
Currently translated at 56.0% (186 of 332 strings)

Translation: Catima/Android
Translate-URL: https://hosted.weblate.org/projects/catima/catima/da/
2025-01-17 00:11:07 +00:00
Sylvia van Os
47bf18f219 Merge pull request #2298 from CatimaLoyalty/create-pull-request/patch-1736974941
Update Fastlane changelogs
2025-01-15 22:02:57 +01:00
TheLastProject
91096c5839 Update Fastlane changelogs 2025-01-15 21:02:20 +00:00
Sylvia van Os
477c16360e Update CHANGELOG 2025-01-15 22:02:06 +01:00
Christos Tsingiropoylos
9a1d7d2e44 Sort by valid from date (#2297) 2025-01-15 22:01:25 +01:00
Sylvia van Os
be54c50786 Release Catima 2.34.3 2025-01-15 17:50:02 +01:00
Sylvia van Os
2624924f53 Merge pull request #2295 from weblate/weblate-catima-catima
Translations update from Hosted Weblate
2025-01-15 17:47:42 +01:00
Priit Jõerüüt
724552eaa3 Translated using Weblate (Estonian)
Currently translated at 7.6% (11 of 143 strings)

Translation: Catima/Android (Fastlane)
Translate-URL: https://hosted.weblate.org/projects/catima/fastlane/et/
2025-01-15 08:51:45 +01:00
Edgars Andersons
bef0d70d09 Translated using Weblate (Latvian)
Currently translated at 6.2% (9 of 143 strings)

Translation: Catima/Android (Fastlane)
Translate-URL: https://hosted.weblate.org/projects/catima/fastlane/lv/
2025-01-15 08:51:45 +01:00
大王叫我来巡山
d7201f62ab Translated using Weblate (Chinese (Simplified Han script))
Currently translated at 100.0% (143 of 143 strings)

Translation: Catima/Android (Fastlane)
Translate-URL: https://hosted.weblate.org/projects/catima/fastlane/zh_Hans/
2025-01-15 08:51:45 +01:00
Максим Горпиніч
1f229980b7 Translated using Weblate (Ukrainian)
Currently translated at 100.0% (143 of 143 strings)

Translation: Catima/Android (Fastlane)
Translate-URL: https://hosted.weblate.org/projects/catima/fastlane/uk/
2025-01-15 08:51:44 +01:00
solokot
8f08b1989b Translated using Weblate (Russian)
Currently translated at 100.0% (143 of 143 strings)

Translation: Catima/Android (Fastlane)
Translate-URL: https://hosted.weblate.org/projects/catima/fastlane/ru/
2025-01-15 08:51:44 +01:00
Kachelkaiser
e3c83c0cb0 Translated using Weblate (German)
Currently translated at 100.0% (143 of 143 strings)

Translation: Catima/Android (Fastlane)
Translate-URL: https://hosted.weblate.org/projects/catima/fastlane/de/
2025-01-15 08:51:44 +01:00
Sylvia van Os
431e380f5e Merge pull request #2294 from weblate/weblate-catima-catima
Translations update from Hosted Weblate
2025-01-14 17:15:43 +01:00
josé m
5c7b102e08 Translated using Weblate (Galician)
Currently translated at 10.4% (15 of 143 strings)

Translation: Catima/Android (Fastlane)
Translate-URL: https://hosted.weblate.org/projects/catima/fastlane/gl/
2025-01-14 07:11:44 +01:00
B o d o
6dc1a1b196 Translated using Weblate (German)
Currently translated at 100.0% (143 of 143 strings)

Translation: Catima/Android (Fastlane)
Translate-URL: https://hosted.weblate.org/projects/catima/fastlane/de/
2025-01-14 07:11:44 +01:00
Sylvia van Os
6c01d2ffa9 Merge pull request #2291 from CatimaLoyalty/dependabot/github_actions/actions/upload-artifact-4.6.0
Bump actions/upload-artifact from 4.5.0 to 4.6.0
2025-01-13 18:58:47 +01:00
dependabot[bot]
3156fd6daf Bump actions/upload-artifact from 4.5.0 to 4.6.0
Bumps [actions/upload-artifact](https://github.com/actions/upload-artifact) from 4.5.0 to 4.6.0.
- [Release notes](https://github.com/actions/upload-artifact/releases)
- [Commits](https://github.com/actions/upload-artifact/compare/v4.5.0...v4.6.0)

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

Signed-off-by: dependabot[bot] <support@github.com>
2025-01-13 02:20:56 +00:00
Sylvia van Os
6fa4ab3e3b Add Contributor Covenant Code of Conduct 2025-01-12 11:54:15 +01:00
Sylvia van Os
9fa67b59c7 Merge pull request #2290 from CatimaLoyalty/create-pull-request/patch-1736655501
Update contributors
2025-01-12 10:34:20 +01:00
TheLastProject
0935a17fec Update contributors 2025-01-12 04:18:21 +00:00
Sylvia van Os
5fdc575485 Merge pull request #2289 from CatimaLoyalty/hack/espass_as_pkpass
Add unofficial support for espass
2025-01-11 12:50:06 +01:00
Sylvia van Os
d6bbd16945 Add unofficial support for espass
While espass files aren't pkpass files, they are so similar we can
generally parse them fine with the pkpass parser. While this feature
shouldn't be advertised as it is kinda hacky, it does make it easier for
PassAndroid users to share cards with Catima users.
2025-01-11 12:38:03 +01:00
Sylvia van Os
1110f7ee99 Merge pull request #2288 from CatimaLoyalty/create-pull-request/patch-1736595116
Update Fastlane changelogs
2025-01-11 12:32:10 +01:00
TheLastProject
d64860a34e Update Fastlane changelogs 2025-01-11 11:31:56 +00:00
Sylvia van Os
9fb0da6954 Update CHANGELOG 2025-01-11 12:31:43 +01:00
Sylvia van Os
12b0f8806b Merge pull request #2286 from CatimaLoyalty/fix/add_secondary_pkpass_mimetype
Also parse application/vnd-com.apple.pkpass as pkpass files
2025-01-11 12:30:52 +01:00
Sylvia van Os
5c5a1df39d Also parse application/vnd-com.apple.pkpass as pkpass files 2025-01-11 12:19:48 +01:00
Sylvia van Os
5b0ac65fbe Merge pull request #2217 from CatimaLoyalty/dependabot/gradle/androidx.core-core-ktx-1.15.0
Bump androidx.core:core-ktx from 1.13.1 to 1.15.0
2025-01-11 11:40:24 +01:00
dependabot[bot]
e9b542ee6e Bump androidx.core:core-ktx from 1.13.1 to 1.15.0
Bumps androidx.core:core-ktx from 1.13.1 to 1.15.0.

---
updated-dependencies:
- dependency-name: androidx.core:core-ktx
  dependency-type: direct:production
  update-type: version-update:semver-minor
...

Signed-off-by: dependabot[bot] <support@github.com>
2025-01-11 10:07:38 +00:00
Sylvia van Os
ae6bf5e8f6 Merge pull request #2285 from CatimaLoyalty/fix/bumpCompileSdk
Bump compile SDK
2025-01-11 11:06:40 +01:00
Sylvia van Os
4dc564ffcf Bump AGP 2025-01-11 10:55:56 +01:00
Sylvia van Os
49a9ef2f80 Bump compile SDK 2025-01-11 10:44:23 +01:00
Sylvia van Os
1907f482eb Merge pull request #2277 from weblate/weblate-catima-catima
Translations update from Hosted Weblate
2025-01-10 20:02:52 +01:00
Sylvia van Os
08aad7ce20 Merge pull request #2275 from CatimaLoyalty/dependabot/gradle/com.android.application-8.8.0
Bump com.android.application from 8.7.3 to 8.8.0
2025-01-10 19:28:48 +01:00
josé m
f555a160d5 Translated using Weblate (Galician)
Currently translated at 9.7% (14 of 143 strings)

Translation: Catima/Android (Fastlane)
Translate-URL: https://hosted.weblate.org/projects/catima/fastlane/gl/
2025-01-10 07:31:36 +01:00
Максим Горпиніч
2d9b7f358e Translated using Weblate (Ukrainian)
Currently translated at 100.0% (143 of 143 strings)

Translation: Catima/Android (Fastlane)
Translate-URL: https://hosted.weblate.org/projects/catima/fastlane/uk/
2025-01-10 07:31:36 +01:00
solokot
db396b5f21 Translated using Weblate (Russian)
Currently translated at 100.0% (143 of 143 strings)

Translation: Catima/Android (Fastlane)
Translate-URL: https://hosted.weblate.org/projects/catima/fastlane/ru/
2025-01-10 07:31:34 +01:00
B o d o
018d36c3fd Translated using Weblate (German)
Currently translated at 100.0% (143 of 143 strings)

Translation: Catima/Android (Fastlane)
Translate-URL: https://hosted.weblate.org/projects/catima/fastlane/de/
2025-01-10 07:31:31 +01:00
dependabot[bot]
e6621244b8 Bump com.android.application from 8.7.3 to 8.8.0
Bumps com.android.application from 8.7.3 to 8.8.0.

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

Signed-off-by: dependabot[bot] <support@github.com>
2025-01-10 02:58:19 +00:00
Sylvia van Os
29aef64d97 Merge pull request #2273 from CatimaLoyalty/fix/weblate_conflict_20250109
Fix/weblate conflict 20250109
2025-01-09 18:21:14 +01:00
Edgars Andersons
cbe243feb3 Translated using Weblate (Latvian)
Currently translated at 6.2% (9 of 143 strings)

Translation: Catima/Android (Fastlane)
Translate-URL: https://hosted.weblate.org/projects/catima/fastlane/lv/
2025-01-09 17:29:39 +01:00
Joel A
ff02c59f85 Translated using Weblate (Swedish)
Currently translated at 94.8% (315 of 332 strings)

Translation: Catima/Android
Translate-URL: https://hosted.weblate.org/projects/catima/catima/sv/
2025-01-09 17:29:39 +01:00
大王叫我来巡山
3895bc1f73 Translated using Weblate (Chinese (Simplified Han script))
Currently translated at 100.0% (143 of 143 strings)

Translation: Catima/Android (Fastlane)
Translate-URL: https://hosted.weblate.org/projects/catima/fastlane/zh_Hans/
2025-01-09 17:29:39 +01:00
ikanakova
cd0cce532a Translated using Weblate (Czech)
Currently translated at 100.0% (143 of 143 strings)

Translation: Catima/Android (Fastlane)
Translate-URL: https://hosted.weblate.org/projects/catima/fastlane/cs/
2025-01-09 17:29:39 +01:00
Максим Горпиніч
3fdf6693d2 Translated using Weblate (Ukrainian)
Currently translated at 100.0% (143 of 143 strings)

Translation: Catima/Android (Fastlane)
Translate-URL: https://hosted.weblate.org/projects/catima/fastlane/uk/
2025-01-09 17:29:39 +01:00
solokot
d2be344700 Translated using Weblate (Russian)
Currently translated at 100.0% (143 of 143 strings)

Translation: Catima/Android (Fastlane)
Translate-URL: https://hosted.weblate.org/projects/catima/fastlane/ru/
2025-01-09 17:29:39 +01:00
B o d o
9bd2898678 Translated using Weblate (German)
Currently translated at 100.0% (143 of 143 strings)

Translation: Catima/Android (Fastlane)
Translate-URL: https://hosted.weblate.org/projects/catima/fastlane/de/
2025-01-09 17:29:39 +01:00
Sylvia van Os
07f2348a6d Merge pull request #2270 from weblate/weblate-catima-catima
Translations update from Hosted Weblate
2025-01-08 17:29:55 +01:00
Sylvia van Os
ddd1c1a516 Merge pull request #2269 from CatimaLoyalty/create-pull-request/patch-1736289127
Update Fastlane changelogs
2025-01-07 23:32:20 +01:00
TheLastProject
8de76e3c52 Update Fastlane changelogs 2025-01-07 22:32:07 +00:00
Sylvia van Os
6ea2645e9d Update CHANGELOG 2025-01-07 23:31:40 +01:00
Sylvia van Os
ed166b1b33 Merge pull request #2268 from CatimaLoyalty/fix/incorrectSoftInputModes
Ensure save button stays pressable while keyboard is visible in edit screen
2025-01-07 23:29:59 +01:00
Sylvia van Os
2dd53a5300 Ensure save button stays pressable while keyboard is visible in edit screen
Also cleans up some other unnecessary windowSoftInputMode configurations
left over from years ago
2025-01-07 23:12:11 +01:00
ikanakova
97f9120acf Translated using Weblate (Czech)
Currently translated at 100.0% (142 of 142 strings)

Translation: Catima/Android (Fastlane)
Translate-URL: https://hosted.weblate.org/projects/catima/fastlane/cs/
2025-01-07 19:54:10 +01:00
Sylvia van Os
dd29be75f2 Merge pull request #2266 from weblate/weblate-catima-catima
Translations update from Hosted Weblate
2025-01-07 19:11:39 +01:00
Sylvia van Os
fa87df2ed8 Merge pull request #2267 from CatimaLoyalty/create-pull-request/patch-1736269587
Update Fastlane changelogs
2025-01-07 18:06:56 +01:00
TheLastProject
1fb94de809 Update Fastlane changelogs 2025-01-07 17:06:26 +00:00
Sylvia van Os
0e18e84c8f Update CHANGELOG 2025-01-07 18:06:11 +01:00
Sylvia van Os
0ba2261033 Merge pull request #2263 from CatimaLoyalty/fix/sdk35
Android 15 (SDK 35) support
2025-01-07 18:05:35 +01:00
ikanakova
703ebf9418 Translated using Weblate (Czech)
Currently translated at 100.0% (142 of 142 strings)

Translation: Catima/Android (Fastlane)
Translate-URL: https://hosted.weblate.org/projects/catima/fastlane/cs/
2025-01-07 18:03:24 +01:00
Sylvia van Os
ff08dbe5d5 Android 15 (SDK 35) support 2025-01-04 15:20:07 +01:00
Sylvia van Os
3003a10550 Merge pull request #2261 from CatimaLoyalty/dependabot/github_actions/peter-evans/create-pull-request-7.0.6
Bump peter-evans/create-pull-request from 7.0.5 to 7.0.6
2024-12-30 11:47:11 +01:00
dependabot[bot]
f95be6cc71 Bump peter-evans/create-pull-request from 7.0.5 to 7.0.6
Bumps [peter-evans/create-pull-request](https://github.com/peter-evans/create-pull-request) from 7.0.5 to 7.0.6.
- [Release notes](https://github.com/peter-evans/create-pull-request/releases)
- [Commits](https://github.com/peter-evans/create-pull-request/compare/v7.0.5...v7.0.6)

---
updated-dependencies:
- dependency-name: peter-evans/create-pull-request
  dependency-type: direct:production
  update-type: version-update:semver-patch
...

Signed-off-by: dependabot[bot] <support@github.com>
2024-12-30 02:49:57 +00:00
Sylvia van Os
23bc40e630 Merge pull request #2260 from weblate/weblate-catima-catima
Translations update from Hosted Weblate
2024-12-29 12:26:53 +01:00
Jiri Grönroos
45c47674fb Translated using Weblate (Finnish)
Currently translated at 100.0% (332 of 332 strings)

Translation: Catima/Android
Translate-URL: https://hosted.weblate.org/projects/catima/catima/fi/
2024-12-29 11:01:14 +00:00
David
cf1d1a8122 Translated using Weblate (French)
Currently translated at 100.0% (142 of 142 strings)

Translation: Catima/Android (Fastlane)
Translate-URL: https://hosted.weblate.org/projects/catima/fastlane/fr/
2024-12-29 11:01:13 +00:00
Sylvia van Os
45d2629863 Merge pull request #2259 from CatimaLoyalty/create-pull-request/patch-1735445907
Update contributors
2024-12-29 09:19:29 +01:00
TheLastProject
f6b0736bbf Update contributors 2024-12-29 04:18:27 +00:00
Sylvia van Os
83f9a2bcc9 Release Catima 2.34.2 2024-12-26 19:59:09 +01:00
Sylvia van Os
1b817222f0 Merge pull request #2256 from weblate/weblate-catima-catima
Translations update from Hosted Weblate
2024-12-26 19:57:45 +01:00
Edgars Andersons
50db796a47 Translated using Weblate (Latvian)
Currently translated at 5.6% (8 of 142 strings)

Translation: Catima/Android (Fastlane)
Translate-URL: https://hosted.weblate.org/projects/catima/fastlane/lv/
2024-12-26 19:48:28 +01:00
Doctorredits_here
f2f7fe3151 Translated using Weblate (Indonesian)
Currently translated at 100.0% (332 of 332 strings)

Translation: Catima/Android
Translate-URL: https://hosted.weblate.org/projects/catima/catima/id/
2024-12-26 19:48:28 +01:00
大王叫我来巡山
90293b90fb Translated using Weblate (Chinese (Simplified Han script))
Currently translated at 100.0% (142 of 142 strings)

Translation: Catima/Android (Fastlane)
Translate-URL: https://hosted.weblate.org/projects/catima/fastlane/zh_Hans/
2024-12-26 19:48:27 +01:00
Максим Горпиніч
f1751eaebf Translated using Weblate (Ukrainian)
Currently translated at 100.0% (142 of 142 strings)

Translation: Catima/Android (Fastlane)
Translate-URL: https://hosted.weblate.org/projects/catima/fastlane/uk/
2024-12-26 19:48:25 +01:00
solokot
19a3aa0b86 Translated using Weblate (Russian)
Currently translated at 100.0% (142 of 142 strings)

Translation: Catima/Android (Fastlane)
Translate-URL: https://hosted.weblate.org/projects/catima/fastlane/ru/
2024-12-26 19:48:22 +01:00
B o d o
a3b901e357 Translated using Weblate (German)
Currently translated at 100.0% (142 of 142 strings)

Translation: Catima/Android (Fastlane)
Translate-URL: https://hosted.weblate.org/projects/catima/fastlane/de/
2024-12-26 19:48:19 +01:00
solokot
fbe12cfadc Translated using Weblate (Russian)
Currently translated at 100.0% (332 of 332 strings)

Translation: Catima/Android
Translate-URL: https://hosted.weblate.org/projects/catima/catima/ru/
2024-12-26 19:48:17 +01:00
Sylvia van Os
3ffbf11902 Merge pull request #2255 from CatimaLoyalty/create-pull-request/patch-1735164841
Update Fastlane changelogs
2024-12-25 23:14:22 +01:00
TheLastProject
5c3b32a6ee Update Fastlane changelogs 2024-12-25 22:14:00 +00:00
Sylvia van Os
36267b8255 Update CHANGELOG 2024-12-25 23:13:47 +01:00
Sylvia van Os
668c9b0d76 Merge pull request #2253 from CatimaLoyalty/fix/2249
Improve star and archive display
2024-12-25 23:13:08 +01:00
Sylvia van Os
eebbe6dec8 Improve star and archive display
By improving the icons to all have a small border, they will be visible
on every background and we can severely simplify the code
2024-12-25 21:06:15 +01:00
Sylvia van Os
a84ae51a4f Merge pull request #2251 from weblate/weblate-catima-catima
Translations update from Hosted Weblate
2024-12-24 15:46:49 +01:00
Peter Dave Hello
bdbb977233 Translated using Weblate (Chinese (Traditional Han script))
Currently translated at 100.0% (332 of 332 strings)

Translation: Catima/Android
Translate-URL: https://hosted.weblate.org/projects/catima/catima/zh_Hant/
2024-12-24 15:00:28 +01:00
Sylvia van Os
ac27cc6a1e Merge pull request #2238 from CatimaLoyalty/feature/flavours
Start using flavours
2024-12-24 14:47:29 +01:00
Sylvia van Os
91551bf4e8 Start using flavours
Currently, this just allows us to remove the donation button on Google
Play without using the deprecated installer APIs.

In the future, this should allow us to also release multiple versions of
Catima (for example: WearOS is a commonly requested feature, but this
needs non-free dependencies, which may not be okay to all users).
2024-12-24 14:33:35 +01:00
Sylvia van Os
e8c11debfd Merge pull request #2247 from CatimaLoyalty/dependabot/gradle/com.android.tools-desugar_jdk_libs-2.1.4
Bump com.android.tools:desugar_jdk_libs from 2.1.3 to 2.1.4
2024-12-23 11:46:40 +01:00
Sylvia van Os
e29a1c659f Merge pull request #2246 from CatimaLoyalty/dependabot/github_actions/actions/upload-artifact-4.5.0
Bump actions/upload-artifact from 4.4.3 to 4.5.0
2024-12-23 11:45:31 +01:00
dependabot[bot]
d66bf0e3fd Bump com.android.tools:desugar_jdk_libs from 2.1.3 to 2.1.4
Bumps [com.android.tools:desugar_jdk_libs](https://github.com/google/desugar_jdk_libs) from 2.1.3 to 2.1.4.
- [Changelog](https://github.com/google/desugar_jdk_libs/blob/master/CHANGELOG.md)
- [Commits](https://github.com/google/desugar_jdk_libs/commits)

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

Signed-off-by: dependabot[bot] <support@github.com>
2024-12-23 02:16:11 +00:00
dependabot[bot]
172b71dd00 Bump actions/upload-artifact from 4.4.3 to 4.5.0
Bumps [actions/upload-artifact](https://github.com/actions/upload-artifact) from 4.4.3 to 4.5.0.
- [Release notes](https://github.com/actions/upload-artifact/releases)
- [Commits](https://github.com/actions/upload-artifact/compare/v4.4.3...v4.5.0)

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

Signed-off-by: dependabot[bot] <support@github.com>
2024-12-23 02:11:36 +00:00
Sylvia van Os
10ce432c97 Merge pull request #2244 from weblate/weblate-catima-catima
Translations update from Hosted Weblate
2024-12-22 12:55:42 +01:00
Sylvia van Os
3299a8dca3 Merge pull request #2245 from CatimaLoyalty/create-pull-request/patch-1734841042
Update contributors
2024-12-22 11:44:56 +01:00
TheLastProject
5dca8bc5d2 Update contributors 2024-12-22 04:17:21 +00:00
grgergo
1b8f8704f5 Translated using Weblate (Hungarian)
Currently translated at 100.0% (332 of 332 strings)

Translation: Catima/Android
Translate-URL: https://hosted.weblate.org/projects/catima/catima/hu/
2024-12-22 02:38:39 +01:00
Deleted User
64e801311b Translated using Weblate (German)
Currently translated at 100.0% (141 of 141 strings)

Translation: Catima/Android (Fastlane)
Translate-URL: https://hosted.weblate.org/projects/catima/fastlane/de/
2024-12-22 02:38:39 +01:00
Sylvia van Os
da8202b4e1 Merge pull request #2242 from CatimaLoyalty/create-pull-request/patch-1734762145
Update Gradle to 8.12
2024-12-21 21:26:13 +01:00
Sylvia van Os
72d70f1265 Merge pull request #2243 from weblate/weblate-catima-catima
Translations update from Hosted Weblate
2024-12-21 20:42:01 +01:00
Edgars Andersons
660597e89a Translated using Weblate (Latvian)
Currently translated at 4.9% (7 of 141 strings)

Translation: Catima/Android (Fastlane)
Translate-URL: https://hosted.weblate.org/projects/catima/fastlane/lv/
2024-12-21 09:00:52 +01:00
Edgars Andersons
4a48ac8797 Translated using Weblate (Latvian)
Currently translated at 100.0% (332 of 332 strings)

Translation: Catima/Android
Translate-URL: https://hosted.weblate.org/projects/catima/catima/lv/
2024-12-21 09:00:51 +01:00
TheLastProject
4c61c19e4f Update Gradle to 8.12 2024-12-21 06:22:24 +00:00
Sylvia van Os
bb3b13364c Merge pull request #2237 from weblate/weblate-catima-catima
Translations update from Hosted Weblate
2024-12-18 19:18:07 +01:00
Sylvia van Os
b34bb65f79 Translated using Weblate (Tamil)
Currently translated at 100.0% (332 of 332 strings)

Translation: Catima/Android
Translate-URL: https://hosted.weblate.org/projects/catima/catima/ta/
2024-12-18 19:00:02 +01:00
தமிழ்நேரம்
a7cfb4b68f Translated using Weblate (Tamil)
Currently translated at 100.0% (332 of 332 strings)

Translation: Catima/Android
Translate-URL: https://hosted.weblate.org/projects/catima/catima/ta/
2024-12-18 16:00:34 +01:00
Trond Kjetil Bremnes
8d58a6192d Translated using Weblate (Norwegian Bokmål)
Currently translated at 100.0% (332 of 332 strings)

Translation: Catima/Android
Translate-URL: https://hosted.weblate.org/projects/catima/catima/nb_NO/
2024-12-18 16:00:33 +01:00
Sylvia van Os
1da34ceda4 Merge pull request #2236 from weblate/weblate-catima-catima
Translations update from Hosted Weblate
2024-12-17 18:59:58 +01:00
தமிழ்நேரம்
dc31b7e839 Translated using Weblate (Tamil)
Currently translated at 93.9% (312 of 332 strings)

Translation: Catima/Android
Translate-URL: https://hosted.weblate.org/projects/catima/catima/ta/
2024-12-17 00:00:38 +01:00
Priit Jõerüüt
5c6ee7b787 Translated using Weblate (Estonian)
Currently translated at 4.2% (6 of 141 strings)

Translation: Catima/Android (Fastlane)
Translate-URL: https://hosted.weblate.org/projects/catima/fastlane/et/
2024-12-17 00:00:36 +01:00
Nguyen Duc Tri Thuc
5620a62cad Translated using Weblate (Vietnamese)
Currently translated at 11.3% (16 of 141 strings)

Translation: Catima/Android (Fastlane)
Translate-URL: https://hosted.weblate.org/projects/catima/fastlane/vi/
2024-12-17 00:00:34 +01:00
Sylvia van Os
429abb4914 Merge pull request #2234 from CatimaLoyalty/create-pull-request/patch-1734236299
Update contributors
2024-12-15 09:54:00 +01:00
Sylvia van Os
f90d33daf7 Merge pull request #2235 from CatimaLoyalty/weblate
Weblate
2024-12-15 09:52:55 +01:00
தமிழ்நேரம்
baa67cf9f4 Translated using Weblate (Tamil)
Currently translated at 99.6% (331 of 332 strings)

Translation: Catima/Android
Translate-URL: https://hosted.weblate.org/projects/catima/catima/ta/
2024-12-15 09:44:55 +01:00
Isard Sabut
4054269db3 Translated using Weblate (Catalan)
Currently translated at 18.9% (63 of 332 strings)

Translation: Catima/Android
Translate-URL: https://hosted.weblate.org/projects/catima/catima/ca/
2024-12-15 09:44:35 +01:00
Augustin LAVILLE
559b8d00dd Translated using Weblate (French)
Currently translated at 99.2% (140 of 141 strings)

Translation: Catima/Android (Fastlane)
Translate-URL: https://hosted.weblate.org/projects/catima/fastlane/fr/
2024-12-15 09:44:35 +01:00
Максим Горпиніч
9b9c19586f Translated using Weblate (Ukrainian)
Currently translated at 100.0% (332 of 332 strings)

Translation: Catima/Android
Translate-URL: https://hosted.weblate.org/projects/catima/catima/uk/
2024-12-15 09:44:35 +01:00
Augustin LAVILLE
a3407734a7 Translated using Weblate (French)
Currently translated at 100.0% (332 of 332 strings)

Translation: Catima/Android
Translate-URL: https://hosted.weblate.org/projects/catima/catima/fr/
2024-12-15 09:44:35 +01:00
TheLastProject
99c579ee51 Update contributors 2024-12-15 04:18:18 +00:00
Sylvia van Os
81bc7db43e Merge pull request #2232 from CatimaLoyalty/create-pull-request/patch-1734181312
Update feature graphic
2024-12-14 14:08:58 +01:00
Sylvia van Os
117e08d957 Merge pull request #2231 from CatimaLoyalty/feature/sans_feature_graphics
Use Sans fonts for app name
2024-12-14 14:08:43 +01:00
TheLastProject
89356dac50 Update feature graphic 2024-12-14 13:01:51 +00:00
Sylvia van Os
c7bf1f5f30 Use Sans fonts for app name
Sans could be "friendlier". This also fixes the new zh-TW picture not
showing up
2024-12-14 13:59:29 +01:00
Sylvia van Os
1a7a2d31f4 Merge pull request #2229 from weblate/weblate-catima-catima
Translations update from Hosted Weblate
2024-12-14 12:47:04 +01:00
Sylvia van Os
8fd4335a98 Delete invalid translations
Incorrectly formatted XML will crash the app.
2024-12-14 12:07:59 +01:00
தமிழ்நேரம்
6b4b0e846b Translated using Weblate (Tamil)
Currently translated at 99.6% (331 of 332 strings)

Translation: Catima/Android
Translate-URL: https://hosted.weblate.org/projects/catima/catima/ta/
2024-12-13 23:02:26 +01:00
josé m
451fa87990 Translated using Weblate (Galician)
Currently translated at 4.2% (6 of 141 strings)

Translation: Catima/Android (Fastlane)
Translate-URL: https://hosted.weblate.org/projects/catima/fastlane/gl/
2024-12-13 23:02:26 +01:00
josé m
2c50c2b48c Translated using Weblate (Galician)
Currently translated at 100.0% (332 of 332 strings)

Translation: Catima/Android
Translate-URL: https://hosted.weblate.org/projects/catima/catima/gl/
2024-12-13 23:02:26 +01:00
Robin Syl
8b9c26ad5a Translated using Weblate (Chinese (Traditional Han script))
Currently translated at 85.1% (120 of 141 strings)

Translation: Catima/Android (Fastlane)
Translate-URL: https://hosted.weblate.org/projects/catima/fastlane/zh_Hant/
2024-12-13 23:02:26 +01:00
Robin Syl
ef7db55d8c Translated using Weblate (Chinese (Traditional Han script))
Currently translated at 99.0% (329 of 332 strings)

Translation: Catima/Android
Translate-URL: https://hosted.weblate.org/projects/catima/catima/zh_Hant/
2024-12-13 23:02:26 +01:00
大王叫我来巡山
8f2d39d0ec Translated using Weblate (Chinese (Simplified Han script))
Currently translated at 100.0% (141 of 141 strings)

Translation: Catima/Android (Fastlane)
Translate-URL: https://hosted.weblate.org/projects/catima/fastlane/zh_Hans/
2024-12-13 23:02:26 +01:00
Maxine Clementine Caulfield
3597e3098f Translated using Weblate (Czech)
Currently translated at 100.0% (141 of 141 strings)

Translation: Catima/Android (Fastlane)
Translate-URL: https://hosted.weblate.org/projects/catima/fastlane/cs/
2024-12-13 23:02:26 +01:00
solokot
0702fc579c Translated using Weblate (Russian)
Currently translated at 100.0% (141 of 141 strings)

Translation: Catima/Android (Fastlane)
Translate-URL: https://hosted.weblate.org/projects/catima/fastlane/ru/
2024-12-13 23:02:26 +01:00
B o d o
017cf19d27 Translated using Weblate (German)
Currently translated at 100.0% (141 of 141 strings)

Translation: Catima/Android (Fastlane)
Translate-URL: https://hosted.weblate.org/projects/catima/fastlane/de/
2024-12-13 23:02:26 +01:00
Dawid
83a3a5b9e2 Translated using Weblate (Polish)
Currently translated at 100.0% (332 of 332 strings)

Translation: Catima/Android
Translate-URL: https://hosted.weblate.org/projects/catima/catima/pl/
2024-12-13 23:02:26 +01:00
Maxine Clementine Caulfield
54828c3c93 Translated using Weblate (Czech)
Currently translated at 100.0% (332 of 332 strings)

Translation: Catima/Android
Translate-URL: https://hosted.weblate.org/projects/catima/catima/cs/
2024-12-13 23:02:25 +01:00
Sylvia van Os
31e517d7ee Merge pull request #2227 from CatimaLoyalty/create-pull-request/patch-1734118019
Update locales
2024-12-13 21:43:23 +01:00
TheLastProject
00957ac576 Update locales 2024-12-13 19:26:59 +00:00
Sylvia van Os
852c38d88d Merge pull request #2226 from weblate/weblate-catima-catima
Translations update from Hosted Weblate
2024-12-13 20:26:44 +01:00
Максим Горпиніч
67314b09a9 Translated using Weblate (Ukrainian)
Currently translated at 100.0% (141 of 141 strings)

Translation: Catima/Android (Fastlane)
Translate-URL: https://hosted.weblate.org/projects/catima/fastlane/uk/
2024-12-12 21:39:09 +01:00
B o d o
944e2ca0c0 Translated using Weblate (German)
Currently translated at 100.0% (141 of 141 strings)

Translation: Catima/Android (Fastlane)
Translate-URL: https://hosted.weblate.org/projects/catima/fastlane/de/
2024-12-12 21:39:09 +01:00
Dawid
68564864d5 Translated using Weblate (Polish)
Currently translated at 99.6% (331 of 332 strings)

Translation: Catima/Android
Translate-URL: https://hosted.weblate.org/projects/catima/catima/pl/
2024-12-12 21:39:09 +01:00
Sylvia van Os
19bccc0c82 Release Catima 2.34.1 2024-12-12 17:27:24 +01:00
Sylvia van Os
04905edab4 Merge pull request #2224 from CatimaLoyalty/create-pull-request/patch-1734020723
Update Fastlane changelogs
2024-12-12 17:25:36 +01:00
Sylvia van Os
179a9adbe5 Merge pull request #2222 from CatimaLoyalty/create-pull-request/patch-1734019804
Update locales
2024-12-12 17:25:23 +01:00
TheLastProject
3925a79158 Update Fastlane changelogs 2024-12-12 16:25:22 +00:00
Sylvia van Os
71de6f8c99 Update CHANGELOG 2024-12-12 17:25:07 +01:00
Sylvia van Os
9d81ca5c9b Merge pull request #2223 from CatimaLoyalty/fix/crashOnInvalidPkpassFile
Fix crash when trying to load invalid pkpass file
2024-12-12 17:24:08 +01:00
Sylvia van Os
75c393af92 Fix crash when trying to load invalid pkpass file 2024-12-12 17:13:49 +01:00
TheLastProject
3e16515b6c Update locales 2024-12-12 16:10:04 +00:00
Sylvia van Os
3e9857f14f Merge pull request #2221 from weblate/weblate-catima-catima
Translations update from Hosted Weblate
2024-12-12 17:09:38 +01:00
தமிழ்நேரம்
20ee7c9324 Added translation using Weblate (Tamil) 2024-12-12 16:29:00 +01:00
Hamza Mohamed
fa6ee155ac Translated using Weblate (Arabic)
Currently translated at 99.6% (331 of 332 strings)

Translation: Catima/Android
Translate-URL: https://hosted.weblate.org/projects/catima/catima/ar/
2024-12-12 01:01:11 +01:00
goknarbahceli
c186e53eab Translated using Weblate (Turkish)
Currently translated at 70.7% (99 of 140 strings)

Translation: Catima/Android (Fastlane)
Translate-URL: https://hosted.weblate.org/projects/catima/fastlane/tr/
2024-12-12 01:01:09 +01:00
goknarbahceli
75abd6f80c Translated using Weblate (Turkish)
Currently translated at 100.0% (332 of 332 strings)

Translation: Catima/Android
Translate-URL: https://hosted.weblate.org/projects/catima/catima/tr/
2024-12-12 01:01:08 +01:00
Sylvia van Os
0a98e6154c Update Fastlane 2024-12-11 17:11:13 +01:00
Sylvia van Os
c2b31fad43 Release Catima 2.34.0 2024-12-10 18:53:36 +01:00
Sylvia van Os
2043dffc10 Merge pull request #2218 from weblate/weblate-catima-catima
Translations update from Hosted Weblate
2024-12-10 18:52:41 +01:00
Sylvia van Os
244aabcc1a Translated using Weblate (Hindi)
Currently translated at 94.5% (314 of 332 strings)

Translation: Catima/Android
Translate-URL: https://hosted.weblate.org/projects/catima/catima/hi/
2024-12-10 18:44:54 +01:00
Miguel Mota
a1faed8717 Translated using Weblate (Portuguese (Portugal))
Currently translated at 100.0% (332 of 332 strings)

Translation: Catima/Android
Translate-URL: https://hosted.weblate.org/projects/catima/catima/pt_PT/
2024-12-10 18:36:55 +01:00
Arun Arya
fcf9176523 Translated using Weblate (Hindi)
Currently translated at 94.5% (314 of 332 strings)

Translation: Catima/Android
Translate-URL: https://hosted.weblate.org/projects/catima/catima/hi/
2024-12-10 18:36:55 +01:00
Sylvia van Os
30db9e3cd6 Translated using Weblate (Dutch)
Currently translated at 100.0% (332 of 332 strings)

Translation: Catima/Android
Translate-URL: https://hosted.weblate.org/projects/catima/catima/nl/
2024-12-10 18:36:55 +01:00
Kamborio
fb3df0ff4d Translated using Weblate (Spanish)
Currently translated at 100.0% (332 of 332 strings)

Translation: Catima/Android
Translate-URL: https://hosted.weblate.org/projects/catima/catima/es/
2024-12-10 18:36:54 +01:00
Priit Jõerüüt
9b4b48e6e3 Translated using Weblate (Estonian)
Currently translated at 100.0% (332 of 332 strings)

Translation: Catima/Android
Translate-URL: https://hosted.weblate.org/projects/catima/catima/et/
2024-12-09 22:01:11 +01:00
Edgars Andersons
9a9cdaff09 Translated using Weblate (Latvian)
Currently translated at 3.5% (5 of 140 strings)

Translation: Catima/Android (Fastlane)
Translate-URL: https://hosted.weblate.org/projects/catima/fastlane/lv/
2024-12-09 22:01:10 +01:00
Edgars Andersons
3a82efcf6f Translated using Weblate (Latvian)
Currently translated at 100.0% (332 of 332 strings)

Translation: Catima/Android
Translate-URL: https://hosted.weblate.org/projects/catima/catima/lv/
2024-12-09 22:01:10 +01:00
이정희
7c2d08b06f Translated using Weblate (Korean)
Currently translated at 100.0% (140 of 140 strings)

Translation: Catima/Android (Fastlane)
Translate-URL: https://hosted.weblate.org/projects/catima/fastlane/ko/
2024-12-09 22:01:09 +01:00
이정희
aebe84c2cd Translated using Weblate (Korean)
Currently translated at 100.0% (332 of 332 strings)

Translation: Catima/Android
Translate-URL: https://hosted.weblate.org/projects/catima/catima/ko/
2024-12-09 22:01:08 +01:00
solokot
3768f0ebcf Translated using Weblate (Russian)
Currently translated at 100.0% (332 of 332 strings)

Translation: Catima/Android
Translate-URL: https://hosted.weblate.org/projects/catima/catima/ru/
2024-12-09 22:01:07 +01:00
Sylvia van Os
8f7d527c21 Translated using Weblate (Dutch)
Currently translated at 99.3% (330 of 332 strings)

Translation: Catima/Android
Translate-URL: https://hosted.weblate.org/projects/catima/catima/nl/
2024-12-09 22:01:07 +01:00
Giovanni Donisi
54ec5ee0d0 Translated using Weblate (Italian)
Currently translated at 100.0% (332 of 332 strings)

Translation: Catima/Android
Translate-URL: https://hosted.weblate.org/projects/catima/catima/it/
2024-12-09 22:01:06 +01:00
Sylvia van Os
dccb244c8f Merge pull request #2216 from weblate/weblate-catima-catima
Translations update from Hosted Weblate
2024-12-08 21:55:56 +01:00
Asmodeus
a37084af1a Translated using Weblate (Portuguese (Brazil))
Currently translated at 100.0% (332 of 332 strings)

Translation: Catima/Android
Translate-URL: https://hosted.weblate.org/projects/catima/catima/pt_BR/
2024-12-08 21:01:46 +01:00
109247019824
af0a7ae89b Translated using Weblate (Bulgarian)
Currently translated at 100.0% (332 of 332 strings)

Translation: Catima/Android
Translate-URL: https://hosted.weblate.org/projects/catima/catima/bg/
2024-12-08 21:01:45 +01:00
大王叫我来巡山
315cbab4be Translated using Weblate (Chinese (Simplified Han script))
Currently translated at 100.0% (140 of 140 strings)

Translation: Catima/Android (Fastlane)
Translate-URL: https://hosted.weblate.org/projects/catima/fastlane/zh_Hans/
2024-12-08 21:01:44 +01:00
大王叫我来巡山
bc3830d685 Translated using Weblate (Chinese (Simplified Han script))
Currently translated at 100.0% (332 of 332 strings)

Translation: Catima/Android
Translate-URL: https://hosted.weblate.org/projects/catima/catima/zh_Hans/
2024-12-08 21:01:43 +01:00
Максим Горпиніч
4893d28bb0 Translated using Weblate (Ukrainian)
Currently translated at 100.0% (140 of 140 strings)

Translation: Catima/Android (Fastlane)
Translate-URL: https://hosted.weblate.org/projects/catima/fastlane/uk/
2024-12-08 21:01:42 +01:00
solokot
2a7670e19d Translated using Weblate (Russian)
Currently translated at 100.0% (140 of 140 strings)

Translation: Catima/Android (Fastlane)
Translate-URL: https://hosted.weblate.org/projects/catima/fastlane/ru/
2024-12-08 21:01:41 +01:00
Vasilis K
86e6a1bb2d Translated using Weblate (Greek)
Currently translated at 100.0% (332 of 332 strings)

Translation: Catima/Android
Translate-URL: https://hosted.weblate.org/projects/catima/catima/el/
2024-12-08 21:01:40 +01:00
Sylvia van Os
d1d3f95dfe Merge pull request #2215 from CatimaLoyalty/create-pull-request/patch-1733631542
Update contributors
2024-12-08 14:51:30 +01:00
TheLastProject
ebfc90e998 Update contributors 2024-12-08 04:19:02 +00:00
Sylvia van Os
704db9eb46 Merge pull request #2214 from weblate/weblate-catima-catima
Translations update from Hosted Weblate
2024-12-07 20:23:11 +01:00
B o d o
3557870d34 Translated using Weblate (German)
Currently translated at 100.0% (140 of 140 strings)

Translation: Catima/Android (Fastlane)
Translate-URL: https://hosted.weblate.org/projects/catima/fastlane/de/
2024-12-07 18:41:43 +01:00
Sylvia van Os
59354c7251 Translated using Weblate (Ukrainian)
Currently translated at 100.0% (332 of 332 strings)

Translation: Catima/Android
Translate-URL: https://hosted.weblate.org/projects/catima/catima/uk/
2024-12-07 18:41:41 +01:00
B o d o
cae25599f8 Translated using Weblate (German)
Currently translated at 100.0% (332 of 332 strings)

Translation: Catima/Android
Translate-URL: https://hosted.weblate.org/projects/catima/catima/de/
2024-12-07 18:41:41 +01:00
109247019824
e89eb46f79 Translated using Weblate (Bulgarian)
Currently translated at 100.0% (332 of 332 strings)

Translation: Catima/Android
Translate-URL: https://hosted.weblate.org/projects/catima/catima/bg/
2024-12-07 18:25:36 +01:00
Максим Горпиніч
039b433d0a Translated using Weblate (Ukrainian)
Currently translated at 100.0% (332 of 332 strings)

Translation: Catima/Android
Translate-URL: https://hosted.weblate.org/projects/catima/catima/uk/
2024-12-07 18:25:29 +01:00
Vasilis K
0319d16f2b Translated using Weblate (Greek)
Currently translated at 100.0% (332 of 332 strings)

Translation: Catima/Android
Translate-URL: https://hosted.weblate.org/projects/catima/catima/el/
2024-12-07 18:25:29 +01:00
Sylvia van Os
f11c45d169 Merge pull request #2213 from CatimaLoyalty/create-pull-request/patch-1733591941
Update Fastlane changelogs
2024-12-07 18:19:24 +01:00
TheLastProject
572c0fea4a Update Fastlane changelogs 2024-12-07 17:19:01 +00:00
Sylvia van Os
5e9d364e5e Update CHANGELOG 2024-12-07 18:18:47 +01:00
Sylvia van Os
57d62fdb29 Merge pull request #2212 from weblate/weblate-catima-catima
Translations update from Hosted Weblate
2024-12-07 17:44:35 +01:00
summoner001
0c7332396b Translated using Weblate (Hungarian)
Currently translated at 97.8% (322 of 329 strings)

Translation: Catima/Android
Translate-URL: https://hosted.weblate.org/projects/catima/catima/hu/
2024-12-07 17:36:35 +01:00
Renko
7bdca36f53 Translated using Weblate (Romanian)
Currently translated at 99.0% (326 of 329 strings)

Translation: Catima/Android
Translate-URL: https://hosted.weblate.org/projects/catima/catima/ro/
2024-12-07 17:36:35 +01:00
Sylvia van Os
f8a8a84f1e Merge pull request #2038 from CatimaLoyalty/feature/pkpass2024
Add Pkpass parser
2024-12-07 17:33:50 +01:00
Sylvia van Os
8009baca26 Remove unnecessary image load from storage calls
The LoyaltyCard object itself loads the images itself
2024-12-07 15:23:07 +01:00
Sylvia van Os
e0786594bc Load images on request
This prevents loading the front and back images when scrolling through
the loyalty card list and should allow scaling to more images/files more
easily
2024-12-07 15:23:07 +01:00
Sylvia van Os
7fe67960bf Move TaskHandler to ViewModel
This should make it possible to properly cancel the running barcode
generation threads on rotation and prevent CPU rising on many rotations.
2024-12-07 15:23:07 +01:00
Sylvia van Os
83fca93649 Use ViewModel to prevent hammering storage
When you turn a LoyaltyCard into a bundle, it writes the files to
storage as it can't otherwise fit in the limited storage size. This
means that, on rotation, you write all images to storage and load them
again. Using a ViewModel prevents that storage hit due to holding it in
memory (as a ViewModel has a longer lifecycle).
2024-12-07 15:23:07 +01:00
Sylvia van Os
96a9850d9c Delete old cache files on startup 2024-12-07 15:23:07 +01:00
Sylvia van Os
1cb9ddecac Support for returning images from PkpassParser 2024-12-07 15:23:07 +01:00
Sylvia van Os
f7697ce8bf Support opening supported barcode files directly 2024-12-07 15:23:07 +01:00
Sylvia van Os
9358348795 Add option to share pkpass file to Catima 2024-12-07 15:23:07 +01:00
Sylvia van Os
711ca1e761 Add option to load pkpass from ScanActivity 2024-12-07 15:23:07 +01:00
Sylvia van Os
8eeff0058b Refactor ScanActivity result code (use ParseResult) 2024-12-07 15:23:07 +01:00
Sylvia van Os
ea456c6d80 Add Pkpass parser 2024-12-07 15:23:05 +01:00
Sylvia van Os
3bdc06b5b4 Merge pull request #2211 from weblate/weblate-catima-catima
Translations update from Hosted Weblate
2024-12-07 11:53:00 +01:00
inesre
2c9fbfcae8 Translated using Weblate (Spanish)
Currently translated at 47.8% (67 of 140 strings)

Translation: Catima/Android (Fastlane)
Translate-URL: https://hosted.weblate.org/projects/catima/fastlane/es/
2024-12-06 23:01:06 +00:00
solokot
e4a28f9fc9 Translated using Weblate (Russian)
Currently translated at 100.0% (329 of 329 strings)

Translation: Catima/Android
Translate-URL: https://hosted.weblate.org/projects/catima/catima/ru/
2024-12-06 23:01:05 +00:00
Sylvia van Os
630bf14387 Merge pull request #2210 from CatimaLoyalty/fix/transparentThumbnails3
Fix background colour for shortcuts
2024-12-05 19:01:09 +01:00
Sylvia van Os
4dd85f845e Fix background colour for shortcuts 2024-12-05 18:52:27 +01:00
Sylvia van Os
8382d1975b Merge pull request #2209 from weblate/weblate-catima-catima
Translations update from Hosted Weblate
2024-12-04 17:50:58 +01:00
大王叫我来巡山
4d4cac6a9e Translated using Weblate (Chinese (Simplified Han script))
Currently translated at 100.0% (140 of 140 strings)

Translation: Catima/Android (Fastlane)
Translate-URL: https://hosted.weblate.org/projects/catima/fastlane/zh_Hans/
2024-12-04 17:15:30 +01:00
solokot
5bd276a32d Translated using Weblate (Russian)
Currently translated at 100.0% (140 of 140 strings)

Translation: Catima/Android (Fastlane)
Translate-URL: https://hosted.weblate.org/projects/catima/fastlane/ru/
2024-12-04 17:15:29 +01:00
Sylvia van Os
e31ad60d32 Merge pull request #2207 from weblate/weblate-catima-catima
Translations update from Hosted Weblate
2024-12-03 21:02:12 +01:00
Nguyen Duc Tri Thuc
f511b29fcb Translated using Weblate (Vietnamese)
Currently translated at 10.7% (15 of 140 strings)

Translation: Catima/Android (Fastlane)
Translate-URL: https://hosted.weblate.org/projects/catima/fastlane/vi/
2024-12-03 19:09:57 +00:00
Nguyen Duc Tri Thuc
158abdb96c Translated using Weblate (Vietnamese)
Currently translated at 100.0% (329 of 329 strings)

Translation: Catima/Android
Translate-URL: https://hosted.weblate.org/projects/catima/catima/vi/
2024-12-03 19:09:57 +00:00
Sylvia van Os
959f6770dd Translated using Weblate (Latvian)
Currently translated at 100.0% (329 of 329 strings)

Translation: Catima/Android
Translate-URL: https://hosted.weblate.org/projects/catima/catima/lv/
2024-12-03 19:09:56 +00:00
Максим Горпиніч
c429fef56d Translated using Weblate (Ukrainian)
Currently translated at 100.0% (140 of 140 strings)

Translation: Catima/Android (Fastlane)
Translate-URL: https://hosted.weblate.org/projects/catima/fastlane/uk/
2024-12-03 19:09:55 +00:00
Kachelkaiser
4ce8d293f4 Translated using Weblate (German)
Currently translated at 100.0% (140 of 140 strings)

Translation: Catima/Android (Fastlane)
Translate-URL: https://hosted.weblate.org/projects/catima/fastlane/de/
2024-12-03 19:09:55 +00:00
Edgars Andersons
ef9b28671b Translated using Weblate (Latvian)
Currently translated at 100.0% (1 of 1 strings)

Translation: Catima/Android (Debug)
Translate-URL: https://hosted.weblate.org/projects/catima/android-debug/lv/
2024-12-03 19:09:54 +00:00
Edgars Andersons
e3afaa1d49 Translated using Weblate (Latvian)
Currently translated at 100.0% (329 of 329 strings)

Translation: Catima/Android
Translate-URL: https://hosted.weblate.org/projects/catima/catima/lv/
2024-12-03 19:09:54 +00:00
Lassi Määttä
094e6951d0 Translated using Weblate (Finnish)
Currently translated at 3.5% (5 of 140 strings)

Translation: Catima/Android (Fastlane)
Translate-URL: https://hosted.weblate.org/projects/catima/fastlane/fi/
2024-12-03 19:09:53 +00:00
Sylvia van Os
73f33e238c Merge pull request #2206 from CatimaLoyalty/dependabot/gradle/com.android.application-8.7.3
Bump com.android.application from 8.7.2 to 8.7.3
2024-12-03 19:59:38 +01:00
Sylvia van Os
d1b8051771 Merge pull request #2205 from CatimaLoyalty/fix/transparentThumbnails2
Make thumbnails in edit view consistent with card view
2024-12-03 16:38:51 +00:00
dependabot[bot]
17fd6db65f Bump com.android.application from 8.7.2 to 8.7.3
Bumps com.android.application from 8.7.2 to 8.7.3.

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

Signed-off-by: dependabot[bot] <support@github.com>
2024-12-03 02:50:05 +00:00
Sylvia van Os
e6345bc2fe Make thumbnails in edit view consistent with card view
Commit 88c1dd1bc6 changed the behaviour of
the background colour of the thumbnails, but the edit view still used
the old behaviour. This creates more consistency.
2024-12-03 00:33:21 +01:00
Sylvia van Os
208b1a2eba Merge pull request #2204 from CatimaLoyalty/dependabot/gradle/com.github.yalantis-ucrop-2.2.10
Bump com.github.yalantis:ucrop from 2.2.9 to 2.2.10
2024-12-02 21:18:36 +00:00
dependabot[bot]
b796425551 Bump com.github.yalantis:ucrop from 2.2.9 to 2.2.10
Bumps [com.github.yalantis:ucrop](https://github.com/Yalantis/uCrop) from 2.2.9 to 2.2.10.
- [Release notes](https://github.com/Yalantis/uCrop/releases)
- [Commits](https://github.com/Yalantis/uCrop/compare/2.2.9...2.2.10)

---
updated-dependencies:
- dependency-name: com.github.yalantis:ucrop
  dependency-type: direct:production
  update-type: version-update:semver-patch
...

Signed-off-by: dependabot[bot] <support@github.com>
2024-12-02 02:05:16 +00:00
Sylvia van Os
425a9f9a57 Merge pull request #2203 from CatimaLoyalty/create-pull-request/patch-1733026828
Update contributors
2024-12-01 09:51:18 +00:00
TheLastProject
3701c1f2cb Update contributors 2024-12-01 04:20:28 +00:00
Sylvia van Os
7a5233ed1a Merge pull request #2202 from CatimaLoyalty/create-pull-request/patch-1732976710
Update Fastlane changelogs
2024-11-30 15:23:09 +00:00
TheLastProject
5df349c118 Update Fastlane changelogs 2024-11-30 14:25:09 +00:00
Sylvia van Os
f97da3afcb Update CHANGELOG 2024-11-30 15:24:55 +01:00
Sylvia van Os
d997759ccf Merge pull request #2201 from CatimaLoyalty/fix/transparentThumbnails
Use black/white background colour instead of dominant colour for images
2024-11-30 10:34:20 +00:00
Sylvia van Os
5e710ba424 Merge pull request #2200 from weblate/weblate-catima-catima
Translations update from Hosted Weblate
2024-11-29 16:44:03 +00:00
Sylvia van Os
88c1dd1bc6 Use black/white background colour instead of dominant colour for images
This severely reduces the risk of a transparent PNG being put on a
background which is the same colour as the logo
2024-11-29 17:37:03 +01:00
Ricky Tigg
b63fbfa4c6 Translated using Weblate (Finnish)
Currently translated at 100.0% (1 of 1 strings)

Translation: Catima/Android (Debug)
Translate-URL: https://hosted.weblate.org/projects/catima/android-debug/fi/
2024-11-29 10:00:45 +01:00
mingyee2
565b441444 Translated using Weblate (Chinese (Traditional Han script))
Currently translated at 100.0% (329 of 329 strings)

Translation: Catima/Android
Translate-URL: https://hosted.weblate.org/projects/catima/catima/zh_Hant/
2024-11-29 10:00:44 +01:00
Greg
6900cf3475 Translated using Weblate (Polish)
Currently translated at 99.6% (328 of 329 strings)

Translation: Catima/Android
Translate-URL: https://hosted.weblate.org/projects/catima/catima/pl/
2024-11-29 10:00:43 +01:00
Sylvia van Os
2c0c63aad4 Merge pull request #2196 from weblate/weblate-catima-catima
Translations update from Hosted Weblate
2024-11-27 16:44:21 +00:00
Doctorredits_here
b48e6f2437 Translated using Weblate (Indonesian)
Currently translated at 100.0% (329 of 329 strings)

Translation: Catima/Android
Translate-URL: https://hosted.weblate.org/projects/catima/catima/id/
2024-11-27 11:00:32 +01:00
Trond Kjetil Bremnes
37b4096713 Translated using Weblate (Norwegian Bokmål)
Currently translated at 100.0% (329 of 329 strings)

Translation: Catima/Android
Translate-URL: https://hosted.weblate.org/projects/catima/catima/nb_NO/
2024-11-27 11:00:31 +01:00
Sylvia van Os
7a0894e4d2 Merge pull request #2194 from CatimaLoyalty/create-pull-request/patch-1732641808
Update feature graphic
2024-11-26 17:30:21 +00:00
TheLastProject
e6f8c29078 Update feature graphic 2024-11-26 17:23:27 +00:00
Sylvia van Os
b1672408c3 Merge pull request #2193 from weblate/weblate-catima-catima
Translations update from Hosted Weblate
2024-11-26 17:22:14 +00:00
josé m
b79f2ae51d Translated using Weblate (Galician)
Currently translated at 2.1% (3 of 140 strings)

Translation: Catima/Android (Fastlane)
Translate-URL: https://hosted.weblate.org/projects/catima/fastlane/gl/
2024-11-26 07:00:57 +01:00
Augustin LAVILLE
2a758d2e57 Translated using Weblate (French)
Currently translated at 98.5% (138 of 140 strings)

Translation: Catima/Android (Fastlane)
Translate-URL: https://hosted.weblate.org/projects/catima/fastlane/fr/
2024-11-26 07:00:56 +01:00
Sylvia van Os
07def17334 Merge pull request #2189 from weblate/weblate-catima-catima
Translations update from Hosted Weblate
2024-11-24 20:11:40 +00:00
Sylvia van Os
1c3fb47c89 Merge pull request #2190 from CatimaLoyalty/feature/readd-fdroid
Re-add F-Droid
2024-11-24 20:02:41 +00:00
Sylvia van Os
d1e4deb7eb Re-add F-Droid 2024-11-24 20:36:24 +01:00
大王叫我来巡山
ad97571ab0 Translated using Weblate (Chinese (Simplified Han script))
Currently translated at 100.0% (140 of 140 strings)

Translation: Catima/Android (Fastlane)
Translate-URL: https://hosted.weblate.org/projects/catima/fastlane/zh_Hans/
2024-11-24 20:01:25 +01:00
Максим Горпиніч
4bbf0983c5 Translated using Weblate (Ukrainian)
Currently translated at 100.0% (140 of 140 strings)

Translation: Catima/Android (Fastlane)
Translate-URL: https://hosted.weblate.org/projects/catima/fastlane/uk/
2024-11-24 20:01:25 +01:00
solokot
13e86e5e53 Translated using Weblate (Russian)
Currently translated at 100.0% (140 of 140 strings)

Translation: Catima/Android (Fastlane)
Translate-URL: https://hosted.weblate.org/projects/catima/fastlane/ru/
2024-11-24 20:01:24 +01:00
B o d o
454070c346 Translated using Weblate (German)
Currently translated at 100.0% (140 of 140 strings)

Translation: Catima/Android (Fastlane)
Translate-URL: https://hosted.weblate.org/projects/catima/fastlane/de/
2024-11-24 20:01:24 +01:00
Sylvia van Os
10458d9975 Merge pull request #2188 from CatimaLoyalty/create-pull-request/patch-1732421879
Update contributors
2024-11-24 12:18:59 +00:00
TheLastProject
823c38c50c Update contributors 2024-11-24 04:17:58 +00:00
Sylvia van Os
a593e68ffb Merge pull request #2187 from weblate/weblate-catima-catima
Translations update from Hosted Weblate
2024-11-23 20:38:21 +00:00
Priit Jõerüüt
5ef8cf5381 Translated using Weblate (Estonian)
Currently translated at 2.8% (4 of 139 strings)

Translation: Catima/Android (Fastlane)
Translate-URL: https://hosted.weblate.org/projects/catima/fastlane/et/
2024-11-23 19:00:38 +01:00
Sebastian
db94d5bc5d Translated using Weblate (Danish)
Currently translated at 39.5% (130 of 329 strings)

Translation: Catima/Android
Translate-URL: https://hosted.weblate.org/projects/catima/catima/da/
2024-11-23 19:00:37 +01:00
Sylvia van Os
b6fe1bc2a7 Merge pull request #2186 from CatimaLoyalty/create-pull-request/patch-1732292688
Update Fastlane changelogs
2024-11-22 16:25:12 +00:00
TheLastProject
78754ca313 Update Fastlane changelogs 2024-11-22 16:24:48 +00:00
Sylvia van Os
8e8667b721 Update CHANGELOG 2024-11-22 17:24:31 +01:00
Sylvia van Os
40731104cb Merge pull request #2185 from CatimaLoyalty/dependabot/gradle/org.robolectric-robolectric-4.14.1
Bump org.robolectric:robolectric from 4.14 to 4.14.1
2024-11-22 15:56:32 +00:00
dependabot[bot]
879872202a Bump org.robolectric:robolectric from 4.14 to 4.14.1
Bumps [org.robolectric:robolectric](https://github.com/robolectric/robolectric) from 4.14 to 4.14.1.
- [Release notes](https://github.com/robolectric/robolectric/releases)
- [Commits](https://github.com/robolectric/robolectric/compare/robolectric-4.14...robolectric-4.14.1)

---
updated-dependencies:
- dependency-name: org.robolectric:robolectric
  dependency-type: direct:production
  update-type: version-update:semver-patch
...

Signed-off-by: dependabot[bot] <support@github.com>
2024-11-22 02:20:08 +00:00
Sylvia van Os
0fcf16d9d2 Merge pull request #2182 from CatimaLoyalty/fix/transparentPdf
Fix parsing PDF with transparent background
2024-11-21 20:27:58 +00:00
Sylvia van Os
23d27ab838 Merge pull request #2184 from CatimaLoyalty/create-pull-request/patch-1732170302
Update Gradle to 8.11.1
2024-11-21 17:56:04 +00:00
TheLastProject
0b4df647d1 Update Gradle to 8.11.1 2024-11-21 06:25:02 +00:00
Sylvia van Os
a74c4f822e Release Catima 2.33.0 2024-11-19 17:48:48 +01:00
Sylvia van Os
389372e8f3 Fix parsing PDF with transparent background 2024-11-18 22:03:41 +01:00
Sylvia van Os
c228d274b5 Merge pull request #2181 from CatimaLoyalty/create-pull-request/patch-1731953537
Update locales
2024-11-18 18:35:52 +00:00
TheLastProject
d8e0e03aa5 Update locales 2024-11-18 18:12:17 +00:00
Sylvia van Os
171dd7af59 Merge pull request #2179 from weblate/weblate-catima-catima
Translations update from Hosted Weblate
2024-11-18 18:12:02 +00:00
Sylvia van Os
10bf27a246 Merge pull request #2180 from CatimaLoyalty/dependabot/gradle/org.robolectric-robolectric-4.14
Bump org.robolectric:robolectric from 4.13 to 4.14
2024-11-18 06:09:35 +00:00
dependabot[bot]
199c243eb0 Bump org.robolectric:robolectric from 4.13 to 4.14
Bumps [org.robolectric:robolectric](https://github.com/robolectric/robolectric) from 4.13 to 4.14.
- [Release notes](https://github.com/robolectric/robolectric/releases)
- [Commits](https://github.com/robolectric/robolectric/compare/robolectric-4.13...robolectric-4.14)

---
updated-dependencies:
- dependency-name: org.robolectric:robolectric
  dependency-type: direct:production
  update-type: version-update:semver-minor
...

Signed-off-by: dependabot[bot] <support@github.com>
2024-11-18 02:42:36 +00:00
josé m
11b0143b1c Translated using Weblate (Galician)
Currently translated at 100.0% (1 of 1 strings)

Translation: Catima/Android (Debug)
Translate-URL: https://hosted.weblate.org/projects/catima/android-debug/gl/
2024-11-17 16:01:42 +01:00
josé m
f2e20eaea3 Added translation using Weblate (Galician) 2024-11-17 16:00:17 +01:00
josé m
c8725a4588 Translated using Weblate (Galician)
Currently translated at 100.0% (329 of 329 strings)

Translation: Catima/Android
Translate-URL: https://hosted.weblate.org/projects/catima/catima/gl/
2024-11-17 16:00:15 +01:00
josé m
f881965485 Added translation using Weblate (Galician) 2024-11-17 16:00:14 +01:00
ritchierope
3e16d0daf6 Translated using Weblate (Hungarian)
Currently translated at 97.8% (322 of 329 strings)

Translation: Catima/Android
Translate-URL: https://hosted.weblate.org/projects/catima/catima/hu/
2024-11-17 16:00:12 +01:00
Sylvia van Os
7068f57443 Merge pull request #2178 from CatimaLoyalty/create-pull-request/patch-1731817092
Update contributors
2024-11-17 11:42:06 +00:00
TheLastProject
8b611511f5 Update contributors 2024-11-17 04:18:12 +00:00
Sylvia van Os
1c9f0ee724 Merge pull request #2175 from weblate/weblate-catima-catima
Translations update from Hosted Weblate
2024-11-16 12:30:41 +00:00
Giovanni Donisi
2d816b39f6 Translated using Weblate (Italian)
Currently translated at 100.0% (329 of 329 strings)

Translation: Catima/Android
Translate-URL: https://hosted.weblate.org/projects/catima/catima/it/
2024-11-15 22:01:04 +01:00
Sylvia van Os
c0b13bf040 Merge pull request #2174 from weblate/weblate-catima-catima
Translations update from Hosted Weblate
2024-11-14 17:31:23 +00:00
B o d o
e40d98f386 Translated using Weblate (German)
Currently translated at 100.0% (139 of 139 strings)

Translation: Catima/Android (Fastlane)
Translate-URL: https://hosted.weblate.org/projects/catima/fastlane/de/
2024-11-14 18:01:34 +01:00
Sylvia van Os
8af295a72b Translated using Weblate (Dutch)
Currently translated at 100.0% (329 of 329 strings)

Translation: Catima/Android
Translate-URL: https://hosted.weblate.org/projects/catima/catima/nl/
2024-11-14 18:01:33 +01:00
Sylvia van Os
ac4dde1f8b Merge pull request #2173 from weblate/weblate-catima-catima
Translations update from Hosted Weblate
2024-11-13 16:48:00 +00:00
大王叫我来巡山
2dc87fd37c Translated using Weblate (Chinese (Simplified Han script))
Currently translated at 100.0% (139 of 139 strings)

Translation: Catima/Android (Fastlane)
Translate-URL: https://hosted.weblate.org/projects/catima/fastlane/zh_Hans/
2024-11-13 16:18:15 +01:00
Максим Горпиніч
aebceec1f6 Translated using Weblate (Ukrainian)
Currently translated at 100.0% (139 of 139 strings)

Translation: Catima/Android (Fastlane)
Translate-URL: https://hosted.weblate.org/projects/catima/fastlane/uk/
2024-11-13 16:18:15 +01:00
solokot
95b59a9cc3 Translated using Weblate (Russian)
Currently translated at 100.0% (139 of 139 strings)

Translation: Catima/Android (Fastlane)
Translate-URL: https://hosted.weblate.org/projects/catima/fastlane/ru/
2024-11-13 16:18:15 +01:00
B o d o
4ff72b66a8 Translated using Weblate (German)
Currently translated at 100.0% (139 of 139 strings)

Translation: Catima/Android (Fastlane)
Translate-URL: https://hosted.weblate.org/projects/catima/fastlane/de/
2024-11-13 16:18:15 +01:00
Sylvia van Os
d1162d0272 Merge pull request #2172 from weblate/weblate-catima-catima
Translations update from Hosted Weblate
2024-11-12 17:37:25 +00:00
Sylvia van Os
794ac2bab2 Merge pull request #2171 from CatimaLoyalty/create-pull-request/patch-1731392619
Update Gradle to 8.11
2024-11-12 17:36:13 +00:00
Lassi Määttä
7b76fe86b2 Translated using Weblate (Finnish)
Currently translated at 100.0% (329 of 329 strings)

Translation: Catima/Android
Translate-URL: https://hosted.weblate.org/projects/catima/catima/fi/
2024-11-12 14:00:36 +01:00
TheLastProject
4387c7ed1e Update Gradle to 8.11 2024-11-12 06:23:38 +00:00
Sylvia van Os
f819fc7db9 Merge pull request #2170 from CatimaLoyalty/create-pull-request/patch-1731347745
Update Fastlane changelogs
2024-11-11 17:57:33 +00:00
TheLastProject
fb5a882fdb Update Fastlane changelogs 2024-11-11 17:55:44 +00:00
Sylvia van Os
be8c0a6787 Update CHANGELOG 2024-11-11 18:55:31 +01:00
Sylvia van Os
5dc84fbd77 Merge pull request #2169 from CatimaLoyalty/fix/note_line_limit
Limit max line count to 5 on main view
2024-11-11 17:54:33 +00:00
Sylvia van Os
0c37827fb0 Limit max line count to 5 on main view
This prevents cards with very long notes to take up the entire screen or
more. This effect is worse with more columns.
2024-11-11 18:43:30 +01:00
Sylvia van Os
cee5d39b27 Merge pull request #2168 from CatimaLoyalty/fix/shorter_date_on_main_screen
Use MEDIUM instead of FULL date format on main screen
2024-11-11 17:21:07 +00:00
Sylvia van Os
9c5603eae6 Use MEDIUM instead of FULL date format on main screen
This improves the display of high column counts
2024-11-11 17:50:14 +01:00
Sylvia van Os
dd42c99ca7 Merge pull request #2167 from CatimaLoyalty/create-pull-request/patch-1731212204
Update contributors
2024-11-10 10:42:11 +00:00
TheLastProject
403c60ec6c Update contributors 2024-11-10 04:16:44 +00:00
Sylvia van Os
7c7e6d3b45 Merge pull request #2166 from weblate/weblate-catima-catima
Translations update from Hosted Weblate
2024-11-09 21:20:07 +00:00
大王叫我来巡山
316e51efb2 Translated using Weblate (Chinese (Simplified Han script))
Currently translated at 100.0% (139 of 139 strings)

Translation: Catima/Android (Fastlane)
Translate-URL: https://hosted.weblate.org/projects/catima/fastlane/zh_Hans/
2024-11-09 20:01:50 +01:00
Максим Горпиніч
9e838e266b Translated using Weblate (Ukrainian)
Currently translated at 100.0% (139 of 139 strings)

Translation: Catima/Android (Fastlane)
Translate-URL: https://hosted.weblate.org/projects/catima/fastlane/uk/
2024-11-09 20:01:49 +01:00
solokot
a56b984c53 Translated using Weblate (Russian)
Currently translated at 100.0% (139 of 139 strings)

Translation: Catima/Android (Fastlane)
Translate-URL: https://hosted.weblate.org/projects/catima/fastlane/ru/
2024-11-09 20:01:48 +01:00
B o d o
4040b270a8 Translated using Weblate (German)
Currently translated at 100.0% (139 of 139 strings)

Translation: Catima/Android (Fastlane)
Translate-URL: https://hosted.weblate.org/projects/catima/fastlane/de/
2024-11-09 20:01:47 +01:00
Sylvia van Os
eab8614bcc Merge pull request #2165 from weblate/weblate-catima-catima
Translations update from Hosted Weblate
2024-11-08 18:36:27 +00:00
kowih83264
ef8befe0cd Translated using Weblate (Portuguese (Brazil))
Currently translated at 100.0% (329 of 329 strings)

Translation: Catima/Android
Translate-URL: https://hosted.weblate.org/projects/catima/catima/pt_BR/
2024-11-08 19:00:56 +01:00
gallegonovato
860b79fc9b Translated using Weblate (Spanish)
Currently translated at 100.0% (329 of 329 strings)

Translation: Catima/Android
Translate-URL: https://hosted.weblate.org/projects/catima/catima/es/
2024-11-08 19:00:55 +01:00
Sylvia van Os
93341fc4ec Merge pull request #2164 from CatimaLoyalty/dependabot/gradle/com.android.tools-desugar_jdk_libs-2.1.3
Bump com.android.tools:desugar_jdk_libs from 2.1.2 to 2.1.3
2024-11-08 16:59:02 +00:00
dependabot[bot]
51f123bc41 Bump com.android.tools:desugar_jdk_libs from 2.1.2 to 2.1.3
Bumps [com.android.tools:desugar_jdk_libs](https://github.com/google/desugar_jdk_libs) from 2.1.2 to 2.1.3.
- [Changelog](https://github.com/google/desugar_jdk_libs/blob/master/CHANGELOG.md)
- [Commits](https://github.com/google/desugar_jdk_libs/commits)

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

Signed-off-by: dependabot[bot] <support@github.com>
2024-11-08 02:24:08 +00:00
Sylvia van Os
f0512fbeca Merge pull request #2162 from CatimaLoyalty/create-pull-request/patch-1730917344
Update Fastlane changelogs
2024-11-06 18:22:51 +00:00
TheLastProject
71f6fcd2e6 Update Fastlane changelogs 2024-11-06 18:22:24 +00:00
Sylvia van Os
d1a244efa0 Update CHANGELOG 2024-11-06 19:22:10 +01:00
Sylvia van Os
075478db17 Merge pull request #2092 from vp193dt/main
#1962: Refactoring of Search Behavior: Restoring of Previous Search Query After Coming Back from Card Interaction or Screen Rotation on Search
2024-11-06 18:21:08 +00:00
vp193dt
6f4582eec9 Refactoring of Search Behavior: Restoring of Previous Search Query After Coming Back from Card Interaction or Screen Rotation on Search 2024-11-06 19:12:01 +01:00
Sylvia van Os
91f5f9a8b4 Merge pull request #2161 from weblate/weblate-catima-catima
Translations update from Hosted Weblate
2024-11-06 17:03:05 +00:00
Marnick L'Eau
f04adc0901 Translated using Weblate (Dutch)
Currently translated at 51.7% (72 of 139 strings)

Translation: Catima/Android (Fastlane)
Translate-URL: https://hosted.weblate.org/projects/catima/fastlane/nl/
2024-11-06 13:01:02 +01:00
Augustin LAVILLE
f184ee7e58 Translated using Weblate (French)
Currently translated at 99.2% (138 of 139 strings)

Translation: Catima/Android (Fastlane)
Translate-URL: https://hosted.weblate.org/projects/catima/fastlane/fr/
2024-11-06 13:01:01 +01:00
min7-i
9abeec578e Translated using Weblate (German)
Currently translated at 100.0% (329 of 329 strings)

Translation: Catima/Android
Translate-URL: https://hosted.weblate.org/projects/catima/catima/de/
2024-11-06 13:01:00 +01:00
Sylvia van Os
8deab5f94f Merge pull request #2160 from weblate/weblate-catima-catima
Translations update from Hosted Weblate
2024-11-05 18:53:00 +00:00
Priit Jõerüüt
50fca74267 Translated using Weblate (Estonian)
Currently translated at 100.0% (329 of 329 strings)

Translation: Catima/Android
Translate-URL: https://hosted.weblate.org/projects/catima/catima/et/
2024-11-05 12:36:58 +01:00
Davi Souza
9e7bf97cc9 Translated using Weblate (Portuguese (Portugal))
Currently translated at 100.0% (329 of 329 strings)

Translation: Catima/Android
Translate-URL: https://hosted.weblate.org/projects/catima/catima/pt_PT/
2024-11-05 12:36:58 +01:00
Hasan Cesur
96be72b4c6 Translated using Weblate (Turkish)
Currently translated at 100.0% (329 of 329 strings)

Translation: Catima/Android
Translate-URL: https://hosted.weblate.org/projects/catima/catima/tr/
2024-11-05 12:36:58 +01:00
Kristoffer Grundström
5c31ac6d00 Translated using Weblate (Swedish)
Currently translated at 5.0% (7 of 139 strings)

Translation: Catima/Android (Fastlane)
Translate-URL: https://hosted.weblate.org/projects/catima/fastlane/sv/
2024-11-05 12:36:57 +01:00
Kristoffer Grundström
1675d591dd Translated using Weblate (Swedish)
Currently translated at 95.4% (314 of 329 strings)

Translation: Catima/Android
Translate-URL: https://hosted.weblate.org/projects/catima/catima/sv/
2024-11-05 12:36:57 +01:00
109247019824
361495dfed Translated using Weblate (Bulgarian)
Currently translated at 100.0% (329 of 329 strings)

Translation: Catima/Android
Translate-URL: https://hosted.weblate.org/projects/catima/catima/bg/
2024-11-05 12:36:57 +01:00
大王叫我来巡山
2b81e861f6 Translated using Weblate (Chinese (Simplified Han script))
Currently translated at 100.0% (139 of 139 strings)

Translation: Catima/Android (Fastlane)
Translate-URL: https://hosted.weblate.org/projects/catima/fastlane/zh_Hans/
2024-11-05 12:36:57 +01:00
大王叫我来巡山
657a761c3a Translated using Weblate (Chinese (Simplified Han script))
Currently translated at 100.0% (329 of 329 strings)

Translation: Catima/Android
Translate-URL: https://hosted.weblate.org/projects/catima/catima/zh_Hans/
2024-11-05 12:36:55 +01:00
Максим Горпиніч
6d401c4234 Translated using Weblate (Ukrainian)
Currently translated at 100.0% (139 of 139 strings)

Translation: Catima/Android (Fastlane)
Translate-URL: https://hosted.weblate.org/projects/catima/fastlane/uk/
2024-11-05 12:36:55 +01:00
solokot
8a33d2e5ed Translated using Weblate (Russian)
Currently translated at 100.0% (139 of 139 strings)

Translation: Catima/Android (Fastlane)
Translate-URL: https://hosted.weblate.org/projects/catima/fastlane/ru/
2024-11-05 12:36:53 +01:00
B o d o
66e994be60 Translated using Weblate (German)
Currently translated at 100.0% (139 of 139 strings)

Translation: Catima/Android (Fastlane)
Translate-URL: https://hosted.weblate.org/projects/catima/fastlane/de/
2024-11-05 12:36:52 +01:00
Максим Горпиніч
4e50ca9340 Translated using Weblate (Ukrainian)
Currently translated at 100.0% (329 of 329 strings)

Translation: Catima/Android
Translate-URL: https://hosted.weblate.org/projects/catima/catima/uk/
2024-11-05 12:36:50 +01:00
solokot
af064d1cda Translated using Weblate (Russian)
Currently translated at 100.0% (329 of 329 strings)

Translation: Catima/Android
Translate-URL: https://hosted.weblate.org/projects/catima/catima/ru/
2024-11-05 12:36:50 +01:00
Marnick L'Eau
585c444f2d Translated using Weblate (Dutch)
Currently translated at 97.8% (322 of 329 strings)

Translation: Catima/Android
Translate-URL: https://hosted.weblate.org/projects/catima/catima/nl/
2024-11-05 12:36:49 +01:00
Augustin LAVILLE
85683a0b3f Translated using Weblate (French)
Currently translated at 100.0% (329 of 329 strings)

Translation: Catima/Android
Translate-URL: https://hosted.weblate.org/projects/catima/catima/fr/
2024-11-05 12:36:49 +01:00
Vasilis K
4c7aa2b26b Translated using Weblate (Greek)
Currently translated at 100.0% (329 of 329 strings)

Translation: Catima/Android
Translate-URL: https://hosted.weblate.org/projects/catima/catima/el/
2024-11-05 12:36:49 +01:00
B o d o
af236e1099 Translated using Weblate (German)
Currently translated at 100.0% (329 of 329 strings)

Translation: Catima/Android
Translate-URL: https://hosted.weblate.org/projects/catima/catima/de/
2024-11-05 12:36:49 +01:00
Sylvia van Os
79f6014e26 Merge pull request #2157 from CatimaLoyalty/create-pull-request/patch-1730607506
Update contributors
2024-11-03 08:28:03 +00:00
TheLastProject
0fa3de40ba Update contributors 2024-11-03 04:18:25 +00:00
Sylvia van Os
d77f938107 Merge pull request #2155 from CatimaLoyalty/create-pull-request/patch-1730584271
Update Fastlane changelogs
2024-11-02 21:54:41 +00:00
TheLastProject
e44aaa6618 Update Fastlane changelogs 2024-11-02 21:51:10 +00:00
Sylvia van Os
96d88bb08c Update CHANGELOG 2024-11-02 22:50:53 +01:00
Sylvia van Os
b502f89da6 Merge pull request #2147 from leaumar/feat/1952-columns
resolve #1952 custom column count
2024-11-02 21:47:48 +00:00
Sylvia van Os
d7b8cd7e03 More consistant naming and column edge case bugfix for shortcut picker 2024-11-02 13:45:25 +01:00
Sylvia van Os
61681bdc2b Set default card columns to 4 on big screens 2024-11-01 22:36:12 +01:00
Sylvia van Os
dc65030a63 Padding fixes to ensure the cards scale well without changing text size in LoyaltyCardViewActivity 2024-11-01 22:35:33 +01:00
Sylvia van Os
328c110a97 General cleanups 2024-11-01 22:32:05 +01:00
Sylvia van Os
0b7cd32209 Merge pull request #2152 from CatimaLoyalty/dependabot/gradle/com.android.application-8.7.2
Bump com.android.application from 8.7.1 to 8.7.2
2024-11-01 19:25:10 +00:00
Sylvia van Os
b1c0ab74d7 Merge pull request #2151 from weblate/weblate-catima-catima
Translations update from Hosted Weblate
2024-11-01 19:25:00 +00:00
Marnes
faee01cde2 implement #1952: better values between portrait and landscape 2024-11-01 18:51:26 +01:00
Marnes
6f456437f7 implement #1952: custom column count 2024-11-01 18:27:41 +01:00
Marnes
1b0fd94a8c misc. linting 2024-11-01 18:27:33 +01:00
dependabot[bot]
268d04841f Bump com.android.application from 8.7.1 to 8.7.2
Bumps com.android.application from 8.7.1 to 8.7.2.

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

Signed-off-by: dependabot[bot] <support@github.com>
2024-11-01 03:00:22 +00:00
大王叫我来巡山
9408ac5d9f Translated using Weblate (Chinese (Simplified Han script))
Currently translated at 100.0% (138 of 138 strings)

Translation: Catima/Android (Fastlane)
Translate-URL: https://hosted.weblate.org/projects/catima/fastlane/zh_Hans/
2024-11-01 02:02:45 +01:00
Sylvia van Os
45d2b6206e Merge pull request #2149 from CatimaLoyalty/dependabot/gradle/androidx.constraintlayout-constraintlayout-2.2.0
Bump androidx.constraintlayout:constraintlayout from 2.1.4 to 2.2.0
2024-10-31 16:49:45 +00:00
dependabot[bot]
a943fdcc5a Bump androidx.constraintlayout:constraintlayout from 2.1.4 to 2.2.0
Bumps androidx.constraintlayout:constraintlayout from 2.1.4 to 2.2.0.

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

Signed-off-by: dependabot[bot] <support@github.com>
2024-10-31 02:18:56 +00:00
Sylvia van Os
06e02f0b0f Update fastlane 2024-10-30 19:42:10 +01:00
Sylvia van Os
5b29dc66a9 Merge pull request #2148 from weblate/weblate-catima-catima
Translations update from Hosted Weblate
2024-10-30 18:38:23 +00:00
大王叫我来巡山
5187916fd3 Translated using Weblate (Chinese (Simplified Han script))
Currently translated at 100.0% (138 of 138 strings)

Translation: Catima/Android (Fastlane)
Translate-URL: https://hosted.weblate.org/projects/catima/fastlane/zh_Hans/
2024-10-30 18:10:54 +00:00
Максим Горпиніч
d6e444c6e9 Translated using Weblate (Ukrainian)
Currently translated at 100.0% (138 of 138 strings)

Translation: Catima/Android (Fastlane)
Translate-URL: https://hosted.weblate.org/projects/catima/fastlane/uk/
2024-10-30 18:10:54 +00:00
solokot
59f4ef1091 Translated using Weblate (Russian)
Currently translated at 100.0% (138 of 138 strings)

Translation: Catima/Android (Fastlane)
Translate-URL: https://hosted.weblate.org/projects/catima/fastlane/ru/
2024-10-30 18:10:53 +00:00
B o d o
bab1b3e9df Translated using Weblate (German)
Currently translated at 100.0% (138 of 138 strings)

Translation: Catima/Android (Fastlane)
Translate-URL: https://hosted.weblate.org/projects/catima/fastlane/de/
2024-10-30 18:10:53 +00:00
Kachelkaiser
4e8cbdc93b Translated using Weblate (German)
Currently translated at 100.0% (138 of 138 strings)

Translation: Catima/Android (Fastlane)
Translate-URL: https://hosted.weblate.org/projects/catima/fastlane/de/
2024-10-30 18:10:52 +00:00
Vasilis K
d3e5c5b335 Translated using Weblate (Greek)
Currently translated at 100.0% (315 of 315 strings)

Translation: Catima/Android
Translate-URL: https://hosted.weblate.org/projects/catima/catima/el/
2024-10-30 18:10:51 +00:00
Sylvia van Os
2b4b38ddc6 Merge pull request #2145 from weblate/weblate-catima-catima
Translations update from Hosted Weblate
2024-10-29 17:25:47 +00:00
B o d o
d3e6d775e8 Translated using Weblate (German)
Currently translated at 100.0% (138 of 138 strings)

Translation: Catima/Android (Fastlane)
Translate-URL: https://hosted.weblate.org/projects/catima/fastlane/de/
2024-10-29 17:18:28 +00:00
Sylvia van Os
ecf3b57679 Release Catima 2.32.1 2024-10-29 18:18:09 +01:00
Sylvia van Os
115981ecc6 Merge pull request #2144 from weblate/weblate-catima-catima
Translations update from Hosted Weblate
2024-10-29 16:44:32 +00:00
大王叫我来巡山
009f297f59 Translated using Weblate (Chinese (Simplified Han script))
Currently translated at 100.0% (137 of 137 strings)

Translation: Catima/Android (Fastlane)
Translate-URL: https://hosted.weblate.org/projects/catima/fastlane/zh_Hans/
2024-10-29 16:36:14 +00:00
Максим Горпиніч
f539fb1acf Translated using Weblate (Ukrainian)
Currently translated at 100.0% (137 of 137 strings)

Translation: Catima/Android (Fastlane)
Translate-URL: https://hosted.weblate.org/projects/catima/fastlane/uk/
2024-10-29 16:36:14 +00:00
solokot
297e1e79c2 Translated using Weblate (Russian)
Currently translated at 100.0% (137 of 137 strings)

Translation: Catima/Android (Fastlane)
Translate-URL: https://hosted.weblate.org/projects/catima/fastlane/ru/
2024-10-29 16:36:13 +00:00
B o d o
d8a95d9d48 Translated using Weblate (German)
Currently translated at 100.0% (137 of 137 strings)

Translation: Catima/Android (Fastlane)
Translate-URL: https://hosted.weblate.org/projects/catima/fastlane/de/
2024-10-29 16:36:13 +00:00
Vasilis K
1d8e87981b Translated using Weblate (Greek)
Currently translated at 100.0% (315 of 315 strings)

Translation: Catima/Android
Translate-URL: https://hosted.weblate.org/projects/catima/catima/el/
2024-10-29 16:36:12 +00:00
Sylvia van Os
5c97f9c89a Merge pull request #2143 from CatimaLoyalty/create-pull-request/patch-1730153137
Update Fastlane changelogs
2024-10-28 23:03:04 +00:00
TheLastProject
a3b02d775c Update Fastlane changelogs 2024-10-28 22:05:37 +00:00
Sylvia van Os
a83b01b0f4 Update CHANGELOG 2024-10-28 23:05:24 +01:00
Sylvia van Os
4be1d76869 Merge pull request #2142 from CatimaLoyalty/fix/2141
Fix text wrapping on add dialog
2024-10-28 22:04:19 +00:00
Sylvia van Os
15a6924894 Fix text wrapping on add dialog 2024-10-28 22:50:55 +01:00
295 changed files with 5033 additions and 1456 deletions

View File

@@ -30,39 +30,45 @@ jobs:
runs-on: ubuntu-latest
strategy:
matrix:
api-level: [ 21, 34 ]
flavor: [Foss, Gplay]
steps:
- uses: actions/checkout@v4.2.2
- 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
- uses: gradle/actions/wrapper-validation@v4
- name: set up OpenJDK 17
run: |
sudo apt-get update
sudo apt-get install -y openjdk-17-jdk-headless
sudo update-alternatives --auto java
- name: Build
run: ./gradlew assembleRelease
- name: Check lint
run: ./gradlew lintRelease
- name: Run unit tests
run: timeout 5m ./gradlew testReleaseUnitTest || { ./gradlew --stop && timeout 5m ./gradlew testReleaseUnitTest; }
- 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
uses: ReactiveCircus/android-emulator-runner@v2
with:
api-level: ${{ matrix.api-level }}
arch: x86_64
script: ./gradlew connectedCheck
- name: SpotBugs
run: ./gradlew spotbugsRelease
- name: Archive test results
if: always()
uses: actions/upload-artifact@v4.4.3
with:
name: test-results-api${{ matrix.api-level }}
path: app/build/reports
- uses: actions/checkout@v4.2.2
- 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
- uses: gradle/actions/wrapper-validation@v4
- name: set up OpenJDK 17
run: |
sudo apt-get update
sudo apt-get install -y openjdk-17-jdk-headless
sudo update-alternatives --auto java
- name: Build
run: ./gradlew assemble${{ matrix.flavor }}Release
- name: Check lint
run: ./gradlew lint${{ matrix.flavor }}Release
- name: Run unit tests
run: timeout 5m ./gradlew test${{ matrix.flavor }}ReleaseUnitTest || { ./gradlew --stop && timeout 5m ./gradlew test${{ matrix.flavor }}ReleaseUnitTest; }
- 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 21)
uses: ReactiveCircus/android-emulator-runner@v2
with:
api-level: 21
arch: x86_64
script: ./gradlew connected${{ matrix.flavor }}DebugAndroidTest
- name: Run instrumented tests (API 34)
uses: ReactiveCircus/android-emulator-runner@v2
with:
api-level: 34
arch: x86_64
script: ./gradlew connected${{ matrix.flavor }}DebugAndroidTest
- name: SpotBugs
run: ./gradlew spotbugs${{ matrix.flavor }}Release
- name: Archive test results
if: always()
uses: actions/upload-artifact@v4.6.1
with:
name: test-results-flavor${{ matrix.flavor }}
path: app/build/reports

View File

@@ -29,13 +29,13 @@ jobs:
id: checkout
uses: actions/checkout@v4.2.2
- name: Setup Python
uses: actions/setup-python@v5.3.0
uses: actions/setup-python@v5.4.0
with:
python-version: '3.x'
- name: Run converter script
run: python .scripts/changelog_to_fastlane.py
- name: Create Pull Request
uses: peter-evans/create-pull-request@v7.0.5
uses: peter-evans/create-pull-request@v7.0.7
with:
title: "Update Fastlane changelogs"
commit-message: "Update Fastlane changelogs"

View File

@@ -33,7 +33,7 @@ jobs:
file_in_repo: app/src/main/res/raw/contributors.txt
min_commit_count: 5
- name: Create Pull Request
uses: peter-evans/create-pull-request@v7.0.5
uses: peter-evans/create-pull-request@v7.0.7
with:
title: "Update contributors"
commit-message: "Update contributors"

View File

@@ -29,7 +29,7 @@ jobs:
- name: Install requirements
run: |
sudo apt-get update
sudo apt-get install optipng mat2
sudo apt-get install imagemagick mat2 optipng
# Install 200 weight versions of relevant Noto (to use for languages not supported by Lexend Deca)
sudo apt-get install fonts-noto-extra fonts-noto-cjk-extra
# Custom fonts
@@ -39,7 +39,7 @@ jobs:
- name: Generate featureGraphic.png for each language
run: .scripts/generate_feature_graphic/generate_feature_graphic.sh
- name: Create Pull Request
uses: peter-evans/create-pull-request@v7.0.5
uses: peter-evans/create-pull-request@v7.0.7
with:
title: "Update feature graphic"
commit-message: "Update feature graphic"

View File

@@ -26,7 +26,7 @@ jobs:
id: gradle-update
- uses: gradle/actions/wrapper-validation@v4
- name: Create Pull Request
uses: peter-evans/create-pull-request@v7.0.5
uses: peter-evans/create-pull-request@v7.0.7
with:
title: "Update Gradle to ${{ steps.gradle-update.outputs.version }}"
commit-message: "Update Gradle to ${{ steps.gradle-update.outputs.version }}"

View File

@@ -31,7 +31,7 @@ jobs:
- name: Update locales
run: .scripts/locales.py
- name: Create Pull Request
uses: peter-evans/create-pull-request@v7.0.5
uses: peter-evans/create-pull-request@v7.0.7
with:
title: "Update locales"
commit-message: "Update locales"

3
.gitignore vendored
View File

@@ -25,3 +25,6 @@
/.bundle/
/vendor/bundle
/lib/bundler/man/
# Catima-specific
SHA256SUMS

View File

@@ -37,12 +37,12 @@ for lang in "$script_location/../../fastlane/metadata/android/"*; do
# We specifically need the Serif version because of the 200 weight
case "$(basename "$lang")" in
bg|el-GR|ru-RU|uk) sed -i "s/Lexend Deca/Noto Serif/" featureGraphic.svg ;;
hi-IN) sed -i -e "s/Yesteryear/Noto Serif Devanagari/" -e "s/Lexend Deca/Noto Serif Devanagari/" featureGraphic.svg ;;
hi-IN) sed -i -e "s/Yesteryear/Noto Sans Devanagari/" -e "s/Lexend Deca/Noto Serif Devanagari/" featureGraphic.svg ;;
ja-JP) sed -i "s/Lexend Deca/Noto Serif CJK JP/" featureGraphic.svg ;;
kn-IN) sed -i -e 's/font-size="150"/font-size="100"/' -e "s/Yesteryear/Noto Serif Kannada/" featureGraphic.svg ;;
ko) sed -i "s/Lexend Deca/Noto Serif CJK KR/" featureGraphic.svg ;;
zh-CN) sed -i "s/Lexend Deca/Noto Serif CJK SC/" featureGraphic.svg ;;
zh-TW) sed -i "s/Lexend Deca/Noto Serif CJK TC/" featureGraphic.svg ;;
zh-TW) sed -i -e "s/Yesteryear/Noto Sans CJK TC/" -e "s/Lexend Deca/Noto Serif CJK TC/" featureGraphic.svg ;;
*) ;;
esac
fi

View File

@@ -1,5 +1,41 @@
# Changelog
## v2.34.4 - 146 (2025-01-17)
- Ability to sort cards by start of validity
- Temporarily revert to targeting Android 14 to fix some UI issues
## v2.34.3 - 145 (2025-01-15)
- Target Android 15
- Fix keyboard covering save button in edit screen
- Fix some pkpass files not being detected as pkpass (application/vnd-com.apple.pkpass mime type support)
## v2.34.2 - 144 (2024-12-26)
- Improve archive/starred icon display
## v2.34.1 - 143 (2024-12-12)
- Fix crash when opening invalid pkpass files
## v2.34.0 - 142 (2024-12-10)
- Add Passbook (.pkpass) support
- Fix import of transparent PDF files
- Improve display of transparent thumbnails
## v2.33.0 - 141 (2024-11-19)
- Change default column on wide screens to 4
- Allow overriding column counts for portrait and landscape in settings
- Keep main screen search filter when rotating screen or opening a card
- Limit max length of note display on main screen
## v2.32.1 - 140 (2024-10-29)
- Fix text wrapping on add dialog
## v2.32.0 - 139 (2024-10-28)
- Option to navigate cards using the volume buttons

128
CODE_OF_CONDUCT.md Normal file
View File

@@ -0,0 +1,128 @@
# Contributor Covenant Code of Conduct
## Our Pledge
We as members, contributors, and leaders pledge to make participation in our
community a harassment-free experience for everyone, regardless of age, body
size, visible or invisible disability, ethnicity, sex characteristics, gender
identity and expression, level of experience, education, socio-economic status,
nationality, personal appearance, race, religion, or sexual identity
and orientation.
We pledge to act and interact in ways that contribute to an open, welcoming,
diverse, inclusive, and healthy community.
## Our Standards
Examples of behavior that contributes to a positive environment for our
community include:
* Demonstrating empathy and kindness toward other people
* Being respectful of differing opinions, viewpoints, and experiences
* Giving and gracefully accepting constructive feedback
* Accepting responsibility and apologizing to those affected by our mistakes,
and learning from the experience
* Focusing on what is best not just for us as individuals, but for the
overall community
Examples of unacceptable behavior include:
* The use of sexualized language or imagery, and sexual attention or
advances of any kind
* Trolling, insulting or derogatory comments, and personal or political attacks
* Public or private harassment
* Publishing others' private information, such as a physical or email
address, without their explicit permission
* Other conduct which could reasonably be considered inappropriate in a
professional setting
## Enforcement Responsibilities
Community leaders are responsible for clarifying and enforcing our standards of
acceptable behavior and will take appropriate and fair corrective action in
response to any behavior that they deem inappropriate, threatening, offensive,
or harmful.
Community leaders have the right and responsibility to remove, edit, or reject
comments, commits, code, wiki edits, issues, and other contributions that are
not aligned to this Code of Conduct, and will communicate reasons for moderation
decisions when appropriate.
## Scope
This Code of Conduct applies within all community spaces, and also applies when
an individual is officially representing the community in public spaces.
Examples of representing our community include using an official e-mail address,
posting via an official social media account, or acting as an appointed
representative at an online or offline event.
## Enforcement
Instances of abusive, harassing, or otherwise unacceptable behavior may be
reported to the community leaders responsible for enforcement at
catima.g9ex3@hackerchick.me.
All complaints will be reviewed and investigated promptly and fairly.
All community leaders are obligated to respect the privacy and security of the
reporter of any incident.
## Enforcement Guidelines
Community leaders will follow these Community Impact Guidelines in determining
the consequences for any action they deem in violation of this Code of Conduct:
### 1. Correction
**Community Impact**: Use of inappropriate language or other behavior deemed
unprofessional or unwelcome in the community.
**Consequence**: A private, written warning from community leaders, providing
clarity around the nature of the violation and an explanation of why the
behavior was inappropriate. A public apology may be requested.
### 2. Warning
**Community Impact**: A violation through a single incident or series
of actions.
**Consequence**: A warning with consequences for continued behavior. No
interaction with the people involved, including unsolicited interaction with
those enforcing the Code of Conduct, for a specified period of time. This
includes avoiding interactions in community spaces as well as external channels
like social media. Violating these terms may lead to a temporary or
permanent ban.
### 3. Temporary Ban
**Community Impact**: A serious violation of community standards, including
sustained inappropriate behavior.
**Consequence**: A temporary ban from any sort of interaction or public
communication with the community for a specified period of time. No public or
private interaction with the people involved, including unsolicited interaction
with those enforcing the Code of Conduct, is allowed during this period.
Violating these terms may lead to a permanent ban.
### 4. Permanent Ban
**Community Impact**: Demonstrating a pattern of violation of community
standards, including sustained inappropriate behavior, harassment of an
individual, or aggression toward or disparagement of classes of individuals.
**Consequence**: A permanent ban from any sort of public interaction within
the community.
## Attribution
This Code of Conduct is adapted from the [Contributor Covenant][homepage],
version 2.0, available at
https://www.contributor-covenant.org/version/2/0/code_of_conduct.html.
Community Impact Guidelines were inspired by [Mozilla's code of conduct
enforcement ladder](https://github.com/mozilla/diversity).
[homepage]: https://www.contributor-covenant.org
For answers to common questions about this code of conduct, see the FAQ at
https://www.contributor-covenant.org/faq. Translations are available at
https://www.contributor-covenant.org/translations.

View File

@@ -10,20 +10,20 @@ GEM
artifactory (3.0.17)
atomos (0.1.3)
aws-eventstream (1.3.0)
aws-partitions (1.958.0)
aws-sdk-core (3.201.3)
aws-partitions (1.1020.0)
aws-sdk-core (3.214.0)
aws-eventstream (~> 1, >= 1.3.0)
aws-partitions (~> 1, >= 1.651.0)
aws-sigv4 (~> 1.8)
aws-partitions (~> 1, >= 1.992.0)
aws-sigv4 (~> 1.9)
jmespath (~> 1, >= 1.6.1)
aws-sdk-kms (1.88.0)
aws-sdk-core (~> 3, >= 3.201.0)
aws-sdk-kms (1.96.0)
aws-sdk-core (~> 3, >= 3.210.0)
aws-sigv4 (~> 1.5)
aws-sdk-s3 (1.156.0)
aws-sdk-core (~> 3, >= 3.201.0)
aws-sdk-s3 (1.176.0)
aws-sdk-core (~> 3, >= 3.210.0)
aws-sdk-kms (~> 1)
aws-sigv4 (~> 1.5)
aws-sigv4 (1.9.0)
aws-sigv4 (1.10.1)
aws-eventstream (~> 1, >= 1.0.2)
babosa (1.0.4)
base64 (0.2.0)
@@ -38,8 +38,8 @@ GEM
domain_name (0.6.20240107)
dotenv (2.8.1)
emoji_regex (3.2.3)
excon (0.111.0)
faraday (1.10.3)
excon (0.112.0)
faraday (1.10.4)
faraday-em_http (~> 1.0)
faraday-em_synchrony (~> 1.0)
faraday-excon (~> 1.1)
@@ -65,10 +65,10 @@ GEM
faraday-patron (1.0.0)
faraday-rack (1.0.0)
faraday-retry (1.0.3)
faraday_middleware (1.2.0)
faraday_middleware (1.2.1)
faraday (~> 1.0)
fastimage (2.3.1)
fastlane (2.222.0)
fastlane (2.226.0)
CFPropertyList (>= 2.3, < 4.0.0)
addressable (>= 2.8, < 3.0.0)
artifactory (~> 3.0)
@@ -84,6 +84,7 @@ GEM
faraday-cookie_jar (~> 0.0.6)
faraday_middleware (~> 1.0)
fastimage (>= 2.1.0, < 3.0.0)
fastlane-sirp (>= 1.0.0)
gh_inspector (>= 1.1.2, < 2.0.0)
google-apis-androidpublisher_v3 (~> 0.3)
google-apis-playcustomapp_v1 (~> 0.1)
@@ -107,8 +108,10 @@ GEM
tty-spinner (>= 0.8.0, < 1.0.0)
word_wrap (~> 1.0.0)
xcodeproj (>= 1.13.0, < 2.0.0)
xcpretty (~> 0.3.0)
xcpretty (~> 0.4.0)
xcpretty-travis-formatter (>= 0.0.3, < 2.0.0)
fastlane-sirp (1.0.0)
sysrandom (~> 1.0)
gh_inspector (1.1.3)
google-apis-androidpublisher_v3 (0.54.0)
google-apis-core (>= 0.11.0, < 2.a)
@@ -126,7 +129,7 @@ GEM
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.7.0)
google-cloud-core (1.7.1)
google-cloud-env (>= 1.0, < 3.a)
google-cloud-errors (~> 1.0)
google-cloud-env (1.6.0)
@@ -147,21 +150,21 @@ GEM
os (>= 0.9, < 2.0)
signet (>= 0.16, < 2.a)
highline (2.0.3)
http-cookie (1.0.6)
http-cookie (1.0.8)
domain_name (~> 0.5)
httpclient (2.8.3)
jmespath (1.6.2)
json (2.7.2)
jwt (2.8.2)
json (2.9.0)
jwt (2.9.3)
base64
mini_magick (4.13.2)
mini_mime (1.1.5)
multi_json (1.15.0)
multipart-post (2.4.1)
nanaimo (0.3.0)
nanaimo (0.4.0)
naturally (2.2.1)
nkf (0.2.0)
optparse (0.5.0)
optparse (0.6.0)
os (1.1.4)
plist (3.7.1)
public_suffix (6.0.1)
@@ -171,9 +174,8 @@ GEM
trailblazer-option (>= 0.1.1, < 0.2.0)
uber (< 0.2.0)
retriable (3.1.2)
rexml (3.2.9)
strscan
rouge (2.0.7)
rexml (3.3.9)
rouge (3.28.0)
ruby2_keywords (0.0.5)
rubyzip (2.3.2)
security (0.1.5)
@@ -185,7 +187,7 @@ GEM
simctl (1.6.10)
CFPropertyList
naturally
strscan (3.1.0)
sysrandom (1.0.5)
terminal-notifier (2.0.0)
terminal-table (3.0.2)
unicode-display_width (>= 1.1.1, < 3)
@@ -195,17 +197,17 @@ GEM
tty-spinner (0.9.3)
tty-cursor (~> 0.7)
uber (0.1.0)
unicode-display_width (2.5.0)
unicode-display_width (2.6.0)
word_wrap (1.0.0)
xcodeproj (1.24.0)
xcodeproj (1.27.0)
CFPropertyList (>= 2.3.3, < 4.0)
atomos (~> 0.1.3)
claide (>= 1.0.2, < 2.0)
colored2 (~> 3.1)
nanaimo (~> 0.3.0)
rexml (~> 3.2.4)
xcpretty (0.3.0)
rouge (~> 2.0.7)
nanaimo (~> 0.4.0)
rexml (>= 3.3.6, < 4.0)
xcpretty (0.4.0)
rouge (~> 3.28.0)
xcpretty-travis-formatter (1.0.1)
xcpretty (~> 0.2, >= 0.0.7)
@@ -216,4 +218,4 @@ DEPENDENCIES
fastlane
BUNDLED WITH
2.5.11
2.5.22

View File

@@ -4,6 +4,7 @@ import com.github.spotbugs.snom.SpotBugsTask
plugins {
id("com.android.application")
id("com.github.spotbugs")
id("org.jetbrains.kotlin.android")
}
spotbugs {
@@ -15,21 +16,24 @@ spotbugs {
android {
namespace = "protect.card_locker"
compileSdk = 34
compileSdk = 35
defaultConfig {
applicationId = "me.hackerchick.catima"
minSdk = 21
targetSdk = 34
versionCode = 139
versionName = "2.32.0"
versionCode = 146
versionName = "2.34.4"
vectorDrawables.useSupportLibrary = true
multiDexEnabled = true
resourceConfigurations += listOf("ar", "bg", "bn", "bn-rIN", "bs", "cs", "da", "de", "el-rGR", "en", "eo", "es", "es-rAR", "et", "fi", "fr", "he-rIL", "hi", "hr", "hu", "in-rID", "is", "it", "ja", "ko", "lt", "lv", "nb-rNO", "nl", "oc", "pl", "pt-rBR", "pt-rPT", "ro-rRO", "ru", "sk", "sl", "sr", "sv", "tr", "uk", "vi", "zh-rCN", "zh-rTW")
resourceConfigurations += listOf("ar", "bg", "bn", "bn-rIN", "bs", "cs", "da", "de", "el-rGR", "en", "eo", "es", "es-rAR", "et", "fi", "fr", "gl", "he-rIL", "hi", "hr", "hu", "in-rID", "is", "it", "ja", "ko", "lt", "lv", "nb-rNO", "nl", "oc", "pl", "pt", "pt-rBR", "pt-rPT", "ro-rRO", "ru", "sk", "sl", "sr", "sv", "ta", "tr", "uk", "vi", "zh-rCN", "zh-rTW")
testInstrumentationRunner = "androidx.test.runner.AndroidJUnitRunner"
buildConfigField("boolean", "showDonate", "true")
buildConfigField("boolean", "showRateOnGooglePlay", "false")
}
buildTypes {
@@ -50,6 +54,21 @@ android {
viewBinding = true
}
flavorDimensions.add("type")
productFlavors {
create("foss") {
dimension = "type"
isDefault = true
}
create("gplay") {
dimension = "type"
// Google doesn't allow donation links
buildConfigField("boolean", "showDonate", "false")
buildConfigField("boolean", "showRateOnGooglePlay", "true")
}
}
bundle {
language {
enableSplit = false
@@ -62,8 +81,8 @@ android {
// Flag to enable support for the new language APIs
isCoreLibraryDesugaringEnabled = true
sourceCompatibility = JavaVersion.VERSION_11
targetCompatibility = JavaVersion.VERSION_11
sourceCompatibility = JavaVersion.VERSION_17
targetCompatibility = JavaVersion.VERSION_17
}
sourceSets {
@@ -84,25 +103,26 @@ android {
lint {
lintConfig = file("lint.xml")
}
kotlinOptions {
jvmTarget = "17"
}
}
dependencies {
// AndroidX
implementation("androidx.appcompat:appcompat:1.7.0")
implementation("androidx.constraintlayout:constraintlayout:2.1.4")
implementation("androidx.exifinterface:exifinterface:1.3.7")
implementation("androidx.constraintlayout:constraintlayout:2.2.1")
implementation("androidx.core:core-ktx:1.15.0")
implementation("androidx.core:core-splashscreen:1.0.1")
implementation("androidx.exifinterface:exifinterface:1.4.0")
implementation("androidx.palette:palette:1.0.0")
implementation("androidx.preference:preference:1.2.1")
implementation("com.google.android.material:material:1.12.0")
implementation("com.github.yalantis:ucrop:2.2.9")
coreLibraryDesugaring("com.android.tools:desugar_jdk_libs:2.1.2")
// Splash Screen
implementation("androidx.core:core-splashscreen:1.0.1")
coreLibraryDesugaring("com.android.tools:desugar_jdk_libs:2.1.5")
// Third-party
implementation("com.journeyapps:zxing-android-embedded:4.3.0@aar")
implementation("com.github.yalantis:ucrop:2.2.10")
implementation("com.google.zxing:core:3.5.3")
implementation("org.apache.commons:commons-csv:1.9.0")
implementation("com.jaredrummler:colorpicker:1.1.0")
@@ -116,7 +136,7 @@ dependencies {
val junitVersion = "4.13.2"
testImplementation("androidx.test:core:$androidXTestVersion")
testImplementation("junit:junit:$junitVersion")
testImplementation("org.robolectric:robolectric:4.13")
testImplementation("org.robolectric:robolectric:4.14.1")
androidTestImplementation("androidx.test:core:$androidXTestVersion")
androidTestImplementation("junit:junit:$junitVersion")

View File

@@ -1,2 +1,4 @@
<?xml version="1.0" encoding="utf-8"?>
<resources></resources>
<resources>
<string name="app_name">Debugar Catima</string>
</resources>

View File

@@ -1,2 +1,4 @@
<?xml version="1.0" encoding="utf-8"?>
<resources></resources>
<resources>
<string name="app_name">Catima-vianmääritys</string>
</resources>

View File

@@ -0,0 +1,4 @@
<?xml version="1.0" encoding="utf-8"?>
<resources>
<string name="app_name">Depuración de Catima</string>
</resources>

View File

@@ -1,2 +1,4 @@
<?xml version="1.0" encoding="utf-8"?>
<resources></resources>
<resources>
<string name="app_name">Catima atkļūdošana</string>
</resources>

View File

@@ -40,12 +40,28 @@
<category android:name="android.intent.category.LAUNCHER" />
</intent-filter>
<intent-filter>
<action android:name="android.intent.action.SEND" />
<action android:name="android.intent.action.VIEW" />
<category android:name="android.intent.category.DEFAULT" />
<data android:scheme="content"/>
<data android:host="*"/>
<data android:mimeType="image/*" />
<data android:mimeType="application/pdf" />
<data android:mimeType="application/vnd.apple.pkpass" />
<data android:mimeType="application/vnd-com.apple.pkpass" />
<data android:mimeType="application/vnd.espass-espass" />
</intent-filter>
<intent-filter>
<action android:name="android.intent.action.SEND" />
<category android:name="android.intent.category.DEFAULT" />
<data android:mimeType="text/plain" />
<data android:mimeType="image/*" />
<data android:mimeType="application/pdf" />
<data android:mimeType="application/vnd.apple.pkpass" />
<data android:mimeType="application/vnd-com.apple.pkpass" />
<data android:mimeType="application/vnd.espass-espass" />
</intent-filter>
</activity>
<activity
@@ -63,13 +79,12 @@
<activity
android:name=".LoyaltyCardViewActivity"
android:exported="true"
android:theme="@style/AppTheme.NoActionBar"
android:windowSoftInputMode="stateHidden" />
android:theme="@style/AppTheme.NoActionBar" />
<activity
android:name=".LoyaltyCardEditActivity"
android:exported="true"
android:theme="@style/AppTheme.NoActionBar"
android:windowSoftInputMode="stateHidden">
android:windowSoftInputMode="adjustResize">
<intent-filter
android:autoVerify="true"
android:label="@string/app_name">
@@ -107,8 +122,7 @@
<activity
android:name=".BarcodeSelectorActivity"
android:label="@string/selectBarcodeTitle"
android:theme="@style/AppTheme.NoActionBar"
android:windowSoftInputMode="stateHidden" />
android:theme="@style/AppTheme.NoActionBar" />
<activity
android:name=".preferences.SettingsActivity"
android:label="@string/settings"

View File

@@ -1,147 +0,0 @@
package protect.card_locker;
import android.os.Bundle;
import android.text.Spanned;
import android.view.MenuItem;
import android.view.View;
import android.widget.ScrollView;
import android.widget.TextView;
import androidx.annotation.Nullable;
import androidx.annotation.StringRes;
import com.google.android.material.dialog.MaterialAlertDialogBuilder;
import protect.card_locker.databinding.AboutActivityBinding;
public class AboutActivity extends CatimaAppCompatActivity {
private static final String TAG = "Catima";
private AboutActivityBinding binding;
private AboutContent content;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
binding = AboutActivityBinding.inflate(getLayoutInflater());
content = new AboutContent(this);
setTitle(content.getPageTitle());
setContentView(binding.getRoot());
setSupportActionBar(binding.toolbar);
enableToolbarBackButton();
TextView copyright = binding.creditsSub;
copyright.setText(content.getCopyrightShort());
TextView versionHistory = binding.versionHistorySub;
versionHistory.setText(content.getVersionHistory());
binding.versionHistory.setTag("https://catima.app/changelog/");
binding.translate.setTag("https://hosted.weblate.org/engage/catima/");
binding.license.setTag("https://github.com/CatimaLoyalty/Android/blob/main/LICENSE");
binding.repo.setTag("https://github.com/CatimaLoyalty/Android/");
binding.privacy.setTag("https://catima.app/privacy-policy/");
binding.reportError.setTag("https://github.com/CatimaLoyalty/Android/issues");
binding.rate.setTag("https://play.google.com/store/apps/details?id=me.hackerchick.catima");
binding.donate.setTag("https://catima.app/donate");
boolean installedFromGooglePlay = Utils.installedFromGooglePlay(this);
// Hide Google Play rate button if not on Google Play
binding.rate.setVisibility(installedFromGooglePlay ? View.VISIBLE : View.GONE);
// Hide donate button on Google Play (Google Play doesn't allow donation links)
binding.donate.setVisibility(installedFromGooglePlay ? View.GONE : View.VISIBLE);
bindClickListeners();
}
@Override
public boolean onOptionsItemSelected(MenuItem item) {
int id = item.getItemId();
if (id == android.R.id.home) {
finish();
}
return super.onOptionsItemSelected(item);
}
@Override
protected void onDestroy() {
super.onDestroy();
content.destroy();
clearClickListeners();
binding = null;
}
private void bindClickListeners() {
binding.versionHistory.setOnClickListener(this::showHistory);
binding.translate.setOnClickListener(this::openExternalBrowser);
binding.license.setOnClickListener(this::showLicense);
binding.repo.setOnClickListener(this::openExternalBrowser);
binding.privacy.setOnClickListener(this::showPrivacy);
binding.reportError.setOnClickListener(this::openExternalBrowser);
binding.rate.setOnClickListener(this::openExternalBrowser);
binding.donate.setOnClickListener(this::openExternalBrowser);
binding.credits.setOnClickListener(view -> showCredits());
}
private void clearClickListeners() {
binding.versionHistory.setOnClickListener(null);
binding.translate.setOnClickListener(null);
binding.license.setOnClickListener(null);
binding.repo.setOnClickListener(null);
binding.privacy.setOnClickListener(null);
binding.reportError.setOnClickListener(null);
binding.rate.setOnClickListener(null);
binding.donate.setOnClickListener(null);
binding.credits.setOnClickListener(null);
}
private void showCredits() {
showHTML(R.string.credits, content.getContributorInfo(), null);
}
private void showHistory(View view) {
showHTML(R.string.version_history, content.getHistoryInfo(), view);
}
private void showLicense(View view) {
showHTML(R.string.license, content.getLicenseInfo(), view);
}
private void showPrivacy(View view) {
showHTML(R.string.privacy_policy, content.getPrivacyInfo(), view);
}
private void showHTML(@StringRes int title, final Spanned text, @Nullable View view) {
int dialogContentPadding = getResources().getDimensionPixelSize(R.dimen.alert_dialog_content_padding);
TextView textView = new TextView(this);
textView.setText(text);
Utils.makeTextViewLinksClickable(textView, text);
ScrollView scrollView = new ScrollView(this);
scrollView.addView(textView);
scrollView.setPadding(dialogContentPadding, dialogContentPadding / 2, dialogContentPadding, 0);
// Create dialog
MaterialAlertDialogBuilder materialAlertDialogBuilder = new MaterialAlertDialogBuilder(this);
materialAlertDialogBuilder
.setTitle(title)
.setView(scrollView)
.setPositiveButton(R.string.ok, null);
// Add View online button if an URL is linked to this view
if (view != null && view.getTag() != null) {
materialAlertDialogBuilder.setNeutralButton(R.string.view_online, (dialog, which) -> openExternalBrowser(view));
}
// Show dialog
materialAlertDialogBuilder.show();
}
private void openExternalBrowser(View view) {
Object tag = view.getTag();
if (tag instanceof String && ((String) tag).startsWith("https://")) {
(new OpenWebLinkHandler()).openBrowser(this, (String) tag);
}
}
}

View File

@@ -0,0 +1,149 @@
package protect.card_locker
import android.os.Bundle
import android.text.Spanned
import android.view.MenuItem
import android.view.View
import android.widget.ScrollView
import android.widget.TextView
import androidx.annotation.StringRes
import androidx.core.view.isVisible
import com.google.android.material.dialog.MaterialAlertDialogBuilder
import protect.card_locker.databinding.AboutActivityBinding
class AboutActivity : CatimaAppCompatActivity() {
private companion object {
private const val TAG = "Catima"
}
private lateinit var binding: AboutActivityBinding
private lateinit var content: AboutContent
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
binding = AboutActivityBinding.inflate(layoutInflater)
content = AboutContent(this)
title = content.pageTitle
setContentView(binding.root)
setSupportActionBar(binding.toolbar)
enableToolbarBackButton()
binding.apply {
creditsSub.text = content.copyrightShort
versionHistorySub.text = content.versionHistory
versionHistory.tag = "https://catima.app/changelog/"
translate.tag = "https://hosted.weblate.org/engage/catima/"
license.tag = "https://github.com/CatimaLoyalty/Android/blob/main/LICENSE"
repo.tag = "https://github.com/CatimaLoyalty/Android/"
privacy.tag = "https://catima.app/privacy-policy/"
reportError.tag = "https://github.com/CatimaLoyalty/Android/issues"
rate.tag = "https://play.google.com/store/apps/details?id=me.hackerchick.catima"
donate.tag = "https://catima.app/donate"
// Hide Google Play rate button if not on Google Play
rate.isVisible = BuildConfig.showRateOnGooglePlay
// Hide donate button on Google Play (Google Play doesn't allow donation links)
donate.isVisible = BuildConfig.showDonate
}
bindClickListeners()
}
override fun onOptionsItemSelected(item: MenuItem): Boolean {
return when (item.itemId) {
android.R.id.home -> {
finish()
true
}
else -> super.onOptionsItemSelected(item)
}
}
override fun onDestroy() {
super.onDestroy()
content.destroy()
clearClickListeners()
}
private fun bindClickListeners() {
binding.apply {
versionHistory.setOnClickListener { showHistory(it) }
translate.setOnClickListener { openExternalBrowser(it) }
license.setOnClickListener { showLicense(it) }
repo.setOnClickListener { openExternalBrowser(it) }
privacy.setOnClickListener { showPrivacy(it) }
reportError.setOnClickListener { openExternalBrowser(it) }
rate.setOnClickListener { openExternalBrowser(it) }
donate.setOnClickListener { openExternalBrowser(it) }
credits.setOnClickListener { showCredits() }
}
}
private fun clearClickListeners() {
binding.apply {
versionHistory.setOnClickListener(null)
translate.setOnClickListener(null)
license.setOnClickListener(null)
repo.setOnClickListener(null)
privacy.setOnClickListener(null)
reportError.setOnClickListener(null)
rate.setOnClickListener(null)
donate.setOnClickListener(null)
credits.setOnClickListener(null)
}
}
private fun showCredits() {
showHTML(R.string.credits, content.contributorInfo, null)
}
private fun showHistory(view: View) {
showHTML(R.string.version_history, content.historyInfo, view)
}
private fun showLicense(view: View) {
showHTML(R.string.license, content.licenseInfo, view)
}
private fun showPrivacy(view: View) {
showHTML(R.string.privacy_policy, content.privacyInfo, view)
}
private fun showHTML(@StringRes title: Int, text: Spanned, view: View?) {
val dialogContentPadding = resources.getDimensionPixelSize(R.dimen.alert_dialog_content_padding)
val textView = TextView(this).apply {
setText(text)
Utils.makeTextViewLinksClickable(this, text)
}
val scrollView = ScrollView(this).apply {
addView(textView)
setPadding(dialogContentPadding, dialogContentPadding / 2, dialogContentPadding, 0)
}
MaterialAlertDialogBuilder(this).apply {
setTitle(title)
setView(scrollView)
setPositiveButton(R.string.ok, null)
// Add View online button if an URL is linked to this view
view?.tag?.let {
setNeutralButton(R.string.view_online) { _, _ -> openExternalBrowser(view) }
}
show()
}
}
private fun openExternalBrowser(view: View) {
val tag = view.tag
if (tag is String && tag.startsWith("https://")) {
OpenWebLinkHandler().openBrowser(this, tag)
}
}
}

View File

@@ -1,29 +0,0 @@
package protect.card_locker;
import androidx.annotation.Nullable;
public class BarcodeValues {
@Nullable
private final CatimaBarcode mFormat;
private final String mContent;
private String mNote;
public BarcodeValues(@Nullable CatimaBarcode format, String content) {
mFormat = format;
mContent = content;
}
public void setNote(String note) {
mNote = note;
}
public @Nullable CatimaBarcode format() {
return mFormat;
}
public String content() {
return mContent;
}
public String note() { return mNote; }
}

View File

@@ -1,6 +0,0 @@
package protect.card_locker;
public interface BarcodeValuesListDisambiguatorCallback {
void onUserChoseBarcode(BarcodeValues barcodeValues);
void onUserDismissedSelector();
}

View File

@@ -12,15 +12,15 @@ import androidx.appcompat.widget.Toolbar;
import androidx.core.content.pm.ShortcutInfoCompat;
import androidx.core.content.pm.ShortcutManagerCompat;
import androidx.recyclerview.widget.GridLayoutManager;
import androidx.recyclerview.widget.RecyclerView;
import protect.card_locker.databinding.SimpleToolbarListActivityBinding;
import protect.card_locker.databinding.CardShortcutConfigureActivityBinding;
import protect.card_locker.preferences.Settings;
/**
* The configuration screen for creating a shortcut.
*/
public class CardShortcutConfigure extends CatimaAppCompatActivity implements LoyaltyCardCursorAdapter.CardAdapterListener {
private SimpleToolbarListActivityBinding binding;
private CardShortcutConfigureActivityBinding binding;
static final String TAG = "Catima";
private SQLiteDatabase mDatabase;
private LoyaltyCardCursorAdapter mAdapter;
@@ -28,7 +28,7 @@ public class CardShortcutConfigure extends CatimaAppCompatActivity implements Lo
@Override
public void onCreate(Bundle bundle) {
super.onCreate(bundle);
binding = SimpleToolbarListActivityBinding.inflate(getLayoutInflater());
binding = CardShortcutConfigureActivityBinding.inflate(getLayoutInflater());
mDatabase = new DBHelper(this).getReadableDatabase();
// Set the result to CANCELED. This will cause nothing to happen if the
@@ -47,21 +47,26 @@ public class CardShortcutConfigure extends CatimaAppCompatActivity implements Lo
finish();
}
final RecyclerView cardList = binding.list;
GridLayoutManager layoutManager = (GridLayoutManager) cardList.getLayoutManager();
if (layoutManager != null) {
layoutManager.setSpanCount(getResources().getInteger(R.integer.main_view_card_columns));
}
Cursor cardCursor = DBHelper.getLoyaltyCardCursor(mDatabase, DBHelper.LoyaltyCardArchiveFilter.All);
mAdapter = new LoyaltyCardCursorAdapter(this, cardCursor, this, null);
cardList.setAdapter(mAdapter);
binding.list.setAdapter(mAdapter);
}
@Override
protected void onResume() {
super.onResume();
var layoutManager = (GridLayoutManager) binding.list.getLayoutManager();
if (layoutManager != null) {
var settings = new Settings(this);
layoutManager.setSpanCount(settings.getPreferredColumnCount());
}
}
private void onClickAction(int position) {
Cursor selected = DBHelper.getLoyaltyCardCursor(mDatabase, DBHelper.LoyaltyCardArchiveFilter.All);
selected.moveToPosition(position);
LoyaltyCard loyaltyCard = LoyaltyCard.fromCursor(selected);
LoyaltyCard loyaltyCard = LoyaltyCard.fromCursor(CardShortcutConfigure.this, selected);
Log.d(TAG, "Creating shortcut for card " + loyaltyCard.store + "," + loyaltyCard.id);

View File

@@ -42,7 +42,7 @@ public class CardsOnPowerScreenService extends ControlsProviderService {
Cursor loyaltyCardCursor = DBHelper.getLoyaltyCardCursor(mDatabase, DBHelper.LoyaltyCardArchiveFilter.Unarchived);
return subscriber -> {
while (loyaltyCardCursor.moveToNext()) {
LoyaltyCard card = LoyaltyCard.fromCursor(loyaltyCardCursor);
LoyaltyCard card = LoyaltyCard.fromCursor(this, loyaltyCardCursor);
Intent openIntent = new Intent(this, LoyaltyCardViewActivity.class)
.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK)
.putExtra(LoyaltyCardViewActivity.BUNDLE_ID, card.id);
@@ -69,7 +69,7 @@ public class CardsOnPowerScreenService extends ControlsProviderService {
for (String controlId : controlIds) {
Control control;
Integer cardId = this.controlIdToCardId(controlId);
LoyaltyCard card = DBHelper.getLoyaltyCard(mDatabase, cardId);
LoyaltyCard card = DBHelper.getLoyaltyCard(this, mDatabase, cardId);
if (card != null) {
Intent openIntent = new Intent(this, LoyaltyCardViewActivity.class)
.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK)
@@ -99,7 +99,7 @@ public class CardsOnPowerScreenService extends ControlsProviderService {
}
private Bitmap getIcon(Context context, LoyaltyCard loyaltyCard) {
Bitmap cardIcon = Utils.retrieveCardImage(context, loyaltyCard.id, ImageLocationType.icon);
Bitmap cardIcon = loyaltyCard.getImageThumbnail(context);
if (cardIcon != null) {
return cardIcon;

View File

@@ -70,6 +70,7 @@ public class DBHelper extends SQLiteOpenHelper {
public enum LoyaltyCardOrder {
Alpha,
LastUsed,
ValidFrom,
Expiry
}
@@ -332,10 +333,10 @@ public class DBHelper extends SQLiteOpenHelper {
Set<String> files = new HashSet<>();
Cursor cardCursor = getLoyaltyCardCursor(database);
while (cardCursor.moveToNext()) {
LoyaltyCard card = LoyaltyCard.fromCursor(cardCursor);
LoyaltyCard card = LoyaltyCard.fromCursor(context, cardCursor);
for (ImageLocationType imageLocationType : ImageLocationType.values()) {
String name = Utils.getCardImageFileName(card.id, imageLocationType);
if (Utils.retrieveCardImageAsFile(context, name).exists()) {
if (card.getImageForImageLocationType(context, imageLocationType) != null) {
files.add(name);
}
}
@@ -535,14 +536,14 @@ public class DBHelper extends SQLiteOpenHelper {
return (rowsUpdated == 1);
}
public static LoyaltyCard getLoyaltyCard(SQLiteDatabase database, final int id) {
public static LoyaltyCard getLoyaltyCard(Context context, SQLiteDatabase database, final int id) {
Cursor data = database.query(LoyaltyCardDbIds.TABLE, null, whereAttrs(LoyaltyCardDbIds.ID), withArgs(id), null, null, null);
LoyaltyCard card = null;
if (data.getCount() == 1) {
data.moveToFirst();
card = LoyaltyCard.fromCursor(data);
card = LoyaltyCard.fromCursor(context, data);
}
data.close();
@@ -916,6 +917,10 @@ public class DBHelper extends SQLiteOpenHelper {
return LoyaltyCardDbIds.LAST_USED;
}
if (order == LoyaltyCardOrder.ValidFrom) {
return LoyaltyCardDbIds.VALID_FROM;
}
if (order == LoyaltyCardOrder.Expiry) {
return LoyaltyCardDbIds.EXPIRY;
}

View File

@@ -125,7 +125,29 @@ public class ImportURIHelper {
headerColor = Integer.parseInt(unparsedHeaderColor);
}
return new LoyaltyCard(-1, store, note, validFrom, expiry, balance, balanceType, cardId, barcodeId, barcodeType, headerColor, 0, Utils.getUnixTime(), 100, 0);
return new LoyaltyCard(
-1,
store,
note,
validFrom,
expiry,
balance,
balanceType,
cardId,
barcodeId,
barcodeType,
headerColor,
0,
Utils.getUnixTime(),
100,
0,
null,
null,
null,
null,
null,
null
);
} catch (NumberFormatException | UnsupportedEncodingException | ArrayIndexOutOfBoundsException ex) {
throw new InvalidObjectException("Not a valid import URI");
}

View File

@@ -1,9 +1,9 @@
package protect.card_locker;
import android.content.Context;
import android.database.Cursor;
import android.graphics.Bitmap;
import android.os.Bundle;
import android.os.Parcel;
import android.os.Parcelable;
import androidx.annotation.NonNull;
import androidx.annotation.Nullable;
@@ -11,11 +11,10 @@ import androidx.annotation.Nullable;
import java.math.BigDecimal;
import java.util.Currency;
import java.util.Date;
import java.util.HashMap;
import java.util.Map;
import java.util.List;
import java.util.Objects;
public class LoyaltyCard implements Parcelable {
public class LoyaltyCard {
public int id;
public String store;
public String note;
@@ -38,6 +37,19 @@ public class LoyaltyCard implements Parcelable {
public int zoomLevel;
public int archiveStatus;
@Nullable
private Bitmap imageThumbnail;
@Nullable
private String imageThumbnailPath;
@Nullable
private Bitmap imageFront;
@Nullable
private String imageFrontPath;
@Nullable
private Bitmap imageBack;
@Nullable
private String imageBackPath;
public static final String BUNDLE_LOYALTY_CARD_ID = "loyaltyCardId";
public static final String BUNDLE_LOYALTY_CARD_STORE = "loyaltyCardStore";
public static final String BUNDLE_LOYALTY_CARD_NOTE = "loyaltyCardNote";
@@ -53,6 +65,13 @@ public class LoyaltyCard implements Parcelable {
public static final String BUNDLE_LOYALTY_CARD_LAST_USED = "loyaltyCardLastUsed";
public static final String BUNDLE_LOYALTY_CARD_ZOOM_LEVEL = "loyaltyCardZoomLevel";
public static final String BUNDLE_LOYALTY_CARD_ARCHIVE_STATUS = "loyaltyCardArchiveStatus";
public static final String BUNDLE_LOYALTY_CARD_IMAGE_THUMBNAIL = "loyaltyCardImageThumbnail";
public static final String BUNDLE_LOYALTY_CARD_IMAGE_FRONT = "loyaltyCardImageFront";
public static final String BUNDLE_LOYALTY_CARD_IMAGE_BACK = "loyaltyCardImageBack";
private static final String TEMP_IMAGE_THUMBNAIL_FILE_NAME = "loyaltyCardTempImageThumbnailFileName";
private static final String TEMP_IMAGE_FRONT_FILE_NAME = "loyaltyCardTempImageFrontFileName";
private static final String TEMP_IMAGE_BACK_FILE_NAME = "loyaltyCardTempImageBackFileName";
/**
* Create a loyalty card object with default values
@@ -73,6 +92,9 @@ public class LoyaltyCard implements Parcelable {
setLastUsed(Utils.getUnixTime());
setZoomLevel(100);
setArchiveStatus(0);
setImageThumbnail(null, null);
setImageFront(null, null);
setImageBack(null, null);
}
/**
@@ -98,7 +120,10 @@ public class LoyaltyCard implements Parcelable {
@Nullable final Date expiry, final BigDecimal balance, @Nullable final Currency balanceType,
final String cardId, @Nullable final String barcodeId, @Nullable final CatimaBarcode barcodeType,
@Nullable final Integer headerColor, final int starStatus,
final long lastUsed, final int zoomLevel, final int archiveStatus) {
final long lastUsed, final int zoomLevel, final int archiveStatus,
@Nullable Bitmap imageThumbnail, @Nullable String imageThumbnailPath,
@Nullable Bitmap imageFront, @Nullable String imageFrontPath,
@Nullable Bitmap imageBack, @Nullable String imageBackPath) {
setId(id);
setStore(store);
setNote(note);
@@ -114,6 +139,63 @@ public class LoyaltyCard implements Parcelable {
setLastUsed(lastUsed);
setZoomLevel(zoomLevel);
setArchiveStatus(archiveStatus);
setImageThumbnail(imageThumbnail, imageThumbnailPath);
setImageFront(imageFront, imageFrontPath);
setImageBack(imageBack, imageBackPath);
}
@Nullable
public Bitmap getImageThumbnail(Context context) {
if (imageThumbnailPath != null) {
if (imageThumbnailPath.equals(TEMP_IMAGE_THUMBNAIL_FILE_NAME)) {
imageThumbnail = Utils.loadTempImage(context, imageThumbnailPath);
} else {
imageThumbnail = Utils.retrieveCardImage(context, imageThumbnailPath);
}
imageThumbnailPath = null;
}
if (imageThumbnail == null) {
return null;
}
return imageThumbnail.copy(imageThumbnail.getConfig(), imageThumbnail.isMutable());
}
@Nullable
public Bitmap getImageFront(Context context) {
if (imageFrontPath != null) {
if (imageFrontPath.equals(TEMP_IMAGE_FRONT_FILE_NAME)) {
imageFront = Utils.loadTempImage(context, imageFrontPath);
} else {
imageFront = Utils.retrieveCardImage(context, imageFrontPath);
}
imageFrontPath = null;
}
if (imageFront == null) {
return null;
}
return imageFront.copy(imageFront.getConfig(), imageFront.isMutable());
}
@Nullable
public Bitmap getImageBack(Context context) {
if (imageBackPath != null) {
if (imageBackPath.equals(TEMP_IMAGE_BACK_FILE_NAME)) {
imageBack = Utils.loadTempImage(context, imageBackPath);
} else {
imageBack = Utils.retrieveCardImage(context, imageBackPath);
}
imageBackPath = null;
}
if (imageBack == null) {
return null;
}
return imageBack.copy(imageBack.getConfig(), imageBack.isMutable());
}
public void setId(int id) {
@@ -188,59 +270,47 @@ public class LoyaltyCard implements Parcelable {
this.archiveStatus = archiveStatus;
}
protected LoyaltyCard(Parcel in) {
setId(in.readInt());
setStore(Objects.requireNonNull(in.readString()));
setNote(Objects.requireNonNull(in.readString()));
long tmpValidFrom = in.readLong();
setValidFrom(tmpValidFrom > 0 ? new Date(tmpValidFrom) : null);
long tmpExpiry = in.readLong();
setExpiry(tmpExpiry > 0 ? new Date(tmpExpiry) : null);
setBalance((BigDecimal) in.readValue(BigDecimal.class.getClassLoader()));
setBalanceType((Currency) in.readValue(Currency.class.getClassLoader()));
setCardId(Objects.requireNonNull(in.readString()));
setBarcodeId(in.readString());
String tmpBarcodeType = in.readString();
setBarcodeType((tmpBarcodeType != null && !tmpBarcodeType.isEmpty()) ? CatimaBarcode.fromName(tmpBarcodeType) : null);
int tmpHeaderColor = in.readInt();
setHeaderColor(tmpHeaderColor != -1 ? tmpHeaderColor : null);
setStarStatus(in.readInt());
setLastUsed(in.readLong());
setZoomLevel(in.readInt());
setArchiveStatus(in.readInt());
public void setImageThumbnail(@Nullable Bitmap imageThumbnail, @Nullable String imageThumbnailPath) {
if (imageThumbnail != null && imageThumbnailPath != null) {
throw new IllegalArgumentException("Cannot set both thumbnail and path");
}
this.imageThumbnailPath = imageThumbnailPath;
this.imageThumbnail = imageThumbnail != null ? imageThumbnail.copy(imageThumbnail.getConfig(), imageThumbnail.isMutable()) : null;
}
@Override
public void writeToParcel(Parcel parcel, int flags) {
parcel.writeInt(id);
parcel.writeString(store);
parcel.writeString(note);
parcel.writeLong(validFrom != null ? validFrom.getTime() : -1);
parcel.writeLong(expiry != null ? expiry.getTime() : -1);
parcel.writeValue(balance);
parcel.writeValue(balanceType);
parcel.writeString(cardId);
parcel.writeString(barcodeId);
parcel.writeString(barcodeType != null ? barcodeType.name() : "");
parcel.writeInt(headerColor != null ? headerColor : -1);
parcel.writeInt(starStatus);
parcel.writeLong(lastUsed);
parcel.writeInt(zoomLevel);
parcel.writeInt(archiveStatus);
public void setImageFront(@Nullable Bitmap imageFront, @Nullable String imageFrontPath) {
if (imageFront != null && imageFrontPath != null) {
throw new IllegalArgumentException("Cannot set both thumbnail and path");
}
this.imageFrontPath = imageFrontPath;
this.imageFront = imageFront != null ? imageFront.copy(imageFront.getConfig(), imageFront.isMutable()) : null;
}
public static LoyaltyCard fromBundle(Bundle bundle, boolean requireFull) {
// Grab default card
LoyaltyCard loyaltyCard = new LoyaltyCard();
public void setImageBack(@Nullable Bitmap imageBack, @Nullable String imageBackPath) {
if (imageBack != null && imageBackPath != null) {
throw new IllegalArgumentException("Cannot set both thumbnail and path");
}
// Update from bundle
loyaltyCard.updateFromBundle(bundle, requireFull);
// Return updated version
return loyaltyCard;
this.imageBackPath = imageBackPath;
this.imageBack = imageBack != null ? imageBack.copy(imageBack.getConfig(), imageBack.isMutable()) : null;
}
public void updateFromBundle(Bundle bundle, boolean requireFull) {
@Nullable
public Bitmap getImageForImageLocationType(Context context, ImageLocationType imageLocationType) {
if (imageLocationType == ImageLocationType.icon) {
return getImageThumbnail(context);
} else if (imageLocationType == ImageLocationType.front) {
return getImageFront(context);
} else if (imageLocationType == ImageLocationType.back) {
return getImageBack(context);
}
throw new IllegalArgumentException("Unknown image location type");
}
public void updateFromBundle(@NonNull Bundle bundle, boolean requireFull) {
if (bundle.containsKey(BUNDLE_LOYALTY_CARD_ID)) {
setId(bundle.getInt(BUNDLE_LOYALTY_CARD_ID));
} else if (requireFull) {
@@ -321,41 +391,107 @@ public class LoyaltyCard implements Parcelable {
} else if (requireFull) {
throw new IllegalArgumentException("Missing key " + BUNDLE_LOYALTY_CARD_ARCHIVE_STATUS);
}
if (bundle.containsKey(BUNDLE_LOYALTY_CARD_IMAGE_THUMBNAIL)) {
setImageThumbnail(null, bundle.getString(BUNDLE_LOYALTY_CARD_IMAGE_THUMBNAIL));
} else if (requireFull) {
throw new IllegalArgumentException("Missing key " + BUNDLE_LOYALTY_CARD_IMAGE_THUMBNAIL);
}
if (bundle.containsKey(BUNDLE_LOYALTY_CARD_IMAGE_FRONT)) {
setImageFront(null, bundle.getString(BUNDLE_LOYALTY_CARD_IMAGE_FRONT));
} else if (requireFull) {
throw new IllegalArgumentException("Missing key " + BUNDLE_LOYALTY_CARD_IMAGE_FRONT);
}
if (bundle.containsKey(BUNDLE_LOYALTY_CARD_IMAGE_BACK)) {
setImageBack(null, bundle.getString(BUNDLE_LOYALTY_CARD_IMAGE_BACK));
} else if (requireFull) {
throw new IllegalArgumentException("Missing key " + BUNDLE_LOYALTY_CARD_IMAGE_BACK);
}
}
public Bundle toBundle() {
public Bundle toBundle(Context context, List<String> exportLimit) {
boolean exportIsLimited = !exportLimit.isEmpty();
Bundle bundle = new Bundle();
bundle.putInt(BUNDLE_LOYALTY_CARD_ID, id);
bundle.putString(BUNDLE_LOYALTY_CARD_STORE, store);
bundle.putString(BUNDLE_LOYALTY_CARD_NOTE, note);
if (validFrom != null) {
bundle.putLong(BUNDLE_LOYALTY_CARD_VALID_FROM, validFrom.getTime());
if (!exportIsLimited || exportLimit.contains(BUNDLE_LOYALTY_CARD_ID)) {
bundle.putInt(BUNDLE_LOYALTY_CARD_ID, id);
}
if (expiry != null) {
bundle.putLong(BUNDLE_LOYALTY_CARD_EXPIRY, expiry.getTime());
if (!exportIsLimited || exportLimit.contains(BUNDLE_LOYALTY_CARD_STORE)) {
bundle.putString(BUNDLE_LOYALTY_CARD_STORE, store);
}
bundle.putString(BUNDLE_LOYALTY_CARD_BALANCE, balance.toString());
if (balanceType != null) {
bundle.putString(BUNDLE_LOYALTY_CARD_BALANCE_TYPE, balanceType.toString());
if (!exportIsLimited || exportLimit.contains(BUNDLE_LOYALTY_CARD_NOTE)) {
bundle.putString(BUNDLE_LOYALTY_CARD_NOTE, note);
}
bundle.putString(BUNDLE_LOYALTY_CARD_CARD_ID, cardId);
bundle.putString(BUNDLE_LOYALTY_CARD_BARCODE_ID, barcodeId);
if (barcodeType != null) {
bundle.putString(BUNDLE_LOYALTY_CARD_BARCODE_TYPE, barcodeType.name());
if (!exportIsLimited || exportLimit.contains(BUNDLE_LOYALTY_CARD_VALID_FROM)) {
bundle.putLong(BUNDLE_LOYALTY_CARD_VALID_FROM, validFrom != null ? validFrom.getTime() : -1);
}
if (headerColor != null) {
bundle.putInt(BUNDLE_LOYALTY_CARD_HEADER_COLOR, headerColor);
if (!exportIsLimited || exportLimit.contains(BUNDLE_LOYALTY_CARD_EXPIRY)) {
bundle.putLong(BUNDLE_LOYALTY_CARD_EXPIRY, expiry != null ? expiry.getTime() : -1);
}
if (!exportIsLimited || exportLimit.contains(BUNDLE_LOYALTY_CARD_BALANCE)) {
bundle.putString(BUNDLE_LOYALTY_CARD_BALANCE, balance.toString());
}
if (!exportIsLimited || exportLimit.contains(BUNDLE_LOYALTY_CARD_BALANCE_TYPE)) {
bundle.putString(BUNDLE_LOYALTY_CARD_BALANCE_TYPE, balanceType != null ? balanceType.toString() : null);
}
if (!exportIsLimited || exportLimit.contains(BUNDLE_LOYALTY_CARD_CARD_ID)) {
bundle.putString(BUNDLE_LOYALTY_CARD_CARD_ID, cardId);
}
if (!exportIsLimited || exportLimit.contains(BUNDLE_LOYALTY_CARD_BARCODE_ID)) {
bundle.putString(BUNDLE_LOYALTY_CARD_BARCODE_ID, barcodeId);
}
if (!exportIsLimited || exportLimit.contains(BUNDLE_LOYALTY_CARD_BARCODE_TYPE)) {
bundle.putString(BUNDLE_LOYALTY_CARD_BARCODE_TYPE, barcodeType != null ? barcodeType.name() : null);
}
if (!exportIsLimited || exportLimit.contains(BUNDLE_LOYALTY_CARD_HEADER_COLOR)) {
bundle.putInt(BUNDLE_LOYALTY_CARD_HEADER_COLOR, headerColor != null ? headerColor : -1);
}
if (!exportIsLimited || exportLimit.contains(BUNDLE_LOYALTY_CARD_STAR_STATUS)) {
bundle.putInt(BUNDLE_LOYALTY_CARD_STAR_STATUS, starStatus);
}
if (!exportIsLimited || exportLimit.contains(BUNDLE_LOYALTY_CARD_LAST_USED)) {
bundle.putLong(BUNDLE_LOYALTY_CARD_LAST_USED, lastUsed);
}
if (!exportIsLimited || exportLimit.contains(BUNDLE_LOYALTY_CARD_ZOOM_LEVEL)) {
bundle.putInt(BUNDLE_LOYALTY_CARD_ZOOM_LEVEL, zoomLevel);
}
if (!exportIsLimited || exportLimit.contains(BUNDLE_LOYALTY_CARD_ARCHIVE_STATUS)) {
bundle.putInt(BUNDLE_LOYALTY_CARD_ARCHIVE_STATUS, archiveStatus);
}
// There is an (undocumented) size limit to bundles of around 2MB(?), when going over it you will experience a random crash
// So, instead of storing the bitmaps directly, we write the bitmap to a temp file and store the path
if (!exportIsLimited || exportLimit.contains(BUNDLE_LOYALTY_CARD_IMAGE_THUMBNAIL)) {
Bitmap thumbnail = getImageThumbnail(context);
if (thumbnail != null) {
Utils.saveTempImage(context, thumbnail, TEMP_IMAGE_THUMBNAIL_FILE_NAME, Bitmap.CompressFormat.PNG);
bundle.putString(BUNDLE_LOYALTY_CARD_IMAGE_THUMBNAIL, TEMP_IMAGE_THUMBNAIL_FILE_NAME);
} else {
bundle.putString(BUNDLE_LOYALTY_CARD_IMAGE_THUMBNAIL, null);
}
}
if (!exportIsLimited || exportLimit.contains(BUNDLE_LOYALTY_CARD_IMAGE_FRONT)) {
Bitmap front = getImageFront(context);
if (front != null) {
Utils.saveTempImage(context, front, TEMP_IMAGE_FRONT_FILE_NAME, Bitmap.CompressFormat.PNG);
bundle.putString(BUNDLE_LOYALTY_CARD_IMAGE_FRONT, TEMP_IMAGE_FRONT_FILE_NAME);
} else {
bundle.putString(BUNDLE_LOYALTY_CARD_IMAGE_FRONT, null);
}
}
if (!exportIsLimited || exportLimit.contains(BUNDLE_LOYALTY_CARD_IMAGE_BACK)) {
Bitmap back = getImageBack(context);
if (back != null) {
Utils.saveTempImage(context, back, TEMP_IMAGE_BACK_FILE_NAME, Bitmap.CompressFormat.PNG);
bundle.putString(BUNDLE_LOYALTY_CARD_IMAGE_BACK, TEMP_IMAGE_BACK_FILE_NAME);
} else {
bundle.putString(BUNDLE_LOYALTY_CARD_IMAGE_BACK, null);
}
}
bundle.putInt(BUNDLE_LOYALTY_CARD_STAR_STATUS, starStatus);
bundle.putLong(BUNDLE_LOYALTY_CARD_LAST_USED, lastUsed);
bundle.putInt(BUNDLE_LOYALTY_CARD_ZOOM_LEVEL, zoomLevel);
bundle.putInt(BUNDLE_LOYALTY_CARD_ARCHIVE_STATUS, archiveStatus);
return bundle;
}
public static LoyaltyCard fromCursor(Cursor cursor) {
public static LoyaltyCard fromCursor(Context context, Cursor cursor) {
// id
int id = cursor.getInt(cursor.getColumnIndexOrThrow(DBHelper.LoyaltyCardDbIds.ID));
// store
@@ -393,10 +529,33 @@ public class LoyaltyCard implements Parcelable {
// archiveStatus
int archiveStatus = cursor.getInt(cursor.getColumnIndexOrThrow(DBHelper.LoyaltyCardDbIds.ARCHIVE_STATUS));
return new LoyaltyCard(id, store, note, validFrom, expiry, balance, balanceType, cardId, barcodeId, barcodeType, headerColor, starStatus, lastUsed, zoomLevel, archiveStatus);
return new LoyaltyCard(
id,
store,
note,
validFrom,
expiry,
balance,
balanceType,
cardId,
barcodeId,
barcodeType,
headerColor,
starStatus,
lastUsed,
zoomLevel,
archiveStatus,
null,
Utils.getCardImageFileName(id, ImageLocationType.icon),
null,
Utils.getCardImageFileName(id, ImageLocationType.front),
null,
Utils.getCardImageFileName(id, ImageLocationType.back)
);
}
public static boolean isDuplicate(final LoyaltyCard a, final LoyaltyCard b) {
public static boolean isDuplicate(Context context, final LoyaltyCard a, final LoyaltyCard b) {
// Note: Bitmap comparing is slow, be careful when calling this method
// Skip lastUsed & zoomLevel
return a.id == b.id && // non-nullable int
a.store.equals(b.store) && // non-nullable String
@@ -411,12 +570,23 @@ public class LoyaltyCard implements Parcelable {
b.barcodeType == null ? null : b.barcodeType.format()) && // nullable CatimaBarcode with no overridden .equals(), so we need to check .format()
Utils.equals(a.headerColor, b.headerColor) && // nullable Integer
a.starStatus == b.starStatus && // non-nullable int
a.archiveStatus == b.archiveStatus; // non-nullable int
a.archiveStatus == b.archiveStatus && // non-nullable int
nullableBitmapsEqual(a.getImageThumbnail(context), b.getImageThumbnail(context)) && // nullable Bitmap
nullableBitmapsEqual(a.getImageFront(context), b.getImageFront(context)) && // nullable Bitmap
nullableBitmapsEqual(a.getImageBack(context), b.getImageBack(context)); // nullable Bitmap
}
@Override
public int describeContents() {
return 0;
public static boolean nullableBitmapsEqual(@Nullable Bitmap a, @Nullable Bitmap b) {
if (a == null && b == null) {
return true;
}
if (a != null && b != null) {
return a.sameAs(b);
}
// One is null and the other isn't, so it's not equal
return false;
}
@NonNull
@@ -425,7 +595,8 @@ public class LoyaltyCard implements Parcelable {
return String.format(
"LoyaltyCard{%n id=%s,%n store=%s,%n note=%s,%n validFrom=%s,%n expiry=%s,%n"
+ " balance=%s,%n balanceType=%s,%n cardId=%s,%n barcodeId=%s,%n barcodeType=%s,%n"
+ " headerColor=%s,%n starStatus=%s,%n lastUsed=%s,%n zoomLevel=%s,%n archiveStatus=%s%n}",
+ " headerColor=%s,%n starStatus=%s,%n lastUsed=%s,%n zoomLevel=%s,%n archiveStatus=%s%n"
+ " imageThumbnail=%s,%n imageThumbnailPath=%s,%n imageFront=%s,%n imageFrontPath=%s,%n imageBack=%s,%n imageBackPath=%s,%n}",
this.id,
this.store,
this.note,
@@ -440,19 +611,13 @@ public class LoyaltyCard implements Parcelable {
this.starStatus,
this.lastUsed,
this.zoomLevel,
this.archiveStatus
this.archiveStatus,
this.imageThumbnail,
this.imageThumbnailPath,
this.imageFront,
this.imageFrontPath,
this.imageBack,
this.imageBackPath
);
}
public static final Creator<LoyaltyCard> CREATOR = new Creator<LoyaltyCard>() {
@Override
public LoyaltyCard createFromParcel(Parcel in) {
return new LoyaltyCard(in);
}
@Override
public LoyaltyCard[] newArray(int size) {
return new LoyaltyCard[size];
}
};
}

View File

@@ -30,6 +30,7 @@ import java.text.DateFormat;
import java.util.ArrayList;
import protect.card_locker.databinding.LoyaltyCardLayoutBinding;
import protect.card_locker.preferences.Settings;
public class LoyaltyCardCursorAdapter extends BaseCursorAdapter<LoyaltyCardCursorAdapter.LoyaltyCardListItemViewHolder> {
private int mCurrentSelectedIndex = -1;
@@ -79,7 +80,7 @@ public class LoyaltyCardCursorAdapter extends BaseCursorAdapter<LoyaltyCardCurso
public LoyaltyCard getCard(int position) {
mCursor.moveToPosition(position);
return LoyaltyCard.fromCursor(mCursor);
return LoyaltyCard.fromCursor(mContext, mCursor);
}
public void onBindViewHolder(LoyaltyCardListItemViewHolder inputHolder, Cursor inputCursor) {
@@ -87,8 +88,8 @@ public class LoyaltyCardCursorAdapter extends BaseCursorAdapter<LoyaltyCardCurso
boolean showDivider = false;
inputHolder.mDivider.setVisibility(View.GONE);
LoyaltyCard loyaltyCard = LoyaltyCard.fromCursor(inputCursor);
Bitmap icon = Utils.retrieveCardImage(mContext, loyaltyCard.id, ImageLocationType.icon);
LoyaltyCard loyaltyCard = LoyaltyCard.fromCursor(mContext, inputCursor);
Bitmap icon = loyaltyCard.getImageThumbnail(mContext);
if (mLoyaltyCardListDisplayOptions.showingNameBelowThumbnail() && icon != null) {
showDivider = true;
@@ -111,21 +112,21 @@ public class LoyaltyCardCursorAdapter extends BaseCursorAdapter<LoyaltyCardCurso
}
if (mLoyaltyCardListDisplayOptions.showingValidity() && loyaltyCard.validFrom != null) {
inputHolder.setExtraField(inputHolder.mValidFromField, DateFormat.getDateInstance(DateFormat.LONG).format(loyaltyCard.validFrom), Utils.isNotYetValid(loyaltyCard.validFrom) ? Color.RED : null, showDivider);
inputHolder.setExtraField(inputHolder.mValidFromField, DateFormat.getDateInstance(DateFormat.MEDIUM).format(loyaltyCard.validFrom), Utils.isNotYetValid(loyaltyCard.validFrom) ? Color.RED : null, showDivider);
} else {
inputHolder.setExtraField(inputHolder.mValidFromField, null, null, false);
}
if (mLoyaltyCardListDisplayOptions.showingValidity() && loyaltyCard.expiry != null) {
inputHolder.setExtraField(inputHolder.mExpiryField, DateFormat.getDateInstance(DateFormat.LONG).format(loyaltyCard.expiry), Utils.hasExpired(loyaltyCard.expiry) ? Color.RED : null, showDivider);
inputHolder.setExtraField(inputHolder.mExpiryField, DateFormat.getDateInstance(DateFormat.MEDIUM).format(loyaltyCard.expiry), Utils.hasExpired(loyaltyCard.expiry) ? Color.RED : null, showDivider);
} else {
inputHolder.setExtraField(inputHolder.mExpiryField, null, null, false);
}
inputHolder.mCardIcon.setContentDescription(loyaltyCard.store);
inputHolder.mIconBackgroundColor = Utils.setIconOrTextWithBackground(mContext, loyaltyCard, icon, inputHolder.mCardIcon, inputHolder.mCardText);
Utils.setIconOrTextWithBackground(mContext, loyaltyCard, icon, inputHolder.mCardIcon, inputHolder.mCardText, new Settings(mContext).getPreferredColumnCount());
inputHolder.toggleCardStateIcon(loyaltyCard.starStatus != 0, loyaltyCard.archiveStatus != 0, itemSelected(inputCursor.getPosition()));
inputHolder.toggleCardStateIcon(loyaltyCard.starStatus != 0, loyaltyCard.archiveStatus != 0);
inputHolder.itemView.setActivated(mSelectedItems.get(inputCursor.getPosition(), false));
applyIconAnimation(inputHolder, inputCursor.getPosition());
@@ -192,7 +193,7 @@ public class LoyaltyCardCursorAdapter extends BaseCursorAdapter<LoyaltyCardCurso
int i;
for (i = 0; i < mSelectedItems.size(); i++) {
mCursor.moveToPosition(mSelectedItems.keyAt(i));
result.add(LoyaltyCard.fromCursor(mCursor));
result.add(LoyaltyCard.fromCursor(mContext, mCursor));
}
return result;
@@ -211,13 +212,11 @@ public class LoyaltyCardCursorAdapter extends BaseCursorAdapter<LoyaltyCardCurso
public class LoyaltyCardListItemViewHolder extends RecyclerView.ViewHolder {
public TextView mCardText, mStoreField, mNoteField, mBalanceField, mValidFromField, mExpiryField;
public ImageView mCardIcon, mStarBackground, mStarBorder, mTickIcon, mArchivedBackground;
public ImageView mCardIcon, mTickIcon;
public MaterialCardView mRow;
public ConstraintLayout mStar, mArchived;
public View mDivider;
private int mIconBackgroundColor;
protected LoyaltyCardListItemViewHolder(LoyaltyCardLayoutBinding loyaltyCardLayoutBinding, CardAdapterListener inputListener) {
super(loyaltyCardLayoutBinding.getRoot());
View inputView = loyaltyCardLayoutBinding.getRoot();
@@ -231,10 +230,7 @@ public class LoyaltyCardCursorAdapter extends BaseCursorAdapter<LoyaltyCardCurso
mCardIcon = loyaltyCardLayoutBinding.thumbnail;
mCardText = loyaltyCardLayoutBinding.thumbnailText;
mStar = loyaltyCardLayoutBinding.star;
mStarBackground = loyaltyCardLayoutBinding.starBackground;
mStarBorder = loyaltyCardLayoutBinding.starBorder;
mArchived = loyaltyCardLayoutBinding.archivedIcon;
mArchivedBackground = loyaltyCardLayoutBinding.archiveBackground;
mTickIcon = loyaltyCardLayoutBinding.selectedThumbnail;
inputView.setOnLongClickListener(view -> {
inputListener.onRowClicked(getAdapterPosition());
@@ -296,31 +292,7 @@ public class LoyaltyCardCursorAdapter extends BaseCursorAdapter<LoyaltyCardCurso
mNoteField.requestLayout();
}
public void toggleCardStateIcon(boolean enableStar, boolean enableArchive, boolean colorByTheme) {
/* the below code does not work in android 5! hence the change of drawable instead
boolean needDarkForeground = Utils.needsDarkForeground(mIconBackgroundColor);
Drawable borderDrawable = mStarBorder.getDrawable().mutate();
Drawable backgroundDrawable = mStarBackground.getDrawable().mutate();
DrawableCompat.setTint(borderDrawable, needsDarkForeground ? Color.BLACK : Color.WHITE);
DrawableCompat.setTint(backgroundDrawable, needsDarkForeground ? Color.BLACK : Color.WHITE);
mStarBorder.setImageDrawable(borderDrawable);
mStarBackground.setImageDrawable(backgroundDrawable);
*/
boolean dark = Utils.needsDarkForeground(mIconBackgroundColor);
if (colorByTheme) {
dark = !mDarkModeEnabled;
}
if (dark) {
mStarBorder.setImageResource(R.drawable.ic_unstarred_white);
mStarBackground.setImageResource(R.drawable.ic_starred_black);
mArchivedBackground.setImageResource(R.drawable.ic_baseline_archive_24_black);
} else {
mStarBorder.setImageResource(R.drawable.ic_unstarred_black);
mStarBackground.setImageResource(R.drawable.ic_starred_white);
mArchivedBackground.setImageResource(R.drawable.ic_baseline_archive_24);
}
public void toggleCardStateIcon(boolean enableStar, boolean enableArchive) {
if (enableStar) {
mStar.setVisibility(View.VISIBLE);
} else{
@@ -332,17 +304,6 @@ public class LoyaltyCardCursorAdapter extends BaseCursorAdapter<LoyaltyCardCurso
} else{
mArchived.setVisibility(View.GONE);
}
mStarBorder.invalidate();
mStarBackground.invalidate();
mArchivedBackground.invalidate();
}
}
public int dpToPx(int dp, Context mContext) {
Resources r = mContext.getResources();
int px = (int) TypedValue.applyDimension(TypedValue.COMPLEX_UNIT_DIP, dp, r.getDisplayMetrics());
return px;
}
}

View File

File diff suppressed because it is too large Load Diff

View File

@@ -329,7 +329,7 @@ public class LoyaltyCardViewActivity extends CatimaAppCompatActivity implements
binding.bottomAppBarUpdateBalanceButton.setOnClickListener(view -> showBalanceUpdateDialog());
binding.iconContainer.setOnClickListener(view -> {
if (Utils.retrieveCardImage(this, loyaltyCard.id, ImageLocationType.icon) != null) {
if (loyaltyCard.getImageThumbnail(this) != null) {
openImageInGallery(ImageType.ICON);
} else {
Toast.makeText(LoyaltyCardViewActivity.this, R.string.icon_header_click_text, Toast.LENGTH_LONG).show();
@@ -660,7 +660,7 @@ public class LoyaltyCardViewActivity extends CatimaAppCompatActivity implements
window.setAttributes(attributes);
}
loyaltyCard = DBHelper.getLoyaltyCard(database, loyaltyCardId);
loyaltyCard = DBHelper.getLoyaltyCard(this, database, loyaltyCardId);
if (loyaltyCard == null) {
Log.w(TAG, "Could not lookup loyalty card " + loyaltyCardId);
Toast.makeText(this, R.string.noCardExistsError, Toast.LENGTH_LONG).show();
@@ -719,8 +719,8 @@ public class LoyaltyCardViewActivity extends CatimaAppCompatActivity implements
editButtonIcon.setTint(Utils.needsDarkForeground(complementaryColor) ? Color.BLACK : Color.WHITE);
binding.fabEdit.setImageDrawable(editButtonIcon);
Bitmap icon = Utils.retrieveCardImage(this, loyaltyCard.id, ImageLocationType.icon);
Utils.setIconOrTextWithBackground(this, loyaltyCard, icon, binding.iconImage, binding.iconText);
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);
@@ -748,12 +748,12 @@ public class LoyaltyCardViewActivity extends CatimaAppCompatActivity implements
imageTypes.add(ImageType.BARCODE);
}
frontImageBitmap = Utils.retrieveCardImage(this, loyaltyCard.id, ImageLocationType.front);
frontImageBitmap = loyaltyCard.getImageFront(this);
if (frontImageBitmap != null) {
imageTypes.add(ImageType.IMAGE_FRONT);
}
backImageBitmap = Utils.retrieveCardImage(this, loyaltyCard.id, ImageLocationType.back);
backImageBitmap = loyaltyCard.getImageBack(this);
if (backImageBitmap != null) {
imageTypes.add(ImageType.IMAGE_BACK);
}

View File

@@ -7,6 +7,7 @@ import android.content.Intent;
import android.content.SharedPreferences;
import android.database.CursorIndexOutOfBoundsException;
import android.database.sqlite.SQLiteDatabase;
import android.net.Uri;
import android.os.Build;
import android.os.Bundle;
import android.util.DisplayMetrics;
@@ -27,12 +28,14 @@ import androidx.appcompat.app.AlertDialog;
import androidx.appcompat.view.ActionMode;
import androidx.appcompat.widget.SearchView;
import androidx.core.splashscreen.SplashScreen;
import androidx.recyclerview.widget.GridLayoutManager;
import androidx.recyclerview.widget.RecyclerView;
import com.google.android.material.dialog.MaterialAlertDialogBuilder;
import com.google.android.material.floatingactionbutton.FloatingActionButton;
import com.google.android.material.tabs.TabLayout;
import java.io.File;
import java.io.UnsupportedEncodingException;
import java.util.ArrayList;
import java.util.Arrays;
@@ -43,6 +46,7 @@ import java.util.concurrent.atomic.AtomicInteger;
import protect.card_locker.databinding.ContentMainBinding;
import protect.card_locker.databinding.MainActivityBinding;
import protect.card_locker.databinding.SortingOptionBinding;
import protect.card_locker.preferences.Settings;
import protect.card_locker.preferences.SettingsActivity;
public class MainActivity extends CatimaAppCompatActivity implements LoyaltyCardCursorAdapter.CardAdapterListener {
@@ -52,6 +56,7 @@ public class MainActivity extends CatimaAppCompatActivity implements LoyaltyCard
public static final String RESTART_ACTIVITY_INTENT = "restart_activity_intent";
private static final int MEDIUM_SCALE_FACTOR_DIP = 460;
static final String STATE_SEARCH_QUERY = "SEARCH_QUERY";
private SQLiteDatabase mDatabase;
private LoyaltyCardCursorAdapter mAdapter;
@@ -59,6 +64,8 @@ public class MainActivity extends CatimaAppCompatActivity implements LoyaltyCard
private SearchView mSearchView;
private int mLoyaltyCardCount = 0;
protected String mFilter = "";
private String currentQuery = "";
private String finalQuery = "";
protected Object mGroup = null;
protected DBHelper.LoyaltyCardOrder mOrder = DBHelper.LoyaltyCardOrder.Alpha;
protected DBHelper.LoyaltyCardOrderDirection mOrderDirection = DBHelper.LoyaltyCardOrderDirection.Ascending;
@@ -68,9 +75,7 @@ public class MainActivity extends CatimaAppCompatActivity implements LoyaltyCard
private View mNoMatchingCardsText;
private View mNoGroupCardsText;
private TabLayout groupsTabLayout;
private Runnable mUpdateLoyaltyCardListRunnable;
private ActivityResultLauncher<Intent> mBarcodeScannerLauncher;
private ActivityResultLauncher<Intent> mSettingsLauncher;
@@ -198,6 +203,27 @@ public class MainActivity extends CatimaAppCompatActivity implements LoyaltyCard
SplashScreen.installSplashScreen(this);
super.onCreate(inputSavedInstanceState);
// Delete old cache files
// These could be temporary images for the cropper, temporary images in LoyaltyCard toBundle/writeParcel/ etc.
new Thread(() -> {
long twentyFourHoursAgo = System.currentTimeMillis() - (1000 * 60 * 60 * 24);
File[] tempFiles = getCacheDir().listFiles();
if (tempFiles == null) {
Log.e(TAG, "getCacheDir().listFiles() somehow returned null, this should never happen... Skipping cache cleanup...");
return;
}
for (File file : tempFiles) {
if (file.lastModified() < twentyFourHoursAgo) {
if (!file.delete()) {
Log.w(TAG, "Failed to delete cache file " + file.getPath());
}
};
}
}).start();
// We should extract the share intent after we called the super.onCreate as it may need to spawn a dialog window and the app needs to be initialized to not crash
extractIntentFields(getIntent());
@@ -249,21 +275,15 @@ public class MainActivity extends CatimaAppCompatActivity implements LoyaltyCard
mCardList.setAdapter(mAdapter);
registerForContextMenu(mCardList);
mGroup = null;
updateLoyaltyCardList(true);
mBarcodeScannerLauncher = registerForActivityResult(new ActivityResultContracts.StartActivityForResult(), result -> {
// Exit early if the user cancelled the scan (pressed back/home)
if (result.getResultCode() != RESULT_OK) {
return;
}
Intent intent = result.getData();
List<BarcodeValues> barcodeValuesList = Utils.parseSetBarcodeActivityResult(Utils.BARCODE_SCAN, result.getResultCode(), intent, this);
Bundle inputBundle = intent.getExtras();
String group = inputBundle != null ? inputBundle.getString(LoyaltyCardEditActivity.BUNDLE_ADDGROUP) : null;
processBarcodeValuesList(barcodeValuesList, group, false);
Intent editIntent = new Intent(getApplicationContext(), LoyaltyCardEditActivity.class);
editIntent.putExtras(result.getData().getExtras());
startActivity(editIntent);
});
mSettingsLauncher = registerForActivityResult(new ActivityResultContracts.StartActivityForResult(), result -> {
@@ -299,7 +319,6 @@ public class MainActivity extends CatimaAppCompatActivity implements LoyaltyCard
if (mSearchView != null && !mSearchView.isIconified()) {
mFilter = mSearchView.getQuery().toString();
}
// Start of active tab logic
updateTabGroups(groupsTabLayout);
@@ -357,6 +376,12 @@ public class MainActivity extends CatimaAppCompatActivity implements LoyaltyCard
mBarcodeScannerLauncher.launch(intent);
});
addButton.bringToFront();
var layoutManager = (GridLayoutManager) mCardList.getLayoutManager();
if (layoutManager != null) {
var settings = new Settings(this);
layoutManager.setSpanCount(settings.getPreferredColumnCount());
}
}
private void displayCardSetupOptions(Menu menu, boolean shouldShow) {
@@ -418,21 +443,16 @@ public class MainActivity extends CatimaAppCompatActivity implements LoyaltyCard
}
}
private void processBarcodeValuesList(List<BarcodeValues> barcodeValuesList, String group, boolean closeAppOnNoBarcode) {
if (barcodeValuesList.isEmpty()) {
throw new IllegalArgumentException("barcodesValues may not be empty");
private void processParseResultList(List<ParseResult> parseResultList, String group, boolean closeAppOnNoBarcode) {
if (parseResultList.isEmpty()) {
throw new IllegalArgumentException("parseResultList may not be empty");
}
Utils.makeUserChooseBarcodeFromList(MainActivity.this, barcodeValuesList, new BarcodeValuesListDisambiguatorCallback() {
Utils.makeUserChooseParseResultFromList(MainActivity.this, parseResultList, new ParseResultListDisambiguatorCallback() {
@Override
public void onUserChoseBarcode(BarcodeValues barcodeValues) {
CatimaBarcode barcodeType = barcodeValues.format();
public void onUserChoseParseResult(ParseResult parseResult) {
Intent intent = new Intent(getApplicationContext(), LoyaltyCardEditActivity.class);
Bundle bundle = new Bundle();
bundle.putString(LoyaltyCard.BUNDLE_LOYALTY_CARD_CARD_ID, barcodeValues.content());
bundle.putString(LoyaltyCard.BUNDLE_LOYALTY_CARD_BARCODE_TYPE, barcodeType != null ? barcodeType.name() : null);
bundle.putString(LoyaltyCard.BUNDLE_LOYALTY_CARD_BARCODE_ID, null);
Bundle bundle = parseResult.toLoyaltyCardBundle(MainActivity.this);
if (group != null) {
bundle.putString(LoyaltyCardEditActivity.BUNDLE_ADDGROUP, group);
}
@@ -453,28 +473,53 @@ public class MainActivity extends CatimaAppCompatActivity implements LoyaltyCard
String receivedAction = intent.getAction();
String receivedType = intent.getType();
// Check if an image or file was shared to us
if (Intent.ACTION_SEND.equals(receivedAction)) {
List<BarcodeValues> barcodeValuesList;
if (receivedAction == null || receivedType == null) {
return;
}
if (receivedType.equals("text/plain")) {
barcodeValuesList = Collections.singletonList(new BarcodeValues(null, intent.getStringExtra(Intent.EXTRA_TEXT)));
} else if (receivedType.startsWith("image/")) {
barcodeValuesList = Utils.retrieveBarcodesFromImage(this, intent.getParcelableExtra(Intent.EXTRA_STREAM));
List<ParseResult> parseResultList;
// Check for shared text
if (receivedAction.equals(Intent.ACTION_SEND) && receivedType.equals("text/plain")) {
LoyaltyCard loyaltyCard = new LoyaltyCard();
loyaltyCard.setCardId(intent.getStringExtra(Intent.EXTRA_TEXT));
parseResultList = Collections.singletonList(new ParseResult(ParseResultType.BARCODE_ONLY, loyaltyCard));
} else {
// Parse whatever file was sent, regardless of opening or sharing
Uri data;
if (receivedAction.equals(Intent.ACTION_VIEW)) {
data = intent.getData();
} else if (receivedAction.equals(Intent.ACTION_SEND)) {
data = intent.getParcelableExtra(Intent.EXTRA_STREAM);
} else {
Log.e(TAG, "Wrong action type to parse intent");
return;
}
if (receivedType.startsWith("image/")) {
parseResultList = Utils.retrieveBarcodesFromImage(this, data);
} else if (receivedType.equals("application/pdf")) {
barcodeValuesList = Utils.retrieveBarcodesFromPdf(this, intent.getParcelableExtra(Intent.EXTRA_STREAM));
parseResultList = Utils.retrieveBarcodesFromPdf(this, data);
} else if (Arrays.asList("application/vnd.apple.pkpass", "application/vnd-com.apple.pkpass").contains(receivedType)) {
parseResultList = Utils.retrieveBarcodesFromPkPass(this, data);
} else if (receivedType.equals("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 {
Log.e(TAG, "Wrong mime-type");
return;
}
if (barcodeValuesList.isEmpty()) {
finish();
return;
}
processBarcodeValuesList(barcodeValuesList, null, true);
}
// Give up if we should parse but there is nothing to parse
if (parseResultList == null || parseResultList.isEmpty()) {
finish();
return;
}
processParseResultList(parseResultList, null, true);
}
private void extractIntentFields(Intent intent) {
@@ -508,6 +553,24 @@ public class MainActivity extends CatimaAppCompatActivity implements LoyaltyCard
}
@Override
// Saving currentQuery to finalQuery for user, this will be used to restore search history, happens when user clicks a card from list
protected void onSaveInstanceState(@NonNull Bundle outState) {
super.onSaveInstanceState(outState);
finalQuery = currentQuery;
// Putting the query also into outState for later use in onRestoreInstanceState when rotating screen
if (mSearchView != null) {
outState.putString(STATE_SEARCH_QUERY, finalQuery);
}
}
@Override
// Restoring instance state when rotation of screen happens with the goal to restore search query for user
protected void onRestoreInstanceState(@NonNull Bundle savedInstanceState) {
super.onRestoreInstanceState(savedInstanceState);
finalQuery = savedInstanceState.getString(STATE_SEARCH_QUERY, "");
}
@Override
public boolean onCreateOptionsMenu(Menu inputMenu) {
getMenuInflater().inflate(R.menu.main_menu, inputMenu);
@@ -520,7 +583,6 @@ public class MainActivity extends CatimaAppCompatActivity implements LoyaltyCard
mSearchView = (SearchView) searchMenuItem.getActionView();
mSearchView.setSearchableInfo(searchManager.getSearchableInfo(getComponentName()));
mSearchView.setSubmitButtonEnabled(false);
mSearchView.setOnCloseListener(() -> {
invalidateOptionsMenu();
return false;
@@ -545,6 +607,9 @@ public class MainActivity extends CatimaAppCompatActivity implements LoyaltyCard
mSearchView.clearFocus();
return false;
}
currentQuery = "";
mFilter = "";
updateLoyaltyCardList(false);
return true;
}
});
@@ -559,7 +624,21 @@ public class MainActivity extends CatimaAppCompatActivity implements LoyaltyCard
@Override
public boolean onQueryTextChange(String newText) {
mFilter = newText;
// New logic to ensure search history after coming back from picked card - user will see the last search query
if (newText.isEmpty()) {
if(!finalQuery.isEmpty()){
// Setting the query text for user after coming back from picked card from finalQuery
mSearchView.setQuery(finalQuery, false);
}
else if(!currentQuery.isEmpty()){
// Else if is needed in case user deletes search - expected behaviour is to show all cards
currentQuery = "";
mSearchView.setQuery(currentQuery, false);
}
} else {
// Setting search query each time user changes the text in search to temporary variable to be used later in finalQuery String which will be used to restore search history
currentQuery = newText;
}
TabLayout.Tab currentTab = groupsTabLayout.getTabAt(groupsTabLayout.getSelectedTabPosition());
mGroup = currentTab != null ? currentTab.getTag() : null;
@@ -568,6 +647,14 @@ public class MainActivity extends CatimaAppCompatActivity implements LoyaltyCard
return true;
}
});
// Check if we came from a picked card back to search, in that case we want to show the search view with previous search query
if(!finalQuery.isEmpty()){
// Expand the search view to show the query
searchMenuItem.expandActionView();
// Setting the query text to empty String due to behaviour of onQueryTextChange after coming back from picked card - onQueryTextChange is called automatically without users interaction
finalQuery = "";
mSearchView.setQuery(currentQuery, false);
}
}
return super.onCreateOptionsMenu(inputMenu);

View File

@@ -33,7 +33,7 @@ public class ManageGroupCursorAdapter extends LoyaltyCardCursorAdapter {
@Override
public void onBindViewHolder(LoyaltyCardListItemViewHolder inputHolder, Cursor inputCursor) {
LoyaltyCard loyaltyCard = LoyaltyCard.fromCursor(inputCursor);
LoyaltyCard loyaltyCard = LoyaltyCard.fromCursor(mContext, inputCursor);
Boolean overlayValue = mInGroupOverlay.get(loyaltyCard.id);
if ((overlayValue != null ? overlayValue : isLoyaltyCardInGroup(loyaltyCard.id))) {
mAnimationItemsIndex.put(inputCursor.getPosition(), true);

View File

@@ -0,0 +1,31 @@
package protect.card_locker
import android.content.Context
import android.os.Bundle
class ParseResult(
val parseResultType: ParseResultType,
val loyaltyCard: LoyaltyCard) {
var note: String? = null
fun toLoyaltyCardBundle(context: Context): Bundle {
when (parseResultType) {
ParseResultType.FULL -> return loyaltyCard.toBundle(context, listOf())
ParseResultType.BARCODE_ONLY -> {
val defaultLoyaltyCard = LoyaltyCard()
defaultLoyaltyCard.setBarcodeId(null)
defaultLoyaltyCard.setBarcodeType(loyaltyCard.barcodeType)
defaultLoyaltyCard.setCardId(loyaltyCard.cardId)
return defaultLoyaltyCard.toBundle(
context,
listOf(
LoyaltyCard.BUNDLE_LOYALTY_CARD_BARCODE_ID,
LoyaltyCard.BUNDLE_LOYALTY_CARD_BARCODE_TYPE,
LoyaltyCard.BUNDLE_LOYALTY_CARD_CARD_ID
)
)
}
}
}
}

View File

@@ -0,0 +1,6 @@
package protect.card_locker;
public interface ParseResultListDisambiguatorCallback {
void onUserChoseParseResult(ParseResult parseResult);
void onUserDismissedSelector();
}

View File

@@ -0,0 +1,6 @@
package protect.card_locker
enum class ParseResultType {
FULL,
BARCODE_ONLY
}

View File

@@ -0,0 +1,437 @@
package protect.card_locker
import android.content.Context
import android.graphics.Bitmap
import android.graphics.Color
import android.net.Uri
import android.util.ArrayMap
import android.util.Log
import com.google.zxing.BarcodeFormat
import net.lingala.zip4j.io.inputstream.ZipInputStream
import net.lingala.zip4j.model.LocalFileHeader
import org.json.JSONException
import org.json.JSONObject
import java.io.FileNotFoundException
import java.io.IOException
import java.math.BigDecimal
import java.text.DateFormat
import java.text.ParseException
import java.time.ZonedDateTime
import java.time.format.DateTimeParseException
import java.util.Currency
import java.util.Date
class PkpassParser(context: Context, uri: Uri?) {
private var mContext = context
private var translations: ArrayMap<String, Map<String, String>> = ArrayMap()
private var passContent: JSONObject? = null
private var store: String? = null
private var note: String? = null
private var validFrom: Date? = null
private var expiry: Date? = null
private val balance: BigDecimal = BigDecimal(0)
private val balanceType: Currency? = null
private var cardId: String? = null
private var barcodeId: String? = null
private var barcodeType: CatimaBarcode? = null
private var headerColor: Int? = null
private val starStatus = 0
private val lastUsed: Long = 0
private val zoomLevel = DBHelper.DEFAULT_ZOOM_LEVEL
private var archiveStatus = 0
var image: Bitmap? = null
private set
private var logoSize = 0
init {
if (passContent != null) {
throw IllegalStateException("Pkpass instance already initialized!")
}
mContext = context
Log.i(TAG, "Received Pkpass file")
if (uri == null) {
Log.e(TAG, "Uri did not contain any data")
throw IOException(context.getString(R.string.errorReadingFile))
}
try {
mContext.contentResolver.openInputStream(uri).use { inputStream ->
ZipInputStream(inputStream).use { zipInputStream ->
var localFileHeader: LocalFileHeader
while ((zipInputStream.nextEntry.also { localFileHeader = it }) != null) {
// Ignore directories
if (localFileHeader.isDirectory) continue
// We assume there are three options, as per spec:
// language.lproj/pass.strings
// file.extension
// More directories are ignored
val filenameParts = localFileHeader.fileName.split('/')
if (filenameParts.size > 2) {
continue
} else if (filenameParts.size == 2) {
// Doesn't seem like a language directory, ignore
if (!filenameParts[0].endsWith(".lproj")) continue
val locale = filenameParts[0].removeSuffix(".lproj")
translations[locale] = parseLanguageStrings(ZipUtils.read(zipInputStream))
}
// Not a language, parse as normal files
when (localFileHeader.fileName) {
"logo.png" -> loadImageIfBiggerSize(1, zipInputStream)
"logo@2x.png" -> loadImageIfBiggerSize(2, zipInputStream)
"logo@3x.png" -> loadImageIfBiggerSize(3, zipInputStream)
"pass.json" -> passContent = ZipUtils.readJSON(zipInputStream) // Parse this last, so we're sure we have all language info
}
}
checkNotNull(passContent) { "File lacks pass.json" }
}
}
} catch (e: FileNotFoundException) {
throw IOException(mContext.getString(R.string.errorReadingFile))
} catch (e: Exception) {
throw e
}
}
fun listLocales(): List<String> {
return translations.keys.toList()
}
fun toLoyaltyCard(locale: String?): LoyaltyCard {
parsePassJSON(checkNotNull(passContent) { "Pkpass instance not yet initialized!" }, locale)
return LoyaltyCard(
-1,
store,
note,
validFrom,
expiry,
balance,
balanceType,
cardId,
barcodeId,
barcodeType,
headerColor,
starStatus,
lastUsed,
zoomLevel,
archiveStatus,
image,
null,
null,
null,
null,
null
)
}
private fun getTranslation(string: String, locale: String?): String {
if (locale == null) {
return string
}
val localeStrings = translations[locale]
return localeStrings?.get(string) ?: string
}
private fun loadImageIfBiggerSize(fileLogoSize: Int, zipInputStream: ZipInputStream) {
if (logoSize < fileLogoSize) {
image = ZipUtils.readImage(zipInputStream)
logoSize = fileLogoSize
}
}
private fun parseColor(color: String): Int? {
// First, try formats supported by Android natively
try {
return Color.parseColor(color)
} catch (ignored: IllegalArgumentException) {}
// If that didn't work, try parsing it as a rbg(0,0,255) value
val red: Int;
val green: Int;
val blue: Int;
// Parse rgb(0,0,0) string
val rgbInfo = Regex("""^rgb\(\s*(?<red>\d+)\s*,\s*(?<green>\d+)\s*,\s*(?<blue>\d+)\s*\)$""").find(color)
if (rgbInfo == null) {
return null
}
// Convert to integers
try {
red = rgbInfo.groups[1]!!.value.toInt()
green = rgbInfo.groups[2]!!.value.toInt()
blue = rgbInfo.groups[3]!!.value.toInt()
} catch (e: NumberFormatException) {
return null
}
// Ensure everything is in a valid range as Color.rgb does not do range checks
if (red < 0 || red > 255) return null
if (green < 0 || green > 255) return null
if (blue < 0 || blue > 255) return null
return Color.rgb(red, green, blue)
}
private fun parseDateTime(dateTime: String): Date {
return Date.from(ZonedDateTime.parse(dateTime).toInstant())
}
private fun parseLanguageStrings(data: String): Map<String, String> {
val output = ArrayMap<String, String>()
// Translations look like this:
// "key_name" = "Translated value";
//
// However, "Translated value" may be multiple lines and may contain " (however, it'll be escaped)
var translationLine = StringBuilder()
for (line in data.lines()) {
translationLine.append(line)
// Make sure we don't have a false ending (this is the escaped double quote: \";)
if (!line.endsWith("\\\";") and line.endsWith("\";")) {
// We reached a translation ending, time to parse it
// 1. Split into key and value
// 2. Remove cruft of each
// 3. Clean up escape sequences
val keyValue = translationLine.toString().split("=", ignoreCase = false, limit = 2)
val key = keyValue[0].trim().removePrefix("\"").removeSuffix("\"")
val value = keyValue[1].trim().removePrefix("\"").removeSuffix("\";").replace("\\", "")
output[key] = value
translationLine = StringBuilder()
} else {
translationLine.append("\n")
}
}
return output
}
private fun parsePassJSON(jsonObject: JSONObject, locale: String?) {
if (jsonObject.getInt("formatVersion") != 1) {
throw IllegalArgumentException(mContext.getString(R.string.unsupportedFile))
}
// Prefer logoText for store, it's generally shorter
try {
store = jsonObject.getString("logoText")
} catch (ignored: JSONException) {}
if (store.isNullOrEmpty()) {
store = jsonObject.getString("organizationName")
}
val noteText = StringBuilder()
noteText.append(getTranslation(jsonObject.getString("description"), locale))
try {
validFrom = parseDateTime(jsonObject.getString("relevantDate"))
} catch (ignored: JSONException) {}
try {
expiry = parseDateTime(jsonObject.getString("expirationDate"))
} catch (ignored: JSONException) {}
try {
headerColor = parseColor(jsonObject.getString("backgroundColor"))
} catch (ignored: JSONException) {}
var pkPassHasBarcodes = false
var validBarcodeFound = false
// Create a list of possible barcodes
val barcodes = ArrayList<JSONObject>()
// Append the non-deprecated entries
try {
val foundInBarcodesField = jsonObject.getJSONArray("barcodes")
for (i in 0 until foundInBarcodesField.length()) {
barcodes.add(foundInBarcodesField.getJSONObject(i))
}
} catch (ignored: JSONException) {}
// Append the deprecated entry if it exists
try {
barcodes.add(jsonObject.getJSONObject("barcode"))
} catch (ignored: JSONException) {}
for (barcode in barcodes) {
pkPassHasBarcodes = true
try {
parsePassJSONBarcodeField(barcode)
validBarcodeFound = true
break
} catch (ignored: IllegalArgumentException) {}
}
if (pkPassHasBarcodes && !validBarcodeFound) {
throw FormatException(mContext.getString(R.string.errorReadingFile))
}
// An used card being "archived" probably is the most sensible way to map "voided"
archiveStatus = try {
if (jsonObject.getBoolean("voided")) 1 else 0
} catch (ignored: JSONException) {
0
}
// Append type-specific info to the pass
noteText.append("\n\n")
// Find the relevant pass type and parse it
var hasPassData = false
for (passType in listOf("boardingPass", "coupon", "eventTicket", "generic")) {
try {
noteText.append(
parsePassJSONPassFields(
jsonObject.getJSONObject(passType),
locale
)
)
hasPassData = true
break
} catch (ignored: JSONException) {}
}
// Failed to parse anything, error out
if (!hasPassData) {
throw FormatException(mContext.getString(R.string.errorReadingFile))
}
note = noteText.toString()
}
/* Return success or failure */
private fun parsePassJSONBarcodeField(barcodeInfo: JSONObject) {
val format = barcodeInfo.getString("format")
// We only need to check these 4 formats as no other options are valid in the PkPass spec
barcodeType = when(format) {
"PKBarcodeFormatQR" -> CatimaBarcode.fromBarcode(BarcodeFormat.QR_CODE)
"PKBarcodeFormatPDF417" -> CatimaBarcode.fromBarcode(BarcodeFormat.PDF_417)
"PKBarcodeFormatAztec" -> CatimaBarcode.fromBarcode(BarcodeFormat.AZTEC)
"PKBarcodeFormatCode128" -> CatimaBarcode.fromBarcode(BarcodeFormat.CODE_128)
else -> throw IllegalArgumentException("No valid barcode type")
}
// FIXME: We probably need to do something with the messageEncoding field
try {
cardId = barcodeInfo.getString("altText")
barcodeId = barcodeInfo.getString("message")
} catch (ignored: JSONException) {
cardId = barcodeInfo.getString("message")
barcodeId = null
}
// Don't set barcodeId if it's the same as cardId
if (cardId == barcodeId) {
barcodeId = null
}
}
private fun parsePassJSONPassFields(fieldsParent: JSONObject, locale: String?): String {
// These fields contain a lot of info on where we're supposed to display them, but Catima doesn't really have anything for that
// So for now, throw them all into the description field in a logical order
val noteContents: MutableList<String> = ArrayList()
// Collect all the groups of fields that exist
for (fieldType in listOf("headerFields", "primaryFields", "secondaryFields", "auxiliaryFields", "backFields")) {
val content = StringBuilder()
try {
val fieldArray = fieldsParent.getJSONArray(fieldType)
for (i in 0 until fieldArray.length()) {
val entry = fieldArray.getJSONObject(i)
content.append(parsePassJSONPassField(entry, locale))
// If this is not the last part, add spacing on the end
if (i < (fieldArray.length() - 1)) {
content.append("\n")
}
}
} catch (ignore: JSONException) {
} catch (ignore: ParseException) {
}
if (content.isNotEmpty()) {
noteContents.add(content.toString())
}
}
// Merge all field groups together, one paragraph for field group
val output = StringBuilder()
for (i in 0 until noteContents.size) {
output.append(noteContents[i])
// If this is not the last part, add newlines to separate
if (i < (noteContents.size - 1)) {
output.append("\n\n")
}
}
return output.toString()
}
private fun parsePassJSONPassField(field: JSONObject, locale: String?): String {
// Value may be a localizable string, a date or a number. So let's try to parse it as a date first
var value = getTranslation(field.getString("value"), locale)
try {
value = DateFormat.getDateTimeInstance().format(parseDateTime(value))
} catch (ignored: DateTimeParseException) {
// It's fine if it's not a date
}
// FIXME: Use the Android thing for formatted strings here
if (field.has("currencyCode")) {
val valueCurrency = Currency.getInstance(field.getString("currencyCode"))
value = Utils.formatBalance(
mContext,
Utils.parseBalance(value, valueCurrency),
valueCurrency
)
} else if (field.has("numberStyle")) {
if (field.getString("numberStyle") == "PKNumberStylePercent") {
// FIXME: Android formatting string
value = "${value}%"
}
}
val label = getTranslation(field.getString("label"), locale)
if (label.isNotEmpty()) {
return "$label: $value"
}
return value
}
companion object {
private const val TAG = "Catima"
}
}

View File

@@ -67,6 +67,7 @@ public class ScanActivity extends CatimaAppCompatActivity {
private static final int PERMISSION_SCAN_ADD_FROM_IMAGE = 100;
private static final int PERMISSION_SCAN_ADD_FROM_PDF = 101;
private static final int PERMISSION_SCAN_ADD_FROM_PKPASS = 102;
private CaptureManager capture;
private DecoratedBarcodeView barcodeScannerView;
@@ -79,6 +80,7 @@ public class ScanActivity extends CatimaAppCompatActivity {
// can't use the pre-made contract because that launches the file manager for image type instead of gallery
private ActivityResultLauncher<Intent> photoPickerLauncher;
private ActivityResultLauncher<Intent> pdfPickerLauncher;
private ActivityResultLauncher<Intent> pkpassPickerLauncher;
static final String STATE_SCANNER_ACTIVE = "scannerActive";
private boolean mScannerActive = true;
@@ -107,6 +109,7 @@ public class ScanActivity extends CatimaAppCompatActivity {
manualAddLauncher = registerForActivityResult(new ActivityResultContracts.StartActivityForResult(), result -> handleActivityResult(Utils.SELECT_BARCODE_REQUEST, result.getResultCode(), result.getData()));
photoPickerLauncher = registerForActivityResult(new ActivityResultContracts.StartActivityForResult(), result -> handleActivityResult(Utils.BARCODE_IMPORT_FROM_IMAGE_FILE, result.getResultCode(), result.getData()));
pdfPickerLauncher = registerForActivityResult(new ActivityResultContracts.StartActivityForResult(), result -> handleActivityResult(Utils.BARCODE_IMPORT_FROM_PDF_FILE, result.getResultCode(), result.getData()));
pkpassPickerLauncher = registerForActivityResult(new ActivityResultContracts.StartActivityForResult(), result -> handleActivityResult(Utils.BARCODE_IMPORT_FROM_PKPASS_FILE, result.getResultCode(), result.getData()));
customBarcodeScannerBinding.fabOtherOptions.setOnClickListener(view -> {
setScannerActive(false);
@@ -116,12 +119,14 @@ public class ScanActivity extends CatimaAppCompatActivity {
getString(R.string.addManually),
getString(R.string.addFromImage),
getString(R.string.addFromPdfFile),
getString(R.string.addFromPkpass)
};
Object[] icons = new Object[]{
R.drawable.baseline_block_24,
R.drawable.ic_edit,
R.drawable.baseline_image_24,
R.drawable.baseline_picture_as_pdf_24,
R.drawable.local_activity_24px
};
String[] columns = new String[]{"text", "icon"};
@@ -156,7 +161,10 @@ public class ScanActivity extends CatimaAppCompatActivity {
addFromImage();
break;
case 3:
addFromPdfFile();
addFromPdf();
break;
case 4:
addFromPkPass();
break;
default:
throw new IllegalArgumentException("Unknown 'Add a card in a different way' dialog option");
@@ -181,16 +189,11 @@ public class ScanActivity extends CatimaAppCompatActivity {
barcodeScannerView.decodeSingle(new BarcodeCallback() {
@Override
public void barcodeResult(BarcodeResult result) {
Intent scanResult = new Intent();
Bundle scanResultBundle = new Bundle();
scanResultBundle.putString(BARCODE_CONTENTS, result.getText());
scanResultBundle.putString(BARCODE_FORMAT, result.getBarcodeFormat().name());
if (addGroup != null) {
scanResultBundle.putString(LoyaltyCardEditActivity.BUNDLE_ADDGROUP, addGroup);
}
scanResult.putExtras(scanResultBundle);
ScanActivity.this.setResult(RESULT_OK, scanResult);
finish();
LoyaltyCard loyaltyCard = new LoyaltyCard();
loyaltyCard.setCardId(result.getText());
loyaltyCard.setBarcodeType(CatimaBarcode.fromBarcode(result.getBarcodeFormat()));
returnResult(new ParseResult(ParseResultType.BARCODE_ONLY, loyaltyCard));
}
@Override
@@ -294,35 +297,31 @@ public class ScanActivity extends CatimaAppCompatActivity {
mScannerActive = isActive;
}
private void returnResult(String barcodeContents, String barcodeFormat) {
Intent manualResult = new Intent();
Bundle manualResultBundle = new Bundle();
manualResultBundle.putString(BARCODE_CONTENTS, barcodeContents);
manualResultBundle.putString(BARCODE_FORMAT, barcodeFormat);
private void returnResult(ParseResult parseResult) {
Intent result = new Intent();
Bundle bundle = parseResult.toLoyaltyCardBundle(ScanActivity.this);
if (addGroup != null) {
manualResultBundle.putString(LoyaltyCardEditActivity.BUNDLE_ADDGROUP, addGroup);
bundle.putString(LoyaltyCardEditActivity.BUNDLE_ADDGROUP, addGroup);
}
manualResult.putExtras(manualResultBundle);
ScanActivity.this.setResult(RESULT_OK, manualResult);
result.putExtras(bundle);
ScanActivity.this.setResult(RESULT_OK, result);
finish();
}
private void handleActivityResult(int requestCode, int resultCode, Intent intent) {
super.onActivityResult(requestCode, resultCode, intent);
List<BarcodeValues> barcodeValuesList = Utils.parseSetBarcodeActivityResult(requestCode, resultCode, intent, this);
List<ParseResult> parseResultList = Utils.parseSetBarcodeActivityResult(requestCode, resultCode, intent, this);
if (barcodeValuesList.isEmpty()) {
if (parseResultList.isEmpty()) {
setScannerActive(true);
return;
}
Utils.makeUserChooseBarcodeFromList(this, barcodeValuesList, new BarcodeValuesListDisambiguatorCallback() {
Utils.makeUserChooseParseResultFromList(this, parseResultList, new ParseResultListDisambiguatorCallback() {
@Override
public void onUserChoseBarcode(BarcodeValues barcodeValues) {
CatimaBarcode barcodeType = barcodeValues.format();
returnResult(barcodeValues.content(), barcodeType != null ? barcodeType.name() : null);
public void onUserChoseParseResult(ParseResult parseResult) {
returnResult(parseResult);
}
@Override
@@ -369,7 +368,9 @@ public class ScanActivity extends CatimaAppCompatActivity {
// Buttons
builder.setPositiveButton(getString(R.string.ok), (dialog, which) -> {
returnResult(input.getText().toString(), null);
LoyaltyCard loyaltyCard = new LoyaltyCard();
loyaltyCard.setCardId(input.getText().toString());
returnResult(new ParseResult(ParseResultType.BARCODE_ONLY, loyaltyCard));
});
builder.setNegativeButton(getString(R.string.cancel), (dialog, which) -> dialog.cancel());
AlertDialog dialog = builder.create();
@@ -418,10 +419,14 @@ public class ScanActivity extends CatimaAppCompatActivity {
PermissionUtils.requestStorageReadPermission(this, PERMISSION_SCAN_ADD_FROM_IMAGE);
}
public void addFromPdfFile() {
public void addFromPdf() {
PermissionUtils.requestStorageReadPermission(this, PERMISSION_SCAN_ADD_FROM_PDF);
}
public void addFromPkPass() {
PermissionUtils.requestStorageReadPermission(this, PERMISSION_SCAN_ADD_FROM_PKPASS);
}
private void addFromImageOrFileAfterPermission(String mimeType, ActivityResultLauncher<Intent> launcher, int chooserText, int errorMessage) {
Intent photoPickerIntent = new Intent(Intent.ACTION_PICK);
photoPickerIntent.setType(mimeType);
@@ -511,12 +516,14 @@ public class ScanActivity extends CatimaAppCompatActivity {
} else {
showCameraPermissionMissingText();
}
} else if (requestCode == PERMISSION_SCAN_ADD_FROM_IMAGE || requestCode == PERMISSION_SCAN_ADD_FROM_PDF) {
} else if (requestCode == PERMISSION_SCAN_ADD_FROM_IMAGE || requestCode == PERMISSION_SCAN_ADD_FROM_PDF || requestCode == PERMISSION_SCAN_ADD_FROM_PKPASS) {
if (granted) {
if (requestCode == PERMISSION_SCAN_ADD_FROM_IMAGE) {
addFromImageOrFileAfterPermission("image/*", photoPickerLauncher, R.string.addFromImage, R.string.failedLaunchingPhotoPicker);
} else {
} else if (requestCode == PERMISSION_SCAN_ADD_FROM_PDF) {
addFromImageOrFileAfterPermission("application/pdf", pdfPickerLauncher, R.string.addFromPdfFile, R.string.failedLaunchingFileManager);
} else {
addFromImageOrFileAfterPermission("application/*", pkpassPickerLauncher, R.string.addFromPkpass, R.string.failedLaunchingFileManager);
}
} else {
setScannerActive(true);

View File

@@ -33,7 +33,6 @@ class ShortcutHelper {
private static final int ADAPTIVE_BITMAP_SIZE = 108 * ADAPTIVE_BITMAP_SCALE;
private static final int ADAPTIVE_BITMAP_VISIBLE_SIZE = 72 * ADAPTIVE_BITMAP_SCALE;
private static final int ADAPTIVE_BITMAP_IMAGE_SIZE = ADAPTIVE_BITMAP_VISIBLE_SIZE + 5 * ADAPTIVE_BITMAP_SCALE;
private static final int PADDING_COLOR_OVERLAY = Color.argb(127, 0, 0, 0);
/**
* Add a card to the app shortcuts, and maintain a list of the most
@@ -87,7 +86,7 @@ class ShortcutHelper {
for (int index = 0; index < list.size(); index++) {
ShortcutInfoCompat prevShortcut = list.get(index);
LoyaltyCard loyaltyCard = DBHelper.getLoyaltyCard(database, Integer.parseInt(prevShortcut.getId()));
LoyaltyCard loyaltyCard = DBHelper.getLoyaltyCard(context, database, Integer.parseInt(prevShortcut.getId()));
// skip outdated cards that no longer exist
if (loyaltyCard != null) {
@@ -120,7 +119,7 @@ class ShortcutHelper {
Bitmap createAdaptiveBitmap(@NotNull Bitmap in, int paddingColor) {
Bitmap ret = Bitmap.createBitmap(ADAPTIVE_BITMAP_SIZE, ADAPTIVE_BITMAP_SIZE, Bitmap.Config.ARGB_8888);
Canvas output = new Canvas(ret);
output.drawColor(ColorUtils.compositeColors(PADDING_COLOR_OVERLAY, paddingColor));
output.drawColor(paddingColor);
Bitmap resized = Utils.resizeBitmap(in, ADAPTIVE_BITMAP_IMAGE_SIZE);
output.drawBitmap(resized, (ADAPTIVE_BITMAP_SIZE - resized.getWidth()) / 2f, (ADAPTIVE_BITMAP_SIZE - resized.getHeight()) / 2f, null);
return ret;
@@ -136,11 +135,11 @@ class ShortcutHelper {
bundle.putInt(LoyaltyCardViewActivity.BUNDLE_ID, loyaltyCard.id);
intent.putExtras(bundle);
Bitmap iconBitmap = Utils.retrieveCardImage(context, loyaltyCard.id, ImageLocationType.icon);
Bitmap iconBitmap = loyaltyCard.getImageThumbnail(context);
if (iconBitmap == null) {
iconBitmap = Utils.generateIcon(context, loyaltyCard, true).getLetterTile();
} else {
iconBitmap = createAdaptiveBitmap(iconBitmap, Utils.getHeaderColor(context, loyaltyCard));
iconBitmap = createAdaptiveBitmap(iconBitmap, Utils.needsDarkForeground(Utils.getHeaderColor(context, loyaltyCard)) ? Color.BLACK : Color.WHITE);
}
IconCompat icon = IconCompat.createWithAdaptiveBitmap(iconBitmap);

View File

@@ -9,6 +9,7 @@ import android.content.res.Resources;
import android.content.res.TypedArray;
import android.graphics.Bitmap;
import android.graphics.BitmapFactory;
import android.graphics.Canvas;
import android.graphics.Color;
import android.graphics.ImageDecoder;
import android.graphics.Matrix;
@@ -78,6 +79,7 @@ import java.util.Collections;
import java.util.Currency;
import java.util.Date;
import java.util.GregorianCalendar;
import java.util.HashMap;
import java.util.List;
import java.util.Locale;
import java.util.Map;
@@ -95,12 +97,13 @@ public class Utils {
public static final int BARCODE_SCAN = 3;
public static final int BARCODE_IMPORT_FROM_IMAGE_FILE = 4;
public static final int BARCODE_IMPORT_FROM_PDF_FILE = 5;
public static final int CARD_IMAGE_FROM_CAMERA_FRONT = 6;
public static final int CARD_IMAGE_FROM_CAMERA_BACK = 7;
public static final int CARD_IMAGE_FROM_CAMERA_ICON = 8;
public static final int CARD_IMAGE_FROM_FILE_FRONT = 9;
public static final int CARD_IMAGE_FROM_FILE_BACK = 10;
public static final int CARD_IMAGE_FROM_FILE_ICON = 11;
public static final int BARCODE_IMPORT_FROM_PKPASS_FILE = 6;
public static final int CARD_IMAGE_FROM_CAMERA_FRONT = 7;
public static final int CARD_IMAGE_FROM_CAMERA_BACK = 8;
public static final int CARD_IMAGE_FROM_CAMERA_ICON = 9;
public static final int CARD_IMAGE_FROM_FILE_FRONT = 10;
public static final int CARD_IMAGE_FROM_FILE_BACK = 11;
public static final int CARD_IMAGE_FROM_FILE_ICON = 12;
public static final String CARD_IMAGE_FILENAME_REGEX = "^(card_)(\\d+)(_(?:front|back|icon)\\.png)$";
@@ -143,7 +146,7 @@ public class Utils {
return ColorUtils.calculateLuminance(backgroundColor) > LUMINANCE_MIDPOINT;
}
static public List<BarcodeValues> retrieveBarcodesFromImage(Context context, Uri uri) {
static public List<ParseResult> retrieveBarcodesFromImage(Context context, Uri uri) {
Log.i(TAG, "Received image file with possible barcode");
if (uri == null) {
@@ -162,7 +165,7 @@ public class Utils {
return new ArrayList<>();
}
List<BarcodeValues> barcodesFromBitmap = getBarcodesFromBitmap(bitmap);
List<ParseResult> barcodesFromBitmap = getBarcodesFromBitmap(bitmap);
if (barcodesFromBitmap.isEmpty()) {
Log.i(TAG, "No barcode found in image file");
@@ -172,7 +175,39 @@ public class Utils {
return barcodesFromBitmap;
}
static public List<BarcodeValues> retrieveBarcodesFromPdf(Context context, Uri uri) {
static public List<ParseResult> retrieveBarcodesFromPkPass(Context context, Uri uri) {
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<>();
}
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<>();
}
List<String> locales = pkpassParser.listLocales();
if (locales.isEmpty()) {
return Collections.singletonList(new ParseResult(ParseResultType.FULL, pkpassParser.toLoyaltyCard(null)));
}
List<ParseResult> parseResultList = new ArrayList<>();
for (String locale : locales) {
ParseResult parseResult = new ParseResult(ParseResultType.FULL, pkpassParser.toLoyaltyCard(locale));
parseResult.setNote(locale);
parseResultList.add(parseResult);
}
return parseResultList;
}
static public List<ParseResult> retrieveBarcodesFromPdf(Context context, Uri uri) {
Log.i(TAG, "Received PDF file with possible barcode");
if (uri == null) {
Log.e(TAG, "Uri did not contain any data");
@@ -182,7 +217,7 @@ public class Utils {
ParcelFileDescriptor parcelFileDescriptor = null;
PdfRenderer renderer = null;
List<BarcodeValues> barcodesFromPdfPages = new ArrayList<>();
List<ParseResult> barcodesFromPdfPages = new ArrayList<>();
try {
parcelFileDescriptor = context.getContentResolver().openFileDescriptor(uri, "r");
@@ -194,13 +229,20 @@ public class Utils {
for (int i = 0; i < renderer.getPageCount(); i++) {
PdfRenderer.Page page = renderer.openPage(i);
renderedPage = Bitmap.createBitmap(page.getWidth(), page.getHeight(), Bitmap.Config.ARGB_8888);
// Ensure the page has a background
// Fixes some transparent PDF files not being read well
Canvas canvas = new Canvas(renderedPage);
canvas.drawColor(Color.WHITE);
canvas.drawBitmap(renderedPage, 0, 0, null);
page.render(renderedPage, null, null, PdfRenderer.Page.RENDER_MODE_FOR_DISPLAY);
page.close();
List<BarcodeValues> barcodesFromPage = getBarcodesFromBitmap(renderedPage);
for (BarcodeValues barcodeValues : barcodesFromPage) {
barcodeValues.setNote(String.format(context.getString(R.string.pageWithNumber), i+1));
barcodesFromPdfPages.add(barcodeValues);
List<ParseResult> barcodesFromPage = getBarcodesFromBitmap(renderedPage);
for (ParseResult parseResult : barcodesFromPage) {
parseResult.setNote(String.format(context.getString(R.string.pageWithNumber), i+1));
barcodesFromPdfPages.add(parseResult);
}
}
}
@@ -229,17 +271,17 @@ public class Utils {
}
/**
* Returns the Barcode format and content based on the result of an activity.
* It shows toasts to notify the end-user as needed itself and will return an empty
* BarcodeValues object if the activity was cancelled or nothing could be found.
* Returns the ParseResult based on the result of an activity.
* It shows toasts to notify the end-user as needed itself and will return an empty list if the
* activity was cancelled or nothing could be found.
*
* @param requestCode
* @param resultCode
* @param intent
* @param context
* @return BarcodeValues
* @return List<ParseResult>
*/
static public List<BarcodeValues> parseSetBarcodeActivityResult(int requestCode, int resultCode, Intent intent, Context context) {
static public List<ParseResult> parseSetBarcodeActivityResult(int requestCode, int resultCode, Intent intent, Context context) {
String contents;
String format;
@@ -255,6 +297,10 @@ public class Utils {
return retrieveBarcodesFromPdf(context, intent.getData());
}
if (requestCode == Utils.BARCODE_IMPORT_FROM_PKPASS_FILE) {
return retrieveBarcodesFromPkPass(context, intent.getData());
}
if (requestCode == Utils.BARCODE_SCAN || requestCode == Utils.SELECT_BARCODE_REQUEST) {
if (requestCode == Utils.BARCODE_SCAN) {
Log.i(TAG, "Received barcode information from camera");
@@ -268,7 +314,15 @@ public class Utils {
Log.i(TAG, "Read barcode id: " + contents);
Log.i(TAG, "Read format: " + format);
return Collections.singletonList(new BarcodeValues(format != null ? CatimaBarcode.fromName(format) : null, contents));
LoyaltyCard loyaltyCard = new LoyaltyCard();
if (format != null) {
loyaltyCard.setBarcodeType(CatimaBarcode.fromName(format));
}
if (contents != null) {
loyaltyCard.setCardId(contents);
}
return Collections.singletonList(new ParseResult(ParseResultType.BARCODE_ONLY, loyaltyCard));
}
throw new UnsupportedOperationException("Unknown request code for parseSetBarcodeActivityResult");
@@ -288,7 +342,7 @@ public class Utils {
return MediaStore.Images.Media.getBitmap(context.getContentResolver(), data);
}
static public List<BarcodeValues> getBarcodesFromBitmap(Bitmap bitmap) {
static public List<ParseResult> getBarcodesFromBitmap(Bitmap bitmap) {
// This function is vulnerable to OOM, so we try again with a smaller bitmap is we get OOM
for (int i = 0; i < 10; i++) {
try {
@@ -303,7 +357,7 @@ public class Utils {
return new ArrayList<>();
}
static private List<BarcodeValues> getBarcodesFromBitmapReal(Bitmap bitmap) {
static private List<ParseResult> getBarcodesFromBitmapReal(Bitmap bitmap) {
// In order to decode it, the Bitmap must first be converted into a pixel array...
int[] intArray = new int[bitmap.getWidth() * bitmap.getHeight()];
bitmap.getPixels(intArray, 0, bitmap.getWidth(), 0, 0, bitmap.getWidth(), bitmap.getHeight());
@@ -312,7 +366,7 @@ public class Utils {
LuminanceSource source = new RGBLuminanceSource(bitmap.getWidth(), bitmap.getHeight(), intArray);
BinaryBitmap binaryBitmap = new BinaryBitmap(new HybridBinarizer(source));
List<BarcodeValues> barcodeValuesList = new ArrayList<>();
List<ParseResult> parseResultList = new ArrayList<>();
try {
MultiFormatReader multiFormatReader = new MultiFormatReader();
MultipleBarcodeReader multipleBarcodeReader = new GenericMultipleBarcodeReader(multiFormatReader);
@@ -323,37 +377,42 @@ public class Utils {
Log.i(TAG, "Read barcode id: " + barcodeResult.getText());
Log.i(TAG, "Read format: " + barcodeResult.getBarcodeFormat().name());
barcodeValuesList.add(new BarcodeValues(CatimaBarcode.fromBarcode(barcodeResult.getBarcodeFormat()), barcodeResult.getText()));
LoyaltyCard loyaltyCard = new LoyaltyCard();
loyaltyCard.setCardId(barcodeResult.getText());
loyaltyCard.setBarcodeType(CatimaBarcode.fromBarcode(barcodeResult.getBarcodeFormat()));
parseResultList.add(new ParseResult(ParseResultType.BARCODE_ONLY, loyaltyCard));
}
return barcodeValuesList;
return parseResultList;
} catch (NotFoundException e) {
return barcodeValuesList;
return parseResultList;
}
}
static public void makeUserChooseBarcodeFromList(Context context, List<BarcodeValues> barcodeValuesList, BarcodeValuesListDisambiguatorCallback callback) {
static public void makeUserChooseParseResultFromList(Context context, List<ParseResult> parseResultList, ParseResultListDisambiguatorCallback callback) {
// If there is only one choice, consider it chosen
if (barcodeValuesList.size() == 1) {
callback.onUserChoseBarcode(barcodeValuesList.get(0));
if (parseResultList.size() == 1) {
callback.onUserChoseParseResult(parseResultList.get(0));
return;
}
// Ask user to choose a barcode
// TODO: This should contain an image of the barcode in question to help users understand the choice they're making
CharSequence[] barcodeDescriptions = new CharSequence[barcodeValuesList.size()];
for (int i = 0; i < barcodeValuesList.size(); i++) {
BarcodeValues barcodeValues = barcodeValuesList.get(i);
CatimaBarcode catimaBarcode = barcodeValues.format();
CharSequence[] barcodeDescriptions = new CharSequence[parseResultList.size()];
for (int i = 0; i < parseResultList.size(); i++) {
ParseResult parseResult = parseResultList.get(i);
CatimaBarcode catimaBarcode = parseResult.getLoyaltyCard().barcodeType;
String barcodeContent = barcodeValues.content();
String barcodeContent = parseResult.getLoyaltyCard().cardId;
// Shorten overly long barcodes
if (barcodeContent.length() > 22) {
barcodeContent = barcodeContent.substring(0, 20) + "";
}
if (barcodeValues.note() != null) {
barcodeDescriptions[i] = String.format("%s: %s (%s)", barcodeValues.note(), catimaBarcode != null ? catimaBarcode.prettyName() : context.getString(R.string.noBarcode), barcodeContent);
String parseResultNote = parseResult.getNote();
if (parseResultNote != null) {
barcodeDescriptions[i] = String.format("%s: %s (%s)", parseResultNote, catimaBarcode != null ? catimaBarcode.prettyName() : context.getString(R.string.noBarcode), barcodeContent);
} else {
barcodeDescriptions[i] = String.format("%s (%s)", catimaBarcode != null ? catimaBarcode.prettyName() : context.getString(R.string.noBarcode), barcodeContent);
}
@@ -363,7 +422,7 @@ public class Utils {
builder.setTitle(context.getString(R.string.multipleBarcodesFoundPleaseChooseOne));
builder.setItems(
barcodeDescriptions,
(dialogInterface, i) -> callback.onUserChoseBarcode(barcodeValuesList.get(i))
(dialogInterface, i) -> callback.onUserChoseParseResult(parseResultList.get(i))
);
builder.setOnCancelListener(dialogInterface -> callback.onUserDismissedSelector());
builder.show();
@@ -783,7 +842,7 @@ public class Utils {
}
}
public static Bitmap loadImage(String path) {
public static @Nullable Bitmap loadImage(String path) {
try {
return BitmapFactory.decodeStream(new FileInputStream(path));
} catch (IOException e) {
@@ -792,7 +851,7 @@ public class Utils {
}
}
public static Bitmap loadTempImage(Context context, String name) {
public static @Nullable Bitmap loadTempImage(Context context, String name) {
return loadImage(context.getCacheDir() + "/" + name);
}
@@ -869,7 +928,7 @@ public class Utils {
return typedValue.data;
}
public static int getHeaderColorFromImage(Bitmap image, int fallback) {
public static int getHeaderColorFromImage(@Nullable Bitmap image, int fallback) {
if (image == null) {
return fallback;
}
@@ -934,27 +993,34 @@ public class Utils {
* @param textWhenNoImage TextView to write the loyalty card name into if icon is null
* @return background colour
*/
public static int setIconOrTextWithBackground(Context context, LoyaltyCard loyaltyCard, Bitmap icon, ImageView backgroundOrIcon, TextView textWhenNoImage) {
public static int setIconOrTextWithBackground(Context context, LoyaltyCard loyaltyCard, Bitmap icon, ImageView backgroundOrIcon, TextView textWhenNoImage, int columnCount) {
int headerColor = getHeaderColor(context, loyaltyCard);
backgroundOrIcon.setImageBitmap(icon);
backgroundOrIcon.setBackgroundColor(headerColor);
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);
textWhenNoImage.setVisibility(View.GONE);
} else {
// Use header colour as background colour
backgroundOrIcon.setBackgroundColor(headerColor);
// Manually calculate how many lines will be needed
// This is necessary because Android's auto sizing will split over lines way before reaching the minimum font size and store names split over multiple lines are harder to scan with a quick glance so we should try to prevent it
// Because we have to write the text before we can actually know the exact laid out size (trying to delay this causes bugs where the autosize fails) we have to take some... weird shortcuts
// At this point textWhenNoImage.getWidth() still returns 0, so we cheat by calculating the whole width of the screen and then dividing it by the amount of columns
int textviewWidth = Resources.getSystem().getDisplayMetrics().widthPixels / context.getResources().getInteger(R.integer.main_view_card_columns);
int columnWidth = Resources.getSystem().getDisplayMetrics().widthPixels / columnCount;
// Calculate how wide a character is and calculate how many characters fit in a line
// text size is generally based on height, so setting 1:1 as width may be fishy
int characterWidth = TextViewCompat.getAutoSizeMinTextSize(textWhenNoImage);
int maxWidthPerLine = textviewWidth - textWhenNoImage.getPaddingStart() - textWhenNoImage.getPaddingEnd();
int maxWidthPerLine = columnWidth - textWhenNoImage.getPaddingStart() - textWhenNoImage.getPaddingEnd();
// Set amount of lines based on what could fit at most
int maxLines = ((loyaltyCard.store.length() * characterWidth) / maxWidthPerLine) + 1;
// Set number of lines based on what could fit at most
int fullTextWidth = loyaltyCard.store.length() * characterWidth;
int maxLines = (fullTextWidth / maxWidthPerLine) + 1;
textWhenNoImage.setMaxLines(maxLines);
// Actually set the text and colour
@@ -966,21 +1032,6 @@ public class Utils {
return headerColor;
}
public static boolean installedFromGooglePlay(Context context) {
try {
String packageName = context.getPackageName();
String installer;
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.R) {
installer = context.getPackageManager().getInstallSourceInfo(packageName).getInstallingPackageName();
} else {
installer = context.getPackageManager().getInstallerPackageName(packageName);
}
return installer.equals("com.android.vending");
} catch (Throwable ignored) {
return false;
}
}
public static int getHeaderColor(Context context, LoyaltyCard loyaltyCard) {
return loyaltyCard.headerColor != null ? loyaltyCard.headerColor : LetterBitmap.getDefaultColor(context, loyaltyCard.store);
}

View File

@@ -23,7 +23,7 @@ public class ZipUtils {
return new JSONObject(read(zipInputStream));
}
private static String read(ZipInputStream zipInputStream) throws IOException {
public static String read(ZipInputStream zipInputStream) throws IOException {
StringBuilder stringBuilder = new StringBuilder();
Reader reader = new BufferedReader(new InputStreamReader(zipInputStream, StandardCharsets.UTF_8));
int c;

View File

@@ -49,7 +49,7 @@ public class CatimaExporter implements Exporter {
// Generate CSV
ByteArrayOutputStream catimaOutputStream = new ByteArrayOutputStream();
OutputStreamWriter catimaOutputStreamWriter = new OutputStreamWriter(catimaOutputStream, StandardCharsets.UTF_8);
writeCSV(database, catimaOutputStreamWriter);
writeCSV(context, database, catimaOutputStreamWriter);
// Add CSV to zip file
ZipParameters csvZipParameters = createZipParameters("catima.csv", password);
@@ -64,12 +64,12 @@ public class CatimaExporter implements Exporter {
Cursor cardCursor = DBHelper.getLoyaltyCardCursor(database);
while (cardCursor.moveToNext()) {
// For each card
LoyaltyCard card = LoyaltyCard.fromCursor(cardCursor);
LoyaltyCard card = LoyaltyCard.fromCursor(context, cardCursor);
// For each image
for (ImageLocationType imageLocationType : ImageLocationType.values()) {
// If it exists, add to the .zip file
Bitmap image = Utils.retrieveCardImage(context, card.id, imageLocationType);
Bitmap image = card.getImageForImageLocationType(context, imageLocationType);
if (image != null) {
ZipParameters imageZipParameters = createZipParameters(Utils.getCardImageFileName(card.id, imageLocationType), password);
zipOutputStream.putNextEntry(imageZipParameters);
@@ -95,7 +95,7 @@ public class CatimaExporter implements Exporter {
return zipParameters;
}
private void writeCSV(SQLiteDatabase database, OutputStreamWriter output) throws IOException, InterruptedException {
private void writeCSV(Context context, SQLiteDatabase database, OutputStreamWriter output) throws IOException, InterruptedException {
CSVPrinter printer = new CSVPrinter(output, CSVFormat.RFC4180);
// Print the version
@@ -142,7 +142,7 @@ public class CatimaExporter implements Exporter {
Cursor cardCursor = DBHelper.getLoyaltyCardCursor(database);
while (cardCursor.moveToNext()) {
LoyaltyCard card = LoyaltyCard.fromCursor(cardCursor);
LoyaltyCard card = LoyaltyCard.fromCursor(context, cardCursor);
printer.printRecord(card.id,
card.store,
@@ -176,7 +176,7 @@ public class CatimaExporter implements Exporter {
Cursor cardCursor2 = DBHelper.getLoyaltyCardCursor(database);
while (cardCursor2.moveToNext()) {
LoyaltyCard card = LoyaltyCard.fromCursor(cardCursor2);
LoyaltyCard card = LoyaltyCard.fromCursor(context, cardCursor2);
for (Group group : DBHelper.getLoyaltyCardGroups(database, card.id)) {
printer.printRecord(card.id, group._id);

View File

@@ -124,7 +124,7 @@ public class CatimaImporter implements Importer {
Set<String> existingImages = DBHelper.imageFiles(context, database);
for (LoyaltyCard card : data.cards) {
LoyaltyCard existing = DBHelper.getLoyaltyCard(database, card.id);
LoyaltyCard existing = DBHelper.getLoyaltyCard(context, database, card.id);
if (existing == null) {
DBHelper.insertLoyaltyCard(database, card.id, card.store, card.note, card.validFrom, card.expiry, card.balance, card.balanceType,
card.cardId, card.barcodeId, card.barcodeType, card.headerColor, card.starStatus, card.lastUsed, card.archiveStatus);
@@ -152,7 +152,7 @@ public class CatimaImporter implements Importer {
}
public boolean isDuplicate(Context context, final LoyaltyCard existing, final LoyaltyCard card, final Set<String> existingImages, final Map<String, String> imageChecksums) throws IOException {
if (!LoyaltyCard.isDuplicate(existing, card)) {
if (!LoyaltyCard.isDuplicate(context, existing, card)) {
return false;
}
for (ImageLocationType imageLocationType : ImageLocationType.values()) {
@@ -490,7 +490,29 @@ public class CatimaImporter implements Importer {
// We catch this exception so we can still import old backups
}
return new LoyaltyCard(id, store, note, validFrom, expiry, balance, balanceType, cardId, barcodeId, barcodeType, headerColor, starStatus, lastUsed, DBHelper.DEFAULT_ZOOM_LEVEL, archiveStatus);
return new LoyaltyCard(
id,
store,
note,
validFrom,
expiry,
balance,
balanceType,
cardId,
barcodeId,
barcodeType,
headerColor,
starStatus,
lastUsed,
DBHelper.DEFAULT_ZOOM_LEVEL,
archiveStatus,
null,
null,
null,
null,
null,
null
);
}
/**

View File

@@ -149,7 +149,29 @@ public class FidmeImporter implements Importer {
// TODO: Front and back image
// use -1 for the ID, it will be ignored when inserting the card into the DB
return new LoyaltyCard(-1, store, note, null, null, BigDecimal.valueOf(0), null, cardId, null, barcodeType, headerColor, starStatus, Utils.getUnixTime(), DBHelper.DEFAULT_ZOOM_LEVEL, archiveStatus);
return new LoyaltyCard(
-1,
store,
note,
null,
null,
BigDecimal.valueOf(0),
null,
cardId,
null,
barcodeType,
headerColor,
starStatus,
Utils.getUnixTime(),
DBHelper.DEFAULT_ZOOM_LEVEL,
archiveStatus,
null,
null,
null,
null,
null,
null
);
}
public void saveAndDeduplicate(SQLiteDatabase database, final ImportedData data) {

View File

@@ -354,7 +354,29 @@ public class StocardImporter implements Importer {
long lastUsed = record.lastUsed != null ? record.lastUsed : Utils.getUnixTime();
LoyaltyCard card = new LoyaltyCard(tempID, store, note, null, null, BigDecimal.valueOf(0), null, record.cardId, null, barcodeType, headerColor, 0, lastUsed, DBHelper.DEFAULT_ZOOM_LEVEL, 0);
LoyaltyCard card = new LoyaltyCard(
tempID,
store,
note,
null,
null,
BigDecimal.valueOf(0),
null,
record.cardId,
null,
barcodeType,
headerColor,
0,
lastUsed,
DBHelper.DEFAULT_ZOOM_LEVEL,
0,
null,
null,
null,
null,
null,
null
);
importedData.cards.add(card);
Map<ImageLocationType, Bitmap> images = new HashMap<>();

View File

@@ -151,7 +151,29 @@ public class VoucherVaultImporter implements Importer {
}
// use -1 for the ID, it will be ignored when inserting the card into the DB
importedData.cards.add(new LoyaltyCard(-1, store, "", null, expiry, balance, balanceType, cardId, null, barcodeType, headerColor, 0, Utils.getUnixTime(), DBHelper.DEFAULT_ZOOM_LEVEL, 0));
importedData.cards.add(new LoyaltyCard(
-1,
store,
"",
null,
expiry,
balance,
balanceType,
cardId,
null,
barcodeType,
headerColor,
0,
Utils.getUnixTime(),
DBHelper.DEFAULT_ZOOM_LEVEL,
0,
null,
null,
null,
null,
null,
null
));
}
return importedData;

View File

@@ -1,9 +1,13 @@
package protect.card_locker.preferences;
import static android.content.res.Configuration.ORIENTATION_PORTRAIT;
import android.content.Context;
import android.content.SharedPreferences;
import android.util.Log;
import androidx.annotation.IntegerRes;
import androidx.annotation.Nullable;
import androidx.annotation.StringRes;
import androidx.appcompat.app.AppCompatDelegate;
import androidx.preference.PreferenceManager;
@@ -14,8 +18,9 @@ import protect.card_locker.R;
import protect.card_locker.Utils;
public class Settings {
private static final String TAG = "Catima";
private final Context mContext;
private SharedPreferences mSettings;
private final SharedPreferences mSettings;
public Settings(Context context) {
mContext = context.getApplicationContext();
@@ -42,10 +47,11 @@ public class Settings {
return mSettings.getBoolean(getResString(keyId), defaultValue);
}
@Nullable
public Locale getLocale() {
String value = getString(R.string.settings_key_locale, "");
if (value.length() == 0) {
if (value.isEmpty()) {
return null;
}
@@ -92,6 +98,21 @@ public class Settings {
return getString(R.string.setting_key_theme_color, mContext.getResources().getString(R.string.settings_key_system_theme));
}
public int getPreferredColumnCount() {
var defaultSymbol = mContext.getResources().getString(R.string.settings_key_automatic_column_count);
var defaultColumnCount = mContext.getResources().getInteger(R.integer.main_view_card_columns);
var orientation = mContext.getResources().getConfiguration().orientation;
var columnCountPrefKey = orientation == ORIENTATION_PORTRAIT ? R.string.setting_key_column_count_portrait : R.string.setting_key_column_count_landscape;
var columnCountSetting = getString(columnCountPrefKey, defaultSymbol);
try {
// the pref may be unset or explicitly set to default
return columnCountSetting.equals(defaultSymbol) ? defaultColumnCount : Integer.parseInt(columnCountSetting);
} catch (NumberFormatException nfe) {
Log.e(TAG, "Failed to parseInt the column count pref", nfe);
return defaultColumnCount;
}
}
public boolean useVolumeKeysForNavigation() {
return getBoolean(R.string.settings_key_use_volume_keys_navigation, false);
}

View File

@@ -0,0 +1,27 @@
package protect.card_locker.viewmodels
import android.net.Uri
import androidx.lifecycle.ViewModel
import protect.card_locker.LoyaltyCard
import protect.card_locker.LoyaltyCardField
import protect.card_locker.async.TaskHandler
class LoyaltyCardEditActivityViewModel : ViewModel() {
var initialized: Boolean = false
var hasChanged: Boolean = false
var taskHandler: TaskHandler = TaskHandler();
var addGroup: String? = null
var openSetIconMenu: Boolean = false
var loyaltyCardId: Int = 0
var updateLoyaltyCard: Boolean = false
var duplicateFromLoyaltyCardId: Boolean = false
var importLoyaltyCardUri: Uri? = null
var tabIndex: Int = 0
var requestedImageType: Int = 0
var tempLoyaltyCardField: LoyaltyCardField? = null
var loyaltyCard: LoyaltyCard = LoyaltyCard()
}

View File

@@ -1,10 +0,0 @@
<vector xmlns:android="http://schemas.android.com/apk/res/android"
android:width="24dp"
android:height="24dp"
android:viewportWidth="24"
android:viewportHeight="24"
android:tint="@android:color/black">
<path
android:fillColor="@android:color/black"
android:pathData="M20.54,5.23l-1.39,-1.68C18.88,3.21 18.47,3 18,3H6c-0.47,0 -0.88,0.21 -1.16,0.55L3.46,5.23C3.17,5.57 3,6.02 3,6.5V19c0,1.1 0.9,2 2,2h14c1.1,0 2,-0.9 2,-2V6.5c0,-0.48 -0.17,-0.93 -0.46,-1.27zM12,17.5L6.5,12H10v-2h4v2h3.5L12,17.5zM5.12,5l0.81,-1h12l0.94,1H5.12z"/>
</vector>

View File

@@ -1,5 +0,0 @@
<vector android:height="24dp" android:tint="#000000"
android:viewportHeight="24" android:viewportWidth="24"
android:width="24dp" xmlns:android="http://schemas.android.com/apk/res/android">
<path android:fillColor="@android:color/white" android:pathData="M12,17.27L18.18,21l-1.64,-7.03L22,9.24l-7.19,-0.61L12,2 9.19,8.63 2,9.24l5.46,4.73L5.82,21z"/>
</vector>

View File

@@ -1,5 +0,0 @@
<vector android:height="24dp" android:tint="#FFFFFF"
android:viewportHeight="24" android:viewportWidth="24"
android:width="24dp" xmlns:android="http://schemas.android.com/apk/res/android">
<path android:fillColor="@android:color/white" android:pathData="M12,17.27L18.18,21l-1.64,-7.03L22,9.24l-7.19,-0.61L12,2 9.19,8.63 2,9.24l5.46,4.73L5.82,21z"/>
</vector>

View File

@@ -1,5 +0,0 @@
<vector android:height="24dp" android:tint="#000000"
android:viewportHeight="24" android:viewportWidth="24"
android:width="24dp" xmlns:android="http://schemas.android.com/apk/res/android">
<path android:fillColor="@android:color/white" android:pathData="M22,9.24l-7.19,-0.62L12,2 9.19,8.63 2,9.24l5.46,4.73L5.82,21 12,17.27 18.18,21l-1.63,-7.03L22,9.24zM12,15.4l-3.76,2.27 1,-4.28 -3.32,-2.88 4.38,-0.38L12,6.1l1.71,4.04 4.38,0.38 -3.32,2.88 1,4.28L12,15.4z"/>
</vector>

View File

@@ -1,5 +0,0 @@
<vector android:height="24dp" android:tint="#FFFFFF"
android:viewportHeight="24" android:viewportWidth="24"
android:width="24dp" xmlns:android="http://schemas.android.com/apk/res/android">
<path android:fillColor="@android:color/white" android:pathData="M22,9.24l-7.19,-0.62L12,2 9.19,8.63 2,9.24l5.46,4.73L5.82,21 12,17.27 18.18,21l-1.63,-7.03L22,9.24zM12,15.4l-3.76,2.27 1,-4.28 -3.32,-2.88 4.38,-0.38L12,6.1l1.71,4.04 4.38,0.38 -3.32,2.88 1,4.28L12,15.4z"/>
</vector>

View File

@@ -0,0 +1,10 @@
<vector xmlns:android="http://schemas.android.com/apk/res/android"
android:width="24dp"
android:height="24dp"
android:viewportWidth="960"
android:viewportHeight="960"
android:tint="?attr/colorControlNormal">
<path
android:fillColor="@android:color/white"
android:pathData="M368,640L480,556L590,640L548,504L660,416L524,416L480,280L436,416L300,416L410,504L368,640ZM160,800Q127,800 103.5,776.5Q80,753 80,720L80,585Q80,574 87,566Q94,558 105,556Q129,548 144.5,527Q160,506 160,480Q160,454 144.5,433Q129,412 105,404Q94,402 87,394Q80,386 80,375L80,240Q80,207 103.5,183.5Q127,160 160,160L800,160Q833,160 856.5,183.5Q880,207 880,240L880,375Q880,386 873,394Q866,402 855,404Q831,412 815.5,433Q800,454 800,480Q800,506 815.5,527Q831,548 855,556Q866,558 873,566Q880,574 880,585L880,720Q880,753 856.5,776.5Q833,800 800,800L160,800ZM160,720L800,720Q800,720 800,720Q800,720 800,720L800,618Q763,596 741.5,559.5Q720,523 720,480Q720,437 741.5,400.5Q763,364 800,342L800,240Q800,240 800,240Q800,240 800,240L160,240Q160,240 160,240Q160,240 160,240L160,342Q197,364 218.5,400.5Q240,437 240,480Q240,523 218.5,559.5Q197,596 160,618L160,720Q160,720 160,720Q160,720 160,720ZM480,480Q480,480 480,480Q480,480 480,480L480,480Q480,480 480,480Q480,480 480,480Q480,480 480,480Q480,480 480,480L480,480Q480,480 480,480Q480,480 480,480L480,480Q480,480 480,480Q480,480 480,480L480,480Q480,480 480,480Q480,480 480,480Q480,480 480,480Q480,480 480,480L480,480Q480,480 480,480Q480,480 480,480Z"/>
</vector>

View File

@@ -2,9 +2,10 @@
android:width="24dp"
android:height="24dp"
android:viewportWidth="24"
android:viewportHeight="24"
android:tint="@android:color/white">
android:viewportHeight="24">
<path
android:fillColor="@android:color/white"
android:pathData="M20.54,5.23l-1.39,-1.68C18.88,3.21 18.47,3 18,3H6c-0.47,0 -0.88,0.21 -1.16,0.55L3.46,5.23C3.17,5.57 3,6.02 3,6.5V19c0,1.1 0.9,2 2,2h14c1.1,0 2,-0.9 2,-2V6.5c0,-0.48 -0.17,-0.93 -0.46,-1.27zM12,17.5L6.5,12H10v-2h4v2h3.5L12,17.5zM5.12,5l0.81,-1h12l0.94,1H5.12z"/>
android:fillColor="#D3D3D3"
android:pathData="M20.54,5.23l-1.39,-1.68C18.88,3.21 18.47,3 18,3H6c-0.47,0 -0.88,0.21 -1.16,0.55L3.46,5.23C3.17,5.57 3,6.02 3,6.5V19c0,1.1 0.9,2 2,2h14c1.1,0 2,-0.9 2,-2V6.5c0,-0.48 -0.17,-0.93 -0.46,-1.27zM12,17.5L6.5,12H10v-2h4v2h3.5L12,17.5zM5.12,5l0.81,-1h12l0.94,1H5.12z"
android:strokeWidth="0.25"
android:strokeColor="#777777"/>
</vector>

View File

@@ -0,0 +1,11 @@
<vector xmlns:android="http://schemas.android.com/apk/res/android"
android:width="24dp"
android:height="24dp"
android:viewportWidth="24"
android:viewportHeight="24">
<path
android:fillColor="#D3D3D3"
android:pathData="M12,17.27L18.18,21l-1.64,-7.03L22,9.24l-7.19,-0.61L12,2 9.19,8.63 2,9.24l5.46,4.73L5.82,21z"
android:strokeWidth="0.25"
android:strokeColor="#777777"/>
</vector>

View File

@@ -14,17 +14,18 @@
android:layout_marginBottom="8dp"
app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toTopOf="parent"
app:srcCompat="@drawable/ic_baseline_archive_24" />
app:layout_constraintEnd_toStartOf="@+id/textView"
app:layout_constraintTop_toTopOf="parent" />
<TextView
android:id="@+id/textView"
android:layout_width="wrap_content"
android:layout_width="0dp"
android:layout_height="wrap_content"
android:layout_marginStart="16dp"
android:layout_marginTop="8dp"
android:layout_marginBottom="8dp"
app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintStart_toEndOf="@+id/imageView"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintTop_toTopOf="parent" />
</androidx.constraintlayout.widget.ConstraintLayout>

View File

@@ -27,7 +27,7 @@
<androidx.recyclerview.widget.RecyclerView
android:id="@+id/list"
app:layoutManager="androidx.recyclerview.widget.GridLayoutManager"
app:spanCount="1"
app:spanCount="@integer/main_view_card_columns"
android:layout_height="match_parent"
android:layout_width="match_parent" />
</RelativeLayout>

View File

@@ -41,9 +41,10 @@
android:layout_width="match_parent"
android:layout_height="match_parent"
android:textStyle="bold"
app:autoSizeMinTextSize="6sp"
app:autoSizeTextType="uniform"
android:gravity="center"
android:padding="20dp" />
android:padding="10dp" />
<ImageView
android:importantForAccessibility="no"
@@ -71,29 +72,15 @@
android:layout_width="@dimen/cardThumbnailSize"
android:layout_height="@dimen/cardThumbnailSize"
android:layout_gravity="end"
android:alpha="0.5"
android:alpha="0.8"
android:contentDescription="@string/starred"
android:elevation="4dp"
android:rotationX="2"
android:visibility="visible"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintTop_toTopOf="parent"
app:srcCompat="@drawable/ic_starred_white"
tools:ignore="ImageContrastCheck" />
<ImageView
android:importantForAccessibility="no"
android:id="@+id/star_border"
android:layout_width="@dimen/cardThumbnailSize"
android:layout_height="@dimen/cardThumbnailSize"
android:layout_gravity="end"
android:alpha="0.5"
android:contentDescription="@string/starImage"
android:elevation="4dp"
android:visibility="visible"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintTop_toTopOf="parent"
app:srcCompat="@drawable/ic_unstarred_black"
tools:ignore="ImageContrastCheck" />
app:srcCompat="@drawable/loyalty_card_icon_starred"
tools:ignore="ImageContrastCheck"/>
</androidx.constraintlayout.widget.ConstraintLayout>
@@ -109,18 +96,18 @@
<ImageView
android:id="@+id/archive_background"
android:layout_width="41dp"
android:layout_height="44dp"
android:layout_width="@dimen/cardThumbnailSize"
android:layout_height="@dimen/cardThumbnailSize"
android:layout_gravity="end"
android:alpha="0.5"
android:alpha="0.8"
android:contentDescription="@string/archived"
android:elevation="4dp"
android:rotationX="2"
android:visibility="visible"
app:srcCompat="@drawable/ic_baseline_archive_24"
tools:ignore="ImageContrastCheck,MissingConstraints"
tools:layout_editor_absoluteX="0dp"
tools:layout_editor_absoluteY="-1dp" />
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toTopOf="parent"
app:srcCompat="@drawable/loyalty_card_icon_archived"
tools:ignore="ImageContrastCheck" />
</androidx.constraintlayout.widget.ConstraintLayout>
@@ -150,6 +137,8 @@
android:layout_marginEnd="8dp"
android:layout_marginBottom="4dp"
android:textAppearance="?attr/textAppearanceBody2"
android:maxLines="5"
android:ellipsize="end"
android:visibility="gone"
tools:visibility="visible"
app:layout_constraintTop_toBottomOf="@+id/store"

View File

@@ -11,57 +11,71 @@ Katharine Chui
SlavekB
mondstern
IllusiveMan196
大王叫我来巡山
Altonss
Michael Moroni
Eric
GM
Petr Novák
laralem
大王叫我来巡山
Petr Novák
Joel A
B o d o
Priit Jõerüüt
Taco
pfaffenrodt
Aayush Gupta
Scrambled777
Максим Горпиніч
ikanakova
HudobniVolk
Nyatsuki
Jiri Grönroos
Giovanni Donisi
Priit Jõerüüt
Samantaz Fox
Jiri Grönroos
Nyatsuki
Edgars Andersons
Balázs Meskó
Milo Ivir
Arno-github
Ankit Tiwari
Sergio Paredes
Samantaz Fox
Cliff Heraldo
Sergio Paredes
Ankit Tiwari
Silvério Santos
josé m
Arno-github
Jose Delvani
mdvhimself
Milan Šalka
ikanakova
Kachelkaiser
Skrripy
huuhaa
waffshappen
Silvério Santos
Marnick L'Eau
ngocanhtve
Quentin PAGÈS
Projjal Moitra
Denis Shilin
Robin Liu
Robin
JungHee Lee
தமிழ் நேரம்
Maksim2005UA
Ziad OUALHADJ
Vasilis
Robin Liu
Renko
Denis Shilin
しいたけ
Alexander Ivanov
Viet Nguyen Hoang
Miha Frangež
Viet Nguyen Hoang
stavpup
ehrt74
Virginie
Tim Trek
Renko
Michael Gangolf
rudy3
Kim Seohyun
Govind S Nair
Freddo espresso
arshbeerSingh
MisterCosta96
arshbeerSingh
Augustin LAVILLE
Freddo espresso
Govind S Nair
Kim Seohyun
rudy3
Ricky Tigg
Michael Gangolf
Peter Dave Hello

View File

@@ -50,11 +50,11 @@
<string name="settings">اعدادات</string>
<string name="settings_light_theme">فاتح</string>
<string name="settings_dark_theme">داكن</string>
<string name="settings_card_orientation">اتجاه الباركود</string>
<string name="settings_card_orientation">اتجاه الشاشة</string>
<string name="settings_portrait_orientation">الوضع الرأسي</string>
<string name="settings_landscape_orientation">الوضع الأفقي</string>
<string name="settings_theme">مظهر</string>
<string name="settings_display_barcode_max_brightness">عرض مشرق علي الباركود</string>
<string name="settings_display_barcode_max_brightness">عرض مشرق علي الشاشة</string>
<string name="importSuccessful">تم استيراد البيانات</string>
<string name="exportSuccessful">تم تصدير البيانات</string>
<string name="enter_group_name">أدخل اسم المجموعة</string>
@@ -277,7 +277,7 @@
<string name="action_display_options">خيارات العرض</string>
<string name="settings_oled_dark_summary">يقلل من استخدام البطارية على شاشات OLED</string>
<string name="icon_header_click_text">اضغط لفترة طويلة لتحرير الصورة المصغرة</string>
<string name="settings_category_title_cards">البطاقات</string>
<string name="settings_category_title_cards">البطاقات الظاهرة</string>
<string name="show_note">إظهار الملاحظة</string>
<string name="switchToBackImage">التبديل إلى الصورة الخلفية</string>
<string name="switchToFrontImage">التبديل إلى الصورة الأمامية</string>
@@ -316,4 +316,20 @@
<string name="exportCancelled">تم الغاء الاستخراج</string>
<string name="useFrontImage">استخدام صورة أمامية</string>
<string name="useBackImage">استخدم صورة خلفية</string>
<string name="addFromPkpass">اختر ملف الدفتر(.pkpass)</string>
<string name="unsupportedFile">هذا الملف غير مدعوم</string>
<string name="generic_error_please_retry">نعتذر، حدث خطأ ما، حاول مرة أخرى...</string>
<string name="settings_use_volume_keys_navigation">تبديل البطاقات باستخدام أزرار الصوت</string>
<string name="settings_use_volume_keys_navigation_summary">تبديل البطاقات الظاهرة باستخدام أزرار الصوت</string>
<string name="settings_category_title_cards_overview">نظرة عامة على البطاقات</string>
<string name="settings_column_count_portrait">الأعمدة في الوضع الرأسي</string>
<string name="settings_column_count_landscape">الأعمدة في الوضع الأفقي</string>
<string name="settings_automatic_column_count">تلقائي</string>
<string name="settings_column_count_1">١</string>
<string name="settings_column_count_2">٢</string>
<string name="settings_column_count_3">٣</string>
<string name="settings_column_count_4">٤</string>
<string name="settings_column_count_5">٥</string>
<string name="settings_column_count_6">٦</string>
<string name="settings_column_count_7">٧</string>
</resources>

View File

@@ -41,7 +41,7 @@
<string name="removeImage">Премахване на изображение</string>
<string name="takePhoto">Снимане</string>
<string name="intent_import_card_from_url_share_multiple_text">Искам да споделя тези карти с вас</string>
<string name="wrongValueForBarcodeType">Стойноста е неприемлива за избрания щрихкод</string>
<string name="wrongValueForBarcodeType">Стойността е неприемлива за избрания вид щрихкод</string>
<string name="setBarcodeId">Задаване на стойност</string>
<string name="sameAsCardId">Като номера</string>
<string name="barcodeId">Стойност на щрихкода</string>
@@ -258,7 +258,7 @@
<string name="settings_disable_lockscreen_while_viewing_card_summary">Без заключване на екрана при преглед на карта</string>
<string name="settings_allow_content_provider_read_summary">Приложенията ще искат разрешение, за да получат достъп</string>
<string name="settings_oled_dark_summary">Намалява разхода на батерия от OLED дисплеи</string>
<string name="settings_category_title_cards">Изглед с карти</string>
<string name="settings_category_title_cards">Преглед на карта</string>
<string name="settings_category_title_general">Общи</string>
<string name="settings_category_title_privacy">Поверителност</string>
<string name="settings_keep_screen_on_summary">Спира автоматичното заключване на екрана при преглед на карти</string>
@@ -294,4 +294,19 @@
<string name="useBackImage">Използване на задната страна</string>
<string name="settings_use_volume_keys_navigation">Сменяне на картите с бутоните за звука</string>
<string name="settings_use_volume_keys_navigation_summary">Бутоните за силата на звука сменят видимата карта</string>
</resources>
<string name="settings_automatic_column_count">Автоматично</string>
<string name="settings_column_count_2">2</string>
<string name="settings_column_count_4">4</string>
<string name="settings_column_count_5">5</string>
<string name="settings_column_count_1">1</string>
<string name="settings_column_count_3">3</string>
<string name="settings_column_count_6">6</string>
<string name="settings_column_count_7">7</string>
<string name="settings_column_count_landscape">Колони в пейзажен изглед</string>
<string name="settings_column_count_portrait">Колони в портретен изглед</string>
<string name="settings_category_title_cards_overview">Списък с карти</string>
<string name="generic_error_please_retry">Съжаляваме, нещо се обърка, опитайте отново…</string>
<string name="addFromPkpass">Изберете файл на Passbook (.pkpass)</string>
<string name="unsupportedFile">Този вид файлове не се поддържат</string>
<string name="sort_by_valid_from">Начало валидност</string>
</resources>

View File

@@ -1,5 +1,5 @@
<?xml version="1.0" encoding="utf-8"?>
<resources>
<resources xmlns:tools="http://schemas.android.com/tools" xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
<string name="groups">Grups</string>
<string name="action_add">Afegeix</string>
<string name="save">Desa</string>
@@ -14,4 +14,235 @@
<string name="welcome">Benvingut a Catima</string>
<string name="noGiftCards">Cliqueu el botó + més per afegir una targeta, o importeu-ne des del ⋮ menú.</string>
<string name="photos">Fotos</string>
</resources>
<string name="app_name">Catima</string>
<string name="moveDown">Baixar abaix</string>
<string name="setBackImage">Setejar la imatge posterior</string>
<string name="setFrontImage">Imatge Frontal</string>
<string name="exportPassword">Setegi el password per tal de protegir l\'exportació (opcional)</string>
<string name="failedGeneratingShareURL">No s\'ha pogut generar una URL per compartir. Siusplau reporti-ho.</string>
<string name="unarchive">Desarxivar</string>
<string name="on_google_play">al Google Play</string>
<string name="settings_locale">Idioma</string>
<string name="field_must_not_be_empty">El camp no pot estar buit</string>
<string name="importOptionApplicationTitle">Utilitzar una altra app</string>
<string name="app_copyright_fmt" tools:ignore="PluralsCandidate">Copyright © 2019<xliff:g>%d</xliff:g> Sylvia van Os i contribuïdors</string>
<string name="app_copyright_short">Copyright © Sylvia van Os i contribuïdors</string>
<string name="app_license">Software lliure Copyleft, licència GPLv3+</string>
<string name="app_resources">Recursos lliures de tercers: <xliff:g id="app_resources_list">%s</xliff:g></string>
<string name="thumbnailDescription">Miniatura</string>
<string name="starImage">Estrella de preferides</string>
<string name="settings">Configuració</string>
<string name="settings_theme">Tema</string>
<string name="settings_light_theme">Tema clar</string>
<string name="settings_system_theme">Tema de sistema</string>
<string name="settings_dark_theme">Tema Fosc</string>
<string name="settings_card_orientation">Orientació de la pantalla</string>
<string name="settings_allow_content_provider_read_title">Permet altres apps a accedir a les meves dades</string>
<string name="settings_disable_lockscreen_while_viewing_card_summary">Desactiva el bloqueix la pantalla mentre es visualitza la targeta</string>
<string name="settings_allow_content_provider_read_summary">Les aplicacions han de seguir demanant permís per tenir-hi accés</string>
<string name="leaveWithoutSaveTitle">Sortir</string>
<string name="leaveWithoutSaveConfirmation">Vols sortir sense grabar?</string>
<string name="passwordRequired">Introdueixi el password</string>
<string name="turn_flashlight_on">Encendre el llum flash</string>
<string name="settings_magenta_theme">Magenta</string>
<string name="settings_violet_theme">Violeta</string>
<string name="settings_blue_theme">Blau</string>
<string name="settings_green_theme">Verd</string>
<string name="translate_platform">a la Pàgina Web</string>
<string name="report_error">Informar un Error</string>
<string name="archived">Targeta arxivada</string>
<string name="reverse">...en ordre invers</string>
<string name="icon_header_click_text">Pulsa llarg per editar la miniatura</string>
<string name="show_note">Mostrar nota</string>
<string name="add_manually_warning_title">Recomenem escanejar</string>
<string name="add_manually_warning_message">En algunes targetes el valor imprès en la targeta no correspon amb el codi registrat en el codi de barres. Per això, introduint manualment el codi pot no funcionar en alguns casos. Recomanem sempre que sigui possible escanejar la targeta amb la càmera. Vol igualment continuar la edició manual?</string>
<string name="continue_">Continuar</string>
<string name="exportOptionExplanation">La informació serà escrita al lloc de la seva elecció.</string>
<string name="importOptionFilesystemTitle">Importar desde el sistema de fitxers</string>
<string name="importOptionFilesystemButton">Desde el sistema de fitxers</string>
<string name="selectBarcodeTitle">Sel•lecciona el Codi de Barres</string>
<string name="importSuccessful">Dades importades correctament</string>
<string name="exportSuccessful">Dades exportades correctament</string>
<string name="failedOpeningFileManager">Instala un gestor de fitxers.</string>
<string name="showMoreInfo">Mostrar informació</string>
<string name="version_history">Històric de versions</string>
<string name="sort_by">Ordenar per</string>
<string name="sort_by_most_recently_used">Per les més utilitzades</string>
<string name="options">Opcions</string>
<plurals name="selectedCardCount">
<item quantity="one"><xliff:g>%d</xliff:g> seleccionat</item>
<item quantity="many"><xliff:g>%d</xliff:g> seleccionats</item>
<item quantity="other"><xliff:g>%d</xliff:g> seleccionats</item>
</plurals>
<string name="importOptionFilesystemExplanation">Escull un fitxer especific del sistema de fitxers.</string>
<string name="no">No</string>
<string name="settings_pink_theme">Rosa</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>
<item quantity="many">Eliminar <xliff:g>%d</xliff:g> targetes</item>
<item quantity="other">Eliminar <xliff:g>%d</xliff:g> targetes</item>
</plurals>
<plurals name="deleteCardsConfirmation">
<item quantity="one">Eliminaras aquesta <xliff:g>%d</xliff:g> targeta permanentment?</item>
<item quantity="many">Eliminaras aquestes <xliff:g>%d</xliff:g> targetes permanentment?</item>
<item quantity="other">Eliminaras aquestes <xliff:g>%d</xliff:g> targetes permanentment?</item>
</plurals>
<plurals name="groupCardCountWithArchived">
<item quantity="one"><xliff:g>%1$d</xliff:g> targeta (<xliff:g id="archivedCount">%2$d</xliff:g> arxivada)</item>
<item quantity="many"><xliff:g>%1$d</xliff:g> targetes (<xliff:g id="archivedCount">%2$d</xliff:g> arxivades)</item>
<item quantity="other"><xliff:g>%1$d</xliff:g> targetes (<xliff:g id="archivedCount">%2$d</xliff:g> arxivades)</item>
</plurals>
<string name="importCancelled">Importació anulada</string>
<string name="exportCancelled">Exportació cancelada</string>
<string name="noGiftCardsGroup">Crea algunes targetes, asigna-les en un grup aquí.</string>
<string name="noMatchingGiftCards">Sense resultats. Prova a canviar la teva cerca.</string>
<string name="storeName">Nom</string>
<string name="note">Nota</string>
<string name="cardId">Id. de la Targeta</string>
<string name="barcodeType">Tipus de codi de barres</string>
<string name="noBarcode">Sense codi de barres</string>
<string name="settings_portrait_orientation">Vertical</string>
<string name="yes">Si</string>
<string name="addFromPdfFile">Seleccioni un PDF</string>
<string name="errorReadingFile">No s\'ha pogut llegir el fitxer</string>
<string name="failedLaunchingFileManager">No s\'ha pogut trobar un gestor de fitxers compatible</string>
<string name="multipleBarcodesFoundPleaseChooseOne">Quin dels següents codis de barres prefereix utilitzar?</string>
<string name="pageWithNumber">Pàgina <xliff:g>%d</xliff:g></string>
<string name="settings_follow_system_orientation">Seguir el sistema</string>
<string name="settings_landscape_orientation">Horitzontal</string>
<string name="intent_import_card_from_url_share_text">Vull compartir una targeta amb tu</string>
<string name="takePhoto">Fer una foto</string>
<string name="help_translate_this_app">Ajuda a traduïr aquesta app</string>
<string name="license">Llicència</string>
<string name="credits">Crèdits</string>
<string name="unarchived">Targeta desarxivades</string>
<string name="failedLaunchingPhotoPicker">No s\'ha pogut trobar una aplicació de galeria de fotos</string>
<string name="previousCard">Anterior</string>
<string name="failedToOpenUrl">Instali un navegador abans</string>
<string name="importCards">Importar targetes</string>
<string name="updateBalanceTitle">Quan ha gastat o ha rebut?</string>
<string name="updateBalanceHint">Introdueixi quantitat</string>
<string name="anyDate">Qualsevol data</string>
<string name="validFromSentence">Vàlid desde: <xliff:g>%s</xliff:g></string>
<string name="setBarcodeHeight">Setejar l\'alçada del codi de barres</string>
<string name="donate">Donatiu</string>
<string name="receive">Rebre</string>
<string name="amountParsingFailed">Import invàlid</string>
<string name="barcodeImageDescriptionWithType">Codi de barres <xliff:g>%s</xliff:g></string>
<string name="about_title_fmt">Sobre <xliff:g id="app_name">%s</xliff:g></string>
<string name="debug_version_fmt">Versió: <xliff:g id="version">%s</xliff:g></string>
<string name="settings_follow_sensor_orientation">Sempre rota (ignora la configuració de sistema)</string>
<string name="settings_display_barcode_max_brightness_summary">Alguns escàners ho necesiten</string>
<string name="settings_keep_screen_on">Mantenir la pantalla encesa</string>
<string name="settings_keep_screen_on_summary">Desactiva el bloqueix de la pantalla mentre mostra una targeta</string>
<string name="settings_disable_lockscreen_while_viewing_card">Evita el bloqueix de la pantalla</string>
<string name="enter_group_name">Introdueix el nom del grup</string>
<string name="group_edit">Editar el Group</string>
<plurals name="groupCardCount">
<item quantity="one"><xliff:g>%d</xliff:g> targeta</item>
<item quantity="many"><xliff:g>%d</xliff:g> targetes</item>
<item quantity="other"><xliff:g>%d</xliff:g> targetes</item>
</plurals>
<string name="group_name_is_empty">El nom del grup ha de contenir algun text</string>
<string name="all">Totes</string>
<string name="settings_oled_dark">Negre pur en el tema fosc</string>
<string name="selectColor">Sel•leccioni el color</string>
<string name="setIcon">Setegi la miniatura</string>
<string name="settings_theme_color">Color del tema</string>
<string name="app_contributors">Fet possible per: <xliff:g id="app_contributors">%s</xliff:g></string>
<string name="updateBalance">Actualitzar el balanç</string>
<string name="sort_by_name">Nom</string>
<string name="archive">Arxivar</string>
<string name="currentBalanceSentence">Balanç actual: <xliff:g>%s</xliff:g></string>
<string name="height">Alçada:</string>
<string name="switchToBackImage">Canviar a la imatge posterior</string>
<string name="switchToBarcode">Canviar al codi de barres</string>
<string name="show_name_below_image_thumbnail">Mostrar el nom sota de la imatge en miniatura</string>
<string name="settings_category_title_cards">Veure la Targeta</string>
<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="star">Afegir a les preferides</string>
<string name="cancel">Cancel•la</string>
<string name="deleteConfirmation">Vols eliminar de forma permanent aquesta targeta?</string>
<string name="share">Compartir</string>
<string name="sendLabel">Enviar…</string>
<string name="editCardTitle">Editar Targeta</string>
<string name="addCardTitle">Afegir Targeta</string>
<string name="scanCardBarcode">Escanejar Codi de Barres</string>
<string name="cardShortcut">Drecera a la Targeta</string>
<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 la URI d\'importació</string>
<string name="openFrontImageInGalleryApp">Obrir la imatge frontal a l\'app de galeria</string>
<string name="settings_lock_on_opening_orientation">En obrir la targeta, bloquejar la orientació de la pantalla</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="settings_sky_blue_theme">Blau fluix</string>
<string name="starred">Preferides</string>
<string name="deleteConfirmationGroup">Vols eliminar aquest grup?</string>
<string name="removeImage">Eliminar imatge</string>
<string name="app_libraries">Llibreries lliures de tercers: <xliff:g id="app_libraries_list">%s</xliff:g></string>
<string name="settings_display_barcode_max_brightness">Màxima iluminació</string>
<string name="settings_brown_theme">Marró</string>
<string name="manually_enter_barcode_instructions">Introdueixi el ID de la targeta manualment i trii un codi de barres que s\'assembli al de la seva targeta.</string>
<string name="rate_this_app">Valora aquesta app</string>
<string name="exportPasswordHint">Introdueixi el password</string>
<string name="backImageDescription">Imatge posterior</string>
<string name="source_repository">Repositori font</string>
<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>
<string name="sort_by_valid_from">Valid desde</string>
<string name="sort_by_expiry">Expiració</string>
<string name="and_data_usage">i us de dades</string>
<string name="shortcutSelectCard">Sel•leccioni una targeta</string>
<string name="duplicateCard">Duplicar</string>
<string name="nextCard">Següent</string>
<string name="validFromDate">Vàlid desde</string>
<string name="chooseValidFromDate">Esculli una data inicial vàlida</string>
<string name="switchToFrontImage">Canviar a la imatge frontal</string>
<string name="show_balance">Mostrar balanç</string>
<string name="show_validity">Mostrar la validesa</string>
<string name="settings_category_title_cards_overview">Vista de targetes</string>
<string name="settings_column_count_portrait">Columnes en mode vertical</string>
<string name="settings_column_count_landscape">Columnes en mode apaisat</string>
<string name="settings_automatic_column_count">Automàtic</string>
<string name="settings_column_count_1">1</string>
<string name="settings_column_count_2">2</string>
<string name="settings_column_count_3">3</string>
<string name="settings_column_count_4">4</string>
<string name="settings_column_count_5">5</string>
<string name="settings_column_count_7">7</string>
<string name="settings_category_title_general">General</string>
<string name="action_display_options">Mostrar opcions</string>
<string name="show_archived_cards">Mostrar targetes arxivades</string>
<string name="view_online">Vista online</string>
<string name="action_more_options">Més opcions</string>
<string name="addWithoutBarcode">Afegeix una targeta sebse codi de barres</string>
<string name="noCameraFoundGuideText">El seu dispositiu sembla que no té càmera. Si realment en té, provi a reiniciar el dispositiu. Sino utilitzi el botó Més opcions i introdueixi el codi de barres d\'una altra manera.</string>
<string name="useFrontImage">Utilitzar la imatge frontal</string>
<string name="addFromPkpass">Seleccioni el fitxer Passbook (.pkpass)</string>
<string name="unsupportedFile">Aquest fitxer no està soportat</string>
<string name="settings_use_volume_keys_navigation">Canviar les targetes al prèmer els botons de volum</string>
<string name="noGroups">Clica el botó + per afegir grups per categoritzar.</string>
<string name="noGroupCards">Aquest grup està buit</string>
<string name="group_name_already_in_use">Ja existeix un grup amb aquest nom</string>
<string name="group_updated">Grup actualitzat</string>
<string name="moveUp">Pujar amunt</string>
<string name="updateBarcodeQuestionTitle">Actualitzar el valor del codi de barres?</string>
<string name="turn_flashlight_off">Apagar el llum Flash</string>
<string name="settings_oled_dark_summary">Redueix l\'ús de la bateria en pantalles OLED</string>
<string name="settings_system_locale">Idioma del sistema</string>
<string name="settings_catima_theme">Catima</string>
<string name="spend">Gastar</string>
</resources>

View File

@@ -297,7 +297,22 @@
<string name="importCancelled">Import zrušen</string>
<string name="exportCancelled">Export zrušen</string>
<string name="useBackImage">Použijte předchozí obrázek</string>
<string name="useFrontImage">Použijte přední obrázek</string>
<string name="useFrontImage">Použít přední obrázek</string>
<string name="settings_use_volume_keys_navigation_summary">Pomocí tlačítek hlasitosti můžete změnit, která karta se zobrazí</string>
<string name="settings_use_volume_keys_navigation">Přepínat karty pomocí tlačítek hlasitosti</string>
</resources>
<string name="generic_error_please_retry">Je nám líto, něco se pokazilo, zkuste to prosím znovu...</string>
<string name="settings_column_count_portrait">Sloupce v režimu na výšku</string>
<string name="settings_automatic_column_count">Automatický</string>
<string name="addFromPkpass">Vyberte soubor Passbook (.pkpass)</string>
<string name="unsupportedFile">Tento soubor není podporován</string>
<string name="settings_category_title_cards_overview">Přehled karet</string>
<string name="settings_column_count_landscape">Sloupce v režimu na šířku</string>
<string name="settings_column_count_1">1</string>
<string name="settings_column_count_2">2</string>
<string name="settings_column_count_3">3</string>
<string name="settings_column_count_6">6</string>
<string name="settings_column_count_7">7</string>
<string name="settings_column_count_4">4</string>
<string name="settings_column_count_5">5</string>
<string name="sort_by_valid_from">Platnost od</string>
</resources>

View File

@@ -1,6 +1,6 @@
<?xml version="1.0" encoding="utf-8"?>
<resources xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
<string name="scanCardBarcode">Scanne kortets stregkode</string>
<resources xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2" xmlns:tools="http://schemas.android.com/tools">
<string name="scanCardBarcode">Scan stregkode</string>
<string name="addCardTitle">Tilføj kort</string>
<string name="editCardTitle">Rediger kort</string>
<string name="sendLabel">Afsend…</string>
@@ -24,8 +24,8 @@
<string name="cardId">Kort ID</string>
<string name="note">Bemærk</string>
<string name="storeName">Navn</string>
<string name="noMatchingGiftCards">Jeg fandt ikke noget. Prøv at ændre din søgning.</string>
<string name="noGiftCards">Klik på + plus-knappen for at tilføje et kort, eller importer først nogle kort fra ⋮-menuen.</string>
<string name="noMatchingGiftCards">Ingen resultater. Prøv at ændre din søgning.</string>
<string name="noGiftCards">Klik på + plus-knappen for at tilføje et kort, eller importer kort fra ⋮ menuen.</string>
<plurals name="selectedCardCount">
<item quantity="one"><xliff:g>%d</xliff:g> valgt kort</item>
<item quantity="other"><xliff:g>%d</xliff:g> valgte kort</item>
@@ -34,13 +34,13 @@
<string name="action_search">Søg</string>
<string name="importExport">Import/eksport</string>
<string name="exportName">Eksport</string>
<string name="importExportHelp">Hvis du sikkerhedskopierer dine kort, kan du flytte dem til en anden enhed.</string>
<string name="importExportHelp">Sikkerhedskopiering af dit data, giver dig mulighed for at flytte dem til en anden enhed.</string>
<string name="importSuccessfulTitle">Importeret</string>
<string name="importFailedTitle">Import mislykkedes</string>
<string name="importFailed">Kunne ikke importere kort</string>
<string name="importFailed">Kunne ikke udføre importering</string>
<string name="exportSuccessfulTitle">Eksporteret</string>
<string name="exportFailedTitle">Eksport mislykkedes</string>
<string name="exportFailed">Kunne ikke eksportere kort</string>
<string name="exportFailed">Kunne ikke udføre eksportering</string>
<string name="importing">Importere…</string>
<string name="exporting">Eksportere…</string>
<string name="settings_dark_theme">Mørk</string>
@@ -48,7 +48,7 @@
<string name="settings_theme">Tema</string>
<string name="settings">Indstillinger</string>
<string name="starImage">Favorit stjerne</string>
<string name="thumbnailDescription">Miniaturebillede til kort</string>
<string name="thumbnailDescription">Thumbnail</string>
<string name="selectBarcodeTitle">Vælg stregkode</string>
<string name="app_copyright_old">Baseret på Loyalty Card Keychain
\ncopyright © 2016-2020 Branden Archer.</string>
@@ -63,29 +63,95 @@
<string name="importOptionFilesystemTitle">Import fra filsystem</string>
<string name="exportOptionExplanation">Dataene skrives til en placering efter eget valg.</string>
<string name="failedParsingImportUriError">Kunne ikke analysere import-URI\'en</string>
<string name="noCardExistsError">Kunne ikke finde kort</string>
<string name="noCardExistsError">Kunne ikke finde det kort</string>
<string name="deleteConfirmationGroup">Slet gruppe\?</string>
<string name="all">Alle</string>
<string name="noGroupCards">Denne gruppe indeholder ikke nogen kort</string>
<string name="noGroups">Klik på + plus-knappen for først at tilføje grupper til kategorisering.</string>
<string name="noGroupCards">Denne gruppe er tom</string>
<string name="noGroups">Klik på + plus-knappen for at tilføje grupper til kategorisering.</string>
<string name="groups">Grupper</string>
<string name="enter_group_name">Indtast gruppenavn</string>
<string name="exportSuccessful">Eksporterede kortdata</string>
<string name="importSuccessful">Kortdata importeret</string>
<string name="exportSuccessful">Data eksporteret</string>
<string name="importSuccessful">Data importeret</string>
<string name="intent_import_card_from_url_share_text">Jeg vil dele et kort med jer</string>
<string name="settings_disable_lockscreen_while_viewing_card">Forebyg låseskærm</string>
<string name="settings_keep_screen_on">LHold skærm tændt</string>
<string name="moveUp">Bevæg dig opad</string>
<string name="leaveWithoutSaveConfirmation">Forlade uden at gemme\?</string>
<string name="settings_display_barcode_max_brightness">Lysere stregkodevisning</string>
<string name="settings_display_barcode_max_brightness">Gør skærm lysere</string>
<string name="failedOpeningFileManager">Installer først en filhåndteringsprogram.</string>
<string name="moveDown">Bevæger sig nedad</string>
<string name="leaveWithoutSaveTitle">Afslut</string>
<string name="addManually">Indtast kort-ID manuelt</string>
<string name="addManually">Indtast stregkoden manuelt</string>
<string name="noGiftCardsGroup">Opret kort og tildel dem gupper her.</string>
<plurals name="deleteCardsConfirmation">
<item quantity="one">Slet dette <xliff:g>%d</xliff:g> kort permanent\?</item>
<item quantity="other">Slet disse <xliff:g>%d</xliff:g> kort permanent\?</item>
</plurals>
<string name="app_name">Catima</string>
<string name="cameraPermissionRequired">Behov for kamera adgang krævet for denne funktion…</string>
<string name="storageReadPermissionRequired">Behov for lager adgang krævet for denne funktion…</string>
<string name="permissionReadCardsLabel">Læs Catima Kort</string>
<string name="permissionReadCardsDescription">læs dine Catima kort og alle deres detaljer, også noter og billeder</string>
<string name="cameraPermissionDeniedTitle">Kunne ikke få adgang til kamera</string>
<string name="noCameraPermissionDirectToSystemSetting">For at scanne stregkoder, har Catima behov for at få adgang til dit kamera. Klik her for at ændre dine tilladelser i indstillinger.</string>
<string name="app_copyright_fmt" tools:ignore="PluralsCandidate">Copyright © 2019<xliff:g>%d</xliff:g> Sylvia van Os og hjælpere</string>
<string name="app_copyright_short">Copyright © Sylvia van Os og hjælpere</string>
<string name="about_title_fmt">Om <xliff:g id="app_name">%s</xliff:g></string>
<string name="debug_version_fmt">Version: <xliff:g id="version">%s</xliff:g></string>
<string name="app_license">Copylefted libre software, GPLv3+ licens</string>
<string name="barcodeImageDescriptionWithType">Billede<xliff:g>%s</xliff:g> stregkode</string>
<string name="group_name_already_in_use">Gruppenavn allerede i brug</string>
<string name="editGroup">Redigerer Gruppe: <xliff:g>%s</xliff:g></string>
<string name="importFidme">Importer fra FidMe</string>
<string name="settings_card_orientation">Skærm orientation</string>
<string name="settings_follow_system_orientation">Følg system</string>
<string name="settings_portrait_orientation">Portræt</string>
<string name="settings_landscape_orientation">Landskab</string>
<string name="settings_disable_lockscreen_while_viewing_card_summary">Deaktiver låseskærm når et kort er åbent</string>
<string name="groupsList">Grupper: <xliff:g>%s</xliff:g></string>
<string name="expiryStateSentence">Udløber: <xliff:g>%s</xliff:g></string>
<string name="moveBarcodeToTopOfScreen">Flyt stregkoden til toppen af skærmen</string>
<string name="accept">Acceptér</string>
<string name="importCatima">Importer fra Catima</string>
<string name="expiryDate">Udløbsdato</string>
<string name="never">Aldrig</string>
<string name="chooseExpiryDate">Vælg udløbsdato</string>
<string name="balance">Balance</string>
<string name="importStocard">Importer fra Stocard</string>
<string name="balanceSentence">Balance: <xliff:g>%s</xliff:g></string>
<string name="group_name_is_empty">Gruppenavn må ikke være tom</string>
<string name="group_updated">Gruppe opdateret</string>
<string name="card">Kort</string>
<string name="currency">Valuta</string>
<string name="settings_display_barcode_max_brightness_summary">Nødvendigt for nogle scannere til at fungerer</string>
<string name="editBarcode">Rediger stregkode</string>
<string name="points">Point</string>
<string name="privacy_policy">Privatlivspolitik</string>
<plurals name="groupCardCount">
<item quantity="one"><xliff:g>%d</xliff:g> kort</item>
<item quantity="other"><xliff:g>%d</xliff:g> kort</item>
</plurals>
<string name="settings_allow_content_provider_read_title">Tillid andre apps tilgang til min data</string>
<string name="settings_allow_content_provider_read_summary">Apps vil stadig have behov for at spørge om tilladelse for at få adgang</string>
<string name="barcodeId">Stregkode værdi</string>
<string name="setBarcodeId">Vælg stregkode værdi</string>
<string name="sameAsCardId">Samme som ID</string>
<string name="settings_system_theme">System</string>
<string name="settings_lock_on_opening_orientation">Lås til orientation når kort åbnes</string>
<string name="settings_keep_screen_on_summary">Deaktiver skærm tids slukning når et kort er åbent</string>
<string name="group_edit">Rediger gruppe</string>
<string name="settings_follow_sensor_orientation">Altid roter (ignorer system indstillinger)</string>
<string name="chooseImportType">Importer data fra</string>
<string name="importVoucherVault">Importer fra Voucher Vault</string>
<string name="settings_use_volume_keys_navigation">Skift kort ved brug af lydstyrke knapperne</string>
<string name="settings_use_volume_keys_navigation_summary">Brug lydstyrke knapperne til at ændre hvilket kort bliver vist</string>
<string name="addFromImage">Vælg et billede fra galleri</string>
<string name="expiryStateSentenceExpired">Udløbet: <xliff:g>%s</xliff:g></string>
<string name="noBarcodeFound">Ingen stregkode blev fundet</string>
<string name="errorReadingImage">Kunne ikke læse billedet</string>
<string name="balanceParsingFailed">Ugyldig balance</string>
<plurals name="balancePoints">
<item quantity="one"><xliff:g>%s</xliff:g> point</item>
<item quantity="other"><xliff:g>%s</xliff:g> point</item>
</plurals>
</resources>

View File

@@ -163,7 +163,7 @@
<string name="app_contributors">Ermöglicht durch: <xliff:g id="app_contributors">%s</xliff:g></string>
<string name="barcodeImageDescriptionWithType">Bild <xliff:g>%s</xliff:g> Barcode</string>
<string name="sort_by">Sortieren nach</string>
<string name="sort_by_expiry">Ablauf</string>
<string name="sort_by_expiry">Gültig bis</string>
<string name="sort_by_most_recently_used">Zuletzt verwendet</string>
<string name="sort_by_name">Name</string>
<string name="sort">Sortieren</string>
@@ -291,4 +291,19 @@
<string name="useBackImage">Rückseite verwenden</string>
<string name="settings_use_volume_keys_navigation">Karten mit Lautstärketasten wechseln</string>
<string name="settings_use_volume_keys_navigation_summary">Wähle mit den Lautstärketasten, welche Karte angezeigt werden soll</string>
</resources>
<string name="settings_column_count_portrait">Spalten im Hochformat</string>
<string name="settings_column_count_landscape">Spalten im Querformat</string>
<string name="settings_automatic_column_count">Automatisch</string>
<string name="settings_column_count_2">2</string>
<string name="settings_category_title_cards_overview">Kartenübersicht</string>
<string name="settings_column_count_1">1</string>
<string name="settings_column_count_7">7</string>
<string name="settings_column_count_3">3</string>
<string name="settings_column_count_4">4</string>
<string name="settings_column_count_5">5</string>
<string name="settings_column_count_6">6</string>
<string name="generic_error_please_retry">Entschuldigung, da ist etwas schief gelaufen, versuchen Sie es noch einmal ...</string>
<string name="unsupportedFile">Diese Datei wird nicht unterstützt</string>
<string name="addFromPkpass">Passbook-Datei (.pkpass) auswählen</string>
<string name="sort_by_valid_from">Gültig ab</string>
</resources>

View File

@@ -4,7 +4,7 @@
<string name="noGiftCards">Κάντε κλικ στο + κουμπί για να προσθέσετε μία κάρτα ή προσθέστε από το ⋮ μενού.</string>
<string name="storeName">Όνομα</string>
<string name="note">Σημείωση</string>
<string name="cardId">Κωδικός Κάρτας</string>
<string name="cardId">Κωδικός κάρτας</string>
<string name="cancel">Άκυρο</string>
<string name="save">Αποθήκευση</string>
<string name="edit">Επεξεργασία</string>
@@ -54,7 +54,7 @@
<item quantity="other"><xliff:g>%d</xliff:g> επιλέγχθηκαν</item>
</plurals>
<string name="noGiftCardsGroup">Δημιούργησε κάρτες και βάλτες σε αυτή την ομάδα.</string>
<string name="addManually">Εισαγάγετε τον γραμμωτό κώδικα με μη αυτόματο τρόπο</string>
<string name="addManually">Εισαγωγή γραμμωτού κώδικα με μη αυτόματο τρόπο</string>
<string name="never">Ποτέ</string>
<string name="share">Κοινοποίηση</string>
<plurals name="balancePoints">
@@ -71,12 +71,12 @@
<string name="accept">Αποδοχή</string>
<string name="yes">Ναι</string>
<string name="no">Όχι</string>
<string name="addFromImage">Επιλέξτε μια εικόνα από τη συλλογή</string>
<string name="addFromImage">Επιλογή εικόνας από τη συλλογή</string>
<string name="expiryStateSentence">Λήγει: <xliff:g>%s</xliff:g></string>
<string name="expiryDate">Ημερομηνία λήξης</string>
<string name="settings_keep_screen_on">Κράτα την οθόνη ανοιχτή</string>
<string name="settings_keep_screen_on">Διατήρηση ενεργής οθόνης</string>
<string name="leaveWithoutSaveTitle">Έξοδος</string>
<string name="reverse">... σε αντίθετη σειρά</string>
<string name="reverse">...σε αντίστροφη σειρά</string>
<string name="version_history">Ιστορικό έκδοσης</string>
<string name="sort_by">Ταξινόμηση κατά</string>
<string name="credits">Πιστώσεις</string>
@@ -91,8 +91,7 @@
<string name="importLoyaltyCardKeychainMessage">Επιλέξτε την <i>LoyaltyCardKeychain.csv</i> εξαγωγή από το Loyalty Card Keychain για εισαγωγή.
\nΔημιουργήστε το από το μενού Εισαγωγής/Εξαγωγής στο Loyalty Card Keychain επιλέγοντας Εξαγωγή.</string>
<string name="importFidme">Εισαγωγή από FidMe</string>
<string name="importFidmeMessage">Επιλέξτε την <i>fidme-export-request-xxxxxx.zip</i> εξαγωγή από το FidMe για εισαγωγή και επιλέξτε χειροκίνητα τους τύπους γραμμωτού κώδικα μετέπειτα.
\nΔημιουργήστε το από το FidMe προφίλ επιλέγοντας Προστασία Δεδομένων και πατώντας Εξαγωγή δεδομένων πρώτα.</string>
<string name="importFidmeMessage">Επιλέξτε την <i>fidme-export-request-xxxxxx.zip</i> εξαγωγή από το FidMe για εισαγωγή και επιλέξτε χειροκίνητα τους τύπους γραμμωτού κώδικα μετέπειτα.\nΔημιουργήστε το από το FidMe προφίλ επιλέγοντας Προστασία Δεδομένων και πατώντας Εξαγωγή δεδομένων πρώτα.</string>
<string name="setBarcodeId">Επιλέξτε τιμή γραμμωτού κώδικα</string>
<string name="wrongValueForBarcodeType">Η τιμή δεν είναι έγκυρη για τον επιλεγμένο γραμμωτό κώδικα</string>
<string name="setBackImage">Επιλογή οπίσθιας εικόνας</string>
@@ -101,7 +100,7 @@
<string name="updateBarcodeQuestionText">Αλλάξατε τον κωδικό. Θέλετε να ενημερώσετε και τον γραμμωτό κώδικα στην ίδια τιμή;</string>
<string name="options">Επιλογές</string>
<string name="noGroupCards">Αυτή η ομάδα είναι άδεια</string>
<string name="settings_display_barcode_max_brightness">Επιπλέον φωτισμός γραμμωτού κώδικα</string>
<string name="settings_display_barcode_max_brightness">Επιπλέον φωτισμός οθόνης</string>
<string name="group_name_is_empty">Το όνομα της ομάδας δεν πρέπει να είναι κενό</string>
<string name="group_edit">Επεξεργασία ομάδας</string>
<string name="star">Προσθήκη στα αγαπημένα</string>
@@ -125,16 +124,16 @@
\nΠάρτε το στέλνοντας email στο: support@stocardapp.com ζητώντας μια εξαγωγή αρχείων των δεδομένων σας.</string>
<string name="intent_import_card_from_url_share_multiple_text">Θέλω να μοιραστώ μερικές κάρτες μαζί σου</string>
<string name="editGroup">Επεξεργασία Ομάδας: <xliff:g>%s</xliff:g></string>
<string name="setFrontImage">Επιλογή μπροστινής εικόνας</string>
<string name="setFrontImage">Επιλογή εμπρόσθιας εικόνας</string>
<string name="importVoucherVaultMessage">Επιλέξτε την <i>vouchervault.json</i> εξαγωγή από το Voucher Vault για εισαγωγή.
\nΔημιουργήστε το επιλέγοντας Εξαγωγή στο Voucher Vault.</string>
<string name="unsupportedBarcodeType">Ο τύπος γραμμωτού κώδικα δεν μπορεί να εμφανιστεί ακόμα. Μπορεί να υποστηρίζεται σε μια μελλοντική έκδοση της εφαρμογής.</string>
<string name="frontImageDescription">Μπροστινή εικόνα</string>
<string name="frontImageDescription">Εμπρόσθια</string>
<string name="photos">Φωτογραφίες</string>
<string name="backImageDescription">Οπίσθια εικόνα</string>
<string name="backImageDescription">Οπίσθια</string>
<string name="updateBarcodeQuestionTitle">Ενημέρωση τιμής γραμμωτού κώδικα;</string>
<string name="passwordRequired">Παρακαλώ εισάγετε τον κωδικό</string>
<string name="sort_by_most_recently_used">Χρησιμοποιήθηκαν πρόσφατα</string>
<string name="sort_by_most_recently_used">Χρήση</string>
<string name="shortcutSelectCard">Επιλέξτε μία κάρτα</string>
<string name="barcodeImageDescriptionWithType">Εικόνα <xliff:g>%s</xliff:g> γραμμωτού κώδικα</string>
<string name="app_libraries">Ελεύθερες βιβλιοθήκες τρίτων: <xliff:g id="app_libraries_list">%s</xliff:g></string>
@@ -169,11 +168,11 @@
<string name="app_copyright_old">Βασισμένο στο Loyalty Card Keychain
\nπνευματικά δικαιώματα © 2016-2020 Branden Archer</string>
<string name="settings_follow_system_orientation">Ακολούθηση συστήματος</string>
<string name="settings_card_orientation">Προσανατολισμός γραμμωτού κώδικα</string>
<string name="settings_card_orientation">Προσανατολισμός οθόνης</string>
<string name="settings_portrait_orientation">Πορτραίτο</string>
<string name="settings_landscape_orientation">Οριζόντια</string>
<string name="app_copyright_fmt" tools:ignore="PluralsCandidate">Πνευματικά δικαιώματα © 2019-<xliff:g>%d</xliff:g> Sylvia van Os</string>
<string name="settings_lock_on_opening_orientation">Κλείδωμα τωρινού προσανατολισμού όταν ανοίγει μία κάρτα</string>
<string name="settings_lock_on_opening_orientation">Κλείδωμα τρέχοντος προσανατολισμού όταν ανοίγει μία κάρτα</string>
<string name="intent_import_card_from_url_share_text">Θέλω να μοιραστώ μία κάρτα μαζί σου</string>
<string name="enter_group_name">Εισάγετε όνομα ομάδας</string>
<string name="groups">Ομάδες</string>
@@ -214,7 +213,7 @@
<string name="and_data_usage">και δεδομένα χρήσης</string>
<string name="rate_this_app">Βαθμολογήστε την εφαρμογή</string>
<string name="duplicateCard">Αντίγραφο</string>
<string name="archive">Αρχειοθετήστε</string>
<string name="archive">Αρχειοθέτηση</string>
<string name="archived">Η κάρτα αρχειοθετήθηκε</string>
<string name="unarchived">Η κάρτα αφαιρέθηκε από το αρχείο</string>
<string name="unarchive">Αφαίρεση από το αρχείο</string>
@@ -238,16 +237,16 @@
<string name="settings_allow_content_provider_read_title">Να επιτρέπεται σε άλλες εφαρμογές να έχουν πρόσβαση στα δεδομένα μου</string>
<string name="app_copyright_short">Πνευματικά δικαιώματα © Sylvia van Os και συνεργάτες</string>
<string name="height">Ύψος:</string>
<string name="switchToFrontImage">Μετάβαση στην μπροστινή εικόνα</string>
<string name="switchToFrontImage">Μετάβαση στην εμπρόσθια εικόνα</string>
<string name="switchToBackImage">Μετάβαση στην οπίσθια εικόνα</string>
<string name="switchToBarcode">Μετάβαση σε γραμμωτό κώδικα</string>
<string name="validFromSentence">Ισχύει από: <xliff:g>%s</xliff:g></string>
<string name="permissionReadCardsLabel">Διαβάστε τις κάρτες Catima</string>
<string name="openBackImageInGalleryApp">Ανοίξτε την οπίσθια εικόνα στην εφαρμογή γκαλερί</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="openFrontImageInGalleryApp">Ανοίξτε την εμπρόσθια εικόνα στη συλλογή εικόνων</string>
<string name="storageReadPermissionRequired">Δικαίωμα ανάγνωσης του χώρου αποθήκευσης απαραίτητο για αυτήν την ενέργεια…</string>
<string name="settings_follow_sensor_orientation">Πάντα σε περιστροφή (αγνοεί τις ρυθμίσεις του συστήματος)</string>
<string name="validFromDate">Ισχύει από</string>
@@ -264,7 +263,7 @@
<string name="amountParsingFailed">Μη έγκυρο ποσό</string>
<string name="show_balance">Προβολή υπολοίπου</string>
<string name="action_display_options">Επιλογές εμφάνισης</string>
<string name="settings_category_title_cards">Κάρτες</string>
<string name="settings_category_title_cards">Εμφάνιση καρτών</string>
<string name="settings_category_title_general">Γενικά</string>
<string name="show_archived_cards">Προβολή αρχειοθετημένων καρτών</string>
<string name="addWithoutBarcode">Προσθήκη κάρτας χωρίς γραμμωτό κώδικα</string>
@@ -279,17 +278,34 @@
<string name="settings_oled_dark_summary">Μειώνει τη χρήση της μπαταρίας στις οθόνες OLED</string>
<string name="show_note">Εμφάνιση σημείωσης</string>
<string name="action_more_options">Περισσότερες επιλογές</string>
<string name="enter_card_id">Εισαγάγετε τον κωδικό αριθμό ή το κείμενο στην κάρτα σας</string>
<string name="enter_card_id">Εισάγετε τον κωδικό αριθμό ή το κείμενο στην κάρτα σας</string>
<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">Οι εφαρμογές θα πρέπει ωστόσο να ζητήσουν άδεια για να τους δοθεί πρόσβαση</string>
<string name="field_must_not_be_empty">Το πεδίο δεν πρέπει να είναι κενό</string>
<string name="manually_enter_barcode_instructions">Εισαγάγετε τον κωδικό αριθμό ή το κείμενο στην κάρτα σας και πατήστε τον γραμμωτό κώδικα που μοιάζει με αυτόν της κάρτας σας.</string>
<string name="manually_enter_barcode_instructions">Εισάγετε τον κωδικό αριθμό ή το κείμενο στην κάρτα σας και πατήστε τον γραμμωτό κώδικα που μοιάζει με αυτόν της κάρτας σας.</string>
<string name="add_manually_warning_title">Συνιστάται η σάρωση</string>
<string name="noCameraFoundGuideText">Η συσκευή σας δεν φαίνεται να διαθέτει κάμερα. Αν έχει, δοκιμάστε να κάνετε επανεκκίνηση της συσκευής. Διαφορετικά, χρησιμοποιήστε το κουμπί Περισσότερες επιλογές παρακάτω για να προσθέσετε έναν γραμμωτό κώδικα με άλλο τρόπο.</string>
<string name="importCancelled">Η εισαγωγή ακυρώθηκε</string>
<string name="exportCancelled">Η εξαγωγή ακυρώθηκε</string>
<string name="useFrontImage">Χρήση μπροστινής εικόνας</string>
<string name="useFrontImage">Χρήση εμπρόσθιας εικόνας</string>
<string name="useBackImage">Χρήση οπίσθιας εικόνας</string>
</resources>
<string name="settings_use_volume_keys_navigation">Εναλλαγή καρτών με τα κουμπιά έντασης</string>
<string name="settings_use_volume_keys_navigation_summary">Χρησιμοποιήστε τα κουμπιά έντασης ήχου για να αλλάξετε την κάρτα που εμφανίζεται</string>
<string name="settings_column_count_landscape">Στήλες σε οριζόντια λειτουργία</string>
<string name="settings_column_count_1">1</string>
<string name="settings_column_count_3">3</string>
<string name="settings_column_count_5">5</string>
<string name="settings_column_count_4">4</string>
<string name="settings_category_title_cards_overview">Επισκόπηση καρτών</string>
<string name="settings_column_count_portrait">Στήλες σε κατακόρυφη λειτουργία</string>
<string name="settings_automatic_column_count">Αυτόματα</string>
<string name="settings_column_count_2">2</string>
<string name="settings_column_count_6">6</string>
<string name="settings_column_count_7">7</string>
<string name="generic_error_please_retry">Λυπούμαστε, κάτι πήγε στραβά, δοκιμάστε ξανά...</string>
<string name="unsupportedFile">Το αρχείο δεν υποστηρίζεται</string>
<string name="addFromPkpass">Επιλογή αρχείου Passbook (.pkpass)</string>
<string name="sort_by_valid_from">Έναρξη ισχύος</string>
</resources>

View File

@@ -300,4 +300,19 @@
<string name="useBackImage">Utilice la imagen trasera</string>
<string name="settings_use_volume_keys_navigation_summary">Utiliza los botones de volumen para cambiar que tarjeta se muestra</string>
<string name="settings_use_volume_keys_navigation">Cambiar de tarjetas usando los botones de volumen</string>
</resources>
<string name="settings_automatic_column_count">Automático</string>
<string name="settings_column_count_portrait">Columnas en modo vertical</string>
<string name="settings_column_count_2">2</string>
<string name="settings_category_title_cards_overview">Visión general de las tarjetas</string>
<string name="settings_column_count_landscape">Columnas en modo horizontal</string>
<string name="settings_column_count_1">1</string>
<string name="settings_column_count_3">3</string>
<string name="settings_column_count_4">4</string>
<string name="settings_column_count_5">5</string>
<string name="settings_column_count_6">6</string>
<string name="settings_column_count_7">7</string>
<string name="generic_error_please_retry">Lo sentimos, algo salió mal, por favor inténtelo de nuevo...</string>
<string name="unsupportedFile">Este archivo no es compatible</string>
<string name="addFromPkpass">Seleccione un archivo Passbook (.pkpass)</string>
<string name="sort_by_valid_from">Válido desde</string>
</resources>

View File

@@ -199,7 +199,7 @@
<string name="setFrontImage">Halda esikülje pilti</string>
<string name="setBackImage">Halda tagakülje pilti</string>
<string name="removeImage">Eemalda pilt</string>
<string name="takePhoto">Tee foto</string>
<string name="takePhoto">Pildista</string>
<string name="updateBarcodeQuestionText">Sa muutsid ID väärtust? Kas sa soovid ka triipkoodiväärtuse vastavalt uuendada?</string>
<string name="exportPassword">Sinu eksporditavate andmete turvamiseks palun sisesta salasõna (kui soovid seda)</string>
<string name="exportPasswordHint">Sisesta salasõna</string>
@@ -289,4 +289,19 @@
<string name="useBackImage">Kasuta tagakülje pilti</string>
<string name="settings_use_volume_keys_navigation">Vaheta kaarte helivaljuse nuppudega</string>
<string name="settings_use_volume_keys_navigation_summary">Vaheta kuvatavaid vahekaarte helivaljuse nuppudega</string>
</resources>
<string name="settings_column_count_1">1</string>
<string name="settings_category_title_cards_overview">Kaartide ülevaade</string>
<string name="settings_column_count_landscape">Veerge rõhtvaates</string>
<string name="settings_automatic_column_count">Automaatne</string>
<string name="settings_column_count_2">2</string>
<string name="settings_column_count_portrait">Veerge püstvaates</string>
<string name="settings_column_count_3">3</string>
<string name="settings_column_count_5">5</string>
<string name="settings_column_count_6">6</string>
<string name="settings_column_count_4">4</string>
<string name="settings_column_count_7">7</string>
<string name="generic_error_please_retry">Vabandust, midagi läks nüüd viltu, palun proovi uuesti...</string>
<string name="unsupportedFile">See fail pole toetatud</string>
<string name="addFromPkpass">Vali Passbooki fail (.pkpass)</string>
<string name="sort_by_valid_from">Kehtib alates</string>
</resources>

View File

@@ -1,5 +1,5 @@
<?xml version="1.0" encoding="utf-8"?>
<resources xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
<resources xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2" xmlns:tools="http://schemas.android.com/tools">
<string name="app_name">کاتیما</string>
<string name="action_search">جستجو</string>
<string name="action_add">افزودن</string>
@@ -72,4 +72,44 @@
<string name="settings_category_title_privacy">حریم شخصی</string>
<string name="settings_category_title_general">عمومی</string>
<string name="settings_category_title_cards">کارت‌ها</string>
</resources>
<string name="barcodeImageDescriptionWithType">تصویر بارکد <xliff:g>%s</xliff:g></string>
<string name="importOptionFilesystemButton">از فایل های سیستم</string>
<string name="importOptionApplicationTitle">استفاده از یک برنامه دیگر</string>
<string name="importOptionApplicationButton">استفاده از یک برنامه دیگر</string>
<string name="about">درباره</string>
<string name="importOptionApplicationExplanation">از هر برنامه یا مدیر فایل دلخواه خود برای باز کردن یک فایل استفاده کنید.</string>
<string name="app_copyright_fmt" tools:ignore="PluralsCandidate">حق تکثیر © 2019<xliff:g>%d</xliff:g> سیلویا وَن اُس و مشارکت کنندگان</string>
<string name="app_copyright_short">حق تکثیر © سیلویا وَن اُس و مشارکت کنندگان</string>
<string name="failedParsingImportUriError">تجزیه URI ورودی ناموفق بود</string>
<string name="importOptionFilesystemExplanation">یک فایل مشخص از فایل‌های سیستم انتخاب کنید.</string>
<string name="importOptionFilesystemTitle">وادر کردن از فایل های سیستم</string>
<plurals name="selectedCardCount">
<item quantity="one"><xliff:g>%d</xliff:g> انتخاب شد</item>
<item quantity="other"><xliff:g>%d</xliff:g> انتخاب شد</item>
</plurals>
<string name="selectBarcodeTitle">انتخاب بارکد</string>
<string name="starImage">ستاره موردعلاقه</string>
<string name="settings">تنظیمات</string>
<string name="settings_theme">تم</string>
<string name="settings_system_theme">سیستم</string>
<string name="settings_dark_theme">تیره</string>
<string name="settings_card_orientation">جهت صفحه نمایش</string>
<string name="settings_follow_sensor_orientation">همیشه قابل چرخش باشد (بدون در نظر گرفتن تنظیمات سیستم)</string>
<string name="settings_portrait_orientation">عمودی</string>
<string name="settings_keep_screen_on">روشن نگه داشتن صفحه نمایش</string>
<string name="settings_keep_screen_on_summary">غیرفعال سازی مهلت صفحه نمایش هنگام مشاهده کارت</string>
<string name="settings_disable_lockscreen_while_viewing_card">جلوگیری از قفل شدن صفحه</string>
<string name="settings_allow_content_provider_read_title">اجازه به برنامه های دیگر برای دسترسی به داده های من</string>
<string name="settings_allow_content_provider_read_summary">برنامه ها باید برای گرفتن مجوز درخواست کنند</string>
<string name="importSuccessful">داده وارد شد</string>
<string name="thumbnailDescription">تصویر کوچک</string>
<string name="settings_landscape_orientation">افقی</string>
<string name="settings_light_theme">روشن</string>
<string name="settings_display_barcode_max_brightness_summary">برای کارکرد برخی اسکنر ها ضروری است</string>
<string name="settings_display_barcode_max_brightness">روشنایی صفحه</string>
<string name="settings_disable_lockscreen_while_viewing_card_summary">جلوگیری از قفل شدن صفحه هنگام مشاهده کارت</string>
<string name="settings_follow_system_orientation">پیروی از سیستم</string>
<string name="intent_import_card_from_url_share_text">میخواهم یک کارت را با تو به اشتراک بگذارم</string>
<string name="settings_use_volume_keys_navigation">جابجایی میان کارت ها با استفاده از کلید های صدا</string>
<string name="settings_use_volume_keys_navigation_summary">از کلید های صدا برای تغیر کارت نمایشی استفاده کنید</string>
</resources>

View File

@@ -143,7 +143,7 @@
</plurals>
<plurals name="selectedCardCount">
<item quantity="one"><xliff:g>%d</xliff:g> valittu</item>
<item quantity="other"><xliff:g>%d</xliff:g> valittu</item>
<item quantity="other"><xliff:g>%d</xliff:g> valitut</item>
</plurals>
<string name="importStocard">Tuo Stocardista</string>
<string name="importStocardMessage">Valitse tuotava <i>***.zip</i>-vienti Stocardista.
@@ -181,7 +181,7 @@
<string name="sort_by_expiry">Viimeinen voimassaoloaika</string>
<string name="reverse">...käänteisessä järjestyksessä</string>
<string name="sort_by">Lajitteluperuste</string>
<string name="credits">Krediitit</string>
<string name="credits">Kiitettävää</string>
<string name="help_translate_this_app">Auta kääntämään tämä sovellus</string>
<string name="license">Lisenssi</string>
<string name="source_repository">Lähdekoodivarasto</string>
@@ -294,4 +294,19 @@
<string name="useFrontImage">Käytä etukuvaa</string>
<string name="settings_use_volume_keys_navigation">Vaihtele korttien välillä äänenvoimakkuuspainikkeilla</string>
<string name="settings_use_volume_keys_navigation_summary">Käytä äänenvoimakkuuspainikkeita vaihtaaksesi näytettävän kortin</string>
</resources>
<string name="settings_automatic_column_count">Automaattinen</string>
<string name="settings_column_count_6">6</string>
<string name="settings_category_title_cards_overview">Korttinäkymä</string>
<string name="settings_column_count_portrait">Saraketta pystytilassa</string>
<string name="settings_column_count_landscape">Saraketta vaakatilassa</string>
<string name="settings_column_count_1">1</string>
<string name="settings_column_count_2">2</string>
<string name="settings_column_count_3">3</string>
<string name="settings_column_count_4">4</string>
<string name="settings_column_count_5">5</string>
<string name="settings_column_count_7">7</string>
<string name="addFromPkpass">Valitse Passbook-tiedosto (.pkpass)</string>
<string name="unsupportedFile">Tämä tiedosto ei ole tuettu</string>
<string name="generic_error_please_retry">Pahoittelut, jokin meni pieleen. Yritä uudelleen...</string>
<string name="sort_by_valid_from">Voimassa alkaen</string>
</resources>

View File

@@ -300,4 +300,19 @@
<string name="useBackImage">Utiliser l\'image arrière</string>
<string name="settings_use_volume_keys_navigation">Changer de cartes avec les boutons de volume</string>
<string name="settings_use_volume_keys_navigation_summary">Utilisez les boutons de volume pour changer la carte affichée</string>
</resources>
<string name="settings_category_title_cards_overview">Aperçu des cartes</string>
<string name="settings_column_count_2">2</string>
<string name="settings_column_count_portrait">Colonnes en mode portrait</string>
<string name="settings_column_count_1">1</string>
<string name="settings_column_count_5">5</string>
<string name="settings_column_count_3">3</string>
<string name="settings_column_count_4">4</string>
<string name="settings_column_count_landscape">Colonnes en mode paysage</string>
<string name="settings_automatic_column_count">Automatique</string>
<string name="settings_column_count_6">6</string>
<string name="settings_column_count_7">7</string>
<string name="addFromPkpass">Sélectionner un fichier Cartes / Passbook (.pkpass)</string>
<string name="unsupportedFile">Ce fichier n\'est pas supporté</string>
<string name="generic_error_please_retry">Désolé, un problème est survenu, veuillez réessayer...</string>
<string name="sort_by_valid_from">Valide à partir du</string>
</resources>

View File

@@ -0,0 +1,306 @@
<?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="app_name">Catima</string>
<string name="action_add">Engadir</string>
<string name="noGiftCards">Preme no botón + para engadir unha tarxeta ou desde o menú ⋮.</string>
<string name="noGiftCardsGroup">Crear tarxetas e despois engádeas aquí ao grupo.</string>
<string name="noMatchingGiftCards">Sen resultados. Intenta cambiar a busca.</string>
<string name="storeName">Nome</string>
<string name="barcodeType">Tipo de código de barras</string>
<string name="noBarcode">Sen código de barras</string>
<string name="star">Engadir a favoritas</string>
<string name="save">Gardar</string>
<string name="edit">Editar</string>
<string name="cancel">Desbotar</string>
<string name="delete">Eliminar</string>
<string name="confirm">Confirmar</string>
<plurals name="deleteCardsTitle">
<item quantity="one">Eliminar <xliff:g>%d</xliff:g> tarxeta</item>
<item quantity="other">Eliminar <xliff:g>%d</xliff:g> tarxetas</item>
</plurals>
<string name="deleteConfirmation">Eliminar definitivamente esta tarxeta?</string>
<string name="ok">OK</string>
<string name="share">Compartir</string>
<string name="sendLabel">Enviar…</string>
<string name="editCardTitle">Editar Tarxeta</string>
<string name="addCardTitle">Engadir Tarxeta</string>
<string name="scanCardBarcode">Escanear Código de Barras</string>
<string name="cardShortcut">Atallo á Tarxeta</string>
<string name="noCardsMessage">Primeiro engade a tarxeta</string>
<string name="barcodeImageDescriptionWithType">Imaxe do código de barras de <xliff:g>%s</xliff:g></string>
<string name="failedParsingImportUriError">Non se puido procesar o URI de importación</string>
<string name="importExport">Importar/Exportar</string>
<string name="exportName">Exportar</string>
<string name="importExportHelp">Facendo copia de apoio dos datos podes movelos a outro dispositivo.</string>
<string name="importSuccessfulTitle">Importados</string>
<string name="importFailedTitle">Fallou a importación</string>
<string name="exportSuccessfulTitle">Exportado</string>
<string name="exportFailedTitle">Fallou a exportación</string>
<string name="exportFailed">Non se puido exportar</string>
<string name="importFailed">Non se puido importar</string>
<string name="importing">Importando…</string>
<string name="exporting">Exportando…</string>
<string name="storageReadPermissionRequired">O preciso o permiso de lectura para realizar esta acción…</string>
<string name="cameraPermissionRequired">O preciso o acceso á cámara para realizar esta acción…</string>
<string name="permissionReadCardsLabel">Ler Tarxetas Catima</string>
<string name="permissionReadCardsDescription">ler as tarxetas Catima e os seus detalles, incluíndo notas e imaxes</string>
<string name="cameraPermissionDeniedTitle">Non puido acceder á cámara</string>
<string name="noCameraPermissionDirectToSystemSetting">Catima precisa acceso á cámara para escanear códigos de barras. Toca aquí para cambiar os axustes do permiso.</string>
<string name="exportOptionExplanation">Os datos vanse escribir na localización que elixas.</string>
<string name="importOptionFilesystemTitle">Importar desde o sistema de ficheiros</string>
<string name="importOptionApplicationExplanation">Usa outra app ou o xestor de ficheiros favorito para abrir un ficheiro.</string>
<string name="importOptionApplicationButton">Usar outra app</string>
<string name="about">Sobre</string>
<string name="app_copyright_fmt" tools:ignore="PluralsCandidate">Copyright © 2019<xliff:g>%d</xliff:g> Sylvia van Os e colaboradoras</string>
<string name="app_copyright_short">Copyright © Sylvia van Os e colaboradoras</string>
<string name="app_copyright_old">Baseada en Loyalty Card Keychain\ncopyright © 20162020 Branden Archer</string>
<string name="app_license">Software Libre con Copyleft, licenza GPLv3+</string>
<string name="about_title_fmt">Sobre <xliff:g id="app_name">%s</xliff:g></string>
<string name="debug_version_fmt">Versión: <xliff:g id="version">%s</xliff:g></string>
<string name="app_libraries">Bibliotecas libres alleas: <xliff:g id="app_libraries_list">%s</xliff:g></string>
<string name="app_resources">Recursos alleos libres: <xliff:g id="app_resources_list">%s</xliff:g></string>
<string name="selectBarcodeTitle">Elixir Código de barras</string>
<string name="settings">Axustes</string>
<string name="settings_theme">Decorado</string>
<string name="settings_follow_sensor_orientation">Rotar sempre (ignora o axuste do sistema)</string>
<string name="settings_portrait_orientation">Retrato</string>
<string name="settings_landscape_orientation">Paisaxe</string>
<string name="settings_lock_on_opening_orientation">Fixar a orientación ao abrir a tarxeta</string>
<string name="settings_display_barcode_max_brightness">Brillo da pantalla</string>
<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_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>
<string name="importSuccessful">Datos importados</string>
<string name="exportSuccessful">Datos exportados</string>
<string name="enter_group_name">Escribe o nome do grupo</string>
<string name="groups">Grupos</string>
<string name="group_edit">Editar Grupo</string>
<string name="noGroups">Preme no botón + para engadir grupos por categorías.</string>
<string name="noGroupCards">O grupo está baleiro</string>
<plurals name="groupCardCount">
<item quantity="one"><xliff:g>%d</xliff:g> tarxeta</item>
<item quantity="other"><xliff:g>%d</xliff:g> tarxetas</item>
</plurals>
<string name="group_name_already_in_use">O nome xa se está a usar</string>
<string name="group_name_is_empty">O nome do grupo non pode estar baleiro</string>
<string name="moveUp">Mover arriba</string>
<string name="moveDown">Mover abaixo</string>
<string name="leaveWithoutSaveTitle">Saír</string>
<string name="leaveWithoutSaveConfirmation">Saír antes de gardar?</string>
<string name="addManually">Escribir manualmente o código</string>
<string name="addFromImage">Elixe unha imaxe desde a galería</string>
<string name="groupsList">Grupos: <xliff:g>%s</xliff:g></string>
<string name="editGroup">Editando o Grupo: <xliff:g>%s</xliff:g></string>
<string name="expiryStateSentence">Caducidade: <xliff:g>%s</xliff:g></string>
<string name="expiryStateSentenceExpired">Caducou: <xliff:g>%s</xliff:g></string>
<string name="balanceSentence">Saldo: <xliff:g>%s</xliff:g></string>
<plurals name="balancePoints">
<item quantity="one"><xliff:g>%s</xliff:g> punto</item>
<item quantity="other"><xliff:g>%s</xliff:g> puntos</item>
</plurals>
<string name="card">Tarxeta</string>
<string name="editBarcode">Editar código</string>
<string name="expiryDate">Data de caducidade</string>
<string name="never">Nunca</string>
<string name="chooseExpiryDate">Elixir data de caducidade</string>
<string name="moveBarcodeToTopOfScreen">Mover o código de barra á parte superior da pantalla</string>
<string name="noBarcodeFound">Non se atopou un código de barras</string>
<string name="errorReadingImage">Non se puido ler a imaxe</string>
<string name="balance">Saldo</string>
<string name="currency">Divisa</string>
<string name="points">Puntos</string>
<string name="balanceParsingFailed">Saldo non válido</string>
<string name="chooseImportType">Importar datos desde</string>
<string name="app_loyalty_card_keychain">Loyalty Card Keychain</string>
<string name="privacy_policy">Política de Privacidade</string>
<string name="accept">Aceptar</string>
<string name="importCatima">Importar desde Catima</string>
<string name="importCatimaMessage">Selecciona o ficheiro de exportación <i>catima.zip</i> para importalo.\nCréao no menú Importar/Exportar noutra app Catima premendo en Exportar.</string>
<string name="importFidme">Importar desde FidMe</string>
<string name="importFidmeMessage">Elixe o ficheiro exportado <i>fidme-export-request-xxxxxx.zip</i> desde FidMe, e despois elixe manualmente o tipo de código de barras.\nCréao no teu perfil FidMe en Protección de Datos e despois premendo en Extraer os meus datos.</string>
<string name="importLoyaltyCardKeychain">Importar desde Loyalty Card Keychain</string>
<string name="importLoyaltyCardKeychainMessage">Elixe o ficheiro de exportación <i>LoyaltyCardKeychain.csv</i> desde Loyalty Card Keychain \nCréao no menú Importar/Exportar en Loyalty Card Keychain premendo en Exportar.</string>
<string name="importStocard">Importar desde Stocard</string>
<string name="importStocardMessage">Elixe o ficheiro <i>***.zip</i> desde Stocard. \nPodes obtelo escribindo un correo a support@stocardapp.com e pedindo a exportación dos datos.</string>
<string name="importVoucherVault">Importar desde Voucher Vault</string>
<string name="importVoucherVaultMessage">Selecciona o ficheiro de exportación <i>vouchervault.json</i> desde Voucher Vault. \nCréao premendo en Exportar en Voucher Vault.</string>
<string name="barcodeId">Valor do código de barras</string>
<string name="sameAsCardId">Igual que o ID</string>
<string name="setBarcodeId">Establecer valor do código de barras</string>
<string name="unsupportedBarcodeType">Este tipo de código de barras aínda non se pode mostrar. Intentaremos engadir a compatibilidade no futuro.</string>
<string name="wrongValueForBarcodeType">O valor non é válido para o tipo de código de barras seleccionado</string>
<string name="intent_import_card_from_url_share_multiple_text">Quero compartir unhas tarxetas contigo</string>
<string name="frontImageDescription">Imaxe frontal</string>
<string name="backImageDescription">Imaxe posterior</string>
<string name="photos">Fotos</string>
<string name="setFrontImage">Establecer imaxe frontal</string>
<string name="setBackImage">Establecer imaxe posterior</string>
<string name="removeImage">Retirar a imaxe</string>
<string name="takePhoto">Facer unha foto</string>
<string name="updateBarcodeQuestionTitle">Actualizar o valor do código?</string>
<string name="updateBarcodeQuestionText">Cambiaches o ID. Queres cambiar tamén o código de barras para que use o mesmo valor?</string>
<string name="yes">Si</string>
<string name="no">Non</string>
<string name="failedGeneratingShareURL">Non se puido crear un URL para compartir. Informa sobre o fallo.</string>
<string name="turn_flashlight_on">Acender o flash</string>
<string name="turn_flashlight_off">Apagar o flash</string>
<string name="settings_oled_dark">Fondo en negro puro para o decorado escuro</string>
<string name="settings_oled_dark_summary">Diminúe o uso da batería nas pantallas OLED</string>
<string name="settings_system_locale">Sistema</string>
<string name="selectColor">Elixir cor</string>
<string name="settings_theme_color">Cor do decorado</string>
<string name="settings_catima_theme">Catima</string>
<string name="settings_pink_theme">Rosa</string>
<string name="settings_magenta_theme">Maxenta</string>
<string name="settings_violet_theme">Violeta</string>
<string name="settings_sky_blue_theme">Azul celeste</string>
<string name="settings_green_theme">Verde</string>
<string name="settings_brown_theme">Marrón</string>
<string name="app_contributors">Creada grazas a: <xliff:g id="app_contributors">%s</xliff:g></string>
<string name="sort">Orde</string>
<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>
<string name="reverse">…orde inversa</string>
<string name="sort_by">Orde por</string>
<string name="version_history">Historial das versións</string>
<string name="credits">Recoñecementos</string>
<string name="help_translate_this_app">Axuda a traducir a app</string>
<string name="license">Licenza</string>
<string name="source_repository">Repositorio do código</string>
<string name="on_github">en GitHub</string>
<string name="and_data_usage">e uso de datos</string>
<string name="rate_this_app">Valora esta app</string>
<string name="on_google_play">en Google Play</string>
<string name="report_error">Informar de fallo</string>
<string name="translate_platform">en Weblate</string>
<string name="shortcutSelectCard">Elixe unha tarxeta</string>
<string name="options">Opcións</string>
<string name="starred">Con estrela</string>
<string name="include_if_asking_support">Se queres pedir axuda, inclúe esta información:</string>
<string name="duplicateCard">Duplicar</string>
<string name="archive">Arquivar</string>
<string name="unarchive">Sacar do arquivo</string>
<string name="archived">Arquivouse a tarxeta</string>
<string name="unarchived">Sacouse do arquivo</string>
<plurals name="groupCardCountWithArchived">
<item quantity="one"><xliff:g>%1$d</xliff:g> tarxeta (<xliff:g id="archivedCount">%2$d</xliff:g> arquivada)</item>
<item quantity="other"><xliff:g>%1$d</xliff:g> tarxetas (<xliff:g id="archivedCount">%2$d</xliff:g> arquivadas)</item>
</plurals>
<string name="previousCard">Anterior</string>
<string name="nextCard">Seguinte</string>
<string name="failedToOpenUrl">Primeiro instala un navegador web</string>
<string name="welcome">Ben vida a Catima</string>
<string name="updateBalanceTitle">Canto gastaches ou recibiches?</string>
<string name="updateBalanceHint">Escribe a cantidade</string>
<string name="currentBalanceSentence">Saldo actual: <xliff:g>%s</xliff:g></string>
<string name="newBalanceSentence">Novo saldo: <xliff:g>%s</xliff:g></string>
<string name="anyDate">Calquera data</string>
<string name="chooseValidFromDate">Elixe data de inicio válida</string>
<string name="validFromSentence">Válida desde: <xliff:g>%s</xliff:g></string>
<string name="height">Alto:</string>
<string name="switchToFrontImage">Cambiar á imaxe frontal</string>
<string name="switchToBackImage">Cambiar á imaxe posterior</string>
<string name="openFrontImageInGalleryApp">Abrir imaxe frontal na app de galería</string>
<string name="openBackImageInGalleryApp">Abrir imaxe posterior na app de galería</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>
<string name="show_note">Ver nota</string>
<string name="show_balance">Ver saldo</string>
<string name="settings_category_title_cards">Vista de tarxeta</string>
<string name="settings_category_title_cards_overview">Vista xeral de tarxetas</string>
<string name="settings_column_count_portrait">Columnas no modo retrato</string>
<string name="settings_automatic_column_count">Automático</string>
<string name="settings_column_count_4">4</string>
<string name="settings_column_count_5">5</string>
<string name="settings_category_title_general">Xeral</string>
<string name="settings_category_title_privacy">Privacidade</string>
<string name="action_display_options">Opcións ao mostrar</string>
<string name="show_archived_cards">Mostrar tarxetas arquivadas</string>
<string name="view_online">Ver en liña</string>
<string name="action_more_options">Máis opcións</string>
<string name="addWithoutBarcode">Engadir unha tarxeta sen código de barras</string>
<string name="enter_card_id">Escribe o número ID ou texto na túa tarxeta</string>
<string name="card_id_must_not_be_empty">O ID da tarxeta non pode estar baleiro</string>
<string name="add_a_card_in_a_different_way">Engadir unha tarxeta doutro xeito</string>
<string name="field_must_not_be_empty">O campo non pode quedar baleiro</string>
<string name="manually_enter_barcode_instructions">Escribe o número ID ou texto na túa tarxeta e preme no código de barras que se pareza ao da túa tarxeta.</string>
<string name="add_manually_warning_title">Recomendamos escanear</string>
<string name="add_manually_warning_message">Nalgunhas tendas o código de barras é diferente ao número escrito na tarxeta. Debido a isto escribir o código de barras manualmente non sempre funciona. Recomendamos que escanees o código de barras coa cámara. Queres continuar igualmente?</string>
<string name="continue_">Continuar</string>
<string name="spend">Gastar</string>
<string name="receive">Recibir</string>
<string name="amountParsingFailed">Cantidade non válida</string>
<string name="failedLaunchingFileManager">Non se atopa un xestor de ficheiros compatible</string>
<string name="multipleBarcodesFoundPleaseChooseOne">Cal destes códigos de barras atopados queres usar?</string>
<string name="pageWithNumber">Páxina <xliff:g>%d</xliff:g></string>
<string name="noCameraFoundGuideText">Parece que o teu dispositivo non ten cámara. Se a ten, intenta reiniciar o dispositivo. Se non, usa o botón inferior de Máis Opcións para engadir o código de barras doutro xeito.</string>
<string name="importCancelled">Cancelouse a importación</string>
<string name="exportCancelled">Cancelouse a exportación</string>
<string name="useFrontImage">Usar imaxe frontal</string>
<string name="useBackImage">Usar imaxe posterior</string>
<plurals name="selectedCardCount">
<item quantity="one"><xliff:g>%d</xliff:g> seleccionado</item>
<item quantity="other"><xliff:g>%d</xliff:g> seleccionados</item>
</plurals>
<string name="action_search">Buscar</string>
<string name="note">Nota</string>
<string name="cardId">ID da tarxeta</string>
<string name="unstar">Retirar das favoritas</string>
<string name="deleteTitle">Eliminar tarxeta</string>
<plurals name="deleteCardsConfirmation">
<item quantity="one">Eliminar definitivamente <xliff:g>%d</xliff:g> tarxeta?</item>
<item quantity="other">Eliminar definitivamente as <xliff:g>%d</xliff:g> tarxetas?</item>
</plurals>
<string name="noCardExistsError">Non atopamos esa tarxeta</string>
<string name="settings_light_theme">Claro</string>
<string name="importOptionFilesystemButton">Desde sistema de ficheiros</string>
<string name="importOptionFilesystemExplanation">Elixe un ficheiro concreto no sistema de ficheiros.</string>
<string name="importOptionApplicationTitle">Usar outra app</string>
<string name="thumbnailDescription">Miniatura</string>
<string name="starImage">Estrela de favorita</string>
<string name="settings_system_theme">Sistema</string>
<string name="settings_follow_system_orientation">Seguir ao sistema</string>
<string name="settings_display_barcode_max_brightness_summary">Preciso para que algúns escáneres funcionen</string>
<string name="settings_keep_screen_on">Manter pantalla acendida</string>
<string name="settings_dark_theme">Escuro</string>
<string name="settings_card_orientation">Orientación da pantalla</string>
<string name="group_updated">Grupo actualizado</string>
<string name="all">Todo</string>
<string name="deleteConfirmationGroup">Eliminar grupo?</string>
<string name="failedOpeningFileManager">Primeiro instala un xestor de ficheiros.</string>
<string name="settings_locale">Idioma</string>
<string name="settings_blue_theme">Azul</string>
<string name="passwordRequired">Escribe o contrasinal</string>
<string name="exportPassword">Establece un contrasinal para protexer a exportación (optativo)</string>
<string name="exportPasswordHint">Escribe o contrasinal</string>
<string name="setIcon">Establecer miniatura</string>
<string name="failedLaunchingPhotoPicker">Non se atopa unha app de galería compatible</string>
<string name="importCards">Importar tarxetas</string>
<string name="validFromDate">Válida desde</string>
<string name="switchToBarcode">Cambiar ao código de barras</string>
<string name="donate">Doar</string>
<string name="show_validity">Ver validez</string>
<string name="settings_column_count_3">3</string>
<string name="settings_column_count_landscape">Columnas no modo paisaxe</string>
<string name="settings_column_count_2">2</string>
<string name="settings_column_count_1">1</string>
<string name="settings_column_count_6">6</string>
<string name="settings_column_count_7">7</string>
<string name="addFromPdfFile">Elixe un ficheiro PDF</string>
<string name="errorReadingFile">Non se puido ler o ficheiro</string>
<string name="unsupportedFile">Este ficheiro non é compatible</string>
<string name="addFromPkpass">Selecciona un ficheiro Passbook (.pkpass)</string>
<string name="generic_error_please_retry">Sentímolo, pero algo fallou, inténtao outra vez…</string>
<string name="sort_by_valid_from">Válido desde</string>
</resources>

View File

@@ -15,12 +15,6 @@
<string name="barcodeType">סוג ברקוד</string>
<string name="noBarcode">אין ברקוד</string>
<string name="edit">עריכה</string>
<plurals name="selectedCardCount">
<item quantity="one">אחד</item>
<item quantity="two">שניים</item>
<item quantity="many">מעט</item>
<item quantity="other">אחר</item>
</plurals>
<string name="exportFailed">לא ניתן לייצא</string>
<string name="noGiftCardsGroup">צור מספר כרטיסים, ואז שייך אותם לקבוצה פה.</string>
<string name="failedParsingImportUriError">נתיב לא נמצא</string>
@@ -49,18 +43,6 @@
<string name="exportOptionExplanation">המידע יכתב למיקום שאת/ה תבחר/י.</string>
<string name="importOptionFilesystemTitle">יבא ממערכת קבצים</string>
<string name="importOptionFilesystemExplanation">בחר/י קובץ מסויים ממערכת הקבצים.</string>
<plurals name="deleteCardsConfirmation">
<item quantity="one">אחד</item>
<item quantity="two">שניים</item>
<item quantity="many">מעט</item>
<item quantity="other">אחר</item>
</plurals>
<plurals name="deleteCardsTitle">
<item quantity="one">אחד</item>
<item quantity="two">שניים</item>
<item quantity="many">מעט</item>
<item quantity="other">אחר</item>
</plurals>
<string name="importCancelled">ייבוא בוטל</string>
<string name="exportCancelled">ייצוא בוטל</string>
<string name="addFromPdfFile">בחר קובץ PDF</string>
@@ -69,4 +51,4 @@
<string name="multipleBarcodesFoundPleaseChooseOne">באיזה מהברקודים שנמצאו אתה רוצה להשתמש?</string>
<string name="useFrontImage">השתמש בתמונה קדמית</string>
<string name="useBackImage">השתמש בתמונה אחורית</string>
</resources>
</resources>

View File

@@ -51,7 +51,7 @@
<string name="settings_theme">Tema</string>
<string name="settings_system_theme">Sustav</string>
<string name="settings_light_theme">Svijetla</string>
<string name="settings_display_barcode_max_brightness">Posvijetli prikaz crtičnog koda</string>
<string name="settings_display_barcode_max_brightness">Posvijetli ekran</string>
<string name="moveDown">Pomakni prema dolje</string>
<string name="addManually">Upiši crtični kod</string>
<string name="thumbnailDescription">Sličica</string>
@@ -129,7 +129,7 @@
<string name="noCameraPermissionDirectToSystemSetting">Za snimanje crtičnih kodova Catima treba pristup tvojoj kameri. Dodirni ovdje za mijenjanje postavki dozvola.</string>
<string name="app_libraries">Slobodne biblioteke trećih strana: <xliff:g id="app_libraries_list">%s</xliff:g></string>
<string name="selectBarcodeTitle">Odaberi crtični kod</string>
<string name="settings_portrait_orientation">Okomito</string>
<string name="settings_portrait_orientation">Uspravno</string>
<string name="settings_lock_on_opening_orientation">Odredi orijentaciju koja se koristi prilikom otvaranja kartice</string>
<string name="group_edit">Uredi grupu</string>
<string name="group_name_already_in_use">Ime grupe se već koristi</string>
@@ -169,7 +169,7 @@
<string name="storageReadPermissionRequired">Za ovu radnju je potrebna dozvola za čitanje spremljenih podataka …</string>
<string name="cameraPermissionRequired">Za ovu radnju je potrebna dozvola za pristup kameri …</string>
<string name="app_license">Copylefted libre softver, GPLv3+ licenca</string>
<string name="settings_card_orientation">Orijentacija crtičnog koda</string>
<string name="settings_card_orientation">Orijentacija ekrana</string>
<string name="settings_follow_system_orientation">Slijedi sustav</string>
<string name="balanceSentence">Saldo: <xliff:g>%s</xliff:g></string>
<string name="importFidmeMessage">Odaberi tvoju iz FidMe izvezenu <i>idme-export-request-xxxxxx.zip</i> datoteku koju želiš uvesti i ručno odaberi vste crtičnog koda nakon toga.
@@ -207,7 +207,7 @@
<string name="app_copyright_fmt" tools:ignore="PluralsCandidate">Autorska prava © 2019. <xliff:g>%d.</xliff:g> Sylvia van Os i doprinositelji</string>
<string name="debug_version_fmt">Verzija: <xliff:g id="version">%s</xliff:g></string>
<string name="app_resources">Slobodni resursi trećih strana: <xliff:g id="app_resources_list">%s</xliff:g></string>
<string name="settings_landscape_orientation">Vodoravno</string>
<string name="settings_landscape_orientation">Ležeće</string>
<string name="group_name_is_empty">Ime grupe ne smije biti prazno</string>
<string name="group_updated">Grupa je aktualizirana</string>
<string name="all">Sve</string>
@@ -270,7 +270,7 @@
<string name="action_display_options">Opcije prikaza</string>
<string name="settings_display_barcode_max_brightness_summary">Potrebno za rad nekih čitača</string>
<string name="settings_oled_dark_summary">Smanjuje potrošnju baterije OLED ekrana</string>
<string name="settings_category_title_cards">Kartice</string>
<string name="settings_category_title_cards">Prikaz kartice</string>
<string name="addWithoutBarcode">Dodaj karticu bez crtičnog koda</string>
<string name="app_copyright_short">Autorska prava © Sylvia van Os i doprinositelji</string>
<string name="field_must_not_be_empty">Polje ne smije biti prazno</string>
@@ -298,4 +298,21 @@
<string name="exportCancelled">Izvoz je prekinut</string>
<string name="useBackImage">Koristi stražnju sliku</string>
<string name="useFrontImage">Koristi prednju sliku</string>
</resources>
<string name="settings_column_count_portrait">Stupci u uspravnom modusu</string>
<string name="sort_by_valid_from">Vrijedi od</string>
<string name="settings_column_count_6">6</string>
<string name="settings_category_title_cards_overview">Pregled kartica</string>
<string name="settings_column_count_landscape">Stupci u ležećem modusu</string>
<string name="settings_automatic_column_count">Automatski</string>
<string name="settings_column_count_1">1</string>
<string name="settings_column_count_2">2</string>
<string name="settings_column_count_3">3</string>
<string name="settings_column_count_4">4</string>
<string name="settings_column_count_5">5</string>
<string name="settings_column_count_7">7</string>
<string name="generic_error_please_retry">Žao nam je, nešto nije u redu, pokušaj ponovo …</string>
<string name="addFromPkpass">Odaberi jednu Passbook datoteku (.pkpass)</string>
<string name="unsupportedFile">Ova datoteka nije podržana</string>
<string name="settings_use_volume_keys_navigation_summary">Pomoću gumba za glasnoću promijeni koja se kartica prikazuje</string>
<string name="settings_use_volume_keys_navigation">Mijenjaj kartice pomoću gumba za glasnoću</string>
</resources>

View File

@@ -9,7 +9,7 @@
</plurals>
<string name="noCardsMessage">Először adjon hozzá egy kártyát</string>
<string name="noGiftCardsGroup">Hozzon létre kártyákat, és rendelje hozzá a megfelelő csoporthoz.</string>
<string name="noMatchingGiftCards">Nincs találaat. Próbálja módosítani a keresést.</string>
<string name="noMatchingGiftCards">Nincs találat. Próbálja módosítani a keresést.</string>
<string name="storeName">Név</string>
<string name="note">Feljegyzés</string>
<string name="cardId">Kártyaazonosító</string>
@@ -24,7 +24,7 @@
<string name="confirm">Jóváhagyás</string>
<plurals name="deleteCardsTitle">
<item quantity="one"><xliff:g>%d</xliff:g> kártya törlése</item>
<item quantity="other">Törölje az <xliff:g>%d</xliff:g> kártyákat</item>
<item quantity="other"><xliff:g>%d</xliff:g> kártya törlése</item>
</plurals>
<string name="deleteConfirmation">Véglegesen törli a kártyát\?</string>
<string name="ok">Rendben</string>
@@ -294,4 +294,19 @@
<string name="settings_use_volume_keys_navigation_summary">A hangerőgombok használata a megjelenített kártya átváltásához</string>
<string name="useFrontImage">Elülső kép használata</string>
<string name="useBackImage">Hátsó kép használata</string>
</resources>
<string name="settings_category_title_cards_overview">Kártyák áttekintése</string>
<string name="settings_column_count_landscape">Oszlopok fekvő módban</string>
<string name="settings_automatic_column_count">Automatikus</string>
<string name="settings_column_count_portrait">Oszlopok álló módban</string>
<string name="settings_column_count_5">5</string>
<string name="settings_column_count_2">2</string>
<string name="settings_column_count_6">6</string>
<string name="settings_column_count_3">3</string>
<string name="settings_column_count_1">1</string>
<string name="addFromPkpass">Válassz egy Passbook fájlt (.pkpass)</string>
<string name="unsupportedFile">Ez a fájl nem támogatott</string>
<string name="generic_error_please_retry">Sajnálom, valami rosszul ment, próbálkozz újra...</string>
<string name="settings_column_count_4">4</string>
<string name="settings_column_count_7">7</string>
<string name="sort_by_valid_from">Érvényesség kezdete</string>
</resources>

View File

@@ -288,4 +288,18 @@
<string name="useBackImage">Gunakan gambar belakang</string>
<string name="settings_use_volume_keys_navigation">Ganti kartu menggunakan tombol volume</string>
<string name="settings_use_volume_keys_navigation_summary">Gunakan tombol volume untuk mengubah kartu mana yang ditampilkan</string>
<string name="settings_column_count_2">2</string>
<string name="settings_column_count_3">3</string>
<string name="settings_column_count_6">6</string>
<string name="settings_column_count_7">7</string>
<string name="settings_category_title_cards_overview">Ikhtisar kartu</string>
<string name="settings_column_count_portrait">Kolom dalam mode potret</string>
<string name="settings_column_count_landscape">Kolom dalam mode lanskap</string>
<string name="settings_automatic_column_count">Otomatis</string>
<string name="settings_column_count_1">1</string>
<string name="settings_column_count_4">4</string>
<string name="settings_column_count_5">5</string>
<string name="addFromPkpass">Pilih file Buku Tabungan (.pkpass)</string>
<string name="unsupportedFile">File ini tidak didukung</string>
<string name="generic_error_please_retry">Maaf, terjadi kesalahan, silakan coba lagi...</string>
</resources>

View File

@@ -300,4 +300,19 @@
<string name="useFrontImage">Usa l\'immagine anteriore</string>
<string name="settings_use_volume_keys_navigation">Cambia carte con i pulsanti di volume</string>
<string name="settings_use_volume_keys_navigation_summary">Utilizza i pulsanti di volume per modificare la carta visualizzata</string>
</resources>
<string name="settings_column_count_portrait">Colonne in modalità verticale</string>
<string name="settings_column_count_6">6</string>
<string name="settings_column_count_landscape">Colonne in modalità orizzontale</string>
<string name="settings_column_count_2">2</string>
<string name="settings_column_count_7">7</string>
<string name="settings_automatic_column_count">Automatico</string>
<string name="settings_column_count_1">1</string>
<string name="settings_column_count_4">4</string>
<string name="settings_column_count_3">3</string>
<string name="settings_column_count_5">5</string>
<string name="settings_category_title_cards_overview">Panoramica delle carte</string>
<string name="unsupportedFile">Questo file non è supportato</string>
<string name="generic_error_please_retry">Siamo spiacenti, qualcosa è andato storto, riprova...</string>
<string name="addFromPkpass">Seleziona un file Passbook (.pkpass)</string>
<string name="sort_by_valid_from">Valido da</string>
</resources>

View File

@@ -60,7 +60,7 @@
<string name="leaveWithoutSaveTitle">종료</string>
<string name="moveDown">아래로 이동</string>
<string name="starImage">즐겨찾기 별</string>
<string name="settings_display_barcode_max_brightness">바코드를 표시할 때 화면 밝기 높이</string>
<string name="settings_display_barcode_max_brightness">화면 밝게하</string>
<string name="deleteConfirmation">정말 이 카드를 삭제하시겠습니까\?</string>
<string name="deleteTitle">카드 삭제</string>
<plurals name="deleteCardsTitle">
@@ -216,7 +216,7 @@
<string name="importCards">카드 가져오기</string>
<string name="updateBalanceTitle">지출하거나 수령한 금액은 얼마입니까?</string>
<string name="newBalanceSentence">새 잔액: <xliff:g>%s</xliff:g></string>
<string name="settings_card_orientation">바코드 방향</string>
<string name="settings_card_orientation">화면 방향</string>
<string name="settings_follow_system_orientation">기기 설정 따르기</string>
<string name="settings_portrait_orientation">세로</string>
<string name="settings_landscape_orientation">가로</string>
@@ -257,7 +257,7 @@
<string name="settings_category_title_general">일반</string>
<string name="action_display_options">디스플레이 옵션</string>
<string name="settings_display_barcode_max_brightness_summary">스캐너가 작동하는 데 필요합니다</string>
<string name="settings_category_title_cards">카드</string>
<string name="settings_category_title_cards">카드 보기</string>
<string name="show_archived_cards">보관된 카드 표시</string>
<string name="settings_category_title_privacy">프라이버시</string>
<string name="card_id_must_not_be_empty">카드 ID는 비어 있으면 안됩니다</string>
@@ -286,4 +286,21 @@
<string name="exportCancelled">내보내기 취소됨</string>
<string name="useFrontImage">전면 이미지 사용</string>
<string name="useBackImage">후면 이미지 사용</string>
</resources>
<string name="addFromPkpass">Passbook 파일 선택하기 (.pkpass)</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>
<string name="settings_category_title_cards_overview">카드 개요</string>
<string name="settings_column_count_2">2</string>
<string name="settings_column_count_3">3</string>
<string name="settings_column_count_4">4</string>
<string name="settings_column_count_5">5</string>
<string name="settings_column_count_6">6</string>
<string name="settings_column_count_7">7</string>
<string name="settings_column_count_portrait">세로 모드의 열</string>
<string name="settings_column_count_landscape">가로 모드의 열</string>
<string name="settings_automatic_column_count">자동</string>
<string name="settings_column_count_1">1</string>
<string name="sort_by_valid_from">유효 기간</string>
</resources>

View File

@@ -2,27 +2,27 @@
<resources xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2" xmlns:tools="http://schemas.android.com/tools">
<string name="action_search">Meklēt</string>
<string name="action_add">Pievienot</string>
<string name="noGiftCards">Noklikšķiniet uz pogas + plus, lai pievienotu karti, vai vispirms importējiet no ⋮ izvēlnes.</string>
<string name="noMatchingGiftCards">Nav rezultātu. Mēģiniet mainīt meklējamo tekstu.</string>
<string name="noGiftCards">Klikšķināt pogu \"+\", lai pievienotu karti, vai ievietot no ⋮izvēlnes.</string>
<string name="noMatchingGiftCards">Nekas netika atrasts. Jāmēģina mainīt savu vaicājumu.</string>
<string name="storeName">Nosaukums</string>
<string name="note">Piezīme</string>
<string name="barcodeType">Svītrkoda tips</string>
<string name="barcodeType">Svītrkoda veids</string>
<string name="noBarcode">Nav svītrkoda</string>
<string name="star">Pievienot izlasei</string>
<string name="unstar">Noņemt no izlases</string>
<string name="cancel">Atcelt</string>
<string name="save">Saglabāt</string>
<string name="edit">Rediģēt</string>
<string name="edit">Labot</string>
<string name="delete">Dzēst</string>
<string name="moveBarcodeToTopOfScreen">Pārvietojiet svītrkodu uz ekrāna augšdaļu</string>
<string name="moveBarcodeToTopOfScreen">Pārvietot svītrkodu uz ekrāna augšdaļu</string>
<string name="errorReadingImage">Nevarēja nolasīt attēlu</string>
<string name="balance">Bilance</string>
<string name="balance">Atlikums</string>
<string name="noBarcodeFound">Svītrkods netika atrasts</string>
<string name="currency">Valūta</string>
<string name="points">Punkti</string>
<string name="chooseImportType">Importēt datus no</string>
<string name="chooseImportType">Ievietot datus no</string>
<string name="sendLabel">Nosūtīt…</string>
<string name="editCardTitle">Rediģēt karti</string>
<string name="editCardTitle">Labot karti</string>
<string name="share">Kopīgot</string>
<string name="confirm">Apstiprināt</string>
<string name="deleteTitle">Dzēst karti</string>
@@ -31,66 +31,66 @@
<string name="addCardTitle">Pievienot karti</string>
<string name="scanCardBarcode">Skenēt svītrkodu</string>
<string name="cardShortcut">Kartes saīsne</string>
<string name="noCardsMessage">Vispirms pievienojiet karti</string>
<string name="noCardsMessage">Vispirms pievieno karte</string>
<string name="noCardExistsError">Nevarēja atrast karti</string>
<string name="failedParsingImportUriError">Nevarēja parsēt importa URI</string>
<string name="importExport">Imports/Eksports</string>
<string name="exportName">Eksports</string>
<string name="importExportHelp">Dublējot Jūsu datus, tos var pārnest uz citu ierīci.</string>
<string name="importSuccessfulTitle">Importēts</string>
<string name="importFailedTitle">Imports neizdevās</string>
<string name="importFailed">Karšu importu nevarēja veikt</string>
<string name="exportSuccessfulTitle">Eksportēts</string>
<string name="exportFailedTitle">Eksports neizdevās</string>
<string name="exportFailed">Kartes neizdevās eksportēt</string>
<string name="importing">Importē</string>
<string name="exporting">Eksportē</string>
<string name="exportOptionExplanation">Dati tiks saglabāti Jūsu izvēlētajā vietā.</string>
<string name="importOptionFilesystemTitle">Imports no failu sistēmas</string>
<string name="importOptionFilesystemExplanation">Izvēlieties konkrētu failu no failu sistēmas.</string>
<string name="importOptionFilesystemButton">No failu sistēmas</string>
<string name="importOptionApplicationTitle">Izmantojot citu lietotni</string>
<string name="importOptionApplicationExplanation">Izmantojiet jebkuru lietotni vai savu iecienītāko failu pārvaldnieku, lai atvērtu failu.</string>
<string name="importOptionApplicationButton">Ar citu lietotni</string>
<string name="failedParsingImportUriError">Nevarēja apstrādāt ievietošanas URI</string>
<string name="importExport">Ievietot/izgūt</string>
<string name="exportName">Izgūt</string>
<string name="importExportHelp">Datu rezerves kopijas izveidošana ļauj tos pārnest uz citu ierīci.</string>
<string name="importSuccessfulTitle">Ievietots</string>
<string name="importFailedTitle">Ievietošana neizdevās</string>
<string name="importFailed">Nevarēja veikt ievietošanu</string>
<string name="exportSuccessfulTitle">Izgūts</string>
<string name="exportFailedTitle">Izguve neizdevās</string>
<string name="exportFailed">Nevarēja veikt izguvi</string>
<string name="importing">Ievieto</string>
<string name="exporting">Izgūst</string>
<string name="exportOptionExplanation">Dati tiks saglabāti izvēlētajā atrašanās vietā.</string>
<string name="importOptionFilesystemTitle">Ievietot no datņu sistēmas</string>
<string name="importOptionFilesystemExplanation">Izvēlēties noteiktu datni datņu sistēmā.</string>
<string name="importOptionFilesystemButton">No datņu sistēmas</string>
<string name="importOptionApplicationTitle">Izmantot citu lietotni</string>
<string name="importOptionApplicationExplanation">Izmantot jebkuru lietotni vai savu iecienītāko datņu pārvaldnieku, lai atvērtu datni.</string>
<string name="importOptionApplicationButton">Izmantot citu lietotni</string>
<string name="about">Par</string>
<string name="app_license">Copyleft brīva un atvērta programmatūra, licencēta GPLv3+</string>
<string name="selectBarcodeTitle">Izvēlieties svītrkodu</string>
<string name="selectBarcodeTitle">Atlasīt svītrkodu</string>
<string name="thumbnailDescription">Sīktēls</string>
<string name="starImage">Izlases zvaigzne</string>
<string name="settings">Iestatījumi</string>
<string name="settings_theme">Tēma</string>
<string name="settings_theme">Izskats</string>
<string name="settings_system_theme">Sistēmas</string>
<string name="settings_light_theme">Gaiša</string>
<string name="settings_dark_theme">Tumša</string>
<string name="settings_display_barcode_max_brightness">Izgaismot svītrkoda skatu</string>
<string name="settings_display_barcode_max_brightness">Izgaismot ekrānu</string>
<string name="settings_keep_screen_on">Turēt ekrānu ieslēgtu</string>
<string name="settings_disable_lockscreen_while_viewing_card">Neļaut ekrānam aizslēgties</string>
<string name="intent_import_card_from_url_share_text">Es vēlos ar Jums kopīgot karti</string>
<string name="importSuccessful">Dati importēti</string>
<string name="exportSuccessful">Dati eksportēti</string>
<string name="noGroups">Spiediet uz \"+\" plus pogas, lai pievienotu grupas karšu kategorizēšanai.</string>
<string name="noGroupCards">Šī grupa ir tukša</string>
<string name="intent_import_card_from_url_share_text">Es vēlos ar Tevi kopīgot karti</string>
<string name="importSuccessful">Dati ievietoti</string>
<string name="exportSuccessful">Dati izgūti</string>
<string name="noGroups">Klikšķināt pogu \"+\", lai pievienotu kopas karšu apkopošanai.</string>
<string name="noGroupCards">Šī kopa ir tukša</string>
<string name="all">Visas</string>
<string name="deleteConfirmationGroup">Dzēst grupu\?</string>
<string name="failedOpeningFileManager">Vispirms instalējiet failu pārvaldnieku.</string>
<string name="deleteConfirmationGroup">Izdzēst kopu?</string>
<string name="failedOpeningFileManager">Vispirms jāuzstāda datņu pārvaldnieks.</string>
<string name="moveUp">Pārvietot uz augšu</string>
<string name="moveDown">Pārvietot uz leju</string>
<string name="leaveWithoutSaveTitle">Iziet</string>
<string name="leaveWithoutSaveConfirmation">Iziet nesaglabājot\?</string>
<string name="addFromImage">Izvēlēties attēlu no galerijas</string>
<string name="addFromImage">Atlasīt attēlu no galerijas</string>
<string name="card">Karte</string>
<string name="expiryDate">Derīguma termiņš</string>
<string name="never">Nekad</string>
<string name="chooseExpiryDate">Izvēlieties derīguma termiņu</string>
<string name="failedToRetrieveImageFile">Neizdevās ielādēt attēla failu</string>
<string name="chooseExpiryDate">Izvēlēties beigu datumu</string>
<string name="failedToRetrieveImageFile">Neizdevās iet attēla datni</string>
<string name="barcodeLongPressMessage">Galerijas lietotnē var atvērt tikai attēlus</string>
<string name="sort_by_expiry">Derīguma termiņš</string>
<string name="reverse">...apgrieztā secībā</string>
<string name="credits">Pateicības</string>
<string name="shortcutSelectCard">Izvēlieties karti</string>
<string name="shortcutSelectCard">Atlasīt karti</string>
<string name="duplicateCard">Dublēt</string>
<string name="archive">Arhivēt</string>
<string name="translate_platform">vietnē Weblate</string>
<string name="translate_platform">Weblate</string>
<string name="starred">Izlase</string>
<string name="cardId">Kartes numurs</string>
<plurals name="deleteCardsConfirmation">
@@ -100,7 +100,7 @@
</plurals>
<string name="about_title_fmt">Par <xliff:g id="app_name">%s</xliff:g></string>
<string name="expiryStateSentenceExpired">Derīguma termiņš beidzās: <xliff:g>%s</xliff:g></string>
<string name="selectColor">Izvēlieties krāsu</string>
<string name="selectColor">Atlasīt krāsu</string>
<string name="settings_catima_theme">Catima</string>
<string name="settings_pink_theme">Rozā</string>
<string name="settings_magenta_theme">Purpura</string>
@@ -108,32 +108,30 @@
<string name="settings_green_theme">Zaļa</string>
<string name="sort_by_name">Nosaukums</string>
<string name="on_google_play">pakalpojumā Google Play</string>
<string name="report_error">Ziņojiet par kļūdu</string>
<string name="report_error">Ziņot par kļūdu</string>
<plurals name="balancePoints">
<item quantity="zero"><xliff:g>%s</xliff:g> punkti</item>
<item quantity="one"><xliff:g>%s</xliff:g> punkts</item>
<item quantity="other"><xliff:g>%s</xliff:g> punkti</item>
</plurals>
<string name="app_loyalty_card_keychain">Loyalty Card Keychain</string>
<string name="importCatimaMessage">Izvēlieties jūstu <i>catima.zip</i> failu importam.
\nFailu var izveidot eksportējot datus no Catima lietotnes citā ierīce, sadaļā \"Imports/Eksports\".</string>
<string name="importLoyaltyCardKeychainMessage">Importam izvēlieties Jūsu <i>LoyaltyCardKeychain.csv</i> eksporta failu no Loyalty Card Keychain.
\nFailu var izveidot \"Imports/Eksports\" izvēlnē Loyalty Card Keychain lietotnē, spiežot \"Eksportēt\".</string>
<string name="importCatimaMessage">Jāatlasa sava <i>catima.zip</i> izguves datne no Catima, lai ievietotu. \nTo var izveidot citā ierīcē esošas Catima lietotnes sadaļā \"Ievietot/izgūt\" spiežot \"Izgūt\".</string>
<string name="importLoyaltyCardKeychainMessage">Jāatlasa sava <i>LoyaltyCardKeychain.csv</i> izguves datne no Loyalty Card Keychain, lai ievietotu. \nTo var izveidot Loyalty Card Keychain sadaļā \"Import/Export\" spiežot \"Export\".</string>
<string name="removeImage">Noņemt attēlu</string>
<string name="exportPasswordHint">Ievadiet paroli</string>
<string name="on_github">vietnē GitHub</string>
<string name="exportPasswordHint">Ievadīt paroli</string>
<string name="on_github">GitHub</string>
<string name="settings_locale">Valoda</string>
<string name="failedGeneratingShareURL">Nevarēja izveidot koplietojamu URL. Lūdzu, ziņojiet par šo kļūdu.</string>
<string name="failedGeneratingShareURL">Nevarēja izveidot kopīgojamu URL. Lūgums ziņot par šo.</string>
<string name="turn_flashlight_off">Izslēgt zibspuldzi</string>
<string name="app_contributors">To padarīja iespējamu: <xliff:g id="app_contributors">%s</xliff:g></string>
<string name="version_history">Versiju vēsture</string>
<string name="sort_by">Kārtot pēc</string>
<string name="help_translate_this_app">Palīdziet tulkot šo lietotni</string>
<string name="help_translate_this_app">Palīdzi tulkot šo lietotni</string>
<string name="and_data_usage">un datu lietojums</string>
<string name="license">Licence</string>
<string name="source_repository">Pirmkods</string>
<string name="rate_this_app">Novērtējiet šo lietotni</string>
<string name="noGiftCardsGroup">Izveidojiet kartes, un pēc tam šeit pievienojiet tās grupai.</string>
<string name="rate_this_app">Novērtēt šo lietotni</string>
<string name="noGiftCardsGroup">Izveido kādas kartes, tad šeit pievieno tās kopai.</string>
<string name="options">Parametri</string>
<plurals name="groupCardCount">
<item quantity="zero"><xliff:g>%d</xliff:g> kartes</item>
@@ -150,11 +148,11 @@
<string name="yes"></string>
<string name="no"></string>
<string name="settings_system_locale">Sistēmas</string>
<string name="include_if_asking_support">Ja vēlaties lūgt atbalstu, lūdzu iekļaujiet sekojošo informāciju:</string>
<string name="include_if_asking_support">Ja vēlies lūgt atbalstu, iekļauj sekojošā informācija:</string>
<string name="barcodeImageDescriptionWithType"><xliff:g>%s</xliff:g> svītrkoda attēls</string>
<string name="privacy_policy">Privātuma politika</string>
<string name="accept">Apstiprināt</string>
<string name="editGroup">Grupas rediģēšana: <xliff:g>%s</xliff:g></string>
<string name="accept">Pieņemt</string>
<string name="editGroup">Kopas labošana: <xliff:g>%s</xliff:g></string>
<string name="settings_brown_theme">Brūna</string>
<string name="app_copyright_fmt" tools:ignore="PluralsCandidate">Autortiesības © 2019<xliff:g>%d</xliff:g> Sylvia van Os</string>
<string name="app_copyright_old">Balstīta uz Loyalty Card Keychain
@@ -162,56 +160,53 @@
<string name="debug_version_fmt">Versija: <xliff:g id="version">%s</xliff:g></string>
<string name="app_libraries">Brīvas trešo pušu programmatūras bibliotēkas: <xliff:g id="app_libraries_list">%s</xliff:g></string>
<string name="app_resources">Brīvi trešo pušu resursi: <xliff:g id="app_resources_list">%s</xliff:g></string>
<string name="settings_card_orientation">Svītrkoda orientācija</string>
<string name="settings_follow_system_orientation">Pēc sistēmas</string>
<string name="settings_portrait_orientation">Portreta</string>
<string name="settings_landscape_orientation">Ainavas</string>
<string name="settings_lock_on_opening_orientation">Ievērot to orientāciju, kādā karte atvērta</string>
<string name="enter_group_name">Ievadiet grupas nosaukumu</string>
<string name="groups">Grupas</string>
<string name="group_edit">Rediģēt grupu</string>
<string name="group_name_already_in_use">Jau ir grupa ar šādu nosaukumu</string>
<string name="group_name_is_empty">Grupas nosaukums nevar būt tukšs</string>
<string name="group_updated">Grupa atjaunināta</string>
<string name="addManually">Ievadīt numuru manuāli</string>
<string name="groupsList">Grupas: <xliff:g>%s</xliff:g></string>
<string name="settings_card_orientation">Ekrāna novietojums</string>
<string name="settings_follow_system_orientation">Izmantot sistēmas</string>
<string name="settings_portrait_orientation">Stateniski</string>
<string name="settings_landscape_orientation">Līmeniski</string>
<string name="settings_lock_on_opening_orientation">Izmantot novietojumu, kāds bija kartes atvēršanas brīdī</string>
<string name="enter_group_name">Ievadīt kopas nosaukumu</string>
<string name="groups">Kopas</string>
<string name="group_edit">Labot kopu</string>
<string name="group_name_already_in_use">Kopas nosaukums jau tiek izmantots</string>
<string name="group_name_is_empty">Kopas nosaukums nedrīkst būt tukšs</string>
<string name="group_updated">Kopa atjaunināta</string>
<string name="addManually">Pašrocīgi ievadīt svītrkodu</string>
<string name="groupsList">Kopas: <xliff:g>%s</xliff:g></string>
<string name="expiryStateSentence">Derīguma termiņš: <xliff:g>%s</xliff:g></string>
<string name="balanceSentence">Bilance: <xliff:g>%s</xliff:g></string>
<string name="editBarcode">Rediģēt svītrkodu</string>
<string name="importCatima">Importēt no Catima</string>
<string name="importFidme">Importēt no FidMe</string>
<string name="importFidmeMessage">Importam izvēlieties Jūsu <i>fidme-export-request-xxxxxx.zip</i> FidMe eksportēto failu, un pēc tam manuāli precizējiet svītrkodu tipus.
\nFailu var izveidot Jūsu FidMe profilā, ejot uz \"Data Protection\" un spiežot \"Extract my data\".</string>
<string name="importLoyaltyCardKeychain">Importēt no Loyalty Card Keychain</string>
<string name="importStocard">Importēt no Stocard</string>
<string name="importStocardMessage">Importam izvēlieties Jūsu <i>***.zip</i> eksporta failu no Stocard.
\nFailu var iegūt sūtot e-pastu uz support@stocardapp.com ar pieprasījumu eksportēt Jūsu datus.</string>
<string name="importVoucherVault">Importēt no Voucher Vault</string>
<string name="importVoucherVaultMessage">Importam izvēlieties Jūsu <i>vouchervault.json</i> failu no Voucher Vault.
\nFailu var izveidot spiežot \"Eksportēt\" Voucher Vault lietotnē.</string>
<string name="balanceSentence">Atlikums: <xliff:g>%s</xliff:g></string>
<string name="editBarcode">Labot svītrkodu</string>
<string name="importCatima">Ievietot no Catima</string>
<string name="importFidme">Ievietot no FidMe</string>
<string name="importFidmeMessage">Jāatlasa sava <i>fidme-export-request-xxxxxx.zip</i> izguves datne no FidMe, lai ievietotu, un pēc tam pašrocīgi jāatlasa svītrkodu veidi. \nTo var izveidot savā FidMe profila sadaļā \"Data Protection\" spiežot \"Extract my data\".</string>
<string name="importLoyaltyCardKeychain">Ievietot no Loyalty Card Keychain</string>
<string name="importStocard">Ievietot no Stocard</string>
<string name="importStocardMessage">Jāatlasa sava <i>***.zip</i> izguves datne no Stocard, lai ievietotu. \nTo var iegūt, ja nosūta lūgumu izgūt savus datus uz e-pasta adresi support@stocardapp.com.</string>
<string name="importVoucherVault">Ievietot no Voucher Vault</string>
<string name="importVoucherVaultMessage">Jāatlasa sava <i>vouchervaldt.json</i> izguves datne no Voucher Vault, lai ievietotu. \nTo var izveidot spiežot \"Export\" Voucher Vault.</string>
<string name="barcodeId">Svītrkoda vērtība</string>
<string name="sameAsCardId">Tāpat kā numurs</string>
<string name="setBarcodeId">Norādiet svītrkoda vērtību</string>
<string name="unsupportedBarcodeType">Šo svītrkoda tipu pagaidām nav iespējams attēlot. Iespējams, nākotnē tas tiks atbalstīts vēlākā lietotnes versijā.</string>
<string name="wrongValueForBarcodeType">Šī vērtība nav derīga izvēlētajam svītrkoda tipam</string>
<string name="intent_import_card_from_url_share_multiple_text">Vēlos koplietot kartes</string>
<string name="setBarcodeId">Ievadīt svītrkoda vērtību</string>
<string name="unsupportedBarcodeType">Šo svītrkoda veidu pagaidām nav iespējams attēlot. Tas nākotnē varbūt tiks atbalstīts jaunākā lietotnes versijā.</string>
<string name="wrongValueForBarcodeType">Šī vērtība nav derīga atlasītajam svītrkoda veidam</string>
<string name="intent_import_card_from_url_share_multiple_text">Vēlos ar Tevi kopīgot dažas kartes</string>
<string name="frontImageDescription">Priekšas attēls</string>
<string name="backImageDescription">Aizmugures attēls</string>
<string name="photos">Foto</string>
<string name="setFrontImage">Iestatīt priekšas attēlu</string>
<string name="setBackImage">Iestatīt aizmugures attēlu</string>
<string name="takePhoto">Fotografēt</string>
<string name="passwordRequired">Ievadiet paroli</string>
<string name="exportPassword">Iestatiet paroli, lai aizsargātu eksporta failu (nav obligāti)</string>
<string name="passwordRequired">Lūgums ievadīt paroli</string>
<string name="exportPassword">Iestatīt paroli, lai aizsargātu savu izguves datni (pēc izvēles)</string>
<string name="turn_flashlight_on">Ieslēgt zibspuldzi</string>
<string name="settings_oled_dark">Tīri melns fons tumšajai tēmai</string>
<string name="setIcon">Iestatīt ikonu</string>
<string name="settings_theme_color">Tēmas krāsa</string>
<string name="settings_oled_dark">Tīri melns fons tumšajam izskatam</string>
<string name="setIcon">Iestatīt sīktēlu</string>
<string name="settings_theme_color">Izskata krāsa</string>
<string name="settings_violet_theme">Violeta</string>
<string name="settings_blue_theme">Zila</string>
<string name="sort">Kārtot</string>
<string name="showMoreInfo">Rādīt informāciju</string>
<string name="sort_by_most_recently_used">Nesen lietotās</string>
<string name="sort_by_most_recently_used">Visnesenāk izmantotās</string>
<string name="unarchive">Atarhivēt</string>
<string name="archived">Karte arhivēta</string>
<string name="unarchived">Karte atarhivēta</string>
@@ -223,16 +218,96 @@
<item quantity="one"><xliff:g>%1$d</xliff:g> card (<xliff:g id="archivedCount">%2$d</xliff:g> arhivēta)</item>
<item quantity="other"><xliff:g>%1$d</xliff:g> cards (<xliff:g id="archivedCount">%2$d</xliff:g> arhivētas)</item>
</plurals>
<string name="failedToOpenUrl">Vispirms nepieciešams uzstādīt interneta pārlūku</string>
<string name="welcome">Laipni lūgti Catima</string>
<string name="cameraPermissionRequired">Ir nepieciešama pieeja kamerai lai veiktu šo darbību</string>
<string name="noCameraPermissionDirectToSystemSetting">Lai skanētu svītrkods, Catima ir nepieciešama pieeja jūsu kamerai. Nospied šeit lai nomainītu atļaujas iestatījumus.</string>
<string name="cameraPermissionDeniedTitle">Nevar pievienieties kamerai</string>
<string name="updateBalance">Atjaunināta bilance</string>
<string name="updateBalanceTitle">Cik daudz Tu iztērēji?</string>
<string name="updateBalanceHint">Ievadi summu</string>
<string name="currentBalanceSentence">Šābrīža bilance: <xliff:g>%s</xliff:g></string>
<string name="newBalanceSentence">Jauna bilance: <xliff:g>%s</xliff:g></string>
<string name="failedToOpenUrl">Vispirms nepieciešams uzstādīt pārlūku</string>
<string name="welcome">Laipni lūdzam Catima</string>
<string name="cameraPermissionRequired">Šai darbībai ir nepieciešama atļauja piekļūt kamerai…</string>
<string name="noCameraPermissionDirectToSystemSetting">Lai nolasītu svītrkodus, Catima būs nepieciešama piekļuve kamerai. Piesist šeit, lai mainītu savus atļauju iestatījumus.</string>
<string name="cameraPermissionDeniedTitle">Nevarēja piekļūt kamerai</string>
<string name="updateBalance">Atjaunināt atlikumu</string>
<string name="updateBalanceTitle">Cik daudz iztērēji vai saņēmi?</string>
<string name="updateBalanceHint">Ievadīt summu</string>
<string name="currentBalanceSentence">Pašreizējais atlikums: <xliff:g>%s</xliff:g></string>
<string name="newBalanceSentence">Jaunais atlikums: <xliff:g>%s</xliff:g></string>
<string name="storageReadPermissionRequired">Atļauja lasīt noliktavu ir nepieciešama šai darbībai…</string>
<string name="importCards">Importēt kartes</string>
</resources>
<string name="importCards">Ievietot kartes</string>
<string name="settings_oled_dark_summary">Samazina akumulatora lietojumu OLED ekrāniem</string>
<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 galerijas 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žiem veikaliem svītrkoda vērtība atšķiras no numura, kas ir rakstīts uz kartes. Šī iemesla dēļ pašrocīgi ievadīts svītrkods ne vienmēr var darboties. Ir ļoti 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šas attēlu galerijas lietotnē</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>
<string name="show_archived_cards">Rādīt arhivētās kartes</string>
<string name="view_online">Skatīt tiešsaistē</string>
<string name="action_display_options">Attēlošanas iespējas</string>
<string name="validFromSentence">Derīga no: <xliff:g>%s</xliff:g></string>
<string name="switchToBackImage">Pārslēgties uz aizmugures attēlu</string>
<string name="switchToBarcode">Pārslēgties uz svītrkodu</string>
<string name="add_manually_warning_title">Nolasīšana ir ieteicama</string>
<string name="settings_display_barcode_max_brightness_summary">Nepieciešams, lai darbotos atsevišķi nolasītāji</string>
<string name="importCancelled">Ievietošana atcelta</string>
<string name="permissionReadCardsLabel">Lasīt Catima kartes</string>
<string name="permissionReadCardsDescription">lasīt Catima kartes un to informāciju, tajā skaitā piezīmes un attēlus</string>
<string name="settings_use_volume_keys_navigation_summary">Izmantot skaļuma pogas, lai mainītu, kura karte tiek attēlota</string>
<string name="chooseValidFromDate">Izvēlēties \"Derīga no\" datumu</string>
<string name="settings_category_title_cards_overview">Karšu pārskats</string>
<string name="settings_column_count_6">6</string>
<string name="settings_automatic_column_count">Automātiski</string>
<plurals name="selectedCardCount">
<item quantity="zero">atlasītas <xliff:g>%d</xliff:g></item>
<item quantity="one">atlasīta <xliff:g>%d</xliff:g></item>
<item quantity="other">atlasītas <xliff:g>%d</xliff:g></item>
</plurals>
<string name="app_copyright_short">Autortiesības © Sylvia van Os un līdzdalībnieki</string>
<string name="settings_category_title_cards">Kartes skats</string>
<string name="settings_category_title_general">Vispārīgi</string>
<string name="errorReadingFile">Nevarēja nolasīt datni</string>
<string name="failedLaunchingFileManager">Nevarēja atrast atbalstītu datņu pārvaldnieku</string>
<string name="multipleBarcodesFoundPleaseChooseOne">Kuru no atrastajiem svītrkodiem izmantot?</string>
<string name="pageWithNumber"><xliff:g>%d</xliff:g>. lapa</string>
<string name="spend">Tērēt</string>
<string name="receive">Saņemt</string>
<string name="amountParsingFailed">Nederīga summa</string>
<string name="settings_follow_sensor_orientation">Vienmēr pagriezt (neņem vērā sistēmas iestatījumus)</string>
<string name="validFromDate">Derīga no</string>
<string name="setBarcodeHeight">Iestatīt svītrkoda augstumu</string>
<string name="switchToFrontImage">Pārslēgties uz priekšas attēlu</string>
<string name="show_validity">Rādīt derīgumu</string>
<string name="app_name">Catima</string>
<string name="settings_keep_screen_on_summary">Atspējo ekrāna noildzi kartes skatīšanas laikā</string>
<string name="settings_disable_lockscreen_while_viewing_card_summary">Atspējo ekrāna aizslēgšanu kartes skatīšanas laikā</string>
<string name="useFrontImage">Izmantot priekšas attēlu</string>
<string name="useBackImage">Izmantot aizmugures attēlu</string>
<string name="settings_use_volume_keys_navigation">Pārslēgt kartes ar skaļuma pogām</string>
<string name="balanceParsingFailed">Nederīgs atlikums</string>
<string name="show_name_below_image_thumbnail">Rādīt vārdu zem sīktēla</string>
<string name="action_more_options">Vairāk iespēju</string>
<string name="addWithoutBarcode">Pievienot karti bez svītrkoda</string>
<string name="enter_card_id">Ievadīt uz kartes esošu identifikatoru vai tekstu</string>
<string name="manually_enter_barcode_instructions">Jāievada uz kartes esošs identifikators vai teksts un jāspiež uz svītrkoda, kas izskatās kā tas, kas ir uz kartes.</string>
<string name="continue_">Turpināt</string>
<string name="addFromPdfFile">Atlasīt PDF datni</string>
<string name="exportCancelled">Izguve atcelta</string>
<string name="settings_column_count_1">1</string>
<string name="settings_column_count_2">2</string>
<string name="settings_column_count_3">3</string>
<string name="settings_column_count_4">4</string>
<string name="settings_column_count_5">5</string>
<string name="settings_column_count_7">7</string>
<string name="settings_column_count_portrait">Kolonnas stateniskā novietojumā</string>
<string name="settings_column_count_landscape">Kolonnas līmeniskā novietojumā</string>
<string name="unsupportedFile">Šī datne netiek atbalstīta</string>
<string name="addFromPkpass">Atlasīt Passbook datni (.pkpass)</string>
<string name="generic_error_please_retry">Atvainojamies, kaut kas nogāja greizi. Lūgums mēģināt vēlreiz...</string>
<string name="sort_by_valid_from">Derīga no</string>
</resources>

View File

@@ -44,7 +44,7 @@
<string name="selectBarcodeTitle">Velg strekkode</string>
<string name="thumbnailDescription">Miniatyrbilde</string>
<string name="settings">Innstillinger</string>
<string name="settings_display_barcode_max_brightness">Lysere strekkodevisning</string>
<string name="settings_display_barcode_max_brightness">Gjør skjermen lysere</string>
<string name="exportSuccessful">Data eksportert</string>
<string name="importSuccessful">Data importert</string>
<string name="intent_import_card_from_url_share_text">Jeg ønsker å dele et kort med deg</string>
@@ -100,7 +100,7 @@
<string name="importCatima">Importer fra Catima</string>
<string name="errorReadingImage">Kunne ikke lese bildet</string>
<string name="noBarcodeFound">Fant ingen strekkode</string>
<string name="addFromImage">Velg bilde fra galleri</string>
<string name="addFromImage">Velg et bilde fra galleriet</string>
<string name="unsupportedBarcodeType">Denne strekkodetypen kan ikke vises for øyeblikket. Støtte kan bli lagt til i en senere versjon av programmet.</string>
<string name="setBarcodeId">Sett strekkodeverdi</string>
<string name="sameAsCardId">Samme som ID</string>
@@ -203,7 +203,7 @@
</plurals>
<string name="settings_oled_dark">Svart bakgrunn for mørk drakt</string>
<string name="include_if_asking_support">Inkluder følgende info hvis du vil ha hjelp:</string>
<string name="settings_card_orientation">Strekkoderetning</string>
<string name="settings_card_orientation">Skjermorientering</string>
<string name="settings_landscape_orientation">Liggende</string>
<string name="settings_lock_on_opening_orientation">Lås til sideretning brukt ved åpning av kort</string>
<string name="duplicateCard">Dupliser</string>
@@ -228,7 +228,7 @@
<string name="noCameraPermissionDirectToSystemSetting">Catima trenger kameratilgang for å skanne strekkoder. Trykk her for å endre tilgangsinnstillingene.</string>
<string name="importCards">Importer kort</string>
<string name="currentBalanceSentence">Nåværende saldo: <xliff:g>%s</xliff:g></string>
<string name="updateBalanceTitle">Hvor mye brukte du?</string>
<string name="updateBalanceTitle">Hvor mye brukte eller fikk du?</string>
<string name="updateBalanceHint">Skriv inn beløp</string>
<string name="newBalanceSentence">Ny saldo: <xliff:g>%s</xliff:g></string>
<string name="updateBalance">Oppdater saldo</string>
@@ -258,7 +258,7 @@
<string name="settings_keep_screen_on_summary">Skrur av skjermtidsavbrudd under visning av et kort</string>
<string name="settings_disable_lockscreen_while_viewing_card_summary">Skrur av skjermlås under visning av et kort</string>
<string name="settings_allow_content_provider_read_title">Tillat andre programmer tilgang til min data</string>
<string name="settings_category_title_cards">Kort</string>
<string name="settings_category_title_cards">Kortvisning</string>
<string name="settings_category_title_general">Generelt</string>
<string name="settings_category_title_privacy">Personvern</string>
<string name="settings_oled_dark_summary">Reduserer batteribruk for OLED-skjermer</string>
@@ -279,17 +279,34 @@
<string name="continue_">Fortsett</string>
<string name="amountParsingFailed">Ugyldig beløp</string>
<string name="spend">Utgifter</string>
<string name="receive">Inntekt</string>
<string name="receive">Motta</string>
<string name="settings_follow_sensor_orientation">Alltid roter (ignorerer systeminnstilling)</string>
<string name="add_manually_warning_message">I noen butikker er strekkoden forskjellig fra nummeret på kortet. Som følge av dette kan det hende at å skrive inn strekkoden ikke virker. Det anbefales å skanne strekkoden med kameraet istedenfor. Fortsett?</string>
<string name="add_manually_warning_message">I noen butikker er strekkoden forskjellig fra nummeret på kortet. Som følge av dette kan det hende at å skrive inn strekkoden ikke virker. Det anbefales å skanne strekkoden med kameraet istedenfor. Vil du fortsette?</string>
<string name="pageWithNumber">Side <xliff:g>%d</xliff:g></string>
<string name="addFromPdfFile">Velg en PDF-fil</string>
<string name="errorReadingFile">Kunne ikke lese filen</string>
<string name="failedLaunchingFileManager">Fant ikke støttet filbehandler</string>
<string name="failedLaunchingFileManager">Kunne ikke finne filbehandler som støttes</string>
<string name="multipleBarcodesFoundPleaseChooseOne">Hvilken av de oppdagede strekkodene vil du bruke?</string>
<string name="noCameraFoundGuideText">Finner ikke kamera på enheten din. Hvis dette ikke stemmer kan du prøve en omstart av den. Ellers kan du legge til strekkoder med «Mer»-knappen nedenfor.</string>
<string name="importCancelled">Import avbrutt</string>
<string name="exportCancelled">Eksport avbrutt</string>
<string name="useFrontImage">Bruk frontbilde</string>
<string name="useFrontImage">Bruk forsidebilde</string>
<string name="useBackImage">Bruk baksidebilde</string>
</resources>
<string name="settings_use_volume_keys_navigation">Bytt kort ved å bruke volumknappene</string>
<string name="settings_use_volume_keys_navigation_summary">Bruk volumknappene for å velge hvilket kort som skal vises</string>
<string name="settings_category_title_cards_overview">Kortoversikt</string>
<string name="settings_column_count_portrait">Kolonner i portrettmodus</string>
<string name="settings_column_count_landscape">Kolonner i landskapsmodus</string>
<string name="settings_automatic_column_count">Automatisk</string>
<string name="settings_column_count_1">1</string>
<string name="settings_column_count_4">4</string>
<string name="settings_column_count_5">5</string>
<string name="settings_column_count_6">6</string>
<string name="settings_column_count_2">2</string>
<string name="settings_column_count_3">3</string>
<string name="settings_column_count_7">7</string>
<string name="addFromPkpass">Velg en Passbook-fil (.pkpass)</string>
<string name="unsupportedFile">Denne filen støttes ikke</string>
<string name="generic_error_please_retry">Beklager, men noe gikk galt. Prøv igjen…</string>
<string name="sort_by_valid_from">Gyldig fra</string>
</resources>

View File

@@ -260,7 +260,7 @@
<string name="settings_display_barcode_max_brightness_summary">Benodigd voor de werking van sommige scanners</string>
<string name="settings_disable_lockscreen_while_viewing_card_summary">Schakelt schermvergrendeling uit tijdens het bekijken van een kaart</string>
<string name="settings_oled_dark_summary">Verlaagt het accuverbruik op oledschermen</string>
<string name="settings_category_title_cards">Kaartenoverzicht</string>
<string name="settings_category_title_cards">Kaart</string>
<string name="settings_category_title_general">Algemeen</string>
<string name="app_copyright_short">Auteursrecht © Sylvia van Os en bijdragers</string>
<string name="action_display_options">Weergave-instellingen</string>
@@ -294,4 +294,19 @@
<string name="useBackImage">Gebruik achterzijde van kaart</string>
<string name="settings_use_volume_keys_navigation">Verwissel kaart met de volume knoppen</string>
<string name="settings_use_volume_keys_navigation_summary">Gebruik de volume knoppen om te wisselen van getoonde kaart</string>
</resources>
<string name="settings_category_title_cards_overview">Kaartenoverzicht</string>
<string name="settings_column_count_landscape">Kolommen in landschapmodus</string>
<string name="settings_automatic_column_count">Automatisch</string>
<string name="settings_column_count_portrait">Kolommen in portretmodus</string>
<string name="settings_column_count_2">2</string>
<string name="settings_column_count_3">3</string>
<string name="settings_column_count_4">4</string>
<string name="settings_column_count_5">5</string>
<string name="settings_column_count_1">1</string>
<string name="settings_column_count_6">6</string>
<string name="settings_column_count_7">7</string>
<string name="addFromPkpass">Kies een Passbook bestand (.pkpass)</string>
<string name="unsupportedFile">Dit bestand wordt niet ondersteund</string>
<string name="generic_error_please_retry">Sorry, er ging iets mis. Probeer het opnieuw.</string>
<string name="sort_by_valid_from">Op geldig vanaf</string>
</resources>

View File

@@ -306,4 +306,19 @@
<string name="useFrontImage">Użyj obrazu z przodu</string>
<string name="settings_use_volume_keys_navigation">Przełączaj karty przy użyciu przycisków głośności</string>
<string name="settings_use_volume_keys_navigation_summary">Użyj przycisków głośności do przełączania kart</string>
</resources>
<string name="settings_column_count_2">2</string>
<string name="settings_column_count_3">3</string>
<string name="settings_column_count_4">4</string>
<string name="settings_column_count_5">5</string>
<string name="settings_column_count_6">6</string>
<string name="settings_column_count_7">7</string>
<string name="settings_category_title_cards_overview">Przegląd kart</string>
<string name="settings_column_count_portrait">Kolumny w trybie portretu</string>
<string name="settings_column_count_landscape">Kolumny w trybie pejzażu</string>
<string name="settings_automatic_column_count">Automatycznie</string>
<string name="settings_column_count_1">1</string>
<string name="addFromPkpass">Wybierz plik Passbook (.pkpass)</string>
<string name="unsupportedFile">Ten plik nie jest obsługiwany</string>
<string name="generic_error_please_retry">Coś poszło nie tak, spróbuj ponownie później...</string>
<string name="sort_by_valid_from">Poprawna forma</string>
</resources>

View File

@@ -300,4 +300,19 @@
<string name="useFrontImage">Usar imagem frontal</string>
<string name="settings_use_volume_keys_navigation_summary">Use os botões de volume para alterar qual cartão é exibido</string>
<string name="settings_use_volume_keys_navigation">Trocar de cartão usando botões de volume</string>
</resources>
<string name="settings_category_title_cards_overview">Resumo dos cartões</string>
<string name="settings_column_count_portrait">Colunas em modo retrato</string>
<string name="settings_automatic_column_count">Automático</string>
<string name="settings_column_count_landscape">Colunas em modo paisagem</string>
<string name="settings_column_count_1">1</string>
<string name="settings_column_count_2">2</string>
<string name="settings_column_count_3">3</string>
<string name="settings_column_count_4">4</string>
<string name="settings_column_count_5">5</string>
<string name="settings_column_count_6">6</string>
<string name="settings_column_count_7">7</string>
<string name="unsupportedFile">Este arquivo não é suportado</string>
<string name="addFromPkpass">Selecionar um arquivo do gerenciador de senhas (.pkpass)</string>
<string name="generic_error_please_retry">Desculpe, alguma coisa deu errado, por favor tente novamente...</string>
<string name="sort_by_valid_from">Válido a partir de</string>
</resources>

View File

@@ -12,7 +12,7 @@
<string name="save">Guardar</string>
<string name="edit">Editar</string>
<string name="noGiftCards">Clique no botão + para adicionar um cartão ou importe-o no menu ⋮.</string>
<string name="noBarcode">sem código de barras</string>
<string name="noBarcode">Sem código de barras</string>
<string name="unstar">Retirar dos favoritos</string>
<string name="importOptionFilesystemButton">Do sistema de ficheiros</string>
<string name="importOptionApplicationTitle">Usar outra aplicação</string>
@@ -36,10 +36,10 @@
<string name="delete">Eliminar</string>
<string name="cardId">Identificador do cartão</string>
<string name="cardShortcut">Atalho do cartão</string>
<string name="noCardsMessage">Adicione primeiro um cartão</string>
<string name="noCardsMessage">Adicione um cartão primeiro</string>
<string name="noCardExistsError">Não foi possível encontrar esse cartão</string>
<string name="failedParsingImportUriError">Não foi possível analisar o URI de importação</string>
<string name="importExport">Importar / exportar</string>
<string name="importExport">Importar / Exportar</string>
<string name="exportName">Exportar</string>
<string name="importSuccessful">Dados importados</string>
<string name="noGroups">Clique no botão + para adicionar grupos para categorização.</string>
@@ -110,7 +110,7 @@
<item quantity="other"><xliff:g>%d</xliff:g> cartões</item>
</plurals>
<string name="importOptionFilesystemTitle">Importar do sistema de ficheiros</string>
<string name="app_copyright_fmt" tools:ignore="PluralsCandidate">Copyright © 2019-<xliff:g>%d</xliff:g> Sylvia van Os e colaboradores</string>
<string name="app_copyright_fmt" tools:ignore="PluralsCandidate">Copyright © 2019-<xliff:g>%d</xliff:g> Sylvia van Os e contribuidores</string>
<string name="app_copyright_old">Baseado no Loyalty Card Keychain
\ndireitos de autor © 20162020 Branden Archer</string>
<string name="about_title_fmt">Sobre o <xliff:g id="app_name">%s</xliff:g></string>
@@ -230,7 +230,7 @@
<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ódigo de barras, o Catima tem de aceder à câmara. Clique aqui para mudar as configurações de permissão.</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>
<string name="currentBalanceSentence">Saldo atual: <xliff:g>%s</xliff:g></string>
@@ -254,7 +254,7 @@
<string name="donate">Doar</string>
<string name="show_validity">Mostrar validade</string>
<string name="show_balance">Mostrar saldo</string>
<string name="permissionReadCardsLabel">Ler Cartas Catima</string>
<string name="permissionReadCardsLabel">Ler Cartões Catima</string>
<string name="permissionReadCardsDescription">leia seus cartões do Catima e todos os seus detalhes, incluindo notas e imagens</string>
<string name="show_note">Mostrar nota</string>
<string name="show_name_below_image_thumbnail">Mostrar nome abaixo da miniatura do ícone</string>
@@ -277,7 +277,7 @@
<string name="enter_card_id">Digite o número ID ou o texto em seu cartão</string>
<string name="action_display_options">Opções de visualização</string>
<string name="addWithoutBarcode">Adicione um cartão sem código de barras</string>
<string name="app_copyright_short">Copyright © Sylvia van Os e colaboradores</string>
<string name="app_copyright_short">Copyright © Sylvia van Os e contribuidores</string>
<string name="field_must_not_be_empty">O campo não pode estar vazio</string>
<string name="show_archived_cards">Mostrar cartões arquivados</string>
<string name="app_name">Catima</string>
@@ -300,4 +300,19 @@
<string name="useBackImage">Utilizar imagem do verso</string>
<string name="settings_use_volume_keys_navigation">Mudar de cartão usando os botões de volume</string>
<string name="settings_use_volume_keys_navigation_summary">Utilize os botões de volume para alterar o cartão que é apresentado</string>
</resources>
<string name="settings_category_title_cards_overview">Resumo dos cartões</string>
<string name="settings_column_count_portrait">Colunas no modo vertical</string>
<string name="settings_column_count_4">4</string>
<string name="settings_column_count_5">5</string>
<string name="settings_column_count_landscape">Colunas no modo horizontal</string>
<string name="settings_automatic_column_count">Automático</string>
<string name="settings_column_count_1">1</string>
<string name="settings_column_count_2">2</string>
<string name="settings_column_count_3">3</string>
<string name="settings_column_count_6">6</string>
<string name="settings_column_count_7">7</string>
<string name="addFromPkpass">Selecionar um ficheiro Passbook (.pkpass)</string>
<string name="unsupportedFile">Este ficheiro não é suportado</string>
<string name="generic_error_please_retry">Lamento, ocorreu um erro, tente novamente...</string>
<string name="sort_by_valid_from">Válido a partir de</string>
</resources>

View File

@@ -0,0 +1,312 @@
<?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_search">Pesquisa</string>
<string name="action_add">Adicionar</string>
<plurals name="selectedCardCount">
<item quantity="one"><xliff:g>%d</xliff:g> selecionado</item>
<item quantity="many"><xliff:g>%d</xliff:g> selecionado</item>
<item quantity="other"><xliff:g>%d</xliff:g> selecionados</item>
</plurals>
<string name="noGiftCards">Clique no botão + para adicionar um cartão ou importe-o no menu ⋮.</string>
<string name="noGiftCardsGroup">Crie alguns cartões e atribua-os depois ao grupo aqui.</string>
<string name="noMatchingGiftCards">Sem resultados. Tente alterar a sua pesquisa.</string>
<string name="app_name">Catima</string>
<string name="addCardTitle">Adicionar cartão</string>
<string name="noCardExistsError">Não foi possível encontrar esse cartão</string>
<string name="importFailed">Não foi possível importar</string>
<string name="exportSuccessfulTitle">Exportado</string>
<string name="exportFailedTitle">A exportação falhou</string>
<string name="exportFailed">Não foi possível exportar</string>
<string name="cameraPermissionDeniedTitle">Não foi possível aceder à câmara</string>
<string name="importOptionFilesystemButton">Do sistema de ficheiros</string>
<string name="about">Sobre</string>
<string name="settings_portrait_orientation">Retrato</string>
<string name="settings_display_barcode_max_brightness">Iluminar o ecrã</string>
<string name="settings_display_barcode_max_brightness_summary">Necessário para alguns scanners funcionarem</string>
<string name="groups">Grupos</string>
<string name="group_updated">Grupo atualizado</string>
<string name="all">Todos</string>
<string name="deleteConfirmationGroup">Eliminar o grupo?</string>
<string name="card">Cartão</string>
<string name="balance">Saldo</string>
<string name="app_loyalty_card_keychain">Chaveiro de cartão de fidelidade</string>
<string name="yes">Sim</string>
<string name="no">Não</string>
<string name="settings_category_title_cards">Vista de cartão</string>
<string name="settings_column_count_1">1</string>
<string name="settings_column_count_2">2</string>
<string name="settings_column_count_3">3</string>
<string name="settings_column_count_4">4</string>
<string name="settings_column_count_5">5</string>
<string name="settings_column_count_6">6</string>
<string name="storeName">Nome</string>
<string name="note">Nota</string>
<string name="cardId">Identificador do cartão</string>
<string name="barcodeType">Tipo de código de barras</string>
<string name="noBarcode">Sem código de barras</string>
<string name="star">Adicionar aos favoritos</string>
<string name="unstar">Retirar dos favoritos</string>
<string name="cancel">Cancelar</string>
<string name="save">Guardar</string>
<string name="edit">Editar</string>
<string name="delete">Eliminar</string>
<string name="confirm">Confirmar</string>
<string name="deleteTitle">Eliminar cartão</string>
<plurals name="deleteCardsTitle">
<item quantity="one">Eliminar <xliff:g>%d</xliff:g> cartão</item>
<item quantity="many">Eliminar <xliff:g>%d</xliff:g> cartões</item>
<item quantity="other">Eliminar <xliff:g>%d</xliff:g> cartões</item>
</plurals>
<string name="deleteConfirmation">Eliminar este cartão permanentemente?</string>
<plurals name="deleteCardsConfirmation">
<item quantity="one">Eliminar o cartão <xliff:g>%d</xliff:g> permanentemente?</item>
<item quantity="many">Eliminar os cartões <xliff:g>%d</xliff:g> permanentemente?</item>
<item quantity="other">Eliminar os cartões <xliff:g>%d</xliff:g> permanentemente?</item>
</plurals>
<string name="ok">OK</string>
<string name="share">Partilhar</string>
<string name="sendLabel">Enviar…</string>
<string name="editCardTitle">Editar cartão</string>
<string name="scanCardBarcode">Digitalizar código de barras</string>
<string name="cardShortcut">Atalho do cartão</string>
<string name="noCardsMessage">Adicione um cartão primeiro</string>
<string name="barcodeImageDescriptionWithType">Imagem do código de barras <xliff:g>%s</xliff:g></string>
<string name="failedParsingImportUriError">Não foi possível analisar o URI de importação</string>
<string name="importExport">Importar / Exportar</string>
<string name="exportName">Exportar</string>
<string name="importExportHelp">A cópia de segurança dos seus dados permite-lhe movê-los para outro dispositivo.</string>
<string name="importSuccessfulTitle">Importado</string>
<string name="importFailedTitle">A importação falhou</string>
<string name="importing">A importar…</string>
<string name="exporting">A exportar…</string>
<string name="storageReadPermissionRequired">É necessária a permissão para ler o armazenamento para esta ação…</string>
<string name="cameraPermissionRequired">É necessária a permissão para aceder à câmara para esta ação…</string>
<string name="permissionReadCardsLabel">Ler Cartões Catima</string>
<string name="permissionReadCardsDescription">leia os seus cartões do Catima e todos os seus pormenores, incluindo notas e imagens</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="exportOptionExplanation">Os dados serão guardados num local à sua escolha.</string>
<string name="importOptionFilesystemTitle">Importar do sistema de ficheiros</string>
<string name="importOptionFilesystemExplanation">Escolha um ficheiro específico a partir do sistema de ficheiros.</string>
<string name="importOptionApplicationTitle">Usar outra aplicação</string>
<string name="importOptionApplicationExplanation">Utilize qualquer aplicação ou o seu gestor de ficheiros favorito para abrir um ficheiro.</string>
<string name="importOptionApplicationButton">Utilizar outra aplicação</string>
<string name="app_copyright_fmt" tools:ignore="PluralsCandidate">Copyright © 2019-<xliff:g>%d</xliff:g> Sylvia van Os e contribuidores</string>
<string name="app_copyright_short">Copyright © Sylvia van Os e contribuidores</string>
<string name="app_copyright_old">Baseado no Loyalty Card Keychain \ndireitos de autor © 20162020 Branden Archer</string>
<string name="app_license">Software livre de partilha sob a mesma licença e segundo a licença GPLv3+</string>
<string name="about_title_fmt">Sobre o <xliff:g id="app_name">%s</xliff:g></string>
<string name="debug_version_fmt">Versão: <xliff:g id="version">%s</xliff:g></string>
<string name="app_libraries">Bibliotecas livres de terceiros: <xliff:g id="app_libraries_list">%s</xliff:g></string>
<string name="selectBarcodeTitle">Selecionar código de barras</string>
<string name="app_resources">Recursos livres de terceiros: <xliff:g id="app_resources_list">%s</xliff:g></string>
<string name="thumbnailDescription">Miniatura</string>
<string name="starImage">Favorito</string>
<string name="settings">Configurações</string>
<string name="settings_theme">Tema</string>
<string name="settings_system_theme">Sistema</string>
<string name="settings_light_theme">Claro</string>
<string name="settings_dark_theme">Escuro</string>
<string name="settings_card_orientation">Orientação do ecrã</string>
<string name="settings_follow_system_orientation">Definido no sistema</string>
<string name="settings_follow_sensor_orientation">Rodar sempre (ignora as definições do sistema)</string>
<string name="settings_landscape_orientation">Paisagem</string>
<string name="settings_keep_screen_on">Manter ecrã ligado</string>
<string name="settings_keep_screen_on_summary">Desativa o tempo limite do ecrã ao visualizar um cartão</string>
<string name="settings_lock_on_opening_orientation">Bloqueio da orientação usada ao abrir o cartão</string>
<string name="settings_disable_lockscreen_while_viewing_card">Desativar bloqueio do ecrã</string>
<string name="settings_disable_lockscreen_while_viewing_card_summary">Desativa o bloqueio de ecrã ao visualizar um cartão</string>
<string name="settings_allow_content_provider_read_title">Permitir que outras apps acessem os meus dados</string>
<string name="settings_allow_content_provider_read_summary">Apps ainda terão que solicitar permissão para receber acesso</string>
<string name="settings_use_volume_keys_navigation">Mudar de cartão usando os botões de volume</string>
<string name="settings_use_volume_keys_navigation_summary">Utilize os botões de volume para alterar o cartão que é apresentado</string>
<string name="intent_import_card_from_url_share_text">Quero partilhar um cartão</string>
<string name="importSuccessful">Dados importados</string>
<string name="exportSuccessful">Dados exportados</string>
<string name="enter_group_name">Introduza o nome do grupo</string>
<string name="group_edit">Editar grupo</string>
<string name="noGroups">Clique no botão + para adicionar grupos para categorização.</string>
<string name="noGroupCards">Este grupo está vazio</string>
<plurals name="groupCardCount">
<item quantity="one"><xliff:g>%d</xliff:g> cartão</item>
<item quantity="many"><xliff:g>%d</xliff:g> cartões</item>
<item quantity="other"><xliff:g>%d</xliff:g> cartões</item>
</plurals>
<string name="group_name_already_in_use">O nome do grupo já está a ser usado</string>
<string name="group_name_is_empty">O nome do grupo não pode ser vazio</string>
<string name="failedOpeningFileManager">Instalar primeiro um gestor de ficheiros.</string>
<string name="moveUp">Subir</string>
<string name="moveDown">Descer</string>
<string name="leaveWithoutSaveTitle">Sair</string>
<string name="leaveWithoutSaveConfirmation">Sair sem guardar?</string>
<string name="addManually">Insira o código de barras manualmente</string>
<string name="addFromImage">Selecione uma imagem da galeria</string>
<string name="groupsList">Grupos: <xliff:g>%s</xliff:g></string>
<string name="editGroup">A editar grupo: <xliff:g>%s</xliff:g></string>
<string name="expiryStateSentence">Expiram: <xliff:g>%s</xliff:g></string>
<string name="expiryStateSentenceExpired">Expirados: <xliff:g>%s</xliff:g></string>
<string name="balanceSentence">Saldo: <xliff:g>%s</xliff:g></string>
<plurals name="balancePoints">
<item quantity="one"><xliff:g>%s</xliff:g> ponto</item>
<item quantity="many"><xliff:g>%s</xliff:g> pontos</item>
<item quantity="other"><xliff:g>%s</xliff:g> pontos</item>
</plurals>
<string name="editBarcode">Editar código de barras</string>
<string name="expiryDate">Data de validade</string>
<string name="never">Nunca</string>
<string name="chooseExpiryDate">Escolher validade</string>
<string name="moveBarcodeToTopOfScreen">Mover o código de barras para o topo do ecrã</string>
<string name="noBarcodeFound">Não foi encontrado nenhum código de barras</string>
<string name="errorReadingImage">Não foi possível ler a imagem</string>
<string name="currency">Moeda</string>
<string name="points">Pontos</string>
<string name="balanceParsingFailed">Saldo inválido</string>
<string name="chooseImportType">Importar dados de</string>
<string name="privacy_policy">Política de privacidade</string>
<string name="accept">Aceitar</string>
<string name="importCatima">Importar do Catima</string>
<string name="importCatimaMessage">Selecione a exportação <i>catima.zip</i> do Catima a importar. \nPrimeiro crie a exportação no menu \"Importar / exportar\" de outra aplicação Catima pressionando \"Exportar\" nesse menu.</string>
<string name="importFidme">Importar do FidMe</string>
<string name="importFidmeMessage">Selecione a exportação <i>fidme-export-request-xxxxxx.zip</i> do FidMe para importar e depois selecione os tipos de código de barras manualmente. \nPrimeiro crie a exportação no seu perfil do FidMe escolhendo a opção \"Proteção de dados\" e em seguida pressionando \"Extrair os meus dados\".</string>
<string name="importLoyaltyCardKeychain">Importar do Loyalty Card Keychain</string>
<string name="importLoyaltyCardKeychainMessage">Selecione a exportação <i>LoyaltyCardKeychain.csv</i> do Loyalty Card Keychain para importar. \nPrimeiro crie a exportação no menu \"Importar / exportar\" no Loyalty Card Keychain pressionando \"Exportar\".</string>
<string name="importStocard">Importar do Stocard</string>
<string name="importStocardMessage">Selecione a exportação <i>***.zip</i> do Stocard para importar. \nObtenha-o através do e-mail support@stocardapp.com solicitando uma exportação dos seus dados.</string>
<string name="importVoucherVault">Importar do Voucher Vault</string>
<string name="importVoucherVaultMessage">Selecione a exportação <i>vouchervault.json</i> do Voucher Vault para importar. \nCrie-a primeiro pressionando a opção \"Exportar\" no Voucher Vault.</string>
<string name="unsupportedBarcodeType">Este tipo de código de barras ainda não pode ser mostrado. Pode vir a ser suportado numa versão posterior da aplicação.</string>
<string name="wrongValueForBarcodeType">O valor não é válido para o tipo de código de barras selecionado</string>
<string name="barcodeId">Valor do código de barras</string>
<string name="sameAsCardId">Igual ao identificador</string>
<string name="setBarcodeId">Definir o valor do código de barras</string>
<string name="intent_import_card_from_url_share_multiple_text">Quero partilhar alguns cartões</string>
<string name="frontImageDescription">Imagem frontal</string>
<string name="backImageDescription">Imagem de trás</string>
<string name="photos">Fotografias</string>
<string name="setFrontImage">Definir imagem frontal</string>
<string name="setBackImage">Definir imagem de trás</string>
<string name="removeImage">Remover imagem</string>
<string name="takePhoto">Tirar uma fotografia</string>
<string name="updateBarcodeQuestionTitle">Atualizar o valor do código de barras?</string>
<string name="updateBarcodeQuestionText">Alterou o identificador. Também quer atualizar o código de barras para usar o mesmo valor?</string>
<string name="passwordRequired">Introduza a palavra-passe</string>
<string name="exportPassword">Defina uma palavra-passe para proteger a exportação (opcional)</string>
<string name="exportPasswordHint">Digite a palavra-passe</string>
<string name="failedGeneratingShareURL">Não foi possível gerar um URL partilhável. Por favor reporte isto aos programadores.</string>
<string name="turn_flashlight_on">Ligar lanterna</string>
<string name="turn_flashlight_off">Desligar lanterna</string>
<string name="settings_locale">Idioma</string>
<string name="settings_oled_dark">Fundo preto puro para tema negro</string>
<string name="settings_oled_dark_summary">Reduz a utilização da pilha em ecrãs OLED</string>
<string name="settings_system_locale">Sistema</string>
<string name="selectColor">Selecionar cor</string>
<string name="setIcon">Definir miniatura</string>
<string name="settings_theme_color">Cor do tema</string>
<string name="settings_catima_theme">Catima</string>
<string name="settings_pink_theme">Rosa</string>
<string name="settings_magenta_theme">Magenta</string>
<string name="settings_violet_theme">Violeta</string>
<string name="settings_blue_theme">Azul</string>
<string name="settings_sky_blue_theme">Azul céu</string>
<string name="settings_green_theme">Verde</string>
<string name="settings_brown_theme">Castanho</string>
<string name="app_contributors">Tornado possível por: <xliff:g id="app_contributors">%s</xliff:g></string>
<string name="sort">Ordenar</string>
<string name="showMoreInfo">Mostrar informação</string>
<string name="updateBalance">Atualizar saldo</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="sort_by_name">Nome</string>
<string name="sort_by_most_recently_used">Mais usados recentemente</string>
<string name="sort_by_valid_from">Válido a partir de</string>
<string name="sort_by_expiry">Validade</string>
<string name="reverse">…na ordem inversa</string>
<string name="sort_by">Ordenar por</string>
<string name="version_history">Histórico de versões</string>
<string name="credits">Créditos</string>
<string name="help_translate_this_app">Ajude a traduzir esta aplicação</string>
<string name="license">Licença</string>
<string name="source_repository">Repositório do código-fonte</string>
<string name="on_github">no GitHub</string>
<string name="and_data_usage">e utilização de dados</string>
<string name="rate_this_app">Avalie esta aplicação</string>
<string name="on_google_play">no Google Play</string>
<string name="report_error">Reportar erro</string>
<string name="translate_platform">no Weblate</string>
<string name="shortcutSelectCard">Selecione um cartão</string>
<string name="options">Opções</string>
<string name="starred">Estrela</string>
<string name="include_if_asking_support">Se quiser pedir ajuda, inclua as seguintes informações:</string>
<string name="duplicateCard">Duplicar</string>
<string name="archive">Arquivar</string>
<string name="unarchive">Desarquivar</string>
<string name="archived">Cartão arquivado</string>
<string name="unarchived">Cartão desarquivado</string>
<string name="failedLaunchingPhotoPicker">Não foi encontrada nenhuma aplicação de galeria de imagens</string>
<string name="previousCard">Anterior</string>
<plurals name="groupCardCountWithArchived">
<item quantity="one"><xliff:g>%1$d</xliff:g> cartão (<xliff:g id="archivedCount">%2$d</xliff:g> arquivado)</item>
<item quantity="many"><xliff:g>%1$d</xliff:g> cartões (<xliff:g id="archivedCount">%2$d</xliff:g> arquivados)</item>
<item quantity="other"><xliff:g>%1$d</xliff:g> cartões (<xliff:g id="archivedCount">%2$d</xliff:g> arquivados)</item>
</plurals>
<string name="nextCard">Próximo</string>
<string name="failedToOpenUrl">Instale primeiro um navegador de Internet</string>
<string name="welcome">Bem-vindo ao Catima</string>
<string name="updateBalanceTitle">Quanto gastou ou recebeu?</string>
<string name="importCards">Importar cartões</string>
<string name="updateBalanceHint">Introduza o valor</string>
<string name="currentBalanceSentence">Saldo atual: <xliff:g>%s</xliff:g></string>
<string name="newBalanceSentence">Novo saldo: <xliff:g>%s</xliff:g></string>
<string name="validFromDate">Válido desde</string>
<string name="anyDate">Qualquer data</string>
<string name="chooseValidFromDate">Escolha uma data desde válida</string>
<string name="validFromSentence">Válido desde: <xliff:g>%s</xliff:g></string>
<string name="height">Altura:</string>
<string name="switchToFrontImage">Mudar para imagem frontal</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 a imagem frontal na aplicação da galeria</string>
<string name="openBackImageInGalleryApp">Abrir a imagem traseira na aplicação da galeria</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 o icone</string>
<string name="show_name_below_image_thumbnail">Mostrar nome abaixo da miniatura do ícone</string>
<string name="show_note">Mostrar nota</string>
<string name="show_balance">Mostrar saldo</string>
<string name="show_validity">Mostrar validade</string>
<string name="settings_category_title_cards_overview">Resumo dos cartões</string>
<string name="settings_column_count_portrait">Colunas no modo vertical</string>
<string name="settings_column_count_landscape">Colunas no modo horizontal</string>
<string name="settings_automatic_column_count">Automático</string>
<string name="settings_column_count_7">7</string>
<string name="settings_category_title_general">Geral</string>
<string name="settings_category_title_privacy">Privacidade</string>
<string name="action_display_options">Opções de visualização</string>
<string name="show_archived_cards">Mostrar cartões arquivados</string>
<string name="view_online">Ver online</string>
<string name="action_more_options">Mais opções</string>
<string name="addWithoutBarcode">Adicione um cartão sem código de barras</string>
<string name="enter_card_id">Digite o número ID ou o texto no seu cartão</string>
<string name="card_id_must_not_be_empty">O ID do cartão não pode estar vazio</string>
<string name="add_a_card_in_a_different_way">Adicione um cartão de uma forma diferente</string>
<string name="field_must_not_be_empty">O campo não pode estar vazio</string>
<string name="manually_enter_barcode_instructions">Digite o número ID ou o texto no seu cartão e pressione o código de barras que se parece com o que está no seu cartão.</string>
<string name="add_manually_warning_title">Recomenda-se a digitalização</string>
<string name="add_manually_warning_message">Em algumas lojas, o valor do código de barras é diferente do número escrito no cartão. Por este motivo, a introdução manual de um código de barras pode nem sempre funcionar. Recomenda-se vivamente que, em vez disso, digitalize o código de barras com a sua câmara. Ainda quer continuar?</string>
<string name="continue_">Continuar</string>
<string name="spend">Gastar</string>
<string name="receive">Receber</string>
<string name="amountParsingFailed">Montante inválido</string>
<string name="addFromPdfFile">Selecionar um ficheiro PDF</string>
<string name="errorReadingFile">Não foi possível ler o ficheiro</string>
<string name="failedLaunchingFileManager">Não foi possível encontrar um gestor de ficheiros suportado</string>
<string name="multipleBarcodesFoundPleaseChooseOne">Qual dos códigos de barras encontrados pretende utilizar?</string>
<string name="pageWithNumber">Página <xliff:g>%d</xliff:g></string>
<string name="noCameraFoundGuideText">O seu dispositivo não parece ter uma câmara. Se tiver, tente reiniciar o dispositivo. Caso contrário, utilize o botão \"Mais opções\" abaixo para adicionar um código de barras de outra maneira.</string>
<string name="importCancelled">Importação cancelada</string>
<string name="exportCancelled">Exportação cancelada</string>
<string name="useFrontImage">Utilizar imagem frontal</string>
<string name="useBackImage">Utilizar imagem do verso</string>
<string name="addFromPkpass">Selecionar um ficheiro Passbook (.pkpass)</string>
<string name="unsupportedFile">Este ficheiro não é suportado</string>
<string name="generic_error_please_retry">Lamento, ocorreu um erro, tente novamente...</string>
</resources>

View File

@@ -9,7 +9,7 @@
<string name="action_add">Adăugați</string>
<string name="action_search">Căutare</string>
<string name="sendLabel">Trimiteți…</string>
<string name="share">Împărtășiți</string>
<string name="share">Partajați</string>
<string name="deleteConfirmation">Să șterg definitiv acest card\?</string>
<string name="deleteTitle">Ștergeți cardul</string>
<string name="confirm">Confirmați</string>
@@ -25,7 +25,7 @@
<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">Acel card nu a putut fi găsit</string>
<string name="noCardExistsError">Cardul nu a putut fi găsit</string>
<string name="failedParsingImportUriError">Nu s-a putut analiza URI-ul de import</string>
<string name="importExport">Importă/Exportă</string>
<string name="exportName">Exportați</string>
@@ -38,7 +38,7 @@
<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="importOptionApplicationTitle">Utilizați o altă aplicație</string>
<string name="starImage">Steaua prefera</string>
<string name="starImage">Stea de preferin</string>
<string name="settings">Setări</string>
<string name="intent_import_card_from_url_share_text">Vreau să împărtășesc o carte cu tine</string>
<string name="moveUp">Mutarea în sus</string>
@@ -49,8 +49,8 @@
<string name="about">Despre</string>
<string name="app_license">Software liber cu copyleft, licențiat GPLv3+</string>
<string name="settings_system_theme">Sistemul</string>
<string name="settings_light_theme">Lumină</string>
<string name="settings_dark_theme">Întuneric</string>
<string name="settings_light_theme">Luminos</string>
<string name="settings_dark_theme">Întunecat</string>
<string name="noBarcodeFound">Nu a fost găsit niciun cod de bare</string>
<string name="settings_display_barcode_max_brightness">Iluminare ecran</string>
<string name="settings_keep_screen_on">Păstrați ecranul pornit</string>
@@ -71,15 +71,15 @@
<string name="addFromImage">Selectați o imagine din galerie</string>
<string name="never">Niciodată</string>
<string name="groups">Grupuri</string>
<string name="leaveWithoutSaveConfirmation">Să pleci fără să salvezi\?</string>
<string name="leaveWithoutSaveConfirmation">Ieșiți fără să salvați?</string>
<string name="expiryDate">Data expirării</string>
<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="scanCardBarcode">Scanați codul de bare</string>
<string name="importExportHelp">Copierea de rezervă a datelor vă permite să le mutați pe un alt dispozitiv.</string>
<string name="exportSuccessfulTitle">Exportată</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="importOptionApplicationButton">Utilizați o altă aplicație</string>
@@ -87,7 +87,7 @@
<string name="enter_group_name">Introduceți numele grupului</string>
<string name="yes">Da</string>
<string name="no">Nu</string>
<string name="archive">Arhivați</string>
<string name="archive">Arhivare</string>
<string name="passwordRequired">Vă rugăm, 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>
@@ -97,17 +97,17 @@
<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>
<string name="translate_platform">pe Weblate</string>
<string name="card_id_must_not_be_empty">Identificatorul cardului nu poate fi liber</string>
<string name="card_id_must_not_be_empty">Identificatorul cardului nu poate fi gol</string>
<string name="duplicateCard">Duplicare</string>
<string name="balanceParsingFailed">Sold invalid</string>
<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 fă în aplicația galerie</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>
<string name="sort_by_expiry">Expirație</string>
<string name="sort_by_expiry">Expirare</string>
<string name="add_a_card_in_a_different_way">Adăugați un card într-o altă modalitate</string>
<string name="settings_portrait_orientation">Portret</string>
<string name="takePhoto">Faceți o poză</string>
@@ -119,7 +119,7 @@
<string name="group_edit">Editați Grup</string>
<string name="debug_version_fmt">Versiune: <xliff:g id="version">%s</xliff:g></string>
<string name="show_validity">Afișați validitatea</string>
<string name="backImageDescription">Imagine spate</string>
<string name="backImageDescription">Imagine din spate</string>
<string name="view_online">Vizualizați online</string>
<string name="noCameraPermissionDirectToSystemSetting">Pentru a scana codurile de bare, Catima necesită acces la cameră. Apăsați aici pentru a schimba setările permisiunilor dvs.</string>
<string name="settings_lock_on_opening_orientation">Blocați orientația folosită când deschideți cardul</string>
@@ -128,22 +128,21 @@
<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 imaginile pot vi deschise în aplicația galerie</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 apăsați codul de bare care arată ca și cel de pe cardul dumneavoastră.</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>
<string name="switchToBarcode">Schimbați la codul de bare</string>
<string name="switchToBarcode">Comutați la codul de bare</string>
<string name="importFidme">Importați din FidMe</string>
<string name="settings_disable_lockscreen_while_viewing_card_summary">Dezactivează blocarea ecranului când vizualizați un card</string>
<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-l prin apăsarea butonului Export în Voucher Vault mai întâi.</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="chooseImportType">Importați date din</string>
<string name="frontImageDescription">Imagine fă</string>
<string name="frontImageDescription">Imagine frontală</string>
<string name="showMoreInfo">Afișați informații</string>
<string name="failedToOpenUrl">Instalați un browser web mai întâi</string>
<string name="failedToOpenUrl">Mai întâi instalați un browser web</string>
<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>
@@ -156,7 +155,7 @@
<string name="enter_card_id">Introduceți numărul de identificare sau textul de pe cardul dumneavoastră</string>
<string name="unarchived">Card dezarhivat</string>
<string name="chooseValidFromDate">Alegeți data de început</string>
<string name="action_display_options">Opțiuni afisare</string>
<string name="action_display_options">Opțiuni afișare</string>
<string name="settings_display_barcode_max_brightness_summary">Necesar pentru ca unele scanere să funcționeze</string>
<plurals name="deleteCardsTitle">
<item quantity="one">Șterge <xliff:g>%d</xliff:g> card</item>
@@ -164,7 +163,7 @@
<item quantity="other">Ștergere <xliff:g>%d</xliff:g> carduri</item>
</plurals>
<string name="settings_oled_dark_summary">Reduce utilizarea bateriei pe ecrane OLED</string>
<string name="group_name_is_empty">Numele grupului nu poate fi liber</string>
<string name="group_name_is_empty">Numele grupului nu poate fi gol</string>
<string name="importCards">Importați carduri</string>
<string name="icon_header_click_text">Apăsați lung pentru a edita miniatura</string>
<string name="settings_category_title_cards">Afișare carduri</string>
@@ -172,21 +171,21 @@
<string name="ok">OK</string>
<string name="unarchive">Dezarhivare</string>
<string name="addWithoutBarcode">Adăugați un card fără cod de bare</string>
<string name="sort_by">Sortați în</string>
<string name="sort_by">Sortați după</string>
<string name="on_google_play">pe Google Play</string>
<string name="turn_flashlight_off">Opriți lanterna</string>
<string name="show_note">Afișați notița</string>
<string name="report_error">Raportați o eroare</string>
<string name="switchToBackImage">Schimbați la imaginea spate</string>
<string name="settings_follow_system_orientation">Urmare sistem</string>
<string name="switchToBackImage">Comutați către imaginea din spate</string>
<string name="settings_follow_system_orientation">Urmează setările sistemului</string>
<string name="reverse">...în ordine inversă</string>
<string name="settings_brown_theme">Maro</string>
<string name="app_contributors">Făcut posibil de: <xliff:g id="app_contributors">%s</xliff:g></string>
<string name="app_copyright_short">Drepturi de autor © Sylvia van Os și contribuabilii</string>
<string name="settings_oled_dark">Fundal pur negru pentru tema închisă</string>
<string name="app_copyright_short">Drepturi de autor © Sylvia van Os și contribuitorii</string>
<string name="settings_oled_dark">Fundal pur negru pentru tema întunecată</string>
<string name="starred">Favorite</string>
<string name="field_must_not_be_empty">Câmpul nu poate fi liber</string>
<string name="switchToFrontImage">Schimbați la imaginea fă</string>
<string name="field_must_not_be_empty">Câmpul nu poate fi gol</string>
<string name="switchToFrontImage">Comutați către imaginea frontală</string>
<string name="validFromSentence">Valid de la data de: <xliff:g>%s</xliff:g></string>
<string name="settings_catima_theme">Catima</string>
<string name="previousCard">Precedent</string>
@@ -199,17 +198,16 @@
<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">La fel cu identificatorul</string>
<string name="sameAsCardId">Acelașil cu identificatorul</string>
<string name="options">Opțiuni</string>
<string name="settings_magenta_theme">Magenta</string>
<string name="failedGeneratingShareURL">Nu s-a putut genera un URL partajabil. Vă rugăm raportați asta.</string>
<string name="failedGeneratingShareURL">Nu s-a putut genera un URL partajabil. Vă rugăm raportați aceasta eroare.</string>
<string name="selectColor">Selectați o culoare</string>
<string name="setBarcodeHeight">Setați înălțimea codului de bare</string>
<string name="settings_landscape_orientation">Orizontal</string>
<string name="privacy_policy">Politica de Confidențialitate</string>
<string name="importStocardMessage">Selectați exportul dvs. <i>***.zip</i> din Stocard pentru a-l importa.
\nLuați-l prin e-mail către support@stocardapp.com cerând un export al datelor dumneavoastră.</string>
<string name="openBackImageInGalleryApp">Deschideți imaginea spate în aplicația galerie</string>
<string name="importStocardMessage">Selectați exportul dvs. <i>***.zip</i> din Stocard pentru a-l importa.\nGenerați întâi fișierul solicitând prin e-mail către support@stocardapp.com un export al datelor dumneavoastră.</string>
<string name="openBackImageInGalleryApp">Deschideți imaginea din spate în aplicația galerie</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>
@@ -219,12 +217,11 @@
<string name="settings_locale">Limbă</string>
<string name="sort_by_name">Nume</string>
<string name="setFrontImage">Setați imaginea din față</string>
<string name="settings_sky_blue_theme">Albastru cer</string>
<string name="cameraPermissionRequired">Permisiunea pentru a accesa camera este necesară pentru această acțiune</string>
<string name="settings_sky_blue_theme">Albastru ca cerul</string>
<string name="cameraPermissionRequired">Pentru această acțiune este necesară permisiunea de acces la camera </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 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-l din meniul Import/Export în Loyalty Card Keychain prin apăsarea butonului Export acolo mai întâi.</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="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>
@@ -232,7 +229,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">Permisiunea pentru a citi stocarea este necesară pentru această acțiune</string>
<string name="storageReadPermissionRequired">Pentru această acțiune este necesară permisiunea de citire a mediului de stocare </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>
@@ -242,15 +239,15 @@
<string name="archived">Card arhivat</string>
<string name="failedToRetrieveImageFile">Nu s-a putut recupera fișierul imaginii</string>
<string name="donate">Donați</string>
<string name="group_name_already_in_use">Numele grupului este deja în uz</string>
<string name="settings_violet_theme">Violet</string>
<string name="group_name_already_in_use">Acest nume de grup este deja utilizat</string>
<string name="settings_violet_theme">Mov</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="settings_card_orientation">Orientare ecran</string>
<string name="app_libraries">Biblioteci terță deschise: <xliff:g id="app_libraries_list">%s</xliff:g></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="updateBalanceTitle">Cât de mult ați cheltuit sau primit?</string>
<string name="settings_blue_theme">Albastru</string>
<string name="app_resources">Resurse terță deschise: <xliff:g id="app_resources_list">%s</xliff:g></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_name">Catima</string>
<string name="shortcutSelectCard">Selectați un card</string>
<string name="accept">Acceptă</string>
@@ -268,36 +265,49 @@
<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-l din meniul Import/Export al unei alte aplicații Catima apăsând Export acolo mai întâi.</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>
<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 selectați tipurile de cod de bare manual după.
\nCreați-l din profilul dvs. FidMe prin alegerea Protecție Date și apoi apăsând Extrageți datele mele prima dată.</string>
<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="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">Contribuabili</string>
<string name="credits">Contribuitori</string>
<string name="settings_follow_sensor_orientation">Rotește întotdeauna (ignora setările de sistem)</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="spend">Cheltuie</string>
<string name="receive">Primește</string>
<string name="amountParsingFailed">Sumă nevalidă</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="failedLaunchingFileManager">Nu s-a găsit un manager de fișiere suportat</string>
<string name="multipleBarcodesFoundPleaseChooseOne">Pe care dintre codurile de bare găsite dorești să-l folosești?</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>
<string name="noCameraFoundGuideText">Dispozitivul dvs. nu pare să aibă o cameră foto/video. Daca are, încercați să vă reporniți dispozitivul. Altfel, folosiți butonul cu opțiunea \'Mai multe\' de mai jos pentru a adăuga un cod de bare prin altă modalitate.</string>
<string name="noCameraFoundGuideText">Dispozitivul dvs. nu pare să aibă o cameră foto/video. Daca are, încercați să vă reporniți dispozitivul. Alternativ, folosiți butonul cu opțiunea \'Mai multe\' de mai jos pentru a adăuga un cod de bare prin altă metodă.</string>
<string name="importCancelled">Importare anulată</string>
<string name="exportCancelled">Exportare anulată</string>
<string name="useBackImage">Utilizează imaginea din spate</string>
<string name="useFrontImage">Utilizează imaginea din față</string>
<string name="useFrontImage">Utilizează imaginea frontală</string>
<string name="settings_use_volume_keys_navigation">Schimbă cardurile folosind butoanele de volum</string>
<string name="settings_use_volume_keys_navigation_summary">Folosiți butoanele de volum pentru a schimba ce card este afișat</string>
</resources>
<string name="settings_automatic_column_count">Automat</string>
<string name="settings_column_count_1">1</string>
<string name="settings_column_count_2">2</string>
<string name="settings_column_count_3">3</string>
<string name="settings_column_count_4">4</string>
<string name="settings_column_count_5">5</string>
<string name="settings_column_count_6">6</string>
<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="settings_column_count_portrait">Coloane in mod portret</string>
<string name="addFromPkpass">Selectează un fișier de tip Passbook (.pkpass)</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>
</resources>

View File

@@ -34,9 +34,9 @@
<string name="exportFailed">Невозможно выполнить экспорт</string>
<string name="importing">Импорт…</string>
<string name="exporting">Экспорт…</string>
<string name="exportOptionExplanation">Данные будут записаны в выбранное место.</string>
<string name="importOptionFilesystemTitle">Импорт из файловой системы</string>
<string name="importOptionFilesystemExplanation">Выберете файл на файловой системе.</string>
<string name="exportOptionExplanation">Данные будут сохранены в выбранное место.</string>
<string name="importOptionFilesystemTitle">Импорт из файла</string>
<string name="importOptionFilesystemExplanation">Выберете файл в файловой системе.</string>
<string name="importOptionFilesystemButton">Выбрать файл</string>
<string name="importOptionApplicationTitle">Использование другого приложения</string>
<string name="importOptionApplicationExplanation">Используйте любое приложение или ваш любимый файловый менеджер, чтобы открыть файл.</string>
@@ -87,7 +87,7 @@
<string name="editBarcode">Изменить штрих-код</string>
<string name="card">Карта</string>
<string name="groupsList">Группы: <xliff:g>%s</xliff:g></string>
<string name="moveDown">Переместить ниже</string>
<string name="moveDown">Перейти вниз</string>
<string name="moveUp">Переместить выше</string>
<string name="settings_disable_lockscreen_while_viewing_card">Не давать блокировать экран</string>
<string name="settings_keep_screen_on">Не отключать экран</string>
@@ -294,7 +294,7 @@
<string name="spend">Потрачено</string>
<string name="receive">Получено</string>
<string name="amountParsingFailed">Недопустимая сумма</string>
<string name="addFromPdfFile">Выберите PDF-файл</string>
<string name="addFromPdfFile">Выбрать файл PDF</string>
<string name="errorReadingFile">Невозможно прочитать файл</string>
<string name="pageWithNumber">Страница <xliff:g>%d</xliff:g></string>
<string name="failedLaunchingFileManager">Не найден поддерживаемый файловый менеджер</string>
@@ -306,4 +306,19 @@
<string name="useBackImage">Использовать заднюю сторону</string>
<string name="settings_use_volume_keys_navigation_summary">Использовать кнопки регулировки громкости для смены отображаемой карты</string>
<string name="settings_use_volume_keys_navigation">Переключать карты кнопками громкости</string>
</resources>
<string name="settings_column_count_portrait">Столбцы в портретном режиме</string>
<string name="settings_column_count_3">3</string>
<string name="settings_column_count_7">7</string>
<string name="settings_category_title_cards_overview">Список карт</string>
<string name="settings_column_count_landscape">Столбцы в альбомном режиме</string>
<string name="settings_automatic_column_count">Автовыбор</string>
<string name="settings_column_count_1">1</string>
<string name="settings_column_count_2">2</string>
<string name="settings_column_count_4">4</string>
<string name="settings_column_count_5">5</string>
<string name="settings_column_count_6">6</string>
<string name="unsupportedFile">Данный файл не поддерживается</string>
<string name="addFromPkpass">Выбрать файл Passbook (.pkpass)</string>
<string name="generic_error_please_retry">Извините, что-то пошло не так, попробуйте ещё раз…</string>
<string name="sort_by_valid_from">Начало действия</string>
</resources>

View File

@@ -1,6 +1,6 @@
<?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="settings_display_barcode_max_brightness">Gör streckkodsvyn ljusare</string>
<string name="settings_display_barcode_max_brightness">Gör skärmen ljusare</string>
<string name="settings_keep_screen_on">Håll skärmen påslagen</string>
<string name="importFidmeMessage">Välj den exporterade <i>fidme-export-request-xxxxxx.zip</i> från FidMe som du vill importera och välj streckkodstyper manuellt efteråt.
\nSkapa den från din FidMe-profil först genom att välja \"Data Protection\" och sen trycka på \"Extract my data\".</string>
@@ -276,4 +276,31 @@
<string name="field_must_not_be_empty">Obligatoriskt fält</string>
<string name="app_name">Catima</string>
<string name="settings_follow_sensor_orientation">Rotera automatiskt (ignorerar systeminställningar)</string>
<string name="continue_">Fortsätt</string>
<string name="settings_column_count_5">5</string>
<string name="settings_column_count_6">6</string>
<string name="settings_automatic_column_count">Automatiskt</string>
<string name="settings_column_count_1">1</string>
<string name="settings_column_count_2">2</string>
<string name="settings_column_count_3">3</string>
<string name="settings_column_count_4">4</string>
<string name="settings_column_count_7">7</string>
<string name="add_manually_warning_title">Skanning rekommenderas</string>
<string name="noCameraFoundGuideText">Din enhet verkar inte ha en kamera. Om den har det, prova att starta om enheten. Annars, använd knappen Fler alternativ nedan för att lägga till en streckkod på ett annat sätt.</string>
<string name="importCancelled">Importeringen avbröts</string>
<string name="exportCancelled">Exporteringen avbröts</string>
<string name="addFromPdfFile">Välj en PDF-fil</string>
<string name="errorReadingFile">Kunde inte läsa filen</string>
<string name="failedLaunchingFileManager">Kunde inte hitta en filhanterare som stöds</string>
<string name="spend">Spendera</string>
<string name="receive">Ta emot</string>
<string name="amountParsingFailed">Ogiltig summa</string>
<string name="settings_use_volume_keys_navigation">Byt kort genom att använda volymknapparna</string>
<string name="settings_use_volume_keys_navigation_summary">Använd volymknapparna för att byta vilket kort som visas</string>
<string name="settings_column_count_portrait">Kolumner i porträttläge</string>
<string name="settings_column_count_landscape">Kolumner i landskapsläge</string>
<string name="pageWithNumber">Sida <xliff:g>%d</xliff:g></string>
<string name="useFrontImage">Använd bilden på framsidan</string>
<string name="useBackImage">Använd bilden på baksidan</string>
<string name="multipleBarcodesFoundPleaseChooseOne">Vilka av de hittade streckkoderna vill du använda?</string>
</resources>

View File

@@ -0,0 +1,306 @@
<?xml version="1.0" encoding="utf-8"?>
<resources xmlns:tools="http://schemas.android.com/tools" xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
<string name="app_name">கேடிமா</string>
<string name="action_search">தேடல்</string>
<string name="action_add">கூட்டு</string>
<plurals name="selectedCardCount">
<item quantity="one"><xliff:g>%d</xliff:g> தேர்ந்தெடுக்கப்பட்டது</item>
<item quantity="other"><xliff:g>%d</xliff:g> தேர்ந்தெடுக்கப்பட்டன</item>
</plurals>
<string name="noGiftCards">ஒரு அட்டையைச் சேர்க்க + பிளச் பொத்தானைக் சொடுக்கு செய்க அல்லது ⋮ மெனுவிலிருந்து இறக்குமதி செய்யுங்கள்.</string>
<string name="noGiftCardsGroup">சில அட்டைகளை உருவாக்கி, பின்னர் அவற்றை இங்கே குழுவிற்கு ஒதுக்குங்கள்.</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="delete">நீக்கு</string>
<string name="confirm">உறுதிப்படுத்தவும்</string>
<string name="deleteConfirmation">இந்த அட்டையை நிரந்தரமாக நீக்கவா?</string>
<string name="ok">சரி</string>
<string name="share">பங்கு</string>
<string name="sendLabel">அனுப்பு…</string>
<string name="editCardTitle">அட்டையைத் திருத்து</string>
<string name="addCardTitle">அட்டை சேர்க்கவும்</string>
<string name="scanCardBarcode">ச்கேன் பார்கோடு</string>
<string name="cardShortcut">அட்டை குறுக்குவழி</string>
<string name="noCardExistsError">அந்த அட்டையை கண்டுபிடிக்க முடியவில்லை</string>
<string name="failedParsingImportUriError">இறக்குமதி யூரியை அலச முடியவில்லை</string>
<string name="importExport">இறக்குமதி/ஏற்றுமதி</string>
<string name="exportName">ஏற்றுமதி</string>
<string name="importFailedTitle">இறக்குமதி தோல்வியடைந்தது</string>
<string name="importFailed">இறக்குமதியை செய்ய முடியவில்லை</string>
<string name="exportSuccessfulTitle">ஏற்றுமதி</string>
<string name="exportFailedTitle">ஏற்றுமதி தோல்வியடைந்தது</string>
<string name="exportFailed">ஏற்றுமதி செய்ய முடியவில்லை</string>
<string name="importing">இறக்குமதி…</string>
<string name="exporting">ஏற்றுமதி செய்கிறது…</string>
<string name="storageReadPermissionRequired">இந்த செயலுக்கு தேவையான சேமிப்பிடத்தைப் படிக்க அனுமதி…</string>
<string name="cameraPermissionRequired">இந்த செயலுக்கு தேவையான கேமராவை அணுக அனுமதி…</string>
<string name="intent_import_card_from_url_share_text">நான் உங்களுடன் ஒரு அட்டையைப் பகிர விரும்புகிறேன்</string>
<string name="importSuccessful">இறக்குமதி செய்யப்பட்ட தரவு</string>
<string name="exportSuccessful">தரவு ஏற்றுமதி செய்யப்பட்டது</string>
<string name="enter_group_name">குழு பெயரை உள்ளிடவும்</string>
<string name="groups">குழுக்கள்</string>
<string name="group_edit">குழு திருத்து</string>
<string name="group_name_already_in_use">குழு பெயர் ஏற்கனவே பயன்பாட்டில் உள்ளது</string>
<string name="group_name_is_empty">குழு பெயர் காலியாக இருக்கக்கூடாது</string>
<string name="group_updated">குழு புதுப்பிக்கப்பட்டது</string>
<string name="all">அனைத்தும்</string>
<string name="deleteConfirmationGroup">குழுவை நீக்கவா?</string>
<string name="failedOpeningFileManager">முதலில் கோப்பு மேலாளரை நிறுவவும்.</string>
<string name="leaveWithoutSaveTitle">வெளியேறு</string>
<string name="leaveWithoutSaveConfirmation">சேமிக்காமல் விடலாமா?</string>
<string name="addManually">பார்கோடு கைமுறையாக உள்ளிடவும்</string>
<string name="addFromImage">கேலரியில் இருந்து ஒரு படத்தைத் தேர்ந்தெடுக்கவும்</string>
<string name="noBarcodeFound">பார்கோடு எதுவும் கிடைக்கவில்லை</string>
<string name="errorReadingImage">படத்தைப் படிக்க முடியவில்லை</string>
<string name="balance">இருப்பு</string>
<string name="currency">நாணயம்</string>
<string name="importFidme">FIDME இலிருந்து இறக்குமதி</string>
<string name="barcodeId">பார்கோடு மதிப்பு</string>
<string name="backImageDescription">பின் படம்</string>
<string name="photos">புகைப்படங்கள்</string>
<string name="setFrontImage">முன் படத்தை அமைக்கவும்</string>
<string name="setBackImage">படத்தை அமைக்கவும்</string>
<string name="removeImage">படத்தை அகற்று</string>
<string name="takePhoto">புகைப்படம் எடுக்கவும்</string>
<string name="settings_oled_dark_summary">OLED காட்சிகளில் பேட்டரி பயன்பாட்டைக் குறைக்கிறது</string>
<string name="settings_system_locale">மண்டலம்</string>
<string name="selectColor">வண்ணத்தைத் தேர்ந்தெடுக்கவும்</string>
<string name="setIcon">சிறு உருவத்தை அமைக்கவும்</string>
<string name="settings_blue_theme">நீலம்</string>
<string name="settings_green_theme">பச்சை</string>
<string name="sort">வரிசைப்படுத்து</string>
<string name="showMoreInfo">தகவலைக் காட்டு</string>
<string name="nextCard">அடுத்தது</string>
<string name="settings_column_count_4">4</string>
<string name="settings_column_count_5">5</string>
<string name="settings_column_count_6">6</string>
<string name="settings_column_count_7">7</string>
<string name="spend">செலவு</string>
<string name="unsupportedFile">இந்த கோப்பு ஆதரிக்கப்படவில்லை</string>
<string name="generic_error_please_retry">மன்னிக்கவும், ஏதோ தவறு நடந்தது, தயவுசெய்து மீண்டும் முயற்சிக்கவும் ...</string>
<string name="noMatchingGiftCards">முடிவுகள் இல்லை. உங்கள் தேடலை மாற்ற முயற்சிக்கவும்.</string>
<string name="edit">தொகு</string>
<string name="deleteTitle">அட்டையை நீக்கு</string>
<string name="unstar">பிடித்தவைகளிலிருந்து அகற்று</string>
<string name="cancel">ரத்துசெய்</string>
<string name="save">சேமி</string>
<string name="noCardsMessage">முதலில் ஒரு அட்டையைச் சேர்க்கவும்</string>
<string name="importExportHelp">உங்கள் தரவை காப்புப் பிரதி எடுப்பது அதை மற்றொரு சாதனத்திற்கு நகர்த்த அனுமதிக்கிறது.</string>
<string name="importSuccessfulTitle">இறக்குமதி செய்யப்பட்டது</string>
<string name="permissionReadCardsLabel">கேடிமா அட்டைகளைப் படியுங்கள்</string>
<string name="permissionReadCardsDescription">உங்கள் கேடிமா அட்டைகள் மற்றும் குறிப்புகள் மற்றும் படங்கள் உட்பட அதன் அனைத்து விவரங்களையும் படியுங்கள்</string>
<string name="exportOptionExplanation">தரவு உங்கள் விருப்பப்படி இடத்திற்கு எழுதப்படும்.</string>
<string name="importOptionFilesystemTitle">கோப்பு முறைமையிலிருந்து இறக்குமதி</string>
<string name="importOptionFilesystemExplanation">கோப்பு முறைமையிலிருந்து ஒரு குறிப்பிட்ட கோப்பைத் தேர்வுசெய்க.</string>
<string name="importOptionFilesystemButton">கோப்பு முறைமையிலிருந்து</string>
<string name="cameraPermissionDeniedTitle">கேமராவை அணுக முடியவில்லை</string>
<string name="noCameraPermissionDirectToSystemSetting">பார்கோடுகளை ச்கேன் செய்ய, கேடிமாவுக்கு உங்கள் கேமராவுக்கு அணுகல் தேவைப்படும். உங்கள் இசைவு அமைப்புகளை மாற்ற இங்கே தட்டவும்.</string>
<string name="importOptionApplicationTitle">மற்றொரு பயன்பாட்டைப் பயன்படுத்தவும்</string>
<string name="importOptionApplicationExplanation">கோப்பைத் திறக்க எந்த பயன்பாடு அல்லது உங்களுக்கு பிடித்த கோப்பு மேலாளரைப் பயன்படுத்தவும்.</string>
<string name="about">பற்றி</string>
<string name="importOptionApplicationButton">மற்றொரு பயன்பாட்டைப் பயன்படுத்தவும்</string>
<string name="app_copyright_short">பதிப்புரிமை © சில்வியா வான் ஓஎச் மற்றும் பங்களிப்பாளர்கள்</string>
<string name="app_copyright_old">விசுவாச அட்டை கீச்சின் அடிப்படையில்\n பதிப்புரிமை © 20162020 பிராண்டன் ஆர்ச்சர்</string>
<string name="app_license">நகலெடுக்கப்பட்ட லிப்ரே மென்பொருள், உரிமம் பெற்ற GPLV3+</string>
<string name="selectBarcodeTitle">பார்கோடு தேர்ந்தெடுக்கவும்</string>
<string name="thumbnailDescription">சிறுபடம்</string>
<string name="starImage">பிடித்த விண்மீன்</string>
<string name="settings">அமைப்புகள்</string>
<string name="settings_theme">கருப்பொருள்</string>
<string name="settings_system_theme">மண்டலம்</string>
<string name="settings_light_theme">ஒளி</string>
<string name="settings_dark_theme">இருண்ட</string>
<string name="settings_card_orientation">திரை நோக்குநிலை</string>
<string name="settings_follow_system_orientation">அமைப்பைப் பின்தொடரவும்</string>
<string name="settings_keep_screen_on">திரையை தொடர்ந்து வைத்திருங்கள்</string>
<string name="settings_follow_sensor_orientation">எப்போதும் சுழற்றுங்கள் (கணினி அமைப்புகளை புறக்கணிக்கிறது)</string>
<string name="settings_keep_screen_on_summary">ஒரு அட்டையைப் பார்க்கும்போது திரை நேரத்தை முடக்குகிறது</string>
<string name="settings_portrait_orientation">உருவப்படம்</string>
<string name="settings_landscape_orientation">நிலப்பரப்பு</string>
<string name="settings_lock_on_opening_orientation">அட்டையைத் திறக்கும்போது பயன்படுத்தப்படும் நோக்குநிலைக்கு பூட்டு</string>
<string name="settings_display_barcode_max_brightness">திரை ஒளி</string>
<string name="settings_display_barcode_max_brightness_summary">சில ச்கேனர்கள் வேலை செய்ய தேவை</string>
<string name="settings_disable_lockscreen_while_viewing_card">திரை பூட்டைத் தடுக்கவும்</string>
<string name="settings_allow_content_provider_read_title">எனது தரவை அணுக மற்ற பயன்பாடுகளை அனுமதிக்கவும்</string>
<string name="settings_allow_content_provider_read_summary">பயன்பாடுகள் இன்னும் அணுகல் வழங்க இசைவு கோர வேண்டும்</string>
<string name="settings_use_volume_keys_navigation">தொகுதி பொத்தான்களைப் பயன்படுத்தி அட்டைகளை மாற்றவும்</string>
<string name="settings_disable_lockscreen_while_viewing_card_summary">அட்டையைப் பார்க்கும்போது திரை லாக் முடக்குகிறது</string>
<string name="noGroups">வகைப்படுத்தலுக்கான குழுக்களைச் சேர்க்க + பிளச் பொத்தானைக் சொடுக்கு செய்க.</string>
<string name="settings_use_volume_keys_navigation_summary">எந்த அட்டை காட்டப்படும் என்பதை மாற்ற தொகுதி பொத்தான்களைப் பயன்படுத்தவும்</string>
<string name="noGroupCards">இந்த குழு காலியாக உள்ளது</string>
<string name="moveUp">மேல்நோக்கி நகர்த்தவும்</string>
<string name="moveDown">கீழ்நோக்கி நகர்த்தவும்</string>
<string name="card">அட்டை</string>
<string name="editBarcode">பார்கோடு திருத்து</string>
<string name="expiryDate">காலாவதி தேதி</string>
<string name="never">ஒருபோதும்</string>
<string name="chooseExpiryDate">காலாவதி தேதியைத் தேர்வுசெய்க</string>
<string name="moveBarcodeToTopOfScreen">பார்கோடு திரையின் மேற்பகுதிக்கு நகர்த்தவும்</string>
<string name="points">பிரிவகம்</string>
<string name="balanceParsingFailed">தவறான இருப்பு</string>
<string name="chooseImportType">இருந்து தரவை இறக்குமதி செய்யுங்கள்</string>
<string name="app_loyalty_card_keychain">விசுவாச அட்டை கீச்சின்</string>
<string name="privacy_policy">தனியுரிமைக் கொள்கை</string>
<string name="accept">ஏற்றுக்கொள்</string>
<string name="importCatima">கேடிமாவிலிருந்து இறக்குமதி</string>
<string name="importCatimaMessage">உங்கள் <i> catima.zip </i> இறக்குமதி செய்ய கேடிமாவிலிருந்து ஏற்றுமதி செய்யுங்கள்.\n முதலில் அங்கு ஏற்றுமதியை அழுத்துவதன் மூலம் மற்றொரு கேடிமா பயன்பாட்டின் இறக்குமதி/ஏற்றுமதி மெனுவிலிருந்து அதை உருவாக்கவும்.</string>
<string name="importLoyaltyCardKeychain">விசுவாச அட்டை கீச்சினிலிருந்து இறக்குமதி செய்யுங்கள்</string>
<string name="importFidmeMessage">உங்கள் <i> fidme-export-request-xxxxxx.zip </i> இறக்குமதி செய்ய FIDME இலிருந்து ஏற்றுமதி செய்து, பின்னர் பார்கோடு வகைகளை கைமுறையாகத் தேர்ந்தெடுக்கவும்.\n தரவு பாதுகாப்பைத் தேர்ந்தெடுப்பதன் மூலம் உங்கள் FIDME சுயவிவரத்திலிருந்து அதை உருவாக்கவும், பின்னர் எனது தரவைப் பிரித்தெடுக்கவும் அழுத்தவும்.</string>
<string name="importStocardMessage">உங்கள் <i> ***. சிப் </i> இறக்குமதி செய்ய ஏற்றுமதி.\n உங்கள் தரவை ஏற்றுமதி செய்யக் கேட்கும் support@stocardapp.com என்ற மின்னஞ்சல் மூலம் அதைப் பெறுங்கள்.</string>
<string name="importVoucherVault">வவுச்சர் பெட்டகத்திலிருந்து இறக்குமதி</string>
<string name="importStocard">ச்டார்ட் இருந்து இறக்குமதி</string>
<string name="sameAsCardId">ஐடி அதே</string>
<string name="setBarcodeId">பார்கோடு மதிப்பை அமைக்கவும்</string>
<string name="unsupportedBarcodeType">இந்த பார்கோடு வகையை இன்னும் காட்ட முடியாது. பயன்பாட்டின் பின்னர் பதிப்பில் இது ஆதரிக்கப்படலாம்.</string>
<string name="wrongValueForBarcodeType">தேர்ந்தெடுக்கப்பட்ட பார்கோடு வகைக்கு மதிப்பு செல்லுபடியாகாது</string>
<string name="intent_import_card_from_url_share_multiple_text">சில அட்டைகளை உங்களுடன் பகிர்ந்து கொள்ள விரும்புகிறேன்</string>
<string name="importVoucherVaultMessage">உங்கள் <i> vouchervault.json </i> வவுச்சர் பெட்டகத்திலிருந்து இறக்குமதி செய்ய ஏற்றுமதி என்பதைத் தேர்ந்தெடுக்கவும்.\n முதலில் வவுச்சர் வால்ட்டில் ஏற்றுமதியை அழுத்துவதன் மூலம் அதை உருவாக்கவும்.</string>
<string name="frontImageDescription">முன் படம்</string>
<string name="updateBarcodeQuestionTitle">பார்கோடு மதிப்பைப் புதுப்பிக்கவா?</string>
<string name="updateBarcodeQuestionText">நீங்கள் ஐடியை மாற்றினீர்கள். அதே மதிப்பைப் பயன்படுத்த பார்கோடு புதுப்பிக்க விரும்புகிறீர்களா?</string>
<string name="yes">ஆம்</string>
<string name="no">இல்லை</string>
<string name="passwordRequired">கடவுச்சொல்லை உள்ளிடவும்</string>
<string name="exportPassword">உங்கள் ஏற்றுமதியைப் பாதுகாக்க கடவுச்சொல்லை அமைக்கவும் (விரும்பினால்)</string>
<string name="exportPasswordHint">கடவுச்சொல்லை உள்ளிடவும்</string>
<string name="failedGeneratingShareURL">பகிரக்கூடிய முகவரி ஐ உருவாக்க முடியவில்லை. இதை புகாரளிக்கவும்.</string>
<string name="turn_flashlight_on">ஒளிரும் விளக்கை இயக்கவும்</string>
<string name="turn_flashlight_off">ஒளிரும் விளக்கை அணைக்கவும்</string>
<string name="settings_locale">மொழி</string>
<string name="settings_oled_dark">இருண்ட கருப்பொருளுக்கு தூய கருப்பு பின்னணி</string>
<string name="settings_theme_color">கருப்பொருள் நிறம்</string>
<string name="settings_catima_theme">கேடிமா</string>
<string name="settings_pink_theme">இளஞ்சிவப்பு</string>
<string name="settings_magenta_theme">மெசந்தா</string>
<string name="settings_violet_theme">கத்தரி</string>
<string name="settings_sky_blue_theme">வானம் நீலம்</string>
<string name="sort_by_name">பெயர்</string>
<string name="sort_by_most_recently_used">மிக அண்மைக் காலத்தில் பயன்படுத்தப்பட்டது</string>
<string name="sort_by_expiry">காலாவதியாகும்</string>
<string name="reverse">… தலைகீழ் வரிசையில்</string>
<string name="settings_brown_theme">பழுப்பு</string>
<string name="updateBalance">இருப்பு புதுப்பிக்கவும்</string>
<string name="failedToRetrieveImageFile">படக் கோப்பை மீட்டெடுப்பதில் தோல்வி</string>
<string name="sort_by">வரிசைப்படுத்தவும்</string>
<string name="barcodeLongPressMessage">கேலரி பயன்பாட்டில் படங்களை மட்டுமே திறக்க முடியும்</string>
<string name="version_history">பதிப்பு வரலாறு</string>
<string name="credits">வரவு</string>
<string name="on_google_play">கூகிள் பிளேயில்</string>
<string name="help_translate_this_app">இந்த பயன்பாட்டை மொழிபெயர்க்க உதவுங்கள்</string>
<string name="license">உரிமம்</string>
<string name="source_repository">மூல களஞ்சியம்</string>
<string name="on_github">கிட்அப்பில்</string>
<string name="and_data_usage">மற்றும் தரவு பயன்பாடு</string>
<string name="rate_this_app">இந்த பயன்பாட்டை மதிப்பிடுங்கள்</string>
<string name="report_error">பிழையைப் புகாரளிக்கவும்</string>
<string name="translate_platform">வெப்லேட்டில்</string>
<string name="shortcutSelectCard">ஒரு அட்டையைத் தேர்ந்தெடுக்கவும்</string>
<string name="duplicateCard">நகல்</string>
<string name="archive">காப்பகம்</string>
<string name="options">விருப்பங்கள்</string>
<string name="starred">நடித்தார்</string>
<string name="include_if_asking_support">நீங்கள் ஆதரவைக் கோர விரும்பினால், பின்வரும் தகவலைச் சேர்க்கவும்:</string>
<string name="unarchive">அன்கான்</string>
<string name="archived">அட்டை காப்பகப்படுத்தப்பட்டது</string>
<string name="unarchived">அட்டை பதிக்கப்படாதது</string>
<string name="failedLaunchingPhotoPicker">உதவி கேலரி பயன்பாட்டைக் கண்டுபிடிக்க முடியவில்லை</string>
<string name="previousCard">முந்தைய</string>
<string name="failedToOpenUrl">முதலில் ஒரு வலை உலாவியை நிறுவவும்</string>
<string name="welcome">கேடிமாவுக்கு வருக</string>
<string name="importCards">அட்டைகளை இறக்குமதி செய்யுங்கள்</string>
<string name="updateBalanceTitle">நீங்கள் எவ்வளவு செலவு செய்தீர்கள் அல்லது பெற்றீர்கள்?</string>
<string name="updateBalanceHint">தொகையை உள்ளிடவும்</string>
<string name="validFromDate">இருந்து செல்லுபடியாகும்</string>
<string name="anyDate">எந்த தேதி</string>
<string name="chooseValidFromDate">தேதியிலிருந்து செல்லுபடியாகும் என்பதைத் தேர்வுசெய்க</string>
<string name="height">உயரம்:</string>
<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>
<string name="show_name_below_image_thumbnail">பட சிறுபடத்திற்கு கீழே உள்ள பெயரைக் காட்டு</string>
<string name="show_note">குறிப்பைக் காட்டு</string>
<string name="show_balance">சமநிலையைக் காட்டு</string>
<string name="show_validity">செல்லுபடியைக் காட்டு</string>
<string name="settings_category_title_cards">அட்டை பார்வை</string>
<string name="settings_category_title_cards_overview">அட்டைகள் கண்ணோட்டம்</string>
<string name="settings_column_count_portrait">உருவப்படம் பயன்முறையில் நெடுவரிசைகள்</string>
<string name="settings_column_count_landscape">நிலப்பரப்பு பயன்முறையில் நெடுவரிசைகள்</string>
<string name="settings_automatic_column_count">தானியங்கி</string>
<string name="settings_column_count_1">1</string>
<string name="settings_column_count_2">2</string>
<string name="settings_column_count_3">3</string>
<string name="settings_category_title_general">பொது</string>
<string name="settings_category_title_privacy">தனியுரிமை</string>
<string name="show_archived_cards">காப்பகப்படுத்தப்பட்ட அட்டைகளைக் காட்டு</string>
<string name="view_online">ஆன்லைனில் காண்க</string>
<string name="action_more_options">மேலும் விருப்பங்கள்</string>
<string name="addWithoutBarcode">பார்கோடு இல்லாத அட்டையைச் சேர்க்கவும்</string>
<string name="action_display_options">காட்சி விருப்பங்கள்</string>
<string name="enter_card_id">உங்கள் அட்டையில் அடையாள எண் அல்லது உரையை உள்ளிடவும்</string>
<string name="card_id_must_not_be_empty">அட்டை ஐடி காலியாக இருக்கக்கூடாது</string>
<string name="add_a_card_in_a_different_way">ஒரு அட்டையை வேறு வழியில் சேர்க்கவும்</string>
<string name="field_must_not_be_empty">புலம் காலியாக இருக்கக்கூடாது</string>
<string name="manually_enter_barcode_instructions">உங்கள் அட்டையில் அடையாள எண் அல்லது உரையை உள்ளிட்டு, உங்கள் அட்டையில் உள்ளதைப் போல தோற்றமளிக்கும் பார்கோடு அழுத்தவும்.</string>
<string name="add_manually_warning_title">ச்கேனிங் பரிந்துரைக்கப்படுகிறது</string>
<string name="continue_">தொடரவும்</string>
<string name="receive">பெறுங்கள்</string>
<string name="amountParsingFailed">தவறான தொகை</string>
<string name="add_manually_warning_message">சில கடைகளுக்கு, பார்கோடு மதிப்பு அட்டையில் எழுதப்பட்ட எண்ணிலிருந்து வேறுபடுகிறது. இதன் காரணமாக, ஒரு பார்கோடு கைமுறையாக நுழைவது எப்போதும் வேலை செய்யாது. அதற்கு பதிலாக உங்கள் கேமராவுடன் பார்கோடு ச்கேன் செய்ய கடுமையாக பரிந்துரைக்கப்படுகிறது. நீங்கள் இன்னும் தொடர விரும்புகிறீர்களா?</string>
<string name="addFromPdfFile">PDF கோப்பைத் தேர்ந்தெடுக்கவும்</string>
<string name="errorReadingFile">கோப்பைப் படிக்க முடியவில்லை</string>
<string name="failedLaunchingFileManager">உதவி கோப்பு மேலாளரைக் கண்டுபிடிக்க முடியவில்லை</string>
<string name="multipleBarcodesFoundPleaseChooseOne">கண்டுபிடிக்கப்பட்ட பார்கோடுகளில் எது நீங்கள் பயன்படுத்த விரும்புகிறீர்கள்?</string>
<string name="noCameraFoundGuideText">உங்கள் சாதனத்தில் கேமரா இருப்பதாகத் தெரியவில்லை. அவ்வாறு செய்தால், சாதனத்தை மறுதொடக்கம் செய்ய முயற்சிக்கவும். இல்லையெனில், பார்கோடு மற்றொரு வழியில் சேர்க்க கீழே உள்ள கூடுதல் விருப்பங்கள் பொத்தானைப் பயன்படுத்தவும்.</string>
<string name="importCancelled">இறக்குமதி ரத்து செய்யப்பட்டது</string>
<string name="exportCancelled">ஏற்றுமதி ரத்து செய்யப்பட்டது</string>
<string name="useBackImage">பின் படத்தைப் பயன்படுத்தவும்</string>
<string name="addFromPkpass">பாச் புக் கோப்பைத் தேர்ந்தெடுக்கவும் (.pkpass)</string>
<string name="useFrontImage">முன் படத்தைப் பயன்படுத்தவும்</string>
<plurals name="deleteCardsTitle">
<item quantity="one"><xliff:g>%d</xliff:g> அட்டை நீக்கு</item>
<item quantity="other"><xliff:g>%d</xliff:g> அட்டைகளை நீக்கு</item>
</plurals>
<plurals name="deleteCardsConfirmation">
<item quantity="one">இந்த <xliff:g>%d</xliff:g> அட்டையை நிரந்தரமாக நீக்கவா?</item>
<item quantity="other">இந்த <xliff:g>%d</xliff:g> அட்டைகளை நிரந்தரமாக நீக்கவா?</item>
</plurals>
<string name="editGroup">திருத்துதல் குழு: <xliff:g>%s</xliff:g></string>
<string name="debug_version_fmt">பதிப்பு: <xliff:g id="version">%s</xliff:g></string>
<plurals name="groupCardCount">
<item quantity="one"><xliff:g>%d</xliff:g> அட்டை</item>
<item quantity="other"><xliff:g>%d</xliff:g> அட்டைகள்</item>
</plurals>
<string name="expiryStateSentenceExpired">காலாவதியானது: <xliff:g>%s</xliff:g></string>
<plurals name="balancePoints">
<item quantity="one"><xliff:g>%s</xliff:g> புள்ளி</item>
<item quantity="other"><xliff:g>%s</xliff:g> புள்ளிகள்</item>
</plurals>
<string name="importLoyaltyCardKeychainMessage">இறக்குமதி செய்ய உங்கள் <i>LoyaltyCardKeychain.csv</i> விசுவாச அட்டை சாவிக்கொத்திலிருந்து ஏற்றுமதி செய். \nமுதலில் அங்கு ஏற்றுமதியை அழுத்துவதன் மூலம் விசுவாச அட்டை சாவிக்கொத்தில் இறக்குமதி/ஏற்றுமதி பட்டியலிலிருந்து அதை உருவாக்கு.</string>
<string name="validFromSentence">இதிலிருந்து செல்லுபடியாகும்: <xliff:g>%s</xliff:g></string>
<string name="newBalanceSentence">புதிய இருப்பு: <xliff:g>%s</xliff:g></string>
<string name="pageWithNumber">பக்கம் <xliff:g>%d</xliff:g></string>
<string name="currentBalanceSentence">தற்போதைய இருப்பு: <xliff:g>%s</xliff:g></string>
<string name="app_contributors">வழங்கியவர்: <xliff:g id="app_contributors">%s</xliff:g></string>
<string name="about_title_fmt">படம் <xliff:g>%s</xliff:g> பட்டைகுறியீடு</string>
<string name="barcodeImageDescriptionWithType">படம் <xliff:g>%s</xliff:g> பட்டை குறியீடு</string>
<string name="app_libraries">விடுதலை மூன்றாம் தரப்பு நூலகங்கள்: <xliff:g id="app_libraries_list">%s</xliff:g></string>
<string name="expiryStateSentence">காலாவதியாகிறது: <xliff:g>%s</xliff:g></string>
<string name="balanceSentence">இருப்பு: <xliff:g>%s</xliff:g></string>
<plurals name="groupCardCountWithArchived">
<item quantity="one"><xliff:g>%1$d</xliff:g> அட்டை (<xliff:g id="archivedCount">%2$d</xliff:g> காப்பகப்படுத்தப்பட்டது)</item>
<item quantity="other"><xliff:g>%1$d</xliff:g> அட்டைகள் (<xliff:g id="archivedCount">%2$d</xliff:g> காப்பகப்படுத்தப்பட்டது)</item>
</plurals>
<string name="app_copyright_fmt" tools:ignore="PluralsCandidate">பதிப்புரிமை © 2019<xliff:g>%d</xliff:g> சில்வியா வான் ஓஎச் மற்றும் பங்களிப்பாளர்கள்</string>
<string name="app_resources">விடுதலை மூன்றாம் தரப்பு வளங்கள்: <xliff:g id="app_resources_list">%s</xliff:g></string>
<string name="groupsList">குழுக்கள்: <xliff:g>%s</xliff:g></string>
<string name="sort_by_valid_from">இருந்து செல்லுபடியாகும்</string>
</resources>

View File

@@ -294,4 +294,19 @@
<string name="useBackImage">Arka resmi kullan</string>
<string name="settings_use_volume_keys_navigation_summary">Hangi kartın görüntüleneceğini değiştirmek için ses düğmelerini kullanın</string>
<string name="settings_use_volume_keys_navigation">Ses düğmelerini kullanarak kartları değiştir</string>
</resources>
<string name="settings_category_title_cards_overview">Kartları gözden geçir</string>
<string name="settings_column_count_4">4</string>
<string name="settings_column_count_3">3</string>
<string name="settings_column_count_2">2</string>
<string name="settings_column_count_5">5</string>
<string name="settings_column_count_landscape">Yatay alan modundaki sutunlar</string>
<string name="settings_column_count_1">1</string>
<string name="settings_column_count_6">6</string>
<string name="settings_column_count_7">7</string>
<string name="settings_automatic_column_count">Otomatik</string>
<string name="settings_column_count_portrait">Portre modundaki sutunlar</string>
<string name="unsupportedFile">Bu dosya desteklenmiyor</string>
<string name="generic_error_please_retry">Üzgünüz, bir şeyler ters gitti, lütfen tekrar deneyin...</string>
<string name="addFromPkpass">Bir Passbook dosyası seçin (.pkpass)</string>
<string name="sort_by_valid_from">İtibaren Geçerli</string>
</resources>

View File

@@ -285,7 +285,7 @@
<string name="enter_card_id">Введіть ID або текст на вашій картці</string>
<string name="addWithoutBarcode">Додати картку без штрих-коду</string>
<string name="field_must_not_be_empty">Поле вводу не повинно бути порожнім</string>
<string name="app_name">Catima</string>
<string name="app_name">Катіма</string>
<string name="settings_follow_sensor_orientation">Завжди обертати (ігнорувати системні налаштування)</string>
<string name="add_manually_warning_message">У деяких магазинах значення штрихкоду відрізняється від номера, записаного на картці. Через це введення штрихкоду вручну може не завжди спрацювати. Наполегливо рекомендуємо відсканувати штрихкод за допомогою камери. Ви все ще хочете продовжити?</string>
<string name="continue_">Продовжити</string>
@@ -305,4 +305,19 @@
<string name="useBackImage">Використати зворотне зображення</string>
<string name="settings_use_volume_keys_navigation">Перемикайте карти за допомогою кнопок гучності</string>
<string name="settings_use_volume_keys_navigation_summary">Використовуйте кнопки гучності, щоб змінити картку, яка відображається</string>
</resources>
<string name="settings_automatic_column_count">Автоматичний</string>
<string name="settings_column_count_2">2</string>
<string name="settings_column_count_5">5</string>
<string name="settings_column_count_3">3</string>
<string name="settings_column_count_4">4</string>
<string name="settings_column_count_6">6</string>
<string name="settings_column_count_7">7</string>
<string name="settings_category_title_cards_overview">Огляд карток</string>
<string name="settings_column_count_portrait">Стовпці в портретному режимі</string>
<string name="settings_column_count_landscape">Стовпці в ландшафтному режимі</string>
<string name="settings_column_count_1">1</string>
<string name="unsupportedFile">Цей файл не підтримується</string>
<string name="generic_error_please_retry">Вибачте, щось пішло не так, спробуйте ще раз...</string>
<string name="addFromPkpass">Виберіть файл Passbook (.pkpass)</string>
<string name="sort_by_valid_from">Діє з</string>
</resources>

View File

@@ -70,7 +70,7 @@
<string name="settings_system_theme">Hệ thống</string>
<string name="failedToOpenUrl">Trước tiên, hãy cài đặt trình duyệt web</string>
<string name="setBackImage">Đặt ảnh mặt sau</string>
<string name="settings_display_barcode_max_brightness">Tăng sáng cho chế độ xem mã vạch</string>
<string name="settings_display_barcode_max_brightness">Tăng sáng màn hình</string>
<string name="chooseExpiryDate">Chọn ngày hết hạn</string>
<string name="permissionReadCardsDescription">đọc thẻ Catima của bạn và mọi thông tin trong đó, bao gồm cả ghi chú và ảnh</string>
<string name="anyDate">Bất cứ ngày nào</string>
@@ -101,7 +101,7 @@
<string name="importCards">Nhập thẻ</string>
<string name="icon_header_click_text">Nhấn đè để sửa ảnh con</string>
<string name="importFailedTitle">Nhập dữ liệu hỏng</string>
<string name="settings_category_title_cards">Thẻ</string>
<string name="settings_category_title_cards">Xem thẻ</string>
<string name="setBarcodeId">Đặt giá trị mã vạch</string>
<string name="ok">Đồng ý</string>
<string name="unarchive">Bỏ lưu trữ</string>
@@ -219,7 +219,7 @@
<string name="show_archived_cards">Hiện thẻ lưu trữ</string>
<string name="selectBarcodeTitle">Chọn Mã Vạch</string>
<string name="importSuccessful">Nhập dữ liệu xong</string>
<string name="settings_card_orientation">Hướng đặt mã vạch</string>
<string name="settings_card_orientation">Hướng màn hình</string>
<string name="app_libraries">Thư viện mở từ bên thứ 3: <xliff:g id="app_libraries_list">%s</xliff:g></string>
<string name="updateBalanceTitle">Bạn đã chi tiêu hoặc nhận được bao nhiêu?</string>
<string name="editCardTitle">Sửa Thẻ</string>
@@ -286,4 +286,17 @@
<string name="useBackImage">Sử dụng hình ảnh phía sau</string>
<string name="importCancelled">Đã huỷ nhập</string>
<string name="exportCancelled">Đã hủy xuất</string>
<string name="settings_column_count_2">2</string>
<string name="settings_use_volume_keys_navigation">Thay đổi thẻ bằng cách sử dụng phím âm lượng</string>
<string name="settings_use_volume_keys_navigation_summary">Sử dụng phím âm lượng để thay đổi thẻ được hiển thị</string>
<string name="settings_category_title_cards_overview">Tổng quan thẻ</string>
<string name="settings_column_count_portrait">Cột trong chế độ dọc</string>
<string name="settings_column_count_landscape">Cột trong chế độ ngang</string>
<string name="settings_automatic_column_count">Tự động</string>
<string name="settings_column_count_1">1</string>
<string name="settings_column_count_3">3</string>
<string name="settings_column_count_4">4</string>
<string name="settings_column_count_5">5</string>
<string name="settings_column_count_6">6</string>
<string name="settings_column_count_7">7</string>
</resources>

View File

@@ -1,4 +1,4 @@
<?xml version="1.0" encoding="utf-8"?>
<resources>
<integer name="main_view_card_columns">3</integer>
<integer name="main_view_card_columns">4</integer>
</resources>

View File

@@ -288,4 +288,19 @@
<string name="useBackImage">使用背面图</string>
<string name="settings_use_volume_keys_navigation">用音量按钮切换卡片</string>
<string name="settings_use_volume_keys_navigation_summary">是用音量按钮改变展示的卡片</string>
</resources>
<string name="settings_category_title_cards_overview">卡片概览</string>
<string name="settings_column_count_2">2</string>
<string name="settings_automatic_column_count">自动</string>
<string name="settings_column_count_5">5</string>
<string name="settings_column_count_portrait">竖屏模式下的列数</string>
<string name="settings_column_count_1">1</string>
<string name="settings_column_count_3">3</string>
<string name="settings_column_count_4">4</string>
<string name="settings_column_count_7">7</string>
<string name="settings_column_count_6">6</string>
<string name="settings_column_count_landscape">横屏模式下的列数</string>
<string name="addFromPkpass">选择 Passbook 文件(.pkpass</string>
<string name="unsupportedFile">此文件不受支持</string>
<string name="generic_error_please_retry">抱歉,某个东西出错了,请再试…</string>
<string name="sort_by_valid_from">有效期开始日</string>
</resources>

View File

@@ -287,4 +287,19 @@
<string name="useBackImage">使用背面圖片</string>
<string name="settings_use_volume_keys_navigation_summary">使用音量按鈕來切換顯示的卡片</string>
<string name="settings_use_volume_keys_navigation">使用音量按鈕切換卡片</string>
</resources>
<string name="settings_column_count_5">5</string>
<string name="settings_column_count_6">6</string>
<string name="settings_column_count_7">7</string>
<string name="settings_automatic_column_count">自動</string>
<string name="settings_column_count_1">1</string>
<string name="settings_column_count_2">2</string>
<string name="settings_column_count_3">3</string>
<string name="settings_column_count_4">4</string>
<string name="settings_category_title_cards_overview">卡片概覽</string>
<string name="settings_column_count_portrait">縱向模式下的列數</string>
<string name="settings_column_count_landscape">横向模式下的列數</string>
<string name="addFromPkpass">選擇 Passbook 檔案 (.pkpass)</string>
<string name="unsupportedFile">不支援此檔案</string>
<string name="generic_error_please_retry">抱歉,似乎出了點錯誤,請您再試一次...</string>
<string name="sort_by_valid_from">有效期限開始日</string>
</resources>

View File

@@ -11,6 +11,7 @@
<string-array name="sort_types_array">
<item>@string/sort_by_name</item>
<item>@string/sort_by_most_recently_used</item>
<item>@string/sort_by_valid_from</item>
<item>@string/sort_by_expiry</item>
</string-array>
</resources>

View File

@@ -36,6 +36,40 @@
<item>@string/settings_brown_theme</item>
</string-array>
<string-array name="column_count_portrait_values">
<item>@string/settings_key_automatic_column_count</item>
<item>1</item>
<item>2</item>
<item>3</item>
<item>4</item>
</string-array>
<string-array name="column_count_portrait_value_strings">
<item>@string/settings_automatic_column_count</item>
<item>@string/settings_column_count_1</item>
<item>@string/settings_column_count_2</item>
<item>@string/settings_column_count_3</item>
<item>@string/settings_column_count_4</item>
</string-array>
<string-array name="column_count_landscape_values">
<item>@string/settings_key_automatic_column_count</item>
<item>3</item>
<item>4</item>
<item>5</item>
<item>6</item>
<item>7</item>
</string-array>
<string-array name="column_count_landscape_value_strings">
<item>@string/settings_automatic_column_count</item>
<item>@string/settings_column_count_3</item>
<item>@string/settings_column_count_4</item>
<item>@string/settings_column_count_5</item>
<item>@string/settings_column_count_6</item>
<item>@string/settings_column_count_7</item>
</string-array>
<string-array name="color_values_no_dynamic">
<item>@string/settings_key_system_theme</item>
<item>@string/settings_key_pink_theme</item>
@@ -86,6 +120,7 @@
<item>fi</item>
<!-- <item>fil</item> -->
<item>fr</item>
<item>gl</item>
<item>he-rIL</item>
<item>hi</item>
<item>hr</item>
@@ -105,6 +140,7 @@
<item>nl</item>
<item>oc</item>
<item>pl</item>
<item>pt</item>
<item>pt-rBR</item>
<item>pt-rPT</item>
<item>ro-rRO</item>
@@ -113,6 +149,7 @@
<item>sl</item>
<item>sr</item>
<item>sv</item>
<item>ta</item>
<!-- <item>ti</item> -->
<item>tr</item>
<item>uk</item>

View File

@@ -255,6 +255,7 @@
<string name="barcodeLongPressMessage">Only images can be opened in the gallery app</string>
<string name="sort_by_name">Name</string>
<string name="sort_by_most_recently_used">Most Recently Used</string>
<string name="sort_by_valid_from">Valid From</string>
<string name="sort_by_expiry">Expiry</string>
<!-- \"Reversed order\" is also OK. This is an option in the card sorting list -->
<string name="reverse">…in reversed order</string>
@@ -318,6 +319,20 @@
<string name="sharedpreference_card_details_show_validity" translatable="false">sharedpreference_card_details_show_validity</string>
<string name="sharedpreference_card_details_show_archived_cards" translatable="false">sharedpreference_card_details_show_archived_cards</string>
<string name="settings_category_title_cards">Card view</string>
<string name="settings_category_title_cards_overview">Cards overview</string>
<string name="settings_column_count_portrait">Columns in portrait mode</string>
<string name="settings_column_count_landscape">Columns in landscape mode</string>
<string name="settings_automatic_column_count">Automatic</string>
<string name="settings_key_automatic_column_count" translatable="false">default</string>
<string name="settings_column_count_1">1</string>
<string name="settings_column_count_2">2</string>
<string name="settings_column_count_3">3</string>
<string name="settings_column_count_4">4</string>
<string name="settings_column_count_5">5</string>
<string name="settings_column_count_6">6</string>
<string name="settings_column_count_7">7</string>
<string name="setting_key_column_count_portrait" translatable="false">pref_column_count_portrait</string>
<string name="setting_key_column_count_landscape" translatable="false">pref_column_count_landscape</string>
<string name="settings_category_title_general">General</string>
<string name="settings_category_title_privacy">Privacy</string>
<string name="action_display_options">Display options</string>
@@ -346,4 +361,7 @@
<string name="exportCancelled">Export cancelled</string>
<string name="useFrontImage">Use front image</string>
<string name="useBackImage">Use back image</string>
<string name="addFromPkpass">Select a Passbook file (.pkpass)</string>
<string name="unsupportedFile">This file is not supported</string>
<string name="generic_error_please_retry">Sorry, something went wrong, please try again...</string>
</resources>

View File

@@ -31,7 +31,6 @@
<item name="alertDialogTheme">@style/ThemeOverlay.App.MaterialAlertDialog.Monet</item>
<item name="windowActionModeOverlay">true</item>
</style>
<style name="ThemeOverlay.App.MaterialAlertDialog.Monet" parent="ThemeOverlay.Material3.MaterialAlertDialog">

View File

@@ -16,6 +16,7 @@
<locale android:name="et" />
<locale android:name="fi" />
<locale android:name="fr" />
<locale android:name="gl" />
<locale android:name="he-IL" />
<locale android:name="hi" />
<locale android:name="hr" />
@@ -31,6 +32,7 @@
<locale android:name="nl" />
<locale android:name="oc" />
<locale android:name="pl" />
<locale android:name="pt" />
<locale android:name="pt-BR" />
<locale android:name="pt-PT" />
<locale android:name="ro-RO" />
@@ -39,6 +41,7 @@
<locale android:name="sl" />
<locale android:name="sr" />
<locale android:name="sv" />
<locale android:name="ta" />
<locale android:name="tr" />
<locale android:name="uk" />
<locale android:name="vi" />

View File

@@ -46,6 +46,31 @@
app:useSimpleSummaryProvider="true" />
</PreferenceCategory>
<PreferenceCategory
android:title="@string/settings_category_title_cards_overview"
app:iconSpaceReserved="false">
<ListPreference
android:key="@string/setting_key_column_count_portrait"
android:title="@string/settings_column_count_portrait"
android:defaultValue="@string/settings_key_automatic_column_count"
android:entries="@array/column_count_portrait_value_strings"
android:entryValues="@array/column_count_portrait_values"
app:iconSpaceReserved="false"
app:singleLineTitle="false"
app:useSimpleSummaryProvider="true" />
<ListPreference
android:key="@string/setting_key_column_count_landscape"
android:title="@string/settings_column_count_landscape"
android:defaultValue="@string/settings_key_automatic_column_count"
android:entries="@array/column_count_landscape_value_strings"
android:entryValues="@array/column_count_landscape_values"
app:iconSpaceReserved="false"
app:singleLineTitle="false"
app:useSimpleSummaryProvider="true" />
</PreferenceCategory>
<PreferenceCategory
android:title="@string/settings_category_title_cards"
app:iconSpaceReserved="false">
@@ -112,4 +137,4 @@
</PreferenceCategory>
</PreferenceScreen>
</PreferenceScreen>

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