Compare commits

..

258 Commits

Author SHA1 Message Date
Sylvia van Os
469ed374ad Release Catima 2.31.0 2024-07-26 18:13:40 +02:00
Sylvia van Os
d952f194be Merge pull request #2014 from weblate/weblate-catima-catima
Translations update from Hosted Weblate
2024-07-25 18:38:43 +02:00
大王叫我来巡山
ccbf4afd44 Translated using Weblate (Chinese (Simplified))
Currently translated at 100.0% (135 of 135 strings)

Translation: Catima/Android (Fastlane)
Translate-URL: https://hosted.weblate.org/projects/catima/fastlane/zh_Hans/
2024-07-25 02:09:51 +00:00
solokot
2b1a950204 Translated using Weblate (Russian)
Currently translated at 100.0% (135 of 135 strings)

Translation: Catima/Android (Fastlane)
Translate-URL: https://hosted.weblate.org/projects/catima/fastlane/ru/
2024-07-25 02:09:50 +00:00
Sylvia van Os
e930ee8efd Merge pull request #2013 from weblate/weblate-catima-catima
Translations update from Hosted Weblate
2024-07-24 19:42:31 +02:00
gallegonovato
d469e50985 Translated using Weblate (Spanish)
Currently translated at 48.8% (66 of 135 strings)

Translation: Catima/Android (Fastlane)
Translate-URL: https://hosted.weblate.org/projects/catima/fastlane/es/
2024-07-24 03:28:16 +02:00
Sylvia van Os
39ba630479 Merge pull request #2012 from weblate/weblate-catima-catima
Translations update from Hosted Weblate
2024-07-23 18:18:13 +02:00
Francisco (F4VSE)
074f84818d Translated using Weblate (Portuguese (Portugal))
Currently translated at 100.0% (317 of 317 strings)

Translation: Catima/Android
Translate-URL: https://hosted.weblate.org/projects/catima/catima/pt_PT/
2024-07-23 14:10:02 +00:00
Francisco (F4VSE)
dd645a761d Translated using Weblate (Portuguese (Portugal))
Currently translated at 100.0% (135 of 135 strings)

Translation: Catima/Android (Fastlane)
Translate-URL: https://hosted.weblate.org/projects/catima/fastlane/pt_PT/
2024-07-23 14:10:01 +00:00
grgergo
a12125e26d Translated using Weblate (Hungarian)
Currently translated at 99.3% (315 of 317 strings)

Translation: Catima/Android
Translate-URL: https://hosted.weblate.org/projects/catima/catima/hu/
2024-07-23 14:10:00 +00:00
Sylvia van Os
67e82c5d8f Translated using Weblate (Dutch)
Currently translated at 53.3% (72 of 135 strings)

Translation: Catima/Android (Fastlane)
Translate-URL: https://hosted.weblate.org/projects/catima/fastlane/nl/
2024-07-23 14:10:00 +00:00
Francisco (F4VSE)
52b30cf988 Translated using Weblate (French)
Currently translated at 100.0% (135 of 135 strings)

Translation: Catima/Android (Fastlane)
Translate-URL: https://hosted.weblate.org/projects/catima/fastlane/fr/
2024-07-23 14:09:59 +00:00
Monika
ccfdc5f3b5 Translated using Weblate (Polish)
Currently translated at 99.3% (315 of 317 strings)

Translation: Catima/Android
Translate-URL: https://hosted.weblate.org/projects/catima/catima/pl/
2024-07-23 14:09:59 +00:00
Francisco (F4VSE)
339d002529 Translated using Weblate (French)
Currently translated at 100.0% (317 of 317 strings)

Translation: Catima/Android
Translate-URL: https://hosted.weblate.org/projects/catima/catima/fr/
2024-07-23 14:09:58 +00:00
Sylvia van Os
5afe0bdc59 Merge pull request #2011 from CatimaLoyalty/create-pull-request/patch-1721672428
Update Fastlane changelogs
2024-07-22 20:22:34 +02:00
TheLastProject
59d3a74206 Update Fastlane changelogs 2024-07-22 18:20:28 +00:00
Sylvia van Os
58d3d29fbe Merge pull request #2010 from CatimaLoyalty/fix/1971
Fix chip contrast in dark mode
2024-07-22 20:20:13 +02:00
Sylvia van Os
c340544886 Fix chip contrast in dark mode 2024-07-22 19:47:01 +02:00
Sylvia van Os
c137e6178a Merge pull request #2009 from weblate/weblate-catima-catima
Translations update from Hosted Weblate
2024-07-22 19:21:45 +02:00
arbadacarba
98f1fd42f6 Translated using Weblate (Dutch)
Currently translated at 53.3% (72 of 135 strings)

Translation: Catima/Android (Fastlane)
Translate-URL: https://hosted.weblate.org/projects/catima/fastlane/nl/
2024-07-22 13:09:52 +00:00
Sylvia van Os
f344a3b125 Translated using Weblate (Dutch)
Currently translated at 100.0% (317 of 317 strings)

Translation: Catima/Android
Translate-URL: https://hosted.weblate.org/projects/catima/catima/nl/
2024-07-22 13:09:28 +00:00
Giovanni Donisi
24bdffdce8 Translated using Weblate (Italian)
Currently translated at 100.0% (317 of 317 strings)

Translation: Catima/Android
Translate-URL: https://hosted.weblate.org/projects/catima/catima/it/
2024-07-22 13:09:28 +00:00
Sylvia van Os
853f4aabfc Translated using Weblate (German)
Currently translated at 100.0% (317 of 317 strings)

Translation: Catima/Android
Translate-URL: https://hosted.weblate.org/projects/catima/catima/de/
2024-07-22 13:09:27 +00:00
Sylvia van Os
439cd870e5 Translated using Weblate (German)
Currently translated at 95.5% (129 of 135 strings)

Translation: Catima/Android (Fastlane)
Translate-URL: https://hosted.weblate.org/projects/catima/fastlane/de/
2024-07-21 14:43:29 +02:00
arbadacarba
ab47a769ea Translated using Weblate (Dutch)
Currently translated at 100.0% (317 of 317 strings)

Translation: Catima/Android
Translate-URL: https://hosted.weblate.org/projects/catima/catima/nl/
2024-07-21 14:43:27 +02:00
SaMuTa
b73b6584c2 Translated using Weblate (Arabic)
Currently translated at 100.0% (317 of 317 strings)

Translation: Catima/Android
Translate-URL: https://hosted.weblate.org/projects/catima/catima/ar/
2024-07-21 10:09:57 +00:00
gallegonovato
06f4fb29b4 Translated using Weblate (Spanish)
Currently translated at 48.1% (65 of 135 strings)

Translation: Catima/Android (Fastlane)
Translate-URL: https://hosted.weblate.org/projects/catima/fastlane/es/
2024-07-21 10:09:56 +00:00
arbadacarba
3d19acd434 Translated using Weblate (German)
Currently translated at 95.5% (129 of 135 strings)

Translation: Catima/Android (Fastlane)
Translate-URL: https://hosted.weblate.org/projects/catima/fastlane/de/
2024-07-21 10:09:55 +00:00
arbadacarba
40dd882857 Translated using Weblate (German)
Currently translated at 100.0% (317 of 317 strings)

Translation: Catima/Android
Translate-URL: https://hosted.weblate.org/projects/catima/catima/de/
2024-07-21 10:09:55 +00:00
Sylvia van Os
029f49078e Merge pull request #2007 from CatimaLoyalty/create-pull-request/patch-1721535313
Update contributors
2024-07-21 09:48:37 +02:00
TheLastProject
d5f19877f2 Update contributors 2024-07-21 04:15:12 +00:00
Sylvia van Os
9679b0746b Merge pull request #2006 from weblate/weblate-catima-catima
Translations update from Hosted Weblate
2024-07-20 13:58:23 +02:00
Scrambled777
55209cbca5 Translated using Weblate (Hindi)
Currently translated at 100.0% (135 of 135 strings)

Translation: Catima/Android (Fastlane)
Translate-URL: https://hosted.weblate.org/projects/catima/fastlane/hi/
2024-07-20 08:09:40 +02:00
Scrambled777
63d7ea9b06 Translated using Weblate (Hindi)
Currently translated at 100.0% (317 of 317 strings)

Translation: Catima/Android
Translate-URL: https://hosted.weblate.org/projects/catima/catima/hi/
2024-07-20 08:09:39 +02:00
Sylvia van Os
1062d9a302 Merge pull request #2005 from weblate/weblate-catima-catima
Translations update from Hosted Weblate
2024-07-19 17:08:20 +02:00
André Nunes
30b2243d1e Translated using Weblate (Portuguese (Portugal))
Currently translated at 99.3% (315 of 317 strings)

Translation: Catima/Android
Translate-URL: https://hosted.weblate.org/projects/catima/catima/pt_PT/
2024-07-18 13:10:11 +00:00
大王叫我来巡山
9f755c2939 Translated using Weblate (Chinese (Simplified))
Currently translated at 100.0% (135 of 135 strings)

Translation: Catima/Android (Fastlane)
Translate-URL: https://hosted.weblate.org/projects/catima/fastlane/zh_Hans/
2024-07-18 13:10:10 +00:00
IllusiveMan196
375f6d9117 Translated using Weblate (Ukrainian)
Currently translated at 100.0% (135 of 135 strings)

Translation: Catima/Android (Fastlane)
Translate-URL: https://hosted.weblate.org/projects/catima/fastlane/uk/
2024-07-18 13:10:10 +00:00
solokot
1e3b6f197d Translated using Weblate (Russian)
Currently translated at 100.0% (135 of 135 strings)

Translation: Catima/Android (Fastlane)
Translate-URL: https://hosted.weblate.org/projects/catima/fastlane/ru/
2024-07-18 13:10:09 +00:00
IllusiveMan196
9cf21f9d75 Translated using Weblate (Ukrainian)
Currently translated at 100.0% (317 of 317 strings)

Translation: Catima/Android
Translate-URL: https://hosted.weblate.org/projects/catima/catima/uk/
2024-07-18 13:10:09 +00:00
Fqwe1
033168cc8d Translated using Weblate (Ukrainian)
Currently translated at 100.0% (317 of 317 strings)

Translation: Catima/Android
Translate-URL: https://hosted.weblate.org/projects/catima/catima/uk/
2024-07-18 13:10:08 +00:00
Sylvia van Os
e698240a91 Merge pull request #2003 from CatimaLoyalty/create-pull-request/patch-1721230720
Update locales
2024-07-17 18:51:03 +02:00
TheLastProject
83df2a3262 Update locales 2024-07-17 15:38:40 +00:00
Sylvia van Os
9dce540451 Merge pull request #2002 from weblate/weblate-catima-catima
Translations update from Hosted Weblate
2024-07-17 17:38:27 +02:00
Lugi
b8f683a335 Translated using Weblate (Serbian)
Currently translated at 100.0% (317 of 317 strings)

Translation: Catima/Android
Translate-URL: https://hosted.weblate.org/projects/catima/catima/sr/
2024-07-17 14:27:16 +02:00
Lugi
9781d9bbd9 Translated using Weblate (Serbian)
Currently translated at 93.3% (296 of 317 strings)

Translation: Catima/Android
Translate-URL: https://hosted.weblate.org/projects/catima/catima/sr/
2024-07-17 14:09:44 +02:00
Lugi
43f81c5368 Translated using Weblate (Serbian)
Currently translated at 93.0% (295 of 317 strings)

Translation: Catima/Android
Translate-URL: https://hosted.weblate.org/projects/catima/catima/sr/
2024-07-17 14:09:43 +02:00
Zero
c702d1523c Translated using Weblate (Czech)
Currently translated at 98.5% (133 of 135 strings)

Translation: Catima/Android (Fastlane)
Translate-URL: https://hosted.weblate.org/projects/catima/fastlane/cs/
2024-07-17 14:09:42 +02:00
solokot
4def250361 Translated using Weblate (Russian)
Currently translated at 100.0% (317 of 317 strings)

Translation: Catima/Android
Translate-URL: https://hosted.weblate.org/projects/catima/catima/ru/
2024-07-17 14:09:41 +02:00
Zero
c34455db3c Translated using Weblate (Czech)
Currently translated at 100.0% (317 of 317 strings)

Translation: Catima/Android
Translate-URL: https://hosted.weblate.org/projects/catima/catima/cs/
2024-07-17 14:09:40 +02:00
Sylvia van Os
e252d80de9 Merge pull request #2001 from CatimaLoyalty/create-pull-request/patch-1721143752
Update locales
2024-07-16 18:22:49 +02:00
TheLastProject
60cf1dbf23 Update locales 2024-07-16 15:29:12 +00:00
Sylvia van Os
5839a6b2c5 Merge pull request #2000 from weblate/weblate-catima-catima
Translations update from Hosted Weblate
2024-07-16 17:29:00 +02:00
Lugi
c0da6a3176 Added translation using Weblate (Serbian) 2024-07-16 12:01:51 +00:00
Jose Delvani
85d5316d1f Translated using Weblate (Portuguese (Brazil))
Currently translated at 100.0% (317 of 317 strings)

Translation: Catima/Android
Translate-URL: https://hosted.weblate.org/projects/catima/catima/pt_BR/
2024-07-16 12:01:51 +00:00
Oğuz Ersen
cb9493eb6e Translated using Weblate (Turkish)
Currently translated at 100.0% (317 of 317 strings)

Translation: Catima/Android
Translate-URL: https://hosted.weblate.org/projects/catima/catima/tr/
2024-07-16 12:01:50 +00:00
109247019824
cfb473df8c Translated using Weblate (Bulgarian)
Currently translated at 100.0% (317 of 317 strings)

Translation: Catima/Android
Translate-URL: https://hosted.weblate.org/projects/catima/catima/bg/
2024-07-16 12:01:50 +00:00
大王叫我来巡山
2ff395f5ef Translated using Weblate (Chinese (Simplified))
Currently translated at 100.0% (317 of 317 strings)

Translation: Catima/Android
Translate-URL: https://hosted.weblate.org/projects/catima/catima/zh_Hans/
2024-07-16 12:01:49 +00:00
Renko
73fa270fce Translated using Weblate (Romanian)
Currently translated at 100.0% (317 of 317 strings)

Translation: Catima/Android
Translate-URL: https://hosted.weblate.org/projects/catima/catima/ro/
2024-07-16 12:01:49 +00:00
gallegonovato
552d49ea7b Translated using Weblate (Spanish)
Currently translated at 100.0% (317 of 317 strings)

Translation: Catima/Android
Translate-URL: https://hosted.weblate.org/projects/catima/catima/es/
2024-07-16 12:01:48 +00:00
Sylvia van Os
f1f6dea5e7 Merge pull request #1999 from CatimaLoyalty/create-pull-request/patch-1721069315
Update Fastlane changelogs
2024-07-15 20:51:17 +02:00
TheLastProject
a677b004b3 Update Fastlane changelogs 2024-07-15 18:48:35 +00:00
Sylvia van Os
fd34f59ff9 Update CHANGELOG 2024-07-15 20:48:20 +02:00
Sylvia van Os
0c09707744 Merge pull request #1998 from weblate/weblate-catima-catima
Translations update from Hosted Weblate
2024-07-15 18:02:24 +02:00
ssantos
142da5b0b6 Translated using Weblate (Portuguese (Portugal))
Currently translated at 100.0% (135 of 135 strings)

Translation: Catima/Android (Fastlane)
Translate-URL: https://hosted.weblate.org/projects/catima/fastlane/pt_PT/
2024-07-15 14:09:49 +02:00
109247019824
80b72c1984 Translated using Weblate (Bulgarian)
Currently translated at 100.0% (315 of 315 strings)

