mirror of
https://github.com/CatimaLoyalty/Android.git
synced 2025-12-24 15:47:53 -05:00
Compare commits
612 Commits
create-pul
...
v2.35.1
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
43c9e7f7ac | ||
|
|
b410f100e8 | ||
|
|
e2413f8538 | ||
|
|
745f1ba8cc | ||
|
|
482b16e772 | ||
|
|
f284c4807f | ||
|
|
9927d6a544 | ||
|
|
0b4c474ece | ||
|
|
344e853839 | ||
|
|
865f5f67d7 | ||
|
|
5f8e7ab702 | ||
|
|
6ac864e3aa | ||
|
|
e0a012f3a4 | ||
|
|
5f1ae9db8e | ||
|
|
dcb5cd882e | ||
|
|
9d27df7e10 | ||
|
|
a11682181c | ||
|
|
a9b7f47053 | ||
|
|
809a91b16a | ||
|
|
2c6e56342c | ||
|
|
df2b7ffc1b | ||
|
|
3c5f28b496 | ||
|
|
7942bfc3f7 | ||
|
|
9e8e7fd8c2 | ||
|
|
e8c5caa2f3 | ||
|
|
b697aa389a | ||
|
|
a19f5b91a8 | ||
|
|
e1ebeec623 | ||
|
|
7734727e16 | ||
|
|
d4d1e9e649 | ||
|
|
b3b45fcc50 | ||
|
|
3bf63b855f | ||
|
|
c24ac94307 | ||
|
|
94c8f1f82d | ||
|
|
5d455a31b3 | ||
|
|
b43fe087d6 | ||
|
|
c7c414c218 | ||
|
|
775b55fd23 | ||
|
|
4cb601e0ce | ||
|
|
c42533aba5 | ||
|
|
df919417cb | ||
|
|
90afc5594f | ||
|
|
7b62e1871d | ||
|
|
fc483b449b | ||
|
|
62dbc9c97f | ||
|
|
ed9beb0752 | ||
|
|
6b750ff84b | ||
|
|
17be2599f0 | ||
|
|
20820c27f8 | ||
|
|
b83f629c09 | ||
|
|
bfc79f6d97 | ||
|
|
e297620ea2 | ||
|
|
83e5240871 | ||
|
|
2e68290d0c | ||
|
|
690d405f87 | ||
|
|
4c711a991a | ||
|
|
79795ff328 | ||
|
|
c178fb230e | ||
|
|
0acaf0598a | ||
|
|
7b99bf86fa | ||
|
|
6cf68abfc7 | ||
|
|
0e95dadb6c | ||
|
|
77b525809d | ||
|
|
d624316207 | ||
|
|
353c8090a9 | ||
|
|
7928cf8332 | ||
|
|
75bcade01c | ||
|
|
2d33774b56 | ||
|
|
26e5a1fbab | ||
|
|
b516736b6c | ||
|
|
881b3fefef | ||
|
|
a4c14e3c88 | ||
|
|
2943b64634 | ||
|
|
0af74ef8de | ||
|
|
8556507c6a | ||
|
|
ff8c662423 | ||
|
|
9314637094 | ||
|
|
8def5cbe5b | ||
|
|
6c7f21d6fd | ||
|
|
edc3c38d14 | ||
|
|
4045566514 | ||
|
|
9b5af3b221 | ||
|
|
b5fc0af979 | ||
|
|
4c643b3c61 | ||
|
|
01e198c94b | ||
|
|
6b09656164 | ||
|
|
21b051c422 | ||
|
|
9a8fa4ad1a | ||
|
|
2ac2f07c80 | ||
|
|
e893923164 | ||
|
|
ebacb6fe4c | ||
|
|
fb329f410a | ||
|
|
f95d7d62dd | ||
|
|
482303b775 | ||
|
|
d02a359cc3 | ||
|
|
9b24158acc | ||
|
|
cf65476f16 | ||
|
|
02d04614e0 | ||
|
|
a543d4d4bf | ||
|
|
f4de708e42 | ||
|
|
f1079f4e5d | ||
|
|
4d09077b2f | ||
|
|
f62fc879c5 | ||
|
|
0b24a76b19 | ||
|
|
921773ee59 | ||
|
|
6d012413bc | ||
|
|
caeba57a42 | ||
|
|
e12204771f | ||
|
|
cf9612052a | ||
|
|
b0081919c9 | ||
|
|
7c2959b501 | ||
|
|
6f9ab1ad1d | ||
|
|
42f9a43393 | ||
|
|
955cd8a0d4 | ||
|
|
b1c806a189 | ||
|
|
bea5f5eb82 | ||
|
|
958e0951bc | ||
|
|
26dbf6d53d | ||
|
|
051e49a099 | ||
|
|
083b3d0666 | ||
|
|
b4ab8a0220 | ||
|
|
658205bc49 | ||
|
|
d9ee1950d8 | ||
|
|
601600a036 | ||
|
|
7805e9f323 | ||
|
|
61dd342f17 | ||
|
|
1c91842ad4 | ||
|
|
2f9ef2859b | ||
|
|
9ce27f4fa0 | ||
|
|
3f654d2170 | ||
|
|
88019dcae3 | ||
|
|
b94ea44f42 | ||
|
|
f52b101735 | ||
|
|
02e139f5d2 | ||
|
|
67a3b13209 | ||
|
|
4cd85f3a05 | ||
|
|
35f88ca386 | ||
|
|
0157e76725 | ||
|
|
fceda14f89 | ||
|
|
18a2c3d907 | ||
|
|
8f944329c2 | ||
|
|
24cde962b4 | ||
|
|
cdd78cbfb5 | ||
|
|
a0782f115c | ||
|
|
1d2e7bb8d2 | ||
|
|
272102ed61 | ||
|
|
1baea9ee4b | ||
|
|
3022c8fd75 | ||
|
|
e1cfb15a8b | ||
|
|
ecfa677542 | ||
|
|
810eb97dfc | ||
|
|
40bd33f6af | ||
|
|
19cc6c7573 | ||
|
|
89144ff83e | ||
|
|
5c77bab972 | ||
|
|
e406e69c54 | ||
|
|
52b36b5946 | ||
|
|
06cf71a96a | ||
|
|
00052f68b8 | ||
|
|
70f90bbf8f | ||
|
|
167ce12b57 | ||
|
|
a056841aec | ||
|
|
bb81e22dae | ||
|
|
068a80617d | ||
|
|
22c3e10274 | ||
|
|
4696862745 | ||
|
|
a8930c43ce | ||
|
|
3fac57d023 | ||
|
|
1c9dba92b1 | ||
|
|
833a4b8743 | ||
|
|
aedeb91b1a | ||
|
|
0c191eda05 | ||
|
|
e3e1e0c85b | ||
|
|
32a6fa9e8f | ||
|
|
4f4ffa46e7 | ||
|
|
8f7ab2b4bf | ||
|
|
71c1afc10e | ||
|
|
bdb1f70754 | ||
|
|
e08d95f0f5 | ||
|
|
d487668ad9 | ||
|
|
2660550df1 | ||
|
|
cfed16d2e5 | ||
|
|
9af3ef90a2 | ||
|
|
d7db959dd7 | ||
|
|
b5eff7f9c7 | ||
|
|
8891f5d75d | ||
|
|
f0aab7017e | ||
|
|
b4985bba76 | ||
|
|
0911ec8c9d | ||
|
|
5e171c17be | ||
|
|
7896600863 | ||
|
|
d20a0e8598 | ||
|
|
b871279502 | ||
|
|
fa08f4f797 | ||
|
|
794932812c | ||
|
|
e316fc7309 | ||
|
|
971e861e18 | ||
|
|
3e7cf68425 | ||
|
|
d2137c5f80 | ||
|
|
0f17841fe4 | ||
|
|
663ad8b4b2 | ||
|
|
0609c05864 | ||
|
|
07da8cb492 | ||
|
|
c16da87be8 | ||
|
|
450d359c16 | ||
|
|
c1a1098501 | ||
|
|
4c7aac2f67 | ||
|
|
2bcd6f856a | ||
|
|
d98fb2fe12 | ||
|
|
c549c713a3 | ||
|
|
9388a05eac | ||
|
|
6809153412 | ||
|
|
39556705ab | ||
|
|
d1939b943d | ||
|
|
f2c32202c8 | ||
|
|
7ece032bb3 | ||
|
|
9393c2b8d8 | ||
|
|
f2dd15aaf5 | ||
|
|
f4927d9c8b | ||
|
|
1dddd2cee3 | ||
|
|
1e75da4eaf | ||
|
|
1add77f4fe | ||
|
|
4b77700b97 | ||
|
|
cb547b0a71 | ||
|
|
01ee3568ca | ||
|
|
fcd7c00cc7 | ||
|
|
90a41ccf0f | ||
|
|
6c9748aca4 | ||
|
|
02e3ae4dd6 | ||
|
|
d39fdf400c | ||
|
|
073c6dfed8 | ||
|
|
0fa4a6a4c8 | ||
|
|
07b59f090e | ||
|
|
df807d5548 | ||
|
|
f21264c762 | ||
|
|
8aace7f765 | ||
|
|
531c25add7 | ||
|
|
43add95012 | ||
|
|
6ef892fa41 | ||
|
|
1c832eb899 | ||
|
|
f187fd10a5 | ||
|
|
4cac1b103a | ||
|
|
2c7a759711 | ||
|
|
c490ce6248 | ||
|
|
7e3e1544d2 | ||
|
|
edf18591ca | ||
|
|
8cb08dc980 | ||
|
|
5e925f41fb | ||
|
|
a3a28b38e7 | ||
|
|
87fb81de91 | ||
|
|
76adf47107 | ||
|
|
ecbca16246 | ||
|
|
4bd9b25633 | ||
|
|
dd46a45b21 | ||
|
|
e0875d8e45 | ||
|
|
329ff33dc4 | ||
|
|
4610058c54 | ||
|
|
8ce338c525 | ||
|
|
22e119336b | ||
|
|
981e031697 | ||
|
|
4f934b35ca | ||
|
|
441ce040ff | ||
|
|
39e3a5afa8 | ||
|
|
b281a8b8e4 | ||
|
|
5877508fb7 | ||
|
|
7ff98a9b6d | ||
|
|
e658555c2b | ||
|
|
80a52afd8e | ||
|
|
5963582abf | ||
|
|
b918d51744 | ||
|
|
1a475bc9c5 | ||
|
|
1b86795c20 | ||
|
|
42d1bc452f | ||
|
|
7e0e788689 | ||
|
|
14434e1c55 | ||
|
|
a733b681d8 | ||
|
|
af39b9de25 | ||
|
|
74c988aa67 | ||
|
|
8ff1120a0d | ||
|
|
543787a559 | ||
|
|
3eb7b01a98 | ||
|
|
c66e800a22 | ||
|
|
10ed6be747 | ||
|
|
b99c7f576d | ||
|
|
ac5d15578f | ||
|
|
d5c03f9d36 | ||
|
|
6ed2ff849a | ||
|
|
2945450186 | ||
|
|
8944c6d5dc | ||
|
|
97db8ee025 | ||
|
|
777a3cce28 | ||
|
|
91386df0f7 | ||
|
|
9f95812d32 | ||
|
|
361b011205 | ||
|
|
ac45a5cdfe | ||
|
|
e892f5d57c | ||
|
|
a3d24ebe3b | ||
|
|
29ce8e63b3 | ||
|
|
223d6d1d35 | ||
|
|
e712765f0b | ||
|
|
ad68c43857 | ||
|
|
626c25b781 | ||
|
|
0e9366e0ce | ||
|
|
cccffe9543 | ||
|
|
821e81303c | ||
|
|
d3ba0ff93f | ||
|
|
2bf9f58054 | ||
|
|
07ba380c21 | ||
|
|
6e523dff7e | ||
|
|
702cc17bd5 | ||
|
|
6b9c452de7 | ||
|
|
5d9a670225 | ||
|
|
4cb939ab6b | ||
|
|
f14b2dffcd | ||
|
|
55b0ee7a63 | ||
|
|
4adfb0d292 | ||
|
|
948ee26852 | ||
|
|
a652d3fd9a | ||
|
|
18e530f3a0 | ||
|
|
a55dcd760c | ||
|
|
2bbcad03ef | ||
|
|
cc9c50032c | ||
|
|
06cf3e9288 | ||
|
|
a25e91dede | ||
|
|
57086649f4 | ||
|
|
7d2fc03248 | ||
|
|
b2ad30d1ae | ||
|
|
8970a0a031 | ||
|
|
c9e713cf7f | ||
|
|
64e315f0b0 | ||
|
|
f60cf0e674 | ||
|
|
5d2a1b0263 | ||
|
|
77860441ad | ||
|
|
f46ec1ec51 | ||
|
|
e644c347ec | ||
|
|
0b28df9999 | ||
|
|
dddb3e3a11 | ||
|
|
0518821341 | ||
|
|
2eefcf1270 | ||
|
|
93c3705207 | ||
|
|
9fcf9e4dd9 | ||
|
|
392ce9bc79 | ||
|
|
da3eaf36f1 | ||
|
|
0458c501c8 | ||
|
|
632ef8b3a8 | ||
|
|
40e5014cc6 | ||
|
|
ba09eb4ca3 | ||
|
|
2c77dcadb5 | ||
|
|
99eaaebf1c | ||
|
|
f2e77cdf09 | ||
|
|
8f00b17315 | ||
|
|
3a17756532 | ||
|
|
cff3fff971 | ||
|
|
2763635f17 | ||
|
|
1dd1a1273f | ||
|
|
3f5b953c16 | ||
|
|
1539d88d78 | ||
|
|
91ee846054 | ||
|
|
c5cecee7b1 | ||
|
|
1e0a52d780 | ||
|
|
0792bb1407 | ||
|
|
6e9a05389a | ||
|
|
68833a7ff1 | ||
|
|
cc7553850a | ||
|
|
e66277d665 | ||
|
|
caea63ea32 | ||
|
|
1761465532 | ||
|
|
8218cc63c7 | ||
|
|
c2ff763311 | ||
|
|
813287a657 | ||
|
|
66c3046c4d | ||
|
|
acbdf79d79 | ||
|
|
ade3db0902 | ||
|
|
d66066c195 | ||
|
|
0a222ca16a | ||
|
|
48fa369dc3 | ||
|
|
9e861b1b10 | ||
|
|
6b7926ecde | ||
|
|
ccd6e12547 | ||
|
|
c869104e82 | ||
|
|
f430d3071b | ||
|
|
26460753a6 | ||
|
|
2653c7aea3 | ||
|
|
1a892b2de3 | ||
|
|
a9e9ee511d | ||
|
|
7719a2d3fd | ||
|
|
84a6202db1 | ||
|
|
4d8a4fbd6a | ||
|
|
d556e7e0a2 | ||
|
|
5f039c5c3f | ||
|
|
5bf69db296 | ||
|
|
f20cac5d85 | ||
|
|
69976289ca | ||
|
|
8b30f92dfd | ||
|
|
477c70a8e5 | ||
|
|
2e9d1a41f6 | ||
|
|
ff617036c7 | ||
|
|
2b4e8b1f8b | ||
|
|
7bcbdd8358 | ||
|
|
45c212c5cc | ||
|
|
00d7b5e231 | ||
|
|
0314d49b77 | ||
|
|
6335b731df | ||
|
|
c248d1e84c | ||
|
|
94de9829b9 | ||
|
|
0448efd04c | ||
|
|
21f4b9b5cf | ||
|
|
01a30db52e | ||
|
|
01ed9bd30f | ||
|
|
583edb53d9 | ||
|
|
f51cc70d8e | ||
|
|
539d05a603 | ||
|
|
906162ebb4 | ||
|
|
b06203dc8a | ||
|
|
6aec4b93ff | ||
|
|
3ea6f64021 | ||
|
|
51fb01b190 | ||
|
|
01b23109ae | ||
|
|
4e291b58d3 | ||
|
|
1689cf1026 | ||
|
|
a55ce2c952 | ||
|
|
d2ff17a90e | ||
|
|
70c446e88d | ||
|
|
0d6dc40da5 | ||
|
|
a4f3a81d58 | ||
|
|
c64f75ffe4 | ||
|
|
0fdb6ee567 | ||
|
|
9aa40fc88c | ||
|
|
4f4c0171c0 | ||
|
|
e4644b3eb7 | ||
|
|
999cf241f8 | ||
|
|
42b964a324 | ||
|
|
1262bfd502 | ||
|
|
81fe561678 | ||
|
|
9cb989155d | ||
|
|
59587f4a40 | ||
|
|
4dc0d4cd24 | ||
|
|
89598be72e | ||
|
|
1d2359f295 | ||
|
|
026984920b | ||
|
|
03ed289ef9 | ||
|
|
0ccbeb42dd | ||
|
|
3f9b772a11 | ||
|
|
e97c9de471 | ||
|
|
872db6b966 | ||
|
|
724d036df9 | ||
|
|
fc98e6651a | ||
|
|
a70e4aa7a7 | ||
|
|
d542be322c | ||
|
|
d5a977c5b0 | ||
|
|
bac9199974 | ||
|
|
bb92ec2291 | ||
|
|
b155f45b01 | ||
|
|
b2f79f836b | ||
|
|
9ba7e4a92b | ||
|
|
28088beb72 | ||
|
|
25351f4138 | ||
|
|
1ac4db8641 | ||
|
|
5cee4ef497 | ||
|
|
b323c2e5cd | ||
|
|
66be4a8c18 | ||
|
|
dd2bd294ba | ||
|
|
e4db1e931a | ||
|
|
f8b3e9c65b | ||
|
|
880a596621 | ||
|
|
9903b4d955 | ||
|
|
40bc87c772 | ||
|
|
586642c6f6 | ||
|
|
f3847a4a2b | ||
|
|
63352c310e | ||
|
|
e7aac163c2 | ||
|
|
5a3d61d8f0 | ||
|
|
33ba81d3b0 | ||
|
|
6a0956181d | ||
|
|
aca7d3bd9c | ||
|
|
e3e8378f8e | ||
|
|
61d235b497 | ||
|
|
e069d7a956 | ||
|
|
3d8806e38c | ||
|
|
650da3bd6a | ||
|
|
26b7cece35 | ||
|
|
1d3da4d1d1 | ||
|
|
bc3aeed090 | ||
|
|
6606eeb9a7 | ||
|
|
2401a3f8bf | ||
|
|
b3685c0c7e | ||
|
|
868315948e | ||
|
|
19a68719fe | ||
|
|
92570ec75c | ||
|
|
573817f81d | ||
|
|
21da1fed85 | ||
|
|
c23527eb82 | ||
|
|
926b9e0822 | ||
|
|
d32a0b698d | ||
|
|
47bf18f219 | ||
|
|
91096c5839 | ||
|
|
477c16360e | ||
|
|
9a1d7d2e44 | ||
|
|
be54c50786 | ||
|
|
2624924f53 | ||
|
|
724552eaa3 | ||
|
|
bef0d70d09 | ||
|
|
d7201f62ab | ||
|
|
1f229980b7 | ||
|
|
8f08b1989b | ||
|
|
e3c83c0cb0 | ||
|
|
431e380f5e | ||
|
|
5c7b102e08 | ||
|
|
6dc1a1b196 | ||
|
|
6c01d2ffa9 | ||
|
|
3156fd6daf | ||
|
|
6fa4ab3e3b | ||
|
|
9fa67b59c7 | ||
|
|
0935a17fec | ||
|
|
5fdc575485 | ||
|
|
d6bbd16945 | ||
|
|
1110f7ee99 | ||
|
|
d64860a34e | ||
|
|
9fb0da6954 | ||
|
|
12b0f8806b | ||
|
|
5c5a1df39d | ||
|
|
5b0ac65fbe | ||
|
|
e9b542ee6e | ||
|
|
ae6bf5e8f6 | ||
|
|
4dc564ffcf | ||
|
|
49a9ef2f80 | ||
|
|
1907f482eb | ||
|
|
08aad7ce20 | ||
|
|
f555a160d5 | ||
|
|
2d9b7f358e | ||
|
|
db396b5f21 | ||
|
|
018d36c3fd | ||
|
|
e6621244b8 | ||
|
|
29aef64d97 | ||
|
|
cbe243feb3 | ||
|
|
ff02c59f85 | ||
|
|
3895bc1f73 | ||
|
|
cd0cce532a | ||
|
|
3fdf6693d2 | ||
|
|
d2be344700 | ||
|
|
9bd2898678 | ||
|
|
07f2348a6d | ||
|
|
ddd1c1a516 | ||
|
|
8de76e3c52 | ||
|
|
6ea2645e9d | ||
|
|
ed166b1b33 | ||
|
|
2dd53a5300 | ||
|
|
97f9120acf | ||
|
|
dd29be75f2 | ||
|
|
fa87df2ed8 | ||
|
|
1fb94de809 | ||
|
|
0e18e84c8f | ||
|
|
0ba2261033 | ||
|
|
703ebf9418 | ||
|
|
ff08dbe5d5 | ||
|
|
3003a10550 | ||
|
|
f95be6cc71 | ||
|
|
23bc40e630 | ||
|
|
45c47674fb | ||
|
|
cf1d1a8122 | ||
|
|
45d2629863 | ||
|
|
f6b0736bbf | ||
|
|
83f9a2bcc9 | ||
|
|
1b817222f0 | ||
|
|
50db796a47 | ||
|
|
f2f7fe3151 | ||
|
|
90293b90fb | ||
|
|
f1751eaebf | ||
|
|
19a3aa0b86 | ||
|
|
a3b901e357 | ||
|
|
fbe12cfadc | ||
|
|
3ffbf11902 | ||
|
|
5c3b32a6ee | ||
|
|
36267b8255 | ||
|
|
668c9b0d76 | ||
|
|
eebbe6dec8 | ||
|
|
a84ae51a4f | ||
|
|
bdbb977233 | ||
|
|
ac27cc6a1e | ||
|
|
91551bf4e8 | ||
|
|
e8c11debfd | ||
|
|
e29a1c659f | ||
|
|
d66bf0e3fd | ||
|
|
172b71dd00 | ||
|
|
10ce432c97 | ||
|
|
3299a8dca3 | ||
|
|
5dca8bc5d2 | ||
|
|
1b8f8704f5 | ||
|
|
64e801311b | ||
|
|
da8202b4e1 | ||
|
|
72d70f1265 | ||
|
|
660597e89a | ||
|
|
4a48ac8797 | ||
|
|
4c61c19e4f | ||
|
|
bb3b13364c | ||
|
|
b34bb65f79 | ||
|
|
a7cfb4b68f | ||
|
|
8d58a6192d | ||
|
|
1da34ceda4 | ||
|
|
dc31b7e839 | ||
|
|
5c6ee7b787 | ||
|
|
5620a62cad | ||
|
|
429abb4914 | ||
|
|
f90d33daf7 | ||
|
|
baa67cf9f4 | ||
|
|
4054269db3 | ||
|
|
559b8d00dd | ||
|
|
9b9c19586f | ||
|
|
a3407734a7 | ||
|
|
99c579ee51 | ||
|
|
81bc7db43e | ||
|
|
89356dac50 |
76
.github/workflows/android.yml
vendored
76
.github/workflows/android.yml
vendored
@@ -24,45 +24,49 @@ permissions:
|
||||
security-events: none
|
||||
statuses: none
|
||||
env:
|
||||
JAVA_HOME: /usr/lib/jvm/java-17-openjdk-amd64
|
||||
JAVA_HOME: /usr/lib/jvm/java-21-openjdk-amd64
|
||||
jobs:
|
||||
build:
|
||||
runs-on: ubuntu-latest
|
||||
strategy:
|
||||
matrix:
|
||||
api-level: [ 21, 34 ]
|
||||
flavor: [Foss, Gplay]
|
||||
steps:
|
||||
- uses: actions/checkout@v4.2.2
|
||||
- name: Fail on bad translations
|
||||
run: if grep -ri "<xliff" app/src/main/res/values*/strings.xml; then echo "Invalidly escaped translations found"; exit 1; fi
|
||||
- uses: gradle/actions/wrapper-validation@v4
|
||||
- name: set up OpenJDK 17
|
||||
run: |
|
||||
sudo apt-get update
|
||||
sudo apt-get install -y openjdk-17-jdk-headless
|
||||
sudo update-alternatives --auto java
|
||||
- name: Build
|
||||
run: ./gradlew assembleRelease
|
||||
- name: Check lint
|
||||
run: ./gradlew lintRelease
|
||||
- name: Run unit tests
|
||||
run: timeout 5m ./gradlew testReleaseUnitTest || { ./gradlew --stop && timeout 5m ./gradlew testReleaseUnitTest; }
|
||||
- name: Enable KVM
|
||||
run: |
|
||||
echo 'KERNEL=="kvm", GROUP="kvm", MODE="0666", OPTIONS+="static_node=kvm"' | sudo tee /etc/udev/rules.d/99-kvm4all.rules
|
||||
sudo udevadm control --reload-rules
|
||||
sudo udevadm trigger --name-match=kvm
|
||||
- name: Run instrumented tests
|
||||
uses: ReactiveCircus/android-emulator-runner@v2
|
||||
with:
|
||||
api-level: ${{ matrix.api-level }}
|
||||
arch: x86_64
|
||||
script: ./gradlew connectedCheck
|
||||
- name: SpotBugs
|
||||
run: ./gradlew spotbugsRelease
|
||||
- name: Archive test results
|
||||
if: always()
|
||||
uses: actions/upload-artifact@v4.4.3
|
||||
with:
|
||||
name: test-results-api${{ matrix.api-level }}
|
||||
path: app/build/reports
|
||||
- uses: actions/checkout@v4.2.2
|
||||
- name: Fail on bad translations
|
||||
run: if grep -ri "<xliff" app/src/main/res/values*/strings.xml; then echo "Invalidly escaped translations found"; exit 1; fi
|
||||
- uses: gradle/actions/wrapper-validation@v4
|
||||
- name: set up OpenJDK 21
|
||||
run: |
|
||||
sudo apt-get update
|
||||
sudo apt-get install -y openjdk-21-jdk-headless
|
||||
sudo update-alternatives --auto java
|
||||
- name: Build
|
||||
run: ./gradlew assemble${{ matrix.flavor }}Release
|
||||
- name: Check lint
|
||||
run: ./gradlew lint${{ matrix.flavor }}Release
|
||||
- name: Run unit tests
|
||||
run: timeout 5m ./gradlew test${{ matrix.flavor }}ReleaseUnitTest || { ./gradlew --stop && timeout 5m ./gradlew test${{ matrix.flavor }}ReleaseUnitTest; }
|
||||
- name: Enable KVM
|
||||
run: |
|
||||
echo 'KERNEL=="kvm", GROUP="kvm", MODE="0666", OPTIONS+="static_node=kvm"' | sudo tee /etc/udev/rules.d/99-kvm4all.rules
|
||||
sudo udevadm control --reload-rules
|
||||
sudo udevadm trigger --name-match=kvm
|
||||
- name: Run instrumented tests (API 21)
|
||||
uses: ReactiveCircus/android-emulator-runner@v2
|
||||
with:
|
||||
api-level: 21
|
||||
arch: x86_64
|
||||
script: ./gradlew connected${{ matrix.flavor }}DebugAndroidTest
|
||||
- name: Run instrumented tests (API 35)
|
||||
uses: ReactiveCircus/android-emulator-runner@v2
|
||||
with:
|
||||
api-level: 35
|
||||
arch: x86_64
|
||||
script: ./gradlew connected${{ matrix.flavor }}DebugAndroidTest
|
||||
- name: Archive test results
|
||||
if: always()
|
||||
uses: actions/upload-artifact@v4.6.2
|
||||
with:
|
||||
name: test-results-flavor${{ matrix.flavor }}
|
||||
path: app/build/reports
|
||||
|
||||
4
.github/workflows/changelog-to-fastlane.yml
vendored
4
.github/workflows/changelog-to-fastlane.yml
vendored
@@ -29,13 +29,13 @@ jobs:
|
||||
id: checkout
|
||||
uses: actions/checkout@v4.2.2
|
||||
- name: Setup Python
|
||||
uses: actions/setup-python@v5.3.0
|
||||
uses: actions/setup-python@v5.6.0
|
||||
with:
|
||||
python-version: '3.x'
|
||||
- name: Run converter script
|
||||
run: python .scripts/changelog_to_fastlane.py
|
||||
- name: Create Pull Request
|
||||
uses: peter-evans/create-pull-request@v7.0.5
|
||||
uses: peter-evans/create-pull-request@v7.0.8
|
||||
with:
|
||||
title: "Update Fastlane changelogs"
|
||||
commit-message: "Update Fastlane changelogs"
|
||||
|
||||
2
.github/workflows/contributors-to-file.yml
vendored
2
.github/workflows/contributors-to-file.yml
vendored
@@ -33,7 +33,7 @@ jobs:
|
||||
file_in_repo: app/src/main/res/raw/contributors.txt
|
||||
min_commit_count: 5
|
||||
- name: Create Pull Request
|
||||
uses: peter-evans/create-pull-request@v7.0.5
|
||||
uses: peter-evans/create-pull-request@v7.0.8
|
||||
with:
|
||||
title: "Update contributors"
|
||||
commit-message: "Update contributors"
|
||||
|
||||
@@ -29,7 +29,7 @@ jobs:
|
||||
- name: Install requirements
|
||||
run: |
|
||||
sudo apt-get update
|
||||
sudo apt-get install optipng mat2
|
||||
sudo apt-get install inkscape mat2 optipng xvfb
|
||||
# Install 200 weight versions of relevant Noto (to use for languages not supported by Lexend Deca)
|
||||
sudo apt-get install fonts-noto-extra fonts-noto-cjk-extra
|
||||
# Custom fonts
|
||||
@@ -39,7 +39,7 @@ jobs:
|
||||
- name: Generate featureGraphic.png for each language
|
||||
run: .scripts/generate_feature_graphic/generate_feature_graphic.sh
|
||||
- name: Create Pull Request
|
||||
uses: peter-evans/create-pull-request@v7.0.5
|
||||
uses: peter-evans/create-pull-request@v7.0.8
|
||||
with:
|
||||
title: "Update feature graphic"
|
||||
commit-message: "Update feature graphic"
|
||||
|
||||
2
.github/workflows/gradle-update.yml
vendored
2
.github/workflows/gradle-update.yml
vendored
@@ -26,7 +26,7 @@ jobs:
|
||||
id: gradle-update
|
||||
- uses: gradle/actions/wrapper-validation@v4
|
||||
- name: Create Pull Request
|
||||
uses: peter-evans/create-pull-request@v7.0.5
|
||||
uses: peter-evans/create-pull-request@v7.0.8
|
||||
with:
|
||||
title: "Update Gradle to ${{ steps.gradle-update.outputs.version }}"
|
||||
commit-message: "Update Gradle to ${{ steps.gradle-update.outputs.version }}"
|
||||
|
||||
2
.github/workflows/update-locales.yml
vendored
2
.github/workflows/update-locales.yml
vendored
@@ -31,7 +31,7 @@ jobs:
|
||||
- name: Update locales
|
||||
run: .scripts/locales.py
|
||||
- name: Create Pull Request
|
||||
uses: peter-evans/create-pull-request@v7.0.5
|
||||
uses: peter-evans/create-pull-request@v7.0.8
|
||||
with:
|
||||
title: "Update locales"
|
||||
commit-message: "Update locales"
|
||||
|
||||
3
.gitignore
vendored
3
.gitignore
vendored
@@ -25,3 +25,6 @@
|
||||
/.bundle/
|
||||
/vendor/bundle
|
||||
/lib/bundler/man/
|
||||
|
||||
# Catima-specific
|
||||
SHA256SUMS
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
<svg width="1024" height="500" viewBox="0 0 1024 500" fill="none" xmlns="http://www.w3.org/2000/svg">
|
||||
<rect width="1024" height="500" fill="#223355"/>
|
||||
<text fill="white" xml:space="preserve" style="" font-family="Yesteryear" font-size="150" letter-spacing="0em"><tspan x="470.082" y="285.511">Catima
|
||||
<text direction="ltr" fill="white" xml:space="preserve" style="" font-family="Yesteryear" font-size="150" letter-spacing="0em"><tspan x="470.082" y="285.511">Catima
|
||||
</tspan></text>
|
||||
<path d="M381.046 147.001L236.3 211.446L276.524 301.79L421.27 237.345L381.046 147.001Z" fill="#F0F0F0" stroke="#C80000" stroke-width="2"/>
|
||||
<path d="M402.077 219.13L240.07 147L191.984 255.004L353.99 327.135L402.077 219.13Z" fill="#F0F0F0" stroke="#C80000" stroke-width="2"/>
|
||||
@@ -11,5 +11,5 @@
|
||||
<path d="M330.301 254.298C329.363 256.875 327.547 259.04 325.171 260.411C322.796 261.783 320.013 262.273 317.312 261.797C314.61 261.321 312.163 259.908 310.4 257.807C308.637 255.706 307.671 253.05 307.671 250.307" stroke="#F0F0F0" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"/>
|
||||
<path d="M248.345 225.937L266.818 207.465L285.29 225.937" stroke="#F0F0F0" stroke-width="2"/>
|
||||
<path d="M329.625 225.937L348.098 207.465L366.571 225.937" stroke="#F0F0F0" stroke-width="2"/>
|
||||
<text fill="white" xml:space="preserve" style="" font-family="Lexend Deca" font-size="35" font-weight="200" letter-spacing="0em"><tspan x="466" y="340">Loyalty Card Wallet</tspan></text>
|
||||
<text direction="ltr" fill="white" xml:space="preserve" style="" font-family="Lexend Deca" font-size="35" font-weight="200" letter-spacing="0em"><tspan x="466" y="340">Loyalty Card Wallet</tspan></text>
|
||||
</svg>
|
||||
|
||||
|
Before Width: | Height: | Size: 2.1 KiB After Width: | Height: | Size: 2.1 KiB |
@@ -37,6 +37,7 @@ for lang in "$script_location/../../fastlane/metadata/android/"*; do
|
||||
# We specifically need the Serif version because of the 200 weight
|
||||
case "$(basename "$lang")" in
|
||||
bg|el-GR|ru-RU|uk) sed -i "s/Lexend Deca/Noto Serif/" featureGraphic.svg ;;
|
||||
fa-IR) sed -i -e 's/svg direction="ltr"/svg direction="rtl"/' -e "s/Yesteryear/Noto Sans Arabic/" -e "s/Lexend Deca/Noto Sans Arabic/" featureGraphic.svg ;;
|
||||
hi-IN) sed -i -e "s/Yesteryear/Noto Sans Devanagari/" -e "s/Lexend Deca/Noto Serif Devanagari/" featureGraphic.svg ;;
|
||||
ja-JP) sed -i "s/Lexend Deca/Noto Serif CJK JP/" featureGraphic.svg ;;
|
||||
kn-IN) sed -i -e 's/font-size="150"/font-size="100"/' -e "s/Yesteryear/Noto Serif Kannada/" featureGraphic.svg ;;
|
||||
@@ -48,8 +49,8 @@ for lang in "$script_location/../../fastlane/metadata/android/"*; do
|
||||
fi
|
||||
# Ensure images directory exists
|
||||
mkdir -p images
|
||||
# Generate .png
|
||||
convert featureGraphic.svg images/featureGraphic.png
|
||||
# Generate .png (we use Inkscape because ImageMagick ignores RTL)
|
||||
xvfb-run inkscape --export-filename=images/featureGraphic.png featureGraphic.svg
|
||||
# Optimize .png
|
||||
optipng images/featureGraphic.png
|
||||
# Remove metadata (timestamps) from .png
|
||||
|
||||
@@ -11,6 +11,7 @@ MIN_PERCENT = 90
|
||||
NOT_LANGS = ("night", "w600dp")
|
||||
REPLACE_CODES = {
|
||||
"el": "el-rGR",
|
||||
"he": "iw",
|
||||
"id": "in-rID",
|
||||
"ro": "ro-rRO",
|
||||
"zh_Hans": "zh-rCN",
|
||||
|
||||
32
CHANGELOG.md
32
CHANGELOG.md
@@ -1,5 +1,37 @@
|
||||
# Changelog
|
||||
|
||||
## v2.35.1 - 149 (2025-06-17)
|
||||
|
||||
- Dependency and translation updates
|
||||
|
||||
## v2.35.0 - 148 (2025-05-17)
|
||||
|
||||
- Add ability to choose barcode width in fullscreen view
|
||||
- Remove confusing import from app function
|
||||
- Various scanning fixes
|
||||
- Fix crash when loading a pkpass file without barcode
|
||||
|
||||
## v2.34.5 - 147 (2025-03-22)
|
||||
|
||||
- Target Android 15
|
||||
- Fix crash reading unsupported pkpass files
|
||||
- Improve pkpass support
|
||||
|
||||
## v2.34.4 - 146 (2025-01-17)
|
||||
|
||||
- Ability to sort cards by start of validity
|
||||
- Temporarily revert to targeting Android 14 to fix some UI issues
|
||||
|
||||
## v2.34.3 - 145 (2025-01-15)
|
||||
|
||||
- Target Android 15
|
||||
- Fix keyboard covering save button in edit screen
|
||||
- Fix some pkpass files not being detected as pkpass (application/vnd-com.apple.pkpass mime type support)
|
||||
|
||||
## v2.34.2 - 144 (2024-12-26)
|
||||
|
||||
- Improve archive/starred icon display
|
||||
|
||||
## v2.34.1 - 143 (2024-12-12)
|
||||
|
||||
- Fix crash when opening invalid pkpass files
|
||||
|
||||
128
CODE_OF_CONDUCT.md
Normal file
128
CODE_OF_CONDUCT.md
Normal file
@@ -0,0 +1,128 @@
|
||||
# Contributor Covenant Code of Conduct
|
||||
|
||||
## Our Pledge
|
||||
|
||||
We as members, contributors, and leaders pledge to make participation in our
|
||||
community a harassment-free experience for everyone, regardless of age, body
|
||||
size, visible or invisible disability, ethnicity, sex characteristics, gender
|
||||
identity and expression, level of experience, education, socio-economic status,
|
||||
nationality, personal appearance, race, religion, or sexual identity
|
||||
and orientation.
|
||||
|
||||
We pledge to act and interact in ways that contribute to an open, welcoming,
|
||||
diverse, inclusive, and healthy community.
|
||||
|
||||
## Our Standards
|
||||
|
||||
Examples of behavior that contributes to a positive environment for our
|
||||
community include:
|
||||
|
||||
* Demonstrating empathy and kindness toward other people
|
||||
* Being respectful of differing opinions, viewpoints, and experiences
|
||||
* Giving and gracefully accepting constructive feedback
|
||||
* Accepting responsibility and apologizing to those affected by our mistakes,
|
||||
and learning from the experience
|
||||
* Focusing on what is best not just for us as individuals, but for the
|
||||
overall community
|
||||
|
||||
Examples of unacceptable behavior include:
|
||||
|
||||
* The use of sexualized language or imagery, and sexual attention or
|
||||
advances of any kind
|
||||
* Trolling, insulting or derogatory comments, and personal or political attacks
|
||||
* Public or private harassment
|
||||
* Publishing others' private information, such as a physical or email
|
||||
address, without their explicit permission
|
||||
* Other conduct which could reasonably be considered inappropriate in a
|
||||
professional setting
|
||||
|
||||
## Enforcement Responsibilities
|
||||
|
||||
Community leaders are responsible for clarifying and enforcing our standards of
|
||||
acceptable behavior and will take appropriate and fair corrective action in
|
||||
response to any behavior that they deem inappropriate, threatening, offensive,
|
||||
or harmful.
|
||||
|
||||
Community leaders have the right and responsibility to remove, edit, or reject
|
||||
comments, commits, code, wiki edits, issues, and other contributions that are
|
||||
not aligned to this Code of Conduct, and will communicate reasons for moderation
|
||||
decisions when appropriate.
|
||||
|
||||
## Scope
|
||||
|
||||
This Code of Conduct applies within all community spaces, and also applies when
|
||||
an individual is officially representing the community in public spaces.
|
||||
Examples of representing our community include using an official e-mail address,
|
||||
posting via an official social media account, or acting as an appointed
|
||||
representative at an online or offline event.
|
||||
|
||||
## Enforcement
|
||||
|
||||
Instances of abusive, harassing, or otherwise unacceptable behavior may be
|
||||
reported to the community leaders responsible for enforcement at
|
||||
catima.g9ex3@hackerchick.me.
|
||||
All complaints will be reviewed and investigated promptly and fairly.
|
||||
|
||||
All community leaders are obligated to respect the privacy and security of the
|
||||
reporter of any incident.
|
||||
|
||||
## Enforcement Guidelines
|
||||
|
||||
Community leaders will follow these Community Impact Guidelines in determining
|
||||
the consequences for any action they deem in violation of this Code of Conduct:
|
||||
|
||||
### 1. Correction
|
||||
|
||||
**Community Impact**: Use of inappropriate language or other behavior deemed
|
||||
unprofessional or unwelcome in the community.
|
||||
|
||||
**Consequence**: A private, written warning from community leaders, providing
|
||||
clarity around the nature of the violation and an explanation of why the
|
||||
behavior was inappropriate. A public apology may be requested.
|
||||
|
||||
### 2. Warning
|
||||
|
||||
**Community Impact**: A violation through a single incident or series
|
||||
of actions.
|
||||
|
||||
**Consequence**: A warning with consequences for continued behavior. No
|
||||
interaction with the people involved, including unsolicited interaction with
|
||||
those enforcing the Code of Conduct, for a specified period of time. This
|
||||
includes avoiding interactions in community spaces as well as external channels
|
||||
like social media. Violating these terms may lead to a temporary or
|
||||
permanent ban.
|
||||
|
||||
### 3. Temporary Ban
|
||||
|
||||
**Community Impact**: A serious violation of community standards, including
|
||||
sustained inappropriate behavior.
|
||||
|
||||
**Consequence**: A temporary ban from any sort of interaction or public
|
||||
communication with the community for a specified period of time. No public or
|
||||
private interaction with the people involved, including unsolicited interaction
|
||||
with those enforcing the Code of Conduct, is allowed during this period.
|
||||
Violating these terms may lead to a permanent ban.
|
||||
|
||||
### 4. Permanent Ban
|
||||
|
||||
**Community Impact**: Demonstrating a pattern of violation of community
|
||||
standards, including sustained inappropriate behavior, harassment of an
|
||||
individual, or aggression toward or disparagement of classes of individuals.
|
||||
|
||||
**Consequence**: A permanent ban from any sort of public interaction within
|
||||
the community.
|
||||
|
||||
## Attribution
|
||||
|
||||
This Code of Conduct is adapted from the [Contributor Covenant][homepage],
|
||||
version 2.0, available at
|
||||
https://www.contributor-covenant.org/version/2/0/code_of_conduct.html.
|
||||
|
||||
Community Impact Guidelines were inspired by [Mozilla's code of conduct
|
||||
enforcement ladder](https://github.com/mozilla/diversity).
|
||||
|
||||
[homepage]: https://www.contributor-covenant.org
|
||||
|
||||
For answers to common questions about this code of conduct, see the FAQ at
|
||||
https://www.contributor-covenant.org/faq. Translations are available at
|
||||
https://www.contributor-covenant.org/translations.
|
||||
@@ -36,10 +36,6 @@ These are the Android lint checker, run using:
|
||||
|
||||
# ./gradlew lintRelease
|
||||
|
||||
and SpotBugs, run using:
|
||||
|
||||
# ./gradlew spotbugsRelease
|
||||
|
||||
The final check is by testing the application on a live device and verifying
|
||||
the basic functionality works as expected.
|
||||
|
||||
|
||||
5
Gemfile
5
Gemfile
@@ -1,3 +1,8 @@
|
||||
source "https://rubygems.org"
|
||||
|
||||
gem "fastlane"
|
||||
|
||||
# https://github.com/fastlane/fastlane/issues/29183
|
||||
gem "abbrev"
|
||||
gem "mutex_m"
|
||||
gem "ostruct"
|
||||
|
||||
60
Gemfile.lock
60
Gemfile.lock
@@ -5,25 +5,28 @@ GEM
|
||||
base64
|
||||
nkf
|
||||
rexml
|
||||
abbrev (0.1.2)
|
||||
addressable (2.8.7)
|
||||
public_suffix (>= 2.0.2, < 7.0)
|
||||
artifactory (3.0.17)
|
||||
atomos (0.1.3)
|
||||
aws-eventstream (1.3.0)
|
||||
aws-partitions (1.1020.0)
|
||||
aws-sdk-core (3.214.0)
|
||||
aws-eventstream (1.3.2)
|
||||
aws-partitions (1.1105.0)
|
||||
aws-sdk-core (3.224.0)
|
||||
aws-eventstream (~> 1, >= 1.3.0)
|
||||
aws-partitions (~> 1, >= 1.992.0)
|
||||
aws-sigv4 (~> 1.9)
|
||||
base64
|
||||
jmespath (~> 1, >= 1.6.1)
|
||||
aws-sdk-kms (1.96.0)
|
||||
aws-sdk-core (~> 3, >= 3.210.0)
|
||||
logger
|
||||
aws-sdk-kms (1.101.0)
|
||||
aws-sdk-core (~> 3, >= 3.216.0)
|
||||
aws-sigv4 (~> 1.5)
|
||||
aws-sdk-s3 (1.176.0)
|
||||
aws-sdk-core (~> 3, >= 3.210.0)
|
||||
aws-sdk-s3 (1.186.1)
|
||||
aws-sdk-core (~> 3, >= 3.216.0)
|
||||
aws-sdk-kms (~> 1)
|
||||
aws-sigv4 (~> 1.5)
|
||||
aws-sigv4 (1.10.1)
|
||||
aws-sigv4 (1.11.0)
|
||||
aws-eventstream (~> 1, >= 1.0.2)
|
||||
babosa (1.0.4)
|
||||
base64 (0.2.0)
|
||||
@@ -33,7 +36,7 @@ GEM
|
||||
commander (4.6.0)
|
||||
highline (~> 2.0.0)
|
||||
declarative (0.0.20)
|
||||
digest-crc (0.6.5)
|
||||
digest-crc (0.7.0)
|
||||
rake (>= 12.0.0, < 14.0.0)
|
||||
domain_name (0.6.20240107)
|
||||
dotenv (2.8.1)
|
||||
@@ -58,8 +61,8 @@ GEM
|
||||
faraday-em_synchrony (1.0.0)
|
||||
faraday-excon (1.1.0)
|
||||
faraday-httpclient (1.0.1)
|
||||
faraday-multipart (1.0.4)
|
||||
multipart-post (~> 2)
|
||||
faraday-multipart (1.1.0)
|
||||
multipart-post (~> 2.0)
|
||||
faraday-net_http (1.0.2)
|
||||
faraday-net_http_persistent (1.2.0)
|
||||
faraday-patron (1.0.0)
|
||||
@@ -67,8 +70,8 @@ GEM
|
||||
faraday-retry (1.0.3)
|
||||
faraday_middleware (1.2.1)
|
||||
faraday (~> 1.0)
|
||||
fastimage (2.3.1)
|
||||
fastlane (2.226.0)
|
||||
fastimage (2.4.0)
|
||||
fastlane (2.227.2)
|
||||
CFPropertyList (>= 2.3, < 4.0.0)
|
||||
addressable (>= 2.8, < 3.0.0)
|
||||
artifactory (~> 3.0)
|
||||
@@ -108,7 +111,7 @@ GEM
|
||||
tty-spinner (>= 0.8.0, < 1.0.0)
|
||||
word_wrap (~> 1.0.0)
|
||||
xcodeproj (>= 1.13.0, < 2.0.0)
|
||||
xcpretty (~> 0.4.0)
|
||||
xcpretty (~> 0.4.1)
|
||||
xcpretty-travis-formatter (>= 0.0.3, < 2.0.0)
|
||||
fastlane-sirp (1.0.0)
|
||||
sysrandom (~> 1.0)
|
||||
@@ -129,12 +132,12 @@ GEM
|
||||
google-apis-core (>= 0.11.0, < 2.a)
|
||||
google-apis-storage_v1 (0.31.0)
|
||||
google-apis-core (>= 0.11.0, < 2.a)
|
||||
google-cloud-core (1.7.1)
|
||||
google-cloud-core (1.8.0)
|
||||
google-cloud-env (>= 1.0, < 3.a)
|
||||
google-cloud-errors (~> 1.0)
|
||||
google-cloud-env (1.6.0)
|
||||
faraday (>= 0.17.3, < 3.0)
|
||||
google-cloud-errors (1.4.0)
|
||||
google-cloud-errors (1.5.0)
|
||||
google-cloud-storage (1.47.0)
|
||||
addressable (~> 2.8)
|
||||
digest-crc (~> 0.4)
|
||||
@@ -152,34 +155,38 @@ GEM
|
||||
highline (2.0.3)
|
||||
http-cookie (1.0.8)
|
||||
domain_name (~> 0.5)
|
||||
httpclient (2.8.3)
|
||||
httpclient (2.9.0)
|
||||
mutex_m
|
||||
jmespath (1.6.2)
|
||||
json (2.9.0)
|
||||
jwt (2.9.3)
|
||||
json (2.12.0)
|
||||
jwt (2.10.1)
|
||||
base64
|
||||
logger (1.7.0)
|
||||
mini_magick (4.13.2)
|
||||
mini_mime (1.1.5)
|
||||
multi_json (1.15.0)
|
||||
multipart-post (2.4.1)
|
||||
mutex_m (0.3.0)
|
||||
nanaimo (0.4.0)
|
||||
naturally (2.2.1)
|
||||
nkf (0.2.0)
|
||||
optparse (0.6.0)
|
||||
os (1.1.4)
|
||||
plist (3.7.1)
|
||||
public_suffix (6.0.1)
|
||||
ostruct (0.6.1)
|
||||
plist (3.7.2)
|
||||
public_suffix (6.0.2)
|
||||
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.3.9)
|
||||
rexml (3.4.1)
|
||||
rouge (3.28.0)
|
||||
ruby2_keywords (0.0.5)
|
||||
rubyzip (2.3.2)
|
||||
rubyzip (2.4.1)
|
||||
security (0.1.5)
|
||||
signet (0.19.0)
|
||||
signet (0.20.0)
|
||||
addressable (~> 2.8)
|
||||
faraday (>= 0.17.5, < 3.a)
|
||||
jwt (>= 1.5, < 3.0)
|
||||
@@ -206,7 +213,7 @@ GEM
|
||||
colored2 (~> 3.1)
|
||||
nanaimo (~> 0.4.0)
|
||||
rexml (>= 3.3.6, < 4.0)
|
||||
xcpretty (0.4.0)
|
||||
xcpretty (0.4.1)
|
||||
rouge (~> 3.28.0)
|
||||
xcpretty-travis-formatter (1.0.1)
|
||||
xcpretty (~> 0.2, >= 0.0.7)
|
||||
@@ -215,7 +222,10 @@ PLATFORMS
|
||||
ruby
|
||||
|
||||
DEPENDENCIES
|
||||
abbrev
|
||||
fastlane
|
||||
mutex_m
|
||||
ostruct
|
||||
|
||||
BUNDLED WITH
|
||||
2.5.22
|
||||
|
||||
@@ -1,36 +1,34 @@
|
||||
import com.android.build.gradle.internal.tasks.factory.dependsOn
|
||||
import com.github.spotbugs.snom.SpotBugsTask
|
||||
|
||||
plugins {
|
||||
id("com.android.application")
|
||||
id("com.github.spotbugs")
|
||||
id("org.jetbrains.kotlin.android")
|
||||
}
|
||||
|
||||
spotbugs {
|
||||
ignoreFailures.set(false)
|
||||
setEffort("max")
|
||||
excludeFilter.set(file("./config/spotbugs/exclude.xml"))
|
||||
reportsDir.set(layout.buildDirectory.file("reports/spotbugs/").get().asFile)
|
||||
kotlin {
|
||||
jvmToolchain(21)
|
||||
}
|
||||
|
||||
android {
|
||||
namespace = "protect.card_locker"
|
||||
compileSdk = 34
|
||||
compileSdk = 35
|
||||
|
||||
defaultConfig {
|
||||
applicationId = "me.hackerchick.catima"
|
||||
minSdk = 21
|
||||
targetSdk = 34
|
||||
versionCode = 143
|
||||
versionName = "2.34.1"
|
||||
targetSdk = 35
|
||||
versionCode = 149
|
||||
versionName = "2.35.1"
|
||||
|
||||
vectorDrawables.useSupportLibrary = true
|
||||
multiDexEnabled = true
|
||||
|
||||
resourceConfigurations += listOf("ar", "bg", "bn", "bn-rIN", "bs", "cs", "da", "de", "el-rGR", "en", "eo", "es", "es-rAR", "et", "fi", "fr", "gl", "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", "ta", "tr", "uk", "vi", "zh-rCN", "zh-rTW")
|
||||
resourceConfigurations += listOf("ar", "be", "bg", "bn", "bn-rIN", "bs", "cs", "da", "de", "el-rGR", "en", "eo", "es", "es-rAR", "et", "fa", "fi", "fr", "gl", "he-rIL", "hi", "hr", "hu", "in-rID", "is", "it", "ja", "ko", "lt", "lv", "nb-rNO", "nl", "oc", "pl", "pt", "pt-rBR", "pt-rPT", "ro-rRO", "ru", "sk", "sl", "sr", "sv", "ta", "tr", "uk", "vi", "zh-rCN", "zh-rTW")
|
||||
|
||||
testInstrumentationRunner = "androidx.test.runner.AndroidJUnitRunner"
|
||||
|
||||
buildConfigField("boolean", "showDonate", "true")
|
||||
buildConfigField("boolean", "showRateOnGooglePlay", "false")
|
||||
}
|
||||
|
||||
buildTypes {
|
||||
@@ -51,6 +49,21 @@ android {
|
||||
viewBinding = true
|
||||
}
|
||||
|
||||
flavorDimensions.add("type")
|
||||
productFlavors {
|
||||
create("foss") {
|
||||
dimension = "type"
|
||||
isDefault = true
|
||||
}
|
||||
create("gplay") {
|
||||
dimension = "type"
|
||||
|
||||
// Google doesn't allow donation links
|
||||
buildConfigField("boolean", "showDonate", "false")
|
||||
buildConfigField("boolean", "showRateOnGooglePlay", "true")
|
||||
}
|
||||
}
|
||||
|
||||
bundle {
|
||||
language {
|
||||
enableSplit = false
|
||||
@@ -86,21 +99,25 @@ android {
|
||||
lintConfig = file("lint.xml")
|
||||
}
|
||||
kotlinOptions {
|
||||
jvmTarget = "17"
|
||||
jvmTarget = "21"
|
||||
}
|
||||
compileOptions {
|
||||
sourceCompatibility = JavaVersion.VERSION_21
|
||||
targetCompatibility = JavaVersion.VERSION_21
|
||||
}
|
||||
}
|
||||
|
||||
dependencies {
|
||||
// AndroidX
|
||||
implementation("androidx.appcompat:appcompat:1.7.0")
|
||||
implementation("androidx.constraintlayout:constraintlayout:2.2.0")
|
||||
implementation("androidx.core:core-ktx:1.13.1")
|
||||
implementation("androidx.appcompat:appcompat:1.7.1")
|
||||
implementation("androidx.constraintlayout:constraintlayout:2.2.1")
|
||||
implementation("androidx.core:core-ktx:1.16.0")
|
||||
implementation("androidx.core:core-splashscreen:1.0.1")
|
||||
implementation("androidx.exifinterface:exifinterface:1.3.7")
|
||||
implementation("androidx.exifinterface:exifinterface:1.4.1")
|
||||
implementation("androidx.palette:palette:1.0.0")
|
||||
implementation("androidx.preference:preference:1.2.1")
|
||||
implementation("com.google.android.material:material:1.12.0")
|
||||
coreLibraryDesugaring("com.android.tools:desugar_jdk_libs:2.1.3")
|
||||
coreLibraryDesugaring("com.android.tools:desugar_jdk_libs:2.1.5")
|
||||
|
||||
// Third-party
|
||||
implementation("com.journeyapps:zxing-android-embedded:4.3.0@aar")
|
||||
@@ -110,9 +127,6 @@ dependencies {
|
||||
implementation("com.jaredrummler:colorpicker:1.1.0")
|
||||
implementation("net.lingala.zip4j:zip4j:2.11.5")
|
||||
|
||||
// SpotBugs
|
||||
implementation("io.wcm.tooling.spotbugs:io.wcm.tooling.spotbugs.annotations:1.0.0")
|
||||
|
||||
// Testing
|
||||
val androidXTestVersion = "1.6.1"
|
||||
val junitVersion = "4.13.2"
|
||||
@@ -128,18 +142,6 @@ dependencies {
|
||||
androidTestImplementation("androidx.test.espresso:espresso-core:3.6.1")
|
||||
}
|
||||
|
||||
tasks.withType<SpotBugsTask>().configureEach {
|
||||
description = "Run spotbugs"
|
||||
group = "verification"
|
||||
|
||||
//classes = fileTree("build/intermediates/javac/debug/compileDebugJavaWithJavac/classes")
|
||||
//source = fileTree("src/main/java")
|
||||
//classpath = files()
|
||||
|
||||
reports.maybeCreate("xml").required.set(false)
|
||||
reports.maybeCreate("html").required.set(true)
|
||||
}
|
||||
|
||||
tasks.register("copyRawResFiles", Copy::class) {
|
||||
from(
|
||||
layout.projectDirectory.file("../CHANGELOG.md"),
|
||||
|
||||
@@ -1,2 +1,4 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<resources></resources>
|
||||
<resources>
|
||||
<string name="app_name">Catima Fehlersuche</string>
|
||||
</resources>
|
||||
|
||||
@@ -1,2 +1,4 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<resources></resources>
|
||||
<resources>
|
||||
<string name="app_name">Отстраняване на грешки в Catima</string>
|
||||
</resources>
|
||||
|
||||
@@ -1,2 +1,4 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<resources></resources>
|
||||
<resources>
|
||||
<string name="app_name">ক্যাটিমা ডিবাগ</string>
|
||||
</resources>
|
||||
|
||||
@@ -1,2 +1,4 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<resources></resources>
|
||||
<resources>
|
||||
<string name="app_name">ক্যাটিমা ডিবাগ</string>
|
||||
</resources>
|
||||
|
||||
@@ -1,2 +1,4 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<resources></resources>
|
||||
<resources>
|
||||
<string name="app_name">Catima Otklanjanje Grešaka</string>
|
||||
</resources>
|
||||
|
||||
@@ -1,2 +1,4 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<resources></resources>
|
||||
<resources>
|
||||
<string name="app_name">Debugar Catima</string>
|
||||
</resources>
|
||||
|
||||
@@ -1,4 +1,4 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<resources>
|
||||
<string name="app_name">Catima Debug</string>
|
||||
</resources>
|
||||
<string name="app_name">Catima Ladění</string>
|
||||
</resources>
|
||||
|
||||
@@ -1,2 +1,4 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<resources></resources>
|
||||
<resources>
|
||||
<string name="app_name">Catima Datfygio</string>
|
||||
</resources>
|
||||
|
||||
@@ -1,2 +1,4 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<resources></resources>
|
||||
<resources>
|
||||
<string name="app_name">Catima Fejlfinding</string>
|
||||
</resources>
|
||||
|
||||
@@ -1,2 +1,4 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<resources></resources>
|
||||
<resources>
|
||||
<string name="app_name">Catima Depuración</string>
|
||||
</resources>
|
||||
|
||||
4
app/src/debug/res/values-fa/strings.xml
Normal file
4
app/src/debug/res/values-fa/strings.xml
Normal file
@@ -0,0 +1,4 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<resources>
|
||||
<string name="app_name">عیبیابی کاتیما</string>
|
||||
</resources>
|
||||
@@ -1,4 +1,4 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<resources>
|
||||
<string name="app_name">Débogage de Catima</string>
|
||||
</resources>
|
||||
</resources>
|
||||
|
||||
@@ -1,2 +1,4 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<resources></resources>
|
||||
<resources>
|
||||
<string name="app_name">Catima Villuleit</string>
|
||||
</resources>
|
||||
|
||||
@@ -1,2 +1,4 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<resources></resources>
|
||||
<resources>
|
||||
<string name="app_name">Catimaデバーグ</string>
|
||||
</resources>
|
||||
|
||||
@@ -1,2 +1,4 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<resources></resources>
|
||||
<resources>
|
||||
<string name="app_name">Catima Feelerkorrektur</string>
|
||||
</resources>
|
||||
|
||||
@@ -1,2 +1,4 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<resources></resources>
|
||||
<resources>
|
||||
<string name="app_name">Catima Klaidų Taisymas</string>
|
||||
</resources>
|
||||
|
||||
@@ -1,2 +1,4 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<resources></resources>
|
||||
<resources>
|
||||
<string name="app_name">കാറ്റിമ ഡീബഗ്</string>
|
||||
</resources>
|
||||
|
||||
@@ -1,2 +1,4 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<resources></resources>
|
||||
<resources>
|
||||
<string name="app_name">कॅटिमा डीबग</string>
|
||||
</resources>
|
||||
|
||||
@@ -1,2 +1,4 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<resources></resources>
|
||||
<resources>
|
||||
<string name="app_name">Catima Correcion d\'Errors</string>
|
||||
</resources>
|
||||
|
||||
@@ -1,2 +1,4 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<resources></resources>
|
||||
<resources>
|
||||
<string name="app_name">Catima Odpravljanje Napak</string>
|
||||
</resources>
|
||||
|
||||
2
app/src/debug/res/values-ta/strings.xml
Normal file
2
app/src/debug/res/values-ta/strings.xml
Normal file
@@ -0,0 +1,2 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<resources></resources>
|
||||
@@ -1,4 +1,4 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<resources>
|
||||
<string name="app_name">Catima Hata Ayaklama</string>
|
||||
</resources>
|
||||
<string name="app_name">Catima Hata Ayıklama</string>
|
||||
</resources>
|
||||
|
||||
4
app/src/debug/res/values-tzm/strings.xml
Normal file
4
app/src/debug/res/values-tzm/strings.xml
Normal file
@@ -0,0 +1,4 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<resources>
|
||||
<string name="app_name">ⴽⴰⵜⵉⵎⴰ ⴰⵙⵔⴰⵡ</string>
|
||||
</resources>
|
||||
@@ -49,6 +49,8 @@
|
||||
<data android:mimeType="image/*" />
|
||||
<data android:mimeType="application/pdf" />
|
||||
<data android:mimeType="application/vnd.apple.pkpass" />
|
||||
<data android:mimeType="application/vnd-com.apple.pkpass" />
|
||||
<data android:mimeType="application/vnd.espass-espass" />
|
||||
</intent-filter>
|
||||
<intent-filter>
|
||||
<action android:name="android.intent.action.SEND" />
|
||||
@@ -58,6 +60,8 @@
|
||||
<data android:mimeType="image/*" />
|
||||
<data android:mimeType="application/pdf" />
|
||||
<data android:mimeType="application/vnd.apple.pkpass" />
|
||||
<data android:mimeType="application/vnd-com.apple.pkpass" />
|
||||
<data android:mimeType="application/vnd.espass-espass" />
|
||||
</intent-filter>
|
||||
</activity>
|
||||
<activity
|
||||
@@ -75,13 +79,12 @@
|
||||
<activity
|
||||
android:name=".LoyaltyCardViewActivity"
|
||||
android:exported="true"
|
||||
android:theme="@style/AppTheme.NoActionBar"
|
||||
android:windowSoftInputMode="stateHidden" />
|
||||
android:theme="@style/AppTheme.NoActionBar" />
|
||||
<activity
|
||||
android:name=".LoyaltyCardEditActivity"
|
||||
android:exported="true"
|
||||
android:theme="@style/AppTheme.NoActionBar"
|
||||
android:windowSoftInputMode="stateHidden">
|
||||
android:windowSoftInputMode="adjustResize">
|
||||
<intent-filter
|
||||
android:autoVerify="true"
|
||||
android:label="@string/app_name">
|
||||
@@ -119,8 +122,7 @@
|
||||
<activity
|
||||
android:name=".BarcodeSelectorActivity"
|
||||
android:label="@string/selectBarcodeTitle"
|
||||
android:theme="@style/AppTheme.NoActionBar"
|
||||
android:windowSoftInputMode="stateHidden" />
|
||||
android:theme="@style/AppTheme.NoActionBar" />
|
||||
<activity
|
||||
android:name=".preferences.SettingsActivity"
|
||||
android:label="@string/settings"
|
||||
|
||||
@@ -1,147 +0,0 @@
|
||||
package protect.card_locker;
|
||||
|
||||
import android.os.Bundle;
|
||||
import android.text.Spanned;
|
||||
import android.view.MenuItem;
|
||||
import android.view.View;
|
||||
import android.widget.ScrollView;
|
||||
import android.widget.TextView;
|
||||
|
||||
import androidx.annotation.Nullable;
|
||||
import androidx.annotation.StringRes;
|
||||
|
||||
import com.google.android.material.dialog.MaterialAlertDialogBuilder;
|
||||
|
||||
import protect.card_locker.databinding.AboutActivityBinding;
|
||||
|
||||
public class AboutActivity extends CatimaAppCompatActivity {
|
||||
|
||||
private static final String TAG = "Catima";
|
||||
|
||||
private AboutActivityBinding binding;
|
||||
private AboutContent content;
|
||||
|
||||
@Override
|
||||
protected void onCreate(Bundle savedInstanceState) {
|
||||
super.onCreate(savedInstanceState);
|
||||
binding = AboutActivityBinding.inflate(getLayoutInflater());
|
||||
content = new AboutContent(this);
|
||||
setTitle(content.getPageTitle());
|
||||
setContentView(binding.getRoot());
|
||||
setSupportActionBar(binding.toolbar);
|
||||
enableToolbarBackButton();
|
||||
|
||||
TextView copyright = binding.creditsSub;
|
||||
copyright.setText(content.getCopyrightShort());
|
||||
TextView versionHistory = binding.versionHistorySub;
|
||||
versionHistory.setText(content.getVersionHistory());
|
||||
|
||||
binding.versionHistory.setTag("https://catima.app/changelog/");
|
||||
binding.translate.setTag("https://hosted.weblate.org/engage/catima/");
|
||||
binding.license.setTag("https://github.com/CatimaLoyalty/Android/blob/main/LICENSE");
|
||||
binding.repo.setTag("https://github.com/CatimaLoyalty/Android/");
|
||||
binding.privacy.setTag("https://catima.app/privacy-policy/");
|
||||
binding.reportError.setTag("https://github.com/CatimaLoyalty/Android/issues");
|
||||
binding.rate.setTag("https://play.google.com/store/apps/details?id=me.hackerchick.catima");
|
||||
binding.donate.setTag("https://catima.app/donate");
|
||||
|
||||
boolean installedFromGooglePlay = Utils.installedFromGooglePlay(this);
|
||||
// Hide Google Play rate button if not on Google Play
|
||||
binding.rate.setVisibility(installedFromGooglePlay ? View.VISIBLE : View.GONE);
|
||||
// Hide donate button on Google Play (Google Play doesn't allow donation links)
|
||||
binding.donate.setVisibility(installedFromGooglePlay ? View.GONE : View.VISIBLE);
|
||||
|
||||
bindClickListeners();
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean onOptionsItemSelected(MenuItem item) {
|
||||
int id = item.getItemId();
|
||||
if (id == android.R.id.home) {
|
||||
finish();
|
||||
}
|
||||
return super.onOptionsItemSelected(item);
|
||||
}
|
||||
|
||||
@Override
|
||||
protected void onDestroy() {
|
||||
super.onDestroy();
|
||||
content.destroy();
|
||||
clearClickListeners();
|
||||
binding = null;
|
||||
}
|
||||
|
||||
private void bindClickListeners() {
|
||||
binding.versionHistory.setOnClickListener(this::showHistory);
|
||||
binding.translate.setOnClickListener(this::openExternalBrowser);
|
||||
binding.license.setOnClickListener(this::showLicense);
|
||||
binding.repo.setOnClickListener(this::openExternalBrowser);
|
||||
binding.privacy.setOnClickListener(this::showPrivacy);
|
||||
binding.reportError.setOnClickListener(this::openExternalBrowser);
|
||||
binding.rate.setOnClickListener(this::openExternalBrowser);
|
||||
binding.donate.setOnClickListener(this::openExternalBrowser);
|
||||
|
||||
binding.credits.setOnClickListener(view -> showCredits());
|
||||
}
|
||||
|
||||
private void clearClickListeners() {
|
||||
binding.versionHistory.setOnClickListener(null);
|
||||
binding.translate.setOnClickListener(null);
|
||||
binding.license.setOnClickListener(null);
|
||||
binding.repo.setOnClickListener(null);
|
||||
binding.privacy.setOnClickListener(null);
|
||||
binding.reportError.setOnClickListener(null);
|
||||
binding.rate.setOnClickListener(null);
|
||||
binding.donate.setOnClickListener(null);
|
||||
|
||||
binding.credits.setOnClickListener(null);
|
||||
}
|
||||
|
||||
private void showCredits() {
|
||||
showHTML(R.string.credits, content.getContributorInfo(), null);
|
||||
}
|
||||
|
||||
private void showHistory(View view) {
|
||||
showHTML(R.string.version_history, content.getHistoryInfo(), view);
|
||||
}
|
||||
|
||||
private void showLicense(View view) {
|
||||
showHTML(R.string.license, content.getLicenseInfo(), view);
|
||||
}
|
||||
|
||||
private void showPrivacy(View view) {
|
||||
showHTML(R.string.privacy_policy, content.getPrivacyInfo(), view);
|
||||
}
|
||||
|
||||
private void showHTML(@StringRes int title, final Spanned text, @Nullable View view) {
|
||||
int dialogContentPadding = getResources().getDimensionPixelSize(R.dimen.alert_dialog_content_padding);
|
||||
TextView textView = new TextView(this);
|
||||
textView.setText(text);
|
||||
Utils.makeTextViewLinksClickable(textView, text);
|
||||
ScrollView scrollView = new ScrollView(this);
|
||||
scrollView.addView(textView);
|
||||
scrollView.setPadding(dialogContentPadding, dialogContentPadding / 2, dialogContentPadding, 0);
|
||||
|
||||
// Create dialog
|
||||
MaterialAlertDialogBuilder materialAlertDialogBuilder = new MaterialAlertDialogBuilder(this);
|
||||
materialAlertDialogBuilder
|
||||
.setTitle(title)
|
||||
.setView(scrollView)
|
||||
.setPositiveButton(R.string.ok, null);
|
||||
|
||||
// Add View online button if an URL is linked to this view
|
||||
if (view != null && view.getTag() != null) {
|
||||
materialAlertDialogBuilder.setNeutralButton(R.string.view_online, (dialog, which) -> openExternalBrowser(view));
|
||||
}
|
||||
|
||||
// Show dialog
|
||||
materialAlertDialogBuilder.show();
|
||||
}
|
||||
|
||||
private void openExternalBrowser(View view) {
|
||||
Object tag = view.getTag();
|
||||
if (tag instanceof String && ((String) tag).startsWith("https://")) {
|
||||
(new OpenWebLinkHandler()).openBrowser(this, (String) tag);
|
||||
}
|
||||
}
|
||||
}
|
||||
149
app/src/main/java/protect/card_locker/AboutActivity.kt
Normal file
149
app/src/main/java/protect/card_locker/AboutActivity.kt
Normal file
@@ -0,0 +1,149 @@
|
||||
package protect.card_locker
|
||||
|
||||
import android.os.Bundle
|
||||
import android.text.Spanned
|
||||
import android.view.MenuItem
|
||||
import android.view.View
|
||||
import android.widget.ScrollView
|
||||
import android.widget.TextView
|
||||
|
||||
import androidx.annotation.StringRes
|
||||
import androidx.core.view.isVisible
|
||||
|
||||
import com.google.android.material.dialog.MaterialAlertDialogBuilder
|
||||
|
||||
import protect.card_locker.databinding.AboutActivityBinding
|
||||
|
||||
class AboutActivity : CatimaAppCompatActivity() {
|
||||
private companion object {
|
||||
private const val TAG = "Catima"
|
||||
}
|
||||
|
||||
private lateinit var binding: AboutActivityBinding
|
||||
private lateinit var content: AboutContent
|
||||
|
||||
override fun onCreate(savedInstanceState: Bundle?) {
|
||||
super.onCreate(savedInstanceState)
|
||||
binding = AboutActivityBinding.inflate(layoutInflater)
|
||||
content = AboutContent(this)
|
||||
title = content.pageTitle
|
||||
setContentView(binding.root)
|
||||
setSupportActionBar(binding.toolbar)
|
||||
enableToolbarBackButton()
|
||||
|
||||
binding.apply {
|
||||
creditsSub.text = content.copyrightShort
|
||||
versionHistorySub.text = content.versionHistory
|
||||
|
||||
versionHistory.tag = "https://catima.app/changelog/"
|
||||
translate.tag = "https://hosted.weblate.org/engage/catima/"
|
||||
license.tag = "https://github.com/CatimaLoyalty/Android/blob/main/LICENSE"
|
||||
repo.tag = "https://github.com/CatimaLoyalty/Android/"
|
||||
privacy.tag = "https://catima.app/privacy-policy/"
|
||||
reportError.tag = "https://github.com/CatimaLoyalty/Android/issues"
|
||||
rate.tag = "https://play.google.com/store/apps/details?id=me.hackerchick.catima"
|
||||
donate.tag = "https://catima.app/donate"
|
||||
|
||||
// Hide Google Play rate button if not on Google Play
|
||||
rate.isVisible = BuildConfig.showRateOnGooglePlay
|
||||
// Hide donate button on Google Play (Google Play doesn't allow donation links)
|
||||
donate.isVisible = BuildConfig.showDonate
|
||||
}
|
||||
|
||||
bindClickListeners()
|
||||
}
|
||||
|
||||
override fun onOptionsItemSelected(item: MenuItem): Boolean {
|
||||
return when (item.itemId) {
|
||||
android.R.id.home -> {
|
||||
finish()
|
||||
true
|
||||
}
|
||||
|
||||
else -> super.onOptionsItemSelected(item)
|
||||
}
|
||||
}
|
||||
|
||||
override fun onDestroy() {
|
||||
super.onDestroy()
|
||||
content.destroy()
|
||||
clearClickListeners()
|
||||
}
|
||||
|
||||
private fun bindClickListeners() {
|
||||
binding.apply {
|
||||
versionHistory.setOnClickListener { showHistory(it) }
|
||||
translate.setOnClickListener { openExternalBrowser(it) }
|
||||
license.setOnClickListener { showLicense(it) }
|
||||
repo.setOnClickListener { openExternalBrowser(it) }
|
||||
privacy.setOnClickListener { showPrivacy(it) }
|
||||
reportError.setOnClickListener { openExternalBrowser(it) }
|
||||
rate.setOnClickListener { openExternalBrowser(it) }
|
||||
donate.setOnClickListener { openExternalBrowser(it) }
|
||||
credits.setOnClickListener { showCredits() }
|
||||
}
|
||||
}
|
||||
|
||||
private fun clearClickListeners() {
|
||||
binding.apply {
|
||||
versionHistory.setOnClickListener(null)
|
||||
translate.setOnClickListener(null)
|
||||
license.setOnClickListener(null)
|
||||
repo.setOnClickListener(null)
|
||||
privacy.setOnClickListener(null)
|
||||
reportError.setOnClickListener(null)
|
||||
rate.setOnClickListener(null)
|
||||
donate.setOnClickListener(null)
|
||||
credits.setOnClickListener(null)
|
||||
}
|
||||
}
|
||||
|
||||
private fun showCredits() {
|
||||
showHTML(R.string.credits, content.contributorInfo, null)
|
||||
}
|
||||
|
||||
private fun showHistory(view: View) {
|
||||
showHTML(R.string.version_history, content.historyInfo, view)
|
||||
}
|
||||
|
||||
private fun showLicense(view: View) {
|
||||
showHTML(R.string.license, content.licenseInfo, view)
|
||||
}
|
||||
|
||||
private fun showPrivacy(view: View) {
|
||||
showHTML(R.string.privacy_policy, content.privacyInfo, view)
|
||||
}
|
||||
|
||||
private fun showHTML(@StringRes title: Int, text: Spanned, view: View?) {
|
||||
val dialogContentPadding = resources.getDimensionPixelSize(R.dimen.alert_dialog_content_padding)
|
||||
val textView = TextView(this).apply {
|
||||
setText(text)
|
||||
Utils.makeTextViewLinksClickable(this, text)
|
||||
}
|
||||
|
||||
val scrollView = ScrollView(this).apply {
|
||||
addView(textView)
|
||||
setPadding(dialogContentPadding, dialogContentPadding / 2, dialogContentPadding, 0)
|
||||
}
|
||||
|
||||
MaterialAlertDialogBuilder(this).apply {
|
||||
setTitle(title)
|
||||
setView(scrollView)
|
||||
setPositiveButton(R.string.ok, null)
|
||||
|
||||
// Add View online button if an URL is linked to this view
|
||||
view?.tag?.let {
|
||||
setNeutralButton(R.string.view_online) { _, _ -> openExternalBrowser(view) }
|
||||
}
|
||||
|
||||
show()
|
||||
}
|
||||
}
|
||||
|
||||
private fun openExternalBrowser(view: View) {
|
||||
val tag = view.tag
|
||||
if (tag is String && tag.startsWith("https://")) {
|
||||
OpenWebLinkHandler().openBrowser(this, tag)
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -49,7 +49,7 @@ public class BarcodeImageWriterTask implements CompatCallable<Bitmap> {
|
||||
BarcodeImageWriterTask(
|
||||
Context context, ImageView imageView, String cardIdString,
|
||||
CatimaBarcode barcodeFormat, TextView textView,
|
||||
boolean showFallback, BarcodeImageWriterResultCallback callback, boolean roundCornerPadding
|
||||
boolean showFallback, BarcodeImageWriterResultCallback callback, boolean roundCornerPadding, boolean isFullscreen
|
||||
) {
|
||||
mContext = context;
|
||||
|
||||
@@ -86,13 +86,13 @@ public class BarcodeImageWriterTask implements CompatCallable<Bitmap> {
|
||||
|
||||
if (format.isSquare()) {
|
||||
imageHeight = imageWidth = Math.min(imageViewHeight, Math.min(MAX_WIDTH, imageViewWidth));
|
||||
} else if (imageView.getWidth() < MAX_WIDTH) {
|
||||
} else if (imageView.getWidth() < MAX_WIDTH && !isFullscreen) {
|
||||
imageHeight = imageViewHeight;
|
||||
imageWidth = imageViewWidth;
|
||||
} else {
|
||||
// Scale down the image to reduce the memory needed to produce it
|
||||
imageWidth = MAX_WIDTH;
|
||||
double ratio = (double) MAX_WIDTH / (double) imageViewWidth;
|
||||
imageWidth = Math.min(MAX_WIDTH, this.mContext.getResources().getDisplayMetrics().widthPixels);
|
||||
double ratio = (double) imageWidth / (double) imageViewWidth;
|
||||
imageHeight = (int) (imageViewHeight * ratio);
|
||||
}
|
||||
|
||||
|
||||
@@ -45,6 +45,7 @@ public class BarcodeSelectorActivity extends CatimaAppCompatActivity implements
|
||||
binding = BarcodeSelectorActivityBinding.inflate(getLayoutInflater());
|
||||
setTitle(R.string.selectBarcodeTitle);
|
||||
setContentView(binding.getRoot());
|
||||
Utils.applyWindowInsets(binding.getRoot());
|
||||
Toolbar toolbar = binding.toolbar;
|
||||
setSupportActionBar(toolbar);
|
||||
enableToolbarBackButton();
|
||||
|
||||
@@ -92,13 +92,13 @@ public class BarcodeSelectorAdapter extends ArrayAdapter<CatimaBarcodeWithValue>
|
||||
|
||||
Log.d(TAG, "Generating barcode for type " + formatType);
|
||||
|
||||
BarcodeImageWriterTask barcodeWriter = new BarcodeImageWriterTask(getContext(), image, cardId, format, text, true, null, true);
|
||||
BarcodeImageWriterTask barcodeWriter = new BarcodeImageWriterTask(getContext(), image, cardId, format, text, true, null, true, false);
|
||||
mTasks.executeTask(TaskHandler.TYPE.BARCODE, barcodeWriter);
|
||||
}
|
||||
});
|
||||
} else {
|
||||
Log.d(TAG, "Generating barcode for type " + formatType);
|
||||
BarcodeImageWriterTask barcodeWriter = new BarcodeImageWriterTask(getContext(), image, cardId, format, text, true, null, true);
|
||||
BarcodeImageWriterTask barcodeWriter = new BarcodeImageWriterTask(getContext(), image, cardId, format, text, true, null, true, false);
|
||||
mTasks.executeTask(TaskHandler.TYPE.BARCODE, barcodeWriter);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -36,6 +36,7 @@ public class CardShortcutConfigure extends CatimaAppCompatActivity implements Lo
|
||||
setResult(RESULT_CANCELED);
|
||||
|
||||
setContentView(binding.getRoot());
|
||||
Utils.applyWindowInsets(binding.getRoot());
|
||||
Toolbar toolbar = binding.toolbar;
|
||||
toolbar.setTitle(R.string.shortcutSelectCard);
|
||||
setSupportActionBar(toolbar);
|
||||
|
||||
@@ -7,6 +7,7 @@ import android.os.Bundle;
|
||||
import android.view.View;
|
||||
import android.view.Window;
|
||||
|
||||
import androidx.activity.EdgeToEdge;
|
||||
import androidx.annotation.NonNull;
|
||||
import androidx.annotation.Nullable;
|
||||
import androidx.appcompat.app.ActionBar;
|
||||
@@ -24,6 +25,7 @@ public class CatimaAppCompatActivity extends AppCompatActivity {
|
||||
|
||||
@Override
|
||||
protected void onCreate(@Nullable Bundle savedInstanceState) {
|
||||
EdgeToEdge.enable(this);
|
||||
super.onCreate(savedInstanceState);
|
||||
Utils.patchColors(this);
|
||||
}
|
||||
|
||||
@@ -23,10 +23,11 @@ import java.util.Set;
|
||||
public class DBHelper extends SQLiteOpenHelper {
|
||||
public static final String DATABASE_NAME = "Catima.db";
|
||||
public static final int ORIGINAL_DATABASE_VERSION = 1;
|
||||
public static final int DATABASE_VERSION = 16;
|
||||
public static final int DATABASE_VERSION = 17;
|
||||
|
||||
// NB: changing this value requires a migration
|
||||
// NB: changing these values requires a migration
|
||||
public static final int DEFAULT_ZOOM_LEVEL = 100;
|
||||
public static final int DEFAULT_ZOOM_LEVEL_WIDTH = 100;
|
||||
|
||||
public static class LoyaltyCardDbGroups {
|
||||
public static final String TABLE = "groups";
|
||||
@@ -51,6 +52,7 @@ public class DBHelper extends SQLiteOpenHelper {
|
||||
public static final String STAR_STATUS = "starstatus";
|
||||
public static final String LAST_USED = "lastused";
|
||||
public static final String ZOOM_LEVEL = "zoomlevel";
|
||||
public static final String ZOOM_LEVEL_WIDTH = "zoomlevelwidth";
|
||||
public static final String ARCHIVE_STATUS = "archive";
|
||||
}
|
||||
|
||||
@@ -70,6 +72,7 @@ public class DBHelper extends SQLiteOpenHelper {
|
||||
public enum LoyaltyCardOrder {
|
||||
Alpha,
|
||||
LastUsed,
|
||||
ValidFrom,
|
||||
Expiry
|
||||
}
|
||||
|
||||
@@ -112,6 +115,7 @@ public class DBHelper extends SQLiteOpenHelper {
|
||||
LoyaltyCardDbIds.STAR_STATUS + " INTEGER DEFAULT '0'," +
|
||||
LoyaltyCardDbIds.LAST_USED + " INTEGER DEFAULT '0', " +
|
||||
LoyaltyCardDbIds.ZOOM_LEVEL + " INTEGER DEFAULT '" + DEFAULT_ZOOM_LEVEL + "', " +
|
||||
LoyaltyCardDbIds.ZOOM_LEVEL_WIDTH + " INTEGER DEFAULT '" + DEFAULT_ZOOM_LEVEL_WIDTH + "', " +
|
||||
LoyaltyCardDbIds.ARCHIVE_STATUS + " INTEGER DEFAULT '0' )");
|
||||
|
||||
// create associative table for cards in groups
|
||||
@@ -326,6 +330,11 @@ public class DBHelper extends SQLiteOpenHelper {
|
||||
db.execSQL("ALTER TABLE " + LoyaltyCardDbIds.TABLE
|
||||
+ " ADD COLUMN " + LoyaltyCardDbIds.VALID_FROM + " INTEGER");
|
||||
}
|
||||
|
||||
if (oldVersion < 17 && newVersion >= 17) {
|
||||
db.execSQL("ALTER TABLE " + LoyaltyCardDbIds.TABLE
|
||||
+ " ADD COLUMN " + LoyaltyCardDbIds.ZOOM_LEVEL_WIDTH + " INTEGER DEFAULT '100' ");
|
||||
}
|
||||
}
|
||||
|
||||
public static Set<String> imageFiles(Context context, final SQLiteDatabase database) {
|
||||
@@ -515,15 +524,17 @@ public class DBHelper extends SQLiteOpenHelper {
|
||||
return (rowsUpdated == 1);
|
||||
}
|
||||
|
||||
public static boolean updateLoyaltyCardZoomLevel(SQLiteDatabase database, int loyaltyCardId, int zoomLevel) {
|
||||
public static boolean updateLoyaltyCardZoomLevel(SQLiteDatabase database, int loyaltyCardId, int zoomLevel, int zoomLevelWidth) {
|
||||
ContentValues contentValues = new ContentValues();
|
||||
contentValues.put(LoyaltyCardDbIds.ZOOM_LEVEL, zoomLevel);
|
||||
contentValues.put(LoyaltyCardDbIds.ZOOM_LEVEL_WIDTH, zoomLevelWidth);
|
||||
Log.d("updateLoyaltyCardZLevel", "Card Id = " + loyaltyCardId + " Zoom level= " + zoomLevel);
|
||||
Log.d("updateLoyaltyCardZoomLW", "Card Id = " + loyaltyCardId + " Zoom level width= " + zoomLevelWidth);
|
||||
int rowsUpdated = database.update(LoyaltyCardDbIds.TABLE, contentValues,
|
||||
whereAttrs(LoyaltyCardDbIds.ID),
|
||||
withArgs(loyaltyCardId));
|
||||
Log.d("updateLoyaltyCardZLevel", "Rows changed = " + rowsUpdated);
|
||||
return (rowsUpdated == 1);
|
||||
Log.d("updateLoyaltyCardZLevel", "Card Id = " + loyaltyCardId + " Zoom level = " + zoomLevel + " Zoom level width = " + zoomLevelWidth);
|
||||
return (rowsUpdated >= 1);
|
||||
}
|
||||
|
||||
public static boolean updateLoyaltyCardBalance(SQLiteDatabase database, final int id, final BigDecimal newBalance) {
|
||||
@@ -916,6 +927,10 @@ public class DBHelper extends SQLiteOpenHelper {
|
||||
return LoyaltyCardDbIds.LAST_USED;
|
||||
}
|
||||
|
||||
if (order == LoyaltyCardOrder.ValidFrom) {
|
||||
return LoyaltyCardDbIds.VALID_FROM;
|
||||
}
|
||||
|
||||
if (order == LoyaltyCardOrder.Expiry) {
|
||||
return LoyaltyCardDbIds.EXPIRY;
|
||||
}
|
||||
|
||||
@@ -50,7 +50,6 @@ public class ImportExportActivity extends CatimaAppCompatActivity {
|
||||
|
||||
private ActivityResultLauncher<Intent> fileCreateLauncher;
|
||||
private ActivityResultLauncher<String> fileOpenLauncher;
|
||||
private ActivityResultLauncher<Intent> filePickerLauncher;
|
||||
|
||||
final private TaskHandler mTasks = new TaskHandler();
|
||||
|
||||
@@ -60,13 +59,14 @@ public class ImportExportActivity extends CatimaAppCompatActivity {
|
||||
binding = ImportExportActivityBinding.inflate(getLayoutInflater());
|
||||
setTitle(R.string.importExport);
|
||||
setContentView(binding.getRoot());
|
||||
Utils.applyWindowInsets(binding.getRoot());
|
||||
Toolbar toolbar = binding.toolbar;
|
||||
setSupportActionBar(toolbar);
|
||||
enableToolbarBackButton();
|
||||
|
||||
Intent fileIntent = getIntent();
|
||||
if (fileIntent != null && fileIntent.getType() != null) {
|
||||
chooseImportType(false, fileIntent.getData());
|
||||
chooseImportType(fileIntent.getData());
|
||||
}
|
||||
|
||||
// would use ActivityResultContracts.CreateDocument() but mime type cannot be set
|
||||
@@ -104,19 +104,6 @@ public class ImportExportActivity extends CatimaAppCompatActivity {
|
||||
}
|
||||
openFileForImport(result, null);
|
||||
});
|
||||
filePickerLauncher = registerForActivityResult(new ActivityResultContracts.StartActivityForResult(), result -> {
|
||||
Intent intent = result.getData();
|
||||
if (intent == null) {
|
||||
Log.e(TAG, "Activity returned NULL data");
|
||||
return;
|
||||
}
|
||||
Uri uri = intent.getData();
|
||||
if (uri == null) {
|
||||
Log.e(TAG, "Activity returned NULL uri");
|
||||
return;
|
||||
}
|
||||
openFileForImport(intent.getData(), null);
|
||||
});
|
||||
|
||||
// Check that there is a file manager available
|
||||
final Intent intentCreateDocumentAction = new Intent(Intent.ACTION_CREATE_DOCUMENT);
|
||||
@@ -159,11 +146,7 @@ public class ImportExportActivity extends CatimaAppCompatActivity {
|
||||
|
||||
// Check that there is a file manager available
|
||||
Button importFilesystem = binding.importOptionFilesystemButton;
|
||||
importFilesystem.setOnClickListener(v -> chooseImportType(false, null));
|
||||
|
||||
// Check that there is an app that data can be imported from
|
||||
Button importApplication = binding.importOptionApplicationButton;
|
||||
importApplication.setOnClickListener(v -> chooseImportType(true, null));
|
||||
importFilesystem.setOnClickListener(v -> chooseImportType(null));
|
||||
|
||||
// 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
|
||||
@@ -188,8 +171,7 @@ public class ImportExportActivity extends CatimaAppCompatActivity {
|
||||
}.start();
|
||||
}
|
||||
|
||||
private void chooseImportType(boolean choosePicker,
|
||||
@Nullable Uri fileData) {
|
||||
private void chooseImportType(@Nullable Uri fileData) {
|
||||
|
||||
List<CharSequence> betaImportOptions = new ArrayList<>();
|
||||
betaImportOptions.add("Fidme");
|
||||
@@ -250,20 +232,12 @@ public class ImportExportActivity extends CatimaAppCompatActivity {
|
||||
new MaterialAlertDialogBuilder(this)
|
||||
.setTitle(importAlertTitle)
|
||||
.setMessage(importAlertMessage)
|
||||
.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);
|
||||
}
|
||||
.setPositiveButton(R.string.ok, (dialog1, which1) -> {
|
||||
try {
|
||||
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);
|
||||
}
|
||||
})
|
||||
.setNegativeButton(R.string.cancel, null)
|
||||
|
||||
@@ -140,6 +140,7 @@ public class ImportURIHelper {
|
||||
0,
|
||||
Utils.getUnixTime(),
|
||||
100,
|
||||
100,
|
||||
0,
|
||||
null,
|
||||
null,
|
||||
|
||||
@@ -35,8 +35,10 @@ public class LoyaltyCard {
|
||||
public int starStatus;
|
||||
public long lastUsed;
|
||||
public int zoomLevel;
|
||||
public int zoomLevelWidth;
|
||||
public int archiveStatus;
|
||||
|
||||
|
||||
@Nullable
|
||||
private Bitmap imageThumbnail;
|
||||
@Nullable
|
||||
@@ -64,6 +66,7 @@ public class LoyaltyCard {
|
||||
public static final String BUNDLE_LOYALTY_CARD_STAR_STATUS = "loyaltyCardStarStatus";
|
||||
public static final String BUNDLE_LOYALTY_CARD_LAST_USED = "loyaltyCardLastUsed";
|
||||
public static final String BUNDLE_LOYALTY_CARD_ZOOM_LEVEL = "loyaltyCardZoomLevel";
|
||||
public static final String BUNDLE_LOYALTY_CARD_ZOOM_LEVEL_WIDTH = "loyaltyCardZoomLevelWidth";
|
||||
public static final String BUNDLE_LOYALTY_CARD_ARCHIVE_STATUS = "loyaltyCardArchiveStatus";
|
||||
public static final String BUNDLE_LOYALTY_CARD_IMAGE_THUMBNAIL = "loyaltyCardImageThumbnail";
|
||||
public static final String BUNDLE_LOYALTY_CARD_IMAGE_FRONT = "loyaltyCardImageFront";
|
||||
@@ -91,6 +94,7 @@ public class LoyaltyCard {
|
||||
setStarStatus(0);
|
||||
setLastUsed(Utils.getUnixTime());
|
||||
setZoomLevel(100);
|
||||
setZoomLevelWidth(100);
|
||||
setArchiveStatus(0);
|
||||
setImageThumbnail(null, null);
|
||||
setImageFront(null, null);
|
||||
@@ -114,13 +118,14 @@ public class LoyaltyCard {
|
||||
* @param starStatus
|
||||
* @param lastUsed
|
||||
* @param zoomLevel
|
||||
* @param zoomLevelWidth
|
||||
* @param archiveStatus
|
||||
*/
|
||||
public LoyaltyCard(final int id, final String store, final String note, @Nullable final Date validFrom,
|
||||
@Nullable final Date expiry, final BigDecimal balance, @Nullable final Currency balanceType,
|
||||
final String cardId, @Nullable final String barcodeId, @Nullable final CatimaBarcode barcodeType,
|
||||
@Nullable final Integer headerColor, final int starStatus,
|
||||
final long lastUsed, final int zoomLevel, final int archiveStatus,
|
||||
final long lastUsed, final int zoomLevel, final int zoomLevelWidth, final int archiveStatus,
|
||||
@Nullable Bitmap imageThumbnail, @Nullable String imageThumbnailPath,
|
||||
@Nullable Bitmap imageFront, @Nullable String imageFrontPath,
|
||||
@Nullable Bitmap imageBack, @Nullable String imageBackPath) {
|
||||
@@ -138,6 +143,7 @@ public class LoyaltyCard {
|
||||
setStarStatus(starStatus);
|
||||
setLastUsed(lastUsed);
|
||||
setZoomLevel(zoomLevel);
|
||||
setZoomLevelWidth(zoomLevelWidth);
|
||||
setArchiveStatus(archiveStatus);
|
||||
setImageThumbnail(imageThumbnail, imageThumbnailPath);
|
||||
setImageFront(imageFront, imageFrontPath);
|
||||
@@ -262,6 +268,14 @@ public class LoyaltyCard {
|
||||
this.zoomLevel = zoomLevel;
|
||||
}
|
||||
|
||||
public void setZoomLevelWidth(int zoomLevelWidth) {
|
||||
if (zoomLevelWidth < 0 || zoomLevelWidth > 100) {
|
||||
throw new IllegalArgumentException("zoomLevelWidth must be in range 0-100");
|
||||
}
|
||||
|
||||
this.zoomLevelWidth = zoomLevelWidth;
|
||||
}
|
||||
|
||||
public void setArchiveStatus(int archiveStatus) {
|
||||
if (archiveStatus != 0 && archiveStatus != 1) {
|
||||
throw new IllegalArgumentException("archiveStatus must be 0 or 1");
|
||||
@@ -386,6 +400,11 @@ public class LoyaltyCard {
|
||||
} else if (requireFull) {
|
||||
throw new IllegalArgumentException("Missing key " + BUNDLE_LOYALTY_CARD_ZOOM_LEVEL);
|
||||
}
|
||||
if (bundle.containsKey(BUNDLE_LOYALTY_CARD_ZOOM_LEVEL_WIDTH)) {
|
||||
setZoomLevelWidth(bundle.getInt(BUNDLE_LOYALTY_CARD_ZOOM_LEVEL_WIDTH));
|
||||
} else if (requireFull) {
|
||||
throw new IllegalArgumentException("Missing key " + BUNDLE_LOYALTY_CARD_ZOOM_LEVEL_WIDTH);
|
||||
}
|
||||
if (bundle.containsKey(BUNDLE_LOYALTY_CARD_ARCHIVE_STATUS)) {
|
||||
setArchiveStatus(bundle.getInt(BUNDLE_LOYALTY_CARD_ARCHIVE_STATUS));
|
||||
} else if (requireFull) {
|
||||
@@ -455,6 +474,9 @@ public class LoyaltyCard {
|
||||
if (!exportIsLimited || exportLimit.contains(BUNDLE_LOYALTY_CARD_ZOOM_LEVEL)) {
|
||||
bundle.putInt(BUNDLE_LOYALTY_CARD_ZOOM_LEVEL, zoomLevel);
|
||||
}
|
||||
if (!exportIsLimited || exportLimit.contains(BUNDLE_LOYALTY_CARD_ZOOM_LEVEL_WIDTH)) {
|
||||
bundle.putInt(BUNDLE_LOYALTY_CARD_ZOOM_LEVEL_WIDTH, zoomLevelWidth);
|
||||
}
|
||||
if (!exportIsLimited || exportLimit.contains(BUNDLE_LOYALTY_CARD_ARCHIVE_STATUS)) {
|
||||
bundle.putInt(BUNDLE_LOYALTY_CARD_ARCHIVE_STATUS, archiveStatus);
|
||||
}
|
||||
@@ -526,6 +548,8 @@ public class LoyaltyCard {
|
||||
long lastUsed = cursor.getLong(cursor.getColumnIndexOrThrow(DBHelper.LoyaltyCardDbIds.LAST_USED));
|
||||
// zoomLevel
|
||||
int zoomLevel = cursor.getInt(cursor.getColumnIndexOrThrow(DBHelper.LoyaltyCardDbIds.ZOOM_LEVEL));
|
||||
// zoomLevelWidth
|
||||
int zoomLevelWidth = cursor.getInt(cursor.getColumnIndexOrThrow(DBHelper.LoyaltyCardDbIds.ZOOM_LEVEL_WIDTH));
|
||||
// archiveStatus
|
||||
int archiveStatus = cursor.getInt(cursor.getColumnIndexOrThrow(DBHelper.LoyaltyCardDbIds.ARCHIVE_STATUS));
|
||||
|
||||
@@ -544,6 +568,7 @@ public class LoyaltyCard {
|
||||
starStatus,
|
||||
lastUsed,
|
||||
zoomLevel,
|
||||
zoomLevelWidth,
|
||||
archiveStatus,
|
||||
null,
|
||||
Utils.getCardImageFileName(id, ImageLocationType.icon),
|
||||
@@ -556,7 +581,7 @@ public class LoyaltyCard {
|
||||
|
||||
public static boolean isDuplicate(Context context, final LoyaltyCard a, final LoyaltyCard b) {
|
||||
// Note: Bitmap comparing is slow, be careful when calling this method
|
||||
// Skip lastUsed & zoomLevel
|
||||
// Skip lastUsed & zoomLevel*
|
||||
return a.id == b.id && // non-nullable int
|
||||
a.store.equals(b.store) && // non-nullable String
|
||||
a.note.equals(b.note) && // non-nullable String
|
||||
@@ -595,7 +620,7 @@ public class LoyaltyCard {
|
||||
return String.format(
|
||||
"LoyaltyCard{%n id=%s,%n store=%s,%n note=%s,%n validFrom=%s,%n expiry=%s,%n"
|
||||
+ " balance=%s,%n balanceType=%s,%n cardId=%s,%n barcodeId=%s,%n barcodeType=%s,%n"
|
||||
+ " headerColor=%s,%n starStatus=%s,%n lastUsed=%s,%n zoomLevel=%s,%n archiveStatus=%s%n"
|
||||
+ " headerColor=%s,%n starStatus=%s,%n lastUsed=%s,%n zoomLevel=%s,%n zoomLevelWidth=%s,%n archiveStatus=%s%n"
|
||||
+ " imageThumbnail=%s,%n imageThumbnailPath=%s,%n imageFront=%s,%n imageFrontPath=%s,%n imageBack=%s,%n imageBackPath=%s,%n}",
|
||||
this.id,
|
||||
this.store,
|
||||
@@ -611,6 +636,7 @@ public class LoyaltyCard {
|
||||
this.starStatus,
|
||||
this.lastUsed,
|
||||
this.zoomLevel,
|
||||
this.zoomLevelWidth,
|
||||
this.archiveStatus,
|
||||
this.imageThumbnail,
|
||||
this.imageThumbnailPath,
|
||||
|
||||
@@ -124,9 +124,9 @@ public class LoyaltyCardCursorAdapter extends BaseCursorAdapter<LoyaltyCardCurso
|
||||
}
|
||||
|
||||
inputHolder.mCardIcon.setContentDescription(loyaltyCard.store);
|
||||
inputHolder.mIconBackgroundColor = Utils.setIconOrTextWithBackground(mContext, loyaltyCard, icon, inputHolder.mCardIcon, inputHolder.mCardText, new Settings(mContext).getPreferredColumnCount());
|
||||
Utils.setIconOrTextWithBackground(mContext, loyaltyCard, icon, inputHolder.mCardIcon, inputHolder.mCardText, new Settings(mContext).getPreferredColumnCount());
|
||||
|
||||
inputHolder.toggleCardStateIcon(loyaltyCard.starStatus != 0, loyaltyCard.archiveStatus != 0, itemSelected(inputCursor.getPosition()));
|
||||
inputHolder.toggleCardStateIcon(loyaltyCard.starStatus != 0, loyaltyCard.archiveStatus != 0);
|
||||
|
||||
inputHolder.itemView.setActivated(mSelectedItems.get(inputCursor.getPosition(), false));
|
||||
applyIconAnimation(inputHolder, inputCursor.getPosition());
|
||||
@@ -212,13 +212,11 @@ public class LoyaltyCardCursorAdapter extends BaseCursorAdapter<LoyaltyCardCurso
|
||||
public class LoyaltyCardListItemViewHolder extends RecyclerView.ViewHolder {
|
||||
|
||||
public TextView mCardText, mStoreField, mNoteField, mBalanceField, mValidFromField, mExpiryField;
|
||||
public ImageView mCardIcon, mStarBackground, mStarBorder, mTickIcon, mArchivedBackground;
|
||||
public ImageView mCardIcon, mTickIcon;
|
||||
public MaterialCardView mRow;
|
||||
public ConstraintLayout mStar, mArchived;
|
||||
public View mDivider;
|
||||
|
||||
private int mIconBackgroundColor;
|
||||
|
||||
protected LoyaltyCardListItemViewHolder(LoyaltyCardLayoutBinding loyaltyCardLayoutBinding, CardAdapterListener inputListener) {
|
||||
super(loyaltyCardLayoutBinding.getRoot());
|
||||
View inputView = loyaltyCardLayoutBinding.getRoot();
|
||||
@@ -232,10 +230,7 @@ public class LoyaltyCardCursorAdapter extends BaseCursorAdapter<LoyaltyCardCurso
|
||||
mCardIcon = loyaltyCardLayoutBinding.thumbnail;
|
||||
mCardText = loyaltyCardLayoutBinding.thumbnailText;
|
||||
mStar = loyaltyCardLayoutBinding.star;
|
||||
mStarBackground = loyaltyCardLayoutBinding.starBackground;
|
||||
mStarBorder = loyaltyCardLayoutBinding.starBorder;
|
||||
mArchived = loyaltyCardLayoutBinding.archivedIcon;
|
||||
mArchivedBackground = loyaltyCardLayoutBinding.archiveBackground;
|
||||
mTickIcon = loyaltyCardLayoutBinding.selectedThumbnail;
|
||||
inputView.setOnLongClickListener(view -> {
|
||||
inputListener.onRowClicked(getAdapterPosition());
|
||||
@@ -297,31 +292,7 @@ public class LoyaltyCardCursorAdapter extends BaseCursorAdapter<LoyaltyCardCurso
|
||||
mNoteField.requestLayout();
|
||||
}
|
||||
|
||||
public void toggleCardStateIcon(boolean enableStar, boolean enableArchive, boolean colorByTheme) {
|
||||
/* the below code does not work in android 5! hence the change of drawable instead
|
||||
boolean needDarkForeground = Utils.needsDarkForeground(mIconBackgroundColor);
|
||||
Drawable borderDrawable = mStarBorder.getDrawable().mutate();
|
||||
Drawable backgroundDrawable = mStarBackground.getDrawable().mutate();
|
||||
DrawableCompat.setTint(borderDrawable, needsDarkForeground ? Color.BLACK : Color.WHITE);
|
||||
DrawableCompat.setTint(backgroundDrawable, needsDarkForeground ? Color.BLACK : Color.WHITE);
|
||||
mStarBorder.setImageDrawable(borderDrawable);
|
||||
mStarBackground.setImageDrawable(backgroundDrawable);
|
||||
*/
|
||||
boolean dark = Utils.needsDarkForeground(mIconBackgroundColor);
|
||||
if (colorByTheme) {
|
||||
dark = !mDarkModeEnabled;
|
||||
}
|
||||
|
||||
if (dark) {
|
||||
mStarBorder.setImageResource(R.drawable.ic_unstarred_white);
|
||||
mStarBackground.setImageResource(R.drawable.ic_starred_black);
|
||||
mArchivedBackground.setImageResource(R.drawable.ic_baseline_archive_24_black);
|
||||
} else {
|
||||
mStarBorder.setImageResource(R.drawable.ic_unstarred_black);
|
||||
mStarBackground.setImageResource(R.drawable.ic_starred_white);
|
||||
mArchivedBackground.setImageResource(R.drawable.ic_baseline_archive_24);
|
||||
}
|
||||
|
||||
public void toggleCardStateIcon(boolean enableStar, boolean enableArchive) {
|
||||
if (enableStar) {
|
||||
mStar.setVisibility(View.VISIBLE);
|
||||
} else{
|
||||
@@ -333,11 +304,6 @@ public class LoyaltyCardCursorAdapter extends BaseCursorAdapter<LoyaltyCardCurso
|
||||
} else{
|
||||
mArchived.setVisibility(View.GONE);
|
||||
}
|
||||
|
||||
mStarBorder.invalidate();
|
||||
mStarBackground.invalidate();
|
||||
mArchivedBackground.invalidate();
|
||||
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -297,6 +297,7 @@ public class LoyaltyCardEditActivity extends CatimaAppCompatActivity implements
|
||||
super.onCreate(savedInstanceState);
|
||||
binding = LoyaltyCardEditActivityBinding.inflate(getLayoutInflater());
|
||||
setContentView(binding.getRoot());
|
||||
Utils.applyWindowInsets(binding.getRoot());
|
||||
|
||||
viewModel = new ViewModelProvider(this).get(LoyaltyCardEditActivityViewModel.class);
|
||||
|
||||
@@ -575,7 +576,6 @@ public class LoyaltyCardEditActivity extends CatimaAppCompatActivity implements
|
||||
|
||||
binding.tabs.addOnTabSelectedListener(new TabLayout.OnTabSelectedListener() {
|
||||
@Override
|
||||
@edu.umd.cs.findbugs.annotations.SuppressFBWarnings("NP_NULL_ON_SOME_PATH_FROM_RETURN_VALUE")
|
||||
public void onTabSelected(TabLayout.Tab tab) {
|
||||
viewModel.setTabIndex(tab.getPosition());
|
||||
showPart(tab.getText().toString());
|
||||
@@ -587,7 +587,6 @@ public class LoyaltyCardEditActivity extends CatimaAppCompatActivity implements
|
||||
}
|
||||
|
||||
@Override
|
||||
@edu.umd.cs.findbugs.annotations.SuppressFBWarnings("NP_NULL_ON_SOME_PATH_FROM_RETURN_VALUE")
|
||||
public void onTabReselected(TabLayout.Tab tab) {
|
||||
viewModel.setTabIndex(tab.getPosition());
|
||||
showPart(tab.getText().toString());
|
||||
@@ -1614,13 +1613,13 @@ public class LoyaltyCardEditActivity extends CatimaAppCompatActivity implements
|
||||
barcodeImage.getViewTreeObserver().removeOnGlobalLayoutListener(this);
|
||||
|
||||
Log.d(TAG, "ImageView size now known");
|
||||
BarcodeImageWriterTask barcodeWriter = new BarcodeImageWriterTask(getApplicationContext(), barcodeImage, cardIdString, barcodeFormat, null, false, LoyaltyCardEditActivity.this, true);
|
||||
BarcodeImageWriterTask barcodeWriter = new BarcodeImageWriterTask(getApplicationContext(), barcodeImage, cardIdString, barcodeFormat, null, false, LoyaltyCardEditActivity.this, true, false);
|
||||
viewModel.getTaskHandler().executeTask(TaskHandler.TYPE.BARCODE, barcodeWriter);
|
||||
}
|
||||
});
|
||||
} else {
|
||||
Log.d(TAG, "ImageView size known known, creating barcode");
|
||||
BarcodeImageWriterTask barcodeWriter = new BarcodeImageWriterTask(getApplicationContext(), barcodeImage, cardIdString, barcodeFormat, null, false, this, true);
|
||||
BarcodeImageWriterTask barcodeWriter = new BarcodeImageWriterTask(getApplicationContext(), barcodeImage, cardIdString, barcodeFormat, null, false, this, true, false);
|
||||
viewModel.getTaskHandler().executeTask(TaskHandler.TYPE.BARCODE, barcodeWriter);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -52,6 +52,7 @@ import androidx.core.view.accessibility.AccessibilityNodeInfoCompat;
|
||||
import com.google.android.material.color.MaterialColors;
|
||||
import com.google.android.material.dialog.MaterialAlertDialogBuilder;
|
||||
import com.google.android.material.textfield.TextInputEditText;
|
||||
import com.google.zxing.BarcodeFormat;
|
||||
|
||||
import java.io.File;
|
||||
import java.io.UnsupportedEncodingException;
|
||||
@@ -139,6 +140,7 @@ public class LoyaltyCardViewActivity extends CatimaAppCompatActivity implements
|
||||
// If the barcode is shown, switch to fullscreen layout
|
||||
if (imageType == ImageType.BARCODE) {
|
||||
setFullscreen(true);
|
||||
|
||||
return;
|
||||
}
|
||||
|
||||
@@ -221,7 +223,13 @@ public class LoyaltyCardViewActivity extends CatimaAppCompatActivity implements
|
||||
} else {
|
||||
binding.scalerGuideline.setGuidelinePercent(0.5f * scale);
|
||||
}
|
||||
}
|
||||
|
||||
private void setScalerWidthGuideline(int zoomLevelWidth) {
|
||||
float halfscale = zoomLevelWidth / 200f;
|
||||
|
||||
binding.scalerEndwidthguideline.setGuidelinePercent(0.5f + halfscale);
|
||||
binding.scalerStartwidthguideline.setGuidelinePercent(0.5f - halfscale);
|
||||
}
|
||||
|
||||
@Override
|
||||
@@ -248,6 +256,7 @@ public class LoyaltyCardViewActivity extends CatimaAppCompatActivity implements
|
||||
super.onCreate(savedInstanceState);
|
||||
binding = LoyaltyCardViewLayoutBinding.inflate(getLayoutInflater());
|
||||
setContentView(binding.getRoot());
|
||||
Utils.applyWindowInsets(binding.getRoot());
|
||||
Toolbar toolbar = binding.toolbar;
|
||||
setSupportActionBar(toolbar);
|
||||
|
||||
@@ -278,36 +287,8 @@ public class LoyaltyCardViewActivity extends CatimaAppCompatActivity implements
|
||||
database = new DBHelper(this).getWritableDatabase();
|
||||
importURIHelper = new ImportURIHelper(this);
|
||||
|
||||
binding.barcodeScaler.setOnSeekBarChangeListener(new SeekBar.OnSeekBarChangeListener() {
|
||||
@Override
|
||||
public void onProgressChanged(SeekBar seekBar, int progress, boolean fromUser) {
|
||||
if (!fromUser) {
|
||||
Log.d(TAG, "non user triggered onProgressChanged, ignoring, progress is " + progress);
|
||||
return;
|
||||
}
|
||||
Log.d(TAG, "Progress is " + progress);
|
||||
Log.d(TAG, "Max is " + binding.barcodeScaler.getMax());
|
||||
float scale = (float) progress / (float) binding.barcodeScaler.getMax();
|
||||
Log.d(TAG, "Scaling to " + scale);
|
||||
|
||||
loyaltyCard.zoomLevel = progress;
|
||||
DBHelper.updateLoyaltyCardZoomLevel(database, loyaltyCardId, loyaltyCard.zoomLevel);
|
||||
|
||||
setScalerGuideline(loyaltyCard.zoomLevel);
|
||||
|
||||
drawMainImage(mainImageIndex, true, isFullscreen);
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onStartTrackingTouch(SeekBar seekBar) {
|
||||
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onStopTrackingTouch(SeekBar seekBar) {
|
||||
|
||||
}
|
||||
});
|
||||
binding.barcodeScaler.setOnSeekBarChangeListener(setOnSeekBarChangeListenerUnifiedFunction());
|
||||
binding.barcodeWidthscaler.setOnSeekBarChangeListener(setOnSeekBarChangeListenerUnifiedFunction());
|
||||
|
||||
rotationEnabled = true;
|
||||
|
||||
@@ -369,6 +350,46 @@ public class LoyaltyCardViewActivity extends CatimaAppCompatActivity implements
|
||||
});
|
||||
}
|
||||
|
||||
private SeekBar.OnSeekBarChangeListener setOnSeekBarChangeListenerUnifiedFunction() {
|
||||
return new SeekBar.OnSeekBarChangeListener() {
|
||||
@Override
|
||||
public void onProgressChanged(SeekBar seekBar, int progress, boolean fromUser) {
|
||||
if (!fromUser) {
|
||||
Log.d(TAG, "non user triggered onProgressChanged, ignoring, progress is " + progress);
|
||||
return;
|
||||
}
|
||||
Log.d(TAG, "Progress is " + progress);
|
||||
if (seekBar.getId() == binding.barcodeScaler.getId()) {
|
||||
Log.d(TAG, "Max is " + binding.barcodeScaler.getMax());
|
||||
float scale = (float) progress / (float) binding.barcodeScaler.getMax();
|
||||
Log.d(TAG, "Scaling to " + scale);
|
||||
}
|
||||
else {
|
||||
Log.d(TAG, "Max is " + binding.barcodeWidthscaler.getMax());
|
||||
float scale = (float) progress / (float) binding.barcodeWidthscaler.getMax();
|
||||
Log.d(TAG, "Scaling to " + scale);
|
||||
}
|
||||
if (seekBar.getId() == binding.barcodeScaler.getId()) {
|
||||
loyaltyCard.zoomLevel = progress;
|
||||
setScalerGuideline(loyaltyCard.zoomLevel);
|
||||
}
|
||||
else {
|
||||
loyaltyCard.zoomLevelWidth = progress;
|
||||
setScalerWidthGuideline(loyaltyCard.zoomLevelWidth);
|
||||
}
|
||||
|
||||
DBHelper.updateLoyaltyCardZoomLevel(database, loyaltyCardId, loyaltyCard.zoomLevel, loyaltyCard.zoomLevelWidth);
|
||||
drawMainImage(mainImageIndex, true, isFullscreen);
|
||||
}
|
||||
@Override
|
||||
public void onStartTrackingTouch(SeekBar seekBar) {
|
||||
}
|
||||
@Override
|
||||
public void onStopTrackingTouch(SeekBar seekBar) {
|
||||
}
|
||||
};
|
||||
}
|
||||
|
||||
private SpannableStringBuilder padSpannableString(SpannableStringBuilder spannableStringBuilder) {
|
||||
if (spannableStringBuilder.length() > 0) {
|
||||
spannableStringBuilder.append("\n\n");
|
||||
@@ -707,6 +728,8 @@ public class LoyaltyCardViewActivity extends CatimaAppCompatActivity implements
|
||||
int darkenedColor = ColorUtils.blendARGB(backgroundHeaderColor, Color.BLACK, 0.1f);
|
||||
binding.barcodeScaler.setProgressTintList(ColorStateList.valueOf(darkenedColor));
|
||||
binding.barcodeScaler.setThumbTintList(ColorStateList.valueOf(darkenedColor));
|
||||
binding.barcodeWidthscaler.setProgressTintList(ColorStateList.valueOf(darkenedColor));
|
||||
binding.barcodeWidthscaler.setThumbTintList(ColorStateList.valueOf(darkenedColor));
|
||||
|
||||
// Set bottomAppBar and system navigation bar color
|
||||
binding.bottomAppBar.setBackgroundColor(darkenedColor);
|
||||
@@ -935,7 +958,8 @@ public class LoyaltyCardViewActivity extends CatimaAppCompatActivity implements
|
||||
null,
|
||||
false,
|
||||
this,
|
||||
addPadding);
|
||||
addPadding,
|
||||
isFullscreen);
|
||||
mTasks.executeTask(TaskHandler.TYPE.BARCODE, barcodeWriter);
|
||||
}
|
||||
}
|
||||
@@ -1129,11 +1153,18 @@ public class LoyaltyCardViewActivity extends CatimaAppCompatActivity implements
|
||||
binding.container.setVisibility(View.GONE);
|
||||
binding.fullscreenLayout.setVisibility(View.VISIBLE);
|
||||
|
||||
// Only show width slider if the barcode isn't square (square barcodes will resize height and width together)
|
||||
// or if the internals of the barcode are squares, like DATA_MATRIX
|
||||
binding.setWidthLayout.setVisibility((format.isSquare() || format.format() == BarcodeFormat.DATA_MATRIX) ? View.GONE : View.VISIBLE);
|
||||
|
||||
drawMainImage(mainImageIndex, true, isFullscreen);
|
||||
|
||||
binding.barcodeScaler.setProgress(loyaltyCard.zoomLevel);
|
||||
setScalerGuideline(loyaltyCard.zoomLevel);
|
||||
|
||||
binding.barcodeWidthscaler.setProgress(loyaltyCard.zoomLevelWidth);
|
||||
setScalerWidthGuideline(loyaltyCard.zoomLevelWidth);
|
||||
|
||||
// Hide actionbar
|
||||
if (actionBar != null) {
|
||||
actionBar.hide();
|
||||
|
||||
@@ -229,6 +229,7 @@ public class MainActivity extends CatimaAppCompatActivity implements LoyaltyCard
|
||||
|
||||
binding = MainActivityBinding.inflate(getLayoutInflater());
|
||||
setContentView(binding.getRoot());
|
||||
Utils.applyWindowInsets(binding.getRoot());
|
||||
setSupportActionBar(binding.toolbar);
|
||||
groupsTabLayout = binding.groups;
|
||||
contentMainBinding = ContentMainBinding.bind(binding.include.getRoot());
|
||||
@@ -500,7 +501,12 @@ public class MainActivity extends CatimaAppCompatActivity implements LoyaltyCard
|
||||
parseResultList = Utils.retrieveBarcodesFromImage(this, data);
|
||||
} else if (receivedType.equals("application/pdf")) {
|
||||
parseResultList = Utils.retrieveBarcodesFromPdf(this, data);
|
||||
} else if (receivedType.equals("application/vnd.apple.pkpass")) {
|
||||
} else if (Arrays.asList("application/vnd.apple.pkpass", "application/vnd-com.apple.pkpass").contains(receivedType)) {
|
||||
parseResultList = Utils.retrieveBarcodesFromPkPass(this, data);
|
||||
} else if (receivedType.equals("application/vnd.espass-espass")) {
|
||||
// FIXME: espass is not pkpass
|
||||
// However, several users stated in https://github.com/CatimaLoyalty/Android/issues/2197 that the formats are extremely similar to the point they could rename an .espass file to .pkpass and have it imported
|
||||
// So it makes sense to "unofficially" treat it as a PKPASS for now, even though not completely correct
|
||||
parseResultList = Utils.retrieveBarcodesFromPkPass(this, data);
|
||||
} else {
|
||||
Log.e(TAG, "Wrong mime-type");
|
||||
|
||||
@@ -48,6 +48,7 @@ public class ManageGroupActivity extends CatimaAppCompatActivity implements Mana
|
||||
super.onCreate(inputSavedInstanceState);
|
||||
binding = ActivityManageGroupBinding.inflate(getLayoutInflater());
|
||||
setContentView(binding.getRoot());
|
||||
Utils.applyWindowInsets(binding.getRoot());
|
||||
Toolbar toolbar = binding.toolbar;
|
||||
setSupportActionBar(toolbar);
|
||||
|
||||
|
||||
@@ -42,6 +42,7 @@ public class ManageGroupsActivity extends CatimaAppCompatActivity implements Gro
|
||||
binding = ManageGroupsActivityBinding.inflate(getLayoutInflater());
|
||||
setTitle(R.string.groups);
|
||||
setContentView(binding.getRoot());
|
||||
Utils.applyWindowInsets(binding.getRoot());
|
||||
Toolbar toolbar = binding.toolbar;
|
||||
setSupportActionBar(toolbar);
|
||||
enableToolbarBackButton();
|
||||
|
||||
@@ -34,13 +34,17 @@ class PkpassParser(context: Context, uri: Uri?) {
|
||||
private var expiry: Date? = null
|
||||
private val balance: BigDecimal = BigDecimal(0)
|
||||
private val balanceType: Currency? = null
|
||||
private var cardId: String? = null
|
||||
// FIXME: Some cards may not have any barcodes, but Catima doesn't accept null card ID
|
||||
// An empty string card ID would prevent a crash, but would be blocked in the edit activity
|
||||
// Setting the default to the "No barcode" text at least prevents a crash, but it is definitely a hack
|
||||
private var cardId: String = context.getString(R.string.noBarcode)
|
||||
private var barcodeId: String? = null
|
||||
private var barcodeType: CatimaBarcode? = null
|
||||
private var headerColor: Int? = null
|
||||
private val starStatus = 0
|
||||
private val lastUsed: Long = 0
|
||||
private val zoomLevel = DBHelper.DEFAULT_ZOOM_LEVEL
|
||||
private val zoomLevelWidth = DBHelper.DEFAULT_ZOOM_LEVEL_WIDTH
|
||||
private var archiveStatus = 0
|
||||
|
||||
var image: Bitmap? = null
|
||||
@@ -63,8 +67,17 @@ class PkpassParser(context: Context, uri: Uri?) {
|
||||
try {
|
||||
mContext.contentResolver.openInputStream(uri).use { inputStream ->
|
||||
ZipInputStream(inputStream).use { zipInputStream ->
|
||||
var localFileHeader: LocalFileHeader
|
||||
while ((zipInputStream.nextEntry.also { localFileHeader = it }) != null) {
|
||||
var localFileHeader: LocalFileHeader?
|
||||
|
||||
while (true) {
|
||||
// Retrieve the next file
|
||||
localFileHeader = zipInputStream.nextEntry
|
||||
|
||||
// If no next file, exit loop
|
||||
if (localFileHeader == null) {
|
||||
break
|
||||
}
|
||||
|
||||
// Ignore directories
|
||||
if (localFileHeader.isDirectory) continue
|
||||
|
||||
@@ -125,6 +138,7 @@ class PkpassParser(context: Context, uri: Uri?) {
|
||||
starStatus,
|
||||
lastUsed,
|
||||
zoomLevel,
|
||||
zoomLevelWidth,
|
||||
archiveStatus,
|
||||
image,
|
||||
null,
|
||||
@@ -296,30 +310,22 @@ class PkpassParser(context: Context, uri: Uri?) {
|
||||
}
|
||||
|
||||
// Append type-specific info to the pass
|
||||
noteText.append("\n\n")
|
||||
|
||||
// Find the relevant pass type and parse it
|
||||
var hasPassData = false
|
||||
for (passType in listOf("boardingPass", "coupon", "eventTicket", "generic")) {
|
||||
try {
|
||||
noteText.append(
|
||||
parsePassJSONPassFields(
|
||||
jsonObject.getJSONObject(passType),
|
||||
locale
|
||||
)
|
||||
var extraText = parsePassJSONPassFields(
|
||||
jsonObject.getJSONObject(passType),
|
||||
locale
|
||||
)
|
||||
|
||||
hasPassData = true
|
||||
noteText.append("\n\n")
|
||||
noteText.append(extraText)
|
||||
|
||||
break
|
||||
} catch (ignored: JSONException) {}
|
||||
}
|
||||
|
||||
// Failed to parse anything, error out
|
||||
if (!hasPassData) {
|
||||
throw FormatException(mContext.getString(R.string.errorReadingFile))
|
||||
}
|
||||
|
||||
note = noteText.toString()
|
||||
}
|
||||
|
||||
|
||||
@@ -37,6 +37,7 @@ import androidx.appcompat.widget.Toolbar;
|
||||
import androidx.core.content.ContextCompat;
|
||||
|
||||
import com.google.android.material.dialog.MaterialAlertDialogBuilder;
|
||||
import com.google.zxing.DecodeHintType;
|
||||
import com.google.zxing.ResultPoint;
|
||||
import com.google.zxing.client.android.Intents;
|
||||
import com.journeyapps.barcodescanner.BarcodeCallback;
|
||||
@@ -100,6 +101,7 @@ public class ScanActivity extends CatimaAppCompatActivity {
|
||||
customBarcodeScannerBinding = CustomBarcodeScannerBinding.bind(binding.zxingBarcodeScanner);
|
||||
setTitle(R.string.scanCardBarcode);
|
||||
setContentView(binding.getRoot());
|
||||
Utils.applyWindowInsets(binding.getRoot());
|
||||
Toolbar toolbar = binding.toolbar;
|
||||
setSupportActionBar(toolbar);
|
||||
enableToolbarBackButton();
|
||||
@@ -175,7 +177,13 @@ public class ScanActivity extends CatimaAppCompatActivity {
|
||||
builder.show();
|
||||
});
|
||||
|
||||
// Configure barcodeScanner
|
||||
barcodeScannerView = binding.zxingBarcodeScanner;
|
||||
Intent barcodeScannerIntent = new Intent();
|
||||
Bundle barcodeScannerIntentBundle = new Bundle();
|
||||
barcodeScannerIntentBundle.putBoolean(DecodeHintType.ALSO_INVERTED.name(), Boolean.TRUE);
|
||||
barcodeScannerIntent.putExtras(barcodeScannerIntentBundle);
|
||||
barcodeScannerView.initializeFromIntent(barcodeScannerIntent);
|
||||
|
||||
// Even though we do the actual decoding with the barcodeScannerView
|
||||
// CaptureManager needs to be running to show the camera and scanning bar
|
||||
|
||||
@@ -24,6 +24,13 @@ import com.yalantis.ucrop.UCropActivity;
|
||||
public class UCropWrapper extends UCropActivity {
|
||||
public static final String UCROP_TOOLBAR_TYPEFACE_STYLE = "ucop_toolbar_typeface_style";
|
||||
|
||||
@Override
|
||||
public void onCreate(Bundle savedInstanceState) {
|
||||
super.onCreate(savedInstanceState);
|
||||
|
||||
Utils.applyWindowInsets(findViewById(android.R.id.content));
|
||||
}
|
||||
|
||||
@Override
|
||||
protected void onPostCreate(@Nullable Bundle savedInstanceState) {
|
||||
super.onPostCreate(savedInstanceState);
|
||||
|
||||
@@ -27,6 +27,7 @@ import android.util.Log;
|
||||
import android.util.TypedValue;
|
||||
import android.view.MotionEvent;
|
||||
import android.view.View;
|
||||
import android.view.ViewGroup;
|
||||
import android.view.Window;
|
||||
import android.widget.ImageView;
|
||||
import android.widget.TextView;
|
||||
@@ -38,7 +39,10 @@ import androidx.annotation.RawRes;
|
||||
import androidx.appcompat.app.AppCompatActivity;
|
||||
import androidx.appcompat.app.AppCompatDelegate;
|
||||
import androidx.core.graphics.ColorUtils;
|
||||
import androidx.core.graphics.Insets;
|
||||
import androidx.core.os.LocaleListCompat;
|
||||
import androidx.core.view.ViewCompat;
|
||||
import androidx.core.view.WindowInsetsCompat;
|
||||
import androidx.core.view.WindowInsetsControllerCompat;
|
||||
import androidx.core.widget.TextViewCompat;
|
||||
import androidx.exifinterface.media.ExifInterface;
|
||||
@@ -49,10 +53,11 @@ import com.google.android.material.dialog.MaterialAlertDialogBuilder;
|
||||
import com.google.zxing.BinaryBitmap;
|
||||
import com.google.zxing.LuminanceSource;
|
||||
import com.google.zxing.MultiFormatReader;
|
||||
import com.google.zxing.DecodeHintType;
|
||||
import com.google.zxing.NotFoundException;
|
||||
import com.google.zxing.RGBLuminanceSource;
|
||||
import com.google.zxing.Result;
|
||||
import com.google.zxing.common.HybridBinarizer;
|
||||
import com.google.zxing.common.GlobalHistogramBinarizer;
|
||||
import com.google.zxing.multi.GenericMultipleBarcodeReader;
|
||||
import com.google.zxing.multi.MultipleBarcodeReader;
|
||||
|
||||
@@ -78,6 +83,7 @@ import java.util.Calendar;
|
||||
import java.util.Collections;
|
||||
import java.util.Currency;
|
||||
import java.util.Date;
|
||||
import java.util.EnumMap;
|
||||
import java.util.GregorianCalendar;
|
||||
import java.util.HashMap;
|
||||
import java.util.List;
|
||||
@@ -194,12 +200,25 @@ public class Utils {
|
||||
|
||||
List<String> locales = pkpassParser.listLocales();
|
||||
if (locales.isEmpty()) {
|
||||
return Collections.singletonList(new ParseResult(ParseResultType.FULL, pkpassParser.toLoyaltyCard(null)));
|
||||
try {
|
||||
return Collections.singletonList(new ParseResult(ParseResultType.FULL, pkpassParser.toLoyaltyCard(null)));
|
||||
} catch (Exception e) {
|
||||
Log.e(TAG, "Error calling toLoyaltyCard on pkpass file", e);
|
||||
Toast.makeText(context, R.string.errorReadingFile, Toast.LENGTH_LONG).show();
|
||||
return new ArrayList<>();
|
||||
}
|
||||
}
|
||||
|
||||
List<ParseResult> parseResultList = new ArrayList<>();
|
||||
for (String locale : locales) {
|
||||
ParseResult parseResult = new ParseResult(ParseResultType.FULL, pkpassParser.toLoyaltyCard(locale));
|
||||
ParseResult parseResult;
|
||||
try {
|
||||
parseResult = new ParseResult(ParseResultType.FULL, pkpassParser.toLoyaltyCard(locale));
|
||||
} catch (Exception e) {
|
||||
Log.e(TAG, "Error calling toLoyaltyCard on pkpass file", e);
|
||||
Toast.makeText(context, R.string.errorReadingFile, Toast.LENGTH_LONG).show();
|
||||
return new ArrayList<>();
|
||||
}
|
||||
parseResult.setNote(locale);
|
||||
parseResultList.add(parseResult);
|
||||
}
|
||||
@@ -364,14 +383,17 @@ public class Utils {
|
||||
|
||||
// ...and then turned into a binary bitmap from its luminance
|
||||
LuminanceSource source = new RGBLuminanceSource(bitmap.getWidth(), bitmap.getHeight(), intArray);
|
||||
BinaryBitmap binaryBitmap = new BinaryBitmap(new HybridBinarizer(source));
|
||||
BinaryBitmap binaryBitmap = new BinaryBitmap(new GlobalHistogramBinarizer(source));
|
||||
|
||||
List<ParseResult> parseResultList = new ArrayList<>();
|
||||
try {
|
||||
MultiFormatReader multiFormatReader = new MultiFormatReader();
|
||||
MultipleBarcodeReader multipleBarcodeReader = new GenericMultipleBarcodeReader(multiFormatReader);
|
||||
|
||||
Result[] barcodeResults = multipleBarcodeReader.decodeMultiple(binaryBitmap);
|
||||
Map<DecodeHintType, Object> hints = new EnumMap<>(DecodeHintType.class);
|
||||
hints.put(DecodeHintType.ALSO_INVERTED, Boolean.TRUE);
|
||||
|
||||
Result[] barcodeResults = multipleBarcodeReader.decodeMultiple(binaryBitmap,hints);
|
||||
|
||||
for (Result barcodeResult : barcodeResults) {
|
||||
Log.i(TAG, "Read barcode id: " + barcodeResult.getText());
|
||||
@@ -1001,6 +1023,9 @@ public class Utils {
|
||||
// Use header colour to decide if this image will need a white or black background
|
||||
backgroundOrIcon.setBackgroundColor(needsDarkForeground(headerColor) ? Color.BLACK : Color.WHITE);
|
||||
|
||||
// Ensure correct cropping style
|
||||
backgroundOrIcon.setScaleType(Utils.getRecommendedScaleTypeForThumbnailImage(icon));
|
||||
|
||||
textWhenNoImage.setVisibility(View.GONE);
|
||||
} else {
|
||||
// Use header colour as background colour
|
||||
@@ -1032,21 +1057,6 @@ public class Utils {
|
||||
return headerColor;
|
||||
}
|
||||
|
||||
public static boolean installedFromGooglePlay(Context context) {
|
||||
try {
|
||||
String packageName = context.getPackageName();
|
||||
String installer;
|
||||
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.R) {
|
||||
installer = context.getPackageManager().getInstallSourceInfo(packageName).getInstallingPackageName();
|
||||
} else {
|
||||
installer = context.getPackageManager().getInstallerPackageName(packageName);
|
||||
}
|
||||
return installer.equals("com.android.vending");
|
||||
} catch (Throwable ignored) {
|
||||
return false;
|
||||
}
|
||||
}
|
||||
|
||||
public static int getHeaderColor(Context context, LoyaltyCard loyaltyCard) {
|
||||
return loyaltyCard.headerColor != null ? loyaltyCard.headerColor : LetterBitmap.getDefaultColor(context, loyaltyCard.store);
|
||||
}
|
||||
@@ -1108,4 +1118,35 @@ public class Utils {
|
||||
return false;
|
||||
}
|
||||
}
|
||||
|
||||
public static void applyWindowInsets(View root) {
|
||||
/* This function basically fakes the activity being edge-to-edge. Useful for those activities that are really hard to get to behave well */
|
||||
ViewCompat.setOnApplyWindowInsetsListener(root, (view, windowInsets) -> {
|
||||
Insets insets = windowInsets.getInsets(WindowInsetsCompat.Type.systemBars());
|
||||
|
||||
ViewGroup.MarginLayoutParams layoutParams = (ViewGroup.MarginLayoutParams) view.getLayoutParams();
|
||||
layoutParams.leftMargin = insets.left;
|
||||
layoutParams.bottomMargin = insets.bottom;
|
||||
layoutParams.rightMargin = insets.right;
|
||||
layoutParams.topMargin = insets.top;
|
||||
view.setLayoutParams(layoutParams);
|
||||
|
||||
return WindowInsetsCompat.CONSUMED;
|
||||
});
|
||||
}
|
||||
|
||||
public static ImageView.ScaleType getRecommendedScaleTypeForThumbnailImage(@Nullable Bitmap image) {
|
||||
// Return something sensible if no image
|
||||
if (image == null) {
|
||||
return ImageView.ScaleType.FIT_CENTER;
|
||||
}
|
||||
|
||||
// If the image is relatively close to 85.6:53.98 (width = 1.58577250834 * height), allow cropping it to fit it
|
||||
double ratio = (double) image.getWidth() / image.getHeight();
|
||||
if (ratio >= 1.55 && ratio <= 1.60) {
|
||||
return ImageView.ScaleType.CENTER_CROP;
|
||||
}
|
||||
|
||||
return ImageView.ScaleType.FIT_CENTER;
|
||||
}
|
||||
}
|
||||
|
||||
@@ -505,6 +505,7 @@ public class CatimaImporter implements Importer {
|
||||
starStatus,
|
||||
lastUsed,
|
||||
DBHelper.DEFAULT_ZOOM_LEVEL,
|
||||
DBHelper.DEFAULT_ZOOM_LEVEL_WIDTH,
|
||||
archiveStatus,
|
||||
null,
|
||||
null,
|
||||
|
||||
@@ -164,6 +164,7 @@ public class FidmeImporter implements Importer {
|
||||
starStatus,
|
||||
Utils.getUnixTime(),
|
||||
DBHelper.DEFAULT_ZOOM_LEVEL,
|
||||
DBHelper.DEFAULT_ZOOM_LEVEL_WIDTH,
|
||||
archiveStatus,
|
||||
null,
|
||||
null,
|
||||
|
||||
@@ -369,6 +369,7 @@ public class StocardImporter implements Importer {
|
||||
0,
|
||||
lastUsed,
|
||||
DBHelper.DEFAULT_ZOOM_LEVEL,
|
||||
DBHelper.DEFAULT_ZOOM_LEVEL_WIDTH,
|
||||
0,
|
||||
null,
|
||||
null,
|
||||
|
||||
@@ -166,6 +166,7 @@ public class VoucherVaultImporter implements Importer {
|
||||
0,
|
||||
Utils.getUnixTime(),
|
||||
DBHelper.DEFAULT_ZOOM_LEVEL,
|
||||
DBHelper.DEFAULT_ZOOM_LEVEL_WIDTH,
|
||||
0,
|
||||
null,
|
||||
null,
|
||||
|
||||
@@ -42,6 +42,7 @@ public class SettingsActivity extends CatimaAppCompatActivity {
|
||||
binding = SettingsActivityBinding.inflate(getLayoutInflater());
|
||||
setTitle(R.string.settings);
|
||||
setContentView(binding.getRoot());
|
||||
Utils.applyWindowInsets(binding.getRoot());
|
||||
Toolbar toolbar = binding.toolbar;
|
||||
setSupportActionBar(toolbar);
|
||||
enableToolbarBackButton();
|
||||
|
||||
@@ -1,10 +0,0 @@
|
||||
<vector xmlns:android="http://schemas.android.com/apk/res/android"
|
||||
android:width="24dp"
|
||||
android:height="24dp"
|
||||
android:viewportWidth="24"
|
||||
android:viewportHeight="24"
|
||||
android:tint="@android:color/black">
|
||||
<path
|
||||
android:fillColor="@android:color/black"
|
||||
android:pathData="M20.54,5.23l-1.39,-1.68C18.88,3.21 18.47,3 18,3H6c-0.47,0 -0.88,0.21 -1.16,0.55L3.46,5.23C3.17,5.57 3,6.02 3,6.5V19c0,1.1 0.9,2 2,2h14c1.1,0 2,-0.9 2,-2V6.5c0,-0.48 -0.17,-0.93 -0.46,-1.27zM12,17.5L6.5,12H10v-2h4v2h3.5L12,17.5zM5.12,5l0.81,-1h12l0.94,1H5.12z"/>
|
||||
</vector>
|
||||
@@ -1,5 +0,0 @@
|
||||
<vector android:height="24dp" android:tint="#000000"
|
||||
android:viewportHeight="24" android:viewportWidth="24"
|
||||
android:width="24dp" xmlns:android="http://schemas.android.com/apk/res/android">
|
||||
<path android:fillColor="@android:color/white" android:pathData="M12,17.27L18.18,21l-1.64,-7.03L22,9.24l-7.19,-0.61L12,2 9.19,8.63 2,9.24l5.46,4.73L5.82,21z"/>
|
||||
</vector>
|
||||
@@ -1,5 +0,0 @@
|
||||
<vector android:height="24dp" android:tint="#FFFFFF"
|
||||
android:viewportHeight="24" android:viewportWidth="24"
|
||||
android:width="24dp" xmlns:android="http://schemas.android.com/apk/res/android">
|
||||
<path android:fillColor="@android:color/white" android:pathData="M12,17.27L18.18,21l-1.64,-7.03L22,9.24l-7.19,-0.61L12,2 9.19,8.63 2,9.24l5.46,4.73L5.82,21z"/>
|
||||
</vector>
|
||||
@@ -1,5 +0,0 @@
|
||||
<vector android:height="24dp" android:tint="#000000"
|
||||
android:viewportHeight="24" android:viewportWidth="24"
|
||||
android:width="24dp" xmlns:android="http://schemas.android.com/apk/res/android">
|
||||
<path android:fillColor="@android:color/white" android:pathData="M22,9.24l-7.19,-0.62L12,2 9.19,8.63 2,9.24l5.46,4.73L5.82,21 12,17.27 18.18,21l-1.63,-7.03L22,9.24zM12,15.4l-3.76,2.27 1,-4.28 -3.32,-2.88 4.38,-0.38L12,6.1l1.71,4.04 4.38,0.38 -3.32,2.88 1,4.28L12,15.4z"/>
|
||||
</vector>
|
||||
@@ -1,5 +0,0 @@
|
||||
<vector android:height="24dp" android:tint="#FFFFFF"
|
||||
android:viewportHeight="24" android:viewportWidth="24"
|
||||
android:width="24dp" xmlns:android="http://schemas.android.com/apk/res/android">
|
||||
<path android:fillColor="@android:color/white" android:pathData="M22,9.24l-7.19,-0.62L12,2 9.19,8.63 2,9.24l5.46,4.73L5.82,21 12,17.27 18.18,21l-1.63,-7.03L22,9.24zM12,15.4l-3.76,2.27 1,-4.28 -3.32,-2.88 4.38,-0.38L12,6.1l1.71,4.04 4.38,0.38 -3.32,2.88 1,4.28L12,15.4z"/>
|
||||
</vector>
|
||||
@@ -2,9 +2,10 @@
|
||||
android:width="24dp"
|
||||
android:height="24dp"
|
||||
android:viewportWidth="24"
|
||||
android:viewportHeight="24"
|
||||
android:tint="@android:color/white">
|
||||
android:viewportHeight="24">
|
||||
<path
|
||||
android:fillColor="@android:color/white"
|
||||
android:pathData="M20.54,5.23l-1.39,-1.68C18.88,3.21 18.47,3 18,3H6c-0.47,0 -0.88,0.21 -1.16,0.55L3.46,5.23C3.17,5.57 3,6.02 3,6.5V19c0,1.1 0.9,2 2,2h14c1.1,0 2,-0.9 2,-2V6.5c0,-0.48 -0.17,-0.93 -0.46,-1.27zM12,17.5L6.5,12H10v-2h4v2h3.5L12,17.5zM5.12,5l0.81,-1h12l0.94,1H5.12z"/>
|
||||
android:fillColor="#D3D3D3"
|
||||
android:pathData="M20.54,5.23l-1.39,-1.68C18.88,3.21 18.47,3 18,3H6c-0.47,0 -0.88,0.21 -1.16,0.55L3.46,5.23C3.17,5.57 3,6.02 3,6.5V19c0,1.1 0.9,2 2,2h14c1.1,0 2,-0.9 2,-2V6.5c0,-0.48 -0.17,-0.93 -0.46,-1.27zM12,17.5L6.5,12H10v-2h4v2h3.5L12,17.5zM5.12,5l0.81,-1h12l0.94,1H5.12z"
|
||||
android:strokeWidth="0.25"
|
||||
android:strokeColor="#777777"/>
|
||||
</vector>
|
||||
11
app/src/main/res/drawable/loyalty_card_icon_starred.xml
Normal file
11
app/src/main/res/drawable/loyalty_card_icon_starred.xml
Normal file
@@ -0,0 +1,11 @@
|
||||
<vector xmlns:android="http://schemas.android.com/apk/res/android"
|
||||
android:width="24dp"
|
||||
android:height="24dp"
|
||||
android:viewportWidth="24"
|
||||
android:viewportHeight="24">
|
||||
<path
|
||||
android:fillColor="#D3D3D3"
|
||||
android:pathData="M12,17.27L18.18,21l-1.64,-7.03L22,9.24l-7.19,-0.61L12,2 9.19,8.63 2,9.24l5.46,4.73L5.82,21z"
|
||||
android:strokeWidth="0.25"
|
||||
android:strokeColor="#777777"/>
|
||||
</vector>
|
||||
@@ -15,8 +15,7 @@
|
||||
app:layout_constraintBottom_toBottomOf="parent"
|
||||
app:layout_constraintStart_toStartOf="parent"
|
||||
app:layout_constraintEnd_toStartOf="@+id/textView"
|
||||
app:layout_constraintTop_toTopOf="parent"
|
||||
app:srcCompat="@drawable/ic_baseline_archive_24" />
|
||||
app:layout_constraintTop_toTopOf="parent" />
|
||||
|
||||
<TextView
|
||||
android:id="@+id/textView"
|
||||
|
||||
@@ -6,7 +6,7 @@
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="match_parent"
|
||||
app:layout_behavior="@string/appbar_scrolling_view_behavior"
|
||||
tools:context="protect.card_locker.MainActivity"
|
||||
tools:context="protect.card_locker.ManageGroupActivity"
|
||||
tools:showIn="@layout/main_activity">
|
||||
|
||||
<TextView
|
||||
|
||||
@@ -97,36 +97,6 @@
|
||||
android:layout_gravity="center_horizontal"
|
||||
android:layout_marginTop="8dp"
|
||||
android:text="@string/importOptionFilesystemButton" />
|
||||
|
||||
<View
|
||||
android:id="@+id/dividerImportApplication"
|
||||
android:layout_width="fill_parent"
|
||||
android:layout_height="1dp"
|
||||
android:layout_margin="16dp"
|
||||
android:background="?android:attr/listDivider"/>
|
||||
|
||||
<TextView
|
||||
android:id="@+id/importOptionApplicationTitle"
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="wrap_content"
|
||||
android:textSize="@dimen/text_size_large"
|
||||
android:text="@string/importOptionApplicationTitle"/>
|
||||
|
||||
<TextView
|
||||
android:id="@+id/importOptionApplicationExplanation"
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="wrap_content"
|
||||
android:layout_marginTop="4dp"
|
||||
android:textSize="@dimen/text_size_medium"
|
||||
android:text="@string/importOptionApplicationExplanation"/>
|
||||
|
||||
<Button
|
||||
android:id="@+id/importOptionApplicationButton"
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="wrap_content"
|
||||
android:layout_gravity="center_horizontal"
|
||||
android:layout_marginTop="8dp"
|
||||
android:text="@string/importOptionApplicationButton" />
|
||||
</LinearLayout>
|
||||
</androidx.core.widget.NestedScrollView>
|
||||
|
||||
|
||||
@@ -72,29 +72,15 @@
|
||||
android:layout_width="@dimen/cardThumbnailSize"
|
||||
android:layout_height="@dimen/cardThumbnailSize"
|
||||
android:layout_gravity="end"
|
||||
android:alpha="0.5"
|
||||
android:alpha="0.8"
|
||||
android:contentDescription="@string/starred"
|
||||
android:elevation="4dp"
|
||||
android:rotationX="2"
|
||||
android:visibility="visible"
|
||||
app:layout_constraintEnd_toEndOf="parent"
|
||||
app:layout_constraintTop_toTopOf="parent"
|
||||
app:srcCompat="@drawable/ic_starred_white"
|
||||
tools:ignore="ImageContrastCheck" />
|
||||
|
||||
<ImageView
|
||||
android:importantForAccessibility="no"
|
||||
android:id="@+id/star_border"
|
||||
android:layout_width="@dimen/cardThumbnailSize"
|
||||
android:layout_height="@dimen/cardThumbnailSize"
|
||||
android:layout_gravity="end"
|
||||
android:alpha="0.5"
|
||||
android:contentDescription="@string/starImage"
|
||||
android:elevation="4dp"
|
||||
android:visibility="visible"
|
||||
app:layout_constraintEnd_toEndOf="parent"
|
||||
app:layout_constraintTop_toTopOf="parent"
|
||||
app:srcCompat="@drawable/ic_unstarred_black"
|
||||
tools:ignore="ImageContrastCheck" />
|
||||
app:srcCompat="@drawable/loyalty_card_icon_starred"
|
||||
tools:ignore="ImageContrastCheck"/>
|
||||
|
||||
</androidx.constraintlayout.widget.ConstraintLayout>
|
||||
|
||||
@@ -110,18 +96,18 @@
|
||||
|
||||
<ImageView
|
||||
android:id="@+id/archive_background"
|
||||
android:layout_width="41dp"
|
||||
android:layout_height="44dp"
|
||||
android:layout_width="@dimen/cardThumbnailSize"
|
||||
android:layout_height="@dimen/cardThumbnailSize"
|
||||
android:layout_gravity="end"
|
||||
android:alpha="0.5"
|
||||
android:alpha="0.8"
|
||||
android:contentDescription="@string/archived"
|
||||
android:elevation="4dp"
|
||||
android:rotationX="2"
|
||||
android:visibility="visible"
|
||||
app:srcCompat="@drawable/ic_baseline_archive_24"
|
||||
tools:ignore="ImageContrastCheck,MissingConstraints"
|
||||
tools:layout_editor_absoluteX="0dp"
|
||||
tools:layout_editor_absoluteY="-1dp" />
|
||||
app:layout_constraintStart_toStartOf="parent"
|
||||
app:layout_constraintTop_toTopOf="parent"
|
||||
app:srcCompat="@drawable/loyalty_card_icon_archived"
|
||||
tools:ignore="ImageContrastCheck" />
|
||||
|
||||
</androidx.constraintlayout.widget.ConstraintLayout>
|
||||
|
||||
|
||||
@@ -1,6 +1,7 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<androidx.coordinatorlayout.widget.CoordinatorLayout xmlns:android="http://schemas.android.com/apk/res/android"
|
||||
xmlns:app="http://schemas.android.com/apk/res-auto"
|
||||
xmlns:tools="http://schemas.android.com/tools"
|
||||
android:id="@+id/coordinator_layout"
|
||||
android:layout_width="fill_parent"
|
||||
android:layout_height="fill_parent"
|
||||
@@ -142,20 +143,30 @@
|
||||
android:background="@android:color/transparent"/>
|
||||
</LinearLayout>
|
||||
</LinearLayout>
|
||||
|
||||
<androidx.constraintlayout.widget.ConstraintLayout
|
||||
android:id="@+id/fullscreen_layout"
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="match_parent"
|
||||
android:orientation="vertical">
|
||||
|
||||
<!-- Top white background that stays white even when scaling the fullscreen image-->
|
||||
<ImageView
|
||||
android:importantForAccessibility="no"
|
||||
android:layout_height="0dp"
|
||||
android:layout_width="match_parent"
|
||||
android:background="#FFFFFFFF"
|
||||
app:layout_constraintTop_toTopOf="parent"
|
||||
app:layout_constraintBottom_toTopOf="@+id/scaler_guideline" />
|
||||
|
||||
<ImageView
|
||||
android:importantForAccessibility="no"
|
||||
android:id="@+id/fullscreen_image"
|
||||
android:layout_width="match_parent"
|
||||
android:layout_width="0dp"
|
||||
android:layout_height="0dp"
|
||||
app:layout_constraintTop_toTopOf="parent"
|
||||
app:layout_constraintBottom_toTopOf="@+id/scaler_guideline"/>
|
||||
app:layout_constraintBottom_toTopOf="@+id/scaler_guideline"
|
||||
app:layout_constraintStart_toStartOf="@+id/scaler_startwidthguideline"
|
||||
app:layout_constraintEnd_toEndOf="@+id/scaler_endwidthguideline"/>
|
||||
|
||||
<androidx.constraintlayout.widget.Guideline
|
||||
android:id="@+id/scaler_guideline"
|
||||
@@ -164,10 +175,24 @@
|
||||
android:orientation="horizontal"
|
||||
app:layout_constraintGuide_percent="0.5"/>
|
||||
|
||||
<androidx.constraintlayout.widget.Guideline
|
||||
android:id="@+id/scaler_startwidthguideline"
|
||||
android:layout_width="wrap_content"
|
||||
android:layout_height="wrap_content"
|
||||
android:orientation="vertical"
|
||||
app:layout_constraintGuide_percent="1"/>
|
||||
|
||||
<androidx.constraintlayout.widget.Guideline
|
||||
android:id="@+id/scaler_endwidthguideline"
|
||||
android:layout_width="wrap_content"
|
||||
android:layout_height="wrap_content"
|
||||
android:orientation="vertical"
|
||||
app:layout_constraintGuide_percent="1"/>
|
||||
|
||||
<LinearLayout
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="wrap_content"
|
||||
app:layout_constraintBottom_toTopOf="@+id/fullscreen_button_minimize"
|
||||
app:layout_constraintBottom_toTopOf="@+id/set_width_layout"
|
||||
android:layout_marginBottom="25dp"
|
||||
android:layout_marginStart="15.0dip"
|
||||
android:layout_marginEnd="15.0dip">
|
||||
@@ -188,6 +213,31 @@
|
||||
android:max="100" />
|
||||
</LinearLayout>
|
||||
|
||||
<LinearLayout
|
||||
android:id="@+id/set_width_layout"
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="wrap_content"
|
||||
android:layout_marginStart="15.0dip"
|
||||
android:layout_marginEnd="15.0dip"
|
||||
app:layout_constraintBottom_toTopOf="@+id/fullscreen_button_minimize">
|
||||
|
||||
<TextView
|
||||
android:importantForAccessibility="no"
|
||||
android:layout_width="wrap_content"
|
||||
android:layout_height="wrap_content"
|
||||
android:layout_gravity="center"
|
||||
android:text="@string/width"/>
|
||||
|
||||
<SeekBar
|
||||
android:id="@+id/barcode_widthscaler"
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="wrap_content"
|
||||
android:layout_gravity="center"
|
||||
android:contentDescription="@string/setBarcodeWidth"
|
||||
android:min="20"
|
||||
android:max="100" />
|
||||
</LinearLayout>
|
||||
|
||||
<ImageButton
|
||||
android:id="@+id/fullscreen_button_minimize"
|
||||
android:layout_width="match_parent"
|
||||
|
||||
@@ -11,62 +11,76 @@ Katharine Chui
|
||||
SlavekB
|
||||
mondstern
|
||||
IllusiveMan196
|
||||
Altonss
|
||||
大王叫我来巡山
|
||||
Altonss
|
||||
B o d o
|
||||
Michael Moroni
|
||||
Eric
|
||||
Максим Горпиніч
|
||||
GM
|
||||
Joel A
|
||||
Petr Novák
|
||||
laralem
|
||||
Joel A
|
||||
Priit Jõerüüt
|
||||
Taco
|
||||
Edgars Andersons
|
||||
nadiafekihahmed
|
||||
pfaffenrodt
|
||||
Aayush Gupta
|
||||
Scrambled777
|
||||
HudobniVolk
|
||||
Silvério Santos
|
||||
ikanakova
|
||||
Giovanni Donisi
|
||||
Nyatsuki
|
||||
Priit Jõerüüt
|
||||
B o d o
|
||||
HudobniVolk
|
||||
Jiri Grönroos
|
||||
Максим Горпиніч
|
||||
Nyatsuki
|
||||
Samantaz Fox
|
||||
Cliff Heraldo
|
||||
Sergio Paredes
|
||||
Ankit Tiwari
|
||||
Arno-github
|
||||
josé m
|
||||
Milo Ivir
|
||||
Balázs Meskó
|
||||
Arno-github
|
||||
Ankit Tiwari
|
||||
Cliff Heraldo
|
||||
Sergio Paredes
|
||||
Jose Delvani
|
||||
mdvhimself
|
||||
Milan Šalka
|
||||
ikanakova
|
||||
Skrripy
|
||||
தமிழ் நேரம்
|
||||
huuhaa
|
||||
Skrripy
|
||||
Kachelkaiser
|
||||
Projjal Moitra
|
||||
Quentin PAGÈS
|
||||
Vasilis
|
||||
ngocanhtve
|
||||
waffshappen
|
||||
Marnick L'Eau
|
||||
Silvério Santos
|
||||
ngocanhtve
|
||||
Quentin PAGÈS
|
||||
Projjal Moitra
|
||||
Kachelkaiser
|
||||
Fjuro
|
||||
Robin
|
||||
JungHee Lee
|
||||
hajertabbane
|
||||
Ziad OUALHADJ
|
||||
Denis Shilin
|
||||
Robin Liu
|
||||
Renko
|
||||
Denis Shilin
|
||||
しいたけ
|
||||
Alexander Ivanov
|
||||
Miha Frangež
|
||||
Viet Nguyen Hoang
|
||||
stavpup
|
||||
josé m
|
||||
ehrt74
|
||||
Warder
|
||||
Virginie
|
||||
MisterCosta96
|
||||
arshbeerSingh
|
||||
Freddo espresso
|
||||
Govind S Nair
|
||||
Kim Seohyun
|
||||
Tim Trek
|
||||
rudy3
|
||||
GitSpoon
|
||||
Ricky Tigg
|
||||
Peter Dave Hello
|
||||
Michael Gangolf
|
||||
rudy3
|
||||
Kim Seohyun
|
||||
Govind S Nair
|
||||
Freddo espresso
|
||||
Augustin LAVILLE
|
||||
arshbeerSingh
|
||||
MisterCosta96
|
||||
Aliaksandr Trush
|
||||
|
||||
@@ -2,14 +2,14 @@
|
||||
<resources xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2" xmlns:tools="http://schemas.android.com/tools">
|
||||
<string name="action_search">بحث</string>
|
||||
<string name="action_add">أضف</string>
|
||||
<string name="noGiftCards">اضغط على + زر الإضافة لاضافة بطاقة، او استورد من ⋮ القائمة.</string>
|
||||
<string name="noGiftCards">اضغط على زر الإضافة + لإضافة بطاقة، أو استورد من ⋮ القائمة.</string>
|
||||
<string name="noMatchingGiftCards">لا نتائج. حاول تغيير كلمات البحث.</string>
|
||||
<string name="storeName">اسم</string>
|
||||
<string name="note">مذكرة</string>
|
||||
<string name="cardId">معرّف البطاقة</string>
|
||||
<string name="barcodeType">نوع الباركود</string>
|
||||
<string name="noBarcode">لا يوجد باركود</string>
|
||||
<string name="star">أضف الي المفضلة</string>
|
||||
<string name="star">أضف الى المفضلة</string>
|
||||
<string name="unstar">حذف من المفضلة</string>
|
||||
<string name="cancel">إلغاء</string>
|
||||
<string name="save">حفظ</string>
|
||||
@@ -25,7 +25,7 @@
|
||||
<string name="scanCardBarcode">مسح باركود</string>
|
||||
<string name="cardShortcut">اختصار البطاقة</string>
|
||||
<string name="noCardsMessage">اضف بطاقة أولا</string>
|
||||
<string name="barcodeImageDescriptionWithType">صورة <xliff:g>%s</xliff:g> باركود</string>
|
||||
<string name="barcodeImageDescriptionWithType">صورة <xliff:g>%s</xliff:g> الباركود</string>
|
||||
<string name="noCardExistsError">لا يمكن العثور على هذه البطاقة</string>
|
||||
<string name="failedParsingImportUriError">لا يمكن تحليل الرابط المستورد</string>
|
||||
<string name="importExport">استيراد/تصدير</string>
|
||||
@@ -36,9 +36,6 @@
|
||||
<string name="exportFailed">لا يمكن عمل التصدير</string>
|
||||
<string name="exportOptionExplanation">ستتم كتابة البيانات في الموقع الذي تختاره.</string>
|
||||
<string name="importOptionFilesystemButton">من نظام الملفات</string>
|
||||
<string name="importOptionApplicationTitle">استخدم تطبيقًا آخر</string>
|
||||
<string name="importOptionApplicationExplanation">استخدم أي تطبيق أو مدير الملفات المفضل لديك لفتح ملف.</string>
|
||||
<string name="importOptionApplicationButton">استخدم تطبيقًا آخر</string>
|
||||
<string name="about">حول</string>
|
||||
<string name="app_copyright_old">بناء على Loyalty Card Keychain
|
||||
\nحقوق النشر © 2016-2020 Branden Archer</string>
|
||||
@@ -47,14 +44,14 @@
|
||||
<string name="selectBarcodeTitle">اختار الباركود</string>
|
||||
<string name="thumbnailDescription">صورة مصغرة</string>
|
||||
<string name="starImage">نجم مفضل</string>
|
||||
<string name="settings">اعدادات</string>
|
||||
<string name="settings_light_theme">فاتح</string>
|
||||
<string name="settings_dark_theme">داكن</string>
|
||||
<string name="settings">الإعدادات</string>
|
||||
<string name="settings_light_theme">فاتحة</string>
|
||||
<string name="settings_dark_theme">داكنة</string>
|
||||
<string name="settings_card_orientation">اتجاه الشاشة</string>
|
||||
<string name="settings_portrait_orientation">الوضع الرأسي</string>
|
||||
<string name="settings_landscape_orientation">الوضع الأفقي</string>
|
||||
<string name="settings_theme">مظهر</string>
|
||||
<string name="settings_display_barcode_max_brightness">عرض مشرق علي الشاشة</string>
|
||||
<string name="settings_display_barcode_max_brightness">شاشة ساطعة</string>
|
||||
<string name="importSuccessful">تم استيراد البيانات</string>
|
||||
<string name="exportSuccessful">تم تصدير البيانات</string>
|
||||
<string name="enter_group_name">أدخل اسم المجموعة</string>
|
||||
@@ -66,7 +63,7 @@
|
||||
<string name="group_updated">تم تحديث المجموعة</string>
|
||||
<string name="all">الكل</string>
|
||||
<string name="deleteConfirmationGroup">هل تريد حذف المجموعة؟</string>
|
||||
<string name="failedOpeningFileManager">قم بتثبيت مدير الملفات أولاً.</string>
|
||||
<string name="failedOpeningFileManager">ثبِّت مدير الملفات أولاً.</string>
|
||||
<string name="moveUp">تحرك لأعلى</string>
|
||||
<string name="addFromImage">حدد صورة من المعرض</string>
|
||||
<string name="balance">الرصيد</string>
|
||||
@@ -77,19 +74,16 @@
|
||||
<string name="privacy_policy">سياسة الخصوصية</string>
|
||||
<string name="accept">قبول</string>
|
||||
<string name="importCatima">الاستيراد من Catima</string>
|
||||
<string name="importCatimaMessage">حدد ملفك <i>catima.zip</i> تصدير من Catima للاستيراد.
|
||||
\nقم بإنشائه من قائمة الاستيراد / التصدير لتطبيق Catima آخر بالضغط على تصدير هناك أولاً.</string>
|
||||
<string name="importCatimaMessage">حدّد ملفك <i>catima.zip</i> تصدير من Catima للاستيراد. \nإنشئها من قائمة الاستيراد / التصدير لتطبيق Catima آخر بالضغط على تصدير هناك أولاً.</string>
|
||||
<string name="importFidme">الاستيراد من FidMe</string>
|
||||
<string name="importFidmeMessage">حدد ملفك <i>fidme-export-request-xxxxxx.zip</i> تصدير من FidMe للاستيراد ، ثم حدد أنواع الباركود يدويًا بعد ذلك.
|
||||
\nقم بإنشائه من ملف تعريف FidMe الخاص بك عن طريق اختيار حماية البيانات ثم الضغط على استخراج بياناتي أولاً.</string>
|
||||
<string name="importFidmeMessage">حدّد ملفك <i>fidme-export-request-xxxxxx.zip</i> تصدير من FidMe للاستيراد، ثم حدد أنواع الباركود يدويًا بعد ذلك. \nإنشئها من ملف تعريف FidMe الخاص بك عن طريق اختيار حماية البيانات ثم الضغط على استخراج بياناتي أولاً.</string>
|
||||
<string name="importStocardMessage">حدد ملفك <i>***.zip</i> تصدير من Stocard للاستيراد.
|
||||
\nاحصل عليه عن طريق إرسال بريد إلكتروني إلى support@stocardapp.com لطلب تصدير بياناتك.</string>
|
||||
<string name="importVoucherVault">الاستيراد من Voucher Vault</string>
|
||||
<string name="importVoucherVaultMessage">حدد ملفك <i>vouchervault.json</i> تصدير من Voucher Vault للاستيراد.
|
||||
\nقم بإنشائه بالضغط على تصدير في Voucher Vault أولاً.</string>
|
||||
<string name="importVoucherVaultMessage">حدّد ملفك <i>vouchervault.json</i> تصدير من Voucher Vault للاستيراد. \nإنشئها بالضغط على تصدير في Voucher Vault أولاً.</string>
|
||||
<string name="barcodeId">قيمة الباركود</string>
|
||||
<string name="sameAsCardId">نفس بطاقة الهوية</string>
|
||||
<string name="setBarcodeId">قم بتعيين قيمة الباركود</string>
|
||||
<string name="setBarcodeId">عيّن قيمة الباركود</string>
|
||||
<string name="unsupportedBarcodeType">لا يمكن عرض نوع الباركود هذا. قد يكون مدعومًا في إصدار أحدث من التطبيق.</string>
|
||||
<string name="wrongValueForBarcodeType">القيمة غير صالحة لنوع الباركود المحدد</string>
|
||||
<string name="intent_import_card_from_url_share_multiple_text">أريد مشاركة بعض البطاقات معك</string>
|
||||
@@ -105,9 +99,9 @@
|
||||
<string name="yes">نعم</string>
|
||||
<string name="no">لا</string>
|
||||
<string name="passwordRequired">الرجاء إدخال كلمة المرور</string>
|
||||
<string name="exportPassword">قم بتعيين كلمة مرور لحماية التصدير (اختياري)</string>
|
||||
<string name="exportPassword">عيّن كلمة مرور لحماية التصدير (اختياري)</string>
|
||||
<string name="exportPasswordHint">أدخل كلمة المرور</string>
|
||||
<string name="turn_flashlight_on">قم بتشغيل المصباح</string>
|
||||
<string name="turn_flashlight_on">شغّل المصباح</string>
|
||||
<string name="turn_flashlight_off">أطفئ المصباح</string>
|
||||
<string name="settings_locale">لغة</string>
|
||||
<string name="settings_system_locale">النظام</string>
|
||||
@@ -134,14 +128,14 @@
|
||||
<string name="shortcutSelectCard">اختر بطاقة</string>
|
||||
<string name="options">خيارات</string>
|
||||
<string name="starred">مميز بنجمة</string>
|
||||
<string name="include_if_asking_support">إذا كنت ترغب في طلب الدعم ، فقم بتضمين المعلومات التالية:</string>
|
||||
<string name="include_if_asking_support">إذا كنت ترغب في طلب الدعم، ضمّن المعلومات التالية:</string>
|
||||
<string name="duplicateCard">كرر</string>
|
||||
<string name="archive">ضع الي الأرشيف</string>
|
||||
<string name="unarchive">أخرج من الأرشيف</string>
|
||||
<string name="archived">تمت أرشفة البطاقة</string>
|
||||
<string name="unarchived">البطاقة غير مؤرشفة</string>
|
||||
<string name="failedLaunchingPhotoPicker">تعذر العثور على تطبيق معرض مدعوم</string>
|
||||
<string name="noGiftCardsGroup">انشئ بعضا من البطاقات, ثم عيينهم لهذه المجموعة.</string>
|
||||
<string name="noGiftCardsGroup">أنشئ بعض البطاقات، ثم عيّنهم لهذه المجموعة.</string>
|
||||
<string name="deleteTitle">مسح بطاقة</string>
|
||||
<plurals name="selectedCardCount">
|
||||
<item quantity="zero"><xliff:g>%d</xliff:g> محدد</item>
|
||||
@@ -188,7 +182,7 @@
|
||||
<string name="importOptionFilesystemExplanation">اختر ملفًا محددًا من نظام الملفات.</string>
|
||||
<string name="about_title_fmt">حول <xliff:g id="app_name">%s</xliff:g></string>
|
||||
<string name="debug_version_fmt">نسخة: <xliff:g id="version">%s</xliff:g></string>
|
||||
<string name="settings_system_theme">نظام</string>
|
||||
<string name="settings_system_theme">النظام</string>
|
||||
<string name="settings_lock_on_opening_orientation">قفل على الاتجاه عند فتح البطاقة</string>
|
||||
<string name="app_resources">موارد الطرف الثالث الحرة: <xliff:g id="app_resources_list">%s</xliff:g></string>
|
||||
<string name="settings_follow_system_orientation">نظام المتابعة</string>
|
||||
@@ -234,8 +228,7 @@
|
||||
<string name="report_error">الإبلاغ عن خطأ</string>
|
||||
<string name="sort_by_expiry">انقضاء</string>
|
||||
<string name="importLoyaltyCardKeychain">الاستيراد من Loyalty Card Keychain</string>
|
||||
<string name="importLoyaltyCardKeychainMessage">حدد ملفك <i>LoyaltyCardKeychain.csv</i> التصدير من Loyalty Card Keychain للاستيراد.
|
||||
\nقم بإنشائه من قائمة الاستيراد / التصدير في Loyalty Card Keychain بالضغط على تصدير هناك أولاً.</string>
|
||||
<string name="importLoyaltyCardKeychainMessage">حدّد ملفك <i>LoyaltyCardKeychain.csv</i> التصدير من Loyalty Card Keychain للاستيراد. \nإنشئها من قائمة الاستيراد / التصدير في Loyalty Card Keychain بالضغط على تصدير هناك أولاً.</string>
|
||||
<string name="importStocard">الاستيراد من Stocard</string>
|
||||
<string name="failedGeneratingShareURL">تعذر إنشاء عنوان URL قابل للمشاركة. الرجاء الإبلاغ عن هذا.</string>
|
||||
<string name="help_translate_this_app">ساعد في ترجمة هذا التطبيق</string>
|
||||
@@ -246,7 +239,7 @@
|
||||
<string name="failedToRetrieveImageFile">فشل في استخراج ملف الصورة</string>
|
||||
<string name="barcodeLongPressMessage">يمكن فتح صور فقط في تطبيق معرض الصور</string>
|
||||
<string name="failedToOpenUrl">ثبت متصفح ويب أولاً</string>
|
||||
<string name="welcome">مرحبا بك في كاتيما</string>
|
||||
<string name="welcome">مرحبًا بك في كاتيما</string>
|
||||
<string name="updateBalanceTitle">كم أنفقت أو استلمت؟</string>
|
||||
<string name="currentBalanceSentence">الرصيد الحالي: <xliff:g> %s </xliff:g></string>
|
||||
<string name="importCards">استيراد البطاقات</string>
|
||||
@@ -261,7 +254,7 @@
|
||||
<string name="anyDate">أي تاريخ</string>
|
||||
<string name="chooseValidFromDate">اختر صالح من التاريخ</string>
|
||||
<string name="validFromSentence">صالح من:<xliff:g>%s</xliff:g></string>
|
||||
<string name="height">الطول:</string>
|
||||
<string name="height">الطول</string>
|
||||
<string name="permissionReadCardsDescription">اقرأ بطاقتك مع جميع التفاصيل، بما فيه الملاحضات والصور</string>
|
||||
<string name="settings_display_barcode_max_brightness_summary">ظروري لعمل بعض الماسحات الضوئية</string>
|
||||
<string name="permissionReadCardsLabel">اقرأ بطاقات كاتيما</string>
|
||||
@@ -285,7 +278,7 @@
|
||||
<string name="setBarcodeHeight">ضبط ارتفاع الباركود</string>
|
||||
<string name="openBackImageInGalleryApp">فتح الصورة الخلفية في تطبيق المعرض</string>
|
||||
<string name="settings_allow_content_provider_read_title">السماح للتطبيقات الأخرى بالوصول إلى بياناتي</string>
|
||||
<string name="donate">يتبرع</string>
|
||||
<string name="donate">تبرّع</string>
|
||||
<string name="show_archived_cards">عرض البطاقات المؤرشفة</string>
|
||||
<string name="settings_category_title_privacy">خصوصية</string>
|
||||
<string name="show_balance">إظهار التوازن</string>
|
||||
@@ -298,7 +291,7 @@
|
||||
<string name="enter_card_id">أدخل رقم الهوية أو النص الموجود على بطاقتك</string>
|
||||
<string name="addWithoutBarcode">إضافة بدون باركود</string>
|
||||
<string name="field_must_not_be_empty">يجب ألا يكون الحقل فارغا</string>
|
||||
<string name="app_name">Catima</string>
|
||||
<string name="app_name">كاتيما</string>
|
||||
<string name="settings_follow_sensor_orientation">التدوير دائمًا ( تجاهل إعدادات النظام)</string>
|
||||
<string name="add_manually_warning_title">الفحص موصى به</string>
|
||||
<string name="continue_">استمر</string>
|
||||
@@ -316,11 +309,11 @@
|
||||
<string name="exportCancelled">تم الغاء الاستخراج</string>
|
||||
<string name="useFrontImage">استخدام صورة أمامية</string>
|
||||
<string name="useBackImage">استخدم صورة خلفية</string>
|
||||
<string name="addFromPkpass">اختر ملف الدفتر(.pkpass)</string>
|
||||
<string name="addFromPkpass">اختر ملف الدفتر (.pkpass)</string>
|
||||
<string name="unsupportedFile">هذا الملف غير مدعوم</string>
|
||||
<string name="generic_error_please_retry">نعتذر، حدث خطأ ما، حاول مرة أخرى...</string>
|
||||
<string name="settings_use_volume_keys_navigation">تبديل البطاقات باستخدام أزرار الصوت</string>
|
||||
<string name="settings_use_volume_keys_navigation_summary">تبديل البطاقات الظاهرة باستخدام أزرار الصوت</string>
|
||||
<string name="settings_use_volume_keys_navigation">بدّل البطاقات باستخدام أزرار الصوت</string>
|
||||
<string name="settings_use_volume_keys_navigation_summary">بدّل البطاقات الظاهرة باستخدام أزرار الصوت</string>
|
||||
<string name="settings_category_title_cards_overview">نظرة عامة على البطاقات</string>
|
||||
<string name="settings_column_count_portrait">الأعمدة في الوضع الرأسي</string>
|
||||
<string name="settings_column_count_landscape">الأعمدة في الوضع الأفقي</string>
|
||||
@@ -332,4 +325,7 @@
|
||||
<string name="settings_column_count_5">٥</string>
|
||||
<string name="settings_column_count_6">٦</string>
|
||||
<string name="settings_column_count_7">٧</string>
|
||||
</resources>
|
||||
<string name="sort_by_valid_from">صالح من</string>
|
||||
<string name="width">العرض</string>
|
||||
<string name="setBarcodeWidth">تعيين عرض الرمز الشريطي \"باركود\"</string>
|
||||
</resources>
|
||||
|
||||
@@ -45,4 +45,4 @@
|
||||
<string name="thumbnailDescription">Miniatura</string>
|
||||
<string name="settings">Configuración</string>
|
||||
<string name="settings_theme">Estilu</string>
|
||||
</resources>
|
||||
</resources>
|
||||
|
||||
317
app/src/main/res/values-be/strings.xml
Normal file
317
app/src/main/res/values-be/strings.xml
Normal file
@@ -0,0 +1,317 @@
|
||||
<?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="noMatchingGiftCards">Няма вынікаў. Паспрабуйце змяніць параметры пошуку.</string>
|
||||
<plurals name="selectedCardCount">
|
||||
<item quantity="one"><xliff:g>%d</xliff:g> выбран</item>
|
||||
<item quantity="few"><xliff:g>%d</xliff:g> выбрана</item>
|
||||
<item quantity="many"><xliff:g>%d</xliff:g> выбрана</item>
|
||||
<item quantity="other"><xliff:g>%d</xliff:g> выбрана</item>
|
||||
</plurals>
|
||||
<string name="action_add">Дадаць</string>
|
||||
<string name="app_name">Catima</string>
|
||||
<string name="action_search">Пошук</string>
|
||||
<string name="noGiftCards">Націсніце кнопку + плюс, каб дадаць картку, або імпартуйце праз меню ⋮.</string>
|
||||
<string name="storeName">Назва</string>
|
||||
<string name="star">Дадаць у абраныя</string>
|
||||
<string name="unstar">Выдаліць з абраных</string>
|
||||
<string name="cancel">Скасаваць</string>
|
||||
<string name="save">Захаваць</string>
|
||||
<string name="edit">Рэдагаваць</string>
|
||||
<string name="delete">Выдаліць</string>
|
||||
<string name="confirm">Пацвердзіць</string>
|
||||
<string name="deleteConfirmation">Выдаліць карту назаўсёды?</string>
|
||||
<string name="ok">OK</string>
|
||||
<string name="share">Абагуліць</string>
|
||||
<string name="sendLabel">Адправіць…</string>
|
||||
<string name="addCardTitle">Дадаць карту</string>
|
||||
<string name="cardShortcut">Ярлык карты</string>
|
||||
<string name="barcodeImageDescriptionWithType">Відарыс штрыхкоду <xliff:g>%s</xliff:g></string>
|
||||
<string name="scanCardBarcode">Сканаваць штрыхкод</string>
|
||||
<string name="noCardExistsError">Не ўдалося знайсці карту</string>
|
||||
<string name="exportName">Экспарт</string>
|
||||
<string name="importSuccessfulTitle">Імпартавана</string>
|
||||
<string name="importFailedTitle">Не ўдалося імпартаваць</string>
|
||||
<string name="importFailed">Немагчыма выканаць імпарт</string>
|
||||
<string name="exportSuccessfulTitle">Экспартавана</string>
|
||||
<string name="importing">Імпартаванне…</string>
|
||||
<string name="storageReadPermissionRequired">Для гэтага дзеяння патрабуецца дазвол на чытанне сховішча…</string>
|
||||
<string name="cameraPermissionRequired">Для гэтага дзеяння патрабуецца дазвол на доступ да камеры…</string>
|
||||
<string name="permissionReadCardsLabel">Чытаць карты Catima</string>
|
||||
<string name="exportOptionExplanation">Даныя будуць запісаны ў выбранае вамі месца.</string>
|
||||
<string name="importOptionFilesystemExplanation">Выберыце пэўны файл з файлавай сістэмы.</string>
|
||||
<string name="importOptionFilesystemButton">З файлавай сістэмы</string>
|
||||
<string name="about">Аб праграме</string>
|
||||
<string name="app_copyright_short">Аўтарскае права © Sylvia van Os і суаўтары</string>
|
||||
<plurals name="deleteCardsConfirmation">
|
||||
<item quantity="one">Выдаліць <xliff:g>%d</xliff:g> карту назаўсёды?</item>
|
||||
<item quantity="few">Выдаліць <xliff:g>%d</xliff:g> карты назаўсёды?</item>
|
||||
<item quantity="many">Выдаліць <xliff:g>%d</xliff:g> карт назаўсёды?</item>
|
||||
<item quantity="other">Выдаліць <xliff:g>%d</xliff:g> карт назаўсёды?</item>
|
||||
</plurals>
|
||||
<string name="barcodeType">Тып штрыхкода</string>
|
||||
<string name="deleteTitle">Выдаліць карту</string>
|
||||
<plurals name="deleteCardsTitle">
|
||||
<item quantity="one">Выдаліць <xliff:g>%d</xliff:g> карту</item>
|
||||
<item quantity="few">Выдаліць <xliff:g>%d</xliff:g> карты</item>
|
||||
<item quantity="many">Выдаліць <xliff:g>%d</xliff:g> карт</item>
|
||||
<item quantity="other">Выдаліць <xliff:g>%d</xliff:g> карт</item>
|
||||
</plurals>
|
||||
<string name="noGiftCardsGroup">Стварыце некалькі карт, а затым прызначце іх у групу тут.</string>
|
||||
<string name="noBarcode">Няма штрыхкода</string>
|
||||
<string name="note">Нататка</string>
|
||||
<string name="editCardTitle">Рэдагаваць карту</string>
|
||||
<string name="cardId">ID карты</string>
|
||||
<string name="noCardsMessage">Спачатку дадайце карту</string>
|
||||
<string name="importExport">Імпарт/Экспарт</string>
|
||||
<string name="importOptionFilesystemTitle">Імпарт з файлавай сістэмы</string>
|
||||
<string name="app_copyright_fmt" tools:ignore="PluralsCandidate">Аўтарскае права © 2019–<xliff:g>%d</xliff:g> Sylvia van Os і суаўтары</string>
|
||||
<string name="importExportHelp">Рэзервовае капіяванне даных дазваляе перанесці іх на іншую прыладу.</string>
|
||||
<string name="failedParsingImportUriError">Не атрымалася разабраць URI імпарту</string>
|
||||
<string name="exportFailedTitle">Не ўдалося экспартаваць</string>
|
||||
<string name="exportFailed">Немагчыма выканаць экспарт</string>
|
||||
<string name="permissionReadCardsDescription">чытаць вашы карты Catima і ўсе іх дэталі, уключаючы нататкі і выявы</string>
|
||||
<string name="exporting">Экспартаванне…</string>
|
||||
<string name="cameraPermissionDeniedTitle">Не атрымалася атрымаць доступ да камеры</string>
|
||||
<string name="app_copyright_old">Заснавана на Loyalty Card Keychain\nаўтарскае права © 2016–2020 Branden Archer</string>
|
||||
<string name="noCameraPermissionDirectToSystemSetting">Каб сканаваць штрыхкоды, Catima спатрэбіцца доступ да вашай камеры. Націсніце тут, каб змяніць параметры дазволу.</string>
|
||||
<string name="about_title_fmt">Пра <xliff:g id="app_name">%s</xliff:g></string>
|
||||
<string name="debug_version_fmt">Версія: <xliff:g id="version">%s</xliff:g></string>
|
||||
<string name="app_libraries">Бясплатныя староннія бібліятэкі: <xliff:g id="app_libraries_list">%s</xliff:g></string>
|
||||
<string name="selectBarcodeTitle">Выберыце штрыхкод</string>
|
||||
<string name="starImage">Зорка абранага</string>
|
||||
<string name="settings">Налады</string>
|
||||
<string name="settings_theme">Тэма</string>
|
||||
<string name="settings_system_theme">Сістэмная</string>
|
||||
<string name="settings_light_theme">Светлая</string>
|
||||
<string name="settings_dark_theme">Цёмная</string>
|
||||
<string name="settings_card_orientation">Арыентацыя экрана</string>
|
||||
<string name="settings_follow_sensor_orientation">Заўсёды паварочваць (ігнаруе налады сістэмы)</string>
|
||||
<string name="settings_portrait_orientation">Партрэтная</string>
|
||||
<string name="settings_landscape_orientation">Альбомная</string>
|
||||
<string name="settings_lock_on_opening_orientation">Зафіксаваць арыентацыю, якая выкарыстоўваецца пры адкрыцці карты</string>
|
||||
<string name="settings_keep_screen_on_summary">Адключае тайм-аўт экрана падчас прагляду карты</string>
|
||||
<string name="settings_disable_lockscreen_while_viewing_card">Прадухіляць блакіроўку экрана</string>
|
||||
<string name="settings_disable_lockscreen_while_viewing_card_summary">Адключае блакіроўку экрана падчас прагляду карты</string>
|
||||
<string name="settings_allow_content_provider_read_summary">Праграмам усё роўна трэба будзе запытваць дазвол, каб атрымаць доступ</string>
|
||||
<string name="settings_use_volume_keys_navigation">Пераключаць карты з дапамогай кнопак гучнасці</string>
|
||||
<string name="settings_use_volume_keys_navigation_summary">Выкарыстоўвайце кнопкі гучнасці, каб змяніць, якая карта будзе адлюстроўвацца</string>
|
||||
<string name="intent_import_card_from_url_share_text">Я хачу падзяліцца з вамі картай</string>
|
||||
<string name="importSuccessful">Даныя імпартаваны</string>
|
||||
<string name="exportSuccessful">Даныя экспартаваны</string>
|
||||
<string name="enter_group_name">Увядзіце назву групы</string>
|
||||
<string name="groups">Групы</string>
|
||||
<string name="group_edit">Рэдагаваць групу</string>
|
||||
<string name="noGroups">Націсніце кнопку +, каб дадаць групы для катэгарызацыі.</string>
|
||||
<string name="noGroupCards">Гэтая група пустая</string>
|
||||
<plurals name="groupCardCount">
|
||||
<item quantity="one"><xliff:g>%d</xliff:g> карта</item>
|
||||
<item quantity="few"><xliff:g>%d</xliff:g> карты</item>
|
||||
<item quantity="many"><xliff:g>%d</xliff:g> карт</item>
|
||||
<item quantity="other"><xliff:g>%d</xliff:g> карт</item>
|
||||
</plurals>
|
||||
<string name="group_updated">Група абноўлена</string>
|
||||
<string name="deleteConfirmationGroup">Выдаліць групу?</string>
|
||||
<string name="moveUp">Перасунуць уверх</string>
|
||||
<string name="expiryStateSentence">Заканчваецца тэрмін дзеяння: <xliff:g>%s</xliff:g></string>
|
||||
<string name="expiryStateSentenceExpired">Тэрмін дзеяння скончыўся: <xliff:g>%s</xliff:g></string>
|
||||
<string name="balanceSentence">Баланс: <xliff:g>%s</xliff:g></string>
|
||||
<plurals name="balancePoints">
|
||||
<item quantity="one"><xliff:g>%s</xliff:g> бал</item>
|
||||
<item quantity="few"><xliff:g>%s</xliff:g> балы</item>
|
||||
<item quantity="many"><xliff:g>%s</xliff:g> балаў</item>
|
||||
<item quantity="other"><xliff:g>%s</xliff:g> балаў</item>
|
||||
</plurals>
|
||||
<string name="card">Карта</string>
|
||||
<string name="expiryDate">Тэрмін прыдатнасці</string>
|
||||
<string name="never">Ніколі</string>
|
||||
<string name="chooseExpiryDate">Выбраць тэрмін прыдатнасці</string>
|
||||
<string name="moveBarcodeToTopOfScreen">Перамясціць штрыхкод у верхнюю частку экрана</string>
|
||||
<string name="noBarcodeFound">Штрыхкод не знойдзены</string>
|
||||
<string name="errorReadingImage">Не атрымалася прачытаць малюнак</string>
|
||||
<string name="balance">Баланс</string>
|
||||
<string name="currency">Валюта</string>
|
||||
<string name="points">Балы</string>
|
||||
<string name="balanceParsingFailed">Няправільны баланс</string>
|
||||
<string name="chooseImportType">Імпартаваць даныя з</string>
|
||||
<string name="app_loyalty_card_keychain">Loyalty Card Keychain</string>
|
||||
<string name="privacy_policy">Палітыка прыватнасці</string>
|
||||
<string name="accept">Прыняць</string>
|
||||
<string name="importCatima">Імпарт з Catima</string>
|
||||
<string name="importFidme">Імпарт з FidMe</string>
|
||||
<string name="importLoyaltyCardKeychain">Імпарт з Loyalty Card Keychain</string>
|
||||
<string name="importStocard">Імпарт з Stocard</string>
|
||||
<string name="importVoucherVault">Імпарт з Voucher Vault</string>
|
||||
<string name="barcodeId">Значэнне штрыхкода</string>
|
||||
<string name="importVoucherVaultMessage">Каб імпартаваць, выберыце файл <i>vouchervault.json</i> з Voucher Vault. \nСтварыце яго, націснуўшы Экспарт у Voucher Vault .</string>
|
||||
<string name="sameAsCardId">Такі ж як ID</string>
|
||||
<string name="setBarcodeId">Задаць значэнне штрыхкода</string>
|
||||
<string name="unsupportedBarcodeType">Гэты тып штрыхкода пакуль не можа быць адлюстраваны. Гэта магчыма будзе падтрымлівацца ў больш позняй версіі праграмы.</string>
|
||||
<string name="wrongValueForBarcodeType">Значэнне няправільнае для абранага тыпу штрыхкода</string>
|
||||
<string name="intent_import_card_from_url_share_multiple_text">Я хачу падзяліцца з вамі некаторымі картамі</string>
|
||||
<string name="photos">Фота</string>
|
||||
<string name="backImageDescription">Задні відарыс</string>
|
||||
<string name="setFrontImage">Задаць пярэдні відарыс</string>
|
||||
<string name="setBackImage">Задаць задні відарыс</string>
|
||||
<string name="removeImage">Выдаліць відарыс</string>
|
||||
<string name="takePhoto">Зрабіць фота</string>
|
||||
<string name="updateBarcodeQuestionTitle">Абнавіць значэнне штрыхкода?</string>
|
||||
<string name="yes">Так</string>
|
||||
<string name="passwordRequired">Увядзіце пароль</string>
|
||||
<string name="exportPassword">Задайце пароль для абароны вашага экспарту (неабавязкова)</string>
|
||||
<string name="exportPasswordHint">Увядзіце пароль</string>
|
||||
<string name="failedGeneratingShareURL">Не атрымалася стварыць URL для сумеснага выкарыстання. Калі ласка, паведаміце аб гэтым.</string>
|
||||
<string name="turn_flashlight_on">Уключыць ліхтарык</string>
|
||||
<string name="settings_oled_dark">Чысты чорны фон для цёмнай тэмы</string>
|
||||
<string name="selectColor">Выбраць колер</string>
|
||||
<string name="setIcon">Задаць мініяцюру</string>
|
||||
<string name="settings_theme_color">Колер тэмы</string>
|
||||
<string name="settings_catima_theme">Catima</string>
|
||||
<string name="settings_magenta_theme">Пурпурны</string>
|
||||
<string name="app_contributors">Стала магчымым дзякуючы: <xliff:g id="app_contributors">%s</xliff:g></string>
|
||||
<string name="sort">Сартаваць</string>
|
||||
<string name="showMoreInfo">Паказаць інфармацыю</string>
|
||||
<string name="updateBalance">Абнавіць баланс</string>
|
||||
<string name="failedToRetrieveImageFile">Не ўдалося атрымаць файл відарысу</string>
|
||||
<string name="barcodeLongPressMessage">У галерэі можна адкрываць толькі відарысы</string>
|
||||
<string name="sort_by_name">Назва</string>
|
||||
<string name="sort_by_most_recently_used">Частата выкарыстання</string>
|
||||
<string name="sort_by_valid_from">Дзейнічае ад</string>
|
||||
<string name="sort_by_expiry">Тэрмін дзеяння</string>
|
||||
<string name="reverse">...у адваротным парадку</string>
|
||||
<string name="sort_by">Сартаваць па</string>
|
||||
<string name="version_history">Гісторыя версій</string>
|
||||
<string name="credits">Удзельнікі</string>
|
||||
<string name="help_translate_this_app">Дапамажыце перакласці гэтую праграму</string>
|
||||
<string name="license">Ліцэнзія</string>
|
||||
<string name="source_repository">Зыходны рэпазіторый</string>
|
||||
<string name="on_github">на GitHub</string>
|
||||
<string name="and_data_usage">і выкарыстанне трафіка</string>
|
||||
<string name="rate_this_app">Ацаніце праграму</string>
|
||||
<string name="on_google_play">у Google Play</string>
|
||||
<string name="translate_platform">на Weblate</string>
|
||||
<string name="shortcutSelectCard">Выбраць карту</string>
|
||||
<string name="options">Параметры</string>
|
||||
<string name="starred">Пазначаныя зорачкай</string>
|
||||
<string name="include_if_asking_support">Калі вы хочаце запытаць падтрымку, уключыце наступную інфармацыю:</string>
|
||||
<string name="duplicateCard">Дубляваць</string>
|
||||
<string name="archive">Архіваваць</string>
|
||||
<string name="unarchive">Разархіваваць</string>
|
||||
<string name="archived">Карта заархівавана</string>
|
||||
<string name="previousCard">Папярэдняя</string>
|
||||
<string name="nextCard">Наступная</string>
|
||||
<string name="failedToOpenUrl">Спачатку ўсталюйце вэб-браўзер</string>
|
||||
<string name="welcome">Сардэчна запрашаем у Catima</string>
|
||||
<string name="importCards">Імпартаваць карты</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>
|
||||
<string name="validFromDate">Дзейнічае ад</string>
|
||||
<string name="anyDate">Любая дата</string>
|
||||
<string name="chooseValidFromDate">Выбраць дату дзеяння</string>
|
||||
<string name="validFromSentence">Дзейнічае з: <xliff:g>%s</xliff:g></string>
|
||||
<string name="height">Вышыня</string>
|
||||
<string name="switchToFrontImage">Пераключыцца на пярэдні відарыс</string>
|
||||
<string name="openBackImageInGalleryApp">Адкрыць задні відарыс у галерэі</string>
|
||||
<string name="setBarcodeHeight">Задаць вышыню штрыхкода</string>
|
||||
<string name="donate">Ахвяраваць</string>
|
||||
<string name="icon_header_click_text">Доўгі націск для рэдагавання мініяцюры</string>
|
||||
<string name="show_name_below_image_thumbnail">Паказаць назву пад мініяцюрай відарыса</string>
|
||||
<string name="show_note">Паказваць нататку</string>
|
||||
<string name="show_balance">Паказваць баланс</string>
|
||||
<string name="show_validity">Паказваць тэрмін дзеяння</string>
|
||||
<string name="settings_category_title_cards">Прагляд карты</string>
|
||||
<string name="settings_category_title_cards_overview">Агляд карт</string>
|
||||
<string name="settings_column_count_portrait">Калонкі ў партрэтным рэжыме</string>
|
||||
<string name="settings_column_count_landscape">Слупкі ў ландшафтным рэжыме</string>
|
||||
<string name="settings_automatic_column_count">Аўтаматычна</string>
|
||||
<string name="settings_column_count_1">1</string>
|
||||
<string name="settings_column_count_2">2</string>
|
||||
<string name="settings_column_count_3">3</string>
|
||||
<string name="settings_column_count_4">4</string>
|
||||
<string name="settings_column_count_5">5</string>
|
||||
<string name="settings_column_count_6">6</string>
|
||||
<string name="settings_column_count_7">7</string>
|
||||
<string name="settings_category_title_privacy">Прыватнасць</string>
|
||||
<string name="settings_category_title_general">Агульныя</string>
|
||||
<string name="action_display_options">Параметры адлюстравання</string>
|
||||
<string name="show_archived_cards">Паказваць заархіваваныя карты</string>
|
||||
<string name="view_online">Прагляд анлайн</string>
|
||||
<string name="action_more_options">Іншыя параметры</string>
|
||||
<string name="addWithoutBarcode">Дадаць карту без штрыхкода</string>
|
||||
<string name="enter_card_id">Увядзіце нумар ID або тэкст вашай карты</string>
|
||||
<string name="card_id_must_not_be_empty">ID карты не павінен быць пустым</string>
|
||||
<string name="add_a_card_in_a_different_way">Дадаць карту іншым спосабам</string>
|
||||
<string name="manually_enter_barcode_instructions">Увядзіце ID нумар або тэкст з вашай картцы і націсніце на штрыхкод, які выглядае як на вашай картцы.</string>
|
||||
<string name="continue_">Працягнуць</string>
|
||||
<string name="spend">Патрачана</string>
|
||||
<string name="receive">Атрымана</string>
|
||||
<string name="amountParsingFailed">Памылковая сума</string>
|
||||
<string name="addFromPdfFile">Выберыце файл PDF</string>
|
||||
<string name="failedLaunchingFileManager">Не атрымалася знайсці падтрымліваемы файлавы менеджар</string>
|
||||
<string name="pageWithNumber">Старонка <xliff:g>%d</xliff:g></string>
|
||||
<string name="importCancelled">Імпарт адменены</string>
|
||||
<string name="exportCancelled">Экспарт адменены</string>
|
||||
<string name="useFrontImage">Выкарыстоўваць пярэдні відарыс</string>
|
||||
<string name="useBackImage">Выкарыстоўваць задні відарыс</string>
|
||||
<string name="addFromPkpass">Выбраць файл Passbook (.pkpass)</string>
|
||||
<string name="width">Шырыня</string>
|
||||
<string name="settings_oled_dark_summary">Змяншае выкарыстанне батарэі на OLED-дысплэях</string>
|
||||
<string name="group_name_already_in_use">Назва групы ўжо выкарыстоўваецца</string>
|
||||
<string name="group_name_is_empty">Назва групы не павінна быць пустой</string>
|
||||
<string name="failedOpeningFileManager">Спачатку ўсталюйце файлавы менеджар.</string>
|
||||
<string name="moveDown">Перасунуць уніз</string>
|
||||
<string name="addManually">Увесці штрыхкод уручную</string>
|
||||
<string name="turn_flashlight_off">Выключыць ліхтарык</string>
|
||||
<string name="thumbnailDescription">Мініяцюра</string>
|
||||
<string name="editGroup">Рэдагаванне групы: <xliff:g>%s</xliff:g></string>
|
||||
<string name="addFromImage">Выбраць малюнак з галерэі</string>
|
||||
<string name="settings_keep_screen_on">Трымаць экран уключаным</string>
|
||||
<string name="app_resources">Бясплатныя староннія рэсурсы: <xliff:g id="app_resources_list">%s</xliff:g></string>
|
||||
<string name="settings_follow_system_orientation">Як у сістэме</string>
|
||||
<string name="leaveWithoutSaveTitle">Выйсці</string>
|
||||
<string name="settings_allow_content_provider_read_title">Дазволіць іншым праграмам доступ да маіх даных</string>
|
||||
<string name="settings_display_barcode_max_brightness">Павялічваць яркасць экрану</string>
|
||||
<string name="settings_display_barcode_max_brightness_summary">Неабходна для працы некаторых сканераў</string>
|
||||
<string name="all">Усе</string>
|
||||
<string name="editBarcode">Рэдагаваць штрыхкод</string>
|
||||
<string name="leaveWithoutSaveConfirmation">Выйсці без захавання?</string>
|
||||
<string name="importLoyaltyCardKeychainMessage">Каб імпартаваць, выберыце файл <i>LoyaltyCardKeychain.csv</i> з Loyalty Card Keychain. \nСтварыце яго з меню «Імпарт/Экспарт» у Loyalty Card Keychain, спачатку націснуўшы там «Экспарт».</string>
|
||||
<string name="importStocardMessage">Каб імпартаваць, выберыце файл <i>***.zip</i> з Stocard. \nАтрымайце яго па электроннай пошце support@stocardapp.com з запытам на экспарт вашых даных.</string>
|
||||
<string name="frontImageDescription">Пярэдні відарыс</string>
|
||||
<string name="groupsList">Групы: <xliff:g>%s</xliff:g></string>
|
||||
<string name="switchToBackImage">Пераключыцца на задні відарыс</string>
|
||||
<string name="importFidmeMessage">Каб імпартаваць, выберыце файл <i>fidme-export-request-xxxxxx.zip</i> з FidMe, а потым уручную выберыце тыпы штрыхкодаў. \nСтварыце яго з вашага профілю FidMe, выбраўшы \"Абарону даных\", а затым націснуўшы \"Выняць мае даныя\".</string>
|
||||
<string name="importCatimaMessage">Каб імпартаваць, выберыце файл <i>catima.zip</i> з Catima. \nСтварыце яго з меню \"Імпарт/Экспарт\" іншай праграмы Catima, спачатку націснуўшы там \"Экспарт\".</string>
|
||||
<string name="settings_sky_blue_theme">Нябесна-блакітны</string>
|
||||
<string name="settings_brown_theme">Карычневы</string>
|
||||
<string name="switchToBarcode">Пераключыцца на штрыхкод</string>
|
||||
<string name="settings_locale">Мова</string>
|
||||
<plurals name="groupCardCountWithArchived">
|
||||
<item quantity="one"><xliff:g>%1$d</xliff:g> карта (<xliff:g id="archivedCount">%2$d</xliff:g> заархівавана)</item>
|
||||
<item quantity="few"><xliff:g>%1$d</xliff:g> карты (<xliff:g id="archivedCount">%2$d</xliff:g> заархівавана)</item>
|
||||
<item quantity="many"><xliff:g>%1$d</xliff:g> карт (<xliff:g id="archivedCount">%2$d</xliff:g> заархівавана)</item>
|
||||
<item quantity="other"><xliff:g>%1$d</xliff:g> карт (<xliff:g id="archivedCount">%2$d</xliff:g> заархівавана)</item>
|
||||
</plurals>
|
||||
<string name="unarchived">Карта разархівавана</string>
|
||||
<string name="updateBarcodeQuestionText">Вы змянілі ID. Вы хочаце таксама абнавіць штрыхкод, каб выкарыстоўваць тое ж значэнне?</string>
|
||||
<string name="no">Не</string>
|
||||
<string name="settings_pink_theme">Ружовы</string>
|
||||
<string name="settings_system_locale">Сістэма</string>
|
||||
<string name="settings_violet_theme">Фіялетавы</string>
|
||||
<string name="multipleBarcodesFoundPleaseChooseOne">Які са знойдзеных штрыхкодаў вы хочаце выкарыстоўваць?</string>
|
||||
<string name="settings_blue_theme">Сіні</string>
|
||||
<string name="settings_green_theme">Зялёны</string>
|
||||
<string name="report_error">Паведаміць пра памылку</string>
|
||||
<string name="failedLaunchingPhotoPicker">Не атрымалася знайсці праграму для галерэі, якая падтрымліваецца</string>
|
||||
<string name="unsupportedFile">Гэты файл не падтрымліваецца</string>
|
||||
<string name="openFrontImageInGalleryApp">Адкрыць пярэдні відарыс у галерэі</string>
|
||||
<string name="field_must_not_be_empty">Поле не павінна быць пустым</string>
|
||||
<string name="add_manually_warning_title">Рэкамендуецца сканаванне</string>
|
||||
<string name="errorReadingFile">Не атрымалася прачытаць файл</string>
|
||||
<string name="add_manually_warning_message">У некаторых крамах значэнне штрыхкода адрозніваецца ад лічбы, напісанай на картцы. З-за гэтага ўвод штрыхкода ўручную можа не заўсёды працаваць. Настойліва рэкамендуецца адсканаваць штрыхкод з дапамогай камеры. Вы ўсё яшчэ хочаце працягнуць?</string>
|
||||
<string name="noCameraFoundGuideText">Здаецца, у вашай прылады няма камеры. Калі яна ёсць, паспрабуйце перазагрузіць прыладу. У адваротным выпадку выкарыстоўвайце кнопку \"Іншыя параметры\" ніжэй, каб дадаць штрыхкод іншым спосабам.</string>
|
||||
<string name="generic_error_please_retry">На жаль, нешта пайшло не так, паспрабуйце яшчэ раз...</string>
|
||||
<string name="setBarcodeWidth">Задаць шырыню штрыхкода</string>
|
||||
<string name="app_license">Свабоднае копілефт праграмнае забеспячэнне, ліцэнзаванае паводле GPLv3+</string>
|
||||
</resources>
|
||||
@@ -31,7 +31,6 @@
|
||||
<string name="setBackImage">Снимка на задната страна</string>
|
||||
<string name="setFrontImage">Снимка на предната страна</string>
|
||||
<string name="photos">Снимки</string>
|
||||
<string name="importOptionApplicationExplanation">Изберете файл на друго приложение.</string>
|
||||
<string name="noCardExistsError">Картата не е намерена</string>
|
||||
<string name="updateBarcodeQuestionText">Номерът е променен. Желаете ли същата стойност да бъде приложена и към щрихкода\?</string>
|
||||
<string name="updateBarcodeQuestionTitle">Обновяване на щрихкода\?</string>
|
||||
@@ -41,7 +40,7 @@
|
||||
<string name="removeImage">Премахване на изображение</string>
|
||||
<string name="takePhoto">Снимане</string>
|
||||
<string name="intent_import_card_from_url_share_multiple_text">Искам да споделя тези карти с вас</string>
|
||||
<string name="wrongValueForBarcodeType">Стойноста е неприемлива за избрания щрихкод</string>
|
||||
<string name="wrongValueForBarcodeType">Стойността е неприемлива за избрания вид щрихкод</string>
|
||||
<string name="setBarcodeId">Задаване на стойност</string>
|
||||
<string name="sameAsCardId">Като номера</string>
|
||||
<string name="barcodeId">Стойност на щрихкода</string>
|
||||
@@ -86,7 +85,6 @@
|
||||
<string name="starImage">Звезда за любимо</string>
|
||||
<string name="thumbnailDescription">Миниатюра</string>
|
||||
<string name="selectBarcodeTitle">Избиране на щрихкод</string>
|
||||
<string name="importOptionApplicationButton">Избиране чрез приложение</string>
|
||||
<string name="importing">Внасяне…</string>
|
||||
<string name="exporting">Изнасяне…</string>
|
||||
<string name="exportFailed">Данните не могат да бъдат изнесени</string>
|
||||
@@ -107,7 +105,6 @@
|
||||
<string name="chooseImportType">Внасяне на данни на</string>
|
||||
<string name="importCatimaMessage">Изберете файла <i>catima.zip</i>, предварително изнесен от Catima.
|
||||
\nСъздайте такъв файл от меню Внасяне/изнасяне от друго устройство с Catima като изберете Изнасяне.</string>
|
||||
<string name="importOptionApplicationTitle">Чрез друго приложение</string>
|
||||
<string name="importOptionFilesystemButton">Избиране от файлова система</string>
|
||||
<string name="importOptionFilesystemExplanation">Изберете определен файл от файловата система.</string>
|
||||
<string name="app_resources">Свободни ресурси: <xliff:g id="app_resources_list">%s</xliff:g></string>
|
||||
@@ -238,7 +235,7 @@
|
||||
<string name="anyDate">Без значение от датата</string>
|
||||
<string name="validFromSentence">Валидност от: <xliff:g>%s</xliff:g></string>
|
||||
<string name="chooseValidFromDate">Определена дата</string>
|
||||
<string name="height">Височина:</string>
|
||||
<string name="height">Височина</string>
|
||||
<string name="switchToFrontImage">Показване на предната страна</string>
|
||||
<string name="switchToBackImage">Показване на задната страна</string>
|
||||
<string name="switchToBarcode">Показване на щрихкода</string>
|
||||
@@ -308,4 +305,7 @@
|
||||
<string name="generic_error_please_retry">Съжаляваме, нещо се обърка, опитайте отново…</string>
|
||||
<string name="addFromPkpass">Изберете файл на Passbook (.pkpass)</string>
|
||||
<string name="unsupportedFile">Този вид файлове не се поддържат</string>
|
||||
</resources>
|
||||
<string name="sort_by_valid_from">Начало валидност</string>
|
||||
<string name="width">Ширина</string>
|
||||
<string name="setBarcodeWidth">Задаване ширина на щрих кода</string>
|
||||
</resources>
|
||||
|
||||
@@ -85,14 +85,12 @@
|
||||
<string name="ok">ঠিক আছে</string>
|
||||
<string name="about">সম্পর্কিত</string>
|
||||
<string name="debug_version_fmt">সংস্করণ: <xliff:g id="version">%s</xliff:g></string>
|
||||
<string name="importOptionApplicationButton">অন্য অ্যাপ ব্যাবহার করুন</string>
|
||||
<string name="moveUp">উপরে উঠান</string>
|
||||
<string name="moveDown">নিচে নামান</string>
|
||||
<string name="expiryDate">মেয়াদোত্তীর্ণ তারিখ</string>
|
||||
<string name="noBarcodeFound">কোনো বারকোড পাওয়া যায়নি</string>
|
||||
<string name="cameraPermissionRequired">এই কাজটির জন্য ক্যামেরা ব্যবহার করার অনুমতি লাগবে…</string>
|
||||
<string name="noCameraPermissionDirectToSystemSetting">বারকোড স্ক্যান করার জন্য, Catima কে ক্যামেরাটি ব্যবহার করার অনুমতি দিতে হবে। এইখানে টাচ করে আপনার অনুমতি সেটিংস পালটে নিন।</string>
|
||||
<string name="importOptionApplicationExplanation">একটি ফাইল খোলার জন্য যেকোনো অ্যাপ বা আপনার প্রিয় ফাইল ম্যানেজারটি ব্যবহার করুন।</string>
|
||||
<string name="app_copyright_fmt" tools:ignore="PluralsCandidate">মেধাস্বত্ব © 2019–<xliff:g>%d</xliff:g> Sylvia van Os</string>
|
||||
<string name="app_license">কপিলেফট দ্বারা রক্ষা করা মুক্ত সফটওয়্যার, লাইসেন্স করা GPLv3+ এর অধীনে</string>
|
||||
<plurals name="deleteCardsConfirmation">
|
||||
@@ -136,7 +134,6 @@
|
||||
<string name="exportOptionExplanation">ডেটাটি আপনার পছন্দের জায়গায় রাখা হবে।</string>
|
||||
<string name="importOptionFilesystemTitle">স্টোরেজ থেকে আমদানি করুন</string>
|
||||
<string name="importOptionFilesystemButton">স্টোরেজ থেকে</string>
|
||||
<string name="importOptionApplicationTitle">অন্য অ্যাপ ব্যবহার করুন</string>
|
||||
<string name="app_copyright_old">Loyalty Card Keychain এর উপর ভিত্তি করে
|
||||
\nমেধাস্বত্ব © 2016–2020 Branden Archer</string>
|
||||
<string name="selectBarcodeTitle">বারকোড নির্বাচন করুন</string>
|
||||
@@ -241,7 +238,7 @@
|
||||
<string name="show_name_below_image_thumbnail">ছবির থাম্বনেইল এর নিচে নামটি দেখান</string>
|
||||
<string name="show_note">নোট দেখান</string>
|
||||
<string name="show_validity">বৈধতা দেখান</string>
|
||||
<string name="height">উচ্চতা:</string>
|
||||
<string name="height">উচ্চতা</string>
|
||||
<string name="switchToBackImage">পিছনের ছবিটিতে সুইচ করুন</string>
|
||||
<string name="switchToFrontImage">সামনের ছবিটিতে সুইচ করুন</string>
|
||||
<string name="switchToBarcode">বারকোডে সুইচ করুন</string>
|
||||
@@ -251,4 +248,4 @@
|
||||
<string name="icon_header_click_text">দীর্ঘক্ষন টাচ করে থাম্বনেইল এডিট করবেন</string>
|
||||
<string name="show_balance">ব্যালান্স দেখান</string>
|
||||
<string name="donate">দান করুন</string>
|
||||
</resources>
|
||||
</resources>
|
||||
|
||||
@@ -100,9 +100,6 @@
|
||||
<string name="importOptionFilesystemTitle">Uvoz iz file sistema</string>
|
||||
<string name="importOptionFilesystemExplanation">Izaberite specifični file iz file sistema.</string>
|
||||
<string name="importOptionFilesystemButton">Iz file sistema</string>
|
||||
<string name="importOptionApplicationTitle">Koristi drugu aplikaciju</string>
|
||||
<string name="importOptionApplicationExplanation">Koristi bilo koju aplikaciju ili Vašu omiljenu aplikaciju da bi otvorili file.</string>
|
||||
<string name="importOptionApplicationButton">Koristi drugu aplikaciju</string>
|
||||
<string name="about">O</string>
|
||||
<string name="noBarcode">Nema barkoda</string>
|
||||
<string name="deleteTitle">Obriši karticu</string>
|
||||
|
||||
@@ -1,5 +1,5 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<resources>
|
||||
<resources xmlns:tools="http://schemas.android.com/tools" xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
|
||||
<string name="groups">Grups</string>
|
||||
<string name="action_add">Afegeix</string>
|
||||
<string name="save">Desa</string>
|
||||
@@ -14,4 +14,234 @@
|
||||
<string name="welcome">Benvingut a Catima</string>
|
||||
<string name="noGiftCards">Cliqueu el botó + més per afegir una targeta, o importeu-ne des del ⋮ menú.</string>
|
||||
<string name="photos">Fotos</string>
|
||||
</resources>
|
||||
<string name="app_name">Catima</string>
|
||||
<string name="moveDown">Baixar abaix</string>
|
||||
<string name="setBackImage">Setejar la imatge posterior</string>
|
||||
<string name="setFrontImage">Imatge Frontal</string>
|
||||
<string name="exportPassword">Setegi el password per tal de protegir l\'exportació (opcional)</string>
|
||||
<string name="failedGeneratingShareURL">No s\'ha pogut generar una URL per compartir. Siusplau reporti-ho.</string>
|
||||
<string name="unarchive">Desarxivar</string>
|
||||
<string name="on_google_play">al Google Play</string>
|
||||
<string name="settings_locale">Idioma</string>
|
||||
<string name="field_must_not_be_empty">El camp no pot estar buit</string>
|
||||
<string name="app_copyright_fmt" tools:ignore="PluralsCandidate">Copyright © 2019–<xliff:g>%d</xliff:g> Sylvia van Os i contribuïdors</string>
|
||||
<string name="app_copyright_short">Copyright © Sylvia van Os i contribuïdors</string>
|
||||
<string name="app_license">Software lliure Copyleft, licència GPLv3+</string>
|
||||
<string name="app_resources">Recursos lliures de tercers: <xliff:g id="app_resources_list">%s</xliff:g></string>
|
||||
<string name="thumbnailDescription">Miniatura</string>
|
||||
<string name="starImage">Estrella de preferides</string>
|
||||
<string name="settings">Configuració</string>
|
||||
<string name="settings_theme">Tema</string>
|
||||
<string name="settings_light_theme">Tema clar</string>
|
||||
<string name="settings_system_theme">Tema de sistema</string>
|
||||
<string name="settings_dark_theme">Tema Fosc</string>
|
||||
<string name="settings_card_orientation">Orientació de la pantalla</string>
|
||||
<string name="settings_allow_content_provider_read_title">Permet altres apps a accedir a les meves dades</string>
|
||||
<string name="settings_disable_lockscreen_while_viewing_card_summary">Desactiva el bloqueix la pantalla mentre es visualitza la targeta</string>
|
||||
<string name="settings_allow_content_provider_read_summary">Les aplicacions han de seguir demanant permís per tenir-hi accés</string>
|
||||
<string name="leaveWithoutSaveTitle">Sortir</string>
|
||||
<string name="leaveWithoutSaveConfirmation">Vols sortir sense grabar?</string>
|
||||
<string name="passwordRequired">Introdueixi el password</string>
|
||||
<string name="turn_flashlight_on">Encendre el llum flash</string>
|
||||
<string name="settings_magenta_theme">Magenta</string>
|
||||
<string name="settings_violet_theme">Violeta</string>
|
||||
<string name="settings_blue_theme">Blau</string>
|
||||
<string name="settings_green_theme">Verd</string>
|
||||
<string name="translate_platform">a la Pàgina Web</string>
|
||||
<string name="report_error">Informar un Error</string>
|
||||
<string name="archived">Targeta arxivada</string>
|
||||
<string name="reverse">...en ordre invers</string>
|
||||
<string name="icon_header_click_text">Pulsa llarg per editar la miniatura</string>
|
||||
<string name="show_note">Mostrar nota</string>
|
||||
<string name="add_manually_warning_title">Recomenem escanejar</string>
|
||||
<string name="add_manually_warning_message">En algunes targetes el valor imprès en la targeta no correspon amb el codi registrat en el codi de barres. Per això, introduint manualment el codi pot no funcionar en alguns casos. Recomanem sempre que sigui possible escanejar la targeta amb la càmera. Vol igualment continuar la edició manual?</string>
|
||||
<string name="continue_">Continuar</string>
|
||||
<string name="exportOptionExplanation">La informació serà escrita al lloc de la seva elecció.</string>
|
||||
<string name="importOptionFilesystemTitle">Importar desde el sistema de fitxers</string>
|
||||
<string name="importOptionFilesystemButton">Desde el sistema de fitxers</string>
|
||||
<string name="selectBarcodeTitle">Sel•lecciona el Codi de Barres</string>
|
||||
<string name="importSuccessful">Dades importades correctament</string>
|
||||
<string name="exportSuccessful">Dades exportades correctament</string>
|
||||
<string name="failedOpeningFileManager">Instala un gestor de fitxers.</string>
|
||||
<string name="showMoreInfo">Mostrar informació</string>
|
||||
<string name="version_history">Històric de versions</string>
|
||||
<string name="sort_by">Ordenar per</string>
|
||||
<string name="sort_by_most_recently_used">Per les més utilitzades</string>
|
||||
<string name="options">Opcions</string>
|
||||
<plurals name="selectedCardCount">
|
||||
<item quantity="one"><xliff:g>%d</xliff:g> seleccionat</item>
|
||||
<item quantity="many"><xliff:g>%d</xliff:g> seleccionats</item>
|
||||
<item quantity="other"><xliff:g>%d</xliff:g> seleccionats</item>
|
||||
</plurals>
|
||||
<string name="importOptionFilesystemExplanation">Escull un fitxer especific del sistema de fitxers.</string>
|
||||
<string name="no">No</string>
|
||||
<string name="settings_pink_theme">Rosa</string>
|
||||
<string name="sort">Ordenar</string>
|
||||
<string name="failedToRetrieveImageFile">Ha fallat l\'obtenció del fitxer d\'imatge</string>
|
||||
<string name="barcodeLongPressMessage">Les imatges només es poden obrir desde la app galeria</string>
|
||||
<string name="settings_category_title_privacy">Privacitat</string>
|
||||
<plurals name="deleteCardsTitle">
|
||||
<item quantity="one">Eliminar <xliff:g>%d</xliff:g> targeta</item>
|
||||
<item quantity="many">Eliminar <xliff:g>%d</xliff:g> targetes</item>
|
||||
<item quantity="other">Eliminar <xliff:g>%d</xliff:g> targetes</item>
|
||||
</plurals>
|
||||
<plurals name="deleteCardsConfirmation">
|
||||
<item quantity="one">Eliminaras aquesta <xliff:g>%d</xliff:g> targeta permanentment?</item>
|
||||
<item quantity="many">Eliminaras aquestes <xliff:g>%d</xliff:g> targetes permanentment?</item>
|
||||
<item quantity="other">Eliminaras aquestes <xliff:g>%d</xliff:g> targetes permanentment?</item>
|
||||
</plurals>
|
||||
<plurals name="groupCardCountWithArchived">
|
||||
<item quantity="one"><xliff:g>%1$d</xliff:g> targeta (<xliff:g id="archivedCount">%2$d</xliff:g> arxivada)</item>
|
||||
<item quantity="many"><xliff:g>%1$d</xliff:g> targetes (<xliff:g id="archivedCount">%2$d</xliff:g> arxivades)</item>
|
||||
<item quantity="other"><xliff:g>%1$d</xliff:g> targetes (<xliff:g id="archivedCount">%2$d</xliff:g> arxivades)</item>
|
||||
</plurals>
|
||||
<string name="importCancelled">Importació anulada</string>
|
||||
<string name="exportCancelled">Exportació cancelada</string>
|
||||
<string name="noGiftCardsGroup">Crea algunes targetes, asigna-les en un grup aquí.</string>
|
||||
<string name="noMatchingGiftCards">Sense resultats. Prova a canviar la teva cerca.</string>
|
||||
<string name="storeName">Nom</string>
|
||||
<string name="note">Nota</string>
|
||||
<string name="cardId">Id. de la Targeta</string>
|
||||
<string name="barcodeType">Tipus de codi de barres</string>
|
||||
<string name="noBarcode">Sense codi de barres</string>
|
||||
<string name="settings_portrait_orientation">Vertical</string>
|
||||
<string name="yes">Si</string>
|
||||
<string name="addFromPdfFile">Seleccioni un PDF</string>
|
||||
<string name="errorReadingFile">No s\'ha pogut llegir el fitxer</string>
|
||||
<string name="failedLaunchingFileManager">No s\'ha pogut trobar un gestor de fitxers compatible</string>
|
||||
<string name="multipleBarcodesFoundPleaseChooseOne">Quin dels següents codis de barres prefereix utilitzar?</string>
|
||||
<string name="pageWithNumber">Pàgina <xliff:g>%d</xliff:g></string>
|
||||
<string name="settings_follow_system_orientation">Seguir el sistema</string>
|
||||
<string name="settings_landscape_orientation">Horitzontal</string>
|
||||
<string name="intent_import_card_from_url_share_text">Vull compartir una targeta amb tu</string>
|
||||
<string name="takePhoto">Fer una foto</string>
|
||||
<string name="help_translate_this_app">Ajuda a traduïr aquesta app</string>
|
||||
<string name="license">Llicència</string>
|
||||
<string name="credits">Crèdits</string>
|
||||
<string name="unarchived">Targeta desarxivades</string>
|
||||
<string name="failedLaunchingPhotoPicker">No s\'ha pogut trobar una aplicació de galeria de fotos</string>
|
||||
<string name="previousCard">Anterior</string>
|
||||
<string name="failedToOpenUrl">Instali un navegador abans</string>
|
||||
<string name="importCards">Importar targetes</string>
|
||||
<string name="updateBalanceTitle">Quan ha gastat o ha rebut?</string>
|
||||
<string name="updateBalanceHint">Introdueixi quantitat</string>
|
||||
<string name="anyDate">Qualsevol data</string>
|
||||
<string name="validFromSentence">Vàlid desde: <xliff:g>%s</xliff:g></string>
|
||||
<string name="setBarcodeHeight">Setejar l\'alçada del codi de barres</string>
|
||||
<string name="donate">Donatiu</string>
|
||||
<string name="receive">Rebre</string>
|
||||
<string name="amountParsingFailed">Import invàlid</string>
|
||||
<string name="barcodeImageDescriptionWithType">Codi de barres <xliff:g>%s</xliff:g></string>
|
||||
<string name="about_title_fmt">Sobre <xliff:g id="app_name">%s</xliff:g></string>
|
||||
<string name="debug_version_fmt">Versió: <xliff:g id="version">%s</xliff:g></string>
|
||||
<string name="settings_follow_sensor_orientation">Sempre rota (ignora la configuració de sistema)</string>
|
||||
<string name="settings_display_barcode_max_brightness_summary">Alguns escàners ho necesiten</string>
|
||||
<string name="settings_keep_screen_on">Mantenir la pantalla encesa</string>
|
||||
<string name="settings_keep_screen_on_summary">Desactiva el bloqueix de la pantalla mentre mostra una targeta</string>
|
||||
<string name="settings_disable_lockscreen_while_viewing_card">Evita el bloqueix de la pantalla</string>
|
||||
<string name="enter_group_name">Introdueix el nom del grup</string>
|
||||
<string name="group_edit">Editar el Group</string>
|
||||
<plurals name="groupCardCount">
|
||||
<item quantity="one"><xliff:g>%d</xliff:g> targeta</item>
|
||||
<item quantity="many"><xliff:g>%d</xliff:g> targetes</item>
|
||||
<item quantity="other"><xliff:g>%d</xliff:g> targetes</item>
|
||||
</plurals>
|
||||
<string name="group_name_is_empty">El nom del grup ha de contenir algun text</string>
|
||||
<string name="all">Totes</string>
|
||||
<string name="settings_oled_dark">Negre pur en el tema fosc</string>
|
||||
<string name="selectColor">Sel•leccioni el color</string>
|
||||
<string name="setIcon">Setegi la miniatura</string>
|
||||
<string name="settings_theme_color">Color del tema</string>
|
||||
<string name="app_contributors">Fet possible per: <xliff:g id="app_contributors">%s</xliff:g></string>
|
||||
<string name="updateBalance">Actualitzar el balanç</string>
|
||||
<string name="sort_by_name">Nom</string>
|
||||
<string name="archive">Arxivar</string>
|
||||
<string name="currentBalanceSentence">Balanç actual: <xliff:g>%s</xliff:g></string>
|
||||
<string name="height">Alçada</string>
|
||||
<string name="switchToBackImage">Canviar a la imatge posterior</string>
|
||||
<string name="switchToBarcode">Canviar al codi de barres</string>
|
||||
<string name="show_name_below_image_thumbnail">Mostrar el nom sota de la imatge en miniatura</string>
|
||||
<string name="settings_category_title_cards">Veure la Targeta</string>
|
||||
<string name="enter_card_id">Introdueixi el nombre ID o text de la seva targeta</string>
|
||||
<string name="card_id_must_not_be_empty">ID de la Targeta no pot estar buit</string>
|
||||
<string name="add_a_card_in_a_different_way">Afegeix una targeta de forma diferent</string>
|
||||
<string name="unstar">Treure entre les preferides</string>
|
||||
<string name="star">Afegir a les preferides</string>
|
||||
<string name="cancel">Cancel•la</string>
|
||||
<string name="deleteConfirmation">Vols eliminar de forma permanent aquesta targeta?</string>
|
||||
<string name="share">Compartir</string>
|
||||
<string name="sendLabel">Enviar…</string>
|
||||
<string name="editCardTitle">Editar Targeta</string>
|
||||
<string name="addCardTitle">Afegir Targeta</string>
|
||||
<string name="scanCardBarcode">Escanejar Codi de Barres</string>
|
||||
<string name="cardShortcut">Drecera a la Targeta</string>
|
||||
<string name="noCardsMessage">Afegeix primer una targeta</string>
|
||||
<string name="noCardExistsError">No s\'ha pogut trobar aquesta targeta</string>
|
||||
<string name="failedParsingImportUriError">No s\'ha pogut analitzar la URI d\'importació</string>
|
||||
<string name="openFrontImageInGalleryApp">Obrir la imatge frontal a l\'app de galeria</string>
|
||||
<string name="settings_lock_on_opening_orientation">En obrir la targeta, bloquejar la orientació de la pantalla</string>
|
||||
<string name="settings_use_volume_keys_navigation_summary">Utilitza els botons de volum per canviar la targeta que es mostra</string>
|
||||
<string name="updateBarcodeQuestionText">Ha canviat el valor ID. Vol actualitzar també el codi de barres per uter utilitzar el mateix valor?</string>
|
||||
<string name="settings_sky_blue_theme">Blau fluix</string>
|
||||
<string name="starred">Preferides</string>
|
||||
<string name="deleteConfirmationGroup">Vols eliminar aquest grup?</string>
|
||||
<string name="removeImage">Eliminar imatge</string>
|
||||
<string name="app_libraries">Llibreries lliures de tercers: <xliff:g id="app_libraries_list">%s</xliff:g></string>
|
||||
<string name="settings_display_barcode_max_brightness">Màxima iluminació</string>
|
||||
<string name="settings_brown_theme">Marró</string>
|
||||
<string name="manually_enter_barcode_instructions">Introdueixi el ID de la targeta manualment i trii un codi de barres que s\'assembli al de la seva targeta.</string>
|
||||
<string name="rate_this_app">Valora aquesta app</string>
|
||||
<string name="exportPasswordHint">Introdueixi el password</string>
|
||||
<string name="backImageDescription">Imatge posterior</string>
|
||||
<string name="source_repository">Repositori font</string>
|
||||
<string name="on_github">al Github</string>
|
||||
<string name="include_if_asking_support">Si vol demanar suport tècnic, inclogui la següent informació:</string>
|
||||
<string name="newBalanceSentence">Nou balanç: <xliff:g>%s</xliff:g></string>
|
||||
<string name="openBackImageInGalleryApp">Obrir la imatge posterior a l\'app de la galeria</string>
|
||||
<string name="generic_error_please_retry">Perdoni, alguna cosa ha anat malament, siusplau torni-ho a provar...</string>
|
||||
<string name="settings_column_count_6">6</string>
|
||||
<string name="useBackImage">Utilitzar la imatge posterior</string>
|
||||
<string name="sort_by_valid_from">Valid desde</string>
|
||||
<string name="sort_by_expiry">Expiració</string>
|
||||
<string name="and_data_usage">i us de dades</string>
|
||||
<string name="shortcutSelectCard">Sel•leccioni una targeta</string>
|
||||
<string name="duplicateCard">Duplicar</string>
|
||||
<string name="nextCard">Següent</string>
|
||||
<string name="validFromDate">Vàlid desde</string>
|
||||
<string name="chooseValidFromDate">Esculli una data inicial vàlida</string>
|
||||
<string name="switchToFrontImage">Canviar a la imatge frontal</string>
|
||||
<string name="show_balance">Mostrar balanç</string>
|
||||
<string name="show_validity">Mostrar la validesa</string>
|
||||
<string name="settings_category_title_cards_overview">Vista de targetes</string>
|
||||
<string name="settings_column_count_portrait">Columnes en mode vertical</string>
|
||||
<string name="settings_column_count_landscape">Columnes en mode apaisat</string>
|
||||
<string name="settings_automatic_column_count">Automàtic</string>
|
||||
<string name="settings_column_count_1">1</string>
|
||||
<string name="settings_column_count_2">2</string>
|
||||
<string name="settings_column_count_3">3</string>
|
||||
<string name="settings_column_count_4">4</string>
|
||||
<string name="settings_column_count_5">5</string>
|
||||
<string name="settings_column_count_7">7</string>
|
||||
<string name="settings_category_title_general">General</string>
|
||||
<string name="action_display_options">Mostrar opcions</string>
|
||||
<string name="show_archived_cards">Mostrar targetes arxivades</string>
|
||||
<string name="view_online">Vista online</string>
|
||||
<string name="action_more_options">Més opcions</string>
|
||||
<string name="addWithoutBarcode">Afegeix una targeta sebse codi de barres</string>
|
||||
<string name="noCameraFoundGuideText">El seu dispositiu sembla que no té càmera. Si realment en té, provi a reiniciar el dispositiu. Sino utilitzi el botó Més opcions i introdueixi el codi de barres d\'una altra manera.</string>
|
||||
<string name="useFrontImage">Utilitzar la imatge frontal</string>
|
||||
<string name="addFromPkpass">Seleccioni el fitxer Passbook (.pkpass)</string>
|
||||
<string name="unsupportedFile">Aquest fitxer no està soportat</string>
|
||||
<string name="settings_use_volume_keys_navigation">Canviar les targetes al prèmer els botons de volum</string>
|
||||
<string name="noGroups">Clica el botó + per afegir grups per categoritzar.</string>
|
||||
<string name="noGroupCards">Aquest grup està buit</string>
|
||||
<string name="group_name_already_in_use">Ja existeix un grup amb aquest nom</string>
|
||||
<string name="group_updated">Grup actualitzat</string>
|
||||
<string name="moveUp">Pujar amunt</string>
|
||||
<string name="updateBarcodeQuestionTitle">Actualitzar el valor del codi de barres?</string>
|
||||
<string name="turn_flashlight_off">Apagar el llum Flash</string>
|
||||
<string name="settings_oled_dark_summary">Redueix l\'ús de la bateria en pantalles OLED</string>
|
||||
<string name="settings_system_locale">Idioma del sistema</string>
|
||||
<string name="settings_catima_theme">Catima</string>
|
||||
<string name="spend">Gastar</string>
|
||||
</resources>
|
||||
|
||||
@@ -29,9 +29,6 @@
|
||||
<string name="importOptionFilesystemTitle">Import z úložiště</string>
|
||||
<string name="importOptionFilesystemExplanation">Vyberte konkrétní soubor v úložišti.</string>
|
||||
<string name="importOptionFilesystemButton">Z úložiště</string>
|
||||
<string name="importOptionApplicationTitle">Přes jinou aplikaci</string>
|
||||
<string name="importOptionApplicationExplanation">K otevření souboru použijte libovolnou aplikaci nebo svého oblíbeného správce souborů.</string>
|
||||
<string name="importOptionApplicationButton">Použít jinou aplikaci</string>
|
||||
<string name="about">O aplikaci</string>
|
||||
<string name="app_license">Copyleftovaný svobodný software s licencí GPLv3+</string>
|
||||
<string name="about_title_fmt">O aplikaci <xliff:g id="app_name">%s</xliff:g></string>
|
||||
@@ -243,7 +240,7 @@
|
||||
<string name="anyDate">Jakékoliv datum</string>
|
||||
<string name="chooseValidFromDate">Vyberte datum počátku platnosti</string>
|
||||
<string name="validFromSentence">Platnost od: <xliff:g>%s</xliff:g></string>
|
||||
<string name="height">Výška:</string>
|
||||
<string name="height">Výška</string>
|
||||
<string name="switchToFrontImage">Přepnout na přední obrázek</string>
|
||||
<string name="switchToBackImage">Přepnout na zadní obrázek</string>
|
||||
<string name="switchToBarcode">Přepnout na čárový kód</string>
|
||||
@@ -297,7 +294,7 @@
|
||||
<string name="importCancelled">Import zrušen</string>
|
||||
<string name="exportCancelled">Export zrušen</string>
|
||||
<string name="useBackImage">Použijte předchozí obrázek</string>
|
||||
<string name="useFrontImage">Použijte přední obrázek</string>
|
||||
<string name="useFrontImage">Použít přední obrázek</string>
|
||||
<string name="settings_use_volume_keys_navigation_summary">Pomocí tlačítek hlasitosti můžete změnit, která karta se zobrazí</string>
|
||||
<string name="settings_use_volume_keys_navigation">Přepínat karty pomocí tlačítek hlasitosti</string>
|
||||
<string name="generic_error_please_retry">Je nám líto, něco se pokazilo, zkuste to prosím znovu...</string>
|
||||
@@ -314,4 +311,7 @@
|
||||
<string name="settings_column_count_7">7</string>
|
||||
<string name="settings_column_count_4">4</string>
|
||||
<string name="settings_column_count_5">5</string>
|
||||
</resources>
|
||||
<string name="sort_by_valid_from">Platnost od</string>
|
||||
<string name="setBarcodeWidth">Nastavit šířku čárového kódu</string>
|
||||
<string name="width">Šířka</string>
|
||||
</resources>
|
||||
|
||||
@@ -48,14 +48,11 @@
|
||||
<string name="settings_theme">Tema</string>
|
||||
<string name="settings">Indstillinger</string>
|
||||
<string name="starImage">Favorit stjerne</string>
|
||||
<string name="thumbnailDescription">Miniaturebillede til kort</string>
|
||||
<string name="thumbnailDescription">Thumbnail</string>
|
||||
<string name="selectBarcodeTitle">Vælg stregkode</string>
|
||||
<string name="app_copyright_old">Baseret på Loyalty Card Keychain
|
||||
\ncopyright © 2016-2020 Branden Archer.</string>
|
||||
<string name="about">Om</string>
|
||||
<string name="importOptionApplicationButton">Brug en anden app</string>
|
||||
<string name="importOptionApplicationExplanation">Brug en hvilken som helst app eller din foretrukne filhåndtering til at åbne en fil.</string>
|
||||
<string name="importOptionApplicationTitle">Brug en anden app</string>
|
||||
<string name="noCardsMessage">Tilføj først et kort</string>
|
||||
<string name="cardShortcut">Kort genvej</string>
|
||||
<string name="importOptionFilesystemButton">Fra filsystemet</string>
|
||||
@@ -66,22 +63,22 @@
|
||||
<string name="noCardExistsError">Kunne ikke finde det kort</string>
|
||||
<string name="deleteConfirmationGroup">Slet gruppe\?</string>
|
||||
<string name="all">Alle</string>
|
||||
<string name="noGroupCards">Denne gruppe indeholder ikke nogen kort</string>
|
||||
<string name="noGroups">Klik på + plus-knappen for først at tilføje grupper til kategorisering.</string>
|
||||
<string name="noGroupCards">Denne gruppe er tom</string>
|
||||
<string name="noGroups">Klik på + plus-knappen for at tilføje grupper til kategorisering.</string>
|
||||
<string name="groups">Grupper</string>
|
||||
<string name="enter_group_name">Indtast gruppenavn</string>
|
||||
<string name="exportSuccessful">Eksporterede kortdata</string>
|
||||
<string name="importSuccessful">Kortdata importeret</string>
|
||||
<string name="exportSuccessful">Data eksporteret</string>
|
||||
<string name="importSuccessful">Data importeret</string>
|
||||
<string name="intent_import_card_from_url_share_text">Jeg vil dele et kort med jer</string>
|
||||
<string name="settings_disable_lockscreen_while_viewing_card">Forebyg låseskærm</string>
|
||||
<string name="settings_keep_screen_on">LHold skærm tændt</string>
|
||||
<string name="moveUp">Bevæg dig opad</string>
|
||||
<string name="leaveWithoutSaveConfirmation">Forlade uden at gemme\?</string>
|
||||
<string name="settings_display_barcode_max_brightness">Lysere stregkodevisning</string>
|
||||
<string name="settings_display_barcode_max_brightness">Gør skærm lysere</string>
|
||||
<string name="failedOpeningFileManager">Installer først en filhåndteringsprogram.</string>
|
||||
<string name="moveDown">Bevæger sig nedad</string>
|
||||
<string name="leaveWithoutSaveTitle">Afslut</string>
|
||||
<string name="addManually">Indtast kort-ID manuelt</string>
|
||||
<string name="addManually">Indtast stregkoden manuelt</string>
|
||||
<string name="noGiftCardsGroup">Opret kort og tildel dem gupper her.</string>
|
||||
<plurals name="deleteCardsConfirmation">
|
||||
<item quantity="one">Slet dette <xliff:g>%d</xliff:g> kort permanent\?</item>
|
||||
@@ -100,4 +97,58 @@
|
||||
<string name="debug_version_fmt">Version: <xliff:g id="version">%s</xliff:g></string>
|
||||
<string name="app_license">Copylefted libre software, GPLv3+ licens</string>
|
||||
<string name="barcodeImageDescriptionWithType">Billede<xliff:g>%s</xliff:g> stregkode</string>
|
||||
<string name="group_name_already_in_use">Gruppenavn allerede i brug</string>
|
||||
<string name="editGroup">Redigerer Gruppe: <xliff:g>%s</xliff:g></string>
|
||||
<string name="importFidme">Importer fra FidMe</string>
|
||||
<string name="settings_card_orientation">Skærm orientation</string>
|
||||
<string name="settings_follow_system_orientation">Følg system</string>
|
||||
<string name="settings_portrait_orientation">Portræt</string>
|
||||
<string name="settings_landscape_orientation">Landskab</string>
|
||||
<string name="settings_disable_lockscreen_while_viewing_card_summary">Deaktiver låseskærm når et kort er åbent</string>
|
||||
<string name="groupsList">Grupper: <xliff:g>%s</xliff:g></string>
|
||||
<string name="expiryStateSentence">Udløber: <xliff:g>%s</xliff:g></string>
|
||||
<string name="moveBarcodeToTopOfScreen">Flyt stregkoden til toppen af skærmen</string>
|
||||
<string name="accept">Acceptér</string>
|
||||
<string name="importCatima">Importer fra Catima</string>
|
||||
<string name="expiryDate">Udløbsdato</string>
|
||||
<string name="never">Aldrig</string>
|
||||
<string name="chooseExpiryDate">Vælg udløbsdato</string>
|
||||
<string name="balance">Balance</string>
|
||||
<string name="importStocard">Importer fra Stocard</string>
|
||||
<string name="balanceSentence">Balance: <xliff:g>%s</xliff:g></string>
|
||||
<string name="group_name_is_empty">Gruppenavn må ikke være tom</string>
|
||||
<string name="group_updated">Gruppe opdateret</string>
|
||||
<string name="card">Kort</string>
|
||||
<string name="currency">Valuta</string>
|
||||
<string name="settings_display_barcode_max_brightness_summary">Nødvendigt for nogle scannere til at fungerer</string>
|
||||
<string name="editBarcode">Rediger stregkode</string>
|
||||
<string name="points">Point</string>
|
||||
<string name="privacy_policy">Privatlivspolitik</string>
|
||||
<plurals name="groupCardCount">
|
||||
<item quantity="one"><xliff:g>%d</xliff:g> kort</item>
|
||||
<item quantity="other"><xliff:g>%d</xliff:g> kort</item>
|
||||
</plurals>
|
||||
<string name="settings_allow_content_provider_read_title">Tillid andre apps tilgang til min data</string>
|
||||
<string name="settings_allow_content_provider_read_summary">Apps vil stadig have behov for at spørge om tilladelse for at få adgang</string>
|
||||
<string name="barcodeId">Stregkode værdi</string>
|
||||
<string name="setBarcodeId">Vælg stregkode værdi</string>
|
||||
<string name="sameAsCardId">Samme som ID</string>
|
||||
<string name="settings_system_theme">System</string>
|
||||
<string name="settings_lock_on_opening_orientation">Lås til orientation når kort åbnes</string>
|
||||
<string name="settings_keep_screen_on_summary">Deaktiver skærm tids slukning når et kort er åbent</string>
|
||||
<string name="group_edit">Rediger gruppe</string>
|
||||
<string name="settings_follow_sensor_orientation">Altid roter (ignorer system indstillinger)</string>
|
||||
<string name="chooseImportType">Importer data fra</string>
|
||||
<string name="importVoucherVault">Importer fra Voucher Vault</string>
|
||||
<string name="settings_use_volume_keys_navigation">Skift kort ved brug af lydstyrke knapperne</string>
|
||||
<string name="settings_use_volume_keys_navigation_summary">Brug lydstyrke knapperne til at ændre hvilket kort bliver vist</string>
|
||||
<string name="addFromImage">Vælg et billede fra galleri</string>
|
||||
<string name="expiryStateSentenceExpired">Udløbet: <xliff:g>%s</xliff:g></string>
|
||||
<string name="noBarcodeFound">Ingen stregkode blev fundet</string>
|
||||
<string name="errorReadingImage">Kunne ikke læse billedet</string>
|
||||
<string name="balanceParsingFailed">Ugyldig balance</string>
|
||||
<plurals name="balancePoints">
|
||||
<item quantity="one"><xliff:g>%s</xliff:g> point</item>
|
||||
<item quantity="other"><xliff:g>%s</xliff:g> point</item>
|
||||
</plurals>
|
||||
</resources>
|
||||
@@ -36,9 +36,6 @@
|
||||
<string name="importOptionFilesystemTitle">Aus Dateisystem importieren</string>
|
||||
<string name="importOptionFilesystemExplanation">Wähle eine bestimmte Datei aus dem Dateisystem aus.</string>
|
||||
<string name="importOptionFilesystemButton">vom Dateisystem</string>
|
||||
<string name="importOptionApplicationTitle">Andere App verwenden</string>
|
||||
<string name="importOptionApplicationExplanation">Benutze eine beliebige App oder deinen bevorzugten Dateimanager zur Dateiauswahl.</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>
|
||||
@@ -49,7 +46,7 @@
|
||||
<string name="settings_display_barcode_max_brightness">Displayhelligkeit erhöhen</string>
|
||||
<string name="exportSuccessful">Daten exportiert</string>
|
||||
<string name="importSuccessful">Daten importiert</string>
|
||||
<string name="intent_import_card_from_url_share_text">Ich würde gerne diese Karte mit dir teilen</string>
|
||||
<string name="intent_import_card_from_url_share_text">Ich würde gerne eine Karte mit dir teilen</string>
|
||||
<string name="settings_dark_theme">Dunkel</string>
|
||||
<string name="settings_light_theme">Hell</string>
|
||||
<string name="settings_system_theme">System</string>
|
||||
@@ -104,8 +101,7 @@
|
||||
<string name="importLoyaltyCardKeychain">Aus Loyalty Card Keychain importieren</string>
|
||||
<string name="importFidmeMessage">Wähle deinen <i>fidme-export-request-xxxxxx.zip</i>-Export aus FidMe zum Importieren aus und wähle anschließend die Barcodetypen manuell aus. \nOder erstelle ihn aus deinem FidMe-Profil, indem du Datenschutz wählst und dann zuerst auf Meine Daten extrahieren drückst.</string>
|
||||
<string name="importFidme">Aus FidMe importieren</string>
|
||||
<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="importCatimaMessage">Wähle deinen „<i>catima.zip</i>-Export“ von Catima zum Importieren aus.\nErstelle ihn zuerst aus dem Import/Export-Menü einer anderen Catima-Anwendung, indem du dort Export drückst.</string>
|
||||
<string name="importCatima">Aus Catima importieren</string>
|
||||
<string name="setBarcodeId">Barcodewert festlegen</string>
|
||||
<string name="sameAsCardId">Entspricht Kartennummer</string>
|
||||
@@ -163,7 +159,7 @@
|
||||
<string name="app_contributors">Ermöglicht durch: <xliff:g id="app_contributors">%s</xliff:g></string>
|
||||
<string name="barcodeImageDescriptionWithType">Bild <xliff:g>%s</xliff:g> Barcode</string>
|
||||
<string name="sort_by">Sortieren nach</string>
|
||||
<string name="sort_by_expiry">Ablauf</string>
|
||||
<string name="sort_by_expiry">Gültig bis</string>
|
||||
<string name="sort_by_most_recently_used">Zuletzt verwendet</string>
|
||||
<string name="sort_by_name">Name</string>
|
||||
<string name="sort">Sortieren</string>
|
||||
@@ -238,7 +234,7 @@
|
||||
<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="height">Höhe</string>
|
||||
<string name="switchToFrontImage">Zur Vorderseite wechseln</string>
|
||||
<string name="switchToBackImage">Zur Rückseite wechseln</string>
|
||||
<string name="setBarcodeHeight">Barcode-Höhe einstellen</string>
|
||||
@@ -246,7 +242,7 @@
|
||||
<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 Vorschaubild anzeigen</string>
|
||||
<string name="show_name_below_image_thumbnail">Namen unter dem Vorschaubild anzeigen</string>
|
||||
<string name="settings_allow_content_provider_read_title">Anderen Apps den Zugriff auf meine Daten gestatten</string>
|
||||
<string name="permissionReadCardsLabel">Catima-Karten lesen</string>
|
||||
<string name="permissionReadCardsDescription">Lesen deiner Catima Karten mit allen Details, einschließlich Notizen und Bildern</string>
|
||||
@@ -305,4 +301,7 @@
|
||||
<string name="generic_error_please_retry">Entschuldigung, da ist etwas schief gelaufen, versuchen Sie es noch einmal ...</string>
|
||||
<string name="unsupportedFile">Diese Datei wird nicht unterstützt</string>
|
||||
<string name="addFromPkpass">Passbook-Datei (.pkpass) auswählen</string>
|
||||
</resources>
|
||||
<string name="sort_by_valid_from">Gültig ab</string>
|
||||
<string name="width">Breite</string>
|
||||
<string name="setBarcodeWidth">Barcodebreite einstellen</string>
|
||||
</resources>
|
||||
|
||||
@@ -32,9 +32,6 @@
|
||||
<string name="importOptionFilesystemTitle">Εισαγωγή από το σύστημα αρχείων</string>
|
||||
<string name="importOptionFilesystemExplanation">Επιλέξτε ένα συγκεκριμένο αρχείο από το σύστημα αρχείων.</string>
|
||||
<string name="importOptionFilesystemButton">Από το σύστημα αρχείων</string>
|
||||
<string name="importOptionApplicationTitle">Χρήση άλλης εφαρμογής</string>
|
||||
<string name="importOptionApplicationExplanation">Χρησιμοποιήστε οποιαδήποτε εφαρμογή ή τον αγαπημένο περιηγητή αρχείων σας, για να ανοίξετε ένα αρχείο.</string>
|
||||
<string name="importOptionApplicationButton">Χρήσης άλλης εφαρμογής</string>
|
||||
<string name="about">Σχετικά</string>
|
||||
<string name="app_license">Άδεια χρήσης υπό GPLv3+</string>
|
||||
<string name="about_title_fmt">Σχετικά με <xliff:g id="app_name">%s</xliff:g></string>
|
||||
@@ -236,7 +233,7 @@
|
||||
<string name="cameraPermissionRequired">Δικαίωμα πρόσβασης στην κάμερα απαραίτητο γι\' αυτή την ενέργεια…</string>
|
||||
<string name="settings_allow_content_provider_read_title">Να επιτρέπεται σε άλλες εφαρμογές να έχουν πρόσβαση στα δεδομένα μου</string>
|
||||
<string name="app_copyright_short">Πνευματικά δικαιώματα © Sylvia van Os και συνεργάτες</string>
|
||||
<string name="height">Ύψος:</string>
|
||||
<string name="height">Ύψος</string>
|
||||
<string name="switchToFrontImage">Μετάβαση στην εμπρόσθια εικόνα</string>
|
||||
<string name="switchToBackImage">Μετάβαση στην οπίσθια εικόνα</string>
|
||||
<string name="switchToBarcode">Μετάβαση σε γραμμωτό κώδικα</string>
|
||||
@@ -307,4 +304,7 @@
|
||||
<string name="generic_error_please_retry">Λυπούμαστε, κάτι πήγε στραβά, δοκιμάστε ξανά...</string>
|
||||
<string name="unsupportedFile">Το αρχείο δεν υποστηρίζεται</string>
|
||||
<string name="addFromPkpass">Επιλογή αρχείου Passbook (.pkpass)</string>
|
||||
</resources>
|
||||
<string name="sort_by_valid_from">Έναρξη ισχύος</string>
|
||||
<string name="setBarcodeWidth">Ορισμός πλάτους γραμμωτού κώδικα</string>
|
||||
<string name="width">Πλάτος</string>
|
||||
</resources>
|
||||
|
||||
@@ -54,9 +54,6 @@
|
||||
<string name="thumbnailDescription">Bildeto</string>
|
||||
<string name="app_copyright_old">Bazita sur Lojaleco Karto Keychain
|
||||
\nkopirajto © 2016-2020 Branden Archer</string>
|
||||
<string name="importOptionApplicationButton">Uzi alian apon</string>
|
||||
<string name="importOptionApplicationExplanation">Uzi ajnan apon aŭ vian preferatan dosiermastrumilon por malfermi dosieron.</string>
|
||||
<string name="importOptionApplicationTitle">Uzi alian app</string>
|
||||
<string name="importOptionFilesystemExplanation">Elektu specifa dosiero de la dosiersistemo.</string>
|
||||
<string name="exportOptionExplanation">La datumoj estos skribita al loko de via elekto.</string>
|
||||
<string name="exportFailed">Ne povis fari eksportadon</string>
|
||||
@@ -134,7 +131,7 @@
|
||||
<string name="unarchive">Elarkivigi</string>
|
||||
<string name="switchToBarcode">Ŝanĝi al strikodo</string>
|
||||
<string name="currentBalanceSentence">Nuna saldo: <xliff:g>%s</xliff:g></string>
|
||||
<string name="height">Alteco:</string>
|
||||
<string name="height">Alteco</string>
|
||||
<string name="settings_category_title_general">Ĝenerala</string>
|
||||
<string name="settings_category_title_privacy">Privateco</string>
|
||||
<plurals name="balancePoints">
|
||||
@@ -292,4 +289,4 @@
|
||||
<string name="amountParsingFailed">Nevalida kvanto</string>
|
||||
<string name="useBackImage">Uzi la malantaŭan bildon</string>
|
||||
<string name="useFrontImage">Uzi la antaŭan bildon</string>
|
||||
</resources>
|
||||
</resources>
|
||||
|
||||
@@ -90,7 +90,7 @@
|
||||
<string name="frontImageDescription">Imágen frontal</string>
|
||||
<string name="settings_system_theme">Sistema</string>
|
||||
<string name="setBackImage">Establecer imágen dorsal</string>
|
||||
<string name="settings_display_barcode_max_brightness">Iluminar la vista del código de barras</string>
|
||||
<string name="settings_display_barcode_max_brightness">Iluminar la pantalla de visualización del código de barras</string>
|
||||
<string name="chooseExpiryDate">Elija la fecha de vencimiento</string>
|
||||
<string name="permissionReadCardsDescription">Lea sus tarjetas Catima y todo sus detalles, incluyendo notas e imágenes</string>
|
||||
<string name="unsupportedBarcodeType">Este tipo de código de barras aún no puede ser visualizado. Es posible que sea soportado en una versión futura de la aplicación.</string>
|
||||
@@ -116,7 +116,6 @@
|
||||
<string name="about">Acerca de</string>
|
||||
<string name="sameAsCardId">Igual que el código</string>
|
||||
<string name="importOptionFilesystemButton">Desde el sistema de archivos</string>
|
||||
<string name="importOptionApplicationButton">Usar otra aplicación</string>
|
||||
<string name="settings_landscape_orientation">Horizontal</string>
|
||||
<string name="privacy_policy">Política de Privacidad</string>
|
||||
<string name="enter_group_name">Ingrese el nombre del grupo</string>
|
||||
@@ -124,7 +123,6 @@
|
||||
\nObténgalo mandando un correo electrónico a support@stocardapp.com preguntando por una copia de tus datos.</string>
|
||||
<string name="addManually">Ingresar el código de barras manualmente</string>
|
||||
<string name="app_copyright_fmt" tools:ignore="PluralsCandidate">Copyright © 2019–<xliff:g>%d</xliff:g> Sylvia van Os y colaboradores</string>
|
||||
<string name="importOptionApplicationExplanation">Use cualquier aplicación o su administrador de archivos para abrir un archivo.</string>
|
||||
<string name="importVoucherVault">Importar desde Voucher Vault</string>
|
||||
<string name="barcodeId">Valor del código de barras</string>
|
||||
<string name="errorReadingImage">No se ha podido leer la imágen</string>
|
||||
@@ -157,7 +155,6 @@
|
||||
<string name="app_resources">Recursos externos libres: <xliff:g id="app_resources_list">%s</xliff:g></string>
|
||||
<string name="app_name">Catima</string>
|
||||
<string name="accept">Aceptar</string>
|
||||
<string name="importOptionApplicationTitle">Usar otra aplicación</string>
|
||||
<plurals name="groupCardCount">
|
||||
<item quantity="one"><xliff:g>%d</xliff:g> tarjeta</item>
|
||||
<item quantity="many"><xliff:g>%d</xliff:g> tarjetas</item>
|
||||
@@ -186,7 +183,7 @@
|
||||
<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="exportPassword">Configura una contraseña para proteger tu exportación (opcional)</string>
|
||||
<string name="settings_sky_blue_theme">Celeste</string>
|
||||
<string name="settings_green_theme">Verde</string>
|
||||
<string name="exportPasswordHint">Ingresar contraseña</string>
|
||||
@@ -213,4 +210,11 @@
|
||||
<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>
|
||||
<string name="sort_by">Ordenar por</string>
|
||||
<string name="reverse">en orden inverso</string>
|
||||
<string name="sort_by_most_recently_used">Más Recientemente Usado</string>
|
||||
<string name="settings_use_volume_keys_navigation">Cambiar tarjetas usando los botones de volumen</string>
|
||||
<string name="sort_by_valid_from">Válido Desde</string>
|
||||
<string name="sort_by_expiry">Vencimiento</string>
|
||||
<string name="settings_use_volume_keys_navigation_summary">Usá los botones de volumen para cambiar la tarjeta que se muestra</string>
|
||||
</resources>
|
||||
|
||||
@@ -32,9 +32,6 @@
|
||||
<string name="importOptionFilesystemTitle">Importar desde el sistema de archivos</string>
|
||||
<string name="importOptionFilesystemExplanation">Elegir un archivo concreto del sistema de archivos.</string>
|
||||
<string name="importOptionFilesystemButton">Desde el sistema de archivos</string>
|
||||
<string name="importOptionApplicationTitle">Utilizar otra aplicación</string>
|
||||
<string name="importOptionApplicationExplanation">Usa cualquier aplicación o tu administrador de archivos favorito para abrir un archivo.</string>
|
||||
<string name="importOptionApplicationButton">Utilizar otra aplicación</string>
|
||||
<string name="about">Información</string>
|
||||
<string name="app_license">Programa libre con «copyleft», disponible en virtud de la licencia GPLv3+</string>
|
||||
<string name="about_title_fmt">Acerca de <xliff:g id="app_name">%s</xliff:g></string>
|
||||
@@ -244,7 +241,7 @@
|
||||
<string name="validFromDate">Válido desde</string>
|
||||
<string name="chooseValidFromDate">Elija una fecha válida desde</string>
|
||||
<string name="validFromSentence">Válido desde: <xliff:g>%s</xliff:g></string>
|
||||
<string name="height">Altura:</string>
|
||||
<string name="height">Alto</string>
|
||||
<string name="switchToFrontImage">Cambiar a imagen frontal</string>
|
||||
<string name="openFrontImageInGalleryApp">Abrir imagen frontal en la aplicación de la galería</string>
|
||||
<string name="openBackImageInGalleryApp">Abrir imagen trasera en la aplicación de la galería</string>
|
||||
@@ -314,4 +311,7 @@
|
||||
<string name="generic_error_please_retry">Lo sentimos, algo salió mal, por favor inténtelo de nuevo...</string>
|
||||
<string name="unsupportedFile">Este archivo no es compatible</string>
|
||||
<string name="addFromPkpass">Seleccione un archivo Passbook (.pkpass)</string>
|
||||
</resources>
|
||||
<string name="sort_by_valid_from">Válido desde</string>
|
||||
<string name="setBarcodeWidth">Establecer el ancho del código de barras</string>
|
||||
<string name="width">Ancho</string>
|
||||
</resources>
|
||||
|
||||
@@ -78,9 +78,6 @@
|
||||
<string name="importOptionFilesystemTitle">Impordi failisüsteemist</string>
|
||||
<string name="importOptionFilesystemExplanation">Vali vajalik impordifail failisüsteemist.</string>
|
||||
<string name="importOptionFilesystemButton">Vali failisüsteemist</string>
|
||||
<string name="importOptionApplicationTitle">Kasuta muust rakendusest eksporditud andmeid</string>
|
||||
<string name="importOptionApplicationExplanation">Kasuta faili avamiseks mõnda muud rakendust või sinu lemmikfailihaldurit.</string>
|
||||
<string name="importOptionApplicationButton">Vali muu rakenduse ekspordifail</string>
|
||||
<string name="about">Rakenduse teave</string>
|
||||
<string name="app_copyright_short">Autoriõigused © Sylvia van Os ja kaasautorid</string>
|
||||
<string name="about_title_fmt">Teave <xliff:g id="app_name">%s</xliff:g> kohta</string>
|
||||
@@ -178,7 +175,7 @@
|
||||
<string name="points">Punkte</string>
|
||||
<string name="balanceParsingFailed">Vigane maksejääk</string>
|
||||
<string name="app_loyalty_card_keychain">Loyalty Card Keychain</string>
|
||||
<string name="privacy_policy">Privaatsuspoliitika</string>
|
||||
<string name="privacy_policy">Andmekaitsepõhimõtted</string>
|
||||
<string name="accept">Nõustu</string>
|
||||
<string name="importCatima">Impordi Catima varukoopiast</string>
|
||||
<string name="importCatimaMessage">Importimiseks vali varem tehtud <i>catima.zip</i> Catima ekspordifail. \nSellise faili saad luua mõnes teises seadmes olevast Catima rakendusest Import/Eksport menüüst valikust Eksport.</string>
|
||||
@@ -199,7 +196,7 @@
|
||||
<string name="setFrontImage">Halda esikülje pilti</string>
|
||||
<string name="setBackImage">Halda tagakülje pilti</string>
|
||||
<string name="removeImage">Eemalda pilt</string>
|
||||
<string name="takePhoto">Tee foto</string>
|
||||
<string name="takePhoto">Pildista</string>
|
||||
<string name="updateBarcodeQuestionText">Sa muutsid ID väärtust? Kas sa soovid ka triipkoodiväärtuse vastavalt uuendada?</string>
|
||||
<string name="exportPassword">Sinu eksporditavate andmete turvamiseks palun sisesta salasõna (kui soovid seda)</string>
|
||||
<string name="exportPasswordHint">Sisesta salasõna</string>
|
||||
@@ -246,7 +243,7 @@
|
||||
<string name="anyDate">Ükspuha, mis kuupäev</string>
|
||||
<string name="chooseValidFromDate">Vali korrektne kehtivuse alguse kuupäev</string>
|
||||
<string name="validFromSentence">Kehtib alates: <xliff:g>%s</xliff:g></string>
|
||||
<string name="height">Kõrgus:</string>
|
||||
<string name="height">Kõrgus</string>
|
||||
<string name="switchToFrontImage">Vaata esikülje pilti</string>
|
||||
<string name="switchToBackImage">Vaata tagakülje pilti</string>
|
||||
<string name="switchToBarcode">Vaata triipkoodi</string>
|
||||
@@ -303,4 +300,7 @@
|
||||
<string name="generic_error_please_retry">Vabandust, midagi läks nüüd viltu, palun proovi uuesti...</string>
|
||||
<string name="unsupportedFile">See fail pole toetatud</string>
|
||||
<string name="addFromPkpass">Vali Passbooki fail (.pkpass)</string>
|
||||
</resources>
|
||||
<string name="sort_by_valid_from">Kehtib alates</string>
|
||||
<string name="setBarcodeWidth">Määratle triipkoodi laius</string>
|
||||
<string name="width">Laius</string>
|
||||
</resources>
|
||||
|
||||
@@ -1,5 +1,5 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<resources xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
|
||||
<resources xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2" xmlns:tools="http://schemas.android.com/tools">
|
||||
<string name="app_name">کاتیما</string>
|
||||
<string name="action_search">جستجو</string>
|
||||
<string name="action_add">افزودن</string>
|
||||
@@ -41,7 +41,7 @@
|
||||
<string name="importFailed">نمیتوان ایمپورت کرد</string>
|
||||
<string name="exportSuccessfulTitle">خروجی گرفته شده</string>
|
||||
<string name="exportFailedTitle">خروجی گرفتن ناموفق بود</string>
|
||||
<string name="storageReadPermissionRequired">دسترسی به خواندن محل ذخیره برای این کار نیاز است…</string>
|
||||
<string name="storageReadPermissionRequired">برای این اقدام دسترسی به حافظه مورد نیاز است…</string>
|
||||
<string name="exportOptionExplanation">داده در محلی که شما انتخاب میکنید نوشته خواهد شد.</string>
|
||||
<string name="receive">دریافت</string>
|
||||
<string name="continue_">ادامه</string>
|
||||
@@ -71,5 +71,235 @@
|
||||
<string name="importExport">ایمپورت/خروجی گرفتن</string>
|
||||
<string name="settings_category_title_privacy">حریم شخصی</string>
|
||||
<string name="settings_category_title_general">عمومی</string>
|
||||
<string name="settings_category_title_cards">کارتها</string>
|
||||
</resources>
|
||||
<string name="settings_category_title_cards">نمایش کارت</string>
|
||||
<string name="barcodeImageDescriptionWithType">تصویر بارکد <xliff:g>%s</xliff:g></string>
|
||||
<string name="importOptionFilesystemButton">از فایل های سیستم</string>
|
||||
<string name="about">درباره</string>
|
||||
<string name="app_copyright_fmt" tools:ignore="PluralsCandidate">حق تکثیر © 2019–<xliff:g>%d</xliff:g> سیلویا وَن اُس و مشارکت کنندگان</string>
|
||||
<string name="app_copyright_short">حق نشر © سیلویا وَن اُس و مشارکت کنندگان</string>
|
||||
<string name="failedParsingImportUriError">تجزیه URI ورودی ناموفق بود</string>
|
||||
<string name="importOptionFilesystemExplanation">یک فایل مشخص از فایلهای سیستم انتخاب کنید.</string>
|
||||
<string name="importOptionFilesystemTitle">ورود از فایل سیستم</string>
|
||||
<plurals name="selectedCardCount">
|
||||
<item quantity="one"><xliff:g>%d</xliff:g> انتخاب شد</item>
|
||||
<item quantity="other"><xliff:g>%d</xliff:g> انتخاب شد</item>
|
||||
</plurals>
|
||||
<string name="selectBarcodeTitle">انتخاب بارکد</string>
|
||||
<string name="starImage">ستاره موردعلاقه</string>
|
||||
<string name="settings">تنظیمات</string>
|
||||
<string name="settings_theme">تم</string>
|
||||
<string name="settings_system_theme">سیستم</string>
|
||||
<string name="settings_dark_theme">تیره</string>
|
||||
<string name="settings_card_orientation">جهت صفحه نمایش</string>
|
||||
<string name="settings_follow_sensor_orientation">همیشه قابل چرخش باشد (بدون در نظر گرفتن تنظیمات سیستم)</string>
|
||||
<string name="settings_portrait_orientation">عمودی</string>
|
||||
<string name="settings_keep_screen_on">روشن نگه داشتن صفحه نمایش</string>
|
||||
<string name="settings_keep_screen_on_summary">غیرفعال سازی مهلت صفحه نمایش هنگام مشاهده کارت</string>
|
||||
<string name="settings_disable_lockscreen_while_viewing_card">جلوگیری از قفل شدن صفحه</string>
|
||||
<string name="settings_allow_content_provider_read_title">اجازه به برنامه های دیگر برای دسترسی به داده های من</string>
|
||||
<string name="settings_allow_content_provider_read_summary">برنامه ها باید برای گرفتن مجوز درخواست کنند</string>
|
||||
<string name="importSuccessful">داده وارد شد</string>
|
||||
<string name="thumbnailDescription">تصویر کوچک</string>
|
||||
<string name="settings_landscape_orientation">افقی</string>
|
||||
<string name="settings_light_theme">روشن</string>
|
||||
<string name="settings_display_barcode_max_brightness_summary">برای کارکرد برخی اسکنر ها ضروری است</string>
|
||||
<string name="settings_display_barcode_max_brightness">روشنایی صفحه</string>
|
||||
<string name="settings_disable_lockscreen_while_viewing_card_summary">جلوگیری از قفل شدن صفحه هنگام مشاهده کارت</string>
|
||||
<string name="settings_follow_system_orientation">پیروی از سیستم</string>
|
||||
<string name="intent_import_card_from_url_share_text">میخواهم یک کارت را با تو به اشتراک بگذارم</string>
|
||||
<string name="settings_use_volume_keys_navigation">جابجایی میان کارت ها با استفاده از کلید های صدا</string>
|
||||
<string name="settings_use_volume_keys_navigation_summary">از کلید های صدا برای تغیر کارت نمایشی استفاده کنید</string>
|
||||
<string name="about_title_fmt">درباره <xliff:g id="app_name">%s</xliff:g></string>
|
||||
<string name="debug_version_fmt">نسخه <xliff:g id="version">%s</xliff:g></string>
|
||||
<string name="chooseExpiryDate">انتخاب تاریخ انقضاء</string>
|
||||
<string name="app_libraries">کتابخانه های آزاد شخص ثالث: <xliff:g id="app_libraries_list">%s</xliff:g></string>
|
||||
<string name="app_copyright_old">بر اساس کارت وفاداری Keychain\nکپی رایت © 2016-2020 سازنده : Branden</string>
|
||||
<string name="app_license">نرمافزار آزاد با حقوق کپیلفت، تحت مجوز GPLv3+</string>
|
||||
<string name="groups">گروهها</string>
|
||||
<string name="noGroupCards">این گروه خالی است</string>
|
||||
<string name="noGroups">روی دکمه + اضافه کلیک کنید تا گروههایی برای دستهبندی اضافه کنید.</string>
|
||||
<string name="editGroup">ویرایش گروه: <xliff:g>%s</xliff:g></string>
|
||||
<string name="importCatimaMessage">فایل <i>catima.zip</i> خروجی خود را از Catima برای وارد کردن انتخاب کنید.\nآن را از منوی وارد/صادر کردن در یک اپلیکیشن دیگر Catima با فشردن دکمه صادرکردن ابتدا ایجاد کنید.</string>
|
||||
<string name="importStocard">واردات از Stocard</string>
|
||||
<string name="unsupportedBarcodeType">این نوع بارکد هنوز نمیتواند نمایش داده شود. ممکن است در نسخه آینده برنامه پشتیبانی شود.</string>
|
||||
<plurals name="balancePoints">
|
||||
<item quantity="one"><xliff:g>%s</xliff:g> امتیاز</item>
|
||||
<item quantity="other"><xliff:g>%s</xliff:g> امتیاز</item>
|
||||
</plurals>
|
||||
<string name="importFidmeMessage">فایل خروجی <i>fidme-export-request-xxxxxx.zip</i> خود را از FidMe برای وارد کردن انتخاب کنید، و سپس نوع بارکدها را به صورت دستی مشخص کنید.\nآن را از پروفایل FidMe خود با انتخاب گزینه حفاظت از داده و سپس فشار دادن گزینه استخراج داده من ابتدا ایجاد کنید.</string>
|
||||
<string name="leaveWithoutSaveTitle">خروج</string>
|
||||
<string name="balanceSentence">موجودی: <xliff:g>%s</xliff:g></string>
|
||||
<string name="sameAsCardId">همانند شناسه</string>
|
||||
<string name="setBarcodeId">تنظیم مقدار بارکد</string>
|
||||
<string name="exportSuccessful">دادهها صادر شدند</string>
|
||||
<string name="enter_group_name">نام گروه را وارد کنید</string>
|
||||
<string name="importLoyaltyCardKeychain">وارد کردن از جاکلیدی کارت وفاداری</string>
|
||||
<string name="importLoyaltyCardKeychainMessage">فایل خروجی <i>LoyaltyCardKeychain.csv</i> خود را از جاسوئیچی کارت وفاداری برای وارد کردن انتخاب کنید.\nآن را از منوی وارد/صادرکردن در جاسوئیچی کارت وفاداری با فشردن دکمه صادرکردن ابتدا ایجاد کنید.</string>
|
||||
<string name="app_resources">منابع آزاد از طرف شخص ثالث: <xliff:g id="app_resources_list">%s</xliff:g></string>
|
||||
<string name="settings_lock_on_opening_orientation">قفل به جهت استفاده شده در هنگام بازکردن کارت</string>
|
||||
<plurals name="groupCardCount">
|
||||
<item quantity="one"><xliff:g>%d</xliff:g> کارت</item>
|
||||
<item quantity="other"><xliff:g>%d</xliff:g> کارت</item>
|
||||
</plurals>
|
||||
<string name="group_name_already_in_use">نام گروه قبلاً استفاده شده</string>
|
||||
<string name="group_name_is_empty">نام گروه نباید خالی باشد</string>
|
||||
<string name="group_updated">گروه به روز شد</string>
|
||||
<string name="all">همه</string>
|
||||
<string name="deleteConfirmationGroup">حذف گروه؟</string>
|
||||
<string name="failedOpeningFileManager">ابتدا یک مدیریت فایل نصب کنید.</string>
|
||||
<string name="moveUp">به بالا حرکت کن</string>
|
||||
<string name="moveDown">به پایین حرکت کن</string>
|
||||
<string name="leaveWithoutSaveConfirmation">بدون ذخیره ترک میکنید؟</string>
|
||||
<string name="addManually">بارکد را دستی وارد کنید</string>
|
||||
<string name="addFromImage">یک تصویر از گالری انتخاب کنید</string>
|
||||
<string name="groupsList">گروهها: <xliff:g>%s</xliff:g></string>
|
||||
<string name="expiryStateSentence">تاریخ انقضاء: <xliff:g>%s</xliff:g></string>
|
||||
<string name="card">کارت</string>
|
||||
<string name="editBarcode">ویرایش بارکد</string>
|
||||
<string name="expiryDate">تاریخ انقضا</string>
|
||||
<string name="never">هرگز</string>
|
||||
<string name="moveBarcodeToTopOfScreen">بارکد را به بالای صفحه منتقل کنید</string>
|
||||
<string name="noBarcodeFound">بارکدی پیدا نشد</string>
|
||||
<string name="errorReadingImage">نمی توان تصویر را خواند</string>
|
||||
<string name="balance">موجودی</string>
|
||||
<string name="currency">ارز</string>
|
||||
<string name="points">امتیازها</string>
|
||||
<string name="balanceParsingFailed">موجودی نامعتبر</string>
|
||||
<string name="chooseImportType">وارد کردن داده ها از</string>
|
||||
<string name="app_loyalty_card_keychain">جاکلیدی کارت وفاداری</string>
|
||||
<string name="privacy_policy">خط مشی رازداری</string>
|
||||
<string name="accept">قبول</string>
|
||||
<string name="importCatima">واردات از کاتیما</string>
|
||||
<string name="importFidme">واردات از FidMe</string>
|
||||
<string name="importStocardMessage">فایل خروجی <i>***.zip</i> خود را از Stocard برای وارد کردن انتخاب کنید.\nاین فایل را با ارسال ایمیل به آدرس support@stocardapp.com و درخواست خروجی دادههای خود دریافت کنید.</string>
|
||||
<string name="importVoucherVault">واردات از صندوق کوپن</string>
|
||||
<string name="importVoucherVaultMessage">فایل خروجی <i>vouchervault.json</i> خود را از صندوق کوپن برای وارد کردن انتخاب کنید.\nآن را ابتدا با فشردن دکمه صادرکردن در صندوق کوپن ایجاد کنید.</string>
|
||||
<string name="barcodeId">مقدار بارکد</string>
|
||||
<string name="group_edit">ویرایش گروه</string>
|
||||
<string name="expiryStateSentenceExpired">منقضی شده: <xliff:g>%s</xliff:g></string>
|
||||
<string name="errorReadingFile">اشکال در خواندن فایل</string>
|
||||
<string name="duplicateCard">تکثیر کارت</string>
|
||||
<string name="exportPassword">خروجی گرفته شده را بوسیله پسورد حفاظت کنید (غیر اجباری)</string>
|
||||
<string name="exportPasswordHint">پسورد فایل خروجی</string>
|
||||
<string name="importCancelled">واردات کنسل شد</string>
|
||||
<string name="failedToRetrieveImageFile">بازیابی فایل تصویر ناموفق بود</string>
|
||||
<string name="help_translate_this_app">به ترجمه این برنامه کمک کنید</string>
|
||||
<string name="importCards">واردات کارت ها</string>
|
||||
<string name="height">ارتفاع</string>
|
||||
<string name="add_manually_warning_message">برای برخی از فروشگاهها، مقدار بارکد با عدد نوشته شده روی کارت متفاوت است. به همین دلیل، وارد کردن دستی بارکد ممکن است همیشه کار نکند. اکیداً توصیه میشود که به جای آن، بارکد را با دوربین خود اسکن کنید. آیا هنوز میخواهید ادامه دهید؟</string>
|
||||
<string name="generic_error_please_retry">ببخشید، مشکلی پیش آمده، لطفا دوباره امتحان کنید...</string>
|
||||
<string name="settings_magenta_theme">سرخابی</string>
|
||||
<string name="welcome">یه کتیما خوش آمدید</string>
|
||||
<string name="chooseValidFromDate">مقداری درست از تاریخ برگزینید</string>
|
||||
<string name="intent_import_card_from_url_share_multiple_text">میخواهم چند کارت به شما بدهم</string>
|
||||
<string name="frontImageDescription">عکس نمایه</string>
|
||||
<string name="backImageDescription">عکس پشتِسر</string>
|
||||
<string name="photos">عکسها</string>
|
||||
<string name="setFrontImage">عکس روبهرو را بگذارید</string>
|
||||
<string name="yes">بله</string>
|
||||
<string name="no">نه</string>
|
||||
<string name="updateBarcodeQuestionTitle">مقدار بارکد را بهروز میکنید؟</string>
|
||||
<string name="updateBarcodeQuestionText">شما شناسه را تغییر دادید. میخواهید بارکد را هم بهروز کنید تا همین مقدار را بهکار ببرید؟</string>
|
||||
<string name="failedGeneratingShareURL">نتوانستم آدرس همرسانیپذیر بسازم. لطفن این را گزارش کنید.</string>
|
||||
<string name="turn_flashlight_on">چراغقوه را روشن کنید</string>
|
||||
<string name="settings_locale">زبان</string>
|
||||
<string name="settings_oled_dark">پسزمینهی یکدست سیاه برای حالت تاریک</string>
|
||||
<string name="settings_oled_dark_summary">استفادهی باتری را برای نمایشگرهای OLED کاهش میدهد</string>
|
||||
<string name="setIcon">قالب پیشنمایه را بگمارید</string>
|
||||
<string name="settings_theme_color">رنگ زمینه</string>
|
||||
<string name="settings_catima_theme">کتیما</string>
|
||||
<string name="settings_system_locale">سیستم</string>
|
||||
<string name="selectColor">رنگ را برگزینید</string>
|
||||
<string name="settings_violet_theme">بنفش</string>
|
||||
<string name="settings_blue_theme">آبی</string>
|
||||
<string name="settings_sky_blue_theme">آبی آسمانی</string>
|
||||
<string name="settings_green_theme">سبز</string>
|
||||
<string name="settings_brown_theme">قهوهای</string>
|
||||
<string name="app_contributors">با کمک او ممکن شد: <xliff:g id="app_contributors">%s</xliff:g></string>
|
||||
<string name="sort">مرتبکردن</string>
|
||||
<string name="showMoreInfo">نمایش اطلاعات</string>
|
||||
<string name="credits">اعتبارها</string>
|
||||
<string name="archived">کارت بایگانی شد</string>
|
||||
<string name="unarchived">کارت از بایگانی برچیده شد</string>
|
||||
<string name="show_validity">درستی را نشان دهید</string>
|
||||
<string name="wrongValueForBarcodeType">مقدار برای نوع بارکد برگزیده درست نیست</string>
|
||||
<string name="setBackImage">عکس پشتِسر را بگذارید</string>
|
||||
<string name="removeImage">عکس را برچینید</string>
|
||||
<string name="passwordRequired">لطفا گذرواژه را وارد کنید</string>
|
||||
<string name="previousCard">پیشین</string>
|
||||
<string name="turn_flashlight_off">چراغقوه را خاموش کنید</string>
|
||||
<string name="settings_pink_theme">صورتی</string>
|
||||
<string name="updateBalance">بهروزرسانی موجودی</string>
|
||||
<string name="barcodeLongPressMessage">تنها عکس میتواند در گالری برنامه باز شود</string>
|
||||
<string name="sort_by_name">نام</string>
|
||||
<string name="sort_by_most_recently_used">بهتازگی استفادهشده</string>
|
||||
<string name="sort_by_expiry">انقضا</string>
|
||||
<string name="sort_by">مرتب کن با</string>
|
||||
<string name="include_if_asking_support">اگر میخواهید پشتیبانی درخواست کنید، اطلاعات زیر را پر کنید:</string>
|
||||
<string name="unarchive">برچیدن بایگانی</string>
|
||||
<string name="switchToBackImage">به عکس پشتِسر جابهجا کنید</string>
|
||||
<string name="openBackImageInGalleryApp">عکس پشتِسر را در برنامهی گالری باز کنید</string>
|
||||
<string name="setBarcodeHeight">ارتفاع بارگد را بگمارید</string>
|
||||
<string name="donate">کمک مالی کنید</string>
|
||||
<string name="icon_header_click_text">برای ویرایش قاب پیشنمایه فشار داده و نگهدارید</string>
|
||||
<string name="show_name_below_image_thumbnail">زیر عکس پیشنمایه نام را نشان دهید</string>
|
||||
<string name="show_note">یادداشت را نشان دهید</string>
|
||||
<string name="settings_category_title_cards_overview">نگاهی به کارتها</string>
|
||||
<string name="settings_column_count_portrait">ستونها در حالت پرتره</string>
|
||||
<string name="settings_automatic_column_count">خودکار</string>
|
||||
<string name="settings_column_count_2">۲</string>
|
||||
<string name="settings_column_count_3">۳</string>
|
||||
<string name="settings_column_count_4">۴</string>
|
||||
<string name="settings_column_count_5">۵</string>
|
||||
<string name="settings_column_count_6">۶</string>
|
||||
<string name="failedLaunchingPhotoPicker">نتوانستم یک برنامهی گالری پشتیبانیشده بیابم</string>
|
||||
<string name="show_balance">موجودی را نشان دهید</string>
|
||||
<string name="settings_column_count_landscape">ستونها در حالت لنداسکیپ</string>
|
||||
<string name="settings_column_count_1">۱</string>
|
||||
<string name="sort_by_valid_from">درست از</string>
|
||||
<string name="reverse">بهترتیب برعکس</string>
|
||||
<string name="version_history">تاریخچهی نسخه</string>
|
||||
<string name="license">مجوز</string>
|
||||
<string name="source_repository">مخزن منبع</string>
|
||||
<string name="report_error">خطا را گزارش کنید</string>
|
||||
<string name="translate_platform">در وبلیت</string>
|
||||
<string name="shortcutSelectCard">یک کارت برگزینید</string>
|
||||
<string name="options">گزینهها</string>
|
||||
<string name="starred">نشانشده</string>
|
||||
<string name="on_github">روی گیتهاب</string>
|
||||
<string name="and_data_usage">و مصرف داده</string>
|
||||
<string name="rate_this_app">به این برنامه رتبه بدهید</string>
|
||||
<string name="on_google_play">در گوگلپلی</string>
|
||||
<string name="archive">بایگانی</string>
|
||||
<string name="updateBalanceHint">مقدار را وارد کنید</string>
|
||||
<string name="currentBalanceSentence">موجودی کنونی: <xliff:g>%s</xliff:g></string>
|
||||
<string name="newBalanceSentence">موجودی تازه: <xliff:g>%s</xliff:g></string>
|
||||
<string name="validFromDate">معتبر از</string>
|
||||
<string name="anyDate">هر تاریخی</string>
|
||||
<string name="validFromSentence">درست از: <xliff:g>%s</xliff:g></string>
|
||||
<string name="switchToFrontImage">به عکس روبهرو جابهجا کنید</string>
|
||||
<string name="nextCard">پسین</string>
|
||||
<string name="failedToOpenUrl">نخست یک مرورگر وب نصب کنید</string>
|
||||
<string name="updateBalanceTitle">چقدر خرج یا دریافت کردید؟</string>
|
||||
<string name="switchToBarcode">به بارکد جابهجا کنید</string>
|
||||
<string name="openFrontImageInGalleryApp">عکس روبهرو را در برنامهی گالری باز کنید</string>
|
||||
<string name="add_a_card_in_a_different_way">یک کارت به روشی متفاوت بیافزایید</string>
|
||||
<string name="takePhoto">عکس بگیرید</string>
|
||||
<string name="settings_column_count_7">۷</string>
|
||||
<string name="manually_enter_barcode_instructions">شماره شناسایی یا متنی که روی کارت شماست را وارد کنید و بارکدی را که شبیه بارکد روی کارت شماست فشار دهید.</string>
|
||||
<string name="failedLaunchingFileManager">نتوانستم یک مدیر فایل پشتیبانیشده پیدا کنم</string>
|
||||
<string name="useFrontImage">از تصویر جلو استفاده کنید</string>
|
||||
<string name="useBackImage">از تصویر پشت استفاده کنید</string>
|
||||
<string name="pageWithNumber">صفحه <xliff:g>%d</xliff:g></string>
|
||||
<string name="multipleBarcodesFoundPleaseChooseOne">از کدام یک از بارکدهای پیدا شده میخواهید استفاده کنید؟</string>
|
||||
<string name="width">عرض</string>
|
||||
<string name="setBarcodeWidth">تنظیم عرض بارکد</string>
|
||||
<string name="unsupportedFile">این فایل پشتیبانی نمیشود</string>
|
||||
<plurals name="groupCardCountWithArchived">
|
||||
<item quantity="one"><xliff:g>%1$d</xliff:g> کارت (<xliff:g id="archivedCount">%2$d</xliff:g> بایگانی شده)</item>
|
||||
<item quantity="other"><xliff:g>%1$d</xliff:g> کارت (<xliff:g id="archivedCount">%2$d</xliff:g> بایگانی شده)</item>
|
||||
</plurals>
|
||||
<string name="spend">خرج کردن</string>
|
||||
<string name="addFromPkpass">یک فایل دفترچه حساب (.pkpass) انتخاب کنید</string>
|
||||
<string name="noCameraFoundGuideText">به نظر نمیرسد دستگاه شما دوربین داشته باشد. اگر دارد، دستگاه را مجدداً راهاندازی کنید. در غیر این صورت، از دکمه گزینههای بیشتر در زیر برای افزودن بارکد به روش دیگری استفاده کنید.</string>
|
||||
</resources>
|
||||
|
||||
@@ -80,9 +80,6 @@
|
||||
\ntekijänoikeus © 2016–2020 Branden Archer</string>
|
||||
<string name="app_copyright_fmt" tools:ignore="PluralsCandidate">Tekijänoikeus © 2019–<xliff:g>%d</xliff:g> Sylvia van Os ja avustajat</string>
|
||||
<string name="about">Tietoja</string>
|
||||
<string name="importOptionApplicationButton">Käytä toista sovellusta</string>
|
||||
<string name="importOptionApplicationExplanation">Käytä mitä tahansa sovellusta tai suosikkitiedostonhallintaasi tiedoston avaamiseen.</string>
|
||||
<string name="importOptionApplicationTitle">Käytä toista sovellusta</string>
|
||||
<string name="importOptionFilesystemButton">Tiedostojärjestelmästä</string>
|
||||
<string name="importOptionFilesystemExplanation">Valitse tietty tiedosto tiedostojärjestelmästä.</string>
|
||||
<string name="importOptionFilesystemTitle">Tuo tiedostojärjestelmästä</string>
|
||||
@@ -181,7 +178,7 @@
|
||||
<string name="sort_by_expiry">Viimeinen voimassaoloaika</string>
|
||||
<string name="reverse">...käänteisessä järjestyksessä</string>
|
||||
<string name="sort_by">Lajitteluperuste</string>
|
||||
<string name="credits">Krediitit</string>
|
||||
<string name="credits">Kiitettävää</string>
|
||||
<string name="help_translate_this_app">Auta kääntämään tämä sovellus</string>
|
||||
<string name="license">Lisenssi</string>
|
||||
<string name="source_repository">Lähdekoodivarasto</string>
|
||||
@@ -243,7 +240,7 @@
|
||||
<string name="permissionReadCardsDescription">lue korttisi ja kaikki niiden tiedot, mukaan lukien huomautukset ja kuvat</string>
|
||||
<string name="settings_allow_content_provider_read_summary">Sovellusten tulee silti pyytää lupaa saadakseen pääsyn</string>
|
||||
<string name="settings_category_title_privacy">Yksityisyys</string>
|
||||
<string name="height">Korkeus:</string>
|
||||
<string name="height">Korkeus</string>
|
||||
<string name="switchToFrontImage">Vaihda etukuvaan</string>
|
||||
<string name="switchToBarcode">Vaihda viivakoodiin</string>
|
||||
<string name="openFrontImageInGalleryApp">Avaa etukuva galleriasovelluksessa</string>
|
||||
@@ -305,4 +302,10 @@
|
||||
<string name="settings_column_count_4">4</string>
|
||||
<string name="settings_column_count_5">5</string>
|
||||
<string name="settings_column_count_7">7</string>
|
||||
</resources>
|
||||
<string name="addFromPkpass">Valitse Passbook-tiedosto (.pkpass)</string>
|
||||
<string name="unsupportedFile">Tämä tiedosto ei ole tuettu</string>
|
||||
<string name="generic_error_please_retry">Pahoittelut, jokin meni pieleen. Yritä uudelleen...</string>
|
||||
<string name="sort_by_valid_from">Voimassa alkaen</string>
|
||||
<string name="width">Leveys</string>
|
||||
<string name="setBarcodeWidth">Aseta viivakoodin leveys</string>
|
||||
</resources>
|
||||
|
||||
@@ -1,5 +1,18 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<resources>
|
||||
<resources xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
|
||||
<string name="action_search">Hanap</string>
|
||||
<string name="app_name">Catima</string>
|
||||
</resources>
|
||||
<string name="action_add">Magdagdag</string>
|
||||
<string name="noGiftCards">I-click ang + button para magdagdag ng card, o mag-import mula sa ⋮ menu.</string>
|
||||
<string name="noGiftCardsGroup">Gumawa ng ilang card, at pagkatapos ay i-assign ang mga ito sa grupo dito.</string>
|
||||
<string name="noMatchingGiftCards">Walang nahanap na resulta. Subukang baguhin ang iyong hinanap.</string>
|
||||
<string name="storeName">Pangalan</string>
|
||||
<string name="note">Tala</string>
|
||||
<string name="cardId">ID ng Card</string>
|
||||
<string name="barcodeType">Uri ng Barcode</string>
|
||||
<string name="noBarcode">Walang barcode</string>
|
||||
<plurals name="selectedCardCount">
|
||||
<item quantity="one"><xliff:g>%d</xliff:g> napili</item>
|
||||
<item quantity="other"><xliff:g>%d</xliff:g> ang napili</item>
|
||||
</plurals>
|
||||
</resources>
|
||||
|
||||
@@ -32,9 +32,6 @@
|
||||
<string name="importOptionFilesystemTitle">Importer depuis le système de fichiers</string>
|
||||
<string name="importOptionFilesystemExplanation">Choisissez le fichier à importer.</string>
|
||||
<string name="importOptionFilesystemButton">Système de fichiers</string>
|
||||
<string name="importOptionApplicationTitle">Utiliser une autre application</string>
|
||||
<string name="importOptionApplicationExplanation">Utilisez le gestionnaire de fichiers de votre choix pour importer un fichier.</string>
|
||||
<string name="importOptionApplicationButton">Utiliser une autre application</string>
|
||||
<string name="about">À propos</string>
|
||||
<string name="app_license">Logiciel libre à copyleft, sous licence GPLv3+</string>
|
||||
<string name="about_title_fmt">À propos de <xliff:g id="app_name">%s</xliff:g></string>
|
||||
@@ -243,7 +240,7 @@
|
||||
<string name="validFromSentence">Valide à partir de : <xliff:g>%s</xliff:g></string>
|
||||
<string name="anyDate">N’importe quelle date</string>
|
||||
<string name="chooseValidFromDate">Choisissez la date de début de validité</string>
|
||||
<string name="height">Hauteur :</string>
|
||||
<string name="height">Hauteur</string>
|
||||
<string name="switchToFrontImage">Passer à l\'image avant</string>
|
||||
<string name="switchToBackImage">Passer à l\'image arrière</string>
|
||||
<string name="switchToBarcode">Passer au code barre</string>
|
||||
@@ -311,4 +308,10 @@
|
||||
<string name="settings_automatic_column_count">Automatique</string>
|
||||
<string name="settings_column_count_6">6</string>
|
||||
<string name="settings_column_count_7">7</string>
|
||||
</resources>
|
||||
<string name="addFromPkpass">Sélectionner un fichier Cartes / Passbook (.pkpass)</string>
|
||||
<string name="unsupportedFile">Ce fichier n\'est pas supporté</string>
|
||||
<string name="generic_error_please_retry">Désolé, un problème est survenu, veuillez réessayer...</string>
|
||||
<string name="sort_by_valid_from">Valide à partir du</string>
|
||||
<string name="width">Largeur</string>
|
||||
<string name="setBarcodeWidth">Définir la largeur du code-barres</string>
|
||||
</resources>
|
||||
|
||||
@@ -48,8 +48,6 @@
|
||||
<string name="noCameraPermissionDirectToSystemSetting">Catima precisa acceso á cámara para escanear códigos de barras. Toca aquí para cambiar os axustes do permiso.</string>
|
||||
<string name="exportOptionExplanation">Os datos vanse escribir na localización que elixas.</string>
|
||||
<string name="importOptionFilesystemTitle">Importar desde o sistema de ficheiros</string>
|
||||
<string name="importOptionApplicationExplanation">Usa outra app ou o xestor de ficheiros favorito para abrir un ficheiro.</string>
|
||||
<string name="importOptionApplicationButton">Usar outra app</string>
|
||||
<string name="about">Sobre</string>
|
||||
<string name="app_copyright_fmt" tools:ignore="PluralsCandidate">Copyright © 2019–<xliff:g>%d</xliff:g> Sylvia van Os e colaboradoras</string>
|
||||
<string name="app_copyright_short">Copyright © Sylvia van Os e colaboradoras</string>
|
||||
@@ -207,7 +205,7 @@
|
||||
<string name="anyDate">Calquera data</string>
|
||||
<string name="chooseValidFromDate">Elixe data de inicio válida</string>
|
||||
<string name="validFromSentence">Válida desde: <xliff:g>%s</xliff:g></string>
|
||||
<string name="height">Alto:</string>
|
||||
<string name="height">Altura</string>
|
||||
<string name="switchToFrontImage">Cambiar á imaxe frontal</string>
|
||||
<string name="switchToBackImage">Cambiar á imaxe posterior</string>
|
||||
<string name="openFrontImageInGalleryApp">Abrir imaxe frontal na app de galería</string>
|
||||
@@ -266,7 +264,6 @@
|
||||
<string name="settings_light_theme">Claro</string>
|
||||
<string name="importOptionFilesystemButton">Desde sistema de ficheiros</string>
|
||||
<string name="importOptionFilesystemExplanation">Elixe un ficheiro concreto no sistema de ficheiros.</string>
|
||||
<string name="importOptionApplicationTitle">Usar outra app</string>
|
||||
<string name="thumbnailDescription">Miniatura</string>
|
||||
<string name="starImage">Estrela de favorita</string>
|
||||
<string name="settings_system_theme">Sistema</string>
|
||||
@@ -302,4 +299,7 @@
|
||||
<string name="unsupportedFile">Este ficheiro non é compatible</string>
|
||||
<string name="addFromPkpass">Selecciona un ficheiro Passbook (.pkpass)</string>
|
||||
<string name="generic_error_please_retry">Sentímolo, pero algo fallou, inténtao outra vez…</string>
|
||||
</resources>
|
||||
<string name="sort_by_valid_from">Válido desde</string>
|
||||
<string name="width">Anchura</string>
|
||||
<string name="setBarcodeWidth">Establecer anchura do código de barras</string>
|
||||
</resources>
|
||||
|
||||
@@ -15,12 +15,6 @@
|
||||
<string name="barcodeType">סוג ברקוד</string>
|
||||
<string name="noBarcode">אין ברקוד</string>
|
||||
<string name="edit">עריכה</string>
|
||||
<plurals name="selectedCardCount">
|
||||
<item quantity="one">אחד</item>
|
||||
<item quantity="two">שניים</item>
|
||||
<item quantity="many">מעט</item>
|
||||
<item quantity="other">אחר</item>
|
||||
</plurals>
|
||||
<string name="exportFailed">לא ניתן לייצא</string>
|
||||
<string name="noGiftCardsGroup">צור מספר כרטיסים, ואז שייך אותם לקבוצה פה.</string>
|
||||
<string name="failedParsingImportUriError">נתיב לא נמצא</string>
|
||||
@@ -49,18 +43,6 @@
|
||||
<string name="exportOptionExplanation">המידע יכתב למיקום שאת/ה תבחר/י.</string>
|
||||
<string name="importOptionFilesystemTitle">יבא ממערכת קבצים</string>
|
||||
<string name="importOptionFilesystemExplanation">בחר/י קובץ מסויים ממערכת הקבצים.</string>
|
||||
<plurals name="deleteCardsConfirmation">
|
||||
<item quantity="one">אחד</item>
|
||||
<item quantity="two">שניים</item>
|
||||
<item quantity="many">מעט</item>
|
||||
<item quantity="other">אחר</item>
|
||||
</plurals>
|
||||
<plurals name="deleteCardsTitle">
|
||||
<item quantity="one">אחד</item>
|
||||
<item quantity="two">שניים</item>
|
||||
<item quantity="many">מעט</item>
|
||||
<item quantity="other">אחר</item>
|
||||
</plurals>
|
||||
<string name="importCancelled">ייבוא בוטל</string>
|
||||
<string name="exportCancelled">ייצוא בוטל</string>
|
||||
<string name="addFromPdfFile">בחר קובץ PDF</string>
|
||||
@@ -69,4 +51,4 @@
|
||||
<string name="multipleBarcodesFoundPleaseChooseOne">באיזה מהברקודים שנמצאו אתה רוצה להשתמש?</string>
|
||||
<string name="useFrontImage">השתמש בתמונה קדמית</string>
|
||||
<string name="useBackImage">השתמש בתמונה אחורית</string>
|
||||
</resources>
|
||||
</resources>
|
||||
|
||||
Some files were not shown because too many files have changed in this diff Show More
Reference in New Issue
Block a user