Translation: Catima/Android
Translate-URL: https://hosted.weblate.org/projects/catima/catima/bg/
2024-07-15 14:09:49 +02:00
Sylvia van Os
e9f87684af Merge pull request #1997 from CatimaLoyalty/dependabot/github_actions/actions/setup-python-5.1.1
Bump actions/setup-python from 5.1.0 to 5.1.1
2024-07-15 08:23:08 +02:00
dependabot[bot]
5fb2f546b0 Bump actions/setup-python from 5.1.0 to 5.1.1
Bumps [actions/setup-python](https://github.com/actions/setup-python) from 5.1.0 to 5.1.1.
- [Release notes](https://github.com/actions/setup-python/releases)
- [Commits](https://github.com/actions/setup-python/compare/v5.1.0...v5.1.1)

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

Signed-off-by: dependabot[bot] <support@github.com>
2024-07-15 02:37:47 +00:00
Sylvia van Os
c234444026 Merge pull request #1996 from CatimaLoyalty/create-pull-request/patch-1720930686
Update contributors
2024-07-14 09:23:54 +02:00
TheLastProject
eda9dfaa10 Update contributors 2024-07-14 04:18:06 +00:00
Sylvia van Os
4f13827ae0 Merge pull request #1934 from CatimaLoyalty/feature/1675
Support setting front or back image as thumbnail
2024-07-13 18:17:31 +02:00
Sylvia van Os
47b076b41d Support setting front or back image as thumbnail 2024-07-13 18:15:05 +02:00
Sylvia van Os
1e40241219 Merge pull request #1995 from weblate/weblate-catima-catima
Translations update from Hosted Weblate
2024-07-13 14:17:17 +02:00
Fqwe1
796f4c918d Translated using Weblate (Ukrainian)
Currently translated at 100.0% (315 of 315 strings)

Translation: Catima/Android
Translate-URL: https://hosted.weblate.org/projects/catima/catima/uk/
2024-07-13 11:09:21 +00:00
solokot
ae6ce7f443 Translated using Weblate (Russian)
Currently translated at 100.0% (315 of 315 strings)

Translation: Catima/Android
Translate-URL: https://hosted.weblate.org/projects/catima/catima/ru/
2024-07-13 11:09:20 +00:00
Sylvia van Os
95189ce5ce Merge pull request #1994 from CatimaLoyalty/create-pull-request/patch-1720765275
Update Gradle to 8.9
2024-07-12 19:09:51 +02:00
TheLastProject
8de78406d5 Update Gradle to 8.9 2024-07-12 06:21:15 +00:00
Sylvia van Os
ea253313d5 Merge pull request #1993 from weblate/weblate-catima-catima
Translations update from Hosted Weblate
2024-07-12 07:09:46 +02:00
Sylvia van Os
c3413c4340 Merge pull request #1991 from CatimaLoyalty/dependabot/gradle/com.android.application-8.5.1
Bump com.android.application from 8.5.0 to 8.5.1
2024-07-12 07:08:34 +02:00
Leo
d22e6ca984 Translated using Weblate (French)
Currently translated at 100.0% (315 of 315 strings)

Translation: Catima/Android
Translate-URL: https://hosted.weblate.org/projects/catima/catima/fr/
2024-07-12 03:24:13 +00:00
dependabot[bot]
9b8ab86219 Bump com.android.application from 8.5.0 to 8.5.1
Bumps com.android.application from 8.5.0 to 8.5.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>
2024-07-12 02:31:50 +00:00
Sylvia van Os
8a9c603725 Merge pull request #1990 from weblate/weblate-catima-catima
Translations update from Hosted Weblate
2024-07-11 18:57:36 +02:00
ssantos
8f4da1b601 Translated using Weblate (Portuguese (Portugal))
Currently translated at 100.0% (315 of 315 strings)

Translation: Catima/Android
Translate-URL: https://hosted.weblate.org/projects/catima/catima/pt_PT/
2024-07-11 16:09:31 +00:00
yazan abu alenain
ce917be59d Translated using Weblate (Arabic)
Currently translated at 100.0% (315 of 315 strings)

Translation: Catima/Android
Translate-URL: https://hosted.weblate.org/projects/catima/catima/ar/
2024-07-11 16:09:31 +00:00
Sylvia van Os
1b1d8788df Translated using Weblate (Romanian)
Currently translated at 100.0% (315 of 315 strings)

Translation: Catima/Android
Translate-URL: https://hosted.weblate.org/projects/catima/catima/ro/
2024-07-11 16:09:30 +00:00
Jan Novotny
c126bff23c Translated using Weblate (Czech)
Currently translated at 100.0% (315 of 315 strings)

Translation: Catima/Android
Translate-URL: https://hosted.weblate.org/projects/catima/catima/cs/
2024-07-11 16:09:29 +00:00
Renko
64355e0ddc Translated using Weblate (Romanian)
Currently translated at 100.0% (315 of 315 strings)

Translation: Catima/Android
Translate-URL: https://hosted.weblate.org/projects/catima/catima/ro/
2024-07-10 16:09:23 +02:00
Diego Beraldin
510b7a0e56 Translated using Weblate (Italian)
Currently translated at 100.0% (315 of 315 strings)

Translation: Catima/Android
Translate-URL: https://hosted.weblate.org/projects/catima/catima/it/
2024-07-10 16:09:22 +02:00
Sylvia van Os
12da47d34a Merge pull request #1988 from CatimaLoyalty/dependabot/gradle/org.robolectric-robolectric-4.13
Bump org.robolectric:robolectric from 4.12.2 to 4.13
2024-07-09 08:22:23 +02:00
dependabot[bot]
3dca6c1db2 Bump org.robolectric:robolectric from 4.12.2 to 4.13
Bumps [org.robolectric:robolectric](https://github.com/robolectric/robolectric) from 4.12.2 to 4.13.
- [Release notes](https://github.com/robolectric/robolectric/releases)
- [Commits](https://github.com/robolectric/robolectric/compare/robolectric-4.12.2...robolectric-4.13)

---
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-07-09 02:05:32 +00:00
Sylvia van Os
29aec92a7a Merge pull request #1987 from weblate/weblate-catima-catima
Translations update from Hosted Weblate
2024-07-08 19:45:36 +02:00
Oğuz Ersen
c373c1f9dd Translated using Weblate (Turkish)
Currently translated at 74.0% (100 of 135 strings)

Translation: Catima/Android (Fastlane)
Translate-URL: https://hosted.weblate.org/projects/catima/fastlane/tr/
2024-07-08 19:10:35 +02:00
Sylvia van Os
cba7c77fa2 Merge pull request #1986 from weblate/weblate-catima-catima
Translations update from Hosted Weblate
2024-07-08 19:04:22 +02:00
Oğuz Ersen
80e3db0b2d Translated using Weblate (Turkish)
Currently translated at 73.3% (99 of 135 strings)

Translation: Catima/Android (Fastlane)
Translate-URL: https://hosted.weblate.org/projects/catima/fastlane/tr/
2024-07-08 18:53:38 +02:00
Jose Delvani
4452336aa0 Translated using Weblate (Portuguese (Brazil))
Currently translated at 100.0% (315 of 315 strings)

Translation: Catima/Android
Translate-URL: https://hosted.weblate.org/projects/catima/catima/pt_BR/
2024-07-08 18:53:38 +02:00
Scrambled777
d0710a16b6 Translated using Weblate (Hindi)
Currently translated at 100.0% (315 of 315 strings)

Translation: Catima/Android
Translate-URL: https://hosted.weblate.org/projects/catima/catima/hi/
2024-07-08 18:53:37 +02:00
Oğuz Ersen
38f603cc0d Translated using Weblate (Turkish)
Currently translated at 72.5% (98 of 135 strings)

Translation: Catima/Android (Fastlane)
Translate-URL: https://hosted.weblate.org/projects/catima/fastlane/tr/
2024-07-08 18:53:37 +02:00
Oğuz Ersen
5a6652c864 Translated using Weblate (Turkish)
Currently translated at 100.0% (315 of 315 strings)

Translation: Catima/Android
Translate-URL: https://hosted.weblate.org/projects/catima/catima/tr/
2024-07-08 18:53:37 +02:00
大王叫我来巡山
59ed3e3fba Translated using Weblate (Chinese (Simplified))
Currently translated at 100.0% (315 of 315 strings)

Translation: Catima/Android
Translate-URL: https://hosted.weblate.org/projects/catima/catima/zh_Hans/
2024-07-08 18:53:37 +02:00
gallegonovato
870720ad4b Translated using Weblate (Spanish)
Currently translated at 100.0% (315 of 315 strings)

Translation: Catima/Android
Translate-URL: https://hosted.weblate.org/projects/catima/catima/es/
2024-07-08 18:53:37 +02:00
Kachelkaiser
7d7d5280c5 Translated using Weblate (German)
Currently translated at 100.0% (315 of 315 strings)

Translation: Catima/Android
Translate-URL: https://hosted.weblate.org/projects/catima/catima/de/
2024-07-08 18:53:37 +02:00
Sylvia van Os
a93ee4bbff Merge pull request #1985 from CatimaLoyalty/dependabot/github_actions/actions/upload-artifact-4.3.4
Bump actions/upload-artifact from 4.3.3 to 4.3.4
2024-07-08 07:05:12 +02:00
dependabot[bot]
d9b719103a Bump actions/upload-artifact from 4.3.3 to 4.3.4
Bumps [actions/upload-artifact](https://github.com/actions/upload-artifact) from 4.3.3 to 4.3.4.
- [Release notes](https://github.com/actions/upload-artifact/releases)
- [Commits](https://github.com/actions/upload-artifact/compare/v4.3.3...v4.3.4)

---
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>
2024-07-08 02:35:21 +00:00
Sylvia van Os
c65f488536 Merge pull request #1984 from weblate/weblate-catima-catima
Translations update from Hosted Weblate
2024-07-07 23:44:55 +02:00
Scrambled777
3c11817edb Translated using Weblate (Hindi)
Currently translated at 100.0% (135 of 135 strings)

Translation: Catima/Android (Fastlane)
Translate-URL: https://hosted.weblate.org/projects/catima/fastlane/hi/
2024-07-07 21:10:32 +00:00
solokot
8a5dac9c24 Translated using Weblate (Russian)
Currently translated at 100.0% (135 of 135 strings)

Translation: Catima/Android (Fastlane)
Translate-URL: https://hosted.weblate.org/projects/catima/fastlane/ru/
2024-07-07 21:10:32 +00:00
Sylvia van Os
968729fbe6 Merge pull request #1983 from CatimaLoyalty/fix/importExportHacks
Fix/import export hacks
2024-07-07 20:00:24 +02:00
Sylvia van Os
8a8d5c65f2 Fix cancelling import/export by tapping away from dialog 2024-07-07 14:06:31 +02:00
Sylvia van Os
80e05a0392 Hack: Don't turn screen off in import/export activity to avoid background kills 2024-07-07 14:06:02 +02:00
Sylvia van Os
2374e998ee Merge pull request #1982 from CatimaLoyalty/create-pull-request/patch-1720325722
Update contributors
2024-07-07 12:09:42 +02:00
TheLastProject
48b6b83fba Update contributors 2024-07-07 04:15:22 +00:00
Sylvia van Os
6eac516d01 Merge pull request #1981 from weblate/weblate-catima-catima
Translations update from Hosted Weblate
2024-07-06 21:30:57 +02:00
大王叫我来巡山
f1d42ccc77 Translated using Weblate (Chinese (Simplified))
Currently translated at 100.0% (135 of 135 strings)

Translation: Catima/Android (Fastlane)
Translate-URL: https://hosted.weblate.org/projects/catima/fastlane/zh_Hans/
2024-07-06 20:09:33 +02:00
Renko
68ebf3243f Translated using Weblate (Romanian)
Currently translated at 3.7% (5 of 135 strings)

Translation: Catima/Android (Fastlane)
Translate-URL: https://hosted.weblate.org/projects/catima/fastlane/ro/
2024-07-06 20:09:33 +02:00
Renko
f8a93ed5f2 Translated using Weblate (Romanian)
Currently translated at 99.3% (311 of 313 strings)

Translation: Catima/Android
Translate-URL: https://hosted.weblate.org/projects/catima/catima/ro/
2024-07-06 20:09:32 +02:00
Sylvia van Os
ce14cd0447 Merge pull request #1976 from weblate/weblate-catima-catima
Translations update from Hosted Weblate
2024-07-05 17:54:24 +02:00
leccro
ee5ac2785d Translated using Weblate (Persian)
Currently translated at 15.6% (49 of 313 strings)

Translation: Catima/Android
Translate-URL: https://hosted.weblate.org/projects/catima/catima/fa/
2024-07-05 17:04:58 +02:00
Sylvia van Os
1c68bfea8d Merge pull request #1968 from CatimaLoyalty/create-pull-request/patch-1719862199
Update Fastlane changelogs
2024-07-01 21:30:24 +02:00
TheLastProject
a097264983 Update Fastlane changelogs 2024-07-01 19:29:59 +00:00
Sylvia van Os
19d5c1144e Merge pull request #1965 from CatimaLoyalty/fix/allow_multiline_store_name_if_needed
Allow store name thumbnails to span multiple lines
2024-07-01 21:29:46 +02:00
Sylvia van Os
c123dd5d42 Allow store name thumbnails to span multiple lines
Allowing spanning multiple lines helps in case the store name doesn't
fit on a single line. However, the store name should fit a single line
if possible because it looks better when the store name isn't split
among lines. Due to limitations in Android's autoSizeTextType system,
this needs a fairly ugly workaround.
2024-07-01 19:42:35 +02:00
Sylvia van Os
3fe0fec801 Merge pull request #1966 from weblate/weblate-catima-catima
Translations update from Hosted Weblate
2024-07-01 17:42:06 +02:00
109247019824
245ff6ade9 Translated using Weblate (Bulgarian)
Currently translated at 100.0% (313 of 313 strings)

Translation: Catima/Android
Translate-URL: https://hosted.weblate.org/projects/catima/catima/bg/
2024-07-01 00:05:58 +02:00
Sylvia van Os
353cf1daad Merge pull request #1964 from CatimaLoyalty/create-pull-request/patch-1719720956
Update contributors
2024-06-30 10:13:43 +02:00
TheLastProject
2e5dbd5cc1 Update contributors 2024-06-30 04:15:56 +00:00
Sylvia van Os
7d6ce95998 Merge pull request #1963 from weblate/weblate-catima-catima
Translations update from Hosted Weblate
2024-06-30 00:23:31 +02:00
Jose Delvani
dca9816fbe Translated using Weblate (Portuguese (Brazil))
Currently translated at 2.2% (3 of 134 strings)

Translation: Catima/Android (Fastlane)
Translate-URL: https://hosted.weblate.org/projects/catima/fastlane/pt_BR/
2024-06-29 22:36:07 +02:00
Sylvia van Os
a5eee0a3b1 Update README paths 2024-06-28 20:59:58 +02:00
Sylvia van Os
5d0b890de9 Merge pull request #1958 from weblate/weblate-catima-catima
Translations update from Hosted Weblate
2024-06-28 17:14:15 +02:00
Jose Delvani
7c6492965f Translated using Weblate (Portuguese (Brazil))
Currently translated at 100.0% (313 of 313 strings)

Translation: Catima/Android
Translate-URL: https://hosted.weblate.org/projects/catima/catima/pt_BR/
2024-06-28 05:09:31 +02:00
Sylvia van Os
5f5280e2a6 Merge pull request #1957 from CatimaLoyalty/dependabot/gradle/androidx.test-core-1.6.1
Bump androidx.test:core from 1.6.0 to 1.6.1
2024-06-27 17:40:43 +02:00
dependabot[bot]
220d6cb993 Bump androidx.test:core from 1.6.0 to 1.6.1
Bumps androidx.test:core from 1.6.0 to 1.6.1.

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

Signed-off-by: dependabot[bot] <support@github.com>
2024-06-27 02:13:00 +00:00
Sylvia van Os
5f33807560 Merge pull request #1956 from weblate/weblate-catima-catima
Translations update from Hosted Weblate
2024-06-26 17:54:21 +02:00
Marian Turba
6d64a900f0 Translated using Weblate (Slovak)
Currently translated at 97.0% (130 of 134 strings)

Translation: Catima/Android (Fastlane)
Translate-URL: https://hosted.weblate.org/projects/catima/fastlane/sk/
2024-06-26 15:09:57 +02:00
Allan Nordhøy
3550c2a9f7 Translated using Weblate (Norwegian Bokmål)
Currently translated at 96.8% (303 of 313 strings)

Translation: Catima/Android
Translate-URL: https://hosted.weblate.org/projects/catima/catima/nb_NO/
2024-06-26 15:09:56 +02:00
Sylvia van Os
0bdda70761 Merge pull request #1955 from CatimaLoyalty/dependabot/gradle/androidx.test-core-1.6.0
Bump androidx.test:core from 1.5.0 to 1.6.0
2024-06-25 17:52:25 +02:00
dependabot[bot]
01debf1a09 Bump androidx.test:core from 1.5.0 to 1.6.0
Bumps androidx.test:core from 1.5.0 to 1.6.0.

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

Signed-off-by: dependabot[bot] <support@github.com>
2024-06-25 02:02:34 +00:00
Sylvia van Os
76df487661 Merge pull request #1953 from CatimaLoyalty/dependabot/github_actions/peter-evans/create-pull-request-6.1.0
Bump peter-evans/create-pull-request from 6.0.5 to 6.1.0
2024-06-24 21:58:08 +02:00
dependabot[bot]
73a129b430 Bump peter-evans/create-pull-request from 6.0.5 to 6.1.0
Bumps [peter-evans/create-pull-request](https://github.com/peter-evans/create-pull-request) from 6.0.5 to 6.1.0.
- [Release notes](https://github.com/peter-evans/create-pull-request/releases)
- [Commits](https://github.com/peter-evans/create-pull-request/compare/v6.0.5...v6.1.0)

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

Signed-off-by: dependabot[bot] <support@github.com>
2024-06-24 02:09:21 +00:00
Sylvia van Os
71afba8ab9 Merge pull request #1951 from CatimaLoyalty/create-pull-request/patch-1719116160
Update contributors
2024-06-23 13:58:06 +02:00
TheLastProject
c0b01fca35 Update contributors 2024-06-23 04:16:00 +00:00
Sylvia van Os
7158de8b81 Merge pull request #1950 from CatimaLoyalty/create-pull-request/patch-1719066500
Update feature graphic
2024-06-22 16:39:03 +02:00
TheLastProject
c1afefb712 Update feature graphic 2024-06-22 14:28:19 +00:00
Sylvia van Os
d924029a5a Merge pull request #1946 from CatimaLoyalty/fix/featuregraphic_generation
Fix kn-IN feature graphic generation
2024-06-22 16:27:19 +02:00
Sylvia van Os
f5d104fa68 Fix kn-IN feature graphic generation 2024-06-22 16:25:33 +02:00
Sylvia van Os
1c0c1c6efc Merge pull request #1941 from weblate/weblate-catima-catima
Translations update from Hosted Weblate
2024-06-21 21:28:13 +02:00
Sylvia van Os
4d4e449150 Update fastlane 2024-06-20 17:13:09 +02:00
Krisna A. Prayoga
900f92cbd6 Translated using Weblate (Indonesian)
Currently translated at 97.0% (130 of 134 strings)

Translation: Catima/Android (Fastlane)
Translate-URL: https://hosted.weblate.org/projects/catima/fastlane/id/
2024-06-19 17:09:45 +00:00
Krisna A. Prayoga
48aab74737 Translated using Weblate (Indonesian)
Currently translated at 100.0% (313 of 313 strings)

Translation: Catima/Android
Translate-URL: https://hosted.weblate.org/projects/catima/catima/id/
2024-06-19 17:09:44 +00:00
しいたけ
427aa039d6 Translated using Weblate (Japanese)
Currently translated at 3.7% (5 of 134 strings)

Translation: Catima/Android (Fastlane)
Translate-URL: https://hosted.weblate.org/projects/catima/fastlane/ja/
2024-06-19 17:09:43 +00:00
ΣΤΑΥΡΟΣ ΔΑΛΙΑΚΟΠΟΥΛΟΣ
91909e2ce3 Translated using Weblate (Greek)
Currently translated at 100.0% (313 of 313 strings)

Translation: Catima/Android
Translate-URL: https://hosted.weblate.org/projects/catima/catima/el/
2024-06-19 17:09:42 +00:00
Sylvia van Os
967f20edc7 Add missing date to changelog 2024-06-19 18:51:24 +02:00
Sylvia van Os
61d2e9545e Release Catima 2.30.0 2024-06-18 18:01:49 +02:00
Sylvia van Os
b1ea40abeb Merge pull request #1938 from weblate/weblate-catima-catima
Translations update from Hosted Weblate
2024-06-18 18:00:49 +02:00
Jose Delvani
b898be199c Translated using Weblate (Portuguese (Brazil))
Currently translated at 2.2% (3 of 134 strings)

Translation: Catima/Android (Fastlane)
Translate-URL: https://hosted.weblate.org/projects/catima/fastlane/pt_BR/
2024-06-18 06:09:26 +02:00
Jose Delvani
e82b61ed7e Translated using Weblate (Portuguese (Brazil))
Currently translated at 100.0% (1 of 1 strings)

Translation: Catima/Android (Debug)
Translate-URL: https://hosted.weblate.org/projects/catima/android-debug/pt_BR/
2024-06-18 06:09:25 +02:00
Jose Delvani
31aef55343 Translated using Weblate (Portuguese (Brazil))
Currently translated at 100.0% (313 of 313 strings)

Translation: Catima/Android
Translate-URL: https://hosted.weblate.org/projects/catima/catima/pt_BR/
2024-06-18 06:09:24 +02:00
Sylvia van Os
3da7797ecc Merge pull request #1935 from CatimaLoyalty/dependabot/github_actions/actions/checkout-4.1.7
Bump actions/checkout from 4.1.6 to 4.1.7
2024-06-17 07:26:29 +02:00
Sylvia van Os
b677a34942 Merge pull request #1937 from weblate/weblate-catima-catima
Translations update from Hosted Weblate
2024-06-17 07:24:32 +02:00
Jose Delvani
8275a0da69 Translated using Weblate (Portuguese (Brazil))
Currently translated at 100.0% (313 of 313 strings)

Translation: Catima/Android
Translate-URL: https://hosted.weblate.org/projects/catima/catima/pt_BR/
2024-06-17 05:47:41 +02:00
Jose Delvani
cc86506868 Added translation using Weblate (Portuguese (Brazil)) 2024-06-17 05:47:41 +02:00
dependabot[bot]
83ee75dc55 Bump actions/checkout from 4.1.6 to 4.1.7
Bumps [actions/checkout](https://github.com/actions/checkout) from 4.1.6 to 4.1.7.
- [Release notes](https://github.com/actions/checkout/releases)
- [Changelog](https://github.com/actions/checkout/blob/main/CHANGELOG.md)
- [Commits](https://github.com/actions/checkout/compare/v4.1.6...v4.1.7)

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

Signed-off-by: dependabot[bot] <support@github.com>
2024-06-17 02:25:13 +00:00
Sylvia van Os
a8d92c1e69 Merge pull request #1932 from weblate/weblate-catima-catima
Translations update from Hosted Weblate
2024-06-16 10:34:05 +02:00
Bruno Fernandes
ccf98f9b32 Translated using Weblate (Portuguese (Brazil))
Currently translated at 98.4% (308 of 313 strings)

Translation: Catima/Android
Translate-URL: https://hosted.weblate.org/projects/catima/catima/pt_BR/
2024-06-16 07:22:42 +00:00
Jose Delvani
6c17498481 Translated using Weblate (Portuguese (Brazil))
Currently translated at 98.4% (308 of 313 strings)

Translation: Catima/Android
Translate-URL: https://hosted.weblate.org/projects/catima/catima/pt_BR/
2024-06-16 07:22:41 +00:00
Sylvia van Os
ce9794f72f Merge pull request #1931 from CatimaLoyalty/create-pull-request/patch-1718511342
Update contributors
2024-06-16 09:13:17 +02:00
TheLastProject
a48ddeef7f Update contributors 2024-06-16 04:15:41 +00:00
Sylvia van Os
864298cee8 Merge pull request #1928 from CatimaLoyalty/create-pull-request/patch-1718441664
Update locales
2024-06-15 11:08:09 +02:00
TheLastProject
63b48685a6 Update locales 2024-06-15 08:54:23 +00:00
Sylvia van Os
37d4c2c552 Merge pull request #1927 from weblate/weblate-catima-catima
Translations update from Hosted Weblate
2024-06-15 10:54:09 +02:00
Bruno Fernandes
0515f7876b Translated using Weblate (Portuguese (Brazil))
Currently translated at 96.8% (303 of 313 strings)

Translation: Catima/Android
Translate-URL: https://hosted.weblate.org/projects/catima/catima/pt_BR/
2024-06-14 22:09:59 +02:00
grgergo
9e801f0f1c Translated using Weblate (Hungarian)
Currently translated at 100.0% (313 of 313 strings)

Translation: Catima/Android
Translate-URL: https://hosted.weblate.org/projects/catima/catima/hu/
2024-06-14 22:09:58 +02:00
IllusiveMan196
c7a8d6ddae Translated using Weblate (Ukrainian)
Currently translated at 100.0% (134 of 134 strings)

Translation: Catima/Android (Fastlane)
Translate-URL: https://hosted.weblate.org/projects/catima/fastlane/uk/
2024-06-14 22:09:58 +02:00
Kachelkaiser
0f828b5663 Translated using Weblate (German)
Currently translated at 94.0% (126 of 134 strings)

Translation: Catima/Android (Fastlane)
Translate-URL: https://hosted.weblate.org/projects/catima/fastlane/de/
2024-06-14 22:09:57 +02:00
IllusiveMan196
3f28a69d7d Translated using Weblate (Ukrainian)
Currently translated at 100.0% (313 of 313 strings)

Translation: Catima/Android
Translate-URL: https://hosted.weblate.org/projects/catima/catima/uk/
2024-06-14 22:09:56 +02:00
Cosmin Humeniuc
8980d92263 Translated using Weblate (Romanian)
Currently translated at 99.0% (310 of 313 strings)

Translation: Catima/Android
Translate-URL: https://hosted.weblate.org/projects/catima/catima/ro/
2024-06-14 22:09:56 +02:00
Francisco Gabriel Chardin
dd7512cc62 Translated using Weblate (Spanish (Argentina))
Currently translated at 74.1% (232 of 313 strings)

Translation: Catima/Android
Translate-URL: https://hosted.weblate.org/projects/catima/catima/es_AR/
2024-06-14 22:09:55 +02:00
Kachelkaiser
3005f7d845 Translated using Weblate (German)
Currently translated at 100.0% (313 of 313 strings)

Translation: Catima/Android
Translate-URL: https://hosted.weblate.org/projects/catima/catima/de/
2024-06-14 22:09:55 +02:00
Sylvia van Os
cbbd90a884 Merge pull request #1926 from CatimaLoyalty/dependabot/gradle/com.android.application-8.5.0
Bump com.android.application from 8.4.2 to 8.5.0
2024-06-14 08:18:08 +02:00
dependabot[bot]
883803d348 Bump com.android.application from 8.4.2 to 8.5.0
Bumps com.android.application from 8.4.2 to 8.5.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>
2024-06-14 03:00:13 +00:00
Sylvia van Os
56b73ef7e2 Merge pull request #1925 from weblate/weblate-catima-catima
Translations update from Hosted Weblate
2024-06-13 20:24:01 +02:00
Martijn Westerink
b1c98d33e5 Translated using Weblate (Dutch)
Currently translated at 19.4% (26 of 134 strings)

Translation: Catima/Android (Fastlane)
Translate-URL: https://hosted.weblate.org/projects/catima/fastlane/nl/
2024-06-13 19:08:13 +02:00
Martijn Westerink
4a4feea1be Translated using Weblate (Dutch)
Currently translated at 100.0% (313 of 313 strings)

Translation: Catima/Android
Translate-URL: https://hosted.weblate.org/projects/catima/catima/nl/
2024-06-13 19:08:12 +02:00
Sylvia van Os
ea015b531a Merge pull request #1924 from weblate/weblate-catima-catima
Translations update from Hosted Weblate
2024-06-12 18:07:58 +02:00
Scrambled777
5b8c40dd8a Translated using Weblate (Hindi)
Currently translated at 100.0% (134 of 134 strings)

Translation: Catima/Android (Fastlane)
Translate-URL: https://hosted.weblate.org/projects/catima/fastlane/hi/
2024-06-12 01:04:25 +00:00
Scrambled777
4859499179 Translated using Weblate (Hindi)
Currently translated at 100.0% (313 of 313 strings)

Translation: Catima/Android
Translate-URL: https://hosted.weblate.org/projects/catima/catima/hi/
2024-06-12 01:04:24 +00:00
grgergo
0e6cdbbb6b Translated using Weblate (Hungarian)
Currently translated at 99.6% (312 of 313 strings)

Translation: Catima/Android
Translate-URL: https://hosted.weblate.org/projects/catima/catima/hu/
2024-06-12 01:04:23 +00:00
Sylvia van Os
cc8c8ead2e Merge pull request #1922 from weblate/weblate-catima-catima
Translations update from Hosted Weblate
2024-06-11 18:44:04 +02:00
Sylvia van Os
2b6a4ef466 Merge pull request #1921 from CatimaLoyalty/dependabot/gradle/com.android.application-8.4.2
Bump com.android.application from 8.4.1 to 8.4.2
2024-06-11 18:42:55 +02:00
Wei-Cheng Yeh (IID)
a3b9d78463 Translated using Weblate (Chinese (Traditional))
Currently translated at 100.0% (1 of 1 strings)

Translation: Catima/Android (Debug)
Translate-URL: https://hosted.weblate.org/projects/catima/android-debug/zh_Hant/
2024-06-11 10:09:57 +02:00
ngocanhtve
7873d21644 Translated using Weblate (Vietnamese)
Currently translated at 100.0% (313 of 313 strings)

Translation: Catima/Android
Translate-URL: https://hosted.weblate.org/projects/catima/catima/vi/
2024-06-11 10:09:56 +02:00
GrassWarlock
2ad1b08de2 Translated using Weblate (Arabic)
Currently translated at 100.0% (313 of 313 strings)

Translation: Catima/Android
Translate-URL: https://hosted.weblate.org/projects/catima/catima/ar/
2024-06-11 10:09:55 +02:00
Wei-Cheng Yeh (IID)
4fae252d0a Translated using Weblate (Chinese (Traditional))
Currently translated at 6.7% (9 of 134 strings)

Translation: Catima/Android (Fastlane)
Translate-URL: https://hosted.weblate.org/projects/catima/fastlane/zh_Hant/
2024-06-11 10:09:54 +02:00
Wei-Cheng Yeh (IID)
f89179da21 Translated using Weblate (Chinese (Traditional))
Currently translated at 100.0% (313 of 313 strings)

Translation: Catima/Android
Translate-URL: https://hosted.weblate.org/projects/catima/catima/zh_Hant/
2024-06-11 10:09:54 +02:00
GregoryWarn
b4e63f89ce Translated using Weblate (Italian)
Currently translated at 100.0% (313 of 313 strings)

Translation: Catima/Android
Translate-URL: https://hosted.weblate.org/projects/catima/catima/it/
2024-06-11 10:09:53 +02:00
dependabot[bot]
ff872edc4b Bump com.android.application from 8.4.1 to 8.4.2
Bumps com.android.application from 8.4.1 to 8.4.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-06-11 02:22:30 +00:00
Sylvia van Os
013258d421 Merge pull request #1919 from CatimaLoyalty/create-pull-request/patch-1717928359
Update locales
2024-06-09 12:29:42 +02:00
TheLastProject
15575e4189 Update locales 2024-06-09 10:19:18 +00:00
Sylvia van Os
3c051cde95 Merge pull request #1918 from weblate/weblate-catima-catima
Translations update from Hosted Weblate
2024-06-09 12:19:03 +02:00
Hosted Weblate
5d2a173e22 Update translation files
Updated by "Remove blank strings" hook in Weblate.

Translation: Catima/Android
Translate-URL: https://hosted.weblate.org/projects/catima/catima/
2024-06-09 10:10:13 +00:00
Sylvia van Os
a2032ab730 Translated using Weblate (Filipino)
Currently translated at 15.3% (48 of 313 strings)

Translation: Catima/Android
Translate-URL: https://hosted.weblate.org/projects/catima/catima/fil/
2024-06-09 10:10:12 +00:00
しいたけ
9e4d8b846c Translated using Weblate (Japanese)
Currently translated at 84.0% (263 of 313 strings)

Translation: Catima/Android
Translate-URL: https://hosted.weblate.org/projects/catima/catima/ja/
2024-06-09 10:10:12 +00:00
solokot
7e8dd2dc2e Translated using Weblate (Russian)
Currently translated at 100.0% (134 of 134 strings)

Translation: Catima/Android (Fastlane)
Translate-URL: https://hosted.weblate.org/projects/catima/fastlane/ru/
2024-06-09 10:10:11 +00:00
Mael
b73d0f1836 Translated using Weblate (French)
Currently translated at 100.0% (134 of 134 strings)

Translation: Catima/Android (Fastlane)
Translate-URL: https://hosted.weblate.org/projects/catima/fastlane/fr/
2024-06-09 10:10:11 +00:00
solokot
b478e54ec0 Translated using Weblate (Russian)
Currently translated at 100.0% (313 of 313 strings)

Translation: Catima/Android
Translate-URL: https://hosted.weblate.org/projects/catima/catima/ru/
2024-06-09 10:10:10 +00:00
Sylvia van Os
cf8c6b8c24 Translated using Weblate (Hebrew (Israel))
Currently translated at 29.0% (91 of 313 strings)

Translation: Catima/Android
Translate-URL: https://hosted.weblate.org/projects/catima/catima/he_IL/
2024-06-09 10:10:09 +00:00
Mael
d64294284a Translated using Weblate (French)
Currently translated at 100.0% (313 of 313 strings)

Translation: Catima/Android
Translate-URL: https://hosted.weblate.org/projects/catima/catima/fr/
2024-06-09 10:10:09 +00:00
Alik Majid
098468e6bd Translated using Weblate (Russian)
Currently translated at 99.3% (311 of 313 strings)

Translation: Catima/Android
Translate-URL: https://hosted.weblate.org/projects/catima/catima/ru/
2024-06-09 10:10:08 +00:00
SC
cebc87a197 Translated using Weblate (Portuguese (Portugal))
Currently translated at 100.0% (313 of 313 strings)

Translation: Catima/Android
Translate-URL: https://hosted.weblate.org/projects/catima/catima/pt_PT/
2024-06-09 10:10:07 +00:00
SC
0d3ceb0e61 Translated using Weblate (Portuguese (Portugal))
Currently translated at 100.0% (134 of 134 strings)

Translation: Catima/Android (Fastlane)
Translate-URL: https://hosted.weblate.org/projects/catima/fastlane/pt_PT/
2024-06-09 10:10:07 +00:00
Oğuz Ersen
e017b07337 Translated using Weblate (Turkish)
Currently translated at 100.0% (313 of 313 strings)

Translation: Catima/Android
Translate-URL: https://hosted.weblate.org/projects/catima/catima/tr/
2024-06-09 10:10:06 +00:00
大王叫我来巡山
c4ec81f22b Translated using Weblate (Chinese (Simplified))
Currently translated at 100.0% (134 of 134 strings)

Translation: Catima/Android (Fastlane)
Translate-URL: https://hosted.weblate.org/projects/catima/fastlane/zh_Hans/
2024-06-09 10:10:05 +00:00
大王叫我来巡山
c597df056d Translated using Weblate (Chinese (Simplified))
Currently translated at 100.0% (313 of 313 strings)

Translation: Catima/Android
Translate-URL: https://hosted.weblate.org/projects/catima/catima/zh_Hans/
2024-06-09 10:10:05 +00:00
Wendell Nicolas
5517b418ac Translated using Weblate (Filipino)
Currently translated at 15.6% (49 of 313 strings)

Translation: Catima/Android
Translate-URL: https://hosted.weblate.org/projects/catima/catima/fil/
2024-06-09 10:10:04 +00:00
拉夫西奧·羅齊奧馬爾
81e7642bb8 Translated using Weblate (Polish)
Currently translated at 100.0% (313 of 313 strings)

Translation: Catima/Android
Translate-URL: https://hosted.weblate.org/projects/catima/catima/pl/
2024-06-09 10:10:03 +00:00
Wendell Nicolas
17718d5349 Translated using Weblate (Hebrew (Israel))
Currently translated at 29.0% (91 of 313 strings)

Translation: Catima/Android
Translate-URL: https://hosted.weblate.org/projects/catima/catima/he_IL/
2024-06-09 10:10:03 +00:00
gallegonovato
f5ef97fa30 Translated using Weblate (Spanish)
Currently translated at 100.0% (313 of 313 strings)

Translation: Catima/Android
Translate-URL: https://hosted.weblate.org/projects/catima/catima/es/
2024-06-09 10:10:02 +00:00
Wendell Nicolas
30c6657148 Added translation using Weblate (Filipino) 2024-06-09 10:10:01 +00:00
Sylvia van Os
2b173dc7f6 Merge pull request #1917 from CatimaLoyalty/create-pull-request/patch-1717906588
Update contributors
2024-06-09 11:00:17 +02:00
TheLastProject
cd48a28b5a Update contributors 2024-06-09 04:16:27 +00:00
Sylvia van Os
b7ad5f1f42 Merge pull request #1915 from CatimaLoyalty/create-pull-request/patch-1717619102
Update Fastlane changelogs
2024-06-05 22:25:39 +02:00
TheLastProject
9bf6795328 Update Fastlane changelogs 2024-06-05 20:25:01 +00:00
Sylvia van Os
4364189b3e Update CHANGELOG 2024-06-05 22:24:42 +02:00
Sylvia van Os
40676a365f Merge pull request #1912 from CatimaLoyalty/fix/1907
Support for devices without camera
2024-06-05 22:13:38 +02:00
Sylvia van Os
97314a0436 Rename camera permission denied layout to more logical generic error layout name 2024-06-05 20:07:52 +02:00
Sylvia van Os
d1b93018e3 Show generic zxing errors on the camera error screen 2024-06-05 20:07:46 +02:00
Sylvia van Os
a6b7b227f7 Support for devices without camera
This hides the take photo options for thumbnail and front/back image and
shows a different alert if no camera is available
2024-06-04 18:18:29 +02:00
Sylvia van Os
1c6a5454b8 Merge pull request #1913 from weblate/weblate-catima-catima
Translations update from Hosted Weblate
2024-06-03 18:55:37 +02:00
Marian Turba
06745becd7 Translated using Weblate (Slovak)
Currently translated at 95.5% (128 of 134 strings)

Translation: Catima/Android (Fastlane)
Translate-URL: https://hosted.weblate.org/projects/catima/fastlane/sk/
2024-06-03 11:09:59 +02:00
solokot
c172a12956 Translated using Weblate (Russian)
Currently translated at 100.0% (134 of 134 strings)

Translation: Catima/Android (Fastlane)
Translate-URL: https://hosted.weblate.org/projects/catima/fastlane/ru/
2024-06-03 11:09:59 +02:00
Marian Turba
c6f18fb7b2 Translated using Weblate (Slovak)
Currently translated at 100.0% (312 of 312 strings)

Translation: Catima/Android
Translate-URL: https://hosted.weblate.org/projects/catima/catima/sk/
2024-06-03 11:09:58 +02:00
min7-i
dc3fabbbb9 Translated using Weblate (German)
Currently translated at 100.0% (312 of 312 strings)

Translation: Catima/Android
Translate-URL: https://hosted.weblate.org/projects/catima/catima/de/
2024-06-03 11:09:58 +02:00
Sylvia van Os
905402ebab Merge pull request #1911 from CatimaLoyalty/create-pull-request/patch-1717222760
Update Gradle to 8.8
2024-06-01 09:52:10 +02:00
Sylvia van Os
fbed0d7857 Merge pull request #1910 from weblate/weblate-catima-catima
Translations update from Hosted Weblate
2024-06-01 09:48:00 +02:00
TheLastProject
cc74395297 Update Gradle to 8.8 2024-06-01 06:19:20 +00:00
HackerSinhos
560c55d5db Translated using Weblate (Portuguese (Brazil))
Currently translated at 32.0% (100 of 312 strings)

Translation: Catima/Android
Translate-URL: https://hosted.weblate.org/projects/catima/catima/pt_BR/
2024-06-01 05:10:42 +00:00
Sylvia van Os
a45c972a38 Merge pull request #1908 from CatimaLoyalty/dependabot/gradle/androidx.appcompat-appcompat-1.7.0
Bump androidx.appcompat:appcompat from 1.6.1 to 1.7.0
2024-05-31 17:40:00 +02:00
dependabot[bot]
51c1af5ad9 Bump androidx.appcompat:appcompat from 1.6.1 to 1.7.0
Bumps androidx.appcompat:appcompat from 1.6.1 to 1.7.0.

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

Signed-off-by: dependabot[bot] <support@github.com>
2024-05-30 02:11:34 +00:00
Sylvia van Os
d537164799 Merge pull request #1906 from weblate/weblate-catima-catima
Translations update from Hosted Weblate
2024-05-27 19:40:12 +02:00
hugoalh
012910268b Translated using Weblate (Chinese (Traditional))
Currently translated at 100.0% (312 of 312 strings)

Translation: Catima/Android
Translate-URL: https://hosted.weblate.org/projects/catima/catima/zh_Hant/
2024-05-27 14:09:37 +02:00
tabby
74d9068925 Translated using Weblate (Korean)
Currently translated at 100.0% (134 of 134 strings)

Translation: Catima/Android (Fastlane)
Translate-URL: https://hosted.weblate.org/projects/catima/fastlane/ko/
2024-05-27 14:09:36 +02:00
Allan Nordhøy
5d68f558a1 Translated using Weblate (Norwegian Bokmål)
Currently translated at 96.7% (302 of 312 strings)

Translation: Catima/Android
Translate-URL: https://hosted.weblate.org/projects/catima/catima/nb_NO/
2024-05-27 14:09:35 +02:00
Sylvia van Os
2164c1a51a Merge pull request #1904 from CatimaLoyalty/create-pull-request/patch-1716696873
Update contributors
2024-05-26 11:27:55 +02:00
TheLastProject
5f180fc289 Update contributors 2024-05-26 04:14:33 +00:00
Sylvia van Os
5be44d9bd2 Merge pull request #1903 from weblate/weblate-catima-catima
Translations update from Hosted Weblate
2024-05-25 14:41:31 +02:00
Asmodeus
54c9857072 Translated using Weblate (Portuguese (Brazil))
Currently translated at 20.8% (65 of 312 strings)

Translation: Catima/Android
Translate-URL: https://hosted.weblate.org/projects/catima/catima/pt_BR/
2024-05-25 14:09:48 +02:00
Scrambled777
c48ac797f6 Translated using Weblate (Hindi)
Currently translated at 100.0% (134 of 134 strings)

Translation: Catima/Android (Fastlane)
Translate-URL: https://hosted.weblate.org/projects/catima/fastlane/hi/
2024-05-25 14:09:47 +02:00
大王叫我来巡山
9180d22629 Translated using Weblate (Chinese (Simplified))
Currently translated at 100.0% (134 of 134 strings)

Translation: Catima/Android (Fastlane)
Translate-URL: https://hosted.weblate.org/projects/catima/fastlane/zh_Hans/
2024-05-25 14:09:47 +02:00
Sylvia van Os
aa0274534c Merge pull request #1902 from obfusk/fix-new-locales-script
new-locales.py: fix weblate pagination
2024-05-24 21:36:24 +02:00
FC (Fay) Stegerman
c97b37f279 run new-locales.py 2024-05-24 21:03:06 +02:00
FC (Fay) Stegerman
14c12533a7 new-locales.py: fix weblate pagination 2024-05-24 21:01:42 +02:00
Sylvia van Os
39f50bad30 Merge pull request #1901 from weblate/weblate-catima-catima
Translations update from Hosted Weblate
2024-05-24 18:16:32 +02:00
Asmodeus
014061d0a4 Added translation using Weblate (Portuguese (Brazil)) 2024-05-24 13:14:19 +02:00
Sylvia van Os
76c498a7f9 Merge pull request #1899 from CatimaLoyalty/create-pull-request/patch-1716394569
Update Fastlane changelogs
2024-05-22 18:17:23 +02:00
TheLastProject
fa9229c687 Update Fastlane changelogs 2024-05-22 16:16:09 +00:00
Sylvia van Os
182e7ef9a6 Merge pull request #1897 from CatimaLoyalty/fix/threadedImportExport
Run Import/Export on non-UI thread
2024-05-22 18:15:54 +02:00
Sylvia van Os
08e6600880 Lower severity of import/export starting log entries to debug
Co-authored-by: FC (Fay) Stegerman <flx@obfusk.net>
2024-05-22 18:08:37 +02:00
Sylvia van Os
edeb95aee0 Run Import/Export on non-UI thread
This seems to fix Android sometimes throwing
NetworkOnMainThreadException when importing bit files through the
Nextcloud app.

I'm not sure if this is necessary for the export too, but it doesn't
seem to break anything so for consistency it makes sense to also wrap
the exporter into a thread.

This change is suboptimal because it will still block the UI with a
ProgressDialog (which is deprecated) and force the user to wait until
the import/export completes (and will kill the import/export if the app
gets backgrounded) but it should at least fix the most common crash for
most users.
2024-05-21 21:04:25 +02:00
206 changed files with 1903 additions and 774 deletions

View File

@@ -29,7 +29,7 @@ jobs:
build:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v4.1.6
- uses: actions/checkout@v4.1.7
- 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@v3
@@ -48,7 +48,7 @@ jobs:
run: ./gradlew spotbugsRelease
- name: Archive test results
if: always()
uses: actions/upload-artifact@v4.3.3
uses: actions/upload-artifact@v4.3.4
with:
name: test-results
path: app/build/reports

View File

@@ -27,15 +27,15 @@ jobs:
steps:
- name: Checkout repo
id: checkout
uses: actions/checkout@v4.1.6
uses: actions/checkout@v4.1.7
- name: Setup Python
uses: actions/setup-python@v5.1.0
uses: actions/setup-python@v5.1.1
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@v6.0.5
uses: peter-evans/create-pull-request@v6.1.0
with:
title: "Update Fastlane changelogs"
commit-message: "Update Fastlane changelogs"

View File

@@ -25,7 +25,7 @@ jobs:
steps:
- name: Checkout repo
id: checkout
uses: actions/checkout@v4.1.6
uses: actions/checkout@v4.1.7
- name: Update contributors
id: update_contributors
uses: TheLastProject/contributors-to-file-action@v3.2.0
@@ -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@v6.0.5
uses: peter-evans/create-pull-request@v6.1.0
with:
title: "Update contributors"
commit-message: "Update contributors"

View File

@@ -6,6 +6,7 @@ on:
- main
paths:
- 'fastlane/**/title.txt'
- '.scripts/generate_feature_graphic/**'
permissions:
actions: none
checks: none
@@ -24,7 +25,7 @@ jobs:
generate-feature-graphic:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v4.1.6
- uses: actions/checkout@v4.1.7
- name: Install requirements
run: |
sudo apt-get update
@@ -38,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@v6.0.5
uses: peter-evans/create-pull-request@v6.1.0
with:
title: "Update feature graphic"
commit-message: "Update feature graphic"

View File

@@ -21,12 +21,12 @@ jobs:
gradle-update:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v4.1.6
- uses: actions/checkout@v4.1.7
- uses: obfusk/gradle-update-action@v2.0.0
id: gradle-update
- uses: gradle/actions/wrapper-validation@v3
- name: Create Pull Request
uses: peter-evans/create-pull-request@v6.0.5
uses: peter-evans/create-pull-request@v6.1.0
with:
title: "Update Gradle to ${{ steps.gradle-update.outputs.version }}"
commit-message: "Update Gradle to ${{ steps.gradle-update.outputs.version }}"

View File

@@ -25,13 +25,13 @@ jobs:
update-locales:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v4.1.6
- uses: actions/checkout@v4.1.7
- name: Add new locales
run: .scripts/new-locales.py
- name: Update locales
run: .scripts/locales.py
- name: Create Pull Request
uses: peter-evans/create-pull-request@v6.0.5
uses: peter-evans/create-pull-request@v6.1.0
with:
title: "Update locales"
commit-message: "Update locales"

View File

@@ -34,8 +34,8 @@ for lang in "$script_location/../../fastlane/metadata/android/"*; do
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 ;;
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 ;;
kn-IN) sed -i -e 's/font-size="150"/font-size="100"/' -e 's/y="285.511"/y="235.511"/' 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 ;;
*) ;;

View File

@@ -24,7 +24,7 @@ sed = [
]
subprocess.run(sed, check=True)
with open("app/src/main/res/xml/locales_config.xml", "w") as fh:
with open("app/src/main/res/xml/locales_config.xml", "w", encoding="utf-8") as fh:
fh.write('<?xml version="1.0" encoding="utf-8"?>\n')
fh.write('<locale-config xmlns:android="http://schemas.android.com/apk/res/android">\n')
fh.write(' <locale android:name="en-US" />\n')

View File

@@ -19,15 +19,27 @@ REPLACE_CODES = {
STATS_URL = "https://hosted.weblate.org/api/components/catima/catima/statistics/"
class Error(Exception):
pass
def get_weblate_langs() -> List[Tuple[str, int]]:
r = requests.get(STATS_URL, timeout=5)
r.raise_for_status()
url = STATS_URL
results = []
for lang in r.json()["results"]:
if lang["code"] != "en":
code = REPLACE_CODES.get(lang["code"], lang["code"]).replace("_", "-r")
results.append((code, round(lang["translated_percent"])))
return sorted(results)
for _ in range(16): # avoid endless loops just in case
r = requests.get(url, timeout=5)
r.raise_for_status()
data = r.json()
for lang in data["results"]:
if lang["code"] != "en":
code = REPLACE_CODES.get(lang["code"], lang["code"]).replace("_", "-r")
results.append((code, round(lang["translated_percent"])))
url = data["next"]
if not url:
return sorted(results)
if not url.split("?")[0] == STATS_URL:
raise Error(f"Unexpected next URL: {url}")
raise Error("Too many pages")
def get_dir_langs() -> List[str]:
@@ -42,7 +54,7 @@ def get_dir_langs() -> List[str]:
def get_xml_langs() -> List[Tuple[str, bool]]:
results = []
in_section = False
with open("app/src/main/res/values/settings.xml") as fh:
with open("app/src/main/res/values/settings.xml", encoding="utf-8") as fh:
for line in fh:
if not in_section and 'name="locale_values"' in line:
in_section = True
@@ -59,7 +71,7 @@ def get_xml_langs() -> List[Tuple[str, bool]]:
def update_xml_langs(langs: List[Tuple[str, bool]]) -> None:
lines: List[str] = []
in_section = False
with open("app/src/main/res/values/settings.xml") as fh:
with open("app/src/main/res/values/settings.xml", encoding="utf-8") as fh:
for line in fh:
if not in_section and 'name="locale_values"' in line:
in_section = True
@@ -70,7 +82,7 @@ def update_xml_langs(langs: List[Tuple[str, bool]]) -> None:
else:
continue
lines.append(line)
with open("app/src/main/res/values/settings.xml", "w") as fh:
with open("app/src/main/res/values/settings.xml", "w", encoding="utf-8") as fh:
for line in lines:
fh.write(line)

View File

@@ -1,9 +1,18 @@
# Changelog
## Unreleased - 136
## v2.31.0 - 137 (2024-07-26)
- Allow long store names in preview to split over multiple lines
- Option to use front of back image in thumbnail menu
- Minor import/export fixes
- Minor UI fixes
## v2.30.0 - 136 (2024-06-18)
- Support for creating a card when sharing plain text
- Display image type instead of barcode below images
- Fix possible crash when trying to import a backup from the Nextcloud app
- Improved support for devices without camera
## v2.29.1 - 135 (2024-05-19)

View File

@@ -10,17 +10,17 @@ GEM
artifactory (3.0.17)
atomos (0.1.3)
aws-eventstream (1.3.0)
aws-partitions (1.931.0)
aws-sdk-core (3.196.1)
aws-partitions (1.945.0)
aws-sdk-core (3.197.1)
aws-eventstream (~> 1, >= 1.3.0)
aws-partitions (~> 1, >= 1.651.0)
aws-sigv4 (~> 1.8)
jmespath (~> 1, >= 1.6.1)
aws-sdk-kms (1.81.0)
aws-sdk-core (~> 3, >= 3.193.0)
aws-sdk-kms (1.85.0)
aws-sdk-core (~> 3, >= 3.197.0)
aws-sigv4 (~> 1.1)
aws-sdk-s3 (1.151.0)
aws-sdk-core (~> 3, >= 3.194.0)
aws-sdk-s3 (1.152.3)
aws-sdk-core (~> 3, >= 3.197.0)
aws-sdk-kms (~> 1)
aws-sigv4 (~> 1.8)
aws-sigv4 (1.8.0)
@@ -68,7 +68,7 @@ GEM
faraday_middleware (1.2.0)
faraday (~> 1.0)
fastimage (2.3.1)
fastlane (2.220.0)
fastlane (2.221.1)
CFPropertyList (>= 2.3, < 4.0.0)
addressable (>= 2.8, < 3.0.0)
artifactory (~> 3.0)
@@ -147,14 +147,14 @@ GEM
os (>= 0.9, < 2.0)
signet (>= 0.16, < 2.a)
highline (2.0.3)
http-cookie (1.0.5)
http-cookie (1.0.6)
domain_name (~> 0.5)
httpclient (2.8.3)
jmespath (1.6.2)
json (2.7.2)
jwt (2.8.1)
jwt (2.8.2)
base64
mini_magick (4.12.0)
mini_magick (4.13.1)
mini_mime (1.1.5)
multi_json (1.15.0)
multipart-post (2.4.1)
@@ -164,15 +164,15 @@ GEM
optparse (0.5.0)
os (1.1.4)
plist (3.7.1)
public_suffix (5.0.5)
public_suffix (5.1.1)
rake (13.2.1)
representable (3.2.0)
declarative (< 0.1.0)
trailblazer-option (>= 0.1.1, < 0.2.0)
uber (< 0.2.0)
retriable (3.1.2)
rexml (3.2.8)
strscan (>= 3.0.9)
rexml (3.2.9)
strscan
rouge (2.0.7)
ruby2_keywords (0.0.5)
rubyzip (2.3.2)

View File

@@ -21,13 +21,13 @@ android {
applicationId = "me.hackerchick.catima"
minSdk = 21
targetSdk = 34
versionCode = 135
versionName = "2.29.1"
versionCode = 137
versionName = "2.31.0"
vectorDrawables.useSupportLibrary = true
multiDexEnabled = true
resourceConfigurations += listOf("ar", "bg", "bn", "bn-rIN", "bs", "cs", "da", "de", "el-rGR", "en", "eo", "es", "es-rAR", "fi", "fr", "he-rIL", "hi", "hr", "hu", "in-rID", "is", "it", "ja", "ko", "lt", "lv", "nb-rNO", "nl", "oc", "pl", "pt-rPT", "ro-rRO", "ru", "sk", "sl", "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", "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")
}
buildTypes {
@@ -87,14 +87,13 @@ android {
dependencies {
// AndroidX
implementation("androidx.appcompat:appcompat:1.6.1")
implementation("androidx.appcompat:appcompat:1.7.0")
implementation("androidx.constraintlayout:constraintlayout:2.1.4")
implementation("androidx.exifinterface:exifinterface:1.3.7")
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")
implementation("androidx.work:work-runtime:2.9.0")
coreLibraryDesugaring("com.android.tools:desugar_jdk_libs:2.0.4")
// Splash Screen
@@ -111,9 +110,9 @@ dependencies {
implementation("io.wcm.tooling.spotbugs:io.wcm.tooling.spotbugs.annotations:1.0.0")
// Testing
testImplementation("androidx.test:core:1.5.0")
testImplementation("androidx.test:core:1.6.1")
testImplementation("junit:junit:4.13.2")
testImplementation("org.robolectric:robolectric:4.12.2")
testImplementation("org.robolectric:robolectric:4.13")
}
tasks.withType<SpotBugsTask>().configureEach {

View File

@@ -0,0 +1,4 @@
<?xml version="1.0" encoding="utf-8"?>
<resources>
<string name="app_name">Depuração do Catima</string>
</resources>

View File

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

View File

@@ -12,13 +12,11 @@
<uses-sdk tools:overrideLibrary="com.google.zxing.client.android" />
<uses-permission android:name="android.permission.CAMERA" />
<uses-permission android:name="android.permission.FOREGROUND_SERVICE" />
<uses-permission android:name="android.permission.POST_NOTIFICATIONS" />
<uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE" android:maxSdkVersion="23" />
<uses-feature
android:name="android.hardware.camera"
android:required="true" />
android:required="false" />
<uses-feature
android:name="android.hardware.camera.autofocus"
android:required="false" />
@@ -190,6 +188,5 @@
<action android:name="android.service.controls.ControlsProviderService" />
</intent-filter>
</service>
<service android:name=".importexport.ImportExportWorker"/>
</application>
</manifest>

View File

@@ -4,22 +4,24 @@ import android.app.Activity;
import android.content.Context;
import android.widget.Toast;
import androidx.core.util.Consumer;
import com.journeyapps.barcodescanner.CaptureManager;
import com.journeyapps.barcodescanner.DecoratedBarcodeView;
public class CatimaCaptureManager extends CaptureManager {
private final Context mContext;
private final Consumer<String> mErrorCallback;
public CatimaCaptureManager(Activity activity, DecoratedBarcodeView barcodeView) {
public CatimaCaptureManager(Activity activity, DecoratedBarcodeView barcodeView, Consumer<String> errorCallback) {
super(activity, barcodeView);
mContext = activity.getApplicationContext();
mErrorCallback = errorCallback;
}
@Override
protected void displayFrameworkBugMessageAndExit(String message) {
// We don't want to exit, as we also have a enter from card image and add manually button here
// So we show a toast instead
Toast.makeText(mContext, message, Toast.LENGTH_LONG).show();
// So, instead, we call our error callback
mErrorCallback.accept(message);
}
}

View File

@@ -1,15 +1,15 @@
package protect.card_locker;
import android.content.ActivityNotFoundException;
import android.content.Context;
import android.content.DialogInterface;
import android.content.Intent;
import android.content.pm.PackageManager;
import android.net.Uri;
import android.os.Bundle;
import android.text.InputType;
import android.util.Log;
import android.view.MenuItem;
import android.view.ViewGroup;
import android.view.WindowManager;
import android.widget.Button;
import android.widget.EditText;
import android.widget.FrameLayout;
@@ -18,31 +18,31 @@ import android.widget.Toast;
import androidx.activity.result.ActivityResultLauncher;
import androidx.activity.result.contract.ActivityResultContracts;
import androidx.annotation.NonNull;
import androidx.annotation.Nullable;
import androidx.appcompat.app.AlertDialog;
import androidx.appcompat.widget.Toolbar;
import androidx.work.Data;
import androidx.work.ExistingWorkPolicy;
import androidx.work.OneTimeWorkRequest;
import androidx.work.OutOfQuotaPolicy;
import androidx.work.WorkManager;
import com.google.android.material.dialog.MaterialAlertDialogBuilder;
import com.google.android.material.textfield.TextInputLayout;
import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStream;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.List;
import protect.card_locker.async.TaskHandler;
import protect.card_locker.databinding.ImportExportActivityBinding;
import protect.card_locker.importexport.DataFormat;
import protect.card_locker.importexport.ImportExportWorker;
import protect.card_locker.importexport.ImportExportResult;
import protect.card_locker.importexport.ImportExportResultType;
public class ImportExportActivity extends CatimaAppCompatActivity {
private ImportExportActivityBinding binding;
private static final String TAG = "Catima";
private ImportExportTask importExporter;
private String importAlertTitle;
private String importAlertMessage;
private DataFormat importDataFormat;
@@ -52,10 +52,7 @@ public class ImportExportActivity extends CatimaAppCompatActivity {
private ActivityResultLauncher<String> fileOpenLauncher;
private ActivityResultLauncher<Intent> filePickerLauncher;
private static final int PERMISSION_REQUEST_EXPORT = 100;
private static final int PERMISSION_REQUEST_IMPORT = 101;
private OneTimeWorkRequest mRequestedWorkRequest;
final private TaskHandler mTasks = new TaskHandler();
@Override
protected void onCreate(Bundle savedInstanceState) {
@@ -84,20 +81,21 @@ public class ImportExportActivity extends CatimaAppCompatActivity {
Log.e(TAG, "Activity returned NULL uri");
return;
}
Data exportRequestData = new Data.Builder()
.putString(ImportExportWorker.INPUT_URI, uri.toString())
.putString(ImportExportWorker.INPUT_ACTION, ImportExportWorker.ACTION_EXPORT)
.putString(ImportExportWorker.INPUT_FORMAT, DataFormat.Catima.name())
.putString(ImportExportWorker.INPUT_PASSWORD, exportPassword)
.build();
mRequestedWorkRequest = new OneTimeWorkRequest.Builder(ImportExportWorker.class)
.setInputData(exportRequestData)
.setExpedited(OutOfQuotaPolicy.RUN_AS_NON_EXPEDITED_WORK_REQUEST)
.build();
PermissionUtils.requestPostNotificationsPermission(this, PERMISSION_REQUEST_EXPORT);
// Running this in a thread prevents Android from throwing a NetworkOnMainThreadException for large files
// FIXME: This is still suboptimal, because showing that the export started is delayed until the network request finishes
new Thread() {
@Override
public void run() {
try {
OutputStream writer = getContentResolver().openOutputStream(uri);
Log.d(TAG, "Starting file export with: " + result);
startExport(writer, uri, exportPassword.toCharArray(), true);
} catch (IOException e) {
Log.e(TAG, "Failed to export file: " + result, e);
onExportComplete(new ImportExportResult(ImportExportResultType.GenericFailure, result.toString()), uri);
}
}
}.start();
});
fileOpenLauncher = registerForActivityResult(new ActivityResultContracts.GetContent(), result -> {
if (result == null) {
@@ -166,26 +164,28 @@ public class ImportExportActivity extends CatimaAppCompatActivity {
// Check that there is an app that data can be imported from
Button importApplication = binding.importOptionApplicationButton;
importApplication.setOnClickListener(v -> chooseImportType(true, null));
}
public static OneTimeWorkRequest buildImportRequest(DataFormat dataFormat, Uri uri, char[] password) {
Data importRequestData = new Data.Builder()
.putString(ImportExportWorker.INPUT_URI, uri.toString())
.putString(ImportExportWorker.INPUT_ACTION, ImportExportWorker.ACTION_IMPORT)
.putString(ImportExportWorker.INPUT_FORMAT, dataFormat.name())
.putString(ImportExportWorker.INPUT_PASSWORD, Arrays.toString(password))
.build();
return new OneTimeWorkRequest.Builder(ImportExportWorker.class)
.setInputData(importRequestData)
.setExpedited(OutOfQuotaPolicy.RUN_AS_NON_EXPEDITED_WORK_REQUEST)
.build();
// FIXME: The importer/exporter is currently quite broken
// To prevent the screen from turning off during import/export and some devices killing Catima as it's no longer foregrounded, force the screen to stay on here
getWindow().addFlags(WindowManager.LayoutParams.FLAG_KEEP_SCREEN_ON);
}
private void openFileForImport(Uri uri, char[] password) {
mRequestedWorkRequest = buildImportRequest(importDataFormat, uri, password);
PermissionUtils.requestPostNotificationsPermission(this, PERMISSION_REQUEST_IMPORT);
// Running this in a thread prevents Android from throwing a NetworkOnMainThreadException for large files
// FIXME: This is still suboptimal, because showing that the import started is delayed until the network request finishes
new Thread() {
@Override
public void run() {
try {
InputStream reader = getContentResolver().openInputStream(uri);
Log.d(TAG, "Starting file import with: " + uri);
startImport(reader, uri, importDataFormat, password, true);
} catch (IOException e) {
Log.e(TAG, "Failed to import file: " + uri, e);
onImportComplete(new ImportExportResult(ImportExportResultType.GenericFailure, e.toString()), uri, importDataFormat);
}
}
}.start();
}
private void chooseImportType(boolean choosePicker,
@@ -250,17 +250,20 @@ public class ImportExportActivity extends CatimaAppCompatActivity {
new MaterialAlertDialogBuilder(this)
.setTitle(importAlertTitle)
.setMessage(importAlertMessage)
.setPositiveButton(R.string.ok, (dialog1, which1) -> {
try {
if (choosePicker) {
final Intent intentPickAction = new Intent(Intent.ACTION_PICK);
filePickerLauncher.launch(intentPickAction);
} else {
fileOpenLauncher.launch("*/*");
.setPositiveButton(R.string.ok, new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface dialog, int which) {
try {
if (choosePicker) {
final Intent intentPickAction = new Intent(Intent.ACTION_PICK);
filePickerLauncher.launch(intentPickAction);
} else {
fileOpenLauncher.launch("*/*");
}
} catch (ActivityNotFoundException e) {
Toast.makeText(getApplicationContext(), R.string.failedOpeningFileManager, Toast.LENGTH_LONG).show();
Log.e(TAG, "No activity found to handle intent", e);
}
} catch (ActivityNotFoundException e) {
Toast.makeText(getApplicationContext(), R.string.failedOpeningFileManager, Toast.LENGTH_LONG).show();
Log.e(TAG, "No activity found to handle intent", e);
}
})
.setNegativeButton(R.string.cancel, null)
@@ -269,12 +272,60 @@ public class ImportExportActivity extends CatimaAppCompatActivity {
builder.show();
}
private void startImport(final InputStream target, final Uri targetUri, final DataFormat dataFormat, final char[] password, final boolean closeWhenDone) {
mTasks.flushTaskList(TaskHandler.TYPE.IMPORT, true, false, false);
ImportExportTask.TaskCompleteListener listener = new ImportExportTask.TaskCompleteListener() {
@Override
public void onTaskComplete(ImportExportResult result, DataFormat dataFormat) {
onImportComplete(result, targetUri, dataFormat);
if (closeWhenDone) {
try {
target.close();
} catch (IOException ioException) {
ioException.printStackTrace();
}
}
}
};
importExporter = new ImportExportTask(ImportExportActivity.this,
dataFormat, target, password, listener);
mTasks.executeTask(TaskHandler.TYPE.IMPORT, importExporter);
}
private void startExport(final OutputStream target, final Uri targetUri, char[] password, final boolean closeWhenDone) {
mTasks.flushTaskList(TaskHandler.TYPE.EXPORT, true, false, false);
ImportExportTask.TaskCompleteListener listener = new ImportExportTask.TaskCompleteListener() {
@Override
public void onTaskComplete(ImportExportResult result, DataFormat dataFormat) {
onExportComplete(result, targetUri);
if (closeWhenDone) {
try {
target.close();
} catch (IOException ioException) {
ioException.printStackTrace();
}
}
}
};
importExporter = new ImportExportTask(ImportExportActivity.this,
DataFormat.Catima, target, password, listener);
mTasks.executeTask(TaskHandler.TYPE.EXPORT, importExporter);
}
@Override
protected void onDestroy() {
mTasks.flushTaskList(TaskHandler.TYPE.IMPORT, true, false, false);
mTasks.flushTaskList(TaskHandler.TYPE.EXPORT, true, false, false);
super.onDestroy();
}
@Override
public boolean onOptionsItemSelected(MenuItem item) {
int id = item.getItemId();
if (id == android.R.id.home) {
setResult(RESULT_CANCELED);
finish();
return true;
}
@@ -282,19 +333,19 @@ public class ImportExportActivity extends CatimaAppCompatActivity {
return super.onOptionsItemSelected(item);
}
public static void retryWithPassword(Context context, DataFormat dataFormat, Uri uri) {
AlertDialog.Builder builder = new MaterialAlertDialogBuilder(context);
private void retryWithPassword(DataFormat dataFormat, Uri uri) {
AlertDialog.Builder builder = new MaterialAlertDialogBuilder(this);
builder.setTitle(R.string.passwordRequired);
FrameLayout container = new FrameLayout(context);
FrameLayout container = new FrameLayout(ImportExportActivity.this);
final TextInputLayout textInputLayout = new TextInputLayout(context);
final TextInputLayout textInputLayout = new TextInputLayout(ImportExportActivity.this);
textInputLayout.setEndIconMode(TextInputLayout.END_ICON_PASSWORD_TOGGLE);
LinearLayout.LayoutParams params = new LinearLayout.LayoutParams(ViewGroup.LayoutParams.MATCH_PARENT, ViewGroup.LayoutParams.WRAP_CONTENT);
params.setMargins(50, 10, 50, 0);
textInputLayout.setLayoutParams(params);
final EditText input = new EditText(context);
final EditText input = new EditText(ImportExportActivity.this);
input.setInputType(InputType.TYPE_CLASS_TEXT | InputType.TYPE_TEXT_VARIATION_PASSWORD);
input.setHint(R.string.exportPasswordHint);
@@ -303,55 +354,75 @@ public class ImportExportActivity extends CatimaAppCompatActivity {
builder.setView(container);
builder.setPositiveButton(R.string.ok, (dialogInterface, i) -> {
OneTimeWorkRequest importRequest = ImportExportActivity.buildImportRequest(dataFormat, uri, input.getText().toString().toCharArray());
WorkManager.getInstance(context).enqueueUniqueWork(ImportExportWorker.ACTION_IMPORT, ExistingWorkPolicy.REPLACE, importRequest);
openFileForImport(uri, input.getText().toString().toCharArray());
});
builder.setNegativeButton(R.string.cancel, (dialogInterface, i) -> dialogInterface.cancel());
builder.show();
}
@Override
public void onRequestPermissionsResult(int requestCode, @NonNull String[] permissions, @NonNull int[] grantResults) {
super.onRequestPermissionsResult(requestCode, permissions, grantResults);
private String buildResultDialogMessage(ImportExportResult result, boolean isImport) {
int messageId;
onMockedRequestPermissionsResult(requestCode, permissions, grantResults);
if (result.resultType() == ImportExportResultType.Success) {
messageId = isImport ? R.string.importSuccessful : R.string.exportSuccessful;
} else {
messageId = isImport ? R.string.importFailed : R.string.exportFailed;
}
StringBuilder messageBuilder = new StringBuilder(getResources().getString(messageId));
if (result.developerDetails() != null) {
messageBuilder.append("\n\n");
messageBuilder.append(getResources().getString(R.string.include_if_asking_support));
messageBuilder.append("\n\n");
messageBuilder.append(result.developerDetails());
}
return messageBuilder.toString();
}
public void onMockedRequestPermissionsResult(int requestCode, @NonNull String[] permissions, @NonNull int[] grantResults) {
boolean granted = grantResults.length > 0 && grantResults[0] == PackageManager.PERMISSION_GRANTED;
Integer failureReason = null;
private void onImportComplete(ImportExportResult result, Uri path, DataFormat dataFormat) {
ImportExportResultType resultType = result.resultType();
if (requestCode == PERMISSION_REQUEST_EXPORT) {
if (granted) {
WorkManager.getInstance(this).enqueueUniqueWork(ImportExportWorker.ACTION_EXPORT, ExistingWorkPolicy.REPLACE, mRequestedWorkRequest);
Toast.makeText(this, R.string.exportStartedCheckNotifications, Toast.LENGTH_LONG).show();
// Import/export started
setResult(RESULT_OK);
finish();
return;
}
failureReason = R.string.postNotificationsPermissionRequired;
} else if (requestCode == PERMISSION_REQUEST_IMPORT) {
if (granted) {
WorkManager.getInstance(this).enqueueUniqueWork(ImportExportWorker.ACTION_IMPORT, ExistingWorkPolicy.REPLACE, mRequestedWorkRequest);
// Import/export started
setResult(RESULT_OK);
finish();
return;
}
failureReason = R.string.postNotificationsPermissionRequired;
if (resultType == ImportExportResultType.BadPassword) {
retryWithPassword(dataFormat, path);
return;
}
if (failureReason != null) {
Toast.makeText(this, failureReason, Toast.LENGTH_LONG).show();
AlertDialog.Builder builder = new MaterialAlertDialogBuilder(this);
builder.setTitle(resultType == ImportExportResultType.Success ? R.string.importSuccessfulTitle : R.string.importFailedTitle);
builder.setMessage(buildResultDialogMessage(result, true));
builder.setNeutralButton(R.string.ok, (dialog, which) -> dialog.dismiss());
builder.create().show();
}
private void onExportComplete(ImportExportResult result, final Uri path) {
ImportExportResultType resultType = result.resultType();
AlertDialog.Builder builder = new MaterialAlertDialogBuilder(this);
builder.setTitle(resultType == ImportExportResultType.Success ? R.string.exportSuccessfulTitle : R.string.exportFailedTitle);
builder.setMessage(buildResultDialogMessage(result, false));
builder.setNeutralButton(R.string.ok, (dialog, which) -> dialog.dismiss());
if (resultType == ImportExportResultType.Success) {
final CharSequence sendLabel = ImportExportActivity.this.getResources().getText(R.string.sendLabel);
builder.setPositiveButton(sendLabel, (dialog, which) -> {
Intent sendIntent = new Intent(Intent.ACTION_SEND);
sendIntent.putExtra(Intent.EXTRA_STREAM, path);
sendIntent.setType("text/csv");
// set flag to give temporary permission to external app to use the FileProvider
sendIntent.setFlags(Intent.FLAG_GRANT_READ_URI_PERMISSION);
ImportExportActivity.this.startActivity(Intent.createChooser(sendIntent,
sendLabel));
dialog.dismiss();
});
}
builder.create().show();
}
}

View File

@@ -0,0 +1,148 @@
package protect.card_locker;
import android.app.Activity;
import android.app.ProgressDialog;
import android.content.Context;
import android.content.DialogInterface;
import android.database.sqlite.SQLiteDatabase;
import android.util.Log;
import android.widget.Toast;
import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStream;
import java.io.OutputStreamWriter;
import java.nio.charset.StandardCharsets;
import protect.card_locker.async.CompatCallable;
import protect.card_locker.importexport.DataFormat;
import protect.card_locker.importexport.ImportExportResult;
import protect.card_locker.importexport.ImportExportResultType;
import protect.card_locker.importexport.MultiFormatExporter;
import protect.card_locker.importexport.MultiFormatImporter;
public class ImportExportTask implements CompatCallable<ImportExportResult> {
private static final String TAG = "Catima";
private Activity activity;
private boolean doImport;
private DataFormat format;
private OutputStream outputStream;
private InputStream inputStream;
private char[] password;
private TaskCompleteListener listener;
private ProgressDialog progress;
/**
* Constructor which will setup a task for exporting to the given file
*/
ImportExportTask(Activity activity, DataFormat format, OutputStream output, char[] password,
TaskCompleteListener listener) {
super();
this.activity = activity;
this.doImport = false;
this.format = format;
this.outputStream = output;
this.password = password;
this.listener = listener;
}
/**
* Constructor which will setup a task for importing from the given InputStream.
*/
ImportExportTask(Activity activity, DataFormat format, InputStream input, char[] password,
TaskCompleteListener listener) {
super();
this.activity = activity;
this.doImport = true;
this.format = format;
this.inputStream = input;
this.password = password;
this.listener = listener;
}
private ImportExportResult performImport(Context context, InputStream stream, SQLiteDatabase database, char[] password) {
ImportExportResult importResult = MultiFormatImporter.importData(context, database, stream, format, password);
Log.i(TAG, "Import result: " + importResult);
return importResult;
}
private ImportExportResult performExport(Context context, OutputStream stream, SQLiteDatabase database, char[] password) {
ImportExportResult result;
try {
OutputStreamWriter writer = new OutputStreamWriter(stream, StandardCharsets.UTF_8);
result = MultiFormatExporter.exportData(context, database, stream, format, password);
writer.close();
} catch (IOException e) {
result = new ImportExportResult(ImportExportResultType.GenericFailure, e.toString());
Log.e(TAG, "Unable to export file", e);
}
Log.i(TAG, "Export result: " + result);
return result;
}
public void onPreExecute() {
progress = new ProgressDialog(activity);
progress.setTitle(doImport ? R.string.importing : R.string.exporting);
progress.setOnCancelListener(dialog -> cancel(doImport, true));
progress.setOnDismissListener(dialog -> cancel(doImport, true));
progress.show();
}
private void cancel(boolean isImport, boolean showToast) {
ImportExportTask.this.stop();
if (showToast) {
Toast.makeText(activity, isImport ? R.string.importCancelled : R.string.exportCancelled, Toast.LENGTH_LONG).show();
}
}
protected ImportExportResult doInBackground(Void... nothing) {
final SQLiteDatabase database = new DBHelper(activity).getWritableDatabase();
ImportExportResult result;
if (doImport) {
result = performImport(activity.getApplicationContext(), inputStream, database, password);
} else {
result = performExport(activity.getApplicationContext(), outputStream, database, password);
}
database.close();
return result;
}
public void onPostExecute(Object castResult) {
listener.onTaskComplete((ImportExportResult) castResult, format);
progress.dismiss();
Log.i(TAG, (doImport ? "Import" : "Export") + " Complete");
}
protected void onCancelled() {
progress.dismiss();
Log.i(TAG, (doImport ? "Import" : "Export") + " Cancelled");
}
protected void stop() {
// Whelp
}
@Override
public ImportExportResult call() {
return doInBackground();
}
interface TaskCompleteListener {
void onTaskComplete(ImportExportResult result, DataFormat format);
}
}

View File

@@ -681,16 +681,17 @@ public class LoyaltyCardEditActivity extends CatimaAppCompatActivity implements
if (bitmap != null) {
if (requestedFrontImage()) {
mFrontImageRemoved = false;
mFrontImageUnsaved = true;
setCardImage(cardImageFront, Utils.resizeBitmap(bitmap, Utils.BITMAP_SIZE_BIG), true);
} else if (requestedBackImage()) {
mBackImageRemoved = false;
mBackImageUnsaved = true;
setCardImage(cardImageBack, Utils.resizeBitmap(bitmap, Utils.BITMAP_SIZE_BIG), true);
} else {
mIconRemoved = false;
mIconUnsaved = true;
setCardImage(thumbnail, Utils.resizeBitmap(bitmap, Utils.BITMAP_SIZE_SMALL), false);
thumbnail.setBackgroundColor(Color.TRANSPARENT);
setColorFromIcon();
setThumbnailImage(Utils.resizeBitmap(bitmap, Utils.BITMAP_SIZE_SMALL));
}
Log.d("cropper", "mRequestedImage: " + mRequestedImage);
mCropperFinishedType = mRequestedImage;
@@ -834,7 +835,7 @@ public class LoyaltyCardEditActivity extends CatimaAppCompatActivity implements
setCardImage(cardImageBack, Utils.retrieveCardImage(this, tempLoyaltyCard.id, ImageLocationType.back), true);
}
if (!mIconUnsaved && !croppedIcon() && !mIconRemoved) {
setCardImage(thumbnail, Utils.retrieveCardImage(this, tempLoyaltyCard.id, ImageLocationType.icon), false);
setThumbnailImage(Utils.retrieveCardImage(this, tempLoyaltyCard.id, ImageLocationType.icon));
}
} else {
setTitle(R.string.addCardTitle);
@@ -847,7 +848,7 @@ public class LoyaltyCardEditActivity extends CatimaAppCompatActivity implements
setCardImage(cardImageBack, Utils.loadTempImage(this, TEMP_UNSAVED_BACK_IMAGE_NAME), true);
}
if (mIconUnsaved && !croppedIcon()) {
setCardImage(thumbnail, Utils.loadTempImage(this, TEMP_UNSAVED_ICON_NAME), false);
setThumbnailImage(Utils.loadTempImage(this, TEMP_UNSAVED_ICON_NAME));
}
}
@@ -998,6 +999,22 @@ public class LoyaltyCardEditActivity extends CatimaAppCompatActivity implements
}
}
protected void setThumbnailImage(@Nullable Bitmap bitmap) {
setCardImage(thumbnail, bitmap, false);
if (bitmap == null) {
generateIcon(storeFieldEdit.getText().toString().trim());
} else {
thumbnail.setBackgroundColor(Color.TRANSPARENT);
setColorFromIcon();
}
if (tempLoyaltyCard.headerColor != null) {
thumbnailEditIcon.setBackgroundColor(Utils.needsDarkForeground(tempLoyaltyCard.headerColor) ? Color.BLACK : Color.WHITE);
thumbnailEditIcon.setColorFilter(Utils.needsDarkForeground(tempLoyaltyCard.headerColor) ? Color.WHITE : Color.BLACK);
}
}
protected void setCardImage(ImageView imageView, Bitmap bitmap, boolean applyFallback) {
imageView.setTag(bitmap);
@@ -1325,6 +1342,28 @@ public class LoyaltyCardEditActivity extends CatimaAppCompatActivity implements
return null;
});
if (v.getId() == R.id.thumbnail) {
if (cardImageFront.getTag() instanceof Bitmap) {
cardOptions.put(getString(R.string.useFrontImage), () -> {
mIconRemoved = false;
mIconUnsaved = true;
setThumbnailImage(Utils.resizeBitmap((Bitmap) cardImageFront.getTag(), Utils.BITMAP_SIZE_SMALL));
return null;
});
}
if (cardImageBack.getTag() instanceof Bitmap) {
cardOptions.put(getString(R.string.useBackImage), () -> {
mIconRemoved = false;
mIconUnsaved = true;
setThumbnailImage(Utils.resizeBitmap((Bitmap) cardImageBack.getTag(), Utils.BITMAP_SIZE_SMALL));
return null;
});
}
}
int titleResource;
if (v.getId() == R.id.frontImageHolder) {
@@ -1365,17 +1404,13 @@ public class LoyaltyCardEditActivity extends CatimaAppCompatActivity implements
// We don't need to set or check the dialogId since it's only used for that single dialog
@Override
public void onColorSelected(int dialogId, int color) {
// Unset image if set
setCardImage(thumbnail, null, false);
mIconRemoved = true;
mIconUnsaved = false;
// Save new colour
updateTempState(LoyaltyCardField.headerColor, color);
thumbnailEditIcon.setBackgroundColor(Utils.needsDarkForeground(color) ? Color.BLACK : Color.WHITE);
thumbnailEditIcon.setColorFilter(Utils.needsDarkForeground(color) ? Color.WHITE : Color.BLACK);
generateIcon(storeFieldEdit.getText().toString().trim());
// Unset image if set
mIconRemoved = true;
mIconUnsaved = false;
setThumbnailImage(null);
}
// ColorPickerDialogListener callback

View File

@@ -26,13 +26,9 @@ import androidx.appcompat.view.ActionMode;
import androidx.appcompat.widget.SearchView;
import androidx.core.splashscreen.SplashScreen;
import androidx.recyclerview.widget.RecyclerView;
import androidx.work.Data;
import androidx.work.WorkInfo;
import androidx.work.WorkManager;
import com.google.android.material.dialog.MaterialAlertDialogBuilder;
import com.google.android.material.floatingactionbutton.FloatingActionButton;
import com.google.android.material.snackbar.Snackbar;
import com.google.android.material.tabs.TabLayout;
import java.io.UnsupportedEncodingException;
@@ -40,15 +36,11 @@ import java.util.ArrayList;
import java.util.Arrays;
import java.util.Collections;
import java.util.List;
import java.util.Objects;
import java.util.concurrent.ExecutionException;
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.importexport.DataFormat;
import protect.card_locker.importexport.ImportExportWorker;
import protect.card_locker.preferences.SettingsActivity;
public class MainActivity extends CatimaAppCompatActivity implements LoyaltyCardCursorAdapter.CardAdapterListener {
@@ -79,7 +71,6 @@ public class MainActivity extends CatimaAppCompatActivity implements LoyaltyCard
private ActivityResultLauncher<Intent> mBarcodeScannerLauncher;
private ActivityResultLauncher<Intent> mSettingsLauncher;
private ActivityResultLauncher<Intent> mImportExportLauncher;
private ActionMode.Callback mCurrentActionModeCallback = new ActionMode.Callback() {
@Override
@@ -313,69 +304,6 @@ public class MainActivity extends CatimaAppCompatActivity implements LoyaltyCard
}
});
mImportExportLauncher = registerForActivityResult(new ActivityResultContracts.StartActivityForResult(), result -> {
// User didn't ask for import or export
if (result.getResultCode() != RESULT_OK) {
return;
}
// Watch for active imports/exports
new Thread(() -> {
WorkManager workManager = WorkManager.getInstance(MainActivity.this);
Snackbar importRunning = Snackbar.make(binding.getRoot(), R.string.importing, Snackbar.LENGTH_INDEFINITE);
while (true) {
try {
List<WorkInfo> activeImports = workManager.getWorkInfosForUniqueWork(ImportExportWorker.ACTION_IMPORT).get();
// We should only have one import running at a time, so it should be safe to always grab the latest
WorkInfo activeImport = activeImports.get(activeImports.size() - 1);
WorkInfo.State importState = activeImport.getState();
if (importState == WorkInfo.State.RUNNING || importState == WorkInfo.State.ENQUEUED || importState == WorkInfo.State.BLOCKED) {
importRunning.show();
} else if (importState == WorkInfo.State.SUCCEEDED) {
importRunning.dismiss();
runOnUiThread(() -> {
Toast.makeText(getApplicationContext(), getString(R.string.importSuccessful), Toast.LENGTH_LONG).show();
updateLoyaltyCardList(true);
});
break;
} else {
importRunning.dismiss();
Data outputData = activeImport.getOutputData();
// FIXME: This dialog will asynchronously be accepted or declined and we don't know the status of it so we can't show the import state
// We want to get back into this function
// A cheap fix would be to keep looping but if the user dismissed the dialog that could mean we're looping forever...
if (Objects.equals(outputData.getString(ImportExportWorker.OUTPUT_ERROR_REASON), ImportExportWorker.ERROR_PASSWORD_REQUIRED)) {
runOnUiThread(() -> ImportExportActivity.retryWithPassword(
MainActivity.this,
DataFormat.valueOf(outputData.getString(ImportExportWorker.INPUT_FORMAT)),
Uri.parse(outputData.getString(ImportExportWorker.INPUT_URI))
));
} else {
runOnUiThread(() -> {
Toast.makeText(getApplicationContext(), getString(R.string.importFailed), Toast.LENGTH_LONG).show();
Toast.makeText(getApplicationContext(), activeImport.getOutputData().getString(ImportExportWorker.OUTPUT_ERROR_REASON), Toast.LENGTH_LONG).show();
Toast.makeText(getApplicationContext(), activeImport.getOutputData().getString(ImportExportWorker.OUTPUT_ERROR_DETAILS), Toast.LENGTH_LONG).show();
});
}
break;
}
} catch (ExecutionException e) {
throw new RuntimeException(e);
} catch (InterruptedException e) {
throw new RuntimeException(e);
}
}
}).start();
});
getOnBackPressedDispatcher().addCallback(this, new OnBackPressedCallback(true) {
@Override
public void handleOnBackPressed() {
@@ -713,7 +641,7 @@ public class MainActivity extends CatimaAppCompatActivity implements LoyaltyCard
if (id == R.id.action_import_export) {
Intent i = new Intent(getApplicationContext(), ImportExportActivity.class);
mImportExportLauncher.launch(i);
startActivity(i);
return true;
}

View File

@@ -1,63 +0,0 @@
package protect.card_locker;
import static android.content.Context.NOTIFICATION_SERVICE;
import android.app.Notification;
import android.app.NotificationChannel;
import android.app.NotificationManager;
import android.content.Context;
import androidx.annotation.NonNull;
import androidx.annotation.Nullable;
public class NotificationHelper {
// Do not change these IDs!
public static final String CHANNEL_IMPORT = "import";
public static final String CHANNEL_EXPORT = "export";
public static final int IMPORT_ID = 100;
public static final int IMPORT_PROGRESS_ID = 101;
public static final int EXPORT_ID = 103;
public static final int EXPORT_PROGRESS_ID = 104;
public static Notification.Builder createNotificationBuilder(@NonNull Context context, @NonNull String channel, @NonNull int icon, @NonNull String title, @Nullable String message) {
Notification.Builder notificationBuilder = new Notification.Builder(context)
.setSmallIcon(icon)
.setTicker(title)
.setContentTitle(title);
if (message != null) {
notificationBuilder.setContentText(message);
}
if (android.os.Build.VERSION.SDK_INT >= android.os.Build.VERSION_CODES.O) {
NotificationManager notificationManager = (NotificationManager) context.getSystemService(NOTIFICATION_SERVICE);
NotificationChannel notificationChannel = new NotificationChannel(channel, getChannelName(channel), NotificationManager.IMPORTANCE_DEFAULT);
notificationManager.createNotificationChannel(notificationChannel);
notificationBuilder.setChannelId(channel);
}
return notificationBuilder;
}
public static void sendNotification(@NonNull Context context, @NonNull int notificationId, @NonNull Notification notification) {
NotificationManager notificationManager = (NotificationManager) context.getSystemService(NOTIFICATION_SERVICE);
notificationManager.notify(notificationId, notification);
}
private static String getChannelName(@NonNull String channel) {
switch(channel) {
case CHANNEL_IMPORT:
return "Import";
case CHANNEL_EXPORT:
return "Export";
default:
throw new IllegalArgumentException("Unknown notification channel");
}
}
}

View File

@@ -42,16 +42,6 @@ public class PermissionUtils {
return ContextCompat.checkSelfPermission(activity, android.Manifest.permission.CAMERA) != PackageManager.PERMISSION_GRANTED;
}
/**
* Check if post notifications permission is needed
*
* @param activity
* @return
*/
public static boolean needsPostNotificationsPermission(Activity activity) {
return ContextCompat.checkSelfPermission(activity, Manifest.permission.POST_NOTIFICATIONS) != PackageManager.PERMISSION_GRANTED;
}
/**
* Call onRequestPermissionsResult after storage read permission was granted.
* Mocks a successful grant if a grant is not necessary.
@@ -101,37 +91,4 @@ public class PermissionUtils {
activity.onMockedRequestPermissionsResult(requestCode, permissions, mockedResults);
}
}
/**
* Call onRequestPermissionsResult after notification permission was granted.
* Mocks a successful grant if a grant is not necessary.
*
* @param activity
* @param requestCode
*/
public static void requestPostNotificationsPermission(CatimaAppCompatActivity activity, int requestCode) {
int[] mockedResults = new int[]{ PackageManager.PERMISSION_GRANTED };
if (android.os.Build.VERSION.SDK_INT < android.os.Build.VERSION_CODES.TIRAMISU) {
String[] permissions = new String[0];
activity.onMockedRequestPermissionsResult(requestCode, permissions, mockedResults);
return;
}
String[] permissions = new String[]{ Manifest.permission.POST_NOTIFICATIONS};
if (needsPostNotificationsPermission(activity)) {
ActivityCompat.requestPermissions(activity, permissions, requestCode);
} else {
// FIXME: This points to onMockedRequestPermissionResult instead of to
// onRequestPermissionResult because onRequestPermissionResult was only introduced in
// Android 6.0 (SDK 23) and we and to support Android 5.0 (SDK 21) too.
//
// When minSdk becomes 23, this should point to onRequestPermissionResult directly and
// the activity input variable should be changed from CatimaAppCompatActivity to
// Activity.
activity.onMockedRequestPermissionsResult(requestCode, permissions, mockedResults);
}
}
}

View File

@@ -78,6 +78,7 @@ public class ScanActivity extends CatimaAppCompatActivity {
static final String STATE_SCANNER_ACTIVE = "scannerActive";
private boolean mScannerActive = true;
private boolean mHasError = false;
private void extractIntentFields(Intent intent) {
final Bundle b = intent.getExtras();
@@ -141,7 +142,7 @@ public class ScanActivity extends CatimaAppCompatActivity {
// Even though we do the actual decoding with the barcodeScannerView
// CaptureManager needs to be running to show the camera and scanning bar
capture = new CatimaCaptureManager(this, barcodeScannerView);
capture = new CatimaCaptureManager(this, barcodeScannerView, this::onCaptureManagerError);
Intent captureIntent = new Intent();
Bundle captureIntentBundle = new Bundle();
captureIntentBundle.putBoolean(Intents.Scan.BEEP_ENABLED, false);
@@ -178,9 +179,14 @@ public class ScanActivity extends CatimaAppCompatActivity {
capture.onResume();
}
if (ContextCompat.checkSelfPermission(this, Manifest.permission.CAMERA) == PackageManager.PERMISSION_GRANTED) {
showCameraPermissionMissingText(false);
if (!Utils.deviceHasCamera(this)) {
showCameraError(getString(R.string.noCameraFoundGuideText), false);
} else if (ContextCompat.checkSelfPermission(this, Manifest.permission.CAMERA) != PackageManager.PERMISSION_GRANTED) {
showCameraPermissionMissingText();
} else {
hideCameraError();
}
scaleScreen();
}
@@ -402,12 +408,37 @@ public class ScanActivity extends CatimaAppCompatActivity {
}
}
private void showCameraPermissionMissingText(boolean show) {
customBarcodeScannerBinding.cameraPermissionDeniedLayout.cameraPermissionDeniedClickableArea.setOnClickListener(show ? v -> {
public void onCaptureManagerError(String errorMessage) {
if (mHasError) {
// We're already showing an error, ignore this new error
return;
}
showCameraError(errorMessage, false);
}
private void showCameraPermissionMissingText() {
showCameraError(getString(R.string.noCameraPermissionDirectToSystemSetting), true);
}
private void showCameraError(String message, boolean setOnClick) {
customBarcodeScannerBinding.cameraErrorLayout.cameraErrorMessage.setText(message);
setCameraErrorState(true, setOnClick);
}
private void hideCameraError() {
setCameraErrorState(false, false);
}
private void setCameraErrorState(boolean visible, boolean setOnClick) {
mHasError = visible;
customBarcodeScannerBinding.cameraErrorLayout.cameraErrorClickableArea.setOnClickListener(visible && setOnClick ? v -> {
navigateToSystemPermissionSetting();
} : null);
customBarcodeScannerBinding.cardInputContainer.setBackgroundColor(show ? obtainThemeAttribute(com.google.android.material.R.attr.colorSurface) : Color.TRANSPARENT);
customBarcodeScannerBinding.cameraPermissionDeniedLayout.getRoot().setVisibility(show ? View.VISIBLE : View.GONE);
customBarcodeScannerBinding.cardInputContainer.setBackgroundColor(visible ? obtainThemeAttribute(com.google.android.material.R.attr.colorSurface) : Color.TRANSPARENT);
customBarcodeScannerBinding.cameraErrorLayout.getRoot().setVisibility(visible ? View.VISIBLE : View.GONE);
}
private void scaleScreen() {
@@ -417,8 +448,8 @@ public class ScanActivity extends CatimaAppCompatActivity {
float mediumSizePx = TypedValue.applyDimension(TypedValue.COMPLEX_UNIT_DIP,MEDIUM_SCALE_FACTOR_DIP,getResources().getDisplayMetrics());
boolean shouldScaleSmaller = screenHeight < mediumSizePx;
customBarcodeScannerBinding.cameraPermissionDeniedLayout.cameraPermissionDeniedIcon.setVisibility(shouldScaleSmaller ? View.GONE : View.VISIBLE);
customBarcodeScannerBinding.cameraPermissionDeniedLayout.cameraPermissionDeniedTitle.setVisibility(shouldScaleSmaller ? View.GONE : View.VISIBLE);
customBarcodeScannerBinding.cameraErrorLayout.cameraErrorIcon.setVisibility(shouldScaleSmaller ? View.GONE : View.VISIBLE);
customBarcodeScannerBinding.cameraErrorLayout.cameraErrorTitle.setVisibility(shouldScaleSmaller ? View.GONE : View.VISIBLE);
}
private int obtainThemeAttribute(int attribute) {
@@ -444,7 +475,11 @@ public class ScanActivity extends CatimaAppCompatActivity {
boolean granted = grantResults.length > 0 && grantResults[0] == PackageManager.PERMISSION_GRANTED;
if (requestCode == CaptureManager.getCameraPermissionReqCode()) {
showCameraPermissionMissingText(!granted);
if (granted) {
hideCameraError();
} else {
showCameraPermissionMissingText();
}
} else if (requestCode == PERMISSION_SCAN_ADD_FROM_IMAGE || requestCode == PERMISSION_SCAN_ADD_FROM_PDF) {
if (granted) {
if (requestCode == PERMISSION_SCAN_ADD_FROM_IMAGE) {

View File

@@ -13,6 +13,8 @@ import android.graphics.Color;
import android.graphics.ImageDecoder;
import android.graphics.Matrix;
import android.graphics.pdf.PdfRenderer;
import android.hardware.camera2.CameraAccessException;
import android.hardware.camera2.CameraManager;
import android.net.Uri;
import android.os.Build;
import android.os.ParcelFileDescriptor;
@@ -37,6 +39,7 @@ import androidx.appcompat.app.AppCompatDelegate;
import androidx.core.graphics.ColorUtils;
import androidx.core.os.LocaleListCompat;
import androidx.core.view.WindowInsetsControllerCompat;
import androidx.core.widget.TextViewCompat;
import androidx.exifinterface.media.ExifInterface;
import androidx.palette.graphics.Palette;
@@ -939,6 +942,22 @@ public class Utils {
if (icon != null) {
textWhenNoImage.setVisibility(View.GONE);
} else {
// 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);
// Calculate how wide a character is and calculate how many characters fit in a line
int characterWidth = TextViewCompat.getAutoSizeMinTextSize(textWhenNoImage);
int maxWidthPerLine = textviewWidth - textWhenNoImage.getPaddingStart() - textWhenNoImage.getPaddingEnd();
// Set amount of lines based on what could fit at most
int maxLines = ((loyaltyCard.store.length() * characterWidth) / maxWidthPerLine) + 1;
textWhenNoImage.setMaxLines(maxLines);
// Actually set the text and colour
textWhenNoImage.setVisibility(View.VISIBLE);
textWhenNoImage.setText(loyaltyCard.store);
textWhenNoImage.setTextColor(Utils.needsDarkForeground(headerColor) ? Color.BLACK : Color.WHITE);
@@ -1015,4 +1034,12 @@ public class Utils {
return false;
});
}
public static boolean deviceHasCamera(Context context) {
try {
return ((CameraManager) context.getSystemService(Context.CAMERA_SERVICE)).getCameraIdList().length > 0;
} catch (CameraAccessException e) {
return false;
}
}
}

View File

@@ -1,212 +0,0 @@
package protect.card_locker.importexport;
import android.app.Notification;
import android.app.PendingIntent;
import android.content.Context;
import android.database.sqlite.SQLiteDatabase;
import android.net.Uri;
import android.util.Log;
import androidx.annotation.NonNull;
import androidx.work.Data;
import androidx.work.ForegroundInfo;
import androidx.work.WorkManager;
import androidx.work.Worker;
import androidx.work.WorkerParameters;
import java.io.FileNotFoundException;
import java.io.IOException;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.io.OutputStream;
import java.io.OutputStreamWriter;
import java.nio.charset.StandardCharsets;
import protect.card_locker.DBHelper;
import protect.card_locker.NotificationHelper;
import protect.card_locker.R;
public class ImportExportWorker extends Worker {
private final String TAG = "Catima";
public static final String INPUT_URI = "uri";
public static final String INPUT_ACTION = "action";
public static final String INPUT_FORMAT = "format";
public static final String INPUT_PASSWORD = "password";
public static final String ACTION_IMPORT = "import";
public static final String ACTION_EXPORT = "export";
public static final String OUTPUT_ERROR_REASON = "errorReason";
public static final String ERROR_GENERIC = "errorTypeGeneric";
public static final String ERROR_PASSWORD_REQUIRED = "errorTypePasswordRequired";
public static final String OUTPUT_ERROR_DETAILS = "errorDetails";
public ImportExportWorker(@NonNull Context context, @NonNull WorkerParameters workerParams) {
super(context, workerParams);
}
@NonNull
@Override
public Result doWork() {
Log.e("CATIMA", "Started import/export worker");
Context context = getApplicationContext();
Data inputData = getInputData();
String uriString = inputData.getString(INPUT_URI);
String action = inputData.getString(INPUT_ACTION);
String format = inputData.getString(INPUT_FORMAT);
String password = inputData.getString(INPUT_PASSWORD);
if (action.equals(ACTION_IMPORT)) {
Log.e("CATIMA", "Import requested");
setForegroundAsync(createForegroundInfo(NotificationHelper.CHANNEL_IMPORT, NotificationHelper.IMPORT_PROGRESS_ID, R.string.importing));
ImportExportResult result;
InputStream stream;
try {
stream = context.getContentResolver().openInputStream(Uri.parse(uriString));
} catch (FileNotFoundException e) {
throw new RuntimeException(e);
}
final SQLiteDatabase database = new DBHelper(context).getWritableDatabase();
try {
InputStreamReader writer = new InputStreamReader(stream, StandardCharsets.UTF_8);
result = MultiFormatImporter.importData(context, database, stream, DataFormat.valueOf(format), password.toCharArray());
writer.close();
} catch (IOException e) {
Log.e(TAG, "Unable to import file", e);
NotificationHelper.sendNotification(context, NotificationHelper.IMPORT_ID, NotificationHelper.createNotificationBuilder(context, NotificationHelper.CHANNEL_IMPORT, R.drawable.ic_import_export_white_24dp, context.getString(R.string.importFailedTitle), e.getLocalizedMessage()).build());
Data failureData = new Data.Builder()
.putString(OUTPUT_ERROR_REASON, ERROR_GENERIC)
.putString(OUTPUT_ERROR_DETAILS, e.getLocalizedMessage())
.putString(INPUT_URI, uriString)
.putString(INPUT_ACTION, action)
.putString(INPUT_FORMAT, format)
.putString(INPUT_PASSWORD, password)
.build();
return Result.failure(failureData);
}
Log.i(TAG, "Import result: " + result);
if (result.resultType() == ImportExportResultType.Success) {
NotificationHelper.sendNotification(context, NotificationHelper.IMPORT_ID, NotificationHelper.createNotificationBuilder(context, NotificationHelper.CHANNEL_IMPORT, R.drawable.ic_import_export_white_24dp, context.getString(R.string.importSuccessfulTitle), context.getString(R.string.importSuccessful)).build());
return Result.success();
} else if (result.resultType() == ImportExportResultType.BadPassword) {
Log.e(TAG, "Needs password, unhandled for now");
NotificationHelper.sendNotification(context, NotificationHelper.IMPORT_ID, NotificationHelper.createNotificationBuilder(context, NotificationHelper.CHANNEL_IMPORT, R.drawable.ic_import_export_white_24dp, context.getString(R.string.importing), context.getString(R.string.passwordRequired)).build());
Data failureData = new Data.Builder()
.putString(OUTPUT_ERROR_REASON, ERROR_PASSWORD_REQUIRED)
.putString(OUTPUT_ERROR_DETAILS, result.developerDetails())
.putString(INPUT_URI, uriString)
.putString(INPUT_ACTION, action)
.putString(INPUT_FORMAT, format)
.putString(INPUT_PASSWORD, password)
.build();
return Result.failure(failureData);
} else {
NotificationHelper.sendNotification(context, NotificationHelper.IMPORT_ID, NotificationHelper.createNotificationBuilder(context, NotificationHelper.CHANNEL_IMPORT, R.drawable.ic_import_export_white_24dp, context.getString(R.string.importFailedTitle), context.getString(R.string.importFailed)).build());
Data failureData = new Data.Builder()
.putString(OUTPUT_ERROR_REASON, ERROR_GENERIC)
.putString(OUTPUT_ERROR_DETAILS, result.developerDetails())
.putString(INPUT_URI, uriString)
.putString(INPUT_ACTION, action)
.putString(INPUT_FORMAT, format)
.putString(INPUT_PASSWORD, password)
.build();
return Result.failure(failureData);
}
} else {
Log.e("CATIMA", "Export requested");
setForegroundAsync(createForegroundInfo(NotificationHelper.CHANNEL_EXPORT, NotificationHelper.EXPORT_PROGRESS_ID, R.string.exporting));
ImportExportResult result;
OutputStream stream;
try {
stream = context.getContentResolver().openOutputStream(Uri.parse(uriString));
} catch (FileNotFoundException e) {
throw new RuntimeException(e);
}
final SQLiteDatabase database = new DBHelper(context).getReadableDatabase();
try {
OutputStreamWriter writer = new OutputStreamWriter(stream, StandardCharsets.UTF_8);
result = MultiFormatExporter.exportData(context, database, stream, DataFormat.valueOf(format), password.toCharArray());
writer.close();
} catch (IOException e) {
Log.e(TAG, "Unable to export file", e);
NotificationHelper.sendNotification(context, NotificationHelper.EXPORT_ID, NotificationHelper.createNotificationBuilder(context, NotificationHelper.CHANNEL_EXPORT, R.drawable.ic_import_export_white_24dp, context.getString(R.string.exportFailedTitle), e.getLocalizedMessage()).build());
Data failureData = new Data.Builder()
.putString(OUTPUT_ERROR_REASON, ERROR_GENERIC)
.putString(OUTPUT_ERROR_DETAILS, e.getLocalizedMessage())
.putString(INPUT_URI, uriString)
.putString(INPUT_ACTION, action)
.putString(INPUT_FORMAT, format)
.putString(INPUT_PASSWORD, password)
.build();
return Result.failure(failureData);
}
Log.i(TAG, "Export result: " + result);
if (result.resultType() == ImportExportResultType.Success) {
NotificationHelper.sendNotification(context, NotificationHelper.EXPORT_ID, NotificationHelper.createNotificationBuilder(context, NotificationHelper.CHANNEL_EXPORT, R.drawable.ic_import_export_white_24dp, context.getString(R.string.exportSuccessfulTitle), context.getString(R.string.exportSuccessful)).build());
return Result.success();
} else {
NotificationHelper.sendNotification(context, NotificationHelper.EXPORT_ID, NotificationHelper.createNotificationBuilder(context, NotificationHelper.CHANNEL_EXPORT, R.drawable.ic_import_export_white_24dp, context.getString(R.string.exportFailedTitle), context.getString(R.string.exportFailed)).build());
Data failureData = new Data.Builder()
.putString(OUTPUT_ERROR_REASON, ERROR_GENERIC)
.putString(OUTPUT_ERROR_DETAILS, result.developerDetails())
.putString(INPUT_URI, uriString)
.putString(INPUT_ACTION, action)
.putString(INPUT_FORMAT, format)
.putString(INPUT_PASSWORD, password)
.build();
return Result.failure(failureData);
}
}
}
@NonNull
private ForegroundInfo createForegroundInfo(@NonNull String channel, int notificationId, int title) {
Context context = getApplicationContext();
String cancel = context.getString(R.string.cancel);
// This PendingIntent can be used to cancel the worker
PendingIntent intent = WorkManager.getInstance(context)
.createCancelPendingIntent(getId());
Notification.Builder notificationBuilder = NotificationHelper.createNotificationBuilder(context, channel, R.drawable.ic_import_export_white_24dp, context.getString(title), null);
Notification notification = notificationBuilder
.setOngoing(true)
// Add the cancel action to the notification which can
// be used to cancel the worker
.addAction(android.R.drawable.ic_delete, cancel, intent)
.build();
return new ForegroundInfo(notificationId, notification);
}
}

View File

@@ -45,7 +45,7 @@ public class MultiFormatImporter {
break;
}
String error;
String error = null;
if (importer != null) {
File inputFile;
try {

View File

@@ -9,20 +9,20 @@
tools:showIn="@layout/custom_barcode_scanner">
<LinearLayout
android:id="@+id/camera_permission_denied_clickable_area"
android:id="@+id/camera_error_clickable_area"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:orientation="vertical">
<ImageView
android:id="@+id/camera_permission_denied_icon"
android:id="@+id/camera_error_icon"
android:layout_width="match_parent"
android:layout_height="84dp"
android:scaleType="fitCenter"
android:src="@drawable/camera_permission_denied" />
android:src="@drawable/camera_error" />
<TextView
android:id="@+id/camera_permission_denied_title"
android:id="@+id/camera_error_title"
style="@style/TextAppearance.Material3.HeadlineLarge"
android:layout_width="match_parent"
android:layout_height="wrap_content"
@@ -30,12 +30,12 @@
android:text="@string/cameraPermissionDeniedTitle" />
<TextView
android:id="@+id/camera_permission_denied_message"
android:id="@+id/camera_error_message"
style="@style/AppTheme.TextView.NoData"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:gravity="center"
android:text="@string/noCameraPermissionDirectToSystemSetting" />
android:text="@string/zxing_msg_camera_framework_bug" />
</LinearLayout>
</RelativeLayout>

View File

@@ -34,8 +34,8 @@
android:padding="@dimen/activity_scanner_padding">
<include
android:id="@+id/camera_permission_denied_layout"
layout="@layout/camera_permission_failed_layout"
android:id="@+id/camera_error_layout"
layout="@layout/camera_error_layout"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:visibility="gone"

View File

@@ -6,4 +6,5 @@
android:paddingRight="8dp"
style="@style/Widget.MaterialComponents.Chip.Filter"
app:checkedIconVisible="true"
android:textAppearance="?android:attr/textAppearance" />
android:textAppearance="?android:attr/textAppearance"
app:checkedIconTint="?attr/colorOnBackground"/>

View File

@@ -42,12 +42,8 @@
android:layout_height="match_parent"
android:textStyle="bold"
app:autoSizeTextType="uniform"
app:autoSizeMinTextSize="12sp"
app:autoSizeMaxTextSize="100sp"
app:autoSizeStepGranularity="2sp"
android:gravity="center"
android:maxLines="1"
android:layout_margin="20dp" />
android:padding="20dp" />
<ImageView
android:importantForAccessibility="no"

View File

@@ -6,8 +6,8 @@ Allan Nordhøy
Heimen Stoffels
Oğuz Ersen
FC (Fay) Stegerman
Katharine Chui
StoyanDimitrov
Katharine Chui
SlavekB
mondstern
IllusiveMan196
@@ -15,41 +15,43 @@ Altonss
Michael Moroni
GM
Eric
laralem
Petr Novák
Joel A
laralem
Taco
大王叫我来巡山
pfaffenrodt
Aayush Gupta
Scrambled777
HudobniVolk
Nyatsuki
Giovanni Donisi
Jiri Grönroos
大王叫我来巡山
Samantaz Fox
arno-github
Cliff Heraldo
Sergio Paredes
Ankit Tiwari
Scrambled777
Jose Delvani
Milo Ivir
Milan Šalka
mdvhimself
Balázs Meskó
Skrripy
huuhaa
waffshappen
ikanakova
Projjal Moitra
Quentin PAGÈS
Denis Shilin
Robin Liu
Ziad OUALHADJ
ikanakova
ngocanhtve
Silvério Santos
waffshappen
Ziad OUALHADJ
Robin Liu
Denis Shilin
しいたけ
Alexander Ivanov
Miha Frangež
Viet Nguyen Hoang
Silvério Santos
Virginie
Michael Gangolf
rudy3

View File

@@ -267,7 +267,7 @@
<string name="noCameraPermissionDirectToSystemSetting">لمسح الباركود، ستحتاج Catima إلى الوصول إلى الكاميرا. اضغط هنا لتغيير إعدادات الأذونات.</string>
<string name="updateBalance">تحديث الرصيد</string>
<string name="updateBalanceHint">أدخل المبلغ</string>
<string name="storageReadPermissionRequired">الصلاحيه للوصل للتخزين مطلوبة لهذا الاجراء</string>
<string name="storageReadPermissionRequired">الصلاحيه للوصل للتخزين مطلوبة لهذا الاجراء</string>
<string name="validFromDate">عربيه</string>
<string name="cameraPermissionRequired">إذن للوصول إلى الكاميرا اللازمة لهذا الإجراء…</string>
<string name="anyDate">أي تاريخ</string>
@@ -310,7 +310,7 @@
<string name="enter_card_id">أدخل رقم الهوية أو النص الموجود على بطاقتك</string>
<string name="addWithoutBarcode">إضافة بدون باركود</string>
<string name="field_must_not_be_empty">يجب ألا يكون الحقل فارغا</string>
<string name="app_name">كاتيما</string>
<string name="app_name">Catima</string>
<string name="settings_follow_sensor_orientation">التدوير دائمًا ( تجاهل إعدادات النظام)</string>
<string name="add_manually_warning_title">الفحص موصى به</string>
<string name="continue_">استمر</string>
@@ -322,5 +322,10 @@
<string name="errorReadingFile">لا يمكن قراءة الملف</string>
<string name="failedLaunchingFileManager">لم يتم العثور على مدير ملفات مدعوم</string>
<string name="multipleBarcodesFoundPleaseChooseOne">اي من الـbarcodes تريد استخدامه؟</string>
<string name="pageWithNumber">صفحة<xliff:g>%d</xliff:g></string>
<string name="pageWithNumber">صفحة <xliff:g>%d</xliff:g></string>
<string name="noCameraFoundGuideText">يبدوا أن جهازك لا يمتلك كاميرا. إذا كان يمتلكها، أطفئ الجهاز وحاول مرة اخرى. اذا لم ينجح ذلك، أضغط على زر \"المزيد من الأختيارات\" في الأسفل لإضافة الباركود بطريقة أخرى.</string>
<string name="importCancelled">تم الغاء الاستيراد</string>
<string name="exportCancelled">تم الغاء الاستخراج</string>
<string name="useFrontImage">استخدام صورة أمامية</string>
<string name="useBackImage">استخدم صورة خلفية</string>
</resources>

View File

@@ -295,4 +295,9 @@
<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="useFrontImage">Използване на предната страна</string>
<string name="useBackImage">Използване на задната страна</string>
</resources>

View File

@@ -1,7 +1,7 @@
<?xml version="1.0" encoding="utf-8"?>
<resources xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2" xmlns:tools="http://schemas.android.com/tools">
<string name="action_add">Přidat</string>
<string name="noGiftCards">Klepněte na tlačítko Plus (+) pro přidání karty nebo naimportujete karty z nabídky (⋮).</string>
<string name="noGiftCards">Klepněte na tlačítko plus (+) pro přidání karty nebo naimportujete karty z nabídky (⋮).</string>
<string name="storeName">Název</string>
<string name="note">Poznámka</string>
<string name="cardId">ID karty</string>
@@ -302,4 +302,9 @@
<string name="pageWithNumber">Stránka <xliff:g>%d</xliff:g></string>
<string name="multipleBarcodesFoundPleaseChooseOne">Který z nalezených čárových kódů chcete použít?</string>
<string name="failedLaunchingFileManager">Nelze nalézt podporovaný správce souborů</string>
<string name="noCameraFoundGuideText">Zdá se, že vaše zařízení nemá fotoaparát. Pokud ano, zkuste zařízení restartovat. V opačném případě použijte tlačítko Další možnosti a přidejte čárový kód jiným způsobem.</string>
<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>
</resources>

View File

@@ -12,16 +12,16 @@
<string name="edit">Bearbeiten</string>
<string name="delete">Löschen</string>
<string name="confirm">Bestätigen</string>
<string name="star">Zu den Favoriten hinzufügen</string>
<string name="unstar">Aus den Favoriten entfernen</string>
<string name="star">Zu Favoriten hinzufügen</string>
<string name="unstar">Aus Favoriten entfernen</string>
<string name="ok">OK</string>
<string name="sendLabel">Senden </string>
<string name="sendLabel">Senden…</string>
<string name="editCardTitle">Karte bearbeiten</string>
<string name="addCardTitle">Neue Karte</string>
<string name="scanCardBarcode">Barcode scannen</string>
<string name="cardShortcut">Shortcut zu einer Karte</string>
<string name="cardShortcut">Kartenkürzel</string>
<string name="noCardsMessage">Füge zuerst eine Karte hinzu</string>
<string name="noCardExistsError">Diese Karte konnte nicht gefunden werden</string>
<string name="noCardExistsError">Konnte die Karte nicht finden</string>
<string name="importExport">Import/Export</string>
<string name="exportName">Export</string>
<string name="importExportHelp">Wenn du deine Daten sicherst, kannst du sie auf ein anderes Gerät übertragen.</string>
@@ -33,12 +33,12 @@
<string name="exportFailed">Export konnte nicht durchgeführt werden</string>
<string name="importing">Importiere…</string>
<string name="exporting">Exportiere…</string>
<string name="importOptionFilesystemTitle">Importiere aus dem Dateisystem</string>
<string name="importOptionFilesystemExplanation">Wähle eine Datei vom Dateisystem aus.</string>
<string name="importOptionFilesystemButton">Wähle vom Dateisystem</string>
<string name="importOptionApplicationTitle">Andere Anwendungen</string>
<string name="importOptionFilesystemTitle">Aus Dateisystem importieren</string>
<string name="importOptionFilesystemExplanation">Eine bestimmte Datei aus dem Dateisystem auswählen.</string>
<string name="importOptionFilesystemButton">vom Dateisystem</string>
<string name="importOptionApplicationTitle">Andere App verwenden</string>
<string name="importOptionApplicationExplanation">Beliebige Anwendung oder deinen bevorzugten Dateimanager zur Dateiauswahl verwenden.</string>
<string name="importOptionApplicationButton">Aus anderer Anwendung</string>
<string name="importOptionApplicationButton">Andere App verwenden</string>
<string name="about">Über</string>
<string name="app_license">Freie Software, lizensiert unter der GPLv3+</string>
<string name="about_title_fmt">Über <xliff:g id="app_name">%s</xliff:g></string>
@@ -66,7 +66,7 @@
<string name="noGroups">Klicke auf das Pluszeichen +, um eine Gruppe hinzuzufügen.</string>
<string name="noGroupCards">Diese Gruppe ist leer</string>
<string name="groups">Gruppen</string>
<string name="enter_group_name">Gib einen Gruppennamen ein</string>
<string name="enter_group_name">Gruppennamen eingeben</string>
<string name="leaveWithoutSaveConfirmation">Beenden ohne zu speichern\?</string>
<string name="leaveWithoutSaveTitle">Beenden</string>
<string name="failedOpeningFileManager">Installiere zuerst einen Dateimanager.</string>
@@ -95,7 +95,7 @@
<string name="expiryStateSentence">Läuft ab: <xliff:g>%s</xliff:g></string>
<string name="settings_disable_lockscreen_while_viewing_card">Sperrbildschirm verhindern</string>
<string name="settings_keep_screen_on">Bildschirm aktiv lassen</string>
<string name="privacy_policy_popup_text">Hinweis zum Datenschutz (oft gefordert):
<string name="privacy_policy_popup_text">Hinweis zum Datenschutz (von einigen App-Stores verlangt):
\n
\nKEINE DATEN WERDEN GESAMMELT, was jeder bestätigen kann, da unsere Anwendung eine freie Software ist.</string>
<string name="accept">Annehmen</string>
@@ -112,10 +112,10 @@
<string name="importCatimaMessage">Wähle deinen <i>catima.zip</i>-Export aus Catima zum Importieren aus.
\nErstelle ihn aus dem Import/Export-Menü einer anderen Catima-Anwendung, indem du dort zuerst Export drückst.</string>
<string name="importCatima">Aus Catima importieren</string>
<string name="setBarcodeId">Manuell eingeben</string>
<string name="setBarcodeId">Barcodewert festlegen</string>
<string name="sameAsCardId">Entspricht Kartennummer</string>
<string name="barcodeId">Barcodewert</string>
<string name="errorReadingImage">Bildverarbeitung fehlgeschlagen</string>
<string name="errorReadingImage">Konnte das Bild nicht lesen</string>
<string name="noBarcodeFound">Kein Barcode erkannt</string>
<string name="addFromImage">Bild aus der Galerie wählen</string>
<string name="unsupportedBarcodeType">Dieser Barcodetyp kann noch nicht angezeigt werden. Wir hoffen das Format in einer zukünftigen Version zu unterstützen.</string>
@@ -129,17 +129,17 @@
<string name="updateBarcodeQuestionTitle">Barcodewert aktualisieren?</string>
<string name="takePhoto">Foto aufnehmen</string>
<string name="removeImage">Bild entfernen</string>
<string name="setBackImage">Kartenrückseite</string>
<string name="setFrontImage">Kartenvorderseite</string>
<string name="setBackImage">Rückseite einstellen</string>
<string name="setFrontImage">Vorderseite einstellen</string>
<string name="photos">Fotos</string>
<string name="frontImageDescription">Bild der Vorseite</string>
<string name="backImageDescription">Bild der Rückseite</string>
<string name="frontImageDescription">Vorderseite</string>
<string name="backImageDescription">Rückseite</string>
<string name="passwordRequired">Bitte gib das Passwort ein</string>
<string name="importStocardMessage">Wähle deinen <i>***.zip</i>-Export aus Stocard zum Importieren aus.
\nSie erhalten ihn, indem du eine E-Mail an support@stocardapp.com sendest und um einen Export deiner Daten bitten.</string>
<string name="importStocard">Von Stocard importieren</string>
<string name="turn_flashlight_off">Licht ausschalten</string>
<string name="turn_flashlight_on">Licht einschalten</string>
<string name="turn_flashlight_off">Blitzlicht ausschalten</string>
<string name="turn_flashlight_on">Blitzlicht einschalten</string>
<string name="failedGeneratingShareURL">URL konnte nicht erstellt werden. Bitte melde das an uns.</string>
<plurals name="selectedCardCount">
<item quantity="one"><xliff:g>%d</xliff:g> ausgewählt</item>
@@ -193,10 +193,10 @@
<string name="editGroup">Gruppe wird bearbeitet: <xliff:g>%s</xliff:g></string>
<string name="group_edit">Gruppe bearbeiten</string>
<string name="noGiftCardsGroup">Erstelle einige Karten und ordne sie dann hier der Gruppe zu.</string>
<string name="setIcon">Vorschaubild setzen</string>
<string name="setIcon">Vorschaubild festlegen</string>
<string name="selectColor">Farbe auswählen</string>
<string name="translate_platform">auf Weblate</string>
<string name="shortcutSelectCard">Wählen Sie eine Karte</string>
<string name="shortcutSelectCard">Wähle eine Karte</string>
<string name="options">Optionen</string>
<string name="showMoreInfo">Infos anzeigen</string>
<string name="starred">als Favorit</string>
@@ -233,7 +233,7 @@
<string name="failedToRetrieveImageFile">Bilddatei konnte nicht abgerufen werden</string>
<string name="updateBalanceTitle">Wie viel hast du ausgegeben oder erhalten?</string>
<string name="cameraPermissionDeniedTitle">Kein Zugriff auf die Kamera möglich</string>
<string name="noCameraPermissionDirectToSystemSetting">Um Strichcodes zu scannen, benötigt Catima Zugriff auf Ihre Kamera. Tippen Sie hier, um Ihre Berechtigungseinstellungen zu ändern.</string>
<string name="noCameraPermissionDirectToSystemSetting">Um Strichcodes zu scannen, benötigt Catima Zugriff auf deine Kamera. Tippe hier, um deine Berechtigungseinstellungen zu ändern.</string>
<string name="updateBalanceHint">Betrag eingeben</string>
<string name="importCards">Karten importieren</string>
<string name="currentBalanceSentence">Aktuelles Guthaben: <xliff:g>%s</xliff:g></string>
@@ -245,23 +245,23 @@
<string name="validFromSentence">Gültig ab: <xliff:g>%s</xliff:g></string>
<string name="chooseValidFromDate">Gültig-ab-Datum wählen</string>
<string name="anyDate">Beliebiges Datum</string>
<string name="icon_header_click_text">Langes Drücken zum Bearbeiten der Vorschau</string>
<string name="switchToBarcode">Umschalten auf Barcode</string>
<string name="openFrontImageInGalleryApp">Vorderes Bild in der Galerie öffnen</string>
<string name="openBackImageInGalleryApp">Hinteres Bild in der Galerie öffnen</string>
<string name="icon_header_click_text">Zum Bearbeiten des Vorschaubildes lang drücken</string>
<string name="switchToBarcode">Zum Barcode wechseln</string>
<string name="openFrontImageInGalleryApp">Vorderseite in Galerie öffnen</string>
<string name="openBackImageInGalleryApp">Rückseite in Galerie öffnen</string>
<string name="height">Höhe:</string>
<string name="switchToFrontImage">Zum vorderen Bild wechseln</string>
<string name="switchToBackImage">Zum hinteren Bild wechseln</string>
<string name="switchToFrontImage">Zur Vorderseite wechseln</string>
<string name="switchToBackImage">Zur Rückseite wechseln</string>
<string name="setBarcodeHeight">Barcode-Höhe einstellen</string>
<string name="donate">Spenden</string>
<string name="show_note">Notiz anzeigen</string>
<string name="show_balance">Betrag anzeigen</string>
<string name="show_validity">Gültigkeitsdauer anzeigen</string>
<string name="show_name_below_image_thumbnail">Namen unter Bildvorschau anzeigen</string>
<string name="settings_allow_content_provider_read_title">Anderen Anwendungen den Zugriff auf meine Daten gestatten</string>
<string name="show_name_below_image_thumbnail">Namen unter Vorschaubild anzeigen</string>
<string name="settings_allow_content_provider_read_title">Anderen Apps den Zugriff auf meine Daten gestatten</string>
<string name="permissionReadCardsLabel">Catima-Karten lesen</string>
<string name="permissionReadCardsDescription">lesen deiner Catima Karten mit allen Details, einschließlich Notizen und Bildern</string>
<string name="settings_allow_content_provider_read_summary">Anwendungen müssen weiterhin eine Genehmigung beantragen, um Zugriff zu erhalten</string>
<string name="permissionReadCardsDescription">Lesen deiner Catima Karten mit allen Details, einschließlich Notizen und Bildern</string>
<string name="settings_allow_content_provider_read_summary">Apps müssen weiterhin eine Genehmigung beantragen, um Zugriff zu erhalten</string>
<string name="settings_display_barcode_max_brightness_summary">Erforderlich für das Funktionieren einiger Scanner</string>
<string name="settings_keep_screen_on_summary">Deaktiviert die Bildschirmzeitüberschreitung beim Anzeigen einer Karte</string>
<string name="settings_disable_lockscreen_while_viewing_card_summary">Deaktiviert die Bildschirmsperre während der Anzeige einer Karte</string>
@@ -269,9 +269,9 @@
<string name="settings_category_title_cards">Karten</string>
<string name="settings_category_title_privacy">Datenschutz</string>
<string name="settings_category_title_general">Allgemein</string>
<string name="view_online">Zeige online</string>
<string name="view_online">Online anzeigen</string>
<string name="action_display_options">Anzeigeoptionen</string>
<string name="show_archived_cards">Zeige archivierte Karten</string>
<string name="show_archived_cards">Archivierte Karten anzeigen</string>
<string name="app_copyright_short">Copyright © Sylvia van Os und Mitwirkende</string>
<string name="app_copyright_fmt" tools:ignore="PluralsCandidate">Copyright © 2019<xliff:g>%d</xliff:g> Sylvia van Os und Mitwirkende</string>
<string name="card_id_must_not_be_empty">Kartennummer darf nicht leer sein</string>
@@ -279,9 +279,9 @@
<string name="add_a_card_in_a_different_way">Karte anders hinzufügen</string>
<string name="action_more_options">Mehr Optionen</string>
<string name="enter_card_id">Gib die Codenummer oder Ziffernfolge deiner Karte an</string>
<string name="addWithoutBarcode">Eine Karde ohne Code hinzufügen</string>
<string name="addWithoutBarcode">Eine Karte ohne Code hinzufügen</string>
<string name="field_must_not_be_empty">Feld darf nicht leer sein</string>
<string name="manually_enter_barcode_instructions">Trage die ID Nummer oder Text deiner Karte ein und drücke auf den Barcode, der wie auf deiner Karte aussieht.</string>
<string name="manually_enter_barcode_instructions">Trage die ID Nummer oder Text deiner Karte ein und drücke auf den Barcode, der wie der auf deiner Karte aussieht.</string>
<string name="app_name">Catima</string>
<string name="settings_follow_sensor_orientation">Immer drehen (ignoriert Systemeinstellungen)</string>
<string name="continue_">Fortfahren</string>
@@ -293,6 +293,11 @@
<string name="addFromPdfFile">PDF-Datei auswählen</string>
<string name="errorReadingFile">Datei konnte nicht gelesen werden</string>
<string name="failedLaunchingFileManager">Konnte keinen unterstützten Dateimanager finden</string>
<string name="multipleBarcodesFoundPleaseChooseOne">Welchen der gefundenen Barcodes möchten Sie verwenden?</string>
<string name="multipleBarcodesFoundPleaseChooseOne">Welchen der gefundenen Barcodes möchtest du verwenden?</string>
<string name="pageWithNumber">Seite <xliff:g>%d</xliff:g></string>
<string name="noCameraFoundGuideText">Dein Gerät scheint nicht über eine Kamera zu verfügen. Wenn dies der Fall ist, versuche, das Gerät neu zu starten. Andernfalls verwende die Schaltfläche Weitere Optionen unten, um einen Barcode auf andere Weise hinzuzufügen.</string>
<string name="exportCancelled">Export abgebrochen</string>
<string name="importCancelled">Import abgebrochen</string>
<string name="useFrontImage">Vorderseite verwenden</string>
<string name="useBackImage">Rückseite verwenden</string>
</resources>

View File

@@ -92,7 +92,7 @@
\nΔημιουργήστε το από το μενού Εισαγωγής/Εξαγωγής στο Loyalty Card Keychain επιλέγοντας Εξαγωγή.</string>
<string name="importFidme">Εισαγωγή από FidMe</string>
<string name="importFidmeMessage">Επιλέξτε την <i>fidme-export-request-xxxxxx.zip</i> εξαγωγή από το FidMe για εισαγωγή και επιλέξτε χειροκίνητα τους τύπους γραμμωτού κώδικα μετέπειτα.
\nΔημιουργήστε το από το FidMe προφίλ επιλέγοντας Προστασία Δεδομένων και διαλέγοντας εξαγωγή δεδομένων.</string>
\nΔημιουργήστε το από το FidMe προφίλ επιλέγοντας Προστασία Δεδομένων και πατώντας Εξαγωγή δεδομένων πρώτα.</string>
<string name="setBarcodeId">Επιλέξτε τιμή γραμμωτού κώδικα</string>
<string name="wrongValueForBarcodeType">Η τιμή δεν είναι έγκυρη για τον επιλεγμένο γραμμωτό κώδικα</string>
<string name="setBackImage">Επιλογή οπίσθιας εικόνας</string>
@@ -295,4 +295,5 @@
<string name="field_must_not_be_empty">Το πεδίο δεν πρέπει να είναι κενό</string>
<string name="manually_enter_barcode_instructions">Εισαγάγετε τον κωδικό αριθμό ή το κείμενο στην κάρτα σας και πατήστε τον γραμμωτό κώδικα που μοιάζει με αυτόν της κάρτας σας.</string>
<string name="add_manually_warning_title">Συνιστάται η σάρωση</string>
<string name="noCameraFoundGuideText">Η συσκευή σας δεν φαίνεται να διαθέτει κάμερα. Αν έχει, δοκιμάστε να κάνετε επανεκκίνηση της συσκευής. Διαφορετικά, χρησιμοποιήστε το κουμπί Περισσότερες επιλογές παρακάτω για να προσθέσετε έναν γραμμωτό κώδικα με άλλο τρόπο.</string>
</resources>

View File

@@ -70,7 +70,7 @@
<string name="backImageDescription">Imágen dorsal</string>
<string name="noCameraPermissionDirectToSystemSetting">Para escanear códigos de barra, Catima necesitará acceso a la cámara. Presione aquí para cambiar la configuración de sus permisos.</string>
<string name="settings_lock_on_opening_orientation">Bloquear a la orientación utilizada al abrir la tarjeta</string>
<string name="app_loyalty_card_keychain">Loyalty Card Keychain</string>
<string name="app_loyalty_card_keychain">Cartera para Tarjetas de Fidelización</string>
<string name="importOptionFilesystemTitle">Importar desde su sistema de archivos</string>
<string name="leaveWithoutSaveTitle">Salir</string>
<string name="expiryStateSentence">Expira: <xliff:g>%s</xliff:g></string>
@@ -184,4 +184,37 @@
<string name="settings_keep_screen_on_summary">Deshabilita el tiempo de espera de la pantalla mientras se ve una tarjeta</string>
<string name="thumbnailDescription">Miniatura</string>
<string name="deleteConfirmationGroup">¿Eliminar grupo\?</string>
<string name="updateBarcodeQuestionText">Has cambiado el ID. ¿Quieres actualizar también el código de barras para usar el mismo valor?</string>
<string name="settings_locale">Idioma</string>
<string name="settings_system_locale">Sistema</string>
<string name="settings_catima_theme">Catima</string>
<string name="settings_pink_theme">Rosa</string>
<string name="exportPassword">Agregar una contraseña para protejer tu exportación (opcional)</string>
<string name="settings_sky_blue_theme">Celeste</string>
<string name="settings_green_theme">Verde</string>
<string name="settings_grey_theme">Gris</string>
<string name="exportPasswordHint">Ingresar contraseña</string>
<string name="setIcon">Establecer miniatura</string>
<string name="showMoreInfo">Mostrar información</string>
<string name="turn_flashlight_on">Encender linterna</string>
<string name="turn_flashlight_off">Apagar linterna</string>
<string name="updateBalance">Actualizar balance</string>
<string name="failedToRetrieveImageFile">Error al obtener archivo de imagen</string>
<string name="settings_oled_dark_summary">Reduce uso de batería en pantallas OLED</string>
<string name="settings_oled_dark">Fondo negro puro para tema oscuro</string>
<string name="selectColor">Seleccionar color</string>
<string name="settings_theme_color">Color del tema</string>
<string name="settings_magenta_theme">Magenta</string>
<string name="settings_violet_theme">Violeta</string>
<string name="settings_brown_theme">Marrón</string>
<string name="sort">Ordenar</string>
<string name="settings_blue_theme">Azul</string>
<string name="app_contributors">Hecho posible por: <xliff:g id="app_contributors">%s</xliff:g></string>
<string name="barcodeLongPressMessage">Solo se puede abrir imágenes en la aplicación de galería</string>
<string name="settings_follow_sensor_orientation">Siempre rotar (ignora configuración del sistema)</string>
<string name="yes">Si</string>
<string name="no">No</string>
<string name="passwordRequired">Por favor ingresa la contraseña</string>
<string name="failedGeneratingShareURL">No se pudo generar URL compartible. Por favor reporte esto.</string>
<string name="sort_by_name">Nombre</string>
</resources>

View File

@@ -302,4 +302,9 @@
<string name="failedLaunchingFileManager">No se ha podido encontrar un gestor de archivos compatible</string>
<string name="multipleBarcodesFoundPleaseChooseOne">¿Cuál de los códigos de barras encontrados desea utilizar?</string>
<string name="pageWithNumber">Página <xliff:g>%d</xliff:g></string>
<string name="noCameraFoundGuideText">Tu dispositivo no parece tener cámara. Si la tiene, intente reiniciar el dispositivo. De lo contrario, utilice el botón Más opciones a continuación para añadir un código de barras de otra manera.</string>
<string name="importCancelled">Importación cancelada</string>
<string name="exportCancelled">Exportación cancelada</string>
<string name="useFrontImage">Utilice la imagen frontal</string>
<string name="useBackImage">Utilice la imagen trasera</string>
</resources>

View File

@@ -1,2 +1,6 @@
<?xml version="1.0" encoding="utf-8"?>
<resources></resources>
<resources>
<string name="app_name">کاتیما</string>
<string name="action_search">جستجو</string>
<string name="action_add">افزودن</string>
</resources>

View File

@@ -0,0 +1,5 @@
<?xml version="1.0" encoding="utf-8"?>
<resources>
<string name="action_search">Hanap</string>
<string name="app_name">Catima</string>
</resources>

View File

@@ -302,4 +302,9 @@
<string name="failedLaunchingFileManager">Impossible de trouver un gestionnaire de fichiers supporté</string>
<string name="multipleBarcodesFoundPleaseChooseOne">Quel code-barre, parmi ceux trouvés, voulez-vous utiliser?</string>
<string name="pageWithNumber">Page <xliff:g>%d</xliff:g></string>
<string name="noCameraFoundGuideText">Votre appareil ne semble pas disposer d\'une caméra. Si c\'est le cas, veuillez essayer de redémarrer l\'appareil. Sinon, vous pouvez utiliser le bouton \"Plus d\'options\" ci-dessous pour ajouter un code-barre d\'une autre manière.</string>
<string name="exportCancelled">Exportation annulée</string>
<string name="importCancelled">Importation annulée</string>
<string name="useFrontImage">Utiliser l\'image de face</string>
<string name="useBackImage">Utiliser l\'image arrière</string>
</resources>

View File

@@ -295,4 +295,9 @@
<string name="addFromPdfFile">एक PDF फाइल चुनें</string>
<string name="errorReadingFile">फाइल को पढ़ा नहीं जा सका</string>
<string name="failedLaunchingFileManager">समर्थित फाइल प्रबंधक नहीं मिल सका</string>
<string name="noCameraFoundGuideText">ऐसा लगता है कि आपके डिवाइस में कैमरा नहीं है। अगर है, तो डिवाइस को रीबूट करने का प्रयास करें। अन्यथा, किसी अन्य तरीके से बारकोड जोड़ने के लिए नीचे दिए गए अधिक विकल्प बटन का उपयोग करें।</string>
<string name="importCancelled">आयात रद्द</string>
<string name="exportCancelled">निर्यात रद्द</string>
<string name="useFrontImage">सामने की छवि का प्रयोग करें</string>
<string name="useBackImage">पीछे की छवि का उपयोग करें</string>
</resources>

View File

@@ -290,4 +290,12 @@
<string name="continue_">Tovább</string>
<string name="spend">Költött</string>
<string name="receive">Megkapott</string>
<string name="addFromPdfFile">PDF fájl kiválasztása</string>
<string name="errorReadingFile">A fájl nem olvasható</string>
<string name="pageWithNumber"><xliff:g>%d</xliff:g>. oldal</string>
<string name="failedLaunchingFileManager">Nem található támogatott fájlkezelő</string>
<string name="multipleBarcodesFoundPleaseChooseOne">A talált vonalkódok közül melyiket szeretné használni?</string>
<string name="noCameraFoundGuideText">Úgy tűnik, az eszközén nincs kamera. Ha van, próbálja meg újraindítani az eszközt. Másképp, használja a További beállítások gombot alul, hogy máshogy hozzáadjon egy vonalkódot.</string>
<string name="importCancelled">Importálás megszakítva</string>
<string name="exportCancelled">Exportálás megszakítva</string>
</resources>

View File

@@ -141,17 +141,17 @@
\nTIDAK ADA DATA YANG DIKUMPULKAN SAMA SEKALI, yang dapat dikonfirmasi oleh siapa pun karena aplikasi kami adalah libre software.</string>
<string name="importCatimaMessage">Pilih ekspor <i>catima.zip</i> Anda dari Catima untuk diimpor.
\nBuat dari menu Impor/Ekspor aplikasi Catima lain dengan menekan Ekspor di sana terlebih dahulu.</string>
<string name="importFidmeMessage">Pilih ekspor <i>fidme-export-request-xxxxxx.zip</i> Anda dari FidMe untuk diimpor, dan pilih jenis barcode secara manual setelahnya.
<string name="importFidmeMessage">Pilih ekspor <i>fidme-export-request-xxxxxx.zip</i> Anda dari FidMe untuk diimpor, dan pilih jenis barcode secara manual setelahnya.
\nBuat dari profil FidMe Anda dengan memilih Perlindungan Data lalu tekan Ekstrak data saya terlebih dahulu.</string>
<string name="importLoyaltyCardKeychain">Impor dari Loyalty Card Keychain</string>
<string name="importLoyaltyCardKeychainMessage">Pilih ekspor <i>LoyaltyCardKeychain.csv</i> Anda dari Loyalty Card Keychain untuk diimpor.
<string name="importLoyaltyCardKeychainMessage">Pilih ekspor <i>LoyaltyCardKeychain.csv</i> Anda dari Loyalty Card Keychain untuk diimpor.
\nBuat dari menu Import/Export di Loyalty Card Keychain dengan menekan Export terlebih dahulu.</string>
<string name="importStocard">Impor dari Stocard</string>
<string name="importStocardMessage">Pilih ekspor <i>***.zip</i> Anda dari Stocard untuk diimpor.
<string name="importStocardMessage">Pilih ekspor <i>***.zip</i> Anda dari Stocard untuk diimpor.
\nDapatkan dengan mengirim email ke support@stocardapp.com untuk meminta ekspor data Anda.</string>
<string name="importVoucherVault">Impor dari Voucher Vault</string>
<string name="importVoucherVaultMessage">Pilih ekspor <i>vouchervault.json</i> Anda dari Vault Voucher untuk diimpor.
\nBuat dengan menekan Ekspor di Vault Voucher terlebih dahulu.</string>
<string name="importVoucherVaultMessage">Pilih ekspor <i>vouchervault.json</i> Anda dari Voucher Vault untuk diimpor.
\nBuat dengan menekan Ekspor di Voucher Vault terlebih dahulu.</string>
<string name="unsupportedBarcodeType">Jenis barcode ini belum dapat ditampilkan. Ini mungkin didukung di versi aplikasi yang lebih baru.</string>
<string name="wrongValueForBarcodeType">Nilai tidak berlaku untuk jenis barcode yang dipilih</string>
<string name="frontImageDescription">Gambar depan</string>
@@ -288,4 +288,5 @@
<string name="receive">Terima</string>
<string name="amountParsingFailed">Jumlah tidak valid</string>
<string name="add_manually_warning_message">Untuk beberapa toko, nilai barcode berbeda dengan nomor yang tertulis di kartu. Oleh karena itu, memasukkan barcode secara manual mungkin tidak selalu berhasil. Sangat disarankan untuk memindai barcode dengan kamera anda. Apakah anda masih ingin melanjutkan?</string>
<string name="noCameraFoundGuideText">Perangkat Anda sepertinya tidak memiliki kamera. Jika iya, coba mulai ulang perangkat. Jika tidak, gunakan tombol Opsi lainnya di bawah untuk menambahkan barcode dengan cara lain.</string>
</resources>

View File

@@ -302,4 +302,9 @@
<string name="addFromPdfFile">Seleziona un file PDF</string>
<string name="failedLaunchingFileManager">Impossibile trovare un file manager supportato</string>
<string name="pageWithNumber">Pagina <xliff:g>%d</xliff:g></string>
<string name="noCameraFoundGuideText">Sembra che il tuo dispositivo non abbia una fotocamera. In tal caso, prova a riavviare il dispositivo. Altrimenti, utilizza il pulsante Altre opzioni di seguito per aggiungere un codice a barre in un altro modo.</string>
<string name="importCancelled">Importazione annullata</string>
<string name="exportCancelled">Esportazione annullata</string>
<string name="useBackImage">Usa l\'immagine posteriore</string>
<string name="useFrontImage">Usa l\'immagine anteriore</string>
</resources>

View File

@@ -52,8 +52,8 @@
<string name="exportSuccessful">データがエクスポートされました</string>
<string name="importSuccessful">データがインポートされました</string>
<string name="intent_import_card_from_url_share_text">カード共有をしましょう</string>
<string name="settings_disable_lockscreen_while_viewing_card">バーコード表示中画面をロックしない</string>
<string name="settings_keep_screen_on">バーコード表示中画面を消灯しない</string>
<string name="settings_disable_lockscreen_while_viewing_card">バーコード表示中画面をロックしない</string>
<string name="settings_keep_screen_on">バーコード表示中画面を点けたままにする</string>
<string name="settings_display_barcode_max_brightness">バーコード表示画面を明るくする</string>
<string name="settings_dark_theme">ダーク</string>
<string name="settings_light_theme">ライト</string>
@@ -64,11 +64,11 @@
<string name="thumbnailDescription">サムネイル</string>
<string name="selectBarcodeTitle">バーコード選択</string>
<string name="app_libraries">Libre third-party libraries: <xliff:g id="app_libraries_list">%s</xliff:g></string>
<string name="debug_version_fmt">Version: <xliff:g id="version">%s</xliff:g></string>
<string name="about_title_fmt">About <xliff:g id="app_name">%s</xliff:g></string>
<string name="debug_version_fmt">バージョン: <xliff:g id="version">%s</xliff:g></string>
<string name="about_title_fmt"><xliff:g id="app_name">%s</xliff:g> について</string>
<string name="app_license">Copylefted libre software, licensed GPLv3+</string>
<string name="app_resources">Libre third-party resources: <xliff:g id="app_resources_list">%s</xliff:g></string>
<string name="about">Catimaについて</string>
<string name="about">このアプリについて</string>
<string name="importOptionApplicationButton">外部のアプリを使う</string>
<string name="importOptionApplicationExplanation">任意のアプリやお気に入りのファイルマネージャーからファイルを開く。</string>
<string name="importOptionApplicationTitle">外部アプリを使う</string>
@@ -130,8 +130,8 @@
<string name="takePhoto">写真を撮影する</string>
<string name="removeImage">画像を削除</string>
<string name="setBackImage">裏面の画像を設定</string>
<string name="setFrontImage">オモテ面の画像を設定</string>
<string name="photos">フォト</string>
<string name="setFrontImage">面の画像を設定</string>
<string name="photos">画像</string>
<string name="backImageDescription"></string>
<string name="frontImageDescription"></string>
<string name="importStocardMessage">Stocardでエクスポートした<i>***.zip</i>ファイルを選択してください。
@@ -175,12 +175,12 @@
<string name="exportPasswordHint">パスワードを入力してください</string>
<string name="version_history">更新履歴</string>
<string name="credits">貢献者</string>
<string name="help_translate_this_app">このアプリの翻訳を手伝う</string>
<string name="help_translate_this_app">翻訳を手伝う</string>
<string name="license">ライセンス</string>
<string name="on_google_play">Google Play</string>
<string name="report_error">エラーを報告する</string>
<string name="report_error">問題を報告する</string>
<string name="reverse">逆順</string>
<string name="and_data_usage">and data usage</string>
<string name="and_data_usage">データの扱いなど</string>
<string name="group_updated">グループを更新しました</string>
<string name="editGroup">グループ編集: <xliff:g>%s</xliff:g></string>
<string name="selectColor">色を選択</string>
@@ -189,7 +189,7 @@
<string name="group_name_already_in_use">このグループ名は既に使用されています</string>
<string name="group_name_is_empty">空欄にすることはできません</string>
<string name="shortcutSelectCard">カードを選択してください</string>
<string name="translate_platform">on Weblate</string>
<string name="translate_platform">Weblate</string>
<string name="options">オプション</string>
<string name="show_note">メモを表示</string>
<string name="validFromDate">有効期限</string>
@@ -207,4 +207,31 @@
<string name="settings_portrait_orientation"></string>
<string name="noGiftCardsGroup">いくつかのカードを作って、それらをこのグループにアサインします。</string>
<string name="noCameraPermissionDirectToSystemSetting">バーコードをスキャンするためには、Catimaはカメラへのアクセスを必要とします。ここをタップして権限設定の変更をお願いします。</string>
<string name="importCards">カードをインポート</string>
<string name="show_balance">残高を表示</string>
<string name="show_validity">有効期限を表示</string>
<string name="donate">寄付する</string>
<string name="duplicateCard">複製</string>
<string name="unarchived">アーカイブを解除しました</string>
<string name="welcome">Catimaへようこそ</string>
<string name="show_name_below_image_thumbnail">画像サムネイルの下に名前を表示</string>
<string name="settings_keep_screen_on_summary">画面の自動消灯を無効化します</string>
<string name="settings_category_title_cards">カード</string>
<string name="settings_category_title_general">一般</string>
<string name="settings_disable_lockscreen_while_viewing_card_summary">画面のロックを無効化します</string>
<string name="action_display_options">表示の設定</string>
<string name="unarchive">アーカイブ解除</string>
<string name="archive">アーカイブ</string>
<string name="archived">アーカイブしました</string>
<string name="show_archived_cards">アーカイブしたカードを表示</string>
<string name="addFromPdfFile">PDFファイルを選択</string>
<string name="addWithoutBarcode">バーコードを登録せずにカードを追加</string>
<string name="failedToOpenUrl">ブラウザーをインストールしてください</string>
<string name="previousCard">前へ</string>
<string name="nextCard">次へ</string>
<string name="settings_lock_on_opening_orientation">カードを開いた時の向きに固定</string>
<string name="settings_oled_dark">ダークテーマで黒い背景を使用する</string>
<string name="settings_oled_dark_summary">有機ELディスプレイでの電池の使用量を削減します</string>
<string name="action_more_options">オプション</string>
<string name="add_a_card_in_a_different_way">別の方法でカードを追加</string>
</resources>

View File

@@ -260,7 +260,7 @@
<string name="setBarcodeHeight">Sett strekkodehøyde</string>
<string name="donate">Doner</string>
<string name="permissionReadCardsLabel">Les Catima-kort</string>
<string name="permissionReadCardsDescription">Les kortene dine og detaljene om dem, inkludert notater og bilder</string>
<string name="permissionReadCardsDescription">Les Catima-kortene dine og detaljene om dem, inkludert notater og bilder</string>
<string name="settings_allow_content_provider_read_summary">Programmer vil fremdeles måtte forespørre tilgang for å få det innvilget</string>
<string name="settings_display_barcode_max_brightness_summary">Nødvendig for noen skannere</string>
<string name="settings_keep_screen_on_summary">Skrur av skjermtidsavbrudd under visning av et kort</string>
@@ -290,4 +290,10 @@
<string name="receive">Inntekt</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="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="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>
</resources>

View File

@@ -295,4 +295,9 @@
<string name="failedLaunchingFileManager">Geen ondersteunde bestandsbeheerder aangetroffen</string>
<string name="multipleBarcodesFoundPleaseChooseOne">Welke van de gevonden barcodes wil je gebruiken?</string>
<string name="pageWithNumber">Pagina <xliff:g>%d</xliff:g></string>
<string name="noCameraFoundGuideText">Uw apparaat lijkt niet over een camera te beschikken. Als het dat wel doet, probeer uw apparaat dan opnieuw op te starten. Anders gebruikt u de knop \"Meer opties\" beneden om handmatig een streepjescode in te voeren.</string>
<string name="importCancelled">Importeren geannuleerd</string>
<string name="exportCancelled">Exporteren geannuleerd</string>
<string name="useFrontImage">Gebruik voorzijde van kaart</string>
<string name="useBackImage">Gebruik achterzijde van kaart</string>
</resources>

View File

@@ -309,4 +309,7 @@
<string name="failedLaunchingFileManager">Nie można znaleźć obsługiwanego menedżera plików</string>
<string name="multipleBarcodesFoundPleaseChooseOne">Którego ze znalezionych kodów kreskowych chciałbyś użyć?</string>
<string name="add_manually_warning_message">W przypadku niektórych sklepów wartość kodu kreskowego różni się od liczby zapisanej na karcie. Z tego powodu ręczne wprowadzanie kodu kreskowego może nie zawsze działać. Zdecydowanie zaleca się zeskanowanie kodu kreskowego za pomocą aparatu. Czy nadal chcesz kontynuować?</string>
<string name="noCameraFoundGuideText">Nie wykryto kamery. Jeśli twoje urządzenie posiada kamerę, spróbuj uruchomić je ponownie. W innym wypadku wybierz Więcej opcji i dodaj kartę w inny sposób.</string>
<string name="importCancelled">Import anulowany</string>
<string name="exportCancelled">Eksport anulowany</string>
</resources>

View File

@@ -0,0 +1,310 @@
<?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_search">Pesquisar</string>
<string name="action_add">Adicionar</string>
<string name="noGiftCards">Clique no botão \"+\" para adicionar um cartão ou importar a partir do menu \"⋮\".</string>
<string name="noGiftCardsGroup">Crie alguns cartões e, em seguida, atribua-os ao grupo aqui.</string>
<string name="noMatchingGiftCards">Nenhum resultado. Tente alterar sua pesquisa.</string>
<string name="storeName">Nome</string>
<string name="note">Nota</string>
<string name="cardId">ID do cartão</string>
<string name="barcodeType">Tipo de código de barras</string>
<string name="noBarcode">Nenhum código de barras</string>
<string name="star">Adicionar aos favoritos</string>
<string name="unstar">Remover dos favoritos</string>
<string name="cancel">Cancelar</string>
<string name="save">Salvar</string>
<string name="edit">Editar</string>
<string name="delete">Excluir</string>
<string name="confirm">Confirmar</string>
<string name="deleteTitle">Excluir cartão</string>
<string name="share">Compartilhar</string>
<string name="importExport">Importar/Exportar</string>
<string name="exportSuccessfulTitle">Exportado</string>
<string name="importing">Importando…</string>
<string name="exporting">Exportando…</string>
<string name="noCameraPermissionDirectToSystemSetting">Para ler códigos de barras, Catima precisará de acesso à sua câmera. Toque aqui para alterar suas configurações de permissão.</string>
<string name="importOptionFilesystemTitle">Importar dos seus arquivos</string>
<plurals name="selectedCardCount">
<item quantity="one"><xliff:g>%d</xliff:g> selecionado</item>
<item quantity="many"><xliff:g>%d</xliff:g> selecionados</item>
<item quantity="other"><xliff:g>%d</xliff:g> selecionados</item>
</plurals>
<plurals name="deleteCardsTitle">
<item quantity="one">Excluir <xliff:g>%d</xliff:g> cartão</item>
<item quantity="many">Excluir <xliff:g>%d</xliff:g> cartões</item>
<item quantity="other">Excluir <xliff:g>%d</xliff:g> cartões</item>
</plurals>
<string name="deleteConfirmation">Excluir esse cartão permanentemente?</string>
<plurals name="deleteCardsConfirmation">
<item quantity="one">Excluir <xliff:g>%d</xliff:g> cartão permanentemente?</item>
<item quantity="many">Excluir <xliff:g>%d</xliff:g> cartões permanentemente?</item>
<item quantity="other">Excluir <xliff:g>%d</xliff:g> cartões permanentemente?</item>
</plurals>
<string name="ok">OK</string>
<string name="sendLabel">Enviar…</string>
<string name="editCardTitle">Editar cartão</string>
<string name="addCardTitle">Adicionar cartão</string>
<string name="scanCardBarcode">Ler código de barras</string>
<string name="cardShortcut">Atalho de cartões</string>
<string name="noCardsMessage">Adicione um cartão primeiro</string>
<string name="barcodeImageDescriptionWithType">Imagem <xliff:g>%s</xliff:g> do código de barras</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="exportName">Exportar</string>
<string name="importExportHelp">Fazer backup de seus dados permite movê-los para outro dispositivo.</string>
<string name="importSuccessfulTitle">Importado</string>
<string name="importFailedTitle">Falha na importação</string>
<string name="importFailed">Não foi possível importar</string>
<string name="exportFailedTitle">Falha na exportação</string>
<string name="exportFailed">Não foi possível exportar</string>
<string name="storageReadPermissionRequired">Permissão para ler o armazenamento é necessário para esta ação…</string>
<string name="cameraPermissionRequired">Permissão para acessar a câmera é necessária para esta ação…</string>
<string name="permissionReadCardsLabel">Ler cartões Catima</string>
<string name="permissionReadCardsDescription">ler seus cartões Catima e todos os seus detalhes, incluindo notas e imagens</string>
<string name="cameraPermissionDeniedTitle">Não foi possível acessar a câmera</string>
<string name="exportOptionExplanation">Os dados serão gravados em um local de sua escolha.</string>
<string name="importOptionFilesystemExplanation">Escolha um arquivo específico nos seus arquivos.</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>
<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="noCameraFoundGuideText">Seu dispositivo parece não ter uma câmera. Se tiver, tente reiniciar o dispositivo. Caso contrário, tente usar o botão \"Mais opções\" abaixo para adicionar um código de barras manualmente.</string>
<string name="settings_follow_system_orientation">Padrão do sistema</string>
<string name="settings_lock_on_opening_orientation">Bloquear para orientação usada ao abrir o cartão</string>
<string name="importCatimaMessage">Selecionar arquivo <i>catima.zip</i>, exportado do Catima, para importação.
\nPrimeiro, crie-o pelo menu Importar/Exportar em outro aplicativo Catima clicando em Exportar.</string>
<string name="importLoyaltyCardKeychain">Importar do Loyalty Card Keychain</string>
<string name="importLoyaltyCardKeychainMessage">Selecionar arquivo <i>LoyaltyCardKeychain.csv</i>, exportado do Loyalty Card Keychain, para importação.
\nPrimeiro, crie-o pelo menu Importar/Exportar no Loyalty Card Keychain clicando em Exportar.</string>
<string name="setBarcodeId">Definir valor do código de barras</string>
<string name="importStocard">Importar de Stocard</string>
<string name="importVoucherVault">Importar de Cofre de Vouchers</string>
<string name="barcodeId">Valor no código de barras</string>
<string name="sameAsCardId">Igual ao ID</string>
<string name="photos">Fotos</string>
<string name="unsupportedBarcodeType">Este tipo de código de barras não pode ser exibido. É possível que seja trazido em uma versão futura do aplicativo.</string>
<string name="wrongValueForBarcodeType">O valor não é válido para o tipo de código de barras selecionado</string>
<string name="intent_import_card_from_url_share_multiple_text">Quero compartilhar alguns cartões com você</string>
<string name="backImageDescription">Imagem traseira</string>
<string name="frontImageDescription">Imagem frontal</string>
<string name="setFrontImage">Definir imagem frontal</string>
<string name="setBackImage">Definir imagem traseira</string>
<string name="removeImage">Remover imagem</string>
<string name="takePhoto">Tirar uma foto</string>
<string name="updateBarcodeQuestionTitle">Atualizar valor do código de barras?</string>
<string name="exportPasswordHint">Insira sua senha</string>
<string name="passwordRequired">Por favor, insira a senha</string>
<string name="exportPassword">Defina uma senha para proteger o arquivo exportado (opcional)</string>
<string name="app_loyalty_card_keychain">Loyalty Card Keychain</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 esse motivo, inserir um código de barras manualmente pode nem sempre funcionar. É altamente recomendável digitalizar o código de barras com a câmera. Você ainda deseja continuar?</string>
<string name="importOptionApplicationTitle">Usar outro aplicativo</string>
<string name="importOptionApplicationExplanation">Use qualquer aplicativo ou o seu gerenciador de arquivos favorito para abrir um arquivo.</string>
<string name="importOptionApplicationButton">Usar outro aplicativo</string>
<string name="about">Sobre</string>
<string name="about_title_fmt">Sobre <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="selectBarcodeTitle">Selecionar código de barras</string>
<string name="settings">Configurações</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
\ncopyright © 20162020 Branden Archert</string>
<string name="importOptionFilesystemButton">A partir do Sistema de Arquivos</string>
<string name="thumbnailDescription">Miniatura</string>
<string name="starImage">Item favorito</string>
<string name="app_libraries">Bibliotecas open source de terceiros : <xliff:g id="app_libraries_list">%s</xliff:g></string>
<string name="app_resources">Recursos open source de terceiros: <xliff:g id="app_libraries_list">%s</xliff:g></string>
<string name="updateBarcodeQuestionText">Você mudou o ID. Também quer atualizar o código de barras para usar o mesmo valor?</string>
<string name="yes">Sim</string>
<string name="no">Não</string>
<string name="failedGeneratingShareURL">Não foi possível gerar uma URL compartilhável. Por favor, reporte isto.</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_summary">Reduz o uso da bateria em telas OLED</string>
<string name="settings_system_locale">Sistema</string>
<string name="settings_oled_dark">Preto puro como cor de fundo para o tema escuro</string>
<string name="settings_pink_theme">Rosa</string>
<string name="settings_magenta_theme">Magenta</string>
<string name="settings_blue_theme">Azul</string>
<string name="settings_sky_blue_theme">Azul celeste</string>
<string name="settings_green_theme">Verde</string>
<string name="settings_grey_theme">Cinza</string>
<string name="settings_brown_theme">Marrom</string>
<string name="app_contributors">Só foi possível graças a: <xliff:g id="app_contributors">%s</xliff:g></string>
<string name="sort">Ordenar</string>
<string name="showMoreInfo">Mostrar informações</string>
<string name="updateBalance">Atualizar saldo</string>
<string name="failedToRetrieveImageFile">Falha ao recuperar o arquivo de imagem</string>
<string name="barcodeLongPressMessage">Apenas imagens podem ser abertas na galeria</string>
<string name="sort_by_most_recently_used">Usado mais recentemente</string>
<string name="reverse">...em ordem inversa</string>
<string name="sort_by">Ordenar por</string>
<string name="version_history">Histórico de Atualização</string>
<string name="and_data_usage">e uso de dados</string>
<string name="rate_this_app">Avalie este aplicativo</string>
<string name="on_google_play">na Google Play</string>
<string name="report_error">Informar erro</string>
<string name="setIcon">Definir miniatura</string>
<string name="options">Opções</string>
<string name="starred">Favoritos</string>
<string name="duplicateCard">Duplicar</string>
<string name="archived">Cartão arquivado</string>
<string name="unarchived">Cartão desarquivado</string>
<string name="failedLaunchingPhotoPicker">Não foi possível encontrar um aplicativo de galeria compatível</string>
<string name="failedToOpenUrl">Instale um navegador primeiro</string>
<string name="welcome">Bem-vindo(a) ao Catima</string>
<string name="importCards">Importar cartões</string>
<plurals name="viewArchivedCardsWithCount">
<item quantity="one">Ver arquivamento (<xliff:g>%1$d</xliff:g> cartão)</item>
<item quantity="many">Ver arquivamento (<xliff:g>%1$d</xliff:g> cartões)</item>
<item quantity="other">Ver arquivamento (<xliff:g>%1$d</xliff:g> cartões)</item>
</plurals>
<string name="height">Altura:</string>
<string name="switchToBarcode">Mudar para código de barras</string>
<string name="switchToFrontImage">Mudar para imagem frontal</string>
<string name="switchToBackImage">Mudar para imagem traseira</string>
<string name="openFrontImageInGalleryApp">Abrir imagem frontal no aplicativo da galeria</string>
<string name="openBackImageInGalleryApp">Abrir imagem traseira no aplicativo 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 a miniatura</string>
<string name="show_name_below_image_thumbnail">Mostrar nome abaixo da miniatura</string>
<string name="show_note">Mostrar nota</string>
<string name="show_balance">Mostrar saldo</string>
<string name="show_validity">Mostrar validade</string>
<string name="action_more_options">Mais opções</string>
<string name="addWithoutBarcode">Adicionar cartão sem código de barras</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">Adicionar cartão de outra forma</string>
<string name="field_must_not_be_empty">O campo não pode estar vazio</string>
<string name="spend">Gastar</string>
<string name="receive">Receber</string>
<string name="amountParsingFailed">Quantidade inválida</string>
<string name="addFromPdfFile">Selecionar arquivo PDF</string>
<string name="settings_theme_color">Cor do tema</string>
<string name="settings_catima_theme">Catima</string>
<string name="selectColor">Selecionar cor</string>
<string name="settings_violet_theme">Violeta</string>
<string name="sort_by_name">Nome</string>
<string name="sort_by_expiry">Expiração</string>
<string name="credits">Créditos</string>
<string name="license">Licença</string>
<string name="source_repository">Repositório de Origem</string>
<string name="on_github">no GitHub</string>
<string name="translate_platform">no Weblate</string>
<string name="help_translate_this_app">Ajude a traduzir este aplicativo</string>
<string name="shortcutSelectCard">Selecione um cartão</string>
<string name="include_if_asking_support">Se você gostaria de solicitar suporte, inclua as seguintes informações:</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="archive">Arquivar</string>
<string name="unarchive">Desarquivar</string>
<string name="previousCard">Anterior</string>
<string name="nextCard">Próximo</string>
<string name="updateBalanceTitle">Quanto você gastou ou recebeu?</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="settings_category_title_cards">Cartões</string>
<string name="updateBalanceHint">Inserir quantidade</string>
<string name="anyDate">Qualquer data</string>
<string name="settings_category_title_general">Geral</string>
<string name="settings_category_title_privacy">Privacidade</string>
<string name="action_display_options">Configurações de exibição</string>
<string name="show_archived_cards">Mostrar cartões arquivados</string>
<string name="add_manually_warning_title">A digitalização é recomendada</string>
<string name="continue_">Continuar</string>
<string name="errorReadingFile">Não foi possível fazer a leitura do arquivo</string>
<string name="failedLaunchingFileManager">Não foi possível encontrar um gerenciador de arquivos compatível</string>
<string name="pageWithNumber">Página <xliff:g>%d</xliff:g></string>
<string name="multipleBarcodesFoundPleaseChooseOne">Qual dos códigos de barras encontrados você quer usar?</string>
<string name="settings_display_barcode_max_brightness">Clarear visão do código de barras</string>
<string name="settings_display_barcode_max_brightness_summary">Necessário para alguns scanners funcionarem</string>
<string name="balanceSentence">Saldo: <xliff:g>%s</xliff:g></string>
<string name="balance">Saldo</string>
<string name="settings_follow_sensor_orientation">Sempre girar (ignora as configurações do sistema)</string>
<string name="settings_theme">Tema</string>
<string name="settings_light_theme">Claro</string>
<string name="settings_system_theme">Sistema</string>
<string name="settings_dark_theme">Escuro</string>
<string name="moveBarcodeToTopOfScreen">Mover o código de barras para o topo da tela</string>
<string name="settings_card_orientation">Orientação do código de barras</string>
<string name="settings_portrait_orientation">Retrato</string>
<string name="settings_landscape_orientation">Paisagem</string>
<string name="settings_keep_screen_on_summary">Desativa o tempo limite de tela enquanto estiver vendo um cartão</string>
<string name="importSuccessful">Dados importados</string>
<string name="settings_disable_lockscreen_while_viewing_card_summary">Desativa bloqueio de tela enquanto estiver vendo um cartão</string>
<string name="intent_import_card_from_url_share_text">Eu quero compartilhar um cartão com você</string>
<string name="settings_keep_screen_on">Manter tela ligada</string>
<string name="settings_disable_lockscreen_while_viewing_card">Previnir bloqueio de tela</string>
<string name="settings_allow_content_provider_read_title">Permitir que outros aplicativos acessem meus dados</string>
<string name="settings_allow_content_provider_read_summary">Aplicativos ainda precisarão pedir permissão para ter acesso concedido</string>
<string name="group_edit">Editar grupo</string>
<string name="exportSuccessful">Dados exportados</string>
<string name="noGroups">Clique no botão \"+\" para adicionar grupos a serem categorizados.</string>
<string name="group_name_already_in_use">Nome do grupo já em uso</string>
<string name="deleteConfirmationGroup">Excluir grupo?</string>
<string name="failedOpeningFileManager">Instale um gerenciador de arquivos primeiro.</string>
<string name="enter_group_name">Inserir nome do grupo</string>
<string name="groups">Grupos</string>
<string name="noGroupCards">Este grupo está vazio</string>
<string name="group_name_is_empty">O nome do grupo não pode estar vazio</string>
<string name="group_updated">Grupo atualizado</string>
<string name="all">Todos</string>
<string name="addManually">Insira o código de barras manualmente</string>
<string name="chooseExpiryDate">Escolher data de expiração</string>
<string name="moveUp">Mover para cima</string>
<string name="never">Nunca</string>
<string name="moveDown">Mover para baixo</string>
<string name="leaveWithoutSaveTitle">Sair</string>
<string name="leaveWithoutSaveConfirmation">Sair sem salvar?</string>
<string name="groupsList">Grupos: <xliff:g>%s</xliff:g></string>
<string name="editGroup">Editando grupo: <xliff:g>%s</xliff:g></string>
<string name="editBarcode">Editar código de barras</string>
<string name="expiryDate">Data de expiração</string>
<string name="noBarcodeFound">Nenhum código de barras foi encontrado</string>
<string name="addFromImage">Selecionar uma imagem da galeria</string>
<string name="expiryStateSentence">Expira: <xliff:g>%s</xliff:g></string>
<string name="expiryStateSentenceExpired">Expirado: <xliff:g>%s</xliff:g></string>
<string name="card">Cartão</string>
<string name="errorReadingImage">Não foi possível ler a imagem</string>
<string name="points">Pontos</string>
<string name="privacy_policy">Política de Privacidade</string>
<string name="currency">Moeda</string>
<string name="chooseImportType">Importar dados de</string>
<string name="privacy_policy_popup_text">Declaração de Política de Privacidade
\n
\nNENHUM DADO É COLETADO, o que pode ser confimado por qualquer pessoa já que o nosso aplicativo é software livre.</string>
<string name="importCatima">Importar do Catima</string>
<string name="balanceParsingFailed">Saldo inválido</string>
<string name="accept">Aceitar</string>
<string name="importFidme">Importar de FidMe</string>
<string name="importFidmeMessage">Selecione o arquivo <i>fidme-export-request-xxxxxx.zip</i>, exportado de FidMe, para importação e em seguida selecione o tipo de código de barras manualmente.
\nCrie-o pelo seu perfil no FidMe escolhendo \'Proteção de Dados\' (Data Protection) e então clicando em \"Extrair meus dados\".</string>
<string name="importStocardMessage">Selecionar arquivo <i>***.zip</i>, exportado de Stocard, para importação.
\nObtenha-o enviando um e-mail para support@stocardapp.com solicitando exportação dos seus dados.</string>
<string name="importVoucherVaultMessage">Selecionar arquivo<i>vouchervault.json</i>, exportado de Voucher Vault, para importação.
\nPrimeiro, crie-o pressionando em Exportar no Voucher Vault.</string>
<string name="enter_card_id">Insira o ID ou texto escrito no seu cartão</string>
<string name="manually_enter_barcode_instructions">Insira o ID ou texto escrito no seu cartão e clique no código de barras que se parece com o do seu cartão.</string>
<string name="app_license">Software livre com copyleft, licenciado sob a licença GPLv3+</string>
<string name="validFromDate">Válido a partir de</string>
<string name="chooseValidFromDate">Escolha uma data válida a partir de</string>
<string name="validFromSentence">Válido a partir de: <xliff:g>%s</xliff:g></string>
<string name="view_online">Ver online</string>
<string name="importCancelled">Importação cancelada</string>
<string name="exportCancelled">Exportação cancelada</string>
<string name="useBackImage">Usar imagem traseira</string>
<string name="useFrontImage">Usar imagem frontal</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="action_add">Acrescentar</string>
<string name="action_add">Adicionar</string>
<string name="importOptionFilesystemExplanation">Escolha um ficheiro específico a partir do sistema de ficheiros.</string>
<string name="action_search">Pesquisa</string>
<string name="star">Adicionar aos favoritos</string>
@@ -123,7 +123,7 @@
<string name="groupsList">Grupos: <xliff:g>%s</xliff:g></string>
<string name="balanceSentence">Saldo: <xliff:g>%s</xliff:g></string>
<string name="editBarcode">Editar código de barras</string>
<string name="expiryDate">Data de expiração</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>
@@ -152,7 +152,7 @@
<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="setFrontImage">Definir imagem frontal</string>
<string name="setBackImage">Definir imagem de trás</string>
<string name="failedGeneratingShareURL">Não foi possível gerar uma URL partilhável. Por favor reporte isto aos programadores.</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>
@@ -167,7 +167,7 @@
<string name="sort">Ordenar</string>
<string name="sort_by_name">Nome</string>
<string name="sort_by_most_recently_used">Mais usados recentemente</string>
<string name="sort_by_expiry">Expiração</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>
@@ -203,7 +203,7 @@
<string name="shortcutSelectCard">Selecione um cartão</string>
<string name="translate_platform">no Weblate</string>
<string name="starred">Estrela</string>
<string name="showMoreInfo">Mostrar info</string>
<string name="showMoreInfo">Mostrar informação</string>
<string name="options">Opções</string>
<plurals name="balancePoints">
<item quantity="one"><xliff:g>%s</xliff:g> ponto</item>
@@ -230,7 +230,7 @@
<string name="failedLaunchingPhotoPicker">Não foi encontrada nenhuma aplicação de galeria de imagens</string>
<string name="nextCard">Próximo</string>
<string name="previousCard">Anterior</string>
<string name="failedToOpenUrl">Instale primeiro um navegador da Internet</string>
<string name="failedToOpenUrl">Instale primeiro um navegador de Internet</string>
<plurals name="viewArchivedCardsWithCount">
<item quantity="one">Ver arquivo (<xliff:g>%1$d</xliff:g> cartão)</item>
<item quantity="many">Ver arquivo (<xliff:g>%1$d</xliff:g> cartões)</item>
@@ -238,7 +238,7 @@
</plurals>
<string name="welcome">Bem-vindo ao Catima</string>
<string name="failedToRetrieveImageFile">Falha ao recuperar o ficheiro de imagem</string>
<string name="barcodeLongPressMessage">Apenas imagens podem ser abertas na aplicação de galeria</string>
<string name="barcodeLongPressMessage"> 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="cameraPermissionDeniedTitle">Não foi possível aceder à câmara</string>
<string name="importCards">Importar cartões</string>
@@ -272,34 +272,39 @@
<string name="settings_keep_screen_on_summary">Desativa o tempo limite da tela ao visualizar um cartão</string>
<string name="settings_allow_content_provider_read_title">Permitir que outros aplicativos acessem meus dados</string>
<string name="settings_allow_content_provider_read_summary">Os aplicativos ainda terão que solicitar permissão para receber acesso</string>
<string name="settings_oled_dark_summary">Reduz o uso da bateria em telas OLED</string>
<string name="settings_oled_dark_summary">Reduz a utilização da bateria em ecrãs OLED</string>
<string name="icon_header_click_text">Pressione e segure para editar o icone</string>
<string name="settings_category_title_cards">cartões</string>
<string name="settings_category_title_general">geral</string>
<string name="settings_category_title_cards">Cartões</string>
<string name="settings_category_title_general">Geral</string>
<string name="settings_category_title_privacy">Privacidade</string>
<string name="card_id_must_not_be_empty">O ID do cartão não pode estar vazio</string>
<string name="balanceParsingFailed">Saldo inválido</string>
<string name="add_a_card_in_a_different_way">Adicione um cartão de uma forma diferente</string>
<string name="view_online">Exibir online</string>
<string name="view_online">Ver online</string>
<string name="manually_enter_barcode_instructions">Digite o número ID ou o texto em seu cartão e pressione o código de barras que se parece com o que está em seu cartão.</string>
<string name="action_more_options">Mais opções</string>
<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 exibiçã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="field_must_not_be_empty">O campo não pode estar vazio</string>
<string name="show_archived_cards">Exibir cartões arquivados</string>
<string name="show_archived_cards">Mostrar cartões arquivados</string>
<string name="app_name">Catima</string>
<string name="continue_">Continuar</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="spend">Gastar</string>
<string name="receive">Receber</string>
<string name="amountParsingFailed">Montante inválida</string>
<string name="amountParsingFailed">Montante inválido</string>
<string name="settings_follow_sensor_orientation">Rodar sempre (ignora as definições do sistema)</string>
<string name="addFromPdfFile">Selecionar um ficheiro PDF</string>
<string name="errorReadingFile">Não foi possível ler o ficheiro</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="failedLaunchingFileManager">Não foi possível encontrar um gestor de ficheiros suportado</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>
</resources>

View File

@@ -24,10 +24,10 @@
<string name="card">Cardul</string>
<string name="settings_theme">Tema</string>
<string name="all">Toate</string>
<string name="noCardsMessage">Adăugați mai întâi o carte</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="failedParsingImportUriError">Nu s-a putut analiza URI-ul de import</string>
<string name="importExport">Importație/Export</string>
<string name="importExport">Importă/Exportă</string>
<string name="exportName">Exportați</string>
<string name="importSuccessfulTitle">Importat</string>
<string name="importFailedTitle">Importul a eșuat</string>
@@ -262,7 +262,7 @@
<string name="app_resources">Resurse terță deschise: <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>
<string name="accept">Acceptă</string>
<string name="settings_category_title_privacy">Confidențialitate</string>
<string name="show_balance">Afișați balanța</string>
<string name="nextCard">Următor</string>
@@ -302,4 +302,9 @@
<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="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="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>
</resources>

View File

@@ -309,4 +309,9 @@
<string name="pageWithNumber">Страница <xliff:g>%d</xliff:g></string>
<string name="failedLaunchingFileManager">Не найден поддерживаемый файловый менеджер</string>
<string name="multipleBarcodesFoundPleaseChooseOne">Какой из найденных штрих-кодов вы хотите использовать?</string>
<string name="noCameraFoundGuideText">Похоже, ваше устройство не оснащено камерой. Если это не так, попробуйте перезагрузить устройство. В противном случае воспользуйтесь кнопкой \"Ещё\", чтобы добавить штри-хкод другим способом.</string>
<string name="importCancelled">Импорт отменён</string>
<string name="exportCancelled">Экспорт отменён</string>
<string name="useFrontImage">Использовать лицевую сторону</string>
<string name="useBackImage">Использовать заднюю сторону</string>
</resources>

View File

@@ -297,4 +297,9 @@
<string name="amountParsingFailed">Neplatná hodnota</string>
<string name="add_manually_warning_title">Skenovanie je odporúčané</string>
<string name="add_manually_warning_message">V niektorých obchodoch nie je číslo na cenovke totožné s čiarovým kódom, preto je lepšie zoskenovať čiarový kód. Chcete napriek tomu pokračovať?</string>
<string name="addFromPdfFile">Vyberte súbor PDF</string>
<string name="errorReadingFile">Súbor sa nepodarilo prečítať</string>
<string name="failedLaunchingFileManager">Nepodarilo sa nájsť podporovaného správcu súborov</string>
<string name="multipleBarcodesFoundPleaseChooseOne">Ktorý z nájdených čiarových kódov chcete použiť?</string>
<string name="pageWithNumber">Stránka <xliff:g>%d</xliff:g></string>
</resources>

View File

@@ -0,0 +1,310 @@
<?xml version="1.0" encoding="utf-8"?>
<resources xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2" xmlns:tools="http://schemas.android.com/tools">
<string name="action_add">Dodaj</string>
<string name="action_search">Pretraga</string>
<string name="noGiftCards">Klikni + plus znak da dodaš karticu, ili je uvezi pomoću ⋮ menija.</string>
<string name="storeName">Ime</string>
<string name="cardId">Broj kartice</string>
<string name="star">Dodaj u omiljene</string>
<string name="unstar">Ukloni iz omiljenih</string>
<string name="cancel">Otkaži</string>
<string name="save">Sačuvaj</string>
<string name="edit">Izmeni</string>
<string name="delete">Obriši</string>
<string name="confirm">Potvrdi</string>
<string name="deleteTitle">Obriši karticu</string>
<string name="deleteConfirmation">Trajno obriši ovu karticu?</string>
<plurals name="deleteCardsConfirmation">
<item quantity="one">Obriši <xliff:g>%d</xliff:g> karticu trajno?</item>
<item quantity="few">Obriši <xliff:g>%d</xliff:g> kartice trajno?</item>
<item quantity="other">Obriši <xliff:g>%d</xliff:g> kartica trajno?</item>
</plurals>
<string name="ok">Potvrdi</string>
<string name="share">Podeli</string>
<string name="sendLabel">Pošalji…</string>
<string name="editCardTitle">Izmeni karticu</string>
<string name="addCardTitle">Dodaj karticu</string>
<string name="cardShortcut">Prečica kartice</string>
<string name="noCardsMessage">Prvo dodaj karticu</string>
<string name="noCardExistsError">Nije moguće pronaći tu karticu</string>
<string name="failedParsingImportUriError">Nije moguće obraditi uvozni URI</string>
<string name="importExport">Uvoz/Izvoz</string>
<string name="exportName">Izvoz</string>
<string name="importExportHelp">Pravljenje rezervnih kopija podataka omogućava premeštanje na drugi uređaj.</string>
<string name="importSuccessfulTitle">Uvezeno</string>
<string name="importFailedTitle">Uvoz nije uspeo</string>
<string name="importFailed">Nije moguće izvršiti uvoz</string>
<string name="exportSuccessfulTitle">Izvezeno</string>
<string name="exportFailedTitle">Izvoz nije uspeo</string>
<string name="importing">Uvoz…</string>
<string name="exporting">Izvoz…</string>
<string name="storageReadPermissionRequired">Potrebna dozvola za čitanje memorije za ovu akciju…</string>
<string name="barcodeType">Tip bar-koda</string>
<string name="noBarcode">Nema bar-koda</string>
<string name="scanCardBarcode">Skeniraj bar-kod</string>
<string name="barcodeImageDescriptionWithType">Fotografija <xliff:g>%s</xliff:g> bar-koda</string>
<string name="exportOptionExplanation">Podaci će biti sačuvani na lokaciji po tvom izboru.</string>
<string name="importOptionFilesystemExplanation">Odaberi određenu datoteku iz sistema za upravljanje datotekama.</string>
<string name="importOptionFilesystemTitle">Uvezi iz sistema za upravljanje datotekama</string>
<string name="importOptionFilesystemButton">Iz sistema za upravljanje datotekama</string>
<string name="importOptionApplicationTitle">Koristi drugu aplikaciju</string>
<string name="importOptionApplicationExplanation">Koristi bilo koju aplikaciju ili omiljeni menadžer datoteka da bi otvorio datoteku.</string>
<string name="importOptionApplicationButton">Koristi drugu aplikaciju</string>
<string name="about">O aplikaciji</string>
<string name="app_copyright_fmt" tools:ignore="PluralsCandidate">Autorska prava © 2019<xliff:g>%d</xliff:g> Sylvia van Os i saradnici</string>
<string name="app_copyright_old">Bazirana na osnovu aplikcije Loyalty Card Keychain
\nautorska prava © 20162020 Branden Archer</string>
<string name="starImage">Omiljena zvezda</string>
<string name="settings">Podešavanja</string>
<string name="settings_theme">Tema</string>
<string name="settings_system_theme">Sistem</string>
<string name="settings_light_theme">Svetla</string>
<string name="settings_dark_theme">Tamna</string>
<string name="settings_follow_system_orientation">Kao sistem</string>
<string name="settings_follow_sensor_orientation">Uvek rotiraj (ignoriše sistemska podešavanja)</string>
<string name="settings_portrait_orientation">Uspravno</string>
<string name="settings_landscape_orientation">Položeno</string>
<string name="settings_lock_on_opening_orientation">Zaključavanje orijentacije koja se koristi prilikom otvaranja kartice</string>
<string name="settings_display_barcode_max_brightness">Posvetli bar-kod pogled</string>
<string name="settings_display_barcode_max_brightness_summary">Neophodno za rad nekih čitača</string>
<string name="selectBarcodeTitle">Odaberi bar-kod</string>
<string name="settings_card_orientation">Orijentacija bar-koda</string>
<string name="thumbnailDescription">Naslovna fotografija</string>
<string name="settings_disable_lockscreen_while_viewing_card">Spreči zaključavanje ekrana</string>
<string name="settings_allow_content_provider_read_title">Dozvoli drugim aplikacijama da pristupe mojim podacima</string>
<string name="settings_allow_content_provider_read_summary">Aplikacije će i dalje morati da zatraže dozvolu da bi im se odobrio pristup</string>
<string name="intent_import_card_from_url_share_text">Želim da podelim karticu sa tobom</string>
<string name="importSuccessful">Podaci uvezeni</string>
<string name="exportSuccessful">Podaci izvezeni</string>
<string name="enter_group_name">Unesite ime grupe</string>
<string name="noGroups">Klikni + plus znak da dodaš grupe za kategorizaciju.</string>
<string name="noGroupCards">Ova grupa je prazna</string>
<plurals name="groupCardCount">
<item quantity="one"><xliff:g>%d</xliff:g> kartica</item>
<item quantity="few"><xliff:g>%d</xliff:g> kartice</item>
<item quantity="other"><xliff:g>%d</xliff:g> kartica</item>
</plurals>
<string name="group_name_already_in_use">Grupa pod ovim imenom već postoji</string>
<string name="group_name_is_empty">Grupa mora imati ime</string>
<string name="all">Sve</string>
<string name="deleteConfirmationGroup">Obriši grupu?</string>
<string name="moveUp">Pomeri nagore</string>
<string name="moveDown">Pomeri nadole</string>
<string name="leaveWithoutSaveTitle">Izlaz</string>
<string name="leaveWithoutSaveConfirmation">Izlaziš, a nisi sačuvao?</string>
<string name="addManually">Unesite bar-kod ručno</string>
<string name="addFromImage">Izaberi sliku iz galerije</string>
<string name="groupsList">Grupe: <xliff:g>%s</xliff:g></string>
<string name="card">Kartica</string>
<string name="errorReadingImage">Nije moguće očitati sliku</string>
<string name="balance">Stanje</string>
<string name="currency">Valuta</string>
<string name="points">Bodovi</string>
<string name="balanceParsingFailed">Nevažeće stanje</string>
<string name="chooseImportType">Uvoz podataka iz</string>
<string name="app_loyalty_card_keychain">Loyalty Card Keychain</string>
<string name="privacy_policy">Politika privatnosti</string>
<string name="privacy_policy_popup_text">Obaveštenje o politici privatnosti (zahtevano od nekih prodavnica aplikacija):
\n
\nPODACI SE UOPŠTE NE PRIKUPLJAJU, što svako može proveriti jer je naša aplikacija slobodni softver.</string>
<string name="accept">Prihvati</string>
<string name="importCatima">Uvezi iz Catime</string>
<string name="importFidme">Uvoz iz FidMe</string>
<string name="importLoyaltyCardKeychain">Uvezi iz aplikacije Loyalty Card Keychain</string>
<string name="importLoyaltyCardKeychainMessage">Odaberi svoj <i>LoyaltyCardKeychain.csv</i> izvoz iz aplikacije Loyalty Card Keychain za uvoz.
\nKreiraj ga iz menija \"Import/Export\" u aplikaciji Loyalty Card Keychain klikom na \"Export\".</string>
<string name="importStocard">Uvoz iz Stocard</string>
<string name="importVoucherVault">Uvoz iz Voucher Vault</string>
<string name="importVoucherVaultMessage">Odaberi svoj <i>vouchervault.json</i> izvoz iz Voucher Vault za uvoz.
\nKreiraj ga pritiskom na \"Export\" u Voucher Vault aplikaciji.</string>
<string name="barcodeId">Vrednost bar-koda</string>
<string name="sameAsCardId">Isti kao broj kartice</string>
<string name="setBarcodeId">Podesi vrednost bar-koda</string>
<string name="unsupportedBarcodeType">Ovaj tip bar-koda nije podržan te ne može da se prikaže. Možda bude podržan u nekoj novijoj verziji aplikacije.</string>
<string name="wrongValueForBarcodeType">Vrednost nije validna za izabrani tip bar-koda</string>
<string name="intent_import_card_from_url_share_multiple_text">Želim da podelim neke kartice sa tobom</string>
<string name="frontImageDescription">Prednja fotografija kartice</string>
<string name="photos">Fotografije</string>
<string name="setFrontImage">Postavi prednju fotografiju</string>
<string name="removeImage">Ukloni fotografiju</string>
<string name="takePhoto">Uslikaj fotografiju</string>
<string name="updateBarcodeQuestionTitle">Ažuriraj vrednost bar-koda?</string>
<string name="yes">Da</string>
<string name="exportPassword">Podesi lozinku da bi zaštitio svoj izvoz (opciono)</string>
<string name="exportPasswordHint">Unesi lozinku</string>
<string name="failedGeneratingShareURL">Nije moguće generisati URL koji se može podeliti. Molim te da prijaviš ovo developeru.</string>
<string name="turn_flashlight_on">Uključi blic</string>
<string name="turn_flashlight_off">Isključi blic</string>
<string name="settings_locale">Jezik</string>
<string name="settings_oled_dark">Čisto crna pozadina za tamnu temu</string>
<string name="settings_oled_dark_summary">Smanjuje potrošnju baterije na OLED ekranima</string>
<string name="settings_system_locale">Sistem</string>
<string name="selectColor">Odaberi boju</string>
<string name="setIcon">Odaberi naslovnu fotografiju</string>
<string name="settings_theme_color">Boja teme</string>
<string name="settings_catima_theme">Catima</string>
<string name="settings_pink_theme">Roze</string>
<string name="settings_magenta_theme">Magenta</string>
<string name="settings_violet_theme">Ljubičasta</string>
<string name="settings_brown_theme">Braon</string>
<string name="sort">Sortiranje</string>
<string name="showMoreInfo">Prikaži informacije</string>
<string name="updateBalance">Ažuriraj stanje</string>
<string name="failedToRetrieveImageFile">Preuzimanje fotografije nije uspelo</string>
<string name="sort_by_name">Ime</string>
<string name="sort_by_most_recently_used">Nedevno korišćeno</string>
<string name="sort_by_expiry">Ističe</string>
<string name="reverse">…u obrnutom redosledu</string>
<string name="sort_by">Sortiraj po</string>
<string name="version_history">Istorija verzija</string>
<string name="credits">Stanje</string>
<string name="help_translate_this_app">Pomozi da prevedemo aplikaciju</string>
<string name="license">Licenca</string>
<string name="source_repository">Izvorni repozitorijum</string>
<string name="on_github">na GitHub-u</string>
<string name="and_data_usage">i korišćenje podataka</string>
<string name="rate_this_app">Oceni aplikaciju</string>
<string name="on_google_play">na Google Play prodavnici</string>
<string name="report_error">Prijavi grešku</string>
<string name="shortcutSelectCard">Odaberi karticu</string>
<string name="options">Opcije</string>
<string name="starred">Označeni zvezdicom</string>
<string name="duplicateCard">Dupliraj</string>
<string name="archive">Arhiviraj</string>
<string name="unarchive">Ukloni iz arhive</string>
<string name="unarchived">Kartica uklonjena iz arhive</string>
<string name="archived">Kartica dodata u arhivu</string>
<string name="failedLaunchingPhotoPicker">Nije moguće pronaći podržanu galerija aplikaciju</string>
<string name="previousCard">Prethodna</string>
<string name="nextCard">Sledeća</string>
<string name="failedToOpenUrl">Prvo instalirajte internet pregledač</string>
<plurals name="viewArchivedCardsWithCount">
<item quantity="one">Pregledaj arhivu (<xliff:g>%1$d</xliff:g> kartica)</item>
<item quantity="few">Pregledaj arhivu (<xliff:g>%1$d</xliff:g> kartice)</item>
<item quantity="other">Pregledaj arhivu (<xliff:g>%1$d</xliff:g> kartica)</item>
</plurals>
<string name="welcome">Dobrodošli u Catima aplikaciju</string>
<string name="importCards">Uvezi kartice</string>
<string name="updateBalanceTitle">Koliko si potrošio ili primio?</string>
<string name="updateBalanceHint">Unesi vrednost</string>
<string name="currentBalanceSentence">Trenutno stanje: <xliff:g>%s</xliff:g></string>
<string name="validFromDate">Važi do</string>
<string name="anyDate">bilo kog datuma</string>
<string name="chooseValidFromDate">Odaberi datum važenja</string>
<string name="validFromSentence">Važi od: <xliff:g>%s</xliff:g></string>
<string name="height">Visina:</string>
<string name="switchToFrontImage">Prebaci na prednju fotografiju</string>
<string name="switchToBarcode">Prebaci na bar-kod</string>
<string name="openFrontImageInGalleryApp">Otvori prednju fotografiju u galerija aplikaciji</string>
<string name="setBarcodeHeight">Postavi visinu bar-koda</string>
<string name="donate">Doniraj</string>
<string name="icon_header_click_text">Dugi pritisak za izmenu naslovne fotografije</string>
<string name="show_name_below_image_thumbnail">Prikaži naziv ispod naslovne fotografije</string>
<string name="show_note">Prikaži napomenu</string>
<string name="show_balance">Prikaži stanje</string>
<string name="show_validity">Prikaži validnost</string>
<string name="settings_category_title_privacy">Privatnost</string>
<string name="settings_category_title_general">Glavno</string>
<string name="action_display_options">Prikaz</string>
<string name="show_archived_cards">Prikaži arhivirane kartice</string>
<string name="view_online">Pregledaj online</string>
<string name="action_more_options">Više opcija</string>
<string name="app_name">Catima</string>
<plurals name="selectedCardCount">
<item quantity="one"><xliff:g>%d</xliff:g> izabrana</item>
<item quantity="few"><xliff:g>%d</xliff:g> izabrane</item>
<item quantity="other"><xliff:g>%d</xliff:g> izabranih</item>
</plurals>
<string name="noGiftCardsGroup">Kreirajte par kartica, a zatim ih ovde dodeli grupi.</string>
<string name="noMatchingGiftCards">Nema rezultata. Pokušaj da promeniš pretragu.</string>
<string name="note">Napomena</string>
<plurals name="deleteCardsTitle">
<item quantity="one">Obriši <xliff:g>%d</xliff:g> karticu</item>
<item quantity="few">Obriši <xliff:g>%d</xliff:g> kartice</item>
<item quantity="other">Obriši <xliff:g>%d</xliff:g> kartica</item>
</plurals>
<string name="cameraPermissionRequired">Potrebna dozvola za pristup kameri za ovu akciju…</string>
<string name="permissionReadCardsLabel">Pročitaj Catima kartice</string>
<string name="permissionReadCardsDescription">Pročitaj svoje Catima kartice i sve njihove detalje, uključujući beleške i slike</string>
<string name="cameraPermissionDeniedTitle">Nije moguće pristupiti kameri</string>
<string name="exportFailed">Nije moguće izvršiti izvoz</string>
<string name="app_copyright_short">Autorska prava © Sylvia van Os i saradnici</string>
<string name="app_license">Kopileftovani slobodni softver, licenciran GPLv3+</string>
<string name="about_title_fmt">O <xliff:g id="app_name">%s</xliff:g></string>
<string name="debug_version_fmt">Verzija: <xliff:g id="version">%s</xliff:g></string>
<string name="app_libraries">Slobodne biblioteke trećih strana: <xliff:g id="app_libraries_list">%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_keep_screen_on">Drži ekran uključen</string>
<string name="settings_keep_screen_on_summary">Onemogućava vremensko ograničenje gašenja ekrana dok gledate karticu</string>
<string name="settings_disable_lockscreen_while_viewing_card_summary">Onemogućava zaključavanje ekrana dok gledate karticu</string>
<string name="noCameraPermissionDirectToSystemSetting">Za skeniranje bar-kodova, Catimi će trebati pristup tvojoj kameri. Dodirnite ovde da biste promenili podešavanja dozvole.</string>
<string name="groups">Grupe</string>
<string name="group_edit">Izmeni grupu</string>
<string name="group_updated">Grupa ažurirana</string>
<string name="failedOpeningFileManager">Prvo instaliraj menadžer datoteka.</string>
<string name="editGroup">Izmena grupe: <xliff:g>%s</xliff:g></string>
<string name="expiryStateSentence">Ističe: <xliff:g>%s</xliff:g></string>
<string name="expiryStateSentenceExpired">Istekla: <xliff:g>%s</xliff:g></string>
<string name="balanceSentence">Stanje: <xliff:g>%s</xliff:g></string>
<string name="editBarcode">Izmeni bar-kod</string>
<string name="moveBarcodeToTopOfScreen">Premesti bar-kod na vrh ekrana</string>
<plurals name="balancePoints">
<item quantity="one"><xliff:g>%s</xliff:g> bod</item>
<item quantity="few"><xliff:g>%s</xliff:g> boda</item>
<item quantity="other"><xliff:g>%s</xliff:g> bodova</item>
</plurals>
<string name="expiryDate">Datum isteka</string>
<string name="never">Nikad</string>
<string name="chooseExpiryDate">Odaberi datum isteka</string>
<string name="noBarcodeFound">Nije pronađen bar-kod</string>
<string name="importCatimaMessage">Odaberi svoj <i>catima.zip</i> koji želiš da uvezeš.
\nMožeš da ga kreiraš u Catima aplikaciji koju prenosiš iz menija Uvoz/Izvoz aplikacije pritiskom na izvoz.</string>
<string name="importFidmeMessage">Odaberi svoj <i>fidme-export-request-xxxxxx.zip</i> izvoz iz FidMe za uvoz, a zatim ručno izaberite tipove bar-kodova.
\nKreirajte ga iz svog FidMe profila tako što ćeš izabrati \"Data Protection\", a zatim pritisnuti \"Extract my data first\".</string>
<string name="importStocardMessage">Odaberi svoj <i>***.zip</i> izvoz iz Stocard za uvoz.
\nNabavi ga putem e-mail adrese support@stocardapp.com tražeći izvoz vaših podataka.</string>
<string name="backImageDescription">Zadnja fotografija kartice</string>
<string name="setBackImage">Postavi zadnju fotografiju</string>
<string name="passwordRequired">Unesi lozinku</string>
<string name="updateBarcodeQuestionText">Promenio si broj kartice. Da li želiš da ažuriraš i bar-kod da bude iste vrednosti?</string>
<string name="no">Ne</string>
<string name="app_contributors">Saradnici: <xliff:g id="app_contributors">%s</xliff:g></string>
<string name="settings_sky_blue_theme">Nebo plava</string>
<string name="settings_green_theme">Zelena</string>
<string name="barcodeLongPressMessage">Samo fotografije mogu da se otvore u galerija aplikaciji</string>
<string name="settings_blue_theme">Plava</string>
<string name="settings_grey_theme">Siva</string>
<string name="translate_platform">na Weblate-u</string>
<plurals name="groupCardCountWithArchived">
<item quantity="one"><xliff:g>%1$d</xliff:g> kartica (<xliff:g id="archivedCount">%2$d</xliff:g> arhivirana)</item>
<item quantity="few"><xliff:g>%1$d</xliff:g> kartice (<xliff:g id="archivedCount">%2$d</xliff:g> arhivirane)</item>
<item quantity="other"><xliff:g>%1$d</xliff:g> kartica (<xliff:g id="archivedCount">%2$d</xliff:g> arhivirano)</item>
</plurals>
<string name="include_if_asking_support">Ako želiš da zatražiš podršku, ubaci sledeće informacije:</string>
<string name="newBalanceSentence">Novo stanje: <xliff:g>%s</xliff:g></string>
<string name="switchToBackImage">Prebaci na zadnju fotografiju</string>
<string name="openBackImageInGalleryApp">Otvori zadnju fotografiju u galerija aplikaciji</string>
<string name="settings_category_title_cards">Kartice</string>
<string name="addWithoutBarcode">Dodaj karticu bez bar-koda</string>
<string name="enter_card_id">Unesite broj ili tekst sa kartice</string>
<string name="card_id_must_not_be_empty">Unesi broj kartice</string>
<string name="add_a_card_in_a_different_way">Dodaj karticu na drugi način</string>
<string name="field_must_not_be_empty">Ovo polje ne sme biti prazno</string>
<string name="manually_enter_barcode_instructions">Unesi broj ili tekst sa kartice i pritisnite bar-kod koji liči na onaj koji je na kartici.</string>
<string name="add_manually_warning_title">Skeniranje se preporučuje</string>
<string name="add_manually_warning_message">Za neke prodavnice, vrednost bar-koda može da se razlikuje od broja napisanog na kartici. Zbog toga, ručno unešeni bar-kod možda neće uvek funkcionisati. Toplo se preporučuje da umesto toga skeniraš bar-kod kamerom. Da li ipak želiš da nastaviš?</string>
<string name="continue_">Nastavi</string>
<string name="spend">Potroši</string>
<string name="receive">Primi</string>
<string name="amountParsingFailed">Nevažeći iznos</string>
<string name="addFromPdfFile">Odaberi PDF datoteku</string>
<string name="errorReadingFile">Nije moguće pročitati datoteku</string>
<string name="failedLaunchingFileManager">Nije moguće pronaći podržani menadžer datoteka</string>
<string name="multipleBarcodesFoundPleaseChooseOne">Koji od pronađenih bar-kodova želiš da koristiš?</string>
<string name="importCancelled">Uvoz je otkazan</string>
<string name="exportCancelled">Izvoz je otkazan</string>
<string name="useFrontImage">Koristi prednju fotografiju</string>
<string name="useBackImage">Koristi zadnju fotografiju</string>
<string name="pageWithNumber">Strana <xliff:g>%d</xliff:g></string>
<string name="noCameraFoundGuideText">Čini se da tvoj uređaj nema kameru. Ako je ima, pokušaj da ponovo pokreneš uređaj. U suprotnom, koristi dugme Više opcija, koje se nalazi ispod, da bi dodao bar-kod na drugi način.</string>
</resources>

View File

@@ -295,4 +295,9 @@
<string name="addFromPdfFile">PDF dosyası seç</string>
<string name="multipleBarcodesFoundPleaseChooseOne">Bulunan barkodlardan hangisini kullanmak istiyorsunuz?</string>
<string name="pageWithNumber">Sayfa <xliff:g>%d</xliff:g></string>
<string name="noCameraFoundGuideText">Aygıtınızda kamera yok gibi görünüyor. Eğer varsa, aygıtı yeniden başlatmayı deneyin. Aksi takdirde, barkodu başka bir şekilde eklemek için aşağıdaki daha fazla seçenek düğmesini kullanın.</string>
<string name="importCancelled">İçe aktarma iptal edildi</string>
<string name="exportCancelled">Dışa aktarma iptal edildi</string>
<string name="useFrontImage">Ön resmi kullan</string>
<string name="useBackImage">Arka resmi kullan</string>
</resources>

View File

@@ -309,4 +309,9 @@
<string name="spend">Витратити</string>
<string name="receive">Отримайте</string>
<string name="amountParsingFailed">Неправильна сума</string>
<string name="noCameraFoundGuideText">Ваш пристрій може не мати камери. перезавантажте пристрій, якщо це не так. В іншому випадку додайте штрих-код за допомогою кнопки \"Більше опцій\".</string>
<string name="importCancelled">Імпортування скасовано</string>
<string name="exportCancelled">Експортування скасовано</string>
<string name="useFrontImage">Використати фронтальне зображення</string>
<string name="useBackImage">Використати зворотне зображення</string>
</resources>

View File

@@ -288,4 +288,5 @@
<string name="pageWithNumber">Page <xliff:g>%d</xliff:g></string>
<string name="multipleBarcodesFoundPleaseChooseOne">Bạn muốn sử dụng mã vạch nào được tìm thấy?</string>
<string name="failedLaunchingFileManager">Không thể tìm thấy trình quản lý tệp được hỗ trợ</string>
<string name="noCameraFoundGuideText">Có vẻ như thiết bị của bạn không có camera. Nếu có, hãy thử khởi động lại thiết bị. Nếu không, hãy sử dụng nút Tùy chọn khác bên dưới để thêm mã vạch theo cách khác.</string>
</resources>

View File

@@ -288,4 +288,9 @@
<string name="pageWithNumber"><xliff:g>%d</xliff:g></string>
<string name="addFromPdfFile">选择 PDF 文件</string>
<string name="multipleBarcodesFoundPleaseChooseOne">找到的多个条形码中,你希望使用哪个?</string>
<string name="noCameraFoundGuideText">你的设备似乎没有相机。如果的确如此,请尝试重启设备。否则,使用下方的“更多”按钮以另一种方式添加条形码。</string>
<string name="importCancelled">取消了导入</string>
<string name="exportCancelled">取消了导出</string>
<string name="useFrontImage">使用正面图</string>
<string name="useBackImage">使用背面图</string>
</resources>

View File

@@ -234,7 +234,7 @@
<string name="cameraPermissionRequired">這個行動需要使用鏡頭的權限…</string>
<string name="cameraPermissionDeniedTitle">不能使用鏡頭</string>
<string name="updateBalance">更新餘額</string>
<string name="updateBalanceTitle">了多少?</string>
<string name="updateBalanceTitle">花費或收到了多少</string>
<string name="updateBalanceHint">輸入金額</string>
<string name="currentBalanceSentence">餘額:<xliff:g>%s</xliff:g></string>
<string name="newBalanceSentence">新的餘額:<xliff:g>%s</xliff:g></string>
@@ -282,4 +282,10 @@
<string name="errorReadingFile">無法讀取此檔案</string>
<string name="receive">接收</string>
<string name="amountParsingFailed">無效的數值</string>
<string name="continue_">繼續</string>
<string name="multipleBarcodesFoundPleaseChooseOne">你想要使用哪個找到的條碼?</string>
<string name="pageWithNumber"><xliff:g>%d</xliff:g></string>
<string name="add_manually_warning_message">對於某些商店,條碼值與卡片上寫的數字並不相同。因此,手動輸入條碼可能並不總是有效。強烈建議使用相機掃描條碼。你還想繼續嗎?</string>
<string name="spend">花費</string>
<string name="noCameraFoundGuideText">您的裝置似乎沒有相機鏡頭。如果實際上有相機鏡頭,請嘗試重新啟動此裝置,否則請點選下方的「更多」按鈕,以其它方式新增條碼。</string>
</resources>

View File

@@ -83,6 +83,7 @@
<item>es-rAR</item>
<!-- <item>fa</item> -->
<item>fi</item>
<!-- <item>fil</item> -->
<item>fr</item>
<item>he-rIL</item>
<item>hi</item>
@@ -103,11 +104,13 @@
<item>nl</item>
<item>oc</item>
<item>pl</item>
<item>pt-rBR</item>
<item>pt-rPT</item>
<item>ro-rRO</item>
<item>ru</item>
<item>sk</item>
<item>sl</item>
<item>sr</item>
<item>sv</item>
<!-- <item>ti</item> -->
<item>tr</item>

View File

@@ -346,7 +346,9 @@
<string name="failedLaunchingFileManager">Could not find a supported file manager</string>
<string name="multipleBarcodesFoundPleaseChooseOne">Which of the found barcodes do you want to use?</string>
<string name="pageWithNumber">Page <xliff:g>%d</xliff:g></string>
<string name="exportStartedCheckNotifications">Export started, check your notifications for the result</string>
<string name="importStartedCheckNotifications">Import started, check your notifications for the result</string>
<string name="postNotificationsPermissionRequired">Permission to show notifications needed for this action…</string>
<string name="noCameraFoundGuideText">Your device does not seem to have a camera. If it does, try rebooting the device. Otherwise, use the "More options" button below to add a barcode another way.</string>
<string name="importCancelled">Import cancelled</string>
<string name="exportCancelled">Export cancelled</string>
<string name="useFrontImage">Use front image</string>
<string name="useBackImage">Use back image</string>
</resources>

View File

@@ -30,11 +30,13 @@
<locale android:name="nl" />
<locale android:name="oc" />
<locale android:name="pl" />
<locale android:name="pt-BR" />
<locale android:name="pt-PT" />
<locale android:name="ro-RO" />
<locale android:name="ru" />
<locale android:name="sk" />
<locale android:name="sl" />
<locale android:name="sr" />
<locale android:name="sv" />
<locale android:name="tr" />
<locale android:name="uk" />

View File

@@ -574,6 +574,72 @@ public class ImportExportTest {
}
}
class TestTaskCompleteListener implements ImportExportTask.TaskCompleteListener {
ImportExportResult result;
public void onTaskComplete(ImportExportResult result, DataFormat dataFormat) {
this.result = result;
}
}
@Test
@LooperMode(LooperMode.Mode.PAUSED)
public void useImportExportTask() throws FileNotFoundException {
final int NUM_CARDS = 10;
final File sdcardDir = Environment.getExternalStorageDirectory();
final File exportFile = new File(sdcardDir, "Catima.csv");
TestHelpers.addLoyaltyCards(mDatabase, NUM_CARDS);
TestTaskCompleteListener listener = new TestTaskCompleteListener();
// Export to the file
final String password = "123456789";
FileOutputStream fileOutputStream = new FileOutputStream(exportFile);
ImportExportTask task = new ImportExportTask(activity, DataFormat.Catima, fileOutputStream, password.toCharArray(), listener);
TaskHandler mTasks = new TaskHandler();
mTasks.executeTask(TaskHandler.TYPE.EXPORT, task);
// Actually run the task to completion
mTasks.flushTaskList(TaskHandler.TYPE.EXPORT, false, false, true);
shadowOf(Looper.getMainLooper()).idleFor(Duration.ofMillis(5000));
ShadowLooper.runUiThreadTasksIncludingDelayedTasks();
// Check that the listener was executed
assertNotNull(listener.result);
assertEquals(ImportExportResultType.Success, listener.result.resultType());
TestHelpers.getEmptyDb(activity);
// Import everything back from the default location
listener = new TestTaskCompleteListener();
FileInputStream fileStream = new FileInputStream(exportFile);
task = new ImportExportTask(activity, DataFormat.Catima, fileStream, password.toCharArray(), listener);
mTasks.executeTask(TaskHandler.TYPE.IMPORT, task);
// Actually run the task to completion
// I am CONVINCED there must be a better way than to wait on this Queue with a flush.
mTasks.flushTaskList(TaskHandler.TYPE.IMPORT, false, false, true);
shadowOf(Looper.getMainLooper()).idleFor(Duration.ofMillis(5000));
ShadowLooper.runUiThreadTasksIncludingDelayedTasks();
// Check that the listener was executed
assertNotNull(listener.result);
assertEquals(ImportExportResultType.Success, listener.result.resultType());
assertEquals(NUM_CARDS, DBHelper.getLoyaltyCardCount(mDatabase));
checkLoyaltyCards();
// Clear the database for the next format under test
TestHelpers.getEmptyDb(activity);
}
@Test
public void importWithoutColorsV1() {
InputStream inputStream = getClass().getResourceAsStream("catima_v1_no_colors.csv");

View File

@@ -1,7 +1,7 @@
// Top-level build file where you can add configuration options common to all sub-projects/modules.
plugins {
id("com.android.application") version "8.4.1" apply false
id("com.android.application") version "8.5.1" apply false
id("com.github.spotbugs") version "5.1.4" apply false
}

View File

@@ -2,11 +2,11 @@
Copylefted libre software (GPLv3+) card management app.
[![GitHub Version](https://img.shields.io/github/v/release/TheLastProject/Catima.svg?logo=github&label=GitHub)](https://github.com/TheLastProject/Catima/releases)
[![GitHub Version](https://img.shields.io/github/v/release/CatimaLoyalty/Android.svg?logo=github&label=GitHub)](https://github.com/CatimaLoyalty/Android/releases)
[![IzzyOnDroid Version](https://img.shields.io/endpoint?url=https://apt.izzysoft.de/fdroid/api/v1/shield/me.hackerchick.catima)](https://apt.izzysoft.de/fdroid/index/apk/me.hackerchick.catima)
[![Google Play Store Version](https://img.shields.io/endpoint?color=blue&logo=google-play&url=https%3A%2F%2Fplay.cuzi.workers.dev%2Fplay%3Fi%3Dme.hackerchick.catima%26l%3DGoogle%2520Play%26m%3D%24version)](https://play.google.com/store/apps/details?id=me.hackerchick.catima)
![Android CI](https://github.com/TheLastProject/Catima/workflows/Android%20CI/badge.svg)
![Android CI](https://github.com/CatimaLoyalty/Android/workflows/Android%20CI/badge.svg)
[![Translation status](https://hosted.weblate.org/widgets/catima/-/svg-badge.svg)](https://hosted.weblate.org/engage/catima/)
[![Matrix](https://img.shields.io/matrix/catima%3Amatrix.org)](https://matrix.to/#/%23catima:matrix.org)
@@ -17,7 +17,7 @@ Copylefted libre software (GPLv3+) card management app.
<a href="https://play.google.com/store/apps/details?id=me.hackerchick.catima" target="_blank">
<img src="https://play.google.com/intl/en_us/badges/images/generic/en-play-badge.png" alt="Get it on Google Play" height="90"/></a>
[![Feature graphic](https://github.com/TheLastProject/Catima/raw/main/fastlane/metadata/android/en-US/images/featureGraphic.png)](https://catima.app/)
[![Feature graphic](https://github.com/CatimaLoyalty/Android/raw/main/fastlane/metadata/android/en-US/images/featureGraphic.png)](https://catima.app/)
*Logo by [Rose (TangentFoxy)](https://github.com/TangentFoxy), feature graphic by [Ziad OUALHADJ](https://github.com/ziadOUA)*
@@ -41,14 +41,14 @@ Supported barcodes:
# Screenshots
[<img src="https://github.com/TheLastProject/Catima/raw/main/fastlane/metadata/android/en-US/images/phoneScreenshots/screenshot-01.png" width=250>](https://github.com/TheLastProject/Catima/raw/main/fastlane/metadata/android/en-US/images/phoneScreenshots/screenshot-01.png)
[<img src="https://github.com/TheLastProject/Catima/raw/main/fastlane/metadata/android/en-US/images/phoneScreenshots/screenshot-02.png" width=250>](https://github.com/TheLastProject/Catima/raw/main/fastlane/metadata/android/en-US/images/phoneScreenshots/screenshot-02.png)
[<img src="https://github.com/TheLastProject/Catima/raw/main/fastlane/metadata/android/en-US/images/phoneScreenshots/screenshot-03.png" width=250>](https://github.com/TheLastProject/Catima/raw/main/fastlane/metadata/android/en-US/images/phoneScreenshots/screenshot-03.png)
[<img src="https://github.com/TheLastProject/Catima/raw/main/fastlane/metadata/android/en-US/images/phoneScreenshots/screenshot-04.png" width=250>](https://github.com/TheLastProject/Catima/raw/main/fastlane/metadata/android/en-US/images/phoneScreenshots/screenshot-04.png)
[<img src="https://github.com/TheLastProject/Catima/raw/main/fastlane/metadata/android/en-US/images/phoneScreenshots/screenshot-05.png" width=250>](https://github.com/TheLastProject/Catima/raw/main/fastlane/metadata/android/en-US/images/phoneScreenshots/screenshot-05.png)
[<img src="https://github.com/TheLastProject/Catima/raw/main/fastlane/metadata/android/en-US/images/phoneScreenshots/screenshot-06.png" width=250>](https://github.com/TheLastProject/Catima/raw/main/fastlane/metadata/android/en-US/images/phoneScreenshots/screenshot-06.png)
[<img src="https://github.com/TheLastProject/Catima/raw/main/fastlane/metadata/android/en-US/images/phoneScreenshots/screenshot-07.png" width=250>](https://github.com/TheLastProject/Catima/raw/main/fastlane/metadata/android/en-US/images/phoneScreenshots/screenshot-07.png)
[<img src="https://github.com/TheLastProject/Catima/raw/main/fastlane/metadata/android/en-US/images/phoneScreenshots/screenshot-08.png" width=250>](https://github.com/TheLastProject/Catima/raw/main/fastlane/metadata/android/en-US/images/phoneScreenshots/screenshot-08.png)
[<img src="https://github.com/CatimaLoyalty/Android/raw/main/fastlane/metadata/android/en-US/images/phoneScreenshots/screenshot-01.png" width=250>](https://github.com/CatimaLoyalty/Android/raw/main/fastlane/metadata/android/en-US/images/phoneScreenshots/screenshot-01.png)
[<img src="https://github.com/CatimaLoyalty/Android/raw/main/fastlane/metadata/android/en-US/images/phoneScreenshots/screenshot-02.png" width=250>](https://github.com/CatimaLoyalty/Android/raw/main/fastlane/metadata/android/en-US/images/phoneScreenshots/screenshot-02.png)
[<img src="https://github.com/CatimaLoyalty/Android/raw/main/fastlane/metadata/android/en-US/images/phoneScreenshots/screenshot-03.png" width=250>](https://github.com/CatimaLoyalty/Android/raw/main/fastlane/metadata/android/en-US/images/phoneScreenshots/screenshot-03.png)
[<img src="https://github.com/CatimaLoyalty/Android/raw/main/fastlane/metadata/android/en-US/images/phoneScreenshots/screenshot-04.png" width=250>](https://github.com/CatimaLoyalty/Android/raw/main/fastlane/metadata/android/en-US/images/phoneScreenshots/screenshot-04.png)
[<img src="https://github.com/CatimaLoyalty/Android/raw/main/fastlane/metadata/android/en-US/images/phoneScreenshots/screenshot-05.png" width=250>](https://github.com/CatimaLoyalty/Android/raw/main/fastlane/metadata/android/en-US/images/phoneScreenshots/screenshot-05.png)
[<img src="https://github.com/CatimaLoyalty/Android/raw/main/fastlane/metadata/android/en-US/images/phoneScreenshots/screenshot-06.png" width=250>](https://github.com/CatimaLoyalty/Android/raw/main/fastlane/metadata/android/en-US/images/phoneScreenshots/screenshot-06.png)
[<img src="https://github.com/CatimaLoyalty/Android/raw/main/fastlane/metadata/android/en-US/images/phoneScreenshots/screenshot-07.png" width=250>](https://github.com/CatimaLoyalty/Android/raw/main/fastlane/metadata/android/en-US/images/phoneScreenshots/screenshot-07.png)
[<img src="https://github.com/CatimaLoyalty/Android/raw/main/fastlane/metadata/android/en-US/images/phoneScreenshots/screenshot-08.png" width=250>](https://github.com/CatimaLoyalty/Android/raw/main/fastlane/metadata/android/en-US/images/phoneScreenshots/screenshot-08.png)
# Moving data from other apps

View File

@@ -0,0 +1,3 @@
- Podpora skenování PDF souborů pro čárový kód
- Podpora obrazových souborů s více čárovými kódy
- Drobné UI opravy

View File

@@ -0,0 +1 @@
- Různé opravy a vylepšení

View File

@@ -1,5 +1,5 @@
- Wenn du eine Karten-ID bearbeitest, wird die vorhandene ID zu Beginn ausgefüllt. (Pull #94 (https://github.com/brarcher/loyalty-card-locker/pull/94))
- Begrenzen der Breite der erzeugten Barcodes, um die Speichernutzung und Fehler durch Speicherüberschreitung zu reduzieren. (Pull #103 (https://github.com/brarcher/loyalty-card-locker/pull/103))
- Beim Bearbeiten einer Karte wird die Schaltfläche "Karte eingeben" in "Karte bearbeiten" geändert, wenn bereits eine Karten-ID existiert. (Pull #104 (https://github.com/brarcher/loyalty-card-locker/pull/104))
- Farbschema angepasst so, dass mit dem App-Symbol kompatibel ist und das Layout beim Anzeigen einer Karte übersichtlicher gestaltet. (Pull #107 (https://github.com/brarcher/loyalty-card-locker/pull/107))
- Hinzufügen eines Intro-Assistenten, der beim ersten Start der App gestartet wird. (Pull #108 (https://github.com/brarcher/loyalty-card-locker/pull/108))
- Karten-ID beim Bearbeiten vorab ausfüllen. (Pull #94 (https://github.com/brarcher/loyalty-card-locker/pull/94))
- Barcode-Breite begrenzen, um Speicherprobleme zu vermeiden. (Pull #103 (https://github.com/brarcher/loyalty-card-locker/pull/103))
- Bearbeiten“ statt „Hinzufügen“ bei existierender ID anzeigen. (Pull #104 (https://github.com/brarcher/loyalty-card-locker/pull/104))
- Farbschema und Layout überarbeitet. (Pull #107 (https://github.com/brarcher/loyalty-card-locker/pull/107))
- Einführungsassistent bei der ersten Nutzung hinzugefügt. (Pull #108 (https://github.com/brarcher/loyalty-card-locker/pull/108))

View File

@@ -1,7 +1,7 @@
- Arabisch wird unterstützt
- Anzeige der archivierten Kartenanzahl in der Gruppenübersicht
- Guthabenanalyse - Fehler beseitigt (Arabisch bzw. Sprachen mit nicht-westlichen Zahlen wurden nicht gespeichert)
- Benutzerdefiniertes Thema wird nun korrekt auf dem Hauptbildschirm gezeigt
- Verbesserte Anzeige ausgewählter Karten
- Kein Absturz beim Verlassen der Kartenansicht bei Karten mit Ablaufdatum/Guthaben
- Rückwärtspfeil in der Kartenansicht zeigt nicht mehr die falsche Richtung (RTL-Layout)
- Arabisch hinzugefügt
- Archivierte Kartenanzahl anzeigen
- Fehler beim Parsen der Salden behoben
- Theme auf Hauptbildschirm korrigiert
- Anzeige der ausgewählten Karten verbessert
- Absturz bei RTL-Layouts behoben
- Zurück-Pfeil in RTL-Layouts korrigiert

View File

@@ -1,2 +1,2 @@
- Eine Änderung in v0.11 reduzierte die Speichernutzung beim Zeichnen von Barcodes, wirkte sich aber auf die Barcode-Abmessungen aus. Dies wurde nun geändert, um die Barcode-Abmessungen beizubehalten und gleichzeitig die Speichernutzung zu reduzieren. (Pull #126 (https://github.com/brarcher/loyalty-card-locker/pull/126))
- Aktualisierung der deutschen und franz. Übersetzungen. (pull #122 (https://github.com/brarcher/loyalty-card-locker/pull/122), pull #124 (https://github.com/brarcher/loyalty-card-locker/pull/124), pull #125 (https://github.com/brarcher/loyalty-card-locker/pull/125))
- Änderung in v0.11: Barcode-Dimensionen beibehalten und gleichzeitig den Speicherverbrauch reduzieren. (Pull #126 (https://github.com/brarcher/loyalty-card-locker/pull/126))
- Deutsche und französische Übersetzungen aktualisiert. (Pull #122 (https://github.com/brarcher/loyalty-card-locker/pull/122), Pull #124 (https://github.com/brarcher/loyalty-card-locker/pull/124), Pull #125 (https://github.com/brarcher/loyalty-card-locker/pull/125))

View File

@@ -0,0 +1,3 @@
- Unterstützung für das Scannen von PDF-Dateien nach Barcodes
- Unterstützung für Bilddateien mit mehreren Barcodes
- Kleinere UI-Korrekturen

View File

@@ -0,0 +1 @@
- Verschiedene Fehlerbehebungen und Verbesserungen bei der Handhabung der Balance

View File

@@ -0,0 +1,4 @@
- Unterstützung für die Erstellung einer Karte beim Teilen von einfachem Text
- Anzeige des Bildtyps anstelle des Barcodes unter Bildern
- Behebung eines möglichen Absturzes beim Versuch, ein Backup aus der Nextcloud-App zu importieren
- Verbesserte Unterstützung für Geräte ohne Kamera

View File

@@ -0,0 +1,3 @@
- Lange Store-Namen in der Vorschau auf mehrere Zeilen aufteilen
- Vorder- oder Hintergrundbild im Thumbnail-Menü verwenden
- Kleine Fehlerbehebungen bei Import/Export

View File

@@ -1,3 +1,3 @@
- Hinzufügen einer Menüoption zum Sperren der Bildschirmdrehung, wenn eine Karte angezeigt wird. Wenn sie gesperrt ist, wird der Bildschirm in seine "natürliche" Ausrichtung übergehen und eine weitere Bildschirmdrehung wird blockiert (Pull #128 (https://github.com/brarcher/loyalty-card-locker/pull/128))
- Wenn eine Karte auf dem Hauptbildschirm ausgewählt wird, aber nicht geladen werden kann, schlägt die Anwendung fehl und gibt eine Meldung aus. (Pull #132 (https://github.com/brarcher/loyalty-card-locker/pull/132))
- Der Fall, dass Layout-IDs für den Intro-Assistenten nicht gefunden werden konnten, wurde behoben. (pull #128 (https://github.com/brarcher/loyalty-card-locker/pull/128))
- Menüoption zum Sperren der Bildschirmdrehung beim Anzeigen einer Karte hinzugefügt. (Pull #128 (https://github.com/brarcher/loyalty-card-locker/pull/128))
- Wenn eine Karte nicht geladen werden kann, zeigt die App eine Fehlermeldung an. (Pull #132 (https://github.com/brarcher/loyalty-card-locker/pull/132))
- Fehler bei fehlenden Layout-IDs für das Einführungstutorial behoben. (Pull #128 (https://github.com/brarcher/loyalty-card-locker/pull/128))

View File

@@ -1,5 +1,5 @@
- Unterstützung für das Hinzufügen von Shortcuts zum Startbildschirm beim Hinzufügen oder Bearbeiten einer Karte. (Pull #155 (https://github.com/brarcher/loyalty-card-locker/pull/155))
- Widget entfernen, da es ein schlechter Ersatz für Shortcuts war. (Pull #155 (https://github.com/brarcher/loyalty-card-locker/pull/155))
- Exportieren von Backups unter Android 7+ korrigiert. (pull #153 (https://github.com/brarcher/loyalty-card-locker/pull/153))
- Genauere Angabe des Mime-Typs beim Exportieren von Sicherungsdaten. (pull #156 (https://github.com/brarcher/loyalty-card-locker/pull/156))
- Behebt einen Fehler, bei dem eine Karte nicht bearbeitet werden konnte. (pull #155 (https://github.com/brarcher/loyalty-card-locker/pull/155))
- Unterstützung für Home-Screen-Shortcuts beim Hinzufügen oder Bearbeiten einer Karte. (Pull #155 (https://github.com/brarcher/loyalty-card-locker/pull/155))
- Widget entfernt, da es keine gute Alternative zu Shortcuts war. (Pull #155 (https://github.com/brarcher/loyalty-card-locker/pull/155))
- Fehler beim Export von Backups auf Android 7+ behoben. (Pull #153 (https://github.com/brarcher/loyalty-card-locker/pull/153))
- Genaueren MIME-Typ beim Export von Backup-Daten gemeldet. (Pull #156 (https://github.com/brarcher/loyalty-card-locker/pull/156))
- Fehler beim Bearbeiten von Karten behoben. (Pull #155 (https://github.com/brarcher/loyalty-card-locker/pull/155))

View File

@@ -1,12 +1,12 @@
- Möglichkeit nach einer Karte zu suchen (#320 (https://github.com/brarcher/loyalty-card-locker/pull/320))
- Möglichkeit Treuekarten weiterzugeben und zu empfangen (#321 (https://github.com/brarcher/loyalty-card-locker/pull/321))
- Unterstützung des dunklen Modus (#322 (https://github.com/brarcher/loyalty-card-locker/pull/322))
- Treuekarten können jetzt barcodefrei sein (d.h. keinen Barcode haben) (#324 (https://github.com/brarcher/loyalty-card-locker/pull/324))
- Notizen können sich über mehrere Zeilen erstrecken (#326 (https://github.com/brarcher/loyalty-card-locker/pull/326))
- Größe von Notizen verbessert (#319 (https://github.com/brarcher/loyalty-card-locker/pull/319))
- Sichtbarkeit von Benachrichtigungen und App-Symbolen verbessert (#330 (https://github.com/brarcher/loyalty-card-locker/pull/330))
- Ziel-SDK auf Android 10 gesetzt
- Verbesserte Übersetzungen:
- Suche nach Karten hinzugefügt. (#320 (https://github.com/brarcher/loyalty-card-locker/pull/320))
- Karten teilen und empfangen möglich. (#321 (https://github.com/brarcher/loyalty-card-locker/pull/321))
- Unterstützung für den Dunkelmodus. (#322 (https://github.com/brarcher/loyalty-card-locker/pull/322))
- Treuekarten können jetzt ohne Barcode gespeichert werden. (#324 (https://github.com/brarcher/loyalty-card-locker/pull/324))
- Notizen können mehrere Zeilen umfassen. (#326 (https://github.com/brarcher/loyalty-card-locker/pull/326))
- Verbesserungen bei der Notizgröße. (#319 (https://github.com/brarcher/loyalty-card-locker/pull/319))
- Benachrichtigungen und App-Icon sichtbarer gemacht. (#330 (https://github.com/brarcher/loyalty-card-locker/pull/330))
- Ziel-SDK auf Android 10 aktualisiert.
- Übersetzungen verbessert:
- Deutsch
- Italienisch
- Niederländisch

View File

@@ -1,11 +1,11 @@
- BREAKING CHANGE: Das Backupformat hat sich geändert, siehe https://github.com/TheLastProject/Catima/wiki/Export-format
- BREAKING CHANGE: Das URL-Sharing-Format wurde geändert, siehe https://github.com/TheLastProject/Catima/wiki/Card-sharing-URL-format
- Aktivieren/Deaktivieren der Taschenlampe während des Scannens ermöglicht
- UPC-E-Unterstützung
- Hinzufügen eines Vorder- und Rückseitenfotos zu jeder Karte
- Imports passwortgeschützter Zip-Dateien
- Imports von Stocard (Beta)
- Unnötige Leerzeichen in Notizen aus dem Fidme-Import korrigiert
- Unterstützung des neuen Voucher Vault-Exportformats
- Aktionsschaltflächen repariert, die sich hinter anderen UI-Elementen auf Android 4 befanden
- Oberer Rand der Treuekarten Leiste repariert
- BREAKING CHANGE: Backup-Format geändert, siehe https://github.com/TheLastProject/Catima/wiki/Export-format
- BREAKING CHANGE: URL-Sharing-Format geändert, siehe https://github.com/TheLastProject/Catima/wiki/Card-sharing-URL-format
- Taschenlampe beim Scannen an/aus
- UPC-E-Unterstützung hinzugefügt
- Fotos von Vorder- und Rückseite der Karte hinzufügen
- Passwortgeschützte Zip-Dateien importieren
- Stocard-Import (Beta) unterstützt
- Leerzeichen bei Fidme-Import entfernt
- Neues Voucher Vault-Format unterstützt
- Floating Action Buttons auf Android 4 repariert
- Oberer Rand der Appbar repariert

View File

@@ -1,4 +1,4 @@
- Bildschirmhelligkeit wird beim Anzeigen einer Karte auf das Maximum erhöht, um das Scannen zu verbessern. (pull #54 (https://github.com/brarcher/loyalty-card-locker/pull/54))
- Bestätigung beim Löschen einer Karte. (pull #55 (https://github.com/brarcher/loyalty-card-locker/pull/55))
- Deutsche Übersetzung (pull #57 (https://github.com/brarcher/loyalty-card-locker/pull/57)) und Tschechisch (pull #58 (https://github.com/brarcher/loyalty-card-locker/pull/58)) hinzugefügt.
- Vereinfachung der italienischen Übersetzung. (pull #66 (https://github.com/brarcher/loyalty-card-locker/pull/66))
- Bildschirmhelligkeit auf Maximum beim Anzeigen einer Karte. (Pull #54 (https://github.com/brarcher/loyalty-card-locker/pull/54))
- Bestätigung beim Löschen von Karten hinzugefügt. (Pull #55 (https://github.com/brarcher/loyalty-card-locker/pull/55))
- Deutsche (Pull #57 (https://github.com/brarcher/loyalty-card-locker/pull/57)) und tschechische (Pull #58 (https://github.com/brarcher/loyalty-card-locker/pull/58)) Übersetzungen hinzugefügt.
- Italienische Übersetzung verbessert. (Pull #66 (https://github.com/brarcher/loyalty-card-locker/pull/66))

View File

@@ -1,7 +1,7 @@
Der "Locker" -Teil des Namens war nicht intuitiv. Um dies zu ändern, wurde von betsythefc ein neues Anwendungssymbol erstellt, das den Zweck der Anwendung besser darstellt: die Speicherung von Kundenkarten, die Barcodes verwenden. Zusammen mit diesem neuen Symbol wurde der Name der Anwendung in "Kundenkarten-Schlüsselbund" geändert.
Der Name „Locker“ war missverständlich. Ein neues Icon von betsythefc und der neue Name „Loyalty Card Keychain“ verdeutlichen den Zweck der App.
Zusätzliche Funktionen/Verbesserungen:
- Das Importieren/Exportieren von Karten wurde flexibler gestaltet. (pull #76 (https://github.com/brarcher/loyalty-card-locker/pull/76))
- Übersetzung für Litauisch hinzugefügt. (pull #62 (https://github.com/brarcher/loyalty-card-locker/pull/62))
- Übersetzung für Französisch hinzugefügt. (pull #80 (https://github.com/brarcher/loyalty-card-locker/pull/80))
- Flexibleres Import/Export von Karten. (Pull #76 (https://github.com/brarcher/loyalty-card-locker/pull/76))
- Litauische Übersetzung hinzugefügt. (Pull #62 (https://github.com/brarcher/loyalty-card-locker/pull/62))
- Französische Übersetzung hinzugefügt. (Pull #80 (https://github.com/brarcher/loyalty-card-locker/pull/80))

View File

@@ -1,2 +1,4 @@
- Support for creating a card when sharing plain text
- Display image type instead of barcode below images
- Display image type instead of barcode below images
- Fix possible crash when trying to import a backup from the Nextcloud app
- Improved support for devices without camera

View File

@@ -0,0 +1,4 @@
- Allow long store names in preview to split over multiple lines
- Option to use front of back image in thumbnail menu
- Minor import/export fixes
- Minor UI fixes

View File

@@ -1,5 +1,5 @@
- Al editar un ID de tarjeta, rellenar previamente el ID existente para empezar. (pull #94 (https://github.com/brarcher/loyalty-card-locker/pull/94))
- Limitar el ancho de los códigos de barras generados para reducir el uso de memoria y los errores de memoria insuficiente. (pull #103 (https://github.com/brarcher/loyalty-card-locker/pull/103))
- Al editar una tarjeta, cambiar el botón "Introducir tarjeta" por "Editar tarjeta" si ya existe un ID de tarjeta. (pull #104 (https://github.com/brarcher/loyalty-card-locker/pull/104))
- Cambiar la combinación de colores para que sea más suave y compatible con el icono de la aplicación, y cambiar el diseño al ver una tarjeta para que sea más limpio. (pull #107 (https://github.com/brarcher/loyalty-card-locker/pull/107))
- Añadir un asistente de introducción que se lanza en el primer lanzamiento de la aplicación. (pull #108 (https://github.com/brarcher/loyalty-card-locker/pull/108))
- Al editar un ID de tarjeta, pre-poblar el ID existente para comenzar. (pull #94 (https://github.com/brarcher/loyalty-card-locker/pull/94))
- Limitar el ancho de los códigos de barras generados para reducir el uso de memoria y los errores de memoria. (pull #103 (https://github.com/brarcher/loyalty-card-locker/pull/103))
- Cuando edite una tarjeta, cambie el botón "Enter Card" para decir "Editar Tarjeta" si ya existe una tarjeta ID. (pull #104 (https://github.com/brarcher/loyalty-card-locker/pull/104))
- Cambiar el esquema de color para que sea más suave y compatible con el icono de la aplicación, y cambiar el diseño al ver una tarjeta para que sea más limpio. (pull #107 (https://github.com/brarcher/loyalty-card-locker/pull/107))
- Añadir un asistente de introducción que se inicia en el primer lanzamiento de la aplicación. (pull #108 (https://github.com/brarcher/loyalty-card-locker/pull/108))

View File

@@ -1,7 +1,7 @@
- Soporte de idioma árabe
- Muestra el número total de tarjetas archivadas en vista general del grupo
- Corrección de errores en el análisis de saldo (no se podían guardar tarjetas en árabe y otros idiomas con números no occidentales)
- Corrección de tema personalizado no se aplicaba correctamente a la pantalla principal
- Mejoras en la pantalla de selección de tarjetas
- Corrección error de cierre al salir de la vista de tarjeta en diseños RTL para tarjetas con caducidad o saldo
- Corrección de la flecha para volver en la vista de tarjeta que apunta en la dirección incorrecta en diseños RTL
- Soporte para idioma árabe
- Mostrar el recuento de tarjetas archivadas en la descripción general del grupo
- Se corrigieron errores de análisis de equilibrio (las tarjetas no se podían guardar en árabe ni en otros idiomas con números no occidentales)
- Se solucionó el problema de que el tema personalizado no se aplicaba correctamente a la pantalla principal
- Mejorar la visualización de las tarjetas seleccionadas
- Se solucionó el bloqueo al salir de la vista de tarjeta en diseños RTL para tarjetas con vencimiento o saldo
- Se corrigió la flecha hacia atrás en la vista de tarjeta que apuntaba en la dirección incorrecta en los diseños RTL

View File

@@ -1,2 +1,2 @@
- Un cambio en la versión v0.11 redujo el uso de memoria en la generación de códigos de barras, pero afectó las dimensiones. Se cambió para mantener las dimensiones mientras se reduce el uso de memoria. (pull #126 (https://github.com/brarcher/loyalty-card-locker/pull/126))
- Actualizadas las traducciones en alemán y francés. (pull #122 (https://github.com/brarcher/loyalty-card-locker/pull/122), pull #124 (https://github.com/brarcher/loyalty-card-locker/pull/124), pull #125 (https://github.com/brarcher/loyalty-card-locker/pull/125))
- Un cambio en la versión 0.11 redujo el uso de memoria para el dibujo de códigos de barras, pero afectó las dimensiones de los códigos de barras. Esto ahora se modificó para mantener las dimensiones de los códigos de barras y reducir el uso de memoria. (pull n.° 126 (https://github.com/brarcher/loyalty-card-locker/pull/126))
- Actualización de las traducciones al alemán y al francés. (pull #122 (https://github.com/brarcher/loyalty-card-locker/pull/122), pull #124 (https://github.com/brarcher/loyalty-card-locker/pull/124), pull #125 (https://github.com/brarcher/loyalty-card-locker/pull/125))

View File

@@ -1,4 +1,6 @@
- Refinado la secuencia de "Añadir tarjeta"
- Mejora de la secuencia de validación
- Reparación de caso de borde causando un estado invalido de la UI haciendo que se muestre el archivo
- Usar el tema o color de la tarjeta para la barra de navegación (Android 8.1+)
- Se mejoró el flujo de trabajo "Agregar tarjeta"
- Mejoras en el proceso de validación.
- Se corrigió un error que causaba que la interfaz de usuario entrara en un estado no válido al cambiar la vista del archivo.
- El color del sistema o del mapa se utiliza para la barra de navegación (Android 8.1+)
- Se actualizó el selector de fechas para fechas de validez y vencimiento.
- Se agregó una opción para forzar la rotación de la pantalla (ignora la configuración del sistema)

View File

@@ -0,0 +1,4 @@
- Android 14
- Abrir el icono de la tarjeta en la galería al tocarla
- Mejorar el diseño de la pestaña Fotos en la vista de edición
- Actualizar la pantalla de gastos para que también admita la recepción

View File

@@ -0,0 +1,3 @@
- Soporte para escanear archivos PDF en busca de códigos de barras
- Compatibilidad con archivos de imagen con múltiples códigos de barras
- Correcciones menores en la interfaz de usuario

View File

@@ -0,0 +1 @@
- Varias correcciones y mejoras en el manejo del equilibrio

View File

@@ -0,0 +1,4 @@
- Permitir que los nombres de tiendas largos en la vista previa se dividan en varias líneas
- Opción para usar la imagen frontal o posterior en el menú de miniaturas
- Correcciones menores de importación y exportación.
- Correcciones menores en la interfaz de usuario

View File

@@ -0,0 +1,4 @@
- Cible Android 14
- Ouvre l'icône de la carte dans la galerie au toucher
- Améliore la conception de l'onglet "Photos" en mode édition
- Mis à jour l'écran des dépenses pour prendre également en charge la réception

View File

@@ -0,0 +1,3 @@
- Prise en charge de la numérisation des fichiers PDF pour les codes-barres
- Prise en charge des fichiers d'image avec plusieurs codes-barres
- Corrections mineures de l'interface utilisateur

View File

@@ -0,0 +1 @@
- Divers correctifs et améliorations pour la gestion du solde

View File

@@ -0,0 +1,4 @@
- Prise en charge de la création d'une carte lors du partage de texte brut
- Affiche le type d'image au lieu du code-barre sous les images
- Correction d'un crash possible lors de la tentative d'importation d'une sauvegarde depuis l'application Nextcloud
- Amélioration de la prise en charge des appareils sans caméra

View File

@@ -0,0 +1,3 @@
- Permettre aux noms de magasins longs dans l'aperçu d'être divisés sur plusieurs lignes
- Possibilité d'utiliser l'image avant ou arrière dans le menu des vignettes
- Corrections mineures pour l'importation et l'exportation

View File

@@ -0,0 +1 @@
- संतुलन प्रबंधन के लिए विभिन्न सुधार और सुधार

View File

@@ -0,0 +1,4 @@
- सादा पाठ साझा करते समय कार्ड बनाने का समर्थन करता है
- छवियों के नीचे बारकोड के बजाय छवि प्रकार प्रदर्शित करता है
- नेक्स्टक्लाउड ऐप से बैकअप आयात करने का प्रयास करते समय संभावित क्रैश को ठीक किया गया
- बिना कैमरे वाले उपकरणों के लिए बेहतर समर्थन

View File

@@ -0,0 +1,3 @@
- पूर्वावलोकन में लंबे स्टोर नामों को कई पंक्तियों में विभाजित करने की अनुमति दें
- थंबनेल मेनू में पीछे की छवि के सामने का उपयोग करने का विकल्प
- मामूली आयात/निर्यात सुधार

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