Compare commits
907 commits
260305-fad
...
develop
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
0cecb5287f | ||
|
|
3f039866ff | ||
|
|
4946bd2050 | ||
|
|
5682b3df2e | ||
|
|
311929ab27 | ||
|
|
017e24927e | ||
|
|
b6687b6c29 | ||
|
|
79a3d36334 | ||
|
|
fb6e17ee69 | ||
|
|
98aa4d24ea | ||
|
|
c9362a6720 | ||
|
|
44e7ed3f7e | ||
|
|
1f9909d148 | ||
|
|
cff0dcf92f | ||
|
|
c7a292e5a0 | ||
|
|
12d043f809 | ||
|
|
d06ea1e19f | ||
|
|
d33d3f11ab | ||
|
|
9f6b95d049 | ||
|
|
f864348474 | ||
|
|
6b4dcb09bd | ||
|
|
0eecc6e99b | ||
|
|
6a1dc7d194 | ||
|
|
d5fb43f3d8 | ||
|
|
54e258d4eb | ||
|
|
543a7c4258 | ||
|
|
4acbfd3d1b | ||
|
|
d08d136ce8 | ||
|
|
af7e06e5d1 | ||
|
|
6dc0acac13 | ||
|
|
a22c99dd12 | ||
|
|
138075fc0a | ||
|
|
c9f21cd965 | ||
|
|
a693df1eaa | ||
|
|
7bea2dccfe | ||
|
|
d33bca4f48 | ||
|
|
b7e758c607 | ||
|
|
4b33d3bd1a | ||
|
|
25b99b3ec4 | ||
|
|
6dc3ecbf25 | ||
|
|
38b50724f5 | ||
|
|
9f3d958b02 | ||
|
|
1b572c0da7 | ||
|
|
b2116154d3 | ||
|
|
b1a7a5d147 | ||
|
|
50d4256b71 | ||
|
|
5eeb0d6291 | ||
|
|
d330f0e05c | ||
|
|
3e5ea71fb6 | ||
|
|
fd02897278 | ||
|
|
95603b8f64 | ||
|
|
35caddae32 | ||
|
|
fa4596883d | ||
|
|
75e08934b8 | ||
|
|
021bdeb428 | ||
|
|
71c14fc68b | ||
|
|
ba82cefb83 | ||
|
|
9d0aca64b8 | ||
|
|
063f3c1245 | ||
|
|
b1318d57fa | ||
|
|
f351d5a5a7 | ||
|
|
0575659c08 | ||
|
|
a2e8592dd5 | ||
|
|
0293736a08 | ||
|
|
4c86c71417 | ||
|
|
68a6ad24f4 | ||
|
|
d081997cff | ||
|
|
03c22ca66c | ||
|
|
69de3d7a05 | ||
|
|
b2b1785126 | ||
|
|
9fe532914d | ||
|
|
d13b9e50ca | ||
|
|
16eb3fb708 | ||
|
|
7654e676b7 | ||
|
|
d2a2597ab6 | ||
|
|
41fdb578b2 | ||
|
|
0182c46bbb | ||
|
|
57e4de738e | ||
|
|
80437299da | ||
|
|
9a25a19824 | ||
|
|
a88264df82 | ||
|
|
cd0deacbc1 | ||
|
|
9ff36af70c | ||
|
|
6b485b7308 | ||
|
|
6ee98a14ad | ||
|
|
05669ccdcc | ||
|
|
8a3c3fb8f1 | ||
|
|
11c074cb85 | ||
|
|
50976f427e | ||
|
|
3f096a592b | ||
|
|
e1c9eafe88 | ||
|
|
95ae2be80c | ||
|
|
c5658a053d | ||
|
|
fd8448d6de | ||
|
|
2fd9e93247 | ||
|
|
f5373ccec6 | ||
|
|
49c6535c81 | ||
|
|
a12d287c19 | ||
|
|
9ec70731e2 | ||
|
|
9ecdb0ae26 | ||
|
|
544a4cfef2 | ||
|
|
a930ae24d7 | ||
|
|
deb2a5b71d | ||
|
|
2f70683d0d | ||
|
|
bf8e559091 | ||
|
|
bc33917ac7 | ||
|
|
7a8fc6d01e | ||
|
|
0954426eb4 | ||
|
|
d3d9bbe09f | ||
|
|
4a9fc0314e | ||
|
|
4443c892ef | ||
|
|
b61345584b | ||
|
|
8b0cf318b0 | ||
|
|
83e6796e40 | ||
|
|
8fea28399b | ||
|
|
baadd6940e | ||
|
|
bc20d156aa | ||
|
|
c650f38f18 | ||
|
|
1350d9fe85 | ||
|
|
74339513f4 | ||
|
|
1854e69094 | ||
|
|
63e0f02727 | ||
|
|
acb04f2a05 | ||
|
|
790181a743 | ||
|
|
3b21cf111b | ||
|
|
d52554fc50 | ||
|
|
4ab00fa32d | ||
|
|
43506ad883 | ||
|
|
f894157191 | ||
|
|
6006e08a38 | ||
|
|
3ea547a564 | ||
|
|
bf081bd68b | ||
|
|
a2e708e7ab | ||
|
|
86efc1c982 | ||
|
|
ee0b1a616a | ||
|
|
50e1e595de | ||
|
|
bad538e51b | ||
|
|
74a95fc748 | ||
|
|
8e219a006c | ||
|
|
f1d5ae2ba2 | ||
|
|
d78966141a | ||
|
|
f31db8a03b | ||
|
|
2f94755af6 | ||
|
|
cbc548d771 | ||
|
|
bf14649ce4 | ||
|
|
fe0a59a138 | ||
|
|
85d58f7cbe | ||
|
|
75a5e1ee0b | ||
|
|
c45ee6e54f | ||
|
|
aff25636b5 | ||
|
|
997ff2e70d | ||
|
|
6addeaa7a4 | ||
|
|
a3f9df12ca | ||
|
|
2fd0ed8631 | ||
|
|
1b2ce048b2 | ||
|
|
0e79cf9eca | ||
|
|
2c278cbd96 | ||
|
|
4f341768e4 | ||
|
|
f88a870379 | ||
|
|
8422fb8ddd | ||
|
|
bc327016ad | ||
|
|
7c6546ce19 | ||
|
|
c3eda657fd | ||
|
|
41369dd5ce | ||
|
|
3a4140b686 | ||
|
|
389b361a25 | ||
|
|
541c554206 | ||
|
|
b8a2091e6c | ||
|
|
592a9958e1 | ||
|
|
9ca202b65a | ||
|
|
c7afdf09dd | ||
|
|
e88751a501 | ||
|
|
9605d87731 | ||
|
|
b24e84f5f5 | ||
|
|
9f373a909c | ||
|
|
c6cab2856d | ||
|
|
a9f5996b43 | ||
|
|
748e60c6dd | ||
|
|
0f2629a11f | ||
|
|
015c4efdb7 | ||
|
|
9d1f9017c3 | ||
|
|
6ca27c827b | ||
|
|
0b0efaeddd | ||
|
|
ae1069b0c4 | ||
|
|
38821507eb | ||
|
|
5aae042e2b | ||
|
|
e1bf7096c8 | ||
|
|
974321b8a1 | ||
|
|
e832784856 | ||
|
|
e308fd7b58 | ||
|
|
9f9fce0976 | ||
|
|
d594edd5de | ||
|
|
d091958a60 | ||
|
|
babb44115f | ||
|
|
b9e6158557 | ||
|
|
d25713867f | ||
|
|
ebf4a88183 | ||
|
|
ae9a10431a | ||
|
|
d26412bcca | ||
|
|
7486982342 | ||
|
|
3930bc7f4b | ||
|
|
7b623997ec | ||
|
|
bdd2a468bd | ||
|
|
e8a04a7d4f | ||
|
|
0f2de0fc15 | ||
|
|
487b0c0ec3 | ||
|
|
71a82a9ac9 | ||
|
|
08945d25d7 | ||
|
|
81eccd7647 | ||
|
|
b6e8ad2d60 | ||
|
|
d3a94bb8a8 | ||
|
|
5c6e30260f | ||
|
|
856600cd02 | ||
|
|
014f5752f4 | ||
|
|
e232ea7de7 | ||
|
|
88321bcda9 | ||
|
|
1ca21007b3 | ||
|
|
8b09cfe76e | ||
|
|
22c1789c14 | ||
|
|
b59ebb994b | ||
|
|
8c5e29771b | ||
|
|
4b7565b3ac | ||
|
|
0379692a46 | ||
|
|
a7ee3c2e19 | ||
|
|
785ae60a9d | ||
|
|
f29413c7eb | ||
|
|
6f5ffe7c2b | ||
|
|
37116057b7 | ||
|
|
2b94975eb5 | ||
|
|
245ecc565e | ||
|
|
a10de3b616 | ||
|
|
cf48930343 | ||
|
|
31e5d24d5a | ||
|
|
68c5d3b00e | ||
|
|
56d9ea1bab | ||
|
|
189284c61d | ||
|
|
d34284994d | ||
|
|
bf9866750f | ||
|
|
9d77c5fb36 | ||
|
|
c65be41692 | ||
|
|
a4310674cd | ||
|
|
1fad248031 | ||
|
|
3f8b38c222 | ||
|
|
f205dd63ca | ||
|
|
6cb38abb43 | ||
|
|
14edf40abd | ||
|
|
a8849d111d | ||
|
|
71aeb26137 | ||
|
|
1bbb915167 | ||
|
|
c61cc18e67 | ||
|
|
10dc504427 | ||
|
|
03a7c7c37b | ||
|
|
cb48c209b6 | ||
|
|
d0d956410c | ||
|
|
7881849b63 | ||
|
|
7232cc23a4 | ||
|
|
6d0add2e69 | ||
|
|
b88429f557 | ||
|
|
2d2dc47968 | ||
|
|
872af5d8fd | ||
|
|
0a9e40d659 | ||
|
|
aae8137168 | ||
|
|
02819e6688 | ||
|
|
680469e781 | ||
|
|
680f1fef51 | ||
|
|
8f7866617a | ||
|
|
96f84c37e2 | ||
|
|
427313c6c7 | ||
|
|
c3c75dad18 | ||
|
|
c13c26002e | ||
|
|
f3f358b766 | ||
|
|
927caa362b | ||
|
|
f07da222cf | ||
|
|
36c1bfcfb4 | ||
|
|
166b9513f1 | ||
|
|
1b5b54aaad | ||
|
|
75d4419b9b | ||
|
|
eefc11a31b | ||
|
|
3652ae7b76 | ||
|
|
8e73783ddd | ||
|
|
ce5e10fef3 | ||
|
|
3e5522aa80 | ||
|
|
cdc671677d | ||
|
|
fddab77506 | ||
|
|
366e576087 | ||
|
|
454998711e | ||
|
|
dffb81ab31 | ||
|
|
368ef7912b | ||
|
|
be82697be2 | ||
|
|
d48ef12c99 | ||
|
|
51c4eed71e | ||
|
|
6b8ae165fb | ||
|
|
c908ec5563 | ||
|
|
b213d1efdd | ||
|
|
62da6ce738 | ||
|
|
a4afba69c6 | ||
|
|
46dcda2665 | ||
|
|
dafba872a2 | ||
|
|
f0fe14a449 | ||
|
|
49acee4afe | ||
|
|
fbe8a6889b | ||
|
|
e81794a533 | ||
|
|
9c96ffecc4 | ||
|
|
717b21c5ec | ||
|
|
d33bac96cb | ||
|
|
f70d6c113b | ||
|
|
395bd76ee3 | ||
|
|
5bf4a73aba | ||
|
|
188aba723f | ||
|
|
2d3aa02dac | ||
|
|
deb3723fd6 | ||
|
|
87f3f6a64a | ||
|
|
22ac0b4153 | ||
|
|
332f3c4cd6 | ||
|
|
a7d098548e | ||
|
|
23802d4fd9 | ||
|
|
6d692cf9dc | ||
|
|
9df865989a | ||
|
|
cd44267bce | ||
|
|
7d9fee0aa4 | ||
|
|
186a11b007 | ||
|
|
128bd2d8be | ||
|
|
f1a016ebcd | ||
|
|
d6249107a0 | ||
|
|
4a99556725 | ||
|
|
25d86c9c50 | ||
|
|
d5549e792c | ||
|
|
7e46f5c7ac | ||
|
|
8bf671b0b8 | ||
|
|
41ecbf9095 | ||
|
|
3c00d6fea9 | ||
|
|
61a89f9ae0 | ||
|
|
c569c02e9e | ||
|
|
0d1b45e00a | ||
|
|
51f1fc2df9 | ||
|
|
8cd8f41861 | ||
|
|
bf12724d10 | ||
|
|
e3c1296b06 | ||
|
|
a015a0044d | ||
|
|
b7d637d5dd | ||
|
|
a57ca16bb3 | ||
|
|
c691b8cbe0 | ||
|
|
9e5b94189e | ||
|
|
803ee6ce69 | ||
|
|
a230e60d4f | ||
|
|
b223d12ff2 | ||
|
|
5242964330 | ||
|
|
c5b5362649 | ||
|
|
465d8e0245 | ||
|
|
89a0bd7399 | ||
|
|
924c80f78c | ||
|
|
0f63292ae2 | ||
|
|
e8299c83ba | ||
|
|
b04233f2f4 | ||
|
|
03129c9129 | ||
|
|
40b170ecb0 | ||
|
|
a685b3f051 | ||
|
|
e678231f34 | ||
|
|
5511814dde | ||
|
|
418a018f6e | ||
|
|
a75ce62b9d | ||
|
|
2a944d931d | ||
|
|
68716b5c2b | ||
|
|
ba616af18f | ||
|
|
5f8ea3aba0 | ||
|
|
5f9f1bc55b | ||
|
|
763757cc4b | ||
|
|
e6aa402d9c | ||
|
|
c786eb6df9 | ||
|
|
e39f9f20a6 | ||
|
|
4f5dd196de | ||
|
|
a9557b0e11 | ||
|
|
5d899fea4b | ||
|
|
36da6af565 | ||
|
|
3b38a4a2a5 | ||
|
|
741373b852 | ||
|
|
9b2313ede0 | ||
|
|
733dbf00a9 | ||
|
|
df152c4fb8 | ||
|
|
2da791be8d | ||
|
|
04f90575f8 | ||
|
|
bb5d524b7d | ||
|
|
83fbca10c2 | ||
|
|
de799b1456 | ||
|
|
551d1978d7 | ||
|
|
21f045d257 | ||
|
|
860f937abe | ||
|
|
8abdf595bf | ||
|
|
5783756179 | ||
|
|
290d1a13e0 | ||
|
|
f136ae3b21 | ||
|
|
f9a364d713 | ||
|
|
85c59b1468 | ||
|
|
80ac70cc6a | ||
|
|
d2e8c7afad | ||
|
|
cd17444807 | ||
|
|
15885d8c94 | ||
|
|
abaf8613e4 | ||
|
|
757fc49eb6 | ||
|
|
bf9bbfb5fb | ||
|
|
d755a8b9d0 | ||
|
|
696c3cd4da | ||
|
|
089eb0e22b | ||
|
|
dd2c9e3e88 | ||
|
|
1c5e933a59 | ||
|
|
fb6166b490 | ||
|
|
269ea465be | ||
|
|
e8ea0ea80c | ||
|
|
2c5bf792a3 | ||
|
|
3f7f450894 | ||
|
|
6a4463e2c3 | ||
|
|
67d5a58aa0 | ||
|
|
b0cfa26e62 | ||
|
|
fd5ef513d1 | ||
|
|
0141fb6c0e | ||
|
|
570a563748 | ||
|
|
bbdc5b749b | ||
|
|
0f01057dba | ||
|
|
e01df7a498 | ||
|
|
ef7a9db950 | ||
|
|
825c8c6a2d | ||
|
|
2f2ee81f50 | ||
|
|
d0b896564d | ||
|
|
45b44436dc | ||
|
|
b2e2da52fb | ||
|
|
000cbe2a78 | ||
|
|
111c04ee19 | ||
|
|
468526c50a | ||
|
|
32902d2c63 | ||
|
|
8a28f605df | ||
|
|
e3cd90bc43 | ||
|
|
1618d5cd98 | ||
|
|
f33cce28e4 | ||
|
|
12ab14ea9c | ||
|
|
d8a6555592 | ||
|
|
771bc3688c | ||
|
|
0544f71c12 | ||
|
|
9588d93aa4 | ||
|
|
c6428da761 | ||
|
|
deb42b0e29 | ||
|
|
7b0d64bef9 | ||
|
|
8ee2d47673 | ||
|
|
7c158901b5 | ||
|
|
10e2ae654a | ||
|
|
055c9f0a6b | ||
|
|
257c9554fb | ||
|
|
ee2cb4352f | ||
|
|
91d27f7e6e | ||
|
|
e5910c2586 | ||
|
|
dab3a762bf | ||
|
|
ceb3086be1 | ||
|
|
822cbf325a | ||
|
|
bf4a680d72 | ||
|
|
7abc5164a8 | ||
|
|
06e50f3783 | ||
|
|
fdb6cde287 | ||
|
|
0e14ef111d | ||
|
|
69e27ba461 | ||
|
|
12dbe82d36 | ||
|
|
57a56e8572 | ||
|
|
1b8ea51a2f | ||
|
|
9540931a16 | ||
|
|
c9722af97e | ||
|
|
5c993ebb6d | ||
|
|
b41bc70e39 | ||
|
|
d35a45eb4c | ||
|
|
2ed5872909 | ||
|
|
f7085cfb1d | ||
|
|
edfd01460c | ||
|
|
a20b891c58 | ||
|
|
faa90a7208 | ||
|
|
0f1b7f9bd4 | ||
|
|
f9634b308c | ||
|
|
444fe13185 | ||
|
|
5462828516 | ||
|
|
1647cbfe88 | ||
|
|
1b95b8e043 | ||
|
|
7ba4dc1bf6 | ||
|
|
f928844a40 | ||
|
|
7ed0fc44d3 | ||
|
|
74569ba846 | ||
|
|
2fc71540a9 | ||
|
|
a46e0ec1c6 | ||
|
|
671b411a42 | ||
|
|
6806d2c230 | ||
|
|
71f2c927b6 | ||
|
|
ba8a4a88c8 | ||
|
|
92947ba55f | ||
|
|
101b70f775 | ||
|
|
ddd2b19910 | ||
|
|
e5f289aaf9 | ||
|
|
b92897949c | ||
|
|
f5725a35ad | ||
|
|
50439efc77 | ||
|
|
1eb81ba432 | ||
|
|
10592bf8d7 | ||
|
|
2636fd404b | ||
|
|
47fa9dbe96 | ||
|
|
a53b54039b | ||
|
|
a0cfcb080e | ||
|
|
8fe9fda014 | ||
|
|
01e5f46276 | ||
|
|
464798234a | ||
|
|
949b97f53e | ||
|
|
a7289862e0 | ||
|
|
218600cc66 | ||
|
|
c012700f29 | ||
|
|
d46f980560 | ||
|
|
f64ec572fc | ||
|
|
73e2eb2898 | ||
|
|
079e85b0ee | ||
|
|
ebf872d5dd | ||
|
|
408c6fc6aa | ||
|
|
e2ba6eb241 | ||
|
|
18214b2494 | ||
|
|
c8390a2e8d | ||
|
|
ea05645668 | ||
|
|
85221460e9 | ||
|
|
5ada2aa40a | ||
|
|
d5649e1309 | ||
|
|
29efda150c | ||
|
|
df21d77d30 | ||
|
|
7b18d32143 | ||
|
|
de3f1d134d | ||
|
|
6ec45db03b | ||
|
|
b06475c266 | ||
|
|
6c54bbc58d | ||
|
|
735fa5b3db | ||
|
|
ee89d73ca7 | ||
|
|
b0e76449b9 | ||
|
|
ff03aaac0b | ||
|
|
01d19c24ae | ||
|
|
c20363f1e9 | ||
|
|
781c9147ba | ||
|
|
260e8b6bfb | ||
|
|
499ac5d009 | ||
|
|
04f5dd922f | ||
|
|
38e7022765 | ||
|
|
11f30f7edc | ||
|
|
39216b2bd6 | ||
|
|
e7729425fb | ||
|
|
700c308dc3 | ||
|
|
5a144af643 | ||
|
|
bdd33df25b | ||
|
|
e92c4ee80b | ||
|
|
0cfdb05a10 | ||
|
|
ce1dc46757 | ||
|
|
c79cb1f022 | ||
|
|
073261ce8d | ||
|
|
f9ae856fd7 | ||
|
|
e5620f0e76 | ||
|
|
c802b05e09 | ||
|
|
2e93a02195 | ||
|
|
918a0c2259 | ||
|
|
069b3cd87b | ||
|
|
f89a0922a3 | ||
|
|
ae2645dbc8 | ||
|
|
7616a6cdab | ||
|
|
4516ce0894 | ||
|
|
005c34dd5e | ||
|
|
a37882418f | ||
|
|
78c2bb5b30 | ||
|
|
6973feaed8 | ||
|
|
f6a5dc8412 | ||
|
|
ae4e330e2e | ||
|
|
140d241b84 | ||
|
|
f88e85e4f3 | ||
|
|
1d6698da04 | ||
|
|
7230254a5a | ||
|
|
8089214483 | ||
|
|
68c6a0a789 | ||
|
|
c1e4680861 | ||
|
|
77d3e23b52 | ||
|
|
d68676ad41 | ||
|
|
34ecdb08d6 | ||
|
|
7252c82695 | ||
|
|
231d3c6291 | ||
|
|
f741f8e103 | ||
|
|
15dabc5dcd | ||
|
|
30e41c12d5 | ||
|
|
ee775026e4 | ||
|
|
367af097f0 | ||
|
|
10f7e4493f | ||
|
|
1bff9aab90 | ||
|
|
accce40ce3 | ||
|
|
d2787fa0b7 | ||
|
|
8c18b77d02 | ||
|
|
4e2c335a65 | ||
|
|
607af6d6ed | ||
|
|
42e181aff3 | ||
|
|
02012bd694 | ||
|
|
777d20bde3 | ||
|
|
89bffa1d1a | ||
|
|
7963cf2207 | ||
|
|
1ec6a35016 | ||
|
|
771150a7c8 | ||
|
|
d1c2e883f5 | ||
|
|
aa772b62c0 | ||
|
|
385566adee | ||
|
|
be0e5f127b | ||
|
|
4f3a850108 | ||
|
|
a5c27bba76 | ||
|
|
93bb435203 | ||
|
|
3eb6a42633 | ||
|
|
566ca155fc | ||
|
|
a5e9dfeb0b | ||
|
|
05a305793e | ||
|
|
2655a53848 | ||
|
|
07560603d2 | ||
|
|
d379b1e0d9 | ||
|
|
b7006e7aa4 | ||
|
|
2d419ccaa7 | ||
|
|
ecc6a0c58a | ||
|
|
0513a9f9d0 | ||
|
|
65a982ee7c | ||
|
|
b06483c47b | ||
|
|
a81082a267 | ||
|
|
9788c2b06f | ||
|
|
a6f6cd03b4 | ||
|
|
d86583a0a2 | ||
|
|
3be40cee95 | ||
|
|
cec34a4c30 | ||
|
|
177771c5cc | ||
|
|
b8ae7979d8 | ||
|
|
35e46215c9 | ||
|
|
ad00bf3fec | ||
|
|
b2d116eb64 | ||
|
|
29a994a648 | ||
|
|
bbc5d8715b | ||
|
|
60885b567d | ||
|
|
21ffa21221 | ||
|
|
9d3d96de83 | ||
|
|
7c6731cdc8 | ||
|
|
211c3eb64d | ||
|
|
5a0a7199aa | ||
|
|
aad39291a5 | ||
|
|
0d960aa36a | ||
|
|
e61b591ccf | ||
|
|
44429bdbbb | ||
|
|
808961525a | ||
|
|
8713e6b1ff | ||
|
|
366bebddca | ||
|
|
e759b234a5 | ||
|
|
8b0f369bda | ||
|
|
1f21aea628 | ||
|
|
12a5fdd153 | ||
|
|
60f4779565 | ||
|
|
1858490de0 | ||
|
|
346d56bdb0 | ||
|
|
a719f680a9 | ||
|
|
89242a70eb | ||
|
|
178861b5ba | ||
|
|
93b0b1e3f5 | ||
|
|
e538e96ba0 | ||
|
|
bd3bec9cd1 | ||
|
|
6ca665e19e | ||
|
|
f0edfd933d | ||
|
|
b3a582a9fb | ||
|
|
cc93833e57 | ||
|
|
676b2677cf | ||
|
|
1292ae24bc | ||
|
|
7146de4cdd | ||
|
|
26e86ead3e | ||
|
|
9f34fcf09e | ||
|
|
a836a49261 | ||
|
|
10389c8b74 | ||
|
|
d9b314eafb | ||
|
|
b98a346cf9 | ||
|
|
7cc26e99bd | ||
|
|
ebea14a170 | ||
|
|
27bcb78470 | ||
|
|
4005aea4fe | ||
|
|
aa4d51bed1 | ||
|
|
511f0cf793 | ||
|
|
05cd8fab17 | ||
|
|
ccccd95f78 | ||
|
|
0192e55f32 | ||
|
|
bd7066e0c3 | ||
|
|
d90bf1f5d5 | ||
|
|
f12109f12c | ||
|
|
4cb160c07e | ||
|
|
b0d6f94416 | ||
|
|
7f1b6f80af | ||
|
|
6609b709d6 | ||
|
|
369edd3556 | ||
|
|
c03aebe5e2 | ||
|
|
70582c903b | ||
|
|
eb49c285d7 | ||
|
|
4410269cc2 | ||
|
|
8339ed1b26 | ||
|
|
3f9ac173c4 | ||
|
|
3012786d82 | ||
|
|
f95aec73a3 | ||
|
|
68f9088629 | ||
|
|
044af03a6d | ||
|
|
c3fb3d53ca | ||
|
|
a2dce2b06c | ||
|
|
624733778a | ||
|
|
4e6251b42b | ||
|
|
7f7e203ed1 | ||
|
|
1057b548dc | ||
|
|
81b763798e | ||
|
|
b78fb89869 | ||
|
|
d92d5c6739 | ||
|
|
2ad8c40023 | ||
|
|
6c5095f5dc | ||
|
|
8775d79b7c | ||
|
|
96f4d73a12 | ||
|
|
a2f8b23b19 | ||
|
|
84491de31b | ||
|
|
597cec8e75 | ||
|
|
a32b6da645 | ||
|
|
d89fcbffd8 | ||
|
|
7134c2eceb | ||
|
|
b8fb5374f0 | ||
|
|
91099333b4 | ||
|
|
976e48796b | ||
|
|
88feed0d55 | ||
|
|
38a20d2552 | ||
|
|
f22cba92d3 | ||
|
|
9bbe7e27a0 | ||
|
|
da169dc669 | ||
|
|
5c6976355b | ||
|
|
6ce0608356 | ||
|
|
ba08980b95 | ||
|
|
5a9e4b6031 | ||
|
|
083d437ec4 | ||
|
|
660bec4110 | ||
|
|
6c3ac3b108 | ||
|
|
942ecde80e | ||
|
|
9b0d19c60e | ||
|
|
a021783922 | ||
|
|
090f9242c2 | ||
|
|
7f4b9ad668 | ||
|
|
bb53e9e972 | ||
|
|
f950d8eacd | ||
|
|
551e5fa29c | ||
|
|
3f0725df2d | ||
|
|
86f84aa1ee | ||
|
|
ceb11f4cf8 | ||
|
|
35a78807eb | ||
|
|
199cf69cac | ||
|
|
1988f5ea34 | ||
|
|
d3c182b9d5 | ||
|
|
0a5e5c643d | ||
|
|
9779cd9946 | ||
|
|
1a2a32a5d6 | ||
|
|
be64e3f3f6 | ||
|
|
1b48f89d56 | ||
|
|
c04cb4f360 | ||
|
|
09ce6b12ce | ||
|
|
28c3f6d636 | ||
|
|
7f927778f7 | ||
|
|
3af38e67b9 | ||
|
|
1ca5b743b7 | ||
|
|
5ec99661d3 | ||
|
|
7a611b6d66 | ||
|
|
510a368e6e | ||
|
|
d83285361b | ||
|
|
f85150fb9f | ||
|
|
aaeb5c92b8 | ||
|
|
64f91789c9 | ||
|
|
1e9e3f2552 | ||
|
|
64838087bd | ||
|
|
036d67b58f | ||
|
|
c86c0369e9 | ||
|
|
9875a1de5a | ||
|
|
6cb5684ed2 | ||
|
|
53906f2bde | ||
|
|
c7ef450ed4 | ||
|
|
e2a200b116 | ||
|
|
297f6eda98 | ||
|
|
14b605df2f | ||
|
|
757714515e | ||
|
|
8d0eeb012f | ||
|
|
e377056b6d | ||
|
|
6a1fb99b92 | ||
|
|
c489ea5b0b | ||
|
|
79a5192cf7 | ||
|
|
c1e9d80692 | ||
|
|
452bdde31e | ||
|
|
b263651c5e | ||
|
|
5bda752118 | ||
|
|
989227097a | ||
|
|
7d39b2d9fe | ||
|
|
a61d284134 | ||
|
|
543d43ab6a | ||
|
|
c37fdf51a7 | ||
|
|
d53f8f0fd2 | ||
|
|
4599cc07ce | ||
|
|
0cf372af79 | ||
|
|
da224d309e | ||
|
|
d529f7fe4a | ||
|
|
ac9c9cf27b | ||
|
|
825b8049cf | ||
|
|
51976b7f5c | ||
|
|
15036786bc | ||
|
|
1ced5cbf1e | ||
|
|
55edaeae57 | ||
|
|
85ca9dfb19 | ||
|
|
8e5ece95a3 | ||
|
|
7e6773e94e | ||
|
|
79b3f569a8 | ||
|
|
be98c04d0d | ||
|
|
c46deb6129 | ||
|
|
edb6f2f2b1 | ||
|
|
7db82af193 | ||
|
|
fcbfbfd8be | ||
|
|
ee6ff221a0 | ||
|
|
1beb83b554 | ||
|
|
6d29459aca | ||
|
|
26a5c06762 | ||
|
|
0c226fafcf | ||
|
|
6704b217d8 | ||
|
|
fdfe46c7b3 | ||
|
|
342b03e317 | ||
|
|
4f14ed90c0 | ||
|
|
16fc758f54 | ||
|
|
df13ea9e02 | ||
|
|
e2f8474309 | ||
|
|
32f8bd9896 | ||
|
|
8640dee635 | ||
|
|
997ca175be | ||
|
|
f0f3ce400f | ||
|
|
a8ec6f9cbb | ||
|
|
0759dfc946 | ||
|
|
e0333cb43b | ||
|
|
cbcebe8de4 | ||
|
|
568432df88 | ||
|
|
812faccae6 | ||
|
|
defb003db3 | ||
|
|
e313f0e0bc | ||
|
|
4b18fe1a45 | ||
|
|
3eb2b4f76f | ||
|
|
1f1770257d | ||
|
|
5cd13fa137 | ||
|
|
ca4f063052 | ||
|
|
9a7fdc4cdc | ||
|
|
c86a461e3a | ||
|
|
898e8aa9d1 | ||
|
|
224816b531 | ||
|
|
1365169928 | ||
|
|
d32e9d754e | ||
|
|
31efae3731 | ||
|
|
24e7d6fd72 | ||
|
|
af064b2405 | ||
|
|
17653a43fa | ||
|
|
25b0d53cd5 | ||
|
|
a41ef30237 | ||
|
|
a7b72c981c | ||
|
|
08fb7d88e4 | ||
|
|
d4e143cf3f | ||
|
|
95099a5f78 | ||
|
|
01e0719c67 | ||
|
|
dad865a009 | ||
|
|
6cc0fe49c9 | ||
|
|
ce5bde84ab | ||
|
|
bcf0c0fb28 | ||
|
|
e052fd3eaf | ||
|
|
75064a1c1f | ||
|
|
c2335dc31b | ||
|
|
fb436fd8bd | ||
|
|
43fd75d969 | ||
|
|
194e4ccb26 | ||
|
|
ba95e3a728 | ||
|
|
a71718e8ba | ||
|
|
51a0a3f384 | ||
|
|
19c8afd5cb | ||
|
|
1a110df2e0 | ||
|
|
c8b4d8f4f3 | ||
|
|
b3216d3a87 | ||
|
|
e9a714098d | ||
|
|
859e5d9b4b | ||
|
|
04c57e2b96 | ||
|
|
9219d14d3f | ||
|
|
cc7064b5a9 | ||
|
|
c1ae7b46fa | ||
|
|
ceb5e232b0 | ||
|
|
c60f76d0c9 | ||
|
|
8c4f8b3f3a | ||
|
|
885c770eeb | ||
|
|
dc9c23c69d | ||
|
|
958cdb9f33 | ||
|
|
6ca0380fbe | ||
|
|
5b8868b656 | ||
|
|
e2ff8cd15d | ||
|
|
329779c774 | ||
|
|
168834a157 | ||
|
|
8ef21bc895 | ||
|
|
5c0582d85e | ||
|
|
b9f12eaf37 | ||
|
|
a237bf7932 | ||
|
|
360a25e9c4 | ||
|
|
8c01f6fab6 | ||
|
|
a6db7f9fe1 | ||
|
|
bed7ca2285 | ||
|
|
fed54e97f0 | ||
|
|
0303bc56d9 | ||
|
|
a80953e8f3 | ||
|
|
39ea7add37 | ||
|
|
f8ab3b5042 | ||
|
|
20fd49f2ac | ||
|
|
c945acf62d | ||
|
|
4291932e3a | ||
|
|
567d30cfba | ||
|
|
5c2290680d | ||
|
|
2ee4f30a53 |
2
.agents/.gitignore
vendored
Normal file
|
|
@ -0,0 +1,2 @@
|
|||
*
|
||||
!.gitignore
|
||||
8
.claude/.gitignore
vendored
Normal file
|
|
@ -0,0 +1,8 @@
|
|||
*
|
||||
!.gitignore
|
||||
!CLAUDE.md
|
||||
!rules
|
||||
!rules/*.md
|
||||
!agents
|
||||
!agents/*.md
|
||||
!settings.json
|
||||
148
.claude/CLAUDE.md
Normal file
|
|
@ -0,0 +1,148 @@
|
|||
# CLAUDE.md
|
||||
|
||||
This file provides guidance to Claude Code (claude.ai/code) when working with code in this repository. Detailed rules are in `.claude/rules/*.md` files organized by topic.
|
||||
|
||||
## Build Commands
|
||||
|
||||
Run `make help` to list all available targets. Key commands:
|
||||
|
||||
**Backend (Go):**
|
||||
- `make build-go` — build the `photoprism` binary (develop mode)
|
||||
- `make build-all` — build backend + frontend
|
||||
- `go build ./...` — compile all Go packages
|
||||
|
||||
**Frontend (Vue 3):**
|
||||
- `make build-js` — production build of the frontend
|
||||
- `make watch-js` — watch mode for frontend development (Ctrl+C to stop)
|
||||
|
||||
**Dependencies:**
|
||||
- `make dep` — install all dependencies (TensorFlow models, ONNX models, JS packages)
|
||||
- `make dep-js` — install JS dependencies only (`npm ci`). The `photoprism/develop` image and the repo `Makefile` both set `NPM_CONFIG_IGNORE_SCRIPTS=true`, so install scripts are skipped automatically; when running npm directly in an env without that default, pass `--ignore-scripts`. Rebuild native addons with `npm rebuild --ignore-scripts=false <pkg>` — a bare `npm rebuild` no-ops wherever the env default is active.
|
||||
|
||||
**Docker dev environment:**
|
||||
- `make docker-build` — build local Docker image
|
||||
- `docker compose up` — start dev environment (app at http://localhost:2342/)
|
||||
- `make terminal` — open shell in dev container
|
||||
|
||||
## Testing
|
||||
|
||||
**Run all tests:**
|
||||
- `make test` — runs both JS and Go tests
|
||||
- `make test-go` — all Go tests (slow, ~20 min)
|
||||
- `make test-js` — frontend unit tests (Vitest)
|
||||
- `make test-short` — short Go tests in parallel (~5 min)
|
||||
|
||||
**Run targeted Go tests:**
|
||||
```bash
|
||||
go test ./internal/api -run 'TestFunctionName' -count=1
|
||||
go test ./internal/photoprism -run 'TestMediaFile_' -count=1
|
||||
go test ./internal/entity/... -count=1 -tags="slow,develop"
|
||||
```
|
||||
|
||||
**Run targeted JS tests:**
|
||||
- `make vitest-watch` — Vitest in watch mode
|
||||
- `make vitest-coverage` — Vitest with coverage report
|
||||
|
||||
**Reset test databases before running Go tests:**
|
||||
- `make reset-testdb` — clears SQLite test DBs and MariaDB testdb
|
||||
|
||||
**Subset targets:** `make test-pkg`, `make test-api`, `make test-entity`, `make test-commands`, `make test-photoprism`, `make test-ai`
|
||||
|
||||
## Formatting & Linting
|
||||
|
||||
Available targets: `make fmt` (everything), `make fmt-go`, `make fmt-js`, `make fmt-swag` / `make swag` (Swagger), `make lint-go`, `make lint-js`. Detailed conventions live in `.claude/rules/go-code-style.md` and `.claude/rules/frontend-rules.md`.
|
||||
|
||||
When creating or editing shell scripts, run `shellcheck <file>` and resolve warnings. When editing Markdown files that contain tables, format them with `npx --yes markdown-table-formatter <filename>`.
|
||||
|
||||
## Schema Migrations
|
||||
|
||||
If a change touches database schema, check migrations:
|
||||
```bash
|
||||
go run cmd/photoprism/photoprism.go migrations ls
|
||||
go run cmd/photoprism/photoprism.go migrations run
|
||||
# or via Makefile:
|
||||
make migrate
|
||||
```
|
||||
|
||||
Migration files live in `internal/entity/migrate/`.
|
||||
|
||||
## Architecture Overview
|
||||
|
||||
PhotoPrism is a self-hosted photo management app. The backend is Go, the frontend is Vue 3 + Vuetify 3, and the database is MariaDB or SQLite (via GORM).
|
||||
|
||||
### Backend (`internal/`, `pkg/`, `cmd/`)
|
||||
|
||||
| Package | Purpose |
|
||||
|-------------------------|-----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------|
|
||||
| `internal/photoprism` | **Core application logic**: indexing originals, metadata extraction, thumbnail generation, import/stacking, converter orchestration (FFmpeg/ImageMagick/ExifTool). Entry point for workers and CLI. |
|
||||
| `internal/entity` | **Database models** (GORM): Photo, File, Album, Label, Face, User, Session, etc. Contains fixtures for tests and migration helpers. |
|
||||
| `internal/entity/query` | Database query helpers used by the API and core packages. |
|
||||
| `internal/api` | **REST API handlers** (Gin): thin handlers that validate input, enforce ACL/auth, delegate to services. Annotated with Swagger comments. |
|
||||
| `internal/server` | HTTP server setup, routing (Gin engine), WebDAV, static assets, middleware wiring. Routes are registered in `routes.go`. |
|
||||
| `internal/config` | Application configuration: CLI flags, env vars, client config sent to the frontend. |
|
||||
| `internal/workers` | Background workers: indexing scheduler, metadata sync, sharing, backup, vision jobs. |
|
||||
| `internal/commands` | CLI command implementations (`github.com/urfave/cli/v2`). |
|
||||
| `internal/auth` | Authentication: ACL (`auth/acl`), JWT (`auth/jwt`), OIDC (`auth/oidc`), session management. |
|
||||
| `internal/form` | Request form/binding structs for the API layer. |
|
||||
| `internal/meta` | Metadata extraction from EXIF, XMP, JSON sidecars. |
|
||||
| `internal/ffmpeg` | FFmpeg/transcoding helpers. |
|
||||
| `internal/thumb` | Thumbnail generation helpers. |
|
||||
| `internal/ai` | AI/vision model integration (TensorFlow, ONNX). |
|
||||
| `internal/service` | Services: maps geocoding, hub (membership), cluster, WebDAV client, CIDR helpers. |
|
||||
| `internal/event` | Event bus for structured logging and audit events. |
|
||||
| `pkg/` | Standalone, reusable packages: `fs`, `geo`, `media`, `txt`, `clean`, `rnd`, `i18n`, `http`, `time`, etc. No dependency on `internal/`. |
|
||||
|
||||
**Request flow:** HTTP request → Gin middleware (auth, rate limiting) → `internal/api` handler → `internal/photoprism` or `internal/entity` → response.
|
||||
|
||||
**Audit logging convention** (`event.AuditInfo/Warn/Err`): slices must follow the pattern **Who → What → Outcome**:
|
||||
- Who: `ClientIP(c)` + actor context (`"session %s"`, `"user %s"`)
|
||||
- What: resource constant + action segments
|
||||
- Outcome: single token like `status.Succeeded`, `status.Failed`, `status.Denied`, `status.Error(err)`
|
||||
|
||||
### Frontend (`frontend/`)
|
||||
|
||||
Vue 3 app using the Options API and Vuetify 3.
|
||||
|
||||
| Directory | Purpose |
|
||||
|---------------------------|-------------------------------------------------------------------------------------------------|
|
||||
| `frontend/src/model/` | Client-side models mirroring API responses (Photo, Album, File, User, etc.) |
|
||||
| `frontend/src/app/` | App bootstrap, routing (`routes.js`), and the `$session` reactive singleton |
|
||||
| `frontend/src/page/` | Page-level components |
|
||||
| `frontend/src/component/` | Reusable UI components |
|
||||
| `frontend/src/common/` | Shared utilities, the API client (`$api`), and reactive singletons (`$config`, `$view`, `$log`) |
|
||||
| `frontend/src/locales/` | i18n translation files |
|
||||
| `frontend/tests/` | Vitest unit tests + TestCafe acceptance tests |
|
||||
|
||||
State management uses reactive singleton modules in `src/common/` and `src/app/`, not Vuex or Pinia. Frontend code-style, formatting, testing, translation, and Playwright rules live in `.claude/rules/frontend-rules.md`.
|
||||
|
||||
### API Conventions
|
||||
|
||||
- REST API v1 base path: `/api/v1/` (configured via `conf.BaseUri()`)
|
||||
- Authentication: Bearer token (`Authorization` header) or `X-Auth-Token` header
|
||||
- Pagination: `count`, `offset`, `limit` parameters (default 100, max 1000)
|
||||
- After adding/changing API handlers, regenerate Swagger docs: `make fmt-go swag-fmt swag`
|
||||
- New routes must be registered in `internal/server/routes.go`
|
||||
|
||||
### Config & Flags
|
||||
|
||||
Verify config option names before using them:
|
||||
```bash
|
||||
./photoprism --help
|
||||
./photoprism show config-options
|
||||
./photoprism show config-yaml
|
||||
```
|
||||
|
||||
### Verify Before Propagating
|
||||
|
||||
Before promoting a claim from `CLAUDE.md`, `AGENTS.md`, a memory entry, or another spec into a new rule, spec, code comment, or commit message, verify it against the current code (grep imports, list directories, read the cited file). Stale documentation silently turns into stale rules and stale specs that future sessions will trust. When the claim names a package, function, file, or framework, the cost of one grep is much smaller than the cost of repeating an error across multiple files.
|
||||
|
||||
### Detailed Rules
|
||||
|
||||
Topic-specific conventions live under `.claude/rules/` and are loaded alongside this file:
|
||||
|
||||
- `code-comments.md` — shared JS/Go doc comment rules (length cap, what to omit); referenced by both style files.
|
||||
- `go-code-style.md`, `go-testing.md` — Go style, package boundaries, test patterns, fixtures.
|
||||
- `frontend-rules.md` — JS/Vue code style, formatting, dependencies, tests, Playwright, translations.
|
||||
- `commit-and-docs-style.md` — commit-message format, GitHub issue templates, spec heading style.
|
||||
- `safety-and-security.md` — Git/data safety, destructive commands, file I/O and archive-extraction policies, HTTP download helpers.
|
||||
- `api-and-config.md`, `cluster-operations.md`, `import-index-download.md`, `build-and-runtime.md`, `sources-of-truth.md` — domain-specific guidance.
|
||||
41
.claude/agents/ui-tester.md
Normal file
|
|
@ -0,0 +1,41 @@
|
|||
---
|
||||
name: ui-tester
|
||||
description: Drives the Playwright MCP browser to exercise UI flows, verify behavior in a real Chromium, and report findings concisely. Use for any task that needs to navigate pages, click through flows, fill forms, capture console errors, check network requests, or validate UI state. Returns a short verdict + evidence so the parent context isn't filled with raw snapshots and console logs.
|
||||
tools: Bash, Read, Grep, Glob, WebFetch, ToolSearch, mcp__playwright__browser_navigate, mcp__playwright__browser_navigate_back, mcp__playwright__browser_snapshot, mcp__playwright__browser_take_screenshot, mcp__playwright__browser_click, mcp__playwright__browser_hover, mcp__playwright__browser_drag, mcp__playwright__browser_drop, mcp__playwright__browser_type, mcp__playwright__browser_fill_form, mcp__playwright__browser_select_option, mcp__playwright__browser_press_key, mcp__playwright__browser_file_upload, mcp__playwright__browser_handle_dialog, mcp__playwright__browser_wait_for, mcp__playwright__browser_console_messages, mcp__playwright__browser_network_requests, mcp__playwright__browser_evaluate, mcp__playwright__browser_run_code, mcp__playwright__browser_resize, mcp__playwright__browser_tabs, mcp__playwright__browser_close
|
||||
---
|
||||
|
||||
You are a focused UI test driver. The parent agent has delegated browser-driven work to you so its context stays clean. Your output is the only thing it sees — make it short, structured, and decision-ready.
|
||||
|
||||
## Loading tool schemas
|
||||
|
||||
The Playwright MCP tools above appear in your toolset by name but their schemas are deferred. Before you can call any of them, run `ToolSearch` once with `select:<tool_names>` to load the schemas for the specific tools you need (e.g. `select:mcp__playwright__browser_navigate,mcp__playwright__browser_snapshot,mcp__playwright__browser_click`). Don't load all of them — just the handful this task actually needs.
|
||||
|
||||
## Browser environment
|
||||
|
||||
- The MCP server runs **one shared Chromium instance** with a **persistent profile**. Cookies and `localStorage` from earlier sessions persist. Assume state may already exist — log in fresh if a flow requires a known account.
|
||||
- This profile is **separate** from the user's real Chrome. You won't see their personal logins or extensions.
|
||||
- There is no parallelism — only you should be driving the browser during your run.
|
||||
|
||||
## Workflow
|
||||
|
||||
1. **Plan first.** Decide the minimum flow that proves or disproves the parent's question. Don't explore; execute.
|
||||
2. **Run.** Navigate, interact, observe. Prefer `browser_snapshot` (accessibility tree) over `browser_take_screenshot` — it's much smaller and works for assertions. Reach for screenshots only when the parent explicitly wants visual evidence.
|
||||
3. **Capture signals.** Pull `browser_console_messages` and, if relevant, `browser_network_requests` near the end of the flow — they're often the actual answer.
|
||||
4. **Clean up before returning.** Call `browser_close` so the next subagent starts with no open tabs. The persistent profile keeps cookies, but tabs/state shouldn't leak across runs.
|
||||
|
||||
## Reporting format
|
||||
|
||||
Default to **under 300 words** unless the parent asked for more. Structure:
|
||||
|
||||
- **Verdict:** one sentence — pass / fail / partial, and what was tested.
|
||||
- **Evidence:** 3–6 bullet points with the concrete observations (URLs visited, elements clicked, console errors verbatim, network failures with status codes). Quote error messages exactly; don't paraphrase.
|
||||
- **Notes (optional):** anything the parent should know that wasn't asked for but matters (e.g. "noticed an unrelated 404 on `/api/foo`").
|
||||
|
||||
Don't paste full snapshots, full console logs, or screenshot data unless the parent specifically requested them. The parent does not need to see your tool-call play-by-play — just the conclusion and the evidence supporting it.
|
||||
|
||||
## What not to do
|
||||
|
||||
- Don't open new browsers, install Playwright, or modify the MCP server config.
|
||||
- Don't edit application code unless the parent explicitly told you to. Your job is to test what's there.
|
||||
- Don't run long-form Go/JS test suites (that's `make test` territory) — you're the manual-QA-in-a-browser agent, not a CI runner.
|
||||
- Don't summarize what you just did at the end ("I navigated to X, then clicked Y, then..."). The verdict + evidence is the summary.
|
||||
42
.claude/rules/api-and-config.md
Normal file
|
|
@ -0,0 +1,42 @@
|
|||
## API & Config Changes
|
||||
|
||||
- Respect precedence: `options.yml` overrides CLI/env values, which override defaults.
|
||||
- Adding a new option: update `internal/config/options.go` (yaml/flag tags), register in `internal/config/flags.go`, expose a getter, surface it in `*config.Report()`, and write generated values back to `options.yml`. Use `CliTestContext` in `internal/config/test.go` to exercise new flags.
|
||||
- Adding a `customize.FeatureSettings` flag: a new field defaults to `true` via reflection (`features_default.go`) and is operator-disableable through `PHOTOPRISM_DISABLE_FEATURES` — no new CLI option needed. It cascades: update the full-struct literals in `internal/config/customize/{acl,scope}_test.go` and `internal/config/client_config_test.go` (the longest field name re-aligns every literal via gofmt), and `testdata/settings.yml` self-updates via `TestSettings_Save`. If the flag is only meaningful for accounts/roles, gate it per-session in `customize.Settings.ApplyACL` / `ApplyScope` (e.g. `Account`/`AppPasswords` require `ResourcePassword`/`ActionUpdate`); that shapes the Web UI client config only — enforce server-side behavior on the global flag via a `Config.DisableX()` helper.
|
||||
- Identify an app-password credential by its session, not its token: `(*entity.Session).IsApplication()` (auth provider `application`) covers every grant that mints one (`password`/`session`/`cli`). The token format and grant type vary, so don't gate on `rnd.IsAppPassword` or `GrantType`.
|
||||
- For `options.yml` writes, prefer config-owned persistence helpers: `Config.SaveOptionsPatch(...)` for generic merges, `Config.SaveClusterOptionsUpdate(...)` for cluster-managed metadata.
|
||||
- Use `pkg/fs.ConfigFilePath` for config filenames so existing `.yml` files stay valid and new installs can adopt `.yaml` transparently.
|
||||
- Use the public accessors on `*config.Config` (e.g. `JWKSUrl()`, `SetJWKSUrl()`) instead of mutating `Config.Options()` directly; reserve raw option tweaks for test fixtures.
|
||||
- New metadata sources (e.g. `SrcOllama`, `SrcOpenAI`) must be defined in both `internal/entity/src.go` and the frontend lookup tables (`frontend/src/common/util.js`).
|
||||
- Config init order: load `options.yml` (`c.initSettings()`), run `EarlyExt().InitEarly(c)`, connect/register the DB, then `Ext().Init(c)`.
|
||||
- Favor explicit CLI flags: check `c.cliCtx.IsSet("<flag>")` before overriding user-supplied values.
|
||||
- Database helpers: reuse `conf.Db()` / `conf.Database*()`, avoid GORM `WithContext`, quote MySQL identifiers, and reject unsupported drivers early.
|
||||
|
||||
## Handler Conventions
|
||||
|
||||
- Reuse limiter stacks (`limiter.Auth`, `limiter.Login`) and `limiter.AbortJSON` for 429s. Lean on `api.ClientIP`, `header.BearerToken`, and `Abort*` helpers.
|
||||
- Compare secrets with constant-time checks; set `Cache-Control: no-store` on sensitive responses.
|
||||
- Register routes in `internal/server/routes.go`. New list endpoints default `count=100` (max 1000) and `offset≥0`; document parameters explicitly.
|
||||
- Set portal mode via `PHOTOPRISM_NODE_ROLE=portal` plus `PHOTOPRISM_JOIN_TOKEN` when needed.
|
||||
|
||||
## API Shape Checklist
|
||||
|
||||
When renaming or adding fields:
|
||||
- Field casing: **TitleCase** (`UUID`, `Name`, `SiteUrl`) for fields backed by a DB entity (mirror the entity/model), **camelCase** (`storageNamespace`, `redirectUri`) for generated/artificial payloads (client config, session, action/RPC bodies). A filtered/computed entity projection stays TitleCase; an action payload stays camelCase but MAY TitleCase its single entity-identity field (e.g. `UUID`). See `specs/common/field-casing.md`.
|
||||
- Update DTOs in `internal/service/cluster/response.go` and any mappers.
|
||||
- Update handlers and regenerate Swagger: `make fmt-go swag-fmt swag`.
|
||||
- Update tests (search/replace old field names) and examples in `specs/`.
|
||||
- Quick grep: `rg -n 'oldField|newField' -S` across code, tests, and specs.
|
||||
|
||||
## Testing Helpers
|
||||
|
||||
- Isolate config paths with `t.TempDir()`; reuse `NewConfig`, `CliTestContext`, and `NewApiTest()` harnesses.
|
||||
- Authenticate via `AuthenticateAdmin`, `AuthenticateUser`, or `OAuthToken`. Toggle auth with `conf.SetAuthMode(config.AuthModePasswd)`.
|
||||
- Prefer OAuth client tokens over non-admin fixtures for negative permission checks.
|
||||
|
||||
## Roles & ACL
|
||||
|
||||
- Map roles via the shared tables: users through `acl.ParseRole(s)` / `acl.UserRoles[...]`, clients through `acl.ClientRoles[...]`.
|
||||
- Treat `RoleAliasNone` ("none") and an empty string as `RoleNone`; default unknown client roles to `RoleClient`.
|
||||
- Build CLI role help from the registered role map (never hand-maintained literals) so each edition lists exactly the roles it accepts: `commands.UserRoleUsageFor(<map>)` / `Roles.CliUsageString()`, passing CE `acl.UserRoles` or an edition's own static `auth.UserRoles` (reference the edition map directly, not the runtime-reassigned `acl.UserRoles`, to avoid the init-order trap; Portal's map includes `cluster_admin`). For federatable / cluster-instance contexts (LDAP, OIDC group→role, cluster grants) use `acl.ClusterInstanceRolesCliUsageString()` — it excludes `cluster_admin`/`visitor`. `pkg/txt.JoinOr` renders the "a, b, or c" style.
|
||||
- For JWT/client scope checks, use the shared helpers (`acl.ScopePermits` / `acl.ScopeAttrPermits`).
|
||||
46
.claude/rules/build-and-runtime.md
Normal file
|
|
@ -0,0 +1,46 @@
|
|||
## Agent Runtime (Host vs Container)
|
||||
|
||||
Agents MAY run either inside the Development Environment container (recommended) or on the host.
|
||||
|
||||
### Detecting the Environment
|
||||
|
||||
- **Inside container if** `/.dockerenv` exists (authoritative signal).
|
||||
- Path hint: when the project path is `/go/src/github.com/photoprism/photoprism` *and* `/.dockerenv` is absent, assume you are on the host with a bind mount.
|
||||
|
||||
### Host Mode
|
||||
|
||||
- Build local dev image (once): `make docker-build`
|
||||
- Start services: `docker compose up` (add `-d` for background)
|
||||
- Follow live app logs: `docker compose logs -f --tail=100 photoprism`
|
||||
- Execute a single command in the app container: `docker compose exec photoprism <command>`
|
||||
- Run as non-root to avoid root-owned files: `docker compose exec -u "$(id -u):$(id -g)" photoprism <command>`
|
||||
- Open a terminal session: `make terminal`
|
||||
- Stop everything: `docker compose --profile=all down --remove-orphans` (`make down`)
|
||||
|
||||
### Container Mode
|
||||
|
||||
- Install deps: `make dep`
|
||||
- Build frontend/backend: `make build-js` and `make build-go`
|
||||
- Watch frontend changes: `make watch-js`
|
||||
- Start PhotoPrism server: `./photoprism start`
|
||||
- HTTP: http://localhost:2342/
|
||||
- HTTPS: https://app.localssl.dev/ (via Traefik, if running)
|
||||
- Admin Login: Default credentials are `admin` / `photoprism`; check `compose.yaml` for `PHOTOPRISM_ADMIN_USER` and `PHOTOPRISM_ADMIN_PASSWORD` if they differ.
|
||||
- Do not use the Docker CLI inside the container; starting/stopping services requires host Docker access.
|
||||
|
||||
### Operating Systems & Architectures
|
||||
|
||||
- Guides and command examples assume Linux/Unix shell on 64-bit AMD64 or ARM64.
|
||||
- For Windows-specifics, see the Developer Guide FAQ: https://docs.photoprism.app/developer-guide/faq/#can-your-development-environment-be-used-under-windows
|
||||
|
||||
### CLI Binary Names
|
||||
|
||||
The CLI name is `photoprism` in production and public docs. Other binary names (`photoprism-plus`, `photoprism-pro`, `photoprism-portal`) are only used in development builds for side-by-side comparisons.
|
||||
|
||||
## Container Image Builds
|
||||
|
||||
- **Pin the dev `Dockerfile` `FROM` to a dated `photoprism/develop` tag, never the floating codename.** Use `photoprism/develop:<YYMMDD>-<codename>` (e.g. `photoprism/develop:260520-resolute`), not `photoprism/develop:resolute` / `:latest` / `:ubuntu`. The dated tag pins to a known-good build so a drive-by `docker pull` doesn't silently swap in a fresh base mid-session, and bumping the date in a commit gives developers + reviewers a visible signal that a new base image is available. The `buildx-multi.sh` script publishes both `:<codename>` and `:<YYMMDD>-<codename>` on every build — the dated one is the durable pointer. When you bump the base image, also update `Dockerfile`, the host `compose.yaml` (if it references the tag explicitly), and any docs that quote the current dev image.
|
||||
- **Never mix Debian and Ubuntu `apt` repositories in the same image:**
|
||||
- Don't add a Debian source to an Ubuntu base (or vice versa) to install a single missing package — the transitive deps drift, apt's solver pulls newer libraries from the foreign distro, and other build steps in the same `RUN` (e.g. `install-libheif.sh` running `apt-get install libavcodec-dev`) silently link against the wrong soname.
|
||||
- Symptoms surface much later as `dlopen: libfoo.so.N: cannot open shared object file` at image runtime, with the binary referencing a soname that exists only in the foreign distro.
|
||||
- If a package isn't available in the host distro's repos, prefer (a) a same-distro PPA / backports source, (b) a vendor-supplied .deb (e.g. Google Chrome from `dl.google.com`), or (c) a from-source build pinned to a known version.
|
||||
41
.claude/rules/cluster-operations.md
Normal file
|
|
@ -0,0 +1,41 @@
|
|||
## Cluster Operations
|
||||
|
||||
- Keep bootstrap decoupled: avoid importing `internal/service/cluster/node/*` from `internal/config` or the cluster root; nodes talk to the Portal over HTTP(S) using constants from `internal/service/cluster/const.go`.
|
||||
- Bootstrap refreshes node OAuth credentials on 401/403 (rotate secret + retry, info-level log). If the secret file can't be written, the rotated value stays cached in memory so the current process continues.
|
||||
- Portal validation accepts HTTP advertise URLs only for loopback or cluster-internal domains (`*.svc`, `*.cluster.local`, `*.internal`); everything else must use HTTPS.
|
||||
- Theme endpoint: `GET /api/v1/cluster/theme` streams a zip from `conf.ThemePath()`; reinstall only when `app.js` is missing and always use the header helpers in `pkg/http/header`.
|
||||
- Registration flow: send `rotate=true` only for MySQL/MariaDB nodes without credentials; treat 401/403/404 as terminal; include `ClientID` + `ClientSecret` when renaming an existing node; persist only newly generated secrets or DB settings.
|
||||
|
||||
### Registry & DTOs
|
||||
|
||||
- Use the client-backed registry (`NewClientRegistryWithConfig`) — the file-backed version is legacy.
|
||||
- Nodes are keyed by UUID v7 (`/api/v1/cluster/nodes/{uuid}`); registry interface is UUID-first (`Get`, `FindByNodeUUID`, `FindByClientID`, `RotateSecret`, `DeleteAllByUUID`). CLI lookups resolve `uuid → ClientID → name`.
|
||||
- DTOs normalize `Database.{Name,User,Driver,RotatedAt}`; `ClientSecret` is exposed only during creation/rotation. `nodes rm --all-ids` cleans duplicate client rows. `ClientData` no longer stores `NodeUUID`.
|
||||
- Admin responses may include `AdvertiseUrl`/`Database`; client/user sessions stay redacted.
|
||||
- Registry files live under `conf.PortalConfigPath()/nodes/` (mode 0600).
|
||||
|
||||
### Provisioner & DSN
|
||||
|
||||
- Database/user names use UUID-based HMACs (`<prefix>d<hmac11>`, `<prefix>u<hmac11>`; prefix defaults to `cluster_`).
|
||||
- `BuildDSN` accepts a `driver` but falls back to MySQL format with a warning when unsupported. For Postgres, extend `BuildDSN` and `provisioner.DatabaseDriver` handling, add validations, and return `driver=postgres` consistently in API and CLI output.
|
||||
|
||||
### Sessions & Redaction
|
||||
|
||||
- Admin session (full view): `AuthenticateAdmin(app, router)`.
|
||||
- User session: create a non-admin test user (role=guest), set a password, then `AuthenticateUser`.
|
||||
- Client session (redacted internal fields; `SiteUrl` visible):
|
||||
```go
|
||||
s, _ := entity.AddClientSession("test-client", conf.SessionMaxAge(), "cluster", authn.GrantClientCredentials, nil)
|
||||
token := s.AuthToken()
|
||||
r := AuthenticatedRequest(app, http.MethodGet, "/api/v1/cluster/nodes", token)
|
||||
```
|
||||
- Admins see `AdvertiseUrl` and `Database`; client/user sessions don't. `SiteUrl` is safe for all roles. Client config includes `storageNamespace` (SHA-256 of `SiteUrl`) for browser storage scoping.
|
||||
|
||||
### Preflight Checklist
|
||||
|
||||
- `go build ./...`
|
||||
- `make fmt-go swag-fmt swag`
|
||||
- `go test ./internal/service/cluster/registry -count=1`
|
||||
- `go test ./internal/api -run 'Cluster' -count=1`
|
||||
- `go test ./internal/commands -run 'ClusterRegister|ClusterNodesRotate' -count=1`
|
||||
- Tooling: `make swag` may fetch modules — confirm network access before running.
|
||||
12
.claude/rules/code-comments.md
Normal file
|
|
@ -0,0 +1,12 @@
|
|||
## JS/Go Code Comment Rules
|
||||
|
||||
A doc comment is **required** for every function (including unexported helpers), as well as for every non-trivial Vue `methods:` / `computed:` / watcher:
|
||||
- Keep comments **compact** and default to one line for "what" in the format `// Name does X.`. Skip trivial getters (`isOpen: () => this.open`).
|
||||
- Add 1-2 follow-up lines (`// …`) **only** if the "why" is non-obvious: a hidden invariant, a workaround that would otherwise be undone by a future cleanup, a contract a reader can't infer from the code. If readers can infer the "why" from the function body or a nearby line, then omit it.
|
||||
- Multi-paragraph explanations belong in `specs/`, package `README.md` files, or GitHub issues — never in the source itself.
|
||||
|
||||
Doc comments for packages and exported identifiers must be complete sentences that begin with the name of the thing being described and end with a period. For short examples in comments, indent code instead of using backticks.
|
||||
|
||||
Use US English spelling in all code comments (`parameterized`, `behavior`, `color`, `serialize`, `normalize`, `optimize`, …) — not the British `-ised`/`-our`/`-re` variants.
|
||||
|
||||
> **Don't include in code comments:** Issue / PR numbers, "previously…" history, alternatives considered, what the function used to do, references to old commits, names of subsequent reviewers, or any narrative that names the change rather than the steady-state behavior. That context belongs in commit messages, specs, or handover notes.
|
||||
57
.claude/rules/commit-and-docs-style.md
Normal file
|
|
@ -0,0 +1,57 @@
|
|||
## Commit Messages
|
||||
|
||||
Use concise, imperative subjects with a one-word prefix indicating the scope or topic:
|
||||
|
||||
- `Config: Add tests for "darktable-cli" path detection`
|
||||
|
||||
If the commit relates to specific issues or pull requests, reference their IDs in the message:
|
||||
|
||||
- `Docker: Use two stage build to reduce image size #123 #5632`
|
||||
|
||||
Commit messages must not exceed 80 characters in length.
|
||||
|
||||
Do not add `Co-Authored-By: Claude …` trailers (or any other AI-authorship trailer) to commit messages.
|
||||
|
||||
## GitHub Issues
|
||||
|
||||
Issue titles MUST be concise, use the imperative mood, and start with a single capitalized prefix followed by a colon and a space, e.g. `Search: Add filter for RAW image formats`.
|
||||
|
||||
Issue descriptions MUST begin with a one-sentence **User Story** in the format: `**As a <role>, I want <goal>, so that <outcome>.**`
|
||||
Use level-3 Markdown headings for sections within issue descriptions, for example `### Acceptance Criteria`.
|
||||
Follow the User Story with a clear summary of the expected behavior, rationale, technical considerations, and constraints.
|
||||
|
||||
Descriptions MUST conclude with a checklist of **Acceptance Criteria**:
|
||||
- Use GitHub checklist formatting: `- [ ]`
|
||||
- Criteria MUST be clear, testable, and unambiguous.
|
||||
- Each item MUST use one of the following requirement-level keywords:
|
||||
- `MUST` — required for the issue to be considered complete
|
||||
- `SHOULD` — strongly recommended but not strictly required
|
||||
- `MAY` — optional enhancement
|
||||
- Keep the checklist current: once the work for a criterion is implemented **and verified**, mark it done (`- [x]`).
|
||||
- Leave items that are unverified, not yet implemented, or skipped optional (`MAY`) enhancements unchecked.
|
||||
- An issue is complete only when every `MUST` is checked; never tick a box on the strength of a plan alone or an unrun test.
|
||||
- When referencing an issue from a commit that fulfills some of its criteria, update the matching boxes first.
|
||||
|
||||
> Agents MUST create, edit, close, reopen, relabel, or otherwise modify GitHub issues only when explicitly requested by the user.
|
||||
|
||||
The repo's issue templates use the new GitHub `type:` property (`Bug`, `Feature`) instead of `bug`/`idea` labels. `gh issue create` does not yet accept a `--type` flag, so when filing issues programmatically use `--label` only and tell the user to set the issue type via the web UI.
|
||||
|
||||
## Specifications & Documentation
|
||||
|
||||
- Document headings use a **Chicago-style title case**, with additional code- and path-aware normalization rules (see below). Always spell the product name as `PhotoPrism`.
|
||||
- When writing CLI examples or scripts, place option flags before positional arguments unless the command requires a different order.
|
||||
- Use RFC 3339 UTC timestamps in request and response examples, and valid ID, UID and UUID examples in docs and tests.
|
||||
- Technical specifications in the nested `specs/` subrepository may not be present in every clone or environment. Do not add `Makefile` targets in the main project that depend on `specs/` paths.
|
||||
- Auto-generated configuration and command references live under `specs/generated/`. Agents MUST NOT read, analyze, or modify anything in this directory.
|
||||
- Nested Git repositories may appear to be ignored; if so, change directories before staging or committing updates.
|
||||
- **Never reference `specs/` paths from public artifacts** — issue bodies, PR descriptions, package READMEs (`frontend/README.md`, `internal/*/README.md`, etc.), top-level `CODEMAP.md`/`GLOSSARY.md`, code comments outside `specs/`. External readers see a 404 and the private subrepo's existence is leaked. Hints in `AGENTS.md` and `CLAUDE.md` files are the documented exception. Quick check: `grep -n "specs/" <file>` should return no matches before saving any public-facing file.
|
||||
|
||||
> **Title Case** rules (Chicago-style headline capitalization, with code- and path-aware normalization):
|
||||
> - Capitalize the first word, the first word after a colon, dash, or end punctuation, and all major words, including the second part of a hyphenated major word.
|
||||
> - Lowercase only articles, short conjunctions, and short prepositions of three letters or fewer when they are not in one of those positions.
|
||||
> - Preserve known acronyms (for example, API, CLI, HTTP, JSON) and slash-separated acronym groups (for example, CSV/TSV) as uppercase.
|
||||
> - Preserve RFC 2119 / RFC 8174 normative keywords (MUST, SHOULD, MAY, SHALL, REQUIRED, RECOMMENDED, OPTIONAL) as uppercase when used in their normative sense.
|
||||
> - Preserve inline code spans (`` `foo` ``), file paths (e.g. `docs/foo-bar.md`), and slash commands (e.g. `/grill-me`) verbatim; do not recase their contents.
|
||||
> - Use `&` instead of `And`/`Or` in headings.
|
||||
|
||||
> Refresh the `**Last Updated:**` date at the top of documents whenever you make changes to their contents, using the format `January 20, 2026` (without time); leave it as-is for simple formatting or whitespace-only edits.
|
||||
77
.claude/rules/frontend-rules.md
Normal file
|
|
@ -0,0 +1,77 @@
|
|||
## Frontend Code Style & Test Coverage
|
||||
|
||||
- **Comments:** Follow the code comment rules in `code-comments.md`.
|
||||
- **Tests:** Test new JS functions (including helpers) and new Vue components whenever practical; update existing tests when behavior changes. When a unit test is impractical (DOM-heavy flows, third-party widget integration), the doc comment is still mandatory — it's the minimum bar.
|
||||
- **State:** Shared state lives in reactive singleton modules under `src/common/` and `src/app/` (e.g., `app/session.js`, `common/config.js`, `common/clipboard.js`, `common/log.js`) that export a `reactive()` / `ref()` object directly; components access them via `import` or via the globally-installed `$config` / `$session` plugins. Do not introduce Vuex, Pinia, or new ad-hoc stores — extend an existing singleton or add a new one alongside its peers in `common/` or `app/`.
|
||||
- **Vue/Vuetify:** Use the Options API in Vue components (consistent with the rest of the codebase); do not introduce Composition API or `<script setup>`.
|
||||
- **TypeScript:** Do not introduce TypeScript. The frontend is a pure JS + Vue SFC codebase: no `.ts` files, no `tsconfig.json`, no `<script lang="ts">` blocks. JSDoc type annotations in comments are fine; full TS migrations are out of scope.
|
||||
|
||||
## Frontend Formatting
|
||||
|
||||
- ESLint + Prettier own formatting. After edits run `make fmt-js` (or `npm run fmt` inside `frontend/`) and `make lint-js` to verify; `frontend/eslint.config.mjs` is the flat-config source of truth.
|
||||
- The dev container preinstalls `eslint` and `prettier` on the global `PATH` at the same version `frontend/package.json` pins (`eslint --version` should match the `eslint` entry in `frontend/package.json`). Invoke them directly (e.g. `eslint --fix tests/`) from `frontend/` — no need for `npx`, which adds a spawn step and an extra resolution layer.
|
||||
- Prettier reflow is **not** part of `make fmt-js` / `eslint --fix` — the `prettier/prettier` rule is set to `"off"` so intentional newlines (multi-line method chains, vertical predicate lists) are preserved. Run `prettier --write <file>` explicitly when a full reflow is wanted; do not run it blanket across `src/` or `tests/`.
|
||||
- Prettier uses `printWidth: 160`, double quotes, semicolons, `trailingComma: "es5"`, and `proseWrap: "never"` (see `frontend/.prettierrc.json`). Do not hand-wrap long lines — let Prettier decide. CSS/SCSS use `tabWidth: 4`.
|
||||
- The repo-root `.editorconfig` covers indentation and newline style; don't override it locally.
|
||||
- Vue SFC block order is `<template>` → `<script>` → `<style>`; keep it consistent with existing components.
|
||||
|
||||
## Frontend Dependencies & Pins
|
||||
|
||||
- `frontend/README.md` is the canonical doc for pin rationale, the `overrides` layer, ESM-only upgrade blockers, and the orphan-audit pattern — read it before bumping any non-caret pin or adding/removing a top-level dep.
|
||||
- **Pins are intentional.** When a version has no caret (e.g., `"axios": "1.16.1"`, `"vuetify": "3.12.2"`), check `frontend/README.md` and `git log -p -S "<pkg>" -- frontend/package.json` for the reason before changing it.
|
||||
- npm is a workspace; run `npm install --ignore-scripts --no-audit --no-fund --no-update-notifier` from the **repo root** (not `frontend/`) so the root `package-lock.json` updates. After dep changes also run `make audit`, `make build-js`, `make test-js`, and `make notice`.
|
||||
- Before adding a new dep or removing one as "unused", run `rg -nF "<pkg>" frontend ...` plus `npm ls <pkg> --all` to confirm there's no transitive consumer or peer-dep. Recent precedents: `postcss-url`, `@vitejs/plugin-react`, `cheerio`, `@testing-library/react`, `vite-tsconfig-paths` (all true orphans removed once consumer left).
|
||||
|
||||
## Frontend Linting & Test Entry Points
|
||||
|
||||
- Follow the lint/format scripts in `frontend/package.json`; all added JS, Vue, and tests must conform.
|
||||
- Unit tests (Vitest): `make test-js`, `make vitest-watch`, `make vitest-coverage`. Acceptance: `acceptance-*` targets in the root `Makefile`.
|
||||
- **Always invoke Vitest through the npm/make wrapper, never bare `npx vitest run`.** `frontend/package.json`'s `test` script wraps the call in `cross-env TZ=UTC BUILD_ENV=development NODE_ENV=development BABEL_ENV=test`. Without those env vars ~50 component tests (Vuetify renders, chip-selector, login, location-input, batch-edit, people-tab, lightbox `toggleSidebar`, etc.) and TZ-sensitive date tests fail spuriously — the failures look real but only reproduce in the unwrapped invocation. Do not compare a "failed N, passed M" report from bare `npx vitest run` against a `make test-js` baseline. For ad-hoc filtering on a single file, mirror the env explicitly: `(cd frontend && TZ=UTC BUILD_ENV=development NODE_ENV=development BABEL_ENV=test npx vitest run <path>)`.
|
||||
- One-off TestCafe (single case by `testID`):
|
||||
```bash
|
||||
make storage/acceptance
|
||||
make acceptance-sqlite-restart
|
||||
make wait-2
|
||||
(cd frontend && npm run testcafe -- "chrome --headless=new --use-gl=angle --use-angle=swiftshader --disable-features=LocalNetworkAccessChecks" --config-file ./testcaferc.json --test-meta mode=public,type=short,testID=components-001 "tests/acceptance")
|
||||
make acceptance-sqlite-stop
|
||||
```
|
||||
Always return to repo root before `make acceptance-sqlite-stop`.
|
||||
|
||||
## Frontend Test Gotchas
|
||||
|
||||
- Hidden-route UI checks under `/library/hidden` or `/portal/hidden` require both `files.file_error` and `photos.photo_quality = -1`; `file_error` alone will not surface the row.
|
||||
|
||||
## Playwright MCP Usage
|
||||
|
||||
- Endpoint `http://localhost:2342/`; logins at `/library/login` (CE/Plus/Pro) and `/portal/login` (Portal). Use local compose admin credentials; if login fails, inspect the active compose env.
|
||||
- Viewports: desktop `1280x900`; mobile uses the mobile Playwright server at `375x667`. Close the browser tab after scripted interactions.
|
||||
- Prefer waits over sleeps; click only visible/enabled elements; use role/label/text selectors (not XPath).
|
||||
- Screenshots: small and reproducible — JPEG, visible viewport, deterministic `.local/screenshots/<case>/<step>__<viewport>.jpg` names, no large inline screenshots.
|
||||
- If `npx` fetches an MCP server at runtime, add `--yes` or preinstall to avoid prompts.
|
||||
- Delegate to the `ui-tester` subagent for any flow with more than ~2 browser steps (login + navigate + assert, multi-step forms, regression sweeps). Brief it with the URL, credentials, exact steps, and the verdict format you want back; ask for a short report so raw snapshots and console dumps stay out of the parent context. Drive Playwright MCP inline only for one-shot checks (single navigate, single screenshot).
|
||||
|
||||
## Frontend Focus Management
|
||||
|
||||
- Dialogs must follow the shared pattern in `frontend/src/common/README.md`: expose `ref="dialog"` on `<v-dialog>`, call `$view.enter/leave` in `@after-enter` / `@after-leave`, and avoid positive `tabindex`.
|
||||
- Persistent dialogs (`persistent` prop) must handle Escape via `@keydown.esc.exact` to suppress Vuetify's rejection animation; keep other shortcuts on `@keyup` so inner inputs can cancel first.
|
||||
- Global shortcuts go through `onShortCut(ev)` in `common/view.js`, which only forwards Escape and `ctrl`/`meta` combos — don't rely on it for arbitrary keys.
|
||||
- When a dialog opens nested menus (e.g., combobox suggestions), confirm they work with the global trap; see the README for troubleshooting.
|
||||
|
||||
## Frontend Translations
|
||||
|
||||
- Never hardcode locale strings in templates or scripts — every user-visible string MUST go through `$gettext` / `T` so it appears in `frontend/src/locales/translations.pot`.
|
||||
- **Exception — standardized technical identifiers stay untranslated.** Render protocol/acronym/identifier field labels and option values as literal strings, not via `$gettext`: e.g. `Client ID`, `Client Credentials`, `OIDC`, `UUID`, `Node UUID`. Translating them adds catalog noise and risks ambiguous renderings (e.g. "Client" → German "Kunde"). Common English field names like `Site URL` or `Advertise URL` stay translated.
|
||||
- **Share role/provider labels, not the selectable lists.** Display names live once in `frontend/src/options/auth.js` (`Roles()` / `Providers()` maps, with `RoleOptions(keys, labelKey)` / `ProviderOptions(keys, labelKey)` builders). Private editions (`plus`/`pro`/`portal`) import these and pass their own key list — the selectable sets legitimately differ per edition (cluster_admin, LDAP/AD, reduced Plus set) but the labels must not be re-listed.
|
||||
- Extraction source of truth: root `make gettext-extract` (via `scripts/gettext-extract.sh`), which scans `frontend/src` plus available overlays in `plus/frontend`, `pro/frontend`, `portal/frontend`. Feature PRs do **not** commit the resulting `.pot`/`.po` churn — Weblate re-extracts on its refresh cycle (see `specs/frontend/translations.md`); a dedicated "Regenerate translation catalogs" commit is the exception.
|
||||
- Avoid punctuation-only gettext keys (e.g. `$gettext("—")`) — they clutter `frontend/src/locales/translations.pot`.
|
||||
- Catalog integrity gate: run `make gettext-lint` (`scripts/gettext-lint.mjs`) after any `.po`/`.pot` edit. It flags placeholder-set mismatches between `msgid` and `msgstr` (frontend `%{name}`, backend printf verbs), edge-whitespace drift, and `msgfmt -c` c-format fatals — defects that silently break variable substitution at runtime. Leading/trailing/internal whitespace inside a `msgid` is itself runtime-inert (`vue3-gettext` trims + collapses keys on load and lookup), so trailing-space findings are cleanliness, not correctness.
|
||||
- Trimming a source string's trailing space must stay consistent across template + `.po` + `.pot`: trim the literal, then `make gettext-extract`. Caveat: `msgmerge --no-fuzzy-matching` treats the trimmed `msgid` as new, blanks its `msgstr`, and moves the old translation to an obsolete `#~` block — so carry that translation onto the active trimmed entry (collapse any folded multi-line `#~ msgstr`) before `make gettext-compile`, or every locale renders untranslated. This only fills `msgstr`, so Weblate merges it cleanly.
|
||||
|
||||
## Web Templates & Shared Assets
|
||||
|
||||
- HTML entrypoints live in `assets/templates/`: `index.gohtml`, `app.gohtml`, `app.js.gohtml`, `splash.gohtml`. `assets/static/js/browser-check.js` runs capability checks before the main bundle; keep it loaded before the bundle script in `app.js.gohtml` and don't add `defer`/`async` to the bundle tag unless you reintroduce a guarded loader.
|
||||
- OIDC login completion bridges through `assets/templates/auth.gohtml`, writing the session into namespaced browser storage — must stay aligned with `frontend/src/common/session.js`, `frontend/src/common/storage.js`, and the login-form toggle in `frontend/src/page/auth/login.vue`.
|
||||
- When touching session bootstrap, verify `session.js` resolves `storageNamespace` from the real client-config shape (`window.__CONFIG__` / `config.values`), not just mocks. Add a focused test that would fail if restore fell back to `pp:root:`.
|
||||
- The loader partial is reused in `pro/`, `plus/`, and `portal/assets/templates/index.gohtml`; verify they still include it whenever `app.js.gohtml` or bundle loading changes.
|
||||
- Splash styles: `frontend/src/css/splash.css` — add new splash elements there for cross-edition consistency.
|
||||
- Browser baseline: Safari 13 / iOS 13 or current Chrome, Edge, Firefox.
|
||||
31
.claude/rules/go-code-style.md
Normal file
|
|
@ -0,0 +1,31 @@
|
|||
## Go Code Style
|
||||
|
||||
- **Comments:** Follow the code comment rules in `code-comments.md`.
|
||||
- **Packages:** Every Go package must contain a `<package>.go` file in its root (e.g. `internal/auth/jwt/jwt.go`) with the standard license header and a short package description comment.
|
||||
- **Format:** Go is formatted by `gofmt` with tabs. Do not hand-format indentation. After edits run `make fmt-go` (gofmt + goimports).
|
||||
- **Linting:** Run `make lint-go` (`golangci-lint`) after Go changes; prefer `golangci-lint run ./internal/<pkg>/...` for focused edits.
|
||||
|
||||
## Package Boundaries
|
||||
|
||||
- Code in `pkg/*` MUST NOT import from `internal/*`. If you need config/entity/DB access, put new code under `internal/` instead.
|
||||
|
||||
## GORM Field Naming
|
||||
|
||||
When adding struct fields with uppercase abbreviations (e.g. `LabelNSFW`, `UserID`, `URLHash`), set an explicit `gorm:"column:<name>"` tag so column names stay consistent (`label_nsfw`, `user_id`, `url_hash` instead of split-letter variants).
|
||||
|
||||
## Filesystem Permissions & io/fs Aliasing
|
||||
|
||||
- Always use shared permission variables from `pkg/fs` when creating files/directories:
|
||||
- Directories: `fs.ModeDir` (0o755 with umask)
|
||||
- Regular files: `fs.ModeFile` (0o644 with umask)
|
||||
- Config files: `fs.ModeConfigFile` (default 0o664)
|
||||
- Secrets/tokens: `fs.ModeSecretFile` (default 0o600)
|
||||
- Backups: `fs.ModeBackupFile` (default 0o600)
|
||||
- Do not pass stdlib `io/fs` flags to functions expecting permission bits. When importing the stdlib package, alias it to avoid collisions: `iofs "io/fs"` or `gofs "io/fs"`.
|
||||
- Prefer `filepath.Join` for filesystem paths; reserve `path.Join` for URL paths. For slash-based logical paths stored in DB/config/API payloads (e.g. folder album paths), normalize with `clean.SlashPath(...)` instead of ad-hoc `strings.ReplaceAll(..., "\\", "/")` + trim logic.
|
||||
|
||||
## Logging
|
||||
|
||||
- Use the shared logger (`event.Log`) via the package-level `log` variable (see `internal/auth/jwt/logger.go`) instead of direct `fmt.Print*` or ad-hoc loggers.
|
||||
- Terminology: in human-readable log text, prefer canonical runtime terms (`instance`, `service`) and reserve `node` for contract-bound names (`/cluster/nodes`, `Node*`, `PHOTOPRISM_NODE_*`).
|
||||
- Audit outcomes: import `github.com/photoprism/photoprism/pkg/log/status` and end every `event.Audit*` slice with a single outcome token such as `status.Succeeded`, `status.Failed`, `status.Denied`. When a sanitized error string should be the outcome, call `status.Error(err)` instead of manually passing `clean.Error(err)`.
|
||||
49
.claude/rules/go-testing.md
Normal file
|
|
@ -0,0 +1,49 @@
|
|||
## Go Test Coverage
|
||||
|
||||
- Every new Go function (including unexported helpers) must have focused coverage in a sibling `*_test.go`. Refactors count: each new helper needs its own `Test<Name>` with at least a Success and an error/InvalidRequest case — don't rely on the old test covering the new path.
|
||||
- Before reporting a change done, grep your diff for `^func ` additions and confirm each has a matching `Test*`. Swagger or route regeneration is not a substitute — Swagger documents shape, tests prove behavior.
|
||||
|
||||
## Go Testing Patterns
|
||||
|
||||
- Tests live next to sources (`<file>_test.go`); group cases with `t.Run(...)` using **PascalCase** names (`Success`, `InvalidRequest`). Consecutive subtests inside the same `Test*` function are written without blank lines between them so the cases read as a compact table; reserve blank lines for separating distinct setup blocks.
|
||||
- Do not run multiple test commands in parallel — suites share fixtures, temp assets, and DB state.
|
||||
- Keep Go scratch work inside `internal/...` (Go refuses `internal/` imports from `/tmp`).
|
||||
- Prefer focused runs: `go test ./internal/<pkg> -run <Name> -count=1`. Avoid `./...` unless needed; heavy packages (`internal/entity`, `internal/photoprism`) take 30–120s on first run.
|
||||
|
||||
### Fast, Focused Test Recipes
|
||||
|
||||
- FS + archives (fast): `go test ./pkg/fs -run 'Copy|Move|Unzip' -count=1`
|
||||
- Media helpers (fast): `go test ./pkg/media/... -count=1`
|
||||
- Thumbnails (libvips, moderate): `go test ./internal/thumb/... -count=1`
|
||||
- FFmpeg builders (moderate): `go test ./internal/ffmpeg -run 'Remux|Transcode|Extract' -count=1`
|
||||
|
||||
### Test Config Helpers
|
||||
|
||||
- Default to `config.NewMinimalTestConfig(t.TempDir())` for FS/config scaffolding, or `config.NewMinimalTestConfigWithDb("<name>", t.TempDir())` for a fresh SQLite schema.
|
||||
- Reserve `config.TestConfig()` for tests that truly need the fully seeded fixture snapshot (runs `InitializeTestData()`, wipes `storage/testdata`).
|
||||
- Config helpers auto-discover `assets/`; don't set `PHOTOPRISM_ASSETS_PATH` in `init()`. Hub traffic is disabled by default; re-enable with `PHOTOPRISM_TEST_HUB=test`.
|
||||
|
||||
### Fixtures
|
||||
|
||||
- `NewTestConfig("<pkg>")` runs `InitializeTestData()`; for custom configs call `c.InitializeTestData()` (and optionally `c.AssertTestData(t)`).
|
||||
- `PhotoFixtures.Get()` etc. return value copies — re-query via `entity.FindPhoto(fixture)` when you need the DB row.
|
||||
- New persistent IDs: `rnd.GenerateUID(entity.PhotoUID|FileUID|LabelUID|ClientUID|…)`; node UUIDs use `rnd.UUIDv7()` and `node.uuid` is required in responses.
|
||||
- Use `entity.Values` (not raw `map[string]interface{}`) for DB updates. Reuse shared `Example*` constants for illustrative credentials (see `internal/service/cluster/examples.go`).
|
||||
|
||||
### CLI Testing Gotchas
|
||||
|
||||
- `urfave/cli` calls `os.Exit` on `cli.Exit(...)`; use `RunWithTestContext` (in `internal/commands/commands_test.go`) or invoke `cmd.Action(ctx)` directly and check `err.(cli.ExitCoder).ExitCode()`.
|
||||
- Non-interactive: set `PHOTOPRISM_CLI=noninteractive` and/or pass `--yes`.
|
||||
- SQLite DSN from `NewTestConfig("<pkg>")` is a per-suite path like `.<pkg>.db` — don't assert empty.
|
||||
- Reuse shared flag helpers (`DryRunFlag(...)`, `YesFlag()`) for new CLI flags.
|
||||
|
||||
### FFmpeg & Hardware Gating
|
||||
|
||||
- Gate GPU/HW encoder integrations with `PHOTOPRISM_FFMPEG_ENCODER`; CI skips them by default.
|
||||
- Negative paths (missing ffmpeg, unwritable dest) must stay fast and always run. Prefer command-string assertions when hardware is unavailable.
|
||||
|
||||
### API/CLI Test Pitfalls
|
||||
|
||||
- Register `CreateSession(router)` once per test router — duplicates panic.
|
||||
- Don't invoke `start` or emit signals in unit tests; some commands defer `conf.Shutdown()` and close the DB.
|
||||
- MariaDB iteration: `mariadb -D photoprism` for ad-hoc SQL without rebuilding Go.
|
||||
26
.claude/rules/import-index-download.md
Normal file
|
|
@ -0,0 +1,26 @@
|
|||
## Import/Index
|
||||
|
||||
- ImportWorker may skip files if an identical one already exists (duplicate detection). Use unique copies or assert DB rows after ensuring a non-duplicate destination.
|
||||
- Mixed roots: keep `SamplesPath()/ImportPath()/OriginalsPath()` consistent so `RelatedFiles` and `AllowExt` behave as expected.
|
||||
- `IndexOptions*` helpers require a `*config.Config`; pass the active config (or `config.NewMinimalTestConfig(t.TempDir())` in unit tests) so face/label/NSFW scheduling matches the current run.
|
||||
- Folder albums use path-first lookup/update (`album_path`) to avoid slug collisions for emoji child paths.
|
||||
- Label/label-search logic should reuse `entity.FindLabels(...)`, `entity.FindLabelIDs(...)`, and `entity.LabelSlugs(...)` for homophone-aware exact-name matching — avoid ad-hoc slug SQL in search code.
|
||||
- Vision worker scheduling is controlled via `VisionSchedule` / `VisionFilter` and `Run` in `vision.yml`. Use `vision.FilterModels` and `entity.Photo.ShouldGenerateLabels/Caption` to decide when work is required before loading media files.
|
||||
|
||||
## Download CLI Workbench (yt-dlp, remux, importer)
|
||||
|
||||
**Code anchors:** CLI flags/examples in `internal/commands/download.go`; core impl in `internal/commands/download_impl.go`; yt-dlp helpers in `internal/photoprism/dl/*` (`options.go`, `info.go`, `file.go`, `meta.go`); importer entry in `internal/photoprism/get/import.go`; import options in `internal/photoprism/import_options.go`.
|
||||
|
||||
**Fast test runs:**
|
||||
- yt-dlp package: `go test ./internal/photoprism/dl -run 'Options|Created|PostprocessorArgs' -count=1`
|
||||
- CLI command: `go test ./internal/commands -run 'DownloadImpl|HelpFlags' -count=1`
|
||||
|
||||
**FFmpeg-less tests:** set `c.Options().FFmpegBin = "/bin/false"` and `c.Settings().Index.Convert = false` to avoid ffmpeg dependencies when not validating remux.
|
||||
|
||||
**Stubbing yt-dlp (no network):** use a shell script that prints minimal JSON for `--dump-single-json` and creates a file + prints its path when `--print` is requested. Harness env vars: `YTDLP_ARGS_LOG` (append final args for assertion), `YTDLP_OUTPUT_FILE` (absolute file path to create for `--print`), `YTDLP_DUMMY_CONTENT` (file contents to avoid importer duplicate detection between tests).
|
||||
|
||||
**Remux policy:**
|
||||
- Pipe method: PhotoPrism remux (ffmpeg) always embeds title/description/created.
|
||||
- File method: yt-dlp writes files; we pass `--postprocessor-args 'ffmpeg:-metadata creation_time=<RFC3339>'` so imports get `Created` even without local remux.
|
||||
- Default policy `auto`; use `always` for the most complete metadata.
|
||||
- CLI defaults: `photoprism dl` defaults to `--method pipe` and `--impersonate firefox`; pass `-i none` to disable impersonation.
|
||||
32
.claude/rules/safety-and-security.md
Normal file
|
|
@ -0,0 +1,32 @@
|
|||
## Safety & Data
|
||||
|
||||
- If `git status` shows unexpected changes, assume a human might be editing; ask before using reset commands like `git checkout` or `git reset`.
|
||||
- Do not run `git config` (global or repo-level); changing Git configuration is prohibited for agents. Nested subrepos (e.g. `specs/`) may lack a configured committer identity — pass `-c user.email=… -c user.name=…` to the specific `git commit` invocation rather than configuring the repo.
|
||||
- Do not run destructive commands against production data. Prefer ephemeral volumes and test fixtures for acceptance tests. The destructive CLI commands `photoprism reset`, `users reset`, `auth reset`, and `audit reset` require explicit `--yes`; never invoke them in examples or scripts without a backup warning.
|
||||
- Never commit secrets, local configurations, or cache files. Use environment variables or a local `.env`. Ensure `.env`, `.config`, `.local`, `.codex`, and `.gocache` are in `.gitignore` and `.dockerignore`.
|
||||
- Prefer existing caches, workers, and batching strategies in code and `Makefile`. Consider memory/CPU impact of changes; only suggest benchmarks or profiling when justified.
|
||||
- Regenerate `NOTICE` files with `make notice` when dependencies change (e.g. `go.mod`, `go.sum`, `package-lock.json`). Do not edit `NOTICE` or `frontend/NOTICE` manually.
|
||||
|
||||
> If anything in this file conflicts with the `Makefile` or Sources of Truth, **ask** for clarification before proceeding.
|
||||
|
||||
## File I/O — Overwrite Policy (force semantics)
|
||||
|
||||
- Default is safety-first: callers must not overwrite non-empty destination files unless they opt-in with `force=true`. Replacing empty destinations is allowed without `force`.
|
||||
- Open destinations with `O_WRONLY|O_CREATE|O_TRUNC` to avoid trailing bytes when overwriting; use `O_EXCL` when callers must detect collisions.
|
||||
- Where this lives: `internal/photoprism/mediafile.go` (`MediaFile.Copy/Move`), `pkg/fs/copy.go`, `pkg/fs/move.go`.
|
||||
- When to set `force=true`: explicit "replace" actions or admin tools where the user confirmed overwrite. Not for import/index flows — Originals must not be clobbered.
|
||||
|
||||
## Archive Extraction — Security Checklist
|
||||
|
||||
- Validate ZIP entry names with a safe join; reject absolute paths (e.g. `/etc/passwd`), Windows drive/volume paths (`C:\\…` or `C:/…`), and any entry that escapes the target directory after cleaning (`..` traversal).
|
||||
- ZIP entry names use slash semantics, not host OS semantics: validate in ZIP-name space with `path.Clean` / `path.IsAbs`, reject backslashes (`\`), and use `path.Base` for hidden-name checks. Convert to OS paths only at write time via `filepath.FromSlash(...)`. Enforce destination containment with `filepath.Rel(...)` — not string-prefix checks.
|
||||
- Enforce per-file and total size budgets to prevent resource exhaustion. Skip OS metadata directories (e.g. `__MACOSX`) and reject suspicious names.
|
||||
- Where this lives: `pkg/fs/zip.go` (`Unzip`, `UnzipFile`, `safeJoin`).
|
||||
|
||||
## HTTP Download — Security Checklist
|
||||
|
||||
- Use the shared safe HTTP helper: `pkg/http/safe` → `safe.Download(destPath, url, *safe.Options)`. Default policy: only `http/https`, enforced timeouts and max size, writes to a `0600` temp file then renames.
|
||||
- SSRF protection (mandatory unless explicitly needed for tests): set `AllowPrivate=false` to block private/loopback/multicast/link-local ranges. All redirect targets are validated and the final connected peer IP is also checked. Prefer an image-focused `Accept` header for image downloads.
|
||||
- Avatars and small images: use `internal/thumb/avatar.SafeDownload` (15 s timeout, 10 MiB, `AllowPrivate=false`).
|
||||
- Tests using `httptest.Server` on 127.0.0.1 must pass `AllowPrivate=true` explicitly.
|
||||
- Keep per-resource size budgets small; rely on `io.LimitReader` + `Content-Length` prechecks.
|
||||
16
.claude/rules/sources-of-truth.md
Normal file
|
|
@ -0,0 +1,16 @@
|
|||
## Sources of Truth
|
||||
|
||||
- Makefile targets (always prefer existing targets): see the `Makefile`
|
||||
- Developer Guide – Setup: https://docs.photoprism.app/developer-guide/setup/
|
||||
- Developer Guide – Tests: https://docs.photoprism.app/developer-guide/tests/
|
||||
- Contributing: `CONTRIBUTING.md`
|
||||
- Security: `SECURITY.md`
|
||||
- REST API: https://docs.photoprism.dev/ (Swagger), https://docs.photoprism.app/developer-guide/api/ (Docs)
|
||||
- Code Maps: `CODEMAP.md` (Backend/Go), `frontend/CODEMAP.md` (Frontend/JS)
|
||||
- Terminology Glossary: `GLOSSARY.md` (single source for term definitions across specs/docs)
|
||||
- Package-level `README.md` files under `internal/`, `pkg/`, `frontend/`, and `frontend/src/` for detailed package documentation.
|
||||
- Frontend dependency pin rationale, override layer, and orphan-audit pattern: `frontend/README.md` (check before bumping any non-caret pin or adding/removing a top-level dep).
|
||||
|
||||
> Quick Tip: to inspect GitHub issue details without leaving the terminal, run `curl -s https://api.github.com/repos/photoprism/photoprism/issues/<id>`; if `gh` is set up, you MAY also run `gh issue view <id> -R photoprism/photoprism`.
|
||||
|
||||
> Frontend test sequences (Vitest / TestCafe / Playwright), hidden-route UI gotchas, and acceptance-test flow live in `frontend-rules.md`.
|
||||
19
.claude/settings.json
Normal file
|
|
@ -0,0 +1,19 @@
|
|||
{
|
||||
"permissions": {
|
||||
"additionalDirectories": ["/go", "/tmp", "/home"],
|
||||
"allow": [
|
||||
"Bash(make:*)",
|
||||
"Bash(go:*)",
|
||||
"Bash(npx --yes markdown-table-formatter:*)",
|
||||
"Read",
|
||||
"Write",
|
||||
"Edit",
|
||||
"Grep",
|
||||
"Glob",
|
||||
"WebSearch",
|
||||
"mcp__playwright__*"
|
||||
],
|
||||
"defaultMode": "acceptEdits"
|
||||
},
|
||||
"awaySummaryEnabled": false
|
||||
}
|
||||
|
|
@ -14,6 +14,7 @@
|
|||
/assets/models/
|
||||
/storage/
|
||||
/build/
|
||||
/setup/Makefile
|
||||
/photoprism
|
||||
/photoprism-*
|
||||
/frontend/tests/acceptance/screenshots/
|
||||
|
|
@ -69,6 +70,7 @@ venv
|
|||
.nv
|
||||
.eslintcache
|
||||
.gocache
|
||||
.gitconfig
|
||||
.DS_Store
|
||||
.DS_Store?
|
||||
._*
|
||||
|
|
@ -93,6 +95,5 @@ Thumbs.db
|
|||
*.override.md
|
||||
/AGENTS_*
|
||||
/REPOS.md
|
||||
/CLAUDE.md
|
||||
join_token
|
||||
client_secret
|
||||
|
|
|
|||
41
.env.example
Normal file
|
|
@ -0,0 +1,41 @@
|
|||
## Build & Test Environment Overrides
|
||||
##
|
||||
## Copy this file to ".env" in the same directory as compose.yaml and uncomment
|
||||
## the variables you want to customize.
|
||||
|
||||
# Isolates container names, named volumes, and the auto-prefixed default network
|
||||
# across parallel checkouts of this repo. To run multiple environments side-by-
|
||||
# side, set this together with COMPOSE_NETWORK_NAME below.
|
||||
# COMPOSE_PROJECT_NAME=photoprism
|
||||
|
||||
# Bridge-network name. Override together with COMPOSE_PROJECT_NAME to run
|
||||
# multiple parallel dev environments without colliding on the shared network.
|
||||
# COMPOSE_NETWORK_NAME=photoprism
|
||||
|
||||
# Optional services to start by default. Comma-separated list of profile names
|
||||
# read by Docker Compose itself (so no --profile flag is required).
|
||||
# COMPOSE_PROFILES=postgres
|
||||
|
||||
# In-container working directory and bind mount target for the repo checkout.
|
||||
# Override when the host clone lives outside the default GOPATH layout; the
|
||||
# value is reused for the Dockerfile WORKDIR (build arg), working_dir, the
|
||||
# source bind mount, and every PhotoPrism path env var so they stay in sync.
|
||||
# WORKING_DIR=/go/src/github.com/photoprism/photoprism
|
||||
|
||||
# Network interfaces to which Traefik and other services bind on the host.
|
||||
# Defaults expose Traefik on every interface (so *.localssl.dev is reachable
|
||||
# from the LAN) and keep direct service ports on loopback only.
|
||||
# TRAEFIK_BIND_HOST=0.0.0.0
|
||||
# SERVICES_BIND_HOST=127.0.0.1
|
||||
|
||||
# Host ports for Traefik's HTTP and HTTPS entrypoints.
|
||||
# TRAEFIK_HTTP_PORT=80
|
||||
# TRAEFIK_HTTPS_PORT=443
|
||||
|
||||
# Public base URL used in share links, OIDC & PWA URIs.
|
||||
# PHOTOPRISM_SITE_URL=https://app.localssl.dev/
|
||||
|
||||
# Ports to which MariaDB and PostgreSQL should bind. PostgreSQL only starts
|
||||
# when the "postgres" (or "all") profile is enabled via COMPOSE_PROFILES.
|
||||
# MARIADB_PORT=4001
|
||||
# POSTGRES_PORT=4002
|
||||
39
.github/ISSUE_TEMPLATE/bug_report.md
vendored
|
|
@ -1,26 +1,31 @@
|
|||
---
|
||||
name: Bug Report 🐞
|
||||
about: Report a new and clearly identified bug that must be fixed directly in the application
|
||||
title: 'SHORT DESCRIPTION OF THE PROBLEM YOU ARE REPORTING'
|
||||
labels: bug
|
||||
title: 'Bug: Edit the title before submitting'
|
||||
type: Bug
|
||||
assignees: ''
|
||||
|
||||
---
|
||||
|
||||
PLEASE PROCEED ONLY IF YOU ARE ABSOLUTELY SURE THAT THIS IS NOT A TECHNICAL SUPPORT INCIDENT AND/OR POSSIBLY A PROBLEM WITH SOME OTHER SOFTWARE YOU ARE USING. VISIT <https://www.photoprism.app/kb/getting-support> TO LEARN MORE ABOUT OUR SUPPORT OPTIONS. THANK YOU FOR YOUR CAREFUL CONSIDERATION!
|
||||
<details>
|
||||
PLEASE PROCEED ONLY IF YOU ARE SURE THAT THIS IS NOT A TECHNICAL SUPPORT INCIDENT AND/OR POSSIBLY A PROBLEM WITH SOME OTHER SOFTWARE YOU ARE USING:
|
||||
|
||||
---------------------------------------------------------------------------
|
||||
1. Thoroughly review our [Getting Started](https://docs.photoprism.app/getting-started/) and [User Guides](https://docs.photoprism.app/user-guide/).
|
||||
2. Work through the [Troubleshooting Checklists](https://docs.photoprism.app/getting-started/troubleshooting/) we provide.
|
||||
3. Do not report [known issues](https://docs.photoprism.app/known-issues/) or [missing features](https://github.com/photoprism/photoprism/issues) as bugs.
|
||||
4. Use [GitHub Discussions](https://github.com/photoprism/photoprism/discussions) for community help, and visit our [Support Guide](https://www.photoprism.app/kb/getting-support/) to learn more about support options.
|
||||
|
||||
#### 1. What is not working as documented?
|
||||
THANK YOU! 💎
|
||||
</details>
|
||||
|
||||
Be as specific as possible and explain which part of the software is not [working as documented](https://docs.photoprism.app/), e.g. "image not found" or "wrong thumbnail" would not be detailed enough.
|
||||
**Be as specific as possible and explain which part of the software is not [working as documented](https://docs.photoprism.app/), e.g. "image not found" or "wrong thumbnail" would not be detailed enough.**
|
||||
|
||||
Links to the related documentation on [docs.photoprism.app](https://docs.photoprism.app/):
|
||||
- ...
|
||||
|
||||
*Please never report [known issues](https://docs.photoprism.app/known-issues/) or [missing features](https://github.com/photoprism/photoprism/issues) as bugs, and do not submit bug reports for the purpose of getting [technical support](https://www.photoprism.app/kb/getting-support) or because you have not received a response in our [public community forums](https://github.com/photoprism/photoprism/discussions). Thank you very much!*
|
||||
*Please never report [known issues](https://docs.photoprism.app/known-issues/) or [missing features](https://github.com/photoprism/photoprism/issues) as bugs, and do not submit bug reports for the purpose of getting [technical support](https://www.photoprism.app/kb/getting-support/) or because you have not received a response in our [public community forums](https://github.com/photoprism/photoprism/discussions). Thank you very much!*
|
||||
|
||||
#### 2. How can we reproduce it?
|
||||
### 1. How can we reproduce it?
|
||||
|
||||
Steps to reproduce the behavior:
|
||||
|
||||
|
|
@ -31,23 +36,23 @@ Steps to reproduce the behavior:
|
|||
|
||||
When reporting an import, indexing, or performance issue, please include the number and type of pictures in your library, as well as any configuration options you have changed, such as for thumbnail quality.
|
||||
|
||||
#### 3. What behavior do you expect?
|
||||
### 2. What behavior do you expect?
|
||||
|
||||
Give us a clear and concise description of what you expect.
|
||||
|
||||
#### 4. What could be the cause of your problem?
|
||||
### 3. What could be the cause of your problem?
|
||||
|
||||
Always try to determine the cause of your problem using the checklists at <https://docs.photoprism.app/getting-started/troubleshooting/> before submitting a bug report.
|
||||
|
||||
#### 5. Can you provide us with example files for testing, error logs, or screenshots?
|
||||
### 4. Can you provide us with example files for testing, error logs, or screenshots?
|
||||
|
||||
Please include sample files or screenshots that help to reproduce your problem. You can also email files or share a download link, see <https://www.photoprism.app/contact> for details.
|
||||
Please include sample files or screenshots that help to reproduce your problem. You can also email files or share a download link, see <https://www.photoprism.app/contact/> for details.
|
||||
|
||||
Visit <https://docs.photoprism.app/getting-started/troubleshooting/browsers/> to learn how to diagnose frontend issues.
|
||||
|
||||
**Important: If it is an import, indexing or metadata issue, we require sample files and logs from you.** Otherwise, we will not be able to process your report. If it is an import problem specifically, please always provide us with an archive of the files before you imported them so we can reproduce the behavior.
|
||||
**Important: Attach or link to files that help us reproduce the problem. Import and indexing issues require sample files and logs.** Otherwise, we will not be able to process your report. If it is an import problem specifically, please always provide us with an archive of the files before you imported them so we can reproduce the behavior.
|
||||
|
||||
#### 6. Which software versions do you use?
|
||||
### 5. Which software versions do you use?
|
||||
|
||||
(a) PhotoPrism Architecture & Build Number: AMD64, ARM64, ARMv7,...
|
||||
|
||||
|
|
@ -63,7 +68,7 @@ You can find the version/build number of the app in *Settings* by scrolling to t
|
|||
|
||||
*Always provide database and operating system details if it is a backend, import, or indexing issue. Should it be a frontend issue, at a minimum we require you to provide web browser and operating system details. When reporting a performance problem, we ask that you provide us with complete information about your environment, as there may be more than one cause.*
|
||||
|
||||
#### 7. On what kind of device is PhotoPrism installed?
|
||||
### 6. On what kind of device is PhotoPrism installed?
|
||||
|
||||
This is especially important if you are reporting a performance, import, or indexing issue. You can skip this if you're reporting a problem you found in our public demo, or if it's a completely unrelated issue, such as incorrect page layout.
|
||||
|
||||
|
|
@ -77,9 +82,9 @@ This is especially important if you are reporting a performance, import, or inde
|
|||
|
||||
*Always provide device, memory, and storage details if you have a backend, performance, import, or indexing issue.*
|
||||
|
||||
#### 8. Do you use a Reverse Proxy, Firewall, VPN, or CDN?
|
||||
### 7. Do you use a Reverse Proxy, Firewall, VPN, or CDN?
|
||||
|
||||
If yes, please specify type and version. You can skip this if you are reporting a completely unrelated issue.
|
||||
Describe your network setup. If applicable, include details about your NGINX or other reverse proxy configuration.
|
||||
|
||||
*Always provide this information when you have a reliability, performance, or frontend problem, such as failed uploads, connection errors, broken thumbnails, or video playback issues.*
|
||||
|
||||
|
|
|
|||
77
.github/ISSUE_TEMPLATE/bug_report.yml
vendored
|
|
@ -1,29 +1,21 @@
|
|||
name: Bug Report 🐞
|
||||
description: Report a new and clearly identified bug that must be fixed directly in the application.
|
||||
title: "Category: Short bug description (PLEASE CHANGE)"
|
||||
labels:
|
||||
- bug
|
||||
title: "Bug: Edit the title before submitting"
|
||||
type: Bug
|
||||
assignees: []
|
||||
body:
|
||||
- type: markdown
|
||||
attributes:
|
||||
value: |
|
||||
PLEASE ONLY PROCEED IF YOU ARE SURE THIS IS NOT A SUPPORT REQUEST, AND THE ISSUE IS NOT RELATED TO A CUSTOM SETUP OR OTHER SOFTWARE YOU ARE USING:
|
||||
1. Thoroughly review our [Getting Started](https://docs.photoprism.app/getting-started/) and [User Guides](https://docs.photoprism.app/user-guide/).
|
||||
Please proceed only if you are sure that this is not a technical support incident and/or a problem with some other software you are using:
|
||||
1. Thoroughly review our [Getting Started](https://docs.photoprism.app/getting-started/) and [User Guides](https://docs.photoprism.app/user-guide/).
|
||||
2. Work through the [Troubleshooting Checklists](https://docs.photoprism.app/getting-started/troubleshooting/) we provide.
|
||||
3. Do not report [known issues](https://docs.photoprism.app/known-issues/) or [missing features](https://github.com/photoprism/photoprism/issues) as bugs.
|
||||
- type: checkboxes
|
||||
id: prerequisites
|
||||
attributes:
|
||||
label: Before You Continue
|
||||
description: Confirm that you reviewed the guidance above.
|
||||
options:
|
||||
- label: This is a new, confirmed bug that has not yet been reported or documented
|
||||
required: true
|
||||
4. Use [GitHub Discussions](https://github.com/photoprism/photoprism/discussions) for community help, and visit our [Support Guide](https://www.photoprism.app/kb/getting-support/) to learn more about support options.
|
||||
- type: textarea
|
||||
id: documented-behavior
|
||||
attributes:
|
||||
label: What Is Not Working as Documented?
|
||||
label: What is not working as documented?
|
||||
description: Be specific and include links to the relevant documentation when possible.
|
||||
placeholder: Describe the incorrect behavior and link to the related documentation on https://docs.photoprism.app/.
|
||||
validations:
|
||||
|
|
@ -31,62 +23,65 @@ body:
|
|||
- type: textarea
|
||||
id: reproduction-steps
|
||||
attributes:
|
||||
label: How Can We Reproduce It?
|
||||
label: How can we reproduce it?
|
||||
description: Provide numbered steps so we can reproduce the behavior reliably.
|
||||
placeholder: |
|
||||
1. Go to ...
|
||||
2. Click ...
|
||||
3. Scroll to ...
|
||||
4. Expected vs. actual result
|
||||
render: markdown
|
||||
validations:
|
||||
required: true
|
||||
- type: checkboxes
|
||||
id: prerequisites
|
||||
attributes:
|
||||
label: Have you verified that no similar reports exist?
|
||||
description: Confirm that you read the relevant documentation, this is not a support request, and that no similar reports already exist.
|
||||
options:
|
||||
- label: This is a new bug that has not yet been reported or documented
|
||||
required: true
|
||||
- type: textarea
|
||||
id: expected-behavior
|
||||
attributes:
|
||||
label: What Behavior Do You Expect?
|
||||
label: What behavior do you expect?
|
||||
description: Share the correct outcome you expected to see.
|
||||
validations:
|
||||
required: true
|
||||
- type: textarea
|
||||
id: possible-cause
|
||||
attributes:
|
||||
label: What Could Be the Cause?
|
||||
label: What could be the cause?
|
||||
description: Summarize any investigation you have already completed and the potential root cause.
|
||||
- type: textarea
|
||||
id: supporting-material
|
||||
attributes:
|
||||
label: Logs, Sample Files, or Screenshots
|
||||
description: Attach or link to files that help us reproduce the problem. Import and indexing issues require sample files and logs.
|
||||
placeholder: Provide links to archives, logs, or screenshots. See https://www.photoprism.app/contact for secure sharing options.
|
||||
- type: textarea
|
||||
id: software-versions
|
||||
attributes:
|
||||
label: Which Software Versions Do You Use?
|
||||
label: Which software versions do you use?
|
||||
description: Include all relevant software versions so we can reproduce the environment.
|
||||
placeholder: |
|
||||
- PhotoPrism Architecture & Build Number (AMD64, ARM64, ARMv7, ...):
|
||||
- Database Type & Version (MariaDB, MySQL, SQLite, ...):
|
||||
- Operating System Types & Versions (Linux, Windows, Android, ...):
|
||||
- Browser Types & Versions (Firefox, Chrome, Safari on iPhone, ...):
|
||||
- Ad Blockers, Browser Plugins, or Firewall Software:
|
||||
render: markdown
|
||||
value: |
|
||||
- PhotoPrism Edition & Version (Build):
|
||||
- Database Type & Version(s):
|
||||
- Operating System(s):
|
||||
- Browser Type & Version(s):
|
||||
- Ad Blockers, Antivirus, and Plugins:
|
||||
validations:
|
||||
required: true
|
||||
- type: textarea
|
||||
id: installation-device
|
||||
attributes:
|
||||
label: On What Device Is PhotoPrism Installed?
|
||||
label: On what device is PhotoPrism installed?
|
||||
description: Provide hardware details, especially for performance, import, or indexing issues.
|
||||
placeholder: |
|
||||
- Device / Processor Type (Raspberry Pi 4, Intel Core i7-3770, AMD Ryzen 7 3800X, ...):
|
||||
- Physical Memory & Swap Space (GB):
|
||||
- Storage Type (HDD, SSD, RAID, USB, Network Storage, ...):
|
||||
- Additional Context:
|
||||
render: markdown
|
||||
value: |
|
||||
- CPU/Device Type(s):
|
||||
- Physical Memory & Swap in GB:
|
||||
- Storage (HDD/SSD/RAID, USB, Network):
|
||||
- type: textarea
|
||||
id: networking-setup
|
||||
attributes:
|
||||
label: Do You Use a Reverse Proxy, Firewall, VPN, or CDN?
|
||||
description: Specify type and version if applicable; include NGINX configuration when relevant.
|
||||
label: Do you use a reverse proxy, firewall, VPN, or CDN?
|
||||
description: Describe your network setup. If applicable, include details about your NGINX or other reverse proxy configuration.
|
||||
placeholder: Describe proxies, VPNs, CDNs, or firewall software involved. Include versions and configuration snippets when helpful.
|
||||
- type: upload
|
||||
id: supporting-material
|
||||
attributes:
|
||||
label: Logs, Sample Files, or Screenshots
|
||||
description: Attach or link to files that help us reproduce the problem. Import and indexing issues require sample files and logs.
|
||||
|
|
|
|||
2
.github/ISSUE_TEMPLATE/config.yml
vendored
|
|
@ -4,5 +4,5 @@ contact_links:
|
|||
url: https://github.com/photoprism/photoprism/discussions
|
||||
about: Use Discussions for general questions, community support, and troubleshooting help.
|
||||
- name: Read Our Support Guide
|
||||
url: https://www.photoprism.app/kb/getting-support
|
||||
url: https://www.photoprism.app/kb/getting-support/
|
||||
about: Learn about official support options and how to get assistance with PhotoPrism.
|
||||
|
|
|
|||
50
.github/ISSUE_TEMPLATE/feature-request.md
vendored
|
|
@ -1,33 +1,57 @@
|
|||
---
|
||||
name: Feature Request
|
||||
about: Suggest a new feature or enhancement
|
||||
title: 'Category: Short Description (PLEASE CHANGE)'
|
||||
labels: idea
|
||||
title: 'Feature: Edit the title before submitting'
|
||||
type: Feature
|
||||
assignees: ''
|
||||
|
||||
---
|
||||
|
||||
PLEASE ONLY PROCEED IF YOU ARE ABSOLUTELY SURE THAT THIS IS NOT A TECHNICAL SUPPORT INCIDENT AND/OR A PROBLEM WITH OTHER SOFTWARE YOU ARE USING. PLEASE ALSO CHECK OUR PUBLIC ROADMAP AND TRY TO FIND EXISTING FEATURE REQUESTS FIRST:
|
||||
<details>
|
||||
PLEASE PROCEED ONLY IF YOU ARE SURE THAT THIS IS NOT A TECHNICAL SUPPORT INCIDENT AND/OR POSSIBLY A PROBLEM WITH SOME OTHER SOFTWARE YOU ARE USING. CHECK OUR PUBLIC ROADMAP AND TRY TO FIND EXISTING FEATURE REQUESTS FIRST:
|
||||
|
||||
- <https://link.photoprism.app/roadmap>
|
||||
- <https://github.com/photoprism/photoprism/issues>
|
||||
|
||||
VISIT <https://www.photoprism.app/kb/getting-support> TO LEARN MORE ABOUT OUR SUPPORT OPTIONS. THANK YOU FOR YOUR CAREFUL CONSIDERATION!
|
||||
- https://link.photoprism.app/roadmap
|
||||
- https://github.com/photoprism/photoprism/issues
|
||||
|
||||
===============================================================================
|
||||
THANK YOU! 💎
|
||||
</details>
|
||||
|
||||
**Describe what problem this solves and why this would be valuable to many users**
|
||||
**As a <role>, I want <goal>, so that <outcome>.**
|
||||
|
||||
All issue descriptions MUST begin with a one-sentence user story in the format shown above:
|
||||
- Issue titles MUST be concise, use the imperative mood, and start with a single capitalized prefix followed by a colon and a space, e.g. `Search: Add filter for RAW image formats`.
|
||||
- Follow the user story with information about the problem the feature solves, the alternatives you considered, and any other relevant details.
|
||||
- Use level-3 Markdown headings to separate sections like `### Background`, `### Additional Context`, `### Open Questions`, and `### Acceptance Criteria`.
|
||||
|
||||
### Background
|
||||
|
||||
**What problem does this solve, and why would it be valuable to many users?**
|
||||
|
||||
A clear and concise description of what the problem is and why it is important to solve it.
|
||||
|
||||
**Describe the solution you'd like**
|
||||
**What solution do you propose?**
|
||||
|
||||
A clear and concise description of what you suggest to happen.
|
||||
|
||||
**Describe alternatives you've considered**
|
||||
**Which alternatives or workarounds have you considered?**
|
||||
|
||||
A clear and concise description of any alternative solutions or features you've considered.
|
||||
|
||||
**Additional context**
|
||||
### Additional Context
|
||||
|
||||
Add any other context or screenshots about the feature request here.
|
||||
- Add any other context or screenshots about the feature request here.
|
||||
|
||||
### Open Questions
|
||||
|
||||
- [ ] <question> — options A/B/C and implications.
|
||||
- [ ] <question> — potential ambiguity or conflict to clarify.
|
||||
|
||||
### Acceptance Criteria
|
||||
|
||||
- [ ] <component> MUST <expected behavior>
|
||||
- [ ] <component> SHOULD <expected behavior>
|
||||
- [ ] <component> MAY <expected behavior>
|
||||
|
||||
### References
|
||||
|
||||
- Add links to [external documentation](https://www.example.com/), references, or examples.
|
||||
|
|
|
|||
62
.github/ISSUE_TEMPLATE/feature-request.yml
vendored
|
|
@ -1,34 +1,38 @@
|
|||
name: Feature Request
|
||||
description: Suggest a new feature or enhancement.
|
||||
title: "Category: Short feature description (PLEASE CHANGE)"
|
||||
labels:
|
||||
- idea
|
||||
title: "Feature: Edit the title before submitting"
|
||||
type: Feature
|
||||
assignees: []
|
||||
body:
|
||||
- type: markdown
|
||||
attributes:
|
||||
value: |
|
||||
Be sure to [check our roadmap](https://link.photoprism.app/roadmap) and [search GitHub for similar features](https://github.com/photoprism/photoprism/issues) before submitting a new request.
|
||||
- type: checkboxes
|
||||
id: request-prep
|
||||
Before submitting a new request, please check our GitHub roadmap and issues for similar requests:
|
||||
- https://link.photoprism.app/roadmap
|
||||
- https://github.com/photoprism/photoprism/issues
|
||||
- type: textarea
|
||||
id: user-story
|
||||
attributes:
|
||||
label: Confirmation
|
||||
description: Make sure you completed these steps before opening a new request.
|
||||
options:
|
||||
- label: I checked this request against the roadmap and existing issues
|
||||
required: true
|
||||
label: User Story
|
||||
description: |
|
||||
Feature requests MUST begin with a one sentence user story.
|
||||
**As a <role>, I want <goal>, so that <outcome>.**
|
||||
placeholder: "**As a <role>, I want <goal>, so that <outcome>.**"
|
||||
value: "**As a <role>, I want <goal>, so that <outcome>.**"
|
||||
validations:
|
||||
required: true
|
||||
- type: textarea
|
||||
id: problem-statement
|
||||
attributes:
|
||||
label: What Problem Does This Solve and Why Is It Valuable?
|
||||
description: Explain the underlying problem and why solving it matters to many users.
|
||||
label: What problem does this solve, and why would it be valuable to many users?
|
||||
description: Explain the underlying problem and why it is important to solve it.
|
||||
placeholder: Describe the problem, why it is important, and who is affected.
|
||||
validations:
|
||||
required: true
|
||||
- type: textarea
|
||||
id: proposed-solution
|
||||
attributes:
|
||||
label: What Solution Would You Like?
|
||||
label: What solution do you propose?
|
||||
description: Provide a clear and concise description of the feature or enhancement you propose.
|
||||
placeholder: Outline the proposed solution or experience from the user's perspective.
|
||||
validations:
|
||||
|
|
@ -36,12 +40,34 @@ body:
|
|||
- type: textarea
|
||||
id: alternatives
|
||||
attributes:
|
||||
label: What Alternatives Have You Considered?
|
||||
description: Describe other options you explored and why they are less suitable.
|
||||
label: Which alternatives or workarounds have you considered?
|
||||
description: Describe alternative solutions, workarounds, or related features you evaluated.
|
||||
placeholder: Mention any alternative solutions, workarounds, or related features you evaluated.
|
||||
- type: checkboxes
|
||||
id: prerequisites
|
||||
attributes:
|
||||
label: Have you verified that no similar issues exist?
|
||||
options:
|
||||
- label: This is not a support request, and I verified that no similar issues exist
|
||||
required: true
|
||||
- type: textarea
|
||||
id: additional-context
|
||||
attributes:
|
||||
label: Additional Context
|
||||
description: Share relevant context, references, or screenshots that illustrate the request.
|
||||
placeholder: Add links, references, or screenshots that help explain the request.
|
||||
description: Add any other context or screenshots about the feature request here.
|
||||
placeholder: Add any other context or screenshots that help explain the request.
|
||||
- type: textarea
|
||||
id: acceptance-criteria
|
||||
attributes:
|
||||
label: Acceptance Criteria
|
||||
description: Use checklist items and RFC 2119 keywords such as MUST, SHOULD, and MAY to define the expected behavior.
|
||||
placeholder: |
|
||||
- [ ] <component> MUST <expected behavior>.
|
||||
- [ ] <component> SHOULD <expected behavior>.
|
||||
- [ ] <component> MAY <expected behavior>.
|
||||
value: |
|
||||
- [ ] <component> MUST <expected behavior>.
|
||||
- [ ] <component> SHOULD <expected behavior>.
|
||||
- [ ] <component> MAY <expected behavior>.
|
||||
validations:
|
||||
required: true
|
||||
|
|
|
|||
9
.gitignore
vendored
|
|
@ -28,10 +28,13 @@ __pycache__
|
|||
venv
|
||||
.venv
|
||||
.env*
|
||||
!.env.example
|
||||
.tmp
|
||||
.nv
|
||||
.eslintcache
|
||||
.gocache
|
||||
.gitconfig
|
||||
.system
|
||||
/pro/
|
||||
/portal/
|
||||
/plus/
|
||||
|
|
@ -49,12 +52,14 @@ venv
|
|||
/frontend/tests_output/
|
||||
frontend/coverage/
|
||||
**/__screenshots__/
|
||||
/.playwright-mcp/
|
||||
/photoprism
|
||||
/photoprism-*
|
||||
/photos/originals/*
|
||||
/photos/import/*
|
||||
/storage/
|
||||
/build/
|
||||
/setup/Makefile
|
||||
/assets/docs/
|
||||
/assets/facenet/
|
||||
/assets/nasnet/
|
||||
|
|
@ -69,7 +74,6 @@ frontend/coverage/
|
|||
*.override.md
|
||||
/AGENTS_*
|
||||
/REPOS.md
|
||||
/CLAUDE.md
|
||||
/TODO.md
|
||||
join_token
|
||||
client_secret
|
||||
|
|
@ -86,9 +90,10 @@ Thumbs.db
|
|||
.glide
|
||||
.idea
|
||||
.codex
|
||||
.claude
|
||||
.config
|
||||
.local
|
||||
*.local.json
|
||||
*.local.yaml
|
||||
.project
|
||||
.vscode
|
||||
*.tmproj
|
||||
|
|
|
|||
48
.ldap.cfg
|
|
@ -239,6 +239,48 @@ debug = false
|
|||
action = "search"
|
||||
object = "*"
|
||||
|
||||
[[users]]
|
||||
name = "mona"
|
||||
givenname = "Mona"
|
||||
objectClass = "manager"
|
||||
displayName = "Mona Man"
|
||||
sn = "Man"
|
||||
userPrincipalName = "mona@example.com"
|
||||
mail = "mona@example.com"
|
||||
uidnumber = 5011
|
||||
primarygroup = 5511
|
||||
loginShell = "/bin/bash"
|
||||
otherGroups = [5505]
|
||||
passsha256 = "4314c1fe282face45336b1422a3285c5ff31a39c8e24425615fa53a43b718493" # photoprism
|
||||
[[users.customattributes]]
|
||||
photoprismRoleManager = ["true"]
|
||||
photoprismNoLogin = ["false"]
|
||||
photoprismWebdav = ["true"]
|
||||
[[users.capabilities]]
|
||||
action = "search"
|
||||
object = "*"
|
||||
|
||||
[[users]]
|
||||
name = "laura"
|
||||
givenname = "Laura"
|
||||
objectClass = "admin"
|
||||
displayName = "Laura Scope"
|
||||
sn = "Doe"
|
||||
userPrincipalName = "laura@example.com"
|
||||
mail = "laura@example.com"
|
||||
uidnumber = 5001
|
||||
primarygroup = 5501
|
||||
loginShell = "/bin/bash"
|
||||
otherGroups = [5501, 5508]
|
||||
passsha256 = "4314c1fe282face45336b1422a3285c5ff31a39c8e24425615fa53a43b718493" # photoprism
|
||||
[[users.customattributes]]
|
||||
photoprismRoleAdmin = ["true"]
|
||||
photoprismNoLogin = ["false"]
|
||||
photoprismWebdav = ["true"]
|
||||
[[users.capabilities]]
|
||||
action = "search"
|
||||
object = "*"
|
||||
|
||||
[[users]]
|
||||
name = "max"
|
||||
givenname = "Max"
|
||||
|
|
@ -298,4 +340,8 @@ debug = false
|
|||
|
||||
[[groups]]
|
||||
name = "PhotoPrism-viewer"
|
||||
gidnumber = 5510
|
||||
gidnumber = 5510
|
||||
|
||||
[[groups]]
|
||||
name = "PhotoPrism-manager"
|
||||
gidnumber = 5511
|
||||
1
.my.cnf
|
|
@ -2,5 +2,4 @@
|
|||
user=root
|
||||
password=photoprism
|
||||
host=mariadb
|
||||
port=4001
|
||||
skip-ssl=true
|
||||
|
|
@ -12,3 +12,13 @@ tests/upload-files/
|
|||
*.html
|
||||
*.md
|
||||
.*
|
||||
|
||||
# JS / Vue / configs — ESLint owns formatting (see frontend/eslint.config.mjs).
|
||||
# Prettier on these collapses intentional multi-line method chains and
|
||||
# predicate lists; we deliberately moved them off Prettier's autofix path.
|
||||
# Vue templates are formatted by eslint-plugin-vue's flat/recommended preset
|
||||
# (vue/html-indent, vue/html-quotes, vue/max-attributes-per-line, etc.).
|
||||
**/*.js
|
||||
**/*.mjs
|
||||
**/*.cjs
|
||||
**/*.vue
|
||||
|
|
|
|||
3
.rsyncignore
Normal file
|
|
@ -0,0 +1,3 @@
|
|||
.*
|
||||
*.db
|
||||
__*
|
||||
17
.telemetry
Normal file
|
|
@ -0,0 +1,17 @@
|
|||
# Privacy defaults: opt out of third-party telemetry, analytics, update checks,
|
||||
# and other non-essential network calls. Uses plain KEY=VALUE lines so this
|
||||
# file can be referenced by Docker Compose via env_file: and sourced from
|
||||
# shells, in addition to being included by the Makefile.
|
||||
|
||||
DO_NOT_TRACK=true
|
||||
DISABLE_AUTOUPDATER=1
|
||||
DISABLE_TELEMETRY=1
|
||||
DISABLE_ERROR_REPORTING=1
|
||||
DISABLE_FEEDBACK_COMMAND=1
|
||||
NO_UPDATE_NOTIFIER=true
|
||||
NPM_CONFIG_UPDATE_NOTIFIER=false
|
||||
NPM_CONFIG_AUDIT=false
|
||||
NPM_CONFIG_FUND=false
|
||||
GH_TELEMETRY=false
|
||||
CLAUDE_CODE_DISABLE_FEEDBACK_SURVEY=1
|
||||
CLAUDE_CODE_DISABLE_NONESSENTIAL_TRAFFIC=1
|
||||
636
AGENTS.md
|
|
@ -1,519 +1,173 @@
|
|||
# PhotoPrism® — Repository Guidelines
|
||||
# PhotoPrism Repository Guidelines
|
||||
|
||||
**Last Updated:** March 2, 2026
|
||||
**Last Updated:** May 5, 2026
|
||||
|
||||
## Purpose
|
||||
|
||||
This file tells automated coding agents (and humans) where to find the single sources of truth for building, testing, and contributing to this repository. Visit https://agents.md/ to learn more.
|
||||
Entry point for agents and humans.
|
||||
|
||||
## Sources of Truth
|
||||
|
||||
- Makefile targets (always prefer existing targets): https://github.com/photoprism/photoprism/blob/develop/Makefile
|
||||
- Developer Guide – Setup: https://docs.photoprism.app/developer-guide/setup/
|
||||
- Developer Guide – Tests: https://docs.photoprism.app/developer-guide/tests/
|
||||
- Makefile: https://github.com/photoprism/photoprism/blob/develop/Makefile
|
||||
- Setup guide: https://docs.photoprism.app/developer-guide/setup/
|
||||
- Test guide: https://docs.photoprism.app/developer-guide/tests/
|
||||
- Contributing: https://github.com/photoprism/photoprism/blob/develop/CONTRIBUTING.md
|
||||
- Security: https://github.com/photoprism/photoprism/blob/develop/SECURITY.md
|
||||
- REST API: https://docs.photoprism.dev/ (Swagger), https://docs.photoprism.app/developer-guide/api/ (Docs)
|
||||
- Code Maps: [`CODEMAP.md`](CODEMAP.md) (Backend/Go), [`frontend/CODEMAP.md`](frontend/CODEMAP.md) (Frontend/JS)
|
||||
- Packages: `README.md` files under `internal/`, `pkg/`, and `frontend/src/`, e.g. [`internal/photoprism/README.md`](internal/photoprism/README.md), [`internal/photoprism/batch/README.md`](internal/photoprism/batch/README.md), [`internal/config/README.md`](internal/config/README.md), [`internal/server/README.md`](internal/server/README.md), [`internal/api/README.md`](internal/api/README.md), [`internal/thumb/README.md`](internal/thumb/README.md), [`internal/ffmpeg/README.md`](internal/ffmpeg/README.md), and [`frontend/src/common/README.md`](frontend/src/common/README.md).
|
||||
- Face Detection & Embeddings: [`internal/ai/face/README.md`](internal/ai/face/README.md)
|
||||
- Vision Config & Engines: [`internal/ai/vision/README.md`](internal/ai/vision/README.md), [`internal/ai/vision/openai/README.md`](internal/ai/vision/openai/README.md), [`internal/ai/vision/ollama/README.md`](internal/ai/vision/ollama/README.md)
|
||||
- Terminology Glossary: [`GLOSSARY.md`](GLOSSARY.md) (single source for term definitions across specs/docs)
|
||||
- Regenerate `NOTICE` files with `make notice` when dependencies change (e.g., updates to `go.mod`, `go.sum`, `package-lock.json`, or other lockfiles). Do not edit `NOTICE` or `frontend/NOTICE` manually.
|
||||
- REST API: https://docs.photoprism.dev/ and https://docs.photoprism.app/developer-guide/api/
|
||||
- Code maps: [`CODEMAP.md`](CODEMAP.md), [`frontend/CODEMAP.md`](frontend/CODEMAP.md)
|
||||
- Package docs: `README.md` files under `internal/`, `pkg/`, `frontend/`, and `frontend/src/`
|
||||
- Frontend dependency pins, override layer, and orphan-audit pattern: [`frontend/README.md`](frontend/README.md) (read before bumping any non-caret pin or adding/removing a top-level dep)
|
||||
- AI/Vision docs: [`internal/ai/face/README.md`](internal/ai/face/README.md), [`internal/ai/vision/README.md`](internal/ai/vision/README.md), [`internal/ai/vision/openai/README.md`](internal/ai/vision/openai/README.md), [`internal/ai/vision/ollama/README.md`](internal/ai/vision/ollama/README.md)
|
||||
- Glossary: [`GLOSSARY.md`](GLOSSARY.md)
|
||||
- When dependencies change, regenerate `NOTICE` files with `make notice`; do not edit `NOTICE` or `frontend/NOTICE` manually.
|
||||
|
||||
> Quick Tip: to inspect GitHub issue details without leaving the terminal, run `curl -s https://api.github.com/repos/photoprism/photoprism/issues/<id>`; if `gh` is set up, you MAY also run `gh issue view <id> -R photoprism/photoprism`.
|
||||
## Subtree Guides
|
||||
|
||||
### Local Agent Progress
|
||||
- [`internal/AGENTS.md`](internal/AGENTS.md): internal Go rules.
|
||||
- [`internal/api/AGENTS.md`](internal/api/AGENTS.md): API rules.
|
||||
- [`internal/config/AGENTS.md`](internal/config/AGENTS.md): config rules.
|
||||
- [`internal/commands/AGENTS.md`](internal/commands/AGENTS.md): CLI rules.
|
||||
- [`internal/photoprism/AGENTS.md`](internal/photoprism/AGENTS.md): import and index rules.
|
||||
- [`internal/service/cluster/AGENTS.md`](internal/service/cluster/AGENTS.md): cluster rules.
|
||||
- [`frontend/AGENTS.md`](frontend/AGENTS.md): frontend rules.
|
||||
- [`pkg/AGENTS.md`](pkg/AGENTS.md): `pkg/*` security and test rules.
|
||||
|
||||
- Use root-level task files to track progress and handoff notes across sessions/environments:
|
||||
- `AGENTS_TODO.md` for actionable tasks.
|
||||
- `AGENTS_DONE.md` for completed tasks.
|
||||
- These files are local workflow aids and may not exist yet in a given workspace.
|
||||
Optional nested repositories such as `plus/`, `pro/`, `portal/`, and `specs/` may contain their own `AGENTS.md` files. When present, treat those files as additional directory-local guidance.
|
||||
|
||||
## Local Agent Progress
|
||||
|
||||
- Use `.agents/TODO.md` for actionable tasks and `.agents/DONE.md` for completed work.
|
||||
- These files are local workflow aids and may not exist in every workspace.
|
||||
|
||||
## Style Notes
|
||||
|
||||
### Commit Messages
|
||||
|
||||
Use concise, imperative subjects with a one-word prefix indicating the scope or topic:
|
||||
|
||||
- `Config: Add tests for "darktable-cli" path detection`
|
||||
|
||||
If the commit relates to specific issues or pull requests, reference their IDs in the message:
|
||||
|
||||
- `Docker: Use two stage build to reduce image size #123 #5632`
|
||||
|
||||
Commit messages must not exceed 80 characters in length.
|
||||
- Use concise imperative subjects with a one-word prefix, for example `Config: Add tests for "darktable-cli" path detection`.
|
||||
- Append issue or PR IDs when relevant.
|
||||
- Commit messages must not exceed 80 characters.
|
||||
|
||||
### GitHub Issues
|
||||
|
||||
Issue titles MUST be concise, use the imperative mood, and start with a single capitalized prefix followed by a colon and a space, e.g. `Search: Add filter for RAW image formats`.
|
||||
|
||||
Issue descriptions MUST begin with a one-sentence **User Story** where the sentence itself is fully bold in the format: `**As a <role>, I want <goal>, so that <outcome>.**`
|
||||
Follow the User Story with a clear summary of the expected behavior, rationale, technical considerations, and constraints.
|
||||
|
||||
Descriptions MUST conclude with a checklist of **Acceptance Criteria**:
|
||||
- Use GitHub checklist formatting: `- [ ]`
|
||||
- Criteria MUST be clear, testable, and unambiguous.
|
||||
- Each item MUST use one of the following priority keywords:
|
||||
- `MUST` — required for the issue to be considered complete
|
||||
- `SHOULD` — strongly recommended but not strictly required
|
||||
- `MAY` — optional enhancement
|
||||
|
||||
Additional details MAY be included as needed, such as related issues, references, screenshots, or external resources.
|
||||
|
||||
> Agents MUST create, edit, close, reopen, relabel, or otherwise modify GitHub issues only when explicitly requested by the user.
|
||||
- Titles MUST be concise, imperative, and start with one capitalized prefix plus `: `, for example `Search: Add filter for RAW image formats`.
|
||||
- Descriptions MUST begin with a one-sentence bold user story: `**As a <role>, I want <goal>, so that <outcome>.**`
|
||||
- Use level-3 Markdown headings for sections within issue descriptions, for example `### Acceptance Criteria`.
|
||||
- Follow with behavior, rationale, technical considerations, and constraints.
|
||||
- End with `- [ ]` checklist items for the acceptance criteria, each using `MUST`, `SHOULD`, or `MAY`.
|
||||
- Keep the checklist current: once the work for a criterion is implemented **and verified**, mark it done (`- [x]`).
|
||||
- Leave items that are unverified, not yet implemented, or skipped optional (`MAY`) enhancements unchecked.
|
||||
- An issue is complete only when every `MUST` is checked; never tick a box on the strength of a plan alone or an unrun test.
|
||||
- When referencing an issue from a commit that fulfills some of its criteria, update the matching boxes first.
|
||||
- Agents MUST create, edit, close, reopen, relabel, or otherwise modify GitHub issues only when explicitly requested by the user.
|
||||
|
||||
### Specifications & Documentation
|
||||
|
||||
- Document headings must use **Title Case** (in APA or AP style) across Markdown files to keep generated navigation and changelogs consistent. Always spell the product name as `PhotoPrism`; this proper noun is an exception to generic naming rules.
|
||||
- When writing CLI examples or scripts, place option flags before positional arguments unless the command requires a different order.
|
||||
- Use RFC 3339 UTC timestamps in request and response examples, and valid ID, UID and UUID examples in docs and tests.
|
||||
- Technical specifications in the nested `specs/` subrepository may not be present in every clone or environment. Do not add `Makefile` targets in the main project that depend on `specs/` paths. When `specs/` is available, you MAY run its tools manually (e.g., `bash specs/scripts/lint-status.sh`), but the main repo must remain buildable without `specs/`.
|
||||
- Testing Guides: `specs/dev/backend-testing.md` (Backend/Go), `specs/dev/frontend-testing.md` (Frontend/JS)
|
||||
- Auto-generated configuration and command references live under `specs/generated/`. Agents MUST NOT read, analyze, or modify anything in this directory; refer humans to `specs/generated/README.md` if regeneration is required.
|
||||
- Nested Git repositories may appear to be ignored; if so, change directories before staging or committing updates.
|
||||
- Markdown headings use a Chicago-style title case, with additional code- and path-aware normalization rules (see *Title Case rules* below). Always spell the product name as `PhotoPrism`.
|
||||
- Put option flags before positional arguments unless the command requires another order.
|
||||
- Use RFC 3339 UTC timestamps and valid ID, UID, and UUID examples in docs and tests.
|
||||
- The nested `specs/` repository may be absent. Do not add main-repo `Makefile` targets that depend on it; when present, you may run its tools manually.
|
||||
- Testing guides live at `specs/dev/backend-testing.md` and `specs/dev/frontend-testing.md`.
|
||||
- Do not read, analyze, or modify `specs/generated/`; refer humans to `specs/generated/README.md` when regeneration is needed.
|
||||
- Refresh `**Last Updated:**` when you change document contents, but leave it unchanged for whitespace-only or formatting-only edits.
|
||||
- Nested Git repositories may appear ignored; change into them before staging or committing updates.
|
||||
|
||||
> **Title Case** rules (APA/AP implementation):
|
||||
> - Capitalize the first word of a title/heading and the first word of a subtitle.
|
||||
> - Capitalize the first word after a colon, an em dash, or end punctuation.
|
||||
> - Capitalize major words, including the second part of hyphenated major words.
|
||||
> - Capitalize all words of four letters or more.
|
||||
> - Lowercase only minor words of three letters or fewer (articles, short conjunctions, short prepositions), except when they are in one of the positions above.
|
||||
> - In headings, prefer `&` where needed; do not use `And` or `Or` in titles.
|
||||
|
||||
> Refresh the `**Last Updated:**` date at the top of documents whenever you make changes to their contents, using the format `January 20, 2026` (without time); leave it as-is for simple formatting or whitespace-only edits.
|
||||
Title Case rules (Chicago-style, with code- and path-aware normalization):
|
||||
- Capitalize the first word, the first word after a colon, dash, or end punctuation, and all major words, including the second part of a hyphenated major word.
|
||||
- Lowercase only articles, short conjunctions, and short prepositions of three letters or fewer when they are not in one of those positions.
|
||||
- Preserve known acronyms (for example, API, CLI, HTTP, JSON) and slash-separated acronym groups (for example, CSV/TSV) as uppercase.
|
||||
- Preserve RFC 2119 / RFC 8174 normative keywords (MUST, SHOULD, MAY, SHALL, REQUIRED, RECOMMENDED, OPTIONAL) as uppercase when used in their normative sense.
|
||||
- Preserve inline code spans (`` `foo` ``), file paths (e.g. `docs/foo-bar.md`), and slash commands (e.g. `/grill-me`) verbatim; do not recase their contents.
|
||||
- Use `&` instead of `And`/`Or` in headings.
|
||||
|
||||
## Safety & Data
|
||||
|
||||
- If `git status` shows unexpected changes, assume a human might be editing; if you think you caused them, ask for permission before using reset commands like `git checkout` or `git reset`.
|
||||
- Do not run `git config` (global or repo-level); changing Git configuration is prohibited for agents.
|
||||
- Do not run destructive commands against production data. Prefer ephemeral volumes and test fixtures for acceptance tests.
|
||||
- Never commit secrets, local configurations, or cache files. Use environment variables or a local `.env`.
|
||||
- If `git status` shows unexpected changes, assume a human may be editing; ask before using reset-style commands.
|
||||
- Do not run `git config` at either the global or repository level.
|
||||
- Do not run destructive commands against production data; prefer ephemeral volumes and test fixtures for acceptance tests.
|
||||
- Never commit secrets, local configurations, or cache files; use environment variables or a local `.env`.
|
||||
- Ensure `.env`, `.config`, `.local`, `.codex`, and `.gocache` are ignored in `.gitignore` and `.dockerignore`.
|
||||
- Prefer using existing caches, workers, and batching strategies referenced in code and `Makefile`.
|
||||
- Consider memory/CPU impact of changes; only suggest benchmarks or profiling when justified.
|
||||
|
||||
> If anything in this file conflicts with the `Makefile` or Sources of Truth, **ask** for clarification before proceeding.
|
||||
|
||||
## Project Structure & Languages
|
||||
|
||||
- Backend: Go (`internal/`, `pkg/`, `cmd/`) + MariaDB/SQLite
|
||||
- Package boundaries: Code in `pkg/*` MUST NOT import from `internal/*`.
|
||||
- If you need access to config/entity/DB, put new code in a package under `internal/` instead of `pkg/`.
|
||||
- GORM field naming: When adding struct fields that include uppercase abbreviations (e.g., `LabelNSFW`, `UserID`, `URLHash`), set an explicit `gorm:"column:<name>"` tag so column names stay consistent (`label_nsfw`, `user_id`, `url_hash` instead of split-letter variants).
|
||||
- Frontend: Vue 3 + Vuetify 3 (`frontend/`)
|
||||
- Docker/compose for dev/CI; Traefik is used for local TLS (`*.localssl.dev`)
|
||||
|
||||
> Nested Git repositories may appear to be ignored; if so, change directories before staging or committing updates.
|
||||
|
||||
### Web Templates & Shared Assets
|
||||
|
||||
- HTML entrypoints live under `assets/templates/`; key files are `index.gohtml`, `app.gohtml`, `app.js.gohtml`, and `splash.gohtml`. The browser check logic resides in `assets/static/js/browser-check.js` and is included via `app.js.gohtml`; it performs capability checks (Promise, fetch, AbortController, `script.noModule`, etc.) before the main bundle executes.
|
||||
- To preserve the fallback messaging, keep the script order in `app.js.gohtml` so `browser-check.js` loads before the bundle script (`{{ .config.JsUri }}`). Do not add `defer` or `async` to the bundle tag unless you reintroduce a guarded loader.
|
||||
- The same loader partial is reused in private packages (`pro/assets/templates/index.gohtml`, `plus/assets/templates/index.gohtml`, `portal/assets/templates/index.gohtml`). Whenever you touch `app.js.gohtml` or change how we load the bundle, mirror the update by running commands such as `cd pro && sed -n '1,160p' assets/templates/index.gohtml` (and similarly for `plus` and `portal`) to confirm they include the shared partial instead of hard-coding the bundle tag.
|
||||
- Splash styles are defined in `frontend/src/css/splash.css`. Add new splash elements (for example `.splash-warning`) there so both public and private editions remain visually consistent.
|
||||
- Browser baseline: PhotoPrism requires Safari 13 / iOS 13 or current Chrome, Edge, or Firefox. Update the message in `assets/templates/app.js.gohtml` (and the matching CSS) if support changes.
|
||||
|
||||
### Frontend Translations
|
||||
|
||||
- Frontend translation extraction source of truth is root `make gettext-extract` (runs `scripts/gettext-extract.sh`), which scans `frontend/src` plus available private overlays in `plus/frontend`, `pro/frontend`, and `portal/frontend`. Subrepo compatibility targets (`make -C plus gettext-extract`, `make -C pro gettext-extract`, `make -C portal gettext-extract`) delegate to this root target.
|
||||
- Avoid punctuation-only gettext keys (for example `$gettext("—")`), as they create noisy/unhelpful entries in `frontend/src/locales/translations.pot`.
|
||||
|
||||
## Agent Runtime (Host vs Container)
|
||||
|
||||
Agents MAY run either:
|
||||
|
||||
- **Inside the Development Environment container** (recommended for least privilege).
|
||||
- **On the host** (outside Docker), in which case the agent MAY start/stop the Dev Environment as needed.
|
||||
|
||||
### Detecting the environment (agent logic)
|
||||
|
||||
Agents SHOULD detect the runtime and choose commands accordingly:
|
||||
|
||||
- **Inside container if** `/.dockerenv` exists (authoritative signal).
|
||||
- Path hint: when the project path is `/go/src/github.com/photoprism/photoprism` *and* `/.dockerenv` is absent, assume you are on the host with a bind mount; treat it as host mode and prefer host-side Docker commands.
|
||||
|
||||
#### Examples
|
||||
|
||||
Bash:
|
||||
|
||||
```bash
|
||||
if [ -f "/.dockerenv" ]; then
|
||||
echo "container"
|
||||
else
|
||||
echo "host"
|
||||
fi
|
||||
```
|
||||
|
||||
Node.js:
|
||||
|
||||
```js
|
||||
const fs = require("fs");
|
||||
const inContainer = fs.existsSync("/.dockerenv");
|
||||
console.log(inContainer ? "container" : "host");
|
||||
```
|
||||
|
||||
### Agent installation and invocation
|
||||
|
||||
- **Inside container**: Prefer running agents via `npm exec` (no global install), for example:
|
||||
- `npm exec --yes <agent-binary> -- --help`
|
||||
- Or use `npx <agent-binary> ...`
|
||||
- If the agent is distributed via npm and must be global, install inside the container only:
|
||||
- `npm install -g <agent-npm-package>`
|
||||
- Replace `<agent-binary>` / `<agent-npm-package>` with the names from the agent’s official docs.
|
||||
|
||||
- **On host**: Use the vendor’s recommended install for your OS. Ensure your agent runs from the repository root so it can discover `AGENTS.md` and project files.
|
||||
|
||||
## Build & Run (local)
|
||||
|
||||
- Run `make help` to see common targets (or open the `Makefile`).
|
||||
|
||||
- **Host mode** (agent runs on the host; agent MAY manage Docker lifecycle):
|
||||
- Build local dev image (once): `make docker-build`
|
||||
- Start services: `docker compose up` (add `-d` to start in the background)
|
||||
- Follow live app logs: `docker compose logs -f --tail=100 photoprism` (Ctrl+C to stop)
|
||||
- All services: `docker compose logs -f --tail=100`
|
||||
- Last 10 minutes only: `docker compose logs -f --since=10m photoprism`
|
||||
- Plain output (easier to copy): `docker compose logs -f --no-log-prefix --no-color photoprism`
|
||||
- Execute a single command in the app container: `docker compose exec photoprism <command>`
|
||||
- Example: `docker compose exec photoprism ./photoprism help`
|
||||
- Why `./photoprism`? It runs the locally built binary in the project directory.
|
||||
- Run as non-root to avoid root-owned files on bind mounts:
|
||||
`docker compose exec -u "$(id -u):$(id -g)" photoprism <command>`
|
||||
- Durable alternative: set the service user or `PHOTOPRISM_UID`/`PHOTOPRISM_GID` in `compose.yaml`; if you hit issues, run `make fix-permissions`.
|
||||
- Open a terminal session in the app container: `make terminal`
|
||||
- Stop everything when done: `docker compose --profile=all down --remove-orphans` (`make down` does the same)
|
||||
|
||||
- **Container mode** (agent runs inside the app container):
|
||||
- Install deps: `make dep`
|
||||
- Build frontend/backend: `make build-js` and `make build-go`
|
||||
- Watch frontend changes (auto-rebuild): `make watch-js`
|
||||
- Or run directly: `cd frontend && npm run watch`
|
||||
- Tips: refresh the browser to see changes; running the watcher outside the container can be faster on non-Linux hosts; stop with Ctrl+C
|
||||
- Start the PhotoPrism server: `./photoprism start`
|
||||
- Open http://localhost:2342/ (HTTP)
|
||||
- Or https://app.localssl.dev/ (HTTPS via Traefik reverse proxy)
|
||||
- Only if Traefik is running and the dev compose labels are active
|
||||
- Labels for `*.localssl.dev` are defined in the dev compose files, e.g. https://github.com/photoprism/photoprism/blob/develop/compose.yaml
|
||||
- Admin Login: Local compose files set `PHOTOPRISM_ADMIN_USER=admin` and `PHOTOPRISM_ADMIN_PASSWORD=photoprism`; if the credentials differ, inspect `compose.yaml` (or the active environment) for these variables before logging in.
|
||||
- Do not use the Docker CLI inside the container; starting/stopping services requires host Docker access. If you need to manage compose while inside the dev container, switch to host mode (or ask a human) instead of running `docker compose` there.
|
||||
|
||||
Note: Across our public documentation, official images, and in production, the command-line interface (CLI) name is `photoprism`. Other PhotoPrism binary names are only used in development builds for side-by-side comparisons of the Community Edition (CE) with PhotoPrism Plus (`photoprism-plus`), PhotoPrism Pro (`photoprism-pro`), and PhotoPrism Portal (`photoprism-portal`).
|
||||
|
||||
### Operating Systems & Architectures
|
||||
|
||||
- Our guides and command examples generally assume the use of a Linux/Unix shell on a 64-bit AMD64 or ARM64 system.
|
||||
- For Windows-specifics, see the Developer Guide FAQ: https://docs.photoprism.app/developer-guide/faq/#can-your-development-environment-be-used-under-windows
|
||||
|
||||
## Code Style & Lint
|
||||
|
||||
- Go: run `make fmt-go swag-fmt` to reformat the backend code + Swagger annotations (see `Makefile` for additional targets)
|
||||
- Run `make lint-go` (golangci-lint) after Go changes; prefer `golangci-lint run ./internal/<pkg>/...` for focused edits.
|
||||
- Doc comments for packages and exported identifiers must be complete sentences that begin with the name of the thing being described and end with a period.
|
||||
- All newly added functions, including unexported helpers, must have a concise doc comment that explains their behavior.
|
||||
- For short examples inside comments, indent code rather than using backticks; godoc treats indented blocks as preformatted.
|
||||
- Branding: Always spell the product name as `PhotoPrism`; this proper noun is an exception to generic naming rules.
|
||||
- Every Go package must contain a `<package>.go` file in its root (for example, `internal/auth/jwt/jwt.go`) with the standard license header and a short package description comment explaining its purpose.
|
||||
- JS/Vue: use the lint/format scripts in `frontend/package.json` (ESLint + Prettier)
|
||||
- All added code and tests **must** be formatted according to our standards.
|
||||
|
||||
## Tests
|
||||
|
||||
- From within the Development Environment:
|
||||
- Full unit test suite: `make test` (runs backend and frontend tests)
|
||||
- Test frontend/backend: `make test-js` and `make test-go`
|
||||
- Linting: `make lint` (all), `make lint-go` (golangci-lint with `.golangci.yml`, prints findings without failing due to `--issues-exit-code 0`), `make lint-js` (ESLint/Prettier)
|
||||
- Go packages: `go test` (all tests) or `go test -run <name>` (specific tests only)
|
||||
- Need to inspect the MariaDB data while iterating? Connect directly inside the dev shell with `mariadb -D photoprism` and run SQL without rebuilding Go code.
|
||||
- Go tests live beside sources: for `path/to/pkg/<file>.go`, add tests in `path/to/pkg/<file>_test.go` (create if missing). For the same function, group related cases as `t.Run(...)` sub-tests (table-driven where helpful) and use **PascalCase** for subtest names (for example, `t.Run("Success", ...)`).
|
||||
- Frontend unit tests use **Vitest**; see scripts in `frontend/package.json`.
|
||||
- Vitest watch/coverage: `make vitest-watch` and `make vitest-coverage`
|
||||
- Acceptance tests: use the `acceptance-*` targets in the `Makefile`
|
||||
- For one-off checks, run a single TestCafe case by `testID` and keep startup/cleanup in the repo root:
|
||||
```bash
|
||||
make storage/acceptance
|
||||
make acceptance-sqlite-restart
|
||||
make wait-2
|
||||
(cd frontend && npm run testcafe -- "chrome --headless=new --use-gl=angle --use-angle=swiftshader --disable-features=LocalNetworkAccessChecks" --config-file ./testcaferc.json --test-meta mode=public,type=short,testID=components-001 "tests/acceptance")
|
||||
make acceptance-sqlite-stop
|
||||
```
|
||||
- If your command temporarily changes into `frontend/`, run `make acceptance-sqlite-stop` after returning to the repository root; running that target from `frontend/` fails with "No rule to make target".
|
||||
- Portal proxy URI validation: use the Portal test environment with `NODES=2` and verify both instance routes when changing `PHOTOPRISM_PORTAL_PROXY_URI` (Portal) and matching node `PHOTOPRISM_SITE_URL` prefixes; use `PORTAL_TEST_ENV_ARGS=--proxy-uri=/instance/` to regenerate consistent `.env` values.
|
||||
- Portal test environment default: run a full rebuild via `make -C portal test-env NODES=2` before `make -C portal test-start`; avoid `--no-build` partial refreshes unless you intentionally validate env-only changes, as mixed/stale staged assets can load the wrong frontend edition.
|
||||
|
||||
### Playwright MCP Usage
|
||||
|
||||
- **Endpoint & Navigation** — Playwright MCP is preconfigured to reach the dev server at `http://localhost:2342/`.
|
||||
Use `playwright__browser_navigate` to open the login route under the configured frontend URI (default `/library/login` for CE/Plus/Pro, `/portal/admin/login` for Portal), sign in, and then call `playwright__browser_take_screenshot` to capture the page state.
|
||||
- **Viewport Defaults** — Desktop sessions open with a `1280×900` viewport by default.
|
||||
Use `playwright__browser_resize` if the viewport is not preconfigured or you need to adjust it mid-run.
|
||||
- **Mobile Workflows** — When testing responsive layouts, use the `playwright_mobile` server (for example, `playwright_mobile__browser_navigate`).
|
||||
It launches with a `375×667` viewport, matching a typical smartphone display, so you can capture mobile layouts without manual resizing.
|
||||
- **Authentication** — Default admin credentials are `admin` / `photoprism`:
|
||||
- If login fails, check your active Compose file or container environment for `PHOTOPRISM_ADMIN_USER` and `PHOTOPRISM_ADMIN_PASSWORD`.
|
||||
- Tip: if your MCP supports it, persist a storage state after login and reuse it in later steps to skip re-authentication.
|
||||
- **Sidebar Navigation** — The sidebar nests items such as `Library → Errors`:
|
||||
- Expand a parent entry by clicking its chevron before selecting links inside.
|
||||
- **Session Cleanup** — After scripted interactions, close the browser tab with `playwright__browser_close` (or `playwright_mobile__browser_close`) to keep the MCP session tidy for subsequent runs.
|
||||
- **Stability / Waiting** — Prefer robust waits over sleeps:
|
||||
- After navigation: `waitUntil: 'networkidle'` (or wait for a key locator).
|
||||
- Before clicking: ensure the locator is `visible` and `enabled`.
|
||||
- Use role/label/text selectors over brittle XPaths.
|
||||
- **Screenshot Format & Size** — Keep artifacts small and reproducible:
|
||||
- Prefer **JPEG** with quality (e.g., `quality: 80`) instead of PNG.
|
||||
- Limit to the visible viewport (`fullPage: false`), unless explicitly required.
|
||||
- Name files deterministically, e.g., `.local/screenshots/<case>/<step>__<viewport>.jpg` (create the folder if it doesn’t exist).
|
||||
- Avoid embedding large screenshots in chat history—reference the file path instead.
|
||||
- **Desktop example** (if your MCP tool exposes Playwright options 1:1):
|
||||
```json
|
||||
{
|
||||
"path": ".local/screenshots/fix-event-leaks/login__desktop.jpg",
|
||||
"type": "jpeg",
|
||||
"quality": 80,
|
||||
"fullPage": false
|
||||
}
|
||||
```
|
||||
- **Non-interactive runs** — If `npx` is fetching the MCP server at runtime, add `--yes` to its args (or preinstall and use `--no-install`) to avoid prompts in CI.
|
||||
|
||||
### FFmpeg Tests & Hardware Gating
|
||||
|
||||
- By default, do not run GPU/HW encoder integrations in CI. Gate with `PHOTOPRISM_FFMPEG_ENCODER` (one of: `vaapi`, `intel`, `nvidia`).
|
||||
- Negative-path tests should remain fast and always run:
|
||||
- Missing ffmpeg binary → immediate exec error.
|
||||
- Unwritable destination → command fails without creating files.
|
||||
- Prefer command-string assertions when hardware is unavailable; enable HW runs locally only when a device is configured.
|
||||
|
||||
### Fast, Focused Test Recipes
|
||||
|
||||
- Filesystem + archives (fast): `go test ./pkg/fs -run 'Copy|Move|Unzip' -count=1`
|
||||
- Media helpers (fast): `go test ./pkg/media/... -count=1`
|
||||
- Thumbnails (libvips, moderate): `go test ./internal/thumb/... -count=1`
|
||||
- FFmpeg command builders (moderate): `go test ./internal/ffmpeg -run 'Remux|Transcode|Extract' -count=1`
|
||||
|
||||
### CLI Testing Gotchas (Go)
|
||||
|
||||
- Exit codes and `os.Exit`:
|
||||
- `urfave/cli` calls `os.Exit(code)` when a command returns `cli.Exit(...)`, which will terminate `go test` abruptly (often after logs like `http 401:`).
|
||||
- Use the test helper `RunWithTestContext` (in `internal/commands/commands_test.go`) which temporarily overrides `cli.OsExiter` so the process doesn’t exit; you still receive the error to assert `ExitCoder`.
|
||||
- If you only need to assert the exit code and don’t need printed output, you can invoke `cmd.Action(ctx)` directly and check `err.(cli.ExitCoder).ExitCode()`.
|
||||
- Non‑interactive mode: set `PHOTOPRISM_CLI=noninteractive` and/or pass `--yes` to avoid prompts that block tests and CI.
|
||||
- SQLite DSN in tests:
|
||||
- `config.NewTestConfig("<pkg>")` defaults to SQLite with a per‑suite DSN like `.<pkg>.db`. Don’t assert an empty DSN for SQLite.
|
||||
- Clean up any per‑suite SQLite files in tests with `t.Cleanup(func(){ _ = os.Remove(dsn) })` if you capture the DSN.
|
||||
|
||||
### Frontend Focus Management
|
||||
|
||||
- Dialogs must follow the shared focus pattern documented in `frontend/src/common/README.md`.
|
||||
- Always expose `ref="dialog"` on `<v-dialog>` overlays, call `$view.enter/leave` in `@after-enter` / `@after-leave`, and avoid positive `tabindex` values.
|
||||
- Persistent dialogs (those with the `persistent` prop) must handle Escape via `@keydown.esc.exact` so Vuetify’s default rejection animation is suppressed; keep other shortcuts on `@keyup` so inner inputs can cancel them first.
|
||||
- Global shortcuts run through `onShortCut(ev)` in `common/view.js`; it only forwards Escape and `ctrl`/`meta` combinations, so do not rely on it for arbitrary keys.
|
||||
- When a dialog opens nested menus (for example, combobox suggestion lists), ensure they work with the global trap; see the README for troubleshooting tips.
|
||||
|
||||
### Filesystem Permissions & io/fs Aliasing (Go)
|
||||
|
||||
- Always use our shared permission variables from `pkg/fs` when creating files/directories:
|
||||
- Directories: `fs.ModeDir` (0o755 with umask)
|
||||
- Regular files: `fs.ModeFile` (0o644 with umask)
|
||||
- Config files: `fs.ModeConfigFile` (default 0o664)
|
||||
- Secrets/tokens: `fs.ModeSecretFile` (default 0o600)
|
||||
- Backups: `fs.ModeBackupFile` (default 0o600)
|
||||
- Do not pass stdlib `io/fs` flags (e.g., `fs.ModeDir`) to functions expecting permission bits.
|
||||
- When importing the stdlib package, alias it to avoid collisions: `iofs "io/fs"` or `gofs "io/fs"`.
|
||||
- Our package is `github.com/photoprism/photoprism/pkg/fs` and provides the only approved permission constants for `os.MkdirAll`, `os.WriteFile`, `os.OpenFile`, and `os.Chmod`.
|
||||
- Prefer `filepath.Join` for filesystem paths; reserve `path.Join` for URL paths.
|
||||
- For slash-based logical paths stored in DB/config/API payloads (for example folder album paths), normalize with `clean.SlashPath(...)` instead of repeating ad-hoc `strings.ReplaceAll(..., "\\", "/")` + trim logic.
|
||||
|
||||
### File I/O — Overwrite Policy (force semantics)
|
||||
|
||||
- Default is safety-first: callers must not overwrite non-empty destination files unless they opt-in with a `force` flag.
|
||||
- Replacing empty destination files is allowed without `force=true` (useful for placeholder files).
|
||||
- Open destinations with `O_WRONLY|O_CREATE|O_TRUNC` to avoid trailing bytes when overwriting; use `O_EXCL` when the caller must detect collisions.
|
||||
- Where this lives:
|
||||
- App-level helpers: `internal/photoprism/mediafile.go` (`MediaFile.Copy/Move`).
|
||||
- Reusable utils: `pkg/fs/copy.go`, `pkg/fs/move.go`.
|
||||
- When to set `force=true`:
|
||||
- Explicit “replace” actions or admin tools where the user confirmed overwrite.
|
||||
- Not for import/index flows; Originals must not be clobbered.
|
||||
|
||||
### Archive Extraction — Security Checklist
|
||||
|
||||
- Always validate ZIP entry names with a safe join; reject:
|
||||
- absolute paths (e.g., `/etc/passwd`).
|
||||
- Windows drive/volume paths (e.g., `C:\\…` or `C:/…`).
|
||||
- any entry that escapes the target directory after cleaning (path traversal via `..`).
|
||||
- ZIP entry names use slash semantics, not host OS semantics:
|
||||
- Validate in ZIP-name space with `path.Clean` / `path.IsAbs`, reject backslashes (`\`), and use `path.Base` for hidden-name checks.
|
||||
- Convert to OS paths only at write time with `filepath.FromSlash(...)`.
|
||||
- Enforce destination containment with `filepath.Rel(...)` rather than string-prefix checks.
|
||||
- Enforce per-file and total size budgets to prevent resource exhaustion.
|
||||
- Skip OS metadata directories (e.g., `__MACOSX`) and reject suspicious names.
|
||||
- Where this lives: `pkg/fs/zip.go` (`Unzip`, `UnzipFile`, `safeJoin`).
|
||||
- Tests to keep:
|
||||
- Absolute/volume paths rejected (Windows-specific backslash path covered on Windows).
|
||||
- `..` traversal skipped; `__MACOSX` skipped.
|
||||
- Per-file and total size limits enforced; directory entries created; nested paths extracted safely.
|
||||
|
||||
### HTTP Download — Security Checklist
|
||||
|
||||
- Use the shared safe HTTP helper instead of ad‑hoc `net/http` code:
|
||||
- Package: `pkg/http/safe` → `safe.Download(destPath, url, *safe.Options)`.
|
||||
- Default policy in this repo: allow only `http/https`, enforce timeouts and max size, write to a `0600` temp file then rename.
|
||||
- SSRF protection (mandatory unless explicitly needed for tests):
|
||||
- Set `AllowPrivate=false` to block private/loopback/multicast/link‑local ranges.
|
||||
- All redirect targets are validated; the final connected peer IP is also checked.
|
||||
- Prefer an image‑focused `Accept` header for image downloads: `"image/jpeg, image/png, */*;q=0.1"`.
|
||||
- Avatars and small images: use the thin wrapper in `internal/thumb/avatar.SafeDownload` which applies stricter defaults (15s timeout, 10 MiB, `AllowPrivate=false`).
|
||||
- Tests using `httptest.Server` on 127.0.0.1 must pass `AllowPrivate=true` explicitly to succeed.
|
||||
- Keep per‑resource size budgets small; rely on `io.LimitReader` + `Content-Length` prechecks.
|
||||
|
||||
## Agent Quick Tips (Do This)
|
||||
|
||||
### Testing & Fixtures
|
||||
|
||||
- Go tests live next to their sources (`path/to/pkg/<file>_test.go`); group related cases as `t.Run(...)` sub-tests to keep table-driven coverage readable, and name each subtest with a PascalCase string.
|
||||
- Keep Go scratch work inside `internal/...`; Go refuses to import `internal/` packages from directories like `/tmp`, so create temporary helpers under a throwaway folder such as `internal/tmp/` instead of using external paths.
|
||||
- Prefer focused `go test` runs for speed (`go test ./internal/<pkg> -run <Name> -count=1`, `go test ./internal/commands -run <Name> -count=1`) and avoid `./...` unless you need the entire suite.
|
||||
- Heavy packages such as `internal/entity` and `internal/photoprism` run migrations and fixtures; expect 30–120s on first run and narrow with `-run` to keep iterations low.
|
||||
- For CLI-driven tests, wrap commands with `RunWithTestContext(cmd, args)` so `urfave/cli` cannot exit the process, and assert CLI output with `assert.Contains`/regex because `show` reports quote strings.
|
||||
- In `internal/photoprism` tests, rely on `photoprism.Config()` for runtime-accurate behavior; only build a new config if you replace it via `photoprism.SetConfig`.
|
||||
- Generate identifiers with `rnd.GenerateUID(entity.ClientUID)` for OAuth client IDs and `rnd.UUIDv7()` for node UUIDs; treat `node.uuid` as required in responses.
|
||||
- When creating or editing shell scripts, run `shellcheck <file>` (or the relevant `make` target) and resolve warnings before exiting the task.
|
||||
- When adding persistent fixtures (photos, files, labels, etc.), always obtain new IDs via `rnd.GenerateUID(...)` with the matching prefix (`entity.PhotoUID`, `entity.FileUID`, `entity.LabelUID`, …) instead of inventing manual strings so the search helpers recognize them.
|
||||
- For database updates, prefer the `entity.Values` type alias over raw `map[string]interface{}` so helpers stay type-safe and consistent with existing code.
|
||||
- Reach for `config.NewMinimalTestConfig(t.TempDir())` when a test only needs filesystem/config scaffolding, and use `config.NewMinimalTestConfigWithDb("<name>", t.TempDir())` when you need a fresh SQLite schema without the cached fixture snapshot.
|
||||
- Config test helpers now auto-discover the repo `assets/` directory; you should not set `PHOTOPRISM_ASSETS_PATH` manually in package `init()` functions unless you have a non-standard layout.
|
||||
- Hub API traffic is disabled in tests by default via `hub.ApplyTestConfig()`; opt back in with `PHOTOPRISM_TEST_HUB=test`.
|
||||
- Avoid `config.TestConfig()` in new tests unless you truly need the fully seeded fixture set: it shares a singleton instance that runs `InitializeTestData()` and wipes `storage/testdata`. Tests that write to Originals/Import (e.g. WebDAV helpers) should instead call `config.NewMinimalTestConfig(t.TempDir())` (or the DB variant) and follow up with `conf.CreateDirectories()` so they operate on an isolated sandbox.
|
||||
- Shared fixtures live under `storage/testdata`; `NewTestConfig("<pkg>")` already calls `InitializeTestData()`, but call `c.InitializeTestData()` (and optionally `c.AssertTestData(t)`) when you construct custom configs so originals/import/cache/temp exist. `InitializeTestData()` clears old data, downloads fixtures if needed, then calls `CreateDirectories()`.
|
||||
- `PhotoFixtures.Get()` and similar helpers return value copies; when a test needs the database-backed row (with associations preloaded), re-query by UID/ID using helpers like `entity.FindPhoto(fixture)` so updates observe persisted IDs and in-memory caches stay coherent.
|
||||
- For slimmer tests that only need config objects, prefer the new helpers in `internal/config/test.go`: `NewMinimalTestConfig(t.TempDir())` when no database is needed, or `NewMinimalTestConfigWithDb("<pkg>", t.TempDir())` to spin up an isolated SQLite schema without seeding all fixtures.
|
||||
- When you need illustrative credentials (join tokens, client IDs/secrets, etc.), reuse the shared `Example*` constants (see `internal/service/cluster/examples.go`) so tests, docs, and examples stay consistent.
|
||||
- Hidden error UI checks for the hidden route under the frontend URI (default `/library/hidden` for CE/Plus/Pro, `/portal/admin/hidden` for Portal) require both `files.file_error` and `photos.photo_quality = -1`; hidden searches are quality-gated, so setting only `file_error` will not surface the row in Hidden results.
|
||||
|
||||
### Roles & ACL
|
||||
|
||||
- Map roles via the shared tables: users through `acl.ParseRole(s)` / `acl.UserRoles[...]`, clients through `acl.ClientRoles[...]`.
|
||||
- Treat `RoleAliasNone` ("none") and an empty string as `RoleNone`; no caller-specific overrides.
|
||||
- Default unknown client roles to `RoleClient`; `acl.ParseRole` already handles `0/false/nil` as none for users.
|
||||
- Build CLI role help from `Roles.CliUsageString()` (e.g., `acl.ClientRoles.CliUsageString()`); never hand-maintain role lists.
|
||||
- When checking JWT/client scopes, use the shared helpers (`acl.ScopePermits` / `acl.ScopeAttrPermits`) instead of hand-written parsing.
|
||||
|
||||
### Import/Index
|
||||
|
||||
- ImportWorker may skip files if an identical file already exists (duplicate detection). Use unique copies or assert DB rows after ensuring a non‑duplicate destination.
|
||||
- Mixed roots: when testing related files, keep `ExamplesPath()/ImportPath()/OriginalsPath()` consistent so `RelatedFiles` and `AllowExt` behave as expected.
|
||||
- `IndexOptions*` helpers now require a `*config.Config`; pass the active config (or `config.NewMinimalTestConfig(t.TempDir())` in unit tests) so face/label/NSFW scheduling matches the current run.
|
||||
- Folder albums use path-first lookup/update (`album_path`) to avoid slug collisions for emoji child paths; re-indexing can repair stale collision titles when a child folder incorrectly shows the parent name, while preserving user-custom titles.
|
||||
|
||||
### CLI Usage & Assertions
|
||||
|
||||
- Prefer the shared helpers like `DryRunFlag(...)` and `YesFlag()` when adding new CLI flags so behaviour stays consistent across commands.
|
||||
- Wrap CLI tests in `RunWithTestContext(cmd, args)` so `urfave/cli` cannot exit the process; assert quoted `show` output with `assert.Contains`/regex for the trailing ", or <last>" rule.
|
||||
- Prefer `--json` responses for automation. `photoprism show commands --json [--nested]` exposes the tree view (add `--all` for hidden entries).
|
||||
- Use `internal/commands/catalog` to inspect commands/flags without running the binary; when validating large JSON docs, marshal DTOs via `catalog.BuildFlat/BuildNode` instead of parsing CLI stdout.
|
||||
- Expect `show` commands to return arrays of snake_case rows, except `photoprism show config`, which yields `{ sections: [...] }`, and the `config-options`/`config-yaml` variants, which flatten to a top-level array.
|
||||
|
||||
### API & Config Changes
|
||||
|
||||
- Respect precedence: `options.yml` overrides CLI/env values, which override defaults. When adding a new option, update `internal/config/options.go` (yaml/flag tags), register it in `internal/config/flags.go`, expose a getter, surface it in `*config.Report()`, and write generated values back to `options.yml` by setting `c.options.OptionsYaml` before persisting. Use `CliTestContext` in `internal/config/test.go` to exercise new flags.
|
||||
- For `options.yml` writes in Go code, prefer config-owned persistence helpers over ad-hoc YAML handling: use `Config.SaveOptionsPatch(...)` for generic merges and `Config.SaveClusterOptionsUpdate(...)` for cluster-managed metadata updates.
|
||||
- Use `pkg/fs.ConfigFilePath` when you need a config filename so existing `.yml` files remain valid and new installs can adopt `.yaml` transparently (the helper also covers other paired extensions such as `.toml`/`.tml`).
|
||||
- When touching configuration in Go code, use the public accessors on `*config.Config` (e.g. `Config.JWKSUrl()`, `Config.SetJWKSUrl()`, `Config.ClusterUUID()`) instead of mutating `Config.Options()` directly; reserve raw option tweaks for test fixtures only.
|
||||
- When introducing new metadata sources (e.g., `SrcOllama`, `SrcOpenAI`), define them in both `internal/entity/src.go` and the frontend lookup tables (`frontend/src/common/util.js`) so UI badges and server priorities stay aligned.
|
||||
- Vision worker scheduling is controlled via `VisionSchedule` / `VisionFilter` and the `Run` property set in `vision.yml`. Utilities like `vision.FilterModels` and `entity.Photo.ShouldGenerateLabels/Caption` help decide when work is required before loading media files.
|
||||
- Logging: use the shared logger (`event.Log`) via the package-level `log` variable (see `internal/auth/jwt/logger.go`) instead of direct `fmt.Print*` or ad-hoc loggers.
|
||||
- Logging terminology: in human-readable log text, prefer canonical runtime terms (`instance`, `service`) and reserve `node` for contract-bound names (`/cluster/nodes`, `Node*`, `PHOTOPRISM_NODE_*`).
|
||||
- Audit outcomes: import `github.com/photoprism/photoprism/pkg/log/status` and end every `event.Audit*` slice with a single outcome token such as `status.Succeeded`, `status.Failed`, `status.Denied`, or other constants defined there (no additional segments afterwards).
|
||||
- Error outcomes: when a sanitized error string should be the outcome, call `status.Error(err)` instead of adding a placeholder and passing `clean.Error(err)` manually.
|
||||
- Cluster registry tests (`internal/service/cluster/registry`) currently rely on a full test config because they persist `entity.Client` rows. They run migrations and seed the SQLite DB, so they are intentionally slow. If you refactor them, consider sharing a single `config.TestConfig()` across subtests or building a lightweight schema harness; do not swap to the minimal config helper unless the tests stop touching the database.
|
||||
- Favor explicit CLI flags: check `c.cliCtx.IsSet("<flag>")` before overriding user-supplied values, and follow the `ClusterUUID` pattern (`options.yml` → CLI/env → generated UUIDv4 persisted).
|
||||
- Database helpers: reuse `conf.Db()` / `conf.Database*()`, avoid GORM `WithContext`, quote MySQL identifiers, and reject unsupported drivers early.
|
||||
- Handler conventions: reuse limiter stacks (`limiter.Auth`, `limiter.Login`) and `limiter.AbortJSON` for 429s, lean on `api.ClientIP`, `header.BearerToken`, and `Abort*` helpers, compare secrets with constant time checks, set `Cache-Control: no-store` on sensitive responses, and register routes in `internal/server/routes.go`. For new list endpoints default `count=100` (max 1000) and `offset≥0`, document parameters explicitly, and set portal mode via `PHOTOPRISM_NODE_ROLE=portal` plus `PHOTOPRISM_JOIN_TOKEN` when needed.
|
||||
- Swagger & docs: annotate only routed handlers in `internal/api/*.go`, use full `/api/v1/...` paths, skip helpers, and regenerate docs with `make fmt-go swag-fmt swag` or `make swag-json` (which also strips duplicate `time.Duration` enums). When iterating, target packages with `go test ./internal/api -run Cluster -count=1` or similarly scoped runs.
|
||||
- Testing helpers: isolate config paths with `t.TempDir()`, reuse `NewConfig`, `CliTestContext`, and `NewApiTest()` harnesses, authenticate via `AuthenticateAdmin`, `AuthenticateUser`, or `OAuthToken`, toggle auth with `conf.SetAuthMode(config.AuthModePasswd)`, and prefer OAuth client tokens over non-admin fixtures for negative permission checks.
|
||||
- Registry data and secrets: store portal/node registry files under `conf.PortalConfigPath()/nodes/` with mode `0600`, keep secrets out of logs, and only return them on creation/rotation flows.
|
||||
|
||||
### Formatting (Go)
|
||||
|
||||
- Go is formatted by `gofmt` and uses tabs. Do not hand-format indentation.
|
||||
- Always run after edits: `make fmt-go` (gofmt + goimports).
|
||||
|
||||
### API Shape Checklist
|
||||
|
||||
- When renaming or adding fields:
|
||||
- Update DTOs in `internal/service/cluster/response.go` and any mappers.
|
||||
- Update handlers and regenerate Swagger: `make fmt-go swag-fmt swag`.
|
||||
- Update tests (search/replace old field names) and examples in `specs/`.
|
||||
- Quick grep: `rg -n 'oldField|newField' -S` across code, tests, and specs.
|
||||
|
||||
### API/CLI Tests: Known Pitfalls
|
||||
|
||||
- Gin routes: Register `CreateSession(router)` once per test router; reusing it twice panics on duplicate route.
|
||||
- CLI commands: Some commands defer `conf.Shutdown()` or emit signals that close the DB. The harness re‑opens DB before each run, but avoid invoking `start` or emitting signals in unit tests.
|
||||
- Signals: `internal/commands/start.go` waits on `process.Signal`; calling `process.Shutdown()/Restart()` can close DB. Prefer not to trigger signals in tests.
|
||||
|
||||
### Download CLI Workbench (yt-dlp, remux, importer)
|
||||
|
||||
- Code anchors
|
||||
- CLI flags and examples: `internal/commands/download.go`
|
||||
- Core implementation (testable): `internal/commands/download_impl.go`
|
||||
- yt-dlp helpers and arg wiring: `internal/photoprism/dl/*` (`options.go`, `info.go`, `file.go`, `meta.go`)
|
||||
- Importer entry point: `internal/photoprism/get/import.go`; options: `internal/photoprism/import_options.go`
|
||||
|
||||
- Quick test runs (fast feedback)
|
||||
- yt-dlp package: `go test ./internal/photoprism/dl -run 'Options|Created|PostprocessorArgs' -count=1`
|
||||
- CLI command: `go test ./internal/commands -run 'DownloadImpl|HelpFlags' -count=1`
|
||||
|
||||
- FFmpeg-less tests
|
||||
- In tests: set `c.Options().FFmpegBin = "/bin/false"` and `c.Settings().Index.Convert = false` to avoid ffmpeg dependencies when not validating remux.
|
||||
|
||||
- Stubbing yt-dlp (no network)
|
||||
- Use a tiny shell script that:
|
||||
- prints minimal JSON for `--dump-single-json`
|
||||
- creates a file and prints its path when `--print` is requested
|
||||
- Harness env vars (supported by our tests):
|
||||
- `YTDLP_ARGS_LOG` — append final args for assertion
|
||||
- `YTDLP_OUTPUT_FILE` — absolute file path to create for `--print`
|
||||
- `YTDLP_DUMMY_CONTENT` — file contents to avoid importer duplicate detection between tests
|
||||
|
||||
- Remux policy and metadata
|
||||
- Pipe method: PhotoPrism remux (ffmpeg) always embeds title/description/created.
|
||||
- File method: yt‑dlp writes files; we pass `--postprocessor-args 'ffmpeg:-metadata creation_time=<RFC3339>'` so imports get `Created` even without local remux (fallback from `upload_date`/`release_date`).
|
||||
- Default remux policy: `auto`; use `always` for the most complete metadata (chapters, extended tags).
|
||||
- CLI defaults: `photoprism dl` now defaults to `--method pipe` and `--impersonate firefox`; pass `-i none` to disable impersonation. Pipe mode streams raw media and PhotoPrism handles the final FFmpeg remux so metadata (title, description, author, creation time) still comes from `RemuxOptionsFromInfo`.
|
||||
|
||||
- Testing workflow: lean on the focused commands above; if importer dedupe kicks in, vary bytes with `YTDLP_DUMMY_CONTENT` or adjust `dest`, and remember `internal/photoprism` is heavy so validate downstream packages first.
|
||||
|
||||
### Sessions & Redaction (building sessions in tests)
|
||||
|
||||
- Admin session (full view): `AuthenticateAdmin(app, router)`.
|
||||
- User session: Create a non‑admin test user (role=guest), set a password, then `AuthenticateUser`.
|
||||
- Client session (redacted internal fields; `SiteUrl` visible):
|
||||
```go
|
||||
s, _ := entity.AddClientSession("test-client", conf.SessionMaxAge(), "cluster", authn.GrantClientCredentials, nil)
|
||||
token := s.AuthToken()
|
||||
r := AuthenticatedRequest(app, http.MethodGet, "/api/v1/cluster/nodes", token)
|
||||
```
|
||||
Admins see `AdvertiseUrl` and `Database`; client/user sessions don’t. `SiteUrl` is safe to show to all roles. Client config also includes `storageNamespace` (SHA-256 of `SiteUrl`) for browser storage scoping and is safe to expose.
|
||||
|
||||
### Preflight Checklist
|
||||
|
||||
- `go build ./...`
|
||||
- `make fmt-go swag-fmt swag`
|
||||
- `go test ./internal/service/cluster/registry -count=1`
|
||||
- `go test ./internal/api -run 'Cluster' -count=1`
|
||||
- `go test ./internal/commands -run 'ClusterRegister|ClusterNodesRotate' -count=1`
|
||||
- Tooling constraints: `make swag` may fetch modules, so confirm network access before running it.
|
||||
|
||||
### Cluster Operations
|
||||
|
||||
- Keep bootstrap code decoupled: avoid importing `internal/service/cluster/node/*` from `internal/config` or the cluster root, let nodes talk to the Portal over HTTP(S), and rely on constants from `internal/service/cluster/const.go`.
|
||||
- Bootstrap refreshes node OAuth credentials on 401/403 responses (rotate secret + retry) and logs the refresh at info level; if the secret file cannot be written, the value stays cached in memory so the current process can continue.
|
||||
- Portal validation now accepts HTTP advertise URLs only for loopback hosts or cluster-internal domains (`*.svc`, `*.cluster.local`, `*.internal`); everything else must use HTTPS.
|
||||
- Config init order: load `options.yml` (`c.initSettings()`), run `EarlyExt().InitEarly(c)`, connect/register the DB, then invoke `Ext().Init(c)`.
|
||||
- Theme endpoint: `GET /api/v1/cluster/theme` streams a zip from `conf.ThemePath()`; only reinstall when `app.js` is missing and always use the header helpers in `pkg/http/header`.
|
||||
- Registration flow: send `rotate=true` only for MySQL/MariaDB nodes without credentials, treat 401/403/404 as terminal, include `ClientID` + `ClientSecret` when renaming an existing node, and persist only newly generated secrets or DB settings.
|
||||
- Registry & DTOs: use the client-backed registry (`NewClientRegistryWithConfig`)—the file-backed version is legacy—and treat migration as complete only after swapping callsites, building, and running focused API/CLI tests. Nodes are keyed by UUID v7 (`/api/v1/cluster/nodes/{uuid}`), the registry interface stays UUID-first (`Get`, `FindByNodeUUID`, `FindByClientID`, `RotateSecret`, `DeleteAllByUUID`), CLI lookups resolve `uuid → ClientID → name`, and DTOs normalize `Database.{Name,User,Driver,RotatedAt}` while exposing `ClientSecret` only during creation/rotation. `nodes rm --all-ids` cleans duplicate client rows, admin responses may include `AdvertiseUrl`/`Database`, client/user sessions stay redacted, registry files live under `conf.PortalConfigPath()/nodes/` (mode 0600), and `ClientData` no longer stores `NodeUUID`.
|
||||
- Provisioner & DSN: database/user names use UUID-based HMACs (`<prefix>d<hmac11>`, `<prefix>u<hmac11>` where the prefix defaults to `cluster_` but may be overridden via the portal-only `database-provision-prefix` flag); `BuildDSN` accepts a `driver` but falls back to MySQL format with a warning when unsupported.
|
||||
- If we add Postgres provisioning support, extend `BuildDSN` and `provisioner.DatabaseDriver` handling, add validations, and return `driver=postgres` consistently in API/CLI.
|
||||
- Testing: exercise Portal endpoints with `httptest`, guard extraction paths with `pkg/fs.Unzip` size caps, and expect admin-only fields to disappear when authenticated as a client/user session.
|
||||
- Prefer existing caches, workers, and batching strategies already referenced by the code and `Makefile`.
|
||||
- Consider CPU and memory impact; only suggest profiling or benchmarks when justified.
|
||||
- If anything here conflicts with the `Makefile` or the sources of truth, ask for clarification before proceeding.
|
||||
|
||||
## Project Layout & Shared Rules
|
||||
|
||||
- Backend: Go in `internal/`, `pkg/`, and `cmd/`, backed by MariaDB or SQLite.
|
||||
- Frontend: Vue 3 plus Vuetify 3 under `frontend/`.
|
||||
- Local dev and CI use Docker Compose; Traefik provides local TLS via `*.localssl.dev`.
|
||||
- Code in `pkg/*` must not import from `internal/*`. If you need config, entity, or DB access, add code under `internal/`.
|
||||
- Shared Go rules:
|
||||
- After Go edits, run `make fmt-go` and keep `gofmt` tab indentation.
|
||||
- Every added/modified Go function, including unexported helpers, must have focused test coverage in the corresponding `*_test.go` files; update existing tests or add new ones as needed.
|
||||
- Every Go package must contain a root `<package>.go` file with the standard license header and a short package description comment.
|
||||
- Use `pkg/fs` permission constants: `fs.ModeDir`, `fs.ModeFile`, `fs.ModeConfigFile`, `fs.ModeSecretFile`, and `fs.ModeBackupFile`.
|
||||
- When importing the stdlib `io/fs`, alias it to avoid collisions, for example `iofs "io/fs"` or `gofs "io/fs"`.
|
||||
- Do not pass stdlib `io/fs` mode flags where permission bits are expected.
|
||||
- Prefer `filepath.Join` for filesystem paths and `path.Join` only for URL paths.
|
||||
- Normalize slash-based logical paths stored in DB, config, or API payloads with `clean.SlashPath(...)`.
|
||||
- Shared JS/Vue rules:
|
||||
- Added/modified JavaScript functions, including helpers, should be tested whenever practical; update existing tests or add new ones as needed.
|
||||
- Added/modified Vue components should have component-test coverage, and existing component tests should be updated as needed when behavior changes.
|
||||
- When adding a metadata source such as `SrcOllama` or `SrcOpenAI`, update both `internal/entity/src.go` and `frontend/src/common/util.js` so backend and UI stay aligned.
|
||||
|
||||
### JS/Go Code Comments
|
||||
|
||||
A doc comment is **required** for every function (including unexported helpers), as well as for every non-trivial Vue `methods:` / `computed:` / watcher:
|
||||
- Keep comments **compact** and default to one line for "what" in the format `// Name does X.`. Skip trivial getters (`isOpen: () => this.open`).
|
||||
- Add 1-2 follow-up lines (`// …`) **only** if the "why" is non-obvious: a hidden invariant, a workaround that would otherwise be undone by a future cleanup, a contract a reader can't infer from the code. If readers can infer the "why" from the function body or a nearby line, then omit it.
|
||||
- Multi-paragraph explanations belong in `specs/`, package `README.md` files, or GitHub issues — never in the source itself.
|
||||
|
||||
Doc comments for packages and exported identifiers must be complete sentences that begin with the name of the thing being described and end with a period. For short examples in comments, indent code instead of using backticks.
|
||||
|
||||
Use US English spelling in all code comments (`parameterized`, `behavior`, `color`, `serialize`, `normalize`, `optimize`, …) — not the British `-ised`/`-our`/`-re` variants.
|
||||
|
||||
> **Don't include in code comments:** Issue / PR numbers, "previously…" history, alternatives considered, what the function used to do, references to old commits, names of subsequent reviewers, or any narrative that names the change rather than the steady-state behavior. That context belongs in commit messages, specs, or handover notes.
|
||||
|
||||
## Agent Runtime
|
||||
|
||||
- Detect container mode by checking for `/.dockerenv`.
|
||||
- If the repo path is `/go/src/github.com/photoprism/photoprism` and `/.dockerenv` is absent, treat the environment as host mode with a bind mount and prefer host-side Docker commands.
|
||||
- Bash check: `[ -f "/.dockerenv" ] && echo container || echo host`
|
||||
- Node.js check: `require("fs").existsSync("/.dockerenv")`
|
||||
- Inside the container, prefer `npm exec --yes <agent> -- --help` or `npx <agent> ...`; if a global npm install is unavoidable, install it only inside the container.
|
||||
- The `photoprism/develop` base image and the repo `Makefile` both set `NPM_CONFIG_IGNORE_SCRIPTS=true`, so `npm ci`/`npm install` via `make` targets skip install scripts out of the box. When running npm directly in an environment that does not set or inherit that default, pass `--ignore-scripts` explicitly to mitigate supply-chain attacks. Rebuild native addons with `npm rebuild --ignore-scripts=false <pkg>` — a bare `npm rebuild` is a silent no-op wherever the env default is active.
|
||||
- On the host, use the vendor-recommended install method and run from the repository root so agent discovery sees this file.
|
||||
|
||||
## Build, Format & Test
|
||||
|
||||
- Run `make help` to see supported targets.
|
||||
- Host mode:
|
||||
- `make docker-build`
|
||||
- `docker compose up` or `docker compose up -d`
|
||||
- `docker compose logs -f --tail=100 photoprism`
|
||||
- `docker compose exec photoprism ./photoprism help`
|
||||
- `docker compose exec -u "$(id -u):$(id -g)" photoprism <command>` to avoid root-owned files
|
||||
- `make terminal`
|
||||
- `docker compose --profile=all down --remove-orphans` or `make down`
|
||||
- Container mode:
|
||||
- `make dep`
|
||||
- `make build-js` and `make build-go`
|
||||
- `make watch-js` or `cd frontend && npm run watch`
|
||||
- `./photoprism start`
|
||||
- Local URLs: `http://localhost:2342/` and, with Traefik, `https://app.localssl.dev/`
|
||||
- Local compose defaults to `admin` / `photoprism`; inspect `compose.yaml` if they differ.
|
||||
- Do not use the Docker CLI inside the container; manage Compose from the host instead.
|
||||
- The public CLI name is always `photoprism`; development-only side-by-side binaries may use edition-specific names.
|
||||
- Our command examples assume a Linux or Unix shell on 64-bit AMD64 or ARM64; see the Developer Guide FAQ for Windows-specific notes.
|
||||
|
||||
Formatting and test entry points:
|
||||
- Full suite: `make test`, `make lint`
|
||||
- Go-specific lint, format, and package-test rules live in [`internal/AGENTS.md`](internal/AGENTS.md).
|
||||
- Frontend lint, Vitest, acceptance, and Playwright rules live in [`frontend/AGENTS.md`](frontend/AGENTS.md).
|
||||
- Go tests live next to their sources; use PascalCase `t.Run(...)` names for related subtests. Keep consecutive subtests inside the same `Test*` function back-to-back without blank lines so the cases read as a compact table; reserve blank lines for separating distinct setup blocks.
|
||||
- Do not run multiple test commands in parallel; suites share fixtures, assets, and database state.
|
||||
- Prefer focused test runs such as `go test ./path/to/pkg -run Name -count=1` while iterating.
|
||||
- Use `mariadb -D photoprism` inside the dev shell when you need to inspect MariaDB state directly.
|
||||
- Run `shellcheck <file>` on edited shell scripts, or use the corresponding `make` target.
|
||||
|
||||
### Container Image Builds
|
||||
|
||||
- **Never mix Debian and Ubuntu `apt` repositories in the same image:**
|
||||
- Don't add a Debian source to an Ubuntu base (or vice versa) to install a single missing package — the transitive deps drift, apt's solver pulls newer libraries from the foreign distro, and other build steps in the same `RUN` (e.g. `install-libheif.sh` running `apt-get install libavcodec-dev`) silently link against the wrong soname.
|
||||
- Symptoms surface much later as `dlopen: libfoo.so.N: cannot open shared object file` at image runtime, with the binary referencing a soname that exists only in the foreign distro.
|
||||
- If a package isn't available in the host distro's repos, prefer (a) a same-distro PPA / backports source, (b) a vendor-supplied .deb (e.g. Google Chrome from `dl.google.com`), or (c) a from-source build pinned to a known version.
|
||||
|
|
|
|||
17
CODEMAP.md
|
|
@ -1,6 +1,6 @@
|
|||
PhotoPrism — Backend CODEMAP
|
||||
|
||||
**Last Updated:** February 25, 2026
|
||||
**Last Updated:** May 5, 2026
|
||||
|
||||
Purpose
|
||||
- Give agents and contributors a fast, reliable map of where things live and how they fit together, so you can add features, fix bugs, and write tests without spelunking.
|
||||
|
|
@ -35,17 +35,24 @@ High-Level Package Map (Go)
|
|||
- `internal/server` — HTTP server, middleware, routing, static/ui/webdav
|
||||
- `internal/config` — configuration, flags/env/options, client config, DB init/migrate
|
||||
- `internal/entity` — GORM v1 models, queries, search helpers, migrations
|
||||
- Label lookup helpers now live in `internal/entity/label*.go`; reuse `FindLabels(...)`, `FindLabelIDs(...)`, and `LabelSlugs(...)` for homophone-aware exact-name/slug resolution instead of duplicating slug SQL in callers.
|
||||
- `internal/photoprism` — core domain logic (indexing, import, faces, thumbnails, cleanup)
|
||||
- `internal/ai/vision` — multi-engine computer vision pipeline (models, adapters, schema). Adapter docs: [`internal/ai/vision/openai/README.md`](internal/ai/vision/openai/README.md) and [`internal/ai/vision/ollama/README.md`](internal/ai/vision/ollama/README.md).
|
||||
- `internal/workers` — background schedulers (index, vision, sync, meta, backup)
|
||||
- `internal/auth` — ACL, sessions, OIDC
|
||||
- `internal/service` — cluster/portal, maps, hub, webdav
|
||||
- WebDAV client docs: `internal/service/webdav/README.md`
|
||||
- Key WebDAV client behavior:
|
||||
- Recursive directory discovery prefers `PROPFIND Depth: infinity` and falls back to iterative `Depth: 1` traversal for incompatible servers.
|
||||
- Hidden dotfiles and entries inside hidden dot-directories are excluded from listings and fallback traversal because they often represent lock files, partial uploads, or provider metadata.
|
||||
- Service timeouts apply to control operations (`Files`, `Directories`, `Mkdir`, `Delete`), while `Upload` and `Download` avoid total request deadlines and instead use connection-level safeguards.
|
||||
- `internal/event` — logging, pub/sub, audit; canonical outcome tokens live in `pkg/log/status` (use helpers like `status.Error(err)` when the sanitized message should be the outcome). Docs: `internal/event/README.md`.
|
||||
- `internal/ffmpeg`, `internal/thumb`, `internal/meta`, `internal/form`, `internal/mutex` — media, thumbs, metadata, forms, coordination. Docs: `internal/ffmpeg/README.md`, `internal/meta/README.md`.
|
||||
- `pkg/*` — reusable utilities (must never import from `internal/*`), e.g. `pkg/clean`, `pkg/enum`, `pkg/fs`, `pkg/txt`, `pkg/http/header`
|
||||
|
||||
Templates & Static Assets
|
||||
- Entry HTML lives in `assets/templates/index.gohtml`, which includes the splash markup from `app.gohtml` and the SPA loader from `app.js.gohtml`.
|
||||
- OIDC login completion for the SPA is bridged through `assets/templates/auth.gohtml`, which clears legacy/namespaced session keys and writes the session into the preferred namespaced browser store selected by the login UI toggle in `frontend/src/page/auth/login.vue`.
|
||||
- The browser check logic resides in `assets/static/js/browser-check.js` and is included via `app.js.gohtml`; it performs capability checks (Promise, fetch, AbortController, `script.noModule`, etc.) before the main bundle runs.
|
||||
- Update this file (and the partial) in lockstep with `pro/assets/templates/index.gohtml`, `plus/assets/templates/index.gohtml`, and `portal/assets/templates/index.gohtml`, because those editions import the same partial.
|
||||
- Keep the script tag order unchanged so the browser check executes before the main bundle.
|
||||
|
|
@ -63,7 +70,7 @@ HTTP API
|
|||
- `make swag-json` runs a stabilization step (`swaggerfix`) removing duplicated enums for `time.Duration`; API uses integer nanoseconds for durations.
|
||||
- `/api/v1/metrics` (see `internal/api/metrics.go`) exposes Prometheus metrics, including cached filesystem/account usage derived from `config.Usage()`, registered user/guest totals, and portal cluster node counts when `NodeRole=portal`; the handler returns the standard Prometheus exposition content type (`text/plain; version=0.0.4`).
|
||||
- Common groups in `routes.go`: sessions, OAuth/OIDC, config, users, services, thumbnails, video, downloads/zip, index/import, photos/files/labels/subjects/faces, batch ops, cluster, technical (metrics, status, echo).
|
||||
- Hidden search behavior (used by the hidden route under the configured frontend URI, default `/library/hidden` for CE/Plus/Pro and `/portal/admin/hidden` for Portal) is implemented in `internal/entity/search/photos.go`:
|
||||
- Hidden search behavior (used by the hidden route under the configured frontend URI, default `/library/hidden` for CE/Plus/Pro and `/portal/hidden` for Portal) is implemented in `internal/entity/search/photos.go`:
|
||||
- `frm.Hidden` enforces `photos.photo_quality = -1` and `photos.deleted_at IS NULL`.
|
||||
- Non-hidden searches exclude errored files by default (`files.file_error = ''`) unless `frm.Error` is explicitly set.
|
||||
- Search DTOs in `internal/entity/search/photos_results.go` expose `FileError` (`files.file_error`) so clients can render hidden reasons without loading full file details first.
|
||||
|
|
@ -129,7 +136,6 @@ Cluster / Portal
|
|||
- Registry/provisioner: `internal/service/cluster/registry/*`, `internal/service/cluster/provisioner/*`.
|
||||
- Theme endpoint (server): GET `/api/v1/cluster/theme`; client/CLI installs theme only if missing or no `app.js`.
|
||||
- Portal-only extensions: `portal/internal/portal` (Portal defaults, flags, provisioning options, `/i/*` proxy router).
|
||||
- See specs cheat sheet: `specs/portal/README.md`.
|
||||
|
||||
Logging & Events
|
||||
- Logger and event hub: `internal/event/*`; `event.Log` is the shared logger.
|
||||
|
|
@ -236,8 +242,8 @@ Cluster Registry & Provisioner Cheatsheet
|
|||
- Registration returns `Secrets.ClientSecret`; the CLI persists it under config `NodeClientSecret`.
|
||||
- Admin responses may include `AdvertiseUrl` and `Database`; non-admin responses are redacted by default.
|
||||
- Cluster CLI highlights:
|
||||
- `photoprism cluster register` supports `--site-url` and `--advertise-url`. Both values are always forwarded to the Portal; `SiteUrl` no longer depends on being different from the advertised URL.
|
||||
- Automatic MariaDB credential rotation logic now lives in `config.ShouldAutoRotateDatabase()` and is shared by both the CLI and node bootstrap.
|
||||
- `photoprism cluster register` supports `--site-url` and `--advertise-url`. Both values are always forwarded to the Portal regardless of whether they differ.
|
||||
- Automatic MariaDB credential rotation logic lives in `config.ShouldAutoRotateDatabase()` and is shared by both the CLI and node bootstrap.
|
||||
|
||||
Frequently Touched Files (by topic)
|
||||
- CLI wiring: `cmd/photoprism/photoprism.go`, `internal/commands/commands.go`
|
||||
|
|
@ -282,7 +288,6 @@ Useful Make Targets (selection)
|
|||
See Also
|
||||
- AGENTS.md (repository rules and tips for agents)
|
||||
- Developer Guide (Setup/Tests/API) — links in AGENTS.md → Sources of Truth
|
||||
- Specs: `specs/dev/backend-testing.md`, `specs/dev/api-docs-swagger.md`, `specs/portal/README.md`
|
||||
|
||||
Go Internal Import Rule
|
||||
- Keep temporary Go helpers inside `internal/...`; the Go toolchain blocks importing `internal/` packages from directories such as `/tmp`, so use a disposable path like `internal/tmp/` when you need scratch space.
|
||||
|
|
|
|||
|
|
@ -1,8 +1,8 @@
|
|||
# PhotoPrism® Code of Conduct
|
||||
|
||||
**By using the software and services we provide, you agree to our [Terms of Service](https://www.photoprism.app/terms), including our [Privacy Policy](https://www.photoprism.app/privacy) and the following Code of Conduct. It explains the "dos and don’ts" when interacting with our team and other community members.**
|
||||
**By using the software and services we provide, you agree to our [Terms of Service](https://www.photoprism.app/terms/), including our [Privacy Policy](https://www.photoprism.app/privacy/) and the following Code of Conduct. It explains the "dos and don’ts" when interacting with our team and other community members.**
|
||||
|
||||
*This Code of Conduct was last updated on May 6, 2024. A German translation is available at [photoprism.app/de/code-of-conduct](https://www.photoprism.app/de/code-of-conduct).*
|
||||
*This Code of Conduct was last updated on May 30, 2026. A German translation is available at [photoprism.app/de/code-of-conduct](https://www.photoprism.app/de/code-of-conduct/).*
|
||||
|
||||
## Rules
|
||||
|
||||
|
|
@ -30,16 +30,12 @@ We have found that many of the issues that new users get upset about when they r
|
|||
|
||||
## Reporting
|
||||
|
||||
We encourage all community members to resolve problems on their own whenever possible. Serious and persistent violations, such as disrespectful, abusive, harassing, or otherwise unacceptable behavior, [may be reported](https://www.photoprism.app/contact) to us.
|
||||
We encourage all community members to resolve problems on their own whenever possible. Serious and persistent violations, such as disrespectful, abusive, harassing, or otherwise unacceptable behavior, [may be reported](https://www.photoprism.app/contact/) to us.
|
||||
|
||||
## Enforcement
|
||||
|
||||
Our community standards will be enforced as necessary to protect everyone's well-being and to ensure that our discussion forums, chat rooms, and other infrastructure can be used as intended.
|
||||
Our community standards will be enforced as necessary to protect everyone's well-being and ensure our discussion forums, chat rooms, and other infrastructure, such as GitHub, can be used as intended.
|
||||
|
||||
Initial warnings may be issued in the form of a [snarky comment](https://www.urbandictionary.com/define.php?term=snarky), especially if you seem reckless or [surprisingly harsh](https://github.com/photoprism/photoprism/issues/281#issuecomment-1207233135). In serious cases, we will provide a link to this Code of Conduct to avoid misunderstandings. We also reserve the right to delete rants, personal attacks, spam, and unsolicited advertising from our community forums.
|
||||
In cases where violations may be unintentional and improvement seems possible, we aim to issue warnings before taking further action.
|
||||
|
||||
Getting a simple **\*plonk\***[^1] in response finally signals that we have lost hope and you're being ignored according to **Rule #3**. This old tradition from Usenet days is as time-saving as it is clear. It is not meant in a disrespectful way.
|
||||
|
||||
In addition, we may use technical measures to temporarily or permanently restrict your access to our infrastructure, including forums and chats.
|
||||
|
||||
[^1]: \*plonk\* including variants such as "Plonk." stands for the metaphorical sound of a user hitting the bottom of the kill file. It was first used in [Usenet forums](https://en.everybodywiki.com/Plonk_(Usenet)), a worldwide distributed discussion system and precursor to the Web.
|
||||
In serious cases, we may use technical measures to restrict your access to our infrastructure, including GitHub, forums, and chats, either temporarily or permanently. We also reserve the right to delete rants, personal attacks, spam, and unsolicited advertisements. If you believe we made a mistake, you may [email us](https://www.photoprism.app/contact/) to request an appeal.
|
||||
|
|
@ -4,9 +4,9 @@ We welcome contributions of any kind, including blog posts, tutorials, testing,
|
|||
|
||||
## Join the Community ##
|
||||
|
||||
Follow us on [Mastodon](https://floss.social/@photoprism), [Bluesky](https://bsky.app/profile/photoprism.app), or join the [Community Chat](https://link.photoprism.app/chat) to get regular updates, connect with other users, and discuss your ideas. Our [Code of Conduct](https://www.photoprism.app/code-of-conduct) explains the "dos and don’ts" when interacting with other community members.
|
||||
Follow us on [Mastodon](https://floss.social/@photoprism), [Bluesky](https://bsky.app/profile/photoprism.app), or join the [Community Chat](https://link.photoprism.app/chat) to get regular updates, connect with other users, and discuss your ideas. Our [Code of Conduct](https://www.photoprism.app/code-of-conduct/) explains the "dos and don’ts" when interacting with other community members.
|
||||
|
||||
As a [contributor](https://docs.photoprism.app/developer-guide/), you are also welcome to [contact us directly](https://www.photoprism.app/contact) if you have something on your mind that you don't want to discuss publicly. Please note, however, that due to the high volume of emails we receive, our team may be unable to get back to you immediately. We do our best to respond within five business days or less.
|
||||
As a [contributor](https://docs.photoprism.app/developer-guide/), you are also welcome to [contact us directly](https://www.photoprism.app/contact/) if you have something on your mind that you don't want to discuss publicly. Please note, however, that due to the high volume of emails we receive, our team may be unable to get back to you immediately. We do our best to respond within five business days or less.
|
||||
|
||||
## Not a Developer? No Problem ##
|
||||
|
||||
|
|
@ -36,20 +36,22 @@ We kindly ask you not to report bugs via GitHub Issues **unless you are certain
|
|||
|
||||
- When reporting a problem, always include the software versions you are using and other information about your environment such as [browser, browser plugins](https://docs.photoprism.app/getting-started/troubleshooting/browsers/), operating system, [storage type](https://docs.photoprism.app/getting-started/troubleshooting/performance/#storage), [memory size](https://docs.photoprism.app/getting-started/troubleshooting/performance/#memory), and [processor](https://docs.photoprism.app/getting-started/troubleshooting/performance/#server-cpu)
|
||||
- Note that all issue **subscribers receive an email notification** from GitHub whenever a new comment is added, so these should only be used for sharing important information and not for discussions, questions or expressing personal opinions
|
||||
- [Contact us](https://www.photoprism.app/contact) or [a community member](https://link.photoprism.app/discussions) if you need help, it could be a local configuration problem, or a misunderstanding in how the software works
|
||||
- [Contact us](https://www.photoprism.app/contact/) or [a community member](https://link.photoprism.app/discussions) if you need help, it could be a local configuration problem, or a misunderstanding in how the software works
|
||||
- This gives our team the opportunity to [improve the docs](https://docs.photoprism.app/getting-started/troubleshooting/) and provide best-in-class support to you, instead of handling unclear/duplicate bug reports or triggering a flood of notifications by responding to comments
|
||||
|
||||
## Submitting Pull Requests ##
|
||||
|
||||
Follow our [step-by-step guide](https://docs.photoprism.app/developer-guide/pull-requests) to learn how to submit new features, bug fixes, and documentation enhancements.
|
||||
|
||||
You are welcome to use AI tools for research, drafting, or other supporting tasks. However, we do not accept fully AI-generated pull requests at this time. Every contribution must be carefully reviewed, tested, and understood by a human contributor who can discuss the implementation details and maintain the change afterward.
|
||||
|
||||
Pull requests solving ["help wanted"](https://github.com/photoprism/photoprism/labels/help%20wanted) issues are the easiest to merge and the most helpful to us, as they allow us to spend more time on core functionality and other issues that are difficult for external contributors to work on. If you are new to this project, anything labeled ["easy"](https://github.com/photoprism/photoprism/labels/easy) may be a good first contribution.
|
||||
|
||||
**Be aware that reviewing, testing and finally merging pull requests requires significant resources on our side. It can therefore take several months if it is not just a small fix, especially if extensive testing is needed to prevent bugs from getting into our stable version.**
|
||||
|
||||
## Contributor License Agreement (CLA) ##
|
||||
|
||||
After you submit your first pull request, you will be asked to accept our Contributor License Agreement (CLA). Visit [photoprism.app/cla](https://www.photoprism.app/cla) and [photoprism.app/oss/faq](https://www.photoprism.app/oss/faq#cla) to learn more.
|
||||
After you submit your first pull request, you will be asked to accept our Contributor License Agreement (CLA). Visit [photoprism.app/cla](https://www.photoprism.app/cla/) and [photoprism.app/oss/faq](https://www.photoprism.app/oss/faq/#cla) to learn more.
|
||||
|
||||
## Thank You to All Current and Past Sponsors 💎 ##
|
||||
|
||||
|
|
@ -74,4 +76,4 @@ Because many of these apps and tools were originally developed for internal use
|
|||
|
||||
----
|
||||
|
||||
*PhotoPrism® is a [registered trademark](https://www.photoprism.app/trademark). By using the software and services we provide, you agree to our [Terms of Service](https://www.photoprism.app/terms), [Privacy Policy](https://www.photoprism.app/privacy), and [Code of Conduct](https://www.photoprism.app/code-of-conduct). Docs are [available](https://link.photoprism.app/github-docs) under the [CC BY-NC-SA 4.0 License](https://creativecommons.org/licenses/by-nc-sa/4.0/); [additional terms](https://github.com/photoprism/photoprism/blob/develop/assets/README.md) may apply.*
|
||||
*PhotoPrism® is a [registered trademark](https://www.photoprism.app/trademark/). By using the software and services we provide, you agree to our [Terms of Service](https://www.photoprism.app/terms/), [Privacy Policy](https://www.photoprism.app/privacy/), and [Code of Conduct](https://www.photoprism.app/code-of-conduct/). Docs are [available](https://link.photoprism.app/github-docs) under the [CC BY-NC-SA 4.0 License](https://creativecommons.org/licenses/by-nc-sa/4.0/); [additional terms](https://github.com/photoprism/photoprism/blob/develop/assets/README.md) may apply.*
|
||||
|
|
|
|||
21
Dockerfile
|
|
@ -1,10 +1,11 @@
|
|||
# Ubuntu 25.10 (Questing Quokka)
|
||||
FROM photoprism/develop:260301-questing
|
||||
# Ubuntu 26.04 LTS (Resolute Raccoon)
|
||||
FROM photoprism/develop:260709-resolute
|
||||
|
||||
# Harden npm usage by default (applies to npm ci / install in dev container)
|
||||
ENV NPM_CONFIG_IGNORE_SCRIPTS=true
|
||||
|
||||
## Alternative Environments:
|
||||
# FROM photoprism/develop:questing # Ubuntu 25.10 (Questing Quokka)
|
||||
# FROM photoprism/develop:plucky # Ubuntu 25.04 (Plucky Puffin)
|
||||
# FROM photoprism/develop:armv7 # ARMv7 (32bit)
|
||||
# FROM photoprism/develop:oracular # Ubuntu 24.10 (Oracular Oriole)
|
||||
|
|
@ -17,11 +18,21 @@ ENV NPM_CONFIG_IGNORE_SCRIPTS=true
|
|||
# FROM photoprism/develop:bullseye # Debian 11 (Bullseye)
|
||||
# FROM photoprism/develop:buster # Debian 10 (Buster)
|
||||
|
||||
# Set default working directory.
|
||||
WORKDIR "/go/src/github.com/photoprism/photoprism"
|
||||
# Set default working directory. Override WORKING_DIR (e.g. via compose build
|
||||
# args populated from .env) to match a custom host-side clone layout; the value
|
||||
# must stay aligned with compose's working_dir and the source bind mount target.
|
||||
ARG WORKING_DIR=/go/src/github.com/photoprism/photoprism
|
||||
WORKDIR "${WORKING_DIR}"
|
||||
|
||||
# Copy source to image.
|
||||
COPY . .
|
||||
COPY --chown=root:root /scripts/dist/ /scripts/
|
||||
|
||||
# Update scripts in image.
|
||||
COPY --chown=root:root ./scripts/dist/ /scripts/
|
||||
|
||||
# Re-install the dev "mariadb" client config so a custom MARIADB_PORT in .env
|
||||
# is honored even when the base image was built before the port=<n> line was
|
||||
# removed (no-op once the next dated base image picks up the new .my.cnf).
|
||||
COPY --chown=root:root --chmod=644 ./.my.cnf /etc/my.cnf
|
||||
|
||||
RUN sudo /scripts/install-yt-dlp.sh
|
||||
|
|
|
|||
|
|
@ -1,3 +1,3 @@
|
|||
custom: "https://www.photoprism.app/editions#compare"
|
||||
custom: "https://www.photoprism.app/editions/#compare"
|
||||
github: photoprism
|
||||
patreon: photoprism
|
||||
|
|
@ -4,7 +4,7 @@
|
|||
|
||||
### Purpose & Scope
|
||||
|
||||
- This is the single source of truth for terminology used across `specs/` and related docs.
|
||||
- This is the single source of truth for terminology used across PhotoPrism documentation.
|
||||
- Define terms once here and reference this file instead of redefining the same terms in multiple documents.
|
||||
- Keep technical/API contract names unchanged where required, even when user-facing wording differs.
|
||||
|
||||
|
|
|
|||
2
LICENSE
|
|
@ -625,7 +625,7 @@ corporate design, product and service names, and any other brand features
|
|||
and elements, whether registered or unregistered („Brand Assets“) — are
|
||||
proprietary assets owned exclusively by PhotoPrism UG („PhotoPrism“). We
|
||||
reserve the right to object to any use or misuse in any jurisdiction
|
||||
worldwide. Visit <https://www.photoprism.app/trademark> to learn more.
|
||||
worldwide. Visit <https://www.photoprism.app/trademark/> to learn more.
|
||||
|
||||
(b) Contributors, licensees, business partners, and other third parties
|
||||
may never claim ownership of PhotoPrism's Brand Assets or brands confusingly
|
||||
|
|
|
|||
268
Makefile
|
|
@ -1,4 +1,4 @@
|
|||
# Copyright © 2018 - 2025 PhotoPrism UG. All rights reserved.
|
||||
# Copyright © 2018 - 2026 PhotoPrism UG. All rights reserved.
|
||||
#
|
||||
# Questions? Email us at hello@photoprism.app or visit our website to learn
|
||||
# more about our team, products and services: https://www.photoprism.app/
|
||||
|
|
@ -6,6 +6,11 @@
|
|||
export GO111MODULE=on
|
||||
export NPM_CONFIG_IGNORE_SCRIPTS ?= true
|
||||
|
||||
ifneq (,$(wildcard .telemetry))
|
||||
include .telemetry
|
||||
export $(shell sed -n 's/^[[:space:]]*\([A-Z_][A-Z0-9_]*\)=.*/\1/p' .telemetry)
|
||||
endif
|
||||
|
||||
-include .semver
|
||||
-include .env
|
||||
|
||||
|
|
@ -34,6 +39,7 @@ BUILD_ARCH ?= $(shell ./scripts/dist/arch.sh)
|
|||
export BUILD_ARCH
|
||||
JS_BUILD_PATH ?= $(shell realpath "./assets/static/build")
|
||||
TF_VERSION ?= 2.18.0
|
||||
WORKING_DIR ?= /go/src/github.com/photoprism/photoprism
|
||||
|
||||
# Install parameters.
|
||||
INSTALL_PATH ?= $(BUILD_PATH)/photoprism-ce_$(BUILD_TAG)-$(shell echo $(BUILD_OS) | tr '[:upper:]' '[:lower:]')-$(BUILD_ARCH)
|
||||
|
|
@ -83,23 +89,25 @@ test-commands: run-test-commands
|
|||
test-photoprism: run-test-photoprism
|
||||
test-short: run-test-short
|
||||
test-mariadb: reset-acceptance run-test-mariadb
|
||||
acceptance-run-chromium: storage/acceptance acceptance-auth-sqlite-restart wait acceptance-auth acceptance-auth-sqlite-stop acceptance-sqlite-restart wait-2 acceptance acceptance-sqlite-stop
|
||||
acceptance-run-chromium-short: storage/acceptance acceptance-auth-sqlite-restart wait acceptance-auth-short acceptance-auth-sqlite-stop acceptance-sqlite-restart wait-2 acceptance-short acceptance-sqlite-stop
|
||||
acceptance-auth-run-chromium: storage/acceptance acceptance-auth-sqlite-restart wait acceptance-auth acceptance-auth-sqlite-stop
|
||||
acceptance-public-run-chromium: storage/acceptance acceptance-sqlite-restart wait acceptance acceptance-sqlite-stop
|
||||
acceptance-run-chromium: storage/acceptance acceptance-sqlite-restart-1 wait-1 acceptance-api acceptance-sqlite-stop-1 acceptance-auth-sqlite-restart wait-2 acceptance-auth acceptance-auth-sqlite-stop acceptance-sqlite-restart-3 wait-3 acceptance acceptance-sqlite-stop-3
|
||||
acceptance-run-chromium-short: storage/acceptance acceptance-auth-sqlite-restart wait-1 acceptance-auth-short acceptance-auth-sqlite-stop acceptance-sqlite-restart-2 wait-2 acceptance-short acceptance-sqlite-stop-2
|
||||
acceptance-auth-run-chromium: storage/acceptance acceptance-auth-sqlite-restart wait-1 acceptance-auth acceptance-auth-sqlite-stop
|
||||
acceptance-public-run-chromium: storage/acceptance acceptance-sqlite-restart-1 wait-1 acceptance acceptance-sqlite-stop-1
|
||||
acceptance-api-run-chromium: storage/acceptance acceptance-sqlite-restart-1 wait-1 acceptance-api acceptance-sqlite-stop-1
|
||||
help: list
|
||||
list:
|
||||
@awk '/^[[:alnum:]]+[^[:space:]]+:/ {printf "%s",substr($$1,1,length($$1)-1); if (match($$0,/#/)) {desc=substr($$0,RSTART+1); sub(/^[[:space:]]+/,"",desc); printf " - %s\n",desc} else printf "\n" }' "$(firstword $(MAKEFILE_LIST))"
|
||||
wait:
|
||||
sleep 20
|
||||
wait-2:
|
||||
wait-%:
|
||||
sleep 20
|
||||
show-rev:
|
||||
@git rev-parse HEAD
|
||||
show-build:
|
||||
@echo "$(BUILD_TAG)"
|
||||
tag-release:
|
||||
scripts/tag-release.sh $(EDITION) $(TAG_ARGS)
|
||||
test-all: test acceptance-run-chromium
|
||||
fmt: fmt-js fmt-go fmt-swag
|
||||
format: format-tables fmt-go fmt-swag
|
||||
format-tables: # Format Markdown tables in README.md, AGENTS.md, and CODEMAP.md files.
|
||||
@set -eu; \
|
||||
tmp="$$(mktemp)"; \
|
||||
|
|
@ -121,7 +129,8 @@ devtools: install-go dep-npm
|
|||
.SILENT: help;
|
||||
logs:
|
||||
$(DOCKER_COMPOSE) logs -f
|
||||
down:
|
||||
down: docker-down
|
||||
docker-down:
|
||||
$(DOCKER_COMPOSE) --profile=all down --remove-orphans
|
||||
docs: swag
|
||||
swag: swag-json
|
||||
|
|
@ -156,10 +165,10 @@ notice:
|
|||
fix-permissions:
|
||||
$(info Updating filesystem permissions...)
|
||||
@if [ $(UID) != 0 ]; then\
|
||||
echo "Running \"chown --preserve-root -Rcf $(UID):$(GID) /go /photoprism /opt/photoprism /tmp/photoprism\". Please wait."; \
|
||||
sudo chown --preserve-root -Rcf $(UID):$(GID) /go /photoprism /opt/photoprism /tmp/photoprism || true;\
|
||||
echo "Running \"chmod --preserve-root -Rcf u+rwX /go/src/github.com/photoprism/* /photoprism /opt/photoprism /tmp/photoprism\". Please wait.";\
|
||||
sudo chmod --preserve-root -Rcf u+rwX /go/src/github.com/photoprism/photoprism/* /photoprism /opt/photoprism /tmp/photoprism || true;\
|
||||
echo "Running \"chown --preserve-root -Rcf $(UID):$(GID) /go $(WORKING_DIR) /photoprism /opt/photoprism /tmp/photoprism\". Please wait."; \
|
||||
sudo chown --preserve-root -Rcf $(UID):$(GID) /go $(WORKING_DIR) /photoprism /opt/photoprism /tmp/photoprism || true;\
|
||||
echo "Running \"chmod --preserve-root -Rcf u+rwX $(WORKING_DIR)/* /photoprism /opt/photoprism /tmp/photoprism\". Please wait.";\
|
||||
sudo chmod --preserve-root -Rcf u+rwX $(WORKING_DIR)/* /photoprism /opt/photoprism /tmp/photoprism || true;\
|
||||
echo "Done."; \
|
||||
else\
|
||||
echo "Running as root. Nothing to do."; \
|
||||
|
|
@ -172,6 +181,8 @@ gettext-compile:
|
|||
$(MAKE) -C frontend gettext-compile
|
||||
gettext-clear-fuzzy:
|
||||
./scripts/gettext-clear-fuzzy.sh
|
||||
gettext-lint:
|
||||
node scripts/gettext-lint.mjs
|
||||
clean:
|
||||
rm -f *.log .test*
|
||||
[ ! -f "$(BINARY_NAME)" ] || rm -f $(BINARY_NAME)
|
||||
|
|
@ -216,7 +227,7 @@ install-onnx:
|
|||
sudo scripts/dist/install-onnx.sh
|
||||
install-darktable:
|
||||
sudo scripts/dist/install-darktable.sh
|
||||
acceptance-sqlite-restart:
|
||||
acceptance-sqlite-restart-%: acceptance-sqlite-stop-%
|
||||
cp -f storage/acceptance/backup.db storage/acceptance/index.db
|
||||
cp -f storage/acceptance/config-sqlite/settingsBackup.yml storage/acceptance/config-sqlite/settings.yml
|
||||
rm -rf storage/acceptance/sidecar/2020
|
||||
|
|
@ -227,9 +238,9 @@ acceptance-sqlite-restart:
|
|||
rm -rf storage/acceptance/originals/2013
|
||||
rm -rf storage/acceptance/originals/2017
|
||||
./photoprism --auth-mode="public" -c "./storage/acceptance/config-sqlite" start -d
|
||||
acceptance-sqlite-stop:
|
||||
acceptance-sqlite-stop-%:
|
||||
./photoprism --auth-mode="public" -c "./storage/acceptance/config-sqlite" stop
|
||||
acceptance-auth-sqlite-restart:
|
||||
acceptance-auth-sqlite-restart: acceptance-auth-sqlite-stop
|
||||
cp -f storage/acceptance/backup.db storage/acceptance/index.db
|
||||
cp -f storage/acceptance/config-sqlite/settingsBackup.yml storage/acceptance/config-sqlite/settings.yml
|
||||
./photoprism --auth-mode="password" -c "./storage/acceptance/config-sqlite" start -d
|
||||
|
|
@ -270,9 +281,9 @@ dep-list:
|
|||
go list -u -m -json all | go-mod-outdated -direct
|
||||
dep-list-all:
|
||||
go list -u -m -json all | go-mod-outdated
|
||||
vuln: audit
|
||||
audit: audit-frontend audit-backend
|
||||
audit-frontend:
|
||||
$(MAKE) -C frontend audit
|
||||
audit-frontend: npm-audit
|
||||
audit-backend: dep-vuln
|
||||
dep-audit: dep-vuln
|
||||
dep-vuln:
|
||||
|
|
@ -290,22 +301,53 @@ npm-version:
|
|||
dep-npm:
|
||||
@echo "Installing NPM package manager..."
|
||||
@if command -v sudo >/dev/null 2>&1; then \
|
||||
sudo npm install -g --location=global --no-fund --no-audit "npm@latest"; \
|
||||
sudo npm install -g --location=global --ignore-scripts --no-audit --no-fund --no-update-notifier "npm@latest"; \
|
||||
else \
|
||||
npm install -g --location=global --no-fund --no-audit "npm@latest"; \
|
||||
npm install -g --location=global --ignore-scripts --no-audit --no-fund --no-update-notifier "npm@latest"; \
|
||||
fi
|
||||
dep-js:
|
||||
npm ci --ignore-scripts --no-update-notifier --no-audit
|
||||
codex: dep-codex codex-version
|
||||
dep-js: npm-ci
|
||||
npm-ci:
|
||||
$(info Clean install of NPM dependencies...)
|
||||
npm ci --ignore-scripts --no-audit --no-fund --no-update-notifier
|
||||
npm-install:
|
||||
$(info Installing NPM dependencies...)
|
||||
npm install --save --ignore-scripts --no-audit --no-fund --no-update-notifier
|
||||
npm-update:
|
||||
$(info Updating NPM dependencies in package.json and package-lock.json...)
|
||||
npm update --save --package-lock --ignore-scripts --no-audit --no-fund --no-update-notifier
|
||||
npm-audit:
|
||||
npm audit --ignore-scripts --no-fund --no-update-notifier
|
||||
tools: gh claude codex
|
||||
codex: dep-codex codex-version codex-skills
|
||||
codex-version:
|
||||
@echo "🤖 Installed $$(codex --version)."
|
||||
dep-codex:
|
||||
@echo "Installing Codex CLI..."
|
||||
@[ -n "$(CODEX_HOME)" ] && [ "$(CODEX_HOME)" != "/" ] && install -d -m 700 -- "$(CODEX_HOME)" || true
|
||||
@if command -v sudo >/dev/null 2>&1; then \
|
||||
sudo npm install -g --location=global --no-fund --no-audit "@openai/codex@latest"; \
|
||||
sudo npm install -g --location=global --ignore-scripts --no-audit --no-fund --no-update-notifier "@openai/codex@latest"; \
|
||||
else \
|
||||
npm install -g --location=global --no-fund --no-audit "@openai/codex@latest"; \
|
||||
npm install -g --location=global --ignore-scripts --no-audit --no-fund --no-update-notifier "@openai/codex@latest"; \
|
||||
fi
|
||||
skills: agents-skills claude-skills
|
||||
agents-skills: codex-skills
|
||||
codex-skills:
|
||||
@if [ -d "specs/.agents/skills" ]; then \
|
||||
echo "Linking Codex skills from specs/.agents/skills..."; \
|
||||
install -d -m 755 -- ".agents/skills"; \
|
||||
for src in specs/.agents/skills/*/; do \
|
||||
[ -d "$$src" ] || continue; \
|
||||
name=$$(basename "$$src"); \
|
||||
link=".agents/skills/$$name"; \
|
||||
target="../../specs/.agents/skills/$$name"; \
|
||||
if [ -L "$$link" ] || [ ! -e "$$link" ]; then \
|
||||
ln -sfn "$$target" "$$link"; \
|
||||
else \
|
||||
echo "WARNING: $$link exists and is not a symlink, skipping"; \
|
||||
fi; \
|
||||
done; \
|
||||
else \
|
||||
echo "No specs/.agents/skills directory found, skipping."; \
|
||||
fi
|
||||
gh: dep-gh gh-version
|
||||
gh-version:
|
||||
|
|
@ -326,27 +368,34 @@ dep-gh:
|
|||
echo "ERROR: Could not install gh automatically. See https://cli.github.com/"; \
|
||||
exit 1; \
|
||||
fi
|
||||
claude:
|
||||
@echo "Installing Claude Code..."
|
||||
@[ -n "$(HOME)" ] && [ "$(HOME)" != "/" ] || (echo "ERROR: Unsafe HOME path '$(HOME)'"; exit 1)
|
||||
@if [ -e "$(HOME)/.cache" ] && [ ! -w "$(HOME)/.cache" ]; then \
|
||||
echo "Fixing ownership of \"$(HOME)/.cache\"..."; \
|
||||
if command -v sudo >/dev/null 2>&1; then \
|
||||
sudo chown "$(UID):$(GID)" "$(HOME)/.cache"; \
|
||||
else \
|
||||
chown "$(UID):$(GID)" "$(HOME)/.cache"; \
|
||||
fi; \
|
||||
claude: claude-skills
|
||||
@[ -n "$(HOME)" ] && [ "$(HOME)" != "/" ] && install -d -m 755 -- "$(HOME)/.local/bin" || true
|
||||
@[ -n "$(CLAUDE_CONFIG_DIR)" ] && [ "$(CLAUDE_CONFIG_DIR)" != "/" ] && install -d -m 755 -- "$(CLAUDE_CONFIG_DIR)" || true
|
||||
@if command -v claude >/dev/null 2>&1; then \
|
||||
echo "Updating Claude Code..."; \
|
||||
claude update; \
|
||||
else \
|
||||
echo "Installing Claude Code..."; \
|
||||
curl -fsSL https://claude.ai/install.sh | bash; \
|
||||
fi
|
||||
@if [ -e "$(HOME)/.cache/claude" ] && [ ! -w "$(HOME)/.cache/claude" ]; then \
|
||||
echo "Fixing ownership of \"$(HOME)/.cache/claude\"..."; \
|
||||
if command -v sudo >/dev/null 2>&1; then \
|
||||
sudo chown -R "$(UID):$(GID)" "$(HOME)/.cache/claude"; \
|
||||
else \
|
||||
chown -R "$(UID):$(GID)" "$(HOME)/.cache/claude"; \
|
||||
fi; \
|
||||
claude-skills:
|
||||
@if [ -d "specs/.claude/skills" ]; then \
|
||||
echo "Linking Claude Code skills from specs/.claude/skills..."; \
|
||||
install -d -m 755 -- ".claude/skills"; \
|
||||
for src in specs/.claude/skills/*/; do \
|
||||
[ -d "$$src" ] || continue; \
|
||||
name=$$(basename "$$src"); \
|
||||
link=".claude/skills/$$name"; \
|
||||
target="../../specs/.claude/skills/$$name"; \
|
||||
if [ -L "$$link" ] || [ ! -e "$$link" ]; then \
|
||||
ln -sfn "$$target" "$$link"; \
|
||||
else \
|
||||
echo "WARNING: $$link exists and is not a symlink, skipping"; \
|
||||
fi; \
|
||||
done; \
|
||||
else \
|
||||
echo "No specs/.claude/skills directory found, skipping."; \
|
||||
fi
|
||||
install -d -m 700 -- "$(HOME)/.cache/claude"
|
||||
curl -fsSL https://claude.ai/install.sh | bash
|
||||
dep-go:
|
||||
go build -v ./...
|
||||
dep-upgrade:
|
||||
|
|
@ -371,6 +420,7 @@ zip-nsfw:
|
|||
(cd assets && zip -r nsfw.zip nsfw -x "*/.*" -x "*/version.txt")
|
||||
build-js:
|
||||
(cd frontend && env BUILD_ENV=production NODE_ENV=production npm run build)
|
||||
(cd frontend && node scripts/precompress.js)
|
||||
build-go: build-develop
|
||||
build-develop:
|
||||
rm -f $(BINARY_NAME)
|
||||
|
|
@ -389,32 +439,43 @@ build-static:
|
|||
scripts/build.sh static $(BINARY_NAME)
|
||||
build-libheif: build-libheif-amd64 build-libheif-arm64 build-libheif-armv7
|
||||
build-libheif-amd64:
|
||||
docker run --rm -u $(UID) --platform=amd64 --pull=always -v ".:/go/src/github.com/photoprism/photoprism" -e BUILD_ARCH=amd64 -e SYSTEM_ARCH=amd64 photoprism/develop:questing ./scripts/dist/build-libheif.sh v1.20.2
|
||||
docker run --rm -u $(UID) --platform=amd64 --pull=always -v ".:/go/src/github.com/photoprism/photoprism" -e BUILD_ARCH=amd64 -e SYSTEM_ARCH=amd64 photoprism/develop:plucky ./scripts/dist/build-libheif.sh v1.20.2
|
||||
docker run --rm -u $(UID) --platform=amd64 --pull=always -v ".:/go/src/github.com/photoprism/photoprism" -e BUILD_ARCH=amd64 -e SYSTEM_ARCH=amd64 photoprism/develop:noble ./scripts/dist/build-libheif.sh v1.20.2
|
||||
docker run --rm -u $(UID) --platform=amd64 --pull=always -v ".:/go/src/github.com/photoprism/photoprism" -e BUILD_ARCH=amd64 -e SYSTEM_ARCH=amd64 photoprism/develop:jammy ./scripts/dist/build-libheif.sh v1.20.2
|
||||
docker run --rm -u $(UID) --platform=amd64 --pull=always -v ".:/go/src/github.com/photoprism/photoprism" -e BUILD_ARCH=amd64 -e SYSTEM_ARCH=amd64 photoprism/develop:bookworm ./scripts/dist/build-libheif.sh v1.20.2
|
||||
docker run --rm -u $(UID) --platform=amd64 --pull=always -v ".:/go/src/github.com/photoprism/photoprism" -e BUILD_ARCH=amd64 -e SYSTEM_ARCH=amd64 photoprism/develop:resolute ./scripts/dist/build-libheif.sh v1.23.1
|
||||
docker run --rm -u $(UID) --platform=amd64 --pull=always -v ".:/go/src/github.com/photoprism/photoprism" -e BUILD_ARCH=amd64 -e SYSTEM_ARCH=amd64 photoprism/develop:questing ./scripts/dist/build-libheif.sh v1.23.1
|
||||
docker run --rm -u $(UID) --platform=amd64 --pull=always -v ".:/go/src/github.com/photoprism/photoprism" -e BUILD_ARCH=amd64 -e SYSTEM_ARCH=amd64 photoprism/develop:plucky ./scripts/dist/build-libheif.sh v1.23.1
|
||||
docker run --rm -u $(UID) --platform=amd64 --pull=always -v ".:/go/src/github.com/photoprism/photoprism" -e BUILD_ARCH=amd64 -e SYSTEM_ARCH=amd64 photoprism/develop:noble ./scripts/dist/build-libheif.sh v1.23.1
|
||||
docker run --rm -u $(UID) --platform=amd64 --pull=always -v ".:/go/src/github.com/photoprism/photoprism" -e BUILD_ARCH=amd64 -e SYSTEM_ARCH=amd64 photoprism/develop:jammy ./scripts/dist/build-libheif.sh v1.23.1
|
||||
docker run --rm -u $(UID) --platform=amd64 --pull=always -v ".:/go/src/github.com/photoprism/photoprism" -e BUILD_ARCH=amd64 -e SYSTEM_ARCH=amd64 photoprism/develop:bookworm ./scripts/dist/build-libheif.sh v1.23.1
|
||||
docker run --rm -u $(UID) --platform=amd64 --pull=always -v ".:/go/src/github.com/photoprism/photoprism" -e BUILD_ARCH=amd64 -e SYSTEM_ARCH=amd64 photoprism/develop:trixie ./scripts/dist/build-libheif.sh v1.23.1
|
||||
build-libheif-arm64:
|
||||
docker run --rm -u $(UID) --platform=arm64 --pull=always -v ".:/go/src/github.com/photoprism/photoprism" -e BUILD_ARCH=arm64 -e SYSTEM_ARCH=arm64 photoprism/develop:questing ./scripts/dist/build-libheif.sh v1.20.2
|
||||
docker run --rm -u $(UID) --platform=arm64 --pull=always -v ".:/go/src/github.com/photoprism/photoprism" -e BUILD_ARCH=arm64 -e SYSTEM_ARCH=arm64 photoprism/develop:plucky ./scripts/dist/build-libheif.sh v1.20.2
|
||||
docker run --rm -u $(UID) --platform=arm64 --pull=always -v ".:/go/src/github.com/photoprism/photoprism" -e BUILD_ARCH=arm64 -e SYSTEM_ARCH=arm64 photoprism/develop:noble ./scripts/dist/build-libheif.sh v1.20.2
|
||||
docker run --rm -u $(UID) --platform=arm64 --pull=always -v ".:/go/src/github.com/photoprism/photoprism" -e BUILD_ARCH=arm64 -e SYSTEM_ARCH=arm64 photoprism/develop:jammy ./scripts/dist/build-libheif.sh v1.20.2
|
||||
docker run --rm -u $(UID) --platform=arm64 --pull=always -v ".:/go/src/github.com/photoprism/photoprism" -e BUILD_ARCH=arm64 -e SYSTEM_ARCH=arm64 photoprism/develop:bookworm ./scripts/dist/build-libheif.sh v1.20.2
|
||||
docker run --rm -u $(UID) --platform=arm64 --pull=always -v ".:/go/src/github.com/photoprism/photoprism" -e BUILD_ARCH=arm64 -e SYSTEM_ARCH=arm64 photoprism/develop:resolute ./scripts/dist/build-libheif.sh v1.23.1
|
||||
docker run --rm -u $(UID) --platform=arm64 --pull=always -v ".:/go/src/github.com/photoprism/photoprism" -e BUILD_ARCH=arm64 -e SYSTEM_ARCH=arm64 photoprism/develop:questing ./scripts/dist/build-libheif.sh v1.23.1
|
||||
docker run --rm -u $(UID) --platform=arm64 --pull=always -v ".:/go/src/github.com/photoprism/photoprism" -e BUILD_ARCH=arm64 -e SYSTEM_ARCH=arm64 photoprism/develop:plucky ./scripts/dist/build-libheif.sh v1.23.1
|
||||
docker run --rm -u $(UID) --platform=arm64 --pull=always -v ".:/go/src/github.com/photoprism/photoprism" -e BUILD_ARCH=arm64 -e SYSTEM_ARCH=arm64 photoprism/develop:noble ./scripts/dist/build-libheif.sh v1.23.1
|
||||
docker run --rm -u $(UID) --platform=arm64 --pull=always -v ".:/go/src/github.com/photoprism/photoprism" -e BUILD_ARCH=arm64 -e SYSTEM_ARCH=arm64 photoprism/develop:jammy ./scripts/dist/build-libheif.sh v1.23.1
|
||||
docker run --rm -u $(UID) --platform=arm64 --pull=always -v ".:/go/src/github.com/photoprism/photoprism" -e BUILD_ARCH=arm64 -e SYSTEM_ARCH=arm64 photoprism/develop:bookworm ./scripts/dist/build-libheif.sh v1.23.1
|
||||
docker run --rm -u $(UID) --platform=arm64 --pull=always -v ".:/go/src/github.com/photoprism/photoprism" -e BUILD_ARCH=arm64 -e SYSTEM_ARCH=arm64 photoprism/develop:trixie ./scripts/dist/build-libheif.sh v1.23.1
|
||||
build-libheif-armv7:
|
||||
docker run --rm -u $(UID) --platform=arm --pull=always -v ".:/go/src/github.com/photoprism/photoprism" -e BUILD_ARCH=arm -e SYSTEM_ARCH=arm photoprism/develop:armv7 ./scripts/dist/build-libheif.sh v1.20.2
|
||||
docker run --rm -u $(UID) --platform=arm --pull=always -v ".:/go/src/github.com/photoprism/photoprism" -e BUILD_ARCH=arm -e SYSTEM_ARCH=arm photoprism/develop:armv7 ./scripts/dist/build-libheif.sh v1.23.1
|
||||
build-libheif-latest: build-libheif-amd64-latest build-libheif-arm64-latest build-libheif-armv7-latest
|
||||
build-libheif-amd64-latest:
|
||||
docker run --rm -u $(UID) --platform=amd64 --pull=always -v ".:/go/src/github.com/photoprism/photoprism" -e BUILD_ARCH=amd64 -e SYSTEM_ARCH=amd64 photoprism/develop:resolute ./scripts/dist/build-libheif.sh
|
||||
docker run --rm -u $(UID) --platform=amd64 --pull=always -v ".:/go/src/github.com/photoprism/photoprism" -e BUILD_ARCH=amd64 -e SYSTEM_ARCH=amd64 photoprism/develop:questing ./scripts/dist/build-libheif.sh
|
||||
docker run --rm -u $(UID) --platform=amd64 --pull=always -v ".:/go/src/github.com/photoprism/photoprism" -e BUILD_ARCH=amd64 -e SYSTEM_ARCH=amd64 photoprism/develop:plucky ./scripts/dist/build-libheif.sh
|
||||
docker run --rm -u $(UID) --platform=amd64 --pull=always -v ".:/go/src/github.com/photoprism/photoprism" -e BUILD_ARCH=amd64 -e SYSTEM_ARCH=amd64 photoprism/develop:noble ./scripts/dist/build-libheif.sh
|
||||
docker run --rm -u $(UID) --platform=amd64 --pull=always -v ".:/go/src/github.com/photoprism/photoprism" -e BUILD_ARCH=amd64 -e SYSTEM_ARCH=amd64 photoprism/develop:jammy ./scripts/dist/build-libheif.sh
|
||||
build-libheif-arm64-latest:
|
||||
docker run --rm -u $(UID) --platform=arm64 --pull=always -v ".:/go/src/github.com/photoprism/photoprism" -e BUILD_ARCH=arm64 -e SYSTEM_ARCH=arm64 photoprism/develop:resolute ./scripts/dist/build-libheif.sh
|
||||
docker run --rm -u $(UID) --platform=arm64 --pull=always -v ".:/go/src/github.com/photoprism/photoprism" -e BUILD_ARCH=arm64 -e SYSTEM_ARCH=arm64 photoprism/develop:questing ./scripts/dist/build-libheif.sh
|
||||
docker run --rm -u $(UID) --platform=arm64 --pull=always -v ".:/go/src/github.com/photoprism/photoprism" -e BUILD_ARCH=arm64 -e SYSTEM_ARCH=arm64 photoprism/develop:plucky ./scripts/dist/build-libheif.sh
|
||||
docker run --rm -u $(UID) --platform=arm64 --pull=always -v ".:/go/src/github.com/photoprism/photoprism" -e BUILD_ARCH=arm64 -e SYSTEM_ARCH=arm64 photoprism/develop:noble ./scripts/dist/build-libheif.sh
|
||||
docker run --rm -u $(UID) --platform=arm64 --pull=always -v ".:/go/src/github.com/photoprism/photoprism" -e BUILD_ARCH=arm64 -e SYSTEM_ARCH=arm64 photoprism/develop:jammy ./scripts/dist/build-libheif.sh
|
||||
build-libheif-armv7-latest:
|
||||
docker run --rm -u $(UID) --platform=arm --pull=always -v ".:/go/src/github.com/photoprism/photoprism" -e BUILD_ARCH=arm -e SYSTEM_ARCH=arm photoprism/develop:armv7 ./scripts/dist/build-libheif.sh
|
||||
build-libheif-deb: build-libheif-deb-amd64 build-libheif-deb-arm64
|
||||
build-libheif-deb-amd64:
|
||||
docker run --rm -u $(UID) --platform=amd64 --pull=always -v ".:/go/src/github.com/photoprism/photoprism" -e BUILD_ARCH=amd64 -e SYSTEM_ARCH=amd64 photoprism/develop:resolute ./scripts/dist/build-libheif-deb.sh v1.23.1
|
||||
build-libheif-deb-arm64:
|
||||
docker run --rm -u $(UID) --platform=arm64 --pull=always -v ".:/go/src/github.com/photoprism/photoprism" -e BUILD_ARCH=arm64 -e SYSTEM_ARCH=arm64 photoprism/develop:resolute ./scripts/dist/build-libheif-deb.sh v1.23.1
|
||||
build-tensorflow: docker-tensorflow-amd64
|
||||
docker-tensorflow: docker-tensorflow-amd64
|
||||
docker-tensorflow-amd64:
|
||||
|
|
@ -433,26 +494,30 @@ build-setup: build-setup-nas-raspberry-pi
|
|||
build-setup-nas-raspberry-pi:
|
||||
./scripts/setup/nas/raspberry-pi/build.sh
|
||||
watch-js:
|
||||
(cd frontend && node scripts/precompress.js --clean)
|
||||
(cd frontend && env BUILD_ENV=development NODE_ENV=production npm run watch)
|
||||
test-js:
|
||||
$(info Running JS unit tests...)
|
||||
(cd frontend && npm run test)
|
||||
acceptance:
|
||||
$(info Running public-mode tests in Chrome...)
|
||||
(cd frontend && find ./tests/acceptance -type f -name "*.js" | xargs -i perl -0777 -ne 'while(/(?:mode: \"auth[^,]*\,)|(Multi-Window\:[A-Za-z 0-9\-_]*)/g){print "$$1\n" if ($$1);}' {} | xargs -I testname bash -c 'npm run testcafe -- "chrome --headless=new --use-gl=angle --use-angle=swiftshader --disable-features=LocalNetworkAccessChecks" --experimental-multiple-windows --test-meta mode=public --config-file ./testcaferc.json --test "testname" "tests/acceptance"')
|
||||
(cd frontend && npm run testcafe -- "chrome --headless=new --use-gl=angle --use-angle=swiftshader --disable-features=LocalNetworkAccessChecks" --test-grep "^(Common|Core)\:*" --test-meta mode=public --config-file ./testcaferc.json "tests/acceptance")
|
||||
(cd frontend && find ./tests/acceptance -type f -name "*.js" | xargs -i perl -0777 -ne 'while(/(?:mode: \"auth[^,]*\,)|(Multi-Window\:[A-Za-z 0-9\-_]*)/g){print "$$1\n" if ($$1);}' {} | xargs -I testname bash -c 'npm run testcafe -- "chrome --headless=new --use-gl=angle --use-angle=swiftshader --disable-features=LocalNetworkAccessChecks" --experimental-multiple-windows --test-meta mode=public --config-file ./.testcaferc.cjs --test "testname" "tests/acceptance"')
|
||||
(cd frontend && npm run testcafe -- "chrome --headless=new --use-gl=angle --use-angle=swiftshader --disable-features=LocalNetworkAccessChecks" --test-grep "^(Common|Core)\:*" --test-meta mode=public --config-file ./.testcaferc.cjs "tests/acceptance")
|
||||
acceptance-short:
|
||||
$(info Running JS acceptance tests in Chrome...)
|
||||
(cd frontend && find ./tests/acceptance -type f -name "*.js" | xargs -i perl -0777 -ne 'while(/(?:mode: \"auth[^,]*\,)|(Multi-Window\:[A-Za-z 0-9\-_]*)/g){print "$$1\n" if ($$1);}' {} | xargs -I testname bash -c 'npm run testcafe -- "chrome --headless=new --use-gl=angle --use-angle=swiftshader --disable-features=LocalNetworkAccessChecks" --experimental-multiple-windows --test-meta mode=public,type=short --config-file ./testcaferc.json --test "testname" "tests/acceptance"')
|
||||
(cd frontend && npm run testcafe -- "chrome --headless=new --use-gl=angle --use-angle=swiftshader --disable-features=LocalNetworkAccessChecks" --test-grep "^(Common|Core)\:*" --test-meta mode=public,type=short --config-file ./testcaferc.json "tests/acceptance")
|
||||
(cd frontend && find ./tests/acceptance -type f -name "*.js" | xargs -i perl -0777 -ne 'while(/(?:mode: \"auth[^,]*\,)|(Multi-Window\:[A-Za-z 0-9\-_]*)/g){print "$$1\n" if ($$1);}' {} | xargs -I testname bash -c 'npm run testcafe -- "chrome --headless=new --use-gl=angle --use-angle=swiftshader --disable-features=LocalNetworkAccessChecks" --experimental-multiple-windows --test-meta mode=public,type=short --config-file ./.testcaferc.cjs --test "testname" "tests/acceptance"')
|
||||
(cd frontend && npm run testcafe -- "chrome --headless=new --use-gl=angle --use-angle=swiftshader --disable-features=LocalNetworkAccessChecks" --test-grep "^(Common|Core)\:*" --test-meta mode=public,type=short --config-file ./.testcaferc.cjs "tests/acceptance")
|
||||
acceptance-auth:
|
||||
$(info Running JS acceptance-auth tests in Chrome...)
|
||||
(cd frontend && find ./tests/acceptance -type f -name "*.js" | xargs -i perl -0777 -ne 'while(/(?:mode: \"public[^,]*\,)|(Multi-Window\:[A-Za-z 0-9\-_]*)/g){print "$$1\n" if ($$1);}' {} | xargs -I testname bash -c 'npm run testcafe -- "chrome --headless=new --use-gl=angle --use-angle=swiftshader --disable-features=LocalNetworkAccessChecks" --experimental-multiple-windows --test-meta mode=auth --config-file ./testcaferc.json --test "testname" "tests/acceptance"')
|
||||
(cd frontend && npm run testcafe -- "chrome --headless=new --use-gl=angle --use-angle=swiftshader --disable-features=LocalNetworkAccessChecks" --test-grep "^(Common|Core)\:*" --test-meta mode=auth --config-file ./testcaferc.json "tests/acceptance")
|
||||
(cd frontend && find ./tests/acceptance -type f -name "*.js" | xargs -i perl -0777 -ne 'while(/(?:mode: \"public[^,]*\,)|(Multi-Window\:[A-Za-z 0-9\-_]*)/g){print "$$1\n" if ($$1);}' {} | xargs -I testname bash -c 'npm run testcafe -- "chrome --headless=new --use-gl=angle --use-angle=swiftshader --disable-features=LocalNetworkAccessChecks" --experimental-multiple-windows --test-meta mode=auth --config-file ./.testcaferc.cjs --test "testname" "tests/acceptance"')
|
||||
(cd frontend && npm run testcafe -- "chrome --headless=new --use-gl=angle --use-angle=swiftshader --disable-features=LocalNetworkAccessChecks" --test-grep "^(Common|Core)\:*" --test-meta mode=auth --config-file ./.testcaferc.cjs "tests/acceptance")
|
||||
acceptance-auth-short:
|
||||
$(info Running JS acceptance-auth tests in Chrome...)
|
||||
(cd frontend && find ./tests/acceptance -type f -name "*.js" | xargs -i perl -0777 -ne 'while(/(?:mode: \"public[^,]*\,)|(Multi-Window\:[A-Za-z 0-9\-_]*)/g){print "$$1\n" if ($$1);}' {} | xargs -I testname bash -c 'npm run testcafe -- "chrome --headless=new --use-gl=angle --use-angle=swiftshader --disable-features=LocalNetworkAccessChecks" --experimental-multiple-windows --test-meta mode=auth,type=short --config-file ./testcaferc.json --test "testname" "tests/acceptance"')
|
||||
(cd frontend && npm run testcafe -- "chrome --headless=new --use-gl=angle --use-angle=swiftshader --disable-features=LocalNetworkAccessChecks" --test-grep "^(Common|Core)\:*" --test-meta mode=auth,type=short --config-file ./testcaferc.json "tests/acceptance")
|
||||
(cd frontend && find ./tests/acceptance -type f -name "*.js" | xargs -i perl -0777 -ne 'while(/(?:mode: \"public[^,]*\,)|(Multi-Window\:[A-Za-z 0-9\-_]*)/g){print "$$1\n" if ($$1);}' {} | xargs -I testname bash -c 'npm run testcafe -- "chrome --headless=new --use-gl=angle --use-angle=swiftshader --disable-features=LocalNetworkAccessChecks" --experimental-multiple-windows --test-meta mode=auth,type=short --config-file ./.testcaferc.cjs --test "testname" "tests/acceptance"')
|
||||
(cd frontend && npm run testcafe -- "chrome --headless=new --use-gl=angle --use-angle=swiftshader --disable-features=LocalNetworkAccessChecks" --test-grep "^(Common|Core)\:*" --test-meta mode=auth,type=short --config-file ./.testcaferc.cjs "tests/acceptance")
|
||||
acceptance-api:
|
||||
$(info Running JS acceptance-api tests in Chrome...)
|
||||
(cd frontend && npm run testcafe -- "chrome --headless=new --use-gl=angle --use-angle=swiftshader --disable-features=LocalNetworkAccessChecks" --test-meta mode=api --config-file ./.testcaferc.cjs "tests/acceptance")
|
||||
vitest-watch:
|
||||
$(info Running Vitest unit tests in watch mode...)
|
||||
(cd frontend && npm run test-watch)
|
||||
|
|
@ -491,7 +556,7 @@ run-test-hub:
|
|||
env PHOTOPRISM_TEST_HUB="true" $(GOTEST) -parallel 1 -count 1 -cpu 1 -tags="slow,develop,debug" -timeout 20m ./pkg/... ./internal/...
|
||||
run-test-mariadb:
|
||||
$(info Running all Go tests on MariaDB...)
|
||||
PHOTOPRISM_TEST_DRIVER="mysql" PHOTOPRISM_TEST_DSN="root:photoprism@tcp(mariadb:4001)/acceptance?charset=utf8mb4,utf8&collation=utf8mb4_unicode_ci&parseTime=true" $(GOTEST) -parallel 1 -count 1 -cpu 1 -tags="slow,develop" -timeout 20m ./pkg/... ./internal/...
|
||||
PHOTOPRISM_TEST_DRIVER="mysql" PHOTOPRISM_TEST_DSN="root:photoprism@tcp(mariadb:$${MARIADB_PORT:-4001})/acceptance?charset=utf8mb4,utf8&collation=utf8mb4_unicode_ci&parseTime=true" $(GOTEST) -parallel 1 -count 1 -cpu 1 -tags="slow,develop" -timeout 20m ./pkg/... ./internal/...
|
||||
run-test-pkg:
|
||||
$(info Running all Go tests in "/pkg"...)
|
||||
$(GOTEST) -parallel 2 -count 1 -cpu 2 -tags="slow,develop" -timeout 20m ./pkg/...
|
||||
|
|
@ -546,7 +611,7 @@ docker-pull:
|
|||
$(DOCKER_COMPOSE) -f compose.latest.yaml pull --ignore-pull-failures
|
||||
build-docker: docker-build
|
||||
docker-build:
|
||||
$(DOCKER_COMPOSE) --profile=all pull --ignore-pull-failures
|
||||
$(DOCKER_COMPOSE) --profile=postgres --profile=keycloak pull --ignore-pull-failures
|
||||
$(DOCKER_COMPOSE) down --remove-orphans
|
||||
$(DOCKER_COMPOSE) build --pull
|
||||
nvidia: nvidia-up
|
||||
|
|
@ -572,7 +637,8 @@ docker-develop: docker-develop-latest
|
|||
docker-develop-all: docker-develop-latest docker-develop-other
|
||||
docker-develop-latest: docker-develop-ubuntu
|
||||
docker-develop-debian: docker-develop-bookworm docker-develop-bookworm-slim
|
||||
docker-develop-ubuntu: docker-develop-questing docker-develop-questing-slim
|
||||
docker-develop-ubuntu: docker-develop-resolute docker-develop-resolute-slim
|
||||
docker-develop-legacy: docker-develop-jammy docker-develop-jammy-slim
|
||||
docker-develop-other: docker-develop-debian docker-develop-bullseye docker-develop-bullseye-slim docker-develop-buster
|
||||
docker-develop-bookworm:
|
||||
docker pull --platform=amd64 debian:bookworm-slim
|
||||
|
|
@ -583,6 +649,14 @@ docker-develop-bookworm-slim:
|
|||
docker pull --platform=amd64 debian:bookworm-slim
|
||||
docker pull --platform=arm64 debian:bookworm-slim
|
||||
scripts/docker/buildx-multi.sh develop linux/amd64,linux/arm64 bookworm-slim /bookworm-slim
|
||||
docker-develop-trixie:
|
||||
docker pull --platform=amd64 debian:trixie-slim
|
||||
docker pull --platform=arm64 debian:trixie-slim
|
||||
scripts/docker/buildx-multi.sh develop linux/amd64,linux/arm64 trixie /trixie
|
||||
docker-develop-trixie-slim:
|
||||
docker pull --platform=amd64 debian:trixie-slim
|
||||
docker pull --platform=arm64 debian:trixie-slim
|
||||
scripts/docker/buildx-multi.sh develop linux/amd64,linux/arm64 trixie-slim /trixie-slim
|
||||
docker-develop-bullseye:
|
||||
docker pull --platform=amd64 golang:1-bullseye
|
||||
docker pull --platform=arm64 golang:1-bullseye
|
||||
|
|
@ -655,11 +729,19 @@ docker-develop-plucky-slim:
|
|||
docker-develop-questing:
|
||||
docker pull --platform=amd64 ubuntu:questing
|
||||
docker pull --platform=arm64 ubuntu:questing
|
||||
scripts/docker/buildx-multi.sh develop linux/amd64,linux/arm64 questing /questing "-t photoprism/develop:latest -t photoprism/develop:ubuntu"
|
||||
scripts/docker/buildx-multi.sh develop linux/amd64,linux/arm64 questing /questing
|
||||
docker-develop-questing-slim:
|
||||
docker pull --platform=amd64 ubuntu:questing
|
||||
docker pull --platform=arm64 ubuntu:questing
|
||||
scripts/docker/buildx-multi.sh develop linux/amd64,linux/arm64 questing-slim /questing-slim
|
||||
docker-develop-resolute:
|
||||
docker pull --platform=amd64 ubuntu:resolute
|
||||
docker pull --platform=arm64 ubuntu:resolute
|
||||
scripts/docker/buildx-multi.sh develop linux/amd64,linux/arm64 resolute /resolute "-t photoprism/develop:latest -t photoprism/develop:ubuntu"
|
||||
docker-develop-resolute-slim:
|
||||
docker pull --platform=amd64 ubuntu:resolute
|
||||
docker pull --platform=arm64 ubuntu:resolute
|
||||
scripts/docker/buildx-multi.sh develop linux/amd64,linux/arm64 resolute-slim /resolute-slim
|
||||
unstable: docker-unstable
|
||||
docker-unstable: docker-unstable-mantic
|
||||
docker-unstable-jammy:
|
||||
|
|
@ -677,10 +759,10 @@ docker-unstable-mantic:
|
|||
preview: docker-preview-ce
|
||||
docker-preview: docker-preview-ce
|
||||
docker-preview-all: docker-preview-latest docker-preview-other
|
||||
docker-preview-ce: docker-preview-questing
|
||||
docker-preview-ce: docker-preview-resolute
|
||||
docker-preview-latest: docker-preview-ubuntu
|
||||
docker-preview-debian: docker-preview-bookworm
|
||||
docker-preview-ubuntu: docker-preview-questing
|
||||
docker-preview-ubuntu: docker-preview-resolute
|
||||
docker-preview-other: docker-preview-debian docker-preview-bullseye
|
||||
docker-preview-arm: docker-preview-arm64 docker-preview-armv7
|
||||
docker-preview-bookworm:
|
||||
|
|
@ -756,13 +838,19 @@ docker-preview-questing:
|
|||
docker pull --platform=amd64 photoprism/develop:questing-slim
|
||||
docker pull --platform=arm64 photoprism/develop:questing
|
||||
docker pull --platform=arm64 photoprism/develop:questing-slim
|
||||
scripts/docker/buildx-multi.sh photoprism linux/amd64,linux/arm64 preview-ce /questing
|
||||
scripts/docker/buildx-multi.sh photoprism linux/amd64,linux/arm64 preview-questing /questing
|
||||
docker-preview-resolute:
|
||||
docker pull --platform=amd64 photoprism/develop:resolute
|
||||
docker pull --platform=amd64 photoprism/develop:resolute-slim
|
||||
docker pull --platform=arm64 photoprism/develop:resolute
|
||||
docker pull --platform=arm64 photoprism/develop:resolute-slim
|
||||
scripts/docker/buildx-multi.sh photoprism linux/amd64,linux/arm64 preview-ce /resolute
|
||||
release: docker-release
|
||||
docker-release: docker-release-latest
|
||||
docker-release-all: docker-release-latest docker-release-other
|
||||
docker-release-latest: docker-release-ubuntu
|
||||
docker-release-debian: docker-release-bookworm
|
||||
docker-release-ubuntu: docker-release-questing
|
||||
docker-release-ubuntu: docker-release-resolute
|
||||
docker-release-other: docker-release-debian docker-release-bullseye
|
||||
docker-release-arm: docker-release-arm64 docker-release-armv7
|
||||
docker-release-bookworm:
|
||||
|
|
@ -838,7 +926,13 @@ docker-release-questing:
|
|||
docker pull --platform=amd64 photoprism/develop:questing-slim
|
||||
docker pull --platform=arm64 photoprism/develop:questing
|
||||
docker pull --platform=arm64 photoprism/develop:questing-slim
|
||||
scripts/docker/buildx-multi.sh photoprism linux/amd64,linux/arm64 ce /questing
|
||||
scripts/docker/buildx-multi.sh photoprism linux/amd64,linux/arm64 ce-questing /questing
|
||||
docker-release-resolute:
|
||||
docker pull --platform=amd64 photoprism/develop:resolute
|
||||
docker pull --platform=amd64 photoprism/develop:resolute-slim
|
||||
docker pull --platform=arm64 photoprism/develop:resolute
|
||||
docker pull --platform=arm64 photoprism/develop:resolute-slim
|
||||
scripts/docker/buildx-multi.sh photoprism linux/amd64,linux/arm64 ce /resolute
|
||||
start-traefik:
|
||||
$(DOCKER_COMPOSE) up -d --wait traefik
|
||||
stop-traefik:
|
||||
|
|
@ -885,16 +979,20 @@ terminal-preview:
|
|||
$(DOCKER_COMPOSE) -f compose.preview.yaml exec photoprism-preview bash
|
||||
logs-preview:
|
||||
$(DOCKER_COMPOSE) -f compose.preview.yaml logs -f photoprism-preview
|
||||
docker-local: docker-local-questing
|
||||
docker-local: docker-local-resolute
|
||||
docker-local-up:
|
||||
$(DOCKER_COMPOSE) -f compose.local.yaml up --force-recreate
|
||||
docker-local-down:
|
||||
$(DOCKER_COMPOSE) -f compose.local.yaml down --remove-orphans
|
||||
docker-local-all: docker-local-questing docker-local-plucky docker-local-oracular docker-local-noble docker-local-mantic docker-local-lunar docker-local-jammy docker-local-bookworm docker-local-bullseye docker-local-buster
|
||||
docker-local-all: docker-local-resolute docker-local-questing docker-local-plucky docker-local-oracular docker-local-noble docker-local-mantic docker-local-lunar docker-local-jammy docker-local-bookworm docker-local-bullseye docker-local-buster
|
||||
docker-local-bookworm:
|
||||
docker pull photoprism/develop:bookworm
|
||||
docker pull photoprism/develop:bookworm-slim
|
||||
scripts/docker/build.sh photoprism ce-bookworm /bookworm "-t photoprism/photoprism:local"
|
||||
docker-local-trixie:
|
||||
docker pull photoprism/develop:trixie
|
||||
docker pull debian:trixie-slim
|
||||
scripts/docker/build.sh photoprism ce-trixie /trixie "-t photoprism/photoprism:local"
|
||||
docker-local-bullseye:
|
||||
docker pull photoprism/develop:bullseye
|
||||
docker pull photoprism/develop:bullseye-slim
|
||||
|
|
@ -935,12 +1033,19 @@ docker-local-plucky:
|
|||
docker pull photoprism/develop:plucky
|
||||
docker pull ubuntu:plucky
|
||||
scripts/docker/build.sh photoprism ce-plucky /plucky "-t photoprism/photoprism:local"
|
||||
docker-local-resolute:
|
||||
docker pull photoprism/develop:resolute
|
||||
docker pull ubuntu:resolute
|
||||
scripts/docker/build.sh photoprism ce-resolute /resolute "-t photoprism/photoprism:local"
|
||||
local-develop: docker-local-develop
|
||||
docker-local-develop: docker-local-develop-questing
|
||||
docker-local-develop-all: docker-local-develop-questing docker-local-develop-oracular docker-local-develop-noble docker-local-develop-mantic docker-local-develop-lunar docker-local-develop-jammy docker-local-develop-bookworm docker-local-develop-bullseye docker-local-develop-buster docker-local-develop-impish
|
||||
docker-local-develop: docker-local-develop-resolute
|
||||
docker-local-develop-all: docker-local-develop-resolute docker-local-develop-questing docker-local-develop-oracular docker-local-develop-noble docker-local-develop-mantic docker-local-develop-lunar docker-local-develop-jammy docker-local-develop-bookworm docker-local-develop-bullseye docker-local-develop-buster docker-local-develop-impish
|
||||
docker-local-develop-bookworm:
|
||||
docker pull debian:bookworm-slim
|
||||
scripts/docker/build.sh develop bookworm /bookworm
|
||||
docker-local-develop-trixie:
|
||||
docker pull debian:trixie-slim
|
||||
scripts/docker/build.sh develop trixie /trixie
|
||||
docker-local-develop-bullseye:
|
||||
docker pull golang:1-bullseye
|
||||
scripts/docker/build.sh develop bullseye /bullseye
|
||||
|
|
@ -971,12 +1076,12 @@ docker-local-develop-questing:
|
|||
docker-local-develop-plucky:
|
||||
docker pull ubuntu:plucky
|
||||
scripts/docker/build.sh develop plucky /plucky
|
||||
docker-local-develop-resolute:
|
||||
docker pull ubuntu:resolute
|
||||
scripts/docker/build.sh develop resolute /resolute
|
||||
docker-ddns:
|
||||
docker pull golang:alpine
|
||||
scripts/docker/buildx-multi.sh ddns linux/amd64,linux/arm64 $(BUILD_DATE)
|
||||
docker-goproxy:
|
||||
docker pull golang:alpine
|
||||
scripts/docker/buildx-multi.sh goproxy linux/amd64,linux/arm64 $(BUILD_DATE)
|
||||
demo: docker-demo
|
||||
docker-demo: docker-demo-latest
|
||||
docker-demo-all: docker-demo-latest docker-demo-debian
|
||||
|
|
@ -1011,13 +1116,16 @@ docker-dummy-oidc:
|
|||
packer-digitalocean:
|
||||
$(info Buildinng DigitalOcean marketplace image...)
|
||||
(cd ./setup/docker/cloud && packer build digitalocean.json)
|
||||
lint: lint-js lint-go
|
||||
lint: lint-js lint-go check-api-request-limits
|
||||
lint-js:
|
||||
$(info Linting JS code...)
|
||||
$(MAKE) -C frontend lint
|
||||
lint-go:
|
||||
$(info Linting Go code...)
|
||||
golangci-lint run --issues-exit-code 0 ./pkg/... ./internal/... ./.../internal/...
|
||||
check-api-request-limits:
|
||||
$(info Checking API request-body limits...)
|
||||
bash ./scripts/check-api-request-limits.sh
|
||||
fmt-js:
|
||||
(cd frontend && npm run fmt)
|
||||
fmt-go:
|
||||
|
|
|
|||
34
README.md
|
|
@ -8,9 +8,7 @@ PhotoPrism: Browse Your Life in Pictures
|
|||
[](https://bsky.app/profile/photoprism.app)
|
||||
[](https://floss.social/@photoprism)
|
||||
|
||||
PhotoPrism® is an AI-Powered Photos App for the [Decentralized Web](https://en.wikipedia.org/wiki/Decentralized_web).
|
||||
It makes use of the latest technologies to tag and find pictures automatically without getting in your way.
|
||||
You can run it at home, on a private server, or in the cloud.
|
||||
PhotoPrism® is an AI-powered, privacy-first app for browsing, organizing, and sharing photos and videos. It helps tag, search, and rediscover media without getting in your way, whether self-hosted or in the cloud.
|
||||
|
||||

|
||||
|
||||
|
|
@ -22,7 +20,7 @@ To get a first impression, you are welcome to play with our [public demo](https:
|
|||
|
||||
<img align="right" height="270" src="https://dl.photoprism.app/img/ui/2025/iphone-crocus-540px.png">
|
||||
|
||||
* Browse [all your pictures](https://docs.photoprism.app/user-guide/organize/browse/) without worrying about [RAW images](https://www.photoprism.app/kb/file-formats) or [video formats](https://docs.photoprism.app/user-guide/organize/video/)
|
||||
* Browse [all your pictures](https://docs.photoprism.app/user-guide/organize/browse/) without worrying about [RAW images](https://www.photoprism.app/kb/file-formats/) or [video formats](https://docs.photoprism.app/user-guide/organize/video/)
|
||||
* Whether you're using a phone, tablet, or desktop computer, our [intuitive PWA](https://try.photoprism.app/) provides a native app-like experience and can be [easily installed](https://docs.photoprism.app/user-guide/pwa/) on your home screen
|
||||
* Quickly find specific photos and videos with [powerful search filters](https://docs.photoprism.app/user-guide/search/filters/) that can be combined and are available for [many different properties](https://docs.photoprism.app/user-guide/search/filters/#filter-reference), including [labels](https://try.photoprism.app/library/labels), [location](https://try.photoprism.app/library/places?q=s2:47a85a63f764), [resolution](https://try.photoprism.app/library/browse?view=cards&q=mp:4), [color](https://try.photoprism.app/library/browse?view=cards&q=color:red), [chroma](https://try.photoprism.app/library/browse?view=cards&q=mono%3Atrue), and [quality](https://try.photoprism.app/library/review)
|
||||
* [Automatically labels your pictures](https://try.photoprism.app/library/labels) based on content and location, and recognizes the faces of [your family and friends](https://try.photoprism.app/library/people/new)
|
||||
|
|
@ -32,7 +30,7 @@ To get a first impression, you are welcome to play with our [public demo](https:
|
|||
* [Use compatible apps](https://docs.photoprism.app/user-guide/native-apps/) like [PhotoSync](https://link.photoprism.app/photosync) to back up iOS and Android phones in the background
|
||||
* WebDAV clients such as [Microsoft's Windows Explorer](https://docs.photoprism.app/user-guide/sync/webdav/#__tabbed_1_2) and [Apple's Finder](https://docs.photoprism.app/user-guide/sync/webdav/#connect-to-a-webdav-server) can [connect directly to PhotoPrism](https://docs.photoprism.app/user-guide/sync/webdav/), allowing you to open, edit, and delete files from your computer as if they were local
|
||||
|
||||
Being completely [**self-funded and independent**](https://link.photoprism.app/membership), we can promise you that we will [never sell your data](https://www.photoprism.app/privacy) and that we will [always be transparent](https://www.photoprism.app/terms) about our software and services. Your data will never be shared with Google, Amazon, Microsoft or Apple unless you intentionally upload files to one of their services. 🔒
|
||||
Being completely [**self-funded and independent**](https://link.photoprism.app/membership), we can promise you that we will [never sell your data](https://www.photoprism.app/privacy/) and that we will [always be transparent](https://www.photoprism.app/terms/) about our software and services. Your data will never be shared with Google, Amazon, Microsoft or Apple unless you intentionally upload files to one of their services. 🔒
|
||||
|
||||
## Getting Started ##
|
||||
|
||||
|
|
@ -45,18 +43,18 @@ See our [Getting Started FAQ](https://docs.photoprism.app/getting-started/faq/#h
|
|||
|
||||
## Support Our Mission 💎 ##
|
||||
|
||||
**PhotoPrism is 100% self-funded and independent.** Your [continued support](https://link.photoprism.app/membership) helps us [provide more features to the public](https://www.photoprism.app/oss/faq#what-functionality-is-generally-available), release [regular updates](https://docs.photoprism.app/release-notes/), and remain independent!
|
||||
**PhotoPrism is 100% self-funded and independent.** Your [continued support](https://link.photoprism.app/membership) helps us [provide more features to the public](https://www.photoprism.app/oss/faq/#what-functionality-is-generally-available), release [regular updates](https://docs.photoprism.app/release-notes/), and remain independent!
|
||||
|
||||
Our members [enjoy additional features](https://www.photoprism.app/kb/personal), including access to [interactive world maps](https://try.photoprism.app/library/places), and can join our private chat room to [connect with our team](https://www.photoprism.app/about/team). We currently have the following membership options:
|
||||
Our members [enjoy additional features](https://www.photoprism.app/kb/personal/), including access to [interactive world maps](https://try.photoprism.app/library/places), and can join our private chat room to [connect with our team](https://www.photoprism.app/about/team/). We currently have the following membership options:
|
||||
|
||||
- You can [sign up directly on our website](https://link.photoprism.app/membership) and pay with credit card or SEPA through Stripe, so you don't need to [link an external account](https://www.photoprism.app/kb/activation) and can easily upgrade or downgrade at any time
|
||||
- You can [sign up directly on our website](https://link.photoprism.app/membership) and pay with credit card or SEPA through Stripe, so you don't need to [link an external account](https://www.photoprism.app/kb/activation/) and can easily upgrade or downgrade at any time
|
||||
- Alternatively, [Patreon](https://link.photoprism.app/patreon) also supports PayPal, additional currencies, and lets you choose between monthly and annual billing for all tiers
|
||||
|
||||
If you currently support us through [GitHub Sponsors](https://link.photoprism.app/sponsor), you can also [register on our website](https://my.photoprism.app/register) and use the *Activate GitHub Sponsors Membership* button to link your account. For details on this and how to [link your Patreon account](https://www.patreon.com/pledges), see our [Activation Guide](https://www.photoprism.app/kb/activation).
|
||||
If you currently support us through [GitHub Sponsors](https://link.photoprism.app/sponsor), you can also [register on our website](https://my.photoprism.app/register) and use the *Activate GitHub Sponsors Membership* button to link your account. For details on this and how to [link your Patreon account](https://www.patreon.com/pledges), see our [Activation Guide](https://www.photoprism.app/kb/activation/).
|
||||
|
||||
You are [welcome to contact us](https://www.photoprism.app/contact) for change requests, membership questions, and business partnerships.
|
||||
You are [welcome to contact us](https://www.photoprism.app/contact/) for change requests, membership questions, and business partnerships.
|
||||
|
||||
[View Membership FAQ ›](https://www.photoprism.app/kb/membership) [Sign Up ›](https://link.photoprism.app/membership)
|
||||
[View Membership FAQ ›](https://www.photoprism.app/membership/faq/) [Sign Up ›](https://link.photoprism.app/membership)
|
||||
|
||||
### Why Your Support Matters ###
|
||||
|
||||
|
|
@ -83,7 +81,7 @@ Our [Project Roadmap](https://link.photoprism.app/roadmap) shows what tasks are
|
|||
|
||||
Be aware that we have a zero-bug policy and do our best to help users when they need support or have other questions. This comes at a price though, as we can't give exact release dates for new features. Our team receives many more requests than can be implemented, so we want to emphasize that we are in no way obligated to implement the features, enhancements, or other changes you request. We do, however, appreciate your feedback and carefully consider all requests.
|
||||
|
||||
**Because sustained funding is key to quickly releasing new features, we encourage you to support our mission by [signing up for a personal membership](https://link.photoprism.app/membership) or [purchasing a commercial license](https://www.photoprism.app/teams#compare).**
|
||||
**Because sustained funding is key to quickly releasing new features, we encourage you to support our mission by [signing up for a personal membership](https://link.photoprism.app/membership) or [purchasing a commercial license](https://www.photoprism.app/teams/#compare).**
|
||||
|
||||
[Become a Member ›](https://link.photoprism.app/membership)
|
||||
|
||||
|
|
@ -91,18 +89,18 @@ Be aware that we have a zero-bug policy and do our best to help users when they
|
|||
|
||||
We kindly ask you not to report bugs via GitHub Issues **unless you are certain to have found a fully reproducible and previously unreported issue** that must be fixed directly in the app. Thank you for your careful consideration!
|
||||
|
||||
- When browsing issues, please note that **our team and all issue subscribers receive an email notification** from GitHub whenever a new comment is added, so these should only be used for sharing important information and not for [discussions, questions](https://github.com/photoprism/photoprism/discussions), or [expressing personal opinions](https://www.photoprism.app/code-of-conduct)
|
||||
- In order for us to investigate [new bug reports](https://www.photoprism.app/kb/reporting-bugs), they must include **a complete list of steps to reproduce the problem**, the software versions used and information about the environment in which the problem occurred, such as [browser type, browser version, browser plug-ins](https://docs.photoprism.app/getting-started/troubleshooting/browsers/), operating system, [storage type](https://docs.photoprism.app/getting-started/troubleshooting/performance/#storage), [processor type](https://docs.photoprism.app/getting-started/troubleshooting/performance/#server-cpu), and [memory size](https://docs.photoprism.app/getting-started/troubleshooting/performance/#memory)
|
||||
- [Contact us](https://www.photoprism.app/contact) or [a community member](https://link.photoprism.app/discussions) if you need help, it could be a local configuration problem, or a misunderstanding in how the software works
|
||||
- When browsing issues, please note that **our team and all issue subscribers receive an email notification** from GitHub whenever a new comment is added, so these should only be used for sharing important information and not for [discussions, questions](https://github.com/photoprism/photoprism/discussions), or [expressing personal opinions](https://www.photoprism.app/code-of-conduct/)
|
||||
- In order for us to investigate [new bug reports](https://www.photoprism.app/kb/reporting-bugs/), they must include **a complete list of steps to reproduce the problem**, the software versions used and information about the environment in which the problem occurred, such as [browser type, browser version, browser plug-ins](https://docs.photoprism.app/getting-started/troubleshooting/browsers/), operating system, [storage type](https://docs.photoprism.app/getting-started/troubleshooting/performance/#storage), [processor type](https://docs.photoprism.app/getting-started/troubleshooting/performance/#server-cpu), and [memory size](https://docs.photoprism.app/getting-started/troubleshooting/performance/#memory)
|
||||
- [Contact us](https://www.photoprism.app/contact/) or [a community member](https://link.photoprism.app/discussions) if you need help, it could be a local configuration problem, or a misunderstanding in how the software works
|
||||
- This gives us the opportunity to [improve our documentation](https://docs.photoprism.app/getting-started/troubleshooting/) and provide best-in-class support instead of dealing with unclear/duplicate bug reports or triggering a flood of notifications by replying to comments
|
||||
|
||||
## Connect with the Community ##
|
||||
|
||||
<a href="https://link.photoprism.app/chat"><img align="right" width="144" height="144" src="https://dl.photoprism.app/img/brands/element-logo.svg"></a>
|
||||
|
||||
Follow us on [Mastodon](https://floss.social/@photoprism), [Bluesky](https://bsky.app/profile/photoprism.app), or join the [Community Chat](https://link.photoprism.app/chat) to get regular updates, connect with other users, and discuss your ideas. Our [Code of Conduct](https://www.photoprism.app/code-of-conduct) explains the "dos and don’ts" when interacting with other community members.
|
||||
Follow us on [Mastodon](https://floss.social/@photoprism), [Bluesky](https://bsky.app/profile/photoprism.app), or join the [Community Chat](https://link.photoprism.app/chat) to get regular updates, connect with other users, and discuss your ideas. Our [Code of Conduct](https://www.photoprism.app/code-of-conduct/) explains the "dos and don’ts" when interacting with other community members.
|
||||
|
||||
As a [contributor](CONTRIBUTING.md), you are also welcome to [contact us directly](https://www.photoprism.app/contact) if you have something on your mind that you don't want to discuss publicly. Please note, however, that due to the high volume of emails we receive, our team may be unable to get back to you immediately. We do our best to respond within five business days or less.
|
||||
As a [contributor](CONTRIBUTING.md), you are also welcome to [contact us directly](https://www.photoprism.app/contact/) if you have something on your mind that you don't want to discuss publicly. Please note, however, that due to the high volume of emails we receive, our team may be unable to get back to you immediately. We do our best to respond within five business days or less.
|
||||
|
||||
## Every Contribution Makes a Difference ##
|
||||
|
||||
|
|
@ -110,4 +108,4 @@ We welcome [contributions](CONTRIBUTING.md) of any kind, including blog posts, t
|
|||
|
||||
----
|
||||
|
||||
*PhotoPrism® is a [registered trademark](https://www.photoprism.app/trademark). By using the software and services we provide, you agree to our [Terms of Service](https://www.photoprism.app/terms), [Privacy Policy](https://www.photoprism.app/privacy), and [Code of Conduct](https://www.photoprism.app/code-of-conduct). Docs are [available](https://link.photoprism.app/github-docs) under the [CC BY-NC-SA 4.0 License](https://creativecommons.org/licenses/by-nc-sa/4.0/); [additional terms](https://github.com/photoprism/photoprism/blob/develop/assets/README.md) may apply.*
|
||||
*PhotoPrism® is a [registered trademark](https://www.photoprism.app/trademark/). By using the software and services we provide, you agree to our [Terms of Service](https://www.photoprism.app/terms/), [Privacy Policy](https://www.photoprism.app/privacy/), and [Code of Conduct](https://www.photoprism.app/code-of-conduct/). Docs are [available](https://link.photoprism.app/github-docs) under the [CC BY-NC-SA 4.0 License](https://creativecommons.org/licenses/by-nc-sa/4.0/); [additional terms](https://github.com/photoprism/photoprism/blob/develop/assets/README.md) may apply.*
|
||||
|
|
|
|||
|
|
@ -1,10 +1,10 @@
|
|||
# Thank You to All Current and Past Sponsors 💎 #
|
||||
|
||||
Your [continued support](https://link.photoprism.app/membership) helps us [provide more features to the public](https://www.photoprism.app/oss/faq#what-functionality-is-generally-available), release [regular updates](https://docs.photoprism.app/release-notes/), and remain independent! 💜
|
||||
Your [continued support](https://link.photoprism.app/membership) helps us [provide more features to the public](https://www.photoprism.app/oss/faq/#what-functionality-is-generally-available), release [regular updates](https://docs.photoprism.app/release-notes/), and remain independent! 💜
|
||||
|
||||
You are [welcome to contact us](https://www.photoprism.app/contact) for change requests, membership questions, and business partnerships.
|
||||
You are [welcome to contact us](https://www.photoprism.app/contact/) for change requests, membership questions, and business partnerships.
|
||||
|
||||
[View Membership FAQ ›](https://www.photoprism.app/kb/membership) [Contact Us ›](https://www.photoprism.app/contact)
|
||||
[View Membership FAQ ›](https://www.photoprism.app/membership/faq/) [Contact Us ›](https://www.photoprism.app/contact/)
|
||||
|
||||
## Platinum Sponsors ##
|
||||
|
||||
|
|
@ -90,6 +90,8 @@ You are [welcome to contact us](https://www.photoprism.app/contact) for change r
|
|||
|
||||
[**Kevin "BentoFox" Gelking**](https://github.com/KevinGelking) (Patreon, December 2024)
|
||||
|
||||
[**Lukaz**](https://github.com/lukazvprecisn) (Patreon, May 2025)
|
||||
|
||||
[**Philipp Marmet**](https://github.com/fujexo) (October 2025)
|
||||
|
||||
## Infrastructure Sponsors ##
|
||||
|
|
|
|||
|
|
@ -1,5 +1,6 @@
|
|||
examples
|
||||
README.md
|
||||
Thumbs.db
|
||||
docs
|
||||
.*
|
||||
_*
|
||||
_*
|
||||
|
|
|
|||
|
|
@ -15,6 +15,9 @@ It's source code can be obtained on [GitHub](https://github.com/vslavik/poedit).
|
|||
|
||||
Only asynchronous notifications and certain API responses need translation to provide a
|
||||
consistent user experience.
|
||||
Asynchronous notifications and user-facing API error responses are additionally rendered by the web
|
||||
frontend in each user's current UI language (using the message identifier); the `default.po` translation
|
||||
here serves as a fallback and for non-browser consumers such as the CLI.
|
||||
Technical log messages should be in English to avoid ambiguities and (even slightly) wrong translations.
|
||||
|
||||
`default.po` files in subdirectories contain localized messages for each
|
||||
|
|
@ -29,7 +32,7 @@ the language. Now you can start translating.
|
|||
When done, create a new directory (using the locale as name) and save your translation there as `default.po`.
|
||||
|
||||
The POT file `/assets/locales/messages.pot` will be automatically updated when
|
||||
running `go generate` in `/internal/i18n` or `make generate` in the main project directory.
|
||||
running `go generate` in `/pkg/i18n` or `make generate` in the main project directory.
|
||||
Note that this will only work when you have gettext installed on your system.
|
||||
We recommend using our latest development image as described in the Developer Guide.
|
||||
|
||||
|
|
|
|||
|
|
@ -2,412 +2,427 @@ msgid ""
|
|||
msgstr ""
|
||||
"Project-Id-Version: PACKAGE VERSION\n"
|
||||
"Report-Msgid-Bugs-To: \n"
|
||||
"POT-Creation-Date: 2025-10-17 17:32+0000\n"
|
||||
"PO-Revision-Date: 2025-10-22 08:25+0000\n"
|
||||
"Last-Translator: Google Cloud Translation Basic <noreply-mt-google-"
|
||||
"translate@weblate.org>\n"
|
||||
"POT-Creation-Date: 2026-06-27 09:13+0000\n"
|
||||
"PO-Revision-Date: 2026-06-27 10:28+0000\n"
|
||||
"Last-Translator: DeepL <noreply-mt-deepl@weblate.org>\n"
|
||||
"Language-Team: none\n"
|
||||
"Language: af\n"
|
||||
"MIME-Version: 1.0\n"
|
||||
"Content-Type: text/plain; charset=UTF-8\n"
|
||||
"Content-Transfer-Encoding: 8bit\n"
|
||||
"Plural-Forms: nplurals=2; plural=n != 1;\n"
|
||||
"X-Generator: Weblate 5.13.3\n"
|
||||
"X-Generator: Weblate 2026.5\n"
|
||||
|
||||
#: messages.go:104
|
||||
#: messages.go:112
|
||||
msgid "Something went wrong, try again"
|
||||
msgstr "Iets het verkeerd geloop, probeer weer"
|
||||
|
||||
#: messages.go:105
|
||||
#: messages.go:113
|
||||
msgid "Unable to do that"
|
||||
msgstr "Kan dit nie doen nie"
|
||||
|
||||
#: messages.go:106
|
||||
#: messages.go:114
|
||||
msgid "Changes could not be saved"
|
||||
msgstr "Veranderinge kon nie gestoor word nie"
|
||||
|
||||
#: messages.go:107
|
||||
#: messages.go:115
|
||||
msgid "Could not be deleted"
|
||||
msgstr "Kan nie verwyder word nie"
|
||||
|
||||
#: messages.go:108
|
||||
#: messages.go:116
|
||||
#, c-format
|
||||
msgid "%s already exists"
|
||||
msgstr "%s bestaan reeds"
|
||||
|
||||
#: messages.go:109
|
||||
#: messages.go:117
|
||||
msgid "Not found"
|
||||
msgstr "Nie gevind"
|
||||
|
||||
#: messages.go:110
|
||||
#: messages.go:118
|
||||
msgid "File not found"
|
||||
msgstr "Lêer nie gevind nie"
|
||||
|
||||
#: messages.go:111
|
||||
#: messages.go:119
|
||||
msgid "File too large"
|
||||
msgstr "Lêer te groot"
|
||||
|
||||
#: messages.go:112
|
||||
#: messages.go:120
|
||||
msgid "Unsupported"
|
||||
msgstr "Ongesteun"
|
||||
|
||||
#: messages.go:113
|
||||
#: messages.go:121
|
||||
msgid "Unsupported type"
|
||||
msgstr "Ongesteunde tipe"
|
||||
|
||||
#: messages.go:114
|
||||
#: messages.go:122
|
||||
msgid "Unsupported format"
|
||||
msgstr "Ongesteunde formaat"
|
||||
|
||||
#: messages.go:115
|
||||
#: messages.go:123
|
||||
msgid "Originals folder is empty"
|
||||
msgstr "Oorspronklike omslag is leeg"
|
||||
|
||||
#: messages.go:116
|
||||
#: messages.go:124
|
||||
msgid "Selection not found"
|
||||
msgstr "Seleksie nie gevind nie"
|
||||
|
||||
#: messages.go:117
|
||||
#: messages.go:125
|
||||
msgid "Entity not found"
|
||||
msgstr "Entiteit nie gevind nie"
|
||||
|
||||
#: messages.go:118
|
||||
#: messages.go:126
|
||||
msgid "Account not found"
|
||||
msgstr "Rekening nie gevind nie"
|
||||
|
||||
#: messages.go:119
|
||||
#: messages.go:127
|
||||
msgid "User not found"
|
||||
msgstr "Verbruiker nie gevind nie"
|
||||
|
||||
#: messages.go:120
|
||||
#: messages.go:128
|
||||
msgid "Label not found"
|
||||
msgstr "Merker nie gevind nie"
|
||||
|
||||
#: messages.go:121
|
||||
#: messages.go:129
|
||||
msgid "Camera not found"
|
||||
msgstr "Kamera nie gevind nie"
|
||||
|
||||
#: messages.go:130
|
||||
msgid "Lens not found"
|
||||
msgstr "Lens nie gevind nie"
|
||||
|
||||
#: messages.go:131
|
||||
msgid "Album not found"
|
||||
msgstr "Album nie gevind nie"
|
||||
|
||||
#: messages.go:122
|
||||
#: messages.go:132
|
||||
msgid "Subject not found"
|
||||
msgstr "Onderwerp nie gevind nie"
|
||||
|
||||
#: messages.go:123
|
||||
#: messages.go:133
|
||||
msgid "Person not found"
|
||||
msgstr "Persoon nie gevind nie"
|
||||
|
||||
#: messages.go:124
|
||||
#: messages.go:134
|
||||
msgid "Face not found"
|
||||
msgstr "Gesig nie gevind nie"
|
||||
|
||||
#: messages.go:125
|
||||
#: messages.go:135
|
||||
msgid "Not available in public mode"
|
||||
msgstr "Nie beskikbaar in publieke modus nie"
|
||||
|
||||
#: messages.go:126
|
||||
#: messages.go:136
|
||||
msgid "Not available in read-only mode"
|
||||
msgstr "Nie beskikbaar in leesalleen modus nie"
|
||||
|
||||
#: messages.go:127
|
||||
#: messages.go:137
|
||||
msgid "Please log in to your account"
|
||||
msgstr "Teken asseblief in op jou rekening"
|
||||
|
||||
#: messages.go:128
|
||||
#: messages.go:138
|
||||
msgid "Permission denied"
|
||||
msgstr "Toegang geweier"
|
||||
|
||||
#: messages.go:129
|
||||
#: messages.go:139
|
||||
msgid "Payment required"
|
||||
msgstr "Betaling vereis"
|
||||
|
||||
#: messages.go:130
|
||||
#: messages.go:140
|
||||
msgid "Upload might be offensive"
|
||||
msgstr "Oplegging mag aanstoot gee"
|
||||
|
||||
#: messages.go:131
|
||||
#: messages.go:141
|
||||
msgid "Upload failed"
|
||||
msgstr "Oplegging misluk"
|
||||
|
||||
#: messages.go:132
|
||||
#: messages.go:142
|
||||
msgid "No items selected"
|
||||
msgstr "Geen items gekies nie"
|
||||
|
||||
#: messages.go:133
|
||||
#: messages.go:143
|
||||
msgid "Failed creating file, please check permissions"
|
||||
msgstr "Kon nie lêer skep nie. Gaan asseblief toestemmings na"
|
||||
|
||||
#: messages.go:134
|
||||
#: messages.go:144
|
||||
msgid "Failed creating folder, please check permissions"
|
||||
msgstr "Kon nie vouer skep nie. Gaan asseblief toestemmings na"
|
||||
|
||||
#: messages.go:135
|
||||
#: messages.go:145
|
||||
msgid "Could not connect, please try again"
|
||||
msgstr "Kon nie konnekteer nie, probeer asseblief weer"
|
||||
|
||||
#: messages.go:136
|
||||
#: messages.go:146
|
||||
msgid "Enter verification code"
|
||||
msgstr "Tik verifikasiekode"
|
||||
|
||||
#: messages.go:137
|
||||
#: messages.go:147
|
||||
msgid "Invalid verification code, please try again"
|
||||
msgstr "Ongeldige verifikasiekode, probeer asseblief weer"
|
||||
|
||||
#: messages.go:138
|
||||
#: messages.go:148
|
||||
msgid "Invalid password, please try again"
|
||||
msgstr "Ongeldige wagwoord, probeer asseblief weer"
|
||||
|
||||
#: messages.go:139
|
||||
#: messages.go:149
|
||||
msgid "Feature disabled"
|
||||
msgstr "Eienskap gedeaktiveer"
|
||||
|
||||
#: messages.go:140
|
||||
#: messages.go:150
|
||||
msgid "No labels selected"
|
||||
msgstr "Geen merker geselekteer"
|
||||
|
||||
#: messages.go:141
|
||||
#: messages.go:151
|
||||
msgid "No albums selected"
|
||||
msgstr "Geen albums geselekteer nie"
|
||||
|
||||
#: messages.go:142
|
||||
#: messages.go:152
|
||||
msgid "No files available for download"
|
||||
msgstr "Geen lêers beskikbaar vir aflaai nie"
|
||||
|
||||
#: messages.go:143
|
||||
#: messages.go:153
|
||||
msgid "Failed to create zip file"
|
||||
msgstr "Kon nie zip-lêer skep nie"
|
||||
|
||||
#: messages.go:144
|
||||
#: messages.go:154
|
||||
msgid "Invalid credentials"
|
||||
msgstr "Ongeldige magtiging"
|
||||
|
||||
#: messages.go:145
|
||||
#: messages.go:155
|
||||
msgid "Invalid link"
|
||||
msgstr "Ongeldige skakel"
|
||||
|
||||
#: messages.go:146
|
||||
#: messages.go:156
|
||||
msgid "Invalid name"
|
||||
msgstr "Ongeldige naam"
|
||||
|
||||
#: messages.go:147
|
||||
#: messages.go:157
|
||||
msgid "Busy, please try again later"
|
||||
msgstr "Besig, probeer asseblief later weer"
|
||||
|
||||
#: messages.go:148
|
||||
#: messages.go:158
|
||||
#, c-format
|
||||
msgid "The wakeup interval is %s, but must be 1h or less"
|
||||
msgstr "Die opwek tydperk is %s, maar moet 1 uur of minder wees"
|
||||
|
||||
#: messages.go:149
|
||||
#: messages.go:159
|
||||
msgid "Your account could not be connected"
|
||||
msgstr "Jou rekening kon nie gekoppel word nie"
|
||||
|
||||
#: messages.go:150
|
||||
#: messages.go:160
|
||||
msgid "Too many requests"
|
||||
msgstr "Te veel versoeke"
|
||||
|
||||
#: messages.go:151
|
||||
#: messages.go:161
|
||||
msgid "Insufficient storage"
|
||||
msgstr "Onvoldoende berging"
|
||||
|
||||
#: messages.go:152
|
||||
#: messages.go:162
|
||||
msgid "Quota exceeded"
|
||||
msgstr "Kwota oorskry"
|
||||
|
||||
#: messages.go:155
|
||||
#: messages.go:163
|
||||
msgid "Registration disabled"
|
||||
msgstr "Registrasie gedeaktiveer"
|
||||
|
||||
#: messages.go:164
|
||||
msgid "Verified email required"
|
||||
msgstr "Geverifieerde e-pos vereis"
|
||||
|
||||
#: messages.go:167
|
||||
msgid "Changes successfully saved"
|
||||
msgstr "Veranderinge suksesvol gestoor"
|
||||
|
||||
#: messages.go:156
|
||||
#: messages.go:168
|
||||
msgid "Album created"
|
||||
msgstr "Album geskep"
|
||||
|
||||
#: messages.go:157
|
||||
#: messages.go:169
|
||||
msgid "Album saved"
|
||||
msgstr "Album gestoor"
|
||||
|
||||
#: messages.go:158
|
||||
#: messages.go:170
|
||||
#, c-format
|
||||
msgid "Album %s deleted"
|
||||
msgstr "Album %s uitgevee"
|
||||
|
||||
#: messages.go:159
|
||||
#: messages.go:171
|
||||
msgid "Album contents cloned"
|
||||
msgstr "Albuminhoud gekloon"
|
||||
|
||||
#: messages.go:160
|
||||
#: messages.go:172
|
||||
msgid "File removed from stack"
|
||||
msgstr "Lêer verwyder uit stapel"
|
||||
|
||||
#: messages.go:161
|
||||
#: messages.go:173
|
||||
msgid "File deleted"
|
||||
msgstr "Lêer uitgevee"
|
||||
|
||||
#: messages.go:162
|
||||
#: messages.go:174
|
||||
#, c-format
|
||||
msgid "Selection added to %s"
|
||||
msgstr "Seleksie bygevoeg na %s"
|
||||
|
||||
#: messages.go:163
|
||||
#: messages.go:175
|
||||
#, c-format
|
||||
msgid "One entry added to %s"
|
||||
msgstr "Een inskrywing bygevoeg na %s"
|
||||
|
||||
#: messages.go:164
|
||||
#: messages.go:176
|
||||
#, c-format
|
||||
msgid "%d entries added to %s"
|
||||
msgstr "%d inskrywings by %s gevoeg"
|
||||
|
||||
#: messages.go:165
|
||||
#: messages.go:177
|
||||
#, c-format
|
||||
msgid "One entry removed from %s"
|
||||
msgstr "Een inskrywing verwyder uit %s"
|
||||
|
||||
#: messages.go:166
|
||||
#: messages.go:178
|
||||
#, c-format
|
||||
msgid "%d entries removed from %s"
|
||||
msgstr "%d inskrywings verwyder uit %s"
|
||||
|
||||
#: messages.go:167
|
||||
#: messages.go:179
|
||||
msgid "Account created"
|
||||
msgstr "Rekening geskep"
|
||||
|
||||
#: messages.go:168
|
||||
#: messages.go:180
|
||||
msgid "Account saved"
|
||||
msgstr "Rekening gestoor"
|
||||
|
||||
#: messages.go:169
|
||||
#: messages.go:181
|
||||
msgid "Account deleted"
|
||||
msgstr "Rekening uitgevee"
|
||||
|
||||
#: messages.go:170
|
||||
#: messages.go:182
|
||||
msgid "Settings saved"
|
||||
msgstr "Stellings gestoor"
|
||||
|
||||
#: messages.go:171
|
||||
#: messages.go:183
|
||||
msgid "Password changed"
|
||||
msgstr "Wagwoord verander"
|
||||
|
||||
#: messages.go:172
|
||||
#: messages.go:184
|
||||
#, c-format
|
||||
msgid "Import completed in %d s"
|
||||
msgstr "Invoer voltooi in %d s"
|
||||
|
||||
#: messages.go:173
|
||||
#: messages.go:185
|
||||
msgid "Import canceled"
|
||||
msgstr "Invoer gekanselleer"
|
||||
|
||||
#: messages.go:174
|
||||
#: messages.go:186
|
||||
#, c-format
|
||||
msgid "Indexing completed in %d s"
|
||||
msgstr "inhoudsopgawe voltooi in %d s"
|
||||
|
||||
#: messages.go:175
|
||||
#: messages.go:187
|
||||
msgid "Indexing originals..."
|
||||
msgstr "Indekseer van oorspronklikes …"
|
||||
|
||||
#: messages.go:176
|
||||
#: messages.go:188
|
||||
#, c-format
|
||||
msgid "Indexing files in %s"
|
||||
msgstr "Indekseer lêers in %s"
|
||||
|
||||
#: messages.go:177
|
||||
#: messages.go:189
|
||||
msgid "Indexing canceled"
|
||||
msgstr "Indeksering gekanselleer"
|
||||
|
||||
#: messages.go:178
|
||||
#: messages.go:190
|
||||
#, c-format
|
||||
msgid "Removed %d files and %d photos"
|
||||
msgstr "%d lêers en %d foto's verwyder"
|
||||
|
||||
#: messages.go:179
|
||||
#: messages.go:191
|
||||
#, c-format
|
||||
msgid "Moving files from %s"
|
||||
msgstr "Skuif lêers van %s af"
|
||||
|
||||
#: messages.go:180
|
||||
#: messages.go:192
|
||||
#, c-format
|
||||
msgid "Copying files from %s"
|
||||
msgstr "Kopieer lêers van %s"
|
||||
|
||||
#: messages.go:181
|
||||
#: messages.go:193
|
||||
msgid "Labels deleted"
|
||||
msgstr "Merkers uitgevee"
|
||||
|
||||
#: messages.go:182
|
||||
#: messages.go:194
|
||||
msgid "Label saved"
|
||||
msgstr "Merkers gestoor"
|
||||
|
||||
#: messages.go:183
|
||||
#: messages.go:195
|
||||
msgid "Subject saved"
|
||||
msgstr "Onderwerp gestoor"
|
||||
|
||||
#: messages.go:184
|
||||
#: messages.go:196
|
||||
msgid "Subject deleted"
|
||||
msgstr "Onderwerp uitgevee"
|
||||
|
||||
#: messages.go:185
|
||||
#: messages.go:197
|
||||
msgid "Person saved"
|
||||
msgstr "Persoon gestoor"
|
||||
|
||||
#: messages.go:186
|
||||
#: messages.go:198
|
||||
msgid "Person deleted"
|
||||
msgstr "Persoon uitgevee"
|
||||
|
||||
#: messages.go:187
|
||||
#: messages.go:199
|
||||
msgid "File uploaded"
|
||||
msgstr "Lêer opgelaai"
|
||||
|
||||
#: messages.go:188
|
||||
#: messages.go:200
|
||||
#, c-format
|
||||
msgid "%d files uploaded in %d s"
|
||||
msgstr "%d lêers opgelaai in %d s"
|
||||
|
||||
#: messages.go:189
|
||||
#: messages.go:201
|
||||
msgid "Processing upload..."
|
||||
msgstr "Verwerk oplegging..."
|
||||
|
||||
#: messages.go:190
|
||||
#: messages.go:202
|
||||
msgid "Upload has been processed"
|
||||
msgstr "Oplegging geprosesseer"
|
||||
|
||||
#: messages.go:191
|
||||
#: messages.go:203
|
||||
msgid "Selection approved"
|
||||
msgstr "Seleksie goedgekeur"
|
||||
|
||||
#: messages.go:192
|
||||
#: messages.go:204
|
||||
msgid "Selection archived"
|
||||
msgstr "Seleksie geargiveer"
|
||||
|
||||
#: messages.go:193
|
||||
#: messages.go:205
|
||||
msgid "Selection restored"
|
||||
msgstr "Seleksie herstel"
|
||||
|
||||
#: messages.go:194
|
||||
#: messages.go:206
|
||||
msgid "Selection marked as private"
|
||||
msgstr "Seleksie gemerk as privaat"
|
||||
|
||||
#: messages.go:195
|
||||
#: messages.go:207
|
||||
msgid "Albums deleted"
|
||||
msgstr "Albums uitgevee"
|
||||
|
||||
#: messages.go:196
|
||||
#: messages.go:208
|
||||
#, c-format
|
||||
msgid "Zip created in %d s"
|
||||
msgstr "Zip geskep in %d s"
|
||||
|
||||
#: messages.go:197
|
||||
#: messages.go:209
|
||||
msgid "Permanently deleted"
|
||||
msgstr "Permanent uitgevee"
|
||||
|
||||
#: messages.go:198
|
||||
#: messages.go:210
|
||||
#, c-format
|
||||
msgid "%s has been restored"
|
||||
msgstr "%s geherstel"
|
||||
|
||||
#: messages.go:199
|
||||
#: messages.go:211
|
||||
msgid "Successfully verified"
|
||||
msgstr "Suksesvol geverifieer"
|
||||
|
||||
#: messages.go:200
|
||||
#: messages.go:212
|
||||
msgid "Successfully activated"
|
||||
msgstr "Suksesvol geaktiveer"
|
||||
|
||||
|
|
|
|||
|
|
@ -2,9 +2,10 @@ msgid ""
|
|||
msgstr ""
|
||||
"Project-Id-Version: \n"
|
||||
"Report-Msgid-Bugs-To: \n"
|
||||
"POT-Creation-Date: 2025-10-17 17:32+0000\n"
|
||||
"PO-Revision-Date: 2025-10-22 08:25+0000\n"
|
||||
"Last-Translator: DeepL <noreply-mt-deepl@weblate.org>\n"
|
||||
"POT-Creation-Date: 2026-06-27 09:13+0000\n"
|
||||
"PO-Revision-Date: 2026-06-27 10:28+0000\n"
|
||||
"Last-Translator: Google Cloud Translation Basic <noreply-mt-google-"
|
||||
"translate@weblate.org>\n"
|
||||
"Language-Team: none\n"
|
||||
"Language: ar\n"
|
||||
"MIME-Version: 1.0\n"
|
||||
|
|
@ -12,402 +13,418 @@ msgstr ""
|
|||
"Content-Transfer-Encoding: 8bit\n"
|
||||
"Plural-Forms: nplurals=6; plural=n==0 ? 0 : n==1 ? 1 : n==2 ? 2 : n%100>=3 "
|
||||
"&& n%100<=10 ? 3 : n%100>=11 ? 4 : 5;\n"
|
||||
"X-Generator: Weblate 5.13.3\n"
|
||||
"X-Generator: Weblate 2026.5\n"
|
||||
|
||||
#: messages.go:104
|
||||
#: messages.go:112
|
||||
msgid "Something went wrong, try again"
|
||||
msgstr "حدث خطأ ما، حاول مرة أخرى"
|
||||
|
||||
#: messages.go:105
|
||||
#: messages.go:113
|
||||
msgid "Unable to do that"
|
||||
msgstr "غير قادر على فعل ذلك"
|
||||
|
||||
#: messages.go:106
|
||||
#: messages.go:114
|
||||
msgid "Changes could not be saved"
|
||||
msgstr "لا يمكن حفظ التغييرات"
|
||||
|
||||
#: messages.go:107
|
||||
#: messages.go:115
|
||||
msgid "Could not be deleted"
|
||||
msgstr "لا يمكن حذفه"
|
||||
|
||||
#: messages.go:108
|
||||
#: messages.go:116
|
||||
#, c-format
|
||||
msgid "%s already exists"
|
||||
msgstr "%s موجود بالفعل"
|
||||
|
||||
#: messages.go:109
|
||||
#: messages.go:117
|
||||
msgid "Not found"
|
||||
msgstr "لم يتم العثور"
|
||||
|
||||
#: messages.go:110
|
||||
#: messages.go:118
|
||||
msgid "File not found"
|
||||
msgstr "لم يتم العثور على الملف"
|
||||
|
||||
#: messages.go:111
|
||||
#: messages.go:119
|
||||
msgid "File too large"
|
||||
msgstr "الملف كبير جدًا"
|
||||
|
||||
#: messages.go:112
|
||||
#: messages.go:120
|
||||
msgid "Unsupported"
|
||||
msgstr "غير مدعوم"
|
||||
|
||||
#: messages.go:113
|
||||
#: messages.go:121
|
||||
msgid "Unsupported type"
|
||||
msgstr "نوع غير معتمد"
|
||||
|
||||
#: messages.go:114
|
||||
#: messages.go:122
|
||||
msgid "Unsupported format"
|
||||
msgstr "صيغة غير مدعومة"
|
||||
|
||||
#: messages.go:115
|
||||
#: messages.go:123
|
||||
msgid "Originals folder is empty"
|
||||
msgstr "مجلد النسخ الأصلية فارغ"
|
||||
|
||||
#: messages.go:116
|
||||
#: messages.go:124
|
||||
msgid "Selection not found"
|
||||
msgstr "الاختيار غير موجود"
|
||||
|
||||
#: messages.go:117
|
||||
#: messages.go:125
|
||||
msgid "Entity not found"
|
||||
msgstr "الكيان غير موجود"
|
||||
|
||||
#: messages.go:118
|
||||
#: messages.go:126
|
||||
msgid "Account not found"
|
||||
msgstr "الحساب غير موجود"
|
||||
|
||||
#: messages.go:119
|
||||
#: messages.go:127
|
||||
msgid "User not found"
|
||||
msgstr "المستخدم غير موجود"
|
||||
|
||||
#: messages.go:120
|
||||
#: messages.go:128
|
||||
msgid "Label not found"
|
||||
msgstr "التصنيف غير موجود"
|
||||
|
||||
#: messages.go:121
|
||||
#: messages.go:129
|
||||
msgid "Camera not found"
|
||||
msgstr "لم يتم العثور على الكاميرا"
|
||||
|
||||
#: messages.go:130
|
||||
msgid "Lens not found"
|
||||
msgstr "لم يتم العثور على العدسة"
|
||||
|
||||
#: messages.go:131
|
||||
msgid "Album not found"
|
||||
msgstr "الألبوم غير موجود"
|
||||
|
||||
#: messages.go:122
|
||||
#: messages.go:132
|
||||
msgid "Subject not found"
|
||||
msgstr "الموضوع غير موجود"
|
||||
|
||||
#: messages.go:123
|
||||
#: messages.go:133
|
||||
msgid "Person not found"
|
||||
msgstr "لم يتم العثور على الشخص"
|
||||
|
||||
#: messages.go:124
|
||||
#: messages.go:134
|
||||
msgid "Face not found"
|
||||
msgstr "الوجه غير موجود"
|
||||
|
||||
#: messages.go:125
|
||||
#: messages.go:135
|
||||
msgid "Not available in public mode"
|
||||
msgstr "غير متاح في الوضع العام"
|
||||
|
||||
#: messages.go:126
|
||||
#: messages.go:136
|
||||
msgid "Not available in read-only mode"
|
||||
msgstr "غير متوفر في وضع القراءة فقط"
|
||||
|
||||
#: messages.go:127
|
||||
#: messages.go:137
|
||||
msgid "Please log in to your account"
|
||||
msgstr "يرجى تسجيل الدخول إلى حسابك"
|
||||
|
||||
#: messages.go:128
|
||||
#: messages.go:138
|
||||
msgid "Permission denied"
|
||||
msgstr "طلب الاذن مرفوض"
|
||||
|
||||
#: messages.go:129
|
||||
#: messages.go:139
|
||||
msgid "Payment required"
|
||||
msgstr "الدفع مطلوب"
|
||||
|
||||
#: messages.go:130
|
||||
#: messages.go:140
|
||||
msgid "Upload might be offensive"
|
||||
msgstr "المحتوى المرفوع قد يكون مسيئا"
|
||||
|
||||
#: messages.go:131
|
||||
#: messages.go:141
|
||||
msgid "Upload failed"
|
||||
msgstr "فشل التحميل"
|
||||
|
||||
#: messages.go:132
|
||||
#: messages.go:142
|
||||
msgid "No items selected"
|
||||
msgstr "لم يتم اختيار المحتوى"
|
||||
|
||||
#: messages.go:133
|
||||
#: messages.go:143
|
||||
msgid "Failed creating file, please check permissions"
|
||||
msgstr "فشل إنشاء الملف ، يرجى التحقق من الصلاحيات"
|
||||
|
||||
#: messages.go:134
|
||||
#: messages.go:144
|
||||
msgid "Failed creating folder, please check permissions"
|
||||
msgstr "لم يتم إنشاء المجلد ، يرجى التحقق من الصلاحيات"
|
||||
|
||||
#: messages.go:135
|
||||
#: messages.go:145
|
||||
msgid "Could not connect, please try again"
|
||||
msgstr "تعذر الاتصال ، يرجى المحاولة مرة أخرى"
|
||||
|
||||
#: messages.go:136
|
||||
#: messages.go:146
|
||||
msgid "Enter verification code"
|
||||
msgstr "أدخل رمز التحقق"
|
||||
|
||||
#: messages.go:137
|
||||
#: messages.go:147
|
||||
msgid "Invalid verification code, please try again"
|
||||
msgstr "رمز التحقق غير صالح، يرجى المحاولة مرة أخرى"
|
||||
|
||||
#: messages.go:138
|
||||
#: messages.go:148
|
||||
msgid "Invalid password, please try again"
|
||||
msgstr "كلمة السر غير مطابقة، يرجى المحاولة مرة أخرى"
|
||||
|
||||
#: messages.go:139
|
||||
#: messages.go:149
|
||||
msgid "Feature disabled"
|
||||
msgstr "الخاصية غير مفعلة"
|
||||
|
||||
#: messages.go:140
|
||||
#: messages.go:150
|
||||
msgid "No labels selected"
|
||||
msgstr "لم يتم تحديد المعرفات"
|
||||
|
||||
#: messages.go:141
|
||||
#: messages.go:151
|
||||
msgid "No albums selected"
|
||||
msgstr "لم يتم تحديد ألبومات"
|
||||
|
||||
#: messages.go:142
|
||||
#: messages.go:152
|
||||
msgid "No files available for download"
|
||||
msgstr "لا توجد ملفات متاحة للتنزيل"
|
||||
|
||||
#: messages.go:143
|
||||
#: messages.go:153
|
||||
msgid "Failed to create zip file"
|
||||
msgstr "فشل في إنشاء ملف مضغوط"
|
||||
|
||||
#: messages.go:144
|
||||
#: messages.go:154
|
||||
msgid "Invalid credentials"
|
||||
msgstr "بيانات الاعتماد غير صالحة"
|
||||
|
||||
#: messages.go:145
|
||||
#: messages.go:155
|
||||
msgid "Invalid link"
|
||||
msgstr "رابط غير صالح"
|
||||
|
||||
#: messages.go:146
|
||||
#: messages.go:156
|
||||
msgid "Invalid name"
|
||||
msgstr "اسم غير صحيح"
|
||||
|
||||
#: messages.go:147
|
||||
#: messages.go:157
|
||||
msgid "Busy, please try again later"
|
||||
msgstr "مشغول، يرجى المحاولة مرة أخرى في وقت لاحق"
|
||||
|
||||
#: messages.go:148
|
||||
#: messages.go:158
|
||||
#, c-format
|
||||
msgid "The wakeup interval is %s, but must be 1h or less"
|
||||
msgstr "فترة التنبيه هي %s ، لكن يجب أن تكون ساعة واحدة أو أقل"
|
||||
|
||||
#: messages.go:149
|
||||
#: messages.go:159
|
||||
msgid "Your account could not be connected"
|
||||
msgstr "لا يمكن ربط حسابك"
|
||||
|
||||
#: messages.go:150
|
||||
#: messages.go:160
|
||||
msgid "Too many requests"
|
||||
msgstr "طلبات كثيرة جدا"
|
||||
|
||||
#: messages.go:151
|
||||
#: messages.go:161
|
||||
msgid "Insufficient storage"
|
||||
msgstr "مساحة تخزين غير كافية"
|
||||
|
||||
#: messages.go:152
|
||||
#: messages.go:162
|
||||
msgid "Quota exceeded"
|
||||
msgstr "تم تجاوز المساحة المخصصة"
|
||||
|
||||
#: messages.go:155
|
||||
#: messages.go:163
|
||||
msgid "Registration disabled"
|
||||
msgstr "تم تعطيل التسجيل"
|
||||
|
||||
#: messages.go:164
|
||||
msgid "Verified email required"
|
||||
msgstr "البريد الإلكتروني الموثق مطلوب"
|
||||
|
||||
#: messages.go:167
|
||||
msgid "Changes successfully saved"
|
||||
msgstr "تم حفظ التغييرات بنجاح"
|
||||
|
||||
#: messages.go:156
|
||||
#: messages.go:168
|
||||
msgid "Album created"
|
||||
msgstr "تم إنشاء الألبوم"
|
||||
|
||||
#: messages.go:157
|
||||
#: messages.go:169
|
||||
msgid "Album saved"
|
||||
msgstr "تم حفظ الألبوم"
|
||||
|
||||
#: messages.go:158
|
||||
#: messages.go:170
|
||||
#, c-format
|
||||
msgid "Album %s deleted"
|
||||
msgstr "تم حذف الألبوم %s"
|
||||
|
||||
#: messages.go:159
|
||||
#: messages.go:171
|
||||
msgid "Album contents cloned"
|
||||
msgstr "تم نسخ محتويات الألبوم"
|
||||
|
||||
#: messages.go:160
|
||||
#: messages.go:172
|
||||
msgid "File removed from stack"
|
||||
msgstr "تمت إزالة الملف من المكدس"
|
||||
|
||||
#: messages.go:161
|
||||
#: messages.go:173
|
||||
msgid "File deleted"
|
||||
msgstr "تم حذف الملف"
|
||||
|
||||
#: messages.go:162
|
||||
#: messages.go:174
|
||||
#, c-format
|
||||
msgid "Selection added to %s"
|
||||
msgstr "تمت إضافة التحديد إلى %s"
|
||||
|
||||
#: messages.go:163
|
||||
#: messages.go:175
|
||||
#, c-format
|
||||
msgid "One entry added to %s"
|
||||
msgstr "تمت إضافة إدخال واحد إلى %s"
|
||||
|
||||
#: messages.go:164
|
||||
#: messages.go:176
|
||||
#, c-format
|
||||
msgid "%d entries added to %s"
|
||||
msgstr "تمت إضافة %d مدخلات إلى %s"
|
||||
|
||||
#: messages.go:165
|
||||
#: messages.go:177
|
||||
#, c-format
|
||||
msgid "One entry removed from %s"
|
||||
msgstr "تمت إزالة إدخال واحد من %s"
|
||||
|
||||
#: messages.go:166
|
||||
#: messages.go:178
|
||||
#, c-format
|
||||
msgid "%d entries removed from %s"
|
||||
msgstr "تمت إزالة %d مدخلات من %s"
|
||||
|
||||
#: messages.go:167
|
||||
#: messages.go:179
|
||||
msgid "Account created"
|
||||
msgstr "تم إنشاء الحساب"
|
||||
|
||||
#: messages.go:168
|
||||
#: messages.go:180
|
||||
msgid "Account saved"
|
||||
msgstr "تم حفظ الحساب"
|
||||
|
||||
#: messages.go:169
|
||||
#: messages.go:181
|
||||
msgid "Account deleted"
|
||||
msgstr "تم حذف الحساب"
|
||||
|
||||
#: messages.go:170
|
||||
#: messages.go:182
|
||||
msgid "Settings saved"
|
||||
msgstr "تم حفظ الإعدادات"
|
||||
|
||||
#: messages.go:171
|
||||
#: messages.go:183
|
||||
msgid "Password changed"
|
||||
msgstr "تم تغيير كلمة السر"
|
||||
|
||||
#: messages.go:172
|
||||
#: messages.go:184
|
||||
#, c-format
|
||||
msgid "Import completed in %d s"
|
||||
msgstr "اكتمل الاستيراد في %d ثانية"
|
||||
|
||||
#: messages.go:173
|
||||
#: messages.go:185
|
||||
msgid "Import canceled"
|
||||
msgstr "تم إلغاء الاستيراد"
|
||||
|
||||
#: messages.go:174
|
||||
#: messages.go:186
|
||||
#, c-format
|
||||
msgid "Indexing completed in %d s"
|
||||
msgstr "اكتملت الفهرسة في %d ثانية"
|
||||
|
||||
#: messages.go:175
|
||||
#: messages.go:187
|
||||
msgid "Indexing originals..."
|
||||
msgstr "تتم فهرسة الصور الأصلية ..."
|
||||
|
||||
#: messages.go:176
|
||||
#: messages.go:188
|
||||
#, c-format
|
||||
msgid "Indexing files in %s"
|
||||
msgstr "فهرسة الملفات في %s"
|
||||
|
||||
#: messages.go:177
|
||||
#: messages.go:189
|
||||
msgid "Indexing canceled"
|
||||
msgstr "تم إلغاء الفهرسة"
|
||||
|
||||
#: messages.go:178
|
||||
#: messages.go:190
|
||||
#, c-format
|
||||
msgid "Removed %d files and %d photos"
|
||||
msgstr "تمت إزالة %d ملفات و %d صورة"
|
||||
|
||||
#: messages.go:179
|
||||
#: messages.go:191
|
||||
#, c-format
|
||||
msgid "Moving files from %s"
|
||||
msgstr "نقل الملفات من %s"
|
||||
|
||||
#: messages.go:180
|
||||
#: messages.go:192
|
||||
#, c-format
|
||||
msgid "Copying files from %s"
|
||||
msgstr "نسخ ملفات من %s"
|
||||
|
||||
#: messages.go:181
|
||||
#: messages.go:193
|
||||
msgid "Labels deleted"
|
||||
msgstr "تم حذف التصنيفات"
|
||||
|
||||
#: messages.go:182
|
||||
#: messages.go:194
|
||||
msgid "Label saved"
|
||||
msgstr "تم حفظ التصنيف"
|
||||
|
||||
#: messages.go:183
|
||||
#: messages.go:195
|
||||
msgid "Subject saved"
|
||||
msgstr "تم حفظ الموضوع"
|
||||
|
||||
#: messages.go:184
|
||||
#: messages.go:196
|
||||
msgid "Subject deleted"
|
||||
msgstr "تم حذف الموضوع"
|
||||
|
||||
#: messages.go:185
|
||||
#: messages.go:197
|
||||
msgid "Person saved"
|
||||
msgstr "حفظ الشخص"
|
||||
|
||||
#: messages.go:186
|
||||
#: messages.go:198
|
||||
msgid "Person deleted"
|
||||
msgstr "تم حذف الشخص"
|
||||
|
||||
#: messages.go:187
|
||||
#: messages.go:199
|
||||
msgid "File uploaded"
|
||||
msgstr "تم تحميل الملف"
|
||||
|
||||
#: messages.go:188
|
||||
#: messages.go:200
|
||||
#, c-format
|
||||
msgid "%d files uploaded in %d s"
|
||||
msgstr "تم تحميل %d ملف في %d ثانية"
|
||||
|
||||
#: messages.go:189
|
||||
#: messages.go:201
|
||||
msgid "Processing upload..."
|
||||
msgstr "جارٍ معالجة التحميل ..."
|
||||
|
||||
#: messages.go:190
|
||||
#: messages.go:202
|
||||
msgid "Upload has been processed"
|
||||
msgstr "تمت معالجة التحميل"
|
||||
|
||||
#: messages.go:191
|
||||
#: messages.go:203
|
||||
msgid "Selection approved"
|
||||
msgstr "تمت الموافقة على الاختيار"
|
||||
|
||||
#: messages.go:192
|
||||
#: messages.go:204
|
||||
msgid "Selection archived"
|
||||
msgstr "تمت أرشفة الاختيار"
|
||||
|
||||
#: messages.go:193
|
||||
#: messages.go:205
|
||||
msgid "Selection restored"
|
||||
msgstr "تم استعادة المحتوى المحدد"
|
||||
|
||||
#: messages.go:194
|
||||
#: messages.go:206
|
||||
msgid "Selection marked as private"
|
||||
msgstr "تم تحديد الاختيار على أنه خاص"
|
||||
|
||||
#: messages.go:195
|
||||
#: messages.go:207
|
||||
msgid "Albums deleted"
|
||||
msgstr "تم حذف الألبومات"
|
||||
|
||||
#: messages.go:196
|
||||
#: messages.go:208
|
||||
#, c-format
|
||||
msgid "Zip created in %d s"
|
||||
msgstr "تم إنشاء الملف المضغوط خلال %d ثوانٍ"
|
||||
|
||||
#: messages.go:197
|
||||
#: messages.go:209
|
||||
msgid "Permanently deleted"
|
||||
msgstr "تم الحذف بشكل نهائي"
|
||||
|
||||
#: messages.go:198
|
||||
#: messages.go:210
|
||||
#, c-format
|
||||
msgid "%s has been restored"
|
||||
msgstr "تمت استعادة %s"
|
||||
|
||||
#: messages.go:199
|
||||
#: messages.go:211
|
||||
msgid "Successfully verified"
|
||||
msgstr "تم التحقق بنجاح"
|
||||
|
||||
#: messages.go:200
|
||||
#: messages.go:212
|
||||
msgid "Successfully activated"
|
||||
msgstr "تم التفعيل بنجاح"
|
||||
|
||||
|
|
|
|||
|
|
@ -2,10 +2,9 @@ msgid ""
|
|||
msgstr ""
|
||||
"Project-Id-Version: PACKAGE VERSION\n"
|
||||
"Report-Msgid-Bugs-To: \n"
|
||||
"POT-Creation-Date: 2025-10-17 17:32+0000\n"
|
||||
"PO-Revision-Date: 2025-10-22 08:25+0000\n"
|
||||
"Last-Translator: Google Cloud Translation Basic <noreply-mt-google-"
|
||||
"translate@weblate.org>\n"
|
||||
"POT-Creation-Date: 2026-06-27 09:13+0000\n"
|
||||
"PO-Revision-Date: 2026-06-27 10:28+0000\n"
|
||||
"Last-Translator: DeepL <noreply-mt-deepl@weblate.org>\n"
|
||||
"Language-Team: none\n"
|
||||
"Language: be\n"
|
||||
"MIME-Version: 1.0\n"
|
||||
|
|
@ -13,402 +12,418 @@ msgstr ""
|
|||
"Content-Transfer-Encoding: 8bit\n"
|
||||
"Plural-Forms: nplurals=3; plural=n%10==1 && n%100!=11 ? 0 : n%10>=2 && "
|
||||
"n%10<=4 && (n%100<10 || n%100>=20) ? 1 : 2;\n"
|
||||
"X-Generator: Weblate 5.13.3\n"
|
||||
"X-Generator: Weblate 2026.5\n"
|
||||
|
||||
#: messages.go:104
|
||||
#: messages.go:112
|
||||
msgid "Something went wrong, try again"
|
||||
msgstr "Нешта пайшло не так, паўтарыце спробу"
|
||||
|
||||
#: messages.go:105
|
||||
#: messages.go:113
|
||||
msgid "Unable to do that"
|
||||
msgstr "Немагчыма зрабіць гэта"
|
||||
|
||||
#: messages.go:106
|
||||
#: messages.go:114
|
||||
msgid "Changes could not be saved"
|
||||
msgstr "Не ўдалося захаваць змены"
|
||||
|
||||
#: messages.go:107
|
||||
#: messages.go:115
|
||||
msgid "Could not be deleted"
|
||||
msgstr "Немагчыма выдаліць"
|
||||
|
||||
#: messages.go:108
|
||||
#: messages.go:116
|
||||
#, c-format
|
||||
msgid "%s already exists"
|
||||
msgstr "%s ужо існуе"
|
||||
|
||||
#: messages.go:109
|
||||
#: messages.go:117
|
||||
msgid "Not found"
|
||||
msgstr "Не знойдзена"
|
||||
|
||||
#: messages.go:110
|
||||
#: messages.go:118
|
||||
msgid "File not found"
|
||||
msgstr "Файл не знойдзены"
|
||||
|
||||
#: messages.go:111
|
||||
#: messages.go:119
|
||||
msgid "File too large"
|
||||
msgstr "Файл занадта вялікі"
|
||||
|
||||
#: messages.go:112
|
||||
#: messages.go:120
|
||||
msgid "Unsupported"
|
||||
msgstr "Не падтрымліваецца"
|
||||
|
||||
#: messages.go:113
|
||||
#: messages.go:121
|
||||
msgid "Unsupported type"
|
||||
msgstr "Тып не падтрымліваецца"
|
||||
|
||||
#: messages.go:114
|
||||
#: messages.go:122
|
||||
msgid "Unsupported format"
|
||||
msgstr "Фармат не падтрымліваецца"
|
||||
|
||||
#: messages.go:115
|
||||
#: messages.go:123
|
||||
msgid "Originals folder is empty"
|
||||
msgstr "Тэчка арыгіналаў пустая"
|
||||
|
||||
#: messages.go:116
|
||||
#: messages.go:124
|
||||
msgid "Selection not found"
|
||||
msgstr "Выбар не знойдзены"
|
||||
|
||||
#: messages.go:117
|
||||
#: messages.go:125
|
||||
msgid "Entity not found"
|
||||
msgstr "Аб'ект не знойдзены"
|
||||
|
||||
#: messages.go:118
|
||||
#: messages.go:126
|
||||
msgid "Account not found"
|
||||
msgstr "Уліковы запіс не знойдзены"
|
||||
|
||||
#: messages.go:119
|
||||
#: messages.go:127
|
||||
msgid "User not found"
|
||||
msgstr "Карыстальнік не знойдзены"
|
||||
|
||||
#: messages.go:120
|
||||
#: messages.go:128
|
||||
msgid "Label not found"
|
||||
msgstr "Тэг не знойдзены"
|
||||
|
||||
#: messages.go:121
|
||||
#: messages.go:129
|
||||
msgid "Camera not found"
|
||||
msgstr "Камера не знойдзена"
|
||||
|
||||
#: messages.go:130
|
||||
msgid "Lens not found"
|
||||
msgstr "Аб'ектыў не знойдзены"
|
||||
|
||||
#: messages.go:131
|
||||
msgid "Album not found"
|
||||
msgstr "Альбом не знойдзены"
|
||||
|
||||
#: messages.go:122
|
||||
#: messages.go:132
|
||||
msgid "Subject not found"
|
||||
msgstr "Тэма не знойдзена"
|
||||
|
||||
#: messages.go:123
|
||||
#: messages.go:133
|
||||
msgid "Person not found"
|
||||
msgstr "Чалавек не знойдзены"
|
||||
|
||||
#: messages.go:124
|
||||
#: messages.go:134
|
||||
msgid "Face not found"
|
||||
msgstr "Твар не знойдзены"
|
||||
|
||||
#: messages.go:125
|
||||
#: messages.go:135
|
||||
msgid "Not available in public mode"
|
||||
msgstr "Недаступна ў публічным рэжыме"
|
||||
|
||||
#: messages.go:126
|
||||
#: messages.go:136
|
||||
msgid "Not available in read-only mode"
|
||||
msgstr "Недаступна ў рэжыме толькі для чытання"
|
||||
|
||||
#: messages.go:127
|
||||
#: messages.go:137
|
||||
msgid "Please log in to your account"
|
||||
msgstr "Калі ласка, увайдзіце ў свой уліковы запіс"
|
||||
|
||||
#: messages.go:128
|
||||
#: messages.go:138
|
||||
msgid "Permission denied"
|
||||
msgstr "У доступе адмоўлена"
|
||||
|
||||
#: messages.go:129
|
||||
#: messages.go:139
|
||||
msgid "Payment required"
|
||||
msgstr "Патрабуецца аплата"
|
||||
|
||||
#: messages.go:130
|
||||
#: messages.go:140
|
||||
msgid "Upload might be offensive"
|
||||
msgstr "Запампоўка можа быць абразлівай"
|
||||
|
||||
#: messages.go:131
|
||||
#: messages.go:141
|
||||
msgid "Upload failed"
|
||||
msgstr "Памылка загрузкі"
|
||||
|
||||
#: messages.go:132
|
||||
#: messages.go:142
|
||||
msgid "No items selected"
|
||||
msgstr "Элементы не выбраны"
|
||||
|
||||
#: messages.go:133
|
||||
#: messages.go:143
|
||||
msgid "Failed creating file, please check permissions"
|
||||
msgstr "Не ўдалося стварыць файл, праверце дазволы"
|
||||
|
||||
#: messages.go:134
|
||||
#: messages.go:144
|
||||
msgid "Failed creating folder, please check permissions"
|
||||
msgstr "Не атрымалася стварыць папку, праверце дазволы"
|
||||
|
||||
#: messages.go:135
|
||||
#: messages.go:145
|
||||
msgid "Could not connect, please try again"
|
||||
msgstr "Немагчыма падключыцца, паспрабуйце яшчэ раз"
|
||||
|
||||
#: messages.go:136
|
||||
#: messages.go:146
|
||||
msgid "Enter verification code"
|
||||
msgstr "Увядзіце праверачны код"
|
||||
|
||||
#: messages.go:137
|
||||
#: messages.go:147
|
||||
msgid "Invalid verification code, please try again"
|
||||
msgstr "Няправільны код спраўджання, паўтарыце спробу"
|
||||
|
||||
#: messages.go:138
|
||||
#: messages.go:148
|
||||
msgid "Invalid password, please try again"
|
||||
msgstr "Няправільны пароль, паспрабуйце яшчэ раз"
|
||||
|
||||
#: messages.go:139
|
||||
#: messages.go:149
|
||||
msgid "Feature disabled"
|
||||
msgstr "Функцыя адключана"
|
||||
|
||||
#: messages.go:140
|
||||
#: messages.go:150
|
||||
msgid "No labels selected"
|
||||
msgstr "Меткі не выбраны"
|
||||
|
||||
#: messages.go:141
|
||||
#: messages.go:151
|
||||
msgid "No albums selected"
|
||||
msgstr "Альбомы не выбраны"
|
||||
|
||||
#: messages.go:142
|
||||
#: messages.go:152
|
||||
msgid "No files available for download"
|
||||
msgstr "Няма даступных файлаў для спампоўкі"
|
||||
|
||||
#: messages.go:143
|
||||
#: messages.go:153
|
||||
msgid "Failed to create zip file"
|
||||
msgstr "Не ўдалося стварыць zip-файл"
|
||||
|
||||
#: messages.go:144
|
||||
#: messages.go:154
|
||||
msgid "Invalid credentials"
|
||||
msgstr "Няправільныя ўліковыя даныя"
|
||||
|
||||
#: messages.go:145
|
||||
#: messages.go:155
|
||||
msgid "Invalid link"
|
||||
msgstr "Няправільная спасылка"
|
||||
|
||||
#: messages.go:146
|
||||
#: messages.go:156
|
||||
msgid "Invalid name"
|
||||
msgstr "Няправільнае імя"
|
||||
|
||||
#: messages.go:147
|
||||
#: messages.go:157
|
||||
msgid "Busy, please try again later"
|
||||
msgstr "Заняты, паўтарыце спробу пазней"
|
||||
|
||||
#: messages.go:148
|
||||
#: messages.go:158
|
||||
#, c-format
|
||||
msgid "The wakeup interval is %s, but must be 1h or less"
|
||||
msgstr "Інтэрвал абуджэння складае %s, але павінен быць не больш за 1 гадзіну"
|
||||
|
||||
#: messages.go:149
|
||||
#: messages.go:159
|
||||
msgid "Your account could not be connected"
|
||||
msgstr "Ваш уліковы запіс не можа быць падключаны"
|
||||
|
||||
#: messages.go:150
|
||||
#: messages.go:160
|
||||
msgid "Too many requests"
|
||||
msgstr "Занадта шмат запытаў"
|
||||
|
||||
#: messages.go:151
|
||||
#: messages.go:161
|
||||
msgid "Insufficient storage"
|
||||
msgstr "Недастаткова месца для захоўвання"
|
||||
|
||||
#: messages.go:152
|
||||
#: messages.go:162
|
||||
msgid "Quota exceeded"
|
||||
msgstr "Квота перавышана"
|
||||
|
||||
#: messages.go:155
|
||||
#: messages.go:163
|
||||
msgid "Registration disabled"
|
||||
msgstr "Рэгістрацыя адключана"
|
||||
|
||||
#: messages.go:164
|
||||
msgid "Verified email required"
|
||||
msgstr "Патрабуецца правераны адрас электроннай пошты"
|
||||
|
||||
#: messages.go:167
|
||||
msgid "Changes successfully saved"
|
||||
msgstr "Змены паспяхова захаваны"
|
||||
|
||||
#: messages.go:156
|
||||
#: messages.go:168
|
||||
msgid "Album created"
|
||||
msgstr "Альбом створаны"
|
||||
|
||||
#: messages.go:157
|
||||
#: messages.go:169
|
||||
msgid "Album saved"
|
||||
msgstr "Альбом захаваны"
|
||||
|
||||
#: messages.go:158
|
||||
#: messages.go:170
|
||||
#, c-format
|
||||
msgid "Album %s deleted"
|
||||
msgstr "Альбом %s выдалены"
|
||||
|
||||
#: messages.go:159
|
||||
#: messages.go:171
|
||||
msgid "Album contents cloned"
|
||||
msgstr "Змест альбома кланаваны"
|
||||
|
||||
#: messages.go:160
|
||||
#: messages.go:172
|
||||
msgid "File removed from stack"
|
||||
msgstr "Файл выдалены са стэка"
|
||||
|
||||
#: messages.go:161
|
||||
#: messages.go:173
|
||||
msgid "File deleted"
|
||||
msgstr "Файл выдалены"
|
||||
|
||||
#: messages.go:162
|
||||
#: messages.go:174
|
||||
#, c-format
|
||||
msgid "Selection added to %s"
|
||||
msgstr "Выбар дададзены ў %s"
|
||||
|
||||
#: messages.go:163
|
||||
#: messages.go:175
|
||||
#, c-format
|
||||
msgid "One entry added to %s"
|
||||
msgstr "Адзін запіс дададзены ў %s"
|
||||
|
||||
#: messages.go:164
|
||||
#: messages.go:176
|
||||
#, c-format
|
||||
msgid "%d entries added to %s"
|
||||
msgstr "%d запісы дададзены ў %s"
|
||||
|
||||
#: messages.go:165
|
||||
#: messages.go:177
|
||||
#, c-format
|
||||
msgid "One entry removed from %s"
|
||||
msgstr "Адзін запіс выдалены з %s"
|
||||
|
||||
#: messages.go:166
|
||||
#: messages.go:178
|
||||
#, c-format
|
||||
msgid "%d entries removed from %s"
|
||||
msgstr "Запісы %d выдалены з %s"
|
||||
|
||||
#: messages.go:167
|
||||
#: messages.go:179
|
||||
msgid "Account created"
|
||||
msgstr "Уліковы запіс створаны"
|
||||
|
||||
#: messages.go:168
|
||||
#: messages.go:180
|
||||
msgid "Account saved"
|
||||
msgstr "Уліковы запіс захаваны"
|
||||
|
||||
#: messages.go:169
|
||||
#: messages.go:181
|
||||
msgid "Account deleted"
|
||||
msgstr "Уліковы запіс выдалены"
|
||||
|
||||
#: messages.go:170
|
||||
#: messages.go:182
|
||||
msgid "Settings saved"
|
||||
msgstr "Налады захаваны"
|
||||
|
||||
#: messages.go:171
|
||||
#: messages.go:183
|
||||
msgid "Password changed"
|
||||
msgstr "Пароль зменены"
|
||||
|
||||
#: messages.go:172
|
||||
#: messages.go:184
|
||||
#, c-format
|
||||
msgid "Import completed in %d s"
|
||||
msgstr "Імпарт завершаны праз %d с"
|
||||
|
||||
#: messages.go:173
|
||||
#: messages.go:185
|
||||
msgid "Import canceled"
|
||||
msgstr "Імпарт адменены"
|
||||
|
||||
#: messages.go:174
|
||||
#: messages.go:186
|
||||
#, c-format
|
||||
msgid "Indexing completed in %d s"
|
||||
msgstr "Індэксацыя завершана ў %d с"
|
||||
|
||||
#: messages.go:175
|
||||
#: messages.go:187
|
||||
msgid "Indexing originals..."
|
||||
msgstr "Індэксаванне арыгіналаў..."
|
||||
|
||||
#: messages.go:176
|
||||
#: messages.go:188
|
||||
#, c-format
|
||||
msgid "Indexing files in %s"
|
||||
msgstr "Індэксацыя файлаў у %s"
|
||||
|
||||
#: messages.go:177
|
||||
#: messages.go:189
|
||||
msgid "Indexing canceled"
|
||||
msgstr "Індэксацыя адменена"
|
||||
|
||||
#: messages.go:178
|
||||
#: messages.go:190
|
||||
#, c-format
|
||||
msgid "Removed %d files and %d photos"
|
||||
msgstr "Выдалена %d файлаў і %d фота"
|
||||
|
||||
#: messages.go:179
|
||||
#: messages.go:191
|
||||
#, c-format
|
||||
msgid "Moving files from %s"
|
||||
msgstr "Перамяшчэнне файлаў з %s"
|
||||
|
||||
#: messages.go:180
|
||||
#: messages.go:192
|
||||
#, c-format
|
||||
msgid "Copying files from %s"
|
||||
msgstr "Капіраванне файлаў з %s"
|
||||
|
||||
#: messages.go:181
|
||||
#: messages.go:193
|
||||
msgid "Labels deleted"
|
||||
msgstr "Меткі выдалены"
|
||||
|
||||
#: messages.go:182
|
||||
#: messages.go:194
|
||||
msgid "Label saved"
|
||||
msgstr "Цэтлік захаваны"
|
||||
|
||||
#: messages.go:183
|
||||
#: messages.go:195
|
||||
msgid "Subject saved"
|
||||
msgstr "Тэма захавана"
|
||||
|
||||
#: messages.go:184
|
||||
#: messages.go:196
|
||||
msgid "Subject deleted"
|
||||
msgstr "Тэма выдалена"
|
||||
|
||||
#: messages.go:185
|
||||
#: messages.go:197
|
||||
msgid "Person saved"
|
||||
msgstr "Чалавек выратаваны"
|
||||
|
||||
#: messages.go:186
|
||||
#: messages.go:198
|
||||
msgid "Person deleted"
|
||||
msgstr "Асоба выдалена"
|
||||
|
||||
#: messages.go:187
|
||||
#: messages.go:199
|
||||
msgid "File uploaded"
|
||||
msgstr "Файл запампаваны"
|
||||
|
||||
#: messages.go:188
|
||||
#: messages.go:200
|
||||
#, c-format
|
||||
msgid "%d files uploaded in %d s"
|
||||
msgstr "%d файлы, загружаныя ў %d с"
|
||||
|
||||
#: messages.go:189
|
||||
#: messages.go:201
|
||||
msgid "Processing upload..."
|
||||
msgstr "Апрацоўка запампоўкі..."
|
||||
|
||||
#: messages.go:190
|
||||
#: messages.go:202
|
||||
msgid "Upload has been processed"
|
||||
msgstr "Загрузка апрацавана"
|
||||
|
||||
#: messages.go:191
|
||||
#: messages.go:203
|
||||
msgid "Selection approved"
|
||||
msgstr "Выбар ухвалены"
|
||||
|
||||
#: messages.go:192
|
||||
#: messages.go:204
|
||||
msgid "Selection archived"
|
||||
msgstr "Выбранае заархівавана"
|
||||
|
||||
#: messages.go:193
|
||||
#: messages.go:205
|
||||
msgid "Selection restored"
|
||||
msgstr "Выбар адноўлены"
|
||||
|
||||
#: messages.go:194
|
||||
#: messages.go:206
|
||||
msgid "Selection marked as private"
|
||||
msgstr "Выбар пазначаны як прыватны"
|
||||
|
||||
#: messages.go:195
|
||||
#: messages.go:207
|
||||
msgid "Albums deleted"
|
||||
msgstr "Альбомы выдалены"
|
||||
|
||||
#: messages.go:196
|
||||
#: messages.go:208
|
||||
#, c-format
|
||||
msgid "Zip created in %d s"
|
||||
msgstr "Zip створаны ў %d с"
|
||||
|
||||
#: messages.go:197
|
||||
#: messages.go:209
|
||||
msgid "Permanently deleted"
|
||||
msgstr "Выдалены назаўсёды"
|
||||
|
||||
#: messages.go:198
|
||||
#: messages.go:210
|
||||
#, c-format
|
||||
msgid "%s has been restored"
|
||||
msgstr "%s быў адноўлены"
|
||||
|
||||
#: messages.go:199
|
||||
#: messages.go:211
|
||||
msgid "Successfully verified"
|
||||
msgstr "Паспяхова праверана"
|
||||
|
||||
#: messages.go:200
|
||||
#: messages.go:212
|
||||
msgid "Successfully activated"
|
||||
msgstr "Паспяхова актывавана"
|
||||
|
||||
|
|
|
|||
|
|
@ -2,8 +2,8 @@ msgid ""
|
|||
msgstr ""
|
||||
"Project-Id-Version: \n"
|
||||
"Report-Msgid-Bugs-To: \n"
|
||||
"POT-Creation-Date: 2025-10-17 17:32+0000\n"
|
||||
"PO-Revision-Date: 2025-10-22 08:25+0000\n"
|
||||
"POT-Creation-Date: 2026-06-27 09:13+0000\n"
|
||||
"PO-Revision-Date: 2026-06-27 10:28+0000\n"
|
||||
"Last-Translator: DeepL <noreply-mt-deepl@weblate.org>\n"
|
||||
"Language-Team: none\n"
|
||||
"Language: bg\n"
|
||||
|
|
@ -11,402 +11,418 @@ msgstr ""
|
|||
"Content-Type: text/plain; charset=UTF-8\n"
|
||||
"Content-Transfer-Encoding: 8bit\n"
|
||||
"Plural-Forms: nplurals=2; plural=n != 1;\n"
|
||||
"X-Generator: Weblate 5.13.3\n"
|
||||
"X-Generator: Weblate 2026.5\n"
|
||||
|
||||
#: messages.go:104
|
||||
#: messages.go:112
|
||||
msgid "Something went wrong, try again"
|
||||
msgstr "Нещо се е объркало, опитайте отново"
|
||||
|
||||
#: messages.go:105
|
||||
#: messages.go:113
|
||||
msgid "Unable to do that"
|
||||
msgstr "Не можете да го направите"
|
||||
|
||||
#: messages.go:106
|
||||
#: messages.go:114
|
||||
msgid "Changes could not be saved"
|
||||
msgstr "Промените не могат да бъдат запазени"
|
||||
|
||||
#: messages.go:107
|
||||
#: messages.go:115
|
||||
msgid "Could not be deleted"
|
||||
msgstr "Не може да бъде изтрит"
|
||||
|
||||
#: messages.go:108
|
||||
#: messages.go:116
|
||||
#, c-format
|
||||
msgid "%s already exists"
|
||||
msgstr "%s вече съществува"
|
||||
|
||||
#: messages.go:109
|
||||
#: messages.go:117
|
||||
msgid "Not found"
|
||||
msgstr "Не е намерен"
|
||||
|
||||
#: messages.go:110
|
||||
#: messages.go:118
|
||||
msgid "File not found"
|
||||
msgstr "Файлът не е намерен"
|
||||
|
||||
#: messages.go:111
|
||||
#: messages.go:119
|
||||
msgid "File too large"
|
||||
msgstr "Твърде голям файл"
|
||||
|
||||
#: messages.go:112
|
||||
#: messages.go:120
|
||||
msgid "Unsupported"
|
||||
msgstr "Не се поддържа"
|
||||
|
||||
#: messages.go:113
|
||||
#: messages.go:121
|
||||
msgid "Unsupported type"
|
||||
msgstr "Неподдържан тип"
|
||||
|
||||
#: messages.go:114
|
||||
#: messages.go:122
|
||||
msgid "Unsupported format"
|
||||
msgstr "Неподдържан формат"
|
||||
|
||||
#: messages.go:115
|
||||
#: messages.go:123
|
||||
msgid "Originals folder is empty"
|
||||
msgstr "Папката с оригинали е празна"
|
||||
|
||||
#: messages.go:116
|
||||
#: messages.go:124
|
||||
msgid "Selection not found"
|
||||
msgstr "Изборът не е намерен"
|
||||
|
||||
#: messages.go:117
|
||||
#: messages.go:125
|
||||
msgid "Entity not found"
|
||||
msgstr "Субектът не е намерен"
|
||||
|
||||
#: messages.go:118
|
||||
#: messages.go:126
|
||||
msgid "Account not found"
|
||||
msgstr "Акаунтът не е намерен"
|
||||
|
||||
#: messages.go:119
|
||||
#: messages.go:127
|
||||
msgid "User not found"
|
||||
msgstr "Потребителят не е намерен"
|
||||
|
||||
#: messages.go:120
|
||||
#: messages.go:128
|
||||
msgid "Label not found"
|
||||
msgstr "Етикетът не е намерен"
|
||||
|
||||
#: messages.go:121
|
||||
#: messages.go:129
|
||||
msgid "Camera not found"
|
||||
msgstr "Камерата не е открита"
|
||||
|
||||
#: messages.go:130
|
||||
msgid "Lens not found"
|
||||
msgstr "Обективът не е открит"
|
||||
|
||||
#: messages.go:131
|
||||
msgid "Album not found"
|
||||
msgstr "Албумът не е намерен"
|
||||
|
||||
#: messages.go:122
|
||||
#: messages.go:132
|
||||
msgid "Subject not found"
|
||||
msgstr "Темата не е намерена"
|
||||
|
||||
#: messages.go:123
|
||||
#: messages.go:133
|
||||
msgid "Person not found"
|
||||
msgstr "Лицето не е намерено"
|
||||
|
||||
#: messages.go:124
|
||||
#: messages.go:134
|
||||
msgid "Face not found"
|
||||
msgstr "Лицето не е намерено"
|
||||
|
||||
#: messages.go:125
|
||||
#: messages.go:135
|
||||
msgid "Not available in public mode"
|
||||
msgstr "Не е наличен в публичен режим"
|
||||
|
||||
#: messages.go:126
|
||||
#: messages.go:136
|
||||
msgid "Not available in read-only mode"
|
||||
msgstr "Не е наличен в режим само за четене"
|
||||
|
||||
#: messages.go:127
|
||||
#: messages.go:137
|
||||
msgid "Please log in to your account"
|
||||
msgstr "Моля, влезте в профила си"
|
||||
|
||||
#: messages.go:128
|
||||
#: messages.go:138
|
||||
msgid "Permission denied"
|
||||
msgstr "Достъп отказан"
|
||||
|
||||
#: messages.go:129
|
||||
#: messages.go:139
|
||||
msgid "Payment required"
|
||||
msgstr "Изисква се плащане"
|
||||
|
||||
#: messages.go:130
|
||||
#: messages.go:140
|
||||
msgid "Upload might be offensive"
|
||||
msgstr "Качването може да е обидно"
|
||||
|
||||
#: messages.go:131
|
||||
#: messages.go:141
|
||||
msgid "Upload failed"
|
||||
msgstr "Файловете не успяха да се качат"
|
||||
|
||||
#: messages.go:132
|
||||
#: messages.go:142
|
||||
msgid "No items selected"
|
||||
msgstr "Няма избрани елементи"
|
||||
|
||||
#: messages.go:133
|
||||
#: messages.go:143
|
||||
msgid "Failed creating file, please check permissions"
|
||||
msgstr "Неуспешно създаване на файл, моля, проверете разрешенията"
|
||||
|
||||
#: messages.go:134
|
||||
#: messages.go:144
|
||||
msgid "Failed creating folder, please check permissions"
|
||||
msgstr "Неуспешно създаване на папка, моля, проверете разрешенията"
|
||||
|
||||
#: messages.go:135
|
||||
#: messages.go:145
|
||||
msgid "Could not connect, please try again"
|
||||
msgstr "Не може да се свърже, опитайте отново"
|
||||
|
||||
#: messages.go:136
|
||||
#: messages.go:146
|
||||
msgid "Enter verification code"
|
||||
msgstr "Въведете код за верификация"
|
||||
|
||||
#: messages.go:137
|
||||
#: messages.go:147
|
||||
msgid "Invalid verification code, please try again"
|
||||
msgstr "Невалиден код за потвърждение, моля опитайте отново"
|
||||
|
||||
#: messages.go:138
|
||||
#: messages.go:148
|
||||
msgid "Invalid password, please try again"
|
||||
msgstr "Невалидна парола, моля, опитайте отново"
|
||||
|
||||
#: messages.go:139
|
||||
#: messages.go:149
|
||||
msgid "Feature disabled"
|
||||
msgstr "Функцията е деактивирана"
|
||||
|
||||
#: messages.go:140
|
||||
#: messages.go:150
|
||||
msgid "No labels selected"
|
||||
msgstr "Няма избрани етикети"
|
||||
|
||||
#: messages.go:141
|
||||
#: messages.go:151
|
||||
msgid "No albums selected"
|
||||
msgstr "Няма избрани албуми"
|
||||
|
||||
#: messages.go:142
|
||||
#: messages.go:152
|
||||
msgid "No files available for download"
|
||||
msgstr "Няма налични файлове за изтегляне"
|
||||
|
||||
#: messages.go:143
|
||||
#: messages.go:153
|
||||
msgid "Failed to create zip file"
|
||||
msgstr "Неуспешно създаване на zip файл"
|
||||
|
||||
#: messages.go:144
|
||||
#: messages.go:154
|
||||
msgid "Invalid credentials"
|
||||
msgstr "Невалидни креденции"
|
||||
|
||||
#: messages.go:145
|
||||
#: messages.go:155
|
||||
msgid "Invalid link"
|
||||
msgstr "Невалидна връзка"
|
||||
|
||||
#: messages.go:146
|
||||
#: messages.go:156
|
||||
msgid "Invalid name"
|
||||
msgstr "Невалидно име"
|
||||
|
||||
#: messages.go:147
|
||||
#: messages.go:157
|
||||
msgid "Busy, please try again later"
|
||||
msgstr "Заето, моля, опитайте отново по-късно"
|
||||
|
||||
#: messages.go:148
|
||||
#: messages.go:158
|
||||
#, c-format
|
||||
msgid "The wakeup interval is %s, but must be 1h or less"
|
||||
msgstr "Интервалът на събуждане е %s, но трябва да е 1 час или по-малко"
|
||||
|
||||
#: messages.go:149
|
||||
#: messages.go:159
|
||||
msgid "Your account could not be connected"
|
||||
msgstr "Вашият акаунт не може да бъде свързан"
|
||||
|
||||
#: messages.go:150
|
||||
#: messages.go:160
|
||||
msgid "Too many requests"
|
||||
msgstr "Твърде много заявки"
|
||||
|
||||
#: messages.go:151
|
||||
#: messages.go:161
|
||||
msgid "Insufficient storage"
|
||||
msgstr "Недостатъчно място за съхранение"
|
||||
|
||||
#: messages.go:152
|
||||
#: messages.go:162
|
||||
msgid "Quota exceeded"
|
||||
msgstr "Превишаване на квотата"
|
||||
|
||||
#: messages.go:155
|
||||
#: messages.go:163
|
||||
msgid "Registration disabled"
|
||||
msgstr "Регистрацията е деактивирана"
|
||||
|
||||
#: messages.go:164
|
||||
msgid "Verified email required"
|
||||
msgstr "Необходим е потвърден имейл адрес"
|
||||
|
||||
#: messages.go:167
|
||||
msgid "Changes successfully saved"
|
||||
msgstr "Промените са успешно записани"
|
||||
|
||||
#: messages.go:156
|
||||
#: messages.go:168
|
||||
msgid "Album created"
|
||||
msgstr "Създаден албум"
|
||||
|
||||
#: messages.go:157
|
||||
#: messages.go:169
|
||||
msgid "Album saved"
|
||||
msgstr "Запазен албум"
|
||||
|
||||
#: messages.go:158
|
||||
#: messages.go:170
|
||||
#, c-format
|
||||
msgid "Album %s deleted"
|
||||
msgstr "Албум %s изтрит"
|
||||
|
||||
#: messages.go:159
|
||||
#: messages.go:171
|
||||
msgid "Album contents cloned"
|
||||
msgstr "Съдържанието на албума беше клонирано"
|
||||
|
||||
#: messages.go:160
|
||||
#: messages.go:172
|
||||
msgid "File removed from stack"
|
||||
msgstr "Премахване на файла от стека"
|
||||
|
||||
#: messages.go:161
|
||||
#: messages.go:173
|
||||
msgid "File deleted"
|
||||
msgstr "Изтрит файл"
|
||||
|
||||
#: messages.go:162
|
||||
#: messages.go:174
|
||||
#, c-format
|
||||
msgid "Selection added to %s"
|
||||
msgstr "Добавяне на селекция към %s"
|
||||
|
||||
#: messages.go:163
|
||||
#: messages.go:175
|
||||
#, c-format
|
||||
msgid "One entry added to %s"
|
||||
msgstr "Добавяне на един запис към %s"
|
||||
|
||||
#: messages.go:164
|
||||
#: messages.go:176
|
||||
#, c-format
|
||||
msgid "%d entries added to %s"
|
||||
msgstr "%d добавени записи към %s"
|
||||
|
||||
#: messages.go:165
|
||||
#: messages.go:177
|
||||
#, c-format
|
||||
msgid "One entry removed from %s"
|
||||
msgstr "Отстранен е един запис от %s"
|
||||
|
||||
#: messages.go:166
|
||||
#: messages.go:178
|
||||
#, c-format
|
||||
msgid "%d entries removed from %s"
|
||||
msgstr "%d премахнати записи от %s"
|
||||
|
||||
#: messages.go:167
|
||||
#: messages.go:179
|
||||
msgid "Account created"
|
||||
msgstr "Създаден акаунт"
|
||||
|
||||
#: messages.go:168
|
||||
#: messages.go:180
|
||||
msgid "Account saved"
|
||||
msgstr "Акаунтът запазен"
|
||||
|
||||
#: messages.go:169
|
||||
#: messages.go:181
|
||||
msgid "Account deleted"
|
||||
msgstr "Изтрит акаунт"
|
||||
|
||||
#: messages.go:170
|
||||
#: messages.go:182
|
||||
msgid "Settings saved"
|
||||
msgstr "Запазени настройки"
|
||||
|
||||
#: messages.go:171
|
||||
#: messages.go:183
|
||||
msgid "Password changed"
|
||||
msgstr "Паролата е променена"
|
||||
|
||||
#: messages.go:172
|
||||
#: messages.go:184
|
||||
#, c-format
|
||||
msgid "Import completed in %d s"
|
||||
msgstr "Импортът е завършен за %d s"
|
||||
|
||||
#: messages.go:173
|
||||
#: messages.go:185
|
||||
msgid "Import canceled"
|
||||
msgstr "Вносът е отменен"
|
||||
|
||||
#: messages.go:174
|
||||
#: messages.go:186
|
||||
#, c-format
|
||||
msgid "Indexing completed in %d s"
|
||||
msgstr "Индексирането е завършено за %d сек"
|
||||
|
||||
#: messages.go:175
|
||||
#: messages.go:187
|
||||
msgid "Indexing originals..."
|
||||
msgstr "Индексиране на оригинали..."
|
||||
|
||||
#: messages.go:176
|
||||
#: messages.go:188
|
||||
#, c-format
|
||||
msgid "Indexing files in %s"
|
||||
msgstr "Индексиране на файлове в %s"
|
||||
|
||||
#: messages.go:177
|
||||
#: messages.go:189
|
||||
msgid "Indexing canceled"
|
||||
msgstr "Отменено индексиране"
|
||||
|
||||
#: messages.go:178
|
||||
#: messages.go:190
|
||||
#, c-format
|
||||
msgid "Removed %d files and %d photos"
|
||||
msgstr "Премахнати са %d файлове и %d снимки"
|
||||
|
||||
#: messages.go:179
|
||||
#: messages.go:191
|
||||
#, c-format
|
||||
msgid "Moving files from %s"
|
||||
msgstr "Преместване на файлове от %s"
|
||||
|
||||
#: messages.go:180
|
||||
#: messages.go:192
|
||||
#, c-format
|
||||
msgid "Copying files from %s"
|
||||
msgstr "Копиране на файлове от %s"
|
||||
|
||||
#: messages.go:181
|
||||
#: messages.go:193
|
||||
msgid "Labels deleted"
|
||||
msgstr "Изтрити етикети"
|
||||
|
||||
#: messages.go:182
|
||||
#: messages.go:194
|
||||
msgid "Label saved"
|
||||
msgstr "Запазен етикет"
|
||||
|
||||
#: messages.go:183
|
||||
#: messages.go:195
|
||||
msgid "Subject saved"
|
||||
msgstr "Тема: запазени"
|
||||
|
||||
#: messages.go:184
|
||||
#: messages.go:196
|
||||
msgid "Subject deleted"
|
||||
msgstr "Изтрит предмет"
|
||||
|
||||
#: messages.go:185
|
||||
#: messages.go:197
|
||||
msgid "Person saved"
|
||||
msgstr "Запазено лице"
|
||||
|
||||
#: messages.go:186
|
||||
#: messages.go:198
|
||||
msgid "Person deleted"
|
||||
msgstr "Изтрито лице"
|
||||
|
||||
#: messages.go:187
|
||||
#: messages.go:199
|
||||
msgid "File uploaded"
|
||||
msgstr "Качен файл"
|
||||
|
||||
#: messages.go:188
|
||||
#: messages.go:200
|
||||
#, c-format
|
||||
msgid "%d files uploaded in %d s"
|
||||
msgstr "%d файлове, качени за %d сек"
|
||||
|
||||
#: messages.go:189
|
||||
#: messages.go:201
|
||||
msgid "Processing upload..."
|
||||
msgstr "Обработка на качването..."
|
||||
|
||||
#: messages.go:190
|
||||
#: messages.go:202
|
||||
msgid "Upload has been processed"
|
||||
msgstr "Качването е обработено"
|
||||
|
||||
#: messages.go:191
|
||||
#: messages.go:203
|
||||
msgid "Selection approved"
|
||||
msgstr "Одобрена селекция"
|
||||
|
||||
#: messages.go:192
|
||||
#: messages.go:204
|
||||
msgid "Selection archived"
|
||||
msgstr "Архивирана селекция"
|
||||
|
||||
#: messages.go:193
|
||||
#: messages.go:205
|
||||
msgid "Selection restored"
|
||||
msgstr "Възстановена селекция"
|
||||
|
||||
#: messages.go:194
|
||||
#: messages.go:206
|
||||
msgid "Selection marked as private"
|
||||
msgstr "Селекция, отбелязана като частна"
|
||||
|
||||
#: messages.go:195
|
||||
#: messages.go:207
|
||||
msgid "Albums deleted"
|
||||
msgstr "Изтрити албуми"
|
||||
|
||||
#: messages.go:196
|
||||
#: messages.go:208
|
||||
#, c-format
|
||||
msgid "Zip created in %d s"
|
||||
msgstr "Zip създаден за %d s"
|
||||
|
||||
#: messages.go:197
|
||||
#: messages.go:209
|
||||
msgid "Permanently deleted"
|
||||
msgstr "Постоянно изтрити"
|
||||
|
||||
#: messages.go:198
|
||||
#: messages.go:210
|
||||
#, c-format
|
||||
msgid "%s has been restored"
|
||||
msgstr "%s е възстановена"
|
||||
|
||||
#: messages.go:199
|
||||
#: messages.go:211
|
||||
msgid "Successfully verified"
|
||||
msgstr "Успешно потвърдено"
|
||||
|
||||
#: messages.go:200
|
||||
#: messages.go:212
|
||||
msgid "Successfully activated"
|
||||
msgstr "Успешно активиран"
|
||||
|
||||
|
|
|
|||
|
|
@ -2,8 +2,8 @@ msgid ""
|
|||
msgstr ""
|
||||
"Project-Id-Version: \n"
|
||||
"Report-Msgid-Bugs-To: \n"
|
||||
"POT-Creation-Date: 2025-10-17 17:32+0000\n"
|
||||
"PO-Revision-Date: 2025-10-22 08:25+0000\n"
|
||||
"POT-Creation-Date: 2026-06-27 09:13+0000\n"
|
||||
"PO-Revision-Date: 2026-06-27 10:28+0000\n"
|
||||
"Last-Translator: Google Cloud Translation Basic <noreply-mt-google-"
|
||||
"translate@weblate.org>\n"
|
||||
"Language-Team: none\n"
|
||||
|
|
@ -12,402 +12,418 @@ msgstr ""
|
|||
"Content-Type: text/plain; charset=UTF-8\n"
|
||||
"Content-Transfer-Encoding: 8bit\n"
|
||||
"Plural-Forms: nplurals=2; plural=n != 1;\n"
|
||||
"X-Generator: Weblate 5.13.3\n"
|
||||
"X-Generator: Weblate 2026.5\n"
|
||||
|
||||
#: messages.go:104
|
||||
#: messages.go:112
|
||||
msgid "Something went wrong, try again"
|
||||
msgstr "S'ha produït un error, torna-ho a provar"
|
||||
|
||||
#: messages.go:105
|
||||
#: messages.go:113
|
||||
msgid "Unable to do that"
|
||||
msgstr "Incapaç de fer-ho"
|
||||
|
||||
#: messages.go:106
|
||||
#: messages.go:114
|
||||
msgid "Changes could not be saved"
|
||||
msgstr "No s'han pogut desar els canvis"
|
||||
|
||||
#: messages.go:107
|
||||
#: messages.go:115
|
||||
msgid "Could not be deleted"
|
||||
msgstr "No s'ha pogut suprimir"
|
||||
|
||||
#: messages.go:108
|
||||
#: messages.go:116
|
||||
#, c-format
|
||||
msgid "%s already exists"
|
||||
msgstr "%s El nom ja existeix"
|
||||
|
||||
#: messages.go:109
|
||||
#: messages.go:117
|
||||
msgid "Not found"
|
||||
msgstr "No trobat"
|
||||
|
||||
#: messages.go:110
|
||||
#: messages.go:118
|
||||
msgid "File not found"
|
||||
msgstr "No s'ha trobat el fitxer"
|
||||
|
||||
#: messages.go:111
|
||||
#: messages.go:119
|
||||
msgid "File too large"
|
||||
msgstr "Fitxer massa gran"
|
||||
|
||||
#: messages.go:112
|
||||
#: messages.go:120
|
||||
msgid "Unsupported"
|
||||
msgstr "Sense suport"
|
||||
|
||||
#: messages.go:113
|
||||
#: messages.go:121
|
||||
msgid "Unsupported type"
|
||||
msgstr "Tipus no compatible"
|
||||
|
||||
#: messages.go:114
|
||||
#: messages.go:122
|
||||
msgid "Unsupported format"
|
||||
msgstr "Format no compatible"
|
||||
|
||||
#: messages.go:115
|
||||
#: messages.go:123
|
||||
msgid "Originals folder is empty"
|
||||
msgstr "La carpeta d'originals està buida"
|
||||
|
||||
#: messages.go:116
|
||||
#: messages.go:124
|
||||
msgid "Selection not found"
|
||||
msgstr "No s'ha trobat la selecció"
|
||||
|
||||
#: messages.go:117
|
||||
#: messages.go:125
|
||||
msgid "Entity not found"
|
||||
msgstr "No s'ha trobat l'entitat"
|
||||
|
||||
#: messages.go:118
|
||||
#: messages.go:126
|
||||
msgid "Account not found"
|
||||
msgstr "Compte no trobat"
|
||||
|
||||
#: messages.go:119
|
||||
#: messages.go:127
|
||||
msgid "User not found"
|
||||
msgstr "Usuari no trobat"
|
||||
|
||||
#: messages.go:120
|
||||
#: messages.go:128
|
||||
msgid "Label not found"
|
||||
msgstr "No s'ha trobat l'etiqueta"
|
||||
|
||||
#: messages.go:121
|
||||
#: messages.go:129
|
||||
msgid "Camera not found"
|
||||
msgstr "No s'ha trobat la càmera"
|
||||
|
||||
#: messages.go:130
|
||||
msgid "Lens not found"
|
||||
msgstr "Lent no trobada"
|
||||
|
||||
#: messages.go:131
|
||||
msgid "Album not found"
|
||||
msgstr "No s'ha trobat l'àlbum"
|
||||
|
||||
#: messages.go:122
|
||||
#: messages.go:132
|
||||
msgid "Subject not found"
|
||||
msgstr "No s'ha trobat el tema"
|
||||
|
||||
#: messages.go:123
|
||||
#: messages.go:133
|
||||
msgid "Person not found"
|
||||
msgstr "Persona no trobada"
|
||||
|
||||
#: messages.go:124
|
||||
#: messages.go:134
|
||||
msgid "Face not found"
|
||||
msgstr "No s'ha trobat la cara"
|
||||
|
||||
#: messages.go:125
|
||||
#: messages.go:135
|
||||
msgid "Not available in public mode"
|
||||
msgstr "No disponible en mode públic"
|
||||
|
||||
#: messages.go:126
|
||||
#: messages.go:136
|
||||
msgid "Not available in read-only mode"
|
||||
msgstr "No disponible en mode només de lectura"
|
||||
|
||||
#: messages.go:127
|
||||
#: messages.go:137
|
||||
msgid "Please log in to your account"
|
||||
msgstr "Si us plau, inicieu sessió al vostre compte"
|
||||
|
||||
#: messages.go:128
|
||||
#: messages.go:138
|
||||
msgid "Permission denied"
|
||||
msgstr "Permís denegat"
|
||||
|
||||
#: messages.go:129
|
||||
#: messages.go:139
|
||||
msgid "Payment required"
|
||||
msgstr "Pagament requerit"
|
||||
|
||||
#: messages.go:130
|
||||
#: messages.go:140
|
||||
msgid "Upload might be offensive"
|
||||
msgstr "La càrrega pot ser ofensiva"
|
||||
|
||||
#: messages.go:131
|
||||
#: messages.go:141
|
||||
msgid "Upload failed"
|
||||
msgstr "La càrrega ha fallat"
|
||||
|
||||
#: messages.go:132
|
||||
#: messages.go:142
|
||||
msgid "No items selected"
|
||||
msgstr "No s'ha seleccionat cap element"
|
||||
|
||||
#: messages.go:133
|
||||
#: messages.go:143
|
||||
msgid "Failed creating file, please check permissions"
|
||||
msgstr "No s'ha pogut crear el fitxer, comproveu els permisos"
|
||||
|
||||
#: messages.go:134
|
||||
#: messages.go:144
|
||||
msgid "Failed creating folder, please check permissions"
|
||||
msgstr "No s'ha pogut crear la carpeta, comproveu els permisos"
|
||||
|
||||
#: messages.go:135
|
||||
#: messages.go:145
|
||||
msgid "Could not connect, please try again"
|
||||
msgstr "No s'ha pogut connectar, torna-ho a provar"
|
||||
|
||||
#: messages.go:136
|
||||
#: messages.go:146
|
||||
msgid "Enter verification code"
|
||||
msgstr "Introduïu el codi de verificació"
|
||||
|
||||
#: messages.go:137
|
||||
#: messages.go:147
|
||||
msgid "Invalid verification code, please try again"
|
||||
msgstr "Codi de verificació no vàlid, torneu-ho a provar"
|
||||
|
||||
#: messages.go:138
|
||||
#: messages.go:148
|
||||
msgid "Invalid password, please try again"
|
||||
msgstr "La contrasenya no és vàlida, torneu-ho a provar"
|
||||
|
||||
#: messages.go:139
|
||||
#: messages.go:149
|
||||
msgid "Feature disabled"
|
||||
msgstr "Funció desactivada"
|
||||
|
||||
#: messages.go:140
|
||||
#: messages.go:150
|
||||
msgid "No labels selected"
|
||||
msgstr "No s'ha seleccionat cap etiqueta"
|
||||
|
||||
#: messages.go:141
|
||||
#: messages.go:151
|
||||
msgid "No albums selected"
|
||||
msgstr "No s'ha seleccionat cap àlbum"
|
||||
|
||||
#: messages.go:142
|
||||
#: messages.go:152
|
||||
msgid "No files available for download"
|
||||
msgstr "No hi ha fitxers disponibles per a la baixada"
|
||||
|
||||
#: messages.go:143
|
||||
#: messages.go:153
|
||||
msgid "Failed to create zip file"
|
||||
msgstr "No s'ha pogut crear el fitxer zip"
|
||||
|
||||
#: messages.go:144
|
||||
#: messages.go:154
|
||||
msgid "Invalid credentials"
|
||||
msgstr "Credencials incorrectes"
|
||||
|
||||
#: messages.go:145
|
||||
#: messages.go:155
|
||||
msgid "Invalid link"
|
||||
msgstr "Enllaç no vàlid"
|
||||
|
||||
#: messages.go:146
|
||||
#: messages.go:156
|
||||
msgid "Invalid name"
|
||||
msgstr "Nom no vàlid"
|
||||
|
||||
#: messages.go:147
|
||||
#: messages.go:157
|
||||
msgid "Busy, please try again later"
|
||||
msgstr "Ocupat, torna-ho a provar més tard"
|
||||
|
||||
#: messages.go:148
|
||||
#: messages.go:158
|
||||
#, c-format
|
||||
msgid "The wakeup interval is %s, but must be 1h or less"
|
||||
msgstr "L'interval d'activació és %s, però ha de ser d'1 h o menys"
|
||||
|
||||
#: messages.go:149
|
||||
#: messages.go:159
|
||||
msgid "Your account could not be connected"
|
||||
msgstr "No s'ha pogut connectar el vostre compte"
|
||||
|
||||
#: messages.go:150
|
||||
#: messages.go:160
|
||||
msgid "Too many requests"
|
||||
msgstr "Massa peticions"
|
||||
|
||||
#: messages.go:151
|
||||
#: messages.go:161
|
||||
msgid "Insufficient storage"
|
||||
msgstr "Emmagatzematge insuficient"
|
||||
|
||||
#: messages.go:152
|
||||
#: messages.go:162
|
||||
msgid "Quota exceeded"
|
||||
msgstr "S'ha superat la quota"
|
||||
|
||||
#: messages.go:155
|
||||
#: messages.go:163
|
||||
msgid "Registration disabled"
|
||||
msgstr "Registre desactivat"
|
||||
|
||||
#: messages.go:164
|
||||
msgid "Verified email required"
|
||||
msgstr "Cal un correu electrònic verificat"
|
||||
|
||||
#: messages.go:167
|
||||
msgid "Changes successfully saved"
|
||||
msgstr "Els canvis s'han desat correctament"
|
||||
|
||||
#: messages.go:156
|
||||
#: messages.go:168
|
||||
msgid "Album created"
|
||||
msgstr "Àlbum creat"
|
||||
|
||||
#: messages.go:157
|
||||
#: messages.go:169
|
||||
msgid "Album saved"
|
||||
msgstr "Àlbum desat"
|
||||
|
||||
#: messages.go:158
|
||||
#: messages.go:170
|
||||
#, c-format
|
||||
msgid "Album %s deleted"
|
||||
msgstr "S'ha suprimit l'àlbum %s"
|
||||
|
||||
#: messages.go:159
|
||||
#: messages.go:171
|
||||
msgid "Album contents cloned"
|
||||
msgstr "Contingut de l'àlbum clonat"
|
||||
|
||||
#: messages.go:160
|
||||
#: messages.go:172
|
||||
msgid "File removed from stack"
|
||||
msgstr "S'ha eliminat el fitxer de la pila"
|
||||
|
||||
#: messages.go:161
|
||||
#: messages.go:173
|
||||
msgid "File deleted"
|
||||
msgstr "S'ha suprimit el fitxer"
|
||||
|
||||
#: messages.go:162
|
||||
#: messages.go:174
|
||||
#, c-format
|
||||
msgid "Selection added to %s"
|
||||
msgstr "S'ha afegit una selecció a %s"
|
||||
|
||||
#: messages.go:163
|
||||
#: messages.go:175
|
||||
#, c-format
|
||||
msgid "One entry added to %s"
|
||||
msgstr "S'ha afegit una entrada a %s"
|
||||
|
||||
#: messages.go:164
|
||||
#: messages.go:176
|
||||
#, c-format
|
||||
msgid "%d entries added to %s"
|
||||
msgstr "%d entrades afegides a %s"
|
||||
|
||||
#: messages.go:165
|
||||
#: messages.go:177
|
||||
#, c-format
|
||||
msgid "One entry removed from %s"
|
||||
msgstr "S'ha eliminat una entrada de %s"
|
||||
|
||||
#: messages.go:166
|
||||
#: messages.go:178
|
||||
#, c-format
|
||||
msgid "%d entries removed from %s"
|
||||
msgstr "S'han eliminat %d entrades de %s"
|
||||
|
||||
#: messages.go:167
|
||||
#: messages.go:179
|
||||
msgid "Account created"
|
||||
msgstr "Compte creat"
|
||||
|
||||
#: messages.go:168
|
||||
#: messages.go:180
|
||||
msgid "Account saved"
|
||||
msgstr "Compte desat"
|
||||
|
||||
#: messages.go:169
|
||||
#: messages.go:181
|
||||
msgid "Account deleted"
|
||||
msgstr "Compte suprimit"
|
||||
|
||||
#: messages.go:170
|
||||
#: messages.go:182
|
||||
msgid "Settings saved"
|
||||
msgstr "Configuració desada"
|
||||
|
||||
#: messages.go:171
|
||||
#: messages.go:183
|
||||
msgid "Password changed"
|
||||
msgstr "S’ha canviat la contrasenya"
|
||||
|
||||
#: messages.go:172
|
||||
#: messages.go:184
|
||||
#, c-format
|
||||
msgid "Import completed in %d s"
|
||||
msgstr "Importació completada en %d s"
|
||||
|
||||
#: messages.go:173
|
||||
#: messages.go:185
|
||||
msgid "Import canceled"
|
||||
msgstr "Importació cancel·lada"
|
||||
|
||||
#: messages.go:174
|
||||
#: messages.go:186
|
||||
#, c-format
|
||||
msgid "Indexing completed in %d s"
|
||||
msgstr "Indexació completada en %d s"
|
||||
|
||||
#: messages.go:175
|
||||
#: messages.go:187
|
||||
msgid "Indexing originals..."
|
||||
msgstr "S'estan indexant els originals..."
|
||||
|
||||
#: messages.go:176
|
||||
#: messages.go:188
|
||||
#, c-format
|
||||
msgid "Indexing files in %s"
|
||||
msgstr "Indexant fitxers a %s"
|
||||
|
||||
#: messages.go:177
|
||||
#: messages.go:189
|
||||
msgid "Indexing canceled"
|
||||
msgstr "S'ha cancel·lat la indexació"
|
||||
|
||||
#: messages.go:178
|
||||
#: messages.go:190
|
||||
#, c-format
|
||||
msgid "Removed %d files and %d photos"
|
||||
msgstr "S'han eliminat %d fitxers i %d fotos"
|
||||
|
||||
#: messages.go:179
|
||||
#: messages.go:191
|
||||
#, c-format
|
||||
msgid "Moving files from %s"
|
||||
msgstr "S'estan movent fitxers de %s"
|
||||
|
||||
#: messages.go:180
|
||||
#: messages.go:192
|
||||
#, c-format
|
||||
msgid "Copying files from %s"
|
||||
msgstr "S'estan copiant fitxers de %s"
|
||||
|
||||
#: messages.go:181
|
||||
#: messages.go:193
|
||||
msgid "Labels deleted"
|
||||
msgstr "S'han suprimit les etiquetes"
|
||||
|
||||
#: messages.go:182
|
||||
#: messages.go:194
|
||||
msgid "Label saved"
|
||||
msgstr "S'ha desat l'etiqueta"
|
||||
|
||||
#: messages.go:183
|
||||
#: messages.go:195
|
||||
msgid "Subject saved"
|
||||
msgstr "Assumpte desat"
|
||||
|
||||
#: messages.go:184
|
||||
#: messages.go:196
|
||||
msgid "Subject deleted"
|
||||
msgstr "S'ha suprimit el tema"
|
||||
|
||||
#: messages.go:185
|
||||
#: messages.go:197
|
||||
msgid "Person saved"
|
||||
msgstr "Persona salvada"
|
||||
|
||||
#: messages.go:186
|
||||
#: messages.go:198
|
||||
msgid "Person deleted"
|
||||
msgstr "S'ha suprimit la persona"
|
||||
|
||||
#: messages.go:187
|
||||
#: messages.go:199
|
||||
msgid "File uploaded"
|
||||
msgstr "Fitxer penjat"
|
||||
|
||||
#: messages.go:188
|
||||
#: messages.go:200
|
||||
#, c-format
|
||||
msgid "%d files uploaded in %d s"
|
||||
msgstr "%d fitxers penjats en %d s"
|
||||
|
||||
#: messages.go:189
|
||||
#: messages.go:201
|
||||
msgid "Processing upload..."
|
||||
msgstr "S'està processant la càrrega..."
|
||||
|
||||
#: messages.go:190
|
||||
#: messages.go:202
|
||||
msgid "Upload has been processed"
|
||||
msgstr "S'ha processat la càrrega"
|
||||
|
||||
#: messages.go:191
|
||||
#: messages.go:203
|
||||
msgid "Selection approved"
|
||||
msgstr "Selecció aprovada"
|
||||
|
||||
#: messages.go:192
|
||||
#: messages.go:204
|
||||
msgid "Selection archived"
|
||||
msgstr "Selecció arxivada"
|
||||
|
||||
#: messages.go:193
|
||||
#: messages.go:205
|
||||
msgid "Selection restored"
|
||||
msgstr "S'ha restaurat la selecció"
|
||||
|
||||
#: messages.go:194
|
||||
#: messages.go:206
|
||||
msgid "Selection marked as private"
|
||||
msgstr "La selecció s'ha marcat com a privada"
|
||||
|
||||
#: messages.go:195
|
||||
#: messages.go:207
|
||||
msgid "Albums deleted"
|
||||
msgstr "Àlbums suprimits"
|
||||
|
||||
#: messages.go:196
|
||||
#: messages.go:208
|
||||
#, c-format
|
||||
msgid "Zip created in %d s"
|
||||
msgstr "Zip creat en %d s"
|
||||
|
||||
#: messages.go:197
|
||||
#: messages.go:209
|
||||
msgid "Permanently deleted"
|
||||
msgstr "Esborrat permanentment"
|
||||
|
||||
#: messages.go:198
|
||||
#: messages.go:210
|
||||
#, c-format
|
||||
msgid "%s has been restored"
|
||||
msgstr "%s s'ha restaurat"
|
||||
|
||||
#: messages.go:199
|
||||
#: messages.go:211
|
||||
msgid "Successfully verified"
|
||||
msgstr "Verificat correctament"
|
||||
|
||||
#: messages.go:200
|
||||
#: messages.go:212
|
||||
msgid "Successfully activated"
|
||||
msgstr "S'ha activat correctament"
|
||||
|
||||
|
|
|
|||
|
|
@ -2,8 +2,8 @@ msgid ""
|
|||
msgstr ""
|
||||
"Project-Id-Version: \n"
|
||||
"Report-Msgid-Bugs-To: \n"
|
||||
"POT-Creation-Date: 2025-10-17 17:32+0000\n"
|
||||
"PO-Revision-Date: 2025-10-22 08:25+0000\n"
|
||||
"POT-Creation-Date: 2026-06-27 09:13+0000\n"
|
||||
"PO-Revision-Date: 2026-06-27 10:28+0000\n"
|
||||
"Last-Translator: DeepL <noreply-mt-deepl@weblate.org>\n"
|
||||
"Language-Team: Czech <https://translate.photoprism.app/projects/photoprism/"
|
||||
"backend/cs/>\n"
|
||||
|
|
@ -12,402 +12,418 @@ msgstr ""
|
|||
"Content-Type: text/plain; charset=UTF-8\n"
|
||||
"Content-Transfer-Encoding: 8bit\n"
|
||||
"Plural-Forms: nplurals=3; plural=(n==1) ? 0 : (n>=2 && n<=4) ? 1 : 2;\n"
|
||||
"X-Generator: Weblate 5.13.3\n"
|
||||
"X-Generator: Weblate 2026.5\n"
|
||||
|
||||
#: messages.go:104
|
||||
#: messages.go:112
|
||||
msgid "Something went wrong, try again"
|
||||
msgstr "Něco se pokazilo, zkuste to znovu"
|
||||
|
||||
#: messages.go:105
|
||||
#: messages.go:113
|
||||
msgid "Unable to do that"
|
||||
msgstr "Nelze to udělat"
|
||||
|
||||
#: messages.go:106
|
||||
#: messages.go:114
|
||||
msgid "Changes could not be saved"
|
||||
msgstr "Změny nemohly být uloženy"
|
||||
|
||||
#: messages.go:107
|
||||
#: messages.go:115
|
||||
msgid "Could not be deleted"
|
||||
msgstr "Nemohlo být vymazáno"
|
||||
|
||||
#: messages.go:108
|
||||
#: messages.go:116
|
||||
#, c-format
|
||||
msgid "%s already exists"
|
||||
msgstr "%s již existuje"
|
||||
|
||||
#: messages.go:109
|
||||
#: messages.go:117
|
||||
msgid "Not found"
|
||||
msgstr "Nenalezeno"
|
||||
|
||||
#: messages.go:110
|
||||
#: messages.go:118
|
||||
msgid "File not found"
|
||||
msgstr "Soubor nenalezen"
|
||||
|
||||
#: messages.go:111
|
||||
#: messages.go:119
|
||||
msgid "File too large"
|
||||
msgstr "Příliš velký soubor"
|
||||
|
||||
#: messages.go:112
|
||||
#: messages.go:120
|
||||
msgid "Unsupported"
|
||||
msgstr "Nepodporováno"
|
||||
|
||||
#: messages.go:113
|
||||
#: messages.go:121
|
||||
msgid "Unsupported type"
|
||||
msgstr "Nepodporovaný typ"
|
||||
|
||||
#: messages.go:114
|
||||
#: messages.go:122
|
||||
msgid "Unsupported format"
|
||||
msgstr "Nepodporovaný formát"
|
||||
|
||||
#: messages.go:115
|
||||
#: messages.go:123
|
||||
msgid "Originals folder is empty"
|
||||
msgstr "Složka Originály je prázdná"
|
||||
|
||||
#: messages.go:116
|
||||
#: messages.go:124
|
||||
msgid "Selection not found"
|
||||
msgstr "Výběr nenalezen"
|
||||
|
||||
#: messages.go:117
|
||||
#: messages.go:125
|
||||
msgid "Entity not found"
|
||||
msgstr "Subjekt nebyl nalezen"
|
||||
|
||||
#: messages.go:118
|
||||
#: messages.go:126
|
||||
msgid "Account not found"
|
||||
msgstr "Účet nenalezen"
|
||||
|
||||
#: messages.go:119
|
||||
#: messages.go:127
|
||||
msgid "User not found"
|
||||
msgstr "Uživatel nenalezen"
|
||||
|
||||
#: messages.go:120
|
||||
#: messages.go:128
|
||||
msgid "Label not found"
|
||||
msgstr "Štítek nenalezen"
|
||||
|
||||
#: messages.go:121
|
||||
#: messages.go:129
|
||||
msgid "Camera not found"
|
||||
msgstr "Fotoaparát nebyl nalezen"
|
||||
|
||||
#: messages.go:130
|
||||
msgid "Lens not found"
|
||||
msgstr "Objektiv nebyl nalezen"
|
||||
|
||||
#: messages.go:131
|
||||
msgid "Album not found"
|
||||
msgstr "Album nenalezeno"
|
||||
|
||||
#: messages.go:122
|
||||
#: messages.go:132
|
||||
msgid "Subject not found"
|
||||
msgstr "Předmět nebyl nalezen"
|
||||
|
||||
#: messages.go:123
|
||||
#: messages.go:133
|
||||
msgid "Person not found"
|
||||
msgstr "Osoba nebyla nalezena"
|
||||
|
||||
#: messages.go:124
|
||||
#: messages.go:134
|
||||
msgid "Face not found"
|
||||
msgstr "Obličej nebyl nalezen"
|
||||
|
||||
#: messages.go:125
|
||||
#: messages.go:135
|
||||
msgid "Not available in public mode"
|
||||
msgstr "Není k dispozici ve veřejném módu"
|
||||
|
||||
#: messages.go:126
|
||||
#: messages.go:136
|
||||
msgid "Not available in read-only mode"
|
||||
msgstr "Není k dispozici v režimu pouze pro čtení"
|
||||
|
||||
#: messages.go:127
|
||||
#: messages.go:137
|
||||
msgid "Please log in to your account"
|
||||
msgstr "Přihlaste se ke svému účtu"
|
||||
|
||||
#: messages.go:128
|
||||
#: messages.go:138
|
||||
msgid "Permission denied"
|
||||
msgstr "Přístup zamítnut"
|
||||
|
||||
#: messages.go:129
|
||||
#: messages.go:139
|
||||
msgid "Payment required"
|
||||
msgstr "Požadovaná platba"
|
||||
|
||||
#: messages.go:130
|
||||
#: messages.go:140
|
||||
msgid "Upload might be offensive"
|
||||
msgstr "Nahrané soubory by mohly být urážlivé"
|
||||
|
||||
#: messages.go:131
|
||||
#: messages.go:141
|
||||
msgid "Upload failed"
|
||||
msgstr "Nahrávání selhalo"
|
||||
|
||||
#: messages.go:132
|
||||
#: messages.go:142
|
||||
msgid "No items selected"
|
||||
msgstr "Nebyly vybrány žádné položky"
|
||||
|
||||
#: messages.go:133
|
||||
#: messages.go:143
|
||||
msgid "Failed creating file, please check permissions"
|
||||
msgstr "Vytváření souboru selhalo, zkontrolujte prosím oprávnění"
|
||||
|
||||
#: messages.go:134
|
||||
#: messages.go:144
|
||||
msgid "Failed creating folder, please check permissions"
|
||||
msgstr "Vytváření složky selhalo, zkontrolujte prosím oprávnění"
|
||||
|
||||
#: messages.go:135
|
||||
#: messages.go:145
|
||||
msgid "Could not connect, please try again"
|
||||
msgstr "Nemohlo být připojeno, zkuste to prosím znovu"
|
||||
|
||||
#: messages.go:136
|
||||
#: messages.go:146
|
||||
msgid "Enter verification code"
|
||||
msgstr "Vložte ověřovací kód"
|
||||
|
||||
#: messages.go:137
|
||||
#: messages.go:147
|
||||
msgid "Invalid verification code, please try again"
|
||||
msgstr "Neplatný ověřovací kód, zkuste to prosím znovu"
|
||||
|
||||
#: messages.go:138
|
||||
#: messages.go:148
|
||||
msgid "Invalid password, please try again"
|
||||
msgstr "Neplatné heslo, zkuste to prosím znovu"
|
||||
|
||||
#: messages.go:139
|
||||
#: messages.go:149
|
||||
msgid "Feature disabled"
|
||||
msgstr "Funkce deaktivovaná"
|
||||
|
||||
#: messages.go:140
|
||||
#: messages.go:150
|
||||
msgid "No labels selected"
|
||||
msgstr "Nebyly vybrány žádné štítky"
|
||||
|
||||
#: messages.go:141
|
||||
#: messages.go:151
|
||||
msgid "No albums selected"
|
||||
msgstr "Nebyla vybrána žádná alba"
|
||||
|
||||
#: messages.go:142
|
||||
#: messages.go:152
|
||||
msgid "No files available for download"
|
||||
msgstr "Žádné soubory ke stažení k dispozici"
|
||||
|
||||
#: messages.go:143
|
||||
#: messages.go:153
|
||||
msgid "Failed to create zip file"
|
||||
msgstr "Nebylo možné vytvořit soubor ZIP"
|
||||
|
||||
#: messages.go:144
|
||||
#: messages.go:154
|
||||
msgid "Invalid credentials"
|
||||
msgstr "Neplatné údaje"
|
||||
|
||||
#: messages.go:145
|
||||
#: messages.go:155
|
||||
msgid "Invalid link"
|
||||
msgstr "Neplatný odkaz"
|
||||
|
||||
#: messages.go:146
|
||||
#: messages.go:156
|
||||
msgid "Invalid name"
|
||||
msgstr "Neplatný jméno"
|
||||
|
||||
#: messages.go:147
|
||||
#: messages.go:157
|
||||
msgid "Busy, please try again later"
|
||||
msgstr "Zaneprázdněn, zkuste to prosím později"
|
||||
|
||||
#: messages.go:148
|
||||
#: messages.go:158
|
||||
#, c-format
|
||||
msgid "The wakeup interval is %s, but must be 1h or less"
|
||||
msgstr "Interval buzení je %s, ale musí být 1h nebo kratší"
|
||||
|
||||
#: messages.go:149
|
||||
#: messages.go:159
|
||||
msgid "Your account could not be connected"
|
||||
msgstr "Váš účet se nepodařilo připojit"
|
||||
|
||||
#: messages.go:150
|
||||
#: messages.go:160
|
||||
msgid "Too many requests"
|
||||
msgstr "Příliš mnoho požadavků"
|
||||
|
||||
#: messages.go:151
|
||||
#: messages.go:161
|
||||
msgid "Insufficient storage"
|
||||
msgstr "Nedostatečné skladování"
|
||||
|
||||
#: messages.go:152
|
||||
#: messages.go:162
|
||||
msgid "Quota exceeded"
|
||||
msgstr "Překročení kvóty"
|
||||
|
||||
#: messages.go:155
|
||||
#: messages.go:163
|
||||
msgid "Registration disabled"
|
||||
msgstr "Registrace je deaktivována"
|
||||
|
||||
#: messages.go:164
|
||||
msgid "Verified email required"
|
||||
msgstr "Je nutné zadat ověřenou e-mailovou adresu"
|
||||
|
||||
#: messages.go:167
|
||||
msgid "Changes successfully saved"
|
||||
msgstr "Změny byly úspěšně uloženy"
|
||||
|
||||
#: messages.go:156
|
||||
#: messages.go:168
|
||||
msgid "Album created"
|
||||
msgstr "Album vytvořeno"
|
||||
|
||||
#: messages.go:157
|
||||
#: messages.go:169
|
||||
msgid "Album saved"
|
||||
msgstr "Album uloženo"
|
||||
|
||||
#: messages.go:158
|
||||
#: messages.go:170
|
||||
#, c-format
|
||||
msgid "Album %s deleted"
|
||||
msgstr "Album %s vymazáno"
|
||||
|
||||
#: messages.go:159
|
||||
#: messages.go:171
|
||||
msgid "Album contents cloned"
|
||||
msgstr "Obsah alba naklonován"
|
||||
|
||||
#: messages.go:160
|
||||
#: messages.go:172
|
||||
msgid "File removed from stack"
|
||||
msgstr "Soubor odstraněn ze stohu"
|
||||
|
||||
#: messages.go:161
|
||||
#: messages.go:173
|
||||
msgid "File deleted"
|
||||
msgstr "Soubor vymazán"
|
||||
|
||||
#: messages.go:162
|
||||
#: messages.go:174
|
||||
#, c-format
|
||||
msgid "Selection added to %s"
|
||||
msgstr "Výběr přidán do %s"
|
||||
|
||||
#: messages.go:163
|
||||
#: messages.go:175
|
||||
#, c-format
|
||||
msgid "One entry added to %s"
|
||||
msgstr "Jeden záznam přidán do %s"
|
||||
|
||||
#: messages.go:164
|
||||
#: messages.go:176
|
||||
#, c-format
|
||||
msgid "%d entries added to %s"
|
||||
msgstr "%d záznamů přidáno do %s"
|
||||
|
||||
#: messages.go:165
|
||||
#: messages.go:177
|
||||
#, c-format
|
||||
msgid "One entry removed from %s"
|
||||
msgstr "Jeden záznam odstraněn z %s"
|
||||
|
||||
#: messages.go:166
|
||||
#: messages.go:178
|
||||
#, c-format
|
||||
msgid "%d entries removed from %s"
|
||||
msgstr "%d záznamů odstraněno z %s"
|
||||
|
||||
#: messages.go:167
|
||||
#: messages.go:179
|
||||
msgid "Account created"
|
||||
msgstr "Účet vytvořen"
|
||||
|
||||
#: messages.go:168
|
||||
#: messages.go:180
|
||||
msgid "Account saved"
|
||||
msgstr "Účet uložen"
|
||||
|
||||
#: messages.go:169
|
||||
#: messages.go:181
|
||||
msgid "Account deleted"
|
||||
msgstr "Účet vymazán"
|
||||
|
||||
#: messages.go:170
|
||||
#: messages.go:182
|
||||
msgid "Settings saved"
|
||||
msgstr "Nastavení uloženo"
|
||||
|
||||
#: messages.go:171
|
||||
#: messages.go:183
|
||||
msgid "Password changed"
|
||||
msgstr "Heslo změněno"
|
||||
|
||||
#: messages.go:172
|
||||
#: messages.go:184
|
||||
#, c-format
|
||||
msgid "Import completed in %d s"
|
||||
msgstr "Import dokončen za %d s"
|
||||
|
||||
#: messages.go:173
|
||||
#: messages.go:185
|
||||
msgid "Import canceled"
|
||||
msgstr "Import zrušen"
|
||||
|
||||
#: messages.go:174
|
||||
#: messages.go:186
|
||||
#, c-format
|
||||
msgid "Indexing completed in %d s"
|
||||
msgstr "Indexování dokončeno za %d s"
|
||||
|
||||
#: messages.go:175
|
||||
#: messages.go:187
|
||||
msgid "Indexing originals..."
|
||||
msgstr "Indexování originálů..."
|
||||
|
||||
#: messages.go:176
|
||||
#: messages.go:188
|
||||
#, c-format
|
||||
msgid "Indexing files in %s"
|
||||
msgstr "Indexování souborů v %s"
|
||||
|
||||
#: messages.go:177
|
||||
#: messages.go:189
|
||||
msgid "Indexing canceled"
|
||||
msgstr "Indexování zrušeno"
|
||||
|
||||
#: messages.go:178
|
||||
#: messages.go:190
|
||||
#, c-format
|
||||
msgid "Removed %d files and %d photos"
|
||||
msgstr "Odstraněno %d souborů a %d fotografií"
|
||||
|
||||
#: messages.go:179
|
||||
#: messages.go:191
|
||||
#, c-format
|
||||
msgid "Moving files from %s"
|
||||
msgstr "Přesouvání souborů z %s"
|
||||
|
||||
#: messages.go:180
|
||||
#: messages.go:192
|
||||
#, c-format
|
||||
msgid "Copying files from %s"
|
||||
msgstr "Kopírování souborů z %s"
|
||||
|
||||
#: messages.go:181
|
||||
#: messages.go:193
|
||||
msgid "Labels deleted"
|
||||
msgstr "Štítky vymazány"
|
||||
|
||||
#: messages.go:182
|
||||
#: messages.go:194
|
||||
msgid "Label saved"
|
||||
msgstr "Štítek uložen"
|
||||
|
||||
#: messages.go:183
|
||||
#: messages.go:195
|
||||
msgid "Subject saved"
|
||||
msgstr "Předmět uložen"
|
||||
|
||||
#: messages.go:184
|
||||
#: messages.go:196
|
||||
msgid "Subject deleted"
|
||||
msgstr "Předmět smazán"
|
||||
|
||||
#: messages.go:185
|
||||
#: messages.go:197
|
||||
msgid "Person saved"
|
||||
msgstr "Uložená osoba"
|
||||
|
||||
#: messages.go:186
|
||||
#: messages.go:198
|
||||
msgid "Person deleted"
|
||||
msgstr "Vymazaná osoba"
|
||||
|
||||
#: messages.go:187
|
||||
#: messages.go:199
|
||||
msgid "File uploaded"
|
||||
msgstr "Soubor odeslán"
|
||||
|
||||
#: messages.go:188
|
||||
#: messages.go:200
|
||||
#, c-format
|
||||
msgid "%d files uploaded in %d s"
|
||||
msgstr "%d souborů nahráno za %d s"
|
||||
|
||||
#: messages.go:189
|
||||
#: messages.go:201
|
||||
msgid "Processing upload..."
|
||||
msgstr "Zpracování nahrávání..."
|
||||
|
||||
#: messages.go:190
|
||||
#: messages.go:202
|
||||
msgid "Upload has been processed"
|
||||
msgstr "Nahrávání bylo zpracováno"
|
||||
|
||||
#: messages.go:191
|
||||
#: messages.go:203
|
||||
msgid "Selection approved"
|
||||
msgstr "Výběr potvrzen"
|
||||
|
||||
#: messages.go:192
|
||||
#: messages.go:204
|
||||
msgid "Selection archived"
|
||||
msgstr "Výběr archivován"
|
||||
|
||||
#: messages.go:193
|
||||
#: messages.go:205
|
||||
msgid "Selection restored"
|
||||
msgstr "Výběr obnoven"
|
||||
|
||||
#: messages.go:194
|
||||
#: messages.go:206
|
||||
msgid "Selection marked as private"
|
||||
msgstr "Výběr označen jako Soukromý"
|
||||
|
||||
#: messages.go:195
|
||||
#: messages.go:207
|
||||
msgid "Albums deleted"
|
||||
msgstr "Alba vymazána"
|
||||
|
||||
#: messages.go:196
|
||||
#: messages.go:208
|
||||
#, c-format
|
||||
msgid "Zip created in %d s"
|
||||
msgstr "ZIP vytvořen za %d s"
|
||||
|
||||
#: messages.go:197
|
||||
#: messages.go:209
|
||||
msgid "Permanently deleted"
|
||||
msgstr "Trvale smazáno"
|
||||
|
||||
#: messages.go:198
|
||||
#: messages.go:210
|
||||
#, c-format
|
||||
msgid "%s has been restored"
|
||||
msgstr "%s bylo obnoveno"
|
||||
|
||||
#: messages.go:199
|
||||
#: messages.go:211
|
||||
msgid "Successfully verified"
|
||||
msgstr "Úspěšně ověřeno"
|
||||
|
||||
#: messages.go:200
|
||||
#: messages.go:212
|
||||
msgid "Successfully activated"
|
||||
msgstr "Úspěšně aktivováno"
|
||||
|
||||
|
|
|
|||
|
|
@ -2,8 +2,8 @@ msgid ""
|
|||
msgstr ""
|
||||
"Project-Id-Version: PACKAGE VERSION\n"
|
||||
"Report-Msgid-Bugs-To: \n"
|
||||
"POT-Creation-Date: 2025-10-17 17:32+0000\n"
|
||||
"PO-Revision-Date: 2025-10-22 08:25+0000\n"
|
||||
"POT-Creation-Date: 2026-06-27 09:13+0000\n"
|
||||
"PO-Revision-Date: 2026-06-27 10:28+0000\n"
|
||||
"Last-Translator: DeepL <noreply-mt-deepl@weblate.org>\n"
|
||||
"Language-Team: Danish <https://translate.photoprism.app/projects/photoprism/"
|
||||
"backend/da/>\n"
|
||||
|
|
@ -12,402 +12,418 @@ msgstr ""
|
|||
"Content-Type: text/plain; charset=UTF-8\n"
|
||||
"Content-Transfer-Encoding: 8bit\n"
|
||||
"Plural-Forms: nplurals=2; plural=n != 1;\n"
|
||||
"X-Generator: Weblate 5.13.3\n"
|
||||
"X-Generator: Weblate 2026.5\n"
|
||||
|
||||
#: messages.go:104
|
||||
#: messages.go:112
|
||||
msgid "Something went wrong, try again"
|
||||
msgstr "Der gik noget galt, prøv igen"
|
||||
|
||||
#: messages.go:105
|
||||
#: messages.go:113
|
||||
msgid "Unable to do that"
|
||||
msgstr "Det kan ikke lade sig gøre"
|
||||
|
||||
#: messages.go:106
|
||||
#: messages.go:114
|
||||
msgid "Changes could not be saved"
|
||||
msgstr "Ændringer kunne ikke gemmes"
|
||||
|
||||
#: messages.go:107
|
||||
#: messages.go:115
|
||||
msgid "Could not be deleted"
|
||||
msgstr "Kunne ikke slettes"
|
||||
|
||||
#: messages.go:108
|
||||
#: messages.go:116
|
||||
#, c-format
|
||||
msgid "%s already exists"
|
||||
msgstr "%s findes allerede"
|
||||
|
||||
#: messages.go:109
|
||||
#: messages.go:117
|
||||
msgid "Not found"
|
||||
msgstr "Ikke fundet"
|
||||
|
||||
#: messages.go:110
|
||||
#: messages.go:118
|
||||
msgid "File not found"
|
||||
msgstr "Fil ikke fundet"
|
||||
|
||||
#: messages.go:111
|
||||
#: messages.go:119
|
||||
msgid "File too large"
|
||||
msgstr "Filen er for stor"
|
||||
|
||||
#: messages.go:112
|
||||
#: messages.go:120
|
||||
msgid "Unsupported"
|
||||
msgstr "Ikke understøttet"
|
||||
|
||||
#: messages.go:113
|
||||
#: messages.go:121
|
||||
msgid "Unsupported type"
|
||||
msgstr "Ikke-understøttet type"
|
||||
|
||||
#: messages.go:114
|
||||
#: messages.go:122
|
||||
msgid "Unsupported format"
|
||||
msgstr "Ikke understøttet format"
|
||||
|
||||
#: messages.go:115
|
||||
#: messages.go:123
|
||||
msgid "Originals folder is empty"
|
||||
msgstr "Mappen Originaler er tom"
|
||||
|
||||
#: messages.go:116
|
||||
#: messages.go:124
|
||||
msgid "Selection not found"
|
||||
msgstr "Valg ikke fundet"
|
||||
|
||||
#: messages.go:117
|
||||
#: messages.go:125
|
||||
msgid "Entity not found"
|
||||
msgstr "Enhed ikke fundet"
|
||||
|
||||
#: messages.go:118
|
||||
#: messages.go:126
|
||||
msgid "Account not found"
|
||||
msgstr "Konto ikke fundet"
|
||||
|
||||
#: messages.go:119
|
||||
#: messages.go:127
|
||||
msgid "User not found"
|
||||
msgstr "Bruger ikke fundet"
|
||||
|
||||
#: messages.go:120
|
||||
#: messages.go:128
|
||||
msgid "Label not found"
|
||||
msgstr "Etiket ikke fundet"
|
||||
|
||||
#: messages.go:121
|
||||
#: messages.go:129
|
||||
msgid "Camera not found"
|
||||
msgstr "Kameraet blev ikke fundet"
|
||||
|
||||
#: messages.go:130
|
||||
msgid "Lens not found"
|
||||
msgstr "Objektiv ikke fundet"
|
||||
|
||||
#: messages.go:131
|
||||
msgid "Album not found"
|
||||
msgstr "Album ikke fundet"
|
||||
|
||||
#: messages.go:122
|
||||
#: messages.go:132
|
||||
msgid "Subject not found"
|
||||
msgstr "Emne ikke fundet"
|
||||
|
||||
#: messages.go:123
|
||||
#: messages.go:133
|
||||
msgid "Person not found"
|
||||
msgstr "Person ikke fundet"
|
||||
|
||||
#: messages.go:124
|
||||
#: messages.go:134
|
||||
msgid "Face not found"
|
||||
msgstr "Ansigt ikke fundet"
|
||||
|
||||
#: messages.go:125
|
||||
#: messages.go:135
|
||||
msgid "Not available in public mode"
|
||||
msgstr "Ikke tilgængelig i offentlig tilstand"
|
||||
|
||||
#: messages.go:126
|
||||
#: messages.go:136
|
||||
msgid "Not available in read-only mode"
|
||||
msgstr "Ikke tilgængelig i skrivebeskyttet tilstand"
|
||||
|
||||
#: messages.go:127
|
||||
#: messages.go:137
|
||||
msgid "Please log in to your account"
|
||||
msgstr "Log ind på din konto"
|
||||
|
||||
#: messages.go:128
|
||||
#: messages.go:138
|
||||
msgid "Permission denied"
|
||||
msgstr "Tilladelse nægtet"
|
||||
|
||||
#: messages.go:129
|
||||
#: messages.go:139
|
||||
msgid "Payment required"
|
||||
msgstr "Betaling påkrævet"
|
||||
|
||||
#: messages.go:130
|
||||
#: messages.go:140
|
||||
msgid "Upload might be offensive"
|
||||
msgstr "Upload kan være stødende"
|
||||
|
||||
#: messages.go:131
|
||||
#: messages.go:141
|
||||
msgid "Upload failed"
|
||||
msgstr "Upload mislykkedes"
|
||||
|
||||
#: messages.go:132
|
||||
#: messages.go:142
|
||||
msgid "No items selected"
|
||||
msgstr "Ingen emner valgt"
|
||||
|
||||
#: messages.go:133
|
||||
#: messages.go:143
|
||||
msgid "Failed creating file, please check permissions"
|
||||
msgstr "Oprettelse af fil mislykkedes, tjek venligst tilladelser"
|
||||
|
||||
#: messages.go:134
|
||||
#: messages.go:144
|
||||
msgid "Failed creating folder, please check permissions"
|
||||
msgstr "Oprettelse af mappe mislykkedes, tjek venligst tilladelser"
|
||||
|
||||
#: messages.go:135
|
||||
#: messages.go:145
|
||||
msgid "Could not connect, please try again"
|
||||
msgstr "Kunne ikke oprette forbindelse, prøv venligst igen"
|
||||
|
||||
#: messages.go:136
|
||||
#: messages.go:146
|
||||
msgid "Enter verification code"
|
||||
msgstr "Indtast verifikations kode"
|
||||
|
||||
#: messages.go:137
|
||||
#: messages.go:147
|
||||
msgid "Invalid verification code, please try again"
|
||||
msgstr "Ugyldig bekræftelseskode. Prøv venligst igen"
|
||||
|
||||
#: messages.go:138
|
||||
#: messages.go:148
|
||||
msgid "Invalid password, please try again"
|
||||
msgstr "Ugyldig adgangskode, prøv venligst igen"
|
||||
|
||||
#: messages.go:139
|
||||
#: messages.go:149
|
||||
msgid "Feature disabled"
|
||||
msgstr "Funktion deaktiveret"
|
||||
|
||||
#: messages.go:140
|
||||
#: messages.go:150
|
||||
msgid "No labels selected"
|
||||
msgstr "Ingen etiketter valgt"
|
||||
|
||||
#: messages.go:141
|
||||
#: messages.go:151
|
||||
msgid "No albums selected"
|
||||
msgstr "Ingen album valgt"
|
||||
|
||||
#: messages.go:142
|
||||
#: messages.go:152
|
||||
msgid "No files available for download"
|
||||
msgstr "Ingen filer til rådighed til download"
|
||||
|
||||
#: messages.go:143
|
||||
#: messages.go:153
|
||||
msgid "Failed to create zip file"
|
||||
msgstr "Det lykkedes ikke at oprette zip-fil"
|
||||
|
||||
#: messages.go:144
|
||||
#: messages.go:154
|
||||
msgid "Invalid credentials"
|
||||
msgstr "Ugyldige legitimationsoplysninger"
|
||||
|
||||
#: messages.go:145
|
||||
#: messages.go:155
|
||||
msgid "Invalid link"
|
||||
msgstr "Ugyldigt link"
|
||||
|
||||
#: messages.go:146
|
||||
#: messages.go:156
|
||||
msgid "Invalid name"
|
||||
msgstr "Ugyldigt navn"
|
||||
|
||||
#: messages.go:147
|
||||
#: messages.go:157
|
||||
msgid "Busy, please try again later"
|
||||
msgstr "Optaget, prøv venligst igen senere"
|
||||
|
||||
#: messages.go:148
|
||||
#: messages.go:158
|
||||
#, c-format
|
||||
msgid "The wakeup interval is %s, but must be 1h or less"
|
||||
msgstr "Vækningsintervallet er %s, men skal være 1 time eller mindre"
|
||||
|
||||
#: messages.go:149
|
||||
#: messages.go:159
|
||||
msgid "Your account could not be connected"
|
||||
msgstr "Der kunne ikke oprettes forbindelse til din konto"
|
||||
|
||||
#: messages.go:150
|
||||
#: messages.go:160
|
||||
msgid "Too many requests"
|
||||
msgstr "For mange anmodninger"
|
||||
|
||||
#: messages.go:151
|
||||
#: messages.go:161
|
||||
msgid "Insufficient storage"
|
||||
msgstr "Utilstrækkelig opbevaring"
|
||||
|
||||
#: messages.go:152
|
||||
#: messages.go:162
|
||||
msgid "Quota exceeded"
|
||||
msgstr "Kvote overskredet"
|
||||
|
||||
#: messages.go:155
|
||||
#: messages.go:163
|
||||
msgid "Registration disabled"
|
||||
msgstr "Registrering er deaktiveret"
|
||||
|
||||
#: messages.go:164
|
||||
msgid "Verified email required"
|
||||
msgstr "Der kræves en bekræftet e-mailadresse"
|
||||
|
||||
#: messages.go:167
|
||||
msgid "Changes successfully saved"
|
||||
msgstr "Ændringer gemt med succes"
|
||||
|
||||
#: messages.go:156
|
||||
#: messages.go:168
|
||||
msgid "Album created"
|
||||
msgstr "Album oprettet"
|
||||
|
||||
#: messages.go:157
|
||||
#: messages.go:169
|
||||
msgid "Album saved"
|
||||
msgstr "Album gemt"
|
||||
|
||||
#: messages.go:158
|
||||
#: messages.go:170
|
||||
#, c-format
|
||||
msgid "Album %s deleted"
|
||||
msgstr "Album %s slettet"
|
||||
|
||||
#: messages.go:159
|
||||
#: messages.go:171
|
||||
msgid "Album contents cloned"
|
||||
msgstr "Albumindhold klonet"
|
||||
|
||||
#: messages.go:160
|
||||
#: messages.go:172
|
||||
msgid "File removed from stack"
|
||||
msgstr "Fil fjernet fra stakken"
|
||||
|
||||
#: messages.go:161
|
||||
#: messages.go:173
|
||||
msgid "File deleted"
|
||||
msgstr "Fil slettet"
|
||||
|
||||
#: messages.go:162
|
||||
#: messages.go:174
|
||||
#, c-format
|
||||
msgid "Selection added to %s"
|
||||
msgstr "Valg tilføjet til %s"
|
||||
|
||||
#: messages.go:163
|
||||
#: messages.go:175
|
||||
#, c-format
|
||||
msgid "One entry added to %s"
|
||||
msgstr "En post tilføjet til %s"
|
||||
|
||||
#: messages.go:164
|
||||
#: messages.go:176
|
||||
#, c-format
|
||||
msgid "%d entries added to %s"
|
||||
msgstr "%d poster tilføjet til %s"
|
||||
|
||||
#: messages.go:165
|
||||
#: messages.go:177
|
||||
#, c-format
|
||||
msgid "One entry removed from %s"
|
||||
msgstr "En post fjernet fra %s"
|
||||
|
||||
#: messages.go:166
|
||||
#: messages.go:178
|
||||
#, c-format
|
||||
msgid "%d entries removed from %s"
|
||||
msgstr "%d poster fjernet fra %s"
|
||||
|
||||
#: messages.go:167
|
||||
#: messages.go:179
|
||||
msgid "Account created"
|
||||
msgstr "Konto oprettet"
|
||||
|
||||
#: messages.go:168
|
||||
#: messages.go:180
|
||||
msgid "Account saved"
|
||||
msgstr "Gemte konto"
|
||||
|
||||
#: messages.go:169
|
||||
#: messages.go:181
|
||||
msgid "Account deleted"
|
||||
msgstr "Konto slettet"
|
||||
|
||||
#: messages.go:170
|
||||
#: messages.go:182
|
||||
msgid "Settings saved"
|
||||
msgstr "Indstillinger gemt"
|
||||
|
||||
#: messages.go:171
|
||||
#: messages.go:183
|
||||
msgid "Password changed"
|
||||
msgstr "Adgangskode ændret"
|
||||
|
||||
#: messages.go:172
|
||||
#: messages.go:184
|
||||
#, c-format
|
||||
msgid "Import completed in %d s"
|
||||
msgstr "Import afsluttet efter %d s"
|
||||
|
||||
#: messages.go:173
|
||||
#: messages.go:185
|
||||
msgid "Import canceled"
|
||||
msgstr "Import annulleret"
|
||||
|
||||
#: messages.go:174
|
||||
#: messages.go:186
|
||||
#, c-format
|
||||
msgid "Indexing completed in %d s"
|
||||
msgstr "Indeksering afsluttet efter %d s"
|
||||
|
||||
#: messages.go:175
|
||||
#: messages.go:187
|
||||
msgid "Indexing originals..."
|
||||
msgstr "Indeksering af originaler..."
|
||||
|
||||
#: messages.go:176
|
||||
#: messages.go:188
|
||||
#, c-format
|
||||
msgid "Indexing files in %s"
|
||||
msgstr "Indeksering af filer i %s"
|
||||
|
||||
#: messages.go:177
|
||||
#: messages.go:189
|
||||
msgid "Indexing canceled"
|
||||
msgstr "Indeksering annulleret"
|
||||
|
||||
#: messages.go:178
|
||||
#: messages.go:190
|
||||
#, c-format
|
||||
msgid "Removed %d files and %d photos"
|
||||
msgstr "Fjernede %d filer og %d fotos"
|
||||
|
||||
#: messages.go:179
|
||||
#: messages.go:191
|
||||
#, c-format
|
||||
msgid "Moving files from %s"
|
||||
msgstr "Flytter filer fra %s"
|
||||
|
||||
#: messages.go:180
|
||||
#: messages.go:192
|
||||
#, c-format
|
||||
msgid "Copying files from %s"
|
||||
msgstr "Kopierer filer fra %s"
|
||||
|
||||
#: messages.go:181
|
||||
#: messages.go:193
|
||||
msgid "Labels deleted"
|
||||
msgstr "Etiketter slettet"
|
||||
|
||||
#: messages.go:182
|
||||
#: messages.go:194
|
||||
msgid "Label saved"
|
||||
msgstr "Etikette gemt"
|
||||
|
||||
#: messages.go:183
|
||||
#: messages.go:195
|
||||
msgid "Subject saved"
|
||||
msgstr "Emne gemt"
|
||||
|
||||
#: messages.go:184
|
||||
#: messages.go:196
|
||||
msgid "Subject deleted"
|
||||
msgstr "Emne slettet"
|
||||
|
||||
#: messages.go:185
|
||||
#: messages.go:197
|
||||
msgid "Person saved"
|
||||
msgstr "Person gemt"
|
||||
|
||||
#: messages.go:186
|
||||
#: messages.go:198
|
||||
msgid "Person deleted"
|
||||
msgstr "Person slettet"
|
||||
|
||||
#: messages.go:187
|
||||
#: messages.go:199
|
||||
msgid "File uploaded"
|
||||
msgstr "Fil uploadet"
|
||||
|
||||
#: messages.go:188
|
||||
#: messages.go:200
|
||||
#, c-format
|
||||
msgid "%d files uploaded in %d s"
|
||||
msgstr "%d filer uploadet på %d s"
|
||||
|
||||
#: messages.go:189
|
||||
#: messages.go:201
|
||||
msgid "Processing upload..."
|
||||
msgstr "Behandling af upload..."
|
||||
|
||||
#: messages.go:190
|
||||
#: messages.go:202
|
||||
msgid "Upload has been processed"
|
||||
msgstr "Upload er blevet behandlet"
|
||||
|
||||
#: messages.go:191
|
||||
#: messages.go:203
|
||||
msgid "Selection approved"
|
||||
msgstr "Udvælgelse godkendt"
|
||||
|
||||
#: messages.go:192
|
||||
#: messages.go:204
|
||||
msgid "Selection archived"
|
||||
msgstr "Udvælgelse arkiveret"
|
||||
|
||||
#: messages.go:193
|
||||
#: messages.go:205
|
||||
msgid "Selection restored"
|
||||
msgstr "Udvalgte gendannet"
|
||||
|
||||
#: messages.go:194
|
||||
#: messages.go:206
|
||||
msgid "Selection marked as private"
|
||||
msgstr "Udvalgte er markeret som privat"
|
||||
|
||||
#: messages.go:195
|
||||
#: messages.go:207
|
||||
msgid "Albums deleted"
|
||||
msgstr "Albums slettet"
|
||||
|
||||
#: messages.go:196
|
||||
#: messages.go:208
|
||||
#, c-format
|
||||
msgid "Zip created in %d s"
|
||||
msgstr "Zip filen blev lavet på %d s"
|
||||
|
||||
#: messages.go:197
|
||||
#: messages.go:209
|
||||
msgid "Permanently deleted"
|
||||
msgstr "Permanent slettet"
|
||||
|
||||
#: messages.go:198
|
||||
#: messages.go:210
|
||||
#, c-format
|
||||
msgid "%s has been restored"
|
||||
msgstr "%s er blevet genoprettet"
|
||||
|
||||
#: messages.go:199
|
||||
#: messages.go:211
|
||||
msgid "Successfully verified"
|
||||
msgstr "Verifikation lykkedes"
|
||||
|
||||
#: messages.go:200
|
||||
#: messages.go:212
|
||||
msgid "Successfully activated"
|
||||
msgstr "Aktivering lykkedes"
|
||||
|
||||
|
|
|
|||
|
|
@ -2,8 +2,8 @@ msgid ""
|
|||
msgstr ""
|
||||
"Project-Id-Version: \n"
|
||||
"Report-Msgid-Bugs-To: \n"
|
||||
"POT-Creation-Date: 2025-10-17 17:32+0000\n"
|
||||
"PO-Revision-Date: 2025-10-22 08:25+0000\n"
|
||||
"POT-Creation-Date: 2026-06-27 09:13+0000\n"
|
||||
"PO-Revision-Date: 2026-06-27 10:28+0000\n"
|
||||
"Last-Translator: DeepL <noreply-mt-deepl@weblate.org>\n"
|
||||
"Language-Team: German <https://translate.photoprism.app/projects/photoprism/"
|
||||
"backend/de/>\n"
|
||||
|
|
@ -12,403 +12,419 @@ msgstr ""
|
|||
"Content-Type: text/plain; charset=UTF-8\n"
|
||||
"Content-Transfer-Encoding: 8bit\n"
|
||||
"Plural-Forms: nplurals=2; plural=n != 1;\n"
|
||||
"X-Generator: Weblate 5.13.3\n"
|
||||
"X-Generator: Weblate 2026.5\n"
|
||||
"X-Poedit-Basepath: .\n"
|
||||
|
||||
#: messages.go:104
|
||||
#: messages.go:112
|
||||
msgid "Something went wrong, try again"
|
||||
msgstr "Etwas ist schief gelaufen, versuche es noch einmal"
|
||||
|
||||
#: messages.go:105
|
||||
#: messages.go:113
|
||||
msgid "Unable to do that"
|
||||
msgstr "Dies ist nicht möglich"
|
||||
|
||||
#: messages.go:106
|
||||
#: messages.go:114
|
||||
msgid "Changes could not be saved"
|
||||
msgstr "Fehler beim Speichern der Daten"
|
||||
|
||||
#: messages.go:107
|
||||
#: messages.go:115
|
||||
msgid "Could not be deleted"
|
||||
msgstr "Konnte nicht gelöscht werden"
|
||||
|
||||
#: messages.go:108
|
||||
#: messages.go:116
|
||||
#, c-format
|
||||
msgid "%s already exists"
|
||||
msgstr "%s existiert bereits"
|
||||
|
||||
#: messages.go:109
|
||||
#: messages.go:117
|
||||
msgid "Not found"
|
||||
msgstr "Nicht gefunden"
|
||||
|
||||
#: messages.go:110
|
||||
#: messages.go:118
|
||||
msgid "File not found"
|
||||
msgstr "Datei konnte nicht gefunden werden"
|
||||
|
||||
#: messages.go:111
|
||||
#: messages.go:119
|
||||
msgid "File too large"
|
||||
msgstr "Datei zu groß"
|
||||
|
||||
#: messages.go:112
|
||||
#: messages.go:120
|
||||
msgid "Unsupported"
|
||||
msgstr "Wird nicht unterstützt"
|
||||
|
||||
#: messages.go:113
|
||||
#: messages.go:121
|
||||
msgid "Unsupported type"
|
||||
msgstr "Typ wird nicht unterstützt"
|
||||
|
||||
#: messages.go:114
|
||||
#: messages.go:122
|
||||
msgid "Unsupported format"
|
||||
msgstr "Nicht unterstütztes Format"
|
||||
|
||||
#: messages.go:115
|
||||
#: messages.go:123
|
||||
msgid "Originals folder is empty"
|
||||
msgstr "Originals-Verzeichnis ist leer"
|
||||
|
||||
#: messages.go:116
|
||||
#: messages.go:124
|
||||
msgid "Selection not found"
|
||||
msgstr "Auswahl nicht gefunden"
|
||||
|
||||
#: messages.go:117
|
||||
#: messages.go:125
|
||||
msgid "Entity not found"
|
||||
msgstr "Keine Daten gefunden"
|
||||
|
||||
#: messages.go:118
|
||||
#: messages.go:126
|
||||
msgid "Account not found"
|
||||
msgstr "Unbekannter Account"
|
||||
|
||||
#: messages.go:119
|
||||
#: messages.go:127
|
||||
msgid "User not found"
|
||||
msgstr "Nutzer nicht gefunden"
|
||||
|
||||
#: messages.go:120
|
||||
#: messages.go:128
|
||||
msgid "Label not found"
|
||||
msgstr "Kategorie nicht gefunden"
|
||||
|
||||
#: messages.go:121
|
||||
#: messages.go:129
|
||||
msgid "Camera not found"
|
||||
msgstr "Kamera nicht gefunden"
|
||||
|
||||
#: messages.go:130
|
||||
msgid "Lens not found"
|
||||
msgstr "Objektiv nicht gefunden"
|
||||
|
||||
#: messages.go:131
|
||||
msgid "Album not found"
|
||||
msgstr "Album nicht gefunden"
|
||||
|
||||
#: messages.go:122
|
||||
#: messages.go:132
|
||||
msgid "Subject not found"
|
||||
msgstr "Unbekanntes Motiv"
|
||||
|
||||
#: messages.go:123
|
||||
#: messages.go:133
|
||||
msgid "Person not found"
|
||||
msgstr "Unbekannte Person"
|
||||
|
||||
#: messages.go:124
|
||||
#: messages.go:134
|
||||
msgid "Face not found"
|
||||
msgstr "Unbekanntes Gesicht"
|
||||
|
||||
#: messages.go:125
|
||||
#: messages.go:135
|
||||
msgid "Not available in public mode"
|
||||
msgstr "Im öffentlichen Modus nicht verfügbar"
|
||||
|
||||
#: messages.go:126
|
||||
#: messages.go:136
|
||||
msgid "Not available in read-only mode"
|
||||
msgstr "Im Nur-Lese-Modus nicht verfügbar"
|
||||
|
||||
#: messages.go:127
|
||||
#: messages.go:137
|
||||
msgid "Please log in to your account"
|
||||
msgstr "Bitte melde dich an"
|
||||
|
||||
#: messages.go:128
|
||||
#: messages.go:138
|
||||
msgid "Permission denied"
|
||||
msgstr "Erlaubnis verweigert"
|
||||
|
||||
#: messages.go:129
|
||||
#: messages.go:139
|
||||
msgid "Payment required"
|
||||
msgstr "Zahlung erforderlich"
|
||||
|
||||
#: messages.go:130
|
||||
#: messages.go:140
|
||||
msgid "Upload might be offensive"
|
||||
msgstr "Inhalt könnte anstößig sein und wurde abgelehnt"
|
||||
|
||||
#: messages.go:131
|
||||
#: messages.go:141
|
||||
msgid "Upload failed"
|
||||
msgstr "Upload fehlgeschlagen"
|
||||
|
||||
#: messages.go:132
|
||||
#: messages.go:142
|
||||
msgid "No items selected"
|
||||
msgstr "Nichts ausgewählt"
|
||||
|
||||
#: messages.go:133
|
||||
#: messages.go:143
|
||||
msgid "Failed creating file, please check permissions"
|
||||
msgstr "Datei konnte nicht erstellt werden"
|
||||
|
||||
#: messages.go:134
|
||||
#: messages.go:144
|
||||
msgid "Failed creating folder, please check permissions"
|
||||
msgstr "Ordner konnte nicht erstellt werden"
|
||||
|
||||
#: messages.go:135
|
||||
#: messages.go:145
|
||||
msgid "Could not connect, please try again"
|
||||
msgstr "Verbindung fehlgeschlagen"
|
||||
|
||||
#: messages.go:136
|
||||
#: messages.go:146
|
||||
msgid "Enter verification code"
|
||||
msgstr "Verifizierungscode eingeben"
|
||||
|
||||
#: messages.go:137
|
||||
#: messages.go:147
|
||||
msgid "Invalid verification code, please try again"
|
||||
msgstr "Ungültiger Verifizierungscode, bitte erneut versuchen"
|
||||
|
||||
#: messages.go:138
|
||||
#: messages.go:148
|
||||
msgid "Invalid password, please try again"
|
||||
msgstr "Ungültiges Passwort"
|
||||
|
||||
#: messages.go:139
|
||||
#: messages.go:149
|
||||
msgid "Feature disabled"
|
||||
msgstr "Funktion deaktiviert"
|
||||
|
||||
#: messages.go:140
|
||||
#: messages.go:150
|
||||
msgid "No labels selected"
|
||||
msgstr "Keine Kategorien ausgewählt"
|
||||
|
||||
#: messages.go:141
|
||||
#: messages.go:151
|
||||
msgid "No albums selected"
|
||||
msgstr "Keine Alben ausgewählt"
|
||||
|
||||
#: messages.go:142
|
||||
#: messages.go:152
|
||||
msgid "No files available for download"
|
||||
msgstr "Keine Dateien zum Download verfügbar"
|
||||
|
||||
#: messages.go:143
|
||||
#: messages.go:153
|
||||
msgid "Failed to create zip file"
|
||||
msgstr "Zip-Datei konnte nicht erstellt werden"
|
||||
|
||||
#: messages.go:144
|
||||
#: messages.go:154
|
||||
msgid "Invalid credentials"
|
||||
msgstr "Ungültige Zugangsdaten"
|
||||
|
||||
#: messages.go:145
|
||||
#: messages.go:155
|
||||
msgid "Invalid link"
|
||||
msgstr "Ungültiger Link"
|
||||
|
||||
#: messages.go:146
|
||||
#: messages.go:156
|
||||
msgid "Invalid name"
|
||||
msgstr "Ungültiger Name"
|
||||
|
||||
#: messages.go:147
|
||||
#: messages.go:157
|
||||
msgid "Busy, please try again later"
|
||||
msgstr "Beschäftigt, bitte später erneut versuchen"
|
||||
|
||||
#: messages.go:148
|
||||
#: messages.go:158
|
||||
#, c-format
|
||||
msgid "The wakeup interval is %s, but must be 1h or less"
|
||||
msgstr "Worker-Intervall ist %s, muss aber 1h oder weniger betragen"
|
||||
|
||||
#: messages.go:149
|
||||
#: messages.go:159
|
||||
msgid "Your account could not be connected"
|
||||
msgstr "Das Konto konnte nicht verbunden werden"
|
||||
|
||||
#: messages.go:150
|
||||
#: messages.go:160
|
||||
msgid "Too many requests"
|
||||
msgstr "Zu viele Anfragen"
|
||||
|
||||
#: messages.go:151
|
||||
#: messages.go:161
|
||||
msgid "Insufficient storage"
|
||||
msgstr "Zu wenig Speicherplatz"
|
||||
|
||||
#: messages.go:152
|
||||
#: messages.go:162
|
||||
msgid "Quota exceeded"
|
||||
msgstr "Maximale Anzahl erreicht"
|
||||
|
||||
#: messages.go:155
|
||||
#: messages.go:163
|
||||
msgid "Registration disabled"
|
||||
msgstr "Registrierung deaktiviert"
|
||||
|
||||
#: messages.go:164
|
||||
msgid "Verified email required"
|
||||
msgstr "Eine verifizierte E-Mail-Adresse ist erforderlich"
|
||||
|
||||
#: messages.go:167
|
||||
msgid "Changes successfully saved"
|
||||
msgstr "Änderungen erfolgreich gespeichert"
|
||||
|
||||
#: messages.go:156
|
||||
#: messages.go:168
|
||||
msgid "Album created"
|
||||
msgstr "Album erstellt"
|
||||
|
||||
#: messages.go:157
|
||||
#: messages.go:169
|
||||
msgid "Album saved"
|
||||
msgstr "Album gespeichert"
|
||||
|
||||
#: messages.go:158
|
||||
#: messages.go:170
|
||||
#, c-format
|
||||
msgid "Album %s deleted"
|
||||
msgstr "Album %s gelöscht"
|
||||
|
||||
#: messages.go:159
|
||||
#: messages.go:171
|
||||
msgid "Album contents cloned"
|
||||
msgstr "Album-Einträge kopiert"
|
||||
|
||||
#: messages.go:160
|
||||
#: messages.go:172
|
||||
msgid "File removed from stack"
|
||||
msgstr "Datei aus Stapel entfernt"
|
||||
|
||||
#: messages.go:161
|
||||
#: messages.go:173
|
||||
msgid "File deleted"
|
||||
msgstr "Datei gelöscht"
|
||||
|
||||
#: messages.go:162
|
||||
#: messages.go:174
|
||||
#, c-format
|
||||
msgid "Selection added to %s"
|
||||
msgstr "Auswahl zu %s hinzugefügt"
|
||||
|
||||
#: messages.go:163
|
||||
#: messages.go:175
|
||||
#, c-format
|
||||
msgid "One entry added to %s"
|
||||
msgstr "Ein Eintrag zu %s hinzugefügt"
|
||||
|
||||
#: messages.go:164
|
||||
#: messages.go:176
|
||||
#, c-format
|
||||
msgid "%d entries added to %s"
|
||||
msgstr "%d Einträge zu %s hinzugefügt"
|
||||
|
||||
#: messages.go:165
|
||||
#: messages.go:177
|
||||
#, c-format
|
||||
msgid "One entry removed from %s"
|
||||
msgstr "Ein Eintrag aus %s entfernt"
|
||||
|
||||
#: messages.go:166
|
||||
#: messages.go:178
|
||||
#, c-format
|
||||
msgid "%d entries removed from %s"
|
||||
msgstr "%d Einträge aus %s entfernt"
|
||||
|
||||
#: messages.go:167
|
||||
#: messages.go:179
|
||||
msgid "Account created"
|
||||
msgstr "Konto hinzugefügt"
|
||||
|
||||
#: messages.go:168
|
||||
#: messages.go:180
|
||||
msgid "Account saved"
|
||||
msgstr "Konto gespeichert"
|
||||
|
||||
#: messages.go:169
|
||||
#: messages.go:181
|
||||
msgid "Account deleted"
|
||||
msgstr "Konto gelöscht"
|
||||
|
||||
#: messages.go:170
|
||||
#: messages.go:182
|
||||
msgid "Settings saved"
|
||||
msgstr "Einstellungen gespeichert"
|
||||
|
||||
#: messages.go:171
|
||||
#: messages.go:183
|
||||
msgid "Password changed"
|
||||
msgstr "Passwort geändert"
|
||||
|
||||
#: messages.go:172
|
||||
#: messages.go:184
|
||||
#, c-format
|
||||
msgid "Import completed in %d s"
|
||||
msgstr "Import in %d s abgeschlossen"
|
||||
|
||||
#: messages.go:173
|
||||
#: messages.go:185
|
||||
msgid "Import canceled"
|
||||
msgstr "Import abgebrochen"
|
||||
|
||||
#: messages.go:174
|
||||
#: messages.go:186
|
||||
#, c-format
|
||||
msgid "Indexing completed in %d s"
|
||||
msgstr "Indexierung in %d s abgeschlossen"
|
||||
|
||||
#: messages.go:175
|
||||
#: messages.go:187
|
||||
msgid "Indexing originals..."
|
||||
msgstr "Indexiere Dateien…"
|
||||
|
||||
#: messages.go:176
|
||||
#: messages.go:188
|
||||
#, c-format
|
||||
msgid "Indexing files in %s"
|
||||
msgstr "Indexiere Dateien in %s"
|
||||
|
||||
#: messages.go:177
|
||||
#: messages.go:189
|
||||
msgid "Indexing canceled"
|
||||
msgstr "Indexierung abgebrochen"
|
||||
|
||||
#: messages.go:178
|
||||
#: messages.go:190
|
||||
#, c-format
|
||||
msgid "Removed %d files and %d photos"
|
||||
msgstr "%d Dateien und %d Bilder wurden entfernt"
|
||||
|
||||
#: messages.go:179
|
||||
#: messages.go:191
|
||||
#, c-format
|
||||
msgid "Moving files from %s"
|
||||
msgstr "Verschiebe Dateien von %s"
|
||||
|
||||
#: messages.go:180
|
||||
#: messages.go:192
|
||||
#, c-format
|
||||
msgid "Copying files from %s"
|
||||
msgstr "Kopiere Dateien von %s"
|
||||
|
||||
#: messages.go:181
|
||||
#: messages.go:193
|
||||
msgid "Labels deleted"
|
||||
msgstr "Kategorien gelöscht"
|
||||
|
||||
#: messages.go:182
|
||||
#: messages.go:194
|
||||
msgid "Label saved"
|
||||
msgstr "Kategorie gespeichert"
|
||||
|
||||
#: messages.go:183
|
||||
#: messages.go:195
|
||||
msgid "Subject saved"
|
||||
msgstr "Motiv gespeichert"
|
||||
|
||||
#: messages.go:184
|
||||
#: messages.go:196
|
||||
msgid "Subject deleted"
|
||||
msgstr "Motiv gelöscht"
|
||||
|
||||
#: messages.go:185
|
||||
#: messages.go:197
|
||||
msgid "Person saved"
|
||||
msgstr "Person gespeichert"
|
||||
|
||||
#: messages.go:186
|
||||
#: messages.go:198
|
||||
msgid "Person deleted"
|
||||
msgstr "Person gelöscht"
|
||||
|
||||
#: messages.go:187
|
||||
#: messages.go:199
|
||||
msgid "File uploaded"
|
||||
msgstr "Datei hochgeladen"
|
||||
|
||||
#: messages.go:188
|
||||
#: messages.go:200
|
||||
#, c-format
|
||||
msgid "%d files uploaded in %d s"
|
||||
msgstr "%d Dateien hochgeladen in %d s"
|
||||
|
||||
#: messages.go:189
|
||||
#: messages.go:201
|
||||
msgid "Processing upload..."
|
||||
msgstr "Verarbeitung des Uploads..."
|
||||
|
||||
#: messages.go:190
|
||||
#: messages.go:202
|
||||
msgid "Upload has been processed"
|
||||
msgstr "Der Upload wurde verarbeitet"
|
||||
|
||||
#: messages.go:191
|
||||
#: messages.go:203
|
||||
msgid "Selection approved"
|
||||
msgstr "Auswahl übernommen"
|
||||
|
||||
#: messages.go:192
|
||||
#: messages.go:204
|
||||
msgid "Selection archived"
|
||||
msgstr "Auswahl archiviert"
|
||||
|
||||
#: messages.go:193
|
||||
#: messages.go:205
|
||||
msgid "Selection restored"
|
||||
msgstr "Auswahl wiederhergestellt"
|
||||
|
||||
#: messages.go:194
|
||||
#: messages.go:206
|
||||
msgid "Selection marked as private"
|
||||
msgstr "Auswahl als privat markiert"
|
||||
|
||||
#: messages.go:195
|
||||
#: messages.go:207
|
||||
msgid "Albums deleted"
|
||||
msgstr "Alben gelöscht"
|
||||
|
||||
#: messages.go:196
|
||||
#: messages.go:208
|
||||
#, c-format
|
||||
msgid "Zip created in %d s"
|
||||
msgstr "Zip-Datei erstellt in %d s"
|
||||
|
||||
#: messages.go:197
|
||||
#: messages.go:209
|
||||
msgid "Permanently deleted"
|
||||
msgstr "Endgültig gelöscht"
|
||||
|
||||
#: messages.go:198
|
||||
#: messages.go:210
|
||||
#, c-format
|
||||
msgid "%s has been restored"
|
||||
msgstr "%s wurde wiederhergestellt"
|
||||
|
||||
#: messages.go:199
|
||||
#: messages.go:211
|
||||
msgid "Successfully verified"
|
||||
msgstr "Erfolgreich verifiziert"
|
||||
|
||||
#: messages.go:200
|
||||
#: messages.go:212
|
||||
msgid "Successfully activated"
|
||||
msgstr "Erfolgreich aktiviert"
|
||||
|
||||
|
|
|
|||
|
|
@ -2,411 +2,427 @@ msgid ""
|
|||
msgstr ""
|
||||
"Project-Id-Version: PACKAGE VERSION\n"
|
||||
"Report-Msgid-Bugs-To: \n"
|
||||
"POT-Creation-Date: 2025-10-17 17:32+0000\n"
|
||||
"PO-Revision-Date: 2025-11-19 10:23+0000\n"
|
||||
"Last-Translator: dtsolakis <dtsola@eranet.gr>\n"
|
||||
"POT-Creation-Date: 2026-06-27 09:13+0000\n"
|
||||
"PO-Revision-Date: 2026-06-27 10:28+0000\n"
|
||||
"Last-Translator: DeepL <noreply-mt-deepl@weblate.org>\n"
|
||||
"Language-Team: none\n"
|
||||
"Language: el\n"
|
||||
"MIME-Version: 1.0\n"
|
||||
"Content-Type: text/plain; charset=UTF-8\n"
|
||||
"Content-Transfer-Encoding: 8bit\n"
|
||||
"Plural-Forms: nplurals=2; plural=n != 1;\n"
|
||||
"X-Generator: Weblate 5.13.3\n"
|
||||
"X-Generator: Weblate 2026.5\n"
|
||||
|
||||
#: messages.go:104
|
||||
#: messages.go:112
|
||||
msgid "Something went wrong, try again"
|
||||
msgstr "Κάτι πήγε στραβά, δοκιμάστε ξανά"
|
||||
|
||||
#: messages.go:105
|
||||
#: messages.go:113
|
||||
msgid "Unable to do that"
|
||||
msgstr "Αυτό δεν είναι εφικτό"
|
||||
|
||||
#: messages.go:106
|
||||
#: messages.go:114
|
||||
msgid "Changes could not be saved"
|
||||
msgstr "Οι αλλαγές δεν ήταν δυνατό να αποθηκευτούν"
|
||||
|
||||
#: messages.go:107
|
||||
#: messages.go:115
|
||||
msgid "Could not be deleted"
|
||||
msgstr "Δεν ήταν εφικτή η διαγραφή"
|
||||
|
||||
#: messages.go:108
|
||||
#: messages.go:116
|
||||
#, c-format
|
||||
msgid "%s already exists"
|
||||
msgstr "%s υπάρχει ήδη"
|
||||
|
||||
#: messages.go:109
|
||||
#: messages.go:117
|
||||
msgid "Not found"
|
||||
msgstr "Δεν βρέθηκε"
|
||||
|
||||
#: messages.go:110
|
||||
#: messages.go:118
|
||||
msgid "File not found"
|
||||
msgstr "Το αρχείο δεν βρέθηκε"
|
||||
|
||||
#: messages.go:111
|
||||
#: messages.go:119
|
||||
msgid "File too large"
|
||||
msgstr "Πολύ μεγάλο αρχείο"
|
||||
|
||||
#: messages.go:112
|
||||
#: messages.go:120
|
||||
msgid "Unsupported"
|
||||
msgstr "Δεν υποστηρίζεται"
|
||||
|
||||
#: messages.go:113
|
||||
#: messages.go:121
|
||||
msgid "Unsupported type"
|
||||
msgstr "Μη υποστηριζόμενος τύπος"
|
||||
|
||||
#: messages.go:114
|
||||
#: messages.go:122
|
||||
msgid "Unsupported format"
|
||||
msgstr "Μη υποστηριζόμενος μορφότυπος"
|
||||
|
||||
#: messages.go:115
|
||||
#: messages.go:123
|
||||
msgid "Originals folder is empty"
|
||||
msgstr "Ο φάκελος πρωτότυπων είναι άδειος"
|
||||
|
||||
#: messages.go:116
|
||||
#: messages.go:124
|
||||
msgid "Selection not found"
|
||||
msgstr "Η επιλογή δεν βρέθηκε"
|
||||
|
||||
#: messages.go:117
|
||||
#: messages.go:125
|
||||
msgid "Entity not found"
|
||||
msgstr "Η οντότητα δεν βρέθηκε"
|
||||
|
||||
#: messages.go:118
|
||||
#: messages.go:126
|
||||
msgid "Account not found"
|
||||
msgstr "Ο λογαριασμός δεν βρέθηκε"
|
||||
|
||||
#: messages.go:119
|
||||
#: messages.go:127
|
||||
msgid "User not found"
|
||||
msgstr "Ο χρήστης δεν βρέθηκε"
|
||||
|
||||
#: messages.go:120
|
||||
#: messages.go:128
|
||||
msgid "Label not found"
|
||||
msgstr "Η ετικέτα δεν βρέθηκε"
|
||||
|
||||
#: messages.go:121
|
||||
#: messages.go:129
|
||||
msgid "Camera not found"
|
||||
msgstr "Δεν εντοπίστηκε η κάμερα"
|
||||
|
||||
#: messages.go:130
|
||||
msgid "Lens not found"
|
||||
msgstr "Δεν βρέθηκε ο φακός"
|
||||
|
||||
#: messages.go:131
|
||||
msgid "Album not found"
|
||||
msgstr "Το άλμπουμ δεν βρέθηκε"
|
||||
|
||||
#: messages.go:122
|
||||
#: messages.go:132
|
||||
msgid "Subject not found"
|
||||
msgstr "Το θέμα δεν βρέθηκε"
|
||||
|
||||
#: messages.go:123
|
||||
#: messages.go:133
|
||||
msgid "Person not found"
|
||||
msgstr "Το άτομο δεν βρέθηκε"
|
||||
|
||||
#: messages.go:124
|
||||
#: messages.go:134
|
||||
msgid "Face not found"
|
||||
msgstr "Το πρόσωπο δεν βρέθηκε"
|
||||
|
||||
#: messages.go:125
|
||||
#: messages.go:135
|
||||
msgid "Not available in public mode"
|
||||
msgstr "Μη διαθέσιμο κατά τη δημόσια λειτουργία"
|
||||
|
||||
#: messages.go:126
|
||||
#: messages.go:136
|
||||
msgid "Not available in read-only mode"
|
||||
msgstr "Μη διαθέσιμο στην κατάσταση \"μόνο ανάγνωση\""
|
||||
|
||||
#: messages.go:127
|
||||
#: messages.go:137
|
||||
msgid "Please log in to your account"
|
||||
msgstr "Συνδεθείτε στο λογαριασμό σας"
|
||||
|
||||
#: messages.go:128
|
||||
#: messages.go:138
|
||||
msgid "Permission denied"
|
||||
msgstr "Δέν δόθηκε άδεια"
|
||||
|
||||
#: messages.go:129
|
||||
#: messages.go:139
|
||||
msgid "Payment required"
|
||||
msgstr "Απαιτείται πληρωμή"
|
||||
|
||||
#: messages.go:130
|
||||
#: messages.go:140
|
||||
msgid "Upload might be offensive"
|
||||
msgstr "Το ανέβασμα μπορεί να είναι προσβλητικό"
|
||||
|
||||
#: messages.go:131
|
||||
#: messages.go:141
|
||||
msgid "Upload failed"
|
||||
msgstr "Αποτυχία ανεβάσματος"
|
||||
|
||||
#: messages.go:132
|
||||
#: messages.go:142
|
||||
msgid "No items selected"
|
||||
msgstr "Δεν έχουν επιλεγεί στοιχεία"
|
||||
|
||||
#: messages.go:133
|
||||
#: messages.go:143
|
||||
msgid "Failed creating file, please check permissions"
|
||||
msgstr "Απέτυχε η δημιουργία αρχείου, ελέγξτε τα δικαιώματα"
|
||||
|
||||
#: messages.go:134
|
||||
#: messages.go:144
|
||||
msgid "Failed creating folder, please check permissions"
|
||||
msgstr "Απέτυχε η δημιουργία φακέλου, ελέγξτε τα δικαιώματα"
|
||||
|
||||
#: messages.go:135
|
||||
#: messages.go:145
|
||||
msgid "Could not connect, please try again"
|
||||
msgstr "Δεν ήταν δυνατή η σύνδεση, δοκιμάστε ξανά"
|
||||
|
||||
#: messages.go:136
|
||||
#: messages.go:146
|
||||
msgid "Enter verification code"
|
||||
msgstr "Εισάγετε τον κωδικό επαλήθευσης"
|
||||
|
||||
#: messages.go:137
|
||||
#: messages.go:147
|
||||
msgid "Invalid verification code, please try again"
|
||||
msgstr "Μη έγκυρος κωδικός επαλήθευσης, δοκιμάστε ξανά"
|
||||
|
||||
#: messages.go:138
|
||||
#: messages.go:148
|
||||
msgid "Invalid password, please try again"
|
||||
msgstr "Μη έγκυρος κωδικός πρόσβασης, δοκιμάστε ξανά"
|
||||
|
||||
#: messages.go:139
|
||||
#: messages.go:149
|
||||
msgid "Feature disabled"
|
||||
msgstr "Απενεργοποιημένη λειτουργία"
|
||||
|
||||
#: messages.go:140
|
||||
#: messages.go:150
|
||||
msgid "No labels selected"
|
||||
msgstr "Δεν έχουν επιλεγεί ετικέτες"
|
||||
|
||||
#: messages.go:141
|
||||
#: messages.go:151
|
||||
msgid "No albums selected"
|
||||
msgstr "Δεν έχουν επιλεγεί άλμπουμ"
|
||||
|
||||
#: messages.go:142
|
||||
#: messages.go:152
|
||||
msgid "No files available for download"
|
||||
msgstr "Δεν υπάρχουν διαθέσιμα αρχεία για λήψη"
|
||||
|
||||
#: messages.go:143
|
||||
#: messages.go:153
|
||||
msgid "Failed to create zip file"
|
||||
msgstr "Απέτυχε η δημιουργία αρχείου zip"
|
||||
|
||||
#: messages.go:144
|
||||
#: messages.go:154
|
||||
msgid "Invalid credentials"
|
||||
msgstr "Μη έγκυρα διαπιστευτήρια"
|
||||
|
||||
#: messages.go:145
|
||||
#: messages.go:155
|
||||
msgid "Invalid link"
|
||||
msgstr "Μη έγκυρος σύνδεσμος"
|
||||
|
||||
#: messages.go:146
|
||||
#: messages.go:156
|
||||
msgid "Invalid name"
|
||||
msgstr "Μη έγκυρο όνομα"
|
||||
|
||||
#: messages.go:147
|
||||
#: messages.go:157
|
||||
msgid "Busy, please try again later"
|
||||
msgstr "Το σύστημα είναι απασχολημένο, προσπαθήστε ξανά αργότερα"
|
||||
|
||||
#: messages.go:148
|
||||
#: messages.go:158
|
||||
#, c-format
|
||||
msgid "The wakeup interval is %s, but must be 1h or less"
|
||||
msgstr "Το διάστημα αφύπνισης είναι %s, αλλά πρέπει να είναι 1 ώρα ή λιγότερο"
|
||||
|
||||
#: messages.go:149
|
||||
#: messages.go:159
|
||||
msgid "Your account could not be connected"
|
||||
msgstr "Ο λογαριασμός σας δεν ήταν δυνατό να συνδεθεί"
|
||||
|
||||
#: messages.go:150
|
||||
#: messages.go:160
|
||||
msgid "Too many requests"
|
||||
msgstr "Πάρα πολλά αιτήματα"
|
||||
|
||||
#: messages.go:151
|
||||
#: messages.go:161
|
||||
msgid "Insufficient storage"
|
||||
msgstr "Ανεπαρκής χώρος"
|
||||
|
||||
#: messages.go:152
|
||||
#: messages.go:162
|
||||
msgid "Quota exceeded"
|
||||
msgstr "Υπέρβαση ορίου"
|
||||
|
||||
#: messages.go:155
|
||||
#: messages.go:163
|
||||
msgid "Registration disabled"
|
||||
msgstr "Η εγγραφή έχει απενεργοποιηθεί"
|
||||
|
||||
#: messages.go:164
|
||||
msgid "Verified email required"
|
||||
msgstr "Απαιτείται επαληθευμένη διεύθυνση ηλεκτρονικού ταχυδρομείου"
|
||||
|
||||
#: messages.go:167
|
||||
msgid "Changes successfully saved"
|
||||
msgstr "Οι αλλαγές αποθηκεύτηκαν επιτυχώς"
|
||||
|
||||
#: messages.go:156
|
||||
#: messages.go:168
|
||||
msgid "Album created"
|
||||
msgstr "Το άλμπουμ δημιουργήθηκε"
|
||||
|
||||
#: messages.go:157
|
||||
#: messages.go:169
|
||||
msgid "Album saved"
|
||||
msgstr "Το άλμπουμ αποθηκεύθηκε"
|
||||
|
||||
#: messages.go:158
|
||||
#: messages.go:170
|
||||
#, c-format
|
||||
msgid "Album %s deleted"
|
||||
msgstr "Το άλμπουμ %s διαγράφηκε"
|
||||
|
||||
#: messages.go:159
|
||||
#: messages.go:171
|
||||
msgid "Album contents cloned"
|
||||
msgstr "Τα περιεχόμενα του άλμπουμ αντιγράφηκαν"
|
||||
|
||||
#: messages.go:160
|
||||
#: messages.go:172
|
||||
msgid "File removed from stack"
|
||||
msgstr "Αφαίρεση αρχείου από τη στοίβα"
|
||||
|
||||
#: messages.go:161
|
||||
#: messages.go:173
|
||||
msgid "File deleted"
|
||||
msgstr "Το αρχείο διαγράφηκε"
|
||||
|
||||
#: messages.go:162
|
||||
#: messages.go:174
|
||||
#, c-format
|
||||
msgid "Selection added to %s"
|
||||
msgstr "Η επιλογή προστέθηκε στο %s"
|
||||
|
||||
#: messages.go:163
|
||||
#: messages.go:175
|
||||
#, c-format
|
||||
msgid "One entry added to %s"
|
||||
msgstr "Μία εγγραφή προστέθηκε στο %s"
|
||||
|
||||
#: messages.go:164
|
||||
#: messages.go:176
|
||||
#, c-format
|
||||
msgid "%d entries added to %s"
|
||||
msgstr "%d καταχωρήσεις προστέθηκαν στο %s"
|
||||
|
||||
#: messages.go:165
|
||||
#: messages.go:177
|
||||
#, c-format
|
||||
msgid "One entry removed from %s"
|
||||
msgstr "Μία καταχώρηση αφαιρέθηκε από %s"
|
||||
|
||||
#: messages.go:166
|
||||
#: messages.go:178
|
||||
#, c-format
|
||||
msgid "%d entries removed from %s"
|
||||
msgstr "%d καταχωρήσεις αφαιρέθηκαν από %s"
|
||||
|
||||
#: messages.go:167
|
||||
#: messages.go:179
|
||||
msgid "Account created"
|
||||
msgstr "Ο λογαριασμός δημιουργήθηκε"
|
||||
|
||||
#: messages.go:168
|
||||
#: messages.go:180
|
||||
msgid "Account saved"
|
||||
msgstr "Ο λογαριασμός αποθηκεύτηκε"
|
||||
|
||||
#: messages.go:169
|
||||
#: messages.go:181
|
||||
msgid "Account deleted"
|
||||
msgstr "Ο λογαριασμός διαγράφηκε"
|
||||
|
||||
#: messages.go:170
|
||||
#: messages.go:182
|
||||
msgid "Settings saved"
|
||||
msgstr "Οι ρυθμίσεις αποθηκεύτηκαν"
|
||||
|
||||
#: messages.go:171
|
||||
#: messages.go:183
|
||||
msgid "Password changed"
|
||||
msgstr "Ο κωδικός πρόσβασης άλλαξε"
|
||||
|
||||
#: messages.go:172
|
||||
#: messages.go:184
|
||||
#, c-format
|
||||
msgid "Import completed in %d s"
|
||||
msgstr "Η εισαγωγή ολοκληρώθηκε σε %d s"
|
||||
|
||||
#: messages.go:173
|
||||
#: messages.go:185
|
||||
msgid "Import canceled"
|
||||
msgstr "Η εισαγωγή ακυρώθηκε"
|
||||
|
||||
#: messages.go:174
|
||||
#: messages.go:186
|
||||
#, c-format
|
||||
msgid "Indexing completed in %d s"
|
||||
msgstr "Η ευρετηρίαση ολοκληρώθηκε σε %d s"
|
||||
|
||||
#: messages.go:175
|
||||
#: messages.go:187
|
||||
msgid "Indexing originals..."
|
||||
msgstr "Δημιουργία ευρετηρίου για τα πρωτότυπα..."
|
||||
|
||||
#: messages.go:176
|
||||
#: messages.go:188
|
||||
#, c-format
|
||||
msgid "Indexing files in %s"
|
||||
msgstr "Δημιουργία ευρετηρίου αρχείων σε %s"
|
||||
|
||||
#: messages.go:177
|
||||
#: messages.go:189
|
||||
msgid "Indexing canceled"
|
||||
msgstr "Η δημιουργία ευρετηρίου ακυρώθηκε"
|
||||
|
||||
#: messages.go:178
|
||||
#: messages.go:190
|
||||
#, c-format
|
||||
msgid "Removed %d files and %d photos"
|
||||
msgstr "Αφαίρεση %d αρχείων και %d φωτογραφιών"
|
||||
|
||||
#: messages.go:179
|
||||
#: messages.go:191
|
||||
#, c-format
|
||||
msgid "Moving files from %s"
|
||||
msgstr "Μετακίνηση αρχείων από %s"
|
||||
|
||||
#: messages.go:180
|
||||
#: messages.go:192
|
||||
#, c-format
|
||||
msgid "Copying files from %s"
|
||||
msgstr "Αντιγραφή αρχείων από %s"
|
||||
|
||||
#: messages.go:181
|
||||
#: messages.go:193
|
||||
msgid "Labels deleted"
|
||||
msgstr "Οι ετικέτες διαγράφηκαν"
|
||||
|
||||
#: messages.go:182
|
||||
#: messages.go:194
|
||||
msgid "Label saved"
|
||||
msgstr "Η ετικέτα αποθηκεύτηκε"
|
||||
|
||||
#: messages.go:183
|
||||
#: messages.go:195
|
||||
msgid "Subject saved"
|
||||
msgstr "Το θέμα αποθηκεύθηκε"
|
||||
|
||||
#: messages.go:184
|
||||
#: messages.go:196
|
||||
msgid "Subject deleted"
|
||||
msgstr "Το θέμα διαγράφηκε"
|
||||
|
||||
#: messages.go:185
|
||||
#: messages.go:197
|
||||
msgid "Person saved"
|
||||
msgstr "Το άτομο αποθηκεύτηκε"
|
||||
|
||||
#: messages.go:186
|
||||
#: messages.go:198
|
||||
msgid "Person deleted"
|
||||
msgstr "Το άτομο διαγράφηκε"
|
||||
|
||||
#: messages.go:187
|
||||
#: messages.go:199
|
||||
msgid "File uploaded"
|
||||
msgstr "Το αρχείο διαγράφηκε"
|
||||
|
||||
#: messages.go:188
|
||||
#: messages.go:200
|
||||
#, c-format
|
||||
msgid "%d files uploaded in %d s"
|
||||
msgstr "%d αρχεία ανεβάστηκαν σε %d s"
|
||||
|
||||
#: messages.go:189
|
||||
#: messages.go:201
|
||||
msgid "Processing upload..."
|
||||
msgstr "Επεξεργασία ανεβάσματος..."
|
||||
|
||||
#: messages.go:190
|
||||
#: messages.go:202
|
||||
msgid "Upload has been processed"
|
||||
msgstr "Το ανέβασμα έχει ολοκληρωθεί"
|
||||
|
||||
#: messages.go:191
|
||||
#: messages.go:203
|
||||
msgid "Selection approved"
|
||||
msgstr "Η επιλογή εγκρίθηκε"
|
||||
|
||||
#: messages.go:192
|
||||
#: messages.go:204
|
||||
msgid "Selection archived"
|
||||
msgstr "Η επιλογή αρχειοθετήθηκε"
|
||||
|
||||
#: messages.go:193
|
||||
#: messages.go:205
|
||||
msgid "Selection restored"
|
||||
msgstr "Η επιλογή αποκαταστάθηκε"
|
||||
|
||||
#: messages.go:194
|
||||
#: messages.go:206
|
||||
msgid "Selection marked as private"
|
||||
msgstr "Η επιλογή μαρκαρίστηκε ως ιδιωτική"
|
||||
|
||||
#: messages.go:195
|
||||
#: messages.go:207
|
||||
msgid "Albums deleted"
|
||||
msgstr "Διαγραμμένα άλμπουμ"
|
||||
|
||||
#: messages.go:196
|
||||
#: messages.go:208
|
||||
#, c-format
|
||||
msgid "Zip created in %d s"
|
||||
msgstr "Το αρχείο zip δημιουργήθηκε σε %d s"
|
||||
|
||||
#: messages.go:197
|
||||
#: messages.go:209
|
||||
msgid "Permanently deleted"
|
||||
msgstr "Διαγράφηκε μόνιμα"
|
||||
|
||||
#: messages.go:198
|
||||
#: messages.go:210
|
||||
#, c-format
|
||||
msgid "%s has been restored"
|
||||
msgstr "%s έχει αποκατασταθεί"
|
||||
|
||||
#: messages.go:199
|
||||
#: messages.go:211
|
||||
msgid "Successfully verified"
|
||||
msgstr "Επιτυχής επαλήθευση"
|
||||
|
||||
#: messages.go:200
|
||||
#: messages.go:212
|
||||
msgid "Successfully activated"
|
||||
msgstr "Επιτυχής ενεργοποίηση"
|
||||
|
||||
|
|
|
|||
|
|
@ -2,7 +2,7 @@ msgid ""
|
|||
msgstr ""
|
||||
"Project-Id-Version: \n"
|
||||
"Report-Msgid-Bugs-To: \n"
|
||||
"POT-Creation-Date: 2025-10-17 17:32+0000\n"
|
||||
"POT-Creation-Date: 2026-06-27 09:13+0000\n"
|
||||
"PO-Revision-Date: 2022-10-31 16:44+0100\n"
|
||||
"Last-Translator: Michael Mayer <michael@photoprism.org>\n"
|
||||
"Language-Team: \n"
|
||||
|
|
@ -13,399 +13,415 @@ msgstr ""
|
|||
"Plural-Forms: nplurals=2; plural=(n != 1);\n"
|
||||
"X-Generator: Poedit 2.3\n"
|
||||
|
||||
#: messages.go:104
|
||||
#: messages.go:112
|
||||
msgid "Something went wrong, try again"
|
||||
msgstr ""
|
||||
|
||||
#: messages.go:105
|
||||
#: messages.go:113
|
||||
msgid "Unable to do that"
|
||||
msgstr ""
|
||||
|
||||
#: messages.go:106
|
||||
#: messages.go:114
|
||||
msgid "Changes could not be saved"
|
||||
msgstr ""
|
||||
|
||||
#: messages.go:107
|
||||
#: messages.go:115
|
||||
msgid "Could not be deleted"
|
||||
msgstr ""
|
||||
|
||||
#: messages.go:108
|
||||
#: messages.go:116
|
||||
#, c-format
|
||||
msgid "%s already exists"
|
||||
msgstr ""
|
||||
|
||||
#: messages.go:109
|
||||
#: messages.go:117
|
||||
msgid "Not found"
|
||||
msgstr ""
|
||||
|
||||
#: messages.go:110
|
||||
#: messages.go:118
|
||||
msgid "File not found"
|
||||
msgstr ""
|
||||
|
||||
#: messages.go:111
|
||||
#: messages.go:119
|
||||
msgid "File too large"
|
||||
msgstr ""
|
||||
|
||||
#: messages.go:112
|
||||
#: messages.go:120
|
||||
msgid "Unsupported"
|
||||
msgstr ""
|
||||
|
||||
#: messages.go:113
|
||||
#: messages.go:121
|
||||
msgid "Unsupported type"
|
||||
msgstr ""
|
||||
|
||||
#: messages.go:114
|
||||
#: messages.go:122
|
||||
msgid "Unsupported format"
|
||||
msgstr ""
|
||||
|
||||
#: messages.go:115
|
||||
#: messages.go:123
|
||||
msgid "Originals folder is empty"
|
||||
msgstr ""
|
||||
|
||||
#: messages.go:116
|
||||
#: messages.go:124
|
||||
msgid "Selection not found"
|
||||
msgstr ""
|
||||
|
||||
#: messages.go:117
|
||||
#: messages.go:125
|
||||
msgid "Entity not found"
|
||||
msgstr ""
|
||||
|
||||
#: messages.go:118
|
||||
#: messages.go:126
|
||||
msgid "Account not found"
|
||||
msgstr ""
|
||||
|
||||
#: messages.go:119
|
||||
#: messages.go:127
|
||||
msgid "User not found"
|
||||
msgstr ""
|
||||
|
||||
#: messages.go:120
|
||||
#: messages.go:128
|
||||
msgid "Label not found"
|
||||
msgstr ""
|
||||
|
||||
#: messages.go:121
|
||||
msgid "Album not found"
|
||||
msgstr ""
|
||||
|
||||
#: messages.go:122
|
||||
msgid "Subject not found"
|
||||
msgstr ""
|
||||
|
||||
#: messages.go:123
|
||||
msgid "Person not found"
|
||||
msgstr ""
|
||||
|
||||
#: messages.go:124
|
||||
msgid "Face not found"
|
||||
msgstr ""
|
||||
|
||||
#: messages.go:125
|
||||
msgid "Not available in public mode"
|
||||
msgstr ""
|
||||
|
||||
#: messages.go:126
|
||||
msgid "Not available in read-only mode"
|
||||
msgstr ""
|
||||
|
||||
#: messages.go:127
|
||||
msgid "Please log in to your account"
|
||||
msgstr ""
|
||||
|
||||
#: messages.go:128
|
||||
msgid "Permission denied"
|
||||
msgstr ""
|
||||
|
||||
#: messages.go:129
|
||||
msgid "Payment required"
|
||||
msgid "Camera not found"
|
||||
msgstr ""
|
||||
|
||||
#: messages.go:130
|
||||
msgid "Upload might be offensive"
|
||||
msgid "Lens not found"
|
||||
msgstr ""
|
||||
|
||||
#: messages.go:131
|
||||
msgid "Upload failed"
|
||||
msgid "Album not found"
|
||||
msgstr ""
|
||||
|
||||
#: messages.go:132
|
||||
msgid "No items selected"
|
||||
msgid "Subject not found"
|
||||
msgstr ""
|
||||
|
||||
#: messages.go:133
|
||||
msgid "Failed creating file, please check permissions"
|
||||
msgid "Person not found"
|
||||
msgstr ""
|
||||
|
||||
#: messages.go:134
|
||||
msgid "Failed creating folder, please check permissions"
|
||||
msgid "Face not found"
|
||||
msgstr ""
|
||||
|
||||
#: messages.go:135
|
||||
msgid "Could not connect, please try again"
|
||||
msgid "Not available in public mode"
|
||||
msgstr ""
|
||||
|
||||
#: messages.go:136
|
||||
msgid "Enter verification code"
|
||||
msgid "Not available in read-only mode"
|
||||
msgstr ""
|
||||
|
||||
#: messages.go:137
|
||||
msgid "Invalid verification code, please try again"
|
||||
msgid "Please log in to your account"
|
||||
msgstr ""
|
||||
|
||||
#: messages.go:138
|
||||
msgid "Invalid password, please try again"
|
||||
msgid "Permission denied"
|
||||
msgstr ""
|
||||
|
||||
#: messages.go:139
|
||||
msgid "Feature disabled"
|
||||
msgid "Payment required"
|
||||
msgstr ""
|
||||
|
||||
#: messages.go:140
|
||||
msgid "No labels selected"
|
||||
msgid "Upload might be offensive"
|
||||
msgstr ""
|
||||
|
||||
#: messages.go:141
|
||||
msgid "No albums selected"
|
||||
msgid "Upload failed"
|
||||
msgstr ""
|
||||
|
||||
#: messages.go:142
|
||||
msgid "No files available for download"
|
||||
msgid "No items selected"
|
||||
msgstr ""
|
||||
|
||||
#: messages.go:143
|
||||
msgid "Failed to create zip file"
|
||||
msgid "Failed creating file, please check permissions"
|
||||
msgstr ""
|
||||
|
||||
#: messages.go:144
|
||||
msgid "Invalid credentials"
|
||||
msgid "Failed creating folder, please check permissions"
|
||||
msgstr ""
|
||||
|
||||
#: messages.go:145
|
||||
msgid "Invalid link"
|
||||
msgid "Could not connect, please try again"
|
||||
msgstr ""
|
||||
|
||||
#: messages.go:146
|
||||
msgid "Invalid name"
|
||||
msgid "Enter verification code"
|
||||
msgstr ""
|
||||
|
||||
#: messages.go:147
|
||||
msgid "Busy, please try again later"
|
||||
msgid "Invalid verification code, please try again"
|
||||
msgstr ""
|
||||
|
||||
#: messages.go:148
|
||||
#, c-format
|
||||
msgid "The wakeup interval is %s, but must be 1h or less"
|
||||
msgid "Invalid password, please try again"
|
||||
msgstr ""
|
||||
|
||||
#: messages.go:149
|
||||
msgid "Your account could not be connected"
|
||||
msgid "Feature disabled"
|
||||
msgstr ""
|
||||
|
||||
#: messages.go:150
|
||||
msgid "Too many requests"
|
||||
msgid "No labels selected"
|
||||
msgstr ""
|
||||
|
||||
#: messages.go:151
|
||||
msgid "Insufficient storage"
|
||||
msgid "No albums selected"
|
||||
msgstr ""
|
||||
|
||||
#: messages.go:152
|
||||
msgid "Quota exceeded"
|
||||
msgid "No files available for download"
|
||||
msgstr ""
|
||||
|
||||
#: messages.go:153
|
||||
msgid "Failed to create zip file"
|
||||
msgstr ""
|
||||
|
||||
#: messages.go:154
|
||||
msgid "Invalid credentials"
|
||||
msgstr ""
|
||||
|
||||
#: messages.go:155
|
||||
msgid "Changes successfully saved"
|
||||
msgid "Invalid link"
|
||||
msgstr ""
|
||||
|
||||
#: messages.go:156
|
||||
msgid "Album created"
|
||||
msgid "Invalid name"
|
||||
msgstr ""
|
||||
|
||||
#: messages.go:157
|
||||
msgid "Album saved"
|
||||
msgid "Busy, please try again later"
|
||||
msgstr ""
|
||||
|
||||
#: messages.go:158
|
||||
#, c-format
|
||||
msgid "Album %s deleted"
|
||||
msgid "The wakeup interval is %s, but must be 1h or less"
|
||||
msgstr ""
|
||||
|
||||
#: messages.go:159
|
||||
msgid "Album contents cloned"
|
||||
msgid "Your account could not be connected"
|
||||
msgstr ""
|
||||
|
||||
#: messages.go:160
|
||||
msgid "File removed from stack"
|
||||
msgid "Too many requests"
|
||||
msgstr ""
|
||||
|
||||
#: messages.go:161
|
||||
msgid "File deleted"
|
||||
msgid "Insufficient storage"
|
||||
msgstr ""
|
||||
|
||||
#: messages.go:162
|
||||
#, c-format
|
||||
msgid "Selection added to %s"
|
||||
msgid "Quota exceeded"
|
||||
msgstr ""
|
||||
|
||||
#: messages.go:163
|
||||
#, c-format
|
||||
msgid "One entry added to %s"
|
||||
msgid "Registration disabled"
|
||||
msgstr ""
|
||||
|
||||
#: messages.go:164
|
||||
#, c-format
|
||||
msgid "%d entries added to %s"
|
||||
msgstr ""
|
||||
|
||||
#: messages.go:165
|
||||
#, c-format
|
||||
msgid "One entry removed from %s"
|
||||
msgstr ""
|
||||
|
||||
#: messages.go:166
|
||||
#, c-format
|
||||
msgid "%d entries removed from %s"
|
||||
msgid "Verified email required"
|
||||
msgstr ""
|
||||
|
||||
#: messages.go:167
|
||||
msgid "Account created"
|
||||
msgid "Changes successfully saved"
|
||||
msgstr ""
|
||||
|
||||
#: messages.go:168
|
||||
msgid "Account saved"
|
||||
msgid "Album created"
|
||||
msgstr ""
|
||||
|
||||
#: messages.go:169
|
||||
msgid "Account deleted"
|
||||
msgid "Album saved"
|
||||
msgstr ""
|
||||
|
||||
#: messages.go:170
|
||||
msgid "Settings saved"
|
||||
#, c-format
|
||||
msgid "Album %s deleted"
|
||||
msgstr ""
|
||||
|
||||
#: messages.go:171
|
||||
msgid "Password changed"
|
||||
msgid "Album contents cloned"
|
||||
msgstr ""
|
||||
|
||||
#: messages.go:172
|
||||
#, c-format
|
||||
msgid "Import completed in %d s"
|
||||
msgid "File removed from stack"
|
||||
msgstr ""
|
||||
|
||||
#: messages.go:173
|
||||
msgid "Import canceled"
|
||||
msgid "File deleted"
|
||||
msgstr ""
|
||||
|
||||
#: messages.go:174
|
||||
#, c-format
|
||||
msgid "Indexing completed in %d s"
|
||||
msgid "Selection added to %s"
|
||||
msgstr ""
|
||||
|
||||
#: messages.go:175
|
||||
msgid "Indexing originals..."
|
||||
#, c-format
|
||||
msgid "One entry added to %s"
|
||||
msgstr ""
|
||||
|
||||
#: messages.go:176
|
||||
#, c-format
|
||||
msgid "Indexing files in %s"
|
||||
msgid "%d entries added to %s"
|
||||
msgstr ""
|
||||
|
||||
#: messages.go:177
|
||||
msgid "Indexing canceled"
|
||||
#, c-format
|
||||
msgid "One entry removed from %s"
|
||||
msgstr ""
|
||||
|
||||
#: messages.go:178
|
||||
#, c-format
|
||||
msgid "Removed %d files and %d photos"
|
||||
msgid "%d entries removed from %s"
|
||||
msgstr ""
|
||||
|
||||
#: messages.go:179
|
||||
#, c-format
|
||||
msgid "Moving files from %s"
|
||||
msgid "Account created"
|
||||
msgstr ""
|
||||
|
||||
#: messages.go:180
|
||||
#, c-format
|
||||
msgid "Copying files from %s"
|
||||
msgid "Account saved"
|
||||
msgstr ""
|
||||
|
||||
#: messages.go:181
|
||||
msgid "Labels deleted"
|
||||
msgid "Account deleted"
|
||||
msgstr ""
|
||||
|
||||
#: messages.go:182
|
||||
msgid "Label saved"
|
||||
msgid "Settings saved"
|
||||
msgstr ""
|
||||
|
||||
#: messages.go:183
|
||||
msgid "Subject saved"
|
||||
msgid "Password changed"
|
||||
msgstr ""
|
||||
|
||||
#: messages.go:184
|
||||
msgid "Subject deleted"
|
||||
#, c-format
|
||||
msgid "Import completed in %d s"
|
||||
msgstr ""
|
||||
|
||||
#: messages.go:185
|
||||
msgid "Person saved"
|
||||
msgid "Import canceled"
|
||||
msgstr ""
|
||||
|
||||
#: messages.go:186
|
||||
msgid "Person deleted"
|
||||
#, c-format
|
||||
msgid "Indexing completed in %d s"
|
||||
msgstr ""
|
||||
|
||||
#: messages.go:187
|
||||
msgid "File uploaded"
|
||||
msgid "Indexing originals..."
|
||||
msgstr ""
|
||||
|
||||
#: messages.go:188
|
||||
#, c-format
|
||||
msgid "%d files uploaded in %d s"
|
||||
msgid "Indexing files in %s"
|
||||
msgstr ""
|
||||
|
||||
#: messages.go:189
|
||||
msgid "Processing upload..."
|
||||
msgid "Indexing canceled"
|
||||
msgstr ""
|
||||
|
||||
#: messages.go:190
|
||||
msgid "Upload has been processed"
|
||||
#, c-format
|
||||
msgid "Removed %d files and %d photos"
|
||||
msgstr ""
|
||||
|
||||
#: messages.go:191
|
||||
msgid "Selection approved"
|
||||
#, c-format
|
||||
msgid "Moving files from %s"
|
||||
msgstr ""
|
||||
|
||||
#: messages.go:192
|
||||
msgid "Selection archived"
|
||||
#, c-format
|
||||
msgid "Copying files from %s"
|
||||
msgstr ""
|
||||
|
||||
#: messages.go:193
|
||||
msgid "Selection restored"
|
||||
msgid "Labels deleted"
|
||||
msgstr ""
|
||||
|
||||
#: messages.go:194
|
||||
msgid "Selection marked as private"
|
||||
msgid "Label saved"
|
||||
msgstr ""
|
||||
|
||||
#: messages.go:195
|
||||
msgid "Albums deleted"
|
||||
msgid "Subject saved"
|
||||
msgstr ""
|
||||
|
||||
#: messages.go:196
|
||||
msgid "Subject deleted"
|
||||
msgstr ""
|
||||
|
||||
#: messages.go:197
|
||||
msgid "Person saved"
|
||||
msgstr ""
|
||||
|
||||
#: messages.go:198
|
||||
msgid "Person deleted"
|
||||
msgstr ""
|
||||
|
||||
#: messages.go:199
|
||||
msgid "File uploaded"
|
||||
msgstr ""
|
||||
|
||||
#: messages.go:200
|
||||
#, c-format
|
||||
msgid "%d files uploaded in %d s"
|
||||
msgstr ""
|
||||
|
||||
#: messages.go:201
|
||||
msgid "Processing upload..."
|
||||
msgstr ""
|
||||
|
||||
#: messages.go:202
|
||||
msgid "Upload has been processed"
|
||||
msgstr ""
|
||||
|
||||
#: messages.go:203
|
||||
msgid "Selection approved"
|
||||
msgstr ""
|
||||
|
||||
#: messages.go:204
|
||||
msgid "Selection archived"
|
||||
msgstr ""
|
||||
|
||||
#: messages.go:205
|
||||
msgid "Selection restored"
|
||||
msgstr ""
|
||||
|
||||
#: messages.go:206
|
||||
msgid "Selection marked as private"
|
||||
msgstr ""
|
||||
|
||||
#: messages.go:207
|
||||
msgid "Albums deleted"
|
||||
msgstr ""
|
||||
|
||||
#: messages.go:208
|
||||
#, c-format
|
||||
msgid "Zip created in %d s"
|
||||
msgstr ""
|
||||
|
||||
#: messages.go:197
|
||||
#: messages.go:209
|
||||
msgid "Permanently deleted"
|
||||
msgstr ""
|
||||
|
||||
#: messages.go:198
|
||||
#: messages.go:210
|
||||
#, c-format
|
||||
msgid "%s has been restored"
|
||||
msgstr ""
|
||||
|
||||
#: messages.go:199
|
||||
#: messages.go:211
|
||||
msgid "Successfully verified"
|
||||
msgstr ""
|
||||
|
||||
#: messages.go:200
|
||||
#: messages.go:212
|
||||
msgid "Successfully activated"
|
||||
msgstr ""
|
||||
|
|
|
|||
|
|
@ -2,8 +2,8 @@ msgid ""
|
|||
msgstr ""
|
||||
"Project-Id-Version: \n"
|
||||
"Report-Msgid-Bugs-To: \n"
|
||||
"POT-Creation-Date: 2025-10-17 17:32+0000\n"
|
||||
"PO-Revision-Date: 2025-10-22 08:25+0000\n"
|
||||
"POT-Creation-Date: 2026-06-27 09:13+0000\n"
|
||||
"PO-Revision-Date: 2026-06-27 10:28+0000\n"
|
||||
"Last-Translator: DeepL <noreply-mt-deepl@weblate.org>\n"
|
||||
"Language-Team: Spanish <https://translate.photoprism.app/projects/photoprism/"
|
||||
"backend/es/>\n"
|
||||
|
|
@ -12,402 +12,418 @@ msgstr ""
|
|||
"Content-Type: text/plain; charset=UTF-8\n"
|
||||
"Content-Transfer-Encoding: 8bit\n"
|
||||
"Plural-Forms: nplurals=2; plural=n != 1;\n"
|
||||
"X-Generator: Weblate 5.13.3\n"
|
||||
"X-Generator: Weblate 2026.5\n"
|
||||
|
||||
#: messages.go:104
|
||||
#: messages.go:112
|
||||
msgid "Something went wrong, try again"
|
||||
msgstr "Algo ha ido mal, inténtalo de nuevo"
|
||||
|
||||
#: messages.go:105
|
||||
#: messages.go:113
|
||||
msgid "Unable to do that"
|
||||
msgstr "Incapaz de hacerlo"
|
||||
|
||||
#: messages.go:106
|
||||
#: messages.go:114
|
||||
msgid "Changes could not be saved"
|
||||
msgstr "No se pudieron guardar los cambios"
|
||||
|
||||
#: messages.go:107
|
||||
#: messages.go:115
|
||||
msgid "Could not be deleted"
|
||||
msgstr "No se pudo borrar"
|
||||
|
||||
#: messages.go:108
|
||||
#: messages.go:116
|
||||
#, c-format
|
||||
msgid "%s already exists"
|
||||
msgstr "%s ya existe"
|
||||
|
||||
#: messages.go:109
|
||||
#: messages.go:117
|
||||
msgid "Not found"
|
||||
msgstr "No encontrado"
|
||||
|
||||
#: messages.go:110
|
||||
#: messages.go:118
|
||||
msgid "File not found"
|
||||
msgstr "No se encuentra el archivo"
|
||||
|
||||
#: messages.go:111
|
||||
#: messages.go:119
|
||||
msgid "File too large"
|
||||
msgstr "Archivo demasiado grande"
|
||||
|
||||
#: messages.go:112
|
||||
#: messages.go:120
|
||||
msgid "Unsupported"
|
||||
msgstr "No compatible"
|
||||
|
||||
#: messages.go:113
|
||||
#: messages.go:121
|
||||
msgid "Unsupported type"
|
||||
msgstr "Tipo no admitido"
|
||||
|
||||
#: messages.go:114
|
||||
#: messages.go:122
|
||||
msgid "Unsupported format"
|
||||
msgstr "Formato no admitido"
|
||||
|
||||
#: messages.go:115
|
||||
#: messages.go:123
|
||||
msgid "Originals folder is empty"
|
||||
msgstr "La carpeta de originales está vacía"
|
||||
|
||||
#: messages.go:116
|
||||
#: messages.go:124
|
||||
msgid "Selection not found"
|
||||
msgstr "Selección no encontrada"
|
||||
|
||||
#: messages.go:117
|
||||
#: messages.go:125
|
||||
msgid "Entity not found"
|
||||
msgstr "Entidad no encontrada"
|
||||
|
||||
#: messages.go:118
|
||||
#: messages.go:126
|
||||
msgid "Account not found"
|
||||
msgstr "Cuenta no encontrada"
|
||||
|
||||
#: messages.go:119
|
||||
#: messages.go:127
|
||||
msgid "User not found"
|
||||
msgstr "Usuario no encontrado"
|
||||
|
||||
#: messages.go:120
|
||||
#: messages.go:128
|
||||
msgid "Label not found"
|
||||
msgstr "Etiqueta no encontrada"
|
||||
|
||||
#: messages.go:121
|
||||
#: messages.go:129
|
||||
msgid "Camera not found"
|
||||
msgstr "No se encuentra la cámara"
|
||||
|
||||
#: messages.go:130
|
||||
msgid "Lens not found"
|
||||
msgstr "No se ha encontrado la lente"
|
||||
|
||||
#: messages.go:131
|
||||
msgid "Album not found"
|
||||
msgstr "Álbum no encontrado"
|
||||
|
||||
#: messages.go:122
|
||||
#: messages.go:132
|
||||
msgid "Subject not found"
|
||||
msgstr "Asunto no encontrado"
|
||||
|
||||
#: messages.go:123
|
||||
#: messages.go:133
|
||||
msgid "Person not found"
|
||||
msgstr "Persona no encontrada"
|
||||
|
||||
#: messages.go:124
|
||||
#: messages.go:134
|
||||
msgid "Face not found"
|
||||
msgstr "Cara no encontrada"
|
||||
|
||||
#: messages.go:125
|
||||
#: messages.go:135
|
||||
msgid "Not available in public mode"
|
||||
msgstr "No disponible en modo público"
|
||||
|
||||
#: messages.go:126
|
||||
#: messages.go:136
|
||||
msgid "Not available in read-only mode"
|
||||
msgstr "No está disponible en modo de sólo lectura"
|
||||
|
||||
#: messages.go:127
|
||||
#: messages.go:137
|
||||
msgid "Please log in to your account"
|
||||
msgstr "Por favor inicie sesión"
|
||||
|
||||
#: messages.go:128
|
||||
#: messages.go:138
|
||||
msgid "Permission denied"
|
||||
msgstr "Permiso denegado"
|
||||
|
||||
#: messages.go:129
|
||||
#: messages.go:139
|
||||
msgid "Payment required"
|
||||
msgstr "Pago requerido"
|
||||
|
||||
#: messages.go:130
|
||||
#: messages.go:140
|
||||
msgid "Upload might be offensive"
|
||||
msgstr "El archivo subido puede ser ofensivo"
|
||||
|
||||
#: messages.go:131
|
||||
#: messages.go:141
|
||||
msgid "Upload failed"
|
||||
msgstr "Carga fallida"
|
||||
|
||||
#: messages.go:132
|
||||
#: messages.go:142
|
||||
msgid "No items selected"
|
||||
msgstr "Ningún elemento seleccionado"
|
||||
|
||||
#: messages.go:133
|
||||
#: messages.go:143
|
||||
msgid "Failed creating file, please check permissions"
|
||||
msgstr "Fallo al crear el archivo, por favor, compruebe los permisos"
|
||||
|
||||
#: messages.go:134
|
||||
#: messages.go:144
|
||||
msgid "Failed creating folder, please check permissions"
|
||||
msgstr "Fallo al crear la carpeta, por favor, compruebe los permisos"
|
||||
|
||||
#: messages.go:135
|
||||
#: messages.go:145
|
||||
msgid "Could not connect, please try again"
|
||||
msgstr "No se pudo conectar, por favor vuelva a intentarlo"
|
||||
|
||||
#: messages.go:136
|
||||
#: messages.go:146
|
||||
msgid "Enter verification code"
|
||||
msgstr "Ingrese el código de verificación"
|
||||
|
||||
#: messages.go:137
|
||||
#: messages.go:147
|
||||
msgid "Invalid verification code, please try again"
|
||||
msgstr "Código de verificación no válido, inténtalo de nuevo"
|
||||
|
||||
#: messages.go:138
|
||||
#: messages.go:148
|
||||
msgid "Invalid password, please try again"
|
||||
msgstr "Contraseña inválida, por favor vuelva a intentarlo"
|
||||
|
||||
#: messages.go:139
|
||||
#: messages.go:149
|
||||
msgid "Feature disabled"
|
||||
msgstr "Característica desactivada"
|
||||
|
||||
#: messages.go:140
|
||||
#: messages.go:150
|
||||
msgid "No labels selected"
|
||||
msgstr "Ninguna etiqueta seleccionada"
|
||||
|
||||
#: messages.go:141
|
||||
#: messages.go:151
|
||||
msgid "No albums selected"
|
||||
msgstr "Ningún álbum seleccionado"
|
||||
|
||||
#: messages.go:142
|
||||
#: messages.go:152
|
||||
msgid "No files available for download"
|
||||
msgstr "Ningún archivo disponible para descargar"
|
||||
|
||||
#: messages.go:143
|
||||
#: messages.go:153
|
||||
msgid "Failed to create zip file"
|
||||
msgstr "Fallo al crear el archivo zip"
|
||||
|
||||
#: messages.go:144
|
||||
#: messages.go:154
|
||||
msgid "Invalid credentials"
|
||||
msgstr "Credenciales no válidas"
|
||||
|
||||
#: messages.go:145
|
||||
#: messages.go:155
|
||||
msgid "Invalid link"
|
||||
msgstr "Enlace inválido"
|
||||
|
||||
#: messages.go:146
|
||||
#: messages.go:156
|
||||
msgid "Invalid name"
|
||||
msgstr "Nombre inválido"
|
||||
|
||||
#: messages.go:147
|
||||
#: messages.go:157
|
||||
msgid "Busy, please try again later"
|
||||
msgstr "Ocupado, por favor vuelva a intentarlo más tarde"
|
||||
|
||||
#: messages.go:148
|
||||
#: messages.go:158
|
||||
#, c-format
|
||||
msgid "The wakeup interval is %s, but must be 1h or less"
|
||||
msgstr "El intervalo de activación es %s, pero debe ser 1h o menos"
|
||||
|
||||
#: messages.go:149
|
||||
#: messages.go:159
|
||||
msgid "Your account could not be connected"
|
||||
msgstr "Su cuenta no pudo ser conectada"
|
||||
|
||||
#: messages.go:150
|
||||
#: messages.go:160
|
||||
msgid "Too many requests"
|
||||
msgstr "Demasiadas peticiones"
|
||||
|
||||
#: messages.go:151
|
||||
#: messages.go:161
|
||||
msgid "Insufficient storage"
|
||||
msgstr "Almacenamiento insuficiente"
|
||||
|
||||
#: messages.go:152
|
||||
#: messages.go:162
|
||||
msgid "Quota exceeded"
|
||||
msgstr "Cuota superada"
|
||||
|
||||
#: messages.go:155
|
||||
#: messages.go:163
|
||||
msgid "Registration disabled"
|
||||
msgstr "El registro está desactivado"
|
||||
|
||||
#: messages.go:164
|
||||
msgid "Verified email required"
|
||||
msgstr "Se requiere una dirección de correo electrónico verificada"
|
||||
|
||||
#: messages.go:167
|
||||
msgid "Changes successfully saved"
|
||||
msgstr "Cambios guardados con éxito"
|
||||
|
||||
#: messages.go:156
|
||||
#: messages.go:168
|
||||
msgid "Album created"
|
||||
msgstr "Álbum creado"
|
||||
|
||||
#: messages.go:157
|
||||
#: messages.go:169
|
||||
msgid "Album saved"
|
||||
msgstr "Álbum guardado"
|
||||
|
||||
#: messages.go:158
|
||||
#: messages.go:170
|
||||
#, c-format
|
||||
msgid "Album %s deleted"
|
||||
msgstr "Álbum %s borrado"
|
||||
|
||||
#: messages.go:159
|
||||
#: messages.go:171
|
||||
msgid "Album contents cloned"
|
||||
msgstr "Contenidos del álbum clonados"
|
||||
|
||||
#: messages.go:160
|
||||
#: messages.go:172
|
||||
msgid "File removed from stack"
|
||||
msgstr "Archivo eliminado de la pila"
|
||||
|
||||
#: messages.go:161
|
||||
#: messages.go:173
|
||||
msgid "File deleted"
|
||||
msgstr "Archivo eliminado"
|
||||
|
||||
#: messages.go:162
|
||||
#: messages.go:174
|
||||
#, c-format
|
||||
msgid "Selection added to %s"
|
||||
msgstr "Selección añadida a %s"
|
||||
|
||||
#: messages.go:163
|
||||
#: messages.go:175
|
||||
#, c-format
|
||||
msgid "One entry added to %s"
|
||||
msgstr "Una entrada añadida a %s"
|
||||
|
||||
#: messages.go:164
|
||||
#: messages.go:176
|
||||
#, c-format
|
||||
msgid "%d entries added to %s"
|
||||
msgstr "%d entradas añadidas a %s"
|
||||
|
||||
#: messages.go:165
|
||||
#: messages.go:177
|
||||
#, c-format
|
||||
msgid "One entry removed from %s"
|
||||
msgstr "Una entrada eliminada de %s"
|
||||
|
||||
#: messages.go:166
|
||||
#: messages.go:178
|
||||
#, c-format
|
||||
msgid "%d entries removed from %s"
|
||||
msgstr "%d entradas eliminadas de %s"
|
||||
|
||||
#: messages.go:167
|
||||
#: messages.go:179
|
||||
msgid "Account created"
|
||||
msgstr "Cuenta creada"
|
||||
|
||||
#: messages.go:168
|
||||
#: messages.go:180
|
||||
msgid "Account saved"
|
||||
msgstr "Cuenta guardada"
|
||||
|
||||
#: messages.go:169
|
||||
#: messages.go:181
|
||||
msgid "Account deleted"
|
||||
msgstr "Cuenta borrada"
|
||||
|
||||
#: messages.go:170
|
||||
#: messages.go:182
|
||||
msgid "Settings saved"
|
||||
msgstr "Ajustes guardados"
|
||||
|
||||
#: messages.go:171
|
||||
#: messages.go:183
|
||||
msgid "Password changed"
|
||||
msgstr "Contraseña cambiada"
|
||||
|
||||
#: messages.go:172
|
||||
#: messages.go:184
|
||||
#, c-format
|
||||
msgid "Import completed in %d s"
|
||||
msgstr "Importación completada en %d"
|
||||
|
||||
#: messages.go:173
|
||||
#: messages.go:185
|
||||
msgid "Import canceled"
|
||||
msgstr "Importación cancelada"
|
||||
|
||||
#: messages.go:174
|
||||
#: messages.go:186
|
||||
#, c-format
|
||||
msgid "Indexing completed in %d s"
|
||||
msgstr "Indexación completada en %d"
|
||||
|
||||
#: messages.go:175
|
||||
#: messages.go:187
|
||||
msgid "Indexing originals..."
|
||||
msgstr "Indexando originales..."
|
||||
|
||||
#: messages.go:176
|
||||
#: messages.go:188
|
||||
#, c-format
|
||||
msgid "Indexing files in %s"
|
||||
msgstr "Indexando archivos en %s"
|
||||
|
||||
#: messages.go:177
|
||||
#: messages.go:189
|
||||
msgid "Indexing canceled"
|
||||
msgstr "Indexación cancelada"
|
||||
|
||||
#: messages.go:178
|
||||
#: messages.go:190
|
||||
#, c-format
|
||||
msgid "Removed %d files and %d photos"
|
||||
msgstr "Eliminados %d archivos y %d fotos"
|
||||
|
||||
#: messages.go:179
|
||||
#: messages.go:191
|
||||
#, c-format
|
||||
msgid "Moving files from %s"
|
||||
msgstr "Moviendo achivos desde %s"
|
||||
|
||||
#: messages.go:180
|
||||
#: messages.go:192
|
||||
#, c-format
|
||||
msgid "Copying files from %s"
|
||||
msgstr "Copiando archivos desde %s"
|
||||
|
||||
#: messages.go:181
|
||||
#: messages.go:193
|
||||
msgid "Labels deleted"
|
||||
msgstr "Etiquetas borradas"
|
||||
|
||||
#: messages.go:182
|
||||
#: messages.go:194
|
||||
msgid "Label saved"
|
||||
msgstr "Etiqueta guardada"
|
||||
|
||||
#: messages.go:183
|
||||
#: messages.go:195
|
||||
msgid "Subject saved"
|
||||
msgstr "Asunto guardado"
|
||||
|
||||
#: messages.go:184
|
||||
#: messages.go:196
|
||||
msgid "Subject deleted"
|
||||
msgstr "Sujeto eliminado"
|
||||
|
||||
#: messages.go:185
|
||||
#: messages.go:197
|
||||
msgid "Person saved"
|
||||
msgstr "Persona salvada"
|
||||
|
||||
#: messages.go:186
|
||||
#: messages.go:198
|
||||
msgid "Person deleted"
|
||||
msgstr "Persona eliminada"
|
||||
|
||||
#: messages.go:187
|
||||
#: messages.go:199
|
||||
msgid "File uploaded"
|
||||
msgstr "Archivo cargado"
|
||||
|
||||
#: messages.go:188
|
||||
#: messages.go:200
|
||||
#, c-format
|
||||
msgid "%d files uploaded in %d s"
|
||||
msgstr "%d archivos subidos en %d"
|
||||
|
||||
#: messages.go:189
|
||||
#: messages.go:201
|
||||
msgid "Processing upload..."
|
||||
msgstr "Procesando la carga..."
|
||||
|
||||
#: messages.go:190
|
||||
#: messages.go:202
|
||||
msgid "Upload has been processed"
|
||||
msgstr "La carga ha sido procesada"
|
||||
|
||||
#: messages.go:191
|
||||
#: messages.go:203
|
||||
msgid "Selection approved"
|
||||
msgstr "Selección aprobada"
|
||||
|
||||
#: messages.go:192
|
||||
#: messages.go:204
|
||||
msgid "Selection archived"
|
||||
msgstr "Selección archivada"
|
||||
|
||||
#: messages.go:193
|
||||
#: messages.go:205
|
||||
msgid "Selection restored"
|
||||
msgstr "Selección restaurada"
|
||||
|
||||
#: messages.go:194
|
||||
#: messages.go:206
|
||||
msgid "Selection marked as private"
|
||||
msgstr "Selección marcada como privada"
|
||||
|
||||
#: messages.go:195
|
||||
#: messages.go:207
|
||||
msgid "Albums deleted"
|
||||
msgstr "Álbumes borrados"
|
||||
|
||||
#: messages.go:196
|
||||
#: messages.go:208
|
||||
#, c-format
|
||||
msgid "Zip created in %d s"
|
||||
msgstr "Zip creado en %d"
|
||||
|
||||
#: messages.go:197
|
||||
#: messages.go:209
|
||||
msgid "Permanently deleted"
|
||||
msgstr "Eliminado permanentemente"
|
||||
|
||||
#: messages.go:198
|
||||
#: messages.go:210
|
||||
#, c-format
|
||||
msgid "%s has been restored"
|
||||
msgstr "%s ha sido restaurado"
|
||||
|
||||
#: messages.go:199
|
||||
#: messages.go:211
|
||||
msgid "Successfully verified"
|
||||
msgstr "Verificado con éxito"
|
||||
|
||||
#: messages.go:200
|
||||
#: messages.go:212
|
||||
msgid "Successfully activated"
|
||||
msgstr "Activado exitosamente"
|
||||
|
||||
|
|
|
|||
|
|
@ -2,8 +2,8 @@ msgid ""
|
|||
msgstr ""
|
||||
"Project-Id-Version: PACKAGE VERSION\n"
|
||||
"Report-Msgid-Bugs-To: \n"
|
||||
"POT-Creation-Date: 2025-10-17 17:32+0000\n"
|
||||
"PO-Revision-Date: 2025-10-22 08:25+0000\n"
|
||||
"POT-Creation-Date: 2026-06-27 09:13+0000\n"
|
||||
"PO-Revision-Date: 2026-06-27 10:28+0000\n"
|
||||
"Last-Translator: DeepL <noreply-mt-deepl@weblate.org>\n"
|
||||
"Language-Team: none\n"
|
||||
"Language: et\n"
|
||||
|
|
@ -11,402 +11,418 @@ msgstr ""
|
|||
"Content-Type: text/plain; charset=UTF-8\n"
|
||||
"Content-Transfer-Encoding: 8bit\n"
|
||||
"Plural-Forms: nplurals=2; plural=n != 1;\n"
|
||||
"X-Generator: Weblate 5.13.3\n"
|
||||
"X-Generator: Weblate 2026.5\n"
|
||||
|
||||
#: messages.go:104
|
||||
#: messages.go:112
|
||||
msgid "Something went wrong, try again"
|
||||
msgstr "Midagi läks valesti, proovige uuesti"
|
||||
|
||||
#: messages.go:105
|
||||
#: messages.go:113
|
||||
msgid "Unable to do that"
|
||||
msgstr "Seda ei ole võimalik teha"
|
||||
|
||||
#: messages.go:106
|
||||
#: messages.go:114
|
||||
msgid "Changes could not be saved"
|
||||
msgstr "Muudatuste salvestamine ebaõnnestus"
|
||||
|
||||
#: messages.go:107
|
||||
#: messages.go:115
|
||||
msgid "Could not be deleted"
|
||||
msgstr "Kustutamine ebaõnnestus"
|
||||
|
||||
#: messages.go:108
|
||||
#: messages.go:116
|
||||
#, c-format
|
||||
msgid "%s already exists"
|
||||
msgstr "%s on juba olemas"
|
||||
|
||||
#: messages.go:109
|
||||
#: messages.go:117
|
||||
msgid "Not found"
|
||||
msgstr "Ei leitud"
|
||||
|
||||
#: messages.go:110
|
||||
#: messages.go:118
|
||||
msgid "File not found"
|
||||
msgstr "Faili ei leitud"
|
||||
|
||||
#: messages.go:111
|
||||
#: messages.go:119
|
||||
msgid "File too large"
|
||||
msgstr "Fail on liiga suur"
|
||||
|
||||
#: messages.go:112
|
||||
#: messages.go:120
|
||||
msgid "Unsupported"
|
||||
msgstr "Toetamata"
|
||||
|
||||
#: messages.go:113
|
||||
#: messages.go:121
|
||||
msgid "Unsupported type"
|
||||
msgstr "Toetamata tüüp"
|
||||
|
||||
#: messages.go:114
|
||||
#: messages.go:122
|
||||
msgid "Unsupported format"
|
||||
msgstr "Mittetoetatud formaat"
|
||||
|
||||
#: messages.go:115
|
||||
#: messages.go:123
|
||||
msgid "Originals folder is empty"
|
||||
msgstr "Originaalide kaust on tühi"
|
||||
|
||||
#: messages.go:116
|
||||
#: messages.go:124
|
||||
msgid "Selection not found"
|
||||
msgstr "Valikut ei leitud"
|
||||
|
||||
#: messages.go:117
|
||||
#: messages.go:125
|
||||
msgid "Entity not found"
|
||||
msgstr "Olemit ei leitud"
|
||||
|
||||
#: messages.go:118
|
||||
#: messages.go:126
|
||||
msgid "Account not found"
|
||||
msgstr "Kontot ei leitud"
|
||||
|
||||
#: messages.go:119
|
||||
#: messages.go:127
|
||||
msgid "User not found"
|
||||
msgstr "Kasutajat ei leitud"
|
||||
|
||||
#: messages.go:120
|
||||
#: messages.go:128
|
||||
msgid "Label not found"
|
||||
msgstr "Silti ei leitud"
|
||||
|
||||
#: messages.go:121
|
||||
#: messages.go:129
|
||||
msgid "Camera not found"
|
||||
msgstr "Kaamerat ei leitud"
|
||||
|
||||
#: messages.go:130
|
||||
msgid "Lens not found"
|
||||
msgstr "Objektiivi ei leitud"
|
||||
|
||||
#: messages.go:131
|
||||
msgid "Album not found"
|
||||
msgstr "Albumit ei leitud"
|
||||
|
||||
#: messages.go:122
|
||||
#: messages.go:132
|
||||
msgid "Subject not found"
|
||||
msgstr "Teemat ei leitud"
|
||||
|
||||
#: messages.go:123
|
||||
#: messages.go:133
|
||||
msgid "Person not found"
|
||||
msgstr "Isikut ei leitud"
|
||||
|
||||
#: messages.go:124
|
||||
#: messages.go:134
|
||||
msgid "Face not found"
|
||||
msgstr "Nägu ei leitud"
|
||||
|
||||
#: messages.go:125
|
||||
#: messages.go:135
|
||||
msgid "Not available in public mode"
|
||||
msgstr "Pole avalikus režiimis saadaval"
|
||||
|
||||
#: messages.go:126
|
||||
#: messages.go:136
|
||||
msgid "Not available in read-only mode"
|
||||
msgstr "Pole kirjutuskaitstud režiimis saadaval"
|
||||
|
||||
#: messages.go:127
|
||||
#: messages.go:137
|
||||
msgid "Please log in to your account"
|
||||
msgstr "Palun logi oma kontole sisse"
|
||||
|
||||
#: messages.go:128
|
||||
#: messages.go:138
|
||||
msgid "Permission denied"
|
||||
msgstr "Õigused puuduvad"
|
||||
|
||||
#: messages.go:129
|
||||
#: messages.go:139
|
||||
msgid "Payment required"
|
||||
msgstr "Nõutav makse"
|
||||
|
||||
#: messages.go:130
|
||||
#: messages.go:140
|
||||
msgid "Upload might be offensive"
|
||||
msgstr "Fail võib olla solvav"
|
||||
|
||||
#: messages.go:131
|
||||
#: messages.go:141
|
||||
msgid "Upload failed"
|
||||
msgstr "Üleslaadimine ebaõnnestus"
|
||||
|
||||
#: messages.go:132
|
||||
#: messages.go:142
|
||||
msgid "No items selected"
|
||||
msgstr "Midagi pole valitud"
|
||||
|
||||
#: messages.go:133
|
||||
#: messages.go:143
|
||||
msgid "Failed creating file, please check permissions"
|
||||
msgstr "Faili loomine ebaõnnestus, kontrolli õiguseid"
|
||||
|
||||
#: messages.go:134
|
||||
#: messages.go:144
|
||||
msgid "Failed creating folder, please check permissions"
|
||||
msgstr "Kausta loomine ebaõnnestus, kontrolli õiguseid"
|
||||
|
||||
#: messages.go:135
|
||||
#: messages.go:145
|
||||
msgid "Could not connect, please try again"
|
||||
msgstr "Ühendumine ebaõnnestus, palun proovi uuesti"
|
||||
|
||||
#: messages.go:136
|
||||
#: messages.go:146
|
||||
msgid "Enter verification code"
|
||||
msgstr "Sisesta kontrollkood"
|
||||
|
||||
#: messages.go:137
|
||||
#: messages.go:147
|
||||
msgid "Invalid verification code, please try again"
|
||||
msgstr "Vale kinnituskood, proovige uuesti"
|
||||
|
||||
#: messages.go:138
|
||||
#: messages.go:148
|
||||
msgid "Invalid password, please try again"
|
||||
msgstr "Vale parool, palun proovi uuesti"
|
||||
|
||||
#: messages.go:139
|
||||
#: messages.go:149
|
||||
msgid "Feature disabled"
|
||||
msgstr "Funktsioon välja lülitatud"
|
||||
|
||||
#: messages.go:140
|
||||
#: messages.go:150
|
||||
msgid "No labels selected"
|
||||
msgstr "Ühtegi silti pole valitud"
|
||||
|
||||
#: messages.go:141
|
||||
#: messages.go:151
|
||||
msgid "No albums selected"
|
||||
msgstr "Ühtegi albumit pole valitud"
|
||||
|
||||
#: messages.go:142
|
||||
#: messages.go:152
|
||||
msgid "No files available for download"
|
||||
msgstr "Ühtegi faili ei ole allalaadimiseks saadaval"
|
||||
|
||||
#: messages.go:143
|
||||
#: messages.go:153
|
||||
msgid "Failed to create zip file"
|
||||
msgstr "ZIP-faili loomine ebaõnnestus"
|
||||
|
||||
#: messages.go:144
|
||||
#: messages.go:154
|
||||
msgid "Invalid credentials"
|
||||
msgstr "Kehtetud ligipääsuandmed"
|
||||
|
||||
#: messages.go:145
|
||||
#: messages.go:155
|
||||
msgid "Invalid link"
|
||||
msgstr "Vigane link"
|
||||
|
||||
#: messages.go:146
|
||||
#: messages.go:156
|
||||
msgid "Invalid name"
|
||||
msgstr "Vigane nimi"
|
||||
|
||||
#: messages.go:147
|
||||
#: messages.go:157
|
||||
msgid "Busy, please try again later"
|
||||
msgstr "Hõivatud, palun proovi hiljem uuesti"
|
||||
|
||||
#: messages.go:148
|
||||
#: messages.go:158
|
||||
#, c-format
|
||||
msgid "The wakeup interval is %s, but must be 1h or less"
|
||||
msgstr "Ärkamisintervall on %s, kuid peab olema 1 tund või vähem"
|
||||
|
||||
#: messages.go:149
|
||||
#: messages.go:159
|
||||
msgid "Your account could not be connected"
|
||||
msgstr "Konto ühendamine ebaõnnestus"
|
||||
|
||||
#: messages.go:150
|
||||
#: messages.go:160
|
||||
msgid "Too many requests"
|
||||
msgstr "Liiga palju taotlusi"
|
||||
|
||||
#: messages.go:151
|
||||
#: messages.go:161
|
||||
msgid "Insufficient storage"
|
||||
msgstr "Ebapiisav ladustamine"
|
||||
|
||||
#: messages.go:152
|
||||
#: messages.go:162
|
||||
msgid "Quota exceeded"
|
||||
msgstr "Kvoot ületatud"
|
||||
|
||||
#: messages.go:155
|
||||
#: messages.go:163
|
||||
msgid "Registration disabled"
|
||||
msgstr "Registreerimine on keelatud"
|
||||
|
||||
#: messages.go:164
|
||||
msgid "Verified email required"
|
||||
msgstr "Nõutav on kinnitatud e-posti aadress"
|
||||
|
||||
#: messages.go:167
|
||||
msgid "Changes successfully saved"
|
||||
msgstr "Muudatused edukalt salvestatud"
|
||||
|
||||
#: messages.go:156
|
||||
#: messages.go:168
|
||||
msgid "Album created"
|
||||
msgstr "Album lisatud"
|
||||
|
||||
#: messages.go:157
|
||||
#: messages.go:169
|
||||
msgid "Album saved"
|
||||
msgstr "Album salvestatud"
|
||||
|
||||
#: messages.go:158
|
||||
#: messages.go:170
|
||||
#, c-format
|
||||
msgid "Album %s deleted"
|
||||
msgstr "Album %s kustutatud"
|
||||
|
||||
#: messages.go:159
|
||||
#: messages.go:171
|
||||
msgid "Album contents cloned"
|
||||
msgstr "Albumi sisu kloonitud"
|
||||
|
||||
#: messages.go:160
|
||||
#: messages.go:172
|
||||
msgid "File removed from stack"
|
||||
msgstr "Fail virnast eemaldatud"
|
||||
|
||||
#: messages.go:161
|
||||
#: messages.go:173
|
||||
msgid "File deleted"
|
||||
msgstr "Fail kustutatud"
|
||||
|
||||
#: messages.go:162
|
||||
#: messages.go:174
|
||||
#, c-format
|
||||
msgid "Selection added to %s"
|
||||
msgstr "Valik lisatud albumisse %s"
|
||||
|
||||
#: messages.go:163
|
||||
#: messages.go:175
|
||||
#, c-format
|
||||
msgid "One entry added to %s"
|
||||
msgstr "Üks kirje lisatud albumisse %s"
|
||||
|
||||
#: messages.go:164
|
||||
#: messages.go:176
|
||||
#, c-format
|
||||
msgid "%d entries added to %s"
|
||||
msgstr "%d kirjet lisatud albumisse %s"
|
||||
|
||||
#: messages.go:165
|
||||
#: messages.go:177
|
||||
#, c-format
|
||||
msgid "One entry removed from %s"
|
||||
msgstr "Üks kirje eemaldatud albumist %s"
|
||||
|
||||
#: messages.go:166
|
||||
#: messages.go:178
|
||||
#, c-format
|
||||
msgid "%d entries removed from %s"
|
||||
msgstr "%d kirjet eemaldatud albumist %s"
|
||||
|
||||
#: messages.go:167
|
||||
#: messages.go:179
|
||||
msgid "Account created"
|
||||
msgstr "Konto loodud"
|
||||
|
||||
#: messages.go:168
|
||||
#: messages.go:180
|
||||
msgid "Account saved"
|
||||
msgstr "Konto salvestatud"
|
||||
|
||||
#: messages.go:169
|
||||
#: messages.go:181
|
||||
msgid "Account deleted"
|
||||
msgstr "Konto kustutatud"
|
||||
|
||||
#: messages.go:170
|
||||
#: messages.go:182
|
||||
msgid "Settings saved"
|
||||
msgstr "Seaded salvestatud"
|
||||
|
||||
#: messages.go:171
|
||||
#: messages.go:183
|
||||
msgid "Password changed"
|
||||
msgstr "Parool muudetud"
|
||||
|
||||
#: messages.go:172
|
||||
#: messages.go:184
|
||||
#, c-format
|
||||
msgid "Import completed in %d s"
|
||||
msgstr "Import tehtud %d sekundiga"
|
||||
|
||||
#: messages.go:173
|
||||
#: messages.go:185
|
||||
msgid "Import canceled"
|
||||
msgstr "Import tühistatud"
|
||||
|
||||
#: messages.go:174
|
||||
#: messages.go:186
|
||||
#, c-format
|
||||
msgid "Indexing completed in %d s"
|
||||
msgstr "Indekseerimine lõpetatud %d sekundiga"
|
||||
|
||||
#: messages.go:175
|
||||
#: messages.go:187
|
||||
msgid "Indexing originals..."
|
||||
msgstr "Originaalide indekseerimine..."
|
||||
|
||||
#: messages.go:176
|
||||
#: messages.go:188
|
||||
#, c-format
|
||||
msgid "Indexing files in %s"
|
||||
msgstr "Failide indekseerimine: %s"
|
||||
|
||||
#: messages.go:177
|
||||
#: messages.go:189
|
||||
msgid "Indexing canceled"
|
||||
msgstr "Indekseerimine tühistatud"
|
||||
|
||||
#: messages.go:178
|
||||
#: messages.go:190
|
||||
#, c-format
|
||||
msgid "Removed %d files and %d photos"
|
||||
msgstr "Eemaldatud %d faili ja %d fotot"
|
||||
|
||||
#: messages.go:179
|
||||
#: messages.go:191
|
||||
#, c-format
|
||||
msgid "Moving files from %s"
|
||||
msgstr "Failide liigutamine asukohast %s"
|
||||
|
||||
#: messages.go:180
|
||||
#: messages.go:192
|
||||
#, c-format
|
||||
msgid "Copying files from %s"
|
||||
msgstr "Failide kopeerimine asukohast %s"
|
||||
|
||||
#: messages.go:181
|
||||
#: messages.go:193
|
||||
msgid "Labels deleted"
|
||||
msgstr "Sildid kustutatud"
|
||||
|
||||
#: messages.go:182
|
||||
#: messages.go:194
|
||||
msgid "Label saved"
|
||||
msgstr "Silt salvestatud"
|
||||
|
||||
#: messages.go:183
|
||||
#: messages.go:195
|
||||
msgid "Subject saved"
|
||||
msgstr "Teema salvestatud"
|
||||
|
||||
#: messages.go:184
|
||||
#: messages.go:196
|
||||
msgid "Subject deleted"
|
||||
msgstr "Teema kustutatud"
|
||||
|
||||
#: messages.go:185
|
||||
#: messages.go:197
|
||||
msgid "Person saved"
|
||||
msgstr "Isik salvestatud"
|
||||
|
||||
#: messages.go:186
|
||||
#: messages.go:198
|
||||
msgid "Person deleted"
|
||||
msgstr "Isik kustutatud"
|
||||
|
||||
#: messages.go:187
|
||||
#: messages.go:199
|
||||
msgid "File uploaded"
|
||||
msgstr "File üles laaditud"
|
||||
|
||||
#: messages.go:188
|
||||
#: messages.go:200
|
||||
#, c-format
|
||||
msgid "%d files uploaded in %d s"
|
||||
msgstr "%d faili üles laaditud %d sekundiga"
|
||||
|
||||
#: messages.go:189
|
||||
#: messages.go:201
|
||||
msgid "Processing upload..."
|
||||
msgstr "Üleslaaditud faili töötlemine..."
|
||||
|
||||
#: messages.go:190
|
||||
#: messages.go:202
|
||||
msgid "Upload has been processed"
|
||||
msgstr "Üleslaaditud fail on töödeldud"
|
||||
|
||||
#: messages.go:191
|
||||
#: messages.go:203
|
||||
msgid "Selection approved"
|
||||
msgstr "Valik heaks kiidetud"
|
||||
|
||||
#: messages.go:192
|
||||
#: messages.go:204
|
||||
msgid "Selection archived"
|
||||
msgstr "Valik arhiveeritud"
|
||||
|
||||
#: messages.go:193
|
||||
#: messages.go:205
|
||||
msgid "Selection restored"
|
||||
msgstr "Valik taastatud"
|
||||
|
||||
#: messages.go:194
|
||||
#: messages.go:206
|
||||
msgid "Selection marked as private"
|
||||
msgstr "Valik privaatseks märgitud"
|
||||
|
||||
#: messages.go:195
|
||||
#: messages.go:207
|
||||
msgid "Albums deleted"
|
||||
msgstr "Albumid kustutatud"
|
||||
|
||||
#: messages.go:196
|
||||
#: messages.go:208
|
||||
#, c-format
|
||||
msgid "Zip created in %d s"
|
||||
msgstr "ZIP-fail loodud %d sekundiga"
|
||||
|
||||
#: messages.go:197
|
||||
#: messages.go:209
|
||||
msgid "Permanently deleted"
|
||||
msgstr "Lõplikult kustutatud"
|
||||
|
||||
#: messages.go:198
|
||||
#: messages.go:210
|
||||
#, c-format
|
||||
msgid "%s has been restored"
|
||||
msgstr "%s on taastatud"
|
||||
|
||||
#: messages.go:199
|
||||
#: messages.go:211
|
||||
msgid "Successfully verified"
|
||||
msgstr "Edukalt kinnitatud"
|
||||
|
||||
#: messages.go:200
|
||||
#: messages.go:212
|
||||
msgid "Successfully activated"
|
||||
msgstr "Edukalt aktiveeritud"
|
||||
|
||||
|
|
|
|||
|
|
@ -2,412 +2,427 @@ msgid ""
|
|||
msgstr ""
|
||||
"Project-Id-Version: PACKAGE VERSION\n"
|
||||
"Report-Msgid-Bugs-To: \n"
|
||||
"POT-Creation-Date: 2025-10-17 17:32+0000\n"
|
||||
"PO-Revision-Date: 2025-10-22 08:25+0000\n"
|
||||
"Last-Translator: Google Cloud Translation Basic <noreply-mt-google-"
|
||||
"translate@weblate.org>\n"
|
||||
"POT-Creation-Date: 2026-06-27 09:13+0000\n"
|
||||
"PO-Revision-Date: 2026-06-27 10:28+0000\n"
|
||||
"Last-Translator: DeepL <noreply-mt-deepl@weblate.org>\n"
|
||||
"Language-Team: none\n"
|
||||
"Language: eu\n"
|
||||
"MIME-Version: 1.0\n"
|
||||
"Content-Type: text/plain; charset=UTF-8\n"
|
||||
"Content-Transfer-Encoding: 8bit\n"
|
||||
"Plural-Forms: nplurals=2; plural=n != 1;\n"
|
||||
"X-Generator: Weblate 5.13.3\n"
|
||||
"X-Generator: Weblate 2026.5\n"
|
||||
|
||||
#: messages.go:104
|
||||
#: messages.go:112
|
||||
msgid "Something went wrong, try again"
|
||||
msgstr "Arazoren bat izan da. Saiatu berriro"
|
||||
|
||||
#: messages.go:105
|
||||
#: messages.go:113
|
||||
msgid "Unable to do that"
|
||||
msgstr "Hori egin ezinik"
|
||||
|
||||
#: messages.go:106
|
||||
#: messages.go:114
|
||||
msgid "Changes could not be saved"
|
||||
msgstr "Ezin izan dira aldaketak gorde"
|
||||
|
||||
#: messages.go:107
|
||||
#: messages.go:115
|
||||
msgid "Could not be deleted"
|
||||
msgstr "Ezin izan da ezabatu"
|
||||
|
||||
#: messages.go:108
|
||||
#: messages.go:116
|
||||
#, c-format
|
||||
msgid "%s already exists"
|
||||
msgstr "%s dagoeneko existitzen da"
|
||||
|
||||
#: messages.go:109
|
||||
#: messages.go:117
|
||||
msgid "Not found"
|
||||
msgstr "Ez da aurkitu"
|
||||
|
||||
#: messages.go:110
|
||||
#: messages.go:118
|
||||
msgid "File not found"
|
||||
msgstr "Fitxategia ez da aurkitu"
|
||||
|
||||
#: messages.go:111
|
||||
#: messages.go:119
|
||||
msgid "File too large"
|
||||
msgstr "Fitxategi handiegia"
|
||||
|
||||
#: messages.go:112
|
||||
#: messages.go:120
|
||||
msgid "Unsupported"
|
||||
msgstr "Onartu gabe"
|
||||
|
||||
#: messages.go:113
|
||||
#: messages.go:121
|
||||
msgid "Unsupported type"
|
||||
msgstr "Onartu gabeko mota"
|
||||
|
||||
#: messages.go:114
|
||||
#: messages.go:122
|
||||
msgid "Unsupported format"
|
||||
msgstr "Onartu gabeko formatua"
|
||||
|
||||
#: messages.go:115
|
||||
#: messages.go:123
|
||||
msgid "Originals folder is empty"
|
||||
msgstr "Jatorrizkoen karpeta hutsik dago"
|
||||
|
||||
#: messages.go:116
|
||||
#: messages.go:124
|
||||
msgid "Selection not found"
|
||||
msgstr "Ez da hautapena aurkitu"
|
||||
|
||||
#: messages.go:117
|
||||
#: messages.go:125
|
||||
msgid "Entity not found"
|
||||
msgstr "Ez da aurkitu entitatea"
|
||||
|
||||
#: messages.go:118
|
||||
#: messages.go:126
|
||||
msgid "Account not found"
|
||||
msgstr "Ez da kontua aurkitu"
|
||||
|
||||
#: messages.go:119
|
||||
#: messages.go:127
|
||||
msgid "User not found"
|
||||
msgstr "Ez da erabiltzailea aurkitu"
|
||||
|
||||
#: messages.go:120
|
||||
#: messages.go:128
|
||||
msgid "Label not found"
|
||||
msgstr "Ez da etiketa aurkitu"
|
||||
|
||||
#: messages.go:121
|
||||
#: messages.go:129
|
||||
msgid "Camera not found"
|
||||
msgstr "Kamera ez da aurkitu"
|
||||
|
||||
#: messages.go:130
|
||||
msgid "Lens not found"
|
||||
msgstr "Lentila ez da aurkitu"
|
||||
|
||||
#: messages.go:131
|
||||
msgid "Album not found"
|
||||
msgstr "Ez da aurkitu albuma"
|
||||
|
||||
#: messages.go:122
|
||||
#: messages.go:132
|
||||
msgid "Subject not found"
|
||||
msgstr "Ez da aurkitu gaia"
|
||||
|
||||
#: messages.go:123
|
||||
#: messages.go:133
|
||||
msgid "Person not found"
|
||||
msgstr "Pertsona ez da aurkitu"
|
||||
|
||||
#: messages.go:124
|
||||
#: messages.go:134
|
||||
msgid "Face not found"
|
||||
msgstr "Aurpegia ez da aurkitu"
|
||||
|
||||
#: messages.go:125
|
||||
#: messages.go:135
|
||||
msgid "Not available in public mode"
|
||||
msgstr "Ez dago eskuragarri modu publikoan"
|
||||
|
||||
#: messages.go:126
|
||||
#: messages.go:136
|
||||
msgid "Not available in read-only mode"
|
||||
msgstr "Ez dago erabilgarri irakurtzeko soilik moduan"
|
||||
|
||||
#: messages.go:127
|
||||
#: messages.go:137
|
||||
msgid "Please log in to your account"
|
||||
msgstr "Mesedez, hasi saioa zure kontuan"
|
||||
|
||||
#: messages.go:128
|
||||
#: messages.go:138
|
||||
msgid "Permission denied"
|
||||
msgstr "Baimena ukatu egin da"
|
||||
|
||||
#: messages.go:129
|
||||
#: messages.go:139
|
||||
msgid "Payment required"
|
||||
msgstr "Ordainketa beharrezkoa da"
|
||||
|
||||
#: messages.go:130
|
||||
#: messages.go:140
|
||||
msgid "Upload might be offensive"
|
||||
msgstr "Kargatzea iraingarria izan daiteke"
|
||||
|
||||
#: messages.go:131
|
||||
#: messages.go:141
|
||||
msgid "Upload failed"
|
||||
msgstr "Ezin izan da kargatu"
|
||||
|
||||
#: messages.go:132
|
||||
#: messages.go:142
|
||||
msgid "No items selected"
|
||||
msgstr "Ez da elementurik hautatu"
|
||||
|
||||
#: messages.go:133
|
||||
#: messages.go:143
|
||||
msgid "Failed creating file, please check permissions"
|
||||
msgstr "Ezin izan da fitxategia sortzean. Egiaztatu baimenak"
|
||||
|
||||
#: messages.go:134
|
||||
#: messages.go:144
|
||||
msgid "Failed creating folder, please check permissions"
|
||||
msgstr "Ezin izan da karpeta sortzean. Egiaztatu baimenak"
|
||||
|
||||
#: messages.go:135
|
||||
#: messages.go:145
|
||||
msgid "Could not connect, please try again"
|
||||
msgstr "Ezin izan da konektatu. Saiatu berriro"
|
||||
|
||||
#: messages.go:136
|
||||
#: messages.go:146
|
||||
msgid "Enter verification code"
|
||||
msgstr "Sartu egiaztapen-kodea"
|
||||
|
||||
#: messages.go:137
|
||||
#: messages.go:147
|
||||
msgid "Invalid verification code, please try again"
|
||||
msgstr "Egiaztapen-kode baliogabea. Saiatu berriro"
|
||||
|
||||
#: messages.go:138
|
||||
#: messages.go:148
|
||||
msgid "Invalid password, please try again"
|
||||
msgstr "Pasahitz baliogabea, saiatu berriro"
|
||||
|
||||
#: messages.go:139
|
||||
#: messages.go:149
|
||||
msgid "Feature disabled"
|
||||
msgstr "Eginbidea desgaituta dago"
|
||||
|
||||
#: messages.go:140
|
||||
#: messages.go:150
|
||||
msgid "No labels selected"
|
||||
msgstr "Ez da etiketarik hautatu"
|
||||
|
||||
#: messages.go:141
|
||||
#: messages.go:151
|
||||
msgid "No albums selected"
|
||||
msgstr "Ez dago albumik hautatu"
|
||||
|
||||
#: messages.go:142
|
||||
#: messages.go:152
|
||||
msgid "No files available for download"
|
||||
msgstr "Ez dago fitxategirik deskargatzeko erabilgarri"
|
||||
|
||||
#: messages.go:143
|
||||
#: messages.go:153
|
||||
msgid "Failed to create zip file"
|
||||
msgstr "Ezin izan da zip fitxategia sortu"
|
||||
|
||||
#: messages.go:144
|
||||
#: messages.go:154
|
||||
msgid "Invalid credentials"
|
||||
msgstr "Kredentzialak baliogabeak"
|
||||
|
||||
#: messages.go:145
|
||||
#: messages.go:155
|
||||
msgid "Invalid link"
|
||||
msgstr "Esteka baliogabea"
|
||||
|
||||
#: messages.go:146
|
||||
#: messages.go:156
|
||||
msgid "Invalid name"
|
||||
msgstr "Izen baliogabea"
|
||||
|
||||
#: messages.go:147
|
||||
#: messages.go:157
|
||||
msgid "Busy, please try again later"
|
||||
msgstr "Lanpetuta, saiatu berriro geroago"
|
||||
|
||||
#: messages.go:148
|
||||
#: messages.go:158
|
||||
#, c-format
|
||||
msgid "The wakeup interval is %s, but must be 1h or less"
|
||||
msgstr "Esnatzeko tartea %s da, baina ordu 1 edo gutxiagokoa izan behar du"
|
||||
|
||||
#: messages.go:149
|
||||
#: messages.go:159
|
||||
msgid "Your account could not be connected"
|
||||
msgstr "Ezin izan da zure kontua konektatu"
|
||||
|
||||
#: messages.go:150
|
||||
#: messages.go:160
|
||||
msgid "Too many requests"
|
||||
msgstr "Eskaera gehiegi"
|
||||
|
||||
#: messages.go:151
|
||||
#: messages.go:161
|
||||
msgid "Insufficient storage"
|
||||
msgstr "Biltegiratze nahikoa ez"
|
||||
|
||||
#: messages.go:152
|
||||
#: messages.go:162
|
||||
msgid "Quota exceeded"
|
||||
msgstr "Kuota gainditu da"
|
||||
|
||||
#: messages.go:155
|
||||
#: messages.go:163
|
||||
msgid "Registration disabled"
|
||||
msgstr "Erregistroa desgaituta dago"
|
||||
|
||||
#: messages.go:164
|
||||
msgid "Verified email required"
|
||||
msgstr "Egiaztatutako posta elektronikoa beharrezkoa da"
|
||||
|
||||
#: messages.go:167
|
||||
msgid "Changes successfully saved"
|
||||
msgstr "Aldaketak ongi gorde dira"
|
||||
|
||||
#: messages.go:156
|
||||
#: messages.go:168
|
||||
msgid "Album created"
|
||||
msgstr "Sortu da albuma"
|
||||
|
||||
#: messages.go:157
|
||||
#: messages.go:169
|
||||
msgid "Album saved"
|
||||
msgstr "Albuma gorde da"
|
||||
|
||||
#: messages.go:158
|
||||
#: messages.go:170
|
||||
#, c-format
|
||||
msgid "Album %s deleted"
|
||||
msgstr "%s albuma ezabatu da"
|
||||
|
||||
#: messages.go:159
|
||||
#: messages.go:171
|
||||
msgid "Album contents cloned"
|
||||
msgstr "Albumen edukia klonatu da"
|
||||
|
||||
#: messages.go:160
|
||||
#: messages.go:172
|
||||
msgid "File removed from stack"
|
||||
msgstr "Fitxategia pilatik kendu da"
|
||||
|
||||
#: messages.go:161
|
||||
#: messages.go:173
|
||||
msgid "File deleted"
|
||||
msgstr "Fitxategia ezabatu da"
|
||||
|
||||
#: messages.go:162
|
||||
#: messages.go:174
|
||||
#, c-format
|
||||
msgid "Selection added to %s"
|
||||
msgstr "Aukeraketa gehitu da %s"
|
||||
|
||||
#: messages.go:163
|
||||
#: messages.go:175
|
||||
#, c-format
|
||||
msgid "One entry added to %s"
|
||||
msgstr "Sarrera bat gehitu da %s"
|
||||
|
||||
#: messages.go:164
|
||||
#: messages.go:176
|
||||
#, c-format
|
||||
msgid "%d entries added to %s"
|
||||
msgstr "%d sarrerak gehitu dira %s"
|
||||
|
||||
#: messages.go:165
|
||||
#: messages.go:177
|
||||
#, c-format
|
||||
msgid "One entry removed from %s"
|
||||
msgstr "Sarrera bat kendu da %s-tik"
|
||||
|
||||
#: messages.go:166
|
||||
#: messages.go:178
|
||||
#, c-format
|
||||
msgid "%d entries removed from %s"
|
||||
msgstr "%d sarrerak kendu dira %s-tik"
|
||||
|
||||
#: messages.go:167
|
||||
#: messages.go:179
|
||||
msgid "Account created"
|
||||
msgstr "Kontua sortu da"
|
||||
|
||||
#: messages.go:168
|
||||
#: messages.go:180
|
||||
msgid "Account saved"
|
||||
msgstr "Kontua gorde da"
|
||||
|
||||
#: messages.go:169
|
||||
#: messages.go:181
|
||||
msgid "Account deleted"
|
||||
msgstr "Kontua ezabatu da"
|
||||
|
||||
#: messages.go:170
|
||||
#: messages.go:182
|
||||
msgid "Settings saved"
|
||||
msgstr "Ezarpenak gorde dira"
|
||||
|
||||
#: messages.go:171
|
||||
#: messages.go:183
|
||||
msgid "Password changed"
|
||||
msgstr "Pasahitza aldatu da"
|
||||
|
||||
#: messages.go:172
|
||||
#: messages.go:184
|
||||
#, c-format
|
||||
msgid "Import completed in %d s"
|
||||
msgstr "Inportazioa %d s-an amaitu da"
|
||||
|
||||
#: messages.go:173
|
||||
#: messages.go:185
|
||||
msgid "Import canceled"
|
||||
msgstr "Inportazioa bertan behera utzi da"
|
||||
|
||||
#: messages.go:174
|
||||
#: messages.go:186
|
||||
#, c-format
|
||||
msgid "Indexing completed in %d s"
|
||||
msgstr "Indexatzea %d s"
|
||||
|
||||
#: messages.go:175
|
||||
#: messages.go:187
|
||||
msgid "Indexing originals..."
|
||||
msgstr "Jatorrizkoak indexatzen..."
|
||||
|
||||
#: messages.go:176
|
||||
#: messages.go:188
|
||||
#, c-format
|
||||
msgid "Indexing files in %s"
|
||||
msgstr "Fitxategiak indexatzen %s-n"
|
||||
|
||||
#: messages.go:177
|
||||
#: messages.go:189
|
||||
msgid "Indexing canceled"
|
||||
msgstr "Indexazioa bertan behera utzi da"
|
||||
|
||||
#: messages.go:178
|
||||
#: messages.go:190
|
||||
#, c-format
|
||||
msgid "Removed %d files and %d photos"
|
||||
msgstr "%d fitxategiak eta %d argazkiak kendu dira"
|
||||
|
||||
#: messages.go:179
|
||||
#: messages.go:191
|
||||
#, c-format
|
||||
msgid "Moving files from %s"
|
||||
msgstr "Fitxategiak mugitzen %s"
|
||||
|
||||
#: messages.go:180
|
||||
#: messages.go:192
|
||||
#, c-format
|
||||
msgid "Copying files from %s"
|
||||
msgstr "%s fitxategiak kopiatzen"
|
||||
|
||||
#: messages.go:181
|
||||
#: messages.go:193
|
||||
msgid "Labels deleted"
|
||||
msgstr "Etiketak ezabatu dira"
|
||||
|
||||
#: messages.go:182
|
||||
#: messages.go:194
|
||||
msgid "Label saved"
|
||||
msgstr "Etiketa gorde da"
|
||||
|
||||
#: messages.go:183
|
||||
#: messages.go:195
|
||||
msgid "Subject saved"
|
||||
msgstr "Gaia gorde da"
|
||||
|
||||
#: messages.go:184
|
||||
#: messages.go:196
|
||||
msgid "Subject deleted"
|
||||
msgstr "Gaia ezabatu da"
|
||||
|
||||
#: messages.go:185
|
||||
#: messages.go:197
|
||||
msgid "Person saved"
|
||||
msgstr "Pertsona gordeta"
|
||||
|
||||
#: messages.go:186
|
||||
#: messages.go:198
|
||||
msgid "Person deleted"
|
||||
msgstr "Pertsona ezabatu da"
|
||||
|
||||
#: messages.go:187
|
||||
#: messages.go:199
|
||||
msgid "File uploaded"
|
||||
msgstr "Kargatu da fitxategia"
|
||||
|
||||
#: messages.go:188
|
||||
#: messages.go:200
|
||||
#, c-format
|
||||
msgid "%d files uploaded in %d s"
|
||||
msgstr "%d fitxategiak %d s-etan kargatu dira"
|
||||
|
||||
#: messages.go:189
|
||||
#: messages.go:201
|
||||
msgid "Processing upload..."
|
||||
msgstr "Kargaketa prozesatzen..."
|
||||
|
||||
#: messages.go:190
|
||||
#: messages.go:202
|
||||
msgid "Upload has been processed"
|
||||
msgstr "Kargatzea prozesatu da"
|
||||
|
||||
#: messages.go:191
|
||||
#: messages.go:203
|
||||
msgid "Selection approved"
|
||||
msgstr "Hautaketa onartu da"
|
||||
|
||||
#: messages.go:192
|
||||
#: messages.go:204
|
||||
msgid "Selection archived"
|
||||
msgstr "Hautaketa artxibatuta dago"
|
||||
|
||||
#: messages.go:193
|
||||
#: messages.go:205
|
||||
msgid "Selection restored"
|
||||
msgstr "Hautaketa leheneratu da"
|
||||
|
||||
#: messages.go:194
|
||||
#: messages.go:206
|
||||
msgid "Selection marked as private"
|
||||
msgstr "Hautapena pribatu gisa markatu da"
|
||||
|
||||
#: messages.go:195
|
||||
#: messages.go:207
|
||||
msgid "Albums deleted"
|
||||
msgstr "Albumak ezabatu dira"
|
||||
|
||||
#: messages.go:196
|
||||
#: messages.go:208
|
||||
#, c-format
|
||||
msgid "Zip created in %d s"
|
||||
msgstr "Zip sortu zen %d s"
|
||||
|
||||
#: messages.go:197
|
||||
#: messages.go:209
|
||||
msgid "Permanently deleted"
|
||||
msgstr "Betiko ezabatu da"
|
||||
|
||||
#: messages.go:198
|
||||
#: messages.go:210
|
||||
#, c-format
|
||||
msgid "%s has been restored"
|
||||
msgstr "%s leheneratu da"
|
||||
|
||||
#: messages.go:199
|
||||
#: messages.go:211
|
||||
msgid "Successfully verified"
|
||||
msgstr "Behar bezala egiaztatu da"
|
||||
|
||||
#: messages.go:200
|
||||
#: messages.go:212
|
||||
msgid "Successfully activated"
|
||||
msgstr "Behar bezala aktibatu da"
|
||||
|
||||
|
|
|
|||
|
|
@ -2,8 +2,8 @@ msgid ""
|
|||
msgstr ""
|
||||
"Project-Id-Version: \n"
|
||||
"Report-Msgid-Bugs-To: \n"
|
||||
"POT-Creation-Date: 2025-10-17 17:32+0000\n"
|
||||
"PO-Revision-Date: 2025-10-22 08:25+0000\n"
|
||||
"POT-Creation-Date: 2026-06-27 09:13+0000\n"
|
||||
"PO-Revision-Date: 2026-06-27 10:28+0000\n"
|
||||
"Last-Translator: Google Cloud Translation Basic <noreply-mt-google-"
|
||||
"translate@weblate.org>\n"
|
||||
"Language-Team: none\n"
|
||||
|
|
@ -12,402 +12,418 @@ msgstr ""
|
|||
"Content-Type: text/plain; charset=UTF-8\n"
|
||||
"Content-Transfer-Encoding: 8bit\n"
|
||||
"Plural-Forms: nplurals=2; plural=(n==0 || n==1);\n"
|
||||
"X-Generator: Weblate 5.13.3\n"
|
||||
"X-Generator: Weblate 2026.5\n"
|
||||
|
||||
#: messages.go:104
|
||||
#: messages.go:112
|
||||
msgid "Something went wrong, try again"
|
||||
msgstr "یه چیزی اشتباه شد دوباره تلاش کن"
|
||||
|
||||
#: messages.go:105
|
||||
#: messages.go:113
|
||||
msgid "Unable to do that"
|
||||
msgstr "قادر به انجام آن نیست"
|
||||
|
||||
#: messages.go:106
|
||||
#: messages.go:114
|
||||
msgid "Changes could not be saved"
|
||||
msgstr "تغییرات را نمی توان ذخیره کرد"
|
||||
|
||||
#: messages.go:107
|
||||
#: messages.go:115
|
||||
msgid "Could not be deleted"
|
||||
msgstr "نمی توان حذف کرد"
|
||||
|
||||
#: messages.go:108
|
||||
#: messages.go:116
|
||||
#, c-format
|
||||
msgid "%s already exists"
|
||||
msgstr "%s از قبل وجود دارد"
|
||||
|
||||
#: messages.go:109
|
||||
#: messages.go:117
|
||||
msgid "Not found"
|
||||
msgstr "پیدا نشد"
|
||||
|
||||
#: messages.go:110
|
||||
#: messages.go:118
|
||||
msgid "File not found"
|
||||
msgstr "فایل پیدا نشد"
|
||||
|
||||
#: messages.go:111
|
||||
#: messages.go:119
|
||||
msgid "File too large"
|
||||
msgstr "فایل خیلی بزرگ است"
|
||||
|
||||
#: messages.go:112
|
||||
#: messages.go:120
|
||||
msgid "Unsupported"
|
||||
msgstr "پشتیبانی نمی شود"
|
||||
|
||||
#: messages.go:113
|
||||
#: messages.go:121
|
||||
msgid "Unsupported type"
|
||||
msgstr "نوع پشتیبانی نشده"
|
||||
|
||||
#: messages.go:114
|
||||
#: messages.go:122
|
||||
msgid "Unsupported format"
|
||||
msgstr "قالب پشتیبانی نشده"
|
||||
|
||||
#: messages.go:115
|
||||
#: messages.go:123
|
||||
msgid "Originals folder is empty"
|
||||
msgstr "پوشه اصلی خالی است"
|
||||
|
||||
#: messages.go:116
|
||||
#: messages.go:124
|
||||
msgid "Selection not found"
|
||||
msgstr "انتخاب پیدا نشد"
|
||||
|
||||
#: messages.go:117
|
||||
#: messages.go:125
|
||||
msgid "Entity not found"
|
||||
msgstr "موجودیت پیدا نشد"
|
||||
|
||||
#: messages.go:118
|
||||
#: messages.go:126
|
||||
msgid "Account not found"
|
||||
msgstr "حساب کاربری پیدا نشد"
|
||||
|
||||
#: messages.go:119
|
||||
#: messages.go:127
|
||||
msgid "User not found"
|
||||
msgstr "کاربر پیدا نشد"
|
||||
|
||||
#: messages.go:120
|
||||
#: messages.go:128
|
||||
msgid "Label not found"
|
||||
msgstr "برچسب پیدا نشد"
|
||||
|
||||
#: messages.go:121
|
||||
#: messages.go:129
|
||||
msgid "Camera not found"
|
||||
msgstr "دوربین پیدا نشد"
|
||||
|
||||
#: messages.go:130
|
||||
msgid "Lens not found"
|
||||
msgstr "لنز یافت نشد"
|
||||
|
||||
#: messages.go:131
|
||||
msgid "Album not found"
|
||||
msgstr "آلبوم پیدا نشد"
|
||||
|
||||
#: messages.go:122
|
||||
#: messages.go:132
|
||||
msgid "Subject not found"
|
||||
msgstr "موضوع پیدا نشد"
|
||||
|
||||
#: messages.go:123
|
||||
#: messages.go:133
|
||||
msgid "Person not found"
|
||||
msgstr "فرد پیدا نشد"
|
||||
|
||||
#: messages.go:124
|
||||
#: messages.go:134
|
||||
msgid "Face not found"
|
||||
msgstr "صورت پیدا نشد"
|
||||
|
||||
#: messages.go:125
|
||||
#: messages.go:135
|
||||
msgid "Not available in public mode"
|
||||
msgstr "در حالت عمومی در دسترس نیست"
|
||||
|
||||
#: messages.go:126
|
||||
#: messages.go:136
|
||||
msgid "Not available in read-only mode"
|
||||
msgstr "در حالت فقط خواندنی در دسترس نیست"
|
||||
|
||||
#: messages.go:127
|
||||
#: messages.go:137
|
||||
msgid "Please log in to your account"
|
||||
msgstr "لطفا وارد شوید و دوباره امتحان کنید"
|
||||
|
||||
#: messages.go:128
|
||||
#: messages.go:138
|
||||
msgid "Permission denied"
|
||||
msgstr "فرد حذف شد"
|
||||
|
||||
#: messages.go:129
|
||||
#: messages.go:139
|
||||
msgid "Payment required"
|
||||
msgstr "پرداخت لازم است"
|
||||
|
||||
#: messages.go:130
|
||||
#: messages.go:140
|
||||
msgid "Upload might be offensive"
|
||||
msgstr "آپلود ممکن است توهین آمیز باشد"
|
||||
|
||||
#: messages.go:131
|
||||
#: messages.go:141
|
||||
msgid "Upload failed"
|
||||
msgstr "آپلود انجام نشد"
|
||||
|
||||
#: messages.go:132
|
||||
#: messages.go:142
|
||||
msgid "No items selected"
|
||||
msgstr "هیچ موردی انتخاب نشده است"
|
||||
|
||||
#: messages.go:133
|
||||
#: messages.go:143
|
||||
msgid "Failed creating file, please check permissions"
|
||||
msgstr "فایل ایجاد نشد، لطفا مجوزها را بررسی کنید"
|
||||
|
||||
#: messages.go:134
|
||||
#: messages.go:144
|
||||
msgid "Failed creating folder, please check permissions"
|
||||
msgstr "پوشه ایجاد نشد، لطفا مجوزها را بررسی کنید"
|
||||
|
||||
#: messages.go:135
|
||||
#: messages.go:145
|
||||
msgid "Could not connect, please try again"
|
||||
msgstr "اتصال برقرار نشد، لطفاً دوباره امتحان کنید"
|
||||
|
||||
#: messages.go:136
|
||||
#: messages.go:146
|
||||
msgid "Enter verification code"
|
||||
msgstr "کد تایید را وارد کنید"
|
||||
|
||||
#: messages.go:137
|
||||
#: messages.go:147
|
||||
msgid "Invalid verification code, please try again"
|
||||
msgstr "کد تأیید نامعتبر است، لطفاً دوباره امتحان کنید"
|
||||
|
||||
#: messages.go:138
|
||||
#: messages.go:148
|
||||
msgid "Invalid password, please try again"
|
||||
msgstr "رمز عبور نامعتبر است، لطفا دوباره امتحان کنید"
|
||||
|
||||
#: messages.go:139
|
||||
#: messages.go:149
|
||||
msgid "Feature disabled"
|
||||
msgstr "ویژگی غیرفعال است"
|
||||
|
||||
#: messages.go:140
|
||||
#: messages.go:150
|
||||
msgid "No labels selected"
|
||||
msgstr "هیچ برچسبی انتخاب نشده است"
|
||||
|
||||
#: messages.go:141
|
||||
#: messages.go:151
|
||||
msgid "No albums selected"
|
||||
msgstr "هیچ آلبومی انتخاب نشده است"
|
||||
|
||||
#: messages.go:142
|
||||
#: messages.go:152
|
||||
msgid "No files available for download"
|
||||
msgstr "هیچ فایلی برای دانلود موجود نیست"
|
||||
|
||||
#: messages.go:143
|
||||
#: messages.go:153
|
||||
msgid "Failed to create zip file"
|
||||
msgstr "فایل فشرده ایجاد نشد"
|
||||
|
||||
#: messages.go:144
|
||||
#: messages.go:154
|
||||
msgid "Invalid credentials"
|
||||
msgstr "گواهی نامه نامعتبر"
|
||||
|
||||
#: messages.go:145
|
||||
#: messages.go:155
|
||||
msgid "Invalid link"
|
||||
msgstr "لینک نامعتبر"
|
||||
|
||||
#: messages.go:146
|
||||
#: messages.go:156
|
||||
msgid "Invalid name"
|
||||
msgstr "نام نامعتبر"
|
||||
|
||||
#: messages.go:147
|
||||
#: messages.go:157
|
||||
msgid "Busy, please try again later"
|
||||
msgstr "مشغول است، لطفاً بعداً دوباره امتحان کنید"
|
||||
|
||||
#: messages.go:148
|
||||
#: messages.go:158
|
||||
#, c-format
|
||||
msgid "The wakeup interval is %s, but must be 1h or less"
|
||||
msgstr "فاصله بیداری %s است، اما باید 1 ساعت یا کمتر باشد"
|
||||
|
||||
#: messages.go:149
|
||||
#: messages.go:159
|
||||
msgid "Your account could not be connected"
|
||||
msgstr "حساب شما متصل نشد"
|
||||
|
||||
#: messages.go:150
|
||||
#: messages.go:160
|
||||
msgid "Too many requests"
|
||||
msgstr "درخواست های خیلی زیاد"
|
||||
|
||||
#: messages.go:151
|
||||
#: messages.go:161
|
||||
msgid "Insufficient storage"
|
||||
msgstr "ذخیره سازی ناکافی"
|
||||
|
||||
#: messages.go:152
|
||||
#: messages.go:162
|
||||
msgid "Quota exceeded"
|
||||
msgstr "از سهمیه فراتر رفت"
|
||||
|
||||
#: messages.go:155
|
||||
#: messages.go:163
|
||||
msgid "Registration disabled"
|
||||
msgstr "ثبت نام غیرفعال شد"
|
||||
|
||||
#: messages.go:164
|
||||
msgid "Verified email required"
|
||||
msgstr "ایمیل تایید شده الزامی است"
|
||||
|
||||
#: messages.go:167
|
||||
msgid "Changes successfully saved"
|
||||
msgstr "تغییرات با موفقیت ذخیره شد"
|
||||
|
||||
#: messages.go:156
|
||||
#: messages.go:168
|
||||
msgid "Album created"
|
||||
msgstr "آلبوم ایجاد شد"
|
||||
|
||||
#: messages.go:157
|
||||
#: messages.go:169
|
||||
msgid "Album saved"
|
||||
msgstr "آلبوم ذخیره شد"
|
||||
|
||||
#: messages.go:158
|
||||
#: messages.go:170
|
||||
#, c-format
|
||||
msgid "Album %s deleted"
|
||||
msgstr "آلبوم %s حذف شد"
|
||||
|
||||
#: messages.go:159
|
||||
#: messages.go:171
|
||||
msgid "Album contents cloned"
|
||||
msgstr "محتویات آلبوم کلون شد"
|
||||
|
||||
#: messages.go:160
|
||||
#: messages.go:172
|
||||
msgid "File removed from stack"
|
||||
msgstr "فایل از پشته حذف شد"
|
||||
|
||||
#: messages.go:161
|
||||
#: messages.go:173
|
||||
msgid "File deleted"
|
||||
msgstr "فایل حذف شد"
|
||||
|
||||
#: messages.go:162
|
||||
#: messages.go:174
|
||||
#, c-format
|
||||
msgid "Selection added to %s"
|
||||
msgstr "مورد انتخابی به %s اضافه شد"
|
||||
|
||||
#: messages.go:163
|
||||
#: messages.go:175
|
||||
#, c-format
|
||||
msgid "One entry added to %s"
|
||||
msgstr "یک مورد به %s اضافه شد"
|
||||
|
||||
#: messages.go:164
|
||||
#: messages.go:176
|
||||
#, c-format
|
||||
msgid "%d entries added to %s"
|
||||
msgstr "%d مورد به %s اضافه شد"
|
||||
|
||||
#: messages.go:165
|
||||
#: messages.go:177
|
||||
#, c-format
|
||||
msgid "One entry removed from %s"
|
||||
msgstr "یک مورد از %s حذف شد"
|
||||
|
||||
#: messages.go:166
|
||||
#: messages.go:178
|
||||
#, c-format
|
||||
msgid "%d entries removed from %s"
|
||||
msgstr "%d مورد از %s حذف شد"
|
||||
|
||||
#: messages.go:167
|
||||
#: messages.go:179
|
||||
msgid "Account created"
|
||||
msgstr "حساب کاربری ایجاد شد"
|
||||
|
||||
#: messages.go:168
|
||||
#: messages.go:180
|
||||
msgid "Account saved"
|
||||
msgstr "حساب کاربری ذخیره شد"
|
||||
|
||||
#: messages.go:169
|
||||
#: messages.go:181
|
||||
msgid "Account deleted"
|
||||
msgstr "حساب کاربری حذف شد"
|
||||
|
||||
#: messages.go:170
|
||||
#: messages.go:182
|
||||
msgid "Settings saved"
|
||||
msgstr "تنظیمات ذخیره شد"
|
||||
|
||||
#: messages.go:171
|
||||
#: messages.go:183
|
||||
msgid "Password changed"
|
||||
msgstr "رمزعبور تغییر کرد"
|
||||
|
||||
#: messages.go:172
|
||||
#: messages.go:184
|
||||
#, c-format
|
||||
msgid "Import completed in %d s"
|
||||
msgstr "وارد کردن در %d ثانیه تکمیل شد"
|
||||
|
||||
#: messages.go:173
|
||||
#: messages.go:185
|
||||
msgid "Import canceled"
|
||||
msgstr "وارد کردن لغو شد"
|
||||
|
||||
#: messages.go:174
|
||||
#: messages.go:186
|
||||
#, c-format
|
||||
msgid "Indexing completed in %d s"
|
||||
msgstr "نمایه سازی در %d ثانیه تکمیل شد"
|
||||
|
||||
#: messages.go:175
|
||||
#: messages.go:187
|
||||
msgid "Indexing originals..."
|
||||
msgstr "نمایه سازی نسخه های اصلی ..."
|
||||
|
||||
#: messages.go:176
|
||||
#: messages.go:188
|
||||
#, c-format
|
||||
msgid "Indexing files in %s"
|
||||
msgstr "نمایه سازی فایل ها در %s"
|
||||
|
||||
#: messages.go:177
|
||||
#: messages.go:189
|
||||
msgid "Indexing canceled"
|
||||
msgstr "نمایه سازی لغو شد"
|
||||
|
||||
#: messages.go:178
|
||||
#: messages.go:190
|
||||
#, c-format
|
||||
msgid "Removed %d files and %d photos"
|
||||
msgstr "%d فایل و %d عکس حذف شد"
|
||||
|
||||
#: messages.go:179
|
||||
#: messages.go:191
|
||||
#, c-format
|
||||
msgid "Moving files from %s"
|
||||
msgstr "انتقال فایل ها از %s"
|
||||
|
||||
#: messages.go:180
|
||||
#: messages.go:192
|
||||
#, c-format
|
||||
msgid "Copying files from %s"
|
||||
msgstr "کپی کردن فایل ها از %s"
|
||||
|
||||
#: messages.go:181
|
||||
#: messages.go:193
|
||||
msgid "Labels deleted"
|
||||
msgstr "برچسب ها حذف شدند"
|
||||
|
||||
#: messages.go:182
|
||||
#: messages.go:194
|
||||
msgid "Label saved"
|
||||
msgstr "برچسب ذخیره شد"
|
||||
|
||||
#: messages.go:183
|
||||
#: messages.go:195
|
||||
msgid "Subject saved"
|
||||
msgstr "موضوع ذخیره شد"
|
||||
|
||||
#: messages.go:184
|
||||
#: messages.go:196
|
||||
msgid "Subject deleted"
|
||||
msgstr "موضوع حذف شد"
|
||||
|
||||
#: messages.go:185
|
||||
#: messages.go:197
|
||||
msgid "Person saved"
|
||||
msgstr "فرد ذخیره شد"
|
||||
|
||||
#: messages.go:186
|
||||
#: messages.go:198
|
||||
msgid "Person deleted"
|
||||
msgstr "فرد حذف شد"
|
||||
|
||||
#: messages.go:187
|
||||
#: messages.go:199
|
||||
msgid "File uploaded"
|
||||
msgstr "فایل حذف شد"
|
||||
|
||||
#: messages.go:188
|
||||
#: messages.go:200
|
||||
#, c-format
|
||||
msgid "%d files uploaded in %d s"
|
||||
msgstr "%d فایل در %d ثانیه آپلود شد"
|
||||
|
||||
#: messages.go:189
|
||||
#: messages.go:201
|
||||
msgid "Processing upload..."
|
||||
msgstr "در حال پردازش آپلود..."
|
||||
|
||||
#: messages.go:190
|
||||
#: messages.go:202
|
||||
msgid "Upload has been processed"
|
||||
msgstr "%s بازیابی شده است"
|
||||
msgstr "بارگذاری پردازش شده است"
|
||||
|
||||
#: messages.go:191
|
||||
#: messages.go:203
|
||||
msgid "Selection approved"
|
||||
msgstr "مورد انتخابی تایید شد"
|
||||
|
||||
#: messages.go:192
|
||||
#: messages.go:204
|
||||
msgid "Selection archived"
|
||||
msgstr "مورد انتخابی بایگانی شد"
|
||||
|
||||
#: messages.go:193
|
||||
#: messages.go:205
|
||||
msgid "Selection restored"
|
||||
msgstr "مورد انتخابی بازیابی شد"
|
||||
|
||||
#: messages.go:194
|
||||
#: messages.go:206
|
||||
msgid "Selection marked as private"
|
||||
msgstr "مورد انتخابی بهعنوان خصوصی علامتگذاری شد"
|
||||
|
||||
#: messages.go:195
|
||||
#: messages.go:207
|
||||
msgid "Albums deleted"
|
||||
msgstr "آلبوم حذف شد"
|
||||
|
||||
#: messages.go:196
|
||||
#: messages.go:208
|
||||
#, c-format
|
||||
msgid "Zip created in %d s"
|
||||
msgstr "فایل فشرده در %d ثانیه ایجاد شد"
|
||||
|
||||
#: messages.go:197
|
||||
#: messages.go:209
|
||||
msgid "Permanently deleted"
|
||||
msgstr "برای همیشه حذف شد"
|
||||
|
||||
#: messages.go:198
|
||||
#: messages.go:210
|
||||
#, c-format
|
||||
msgid "%s has been restored"
|
||||
msgstr "%s بازیابی شده است"
|
||||
|
||||
#: messages.go:199
|
||||
#: messages.go:211
|
||||
msgid "Successfully verified"
|
||||
msgstr "با موفقیت تأیید شد"
|
||||
|
||||
#: messages.go:200
|
||||
#: messages.go:212
|
||||
msgid "Successfully activated"
|
||||
msgstr "با موفقیت فعال شد"
|
||||
|
||||
|
|
|
|||
|
|
@ -2,8 +2,8 @@ msgid ""
|
|||
msgstr ""
|
||||
"Project-Id-Version: \n"
|
||||
"Report-Msgid-Bugs-To: \n"
|
||||
"POT-Creation-Date: 2025-10-17 17:32+0000\n"
|
||||
"PO-Revision-Date: 2025-10-22 08:25+0000\n"
|
||||
"POT-Creation-Date: 2026-06-27 09:13+0000\n"
|
||||
"PO-Revision-Date: 2026-06-27 10:28+0000\n"
|
||||
"Last-Translator: DeepL <noreply-mt-deepl@weblate.org>\n"
|
||||
"Language-Team: none\n"
|
||||
"Language: fi\n"
|
||||
|
|
@ -11,402 +11,418 @@ msgstr ""
|
|||
"Content-Type: text/plain; charset=UTF-8\n"
|
||||
"Content-Transfer-Encoding: 8bit\n"
|
||||
"Plural-Forms: nplurals=2; plural=n != 1;\n"
|
||||
"X-Generator: Weblate 5.13.3\n"
|
||||
"X-Generator: Weblate 2026.5\n"
|
||||
|
||||
#: messages.go:104
|
||||
#: messages.go:112
|
||||
msgid "Something went wrong, try again"
|
||||
msgstr "Jokin meni pieleen, yritä uudelleen"
|
||||
|
||||
#: messages.go:105
|
||||
#: messages.go:113
|
||||
msgid "Unable to do that"
|
||||
msgstr "Se ei onnistu"
|
||||
|
||||
#: messages.go:106
|
||||
#: messages.go:114
|
||||
msgid "Changes could not be saved"
|
||||
msgstr "Muutoksia ei voitu tallentaa"
|
||||
|
||||
#: messages.go:107
|
||||
#: messages.go:115
|
||||
msgid "Could not be deleted"
|
||||
msgstr "Ei voitu poistaa"
|
||||
|
||||
#: messages.go:108
|
||||
#: messages.go:116
|
||||
#, c-format
|
||||
msgid "%s already exists"
|
||||
msgstr "%s on jo olemassa"
|
||||
|
||||
#: messages.go:109
|
||||
#: messages.go:117
|
||||
msgid "Not found"
|
||||
msgstr "Ei löytynyt"
|
||||
|
||||
#: messages.go:110
|
||||
#: messages.go:118
|
||||
msgid "File not found"
|
||||
msgstr "Tiedostoa ei löydy"
|
||||
|
||||
#: messages.go:111
|
||||
#: messages.go:119
|
||||
msgid "File too large"
|
||||
msgstr "Tiedosto liian suuri"
|
||||
|
||||
#: messages.go:112
|
||||
#: messages.go:120
|
||||
msgid "Unsupported"
|
||||
msgstr "Ei tuettu"
|
||||
|
||||
#: messages.go:113
|
||||
#: messages.go:121
|
||||
msgid "Unsupported type"
|
||||
msgstr "Tyyppiä ei tueta"
|
||||
|
||||
#: messages.go:114
|
||||
#: messages.go:122
|
||||
msgid "Unsupported format"
|
||||
msgstr "Ei tuettu muoto"
|
||||
|
||||
#: messages.go:115
|
||||
#: messages.go:123
|
||||
msgid "Originals folder is empty"
|
||||
msgstr "Originaalit-kansio on tyhjä"
|
||||
|
||||
#: messages.go:116
|
||||
#: messages.go:124
|
||||
msgid "Selection not found"
|
||||
msgstr "Valintaa ei löydy"
|
||||
|
||||
#: messages.go:117
|
||||
#: messages.go:125
|
||||
msgid "Entity not found"
|
||||
msgstr "Entiteettiä ei löydy"
|
||||
|
||||
#: messages.go:118
|
||||
#: messages.go:126
|
||||
msgid "Account not found"
|
||||
msgstr "Tiliä ei löydy"
|
||||
|
||||
#: messages.go:119
|
||||
#: messages.go:127
|
||||
msgid "User not found"
|
||||
msgstr "Käyttäjää ei löydy"
|
||||
|
||||
#: messages.go:120
|
||||
#: messages.go:128
|
||||
msgid "Label not found"
|
||||
msgstr "Tarraa ei löydy"
|
||||
|
||||
#: messages.go:121
|
||||
#: messages.go:129
|
||||
msgid "Camera not found"
|
||||
msgstr "Kameraa ei löydy"
|
||||
|
||||
#: messages.go:130
|
||||
msgid "Lens not found"
|
||||
msgstr "Objektiivia ei löydy"
|
||||
|
||||
#: messages.go:131
|
||||
msgid "Album not found"
|
||||
msgstr "Albumia ei löydy"
|
||||
|
||||
#: messages.go:122
|
||||
#: messages.go:132
|
||||
msgid "Subject not found"
|
||||
msgstr "Aihetta ei löydy"
|
||||
|
||||
#: messages.go:123
|
||||
#: messages.go:133
|
||||
msgid "Person not found"
|
||||
msgstr "Henkilöä ei löydy"
|
||||
|
||||
#: messages.go:124
|
||||
#: messages.go:134
|
||||
msgid "Face not found"
|
||||
msgstr "Kasvoja ei löydy"
|
||||
|
||||
#: messages.go:125
|
||||
#: messages.go:135
|
||||
msgid "Not available in public mode"
|
||||
msgstr "Ei käytettävissä julkisessa tilassa"
|
||||
|
||||
#: messages.go:126
|
||||
#: messages.go:136
|
||||
msgid "Not available in read-only mode"
|
||||
msgstr "Ei käytettävissä vain luku-tilassa"
|
||||
|
||||
#: messages.go:127
|
||||
#: messages.go:137
|
||||
msgid "Please log in to your account"
|
||||
msgstr "Kirjaudu sisään tilillesi"
|
||||
|
||||
#: messages.go:128
|
||||
#: messages.go:138
|
||||
msgid "Permission denied"
|
||||
msgstr "Lupa evätty"
|
||||
|
||||
#: messages.go:129
|
||||
#: messages.go:139
|
||||
msgid "Payment required"
|
||||
msgstr "Vaadittu maksu"
|
||||
|
||||
#: messages.go:130
|
||||
#: messages.go:140
|
||||
msgid "Upload might be offensive"
|
||||
msgstr "Upload saattaa olla loukkaava"
|
||||
|
||||
#: messages.go:131
|
||||
#: messages.go:141
|
||||
msgid "Upload failed"
|
||||
msgstr "Lataus epäonnistui"
|
||||
|
||||
#: messages.go:132
|
||||
#: messages.go:142
|
||||
msgid "No items selected"
|
||||
msgstr "Kohdetta ei ole valittu"
|
||||
|
||||
#: messages.go:133
|
||||
#: messages.go:143
|
||||
msgid "Failed creating file, please check permissions"
|
||||
msgstr "Tiedoston luominen epäonnistui, tarkista käyttöoikeudet"
|
||||
|
||||
#: messages.go:134
|
||||
#: messages.go:144
|
||||
msgid "Failed creating folder, please check permissions"
|
||||
msgstr "Kansion luominen epäonnistui, tarkista käyttöoikeudet"
|
||||
|
||||
#: messages.go:135
|
||||
#: messages.go:145
|
||||
msgid "Could not connect, please try again"
|
||||
msgstr "Yhteyttä ei saatu muodostettua, yritä uudelleen"
|
||||
|
||||
#: messages.go:136
|
||||
#: messages.go:146
|
||||
msgid "Enter verification code"
|
||||
msgstr "syötä vahvistus koodi"
|
||||
|
||||
#: messages.go:137
|
||||
#: messages.go:147
|
||||
msgid "Invalid verification code, please try again"
|
||||
msgstr "Virheellinen vahvistuskoodi, yritä uudelleen"
|
||||
|
||||
#: messages.go:138
|
||||
#: messages.go:148
|
||||
msgid "Invalid password, please try again"
|
||||
msgstr "Väärä salasana, yritä uudelleen"
|
||||
|
||||
#: messages.go:139
|
||||
#: messages.go:149
|
||||
msgid "Feature disabled"
|
||||
msgstr "Ominaisuus poistettu käytöstä"
|
||||
|
||||
#: messages.go:140
|
||||
#: messages.go:150
|
||||
msgid "No labels selected"
|
||||
msgstr "Ei valittuja tarroja"
|
||||
|
||||
#: messages.go:141
|
||||
#: messages.go:151
|
||||
msgid "No albums selected"
|
||||
msgstr "Ei valittuja albumeita"
|
||||
|
||||
#: messages.go:142
|
||||
#: messages.go:152
|
||||
msgid "No files available for download"
|
||||
msgstr "Tiedostoja ei ole ladattavissa"
|
||||
|
||||
#: messages.go:143
|
||||
#: messages.go:153
|
||||
msgid "Failed to create zip file"
|
||||
msgstr "Zip-tiedoston luominen epäonnistui"
|
||||
|
||||
#: messages.go:144
|
||||
#: messages.go:154
|
||||
msgid "Invalid credentials"
|
||||
msgstr "Virheelliset valtakirjat"
|
||||
|
||||
#: messages.go:145
|
||||
#: messages.go:155
|
||||
msgid "Invalid link"
|
||||
msgstr "Virheellinen linkki"
|
||||
|
||||
#: messages.go:146
|
||||
#: messages.go:156
|
||||
msgid "Invalid name"
|
||||
msgstr "Virheellinen nimi"
|
||||
|
||||
#: messages.go:147
|
||||
#: messages.go:157
|
||||
msgid "Busy, please try again later"
|
||||
msgstr "Varattu, yritä myöhemmin uudelleen"
|
||||
|
||||
#: messages.go:148
|
||||
#: messages.go:158
|
||||
#, c-format
|
||||
msgid "The wakeup interval is %s, but must be 1h or less"
|
||||
msgstr "Heräämisväli on %s, mutta sen on oltava enintään 1h"
|
||||
|
||||
#: messages.go:149
|
||||
#: messages.go:159
|
||||
msgid "Your account could not be connected"
|
||||
msgstr "Tiliäsi ei voitu yhdistää"
|
||||
|
||||
#: messages.go:150
|
||||
#: messages.go:160
|
||||
msgid "Too many requests"
|
||||
msgstr "Liian monta pyyntöä"
|
||||
|
||||
#: messages.go:151
|
||||
#: messages.go:161
|
||||
msgid "Insufficient storage"
|
||||
msgstr "Riittämätön varastointi"
|
||||
|
||||
#: messages.go:152
|
||||
#: messages.go:162
|
||||
msgid "Quota exceeded"
|
||||
msgstr "Kiintiö ylitetty"
|
||||
|
||||
#: messages.go:155
|
||||
#: messages.go:163
|
||||
msgid "Registration disabled"
|
||||
msgstr "Rekisteröityminen on poistettu käytöstä"
|
||||
|
||||
#: messages.go:164
|
||||
msgid "Verified email required"
|
||||
msgstr "Vaaditaan vahvistettu sähköpostiosoite"
|
||||
|
||||
#: messages.go:167
|
||||
msgid "Changes successfully saved"
|
||||
msgstr "Muutokset tallennettu onnistuneesti"
|
||||
|
||||
#: messages.go:156
|
||||
#: messages.go:168
|
||||
msgid "Album created"
|
||||
msgstr "Albumi luotu"
|
||||
|
||||
#: messages.go:157
|
||||
#: messages.go:169
|
||||
msgid "Album saved"
|
||||
msgstr "Albumi tallennettu"
|
||||
|
||||
#: messages.go:158
|
||||
#: messages.go:170
|
||||
#, c-format
|
||||
msgid "Album %s deleted"
|
||||
msgstr "Albumi %s poistettu"
|
||||
|
||||
#: messages.go:159
|
||||
#: messages.go:171
|
||||
msgid "Album contents cloned"
|
||||
msgstr "Albumin sisältö kloonattu"
|
||||
|
||||
#: messages.go:160
|
||||
#: messages.go:172
|
||||
msgid "File removed from stack"
|
||||
msgstr "Tiedosto poistettu pinosta"
|
||||
|
||||
#: messages.go:161
|
||||
#: messages.go:173
|
||||
msgid "File deleted"
|
||||
msgstr "Tiedosto poistettu"
|
||||
|
||||
#: messages.go:162
|
||||
#: messages.go:174
|
||||
#, c-format
|
||||
msgid "Selection added to %s"
|
||||
msgstr "Valinta lisätty %s"
|
||||
|
||||
#: messages.go:163
|
||||
#: messages.go:175
|
||||
#, c-format
|
||||
msgid "One entry added to %s"
|
||||
msgstr "Yksi merkintä lisätty kohtaan %s"
|
||||
|
||||
#: messages.go:164
|
||||
#: messages.go:176
|
||||
#, c-format
|
||||
msgid "%d entries added to %s"
|
||||
msgstr "%d merkintöjä lisätty %s"
|
||||
|
||||
#: messages.go:165
|
||||
#: messages.go:177
|
||||
#, c-format
|
||||
msgid "One entry removed from %s"
|
||||
msgstr "Yksi merkintä poistettu kohdasta %s"
|
||||
|
||||
#: messages.go:166
|
||||
#: messages.go:178
|
||||
#, c-format
|
||||
msgid "%d entries removed from %s"
|
||||
msgstr "%d merkinnät poistettu %s"
|
||||
|
||||
#: messages.go:167
|
||||
#: messages.go:179
|
||||
msgid "Account created"
|
||||
msgstr "Tili luotu"
|
||||
|
||||
#: messages.go:168
|
||||
#: messages.go:180
|
||||
msgid "Account saved"
|
||||
msgstr "Tallennettu tili"
|
||||
|
||||
#: messages.go:169
|
||||
#: messages.go:181
|
||||
msgid "Account deleted"
|
||||
msgstr "Tili poistettu"
|
||||
|
||||
#: messages.go:170
|
||||
#: messages.go:182
|
||||
msgid "Settings saved"
|
||||
msgstr "Asetukset tallennettu"
|
||||
|
||||
#: messages.go:171
|
||||
#: messages.go:183
|
||||
msgid "Password changed"
|
||||
msgstr "Salasana vaihdettu"
|
||||
|
||||
#: messages.go:172
|
||||
#: messages.go:184
|
||||
#, c-format
|
||||
msgid "Import completed in %d s"
|
||||
msgstr "Tuonti valmis %d s"
|
||||
|
||||
#: messages.go:173
|
||||
#: messages.go:185
|
||||
msgid "Import canceled"
|
||||
msgstr "Tuonti peruutettu"
|
||||
|
||||
#: messages.go:174
|
||||
#: messages.go:186
|
||||
#, c-format
|
||||
msgid "Indexing completed in %d s"
|
||||
msgstr "Indeksointi valmis %d s"
|
||||
|
||||
#: messages.go:175
|
||||
#: messages.go:187
|
||||
msgid "Indexing originals..."
|
||||
msgstr "Alkuperäiskappaleiden indeksointi..."
|
||||
|
||||
#: messages.go:176
|
||||
#: messages.go:188
|
||||
#, c-format
|
||||
msgid "Indexing files in %s"
|
||||
msgstr "Tiedostojen indeksointi osoitteessa %s"
|
||||
|
||||
#: messages.go:177
|
||||
#: messages.go:189
|
||||
msgid "Indexing canceled"
|
||||
msgstr "Indeksointi peruutettu"
|
||||
|
||||
#: messages.go:178
|
||||
#: messages.go:190
|
||||
#, c-format
|
||||
msgid "Removed %d files and %d photos"
|
||||
msgstr "Poistettiin %d tiedostoa ja %d valokuvaa"
|
||||
|
||||
#: messages.go:179
|
||||
#: messages.go:191
|
||||
#, c-format
|
||||
msgid "Moving files from %s"
|
||||
msgstr "Tiedostojen siirtäminen %s"
|
||||
|
||||
#: messages.go:180
|
||||
#: messages.go:192
|
||||
#, c-format
|
||||
msgid "Copying files from %s"
|
||||
msgstr "Tiedostojen kopiointi %s"
|
||||
|
||||
#: messages.go:181
|
||||
#: messages.go:193
|
||||
msgid "Labels deleted"
|
||||
msgstr "Tunnisteet poistettu"
|
||||
|
||||
#: messages.go:182
|
||||
#: messages.go:194
|
||||
msgid "Label saved"
|
||||
msgstr "Tarra tallennettu"
|
||||
|
||||
#: messages.go:183
|
||||
#: messages.go:195
|
||||
msgid "Subject saved"
|
||||
msgstr "Aihe tallennettu"
|
||||
|
||||
#: messages.go:184
|
||||
#: messages.go:196
|
||||
msgid "Subject deleted"
|
||||
msgstr "Aihe poistettu"
|
||||
|
||||
#: messages.go:185
|
||||
#: messages.go:197
|
||||
msgid "Person saved"
|
||||
msgstr "Tallennettu henkilö"
|
||||
|
||||
#: messages.go:186
|
||||
#: messages.go:198
|
||||
msgid "Person deleted"
|
||||
msgstr "Henkilö poistettu"
|
||||
|
||||
#: messages.go:187
|
||||
#: messages.go:199
|
||||
msgid "File uploaded"
|
||||
msgstr "Ladattu tiedosto"
|
||||
|
||||
#: messages.go:188
|
||||
#: messages.go:200
|
||||
#, c-format
|
||||
msgid "%d files uploaded in %d s"
|
||||
msgstr "%d tiedostoa ladattu %d s aikana"
|
||||
|
||||
#: messages.go:189
|
||||
#: messages.go:201
|
||||
msgid "Processing upload..."
|
||||
msgstr "Käsittelen latausta..."
|
||||
|
||||
#: messages.go:190
|
||||
#: messages.go:202
|
||||
msgid "Upload has been processed"
|
||||
msgstr "Lataus on käsitelty"
|
||||
|
||||
#: messages.go:191
|
||||
#: messages.go:203
|
||||
msgid "Selection approved"
|
||||
msgstr "Valinta hyväksytty"
|
||||
|
||||
#: messages.go:192
|
||||
#: messages.go:204
|
||||
msgid "Selection archived"
|
||||
msgstr "Valinta arkistoitu"
|
||||
|
||||
#: messages.go:193
|
||||
#: messages.go:205
|
||||
msgid "Selection restored"
|
||||
msgstr "Valinta palautettu"
|
||||
|
||||
#: messages.go:194
|
||||
#: messages.go:206
|
||||
msgid "Selection marked as private"
|
||||
msgstr "Valinta merkitty yksityiseksi"
|
||||
|
||||
#: messages.go:195
|
||||
#: messages.go:207
|
||||
msgid "Albums deleted"
|
||||
msgstr "Albumit poistettu"
|
||||
|
||||
#: messages.go:196
|
||||
#: messages.go:208
|
||||
#, c-format
|
||||
msgid "Zip created in %d s"
|
||||
msgstr "Zip luotu %d s"
|
||||
|
||||
#: messages.go:197
|
||||
#: messages.go:209
|
||||
msgid "Permanently deleted"
|
||||
msgstr "Poistettu pysyvästi"
|
||||
|
||||
#: messages.go:198
|
||||
#: messages.go:210
|
||||
#, c-format
|
||||
msgid "%s has been restored"
|
||||
msgstr "%s on palautettu"
|
||||
|
||||
#: messages.go:199
|
||||
#: messages.go:211
|
||||
msgid "Successfully verified"
|
||||
msgstr "Vahvistettu onnistuneesti"
|
||||
|
||||
#: messages.go:200
|
||||
#: messages.go:212
|
||||
msgid "Successfully activated"
|
||||
msgstr "Aktivointi onnistui"
|
||||
|
||||
|
|
|
|||
|
|
@ -2,9 +2,9 @@ msgid ""
|
|||
msgstr ""
|
||||
"Project-Id-Version: \n"
|
||||
"Report-Msgid-Bugs-To: \n"
|
||||
"POT-Creation-Date: 2025-10-17 17:32+0000\n"
|
||||
"PO-Revision-Date: 2025-10-22 08:25+0000\n"
|
||||
"Last-Translator: DeepL <noreply-mt-deepl@weblate.org>\n"
|
||||
"POT-Creation-Date: 2026-06-27 09:13+0000\n"
|
||||
"PO-Revision-Date: 2026-06-28 15:07+0000\n"
|
||||
"Last-Translator: jean-louis67 <jean-louis.frenkel@orange.fr>\n"
|
||||
"Language-Team: French <https://translate.photoprism.app/projects/photoprism/"
|
||||
"backend/fr/>\n"
|
||||
"Language: fr\n"
|
||||
|
|
@ -12,402 +12,422 @@ msgstr ""
|
|||
"Content-Type: text/plain; charset=UTF-8\n"
|
||||
"Content-Transfer-Encoding: 8bit\n"
|
||||
"Plural-Forms: nplurals=2; plural=n > 1;\n"
|
||||
"X-Generator: Weblate 5.13.3\n"
|
||||
"X-Generator: Weblate 2026.5\n"
|
||||
|
||||
#: messages.go:104
|
||||
#: messages.go:112
|
||||
msgid "Something went wrong, try again"
|
||||
msgstr "Quelque chose s'est mal passé, réessayez"
|
||||
|
||||
#: messages.go:105
|
||||
#: messages.go:113
|
||||
msgid "Unable to do that"
|
||||
msgstr "Impossible de faire cela"
|
||||
msgstr "Impossible d'effectuer cela"
|
||||
|
||||
#: messages.go:106
|
||||
#: messages.go:114
|
||||
msgid "Changes could not be saved"
|
||||
msgstr "Les modifications n'ont pas pu être sauvegardées"
|
||||
|
||||
#: messages.go:107
|
||||
#: messages.go:115
|
||||
msgid "Could not be deleted"
|
||||
msgstr "N'a pas pu être supprimé"
|
||||
|
||||
#: messages.go:108
|
||||
#: messages.go:116
|
||||
#, c-format
|
||||
msgid "%s already exists"
|
||||
msgstr "%s existe déjà"
|
||||
|
||||
#: messages.go:109
|
||||
#: messages.go:117
|
||||
msgid "Not found"
|
||||
msgstr "Non trouvé"
|
||||
|
||||
#: messages.go:110
|
||||
#: messages.go:118
|
||||
msgid "File not found"
|
||||
msgstr "Fichier non trouvé"
|
||||
|
||||
#: messages.go:111
|
||||
#: messages.go:119
|
||||
msgid "File too large"
|
||||
msgstr "Fichier trop volumineux"
|
||||
|
||||
#: messages.go:112
|
||||
#: messages.go:120
|
||||
msgid "Unsupported"
|
||||
msgstr "Non pris en charge"
|
||||
|
||||
#: messages.go:113
|
||||
#: messages.go:121
|
||||
msgid "Unsupported type"
|
||||
msgstr "Type non pris en charge"
|
||||
|
||||
#: messages.go:114
|
||||
#: messages.go:122
|
||||
msgid "Unsupported format"
|
||||
msgstr "Format non supporté"
|
||||
|
||||
#: messages.go:115
|
||||
#: messages.go:123
|
||||
msgid "Originals folder is empty"
|
||||
msgstr "Le dossier des originaux est vide"
|
||||
|
||||
#: messages.go:116
|
||||
#: messages.go:124
|
||||
msgid "Selection not found"
|
||||
msgstr "Sélection non trouvée"
|
||||
|
||||
#: messages.go:117
|
||||
#: messages.go:125
|
||||
msgid "Entity not found"
|
||||
msgstr "Entité non trouvée"
|
||||
|
||||
#: messages.go:118
|
||||
#: messages.go:126
|
||||
msgid "Account not found"
|
||||
msgstr "Compte non trouvé"
|
||||
|
||||
#: messages.go:119
|
||||
#: messages.go:127
|
||||
msgid "User not found"
|
||||
msgstr "Utilisateur non trouvé"
|
||||
|
||||
#: messages.go:120
|
||||
#: messages.go:128
|
||||
msgid "Label not found"
|
||||
msgstr "Étiquette non trouvée"
|
||||
|
||||
#: messages.go:121
|
||||
msgid "Album not found"
|
||||
msgstr "Album introuvable"
|
||||
#: messages.go:129
|
||||
msgid "Camera not found"
|
||||
msgstr "Caméra non trouvée"
|
||||
|
||||
#: messages.go:122
|
||||
#: messages.go:130
|
||||
msgid "Lens not found"
|
||||
msgstr "Objectif non trouvé"
|
||||
|
||||
#: messages.go:131
|
||||
msgid "Album not found"
|
||||
msgstr "Album non trouvé"
|
||||
|
||||
#: messages.go:132
|
||||
msgid "Subject not found"
|
||||
msgstr "Sujet non trouvé"
|
||||
|
||||
#: messages.go:123
|
||||
#: messages.go:133
|
||||
msgid "Person not found"
|
||||
msgstr "Personne non trouvée"
|
||||
|
||||
#: messages.go:124
|
||||
#: messages.go:134
|
||||
#, fuzzy
|
||||
msgid "Face not found"
|
||||
msgstr "Visage non trouvé"
|
||||
|
||||
#: messages.go:125
|
||||
#: messages.go:135
|
||||
msgid "Not available in public mode"
|
||||
msgstr "Non disponible en mode public"
|
||||
|
||||
#: messages.go:126
|
||||
#: messages.go:136
|
||||
msgid "Not available in read-only mode"
|
||||
msgstr "Non disponible en mode lecture seule"
|
||||
|
||||
#: messages.go:127
|
||||
#: messages.go:137
|
||||
msgid "Please log in to your account"
|
||||
msgstr "Veuillez vous connecter avec votre compte"
|
||||
msgstr "Veuillez vous connecter à votre compte"
|
||||
|
||||
#: messages.go:128
|
||||
#: messages.go:138
|
||||
msgid "Permission denied"
|
||||
msgstr "Permission refusée"
|
||||
msgstr "Autorisation refusée"
|
||||
|
||||
#: messages.go:129
|
||||
#: messages.go:139
|
||||
msgid "Payment required"
|
||||
msgstr "Paiement requis"
|
||||
|
||||
#: messages.go:130
|
||||
#: messages.go:140
|
||||
msgid "Upload might be offensive"
|
||||
msgstr "Le contenu chargé peut être choquant"
|
||||
msgstr "Le contenu chargé pourrait être de nature offensante"
|
||||
|
||||
#: messages.go:131
|
||||
#: messages.go:141
|
||||
msgid "Upload failed"
|
||||
msgstr "Échec du chargement"
|
||||
|
||||
#: messages.go:132
|
||||
#: messages.go:142
|
||||
msgid "No items selected"
|
||||
msgstr "Aucun élément sélectionné"
|
||||
|
||||
#: messages.go:133
|
||||
#: messages.go:143
|
||||
msgid "Failed creating file, please check permissions"
|
||||
msgstr "La création du fichier a échoué, veuillez vérifier les permissions"
|
||||
|
||||
#: messages.go:134
|
||||
#: messages.go:144
|
||||
msgid "Failed creating folder, please check permissions"
|
||||
msgstr "Échec de la création du dossier, veuillez vérifier les permissions"
|
||||
|
||||
#: messages.go:135
|
||||
#: messages.go:145
|
||||
msgid "Could not connect, please try again"
|
||||
msgstr "Échec lors de la connexion, veuillez réessayer"
|
||||
|
||||
#: messages.go:136
|
||||
#: messages.go:146
|
||||
msgid "Enter verification code"
|
||||
msgstr "Entrer le code de vérification"
|
||||
|
||||
#: messages.go:137
|
||||
#: messages.go:147
|
||||
msgid "Invalid verification code, please try again"
|
||||
msgstr "Code de vérification invalide, veuillez réessayer"
|
||||
msgstr "Code de vérification incorrect, veuillez réessayer"
|
||||
|
||||
#: messages.go:138
|
||||
#: messages.go:148
|
||||
msgid "Invalid password, please try again"
|
||||
msgstr "Mot de passe invalide, veuillez réessayer"
|
||||
msgstr "Mot de passe incorrect, veuillez réessayer"
|
||||
|
||||
#: messages.go:139
|
||||
#: messages.go:149
|
||||
msgid "Feature disabled"
|
||||
msgstr "Fonctionnalité désactivée"
|
||||
|
||||
#: messages.go:140
|
||||
#: messages.go:150
|
||||
msgid "No labels selected"
|
||||
msgstr "Aucune étiquette sélectionnée"
|
||||
|
||||
#: messages.go:141
|
||||
#: messages.go:151
|
||||
msgid "No albums selected"
|
||||
msgstr "Aucun album sélectionné"
|
||||
|
||||
#: messages.go:142
|
||||
#: messages.go:152
|
||||
msgid "No files available for download"
|
||||
msgstr "Aucun fichier disponible au téléchargement"
|
||||
msgstr "Aucun fichier à télécharger"
|
||||
|
||||
#: messages.go:143
|
||||
#: messages.go:153
|
||||
msgid "Failed to create zip file"
|
||||
msgstr "Échec de la création du fichier zip"
|
||||
|
||||
#: messages.go:144
|
||||
#: messages.go:154
|
||||
msgid "Invalid credentials"
|
||||
msgstr "Les informations d'identification sont invalides"
|
||||
msgstr "Les informations d'identification ne sont pas valables"
|
||||
|
||||
#: messages.go:145
|
||||
#: messages.go:155
|
||||
msgid "Invalid link"
|
||||
msgstr "Lien invalide"
|
||||
msgstr "Lien incorrect"
|
||||
|
||||
#: messages.go:146
|
||||
#: messages.go:156
|
||||
msgid "Invalid name"
|
||||
msgstr "Nom invalide"
|
||||
msgstr "Nom incorrect"
|
||||
|
||||
#: messages.go:147
|
||||
#: messages.go:157
|
||||
msgid "Busy, please try again later"
|
||||
msgstr "Occupé, veuillez réessayer plus tard"
|
||||
|
||||
#: messages.go:148
|
||||
#: messages.go:158
|
||||
#, c-format
|
||||
msgid "The wakeup interval is %s, but must be 1h or less"
|
||||
msgstr "L'intervalle de réveil est %s, mais doit être inférieur ou égal à 1h"
|
||||
msgstr ""
|
||||
"L'intervalle entre les tâches est de %s, mais il doit être inférieur ou égal "
|
||||
"à 1 h"
|
||||
|
||||
#: messages.go:149
|
||||
#: messages.go:159
|
||||
msgid "Your account could not be connected"
|
||||
msgstr "Votre compte n'a pas pu être connecté"
|
||||
|
||||
#: messages.go:150
|
||||
#: messages.go:160
|
||||
msgid "Too many requests"
|
||||
msgstr "Trop de demandes"
|
||||
|
||||
#: messages.go:151
|
||||
#: messages.go:161
|
||||
msgid "Insufficient storage"
|
||||
msgstr "Espace de stockage insuffisant"
|
||||
|
||||
#: messages.go:152
|
||||
#: messages.go:162
|
||||
msgid "Quota exceeded"
|
||||
msgstr "Quota dépassé"
|
||||
|
||||
#: messages.go:155
|
||||
#: messages.go:163
|
||||
#, fuzzy
|
||||
msgid "Registration disabled"
|
||||
msgstr "Inscription désactivée"
|
||||
|
||||
#: messages.go:164
|
||||
msgid "Verified email required"
|
||||
msgstr "Adresse de courriel vérifiée requise"
|
||||
|
||||
#: messages.go:167
|
||||
msgid "Changes successfully saved"
|
||||
msgstr "Les modifications ont bien été enregistrées"
|
||||
|
||||
#: messages.go:156
|
||||
#: messages.go:168
|
||||
msgid "Album created"
|
||||
msgstr "Album créé"
|
||||
|
||||
#: messages.go:157
|
||||
#: messages.go:169
|
||||
msgid "Album saved"
|
||||
msgstr "Album sauvegardé"
|
||||
|
||||
#: messages.go:158
|
||||
#: messages.go:170
|
||||
#, c-format
|
||||
msgid "Album %s deleted"
|
||||
msgstr "Album %s supprimé"
|
||||
|
||||
#: messages.go:159
|
||||
#: messages.go:171
|
||||
msgid "Album contents cloned"
|
||||
msgstr "Le contenu de l'album a été copié"
|
||||
|
||||
#: messages.go:160
|
||||
#: messages.go:172
|
||||
msgid "File removed from stack"
|
||||
msgstr "Le fichier a été retiré du groupe"
|
||||
msgstr "Le fichier a été retiré de la pile"
|
||||
|
||||
#: messages.go:161
|
||||
#: messages.go:173
|
||||
msgid "File deleted"
|
||||
msgstr "Fichier supprimé"
|
||||
|
||||
#: messages.go:162
|
||||
#: messages.go:174
|
||||
#, c-format
|
||||
msgid "Selection added to %s"
|
||||
msgstr "Sélection ajoutée à %s"
|
||||
|
||||
#: messages.go:163
|
||||
#: messages.go:175
|
||||
#, c-format
|
||||
msgid "One entry added to %s"
|
||||
msgstr "Une entrée a été ajoutée à %s"
|
||||
|
||||
#: messages.go:164
|
||||
#: messages.go:176
|
||||
#, c-format
|
||||
msgid "%d entries added to %s"
|
||||
msgstr "%d entrées ont été ajoutées à %s"
|
||||
|
||||
#: messages.go:165
|
||||
#: messages.go:177
|
||||
#, c-format
|
||||
msgid "One entry removed from %s"
|
||||
msgstr "Une entrée a été supprimée de %s"
|
||||
msgstr "Une entrée a été supprimée dans %s"
|
||||
|
||||
#: messages.go:166
|
||||
#: messages.go:178
|
||||
#, c-format
|
||||
msgid "%d entries removed from %s"
|
||||
msgstr "%d entrées ont été supprimées de %s"
|
||||
|
||||
#: messages.go:167
|
||||
#: messages.go:179
|
||||
msgid "Account created"
|
||||
msgstr "Compte créé"
|
||||
|
||||
#: messages.go:168
|
||||
#: messages.go:180
|
||||
msgid "Account saved"
|
||||
msgstr "Compte sauvegardé"
|
||||
|
||||
#: messages.go:169
|
||||
#: messages.go:181
|
||||
msgid "Account deleted"
|
||||
msgstr "Compte supprimé"
|
||||
|
||||
#: messages.go:170
|
||||
#: messages.go:182
|
||||
msgid "Settings saved"
|
||||
msgstr "Paramètres sauvegardés"
|
||||
|
||||
#: messages.go:171
|
||||
#: messages.go:183
|
||||
msgid "Password changed"
|
||||
msgstr "Mot de passe modifié"
|
||||
|
||||
#: messages.go:172
|
||||
#: messages.go:184
|
||||
#, c-format
|
||||
msgid "Import completed in %d s"
|
||||
msgstr "Importation terminée en %d s"
|
||||
|
||||
#: messages.go:173
|
||||
#: messages.go:185
|
||||
msgid "Import canceled"
|
||||
msgstr "Importation annulée"
|
||||
|
||||
#: messages.go:174
|
||||
#: messages.go:186
|
||||
#, c-format
|
||||
msgid "Indexing completed in %d s"
|
||||
msgstr "Indexation terminée en %d s"
|
||||
|
||||
#: messages.go:175
|
||||
#: messages.go:187
|
||||
msgid "Indexing originals..."
|
||||
msgstr "Indexage des originaux…"
|
||||
|
||||
#: messages.go:176
|
||||
#: messages.go:188
|
||||
#, c-format
|
||||
msgid "Indexing files in %s"
|
||||
msgstr "Indexation des fichiers de %s"
|
||||
msgstr "Indexation des fichiers en %s"
|
||||
|
||||
#: messages.go:177
|
||||
#: messages.go:189
|
||||
msgid "Indexing canceled"
|
||||
msgstr "Indexation annulée"
|
||||
|
||||
#: messages.go:178
|
||||
#: messages.go:190
|
||||
#, c-format
|
||||
msgid "Removed %d files and %d photos"
|
||||
msgstr "Suppression de %d fichiers et %d photos"
|
||||
|
||||
#: messages.go:179
|
||||
#: messages.go:191
|
||||
#, c-format
|
||||
msgid "Moving files from %s"
|
||||
msgstr "Déplacement de fichiers depuis %s"
|
||||
|
||||
#: messages.go:180
|
||||
#: messages.go:192
|
||||
#, c-format
|
||||
msgid "Copying files from %s"
|
||||
msgstr "Copie de fichiers depuis %s"
|
||||
|
||||
#: messages.go:181
|
||||
#: messages.go:193
|
||||
msgid "Labels deleted"
|
||||
msgstr "Étiquettes supprimées"
|
||||
|
||||
#: messages.go:182
|
||||
#: messages.go:194
|
||||
msgid "Label saved"
|
||||
msgstr "Étiquettes sauvegardées"
|
||||
msgstr "Étiquette sauvegardée"
|
||||
|
||||
#: messages.go:183
|
||||
#: messages.go:195
|
||||
msgid "Subject saved"
|
||||
msgstr "Sujet sauvegardé"
|
||||
|
||||
#: messages.go:184
|
||||
#: messages.go:196
|
||||
msgid "Subject deleted"
|
||||
msgstr "Sujet supprimé"
|
||||
|
||||
#: messages.go:185
|
||||
#: messages.go:197
|
||||
msgid "Person saved"
|
||||
msgstr "Personne sauvegardée"
|
||||
|
||||
#: messages.go:186
|
||||
#: messages.go:198
|
||||
msgid "Person deleted"
|
||||
msgstr "Personne supprimée"
|
||||
|
||||
#: messages.go:187
|
||||
#: messages.go:199
|
||||
msgid "File uploaded"
|
||||
msgstr "Fichier téléchargé"
|
||||
msgstr "Fichier chargé"
|
||||
|
||||
#: messages.go:188
|
||||
#: messages.go:200
|
||||
#, c-format
|
||||
msgid "%d files uploaded in %d s"
|
||||
msgstr "%d fichiers chargés en %d s"
|
||||
|
||||
#: messages.go:189
|
||||
#: messages.go:201
|
||||
msgid "Processing upload..."
|
||||
msgstr "Traitement du téléchargement..."
|
||||
msgstr "Chargement en cours…"
|
||||
|
||||
#: messages.go:190
|
||||
#: messages.go:202
|
||||
msgid "Upload has been processed"
|
||||
msgstr "Le téléchargement a été traité"
|
||||
msgstr "Le chargement a été effectué"
|
||||
|
||||
#: messages.go:191
|
||||
#: messages.go:203
|
||||
msgid "Selection approved"
|
||||
msgstr "Sélection approuvée"
|
||||
|
||||
#: messages.go:192
|
||||
#: messages.go:204
|
||||
msgid "Selection archived"
|
||||
msgstr "Sélection archivée"
|
||||
|
||||
#: messages.go:193
|
||||
#: messages.go:205
|
||||
msgid "Selection restored"
|
||||
msgstr "Sélection restaurée"
|
||||
|
||||
#: messages.go:194
|
||||
#: messages.go:206
|
||||
msgid "Selection marked as private"
|
||||
msgstr "Sélection marquée comme privée"
|
||||
|
||||
#: messages.go:195
|
||||
#: messages.go:207
|
||||
msgid "Albums deleted"
|
||||
msgstr "Albums supprimés"
|
||||
|
||||
#: messages.go:196
|
||||
#: messages.go:208
|
||||
#, c-format
|
||||
msgid "Zip created in %d s"
|
||||
msgstr "Archive zip créée en %d s"
|
||||
|
||||
#: messages.go:197
|
||||
#: messages.go:209
|
||||
msgid "Permanently deleted"
|
||||
msgstr "Supprimé définitivement"
|
||||
|
||||
#: messages.go:198
|
||||
#: messages.go:210
|
||||
#, c-format
|
||||
msgid "%s has been restored"
|
||||
msgstr "%s a été restauré"
|
||||
|
||||
#: messages.go:199
|
||||
#: messages.go:211
|
||||
msgid "Successfully verified"
|
||||
msgstr "Vérifié avec succès"
|
||||
|
||||
#: messages.go:200
|
||||
#: messages.go:212
|
||||
msgid "Successfully activated"
|
||||
msgstr "Activation réussie"
|
||||
|
||||
|
|
|
|||
|
|
@ -7,10 +7,9 @@ msgid ""
|
|||
msgstr ""
|
||||
"Project-Id-Version: PACKAGE VERSION\n"
|
||||
"Report-Msgid-Bugs-To: \n"
|
||||
"POT-Creation-Date: 2025-10-17 17:32+0000\n"
|
||||
"PO-Revision-Date: 2025-10-22 08:25+0000\n"
|
||||
"Last-Translator: Google Cloud Translation Basic <noreply-mt-google-"
|
||||
"translate@weblate.org>\n"
|
||||
"POT-Creation-Date: 2026-06-27 09:13+0000\n"
|
||||
"PO-Revision-Date: 2026-06-27 10:28+0000\n"
|
||||
"Last-Translator: DeepL <noreply-mt-deepl@weblate.org>\n"
|
||||
"Language-Team: none\n"
|
||||
"Language: ga\n"
|
||||
"MIME-Version: 1.0\n"
|
||||
|
|
@ -18,402 +17,418 @@ msgstr ""
|
|||
"Content-Transfer-Encoding: 8bit\n"
|
||||
"Plural-Forms: nplurals=5; plural=n==1 ? 0 : n==2 ? 1 : (n>2 && n<7) ? 2 :"
|
||||
"(n>6 && n<11) ? 3 : 4;\n"
|
||||
"X-Generator: Weblate 5.13.3\n"
|
||||
"X-Generator: Weblate 2026.5\n"
|
||||
|
||||
#: messages.go:104
|
||||
#: messages.go:112
|
||||
msgid "Something went wrong, try again"
|
||||
msgstr "Chuaigh rud éigin mícheart, bain triail eile as"
|
||||
|
||||
#: messages.go:105
|
||||
#: messages.go:113
|
||||
msgid "Unable to do that"
|
||||
msgstr "Ní féidir é sin a dhéanamh"
|
||||
|
||||
#: messages.go:106
|
||||
#: messages.go:114
|
||||
msgid "Changes could not be saved"
|
||||
msgstr "Níorbh fhéidir na hathruithe a shábháil"
|
||||
|
||||
#: messages.go:107
|
||||
#: messages.go:115
|
||||
msgid "Could not be deleted"
|
||||
msgstr "Níorbh fhéidir a scriosadh"
|
||||
|
||||
#: messages.go:108
|
||||
#: messages.go:116
|
||||
#, c-format
|
||||
msgid "%s already exists"
|
||||
msgstr "%s ann cheana"
|
||||
|
||||
#: messages.go:109
|
||||
#: messages.go:117
|
||||
msgid "Not found"
|
||||
msgstr "Ní bhfuarthas"
|
||||
|
||||
#: messages.go:110
|
||||
#: messages.go:118
|
||||
msgid "File not found"
|
||||
msgstr "Comhad gan aimsiú"
|
||||
|
||||
#: messages.go:111
|
||||
#: messages.go:119
|
||||
msgid "File too large"
|
||||
msgstr "Comhad ró-mhór"
|
||||
|
||||
#: messages.go:112
|
||||
#: messages.go:120
|
||||
msgid "Unsupported"
|
||||
msgstr "Gan tacaíocht"
|
||||
|
||||
#: messages.go:113
|
||||
#: messages.go:121
|
||||
msgid "Unsupported type"
|
||||
msgstr "Cineál nach dtacaítear leis"
|
||||
|
||||
#: messages.go:114
|
||||
#: messages.go:122
|
||||
msgid "Unsupported format"
|
||||
msgstr "Formáid nach dtacaítear léi"
|
||||
|
||||
#: messages.go:115
|
||||
#: messages.go:123
|
||||
msgid "Originals folder is empty"
|
||||
msgstr "Tá fillteán bunghnéithe folamh"
|
||||
|
||||
#: messages.go:116
|
||||
#: messages.go:124
|
||||
msgid "Selection not found"
|
||||
msgstr "Níor aimsíodh an rogha"
|
||||
|
||||
#: messages.go:117
|
||||
#: messages.go:125
|
||||
msgid "Entity not found"
|
||||
msgstr "Aonán gan aimsiú"
|
||||
|
||||
#: messages.go:118
|
||||
#: messages.go:126
|
||||
msgid "Account not found"
|
||||
msgstr "Cuntas gan aimsiú"
|
||||
|
||||
#: messages.go:119
|
||||
#: messages.go:127
|
||||
msgid "User not found"
|
||||
msgstr "Úsáideoir gan aimsiú"
|
||||
|
||||
#: messages.go:120
|
||||
#: messages.go:128
|
||||
msgid "Label not found"
|
||||
msgstr "Níor aimsíodh an lipéad"
|
||||
|
||||
#: messages.go:121
|
||||
#: messages.go:129
|
||||
msgid "Camera not found"
|
||||
msgstr "Níor aimsíodh an ceamara"
|
||||
|
||||
#: messages.go:130
|
||||
msgid "Lens not found"
|
||||
msgstr "Níor aimsíodh an lionsa"
|
||||
|
||||
#: messages.go:131
|
||||
msgid "Album not found"
|
||||
msgstr "Albam gan aimsiú"
|
||||
|
||||
#: messages.go:122
|
||||
#: messages.go:132
|
||||
msgid "Subject not found"
|
||||
msgstr "Ní bhfuarthas an t-ábhar"
|
||||
|
||||
#: messages.go:123
|
||||
#: messages.go:133
|
||||
msgid "Person not found"
|
||||
msgstr "Ní bhfuarthas an duine"
|
||||
|
||||
#: messages.go:124
|
||||
#: messages.go:134
|
||||
msgid "Face not found"
|
||||
msgstr "Aghaidh gan aimsiú"
|
||||
|
||||
#: messages.go:125
|
||||
#: messages.go:135
|
||||
msgid "Not available in public mode"
|
||||
msgstr "Níl sé ar fáil i mód poiblí"
|
||||
|
||||
#: messages.go:126
|
||||
#: messages.go:136
|
||||
msgid "Not available in read-only mode"
|
||||
msgstr "Níl sé ar fáil i mód inléite amháin"
|
||||
|
||||
#: messages.go:127
|
||||
#: messages.go:137
|
||||
msgid "Please log in to your account"
|
||||
msgstr "Logáil isteach i do chuntas le do thoil"
|
||||
|
||||
#: messages.go:128
|
||||
#: messages.go:138
|
||||
msgid "Permission denied"
|
||||
msgstr "Cead diúltaithe"
|
||||
|
||||
#: messages.go:129
|
||||
#: messages.go:139
|
||||
msgid "Payment required"
|
||||
msgstr "Íocaíocht ag teastáil"
|
||||
|
||||
#: messages.go:130
|
||||
#: messages.go:140
|
||||
msgid "Upload might be offensive"
|
||||
msgstr "D'fhéadfadh uaslódáil a bheith maslach"
|
||||
|
||||
#: messages.go:131
|
||||
#: messages.go:141
|
||||
msgid "Upload failed"
|
||||
msgstr "Theip ar an uaslódáil"
|
||||
|
||||
#: messages.go:132
|
||||
#: messages.go:142
|
||||
msgid "No items selected"
|
||||
msgstr "Níl aon mhír roghnaithe"
|
||||
|
||||
#: messages.go:133
|
||||
#: messages.go:143
|
||||
msgid "Failed creating file, please check permissions"
|
||||
msgstr "Theip ar chruthú an chomhaid, seiceáil na ceadanna"
|
||||
|
||||
#: messages.go:134
|
||||
#: messages.go:144
|
||||
msgid "Failed creating folder, please check permissions"
|
||||
msgstr "Theip ar chruthú fillteán, seiceáil na ceadanna"
|
||||
|
||||
#: messages.go:135
|
||||
#: messages.go:145
|
||||
msgid "Could not connect, please try again"
|
||||
msgstr "Níorbh fhéidir ceangal a dhéanamh, bain triail eile as"
|
||||
|
||||
#: messages.go:136
|
||||
#: messages.go:146
|
||||
msgid "Enter verification code"
|
||||
msgstr "Cuir isteach cód fíorúcháin"
|
||||
|
||||
#: messages.go:137
|
||||
#: messages.go:147
|
||||
msgid "Invalid verification code, please try again"
|
||||
msgstr "Cód fíoraithe neamhbhailí, bain triail eile as"
|
||||
|
||||
#: messages.go:138
|
||||
#: messages.go:148
|
||||
msgid "Invalid password, please try again"
|
||||
msgstr "Pasfhocal neamhbhailí, bain triail eile as"
|
||||
|
||||
#: messages.go:139
|
||||
#: messages.go:149
|
||||
msgid "Feature disabled"
|
||||
msgstr "Gné díchumasaithe"
|
||||
|
||||
#: messages.go:140
|
||||
#: messages.go:150
|
||||
msgid "No labels selected"
|
||||
msgstr "Níor roghnaíodh aon lipéid"
|
||||
|
||||
#: messages.go:141
|
||||
#: messages.go:151
|
||||
msgid "No albums selected"
|
||||
msgstr "Níor roghnaíodh aon albam"
|
||||
|
||||
#: messages.go:142
|
||||
#: messages.go:152
|
||||
msgid "No files available for download"
|
||||
msgstr "Níl aon chomhaid ar fáil le híoslódáil"
|
||||
|
||||
#: messages.go:143
|
||||
#: messages.go:153
|
||||
msgid "Failed to create zip file"
|
||||
msgstr "Theip ar chruthú an chomhaid zip"
|
||||
|
||||
#: messages.go:144
|
||||
#: messages.go:154
|
||||
msgid "Invalid credentials"
|
||||
msgstr "Dintiúir neamhbhailí"
|
||||
|
||||
#: messages.go:145
|
||||
#: messages.go:155
|
||||
msgid "Invalid link"
|
||||
msgstr "Nasc neamhbhailí"
|
||||
|
||||
#: messages.go:146
|
||||
#: messages.go:156
|
||||
msgid "Invalid name"
|
||||
msgstr "Ainm neamhbhailí"
|
||||
|
||||
#: messages.go:147
|
||||
#: messages.go:157
|
||||
msgid "Busy, please try again later"
|
||||
msgstr "Gnóthach, bain triail eile as ar ball"
|
||||
|
||||
#: messages.go:148
|
||||
#: messages.go:158
|
||||
#, c-format
|
||||
msgid "The wakeup interval is %s, but must be 1h or less"
|
||||
msgstr "Is é %s an t-eatramh múscail, ach caithfidh sé a bheith 1h nó níos lú"
|
||||
|
||||
#: messages.go:149
|
||||
#: messages.go:159
|
||||
msgid "Your account could not be connected"
|
||||
msgstr "Níorbh fhéidir do chuntas a nascadh"
|
||||
|
||||
#: messages.go:150
|
||||
#: messages.go:160
|
||||
msgid "Too many requests"
|
||||
msgstr "An iomarca iarratas"
|
||||
|
||||
#: messages.go:151
|
||||
#: messages.go:161
|
||||
msgid "Insufficient storage"
|
||||
msgstr "Stóráil neamhleor"
|
||||
|
||||
#: messages.go:152
|
||||
#: messages.go:162
|
||||
msgid "Quota exceeded"
|
||||
msgstr "Sáraíodh an cuóta"
|
||||
|
||||
#: messages.go:155
|
||||
#: messages.go:163
|
||||
msgid "Registration disabled"
|
||||
msgstr "Clárú díchumasaithe"
|
||||
|
||||
#: messages.go:164
|
||||
msgid "Verified email required"
|
||||
msgstr "Ríomhphost fíoraithe ag teastáil"
|
||||
|
||||
#: messages.go:167
|
||||
msgid "Changes successfully saved"
|
||||
msgstr "Sábháladh na hathruithe"
|
||||
|
||||
#: messages.go:156
|
||||
#: messages.go:168
|
||||
msgid "Album created"
|
||||
msgstr "Albam cruthaithe"
|
||||
|
||||
#: messages.go:157
|
||||
#: messages.go:169
|
||||
msgid "Album saved"
|
||||
msgstr "Sábháilte albam"
|
||||
|
||||
#: messages.go:158
|
||||
#: messages.go:170
|
||||
#, c-format
|
||||
msgid "Album %s deleted"
|
||||
msgstr "Albam %s scriosta"
|
||||
|
||||
#: messages.go:159
|
||||
#: messages.go:171
|
||||
msgid "Album contents cloned"
|
||||
msgstr "Clónáilte ábhar albam"
|
||||
|
||||
#: messages.go:160
|
||||
#: messages.go:172
|
||||
msgid "File removed from stack"
|
||||
msgstr "Baineadh an comhad den chruach"
|
||||
|
||||
#: messages.go:161
|
||||
#: messages.go:173
|
||||
msgid "File deleted"
|
||||
msgstr "Scriosadh an comhad"
|
||||
|
||||
#: messages.go:162
|
||||
#: messages.go:174
|
||||
#, c-format
|
||||
msgid "Selection added to %s"
|
||||
msgstr "Cuireadh an rogha le %s"
|
||||
|
||||
#: messages.go:163
|
||||
#: messages.go:175
|
||||
#, c-format
|
||||
msgid "One entry added to %s"
|
||||
msgstr "Cuireadh iontráil amháin le %s"
|
||||
|
||||
#: messages.go:164
|
||||
#: messages.go:176
|
||||
#, c-format
|
||||
msgid "%d entries added to %s"
|
||||
msgstr "%d iontráil curtha le %s"
|
||||
|
||||
#: messages.go:165
|
||||
#: messages.go:177
|
||||
#, c-format
|
||||
msgid "One entry removed from %s"
|
||||
msgstr "Baineadh iontráil amháin de %s"
|
||||
|
||||
#: messages.go:166
|
||||
#: messages.go:178
|
||||
#, c-format
|
||||
msgid "%d entries removed from %s"
|
||||
msgstr "%d iontráil bainte de %s"
|
||||
|
||||
#: messages.go:167
|
||||
#: messages.go:179
|
||||
msgid "Account created"
|
||||
msgstr "Cuntas cruthaithe"
|
||||
|
||||
#: messages.go:168
|
||||
#: messages.go:180
|
||||
msgid "Account saved"
|
||||
msgstr "Cuntas sábháilte"
|
||||
|
||||
#: messages.go:169
|
||||
#: messages.go:181
|
||||
msgid "Account deleted"
|
||||
msgstr "Scriosadh an cuntas"
|
||||
|
||||
#: messages.go:170
|
||||
#: messages.go:182
|
||||
msgid "Settings saved"
|
||||
msgstr "Socruithe sábháilte"
|
||||
|
||||
#: messages.go:171
|
||||
#: messages.go:183
|
||||
msgid "Password changed"
|
||||
msgstr "Athraíodh an pasfhocal"
|
||||
|
||||
#: messages.go:172
|
||||
#: messages.go:184
|
||||
#, c-format
|
||||
msgid "Import completed in %d s"
|
||||
msgstr "Iompórtáil críochnaithe i %d s"
|
||||
|
||||
#: messages.go:173
|
||||
#: messages.go:185
|
||||
msgid "Import canceled"
|
||||
msgstr "Cealaíodh an iompórtáil"
|
||||
|
||||
#: messages.go:174
|
||||
#: messages.go:186
|
||||
#, c-format
|
||||
msgid "Indexing completed in %d s"
|
||||
msgstr "Innéacsú curtha i gcrích in %d s"
|
||||
|
||||
#: messages.go:175
|
||||
#: messages.go:187
|
||||
msgid "Indexing originals..."
|
||||
msgstr "Buntéacs á innéacsú..."
|
||||
|
||||
#: messages.go:176
|
||||
#: messages.go:188
|
||||
#, c-format
|
||||
msgid "Indexing files in %s"
|
||||
msgstr "Comhaid á innéacsú in %s"
|
||||
|
||||
#: messages.go:177
|
||||
#: messages.go:189
|
||||
msgid "Indexing canceled"
|
||||
msgstr "Innéacsú cealaithe"
|
||||
|
||||
#: messages.go:178
|
||||
#: messages.go:190
|
||||
#, c-format
|
||||
msgid "Removed %d files and %d photos"
|
||||
msgstr "Baineadh %d comhaid agus %d grianghraif"
|
||||
|
||||
#: messages.go:179
|
||||
#: messages.go:191
|
||||
#, c-format
|
||||
msgid "Moving files from %s"
|
||||
msgstr "Comhaid á mbogadh ó %s"
|
||||
|
||||
#: messages.go:180
|
||||
#: messages.go:192
|
||||
#, c-format
|
||||
msgid "Copying files from %s"
|
||||
msgstr "Comhaid á gcóipeáil ó %s"
|
||||
|
||||
#: messages.go:181
|
||||
#: messages.go:193
|
||||
msgid "Labels deleted"
|
||||
msgstr "Scriosadh na lipéid"
|
||||
|
||||
#: messages.go:182
|
||||
#: messages.go:194
|
||||
msgid "Label saved"
|
||||
msgstr "Lipéad sábháilte"
|
||||
|
||||
#: messages.go:183
|
||||
#: messages.go:195
|
||||
msgid "Subject saved"
|
||||
msgstr "Ábhar sábháilte"
|
||||
|
||||
#: messages.go:184
|
||||
#: messages.go:196
|
||||
msgid "Subject deleted"
|
||||
msgstr "Scriosadh an t-ábhar"
|
||||
|
||||
#: messages.go:185
|
||||
#: messages.go:197
|
||||
msgid "Person saved"
|
||||
msgstr "Sábháladh an duine"
|
||||
|
||||
#: messages.go:186
|
||||
#: messages.go:198
|
||||
msgid "Person deleted"
|
||||
msgstr "Scriosadh an duine"
|
||||
|
||||
#: messages.go:187
|
||||
#: messages.go:199
|
||||
msgid "File uploaded"
|
||||
msgstr "Comhad uaslódáilte"
|
||||
|
||||
#: messages.go:188
|
||||
#: messages.go:200
|
||||
#, c-format
|
||||
msgid "%d files uploaded in %d s"
|
||||
msgstr "%d comhaid uaslódáilte i %d s"
|
||||
|
||||
#: messages.go:189
|
||||
#: messages.go:201
|
||||
msgid "Processing upload..."
|
||||
msgstr "Uaslódáil á phróiseáil..."
|
||||
|
||||
#: messages.go:190
|
||||
#: messages.go:202
|
||||
msgid "Upload has been processed"
|
||||
msgstr "Próiseáladh an t-uaslódáil"
|
||||
|
||||
#: messages.go:191
|
||||
#: messages.go:203
|
||||
msgid "Selection approved"
|
||||
msgstr "Faomhadh an roghnúcháin"
|
||||
|
||||
#: messages.go:192
|
||||
#: messages.go:204
|
||||
msgid "Selection archived"
|
||||
msgstr "Roghnaithe sa chartlann"
|
||||
|
||||
#: messages.go:193
|
||||
#: messages.go:205
|
||||
msgid "Selection restored"
|
||||
msgstr "Athchóiríodh an roghnúchán"
|
||||
|
||||
#: messages.go:194
|
||||
#: messages.go:206
|
||||
msgid "Selection marked as private"
|
||||
msgstr "Roghnú marcáilte mar phríobháideach"
|
||||
|
||||
#: messages.go:195
|
||||
#: messages.go:207
|
||||
msgid "Albums deleted"
|
||||
msgstr "Albaim scriosta"
|
||||
|
||||
#: messages.go:196
|
||||
#: messages.go:208
|
||||
#, c-format
|
||||
msgid "Zip created in %d s"
|
||||
msgstr "Zip cruthaithe i %d s"
|
||||
|
||||
#: messages.go:197
|
||||
#: messages.go:209
|
||||
msgid "Permanently deleted"
|
||||
msgstr "Scriosta go buan"
|
||||
|
||||
#: messages.go:198
|
||||
#: messages.go:210
|
||||
#, c-format
|
||||
msgid "%s has been restored"
|
||||
msgstr "%s athchóirithe"
|
||||
|
||||
#: messages.go:199
|
||||
#: messages.go:211
|
||||
msgid "Successfully verified"
|
||||
msgstr "D'éirigh leis a fhíorú"
|
||||
|
||||
#: messages.go:200
|
||||
#: messages.go:212
|
||||
msgid "Successfully activated"
|
||||
msgstr "Cuireadh i ngníomh go rathúil"
|
||||
|
||||
|
|
|
|||
|
|
@ -2,10 +2,9 @@ msgid ""
|
|||
msgstr ""
|
||||
"Project-Id-Version: \n"
|
||||
"Report-Msgid-Bugs-To: \n"
|
||||
"POT-Creation-Date: 2025-10-17 17:32+0000\n"
|
||||
"PO-Revision-Date: 2025-10-22 08:25+0000\n"
|
||||
"Last-Translator: Google Cloud Translation Basic <noreply-mt-google-"
|
||||
"translate@weblate.org>\n"
|
||||
"POT-Creation-Date: 2026-06-27 09:13+0000\n"
|
||||
"PO-Revision-Date: 2026-06-27 10:28+0000\n"
|
||||
"Last-Translator: DeepL <noreply-mt-deepl@weblate.org>\n"
|
||||
"Language-Team: Hebrew <https://translate.photoprism.app/projects/photoprism/"
|
||||
"backend/he/>\n"
|
||||
"Language: he\n"
|
||||
|
|
@ -14,402 +13,418 @@ msgstr ""
|
|||
"Content-Transfer-Encoding: 8bit\n"
|
||||
"Plural-Forms: nplurals=4; plural=(n == 1) ? 0 : ((n == 2) ? 1 : ((n > 10 && "
|
||||
"n % 10 == 0) ? 2 : 3));\n"
|
||||
"X-Generator: Weblate 5.13.3\n"
|
||||
"X-Generator: Weblate 2026.5\n"
|
||||
|
||||
#: messages.go:104
|
||||
#: messages.go:112
|
||||
msgid "Something went wrong, try again"
|
||||
msgstr "קרתה תקלה נסה שוב"
|
||||
msgstr "משהו השתבש נא לנסות שוב"
|
||||
|
||||
#: messages.go:105
|
||||
#: messages.go:113
|
||||
msgid "Unable to do that"
|
||||
msgstr "לא מסוגל לעשות את זה"
|
||||
msgstr "לא ניתן לבצע זאת"
|
||||
|
||||
#: messages.go:106
|
||||
#: messages.go:114
|
||||
msgid "Changes could not be saved"
|
||||
msgstr "לא ניתן לשמור שינויים"
|
||||
|
||||
#: messages.go:107
|
||||
#: messages.go:115
|
||||
msgid "Could not be deleted"
|
||||
msgstr "לא ניתן למחיקה"
|
||||
|
||||
#: messages.go:108
|
||||
#: messages.go:116
|
||||
#, c-format
|
||||
msgid "%s already exists"
|
||||
msgstr "%s כבר קיים"
|
||||
|
||||
#: messages.go:109
|
||||
#: messages.go:117
|
||||
msgid "Not found"
|
||||
msgstr "לא נמצא"
|
||||
|
||||
#: messages.go:110
|
||||
#: messages.go:118
|
||||
msgid "File not found"
|
||||
msgstr "הקובץ לא נמצא"
|
||||
msgstr "קובץ לא נמצא"
|
||||
|
||||
#: messages.go:111
|
||||
#: messages.go:119
|
||||
msgid "File too large"
|
||||
msgstr "קובץ גדול מדי"
|
||||
|
||||
#: messages.go:112
|
||||
#: messages.go:120
|
||||
msgid "Unsupported"
|
||||
msgstr "אינו נתמך"
|
||||
msgstr "לא נתמך"
|
||||
|
||||
#: messages.go:113
|
||||
#: messages.go:121
|
||||
msgid "Unsupported type"
|
||||
msgstr "סוג לא נתמך"
|
||||
|
||||
#: messages.go:114
|
||||
#: messages.go:122
|
||||
msgid "Unsupported format"
|
||||
msgstr "פורמט לא נתמך"
|
||||
msgstr "תסדיר לא נתמך"
|
||||
|
||||
#: messages.go:115
|
||||
#: messages.go:123
|
||||
msgid "Originals folder is empty"
|
||||
msgstr "תיקיית המקור ריקה"
|
||||
msgstr "תיקיית מקור ריקה"
|
||||
|
||||
#: messages.go:116
|
||||
#: messages.go:124
|
||||
msgid "Selection not found"
|
||||
msgstr "הבחירה לא נמצאה"
|
||||
|
||||
#: messages.go:117
|
||||
#: messages.go:125
|
||||
msgid "Entity not found"
|
||||
msgstr "הישות לא נמצאה"
|
||||
|
||||
#: messages.go:118
|
||||
#: messages.go:126
|
||||
msgid "Account not found"
|
||||
msgstr "החשבון לא נמצא"
|
||||
|
||||
#: messages.go:119
|
||||
#: messages.go:127
|
||||
msgid "User not found"
|
||||
msgstr "המשתמש לא נמצא"
|
||||
|
||||
#: messages.go:120
|
||||
#: messages.go:128
|
||||
msgid "Label not found"
|
||||
msgstr "התווית לא נמצאה"
|
||||
|
||||
#: messages.go:121
|
||||
#: messages.go:129
|
||||
msgid "Camera not found"
|
||||
msgstr "לא נמצאה מצלמה"
|
||||
|
||||
#: messages.go:130
|
||||
msgid "Lens not found"
|
||||
msgstr "לא נמצא עדשה"
|
||||
|
||||
#: messages.go:131
|
||||
msgid "Album not found"
|
||||
msgstr "האלבום לא נמצא"
|
||||
|
||||
#: messages.go:122
|
||||
#: messages.go:132
|
||||
msgid "Subject not found"
|
||||
msgstr "הנושא לא נמצא"
|
||||
|
||||
#: messages.go:123
|
||||
#: messages.go:133
|
||||
msgid "Person not found"
|
||||
msgstr "אדם לא נמצא"
|
||||
|
||||
#: messages.go:124
|
||||
#: messages.go:134
|
||||
msgid "Face not found"
|
||||
msgstr "הפנים לא נמצאו"
|
||||
|
||||
#: messages.go:125
|
||||
#: messages.go:135
|
||||
msgid "Not available in public mode"
|
||||
msgstr "לא זמין במצב ציבורי"
|
||||
|
||||
#: messages.go:126
|
||||
#: messages.go:136
|
||||
msgid "Not available in read-only mode"
|
||||
msgstr "לא זמין במצב קריאה בלבד"
|
||||
|
||||
#: messages.go:127
|
||||
#: messages.go:137
|
||||
msgid "Please log in to your account"
|
||||
msgstr "אנא היכנס לחשבון שלך"
|
||||
|
||||
#: messages.go:128
|
||||
#: messages.go:138
|
||||
msgid "Permission denied"
|
||||
msgstr "גישה נדחתה"
|
||||
|
||||
#: messages.go:129
|
||||
#: messages.go:139
|
||||
msgid "Payment required"
|
||||
msgstr "נדרש תשלום"
|
||||
|
||||
#: messages.go:130
|
||||
#: messages.go:140
|
||||
msgid "Upload might be offensive"
|
||||
msgstr "ההעלאה עשויה להיות פוגענית"
|
||||
|
||||
#: messages.go:131
|
||||
#: messages.go:141
|
||||
msgid "Upload failed"
|
||||
msgstr "העלאה נכשלה"
|
||||
msgstr "העלאה כשלה"
|
||||
|
||||
#: messages.go:132
|
||||
#: messages.go:142
|
||||
msgid "No items selected"
|
||||
msgstr "לא נבחרו פריטים"
|
||||
|
||||
#: messages.go:133
|
||||
#: messages.go:143
|
||||
msgid "Failed creating file, please check permissions"
|
||||
msgstr "יצירת הקובץ נכשלה, אנא בדוק את ההרשאות"
|
||||
|
||||
#: messages.go:134
|
||||
#: messages.go:144
|
||||
msgid "Failed creating folder, please check permissions"
|
||||
msgstr "יצירת התיקיה נכשלה, אנא בדוק את ההרשאות"
|
||||
|
||||
#: messages.go:135
|
||||
#: messages.go:145
|
||||
msgid "Could not connect, please try again"
|
||||
msgstr "לא ניתן היה להתחבר, נסה שוב"
|
||||
|
||||
#: messages.go:136
|
||||
#: messages.go:146
|
||||
msgid "Enter verification code"
|
||||
msgstr "הכנס קוד אימות"
|
||||
|
||||
#: messages.go:137
|
||||
#: messages.go:147
|
||||
msgid "Invalid verification code, please try again"
|
||||
msgstr "קוד אימות לא חוקי, אנא נסה שוב"
|
||||
|
||||
#: messages.go:138
|
||||
#: messages.go:148
|
||||
msgid "Invalid password, please try again"
|
||||
msgstr "סיסמה לא תקינה, נסה שוב"
|
||||
|
||||
#: messages.go:139
|
||||
#: messages.go:149
|
||||
msgid "Feature disabled"
|
||||
msgstr "התכונה מושבתת"
|
||||
|
||||
#: messages.go:140
|
||||
#: messages.go:150
|
||||
msgid "No labels selected"
|
||||
msgstr "לא נבחרו תוויות"
|
||||
|
||||
#: messages.go:141
|
||||
#: messages.go:151
|
||||
msgid "No albums selected"
|
||||
msgstr "לא נבחרו אלבומים"
|
||||
|
||||
#: messages.go:142
|
||||
#: messages.go:152
|
||||
msgid "No files available for download"
|
||||
msgstr "אין קבצים זמינים להורדה"
|
||||
|
||||
#: messages.go:143
|
||||
#: messages.go:153
|
||||
msgid "Failed to create zip file"
|
||||
msgstr "יצירת קובץ ה-zip נכשלה"
|
||||
|
||||
#: messages.go:144
|
||||
#: messages.go:154
|
||||
msgid "Invalid credentials"
|
||||
msgstr "אישורים לא תקינים"
|
||||
|
||||
#: messages.go:145
|
||||
#: messages.go:155
|
||||
msgid "Invalid link"
|
||||
msgstr "קישור לא תקין"
|
||||
|
||||
#: messages.go:146
|
||||
#: messages.go:156
|
||||
msgid "Invalid name"
|
||||
msgstr "מספר לא תקף"
|
||||
|
||||
#: messages.go:147
|
||||
#: messages.go:157
|
||||
msgid "Busy, please try again later"
|
||||
msgstr "עסוק, אנא נסה שוב מאוחר יותר"
|
||||
|
||||
#: messages.go:148
|
||||
#: messages.go:158
|
||||
#, c-format
|
||||
msgid "The wakeup interval is %s, but must be 1h or less"
|
||||
msgstr "מרווח ההשכמה הוא %s, אך חייב להיות שעה אחת או פחות"
|
||||
|
||||
#: messages.go:149
|
||||
#: messages.go:159
|
||||
msgid "Your account could not be connected"
|
||||
msgstr "לא ניתן היה לחבר את החשבון שלך"
|
||||
|
||||
#: messages.go:150
|
||||
#: messages.go:160
|
||||
msgid "Too many requests"
|
||||
msgstr "יותר מדי בקשות"
|
||||
|
||||
#: messages.go:151
|
||||
#: messages.go:161
|
||||
msgid "Insufficient storage"
|
||||
msgstr "אחסון לא מספיק"
|
||||
|
||||
#: messages.go:152
|
||||
#: messages.go:162
|
||||
msgid "Quota exceeded"
|
||||
msgstr "חריגה מהמכסה"
|
||||
|
||||
#: messages.go:155
|
||||
#: messages.go:163
|
||||
msgid "Registration disabled"
|
||||
msgstr "ההרשמה אינה פעילה"
|
||||
|
||||
#: messages.go:164
|
||||
msgid "Verified email required"
|
||||
msgstr "נדרש כתובת דוא\"ל מאומתת"
|
||||
|
||||
#: messages.go:167
|
||||
msgid "Changes successfully saved"
|
||||
msgstr "השינויים נשמרו בהצלחה"
|
||||
|
||||
#: messages.go:156
|
||||
#: messages.go:168
|
||||
msgid "Album created"
|
||||
msgstr "האלבום נוצר"
|
||||
msgstr "אלבום נוצר"
|
||||
|
||||
#: messages.go:157
|
||||
#: messages.go:169
|
||||
msgid "Album saved"
|
||||
msgstr "האלבום נשמר"
|
||||
|
||||
#: messages.go:158
|
||||
#: messages.go:170
|
||||
#, c-format
|
||||
msgid "Album %s deleted"
|
||||
msgstr "האלבום %s נמחק"
|
||||
|
||||
#: messages.go:159
|
||||
#: messages.go:171
|
||||
msgid "Album contents cloned"
|
||||
msgstr "תוכן האלבום שוכפל"
|
||||
|
||||
#: messages.go:160
|
||||
#: messages.go:172
|
||||
msgid "File removed from stack"
|
||||
msgstr "הקובץ הוסר מהאיחוד"
|
||||
|
||||
#: messages.go:161
|
||||
#: messages.go:173
|
||||
msgid "File deleted"
|
||||
msgstr "הקובץ נמחק"
|
||||
|
||||
#: messages.go:162
|
||||
#: messages.go:174
|
||||
#, c-format
|
||||
msgid "Selection added to %s"
|
||||
msgstr "הבחירה נוספה ל-%s"
|
||||
|
||||
#: messages.go:163
|
||||
#: messages.go:175
|
||||
#, c-format
|
||||
msgid "One entry added to %s"
|
||||
msgstr "רשומה אחת נוספה ל-%s"
|
||||
|
||||
#: messages.go:164
|
||||
#: messages.go:176
|
||||
#, c-format
|
||||
msgid "%d entries added to %s"
|
||||
msgstr "%d רשומות נוספו ל-%s"
|
||||
|
||||
#: messages.go:165
|
||||
#: messages.go:177
|
||||
#, c-format
|
||||
msgid "One entry removed from %s"
|
||||
msgstr "רשומה אחת הוסרה מ-%s"
|
||||
|
||||
#: messages.go:166
|
||||
#: messages.go:178
|
||||
#, c-format
|
||||
msgid "%d entries removed from %s"
|
||||
msgstr "%d רשומות הוסרו מ-%s"
|
||||
|
||||
#: messages.go:167
|
||||
#: messages.go:179
|
||||
msgid "Account created"
|
||||
msgstr "החשבון נוצר"
|
||||
msgstr "חשבון נוצר"
|
||||
|
||||
#: messages.go:168
|
||||
#: messages.go:180
|
||||
msgid "Account saved"
|
||||
msgstr "החשבון נשמר"
|
||||
|
||||
#: messages.go:169
|
||||
#: messages.go:181
|
||||
msgid "Account deleted"
|
||||
msgstr "החשבון נמחק"
|
||||
msgstr "חשבון נמחק"
|
||||
|
||||
#: messages.go:170
|
||||
#: messages.go:182
|
||||
msgid "Settings saved"
|
||||
msgstr "ההגדרות נשמרו"
|
||||
|
||||
#: messages.go:171
|
||||
#: messages.go:183
|
||||
msgid "Password changed"
|
||||
msgstr "סיסמא שונתה"
|
||||
|
||||
#: messages.go:172
|
||||
#: messages.go:184
|
||||
#, c-format
|
||||
msgid "Import completed in %d s"
|
||||
msgstr "הייבוא הושלם ב-%d שניות"
|
||||
|
||||
#: messages.go:173
|
||||
#: messages.go:185
|
||||
msgid "Import canceled"
|
||||
msgstr "הייבוא בוטל"
|
||||
|
||||
#: messages.go:174
|
||||
#: messages.go:186
|
||||
#, c-format
|
||||
msgid "Indexing completed in %d s"
|
||||
msgstr "האינדוקס הושלם ב-%d שניות"
|
||||
|
||||
#: messages.go:175
|
||||
#: messages.go:187
|
||||
msgid "Indexing originals..."
|
||||
msgstr "מאנדקס קבצי מקור..."
|
||||
|
||||
#: messages.go:176
|
||||
#: messages.go:188
|
||||
#, c-format
|
||||
msgid "Indexing files in %s"
|
||||
msgstr "מאנדקס קבצים תוך %s"
|
||||
|
||||
#: messages.go:177
|
||||
#: messages.go:189
|
||||
msgid "Indexing canceled"
|
||||
msgstr "יצירת האינדקס בוטלה"
|
||||
|
||||
#: messages.go:178
|
||||
#: messages.go:190
|
||||
#, c-format
|
||||
msgid "Removed %d files and %d photos"
|
||||
msgstr "הוסרו %d קבצים ו-%d תמונות"
|
||||
|
||||
#: messages.go:179
|
||||
#: messages.go:191
|
||||
#, c-format
|
||||
msgid "Moving files from %s"
|
||||
msgstr "מעביר קבצים מ-%s"
|
||||
|
||||
#: messages.go:180
|
||||
#: messages.go:192
|
||||
#, c-format
|
||||
msgid "Copying files from %s"
|
||||
msgstr "מעתיק קבצים מ-%s"
|
||||
|
||||
#: messages.go:181
|
||||
#: messages.go:193
|
||||
msgid "Labels deleted"
|
||||
msgstr "תוויות נמחקו"
|
||||
|
||||
#: messages.go:182
|
||||
#: messages.go:194
|
||||
msgid "Label saved"
|
||||
msgstr "התווית נשמרה"
|
||||
|
||||
#: messages.go:183
|
||||
#: messages.go:195
|
||||
msgid "Subject saved"
|
||||
msgstr "הנושא נשמר"
|
||||
|
||||
#: messages.go:184
|
||||
#: messages.go:196
|
||||
msgid "Subject deleted"
|
||||
msgstr "הנושא נמחק"
|
||||
|
||||
#: messages.go:185
|
||||
#: messages.go:197
|
||||
msgid "Person saved"
|
||||
msgstr "אדם נשמר"
|
||||
|
||||
#: messages.go:186
|
||||
#: messages.go:198
|
||||
msgid "Person deleted"
|
||||
msgstr "אדם נמחק"
|
||||
|
||||
#: messages.go:187
|
||||
#: messages.go:199
|
||||
msgid "File uploaded"
|
||||
msgstr "הקובץ הועלה"
|
||||
|
||||
#: messages.go:188
|
||||
#: messages.go:200
|
||||
#, c-format
|
||||
msgid "%d files uploaded in %d s"
|
||||
msgstr "%d קבצים הועלו תוך %d שניות"
|
||||
|
||||
#: messages.go:189
|
||||
#: messages.go:201
|
||||
msgid "Processing upload..."
|
||||
msgstr "מעבד העלאה..."
|
||||
|
||||
#: messages.go:190
|
||||
#: messages.go:202
|
||||
msgid "Upload has been processed"
|
||||
msgstr "ההעלאה עובדה"
|
||||
|
||||
#: messages.go:191
|
||||
#: messages.go:203
|
||||
msgid "Selection approved"
|
||||
msgstr "הבחירה אושרה"
|
||||
|
||||
#: messages.go:192
|
||||
#: messages.go:204
|
||||
msgid "Selection archived"
|
||||
msgstr "הבחירה הועברה לארכיון"
|
||||
|
||||
#: messages.go:193
|
||||
#: messages.go:205
|
||||
msgid "Selection restored"
|
||||
msgstr "הבחירה שוחזרה"
|
||||
|
||||
#: messages.go:194
|
||||
#: messages.go:206
|
||||
msgid "Selection marked as private"
|
||||
msgstr "הבחירה סומנה כפרטית"
|
||||
|
||||
#: messages.go:195
|
||||
#: messages.go:207
|
||||
msgid "Albums deleted"
|
||||
msgstr "אלבומים נמחקו"
|
||||
|
||||
#: messages.go:196
|
||||
#: messages.go:208
|
||||
#, c-format
|
||||
msgid "Zip created in %d s"
|
||||
msgstr "ה-ZIP נוצר תוך %d שניות"
|
||||
msgstr "קובץ Zip נוצר תוך %d שניות"
|
||||
|
||||
#: messages.go:197
|
||||
#: messages.go:209
|
||||
msgid "Permanently deleted"
|
||||
msgstr "נמחק לצמיתות"
|
||||
|
||||
#: messages.go:198
|
||||
#: messages.go:210
|
||||
#, c-format
|
||||
msgid "%s has been restored"
|
||||
msgstr "%s שוחזר"
|
||||
|
||||
#: messages.go:199
|
||||
#: messages.go:211
|
||||
msgid "Successfully verified"
|
||||
msgstr "אומת בהצלחה"
|
||||
|
||||
#: messages.go:200
|
||||
#: messages.go:212
|
||||
msgid "Successfully activated"
|
||||
msgstr "הופעל בהצלחה"
|
||||
|
||||
|
|
|
|||
|
|
@ -2,8 +2,8 @@ msgid ""
|
|||
msgstr ""
|
||||
"Project-Id-Version: \n"
|
||||
"Report-Msgid-Bugs-To: \n"
|
||||
"POT-Creation-Date: 2025-10-17 17:32+0000\n"
|
||||
"PO-Revision-Date: 2025-10-22 08:25+0000\n"
|
||||
"POT-Creation-Date: 2026-06-27 09:13+0000\n"
|
||||
"PO-Revision-Date: 2026-06-27 10:28+0000\n"
|
||||
"Last-Translator: Google Cloud Translation Basic <noreply-mt-google-"
|
||||
"translate@weblate.org>\n"
|
||||
"Language-Team: Hindi <https://translate.photoprism.app/projects/photoprism/"
|
||||
|
|
@ -13,402 +13,418 @@ msgstr ""
|
|||
"Content-Type: text/plain; charset=UTF-8\n"
|
||||
"Content-Transfer-Encoding: 8bit\n"
|
||||
"Plural-Forms: nplurals=2; plural=(n==0 || n==1);\n"
|
||||
"X-Generator: Weblate 5.13.3\n"
|
||||
"X-Generator: Weblate 2026.5\n"
|
||||
|
||||
#: messages.go:104
|
||||
#: messages.go:112
|
||||
msgid "Something went wrong, try again"
|
||||
msgstr "कुछ गलत हुआ है, दोबारा कोशिश करें"
|
||||
|
||||
#: messages.go:105
|
||||
#: messages.go:113
|
||||
msgid "Unable to do that"
|
||||
msgstr "ऐसा करने में असमर्थ"
|
||||
|
||||
#: messages.go:106
|
||||
#: messages.go:114
|
||||
msgid "Changes could not be saved"
|
||||
msgstr "परिवर्तन सहेजा नहीं जा सका"
|
||||
|
||||
#: messages.go:107
|
||||
#: messages.go:115
|
||||
msgid "Could not be deleted"
|
||||
msgstr "हटाया नहीं जा सका"
|
||||
|
||||
#: messages.go:108
|
||||
#: messages.go:116
|
||||
#, c-format
|
||||
msgid "%s already exists"
|
||||
msgstr "%s पहले से मौजूद है"
|
||||
|
||||
#: messages.go:109
|
||||
#: messages.go:117
|
||||
msgid "Not found"
|
||||
msgstr "नहीं मिला"
|
||||
|
||||
#: messages.go:110
|
||||
#: messages.go:118
|
||||
msgid "File not found"
|
||||
msgstr "फाइल नहीं मिली"
|
||||
|
||||
#: messages.go:111
|
||||
#: messages.go:119
|
||||
msgid "File too large"
|
||||
msgstr "बहुत बड़ी फाइल"
|
||||
|
||||
#: messages.go:112
|
||||
#: messages.go:120
|
||||
msgid "Unsupported"
|
||||
msgstr "असमर्थित"
|
||||
|
||||
#: messages.go:113
|
||||
#: messages.go:121
|
||||
msgid "Unsupported type"
|
||||
msgstr "असमर्थित प्रकार"
|
||||
|
||||
#: messages.go:114
|
||||
#: messages.go:122
|
||||
msgid "Unsupported format"
|
||||
msgstr "असमर्थित प्रारूप"
|
||||
|
||||
#: messages.go:115
|
||||
#: messages.go:123
|
||||
msgid "Originals folder is empty"
|
||||
msgstr "मूल फ़ोल्डर खाली है"
|
||||
|
||||
#: messages.go:116
|
||||
#: messages.go:124
|
||||
msgid "Selection not found"
|
||||
msgstr "चयन नहीं मिला"
|
||||
|
||||
#: messages.go:117
|
||||
#: messages.go:125
|
||||
msgid "Entity not found"
|
||||
msgstr "इकाई नहीं मिली"
|
||||
|
||||
#: messages.go:118
|
||||
#: messages.go:126
|
||||
msgid "Account not found"
|
||||
msgstr "खता नहीं मिला"
|
||||
|
||||
#: messages.go:119
|
||||
#: messages.go:127
|
||||
msgid "User not found"
|
||||
msgstr "उपयोगकर्ता नहीं मिला"
|
||||
|
||||
#: messages.go:120
|
||||
#: messages.go:128
|
||||
msgid "Label not found"
|
||||
msgstr "लेबल नहीं मिला"
|
||||
|
||||
#: messages.go:121
|
||||
#: messages.go:129
|
||||
msgid "Camera not found"
|
||||
msgstr "कैमरा नहीं मिला"
|
||||
|
||||
#: messages.go:130
|
||||
msgid "Lens not found"
|
||||
msgstr "लेंस नहीं मिला"
|
||||
|
||||
#: messages.go:131
|
||||
msgid "Album not found"
|
||||
msgstr "एल्बम नहीं मिला"
|
||||
|
||||
#: messages.go:122
|
||||
#: messages.go:132
|
||||
msgid "Subject not found"
|
||||
msgstr "विषय नहीं मिला"
|
||||
|
||||
#: messages.go:123
|
||||
#: messages.go:133
|
||||
msgid "Person not found"
|
||||
msgstr "व्यक्ति नहीं मिला"
|
||||
|
||||
#: messages.go:124
|
||||
#: messages.go:134
|
||||
msgid "Face not found"
|
||||
msgstr "चेहरा नहीं मिला"
|
||||
|
||||
#: messages.go:125
|
||||
#: messages.go:135
|
||||
msgid "Not available in public mode"
|
||||
msgstr "सार्वजनिक मोड में उपलब्ध नहीं है"
|
||||
|
||||
#: messages.go:126
|
||||
#: messages.go:136
|
||||
msgid "Not available in read-only mode"
|
||||
msgstr "रीड ओनली मोड में उपलब्ध नहीं है"
|
||||
|
||||
#: messages.go:127
|
||||
#: messages.go:137
|
||||
msgid "Please log in to your account"
|
||||
msgstr "कृपया अपने खाते लॉग इन करें"
|
||||
|
||||
#: messages.go:128
|
||||
#: messages.go:138
|
||||
msgid "Permission denied"
|
||||
msgstr "अनुमति नहीं मिली"
|
||||
|
||||
#: messages.go:129
|
||||
#: messages.go:139
|
||||
msgid "Payment required"
|
||||
msgstr "भुगतान आवश्यक"
|
||||
|
||||
#: messages.go:130
|
||||
#: messages.go:140
|
||||
msgid "Upload might be offensive"
|
||||
msgstr "अपलोड आपत्तिजनक हो सकता है"
|
||||
|
||||
#: messages.go:131
|
||||
#: messages.go:141
|
||||
msgid "Upload failed"
|
||||
msgstr "अपलोड विफल"
|
||||
|
||||
#: messages.go:132
|
||||
#: messages.go:142
|
||||
msgid "No items selected"
|
||||
msgstr "कोई आइटम नहीं चुना गया"
|
||||
|
||||
#: messages.go:133
|
||||
#: messages.go:143
|
||||
msgid "Failed creating file, please check permissions"
|
||||
msgstr "फ़ाइल बनाने में विफल, कृपया अनुमतियों की जाँच करें"
|
||||
|
||||
#: messages.go:134
|
||||
#: messages.go:144
|
||||
msgid "Failed creating folder, please check permissions"
|
||||
msgstr "फ़ोल्डर बनाने में विफल, कृपया अनुमतियों की जाँच करें"
|
||||
|
||||
#: messages.go:135
|
||||
#: messages.go:145
|
||||
msgid "Could not connect, please try again"
|
||||
msgstr "कनेक्ट नहीं हो सका, कृपया पुनः प्रयास करें"
|
||||
|
||||
#: messages.go:136
|
||||
#: messages.go:146
|
||||
msgid "Enter verification code"
|
||||
msgstr "सत्यापन कोड दर्ज करें"
|
||||
|
||||
#: messages.go:137
|
||||
#: messages.go:147
|
||||
msgid "Invalid verification code, please try again"
|
||||
msgstr "सत्यापन कोड अमान्य है, कृपया पुनः प्रयास करें"
|
||||
|
||||
#: messages.go:138
|
||||
#: messages.go:148
|
||||
msgid "Invalid password, please try again"
|
||||
msgstr "अमान्य पासवर्ड, कृपया पुनः प्रयास करें"
|
||||
|
||||
#: messages.go:139
|
||||
#: messages.go:149
|
||||
msgid "Feature disabled"
|
||||
msgstr "सुविधा अक्षम है"
|
||||
|
||||
#: messages.go:140
|
||||
#: messages.go:150
|
||||
msgid "No labels selected"
|
||||
msgstr "कोई लेबल नहीं चुना गया"
|
||||
|
||||
#: messages.go:141
|
||||
#: messages.go:151
|
||||
msgid "No albums selected"
|
||||
msgstr "कोई एल्बम नहीं चुना गया"
|
||||
|
||||
#: messages.go:142
|
||||
#: messages.go:152
|
||||
msgid "No files available for download"
|
||||
msgstr "डाउनलोड के लिए कोई फाइल उपलब्ध नहीं है"
|
||||
|
||||
#: messages.go:143
|
||||
#: messages.go:153
|
||||
msgid "Failed to create zip file"
|
||||
msgstr "ज़िप फ़ाइल बनाने में विफल"
|
||||
|
||||
#: messages.go:144
|
||||
#: messages.go:154
|
||||
msgid "Invalid credentials"
|
||||
msgstr "अवैध प्रत्यय पत्र"
|
||||
|
||||
#: messages.go:145
|
||||
#: messages.go:155
|
||||
msgid "Invalid link"
|
||||
msgstr "अमान्य लिंक"
|
||||
|
||||
#: messages.go:146
|
||||
#: messages.go:156
|
||||
msgid "Invalid name"
|
||||
msgstr "अमान्य नाम"
|
||||
|
||||
#: messages.go:147
|
||||
#: messages.go:157
|
||||
msgid "Busy, please try again later"
|
||||
msgstr "व्यस्त, कृपया बाद में पुन: प्रयास करें"
|
||||
|
||||
#: messages.go:148
|
||||
#: messages.go:158
|
||||
#, c-format
|
||||
msgid "The wakeup interval is %s, but must be 1h or less"
|
||||
msgstr "वेकअप अंतराल %s है, लेकिन 1h या उससे कम होना चाहिए"
|
||||
|
||||
#: messages.go:149
|
||||
#: messages.go:159
|
||||
msgid "Your account could not be connected"
|
||||
msgstr "आपका खाता कनेक्ट नहीं किया जा सका"
|
||||
|
||||
#: messages.go:150
|
||||
#: messages.go:160
|
||||
msgid "Too many requests"
|
||||
msgstr "बहुत अधिक अनुरोध"
|
||||
|
||||
#: messages.go:151
|
||||
#: messages.go:161
|
||||
msgid "Insufficient storage"
|
||||
msgstr "अपर्याप्त भंडारण"
|
||||
|
||||
#: messages.go:152
|
||||
#: messages.go:162
|
||||
msgid "Quota exceeded"
|
||||
msgstr "कोटा पूरा हो गया"
|
||||
|
||||
#: messages.go:155
|
||||
#: messages.go:163
|
||||
msgid "Registration disabled"
|
||||
msgstr "पंजीकरण अक्षम"
|
||||
|
||||
#: messages.go:164
|
||||
msgid "Verified email required"
|
||||
msgstr "ईमेल सत्यापन आवश्यक है"
|
||||
|
||||
#: messages.go:167
|
||||
msgid "Changes successfully saved"
|
||||
msgstr "परिवर्तन सफलतापूर्वक सहेजे गए"
|
||||
|
||||
#: messages.go:156
|
||||
#: messages.go:168
|
||||
msgid "Album created"
|
||||
msgstr "एल्बम बनाया गया"
|
||||
|
||||
#: messages.go:157
|
||||
#: messages.go:169
|
||||
msgid "Album saved"
|
||||
msgstr "एल्बम सहेजा गया"
|
||||
|
||||
#: messages.go:158
|
||||
#: messages.go:170
|
||||
#, c-format
|
||||
msgid "Album %s deleted"
|
||||
msgstr "एल्बम %s हटाया गया"
|
||||
|
||||
#: messages.go:159
|
||||
#: messages.go:171
|
||||
msgid "Album contents cloned"
|
||||
msgstr "एल्बम सामग्री को क्लोन किया गया"
|
||||
|
||||
#: messages.go:160
|
||||
#: messages.go:172
|
||||
msgid "File removed from stack"
|
||||
msgstr "स्टैक से फ़ाइल को निकाला गया"
|
||||
|
||||
#: messages.go:161
|
||||
#: messages.go:173
|
||||
msgid "File deleted"
|
||||
msgstr "फ़ाइल हटा दी गई"
|
||||
|
||||
#: messages.go:162
|
||||
#: messages.go:174
|
||||
#, c-format
|
||||
msgid "Selection added to %s"
|
||||
msgstr "चयन %s में जोड़ा गया"
|
||||
|
||||
#: messages.go:163
|
||||
#: messages.go:175
|
||||
#, c-format
|
||||
msgid "One entry added to %s"
|
||||
msgstr "एक प्रविष्टि %s में जोड़ी गई"
|
||||
|
||||
#: messages.go:164
|
||||
#: messages.go:176
|
||||
#, c-format
|
||||
msgid "%d entries added to %s"
|
||||
msgstr "%d प्रविष्टियों को %s में जोड़ा गया"
|
||||
|
||||
#: messages.go:165
|
||||
#: messages.go:177
|
||||
#, c-format
|
||||
msgid "One entry removed from %s"
|
||||
msgstr "%s से एक प्रविष्टि को हटाया गया"
|
||||
|
||||
#: messages.go:166
|
||||
#: messages.go:178
|
||||
#, c-format
|
||||
msgid "%d entries removed from %s"
|
||||
msgstr "%d प्रविष्टियों को %s से हटा दिया गया"
|
||||
|
||||
#: messages.go:167
|
||||
#: messages.go:179
|
||||
msgid "Account created"
|
||||
msgstr "खाता बन गया"
|
||||
|
||||
#: messages.go:168
|
||||
#: messages.go:180
|
||||
msgid "Account saved"
|
||||
msgstr "खाता सहेजा गया"
|
||||
|
||||
#: messages.go:169
|
||||
#: messages.go:181
|
||||
msgid "Account deleted"
|
||||
msgstr "खाता हटाया गया"
|
||||
|
||||
#: messages.go:170
|
||||
#: messages.go:182
|
||||
msgid "Settings saved"
|
||||
msgstr "सेटिंग्स को सहेजा गया"
|
||||
|
||||
#: messages.go:171
|
||||
#: messages.go:183
|
||||
msgid "Password changed"
|
||||
msgstr "पासवर्ड बदला गया"
|
||||
|
||||
#: messages.go:172
|
||||
#: messages.go:184
|
||||
#, c-format
|
||||
msgid "Import completed in %d s"
|
||||
msgstr "%d s में आयात पूरा हुआ"
|
||||
|
||||
#: messages.go:173
|
||||
#: messages.go:185
|
||||
msgid "Import canceled"
|
||||
msgstr "आयात रद्द कर दिया गया"
|
||||
|
||||
#: messages.go:174
|
||||
#: messages.go:186
|
||||
#, c-format
|
||||
msgid "Indexing completed in %d s"
|
||||
msgstr "%d s में अनुक्रमण पूरा हुआ"
|
||||
|
||||
#: messages.go:175
|
||||
#: messages.go:187
|
||||
msgid "Indexing originals..."
|
||||
msgstr "अनुक्रमण मूल ..."
|
||||
|
||||
#: messages.go:176
|
||||
#: messages.go:188
|
||||
#, c-format
|
||||
msgid "Indexing files in %s"
|
||||
msgstr "%s में फाइलों को अनुक्रमित करना"
|
||||
|
||||
#: messages.go:177
|
||||
#: messages.go:189
|
||||
msgid "Indexing canceled"
|
||||
msgstr "अनुक्रमण रद्द किया गया"
|
||||
|
||||
#: messages.go:178
|
||||
#: messages.go:190
|
||||
#, c-format
|
||||
msgid "Removed %d files and %d photos"
|
||||
msgstr "%d फ़ाइलों और %d फ़ोटो को हटा दिया गया"
|
||||
|
||||
#: messages.go:179
|
||||
#: messages.go:191
|
||||
#, c-format
|
||||
msgid "Moving files from %s"
|
||||
msgstr "%s से फाइल चल रही है"
|
||||
|
||||
#: messages.go:180
|
||||
#: messages.go:192
|
||||
#, c-format
|
||||
msgid "Copying files from %s"
|
||||
msgstr "%s से फाइल कॉपी कर रहा है"
|
||||
|
||||
#: messages.go:181
|
||||
#: messages.go:193
|
||||
msgid "Labels deleted"
|
||||
msgstr "लेबल हटा दिए गए"
|
||||
|
||||
#: messages.go:182
|
||||
#: messages.go:194
|
||||
msgid "Label saved"
|
||||
msgstr "लेबल सहेजा गया"
|
||||
|
||||
#: messages.go:183
|
||||
#: messages.go:195
|
||||
msgid "Subject saved"
|
||||
msgstr "विषय सहेजा गया"
|
||||
|
||||
#: messages.go:184
|
||||
#: messages.go:196
|
||||
msgid "Subject deleted"
|
||||
msgstr "विषय हटा दिया गया"
|
||||
|
||||
#: messages.go:185
|
||||
#: messages.go:197
|
||||
msgid "Person saved"
|
||||
msgstr "व्यक्ति बचाया"
|
||||
|
||||
#: messages.go:186
|
||||
#: messages.go:198
|
||||
msgid "Person deleted"
|
||||
msgstr "व्यक्ति हटाया गया"
|
||||
|
||||
#: messages.go:187
|
||||
#: messages.go:199
|
||||
msgid "File uploaded"
|
||||
msgstr "फ़ाइल अपलोड की गई"
|
||||
|
||||
#: messages.go:188
|
||||
#: messages.go:200
|
||||
#, c-format
|
||||
msgid "%d files uploaded in %d s"
|
||||
msgstr "%d फाइलों को %d में अपलोड किया गया"
|
||||
|
||||
#: messages.go:189
|
||||
#: messages.go:201
|
||||
msgid "Processing upload..."
|
||||
msgstr "अपलोड संसाधित किया जा रहा है..."
|
||||
|
||||
#: messages.go:190
|
||||
#: messages.go:202
|
||||
msgid "Upload has been processed"
|
||||
msgstr "अपलोड संसाधित हो गया है"
|
||||
|
||||
#: messages.go:191
|
||||
#: messages.go:203
|
||||
msgid "Selection approved"
|
||||
msgstr "चयन को संग्रहीत किया गया"
|
||||
|
||||
#: messages.go:192
|
||||
#: messages.go:204
|
||||
msgid "Selection archived"
|
||||
msgstr "चयन को संग्रहीत किया गया"
|
||||
|
||||
#: messages.go:193
|
||||
#: messages.go:205
|
||||
msgid "Selection restored"
|
||||
msgstr "चयन बहाल"
|
||||
|
||||
#: messages.go:194
|
||||
#: messages.go:206
|
||||
msgid "Selection marked as private"
|
||||
msgstr "चयन निजी के रूप में चिह्नित"
|
||||
|
||||
#: messages.go:195
|
||||
#: messages.go:207
|
||||
msgid "Albums deleted"
|
||||
msgstr "एल्बम हटाए गए"
|
||||
|
||||
#: messages.go:196
|
||||
#: messages.go:208
|
||||
#, c-format
|
||||
msgid "Zip created in %d s"
|
||||
msgstr "%d s में बनाया गया ज़िप"
|
||||
|
||||
#: messages.go:197
|
||||
#: messages.go:209
|
||||
msgid "Permanently deleted"
|
||||
msgstr "स्थायी रूप से हटा दिया गया"
|
||||
|
||||
#: messages.go:198
|
||||
#: messages.go:210
|
||||
#, c-format
|
||||
msgid "%s has been restored"
|
||||
msgstr "%s बहाल कर दिया गया है"
|
||||
|
||||
#: messages.go:199
|
||||
#: messages.go:211
|
||||
msgid "Successfully verified"
|
||||
msgstr "सफलतापूर्वक सत्यापित"
|
||||
|
||||
#: messages.go:200
|
||||
#: messages.go:212
|
||||
msgid "Successfully activated"
|
||||
msgstr "सफलतापूर्वक सक्रिय किया गया"
|
||||
|
||||
|
|
|
|||
|
|
@ -2,8 +2,8 @@ msgid ""
|
|||
msgstr ""
|
||||
"Project-Id-Version: PACKAGE VERSION\n"
|
||||
"Report-Msgid-Bugs-To: \n"
|
||||
"POT-Creation-Date: 2025-10-17 17:32+0000\n"
|
||||
"PO-Revision-Date: 2025-10-22 08:25+0000\n"
|
||||
"POT-Creation-Date: 2026-06-27 09:13+0000\n"
|
||||
"PO-Revision-Date: 2026-06-27 10:28+0000\n"
|
||||
"Last-Translator: Google Cloud Translation Basic <noreply-mt-google-"
|
||||
"translate@weblate.org>\n"
|
||||
"Language-Team: none\n"
|
||||
|
|
@ -13,402 +13,418 @@ msgstr ""
|
|||
"Content-Transfer-Encoding: 8bit\n"
|
||||
"Plural-Forms: nplurals=3; plural=n%10==1 && n%100!=11 ? 0 : n%10>=2 && "
|
||||
"n%10<=4 && (n%100<10 || n%100>=20) ? 1 : 2;\n"
|
||||
"X-Generator: Weblate 5.13.3\n"
|
||||
"X-Generator: Weblate 2026.5\n"
|
||||
|
||||
#: messages.go:104
|
||||
#: messages.go:112
|
||||
msgid "Something went wrong, try again"
|
||||
msgstr "Nešto nije u redu, pokušajte ponovno"
|
||||
|
||||
#: messages.go:105
|
||||
#: messages.go:113
|
||||
msgid "Unable to do that"
|
||||
msgstr "Nesposoban to učiniti"
|
||||
|
||||
#: messages.go:106
|
||||
#: messages.go:114
|
||||
msgid "Changes could not be saved"
|
||||
msgstr "Promjene se nisu mogle spremiti"
|
||||
|
||||
#: messages.go:107
|
||||
#: messages.go:115
|
||||
msgid "Could not be deleted"
|
||||
msgstr "Nije moguće izbrisati"
|
||||
|
||||
#: messages.go:108
|
||||
#: messages.go:116
|
||||
#, c-format
|
||||
msgid "%s already exists"
|
||||
msgstr "%s već postoji"
|
||||
|
||||
#: messages.go:109
|
||||
#: messages.go:117
|
||||
msgid "Not found"
|
||||
msgstr "Nije pronađeno"
|
||||
|
||||
#: messages.go:110
|
||||
#: messages.go:118
|
||||
msgid "File not found"
|
||||
msgstr "Datoteka nije pronađena"
|
||||
|
||||
#: messages.go:111
|
||||
#: messages.go:119
|
||||
msgid "File too large"
|
||||
msgstr "Datoteka je prevelika"
|
||||
|
||||
#: messages.go:112
|
||||
#: messages.go:120
|
||||
msgid "Unsupported"
|
||||
msgstr "Nepodržano"
|
||||
|
||||
#: messages.go:113
|
||||
#: messages.go:121
|
||||
msgid "Unsupported type"
|
||||
msgstr "Nepodržana vrsta"
|
||||
|
||||
#: messages.go:114
|
||||
#: messages.go:122
|
||||
msgid "Unsupported format"
|
||||
msgstr "Nepodržani format"
|
||||
|
||||
#: messages.go:115
|
||||
#: messages.go:123
|
||||
msgid "Originals folder is empty"
|
||||
msgstr "Originalna mapa je prazna"
|
||||
|
||||
#: messages.go:116
|
||||
#: messages.go:124
|
||||
msgid "Selection not found"
|
||||
msgstr "Odabir nije pronađen"
|
||||
|
||||
#: messages.go:117
|
||||
#: messages.go:125
|
||||
msgid "Entity not found"
|
||||
msgstr "Entitet nije pronađen"
|
||||
|
||||
#: messages.go:118
|
||||
#: messages.go:126
|
||||
msgid "Account not found"
|
||||
msgstr "račun nije pronađen"
|
||||
|
||||
#: messages.go:119
|
||||
#: messages.go:127
|
||||
msgid "User not found"
|
||||
msgstr "Korisnik nije pronađen"
|
||||
|
||||
#: messages.go:120
|
||||
#: messages.go:128
|
||||
msgid "Label not found"
|
||||
msgstr "Oznaka nije pronađena"
|
||||
|
||||
#: messages.go:121
|
||||
#: messages.go:129
|
||||
msgid "Camera not found"
|
||||
msgstr "Kamera nije pronađena"
|
||||
|
||||
#: messages.go:130
|
||||
msgid "Lens not found"
|
||||
msgstr "Leća nije pronađena"
|
||||
|
||||
#: messages.go:131
|
||||
msgid "Album not found"
|
||||
msgstr "Album nije pronađen"
|
||||
|
||||
#: messages.go:122
|
||||
#: messages.go:132
|
||||
msgid "Subject not found"
|
||||
msgstr "Predmet nije pronađen"
|
||||
|
||||
#: messages.go:123
|
||||
#: messages.go:133
|
||||
msgid "Person not found"
|
||||
msgstr "Osoba nije pronađena"
|
||||
|
||||
#: messages.go:124
|
||||
#: messages.go:134
|
||||
msgid "Face not found"
|
||||
msgstr "Lice nije pronađeno"
|
||||
|
||||
#: messages.go:125
|
||||
#: messages.go:135
|
||||
msgid "Not available in public mode"
|
||||
msgstr "Nije dostupno u javnom načinu"
|
||||
|
||||
#: messages.go:126
|
||||
#: messages.go:136
|
||||
msgid "Not available in read-only mode"
|
||||
msgstr "nije dostupno u načinu samo za čitanje"
|
||||
|
||||
#: messages.go:127
|
||||
#: messages.go:137
|
||||
msgid "Please log in to your account"
|
||||
msgstr "Molimo prijavite se i pokušajte ponovno"
|
||||
|
||||
#: messages.go:128
|
||||
#: messages.go:138
|
||||
msgid "Permission denied"
|
||||
msgstr "Osoba je izbrisana"
|
||||
|
||||
#: messages.go:129
|
||||
#: messages.go:139
|
||||
msgid "Payment required"
|
||||
msgstr "Potrebno je plaćanje"
|
||||
|
||||
#: messages.go:130
|
||||
#: messages.go:140
|
||||
msgid "Upload might be offensive"
|
||||
msgstr "Prijenos bi mogao biti uvredljiv"
|
||||
|
||||
#: messages.go:131
|
||||
#: messages.go:141
|
||||
msgid "Upload failed"
|
||||
msgstr "Prijenos nije uspio"
|
||||
|
||||
#: messages.go:132
|
||||
#: messages.go:142
|
||||
msgid "No items selected"
|
||||
msgstr "Nema odabranih stavki"
|
||||
|
||||
#: messages.go:133
|
||||
#: messages.go:143
|
||||
msgid "Failed creating file, please check permissions"
|
||||
msgstr "Izrada datoteke nije uspjela, provjerite dopuštenja"
|
||||
|
||||
#: messages.go:134
|
||||
#: messages.go:144
|
||||
msgid "Failed creating folder, please check permissions"
|
||||
msgstr "Izrada mape nije uspjela, provjerite dopuštenja"
|
||||
|
||||
#: messages.go:135
|
||||
#: messages.go:145
|
||||
msgid "Could not connect, please try again"
|
||||
msgstr "Povezivanje nije uspjelo, pokušajte ponovno"
|
||||
|
||||
#: messages.go:136
|
||||
#: messages.go:146
|
||||
msgid "Enter verification code"
|
||||
msgstr "Unesite kontrolni kod"
|
||||
|
||||
#: messages.go:137
|
||||
#: messages.go:147
|
||||
msgid "Invalid verification code, please try again"
|
||||
msgstr "Nevažeći kontrolni kod, pokušajte ponovno"
|
||||
|
||||
#: messages.go:138
|
||||
#: messages.go:148
|
||||
msgid "Invalid password, please try again"
|
||||
msgstr "Nevažeća lozinka, pokušajte ponovo"
|
||||
|
||||
#: messages.go:139
|
||||
#: messages.go:149
|
||||
msgid "Feature disabled"
|
||||
msgstr "Značajka je onemogućena"
|
||||
|
||||
#: messages.go:140
|
||||
#: messages.go:150
|
||||
msgid "No labels selected"
|
||||
msgstr "Nije odabrana nijedna oznaka"
|
||||
|
||||
#: messages.go:141
|
||||
#: messages.go:151
|
||||
msgid "No albums selected"
|
||||
msgstr "Nije odabran nijedan album"
|
||||
|
||||
#: messages.go:142
|
||||
#: messages.go:152
|
||||
msgid "No files available for download"
|
||||
msgstr "Nema dostupnih datoteka za preuzimanje"
|
||||
|
||||
#: messages.go:143
|
||||
#: messages.go:153
|
||||
msgid "Failed to create zip file"
|
||||
msgstr "Izrada zip datoteke nije uspjela"
|
||||
|
||||
#: messages.go:144
|
||||
#: messages.go:154
|
||||
msgid "Invalid credentials"
|
||||
msgstr "Nevažeće vjerodajnice"
|
||||
|
||||
#: messages.go:145
|
||||
#: messages.go:155
|
||||
msgid "Invalid link"
|
||||
msgstr "Nevažeća veza"
|
||||
|
||||
#: messages.go:146
|
||||
#: messages.go:156
|
||||
msgid "Invalid name"
|
||||
msgstr "Nevažeći naziv"
|
||||
|
||||
#: messages.go:147
|
||||
#: messages.go:157
|
||||
msgid "Busy, please try again later"
|
||||
msgstr "Zauzeto, pokušajte ponovo kasnije"
|
||||
|
||||
#: messages.go:148
|
||||
#: messages.go:158
|
||||
#, c-format
|
||||
msgid "The wakeup interval is %s, but must be 1h or less"
|
||||
msgstr "Interval buđenja je %s, ali mora biti 1 sat ili manje"
|
||||
|
||||
#: messages.go:149
|
||||
#: messages.go:159
|
||||
msgid "Your account could not be connected"
|
||||
msgstr "Vaš račun nije bilo moguće povezati"
|
||||
|
||||
#: messages.go:150
|
||||
#: messages.go:160
|
||||
msgid "Too many requests"
|
||||
msgstr "Previše zahtjeva"
|
||||
|
||||
#: messages.go:151
|
||||
#: messages.go:161
|
||||
msgid "Insufficient storage"
|
||||
msgstr "Nedovoljno prostora za pohranu"
|
||||
|
||||
#: messages.go:152
|
||||
#: messages.go:162
|
||||
msgid "Quota exceeded"
|
||||
msgstr "Kvota premašena"
|
||||
|
||||
#: messages.go:155
|
||||
#: messages.go:163
|
||||
msgid "Registration disabled"
|
||||
msgstr "Registracija onemogućena"
|
||||
|
||||
#: messages.go:164
|
||||
msgid "Verified email required"
|
||||
msgstr "Potrebna je potvrđena e-pošta"
|
||||
|
||||
#: messages.go:167
|
||||
msgid "Changes successfully saved"
|
||||
msgstr "Promjene su uspješno spremljene"
|
||||
|
||||
#: messages.go:156
|
||||
#: messages.go:168
|
||||
msgid "Album created"
|
||||
msgstr "Album stvoren"
|
||||
|
||||
#: messages.go:157
|
||||
#: messages.go:169
|
||||
msgid "Album saved"
|
||||
msgstr "Album je spremljen"
|
||||
|
||||
#: messages.go:158
|
||||
#: messages.go:170
|
||||
#, c-format
|
||||
msgid "Album %s deleted"
|
||||
msgstr "Album %s je izbrisan"
|
||||
|
||||
#: messages.go:159
|
||||
#: messages.go:171
|
||||
msgid "Album contents cloned"
|
||||
msgstr "Sadržaj albuma je kloniran"
|
||||
|
||||
#: messages.go:160
|
||||
#: messages.go:172
|
||||
msgid "File removed from stack"
|
||||
msgstr "Datoteka je uklonjena iz hrpe"
|
||||
|
||||
#: messages.go:161
|
||||
#: messages.go:173
|
||||
msgid "File deleted"
|
||||
msgstr "Datoteka je izbrisana"
|
||||
|
||||
#: messages.go:162
|
||||
#: messages.go:174
|
||||
#, c-format
|
||||
msgid "Selection added to %s"
|
||||
msgstr "Odabir je dodan u %s"
|
||||
|
||||
#: messages.go:163
|
||||
#: messages.go:175
|
||||
#, c-format
|
||||
msgid "One entry added to %s"
|
||||
msgstr "Jedan unos dodan u %s"
|
||||
|
||||
#: messages.go:164
|
||||
#: messages.go:176
|
||||
#, c-format
|
||||
msgid "%d entries added to %s"
|
||||
msgstr "%d unosi dodani u %s"
|
||||
|
||||
#: messages.go:165
|
||||
#: messages.go:177
|
||||
#, c-format
|
||||
msgid "One entry removed from %s"
|
||||
msgstr "Jedan unos uklonjen iz %s"
|
||||
|
||||
#: messages.go:166
|
||||
#: messages.go:178
|
||||
#, c-format
|
||||
msgid "%d entries removed from %s"
|
||||
msgstr "%d unosi uklonjeni iz %s"
|
||||
|
||||
#: messages.go:167
|
||||
#: messages.go:179
|
||||
msgid "Account created"
|
||||
msgstr "Račun kreiran"
|
||||
|
||||
#: messages.go:168
|
||||
#: messages.go:180
|
||||
msgid "Account saved"
|
||||
msgstr "Račun spremljen"
|
||||
|
||||
#: messages.go:169
|
||||
#: messages.go:181
|
||||
msgid "Account deleted"
|
||||
msgstr "Račun je izbrisan"
|
||||
|
||||
#: messages.go:170
|
||||
#: messages.go:182
|
||||
msgid "Settings saved"
|
||||
msgstr "Postavke spremljene"
|
||||
|
||||
#: messages.go:171
|
||||
#: messages.go:183
|
||||
msgid "Password changed"
|
||||
msgstr "Lozinka je promijenjena"
|
||||
|
||||
#: messages.go:172
|
||||
#: messages.go:184
|
||||
#, c-format
|
||||
msgid "Import completed in %d s"
|
||||
msgstr "Uvoz dovršen za %d s"
|
||||
|
||||
#: messages.go:173
|
||||
#: messages.go:185
|
||||
msgid "Import canceled"
|
||||
msgstr "Uvoz je otkazan"
|
||||
|
||||
#: messages.go:174
|
||||
#: messages.go:186
|
||||
#, c-format
|
||||
msgid "Indexing completed in %d s"
|
||||
msgstr "Indeksiranje dovršeno za %d s"
|
||||
|
||||
#: messages.go:175
|
||||
#: messages.go:187
|
||||
msgid "Indexing originals..."
|
||||
msgstr "Indeksiranje originala..."
|
||||
|
||||
#: messages.go:176
|
||||
#: messages.go:188
|
||||
#, c-format
|
||||
msgid "Indexing files in %s"
|
||||
msgstr "Indeksiranje datoteka u %s"
|
||||
|
||||
#: messages.go:177
|
||||
#: messages.go:189
|
||||
msgid "Indexing canceled"
|
||||
msgstr "Indeksiranje je otkazano"
|
||||
|
||||
#: messages.go:178
|
||||
#: messages.go:190
|
||||
#, c-format
|
||||
msgid "Removed %d files and %d photos"
|
||||
msgstr "Uklonjene %d datoteke i %d fotografije"
|
||||
|
||||
#: messages.go:179
|
||||
#: messages.go:191
|
||||
#, c-format
|
||||
msgid "Moving files from %s"
|
||||
msgstr "Premještanje datoteka iz %s"
|
||||
|
||||
#: messages.go:180
|
||||
#: messages.go:192
|
||||
#, c-format
|
||||
msgid "Copying files from %s"
|
||||
msgstr "Kopiranje datoteka s %s"
|
||||
|
||||
#: messages.go:181
|
||||
#: messages.go:193
|
||||
msgid "Labels deleted"
|
||||
msgstr "Oznake su izbrisane"
|
||||
|
||||
#: messages.go:182
|
||||
#: messages.go:194
|
||||
msgid "Label saved"
|
||||
msgstr "Oznaka je spremljena"
|
||||
|
||||
#: messages.go:183
|
||||
#: messages.go:195
|
||||
msgid "Subject saved"
|
||||
msgstr "Predmet je spremljen"
|
||||
|
||||
#: messages.go:184
|
||||
#: messages.go:196
|
||||
msgid "Subject deleted"
|
||||
msgstr "Predmet je izbrisan"
|
||||
|
||||
#: messages.go:185
|
||||
#: messages.go:197
|
||||
msgid "Person saved"
|
||||
msgstr "Osoba je spremljena"
|
||||
|
||||
#: messages.go:186
|
||||
#: messages.go:198
|
||||
msgid "Person deleted"
|
||||
msgstr "Osoba je izbrisana"
|
||||
|
||||
#: messages.go:187
|
||||
#: messages.go:199
|
||||
msgid "File uploaded"
|
||||
msgstr "Datoteka je izbrisana"
|
||||
|
||||
#: messages.go:188
|
||||
#: messages.go:200
|
||||
#, c-format
|
||||
msgid "%d files uploaded in %d s"
|
||||
msgstr "%d datoteke prenesene u %d s"
|
||||
|
||||
#: messages.go:189
|
||||
#: messages.go:201
|
||||
msgid "Processing upload..."
|
||||
msgstr "Obrada prijenosa..."
|
||||
|
||||
#: messages.go:190
|
||||
#: messages.go:202
|
||||
msgid "Upload has been processed"
|
||||
msgstr "Prijenos bi mogao biti uvredljiv"
|
||||
|
||||
#: messages.go:191
|
||||
#: messages.go:203
|
||||
msgid "Selection approved"
|
||||
msgstr "Odabir odobren"
|
||||
|
||||
#: messages.go:192
|
||||
#: messages.go:204
|
||||
msgid "Selection archived"
|
||||
msgstr "Odabir je arhiviran"
|
||||
|
||||
#: messages.go:193
|
||||
#: messages.go:205
|
||||
msgid "Selection restored"
|
||||
msgstr "Odabir je vraćen"
|
||||
|
||||
#: messages.go:194
|
||||
#: messages.go:206
|
||||
msgid "Selection marked as private"
|
||||
msgstr "Odabir je označen kao privatan"
|
||||
|
||||
#: messages.go:195
|
||||
#: messages.go:207
|
||||
msgid "Albums deleted"
|
||||
msgstr "Albumi su izbrisani"
|
||||
|
||||
#: messages.go:196
|
||||
#: messages.go:208
|
||||
#, c-format
|
||||
msgid "Zip created in %d s"
|
||||
msgstr "Zip stvoren u %d s"
|
||||
|
||||
#: messages.go:197
|
||||
#: messages.go:209
|
||||
msgid "Permanently deleted"
|
||||
msgstr "Trajno izbrisano"
|
||||
|
||||
#: messages.go:198
|
||||
#: messages.go:210
|
||||
#, c-format
|
||||
msgid "%s has been restored"
|
||||
msgstr "Odabir je vraćen"
|
||||
msgstr "%s je vraćen"
|
||||
|
||||
#: messages.go:199
|
||||
#: messages.go:211
|
||||
msgid "Successfully verified"
|
||||
msgstr "Uspješno potvrđeno"
|
||||
|
||||
#: messages.go:200
|
||||
#: messages.go:212
|
||||
msgid "Successfully activated"
|
||||
msgstr "Uspješno aktiviran"
|
||||
|
||||
|
|
|
|||
|
|
@ -2,9 +2,10 @@ msgid ""
|
|||
msgstr ""
|
||||
"Project-Id-Version: \n"
|
||||
"Report-Msgid-Bugs-To: \n"
|
||||
"POT-Creation-Date: 2025-10-17 17:32+0000\n"
|
||||
"PO-Revision-Date: 2025-10-22 08:25+0000\n"
|
||||
"Last-Translator: DeepL <noreply-mt-deepl@weblate.org>\n"
|
||||
"POT-Creation-Date: 2026-06-27 09:13+0000\n"
|
||||
"PO-Revision-Date: 2026-06-27 10:28+0000\n"
|
||||
"Last-Translator: Google Cloud Translation Basic <noreply-mt-google-"
|
||||
"translate@weblate.org>\n"
|
||||
"Language-Team: Hungarian <https://translate.photoprism.app/projects/"
|
||||
"photoprism/backend/hu/>\n"
|
||||
"Language: hu\n"
|
||||
|
|
@ -12,402 +13,418 @@ msgstr ""
|
|||
"Content-Type: text/plain; charset=UTF-8\n"
|
||||
"Content-Transfer-Encoding: 8bit\n"
|
||||
"Plural-Forms: nplurals=2; plural=n != 1;\n"
|
||||
"X-Generator: Weblate 5.13.3\n"
|
||||
"X-Generator: Weblate 2026.5\n"
|
||||
|
||||
#: messages.go:104
|
||||
#: messages.go:112
|
||||
msgid "Something went wrong, try again"
|
||||
msgstr "Valami rosszul ment, próbálja újra"
|
||||
|
||||
#: messages.go:105
|
||||
#: messages.go:113
|
||||
msgid "Unable to do that"
|
||||
msgstr "Erre képtelen"
|
||||
|
||||
#: messages.go:106
|
||||
#: messages.go:114
|
||||
msgid "Changes could not be saved"
|
||||
msgstr "Módosításokat nem sikerült menteni"
|
||||
|
||||
#: messages.go:107
|
||||
#: messages.go:115
|
||||
msgid "Could not be deleted"
|
||||
msgstr "Nem sikerült törölni"
|
||||
|
||||
#: messages.go:108
|
||||
#: messages.go:116
|
||||
#, c-format
|
||||
msgid "%s already exists"
|
||||
msgstr "%s már létezik"
|
||||
|
||||
#: messages.go:109
|
||||
#: messages.go:117
|
||||
msgid "Not found"
|
||||
msgstr "Nem található"
|
||||
|
||||
#: messages.go:110
|
||||
#: messages.go:118
|
||||
msgid "File not found"
|
||||
msgstr "Fájl nem található"
|
||||
|
||||
#: messages.go:111
|
||||
#: messages.go:119
|
||||
msgid "File too large"
|
||||
msgstr "Túl nagy fájl"
|
||||
|
||||
#: messages.go:112
|
||||
#: messages.go:120
|
||||
msgid "Unsupported"
|
||||
msgstr "Nem támogatott"
|
||||
|
||||
#: messages.go:113
|
||||
#: messages.go:121
|
||||
msgid "Unsupported type"
|
||||
msgstr "Nem támogatott típus"
|
||||
|
||||
#: messages.go:114
|
||||
#: messages.go:122
|
||||
msgid "Unsupported format"
|
||||
msgstr "Nem támogatott formátum"
|
||||
|
||||
#: messages.go:115
|
||||
#: messages.go:123
|
||||
msgid "Originals folder is empty"
|
||||
msgstr "Az Originals mappa üres"
|
||||
|
||||
#: messages.go:116
|
||||
#: messages.go:124
|
||||
msgid "Selection not found"
|
||||
msgstr "Kiválasztás nem található"
|
||||
|
||||
#: messages.go:117
|
||||
#: messages.go:125
|
||||
msgid "Entity not found"
|
||||
msgstr "Entitás nem található"
|
||||
|
||||
#: messages.go:118
|
||||
#: messages.go:126
|
||||
msgid "Account not found"
|
||||
msgstr "Fiók nem található"
|
||||
|
||||
#: messages.go:119
|
||||
#: messages.go:127
|
||||
msgid "User not found"
|
||||
msgstr "Felhasználó nem található"
|
||||
|
||||
#: messages.go:120
|
||||
#: messages.go:128
|
||||
msgid "Label not found"
|
||||
msgstr "Címke nem található"
|
||||
|
||||
#: messages.go:121
|
||||
#: messages.go:129
|
||||
msgid "Camera not found"
|
||||
msgstr "A kamera nem található"
|
||||
|
||||
#: messages.go:130
|
||||
msgid "Lens not found"
|
||||
msgstr "A lencse nem található"
|
||||
|
||||
#: messages.go:131
|
||||
msgid "Album not found"
|
||||
msgstr "Album nem található"
|
||||
|
||||
#: messages.go:122
|
||||
#: messages.go:132
|
||||
msgid "Subject not found"
|
||||
msgstr "Tárgy nem található"
|
||||
|
||||
#: messages.go:123
|
||||
#: messages.go:133
|
||||
msgid "Person not found"
|
||||
msgstr "Személy nem található"
|
||||
|
||||
#: messages.go:124
|
||||
#: messages.go:134
|
||||
msgid "Face not found"
|
||||
msgstr "Arc nem található"
|
||||
|
||||
#: messages.go:125
|
||||
#: messages.go:135
|
||||
msgid "Not available in public mode"
|
||||
msgstr "Nyilvános módban nem elérhető"
|
||||
|
||||
#: messages.go:126
|
||||
#: messages.go:136
|
||||
msgid "Not available in read-only mode"
|
||||
msgstr "Nem elérhető olvasói módban"
|
||||
|
||||
#: messages.go:127
|
||||
#: messages.go:137
|
||||
msgid "Please log in to your account"
|
||||
msgstr "Kérjük, jelentkezzen be fiókjába"
|
||||
|
||||
#: messages.go:128
|
||||
#: messages.go:138
|
||||
msgid "Permission denied"
|
||||
msgstr "Engedély megtagadva"
|
||||
|
||||
#: messages.go:129
|
||||
#: messages.go:139
|
||||
msgid "Payment required"
|
||||
msgstr "Fizetés szükséges"
|
||||
|
||||
#: messages.go:130
|
||||
#: messages.go:140
|
||||
msgid "Upload might be offensive"
|
||||
msgstr "A feltöltött fájl sértő lehet"
|
||||
|
||||
#: messages.go:131
|
||||
#: messages.go:141
|
||||
msgid "Upload failed"
|
||||
msgstr "Feltöltés sikertelen"
|
||||
|
||||
#: messages.go:132
|
||||
#: messages.go:142
|
||||
msgid "No items selected"
|
||||
msgstr "Nincsenek kiválasztva elemek"
|
||||
|
||||
#: messages.go:133
|
||||
#: messages.go:143
|
||||
msgid "Failed creating file, please check permissions"
|
||||
msgstr "Sikertelen fájl létrehozás. Kérjük, ellenőrizze a jogosultságokat"
|
||||
|
||||
#: messages.go:134
|
||||
#: messages.go:144
|
||||
msgid "Failed creating folder, please check permissions"
|
||||
msgstr "Sikertelen mappa létrehozás. Kérjük, ellenőrizze a jogosultságokat"
|
||||
|
||||
#: messages.go:135
|
||||
#: messages.go:145
|
||||
msgid "Could not connect, please try again"
|
||||
msgstr "Nem sikerült csatlakozni, próbálja újra"
|
||||
|
||||
#: messages.go:136
|
||||
#: messages.go:146
|
||||
msgid "Enter verification code"
|
||||
msgstr "Adja meg a megerősítő kódot"
|
||||
|
||||
#: messages.go:137
|
||||
#: messages.go:147
|
||||
msgid "Invalid verification code, please try again"
|
||||
msgstr "Érvénytelen ellenőrző kód. Kérjük, próbálja újra"
|
||||
|
||||
#: messages.go:138
|
||||
#: messages.go:148
|
||||
msgid "Invalid password, please try again"
|
||||
msgstr "Érvénytelen jelszó, próbálkozzon újra"
|
||||
|
||||
#: messages.go:139
|
||||
#: messages.go:149
|
||||
msgid "Feature disabled"
|
||||
msgstr "Funkció letiltva"
|
||||
|
||||
#: messages.go:140
|
||||
#: messages.go:150
|
||||
msgid "No labels selected"
|
||||
msgstr "Nincsenek kiválasztva címkék"
|
||||
|
||||
#: messages.go:141
|
||||
#: messages.go:151
|
||||
msgid "No albums selected"
|
||||
msgstr "Nincsenek kiválasztott albumok"
|
||||
|
||||
#: messages.go:142
|
||||
#: messages.go:152
|
||||
msgid "No files available for download"
|
||||
msgstr "Nincsenek letölthető fájlok"
|
||||
|
||||
#: messages.go:143
|
||||
#: messages.go:153
|
||||
msgid "Failed to create zip file"
|
||||
msgstr "Nem sikerült létrehozni a zip fájlt"
|
||||
|
||||
#: messages.go:144
|
||||
#: messages.go:154
|
||||
msgid "Invalid credentials"
|
||||
msgstr "Érvénytelen belépési adatok"
|
||||
|
||||
#: messages.go:145
|
||||
#: messages.go:155
|
||||
msgid "Invalid link"
|
||||
msgstr "Érvénytelen hivatkozás"
|
||||
|
||||
#: messages.go:146
|
||||
#: messages.go:156
|
||||
msgid "Invalid name"
|
||||
msgstr "Érvénytelen név"
|
||||
|
||||
#: messages.go:147
|
||||
#: messages.go:157
|
||||
msgid "Busy, please try again later"
|
||||
msgstr "Túl magas terhelés, próbálkozzon újra később"
|
||||
|
||||
#: messages.go:148
|
||||
#: messages.go:158
|
||||
#, c-format
|
||||
msgid "The wakeup interval is %s, but must be 1h or less"
|
||||
msgstr "Az ébresztési intervallum a %s, de legfeljebb 1 óra lehet."
|
||||
|
||||
#: messages.go:149
|
||||
#: messages.go:159
|
||||
msgid "Your account could not be connected"
|
||||
msgstr "A fiókját nem lehetett csatlakoztatni"
|
||||
|
||||
#: messages.go:150
|
||||
#: messages.go:160
|
||||
msgid "Too many requests"
|
||||
msgstr "Túl sok kérés"
|
||||
|
||||
#: messages.go:151
|
||||
#: messages.go:161
|
||||
msgid "Insufficient storage"
|
||||
msgstr "Elégtelen tárolás"
|
||||
|
||||
#: messages.go:152
|
||||
#: messages.go:162
|
||||
msgid "Quota exceeded"
|
||||
msgstr "A kvóta túllépése"
|
||||
|
||||
#: messages.go:155
|
||||
#: messages.go:163
|
||||
msgid "Registration disabled"
|
||||
msgstr "Regisztráció letiltva"
|
||||
|
||||
#: messages.go:164
|
||||
msgid "Verified email required"
|
||||
msgstr "Ellenőrzött e-mail cím szükséges"
|
||||
|
||||
#: messages.go:167
|
||||
msgid "Changes successfully saved"
|
||||
msgstr "Módosítások sikeresen mentve"
|
||||
|
||||
#: messages.go:156
|
||||
#: messages.go:168
|
||||
msgid "Album created"
|
||||
msgstr "Album létrehozva"
|
||||
|
||||
#: messages.go:157
|
||||
#: messages.go:169
|
||||
msgid "Album saved"
|
||||
msgstr "Album mentve"
|
||||
|
||||
#: messages.go:158
|
||||
#: messages.go:170
|
||||
#, c-format
|
||||
msgid "Album %s deleted"
|
||||
msgstr "%s album törölve"
|
||||
|
||||
#: messages.go:159
|
||||
#: messages.go:171
|
||||
msgid "Album contents cloned"
|
||||
msgstr "Album tartalma klónozva"
|
||||
|
||||
#: messages.go:160
|
||||
#: messages.go:172
|
||||
msgid "File removed from stack"
|
||||
msgstr "Fájl eltávolítva a halomból"
|
||||
|
||||
#: messages.go:161
|
||||
#: messages.go:173
|
||||
msgid "File deleted"
|
||||
msgstr "Fájl törölve"
|
||||
|
||||
#: messages.go:162
|
||||
#: messages.go:174
|
||||
#, c-format
|
||||
msgid "Selection added to %s"
|
||||
msgstr "Választék hozzáadva a következőhöz: %s"
|
||||
|
||||
#: messages.go:163
|
||||
#: messages.go:175
|
||||
#, c-format
|
||||
msgid "One entry added to %s"
|
||||
msgstr "Egy bejegyzés hozzáadva a következőhöz: %s"
|
||||
|
||||
#: messages.go:164
|
||||
#: messages.go:176
|
||||
#, c-format
|
||||
msgid "%d entries added to %s"
|
||||
msgstr "%d bejegyzés hozzáadva a következőhöz: %s"
|
||||
|
||||
#: messages.go:165
|
||||
#: messages.go:177
|
||||
#, c-format
|
||||
msgid "One entry removed from %s"
|
||||
msgstr "Egy bejegyzés eltávolítva innen: %s"
|
||||
|
||||
#: messages.go:166
|
||||
#: messages.go:178
|
||||
#, c-format
|
||||
msgid "%d entries removed from %s"
|
||||
msgstr "%d bejegyzés eltávolítva innen: %s"
|
||||
|
||||
#: messages.go:167
|
||||
#: messages.go:179
|
||||
msgid "Account created"
|
||||
msgstr "Fiók létrehozva"
|
||||
|
||||
#: messages.go:168
|
||||
#: messages.go:180
|
||||
msgid "Account saved"
|
||||
msgstr "Fiók mentve"
|
||||
|
||||
#: messages.go:169
|
||||
#: messages.go:181
|
||||
msgid "Account deleted"
|
||||
msgstr "Fiók törölve"
|
||||
|
||||
#: messages.go:170
|
||||
#: messages.go:182
|
||||
msgid "Settings saved"
|
||||
msgstr "Beállítások elmentve"
|
||||
|
||||
#: messages.go:171
|
||||
#: messages.go:183
|
||||
msgid "Password changed"
|
||||
msgstr "Jelszó megváltoztatva"
|
||||
|
||||
#: messages.go:172
|
||||
#: messages.go:184
|
||||
#, c-format
|
||||
msgid "Import completed in %d s"
|
||||
msgstr "Importálás %d másodperc alatt befejeződött"
|
||||
|
||||
#: messages.go:173
|
||||
#: messages.go:185
|
||||
msgid "Import canceled"
|
||||
msgstr "Importálás megszakítva"
|
||||
|
||||
#: messages.go:174
|
||||
#: messages.go:186
|
||||
#, c-format
|
||||
msgid "Indexing completed in %d s"
|
||||
msgstr "Indexelés %d másodperc alatt befejeződött"
|
||||
|
||||
#: messages.go:175
|
||||
#: messages.go:187
|
||||
msgid "Indexing originals..."
|
||||
msgstr "Eredeti dokumentumok indexelése..."
|
||||
|
||||
#: messages.go:176
|
||||
#: messages.go:188
|
||||
#, c-format
|
||||
msgid "Indexing files in %s"
|
||||
msgstr "Fájlok indexelése itt: %s"
|
||||
|
||||
#: messages.go:177
|
||||
#: messages.go:189
|
||||
msgid "Indexing canceled"
|
||||
msgstr "Indexelés megszakítva"
|
||||
|
||||
#: messages.go:178
|
||||
#: messages.go:190
|
||||
#, c-format
|
||||
msgid "Removed %d files and %d photos"
|
||||
msgstr "%d fájl és %d fénykép eltávolítva"
|
||||
|
||||
#: messages.go:179
|
||||
#: messages.go:191
|
||||
#, c-format
|
||||
msgid "Moving files from %s"
|
||||
msgstr "Fájlok áthelyezése innen: %s"
|
||||
|
||||
#: messages.go:180
|
||||
#: messages.go:192
|
||||
#, c-format
|
||||
msgid "Copying files from %s"
|
||||
msgstr "Fájlok másolása innen: %s"
|
||||
|
||||
#: messages.go:181
|
||||
#: messages.go:193
|
||||
msgid "Labels deleted"
|
||||
msgstr "Címkék törölve"
|
||||
|
||||
#: messages.go:182
|
||||
#: messages.go:194
|
||||
msgid "Label saved"
|
||||
msgstr "Címkék mentve"
|
||||
|
||||
#: messages.go:183
|
||||
#: messages.go:195
|
||||
msgid "Subject saved"
|
||||
msgstr "Tárgy mentve"
|
||||
|
||||
#: messages.go:184
|
||||
#: messages.go:196
|
||||
msgid "Subject deleted"
|
||||
msgstr "Tárgy törölve"
|
||||
|
||||
#: messages.go:185
|
||||
#: messages.go:197
|
||||
msgid "Person saved"
|
||||
msgstr "Személy mentve"
|
||||
|
||||
#: messages.go:186
|
||||
#: messages.go:198
|
||||
msgid "Person deleted"
|
||||
msgstr "Személy törölve"
|
||||
|
||||
#: messages.go:187
|
||||
#: messages.go:199
|
||||
msgid "File uploaded"
|
||||
msgstr "Fájl feltöltve"
|
||||
|
||||
#: messages.go:188
|
||||
#: messages.go:200
|
||||
#, c-format
|
||||
msgid "%d files uploaded in %d s"
|
||||
msgstr "%d fájl feltöltve %d másodperc alatt"
|
||||
|
||||
#: messages.go:189
|
||||
#: messages.go:201
|
||||
msgid "Processing upload..."
|
||||
msgstr "Feltöltött fájlok feldolgozása..."
|
||||
|
||||
#: messages.go:190
|
||||
#: messages.go:202
|
||||
msgid "Upload has been processed"
|
||||
msgstr "Feltöltött fájlok feldolgozva"
|
||||
|
||||
#: messages.go:191
|
||||
#: messages.go:203
|
||||
msgid "Selection approved"
|
||||
msgstr "A kijelölés jóváhagyva"
|
||||
|
||||
#: messages.go:192
|
||||
#: messages.go:204
|
||||
msgid "Selection archived"
|
||||
msgstr "A kijelölés archiválva"
|
||||
|
||||
#: messages.go:193
|
||||
#: messages.go:205
|
||||
msgid "Selection restored"
|
||||
msgstr "A kijelölés visszaállítva"
|
||||
|
||||
#: messages.go:194
|
||||
#: messages.go:206
|
||||
msgid "Selection marked as private"
|
||||
msgstr "A kijelölés privátként megjelölve"
|
||||
|
||||
#: messages.go:195
|
||||
#: messages.go:207
|
||||
msgid "Albums deleted"
|
||||
msgstr "Albumok törölve"
|
||||
|
||||
#: messages.go:196
|
||||
#: messages.go:208
|
||||
#, c-format
|
||||
msgid "Zip created in %d s"
|
||||
msgstr "A tömörített fájl létrejött %d másodperc alatt"
|
||||
|
||||
#: messages.go:197
|
||||
#: messages.go:209
|
||||
msgid "Permanently deleted"
|
||||
msgstr "Véglegesen törölve"
|
||||
|
||||
#: messages.go:198
|
||||
#: messages.go:210
|
||||
#, c-format
|
||||
msgid "%s has been restored"
|
||||
msgstr "%s visszaállítva"
|
||||
|
||||
#: messages.go:199
|
||||
#: messages.go:211
|
||||
msgid "Successfully verified"
|
||||
msgstr "Sikeresen ellenőrizve"
|
||||
|
||||
#: messages.go:200
|
||||
#: messages.go:212
|
||||
msgid "Successfully activated"
|
||||
msgstr "Sikeres aktiválás"
|
||||
|
||||
|
|
|
|||
|
|
@ -2,9 +2,10 @@ msgid ""
|
|||
msgstr ""
|
||||
"Project-Id-Version: \n"
|
||||
"Report-Msgid-Bugs-To: \n"
|
||||
"POT-Creation-Date: 2025-10-17 17:32+0000\n"
|
||||
"PO-Revision-Date: 2025-10-22 08:25+0000\n"
|
||||
"Last-Translator: DeepL <noreply-mt-deepl@weblate.org>\n"
|
||||
"POT-Creation-Date: 2026-06-27 09:13+0000\n"
|
||||
"PO-Revision-Date: 2026-06-27 10:28+0000\n"
|
||||
"Last-Translator: Google Cloud Translation Basic <noreply-mt-google-"
|
||||
"translate@weblate.org>\n"
|
||||
"Language-Team: Indonesian <https://translate.photoprism.app/projects/"
|
||||
"photoprism/backend/id/>\n"
|
||||
"Language: id\n"
|
||||
|
|
@ -12,402 +13,418 @@ msgstr ""
|
|||
"Content-Type: text/plain; charset=UTF-8\n"
|
||||
"Content-Transfer-Encoding: 8bit\n"
|
||||
"Plural-Forms: nplurals=1; plural=0;\n"
|
||||
"X-Generator: Weblate 5.13.3\n"
|
||||
"X-Generator: Weblate 2026.5\n"
|
||||
|
||||
#: messages.go:104
|
||||
#: messages.go:112
|
||||
msgid "Something went wrong, try again"
|
||||
msgstr "Ada yang salah, coba lagi"
|
||||
|
||||
#: messages.go:105
|
||||
#: messages.go:113
|
||||
msgid "Unable to do that"
|
||||
msgstr "Tidak dapat melakukan itu"
|
||||
|
||||
#: messages.go:106
|
||||
#: messages.go:114
|
||||
msgid "Changes could not be saved"
|
||||
msgstr "Perubahan tidak dapat disimpan"
|
||||
|
||||
#: messages.go:107
|
||||
#: messages.go:115
|
||||
msgid "Could not be deleted"
|
||||
msgstr "Tidak dapat dihapus"
|
||||
|
||||
#: messages.go:108
|
||||
#: messages.go:116
|
||||
#, c-format
|
||||
msgid "%s already exists"
|
||||
msgstr "%s sudah ada"
|
||||
|
||||
#: messages.go:109
|
||||
#: messages.go:117
|
||||
msgid "Not found"
|
||||
msgstr "Tidak ditemukan"
|
||||
|
||||
#: messages.go:110
|
||||
#: messages.go:118
|
||||
msgid "File not found"
|
||||
msgstr "Berkas tidak ditemukan"
|
||||
|
||||
#: messages.go:111
|
||||
#: messages.go:119
|
||||
msgid "File too large"
|
||||
msgstr "Berkas terlalu besar"
|
||||
|
||||
#: messages.go:112
|
||||
#: messages.go:120
|
||||
msgid "Unsupported"
|
||||
msgstr "Tidak didukung"
|
||||
|
||||
#: messages.go:113
|
||||
#: messages.go:121
|
||||
msgid "Unsupported type"
|
||||
msgstr "Jenis tidak didukung"
|
||||
|
||||
#: messages.go:114
|
||||
#: messages.go:122
|
||||
msgid "Unsupported format"
|
||||
msgstr "Format yang tidak didukung"
|
||||
|
||||
#: messages.go:115
|
||||
#: messages.go:123
|
||||
msgid "Originals folder is empty"
|
||||
msgstr "Folder asli kosong"
|
||||
|
||||
#: messages.go:116
|
||||
#: messages.go:124
|
||||
msgid "Selection not found"
|
||||
msgstr "Pilihan tidak ditemukan"
|
||||
|
||||
#: messages.go:117
|
||||
#: messages.go:125
|
||||
msgid "Entity not found"
|
||||
msgstr "Entitas tidak ditemukan"
|
||||
|
||||
#: messages.go:118
|
||||
#: messages.go:126
|
||||
msgid "Account not found"
|
||||
msgstr "Akun tidak ditemukan"
|
||||
|
||||
#: messages.go:119
|
||||
#: messages.go:127
|
||||
msgid "User not found"
|
||||
msgstr "Pengguna tidak ditemukan"
|
||||
|
||||
#: messages.go:120
|
||||
#: messages.go:128
|
||||
msgid "Label not found"
|
||||
msgstr "Label tidak ditemukan"
|
||||
|
||||
#: messages.go:121
|
||||
#: messages.go:129
|
||||
msgid "Camera not found"
|
||||
msgstr "Kamera tidak ditemukan"
|
||||
|
||||
#: messages.go:130
|
||||
msgid "Lens not found"
|
||||
msgstr "Lensa tidak ditemukan"
|
||||
|
||||
#: messages.go:131
|
||||
msgid "Album not found"
|
||||
msgstr "Album tidak ditemukan"
|
||||
|
||||
#: messages.go:122
|
||||
#: messages.go:132
|
||||
msgid "Subject not found"
|
||||
msgstr "Subjek tidak ditemukan"
|
||||
|
||||
#: messages.go:123
|
||||
#: messages.go:133
|
||||
msgid "Person not found"
|
||||
msgstr "Orang tidak ditemukan"
|
||||
|
||||
#: messages.go:124
|
||||
#: messages.go:134
|
||||
msgid "Face not found"
|
||||
msgstr "Wajah tidak ditemukan"
|
||||
|
||||
#: messages.go:125
|
||||
#: messages.go:135
|
||||
msgid "Not available in public mode"
|
||||
msgstr "Tidak tersedia dalam mode publik"
|
||||
|
||||
#: messages.go:126
|
||||
#: messages.go:136
|
||||
msgid "Not available in read-only mode"
|
||||
msgstr "Tidak tersedia dalam mode hanya-baca"
|
||||
|
||||
#: messages.go:127
|
||||
#: messages.go:137
|
||||
msgid "Please log in to your account"
|
||||
msgstr "Silakan masuk ke akun Anda"
|
||||
|
||||
#: messages.go:128
|
||||
#: messages.go:138
|
||||
msgid "Permission denied"
|
||||
msgstr "Izin ditolak"
|
||||
|
||||
#: messages.go:129
|
||||
#: messages.go:139
|
||||
msgid "Payment required"
|
||||
msgstr "Diperlukan pembayaran"
|
||||
|
||||
#: messages.go:130
|
||||
#: messages.go:140
|
||||
msgid "Upload might be offensive"
|
||||
msgstr "Unggahan mungkin menyinggung"
|
||||
|
||||
#: messages.go:131
|
||||
#: messages.go:141
|
||||
msgid "Upload failed"
|
||||
msgstr "Unggahan gagal"
|
||||
|
||||
#: messages.go:132
|
||||
#: messages.go:142
|
||||
msgid "No items selected"
|
||||
msgstr "Tidak ada item yang dipilih"
|
||||
|
||||
#: messages.go:133
|
||||
#: messages.go:143
|
||||
msgid "Failed creating file, please check permissions"
|
||||
msgstr "Gagal membuat file, silakan periksa izin"
|
||||
|
||||
#: messages.go:134
|
||||
#: messages.go:144
|
||||
msgid "Failed creating folder, please check permissions"
|
||||
msgstr "Gagal membuat folder, harap periksa izin"
|
||||
|
||||
#: messages.go:135
|
||||
#: messages.go:145
|
||||
msgid "Could not connect, please try again"
|
||||
msgstr "Tidak dapat terhubung, silakan coba lagi"
|
||||
|
||||
#: messages.go:136
|
||||
#: messages.go:146
|
||||
msgid "Enter verification code"
|
||||
msgstr "Masukkan kode verifikasi"
|
||||
|
||||
#: messages.go:137
|
||||
#: messages.go:147
|
||||
msgid "Invalid verification code, please try again"
|
||||
msgstr "Kode verifikasi tidak valid, silakan coba lagi"
|
||||
|
||||
#: messages.go:138
|
||||
#: messages.go:148
|
||||
msgid "Invalid password, please try again"
|
||||
msgstr "Kata sandi salah, silakan coba lagi"
|
||||
|
||||
#: messages.go:139
|
||||
#: messages.go:149
|
||||
msgid "Feature disabled"
|
||||
msgstr "Fitur dinonaktifkan"
|
||||
|
||||
#: messages.go:140
|
||||
#: messages.go:150
|
||||
msgid "No labels selected"
|
||||
msgstr "Tidak ada label yang dipilih"
|
||||
|
||||
#: messages.go:141
|
||||
#: messages.go:151
|
||||
msgid "No albums selected"
|
||||
msgstr "Tidak ada album yang dipilih"
|
||||
|
||||
#: messages.go:142
|
||||
#: messages.go:152
|
||||
msgid "No files available for download"
|
||||
msgstr "Tidak ada file yang tersedia untuk diunduh"
|
||||
|
||||
#: messages.go:143
|
||||
#: messages.go:153
|
||||
msgid "Failed to create zip file"
|
||||
msgstr "Gagal membuat file zip"
|
||||
|
||||
#: messages.go:144
|
||||
#: messages.go:154
|
||||
msgid "Invalid credentials"
|
||||
msgstr "Kredensial tidak valid"
|
||||
|
||||
#: messages.go:145
|
||||
#: messages.go:155
|
||||
msgid "Invalid link"
|
||||
msgstr "Tautan tidak valid"
|
||||
|
||||
#: messages.go:146
|
||||
#: messages.go:156
|
||||
msgid "Invalid name"
|
||||
msgstr "Nama tidak valid"
|
||||
|
||||
#: messages.go:147
|
||||
#: messages.go:157
|
||||
msgid "Busy, please try again later"
|
||||
msgstr "Sibuk, silakan coba lagi nanti"
|
||||
|
||||
#: messages.go:148
|
||||
#: messages.go:158
|
||||
#, c-format
|
||||
msgid "The wakeup interval is %s, but must be 1h or less"
|
||||
msgstr "Interval wakeup adalah %s, tetapi harus 1 jam atau kurang"
|
||||
|
||||
#: messages.go:149
|
||||
#: messages.go:159
|
||||
msgid "Your account could not be connected"
|
||||
msgstr "Akun Anda tidak dapat terhubung"
|
||||
|
||||
#: messages.go:150
|
||||
#: messages.go:160
|
||||
msgid "Too many requests"
|
||||
msgstr "Terlalu banyak permintaan"
|
||||
|
||||
#: messages.go:151
|
||||
#: messages.go:161
|
||||
msgid "Insufficient storage"
|
||||
msgstr "Penyimpanan yang tidak memadai"
|
||||
|
||||
#: messages.go:152
|
||||
#: messages.go:162
|
||||
msgid "Quota exceeded"
|
||||
msgstr "Kuota terlampaui"
|
||||
|
||||
#: messages.go:155
|
||||
#: messages.go:163
|
||||
msgid "Registration disabled"
|
||||
msgstr "Pendaftaran dinonaktifkan"
|
||||
|
||||
#: messages.go:164
|
||||
msgid "Verified email required"
|
||||
msgstr "Email terverifikasi diperlukan."
|
||||
|
||||
#: messages.go:167
|
||||
msgid "Changes successfully saved"
|
||||
msgstr "Perubahan berhasil disimpan"
|
||||
|
||||
#: messages.go:156
|
||||
#: messages.go:168
|
||||
msgid "Album created"
|
||||
msgstr "Album dibuat"
|
||||
|
||||
#: messages.go:157
|
||||
#: messages.go:169
|
||||
msgid "Album saved"
|
||||
msgstr "Album disimpan"
|
||||
|
||||
#: messages.go:158
|
||||
#: messages.go:170
|
||||
#, c-format
|
||||
msgid "Album %s deleted"
|
||||
msgstr "Album %s dihapus"
|
||||
|
||||
#: messages.go:159
|
||||
#: messages.go:171
|
||||
msgid "Album contents cloned"
|
||||
msgstr "Konten album dikloning"
|
||||
|
||||
#: messages.go:160
|
||||
#: messages.go:172
|
||||
msgid "File removed from stack"
|
||||
msgstr "File dihapus dari tumpukan"
|
||||
|
||||
#: messages.go:161
|
||||
#: messages.go:173
|
||||
msgid "File deleted"
|
||||
msgstr "Berkas dihapus"
|
||||
|
||||
#: messages.go:162
|
||||
#: messages.go:174
|
||||
#, c-format
|
||||
msgid "Selection added to %s"
|
||||
msgstr "Pilihan ditambahkan ke %s"
|
||||
|
||||
#: messages.go:163
|
||||
#: messages.go:175
|
||||
#, c-format
|
||||
msgid "One entry added to %s"
|
||||
msgstr "Satu entri ditambahkan ke %s"
|
||||
|
||||
#: messages.go:164
|
||||
#: messages.go:176
|
||||
#, c-format
|
||||
msgid "%d entries added to %s"
|
||||
msgstr "%d entri ditambahkan ke %s"
|
||||
|
||||
#: messages.go:165
|
||||
#: messages.go:177
|
||||
#, c-format
|
||||
msgid "One entry removed from %s"
|
||||
msgstr "Satu entri dihapus dari %s"
|
||||
|
||||
#: messages.go:166
|
||||
#: messages.go:178
|
||||
#, c-format
|
||||
msgid "%d entries removed from %s"
|
||||
msgstr "%d entri dihapus dari %s"
|
||||
|
||||
#: messages.go:167
|
||||
#: messages.go:179
|
||||
msgid "Account created"
|
||||
msgstr "Akun dibuat"
|
||||
|
||||
#: messages.go:168
|
||||
#: messages.go:180
|
||||
msgid "Account saved"
|
||||
msgstr "Akun disimpan"
|
||||
|
||||
#: messages.go:169
|
||||
#: messages.go:181
|
||||
msgid "Account deleted"
|
||||
msgstr "Akun dihapus"
|
||||
|
||||
#: messages.go:170
|
||||
#: messages.go:182
|
||||
msgid "Settings saved"
|
||||
msgstr "Pengaturan disimpan"
|
||||
|
||||
#: messages.go:171
|
||||
#: messages.go:183
|
||||
msgid "Password changed"
|
||||
msgstr "Kata sandi diubah"
|
||||
|
||||
#: messages.go:172
|
||||
#: messages.go:184
|
||||
#, c-format
|
||||
msgid "Import completed in %d s"
|
||||
msgstr "Impor selesai dalam %d detik"
|
||||
|
||||
#: messages.go:173
|
||||
#: messages.go:185
|
||||
msgid "Import canceled"
|
||||
msgstr "Impor dibatalkan"
|
||||
|
||||
#: messages.go:174
|
||||
#: messages.go:186
|
||||
#, c-format
|
||||
msgid "Indexing completed in %d s"
|
||||
msgstr "Pengindeksan selesai dalam %d detik"
|
||||
|
||||
#: messages.go:175
|
||||
#: messages.go:187
|
||||
msgid "Indexing originals..."
|
||||
msgstr "Mengindeks dokumen asli..."
|
||||
|
||||
#: messages.go:176
|
||||
#: messages.go:188
|
||||
#, c-format
|
||||
msgid "Indexing files in %s"
|
||||
msgstr "Mengindeks file dalam %s"
|
||||
|
||||
#: messages.go:177
|
||||
#: messages.go:189
|
||||
msgid "Indexing canceled"
|
||||
msgstr "Pengindeksan dibatalkan"
|
||||
|
||||
#: messages.go:178
|
||||
#: messages.go:190
|
||||
#, c-format
|
||||
msgid "Removed %d files and %d photos"
|
||||
msgstr "Menghapus %d file dan %d foto"
|
||||
|
||||
#: messages.go:179
|
||||
#: messages.go:191
|
||||
#, c-format
|
||||
msgid "Moving files from %s"
|
||||
msgstr "Memindahkan file dari %s"
|
||||
|
||||
#: messages.go:180
|
||||
#: messages.go:192
|
||||
#, c-format
|
||||
msgid "Copying files from %s"
|
||||
msgstr "Menyalin file dari %s"
|
||||
|
||||
#: messages.go:181
|
||||
#: messages.go:193
|
||||
msgid "Labels deleted"
|
||||
msgstr "Label dihapus"
|
||||
|
||||
#: messages.go:182
|
||||
#: messages.go:194
|
||||
msgid "Label saved"
|
||||
msgstr "Label disimpan"
|
||||
|
||||
#: messages.go:183
|
||||
#: messages.go:195
|
||||
msgid "Subject saved"
|
||||
msgstr "Subjek disimpan"
|
||||
|
||||
#: messages.go:184
|
||||
#: messages.go:196
|
||||
msgid "Subject deleted"
|
||||
msgstr "Subjek dihapus"
|
||||
|
||||
#: messages.go:185
|
||||
#: messages.go:197
|
||||
msgid "Person saved"
|
||||
msgstr "Orang disimpan"
|
||||
|
||||
#: messages.go:186
|
||||
#: messages.go:198
|
||||
msgid "Person deleted"
|
||||
msgstr "Orang dihapus"
|
||||
|
||||
#: messages.go:187
|
||||
#: messages.go:199
|
||||
msgid "File uploaded"
|
||||
msgstr "File diunggah"
|
||||
|
||||
#: messages.go:188
|
||||
#: messages.go:200
|
||||
#, c-format
|
||||
msgid "%d files uploaded in %d s"
|
||||
msgstr "%d file diupload di %d detik"
|
||||
|
||||
#: messages.go:189
|
||||
#: messages.go:201
|
||||
msgid "Processing upload..."
|
||||
msgstr "Memproses unggahan..."
|
||||
|
||||
#: messages.go:190
|
||||
#: messages.go:202
|
||||
msgid "Upload has been processed"
|
||||
msgstr "Unggahan telah diproses"
|
||||
|
||||
#: messages.go:191
|
||||
#: messages.go:203
|
||||
msgid "Selection approved"
|
||||
msgstr "Pilihan disetujui"
|
||||
|
||||
#: messages.go:192
|
||||
#: messages.go:204
|
||||
msgid "Selection archived"
|
||||
msgstr "Pilihan diarsipkan"
|
||||
|
||||
#: messages.go:193
|
||||
#: messages.go:205
|
||||
msgid "Selection restored"
|
||||
msgstr "Pilihan dipulihkan"
|
||||
|
||||
#: messages.go:194
|
||||
#: messages.go:206
|
||||
msgid "Selection marked as private"
|
||||
msgstr "Pilihan ditandai sebagai pribadi"
|
||||
|
||||
#: messages.go:195
|
||||
#: messages.go:207
|
||||
msgid "Albums deleted"
|
||||
msgstr "Koleksi album dihapus"
|
||||
|
||||
#: messages.go:196
|
||||
#: messages.go:208
|
||||
#, c-format
|
||||
msgid "Zip created in %d s"
|
||||
msgstr "Zip dibuat dalam %d detik"
|
||||
|
||||
#: messages.go:197
|
||||
#: messages.go:209
|
||||
msgid "Permanently deleted"
|
||||
msgstr "Dihapus permanen"
|
||||
|
||||
#: messages.go:198
|
||||
#: messages.go:210
|
||||
#, c-format
|
||||
msgid "%s has been restored"
|
||||
msgstr "%s telah dipulihkan"
|
||||
|
||||
#: messages.go:199
|
||||
#: messages.go:211
|
||||
msgid "Successfully verified"
|
||||
msgstr "Berhasil diverifikasi"
|
||||
|
||||
#: messages.go:200
|
||||
#: messages.go:212
|
||||
msgid "Successfully activated"
|
||||
msgstr "Berhasil diaktifkan"
|
||||
|
||||
|
|
|
|||
|
|
@ -2,8 +2,8 @@ msgid ""
|
|||
msgstr ""
|
||||
"Project-Id-Version: \n"
|
||||
"Report-Msgid-Bugs-To: \n"
|
||||
"POT-Creation-Date: 2025-10-17 17:32+0000\n"
|
||||
"PO-Revision-Date: 2025-10-22 08:25+0000\n"
|
||||
"POT-Creation-Date: 2026-06-27 09:13+0000\n"
|
||||
"PO-Revision-Date: 2026-06-27 10:28+0000\n"
|
||||
"Last-Translator: DeepL <noreply-mt-deepl@weblate.org>\n"
|
||||
"Language-Team: Italian <https://translate.photoprism.app/projects/photoprism/"
|
||||
"backend/it/>\n"
|
||||
|
|
@ -12,402 +12,418 @@ msgstr ""
|
|||
"Content-Type: text/plain; charset=UTF-8\n"
|
||||
"Content-Transfer-Encoding: 8bit\n"
|
||||
"Plural-Forms: nplurals=2; plural=n != 1;\n"
|
||||
"X-Generator: Weblate 5.13.3\n"
|
||||
"X-Generator: Weblate 2026.5\n"
|
||||
|
||||
#: messages.go:104
|
||||
#: messages.go:112
|
||||
msgid "Something went wrong, try again"
|
||||
msgstr "Qualcosa è andato storto, riprova"
|
||||
|
||||
#: messages.go:105
|
||||
#: messages.go:113
|
||||
msgid "Unable to do that"
|
||||
msgstr "Impossibile farlo"
|
||||
|
||||
#: messages.go:106
|
||||
#: messages.go:114
|
||||
msgid "Changes could not be saved"
|
||||
msgstr "Le modifiche non possono essere salvate"
|
||||
|
||||
#: messages.go:107
|
||||
#: messages.go:115
|
||||
msgid "Could not be deleted"
|
||||
msgstr "Impossibile eliminare"
|
||||
|
||||
#: messages.go:108
|
||||
#: messages.go:116
|
||||
#, c-format
|
||||
msgid "%s already exists"
|
||||
msgstr "%s esiste già"
|
||||
|
||||
#: messages.go:109
|
||||
#: messages.go:117
|
||||
msgid "Not found"
|
||||
msgstr "Non trovato"
|
||||
|
||||
#: messages.go:110
|
||||
#: messages.go:118
|
||||
msgid "File not found"
|
||||
msgstr "File non trovato"
|
||||
|
||||
#: messages.go:111
|
||||
#: messages.go:119
|
||||
msgid "File too large"
|
||||
msgstr "File troppo grande"
|
||||
|
||||
#: messages.go:112
|
||||
#: messages.go:120
|
||||
msgid "Unsupported"
|
||||
msgstr "Non supportato"
|
||||
|
||||
#: messages.go:113
|
||||
#: messages.go:121
|
||||
msgid "Unsupported type"
|
||||
msgstr "Formato non supportato"
|
||||
|
||||
#: messages.go:114
|
||||
#: messages.go:122
|
||||
msgid "Unsupported format"
|
||||
msgstr "Formato non supportato"
|
||||
|
||||
#: messages.go:115
|
||||
#: messages.go:123
|
||||
msgid "Originals folder is empty"
|
||||
msgstr "La cartella degli originali è vuota"
|
||||
|
||||
#: messages.go:116
|
||||
#: messages.go:124
|
||||
msgid "Selection not found"
|
||||
msgstr "Selezione non trovata"
|
||||
|
||||
#: messages.go:117
|
||||
#: messages.go:125
|
||||
msgid "Entity not found"
|
||||
msgstr "Entità non trovata"
|
||||
|
||||
#: messages.go:118
|
||||
#: messages.go:126
|
||||
msgid "Account not found"
|
||||
msgstr "Account non trovato"
|
||||
|
||||
#: messages.go:119
|
||||
#: messages.go:127
|
||||
msgid "User not found"
|
||||
msgstr "Utente non trovato"
|
||||
|
||||
#: messages.go:120
|
||||
#: messages.go:128
|
||||
msgid "Label not found"
|
||||
msgstr "Etichetta non trovata"
|
||||
|
||||
#: messages.go:121
|
||||
#: messages.go:129
|
||||
msgid "Camera not found"
|
||||
msgstr "Fotocamera non trovata"
|
||||
|
||||
#: messages.go:130
|
||||
msgid "Lens not found"
|
||||
msgstr "Obiettivo non trovato"
|
||||
|
||||
#: messages.go:131
|
||||
msgid "Album not found"
|
||||
msgstr "Album non trovato"
|
||||
|
||||
#: messages.go:122
|
||||
#: messages.go:132
|
||||
msgid "Subject not found"
|
||||
msgstr "Soggetto non trovato"
|
||||
|
||||
#: messages.go:123
|
||||
#: messages.go:133
|
||||
msgid "Person not found"
|
||||
msgstr "Persona non trovata"
|
||||
|
||||
#: messages.go:124
|
||||
#: messages.go:134
|
||||
msgid "Face not found"
|
||||
msgstr "Faccia non trovata"
|
||||
|
||||
#: messages.go:125
|
||||
#: messages.go:135
|
||||
msgid "Not available in public mode"
|
||||
msgstr "Non disponibile in modalità pubblica"
|
||||
|
||||
#: messages.go:126
|
||||
#: messages.go:136
|
||||
msgid "Not available in read-only mode"
|
||||
msgstr "Non disponibile in modalità di sola lettura"
|
||||
|
||||
#: messages.go:127
|
||||
#: messages.go:137
|
||||
msgid "Please log in to your account"
|
||||
msgstr "Accedere al proprio account"
|
||||
|
||||
#: messages.go:128
|
||||
#: messages.go:138
|
||||
msgid "Permission denied"
|
||||
msgstr "Permesso negato"
|
||||
|
||||
#: messages.go:129
|
||||
#: messages.go:139
|
||||
msgid "Payment required"
|
||||
msgstr "Pagamento obbligatorio"
|
||||
|
||||
#: messages.go:130
|
||||
#: messages.go:140
|
||||
msgid "Upload might be offensive"
|
||||
msgstr "L'upload potrebbe essere offensivo"
|
||||
|
||||
#: messages.go:131
|
||||
#: messages.go:141
|
||||
msgid "Upload failed"
|
||||
msgstr "Upload fallito"
|
||||
|
||||
#: messages.go:132
|
||||
#: messages.go:142
|
||||
msgid "No items selected"
|
||||
msgstr "Nessun elemento selezionato"
|
||||
|
||||
#: messages.go:133
|
||||
#: messages.go:143
|
||||
msgid "Failed creating file, please check permissions"
|
||||
msgstr "Impossibile creare il file, si prega di controllare i permessi"
|
||||
|
||||
#: messages.go:134
|
||||
#: messages.go:144
|
||||
msgid "Failed creating folder, please check permissions"
|
||||
msgstr "Impossibile creare la cartella, si prega di controllare i permessi"
|
||||
|
||||
#: messages.go:135
|
||||
#: messages.go:145
|
||||
msgid "Could not connect, please try again"
|
||||
msgstr "Impossibile connettersi, si prega di riprovare"
|
||||
|
||||
#: messages.go:136
|
||||
#: messages.go:146
|
||||
msgid "Enter verification code"
|
||||
msgstr "Inserisci codice di verifca"
|
||||
|
||||
#: messages.go:137
|
||||
#: messages.go:147
|
||||
msgid "Invalid verification code, please try again"
|
||||
msgstr "Codice di verifica errato, prova di nuovo"
|
||||
|
||||
#: messages.go:138
|
||||
#: messages.go:148
|
||||
msgid "Invalid password, please try again"
|
||||
msgstr "Password non valida, si prega di riprovare"
|
||||
|
||||
#: messages.go:139
|
||||
#: messages.go:149
|
||||
msgid "Feature disabled"
|
||||
msgstr "Funzionalità disabilitata"
|
||||
|
||||
#: messages.go:140
|
||||
#: messages.go:150
|
||||
msgid "No labels selected"
|
||||
msgstr "Nessuna etichetta selezionata"
|
||||
|
||||
#: messages.go:141
|
||||
#: messages.go:151
|
||||
msgid "No albums selected"
|
||||
msgstr "Nessun album selezionato"
|
||||
|
||||
#: messages.go:142
|
||||
#: messages.go:152
|
||||
msgid "No files available for download"
|
||||
msgstr "Nessun file è disponibile per il download"
|
||||
|
||||
#: messages.go:143
|
||||
#: messages.go:153
|
||||
msgid "Failed to create zip file"
|
||||
msgstr "Impossibile creare il file zip"
|
||||
|
||||
#: messages.go:144
|
||||
#: messages.go:154
|
||||
msgid "Invalid credentials"
|
||||
msgstr "Credenziali non valide"
|
||||
|
||||
#: messages.go:145
|
||||
#: messages.go:155
|
||||
msgid "Invalid link"
|
||||
msgstr "Link non valido"
|
||||
|
||||
#: messages.go:146
|
||||
#: messages.go:156
|
||||
msgid "Invalid name"
|
||||
msgstr "Nome non valido"
|
||||
|
||||
#: messages.go:147
|
||||
#: messages.go:157
|
||||
msgid "Busy, please try again later"
|
||||
msgstr "Occupato, si prega di riprovare più tardi"
|
||||
|
||||
#: messages.go:148
|
||||
#: messages.go:158
|
||||
#, c-format
|
||||
msgid "The wakeup interval is %s, but must be 1h or less"
|
||||
msgstr "L'intervallo di risveglio è %s, ma deve essere pari o inferiore a 1h"
|
||||
|
||||
#: messages.go:149
|
||||
#: messages.go:159
|
||||
msgid "Your account could not be connected"
|
||||
msgstr "Non è stato possibile collegare l'account"
|
||||
|
||||
#: messages.go:150
|
||||
#: messages.go:160
|
||||
msgid "Too many requests"
|
||||
msgstr "Troppe richieste"
|
||||
|
||||
#: messages.go:151
|
||||
#: messages.go:161
|
||||
msgid "Insufficient storage"
|
||||
msgstr "Stoccaggio insufficiente"
|
||||
|
||||
#: messages.go:152
|
||||
#: messages.go:162
|
||||
msgid "Quota exceeded"
|
||||
msgstr "Quota superata"
|
||||
|
||||
#: messages.go:155
|
||||
#: messages.go:163
|
||||
msgid "Registration disabled"
|
||||
msgstr "Registrazione disabilitata"
|
||||
|
||||
#: messages.go:164
|
||||
msgid "Verified email required"
|
||||
msgstr "È necessario un indirizzo e-mail verificato"
|
||||
|
||||
#: messages.go:167
|
||||
msgid "Changes successfully saved"
|
||||
msgstr "Modifiche salvate con successo"
|
||||
|
||||
#: messages.go:156
|
||||
#: messages.go:168
|
||||
msgid "Album created"
|
||||
msgstr "Album creato"
|
||||
|
||||
#: messages.go:157
|
||||
#: messages.go:169
|
||||
msgid "Album saved"
|
||||
msgstr "Album salvato"
|
||||
|
||||
#: messages.go:158
|
||||
#: messages.go:170
|
||||
#, c-format
|
||||
msgid "Album %s deleted"
|
||||
msgstr "Album %s eliminato"
|
||||
|
||||
#: messages.go:159
|
||||
#: messages.go:171
|
||||
msgid "Album contents cloned"
|
||||
msgstr "I contenuti dell'album sono stati duplicati"
|
||||
|
||||
#: messages.go:160
|
||||
#: messages.go:172
|
||||
msgid "File removed from stack"
|
||||
msgstr "File rimosso dallo stack"
|
||||
|
||||
#: messages.go:161
|
||||
#: messages.go:173
|
||||
msgid "File deleted"
|
||||
msgstr "File eliminato"
|
||||
|
||||
#: messages.go:162
|
||||
#: messages.go:174
|
||||
#, c-format
|
||||
msgid "Selection added to %s"
|
||||
msgstr "Selezione aggiunta a %s"
|
||||
|
||||
#: messages.go:163
|
||||
#: messages.go:175
|
||||
#, c-format
|
||||
msgid "One entry added to %s"
|
||||
msgstr "Un elemento aggiunto a %s"
|
||||
|
||||
#: messages.go:164
|
||||
#: messages.go:176
|
||||
#, c-format
|
||||
msgid "%d entries added to %s"
|
||||
msgstr "%d elementi aggiunti a %s"
|
||||
|
||||
#: messages.go:165
|
||||
#: messages.go:177
|
||||
#, c-format
|
||||
msgid "One entry removed from %s"
|
||||
msgstr "Un elemento rimosso da %s"
|
||||
|
||||
#: messages.go:166
|
||||
#: messages.go:178
|
||||
#, c-format
|
||||
msgid "%d entries removed from %s"
|
||||
msgstr "%d elementi rimossi da %s"
|
||||
|
||||
#: messages.go:167
|
||||
#: messages.go:179
|
||||
msgid "Account created"
|
||||
msgstr "Account creato"
|
||||
|
||||
#: messages.go:168
|
||||
#: messages.go:180
|
||||
msgid "Account saved"
|
||||
msgstr "Account salvato"
|
||||
|
||||
#: messages.go:169
|
||||
#: messages.go:181
|
||||
msgid "Account deleted"
|
||||
msgstr "Account eliminato"
|
||||
|
||||
#: messages.go:170
|
||||
#: messages.go:182
|
||||
msgid "Settings saved"
|
||||
msgstr "Impostazioni salvate"
|
||||
|
||||
#: messages.go:171
|
||||
#: messages.go:183
|
||||
msgid "Password changed"
|
||||
msgstr "Password cambiata"
|
||||
|
||||
#: messages.go:172
|
||||
#: messages.go:184
|
||||
#, c-format
|
||||
msgid "Import completed in %d s"
|
||||
msgstr "Importazione completata in %d secondi"
|
||||
|
||||
#: messages.go:173
|
||||
#: messages.go:185
|
||||
msgid "Import canceled"
|
||||
msgstr "Importazione cancellata"
|
||||
|
||||
#: messages.go:174
|
||||
#: messages.go:186
|
||||
#, c-format
|
||||
msgid "Indexing completed in %d s"
|
||||
msgstr "Indicizzazione completata in %d secondi"
|
||||
|
||||
#: messages.go:175
|
||||
#: messages.go:187
|
||||
msgid "Indexing originals..."
|
||||
msgstr "Indicizzando gli originali..."
|
||||
|
||||
#: messages.go:176
|
||||
#: messages.go:188
|
||||
#, c-format
|
||||
msgid "Indexing files in %s"
|
||||
msgstr "Indicizzazione dei file in %s"
|
||||
|
||||
#: messages.go:177
|
||||
#: messages.go:189
|
||||
msgid "Indexing canceled"
|
||||
msgstr "Indicizzazione cancellata"
|
||||
|
||||
#: messages.go:178
|
||||
#: messages.go:190
|
||||
#, c-format
|
||||
msgid "Removed %d files and %d photos"
|
||||
msgstr "Rimossi %d file e %d foto"
|
||||
|
||||
#: messages.go:179
|
||||
#: messages.go:191
|
||||
#, c-format
|
||||
msgid "Moving files from %s"
|
||||
msgstr "Spostamento dei file da %s in corso"
|
||||
|
||||
#: messages.go:180
|
||||
#: messages.go:192
|
||||
#, c-format
|
||||
msgid "Copying files from %s"
|
||||
msgstr "Copia dei file da %s in corso"
|
||||
|
||||
#: messages.go:181
|
||||
#: messages.go:193
|
||||
msgid "Labels deleted"
|
||||
msgstr "Etichette eliminate"
|
||||
|
||||
#: messages.go:182
|
||||
#: messages.go:194
|
||||
msgid "Label saved"
|
||||
msgstr "Etichetta salvata"
|
||||
|
||||
#: messages.go:183
|
||||
#: messages.go:195
|
||||
msgid "Subject saved"
|
||||
msgstr "Soggetto salvato"
|
||||
|
||||
#: messages.go:184
|
||||
#: messages.go:196
|
||||
msgid "Subject deleted"
|
||||
msgstr "Soggetto cancellato"
|
||||
|
||||
#: messages.go:185
|
||||
#: messages.go:197
|
||||
msgid "Person saved"
|
||||
msgstr "Persona salvata"
|
||||
|
||||
#: messages.go:186
|
||||
#: messages.go:198
|
||||
msgid "Person deleted"
|
||||
msgstr "Persona cancellata"
|
||||
|
||||
#: messages.go:187
|
||||
#: messages.go:199
|
||||
msgid "File uploaded"
|
||||
msgstr "File caricato"
|
||||
|
||||
#: messages.go:188
|
||||
#: messages.go:200
|
||||
#, c-format
|
||||
msgid "%d files uploaded in %d s"
|
||||
msgstr "%d file caricati in %d secondi"
|
||||
|
||||
#: messages.go:189
|
||||
#: messages.go:201
|
||||
msgid "Processing upload..."
|
||||
msgstr "Elaborazione del caricamento..."
|
||||
|
||||
#: messages.go:190
|
||||
#: messages.go:202
|
||||
msgid "Upload has been processed"
|
||||
msgstr "Il caricamento è stato elaborato"
|
||||
|
||||
#: messages.go:191
|
||||
#: messages.go:203
|
||||
msgid "Selection approved"
|
||||
msgstr "Selezione approvata"
|
||||
|
||||
#: messages.go:192
|
||||
#: messages.go:204
|
||||
msgid "Selection archived"
|
||||
msgstr "Selezione archiviata"
|
||||
|
||||
#: messages.go:193
|
||||
#: messages.go:205
|
||||
msgid "Selection restored"
|
||||
msgstr "Selezione ripristinata"
|
||||
|
||||
#: messages.go:194
|
||||
#: messages.go:206
|
||||
msgid "Selection marked as private"
|
||||
msgstr "Selezione impostata come privata"
|
||||
|
||||
#: messages.go:195
|
||||
#: messages.go:207
|
||||
msgid "Albums deleted"
|
||||
msgstr "Album eliminati"
|
||||
|
||||
#: messages.go:196
|
||||
#: messages.go:208
|
||||
#, c-format
|
||||
msgid "Zip created in %d s"
|
||||
msgstr "Zip creato in %d secondi"
|
||||
|
||||
#: messages.go:197
|
||||
#: messages.go:209
|
||||
msgid "Permanently deleted"
|
||||
msgstr "Eliminato permanentemente"
|
||||
|
||||
#: messages.go:198
|
||||
#: messages.go:210
|
||||
#, c-format
|
||||
msgid "%s has been restored"
|
||||
msgstr "%s è stato ripristinato"
|
||||
|
||||
#: messages.go:199
|
||||
#: messages.go:211
|
||||
msgid "Successfully verified"
|
||||
msgstr "Verifica avvenuta con successo"
|
||||
|
||||
#: messages.go:200
|
||||
#: messages.go:212
|
||||
msgid "Successfully activated"
|
||||
msgstr "Attivazione avvenuta con successo"
|
||||
|
||||
|
|
|
|||
|
|
@ -2,8 +2,8 @@ msgid ""
|
|||
msgstr ""
|
||||
"Project-Id-Version: \n"
|
||||
"Report-Msgid-Bugs-To: \n"
|
||||
"POT-Creation-Date: 2025-10-17 17:32+0000\n"
|
||||
"PO-Revision-Date: 2025-10-22 08:25+0000\n"
|
||||
"POT-Creation-Date: 2026-06-27 09:13+0000\n"
|
||||
"PO-Revision-Date: 2026-06-27 10:28+0000\n"
|
||||
"Last-Translator: DeepL <noreply-mt-deepl@weblate.org>\n"
|
||||
"Language-Team: Japanese <https://translate.photoprism.app/projects/"
|
||||
"photoprism/backend/ja/>\n"
|
||||
|
|
@ -12,402 +12,418 @@ msgstr ""
|
|||
"Content-Type: text/plain; charset=UTF-8\n"
|
||||
"Content-Transfer-Encoding: 8bit\n"
|
||||
"Plural-Forms: nplurals=1; plural=0;\n"
|
||||
"X-Generator: Weblate 5.13.3\n"
|
||||
"X-Generator: Weblate 2026.5\n"
|
||||
|
||||
#: messages.go:104
|
||||
#: messages.go:112
|
||||
msgid "Something went wrong, try again"
|
||||
msgstr "何かが間違っています。もう一度やり直してください"
|
||||
|
||||
#: messages.go:105
|
||||
#: messages.go:113
|
||||
msgid "Unable to do that"
|
||||
msgstr "その操作はできません"
|
||||
|
||||
#: messages.go:106
|
||||
#: messages.go:114
|
||||
msgid "Changes could not be saved"
|
||||
msgstr "変更を保存できませんでした"
|
||||
|
||||
#: messages.go:107
|
||||
#: messages.go:115
|
||||
msgid "Could not be deleted"
|
||||
msgstr "削除できませんでした"
|
||||
|
||||
#: messages.go:108
|
||||
#: messages.go:116
|
||||
#, c-format
|
||||
msgid "%s already exists"
|
||||
msgstr "%s は既に存在します"
|
||||
|
||||
#: messages.go:109
|
||||
#: messages.go:117
|
||||
msgid "Not found"
|
||||
msgstr "見つかりませんでした"
|
||||
|
||||
#: messages.go:110
|
||||
#: messages.go:118
|
||||
msgid "File not found"
|
||||
msgstr "ファイルが見つかりませんでした"
|
||||
|
||||
#: messages.go:111
|
||||
#: messages.go:119
|
||||
msgid "File too large"
|
||||
msgstr "ファイルが大きすぎます"
|
||||
|
||||
#: messages.go:112
|
||||
#: messages.go:120
|
||||
msgid "Unsupported"
|
||||
msgstr "サポートされていません"
|
||||
|
||||
#: messages.go:113
|
||||
#: messages.go:121
|
||||
msgid "Unsupported type"
|
||||
msgstr "サポートされていない形式です"
|
||||
|
||||
#: messages.go:114
|
||||
#: messages.go:122
|
||||
msgid "Unsupported format"
|
||||
msgstr "非対応のフォーマットです"
|
||||
|
||||
#: messages.go:115
|
||||
#: messages.go:123
|
||||
msgid "Originals folder is empty"
|
||||
msgstr "Originals フォルダーは空です"
|
||||
|
||||
#: messages.go:116
|
||||
#: messages.go:124
|
||||
msgid "Selection not found"
|
||||
msgstr "選択した項目は存在しません"
|
||||
|
||||
#: messages.go:117
|
||||
#: messages.go:125
|
||||
msgid "Entity not found"
|
||||
msgstr "エンティティが見つかりません"
|
||||
|
||||
#: messages.go:118
|
||||
#: messages.go:126
|
||||
msgid "Account not found"
|
||||
msgstr "アカウントが存在しません"
|
||||
|
||||
#: messages.go:119
|
||||
#: messages.go:127
|
||||
msgid "User not found"
|
||||
msgstr "ユーザーが存在しません"
|
||||
|
||||
#: messages.go:120
|
||||
#: messages.go:128
|
||||
msgid "Label not found"
|
||||
msgstr "ラベルが存在しません"
|
||||
|
||||
#: messages.go:121
|
||||
#: messages.go:129
|
||||
msgid "Camera not found"
|
||||
msgstr "カメラが見つかりません"
|
||||
|
||||
#: messages.go:130
|
||||
msgid "Lens not found"
|
||||
msgstr "レンズが見つからない"
|
||||
|
||||
#: messages.go:131
|
||||
msgid "Album not found"
|
||||
msgstr "アルバムが存在しません"
|
||||
|
||||
#: messages.go:122
|
||||
#: messages.go:132
|
||||
msgid "Subject not found"
|
||||
msgstr "件名が見つかりません"
|
||||
|
||||
#: messages.go:123
|
||||
#: messages.go:133
|
||||
msgid "Person not found"
|
||||
msgstr "人が見つかりません"
|
||||
|
||||
#: messages.go:124
|
||||
#: messages.go:134
|
||||
msgid "Face not found"
|
||||
msgstr "顔を検出できませんでした"
|
||||
|
||||
#: messages.go:125
|
||||
#: messages.go:135
|
||||
msgid "Not available in public mode"
|
||||
msgstr "公開モードでは利用できません"
|
||||
|
||||
#: messages.go:126
|
||||
#: messages.go:136
|
||||
msgid "Not available in read-only mode"
|
||||
msgstr "読み込み専用モードでは利用できません"
|
||||
|
||||
#: messages.go:127
|
||||
#: messages.go:137
|
||||
msgid "Please log in to your account"
|
||||
msgstr "アカウントにログインしてください"
|
||||
|
||||
#: messages.go:128
|
||||
#: messages.go:138
|
||||
msgid "Permission denied"
|
||||
msgstr "アクセスが拒否されました"
|
||||
|
||||
#: messages.go:129
|
||||
#: messages.go:139
|
||||
msgid "Payment required"
|
||||
msgstr "要支払い"
|
||||
|
||||
#: messages.go:130
|
||||
#: messages.go:140
|
||||
msgid "Upload might be offensive"
|
||||
msgstr "アップロードされた項目に過激なものが含まれている可能性があります"
|
||||
|
||||
#: messages.go:131
|
||||
#: messages.go:141
|
||||
msgid "Upload failed"
|
||||
msgstr "アップロードに失敗しました"
|
||||
|
||||
#: messages.go:132
|
||||
#: messages.go:142
|
||||
msgid "No items selected"
|
||||
msgstr "項目が選択されていません"
|
||||
|
||||
#: messages.go:133
|
||||
#: messages.go:143
|
||||
msgid "Failed creating file, please check permissions"
|
||||
msgstr "ファイルの作成に失敗しました。権限を確認してください"
|
||||
|
||||
#: messages.go:134
|
||||
#: messages.go:144
|
||||
msgid "Failed creating folder, please check permissions"
|
||||
msgstr "フォルダの作成に失敗しました。権限を確認してください"
|
||||
|
||||
#: messages.go:135
|
||||
#: messages.go:145
|
||||
msgid "Could not connect, please try again"
|
||||
msgstr "接続できませんでした。もう一度お試しください"
|
||||
|
||||
#: messages.go:136
|
||||
#: messages.go:146
|
||||
msgid "Enter verification code"
|
||||
msgstr "認証コードを入力してください"
|
||||
|
||||
#: messages.go:137
|
||||
#: messages.go:147
|
||||
msgid "Invalid verification code, please try again"
|
||||
msgstr "認証コードが無効です。もう一度お試しください"
|
||||
|
||||
#: messages.go:138
|
||||
#: messages.go:148
|
||||
msgid "Invalid password, please try again"
|
||||
msgstr "不正なパスワードです。もう一度お試しください"
|
||||
|
||||
#: messages.go:139
|
||||
#: messages.go:149
|
||||
msgid "Feature disabled"
|
||||
msgstr "機能が無効になりました"
|
||||
|
||||
#: messages.go:140
|
||||
#: messages.go:150
|
||||
msgid "No labels selected"
|
||||
msgstr "ラベルが選択されていません"
|
||||
|
||||
#: messages.go:141
|
||||
#: messages.go:151
|
||||
msgid "No albums selected"
|
||||
msgstr "アルバムが選択されていません"
|
||||
|
||||
#: messages.go:142
|
||||
#: messages.go:152
|
||||
msgid "No files available for download"
|
||||
msgstr "ダウンロードできるファイルはありません"
|
||||
|
||||
#: messages.go:143
|
||||
#: messages.go:153
|
||||
msgid "Failed to create zip file"
|
||||
msgstr "zip ファイルの作成に失敗しました"
|
||||
|
||||
#: messages.go:144
|
||||
#: messages.go:154
|
||||
msgid "Invalid credentials"
|
||||
msgstr "正しくない認証情報です"
|
||||
|
||||
#: messages.go:145
|
||||
#: messages.go:155
|
||||
msgid "Invalid link"
|
||||
msgstr "正しくないリンクです"
|
||||
|
||||
#: messages.go:146
|
||||
#: messages.go:156
|
||||
msgid "Invalid name"
|
||||
msgstr "無効な名前です"
|
||||
|
||||
#: messages.go:147
|
||||
#: messages.go:157
|
||||
msgid "Busy, please try again later"
|
||||
msgstr "他の処理中です。後で再試行してください"
|
||||
|
||||
#: messages.go:148
|
||||
#: messages.go:158
|
||||
#, c-format
|
||||
msgid "The wakeup interval is %s, but must be 1h or less"
|
||||
msgstr "ウェイクアップ間隔は %s ですが、1時間以内で指定する必要があります"
|
||||
|
||||
#: messages.go:149
|
||||
#: messages.go:159
|
||||
msgid "Your account could not be connected"
|
||||
msgstr "アカウントに接続できませんでした"
|
||||
|
||||
#: messages.go:150
|
||||
#: messages.go:160
|
||||
msgid "Too many requests"
|
||||
msgstr "リクエストが多すぎます"
|
||||
|
||||
#: messages.go:151
|
||||
#: messages.go:161
|
||||
msgid "Insufficient storage"
|
||||
msgstr "ストレージが不足しています"
|
||||
|
||||
#: messages.go:152
|
||||
#: messages.go:162
|
||||
msgid "Quota exceeded"
|
||||
msgstr "ノルマ超過"
|
||||
|
||||
#: messages.go:155
|
||||
#: messages.go:163
|
||||
msgid "Registration disabled"
|
||||
msgstr "登録が無効になっている"
|
||||
|
||||
#: messages.go:164
|
||||
msgid "Verified email required"
|
||||
msgstr "確認済みのメールアドレスが必要だ"
|
||||
|
||||
#: messages.go:167
|
||||
msgid "Changes successfully saved"
|
||||
msgstr "変更が正常に保存されました"
|
||||
|
||||
#: messages.go:156
|
||||
#: messages.go:168
|
||||
msgid "Album created"
|
||||
msgstr "アルバムが作成されました"
|
||||
|
||||
#: messages.go:157
|
||||
#: messages.go:169
|
||||
msgid "Album saved"
|
||||
msgstr "アルバムが保存されました"
|
||||
|
||||
#: messages.go:158
|
||||
#: messages.go:170
|
||||
#, c-format
|
||||
msgid "Album %s deleted"
|
||||
msgstr "アルバム %s が削除されました"
|
||||
|
||||
#: messages.go:159
|
||||
#: messages.go:171
|
||||
msgid "Album contents cloned"
|
||||
msgstr "アルバムの内容が複製されました"
|
||||
|
||||
#: messages.go:160
|
||||
#: messages.go:172
|
||||
msgid "File removed from stack"
|
||||
msgstr "スタックからファイルが削除されました"
|
||||
|
||||
#: messages.go:161
|
||||
#: messages.go:173
|
||||
msgid "File deleted"
|
||||
msgstr "ファイルが削除されました"
|
||||
|
||||
#: messages.go:162
|
||||
#: messages.go:174
|
||||
#, c-format
|
||||
msgid "Selection added to %s"
|
||||
msgstr "選択した項目が %s に追加されました"
|
||||
|
||||
#: messages.go:163
|
||||
#: messages.go:175
|
||||
#, c-format
|
||||
msgid "One entry added to %s"
|
||||
msgstr "1 件の項目が %s に追加されました"
|
||||
|
||||
#: messages.go:164
|
||||
#: messages.go:176
|
||||
#, c-format
|
||||
msgid "%d entries added to %s"
|
||||
msgstr "%d 件の項目が %s に追加されました"
|
||||
|
||||
#: messages.go:165
|
||||
#: messages.go:177
|
||||
#, c-format
|
||||
msgid "One entry removed from %s"
|
||||
msgstr "1 件の項目が %s から削除されました"
|
||||
|
||||
#: messages.go:166
|
||||
#: messages.go:178
|
||||
#, c-format
|
||||
msgid "%d entries removed from %s"
|
||||
msgstr "%d 件の項目が %s から削除されました"
|
||||
|
||||
#: messages.go:167
|
||||
#: messages.go:179
|
||||
msgid "Account created"
|
||||
msgstr "アカウントが作成されました"
|
||||
|
||||
#: messages.go:168
|
||||
#: messages.go:180
|
||||
msgid "Account saved"
|
||||
msgstr "アカウントが保存されました"
|
||||
|
||||
#: messages.go:169
|
||||
#: messages.go:181
|
||||
msgid "Account deleted"
|
||||
msgstr "アカウントが削除されました"
|
||||
|
||||
#: messages.go:170
|
||||
#: messages.go:182
|
||||
msgid "Settings saved"
|
||||
msgstr "設定が保存されました"
|
||||
|
||||
#: messages.go:171
|
||||
#: messages.go:183
|
||||
msgid "Password changed"
|
||||
msgstr "パスワードが変更されました"
|
||||
|
||||
#: messages.go:172
|
||||
#: messages.go:184
|
||||
#, c-format
|
||||
msgid "Import completed in %d s"
|
||||
msgstr "インポートが %d 秒で完了しました"
|
||||
|
||||
#: messages.go:173
|
||||
#: messages.go:185
|
||||
msgid "Import canceled"
|
||||
msgstr "インポートが取り消されました"
|
||||
|
||||
#: messages.go:174
|
||||
#: messages.go:186
|
||||
#, c-format
|
||||
msgid "Indexing completed in %d s"
|
||||
msgstr "インデックスが %d 秒で完了しました"
|
||||
|
||||
#: messages.go:175
|
||||
#: messages.go:187
|
||||
msgid "Indexing originals..."
|
||||
msgstr "originals をインデックスしています..."
|
||||
|
||||
#: messages.go:176
|
||||
#: messages.go:188
|
||||
#, c-format
|
||||
msgid "Indexing files in %s"
|
||||
msgstr "%s 内のファイルをインデックスしています"
|
||||
|
||||
#: messages.go:177
|
||||
#: messages.go:189
|
||||
msgid "Indexing canceled"
|
||||
msgstr "インデックスが取り消されました"
|
||||
|
||||
#: messages.go:178
|
||||
#: messages.go:190
|
||||
#, c-format
|
||||
msgid "Removed %d files and %d photos"
|
||||
msgstr "%d 件のファイルと %d 件の写真が削除されました"
|
||||
|
||||
#: messages.go:179
|
||||
#: messages.go:191
|
||||
#, c-format
|
||||
msgid "Moving files from %s"
|
||||
msgstr "%s からファイルを移動しています"
|
||||
|
||||
#: messages.go:180
|
||||
#: messages.go:192
|
||||
#, c-format
|
||||
msgid "Copying files from %s"
|
||||
msgstr "%s からファイルをコピーしています"
|
||||
|
||||
#: messages.go:181
|
||||
#: messages.go:193
|
||||
msgid "Labels deleted"
|
||||
msgstr "ラベルが削除されました"
|
||||
|
||||
#: messages.go:182
|
||||
#: messages.go:194
|
||||
msgid "Label saved"
|
||||
msgstr "ラベルが保存されました"
|
||||
|
||||
#: messages.go:183
|
||||
#: messages.go:195
|
||||
msgid "Subject saved"
|
||||
msgstr "保存対象"
|
||||
|
||||
#: messages.go:184
|
||||
#: messages.go:196
|
||||
msgid "Subject deleted"
|
||||
msgstr "件名を削除しました"
|
||||
|
||||
#: messages.go:185
|
||||
#: messages.go:197
|
||||
msgid "Person saved"
|
||||
msgstr "保存された人"
|
||||
|
||||
#: messages.go:186
|
||||
#: messages.go:198
|
||||
msgid "Person deleted"
|
||||
msgstr "人を削除しました"
|
||||
|
||||
#: messages.go:187
|
||||
#: messages.go:199
|
||||
msgid "File uploaded"
|
||||
msgstr "ファイルがアップロードされました"
|
||||
|
||||
#: messages.go:188
|
||||
#: messages.go:200
|
||||
#, c-format
|
||||
msgid "%d files uploaded in %d s"
|
||||
msgstr "%d 件のファイルを %d 秒でアップロードしました"
|
||||
|
||||
#: messages.go:189
|
||||
#: messages.go:201
|
||||
msgid "Processing upload..."
|
||||
msgstr "アップロードの処理..."
|
||||
|
||||
#: messages.go:190
|
||||
#: messages.go:202
|
||||
msgid "Upload has been processed"
|
||||
msgstr "アップロードが完了しました"
|
||||
|
||||
#: messages.go:191
|
||||
#: messages.go:203
|
||||
msgid "Selection approved"
|
||||
msgstr "選択した項目が承認されました"
|
||||
|
||||
#: messages.go:192
|
||||
#: messages.go:204
|
||||
msgid "Selection archived"
|
||||
msgstr "選択した項目がアーカイブされました"
|
||||
|
||||
#: messages.go:193
|
||||
#: messages.go:205
|
||||
msgid "Selection restored"
|
||||
msgstr "選択した項目が復元されました"
|
||||
|
||||
#: messages.go:194
|
||||
#: messages.go:206
|
||||
msgid "Selection marked as private"
|
||||
msgstr "選択した項目がプライベートに設定されました"
|
||||
|
||||
#: messages.go:195
|
||||
#: messages.go:207
|
||||
msgid "Albums deleted"
|
||||
msgstr "アルバムが削除されました"
|
||||
|
||||
#: messages.go:196
|
||||
#: messages.go:208
|
||||
#, c-format
|
||||
msgid "Zip created in %d s"
|
||||
msgstr "%d 秒で zip ファイルを作成しました"
|
||||
|
||||
#: messages.go:197
|
||||
#: messages.go:209
|
||||
msgid "Permanently deleted"
|
||||
msgstr "完全に削除されました"
|
||||
|
||||
#: messages.go:198
|
||||
#: messages.go:210
|
||||
#, c-format
|
||||
msgid "%s has been restored"
|
||||
msgstr "%s が復元されました"
|
||||
|
||||
#: messages.go:199
|
||||
#: messages.go:211
|
||||
msgid "Successfully verified"
|
||||
msgstr "検証に成功しました"
|
||||
|
||||
#: messages.go:200
|
||||
#: messages.go:212
|
||||
msgid "Successfully activated"
|
||||
msgstr "正常に有効化されました"
|
||||
|
||||
|
|
|
|||
|
|
@ -2,8 +2,8 @@ msgid ""
|
|||
msgstr ""
|
||||
"Project-Id-Version: \n"
|
||||
"Report-Msgid-Bugs-To: \n"
|
||||
"POT-Creation-Date: 2025-10-17 17:32+0000\n"
|
||||
"PO-Revision-Date: 2025-10-22 08:25+0000\n"
|
||||
"POT-Creation-Date: 2026-06-27 09:13+0000\n"
|
||||
"PO-Revision-Date: 2026-06-27 10:28+0000\n"
|
||||
"Last-Translator: DeepL <noreply-mt-deepl@weblate.org>\n"
|
||||
"Language-Team: Korean <https://translate.photoprism.app/projects/photoprism/"
|
||||
"backend/ko/>\n"
|
||||
|
|
@ -12,402 +12,418 @@ msgstr ""
|
|||
"Content-Type: text/plain; charset=UTF-8\n"
|
||||
"Content-Transfer-Encoding: 8bit\n"
|
||||
"Plural-Forms: nplurals=1; plural=0;\n"
|
||||
"X-Generator: Weblate 5.13.3\n"
|
||||
"X-Generator: Weblate 2026.5\n"
|
||||
|
||||
#: messages.go:104
|
||||
#: messages.go:112
|
||||
msgid "Something went wrong, try again"
|
||||
msgstr "문제가 발생했습니다. 다시 시도하세요."
|
||||
|
||||
#: messages.go:105
|
||||
#: messages.go:113
|
||||
msgid "Unable to do that"
|
||||
msgstr "그렇게 할 수 없습니다."
|
||||
|
||||
#: messages.go:106
|
||||
#: messages.go:114
|
||||
msgid "Changes could not be saved"
|
||||
msgstr "변경 사항을 저장할 수 없음"
|
||||
|
||||
#: messages.go:107
|
||||
#: messages.go:115
|
||||
msgid "Could not be deleted"
|
||||
msgstr "삭제할 수 없음"
|
||||
|
||||
#: messages.go:108
|
||||
#: messages.go:116
|
||||
#, c-format
|
||||
msgid "%s already exists"
|
||||
msgstr "%s가 이미 존재함"
|
||||
|
||||
#: messages.go:109
|
||||
#: messages.go:117
|
||||
msgid "Not found"
|
||||
msgstr "찾을 수 없음"
|
||||
|
||||
#: messages.go:110
|
||||
#: messages.go:118
|
||||
msgid "File not found"
|
||||
msgstr "파일을 찾을 수 없음"
|
||||
|
||||
#: messages.go:111
|
||||
#: messages.go:119
|
||||
msgid "File too large"
|
||||
msgstr "파일이 너무 큽니다"
|
||||
|
||||
#: messages.go:112
|
||||
#: messages.go:120
|
||||
msgid "Unsupported"
|
||||
msgstr "지원되지 않음"
|
||||
|
||||
#: messages.go:113
|
||||
#: messages.go:121
|
||||
msgid "Unsupported type"
|
||||
msgstr "지원되지 않는 유형"
|
||||
|
||||
#: messages.go:114
|
||||
#: messages.go:122
|
||||
msgid "Unsupported format"
|
||||
msgstr "지원되지 않는 형식"
|
||||
|
||||
#: messages.go:115
|
||||
#: messages.go:123
|
||||
msgid "Originals folder is empty"
|
||||
msgstr "원본 폴더가 비어 있습니다"
|
||||
|
||||
#: messages.go:116
|
||||
#: messages.go:124
|
||||
msgid "Selection not found"
|
||||
msgstr "선택 항목을 찾을 수 없음"
|
||||
|
||||
#: messages.go:117
|
||||
#: messages.go:125
|
||||
msgid "Entity not found"
|
||||
msgstr "항목을 찾을 수 없음"
|
||||
|
||||
#: messages.go:118
|
||||
#: messages.go:126
|
||||
msgid "Account not found"
|
||||
msgstr "계정을 찾을 수 없음"
|
||||
|
||||
#: messages.go:119
|
||||
#: messages.go:127
|
||||
msgid "User not found"
|
||||
msgstr "사용자를 찾을 수 없음"
|
||||
|
||||
#: messages.go:120
|
||||
#: messages.go:128
|
||||
msgid "Label not found"
|
||||
msgstr "라벨을 찾을 수 없음"
|
||||
|
||||
#: messages.go:121
|
||||
#: messages.go:129
|
||||
msgid "Camera not found"
|
||||
msgstr "카메라를 찾을 수 없습니다"
|
||||
|
||||
#: messages.go:130
|
||||
msgid "Lens not found"
|
||||
msgstr "렌즈를 찾을 수 없습니다"
|
||||
|
||||
#: messages.go:131
|
||||
msgid "Album not found"
|
||||
msgstr "앨범을 찾을 수 없음"
|
||||
|
||||
#: messages.go:122
|
||||
#: messages.go:132
|
||||
msgid "Subject not found"
|
||||
msgstr "제목을 찾을 수 없음"
|
||||
|
||||
#: messages.go:123
|
||||
#: messages.go:133
|
||||
msgid "Person not found"
|
||||
msgstr "사람을 찾을 수 없음"
|
||||
|
||||
#: messages.go:124
|
||||
#: messages.go:134
|
||||
msgid "Face not found"
|
||||
msgstr "얼굴을 찾을 수 없음"
|
||||
|
||||
#: messages.go:125
|
||||
#: messages.go:135
|
||||
msgid "Not available in public mode"
|
||||
msgstr "공개 모드에서는 사용할 수 없음"
|
||||
|
||||
#: messages.go:126
|
||||
#: messages.go:136
|
||||
msgid "Not available in read-only mode"
|
||||
msgstr "읽기 전용 모드에서는 사용할 수 없음"
|
||||
|
||||
#: messages.go:127
|
||||
#: messages.go:137
|
||||
msgid "Please log in to your account"
|
||||
msgstr "귀하의 계정에 로그인하십시오"
|
||||
|
||||
#: messages.go:128
|
||||
#: messages.go:138
|
||||
msgid "Permission denied"
|
||||
msgstr "권한이 없음"
|
||||
|
||||
#: messages.go:129
|
||||
#: messages.go:139
|
||||
msgid "Payment required"
|
||||
msgstr "결제 필요"
|
||||
|
||||
#: messages.go:130
|
||||
#: messages.go:140
|
||||
msgid "Upload might be offensive"
|
||||
msgstr "업로드가 불쾌할 수 있습니다"
|
||||
|
||||
#: messages.go:131
|
||||
#: messages.go:141
|
||||
msgid "Upload failed"
|
||||
msgstr "업로드 실패"
|
||||
|
||||
#: messages.go:132
|
||||
#: messages.go:142
|
||||
msgid "No items selected"
|
||||
msgstr "선택된 항목이 없습니다"
|
||||
|
||||
#: messages.go:133
|
||||
#: messages.go:143
|
||||
msgid "Failed creating file, please check permissions"
|
||||
msgstr "파일 생성에 실패했습니다. 권한을 확인하세요"
|
||||
|
||||
#: messages.go:134
|
||||
#: messages.go:144
|
||||
msgid "Failed creating folder, please check permissions"
|
||||
msgstr "폴더를 만들지 못했습니다. 권한을 확인하세요"
|
||||
|
||||
#: messages.go:135
|
||||
#: messages.go:145
|
||||
msgid "Could not connect, please try again"
|
||||
msgstr "연결할 수 없습니다. 다시 시도해 주세요"
|
||||
|
||||
#: messages.go:136
|
||||
#: messages.go:146
|
||||
msgid "Enter verification code"
|
||||
msgstr "인증코드를 입력하세요"
|
||||
|
||||
#: messages.go:137
|
||||
#: messages.go:147
|
||||
msgid "Invalid verification code, please try again"
|
||||
msgstr "잘못된 인증 코드입니다. 다시 시도해 주세요."
|
||||
|
||||
#: messages.go:138
|
||||
#: messages.go:148
|
||||
msgid "Invalid password, please try again"
|
||||
msgstr "비밀번호가 잘못되었습니다. 다시 시도해 주세요"
|
||||
|
||||
#: messages.go:139
|
||||
#: messages.go:149
|
||||
msgid "Feature disabled"
|
||||
msgstr "기능 비활성화됨"
|
||||
|
||||
#: messages.go:140
|
||||
#: messages.go:150
|
||||
msgid "No labels selected"
|
||||
msgstr "선택한 라벨이 없습니다"
|
||||
|
||||
#: messages.go:141
|
||||
#: messages.go:151
|
||||
msgid "No albums selected"
|
||||
msgstr "앨범이 선택되지 않았습니다"
|
||||
|
||||
#: messages.go:142
|
||||
#: messages.go:152
|
||||
msgid "No files available for download"
|
||||
msgstr "다운로드할 수 있는 파일이 없습니다"
|
||||
|
||||
#: messages.go:143
|
||||
#: messages.go:153
|
||||
msgid "Failed to create zip file"
|
||||
msgstr "zip 파일 생성 실패"
|
||||
|
||||
#: messages.go:144
|
||||
#: messages.go:154
|
||||
msgid "Invalid credentials"
|
||||
msgstr "잘못된 자격 증명"
|
||||
|
||||
#: messages.go:145
|
||||
#: messages.go:155
|
||||
msgid "Invalid link"
|
||||
msgstr "유효하지 않은 링크입니다"
|
||||
|
||||
#: messages.go:146
|
||||
#: messages.go:156
|
||||
msgid "Invalid name"
|
||||
msgstr "잘못된 이름"
|
||||
|
||||
#: messages.go:147
|
||||
#: messages.go:157
|
||||
msgid "Busy, please try again later"
|
||||
msgstr "바쁘니 나중에 다시 시도해 주세요"
|
||||
|
||||
#: messages.go:148
|
||||
#: messages.go:158
|
||||
#, c-format
|
||||
msgid "The wakeup interval is %s, but must be 1h or less"
|
||||
msgstr "깨우기 간격은 %s이지만 1시간 이하여야 합니다"
|
||||
|
||||
#: messages.go:149
|
||||
#: messages.go:159
|
||||
msgid "Your account could not be connected"
|
||||
msgstr "계정을 연결할 수 없습니다"
|
||||
|
||||
#: messages.go:150
|
||||
#: messages.go:160
|
||||
msgid "Too many requests"
|
||||
msgstr "너무 많은 요청"
|
||||
|
||||
#: messages.go:151
|
||||
#: messages.go:161
|
||||
msgid "Insufficient storage"
|
||||
msgstr "저장 공간 부족"
|
||||
|
||||
#: messages.go:152
|
||||
#: messages.go:162
|
||||
msgid "Quota exceeded"
|
||||
msgstr "할당량 초과"
|
||||
|
||||
#: messages.go:155
|
||||
#: messages.go:163
|
||||
msgid "Registration disabled"
|
||||
msgstr "등록이 비활성화되었습니다."
|
||||
|
||||
#: messages.go:164
|
||||
msgid "Verified email required"
|
||||
msgstr "인증된 이메일 주소가 필요합니다"
|
||||
|
||||
#: messages.go:167
|
||||
msgid "Changes successfully saved"
|
||||
msgstr "변경사항이 성공적으로 저장되었습니다"
|
||||
|
||||
#: messages.go:156
|
||||
#: messages.go:168
|
||||
msgid "Album created"
|
||||
msgstr "앨범 생성됨"
|
||||
|
||||
#: messages.go:157
|
||||
#: messages.go:169
|
||||
msgid "Album saved"
|
||||
msgstr "앨범 저장됨"
|
||||
|
||||
#: messages.go:158
|
||||
#: messages.go:170
|
||||
#, c-format
|
||||
msgid "Album %s deleted"
|
||||
msgstr "앨범 %s이(가) 삭제됨"
|
||||
|
||||
#: messages.go:159
|
||||
#: messages.go:171
|
||||
msgid "Album contents cloned"
|
||||
msgstr "복제된 앨범 콘텐츠"
|
||||
|
||||
#: messages.go:160
|
||||
#: messages.go:172
|
||||
msgid "File removed from stack"
|
||||
msgstr "스택에서 제거된 파일"
|
||||
|
||||
#: messages.go:161
|
||||
#: messages.go:173
|
||||
msgid "File deleted"
|
||||
msgstr "파일이 삭제됨"
|
||||
|
||||
#: messages.go:162
|
||||
#: messages.go:174
|
||||
#, c-format
|
||||
msgid "Selection added to %s"
|
||||
msgstr "선택 항목이 %s에 추가됨"
|
||||
|
||||
#: messages.go:163
|
||||
#: messages.go:175
|
||||
#, c-format
|
||||
msgid "One entry added to %s"
|
||||
msgstr "%s에 항목 1개 추가됨"
|
||||
|
||||
#: messages.go:164
|
||||
#: messages.go:176
|
||||
#, c-format
|
||||
msgid "%d entries added to %s"
|
||||
msgstr "%d 항목이 %s에 추가됨"
|
||||
|
||||
#: messages.go:165
|
||||
#: messages.go:177
|
||||
#, c-format
|
||||
msgid "One entry removed from %s"
|
||||
msgstr "%s에서 항목 1개 삭제됨"
|
||||
|
||||
#: messages.go:166
|
||||
#: messages.go:178
|
||||
#, c-format
|
||||
msgid "%d entries removed from %s"
|
||||
msgstr "%d 항목이 %s에서 제거됨"
|
||||
|
||||
#: messages.go:167
|
||||
#: messages.go:179
|
||||
msgid "Account created"
|
||||
msgstr "계정 생성됨"
|
||||
|
||||
#: messages.go:168
|
||||
#: messages.go:180
|
||||
msgid "Account saved"
|
||||
msgstr "계정이 저장됨"
|
||||
|
||||
#: messages.go:169
|
||||
#: messages.go:181
|
||||
msgid "Account deleted"
|
||||
msgstr "계정 삭제됨"
|
||||
|
||||
#: messages.go:170
|
||||
#: messages.go:182
|
||||
msgid "Settings saved"
|
||||
msgstr "설정 저장됨"
|
||||
|
||||
#: messages.go:171
|
||||
#: messages.go:183
|
||||
msgid "Password changed"
|
||||
msgstr "비밀번호 변경됨"
|
||||
|
||||
#: messages.go:172
|
||||
#: messages.go:184
|
||||
#, c-format
|
||||
msgid "Import completed in %d s"
|
||||
msgstr "%d초 후에 가져오기 완료"
|
||||
|
||||
#: messages.go:173
|
||||
#: messages.go:185
|
||||
msgid "Import canceled"
|
||||
msgstr "가져오기 취소됨"
|
||||
|
||||
#: messages.go:174
|
||||
#: messages.go:186
|
||||
#, c-format
|
||||
msgid "Indexing completed in %d s"
|
||||
msgstr "%d초 후에 인덱싱 완료"
|
||||
|
||||
#: messages.go:175
|
||||
#: messages.go:187
|
||||
msgid "Indexing originals..."
|
||||
msgstr "원본 색인 생성 중..."
|
||||
|
||||
#: messages.go:176
|
||||
#: messages.go:188
|
||||
#, c-format
|
||||
msgid "Indexing files in %s"
|
||||
msgstr "%s에서 파일 색인 생성"
|
||||
|
||||
#: messages.go:177
|
||||
#: messages.go:189
|
||||
msgid "Indexing canceled"
|
||||
msgstr "인덱싱 취소됨"
|
||||
|
||||
#: messages.go:178
|
||||
#: messages.go:190
|
||||
#, c-format
|
||||
msgid "Removed %d files and %d photos"
|
||||
msgstr "파일 %d개와 사진 %d개를 삭제했습니다"
|
||||
|
||||
#: messages.go:179
|
||||
#: messages.go:191
|
||||
#, c-format
|
||||
msgid "Moving files from %s"
|
||||
msgstr "%s에서 파일 이동"
|
||||
|
||||
#: messages.go:180
|
||||
#: messages.go:192
|
||||
#, c-format
|
||||
msgid "Copying files from %s"
|
||||
msgstr "%s에서 파일 복사"
|
||||
|
||||
#: messages.go:181
|
||||
#: messages.go:193
|
||||
msgid "Labels deleted"
|
||||
msgstr "라벨 삭제됨"
|
||||
|
||||
#: messages.go:182
|
||||
#: messages.go:194
|
||||
msgid "Label saved"
|
||||
msgstr "라벨이 저장되었습니다"
|
||||
|
||||
#: messages.go:183
|
||||
#: messages.go:195
|
||||
msgid "Subject saved"
|
||||
msgstr "주제가 저장됨"
|
||||
|
||||
#: messages.go:184
|
||||
#: messages.go:196
|
||||
msgid "Subject deleted"
|
||||
msgstr "제목 삭제됨"
|
||||
|
||||
#: messages.go:185
|
||||
#: messages.go:197
|
||||
msgid "Person saved"
|
||||
msgstr "사람이 저장됨"
|
||||
|
||||
#: messages.go:186
|
||||
#: messages.go:198
|
||||
msgid "Person deleted"
|
||||
msgstr "삭제된 사람"
|
||||
|
||||
#: messages.go:187
|
||||
#: messages.go:199
|
||||
msgid "File uploaded"
|
||||
msgstr "업로드된 파일 1개"
|
||||
|
||||
#: messages.go:188
|
||||
#: messages.go:200
|
||||
#, c-format
|
||||
msgid "%d files uploaded in %d s"
|
||||
msgstr "%d개의 파일이 %d초에 업로드됨"
|
||||
|
||||
#: messages.go:189
|
||||
#: messages.go:201
|
||||
msgid "Processing upload..."
|
||||
msgstr "업로드 처리 중..."
|
||||
|
||||
#: messages.go:190
|
||||
#: messages.go:202
|
||||
msgid "Upload has been processed"
|
||||
msgstr "업로드가 처리되었습니다"
|
||||
|
||||
#: messages.go:191
|
||||
#: messages.go:203
|
||||
msgid "Selection approved"
|
||||
msgstr "선택 항목 승인됨"
|
||||
|
||||
#: messages.go:192
|
||||
#: messages.go:204
|
||||
msgid "Selection archived"
|
||||
msgstr "선택 항목 보관됨"
|
||||
|
||||
#: messages.go:193
|
||||
#: messages.go:205
|
||||
msgid "Selection restored"
|
||||
msgstr "선택 항목 복원됨"
|
||||
|
||||
#: messages.go:194
|
||||
#: messages.go:206
|
||||
msgid "Selection marked as private"
|
||||
msgstr "비공개로 표시된 선택"
|
||||
|
||||
#: messages.go:195
|
||||
#: messages.go:207
|
||||
msgid "Albums deleted"
|
||||
msgstr "앨범 삭제됨"
|
||||
|
||||
#: messages.go:196
|
||||
#: messages.go:208
|
||||
#, c-format
|
||||
msgid "Zip created in %d s"
|
||||
msgstr "%d초에 생성된 우편번호"
|
||||
|
||||
#: messages.go:197
|
||||
#: messages.go:209
|
||||
msgid "Permanently deleted"
|
||||
msgstr "영구 삭제됨"
|
||||
|
||||
#: messages.go:198
|
||||
#: messages.go:210
|
||||
#, c-format
|
||||
msgid "%s has been restored"
|
||||
msgstr "%s이(가) 복원되었습니다"
|
||||
|
||||
#: messages.go:199
|
||||
#: messages.go:211
|
||||
msgid "Successfully verified"
|
||||
msgstr "성공적으로 확인되었습니다"
|
||||
|
||||
#: messages.go:200
|
||||
#: messages.go:212
|
||||
msgid "Successfully activated"
|
||||
msgstr "성공적으로 활성화되었습니다"
|
||||
|
||||
|
|
|
|||
|
|
@ -2,8 +2,8 @@ msgid ""
|
|||
msgstr ""
|
||||
"Project-Id-Version: \n"
|
||||
"Report-Msgid-Bugs-To: \n"
|
||||
"POT-Creation-Date: 2025-10-17 17:32+0000\n"
|
||||
"PO-Revision-Date: 2025-10-22 08:25+0000\n"
|
||||
"POT-Creation-Date: 2026-06-27 09:13+0000\n"
|
||||
"PO-Revision-Date: 2026-06-27 10:28+0000\n"
|
||||
"Last-Translator: Google Cloud Translation Basic <noreply-mt-google-"
|
||||
"translate@weblate.org>\n"
|
||||
"Language-Team: Kurdish <https://translate.photoprism.app/projects/photoprism/"
|
||||
|
|
@ -13,402 +13,418 @@ msgstr ""
|
|||
"Content-Type: text/plain; charset=UTF-8\n"
|
||||
"Content-Transfer-Encoding: 8bit\n"
|
||||
"Plural-Forms: nplurals=2; plural=n != 1;\n"
|
||||
"X-Generator: Weblate 5.13.3\n"
|
||||
"X-Generator: Weblate 2026.5\n"
|
||||
|
||||
#: messages.go:104
|
||||
#: messages.go:112
|
||||
msgid "Something went wrong, try again"
|
||||
msgstr "Tiştek xelet derket, dîsa biceribîne"
|
||||
|
||||
#: messages.go:105
|
||||
#: messages.go:113
|
||||
msgid "Unable to do that"
|
||||
msgstr "Nikarin vê yekê bikin"
|
||||
|
||||
#: messages.go:106
|
||||
#: messages.go:114
|
||||
msgid "Changes could not be saved"
|
||||
msgstr "گۆڕانکاریەکان پاشەکەوت نەکراوە"
|
||||
|
||||
#: messages.go:107
|
||||
#: messages.go:115
|
||||
msgid "Could not be deleted"
|
||||
msgstr "نەتوانرا بسڕێتەوە"
|
||||
|
||||
#: messages.go:108
|
||||
#: messages.go:116
|
||||
#, c-format
|
||||
msgid "%s already exists"
|
||||
msgstr "%s پێشتر هەیە"
|
||||
|
||||
#: messages.go:109
|
||||
#: messages.go:117
|
||||
msgid "Not found"
|
||||
msgstr "نەدۆزرایەوە"
|
||||
|
||||
#: messages.go:110
|
||||
#: messages.go:118
|
||||
msgid "File not found"
|
||||
msgstr "دۆسیەکە نەدۆزرایەوە"
|
||||
|
||||
#: messages.go:111
|
||||
#: messages.go:119
|
||||
msgid "File too large"
|
||||
msgstr "Pelê pir mezin e"
|
||||
|
||||
#: messages.go:112
|
||||
#: messages.go:120
|
||||
msgid "Unsupported"
|
||||
msgstr "Piştgirî nekirin"
|
||||
|
||||
#: messages.go:113
|
||||
#: messages.go:121
|
||||
msgid "Unsupported type"
|
||||
msgstr "Cureyê ne piştgirî"
|
||||
|
||||
#: messages.go:114
|
||||
#: messages.go:122
|
||||
msgid "Unsupported format"
|
||||
msgstr "Format nayê destek kirin"
|
||||
|
||||
#: messages.go:115
|
||||
#: messages.go:123
|
||||
msgid "Originals folder is empty"
|
||||
msgstr "Peldanka orjînal vala ye"
|
||||
|
||||
#: messages.go:116
|
||||
#: messages.go:124
|
||||
msgid "Selection not found"
|
||||
msgstr "هەڵبژاردەکان نەدۆزرایەوە"
|
||||
|
||||
#: messages.go:117
|
||||
#: messages.go:125
|
||||
msgid "Entity not found"
|
||||
msgstr "هیچ ئەلبومێکی نەدۆزیوەتەوە"
|
||||
|
||||
#: messages.go:118
|
||||
#: messages.go:126
|
||||
msgid "Account not found"
|
||||
msgstr "هەژمارەکە نەدۆزرایەوە"
|
||||
|
||||
#: messages.go:119
|
||||
#: messages.go:127
|
||||
msgid "User not found"
|
||||
msgstr "بەکارهێنەرەکە نەدۆزرایەوە"
|
||||
|
||||
#: messages.go:120
|
||||
#: messages.go:128
|
||||
msgid "Label not found"
|
||||
msgstr "پێناسەکە نەدۆزرایەوە"
|
||||
|
||||
#: messages.go:121
|
||||
#: messages.go:129
|
||||
msgid "Camera not found"
|
||||
msgstr "Kamera nehat dîtin"
|
||||
|
||||
#: messages.go:130
|
||||
msgid "Lens not found"
|
||||
msgstr "Lens nehat dîtin"
|
||||
|
||||
#: messages.go:131
|
||||
msgid "Album not found"
|
||||
msgstr "ئەلبومەکە نەدۆزرایەوە"
|
||||
|
||||
#: messages.go:122
|
||||
#: messages.go:132
|
||||
msgid "Subject not found"
|
||||
msgstr "ناونیشان"
|
||||
|
||||
#: messages.go:123
|
||||
#: messages.go:133
|
||||
msgid "Person not found"
|
||||
msgstr "هیچ ئەلبومێکی نەدۆزیوەتەوە"
|
||||
|
||||
#: messages.go:124
|
||||
#: messages.go:134
|
||||
msgid "Face not found"
|
||||
msgstr "نەدۆزرایەوە"
|
||||
|
||||
#: messages.go:125
|
||||
#: messages.go:135
|
||||
msgid "Not available in public mode"
|
||||
msgstr "بەردەست نیە بۆ دۆخی گشتی"
|
||||
|
||||
#: messages.go:126
|
||||
#: messages.go:136
|
||||
msgid "Not available in read-only mode"
|
||||
msgstr "بەردەست نییە لە دۆخی تەنها-خوێندنەوە"
|
||||
|
||||
#: messages.go:127
|
||||
#: messages.go:137
|
||||
msgid "Please log in to your account"
|
||||
msgstr "تکایە تێپەڕبە پاشان هەوڵبدەرەوە"
|
||||
|
||||
#: messages.go:128
|
||||
#: messages.go:138
|
||||
msgid "Permission denied"
|
||||
msgstr "ئەلبومەکان سڕانەوە"
|
||||
|
||||
#: messages.go:129
|
||||
#: messages.go:139
|
||||
msgid "Payment required"
|
||||
msgstr "Pêdivî bi dravdanê heye"
|
||||
|
||||
#: messages.go:130
|
||||
#: messages.go:140
|
||||
msgid "Upload might be offensive"
|
||||
msgstr "بارکردن لەوانەیە سووکایەتی بێت"
|
||||
|
||||
#: messages.go:131
|
||||
#: messages.go:141
|
||||
msgid "Upload failed"
|
||||
msgstr "بارکردنەکە سەرکەوتوو نەبوو"
|
||||
|
||||
#: messages.go:132
|
||||
#: messages.go:142
|
||||
msgid "No items selected"
|
||||
msgstr "هیچ ئایتمێک دەستنیشان نەکراوە"
|
||||
|
||||
#: messages.go:133
|
||||
#: messages.go:143
|
||||
msgid "Failed creating file, please check permissions"
|
||||
msgstr "شکست لە دروستکردنی پەڕگە، تکایە مۆڵەتەکان بپشکنە"
|
||||
|
||||
#: messages.go:134
|
||||
#: messages.go:144
|
||||
msgid "Failed creating folder, please check permissions"
|
||||
msgstr "شکست لە دروستکردنی بوخچە، تکایە مۆڵەتەکان بپشکنە"
|
||||
|
||||
#: messages.go:135
|
||||
#: messages.go:145
|
||||
msgid "Could not connect, please try again"
|
||||
msgstr "نەیتوانی پەیوەندی بگرێت، تکایە دووبارە هەوڵ بدەوە"
|
||||
|
||||
#: messages.go:136
|
||||
#: messages.go:146
|
||||
msgid "Enter verification code"
|
||||
msgstr "Koda verastkirinê binivîse"
|
||||
|
||||
#: messages.go:137
|
||||
#: messages.go:147
|
||||
msgid "Invalid verification code, please try again"
|
||||
msgstr "Koda verastkirinê nederbasdar e, ji kerema xwe dîsa biceribîne"
|
||||
|
||||
#: messages.go:138
|
||||
#: messages.go:148
|
||||
msgid "Invalid password, please try again"
|
||||
msgstr "تێپەرەوشە هەڵەیە، تکایە جارێکی تر هەوڵبدەوە"
|
||||
|
||||
#: messages.go:139
|
||||
#: messages.go:149
|
||||
msgid "Feature disabled"
|
||||
msgstr "تایبەتمەندی ناچالاک کراوە"
|
||||
|
||||
#: messages.go:140
|
||||
#: messages.go:150
|
||||
msgid "No labels selected"
|
||||
msgstr "هیج لە پێناسەکان هەڵنەبژێردراوە"
|
||||
|
||||
#: messages.go:141
|
||||
#: messages.go:151
|
||||
msgid "No albums selected"
|
||||
msgstr "هیج لە ئەلبومەکان هەڵنەبژێردراوە"
|
||||
|
||||
#: messages.go:142
|
||||
#: messages.go:152
|
||||
msgid "No files available for download"
|
||||
msgstr "هیچ پەڕگەیەک ئامادە نیە بۆ داگرتن"
|
||||
|
||||
#: messages.go:143
|
||||
#: messages.go:153
|
||||
msgid "Failed to create zip file"
|
||||
msgstr "دروستکردنی فایلی زیپ سەرکەوتوو نەبوو"
|
||||
|
||||
#: messages.go:144
|
||||
#: messages.go:154
|
||||
msgid "Invalid credentials"
|
||||
msgstr "زانیارییەکان نادروستە"
|
||||
|
||||
#: messages.go:145
|
||||
#: messages.go:155
|
||||
msgid "Invalid link"
|
||||
msgstr "بەستەرەکە نادروستە"
|
||||
|
||||
#: messages.go:146
|
||||
#: messages.go:156
|
||||
msgid "Invalid name"
|
||||
msgstr "بەروارێکی نادروست"
|
||||
|
||||
#: messages.go:147
|
||||
#: messages.go:157
|
||||
msgid "Busy, please try again later"
|
||||
msgstr "تێپەرەوشە هەڵەیە، تکایە جارێکی تر هەوڵبدەوە"
|
||||
|
||||
#: messages.go:148
|
||||
#: messages.go:158
|
||||
#, c-format
|
||||
msgid "The wakeup interval is %s, but must be 1h or less"
|
||||
msgstr "Navbera hişyarbûnê %s ye, lê divê 1h an kêmtir be"
|
||||
|
||||
#: messages.go:149
|
||||
#: messages.go:159
|
||||
msgid "Your account could not be connected"
|
||||
msgstr "Hesabê te nehat girêdan"
|
||||
|
||||
#: messages.go:150
|
||||
#: messages.go:160
|
||||
msgid "Too many requests"
|
||||
msgstr "Pir daxwazî"
|
||||
|
||||
#: messages.go:151
|
||||
#: messages.go:161
|
||||
msgid "Insufficient storage"
|
||||
msgstr "Depo ne bes e"
|
||||
|
||||
#: messages.go:152
|
||||
#: messages.go:162
|
||||
msgid "Quota exceeded"
|
||||
msgstr "Kota derbas kir"
|
||||
|
||||
#: messages.go:155
|
||||
#: messages.go:163
|
||||
msgid "Registration disabled"
|
||||
msgstr "Qeydkirin neçalak e"
|
||||
|
||||
#: messages.go:164
|
||||
msgid "Verified email required"
|
||||
msgstr "E-nameya piştrastkirî pêwîst e"
|
||||
|
||||
#: messages.go:167
|
||||
msgid "Changes successfully saved"
|
||||
msgstr "گۆڕانکاریەکان سەرکەوتوانە پاشەکەوتکرا"
|
||||
|
||||
#: messages.go:156
|
||||
#: messages.go:168
|
||||
msgid "Album created"
|
||||
msgstr "ئەلبومەکە دروستکرا"
|
||||
|
||||
#: messages.go:157
|
||||
#: messages.go:169
|
||||
msgid "Album saved"
|
||||
msgstr "ئەلبومەکە پاشەکەوتکرا"
|
||||
|
||||
#: messages.go:158
|
||||
#: messages.go:170
|
||||
#, c-format
|
||||
msgid "Album %s deleted"
|
||||
msgstr "ئەلبومی %s سڕایەوە"
|
||||
|
||||
#: messages.go:159
|
||||
#: messages.go:171
|
||||
msgid "Album contents cloned"
|
||||
msgstr "ناوەڕۆکەکانی ئەلبومەکە هاووێنە کرا"
|
||||
|
||||
#: messages.go:160
|
||||
#: messages.go:172
|
||||
msgid "File removed from stack"
|
||||
msgstr "دۆسیەکە کۆژاوەتەوە لە کەڵەکەکە"
|
||||
|
||||
#: messages.go:161
|
||||
#: messages.go:173
|
||||
msgid "File deleted"
|
||||
msgstr "پەڕگە سڕایەوە"
|
||||
|
||||
#: messages.go:162
|
||||
#: messages.go:174
|
||||
#, c-format
|
||||
msgid "Selection added to %s"
|
||||
msgstr "دەستنیشان کراو زیادکرایە %s"
|
||||
|
||||
#: messages.go:163
|
||||
#: messages.go:175
|
||||
#, c-format
|
||||
msgid "One entry added to %s"
|
||||
msgstr "یەک تێکراو زیاد کرایە %s"
|
||||
|
||||
#: messages.go:164
|
||||
#: messages.go:176
|
||||
#, c-format
|
||||
msgid "%d entries added to %s"
|
||||
msgstr "%d تێکراو زیاد کرایە %s"
|
||||
|
||||
#: messages.go:165
|
||||
#: messages.go:177
|
||||
#, c-format
|
||||
msgid "One entry removed from %s"
|
||||
msgstr "یەک تێکراو لابرا لە %s"
|
||||
|
||||
#: messages.go:166
|
||||
#: messages.go:178
|
||||
#, c-format
|
||||
msgid "%d entries removed from %s"
|
||||
msgstr "%d تێکراو لابرا لە %s"
|
||||
|
||||
#: messages.go:167
|
||||
#: messages.go:179
|
||||
msgid "Account created"
|
||||
msgstr "هەژمارەکە دروستکرا"
|
||||
|
||||
#: messages.go:168
|
||||
#: messages.go:180
|
||||
msgid "Account saved"
|
||||
msgstr "هەژمارەکە پاشەکەوتکرا"
|
||||
|
||||
#: messages.go:169
|
||||
#: messages.go:181
|
||||
msgid "Account deleted"
|
||||
msgstr "هەژمارەکە سڕایەوە"
|
||||
|
||||
#: messages.go:170
|
||||
#: messages.go:182
|
||||
msgid "Settings saved"
|
||||
msgstr "ڕێکخستنەکان پاشەکەوتکرا"
|
||||
|
||||
#: messages.go:171
|
||||
#: messages.go:183
|
||||
msgid "Password changed"
|
||||
msgstr "تێپەڕەوشە گۆڕدرا"
|
||||
|
||||
#: messages.go:172
|
||||
#: messages.go:184
|
||||
#, c-format
|
||||
msgid "Import completed in %d s"
|
||||
msgstr "هاوردن تەواو بوو بە %d چرکە"
|
||||
|
||||
#: messages.go:173
|
||||
#: messages.go:185
|
||||
msgid "Import canceled"
|
||||
msgstr "هاوردن هەڵوەشێنرایەوە"
|
||||
|
||||
#: messages.go:174
|
||||
#: messages.go:186
|
||||
#, c-format
|
||||
msgid "Indexing completed in %d s"
|
||||
msgstr "نیشانە کردن تەواو بوو بە %d چرکە"
|
||||
|
||||
#: messages.go:175
|
||||
#: messages.go:187
|
||||
msgid "Indexing originals..."
|
||||
msgstr "نیشانەکردنی ڕەسەنەکان..."
|
||||
|
||||
#: messages.go:176
|
||||
#: messages.go:188
|
||||
#, c-format
|
||||
msgid "Indexing files in %s"
|
||||
msgstr "نیشانەکردنی پەڕگەکان لە %s"
|
||||
|
||||
#: messages.go:177
|
||||
#: messages.go:189
|
||||
msgid "Indexing canceled"
|
||||
msgstr "نیشانەکردن هەڵوەشێنرایەوە"
|
||||
|
||||
#: messages.go:178
|
||||
#: messages.go:190
|
||||
#, c-format
|
||||
msgid "Removed %d files and %d photos"
|
||||
msgstr "لابردنی %d پەڕگە و %d وێنە"
|
||||
|
||||
#: messages.go:179
|
||||
#: messages.go:191
|
||||
#, c-format
|
||||
msgid "Moving files from %s"
|
||||
msgstr "گواستنەوەی پەڕگە لە %s"
|
||||
|
||||
#: messages.go:180
|
||||
#: messages.go:192
|
||||
#, c-format
|
||||
msgid "Copying files from %s"
|
||||
msgstr "کۆپی کردنی پەڕگە لە%s"
|
||||
|
||||
#: messages.go:181
|
||||
#: messages.go:193
|
||||
msgid "Labels deleted"
|
||||
msgstr "پێناسەکان سڕانەوە"
|
||||
|
||||
#: messages.go:182
|
||||
#: messages.go:194
|
||||
msgid "Label saved"
|
||||
msgstr "پێناسەکە پاشەکەوتکرا"
|
||||
|
||||
#: messages.go:183
|
||||
#: messages.go:195
|
||||
msgid "Subject saved"
|
||||
msgstr "ناونیشان"
|
||||
|
||||
#: messages.go:184
|
||||
#: messages.go:196
|
||||
msgid "Subject deleted"
|
||||
msgstr "ناونیشان"
|
||||
|
||||
#: messages.go:185
|
||||
#: messages.go:197
|
||||
msgid "Person saved"
|
||||
msgstr "ڕێکخستنەکان پاشەکەوتکراو"
|
||||
|
||||
#: messages.go:186
|
||||
#: messages.go:198
|
||||
msgid "Person deleted"
|
||||
msgstr "ئەلبومەکان سڕانەوە"
|
||||
|
||||
#: messages.go:187
|
||||
#: messages.go:199
|
||||
msgid "File uploaded"
|
||||
msgstr "پەڕگە سڕایەوە"
|
||||
|
||||
#: messages.go:188
|
||||
#: messages.go:200
|
||||
#, c-format
|
||||
msgid "%d files uploaded in %d s"
|
||||
msgstr "%d پەڕگە بارکرە بە %d چرکە"
|
||||
|
||||
#: messages.go:189
|
||||
#: messages.go:201
|
||||
msgid "Processing upload..."
|
||||
msgstr "Pêvajoya barkirinê..."
|
||||
|
||||
#: messages.go:190
|
||||
#: messages.go:202
|
||||
msgid "Upload has been processed"
|
||||
msgstr "بارکردن لەوانەیە سووکایەتی بێت"
|
||||
|
||||
#: messages.go:191
|
||||
#: messages.go:203
|
||||
msgid "Selection approved"
|
||||
msgstr "دەستنیشان کراو پەسەند کرا"
|
||||
|
||||
#: messages.go:192
|
||||
#: messages.go:204
|
||||
msgid "Selection archived"
|
||||
msgstr "هەڵبژاردەکە ئەرشیفکرا"
|
||||
|
||||
#: messages.go:193
|
||||
#: messages.go:205
|
||||
msgid "Selection restored"
|
||||
msgstr "هەڵبژاردەکە دووبارەکۆگاکرایەوە"
|
||||
|
||||
#: messages.go:194
|
||||
#: messages.go:206
|
||||
msgid "Selection marked as private"
|
||||
msgstr "دەستنیشانکراوەکان کران بە تایبەتی"
|
||||
|
||||
#: messages.go:195
|
||||
#: messages.go:207
|
||||
msgid "Albums deleted"
|
||||
msgstr "ئەلبومەکان سڕایەوە"
|
||||
|
||||
#: messages.go:196
|
||||
#: messages.go:208
|
||||
#, c-format
|
||||
msgid "Zip created in %d s"
|
||||
msgstr "زیپ بە %d چرکە دروستکرا"
|
||||
|
||||
#: messages.go:197
|
||||
#: messages.go:209
|
||||
msgid "Permanently deleted"
|
||||
msgstr "بە هەمیشەیی سڕاوەتەوە"
|
||||
|
||||
#: messages.go:198
|
||||
#: messages.go:210
|
||||
#, c-format
|
||||
msgid "%s has been restored"
|
||||
msgstr "هەڵبژاردەکە دووبارەکۆگاکرایەوە"
|
||||
msgstr "%s دووبارە کۆگاکرایەوە"
|
||||
|
||||
#: messages.go:199
|
||||
#: messages.go:211
|
||||
msgid "Successfully verified"
|
||||
msgstr "Bi serketî verast kirin"
|
||||
|
||||
#: messages.go:200
|
||||
#: messages.go:212
|
||||
msgid "Successfully activated"
|
||||
msgstr "Bi serketî hate aktîfkirin"
|
||||
|
||||
|
|
|
|||
|
|
@ -2,8 +2,8 @@ msgid ""
|
|||
msgstr ""
|
||||
"Project-Id-Version: \n"
|
||||
"Report-Msgid-Bugs-To: \n"
|
||||
"POT-Creation-Date: 2025-10-17 17:32+0000\n"
|
||||
"PO-Revision-Date: 2025-10-22 08:25+0000\n"
|
||||
"POT-Creation-Date: 2026-06-27 09:13+0000\n"
|
||||
"PO-Revision-Date: 2026-06-27 10:28+0000\n"
|
||||
"Last-Translator: DeepL <noreply-mt-deepl@weblate.org>\n"
|
||||
"Language-Team: none\n"
|
||||
"Language: lt\n"
|
||||
|
|
@ -13,402 +13,418 @@ msgstr ""
|
|||
"Plural-Forms: nplurals=3; plural=(n % 10 == 1 && (n % 100 < 11 || n % 100 > "
|
||||
"19)) ? 0 : ((n % 10 >= 2 && n % 10 <= 9 && (n % 100 < 11 || n % 100 > 19)) ? "
|
||||
"1 : 2);\n"
|
||||
"X-Generator: Weblate 5.13.3\n"
|
||||
"X-Generator: Weblate 2026.5\n"
|
||||
|
||||
#: messages.go:104
|
||||
#: messages.go:112
|
||||
msgid "Something went wrong, try again"
|
||||
msgstr "Kažkas nepavyko, bandykite dar kartą"
|
||||
|
||||
#: messages.go:105
|
||||
#: messages.go:113
|
||||
msgid "Unable to do that"
|
||||
msgstr "Nepavyksta to padaryti"
|
||||
|
||||
#: messages.go:106
|
||||
#: messages.go:114
|
||||
msgid "Changes could not be saved"
|
||||
msgstr "Pakeitimų nepavyko išsaugoti"
|
||||
|
||||
#: messages.go:107
|
||||
#: messages.go:115
|
||||
msgid "Could not be deleted"
|
||||
msgstr "Negalima ištrinti"
|
||||
|
||||
#: messages.go:108
|
||||
#: messages.go:116
|
||||
#, c-format
|
||||
msgid "%s already exists"
|
||||
msgstr "%s jau egzistuoja"
|
||||
|
||||
#: messages.go:109
|
||||
#: messages.go:117
|
||||
msgid "Not found"
|
||||
msgstr "Nerasta"
|
||||
|
||||
#: messages.go:110
|
||||
#: messages.go:118
|
||||
msgid "File not found"
|
||||
msgstr "Failo rasti nepavyko"
|
||||
|
||||
#: messages.go:111
|
||||
#: messages.go:119
|
||||
msgid "File too large"
|
||||
msgstr "Per didelis failas"
|
||||
|
||||
#: messages.go:112
|
||||
#: messages.go:120
|
||||
msgid "Unsupported"
|
||||
msgstr "Nepalaikoma"
|
||||
|
||||
#: messages.go:113
|
||||
#: messages.go:121
|
||||
msgid "Unsupported type"
|
||||
msgstr "Nepalaikomas tipas"
|
||||
|
||||
#: messages.go:114
|
||||
#: messages.go:122
|
||||
msgid "Unsupported format"
|
||||
msgstr "Nepalaikomas formatas"
|
||||
|
||||
#: messages.go:115
|
||||
#: messages.go:123
|
||||
msgid "Originals folder is empty"
|
||||
msgstr "Originalų aplankas tuščias"
|
||||
|
||||
#: messages.go:116
|
||||
#: messages.go:124
|
||||
msgid "Selection not found"
|
||||
msgstr "Pasirinkimas nerastas"
|
||||
|
||||
#: messages.go:117
|
||||
#: messages.go:125
|
||||
msgid "Entity not found"
|
||||
msgstr "Subjektas nerastas"
|
||||
|
||||
#: messages.go:118
|
||||
#: messages.go:126
|
||||
msgid "Account not found"
|
||||
msgstr "Paskyra nerasta"
|
||||
|
||||
#: messages.go:119
|
||||
#: messages.go:127
|
||||
msgid "User not found"
|
||||
msgstr "Vartotojas nerastas"
|
||||
|
||||
#: messages.go:120
|
||||
#: messages.go:128
|
||||
msgid "Label not found"
|
||||
msgstr "Etiketė nerasta"
|
||||
|
||||
#: messages.go:121
|
||||
#: messages.go:129
|
||||
msgid "Camera not found"
|
||||
msgstr "Kameros nerasta"
|
||||
|
||||
#: messages.go:130
|
||||
msgid "Lens not found"
|
||||
msgstr "Objektyvas nerastas"
|
||||
|
||||
#: messages.go:131
|
||||
msgid "Album not found"
|
||||
msgstr "Albumas nerastas"
|
||||
|
||||
#: messages.go:122
|
||||
#: messages.go:132
|
||||
msgid "Subject not found"
|
||||
msgstr "Tema nerasta"
|
||||
|
||||
#: messages.go:123
|
||||
#: messages.go:133
|
||||
msgid "Person not found"
|
||||
msgstr "Asmuo nerastas"
|
||||
|
||||
#: messages.go:124
|
||||
#: messages.go:134
|
||||
msgid "Face not found"
|
||||
msgstr "Veidas nerastas"
|
||||
|
||||
#: messages.go:125
|
||||
#: messages.go:135
|
||||
msgid "Not available in public mode"
|
||||
msgstr "Negalima naudoti viešuoju režimu"
|
||||
|
||||
#: messages.go:126
|
||||
#: messages.go:136
|
||||
msgid "Not available in read-only mode"
|
||||
msgstr "Negalima naudoti tik skaitymo režimu"
|
||||
|
||||
#: messages.go:127
|
||||
#: messages.go:137
|
||||
msgid "Please log in to your account"
|
||||
msgstr "Prisijunkite prie savo paskyros"
|
||||
|
||||
#: messages.go:128
|
||||
#: messages.go:138
|
||||
msgid "Permission denied"
|
||||
msgstr "Priėjimas neimanomas"
|
||||
|
||||
#: messages.go:129
|
||||
#: messages.go:139
|
||||
msgid "Payment required"
|
||||
msgstr "Reikalingas mokėjimas"
|
||||
|
||||
#: messages.go:130
|
||||
#: messages.go:140
|
||||
msgid "Upload might be offensive"
|
||||
msgstr "Įkėlimas gali būti įžeidžiantis"
|
||||
|
||||
#: messages.go:131
|
||||
#: messages.go:141
|
||||
msgid "Upload failed"
|
||||
msgstr "Įkelti nepavyko"
|
||||
|
||||
#: messages.go:132
|
||||
#: messages.go:142
|
||||
msgid "No items selected"
|
||||
msgstr "Nėra pasirinktų elementų"
|
||||
|
||||
#: messages.go:133
|
||||
#: messages.go:143
|
||||
msgid "Failed creating file, please check permissions"
|
||||
msgstr "Nepavyko sukurti failo, patikrinkite leidimus"
|
||||
|
||||
#: messages.go:134
|
||||
#: messages.go:144
|
||||
msgid "Failed creating folder, please check permissions"
|
||||
msgstr "Nepavyko sukurti aplanko, patikrinkite leidimus"
|
||||
|
||||
#: messages.go:135
|
||||
#: messages.go:145
|
||||
msgid "Could not connect, please try again"
|
||||
msgstr "Nepavyko prisijungti, bandykite dar kartą"
|
||||
|
||||
#: messages.go:136
|
||||
#: messages.go:146
|
||||
msgid "Enter verification code"
|
||||
msgstr "Įveskite patvirtinimo kodą"
|
||||
|
||||
#: messages.go:137
|
||||
#: messages.go:147
|
||||
msgid "Invalid verification code, please try again"
|
||||
msgstr "Neteisingas patvirtinimo kodas, bandykite dar kartą"
|
||||
|
||||
#: messages.go:138
|
||||
#: messages.go:148
|
||||
msgid "Invalid password, please try again"
|
||||
msgstr "Netinkamas slaptažodis, bandykite dar kartą"
|
||||
|
||||
#: messages.go:139
|
||||
#: messages.go:149
|
||||
msgid "Feature disabled"
|
||||
msgstr "Funkcija išjungta"
|
||||
|
||||
#: messages.go:140
|
||||
#: messages.go:150
|
||||
msgid "No labels selected"
|
||||
msgstr "Nėra pasirinktų etikečių"
|
||||
|
||||
#: messages.go:141
|
||||
#: messages.go:151
|
||||
msgid "No albums selected"
|
||||
msgstr "Nėra pasirinktų albumų"
|
||||
|
||||
#: messages.go:142
|
||||
#: messages.go:152
|
||||
msgid "No files available for download"
|
||||
msgstr "Nėra parsisiunčiamų failų"
|
||||
|
||||
#: messages.go:143
|
||||
#: messages.go:153
|
||||
msgid "Failed to create zip file"
|
||||
msgstr "Nepavyko sukurti zip failo"
|
||||
|
||||
#: messages.go:144
|
||||
#: messages.go:154
|
||||
msgid "Invalid credentials"
|
||||
msgstr "Neteisingi įgaliojimai"
|
||||
|
||||
#: messages.go:145
|
||||
#: messages.go:155
|
||||
msgid "Invalid link"
|
||||
msgstr "Netinkama nuoroda"
|
||||
|
||||
#: messages.go:146
|
||||
#: messages.go:156
|
||||
msgid "Invalid name"
|
||||
msgstr "Netinkamas pavadinimas"
|
||||
|
||||
#: messages.go:147
|
||||
#: messages.go:157
|
||||
msgid "Busy, please try again later"
|
||||
msgstr "Užimta, bandykite vėliau"
|
||||
|
||||
#: messages.go:148
|
||||
#: messages.go:158
|
||||
#, c-format
|
||||
msgid "The wakeup interval is %s, but must be 1h or less"
|
||||
msgstr "Budinimo intervalas yra %s, bet turi būti ne ilgesnis kaip 1 val"
|
||||
|
||||
#: messages.go:149
|
||||
#: messages.go:159
|
||||
msgid "Your account could not be connected"
|
||||
msgstr "Nepavyko prisijungti prie jūsų paskyros"
|
||||
|
||||
#: messages.go:150
|
||||
#: messages.go:160
|
||||
msgid "Too many requests"
|
||||
msgstr "Per daug prašymų"
|
||||
|
||||
#: messages.go:151
|
||||
#: messages.go:161
|
||||
msgid "Insufficient storage"
|
||||
msgstr "Nepakankama saugykla"
|
||||
|
||||
#: messages.go:152
|
||||
#: messages.go:162
|
||||
msgid "Quota exceeded"
|
||||
msgstr "Viršyta kvota"
|
||||
|
||||
#: messages.go:155
|
||||
#: messages.go:163
|
||||
msgid "Registration disabled"
|
||||
msgstr "Registracija išjungta"
|
||||
|
||||
#: messages.go:164
|
||||
msgid "Verified email required"
|
||||
msgstr "Reikalingas patvirtintas el. pašto adresas"
|
||||
|
||||
#: messages.go:167
|
||||
msgid "Changes successfully saved"
|
||||
msgstr "Pakeitimai sėkmingai išsaugoti"
|
||||
|
||||
#: messages.go:156
|
||||
#: messages.go:168
|
||||
msgid "Album created"
|
||||
msgstr "Sukurtas albumas"
|
||||
|
||||
#: messages.go:157
|
||||
#: messages.go:169
|
||||
msgid "Album saved"
|
||||
msgstr "Išsaugotas albumas"
|
||||
|
||||
#: messages.go:158
|
||||
#: messages.go:170
|
||||
#, c-format
|
||||
msgid "Album %s deleted"
|
||||
msgstr "Albumas %s pašalintas"
|
||||
|
||||
#: messages.go:159
|
||||
#: messages.go:171
|
||||
msgid "Album contents cloned"
|
||||
msgstr "Klonuotas albumo turinys"
|
||||
|
||||
#: messages.go:160
|
||||
#: messages.go:172
|
||||
msgid "File removed from stack"
|
||||
msgstr "Failas pašalintas iš kamino"
|
||||
|
||||
#: messages.go:161
|
||||
#: messages.go:173
|
||||
msgid "File deleted"
|
||||
msgstr "Ištrintas failas"
|
||||
|
||||
#: messages.go:162
|
||||
#: messages.go:174
|
||||
#, c-format
|
||||
msgid "Selection added to %s"
|
||||
msgstr "Pasirinkimas pridėtas prie %s"
|
||||
|
||||
#: messages.go:163
|
||||
#: messages.go:175
|
||||
#, c-format
|
||||
msgid "One entry added to %s"
|
||||
msgstr "Vienas įrašas pridėtas prie %s"
|
||||
|
||||
#: messages.go:164
|
||||
#: messages.go:176
|
||||
#, c-format
|
||||
msgid "%d entries added to %s"
|
||||
msgstr "%d įrašai, įtraukti į %s"
|
||||
|
||||
#: messages.go:165
|
||||
#: messages.go:177
|
||||
#, c-format
|
||||
msgid "One entry removed from %s"
|
||||
msgstr "Vienas įrašas pašalintas iš %s"
|
||||
|
||||
#: messages.go:166
|
||||
#: messages.go:178
|
||||
#, c-format
|
||||
msgid "%d entries removed from %s"
|
||||
msgstr "%d įrašai pašalinti iš %s"
|
||||
|
||||
#: messages.go:167
|
||||
#: messages.go:179
|
||||
msgid "Account created"
|
||||
msgstr "Sukurta paskyra"
|
||||
|
||||
#: messages.go:168
|
||||
#: messages.go:180
|
||||
msgid "Account saved"
|
||||
msgstr "Išsaugota paskyra"
|
||||
|
||||
#: messages.go:169
|
||||
#: messages.go:181
|
||||
msgid "Account deleted"
|
||||
msgstr "Ištrinta paskyra"
|
||||
|
||||
#: messages.go:170
|
||||
#: messages.go:182
|
||||
msgid "Settings saved"
|
||||
msgstr "Nustatymai išsaugoti"
|
||||
|
||||
#: messages.go:171
|
||||
#: messages.go:183
|
||||
msgid "Password changed"
|
||||
msgstr "Slaptažodis pakeistas"
|
||||
|
||||
#: messages.go:172
|
||||
#: messages.go:184
|
||||
#, c-format
|
||||
msgid "Import completed in %d s"
|
||||
msgstr "Importas baigtas per %d s"
|
||||
|
||||
#: messages.go:173
|
||||
#: messages.go:185
|
||||
msgid "Import canceled"
|
||||
msgstr "Importas atšauktas"
|
||||
|
||||
#: messages.go:174
|
||||
#: messages.go:186
|
||||
#, c-format
|
||||
msgid "Indexing completed in %d s"
|
||||
msgstr "Indeksavimas baigtas per %d s"
|
||||
|
||||
#: messages.go:175
|
||||
#: messages.go:187
|
||||
msgid "Indexing originals..."
|
||||
msgstr "Originalų indeksavimas..."
|
||||
|
||||
#: messages.go:176
|
||||
#: messages.go:188
|
||||
#, c-format
|
||||
msgid "Indexing files in %s"
|
||||
msgstr "Failų indeksavimas %s"
|
||||
|
||||
#: messages.go:177
|
||||
#: messages.go:189
|
||||
msgid "Indexing canceled"
|
||||
msgstr "Indeksavimas atšauktas"
|
||||
|
||||
#: messages.go:178
|
||||
#: messages.go:190
|
||||
#, c-format
|
||||
msgid "Removed %d files and %d photos"
|
||||
msgstr "Pašalinti %d failai ir %d nuotraukos"
|
||||
|
||||
#: messages.go:179
|
||||
#: messages.go:191
|
||||
#, c-format
|
||||
msgid "Moving files from %s"
|
||||
msgstr "Failų perkėlimas iš %s"
|
||||
|
||||
#: messages.go:180
|
||||
#: messages.go:192
|
||||
#, c-format
|
||||
msgid "Copying files from %s"
|
||||
msgstr "Failų kopijavimas iš %s"
|
||||
|
||||
#: messages.go:181
|
||||
#: messages.go:193
|
||||
msgid "Labels deleted"
|
||||
msgstr "Ištrintos etiketės"
|
||||
|
||||
#: messages.go:182
|
||||
#: messages.go:194
|
||||
msgid "Label saved"
|
||||
msgstr "Išsaugota etiketė"
|
||||
|
||||
#: messages.go:183
|
||||
#: messages.go:195
|
||||
msgid "Subject saved"
|
||||
msgstr "Tema - išsaugotas"
|
||||
|
||||
#: messages.go:184
|
||||
#: messages.go:196
|
||||
msgid "Subject deleted"
|
||||
msgstr "Išbrauktas objektas"
|
||||
|
||||
#: messages.go:185
|
||||
#: messages.go:197
|
||||
msgid "Person saved"
|
||||
msgstr "Išsaugotas asmuo"
|
||||
|
||||
#: messages.go:186
|
||||
#: messages.go:198
|
||||
msgid "Person deleted"
|
||||
msgstr "Išbrauktas asmuo"
|
||||
|
||||
#: messages.go:187
|
||||
#: messages.go:199
|
||||
msgid "File uploaded"
|
||||
msgstr "Įkeltas failas"
|
||||
|
||||
#: messages.go:188
|
||||
#: messages.go:200
|
||||
#, c-format
|
||||
msgid "%d files uploaded in %d s"
|
||||
msgstr "%d failai įkelti per %d s"
|
||||
|
||||
#: messages.go:189
|
||||
#: messages.go:201
|
||||
msgid "Processing upload..."
|
||||
msgstr "Įkėlimo apdorojimas..."
|
||||
|
||||
#: messages.go:190
|
||||
#: messages.go:202
|
||||
msgid "Upload has been processed"
|
||||
msgstr "Įkėlimas apdorotas"
|
||||
|
||||
#: messages.go:191
|
||||
#: messages.go:203
|
||||
msgid "Selection approved"
|
||||
msgstr "Patvirtinta atranka"
|
||||
|
||||
#: messages.go:192
|
||||
#: messages.go:204
|
||||
msgid "Selection archived"
|
||||
msgstr "Atranka archyvuota"
|
||||
|
||||
#: messages.go:193
|
||||
#: messages.go:205
|
||||
msgid "Selection restored"
|
||||
msgstr "Atkurta atranka"
|
||||
|
||||
#: messages.go:194
|
||||
#: messages.go:206
|
||||
msgid "Selection marked as private"
|
||||
msgstr "Atranka pažymėta kaip privati"
|
||||
|
||||
#: messages.go:195
|
||||
#: messages.go:207
|
||||
msgid "Albums deleted"
|
||||
msgstr "Ištrinti albumai"
|
||||
|
||||
#: messages.go:196
|
||||
#: messages.go:208
|
||||
#, c-format
|
||||
msgid "Zip created in %d s"
|
||||
msgstr "Zip sukurta %d s"
|
||||
|
||||
#: messages.go:197
|
||||
#: messages.go:209
|
||||
msgid "Permanently deleted"
|
||||
msgstr "Visam laikui ištrintas"
|
||||
|
||||
#: messages.go:198
|
||||
#: messages.go:210
|
||||
#, c-format
|
||||
msgid "%s has been restored"
|
||||
msgstr "%s buvo atkurta"
|
||||
|
||||
#: messages.go:199
|
||||
#: messages.go:211
|
||||
msgid "Successfully verified"
|
||||
msgstr "Sėkmingai patvirtinta"
|
||||
|
||||
#: messages.go:200
|
||||
#: messages.go:212
|
||||
msgid "Successfully activated"
|
||||
msgstr "Sėkmingai suaktyvinta"
|
||||
|
||||
|
|
|
|||
|
|
@ -6,10 +6,11 @@
|
|||
msgid ""
|
||||
msgstr ""
|
||||
"Project-Id-Version: PACKAGE VERSION\n"
|
||||
"Report-Msgid-Bugs-To: ci@photoprism.app\n"
|
||||
"POT-Creation-Date: 2025-10-17 17:32+0000\n"
|
||||
"PO-Revision-Date: 2026-01-15 09:02+0000\n"
|
||||
"Last-Translator: Janis Eglitis <alfabeta.lv@gmail.com>\n"
|
||||
"Report-Msgid-Bugs-To: \n"
|
||||
"POT-Creation-Date: 2026-06-27 09:13+0000\n"
|
||||
"PO-Revision-Date: 2026-06-27 10:28+0000\n"
|
||||
"Last-Translator: Google Cloud Translation Basic <noreply-mt-google-"
|
||||
"translate@weblate.org>\n"
|
||||
"Language-Team: none\n"
|
||||
"Language: lv\n"
|
||||
"MIME-Version: 1.0\n"
|
||||
|
|
@ -17,401 +18,417 @@ msgstr ""
|
|||
"Content-Transfer-Encoding: 8bit\n"
|
||||
"Plural-Forms: nplurals=3; plural=(n % 10 == 0 || n % 100 >= 11 && n % 100 <= "
|
||||
"19) ? 0 : ((n % 10 == 1 && n % 100 != 11) ? 1 : 2);\n"
|
||||
"X-Generator: Weblate 5.15.1\n"
|
||||
"X-Generator: Weblate 2026.5\n"
|
||||
|
||||
#: messages.go:104
|
||||
#: messages.go:112
|
||||
msgid "Something went wrong, try again"
|
||||
msgstr "Kaut kas nogāja greizi, mēģiniet vēlreiz"
|
||||
|
||||
#: messages.go:105
|
||||
#: messages.go:113
|
||||
msgid "Unable to do that"
|
||||
msgstr "To nevar izdarīt"
|
||||
|
||||
#: messages.go:106
|
||||
#: messages.go:114
|
||||
msgid "Changes could not be saved"
|
||||
msgstr "Izmaiņas nevarēja saglabāt"
|
||||
|
||||
#: messages.go:107
|
||||
#: messages.go:115
|
||||
msgid "Could not be deleted"
|
||||
msgstr "Nevarēja izdzēst"
|
||||
|
||||
#: messages.go:108
|
||||
#: messages.go:116
|
||||
#, c-format
|
||||
msgid "%s already exists"
|
||||
msgstr "%s jau pastāv"
|
||||
|
||||
#: messages.go:109
|
||||
#: messages.go:117
|
||||
msgid "Not found"
|
||||
msgstr "Nav atrasts"
|
||||
|
||||
#: messages.go:110
|
||||
#: messages.go:118
|
||||
msgid "File not found"
|
||||
msgstr "Fails nav atrasts"
|
||||
|
||||
#: messages.go:111
|
||||
#: messages.go:119
|
||||
msgid "File too large"
|
||||
msgstr "Fails ir pārāk liels"
|
||||
|
||||
#: messages.go:112
|
||||
#: messages.go:120
|
||||
msgid "Unsupported"
|
||||
msgstr "Neatbalstīts"
|
||||
|
||||
#: messages.go:113
|
||||
#: messages.go:121
|
||||
msgid "Unsupported type"
|
||||
msgstr "Neatbalstīts tips"
|
||||
|
||||
#: messages.go:114
|
||||
#: messages.go:122
|
||||
msgid "Unsupported format"
|
||||
msgstr "Neatbalstīts formāts"
|
||||
|
||||
#: messages.go:115
|
||||
#: messages.go:123
|
||||
msgid "Originals folder is empty"
|
||||
msgstr "Oriģinālu mape ir tukša"
|
||||
|
||||
#: messages.go:116
|
||||
#: messages.go:124
|
||||
msgid "Selection not found"
|
||||
msgstr "Izvēle nav atrasta"
|
||||
|
||||
#: messages.go:117
|
||||
#: messages.go:125
|
||||
msgid "Entity not found"
|
||||
msgstr "Vienība nav atrasta"
|
||||
|
||||
#: messages.go:118
|
||||
#: messages.go:126
|
||||
msgid "Account not found"
|
||||
msgstr "Konts nav atrasts"
|
||||
|
||||
#: messages.go:119
|
||||
#: messages.go:127
|
||||
msgid "User not found"
|
||||
msgstr "Lietotājs nav atrasts"
|
||||
|
||||
#: messages.go:120
|
||||
#: messages.go:128
|
||||
msgid "Label not found"
|
||||
msgstr "Birka nav atrasta"
|
||||
|
||||
#: messages.go:121
|
||||
#: messages.go:129
|
||||
msgid "Camera not found"
|
||||
msgstr "Kamera nav atrasta"
|
||||
|
||||
#: messages.go:130
|
||||
msgid "Lens not found"
|
||||
msgstr "Objektīvs nav atrasts"
|
||||
|
||||
#: messages.go:131
|
||||
msgid "Album not found"
|
||||
msgstr "Albums nav atrasts"
|
||||
|
||||
#: messages.go:122
|
||||
#: messages.go:132
|
||||
msgid "Subject not found"
|
||||
msgstr "Tēma nav atrasta"
|
||||
|
||||
#: messages.go:123
|
||||
#: messages.go:133
|
||||
msgid "Person not found"
|
||||
msgstr "Persona nav atrasta"
|
||||
|
||||
#: messages.go:124
|
||||
#: messages.go:134
|
||||
msgid "Face not found"
|
||||
msgstr "Seja nav atrasta"
|
||||
|
||||
#: messages.go:125
|
||||
#: messages.go:135
|
||||
msgid "Not available in public mode"
|
||||
msgstr "Nav pieejams publiskajā režīmā"
|
||||
|
||||
#: messages.go:126
|
||||
#: messages.go:136
|
||||
msgid "Not available in read-only mode"
|
||||
msgstr "Nav pieejams lasīšanas režīmā"
|
||||
|
||||
#: messages.go:127
|
||||
#: messages.go:137
|
||||
msgid "Please log in to your account"
|
||||
msgstr "Lūdzu, piesakieties savā kontā"
|
||||
|
||||
#: messages.go:128
|
||||
#: messages.go:138
|
||||
msgid "Permission denied"
|
||||
msgstr "Atļauja liegta"
|
||||
|
||||
#: messages.go:129
|
||||
#: messages.go:139
|
||||
msgid "Payment required"
|
||||
msgstr "Nepieciešams maksājums"
|
||||
|
||||
#: messages.go:130
|
||||
#: messages.go:140
|
||||
msgid "Upload might be offensive"
|
||||
msgstr "Augšupielāde varētu būt aizskaroša"
|
||||
|
||||
#: messages.go:131
|
||||
#: messages.go:141
|
||||
msgid "Upload failed"
|
||||
msgstr "Augšupielāde neizdevās"
|
||||
|
||||
#: messages.go:132
|
||||
#: messages.go:142
|
||||
msgid "No items selected"
|
||||
msgstr "Nav izvēlēts neviens ieraksts"
|
||||
|
||||
#: messages.go:133
|
||||
#: messages.go:143
|
||||
msgid "Failed creating file, please check permissions"
|
||||
msgstr "Neizdevās izveidot failu, lūdzu, pārbaudiet atļaujas"
|
||||
|
||||
#: messages.go:134
|
||||
#: messages.go:144
|
||||
msgid "Failed creating folder, please check permissions"
|
||||
msgstr "Neizdevās izveidot mapi, lūdzu, pārbaudiet atļaujas"
|
||||
|
||||
#: messages.go:135
|
||||
#: messages.go:145
|
||||
msgid "Could not connect, please try again"
|
||||
msgstr "Nevarēja izveidot savienojumu, lūdzu, mēģiniet vēlreiz"
|
||||
|
||||
#: messages.go:136
|
||||
#: messages.go:146
|
||||
msgid "Enter verification code"
|
||||
msgstr "Ievadiet verifikācijas kodu"
|
||||
|
||||
#: messages.go:137
|
||||
#: messages.go:147
|
||||
msgid "Invalid verification code, please try again"
|
||||
msgstr "Nederīgs verifikācijas kods, lūdzu, mēģiniet vēlreiz"
|
||||
|
||||
#: messages.go:138
|
||||
#: messages.go:148
|
||||
msgid "Invalid password, please try again"
|
||||
msgstr "Nederīga parole, lūdzu, mēģiniet vēlreiz"
|
||||
|
||||
#: messages.go:139
|
||||
#: messages.go:149
|
||||
msgid "Feature disabled"
|
||||
msgstr "Funkcionalitāte ir izslēgta"
|
||||
|
||||
#: messages.go:140
|
||||
#: messages.go:150
|
||||
msgid "No labels selected"
|
||||
msgstr "Nav atlasītas nevienas birkas"
|
||||
|
||||
#: messages.go:141
|
||||
#: messages.go:151
|
||||
msgid "No albums selected"
|
||||
msgstr "Nav atlasīts neviens albums"
|
||||
|
||||
#: messages.go:142
|
||||
#: messages.go:152
|
||||
msgid "No files available for download"
|
||||
msgstr "Nav lejupielādei pieejamu failu"
|
||||
|
||||
#: messages.go:143
|
||||
#: messages.go:153
|
||||
msgid "Failed to create zip file"
|
||||
msgstr "Neizdevās izveidot zip failu"
|
||||
|
||||
#: messages.go:144
|
||||
#: messages.go:154
|
||||
msgid "Invalid credentials"
|
||||
msgstr "Nederīgs lietotājvārds vai parole"
|
||||
|
||||
#: messages.go:145
|
||||
#: messages.go:155
|
||||
msgid "Invalid link"
|
||||
msgstr "Nederīga saite"
|
||||
|
||||
#: messages.go:146
|
||||
#: messages.go:156
|
||||
msgid "Invalid name"
|
||||
msgstr "Nederīgs nosaukums"
|
||||
|
||||
#: messages.go:147
|
||||
#: messages.go:157
|
||||
msgid "Busy, please try again later"
|
||||
msgstr "Aizņemts, lūdzu, mēģiniet vēlreiz vēlāk"
|
||||
|
||||
#: messages.go:148
|
||||
#: messages.go:158
|
||||
#, c-format
|
||||
msgid "The wakeup interval is %s, but must be 1h or less"
|
||||
msgstr "Pamošanās intervāls ir %s, bet tam jābūt 1 h vai mazākam"
|
||||
|
||||
#: messages.go:149
|
||||
#: messages.go:159
|
||||
msgid "Your account could not be connected"
|
||||
msgstr "Jūsu kontu nevarēja savienot"
|
||||
|
||||
#: messages.go:150
|
||||
#: messages.go:160
|
||||
msgid "Too many requests"
|
||||
msgstr "Pārāk daudz pieprasījumu"
|
||||
|
||||
#: messages.go:151
|
||||
#: messages.go:161
|
||||
msgid "Insufficient storage"
|
||||
msgstr "Nepietiek brīvas vietas"
|
||||
|
||||
#: messages.go:152
|
||||
#: messages.go:162
|
||||
msgid "Quota exceeded"
|
||||
msgstr "Kvota pārsniegta"
|
||||
|
||||
#: messages.go:155
|
||||
#: messages.go:163
|
||||
msgid "Registration disabled"
|
||||
msgstr "Reģistrācija atspējota"
|
||||
|
||||
#: messages.go:164
|
||||
msgid "Verified email required"
|
||||
msgstr "Nepieciešama verificēta e-pasta adrese"
|
||||
|
||||
#: messages.go:167
|
||||
msgid "Changes successfully saved"
|
||||
msgstr "Izmaiņas veiksmīgi saglabātas"
|
||||
|
||||
#: messages.go:156
|
||||
#: messages.go:168
|
||||
msgid "Album created"
|
||||
msgstr "Albums izveidots"
|
||||
|
||||
#: messages.go:157
|
||||
#: messages.go:169
|
||||
msgid "Album saved"
|
||||
msgstr "Albums saglabāts"
|
||||
|
||||
#: messages.go:158
|
||||
#: messages.go:170
|
||||
#, c-format
|
||||
msgid "Album %s deleted"
|
||||
msgstr "Albums %s ir dzēsts"
|
||||
|
||||
#: messages.go:159
|
||||
#: messages.go:171
|
||||
msgid "Album contents cloned"
|
||||
msgstr "Albuma saturs ir dublēts"
|
||||
|
||||
#: messages.go:160
|
||||
#: messages.go:172
|
||||
msgid "File removed from stack"
|
||||
msgstr "Fails izņemts no saraksta"
|
||||
|
||||
#: messages.go:161
|
||||
#: messages.go:173
|
||||
msgid "File deleted"
|
||||
msgstr "Fails izdzēsts"
|
||||
|
||||
#: messages.go:162
|
||||
#: messages.go:174
|
||||
#, c-format
|
||||
msgid "Selection added to %s"
|
||||
msgstr "Atlasījums pievienots %s"
|
||||
|
||||
#: messages.go:163
|
||||
#: messages.go:175
|
||||
#, c-format
|
||||
msgid "One entry added to %s"
|
||||
msgstr "Viens ieraksts pievienots %s"
|
||||
|
||||
#: messages.go:164
|
||||
#: messages.go:176
|
||||
#, c-format
|
||||
msgid "%d entries added to %s"
|
||||
msgstr "%d ieraksti pievienoti %s"
|
||||
|
||||
#: messages.go:165
|
||||
#: messages.go:177
|
||||
#, c-format
|
||||
msgid "One entry removed from %s"
|
||||
msgstr "Viens ieraksts noņemts no %s"
|
||||
|
||||
#: messages.go:166
|
||||
#: messages.go:178
|
||||
#, c-format
|
||||
msgid "%d entries removed from %s"
|
||||
msgstr "%d ieraksti noņemti no %s"
|
||||
|
||||
#: messages.go:167
|
||||
#: messages.go:179
|
||||
msgid "Account created"
|
||||
msgstr "Konts izveidots"
|
||||
|
||||
#: messages.go:168
|
||||
#: messages.go:180
|
||||
msgid "Account saved"
|
||||
msgstr "Konts saglabāts"
|
||||
|
||||
#: messages.go:169
|
||||
#: messages.go:181
|
||||
msgid "Account deleted"
|
||||
msgstr "Konts ir dzēsts"
|
||||
|
||||
#: messages.go:170
|
||||
#: messages.go:182
|
||||
msgid "Settings saved"
|
||||
msgstr "Iestatījumi saglabāti"
|
||||
|
||||
#: messages.go:171
|
||||
#: messages.go:183
|
||||
msgid "Password changed"
|
||||
msgstr "Parole nomainīta"
|
||||
|
||||
#: messages.go:172
|
||||
#: messages.go:184
|
||||
#, c-format
|
||||
msgid "Import completed in %d s"
|
||||
msgstr "Importēšana pabeigta %d s laikā"
|
||||
|
||||
#: messages.go:173
|
||||
#: messages.go:185
|
||||
msgid "Import canceled"
|
||||
msgstr "Importēšana atcelta"
|
||||
|
||||
#: messages.go:174
|
||||
#: messages.go:186
|
||||
#, c-format
|
||||
msgid "Indexing completed in %d s"
|
||||
msgstr "Indeksēšana pabeigta %d s laikā"
|
||||
|
||||
#: messages.go:175
|
||||
#: messages.go:187
|
||||
msgid "Indexing originals..."
|
||||
msgstr "Notiek oriģinālu indeksēšana..."
|
||||
|
||||
#: messages.go:176
|
||||
#: messages.go:188
|
||||
#, c-format
|
||||
msgid "Indexing files in %s"
|
||||
msgstr "Notiek failu indeksēšana %s"
|
||||
|
||||
#: messages.go:177
|
||||
#: messages.go:189
|
||||
msgid "Indexing canceled"
|
||||
msgstr "Indeksēšana atcelta"
|
||||
|
||||
#: messages.go:178
|
||||
#: messages.go:190
|
||||
#, c-format
|
||||
msgid "Removed %d files and %d photos"
|
||||
msgstr "Noņemti %d faili un %d fotoattēli"
|
||||
|
||||
#: messages.go:179
|
||||
#: messages.go:191
|
||||
#, c-format
|
||||
msgid "Moving files from %s"
|
||||
msgstr "Failu pārvietošana no %s"
|
||||
|
||||
#: messages.go:180
|
||||
#: messages.go:192
|
||||
#, c-format
|
||||
msgid "Copying files from %s"
|
||||
msgstr "Failu kopēšana no %s"
|
||||
|
||||
#: messages.go:181
|
||||
#: messages.go:193
|
||||
msgid "Labels deleted"
|
||||
msgstr "Birkas ir dzēstas"
|
||||
|
||||
#: messages.go:182
|
||||
#: messages.go:194
|
||||
msgid "Label saved"
|
||||
msgstr "Birka saglabāta"
|
||||
|
||||
#: messages.go:183
|
||||
#: messages.go:195
|
||||
msgid "Subject saved"
|
||||
msgstr "Tēma saglabāta"
|
||||
|
||||
#: messages.go:184
|
||||
#: messages.go:196
|
||||
msgid "Subject deleted"
|
||||
msgstr "Tēma dzēsta"
|
||||
|
||||
#: messages.go:185
|
||||
#: messages.go:197
|
||||
msgid "Person saved"
|
||||
msgstr "Persona saglabāta"
|
||||
|
||||
#: messages.go:186
|
||||
#: messages.go:198
|
||||
msgid "Person deleted"
|
||||
msgstr "Persona dzēsta"
|
||||
|
||||
#: messages.go:187
|
||||
#: messages.go:199
|
||||
msgid "File uploaded"
|
||||
msgstr "Fails augšupielādēts"
|
||||
|
||||
#: messages.go:188
|
||||
#: messages.go:200
|
||||
#, c-format
|
||||
msgid "%d files uploaded in %d s"
|
||||
msgstr "%d faili augšupielādēti %d sekundēs"
|
||||
|
||||
#: messages.go:189
|
||||
#: messages.go:201
|
||||
msgid "Processing upload..."
|
||||
msgstr "Notiek augšupielādes apstrāde..."
|
||||
|
||||
#: messages.go:190
|
||||
#: messages.go:202
|
||||
msgid "Upload has been processed"
|
||||
msgstr "Augšupielāde ir apstrādāta"
|
||||
|
||||
#: messages.go:191
|
||||
#: messages.go:203
|
||||
msgid "Selection approved"
|
||||
msgstr "Atlase apstiprināta"
|
||||
|
||||
#: messages.go:192
|
||||
#: messages.go:204
|
||||
msgid "Selection archived"
|
||||
msgstr "Atlase arhivēta"
|
||||
|
||||
#: messages.go:193
|
||||
#: messages.go:205
|
||||
msgid "Selection restored"
|
||||
msgstr "Atlase atjaunota"
|
||||
|
||||
#: messages.go:194
|
||||
#: messages.go:206
|
||||
msgid "Selection marked as private"
|
||||
msgstr "Izvēle atzīmēta kā privāta"
|
||||
|
||||
#: messages.go:195
|
||||
#: messages.go:207
|
||||
msgid "Albums deleted"
|
||||
msgstr "Albumi ir dzēsti"
|
||||
|
||||
#: messages.go:196
|
||||
#: messages.go:208
|
||||
#, c-format
|
||||
msgid "Zip created in %d s"
|
||||
msgstr "ZIP fails izveidots %d sekundēs"
|
||||
|
||||
#: messages.go:197
|
||||
#: messages.go:209
|
||||
msgid "Permanently deleted"
|
||||
msgstr "Neatgriezeniski dzēsts"
|
||||
|
||||
#: messages.go:198
|
||||
#: messages.go:210
|
||||
#, c-format
|
||||
msgid "%s has been restored"
|
||||
msgstr "%s ir atjaunots"
|
||||
|
||||
#: messages.go:199
|
||||
#: messages.go:211
|
||||
msgid "Successfully verified"
|
||||
msgstr "Veiksmīgi verificēts"
|
||||
|
||||
#: messages.go:200
|
||||
#: messages.go:212
|
||||
msgid "Successfully activated"
|
||||
msgstr "Veiksmīgi aktivizēts"
|
||||
|
|
|
|||
|
|
@ -8,7 +8,7 @@ msgid ""
|
|||
msgstr ""
|
||||
"Project-Id-Version: PACKAGE VERSION\n"
|
||||
"Report-Msgid-Bugs-To: \n"
|
||||
"POT-Creation-Date: 2025-10-17 17:32+0000\n"
|
||||
"POT-Creation-Date: 2026-06-27 09:13+0000\n"
|
||||
"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
|
||||
"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
|
||||
"Language-Team: LANGUAGE <LL@li.org>\n"
|
||||
|
|
@ -17,399 +17,415 @@ msgstr ""
|
|||
"Content-Type: text/plain; charset=CHARSET\n"
|
||||
"Content-Transfer-Encoding: 8bit\n"
|
||||
|
||||
#: messages.go:104
|
||||
#: messages.go:112
|
||||
msgid "Something went wrong, try again"
|
||||
msgstr ""
|
||||
|
||||
#: messages.go:105
|
||||
#: messages.go:113
|
||||
msgid "Unable to do that"
|
||||
msgstr ""
|
||||
|
||||
#: messages.go:106
|
||||
#: messages.go:114
|
||||
msgid "Changes could not be saved"
|
||||
msgstr ""
|
||||
|
||||
#: messages.go:107
|
||||
#: messages.go:115
|
||||
msgid "Could not be deleted"
|
||||
msgstr ""
|
||||
|
||||
#: messages.go:108
|
||||
#: messages.go:116
|
||||
#, c-format
|
||||
msgid "%s already exists"
|
||||
msgstr ""
|
||||
|
||||
#: messages.go:109
|
||||
#: messages.go:117
|
||||
msgid "Not found"
|
||||
msgstr ""
|
||||
|
||||
#: messages.go:110
|
||||
#: messages.go:118
|
||||
msgid "File not found"
|
||||
msgstr ""
|
||||
|
||||
#: messages.go:111
|
||||
#: messages.go:119
|
||||
msgid "File too large"
|
||||
msgstr ""
|
||||
|
||||
#: messages.go:112
|
||||
#: messages.go:120
|
||||
msgid "Unsupported"
|
||||
msgstr ""
|
||||
|
||||
#: messages.go:113
|
||||
#: messages.go:121
|
||||
msgid "Unsupported type"
|
||||
msgstr ""
|
||||
|
||||
#: messages.go:114
|
||||
#: messages.go:122
|
||||
msgid "Unsupported format"
|
||||
msgstr ""
|
||||
|
||||
#: messages.go:115
|
||||
#: messages.go:123
|
||||
msgid "Originals folder is empty"
|
||||
msgstr ""
|
||||
|
||||
#: messages.go:116
|
||||
#: messages.go:124
|
||||
msgid "Selection not found"
|
||||
msgstr ""
|
||||
|
||||
#: messages.go:117
|
||||
#: messages.go:125
|
||||
msgid "Entity not found"
|
||||
msgstr ""
|
||||
|
||||
#: messages.go:118
|
||||
#: messages.go:126
|
||||
msgid "Account not found"
|
||||
msgstr ""
|
||||
|
||||
#: messages.go:119
|
||||
#: messages.go:127
|
||||
msgid "User not found"
|
||||
msgstr ""
|
||||
|
||||
#: messages.go:120
|
||||
#: messages.go:128
|
||||
msgid "Label not found"
|
||||
msgstr ""
|
||||
|
||||
#: messages.go:121
|
||||
msgid "Album not found"
|
||||
msgstr ""
|
||||
|
||||
#: messages.go:122
|
||||
msgid "Subject not found"
|
||||
msgstr ""
|
||||
|
||||
#: messages.go:123
|
||||
msgid "Person not found"
|
||||
msgstr ""
|
||||
|
||||
#: messages.go:124
|
||||
msgid "Face not found"
|
||||
msgstr ""
|
||||
|
||||
#: messages.go:125
|
||||
msgid "Not available in public mode"
|
||||
msgstr ""
|
||||
|
||||
#: messages.go:126
|
||||
msgid "Not available in read-only mode"
|
||||
msgstr ""
|
||||
|
||||
#: messages.go:127
|
||||
msgid "Please log in to your account"
|
||||
msgstr ""
|
||||
|
||||
#: messages.go:128
|
||||
msgid "Permission denied"
|
||||
msgstr ""
|
||||
|
||||
#: messages.go:129
|
||||
msgid "Payment required"
|
||||
msgid "Camera not found"
|
||||
msgstr ""
|
||||
|
||||
#: messages.go:130
|
||||
msgid "Upload might be offensive"
|
||||
msgid "Lens not found"
|
||||
msgstr ""
|
||||
|
||||
#: messages.go:131
|
||||
msgid "Upload failed"
|
||||
msgid "Album not found"
|
||||
msgstr ""
|
||||
|
||||
#: messages.go:132
|
||||
msgid "No items selected"
|
||||
msgid "Subject not found"
|
||||
msgstr ""
|
||||
|
||||
#: messages.go:133
|
||||
msgid "Failed creating file, please check permissions"
|
||||
msgid "Person not found"
|
||||
msgstr ""
|
||||
|
||||
#: messages.go:134
|
||||
msgid "Failed creating folder, please check permissions"
|
||||
msgid "Face not found"
|
||||
msgstr ""
|
||||
|
||||
#: messages.go:135
|
||||
msgid "Could not connect, please try again"
|
||||
msgid "Not available in public mode"
|
||||
msgstr ""
|
||||
|
||||
#: messages.go:136
|
||||
msgid "Enter verification code"
|
||||
msgid "Not available in read-only mode"
|
||||
msgstr ""
|
||||
|
||||
#: messages.go:137
|
||||
msgid "Invalid verification code, please try again"
|
||||
msgid "Please log in to your account"
|
||||
msgstr ""
|
||||
|
||||
#: messages.go:138
|
||||
msgid "Invalid password, please try again"
|
||||
msgid "Permission denied"
|
||||
msgstr ""
|
||||
|
||||
#: messages.go:139
|
||||
msgid "Feature disabled"
|
||||
msgid "Payment required"
|
||||
msgstr ""
|
||||
|
||||
#: messages.go:140
|
||||
msgid "No labels selected"
|
||||
msgid "Upload might be offensive"
|
||||
msgstr ""
|
||||
|
||||
#: messages.go:141
|
||||
msgid "No albums selected"
|
||||
msgid "Upload failed"
|
||||
msgstr ""
|
||||
|
||||
#: messages.go:142
|
||||
msgid "No files available for download"
|
||||
msgid "No items selected"
|
||||
msgstr ""
|
||||
|
||||
#: messages.go:143
|
||||
msgid "Failed to create zip file"
|
||||
msgid "Failed creating file, please check permissions"
|
||||
msgstr ""
|
||||
|
||||
#: messages.go:144
|
||||
msgid "Invalid credentials"
|
||||
msgid "Failed creating folder, please check permissions"
|
||||
msgstr ""
|
||||
|
||||
#: messages.go:145
|
||||
msgid "Invalid link"
|
||||
msgid "Could not connect, please try again"
|
||||
msgstr ""
|
||||
|
||||
#: messages.go:146
|
||||
msgid "Invalid name"
|
||||
msgid "Enter verification code"
|
||||
msgstr ""
|
||||
|
||||
#: messages.go:147
|
||||
msgid "Busy, please try again later"
|
||||
msgid "Invalid verification code, please try again"
|
||||
msgstr ""
|
||||
|
||||
#: messages.go:148
|
||||
#, c-format
|
||||
msgid "The wakeup interval is %s, but must be 1h or less"
|
||||
msgid "Invalid password, please try again"
|
||||
msgstr ""
|
||||
|
||||
#: messages.go:149
|
||||
msgid "Your account could not be connected"
|
||||
msgid "Feature disabled"
|
||||
msgstr ""
|
||||
|
||||
#: messages.go:150
|
||||
msgid "Too many requests"
|
||||
msgid "No labels selected"
|
||||
msgstr ""
|
||||
|
||||
#: messages.go:151
|
||||
msgid "Insufficient storage"
|
||||
msgid "No albums selected"
|
||||
msgstr ""
|
||||
|
||||
#: messages.go:152
|
||||
msgid "Quota exceeded"
|
||||
msgid "No files available for download"
|
||||
msgstr ""
|
||||
|
||||
#: messages.go:153
|
||||
msgid "Failed to create zip file"
|
||||
msgstr ""
|
||||
|
||||
#: messages.go:154
|
||||
msgid "Invalid credentials"
|
||||
msgstr ""
|
||||
|
||||
#: messages.go:155
|
||||
msgid "Changes successfully saved"
|
||||
msgid "Invalid link"
|
||||
msgstr ""
|
||||
|
||||
#: messages.go:156
|
||||
msgid "Album created"
|
||||
msgid "Invalid name"
|
||||
msgstr ""
|
||||
|
||||
#: messages.go:157
|
||||
msgid "Album saved"
|
||||
msgid "Busy, please try again later"
|
||||
msgstr ""
|
||||
|
||||
#: messages.go:158
|
||||
#, c-format
|
||||
msgid "Album %s deleted"
|
||||
msgid "The wakeup interval is %s, but must be 1h or less"
|
||||
msgstr ""
|
||||
|
||||
#: messages.go:159
|
||||
msgid "Album contents cloned"
|
||||
msgid "Your account could not be connected"
|
||||
msgstr ""
|
||||
|
||||
#: messages.go:160
|
||||
msgid "File removed from stack"
|
||||
msgid "Too many requests"
|
||||
msgstr ""
|
||||
|
||||
#: messages.go:161
|
||||
msgid "File deleted"
|
||||
msgid "Insufficient storage"
|
||||
msgstr ""
|
||||
|
||||
#: messages.go:162
|
||||
#, c-format
|
||||
msgid "Selection added to %s"
|
||||
msgid "Quota exceeded"
|
||||
msgstr ""
|
||||
|
||||
#: messages.go:163
|
||||
#, c-format
|
||||
msgid "One entry added to %s"
|
||||
msgid "Registration disabled"
|
||||
msgstr ""
|
||||
|
||||
#: messages.go:164
|
||||
#, c-format
|
||||
msgid "%d entries added to %s"
|
||||
msgstr ""
|
||||
|
||||
#: messages.go:165
|
||||
#, c-format
|
||||
msgid "One entry removed from %s"
|
||||
msgstr ""
|
||||
|
||||
#: messages.go:166
|
||||
#, c-format
|
||||
msgid "%d entries removed from %s"
|
||||
msgid "Verified email required"
|
||||
msgstr ""
|
||||
|
||||
#: messages.go:167
|
||||
msgid "Account created"
|
||||
msgid "Changes successfully saved"
|
||||
msgstr ""
|
||||
|
||||
#: messages.go:168
|
||||
msgid "Account saved"
|
||||
msgid "Album created"
|
||||
msgstr ""
|
||||
|
||||
#: messages.go:169
|
||||
msgid "Account deleted"
|
||||
msgid "Album saved"
|
||||
msgstr ""
|
||||
|
||||
#: messages.go:170
|
||||
msgid "Settings saved"
|
||||
#, c-format
|
||||
msgid "Album %s deleted"
|
||||
msgstr ""
|
||||
|
||||
#: messages.go:171
|
||||
msgid "Password changed"
|
||||
msgid "Album contents cloned"
|
||||
msgstr ""
|
||||
|
||||
#: messages.go:172
|
||||
#, c-format
|
||||
msgid "Import completed in %d s"
|
||||
msgid "File removed from stack"
|
||||
msgstr ""
|
||||
|
||||
#: messages.go:173
|
||||
msgid "Import canceled"
|
||||
msgid "File deleted"
|
||||
msgstr ""
|
||||
|
||||
#: messages.go:174
|
||||
#, c-format
|
||||
msgid "Indexing completed in %d s"
|
||||
msgid "Selection added to %s"
|
||||
msgstr ""
|
||||
|
||||
#: messages.go:175
|
||||
msgid "Indexing originals..."
|
||||
#, c-format
|
||||
msgid "One entry added to %s"
|
||||
msgstr ""
|
||||
|
||||
#: messages.go:176
|
||||
#, c-format
|
||||
msgid "Indexing files in %s"
|
||||
msgid "%d entries added to %s"
|
||||
msgstr ""
|
||||
|
||||
#: messages.go:177
|
||||
msgid "Indexing canceled"
|
||||
#, c-format
|
||||
msgid "One entry removed from %s"
|
||||
msgstr ""
|
||||
|
||||
#: messages.go:178
|
||||
#, c-format
|
||||
msgid "Removed %d files and %d photos"
|
||||
msgid "%d entries removed from %s"
|
||||
msgstr ""
|
||||
|
||||
#: messages.go:179
|
||||
#, c-format
|
||||
msgid "Moving files from %s"
|
||||
msgid "Account created"
|
||||
msgstr ""
|
||||
|
||||
#: messages.go:180
|
||||
#, c-format
|
||||
msgid "Copying files from %s"
|
||||
msgid "Account saved"
|
||||
msgstr ""
|
||||
|
||||
#: messages.go:181
|
||||
msgid "Labels deleted"
|
||||
msgid "Account deleted"
|
||||
msgstr ""
|
||||
|
||||
#: messages.go:182
|
||||
msgid "Label saved"
|
||||
msgid "Settings saved"
|
||||
msgstr ""
|
||||
|
||||
#: messages.go:183
|
||||
msgid "Subject saved"
|
||||
msgid "Password changed"
|
||||
msgstr ""
|
||||
|
||||
#: messages.go:184
|
||||
msgid "Subject deleted"
|
||||
#, c-format
|
||||
msgid "Import completed in %d s"
|
||||
msgstr ""
|
||||
|
||||
#: messages.go:185
|
||||
msgid "Person saved"
|
||||
msgid "Import canceled"
|
||||
msgstr ""
|
||||
|
||||
#: messages.go:186
|
||||
msgid "Person deleted"
|
||||
#, c-format
|
||||
msgid "Indexing completed in %d s"
|
||||
msgstr ""
|
||||
|
||||
#: messages.go:187
|
||||
msgid "File uploaded"
|
||||
msgid "Indexing originals..."
|
||||
msgstr ""
|
||||
|
||||
#: messages.go:188
|
||||
#, c-format
|
||||
msgid "%d files uploaded in %d s"
|
||||
msgid "Indexing files in %s"
|
||||
msgstr ""
|
||||
|
||||
#: messages.go:189
|
||||
msgid "Processing upload..."
|
||||
msgid "Indexing canceled"
|
||||
msgstr ""
|
||||
|
||||
#: messages.go:190
|
||||
msgid "Upload has been processed"
|
||||
#, c-format
|
||||
msgid "Removed %d files and %d photos"
|
||||
msgstr ""
|
||||
|
||||
#: messages.go:191
|
||||
msgid "Selection approved"
|
||||
#, c-format
|
||||
msgid "Moving files from %s"
|
||||
msgstr ""
|
||||
|
||||
#: messages.go:192
|
||||
msgid "Selection archived"
|
||||
#, c-format
|
||||
msgid "Copying files from %s"
|
||||
msgstr ""
|
||||
|
||||
#: messages.go:193
|
||||
msgid "Selection restored"
|
||||
msgid "Labels deleted"
|
||||
msgstr ""
|
||||
|
||||
#: messages.go:194
|
||||
msgid "Selection marked as private"
|
||||
msgid "Label saved"
|
||||
msgstr ""
|
||||
|
||||
#: messages.go:195
|
||||
msgid "Albums deleted"
|
||||
msgid "Subject saved"
|
||||
msgstr ""
|
||||
|
||||
#: messages.go:196
|
||||
msgid "Subject deleted"
|
||||
msgstr ""
|
||||
|
||||
#: messages.go:197
|
||||
msgid "Person saved"
|
||||
msgstr ""
|
||||
|
||||
#: messages.go:198
|
||||
msgid "Person deleted"
|
||||
msgstr ""
|
||||
|
||||
#: messages.go:199
|
||||
msgid "File uploaded"
|
||||
msgstr ""
|
||||
|
||||
#: messages.go:200
|
||||
#, c-format
|
||||
msgid "%d files uploaded in %d s"
|
||||
msgstr ""
|
||||
|
||||
#: messages.go:201
|
||||
msgid "Processing upload..."
|
||||
msgstr ""
|
||||
|
||||
#: messages.go:202
|
||||
msgid "Upload has been processed"
|
||||
msgstr ""
|
||||
|
||||
#: messages.go:203
|
||||
msgid "Selection approved"
|
||||
msgstr ""
|
||||
|
||||
#: messages.go:204
|
||||
msgid "Selection archived"
|
||||
msgstr ""
|
||||
|
||||
#: messages.go:205
|
||||
msgid "Selection restored"
|
||||
msgstr ""
|
||||
|
||||
#: messages.go:206
|
||||
msgid "Selection marked as private"
|
||||
msgstr ""
|
||||
|
||||
#: messages.go:207
|
||||
msgid "Albums deleted"
|
||||
msgstr ""
|
||||
|
||||
#: messages.go:208
|
||||
#, c-format
|
||||
msgid "Zip created in %d s"
|
||||
msgstr ""
|
||||
|
||||
#: messages.go:197
|
||||
#: messages.go:209
|
||||
msgid "Permanently deleted"
|
||||
msgstr ""
|
||||
|
||||
#: messages.go:198
|
||||
#: messages.go:210
|
||||
#, c-format
|
||||
msgid "%s has been restored"
|
||||
msgstr ""
|
||||
|
||||
#: messages.go:199
|
||||
#: messages.go:211
|
||||
msgid "Successfully verified"
|
||||
msgstr ""
|
||||
|
||||
#: messages.go:200
|
||||
#: messages.go:212
|
||||
msgid "Successfully activated"
|
||||
msgstr ""
|
||||
|
|
|
|||
|
|
@ -2,8 +2,8 @@ msgid ""
|
|||
msgstr ""
|
||||
"Project-Id-Version: PACKAGE VERSION\n"
|
||||
"Report-Msgid-Bugs-To: \n"
|
||||
"POT-Creation-Date: 2025-10-17 17:32+0000\n"
|
||||
"PO-Revision-Date: 2025-10-22 08:25+0000\n"
|
||||
"POT-Creation-Date: 2026-06-27 09:13+0000\n"
|
||||
"PO-Revision-Date: 2026-06-27 10:28+0000\n"
|
||||
"Last-Translator: Google Cloud Translation Basic <noreply-mt-google-"
|
||||
"translate@weblate.org>\n"
|
||||
"Language-Team: none\n"
|
||||
|
|
@ -12,402 +12,418 @@ msgstr ""
|
|||
"Content-Type: text/plain; charset=UTF-8\n"
|
||||
"Content-Transfer-Encoding: 8bit\n"
|
||||
"Plural-Forms: nplurals=1; plural=0;\n"
|
||||
"X-Generator: Weblate 5.13.3\n"
|
||||
"X-Generator: Weblate 2026.5\n"
|
||||
|
||||
#: messages.go:104
|
||||
#: messages.go:112
|
||||
msgid "Something went wrong, try again"
|
||||
msgstr "Kesilapan telah berlaku, cuba lagi"
|
||||
|
||||
#: messages.go:105
|
||||
#: messages.go:113
|
||||
msgid "Unable to do that"
|
||||
msgstr "Tidak mampu berbuat demikian"
|
||||
|
||||
#: messages.go:106
|
||||
#: messages.go:114
|
||||
msgid "Changes could not be saved"
|
||||
msgstr "Perubahan tidak dapat disimpan"
|
||||
|
||||
#: messages.go:107
|
||||
#: messages.go:115
|
||||
msgid "Could not be deleted"
|
||||
msgstr "Tidak dapat dipadamkan"
|
||||
|
||||
#: messages.go:108
|
||||
#: messages.go:116
|
||||
#, c-format
|
||||
msgid "%s already exists"
|
||||
msgstr "%s sudah wujud"
|
||||
|
||||
#: messages.go:109
|
||||
#: messages.go:117
|
||||
msgid "Not found"
|
||||
msgstr "Tidak ditemui"
|
||||
|
||||
#: messages.go:110
|
||||
#: messages.go:118
|
||||
msgid "File not found"
|
||||
msgstr "Fail tidak dijumpai"
|
||||
|
||||
#: messages.go:111
|
||||
#: messages.go:119
|
||||
msgid "File too large"
|
||||
msgstr "Fail terlalu besar"
|
||||
|
||||
#: messages.go:112
|
||||
#: messages.go:120
|
||||
msgid "Unsupported"
|
||||
msgstr "Tidak disokong"
|
||||
|
||||
#: messages.go:113
|
||||
#: messages.go:121
|
||||
msgid "Unsupported type"
|
||||
msgstr "Jenis tidak disokong"
|
||||
|
||||
#: messages.go:114
|
||||
#: messages.go:122
|
||||
msgid "Unsupported format"
|
||||
msgstr "Format yang tidak disokong"
|
||||
|
||||
#: messages.go:115
|
||||
#: messages.go:123
|
||||
msgid "Originals folder is empty"
|
||||
msgstr "Folder asal kosong"
|
||||
|
||||
#: messages.go:116
|
||||
#: messages.go:124
|
||||
msgid "Selection not found"
|
||||
msgstr "Pilihan tidak ditemui"
|
||||
|
||||
#: messages.go:117
|
||||
#: messages.go:125
|
||||
msgid "Entity not found"
|
||||
msgstr "Entiti tidak ditemui"
|
||||
|
||||
#: messages.go:118
|
||||
#: messages.go:126
|
||||
msgid "Account not found"
|
||||
msgstr "akaun tidak dijumpai"
|
||||
|
||||
#: messages.go:119
|
||||
#: messages.go:127
|
||||
msgid "User not found"
|
||||
msgstr "Pengguna tidak dijumpai"
|
||||
|
||||
#: messages.go:120
|
||||
#: messages.go:128
|
||||
msgid "Label not found"
|
||||
msgstr "Label tidak ditemui"
|
||||
|
||||
#: messages.go:121
|
||||
#: messages.go:129
|
||||
msgid "Camera not found"
|
||||
msgstr "Kamera tidak ditemui"
|
||||
|
||||
#: messages.go:130
|
||||
msgid "Lens not found"
|
||||
msgstr "Lensa tidak ditemui"
|
||||
|
||||
#: messages.go:131
|
||||
msgid "Album not found"
|
||||
msgstr "Album tidak ditemui"
|
||||
|
||||
#: messages.go:122
|
||||
#: messages.go:132
|
||||
msgid "Subject not found"
|
||||
msgstr "Subjek tidak ditemui"
|
||||
|
||||
#: messages.go:123
|
||||
#: messages.go:133
|
||||
msgid "Person not found"
|
||||
msgstr "Orang tidak ditemui"
|
||||
|
||||
#: messages.go:124
|
||||
#: messages.go:134
|
||||
msgid "Face not found"
|
||||
msgstr "Wajah tidak ditemui"
|
||||
|
||||
#: messages.go:125
|
||||
#: messages.go:135
|
||||
msgid "Not available in public mode"
|
||||
msgstr "Tidak tersedia dalam mod awam"
|
||||
|
||||
#: messages.go:126
|
||||
#: messages.go:136
|
||||
msgid "Not available in read-only mode"
|
||||
msgstr "Tidak tersedia dalam mod baca sahaja"
|
||||
|
||||
#: messages.go:127
|
||||
#: messages.go:137
|
||||
msgid "Please log in to your account"
|
||||
msgstr "Sila log masuk ke akaun anda"
|
||||
|
||||
#: messages.go:128
|
||||
#: messages.go:138
|
||||
msgid "Permission denied"
|
||||
msgstr "Kebenaran ditolak"
|
||||
|
||||
#: messages.go:129
|
||||
#: messages.go:139
|
||||
msgid "Payment required"
|
||||
msgstr "Bayaran diperlukan"
|
||||
|
||||
#: messages.go:130
|
||||
#: messages.go:140
|
||||
msgid "Upload might be offensive"
|
||||
msgstr "Muat naik mungkin menyinggung perasaan"
|
||||
|
||||
#: messages.go:131
|
||||
#: messages.go:141
|
||||
msgid "Upload failed"
|
||||
msgstr "Muat naik gagal"
|
||||
|
||||
#: messages.go:132
|
||||
#: messages.go:142
|
||||
msgid "No items selected"
|
||||
msgstr "Tiada item dipilih"
|
||||
|
||||
#: messages.go:133
|
||||
#: messages.go:143
|
||||
msgid "Failed creating file, please check permissions"
|
||||
msgstr "Gagal membuat fail, sila semak kebenaran"
|
||||
|
||||
#: messages.go:134
|
||||
#: messages.go:144
|
||||
msgid "Failed creating folder, please check permissions"
|
||||
msgstr "Gagal membuat folder, sila semak kebenaran"
|
||||
|
||||
#: messages.go:135
|
||||
#: messages.go:145
|
||||
msgid "Could not connect, please try again"
|
||||
msgstr "Tidak dapat menyambung, sila cuba lagi"
|
||||
|
||||
#: messages.go:136
|
||||
#: messages.go:146
|
||||
msgid "Enter verification code"
|
||||
msgstr "Masukkan kod pengesahan"
|
||||
|
||||
#: messages.go:137
|
||||
#: messages.go:147
|
||||
msgid "Invalid verification code, please try again"
|
||||
msgstr "Kod pengesahan tidak sah, sila cuba lagi"
|
||||
|
||||
#: messages.go:138
|
||||
#: messages.go:148
|
||||
msgid "Invalid password, please try again"
|
||||
msgstr "Kata laluan tidak sah, sila cuba lagi"
|
||||
|
||||
#: messages.go:139
|
||||
#: messages.go:149
|
||||
msgid "Feature disabled"
|
||||
msgstr "Ciri dilumpuhkan"
|
||||
|
||||
#: messages.go:140
|
||||
#: messages.go:150
|
||||
msgid "No labels selected"
|
||||
msgstr "Tiada label dipilih"
|
||||
|
||||
#: messages.go:141
|
||||
#: messages.go:151
|
||||
msgid "No albums selected"
|
||||
msgstr "Tiada album dipilih"
|
||||
|
||||
#: messages.go:142
|
||||
#: messages.go:152
|
||||
msgid "No files available for download"
|
||||
msgstr "Tiada fail tersedia untuk dimuat turun"
|
||||
|
||||
#: messages.go:143
|
||||
#: messages.go:153
|
||||
msgid "Failed to create zip file"
|
||||
msgstr "Gagal membuat fail zip"
|
||||
|
||||
#: messages.go:144
|
||||
#: messages.go:154
|
||||
msgid "Invalid credentials"
|
||||
msgstr "Bukti kelayakan tidak sah"
|
||||
|
||||
#: messages.go:145
|
||||
#: messages.go:155
|
||||
msgid "Invalid link"
|
||||
msgstr "Pautan tidak sah"
|
||||
|
||||
#: messages.go:146
|
||||
#: messages.go:156
|
||||
msgid "Invalid name"
|
||||
msgstr "Nama tidak sah"
|
||||
|
||||
#: messages.go:147
|
||||
#: messages.go:157
|
||||
msgid "Busy, please try again later"
|
||||
msgstr "Sibuk, sila cuba lagi nanti"
|
||||
|
||||
#: messages.go:148
|
||||
#: messages.go:158
|
||||
#, c-format
|
||||
msgid "The wakeup interval is %s, but must be 1h or less"
|
||||
msgstr "Selang bangun ialah %s, tetapi mestilah 1j atau kurang"
|
||||
|
||||
#: messages.go:149
|
||||
#: messages.go:159
|
||||
msgid "Your account could not be connected"
|
||||
msgstr "Akaun anda tidak dapat disambungkan"
|
||||
|
||||
#: messages.go:150
|
||||
#: messages.go:160
|
||||
msgid "Too many requests"
|
||||
msgstr "Terlalu banyak permintaan"
|
||||
|
||||
#: messages.go:151
|
||||
#: messages.go:161
|
||||
msgid "Insufficient storage"
|
||||
msgstr "Storan tidak mencukupi"
|
||||
|
||||
#: messages.go:152
|
||||
#: messages.go:162
|
||||
msgid "Quota exceeded"
|
||||
msgstr "Kuota melebihi"
|
||||
|
||||
#: messages.go:155
|
||||
#: messages.go:163
|
||||
msgid "Registration disabled"
|
||||
msgstr "Pendaftaran dilumpuhkan"
|
||||
|
||||
#: messages.go:164
|
||||
msgid "Verified email required"
|
||||
msgstr "E-mel yang disahkan diperlukan"
|
||||
|
||||
#: messages.go:167
|
||||
msgid "Changes successfully saved"
|
||||
msgstr "Perubahan berjaya disimpan"
|
||||
|
||||
#: messages.go:156
|
||||
#: messages.go:168
|
||||
msgid "Album created"
|
||||
msgstr "Album dibuat"
|
||||
|
||||
#: messages.go:157
|
||||
#: messages.go:169
|
||||
msgid "Album saved"
|
||||
msgstr "Album disimpan"
|
||||
|
||||
#: messages.go:158
|
||||
#: messages.go:170
|
||||
#, c-format
|
||||
msgid "Album %s deleted"
|
||||
msgstr "Album %s dipadamkan"
|
||||
|
||||
#: messages.go:159
|
||||
#: messages.go:171
|
||||
msgid "Album contents cloned"
|
||||
msgstr "Kandungan album diklon"
|
||||
|
||||
#: messages.go:160
|
||||
#: messages.go:172
|
||||
msgid "File removed from stack"
|
||||
msgstr "Fail dialih keluar daripada timbunan"
|
||||
|
||||
#: messages.go:161
|
||||
#: messages.go:173
|
||||
msgid "File deleted"
|
||||
msgstr "Fail dipadamkan"
|
||||
|
||||
#: messages.go:162
|
||||
#: messages.go:174
|
||||
#, c-format
|
||||
msgid "Selection added to %s"
|
||||
msgstr "Pilihan ditambahkan pada %s"
|
||||
|
||||
#: messages.go:163
|
||||
#: messages.go:175
|
||||
#, c-format
|
||||
msgid "One entry added to %s"
|
||||
msgstr "Satu entri ditambahkan pada %s"
|
||||
|
||||
#: messages.go:164
|
||||
#: messages.go:176
|
||||
#, c-format
|
||||
msgid "%d entries added to %s"
|
||||
msgstr "Entri %d ditambahkan pada %s"
|
||||
|
||||
#: messages.go:165
|
||||
#: messages.go:177
|
||||
#, c-format
|
||||
msgid "One entry removed from %s"
|
||||
msgstr "Satu entri dialih keluar daripada %s"
|
||||
|
||||
#: messages.go:166
|
||||
#: messages.go:178
|
||||
#, c-format
|
||||
msgid "%d entries removed from %s"
|
||||
msgstr "%d entri dialih keluar daripada %s"
|
||||
|
||||
#: messages.go:167
|
||||
#: messages.go:179
|
||||
msgid "Account created"
|
||||
msgstr "Akaun dibuat"
|
||||
|
||||
#: messages.go:168
|
||||
#: messages.go:180
|
||||
msgid "Account saved"
|
||||
msgstr "Akaun disimpan"
|
||||
|
||||
#: messages.go:169
|
||||
#: messages.go:181
|
||||
msgid "Account deleted"
|
||||
msgstr "Akaun dipadamkan"
|
||||
|
||||
#: messages.go:170
|
||||
#: messages.go:182
|
||||
msgid "Settings saved"
|
||||
msgstr "Tetapan Disimpan"
|
||||
|
||||
#: messages.go:171
|
||||
#: messages.go:183
|
||||
msgid "Password changed"
|
||||
msgstr "Kata laluan ditukar"
|
||||
|
||||
#: messages.go:172
|
||||
#: messages.go:184
|
||||
#, c-format
|
||||
msgid "Import completed in %d s"
|
||||
msgstr "Import selesai dalam %d s"
|
||||
|
||||
#: messages.go:173
|
||||
#: messages.go:185
|
||||
msgid "Import canceled"
|
||||
msgstr "Import dibatalkan"
|
||||
|
||||
#: messages.go:174
|
||||
#: messages.go:186
|
||||
#, c-format
|
||||
msgid "Indexing completed in %d s"
|
||||
msgstr "Pengindeksan selesai dalam %d s"
|
||||
|
||||
#: messages.go:175
|
||||
#: messages.go:187
|
||||
msgid "Indexing originals..."
|
||||
msgstr "Mengindeks asal..."
|
||||
|
||||
#: messages.go:176
|
||||
#: messages.go:188
|
||||
#, c-format
|
||||
msgid "Indexing files in %s"
|
||||
msgstr "Mengindeks fail dalam %s"
|
||||
|
||||
#: messages.go:177
|
||||
#: messages.go:189
|
||||
msgid "Indexing canceled"
|
||||
msgstr "Pengindeksan dibatalkan"
|
||||
|
||||
#: messages.go:178
|
||||
#: messages.go:190
|
||||
#, c-format
|
||||
msgid "Removed %d files and %d photos"
|
||||
msgstr "Mengalih keluar fail %d dan foto %d."
|
||||
|
||||
#: messages.go:179
|
||||
#: messages.go:191
|
||||
#, c-format
|
||||
msgid "Moving files from %s"
|
||||
msgstr "Memindahkan fail dari %s"
|
||||
|
||||
#: messages.go:180
|
||||
#: messages.go:192
|
||||
#, c-format
|
||||
msgid "Copying files from %s"
|
||||
msgstr "Menyalin fail daripada %s"
|
||||
|
||||
#: messages.go:181
|
||||
#: messages.go:193
|
||||
msgid "Labels deleted"
|
||||
msgstr "Label dipadamkan"
|
||||
|
||||
#: messages.go:182
|
||||
#: messages.go:194
|
||||
msgid "Label saved"
|
||||
msgstr "Label disimpan"
|
||||
|
||||
#: messages.go:183
|
||||
#: messages.go:195
|
||||
msgid "Subject saved"
|
||||
msgstr "Subjek disimpan"
|
||||
|
||||
#: messages.go:184
|
||||
#: messages.go:196
|
||||
msgid "Subject deleted"
|
||||
msgstr "Subjek dipadamkan"
|
||||
|
||||
#: messages.go:185
|
||||
#: messages.go:197
|
||||
msgid "Person saved"
|
||||
msgstr "Orang yang diselamatkan"
|
||||
|
||||
#: messages.go:186
|
||||
#: messages.go:198
|
||||
msgid "Person deleted"
|
||||
msgstr "Orang dipadamkan"
|
||||
|
||||
#: messages.go:187
|
||||
#: messages.go:199
|
||||
msgid "File uploaded"
|
||||
msgstr "Fail dimuat naik"
|
||||
|
||||
#: messages.go:188
|
||||
#: messages.go:200
|
||||
#, c-format
|
||||
msgid "%d files uploaded in %d s"
|
||||
msgstr "Fail %d dimuat naik dalam %d s"
|
||||
|
||||
#: messages.go:189
|
||||
#: messages.go:201
|
||||
msgid "Processing upload..."
|
||||
msgstr "Memproses muat naik..."
|
||||
|
||||
#: messages.go:190
|
||||
#: messages.go:202
|
||||
msgid "Upload has been processed"
|
||||
msgstr "Muat naik telah diproses"
|
||||
|
||||
#: messages.go:191
|
||||
#: messages.go:203
|
||||
msgid "Selection approved"
|
||||
msgstr "Pemilihan diluluskan"
|
||||
|
||||
#: messages.go:192
|
||||
#: messages.go:204
|
||||
msgid "Selection archived"
|
||||
msgstr "Pemilihan diarkibkan"
|
||||
|
||||
#: messages.go:193
|
||||
#: messages.go:205
|
||||
msgid "Selection restored"
|
||||
msgstr "Pemilihan dipulihkan"
|
||||
|
||||
#: messages.go:194
|
||||
#: messages.go:206
|
||||
msgid "Selection marked as private"
|
||||
msgstr "Pilihan ditandakan sebagai peribadi"
|
||||
|
||||
#: messages.go:195
|
||||
#: messages.go:207
|
||||
msgid "Albums deleted"
|
||||
msgstr "Album dipadamkan"
|
||||
|
||||
#: messages.go:196
|
||||
#: messages.go:208
|
||||
#, c-format
|
||||
msgid "Zip created in %d s"
|
||||
msgstr "Zip dibuat dalam %d s"
|
||||
|
||||
#: messages.go:197
|
||||
#: messages.go:209
|
||||
msgid "Permanently deleted"
|
||||
msgstr "Dipadamkan secara kekal"
|
||||
|
||||
#: messages.go:198
|
||||
#: messages.go:210
|
||||
#, c-format
|
||||
msgid "%s has been restored"
|
||||
msgstr "%s telah dipulihkan"
|
||||
|
||||
#: messages.go:199
|
||||
#: messages.go:211
|
||||
msgid "Successfully verified"
|
||||
msgstr "Berjaya disahkan"
|
||||
|
||||
#: messages.go:200
|
||||
#: messages.go:212
|
||||
msgid "Successfully activated"
|
||||
msgstr "Berjaya diaktifkan"
|
||||
|
||||
|
|
|
|||
|
|
@ -2,9 +2,10 @@ msgid ""
|
|||
msgstr ""
|
||||
"Project-Id-Version: \n"
|
||||
"Report-Msgid-Bugs-To: \n"
|
||||
"POT-Creation-Date: 2025-10-17 17:32+0000\n"
|
||||
"PO-Revision-Date: 2025-10-22 08:25+0000\n"
|
||||
"Last-Translator: DeepL <noreply-mt-deepl@weblate.org>\n"
|
||||
"POT-Creation-Date: 2026-06-27 09:13+0000\n"
|
||||
"PO-Revision-Date: 2026-06-27 10:28+0000\n"
|
||||
"Last-Translator: Google Cloud Translation Basic <noreply-mt-google-"
|
||||
"translate@weblate.org>\n"
|
||||
"Language-Team: Norwegian Bokmål <https://translate.photoprism.app/projects/"
|
||||
"photoprism/backend/nb_NO/>\n"
|
||||
"Language: nb\n"
|
||||
|
|
@ -12,402 +13,418 @@ msgstr ""
|
|||
"Content-Type: text/plain; charset=UTF-8\n"
|
||||
"Content-Transfer-Encoding: 8bit\n"
|
||||
"Plural-Forms: nplurals=2; plural=n != 1;\n"
|
||||
"X-Generator: Weblate 5.13.3\n"
|
||||
"X-Generator: Weblate 2026.5\n"
|
||||
|
||||
#: messages.go:104
|
||||
#: messages.go:112
|
||||
msgid "Something went wrong, try again"
|
||||
msgstr "Noe gikk galt, prøv igjen"
|
||||
|
||||
#: messages.go:105
|
||||
#: messages.go:113
|
||||
msgid "Unable to do that"
|
||||
msgstr "Ikke i stand til å gjøre det"
|
||||
|
||||
#: messages.go:106
|
||||
#: messages.go:114
|
||||
msgid "Changes could not be saved"
|
||||
msgstr "Kan ikke lagre endringer"
|
||||
|
||||
#: messages.go:107
|
||||
#: messages.go:115
|
||||
msgid "Could not be deleted"
|
||||
msgstr "Kan ikke slettes"
|
||||
|
||||
#: messages.go:108
|
||||
#: messages.go:116
|
||||
#, c-format
|
||||
msgid "%s already exists"
|
||||
msgstr "%s eksisterer allerede"
|
||||
|
||||
#: messages.go:109
|
||||
#: messages.go:117
|
||||
msgid "Not found"
|
||||
msgstr "Ikke funnet"
|
||||
|
||||
#: messages.go:110
|
||||
#: messages.go:118
|
||||
msgid "File not found"
|
||||
msgstr "Fil ikke funnet"
|
||||
|
||||
#: messages.go:111
|
||||
#: messages.go:119
|
||||
msgid "File too large"
|
||||
msgstr "Filen er for stor"
|
||||
|
||||
#: messages.go:112
|
||||
#: messages.go:120
|
||||
msgid "Unsupported"
|
||||
msgstr "Ustøttet"
|
||||
|
||||
#: messages.go:113
|
||||
#: messages.go:121
|
||||
msgid "Unsupported type"
|
||||
msgstr "Ikke støttet type"
|
||||
|
||||
#: messages.go:114
|
||||
#: messages.go:122
|
||||
msgid "Unsupported format"
|
||||
msgstr "Ikke støttet format"
|
||||
|
||||
#: messages.go:115
|
||||
#: messages.go:123
|
||||
msgid "Originals folder is empty"
|
||||
msgstr "Originaler-mappen er tom"
|
||||
|
||||
#: messages.go:116
|
||||
#: messages.go:124
|
||||
msgid "Selection not found"
|
||||
msgstr "Finner ikke utvalg"
|
||||
|
||||
#: messages.go:117
|
||||
#: messages.go:125
|
||||
msgid "Entity not found"
|
||||
msgstr "Enheten ble ikke funnet"
|
||||
|
||||
#: messages.go:118
|
||||
#: messages.go:126
|
||||
msgid "Account not found"
|
||||
msgstr "Konto ikke funnet"
|
||||
|
||||
#: messages.go:119
|
||||
#: messages.go:127
|
||||
msgid "User not found"
|
||||
msgstr "Bruker ikke funnet"
|
||||
|
||||
#: messages.go:120
|
||||
#: messages.go:128
|
||||
msgid "Label not found"
|
||||
msgstr "Merkelapp ikke funnet"
|
||||
|
||||
#: messages.go:121
|
||||
#: messages.go:129
|
||||
msgid "Camera not found"
|
||||
msgstr "Kameraet ble ikke funnet"
|
||||
|
||||
#: messages.go:130
|
||||
msgid "Lens not found"
|
||||
msgstr "Objektivet ble ikke funnet"
|
||||
|
||||
#: messages.go:131
|
||||
msgid "Album not found"
|
||||
msgstr "Album ikke funnet"
|
||||
|
||||
#: messages.go:122
|
||||
#: messages.go:132
|
||||
msgid "Subject not found"
|
||||
msgstr "Emnet ble ikke funnet"
|
||||
|
||||
#: messages.go:123
|
||||
#: messages.go:133
|
||||
msgid "Person not found"
|
||||
msgstr "Person ikke funnet"
|
||||
|
||||
#: messages.go:124
|
||||
#: messages.go:134
|
||||
msgid "Face not found"
|
||||
msgstr "Ansikt ikke funnet"
|
||||
|
||||
#: messages.go:125
|
||||
#: messages.go:135
|
||||
msgid "Not available in public mode"
|
||||
msgstr "Ikke tilgjengelig i offentlig modus"
|
||||
|
||||
#: messages.go:126
|
||||
#: messages.go:136
|
||||
msgid "Not available in read-only mode"
|
||||
msgstr "ikke tilgjengelig i skrivebeskyttet modus"
|
||||
|
||||
#: messages.go:127
|
||||
#: messages.go:137
|
||||
msgid "Please log in to your account"
|
||||
msgstr "Logg inn på kontoen din"
|
||||
|
||||
#: messages.go:128
|
||||
#: messages.go:138
|
||||
msgid "Permission denied"
|
||||
msgstr "Ingen tilgang"
|
||||
|
||||
#: messages.go:129
|
||||
#: messages.go:139
|
||||
msgid "Payment required"
|
||||
msgstr "Betaling kreves"
|
||||
|
||||
#: messages.go:130
|
||||
#: messages.go:140
|
||||
msgid "Upload might be offensive"
|
||||
msgstr "Opplastingen kan være støtende"
|
||||
|
||||
#: messages.go:131
|
||||
#: messages.go:141
|
||||
msgid "Upload failed"
|
||||
msgstr "Opplasting mislyktes"
|
||||
|
||||
#: messages.go:132
|
||||
#: messages.go:142
|
||||
msgid "No items selected"
|
||||
msgstr "Ingen elementer valgt"
|
||||
|
||||
#: messages.go:133
|
||||
#: messages.go:143
|
||||
msgid "Failed creating file, please check permissions"
|
||||
msgstr "Kunne ikke opprette fil, vennligst sjekk tillatelser"
|
||||
|
||||
#: messages.go:134
|
||||
#: messages.go:144
|
||||
msgid "Failed creating folder, please check permissions"
|
||||
msgstr "Kunne ikke opprette mappe, vennligst sjekk tillatelser"
|
||||
|
||||
#: messages.go:135
|
||||
#: messages.go:145
|
||||
msgid "Could not connect, please try again"
|
||||
msgstr "Kunne ikke koble til, vennligst prøv igjen"
|
||||
|
||||
#: messages.go:136
|
||||
#: messages.go:146
|
||||
msgid "Enter verification code"
|
||||
msgstr "Angi verifikasjonskode"
|
||||
|
||||
#: messages.go:137
|
||||
#: messages.go:147
|
||||
msgid "Invalid verification code, please try again"
|
||||
msgstr "Ugyldig bekreftelseskode. Prøv igjen"
|
||||
|
||||
#: messages.go:138
|
||||
#: messages.go:148
|
||||
msgid "Invalid password, please try again"
|
||||
msgstr "Ugyldig passord, vennligst prøv igjen"
|
||||
|
||||
#: messages.go:139
|
||||
#: messages.go:149
|
||||
msgid "Feature disabled"
|
||||
msgstr "Tjeneste deaktivert"
|
||||
|
||||
#: messages.go:140
|
||||
#: messages.go:150
|
||||
msgid "No labels selected"
|
||||
msgstr "Ingen merkelapper valgt"
|
||||
|
||||
#: messages.go:141
|
||||
#: messages.go:151
|
||||
msgid "No albums selected"
|
||||
msgstr "Ingen albumer valgt"
|
||||
|
||||
#: messages.go:142
|
||||
#: messages.go:152
|
||||
msgid "No files available for download"
|
||||
msgstr "Ingen filer tilgjengelig for nedlasting"
|
||||
|
||||
#: messages.go:143
|
||||
#: messages.go:153
|
||||
msgid "Failed to create zip file"
|
||||
msgstr "Kunne ikke opprette zip-arkiv"
|
||||
|
||||
#: messages.go:144
|
||||
#: messages.go:154
|
||||
msgid "Invalid credentials"
|
||||
msgstr "Ugyldige innloggingsdetaljer"
|
||||
|
||||
#: messages.go:145
|
||||
#: messages.go:155
|
||||
msgid "Invalid link"
|
||||
msgstr "Ugyldig lenke"
|
||||
|
||||
#: messages.go:146
|
||||
#: messages.go:156
|
||||
msgid "Invalid name"
|
||||
msgstr "Ugyldig navn"
|
||||
|
||||
#: messages.go:147
|
||||
#: messages.go:157
|
||||
msgid "Busy, please try again later"
|
||||
msgstr "Opptatt. Prøv igjen senere"
|
||||
|
||||
#: messages.go:148
|
||||
#: messages.go:158
|
||||
#, c-format
|
||||
msgid "The wakeup interval is %s, but must be 1h or less"
|
||||
msgstr "Oppvåkningsintervallet er %s, men må være 1 time eller mindre"
|
||||
|
||||
#: messages.go:149
|
||||
#: messages.go:159
|
||||
msgid "Your account could not be connected"
|
||||
msgstr "Kontoen din kunne ikke kobles til"
|
||||
|
||||
#: messages.go:150
|
||||
#: messages.go:160
|
||||
msgid "Too many requests"
|
||||
msgstr "For mange forespørsler"
|
||||
|
||||
#: messages.go:151
|
||||
#: messages.go:161
|
||||
msgid "Insufficient storage"
|
||||
msgstr "Utilstrekkelig lagringsplass"
|
||||
|
||||
#: messages.go:152
|
||||
#: messages.go:162
|
||||
msgid "Quota exceeded"
|
||||
msgstr "Kvote overskredet"
|
||||
|
||||
#: messages.go:155
|
||||
#: messages.go:163
|
||||
msgid "Registration disabled"
|
||||
msgstr "Registrering deaktivert"
|
||||
|
||||
#: messages.go:164
|
||||
msgid "Verified email required"
|
||||
msgstr "Bekreftet e-post kreves"
|
||||
|
||||
#: messages.go:167
|
||||
msgid "Changes successfully saved"
|
||||
msgstr "Endringene ble lagret"
|
||||
|
||||
#: messages.go:156
|
||||
#: messages.go:168
|
||||
msgid "Album created"
|
||||
msgstr "Album opprettet"
|
||||
|
||||
#: messages.go:157
|
||||
#: messages.go:169
|
||||
msgid "Album saved"
|
||||
msgstr "Album lagret"
|
||||
|
||||
#: messages.go:158
|
||||
#: messages.go:170
|
||||
#, c-format
|
||||
msgid "Album %s deleted"
|
||||
msgstr "Album %s slettet"
|
||||
|
||||
#: messages.go:159
|
||||
#: messages.go:171
|
||||
msgid "Album contents cloned"
|
||||
msgstr "Albuminnhold duplisert"
|
||||
|
||||
#: messages.go:160
|
||||
#: messages.go:172
|
||||
msgid "File removed from stack"
|
||||
msgstr "Fil fjernet fra samling"
|
||||
|
||||
#: messages.go:161
|
||||
#: messages.go:173
|
||||
msgid "File deleted"
|
||||
msgstr "Fil slettet"
|
||||
|
||||
#: messages.go:162
|
||||
#: messages.go:174
|
||||
#, c-format
|
||||
msgid "Selection added to %s"
|
||||
msgstr "Utvalg lagt til %s"
|
||||
|
||||
#: messages.go:163
|
||||
#: messages.go:175
|
||||
#, c-format
|
||||
msgid "One entry added to %s"
|
||||
msgstr "En oppføring lagt til %s"
|
||||
|
||||
#: messages.go:164
|
||||
#: messages.go:176
|
||||
#, c-format
|
||||
msgid "%d entries added to %s"
|
||||
msgstr "%d oppføringer lagt til %s"
|
||||
|
||||
#: messages.go:165
|
||||
#: messages.go:177
|
||||
#, c-format
|
||||
msgid "One entry removed from %s"
|
||||
msgstr "En oppføring fjernet fra %s"
|
||||
|
||||
#: messages.go:166
|
||||
#: messages.go:178
|
||||
#, c-format
|
||||
msgid "%d entries removed from %s"
|
||||
msgstr "%d oppføringer fjernet fra %s"
|
||||
|
||||
#: messages.go:167
|
||||
#: messages.go:179
|
||||
msgid "Account created"
|
||||
msgstr "Konto opprettet"
|
||||
|
||||
#: messages.go:168
|
||||
#: messages.go:180
|
||||
msgid "Account saved"
|
||||
msgstr "Konto lagret"
|
||||
|
||||
#: messages.go:169
|
||||
#: messages.go:181
|
||||
msgid "Account deleted"
|
||||
msgstr "Konto slettet"
|
||||
|
||||
#: messages.go:170
|
||||
#: messages.go:182
|
||||
msgid "Settings saved"
|
||||
msgstr "Innstillinger lagret"
|
||||
|
||||
#: messages.go:171
|
||||
#: messages.go:183
|
||||
msgid "Password changed"
|
||||
msgstr "Passord endret"
|
||||
|
||||
#: messages.go:172
|
||||
#: messages.go:184
|
||||
#, c-format
|
||||
msgid "Import completed in %d s"
|
||||
msgstr "Import fullført på %d s"
|
||||
|
||||
#: messages.go:173
|
||||
#: messages.go:185
|
||||
msgid "Import canceled"
|
||||
msgstr "Import avbrutt"
|
||||
|
||||
#: messages.go:174
|
||||
#: messages.go:186
|
||||
#, c-format
|
||||
msgid "Indexing completed in %d s"
|
||||
msgstr "Indeksering fullført på %d s"
|
||||
|
||||
#: messages.go:175
|
||||
#: messages.go:187
|
||||
msgid "Indexing originals..."
|
||||
msgstr "Indekserer originaler…"
|
||||
|
||||
#: messages.go:176
|
||||
#: messages.go:188
|
||||
#, c-format
|
||||
msgid "Indexing files in %s"
|
||||
msgstr "Indekserer filer i %s"
|
||||
|
||||
#: messages.go:177
|
||||
#: messages.go:189
|
||||
msgid "Indexing canceled"
|
||||
msgstr "Indeksering avbrutt"
|
||||
|
||||
#: messages.go:178
|
||||
#: messages.go:190
|
||||
#, c-format
|
||||
msgid "Removed %d files and %d photos"
|
||||
msgstr "Fjernet %d filer og %d foto"
|
||||
|
||||
#: messages.go:179
|
||||
#: messages.go:191
|
||||
#, c-format
|
||||
msgid "Moving files from %s"
|
||||
msgstr "Flytter filer fra %s"
|
||||
|
||||
#: messages.go:180
|
||||
#: messages.go:192
|
||||
#, c-format
|
||||
msgid "Copying files from %s"
|
||||
msgstr "Kopierer filer fra %s"
|
||||
|
||||
#: messages.go:181
|
||||
#: messages.go:193
|
||||
msgid "Labels deleted"
|
||||
msgstr "Merkelapper slettet"
|
||||
|
||||
#: messages.go:182
|
||||
#: messages.go:194
|
||||
msgid "Label saved"
|
||||
msgstr "Merkelapper lagret"
|
||||
|
||||
#: messages.go:183
|
||||
#: messages.go:195
|
||||
msgid "Subject saved"
|
||||
msgstr "Emnet er lagret"
|
||||
|
||||
#: messages.go:184
|
||||
#: messages.go:196
|
||||
msgid "Subject deleted"
|
||||
msgstr "Emnet er slettet"
|
||||
|
||||
#: messages.go:185
|
||||
#: messages.go:197
|
||||
msgid "Person saved"
|
||||
msgstr "Person reddet"
|
||||
|
||||
#: messages.go:186
|
||||
#: messages.go:198
|
||||
msgid "Person deleted"
|
||||
msgstr "Person slettet"
|
||||
|
||||
#: messages.go:187
|
||||
#: messages.go:199
|
||||
msgid "File uploaded"
|
||||
msgstr "Fil lastet opp"
|
||||
|
||||
#: messages.go:188
|
||||
#: messages.go:200
|
||||
#, c-format
|
||||
msgid "%d files uploaded in %d s"
|
||||
msgstr "%d filer lastet opp på %d s"
|
||||
|
||||
#: messages.go:189
|
||||
#: messages.go:201
|
||||
msgid "Processing upload..."
|
||||
msgstr "Behandler opplasting..."
|
||||
|
||||
#: messages.go:190
|
||||
#: messages.go:202
|
||||
msgid "Upload has been processed"
|
||||
msgstr "Opplastingen er behandlet"
|
||||
|
||||
#: messages.go:191
|
||||
#: messages.go:203
|
||||
msgid "Selection approved"
|
||||
msgstr "Utvalg godkjent"
|
||||
|
||||
#: messages.go:192
|
||||
#: messages.go:204
|
||||
msgid "Selection archived"
|
||||
msgstr "Utvalg arkivert"
|
||||
|
||||
#: messages.go:193
|
||||
#: messages.go:205
|
||||
msgid "Selection restored"
|
||||
msgstr "Utvalg gjenopprettet"
|
||||
|
||||
#: messages.go:194
|
||||
#: messages.go:206
|
||||
msgid "Selection marked as private"
|
||||
msgstr "Utvalg markert som privat"
|
||||
|
||||
#: messages.go:195
|
||||
#: messages.go:207
|
||||
msgid "Albums deleted"
|
||||
msgstr "Album slettet"
|
||||
|
||||
#: messages.go:196
|
||||
#: messages.go:208
|
||||
#, c-format
|
||||
msgid "Zip created in %d s"
|
||||
msgstr "Zip opprettet på %d s"
|
||||
|
||||
#: messages.go:197
|
||||
#: messages.go:209
|
||||
msgid "Permanently deleted"
|
||||
msgstr "Permanent slettet"
|
||||
|
||||
#: messages.go:198
|
||||
#: messages.go:210
|
||||
#, c-format
|
||||
msgid "%s has been restored"
|
||||
msgstr "%s har blitt gjenopprettet"
|
||||
|
||||
#: messages.go:199
|
||||
#: messages.go:211
|
||||
msgid "Successfully verified"
|
||||
msgstr "Vellykket verifisert"
|
||||
|
||||
#: messages.go:200
|
||||
#: messages.go:212
|
||||
msgid "Successfully activated"
|
||||
msgstr "Vellykket aktivert"
|
||||
|
||||
|
|
|
|||
|
|
@ -2,9 +2,10 @@ msgid ""
|
|||
msgstr ""
|
||||
"Project-Id-Version: \n"
|
||||
"Report-Msgid-Bugs-To: \n"
|
||||
"POT-Creation-Date: 2025-10-17 17:32+0000\n"
|
||||
"PO-Revision-Date: 2025-10-22 08:25+0000\n"
|
||||
"Last-Translator: DeepL <noreply-mt-deepl@weblate.org>\n"
|
||||
"POT-Creation-Date: 2026-06-27 09:13+0000\n"
|
||||
"PO-Revision-Date: 2026-06-27 10:28+0000\n"
|
||||
"Last-Translator: Google Cloud Translation Basic <noreply-mt-google-"
|
||||
"translate@weblate.org>\n"
|
||||
"Language-Team: Dutch <https://translate.photoprism.app/projects/photoprism/"
|
||||
"backend/nl/>\n"
|
||||
"Language: nl\n"
|
||||
|
|
@ -12,402 +13,418 @@ msgstr ""
|
|||
"Content-Type: text/plain; charset=UTF-8\n"
|
||||
"Content-Transfer-Encoding: 8bit\n"
|
||||
"Plural-Forms: nplurals=2; plural=n != 1;\n"
|
||||
"X-Generator: Weblate 5.13.3\n"
|
||||
"X-Generator: Weblate 2026.5\n"
|
||||
|
||||
#: messages.go:104
|
||||
#: messages.go:112
|
||||
msgid "Something went wrong, try again"
|
||||
msgstr "Er ging iets mis, probeer het opnieuw"
|
||||
|
||||
#: messages.go:105
|
||||
#: messages.go:113
|
||||
msgid "Unable to do that"
|
||||
msgstr "Dat kan niet"
|
||||
|
||||
#: messages.go:106
|
||||
#: messages.go:114
|
||||
msgid "Changes could not be saved"
|
||||
msgstr "Wijzigingen kunnen niet worden opgeslagen"
|
||||
|
||||
#: messages.go:107
|
||||
#: messages.go:115
|
||||
msgid "Could not be deleted"
|
||||
msgstr "Kan niet verwijderd worden"
|
||||
|
||||
#: messages.go:108
|
||||
#: messages.go:116
|
||||
#, c-format
|
||||
msgid "%s already exists"
|
||||
msgstr "%s bestaat al"
|
||||
|
||||
#: messages.go:109
|
||||
#: messages.go:117
|
||||
msgid "Not found"
|
||||
msgstr "Niet gevonden"
|
||||
|
||||
#: messages.go:110
|
||||
#: messages.go:118
|
||||
msgid "File not found"
|
||||
msgstr "Bestand niet gevonden"
|
||||
|
||||
#: messages.go:111
|
||||
#: messages.go:119
|
||||
msgid "File too large"
|
||||
msgstr "Bestand te groot"
|
||||
|
||||
#: messages.go:112
|
||||
#: messages.go:120
|
||||
msgid "Unsupported"
|
||||
msgstr "Niet ondersteund"
|
||||
|
||||
#: messages.go:113
|
||||
#: messages.go:121
|
||||
msgid "Unsupported type"
|
||||
msgstr "Niet-ondersteund type"
|
||||
|
||||
#: messages.go:114
|
||||
#: messages.go:122
|
||||
msgid "Unsupported format"
|
||||
msgstr "Niet ondersteund formaat"
|
||||
|
||||
#: messages.go:115
|
||||
#: messages.go:123
|
||||
msgid "Originals folder is empty"
|
||||
msgstr "De map Originelen is leeg"
|
||||
|
||||
#: messages.go:116
|
||||
#: messages.go:124
|
||||
msgid "Selection not found"
|
||||
msgstr "Selectie niet gevonden"
|
||||
|
||||
#: messages.go:117
|
||||
#: messages.go:125
|
||||
msgid "Entity not found"
|
||||
msgstr "Entiteit niet gevonden"
|
||||
|
||||
#: messages.go:118
|
||||
#: messages.go:126
|
||||
msgid "Account not found"
|
||||
msgstr "Account niet gevonden"
|
||||
|
||||
#: messages.go:119
|
||||
#: messages.go:127
|
||||
msgid "User not found"
|
||||
msgstr "Gebruiker niet gevonden"
|
||||
|
||||
#: messages.go:120
|
||||
#: messages.go:128
|
||||
msgid "Label not found"
|
||||
msgstr "Label niet gevonden"
|
||||
|
||||
#: messages.go:121
|
||||
#: messages.go:129
|
||||
msgid "Camera not found"
|
||||
msgstr "Camera niet gevonden"
|
||||
|
||||
#: messages.go:130
|
||||
msgid "Lens not found"
|
||||
msgstr "Lens niet gevonden"
|
||||
|
||||
#: messages.go:131
|
||||
msgid "Album not found"
|
||||
msgstr "Album niet gevonden"
|
||||
|
||||
#: messages.go:122
|
||||
#: messages.go:132
|
||||
msgid "Subject not found"
|
||||
msgstr "Onderwerp niet gevonden"
|
||||
|
||||
#: messages.go:123
|
||||
#: messages.go:133
|
||||
msgid "Person not found"
|
||||
msgstr "Persoon niet gevonden"
|
||||
|
||||
#: messages.go:124
|
||||
#: messages.go:134
|
||||
msgid "Face not found"
|
||||
msgstr "Gezicht niet gevonden"
|
||||
|
||||
#: messages.go:125
|
||||
#: messages.go:135
|
||||
msgid "Not available in public mode"
|
||||
msgstr "Niet beschikbaar in publieke modus"
|
||||
|
||||
#: messages.go:126
|
||||
#: messages.go:136
|
||||
msgid "Not available in read-only mode"
|
||||
msgstr "Niet beschikbaar in alleen-lezen modus"
|
||||
|
||||
#: messages.go:127
|
||||
#: messages.go:137
|
||||
msgid "Please log in to your account"
|
||||
msgstr "Log in op je account"
|
||||
|
||||
#: messages.go:128
|
||||
#: messages.go:138
|
||||
msgid "Permission denied"
|
||||
msgstr "Toegang geweigerd"
|
||||
|
||||
#: messages.go:129
|
||||
#: messages.go:139
|
||||
msgid "Payment required"
|
||||
msgstr "Betaling vereist"
|
||||
|
||||
#: messages.go:130
|
||||
#: messages.go:140
|
||||
msgid "Upload might be offensive"
|
||||
msgstr "Upload kan aanstootgevend zijn"
|
||||
|
||||
#: messages.go:131
|
||||
#: messages.go:141
|
||||
msgid "Upload failed"
|
||||
msgstr "Uploaden mislukt"
|
||||
|
||||
#: messages.go:132
|
||||
#: messages.go:142
|
||||
msgid "No items selected"
|
||||
msgstr "Geen items geselecteerd"
|
||||
|
||||
#: messages.go:133
|
||||
#: messages.go:143
|
||||
msgid "Failed creating file, please check permissions"
|
||||
msgstr "Bestand aanmaken mislukt, controleer alstublieft de rechten"
|
||||
|
||||
#: messages.go:134
|
||||
#: messages.go:144
|
||||
msgid "Failed creating folder, please check permissions"
|
||||
msgstr "Folder aanmaken mislukt, controleer alstublieft de rechten"
|
||||
|
||||
#: messages.go:135
|
||||
#: messages.go:145
|
||||
msgid "Could not connect, please try again"
|
||||
msgstr "Kan niet verbinden, probeer alstublieft opnieuw"
|
||||
|
||||
#: messages.go:136
|
||||
#: messages.go:146
|
||||
msgid "Enter verification code"
|
||||
msgstr "Verificatiecode invoeren"
|
||||
|
||||
#: messages.go:137
|
||||
#: messages.go:147
|
||||
msgid "Invalid verification code, please try again"
|
||||
msgstr "Ongeldige verificatiecode. Probeer het opnieuw"
|
||||
|
||||
#: messages.go:138
|
||||
#: messages.go:148
|
||||
msgid "Invalid password, please try again"
|
||||
msgstr "Fout wachtwoord, probeer alstublieft opnieuw"
|
||||
|
||||
#: messages.go:139
|
||||
#: messages.go:149
|
||||
msgid "Feature disabled"
|
||||
msgstr "Functie uitgeschakeld"
|
||||
|
||||
#: messages.go:140
|
||||
#: messages.go:150
|
||||
msgid "No labels selected"
|
||||
msgstr "Geen labels geselecteerd"
|
||||
|
||||
#: messages.go:141
|
||||
#: messages.go:151
|
||||
msgid "No albums selected"
|
||||
msgstr "Geen albums geselecteerd"
|
||||
|
||||
#: messages.go:142
|
||||
#: messages.go:152
|
||||
msgid "No files available for download"
|
||||
msgstr "Geen bestanden beschikbaar om te downloaden"
|
||||
|
||||
#: messages.go:143
|
||||
#: messages.go:153
|
||||
msgid "Failed to create zip file"
|
||||
msgstr "Maken van zip-bestand is mislukt"
|
||||
|
||||
#: messages.go:144
|
||||
#: messages.go:154
|
||||
msgid "Invalid credentials"
|
||||
msgstr "Ongeldige inloggegevens"
|
||||
|
||||
#: messages.go:145
|
||||
#: messages.go:155
|
||||
msgid "Invalid link"
|
||||
msgstr "Ongeldige link"
|
||||
|
||||
#: messages.go:146
|
||||
#: messages.go:156
|
||||
msgid "Invalid name"
|
||||
msgstr "Ongeldige mapnaam"
|
||||
|
||||
#: messages.go:147
|
||||
#: messages.go:157
|
||||
msgid "Busy, please try again later"
|
||||
msgstr "Bezet, probeer het later nog eens"
|
||||
|
||||
#: messages.go:148
|
||||
#: messages.go:158
|
||||
#, c-format
|
||||
msgid "The wakeup interval is %s, but must be 1h or less"
|
||||
msgstr "Het wekinterval is %s, maar moet 1 uur of minder zijn"
|
||||
|
||||
#: messages.go:149
|
||||
#: messages.go:159
|
||||
msgid "Your account could not be connected"
|
||||
msgstr "Uw account kon niet worden aangesloten"
|
||||
|
||||
#: messages.go:150
|
||||
#: messages.go:160
|
||||
msgid "Too many requests"
|
||||
msgstr "Te veel verzoeken"
|
||||
|
||||
#: messages.go:151
|
||||
#: messages.go:161
|
||||
msgid "Insufficient storage"
|
||||
msgstr "Onvoldoende opslag"
|
||||
|
||||
#: messages.go:152
|
||||
#: messages.go:162
|
||||
msgid "Quota exceeded"
|
||||
msgstr "Quota overschreden"
|
||||
|
||||
#: messages.go:155
|
||||
#: messages.go:163
|
||||
msgid "Registration disabled"
|
||||
msgstr "Registratie uitgeschakeld"
|
||||
|
||||
#: messages.go:164
|
||||
msgid "Verified email required"
|
||||
msgstr "Geverifieerd e-mailadres vereist"
|
||||
|
||||
#: messages.go:167
|
||||
msgid "Changes successfully saved"
|
||||
msgstr "Wijzigingen succesvol opgeslagen"
|
||||
|
||||
#: messages.go:156
|
||||
#: messages.go:168
|
||||
msgid "Album created"
|
||||
msgstr "Album aangemaakt"
|
||||
|
||||
#: messages.go:157
|
||||
#: messages.go:169
|
||||
msgid "Album saved"
|
||||
msgstr "Album opgeslagen"
|
||||
|
||||
#: messages.go:158
|
||||
#: messages.go:170
|
||||
#, c-format
|
||||
msgid "Album %s deleted"
|
||||
msgstr "Album %s verwijderd"
|
||||
|
||||
#: messages.go:159
|
||||
#: messages.go:171
|
||||
msgid "Album contents cloned"
|
||||
msgstr "Albuminhoud gekopieerd"
|
||||
|
||||
#: messages.go:160
|
||||
#: messages.go:172
|
||||
msgid "File removed from stack"
|
||||
msgstr "Bestand uit stapel verwijderd"
|
||||
|
||||
#: messages.go:161
|
||||
#: messages.go:173
|
||||
msgid "File deleted"
|
||||
msgstr "Bestand verwijderd"
|
||||
|
||||
#: messages.go:162
|
||||
#: messages.go:174
|
||||
#, c-format
|
||||
msgid "Selection added to %s"
|
||||
msgstr "Selectie toegevoegd aan %s"
|
||||
|
||||
#: messages.go:163
|
||||
#: messages.go:175
|
||||
#, c-format
|
||||
msgid "One entry added to %s"
|
||||
msgstr "Eén item toegevoegd aan %s"
|
||||
|
||||
#: messages.go:164
|
||||
#: messages.go:176
|
||||
#, c-format
|
||||
msgid "%d entries added to %s"
|
||||
msgstr "%d items toegevoegd aan %s"
|
||||
|
||||
#: messages.go:165
|
||||
#: messages.go:177
|
||||
#, c-format
|
||||
msgid "One entry removed from %s"
|
||||
msgstr "Eén item verwijderd uit %s"
|
||||
|
||||
#: messages.go:166
|
||||
#: messages.go:178
|
||||
#, c-format
|
||||
msgid "%d entries removed from %s"
|
||||
msgstr "%d items verwijderd uit %s"
|
||||
|
||||
#: messages.go:167
|
||||
#: messages.go:179
|
||||
msgid "Account created"
|
||||
msgstr "Account aangemaakt"
|
||||
|
||||
#: messages.go:168
|
||||
#: messages.go:180
|
||||
msgid "Account saved"
|
||||
msgstr "Account opgeslagen"
|
||||
|
||||
#: messages.go:169
|
||||
#: messages.go:181
|
||||
msgid "Account deleted"
|
||||
msgstr "Account verwijderd"
|
||||
|
||||
#: messages.go:170
|
||||
#: messages.go:182
|
||||
msgid "Settings saved"
|
||||
msgstr "Instellingen opgeslagen"
|
||||
|
||||
#: messages.go:171
|
||||
#: messages.go:183
|
||||
msgid "Password changed"
|
||||
msgstr "Wachtwoord gewijzigd"
|
||||
|
||||
#: messages.go:172
|
||||
#: messages.go:184
|
||||
#, c-format
|
||||
msgid "Import completed in %d s"
|
||||
msgstr "Importeren voltooid in %d s"
|
||||
|
||||
#: messages.go:173
|
||||
#: messages.go:185
|
||||
msgid "Import canceled"
|
||||
msgstr "Importeren geannuleerd"
|
||||
|
||||
#: messages.go:174
|
||||
#: messages.go:186
|
||||
#, c-format
|
||||
msgid "Indexing completed in %d s"
|
||||
msgstr "Indexeren voltooid in %d s"
|
||||
|
||||
#: messages.go:175
|
||||
#: messages.go:187
|
||||
msgid "Indexing originals..."
|
||||
msgstr "Originelen indexeren…"
|
||||
|
||||
#: messages.go:176
|
||||
#: messages.go:188
|
||||
#, c-format
|
||||
msgid "Indexing files in %s"
|
||||
msgstr "Bestanden indexeren in %s"
|
||||
|
||||
#: messages.go:177
|
||||
#: messages.go:189
|
||||
msgid "Indexing canceled"
|
||||
msgstr "Indexeren geannuleerd"
|
||||
|
||||
#: messages.go:178
|
||||
#: messages.go:190
|
||||
#, c-format
|
||||
msgid "Removed %d files and %d photos"
|
||||
msgstr "%d bestanden en %d foto’s verwijderd"
|
||||
|
||||
#: messages.go:179
|
||||
#: messages.go:191
|
||||
#, c-format
|
||||
msgid "Moving files from %s"
|
||||
msgstr "Bestanden verplaatsen uit %s"
|
||||
|
||||
#: messages.go:180
|
||||
#: messages.go:192
|
||||
#, c-format
|
||||
msgid "Copying files from %s"
|
||||
msgstr "Bestanden kopiëren uit %s"
|
||||
|
||||
#: messages.go:181
|
||||
#: messages.go:193
|
||||
msgid "Labels deleted"
|
||||
msgstr "Labels verwijderd"
|
||||
|
||||
#: messages.go:182
|
||||
#: messages.go:194
|
||||
msgid "Label saved"
|
||||
msgstr "Labels opgeslagen"
|
||||
|
||||
#: messages.go:183
|
||||
#: messages.go:195
|
||||
msgid "Subject saved"
|
||||
msgstr "Onderwerp opgeslagen"
|
||||
|
||||
#: messages.go:184
|
||||
#: messages.go:196
|
||||
msgid "Subject deleted"
|
||||
msgstr "Onderwerp verwijderd"
|
||||
|
||||
#: messages.go:185
|
||||
#: messages.go:197
|
||||
msgid "Person saved"
|
||||
msgstr "Persoon gered"
|
||||
|
||||
#: messages.go:186
|
||||
#: messages.go:198
|
||||
msgid "Person deleted"
|
||||
msgstr "Persoon verwijderd"
|
||||
|
||||
#: messages.go:187
|
||||
#: messages.go:199
|
||||
msgid "File uploaded"
|
||||
msgstr "Bestand geüpload"
|
||||
|
||||
#: messages.go:188
|
||||
#: messages.go:200
|
||||
#, c-format
|
||||
msgid "%d files uploaded in %d s"
|
||||
msgstr "%d bestanden geüpload in %d s"
|
||||
|
||||
#: messages.go:189
|
||||
#: messages.go:201
|
||||
msgid "Processing upload..."
|
||||
msgstr "Verwerking upload..."
|
||||
|
||||
#: messages.go:190
|
||||
#: messages.go:202
|
||||
msgid "Upload has been processed"
|
||||
msgstr "Upload is verwerkt"
|
||||
|
||||
#: messages.go:191
|
||||
#: messages.go:203
|
||||
msgid "Selection approved"
|
||||
msgstr "Selectie goedgekeurd"
|
||||
|
||||
#: messages.go:192
|
||||
#: messages.go:204
|
||||
msgid "Selection archived"
|
||||
msgstr "Selectie gearchiveerd"
|
||||
|
||||
#: messages.go:193
|
||||
#: messages.go:205
|
||||
msgid "Selection restored"
|
||||
msgstr "Selectie hersteld"
|
||||
|
||||
#: messages.go:194
|
||||
#: messages.go:206
|
||||
msgid "Selection marked as private"
|
||||
msgstr "Selectie gemarkeerd als privé"
|
||||
|
||||
#: messages.go:195
|
||||
#: messages.go:207
|
||||
msgid "Albums deleted"
|
||||
msgstr "Albums verwijderd"
|
||||
|
||||
#: messages.go:196
|
||||
#: messages.go:208
|
||||
#, c-format
|
||||
msgid "Zip created in %d s"
|
||||
msgstr "Zip gemaakt in %d s"
|
||||
|
||||
#: messages.go:197
|
||||
#: messages.go:209
|
||||
msgid "Permanently deleted"
|
||||
msgstr "Permanent verwijderd"
|
||||
|
||||
#: messages.go:198
|
||||
#: messages.go:210
|
||||
#, c-format
|
||||
msgid "%s has been restored"
|
||||
msgstr "%s is hersteld"
|
||||
|
||||
#: messages.go:199
|
||||
#: messages.go:211
|
||||
msgid "Successfully verified"
|
||||
msgstr "Met succes geverifieerd"
|
||||
|
||||
#: messages.go:200
|
||||
#: messages.go:212
|
||||
msgid "Successfully activated"
|
||||
msgstr "Met succes geactiveerd"
|
||||
|
||||
|
|
|
|||
|
|
@ -2,9 +2,10 @@ msgid ""
|
|||
msgstr ""
|
||||
"Project-Id-Version: \n"
|
||||
"Report-Msgid-Bugs-To: \n"
|
||||
"POT-Creation-Date: 2025-10-17 17:32+0000\n"
|
||||
"PO-Revision-Date: 2025-10-22 08:25+0000\n"
|
||||
"Last-Translator: DeepL <noreply-mt-deepl@weblate.org>\n"
|
||||
"POT-Creation-Date: 2026-06-27 09:13+0000\n"
|
||||
"PO-Revision-Date: 2026-06-27 10:28+0000\n"
|
||||
"Last-Translator: Google Cloud Translation Basic <noreply-mt-google-"
|
||||
"translate@weblate.org>\n"
|
||||
"Language-Team: Polish <https://translate.photoprism.app/projects/photoprism/"
|
||||
"backend/pl/>\n"
|
||||
"Language: pl\n"
|
||||
|
|
@ -13,404 +14,420 @@ msgstr ""
|
|||
"Content-Transfer-Encoding: 8bit\n"
|
||||
"Plural-Forms: nplurals=3; plural=n==1 ? 0 : n%10>=2 && n%10<=4 && (n%100<10 "
|
||||
"|| n%100>=20) ? 1 : 2;\n"
|
||||
"X-Generator: Weblate 5.13.3\n"
|
||||
"X-Generator: Weblate 2026.5\n"
|
||||
|
||||
#: messages.go:104
|
||||
#: messages.go:112
|
||||
msgid "Something went wrong, try again"
|
||||
msgstr "Coś poszło nie tak, spróbuj jeszcze raz"
|
||||
|
||||
#: messages.go:105
|
||||
#: messages.go:113
|
||||
msgid "Unable to do that"
|
||||
msgstr "Nie da się tego zrobić"
|
||||
|
||||
#: messages.go:106
|
||||
#: messages.go:114
|
||||
msgid "Changes could not be saved"
|
||||
msgstr "Nie można zapisać zmian"
|
||||
|
||||
#: messages.go:107
|
||||
#: messages.go:115
|
||||
msgid "Could not be deleted"
|
||||
msgstr "Nie można usunąć"
|
||||
|
||||
#: messages.go:108
|
||||
#: messages.go:116
|
||||
#, c-format
|
||||
msgid "%s already exists"
|
||||
msgstr "%s już istnieje"
|
||||
|
||||
#: messages.go:109
|
||||
#: messages.go:117
|
||||
msgid "Not found"
|
||||
msgstr "Nie znaleziono"
|
||||
|
||||
#: messages.go:110
|
||||
#: messages.go:118
|
||||
msgid "File not found"
|
||||
msgstr "Plik nie został znaleziony"
|
||||
|
||||
#: messages.go:111
|
||||
#: messages.go:119
|
||||
msgid "File too large"
|
||||
msgstr "Plik jest zbyt duży"
|
||||
|
||||
#: messages.go:112
|
||||
#: messages.go:120
|
||||
msgid "Unsupported"
|
||||
msgstr "Nieobsługiwane"
|
||||
|
||||
#: messages.go:113
|
||||
#: messages.go:121
|
||||
msgid "Unsupported type"
|
||||
msgstr "Nieobsługiwany typ"
|
||||
|
||||
#: messages.go:114
|
||||
#: messages.go:122
|
||||
msgid "Unsupported format"
|
||||
msgstr "Nieobsługiwany format"
|
||||
|
||||
#: messages.go:115
|
||||
#: messages.go:123
|
||||
msgid "Originals folder is empty"
|
||||
msgstr "Folder oryginałów jest pusty"
|
||||
|
||||
#: messages.go:116
|
||||
#: messages.go:124
|
||||
msgid "Selection not found"
|
||||
msgstr "Nie znaleziono wyboru"
|
||||
|
||||
#: messages.go:117
|
||||
#: messages.go:125
|
||||
msgid "Entity not found"
|
||||
msgstr "Nie znaleziono podmiotu"
|
||||
|
||||
#: messages.go:118
|
||||
#: messages.go:126
|
||||
msgid "Account not found"
|
||||
msgstr "Konto nie znalezione"
|
||||
|
||||
#: messages.go:119
|
||||
#: messages.go:127
|
||||
msgid "User not found"
|
||||
msgstr "Użytkownik nie znaleziony"
|
||||
|
||||
#: messages.go:120
|
||||
#: messages.go:128
|
||||
msgid "Label not found"
|
||||
msgstr "Etykieta nie została odnaleziona"
|
||||
|
||||
#: messages.go:121
|
||||
#: messages.go:129
|
||||
msgid "Camera not found"
|
||||
msgstr "Nie znaleziono kamery"
|
||||
|
||||
#: messages.go:130
|
||||
msgid "Lens not found"
|
||||
msgstr "Nie znaleziono obiektywu"
|
||||
|
||||
#: messages.go:131
|
||||
msgid "Album not found"
|
||||
msgstr "Album nie został znaleziony"
|
||||
|
||||
#: messages.go:122
|
||||
#: messages.go:132
|
||||
msgid "Subject not found"
|
||||
msgstr "Temat nie został znaleziony"
|
||||
|
||||
#: messages.go:123
|
||||
#: messages.go:133
|
||||
msgid "Person not found"
|
||||
msgstr "Osoba nie została znaleziona"
|
||||
|
||||
#: messages.go:124
|
||||
#: messages.go:134
|
||||
msgid "Face not found"
|
||||
msgstr "Twarz nie została znaleziona"
|
||||
|
||||
#: messages.go:125
|
||||
#: messages.go:135
|
||||
msgid "Not available in public mode"
|
||||
msgstr "Niedostępne w trybie publicznym"
|
||||
|
||||
#: messages.go:126
|
||||
#: messages.go:136
|
||||
msgid "Not available in read-only mode"
|
||||
msgstr "Niedostępne w trybie tylko do odczytu"
|
||||
|
||||
#: messages.go:127
|
||||
#: messages.go:137
|
||||
msgid "Please log in to your account"
|
||||
msgstr "Proszę zalogować się na swoje konto"
|
||||
|
||||
#: messages.go:128
|
||||
#: messages.go:138
|
||||
msgid "Permission denied"
|
||||
msgstr "Brak uprawnień"
|
||||
|
||||
#: messages.go:129
|
||||
#: messages.go:139
|
||||
msgid "Payment required"
|
||||
msgstr "Wymagana płatność"
|
||||
|
||||
#: messages.go:130
|
||||
#: messages.go:140
|
||||
msgid "Upload might be offensive"
|
||||
msgstr "Przesyłane dane mogą być obraźliwe"
|
||||
|
||||
#: messages.go:131
|
||||
#: messages.go:141
|
||||
msgid "Upload failed"
|
||||
msgstr "Przesyłanie nie powiodło się"
|
||||
|
||||
#: messages.go:132
|
||||
#: messages.go:142
|
||||
msgid "No items selected"
|
||||
msgstr "Nie wybrano żadnych elementów"
|
||||
|
||||
#: messages.go:133
|
||||
#: messages.go:143
|
||||
msgid "Failed creating file, please check permissions"
|
||||
msgstr "Nie można utworzyć pliku, sprawdź uprawnienia"
|
||||
|
||||
#: messages.go:134
|
||||
#: messages.go:144
|
||||
msgid "Failed creating folder, please check permissions"
|
||||
msgstr "Nie można utworzyć folderu, sprawdź uprawnienia"
|
||||
|
||||
#: messages.go:135
|
||||
#: messages.go:145
|
||||
msgid "Could not connect, please try again"
|
||||
msgstr "Nie można się połączyć, spróbuj ponownie"
|
||||
|
||||
#: messages.go:136
|
||||
#: messages.go:146
|
||||
msgid "Enter verification code"
|
||||
msgstr "Wprowadź kod weryfikacyjny"
|
||||
|
||||
#: messages.go:137
|
||||
#: messages.go:147
|
||||
msgid "Invalid verification code, please try again"
|
||||
msgstr "Nieprawidłowy kod weryfikacyjny. Spróbuj ponownie"
|
||||
|
||||
#: messages.go:138
|
||||
#: messages.go:148
|
||||
msgid "Invalid password, please try again"
|
||||
msgstr "Nieprawidłowe hasło, spróbuj ponownie"
|
||||
|
||||
#: messages.go:139
|
||||
#: messages.go:149
|
||||
msgid "Feature disabled"
|
||||
msgstr "Funkcja wyłączona"
|
||||
|
||||
#: messages.go:140
|
||||
#: messages.go:150
|
||||
msgid "No labels selected"
|
||||
msgstr "Nie wybrano etykiet"
|
||||
|
||||
#: messages.go:141
|
||||
#: messages.go:151
|
||||
msgid "No albums selected"
|
||||
msgstr "Nie wybrano albumów"
|
||||
|
||||
#: messages.go:142
|
||||
#: messages.go:152
|
||||
msgid "No files available for download"
|
||||
msgstr "Brak plików do pobrania"
|
||||
|
||||
#: messages.go:143
|
||||
#: messages.go:153
|
||||
msgid "Failed to create zip file"
|
||||
msgstr "Nie udało się utworzyć pliku zip"
|
||||
|
||||
#: messages.go:144
|
||||
#: messages.go:154
|
||||
msgid "Invalid credentials"
|
||||
msgstr "Nieprawidłowe dane logowania"
|
||||
|
||||
#: messages.go:145
|
||||
#: messages.go:155
|
||||
msgid "Invalid link"
|
||||
msgstr "Nieprawidłowy link"
|
||||
|
||||
#: messages.go:146
|
||||
#: messages.go:156
|
||||
msgid "Invalid name"
|
||||
msgstr "Nieprawidłowa nazwa"
|
||||
|
||||
#: messages.go:147
|
||||
#: messages.go:157
|
||||
msgid "Busy, please try again later"
|
||||
msgstr "Zajęty, spróbuj ponownie później"
|
||||
|
||||
#: messages.go:148
|
||||
#: messages.go:158
|
||||
#, c-format
|
||||
msgid "The wakeup interval is %s, but must be 1h or less"
|
||||
msgstr ""
|
||||
"Interwał wybudzenia %s jest nieprawidłowy, powinien być równy lub mniejszy "
|
||||
"niż 1 godzina"
|
||||
|
||||
#: messages.go:149
|
||||
#: messages.go:159
|
||||
msgid "Your account could not be connected"
|
||||
msgstr "Twoje konto nie może być podłączone"
|
||||
|
||||
#: messages.go:150
|
||||
#: messages.go:160
|
||||
msgid "Too many requests"
|
||||
msgstr "Zbyt wiele żądań"
|
||||
|
||||
#: messages.go:151
|
||||
#: messages.go:161
|
||||
msgid "Insufficient storage"
|
||||
msgstr "Niewystarczająca pamięć"
|
||||
|
||||
#: messages.go:152
|
||||
#: messages.go:162
|
||||
msgid "Quota exceeded"
|
||||
msgstr "Przekroczony limit"
|
||||
|
||||
#: messages.go:155
|
||||
#: messages.go:163
|
||||
msgid "Registration disabled"
|
||||
msgstr "Rejestracja wyłączona"
|
||||
|
||||
#: messages.go:164
|
||||
msgid "Verified email required"
|
||||
msgstr "Wymagany zweryfikowany adres e-mail"
|
||||
|
||||
#: messages.go:167
|
||||
msgid "Changes successfully saved"
|
||||
msgstr "Zmiany zostały pomyślnie zapisane"
|
||||
|
||||
#: messages.go:156
|
||||
#: messages.go:168
|
||||
msgid "Album created"
|
||||
msgstr "Album został utworzony"
|
||||
|
||||
#: messages.go:157
|
||||
#: messages.go:169
|
||||
msgid "Album saved"
|
||||
msgstr "Album został zapisany"
|
||||
|
||||
#: messages.go:158
|
||||
#: messages.go:170
|
||||
#, c-format
|
||||
msgid "Album %s deleted"
|
||||
msgstr "Album %s został usunięty"
|
||||
|
||||
#: messages.go:159
|
||||
#: messages.go:171
|
||||
msgid "Album contents cloned"
|
||||
msgstr "Album został sklonowany"
|
||||
|
||||
#: messages.go:160
|
||||
#: messages.go:172
|
||||
msgid "File removed from stack"
|
||||
msgstr "Plik został rozgrupowany"
|
||||
|
||||
#: messages.go:161
|
||||
#: messages.go:173
|
||||
msgid "File deleted"
|
||||
msgstr "Plik został usunięty"
|
||||
|
||||
#: messages.go:162
|
||||
#: messages.go:174
|
||||
#, c-format
|
||||
msgid "Selection added to %s"
|
||||
msgstr "Wybór dodany do %s"
|
||||
|
||||
#: messages.go:163
|
||||
#: messages.go:175
|
||||
#, c-format
|
||||
msgid "One entry added to %s"
|
||||
msgstr "Dodano jeden wpis do %s"
|
||||
|
||||
#: messages.go:164
|
||||
#: messages.go:176
|
||||
#, c-format
|
||||
msgid "%d entries added to %s"
|
||||
msgstr "%d wpisy dodane do %s"
|
||||
|
||||
#: messages.go:165
|
||||
#: messages.go:177
|
||||
#, c-format
|
||||
msgid "One entry removed from %s"
|
||||
msgstr "Usunięto jeden wpis z %s"
|
||||
|
||||
#: messages.go:166
|
||||
#: messages.go:178
|
||||
#, c-format
|
||||
msgid "%d entries removed from %s"
|
||||
msgstr "%d wpisy usunięte z %s"
|
||||
|
||||
#: messages.go:167
|
||||
#: messages.go:179
|
||||
msgid "Account created"
|
||||
msgstr "Konto utworzone"
|
||||
|
||||
#: messages.go:168
|
||||
#: messages.go:180
|
||||
msgid "Account saved"
|
||||
msgstr "Konto zapisane"
|
||||
|
||||
#: messages.go:169
|
||||
#: messages.go:181
|
||||
msgid "Account deleted"
|
||||
msgstr "Konto usunięte"
|
||||
|
||||
#: messages.go:170
|
||||
#: messages.go:182
|
||||
msgid "Settings saved"
|
||||
msgstr "Ustawienia zapisane"
|
||||
|
||||
#: messages.go:171
|
||||
#: messages.go:183
|
||||
msgid "Password changed"
|
||||
msgstr "Hasło zostało zmienione"
|
||||
|
||||
#: messages.go:172
|
||||
#: messages.go:184
|
||||
#, c-format
|
||||
msgid "Import completed in %d s"
|
||||
msgstr "Import zakończony w %d s"
|
||||
|
||||
#: messages.go:173
|
||||
#: messages.go:185
|
||||
msgid "Import canceled"
|
||||
msgstr "Import został anulowany"
|
||||
|
||||
#: messages.go:174
|
||||
#: messages.go:186
|
||||
#, c-format
|
||||
msgid "Indexing completed in %d s"
|
||||
msgstr "Indeksowanie zakończone w %d s"
|
||||
|
||||
#: messages.go:175
|
||||
#: messages.go:187
|
||||
msgid "Indexing originals..."
|
||||
msgstr "Indeksowanie oryginałów…"
|
||||
|
||||
#: messages.go:176
|
||||
#: messages.go:188
|
||||
#, c-format
|
||||
msgid "Indexing files in %s"
|
||||
msgstr "Indeksowanie plików w %s"
|
||||
|
||||
#: messages.go:177
|
||||
#: messages.go:189
|
||||
msgid "Indexing canceled"
|
||||
msgstr "Indeksowanie anulowane"
|
||||
|
||||
#: messages.go:178
|
||||
#: messages.go:190
|
||||
#, c-format
|
||||
msgid "Removed %d files and %d photos"
|
||||
msgstr "Usunięto %d plików i %d zdjęć"
|
||||
|
||||
#: messages.go:179
|
||||
#: messages.go:191
|
||||
#, c-format
|
||||
msgid "Moving files from %s"
|
||||
msgstr "Przenoszenie plików z %s"
|
||||
|
||||
#: messages.go:180
|
||||
#: messages.go:192
|
||||
#, c-format
|
||||
msgid "Copying files from %s"
|
||||
msgstr "Kopiowanie plików z %s"
|
||||
|
||||
#: messages.go:181
|
||||
#: messages.go:193
|
||||
msgid "Labels deleted"
|
||||
msgstr "Usunięto etykiety"
|
||||
|
||||
#: messages.go:182
|
||||
#: messages.go:194
|
||||
msgid "Label saved"
|
||||
msgstr "Etykieta zapisana"
|
||||
|
||||
#: messages.go:183
|
||||
#: messages.go:195
|
||||
msgid "Subject saved"
|
||||
msgstr "Przedmiot zapisany"
|
||||
|
||||
#: messages.go:184
|
||||
#: messages.go:196
|
||||
msgid "Subject deleted"
|
||||
msgstr "Przedmiot usunięty"
|
||||
|
||||
#: messages.go:185
|
||||
#: messages.go:197
|
||||
msgid "Person saved"
|
||||
msgstr "Osoba zapisana"
|
||||
|
||||
#: messages.go:186
|
||||
#: messages.go:198
|
||||
msgid "Person deleted"
|
||||
msgstr "Osoba usunięta"
|
||||
|
||||
#: messages.go:187
|
||||
#: messages.go:199
|
||||
msgid "File uploaded"
|
||||
msgstr "Przesłany plik"
|
||||
|
||||
#: messages.go:188
|
||||
#: messages.go:200
|
||||
#, c-format
|
||||
msgid "%d files uploaded in %d s"
|
||||
msgstr "%d plików przesłano w %d s"
|
||||
|
||||
#: messages.go:189
|
||||
#: messages.go:201
|
||||
msgid "Processing upload..."
|
||||
msgstr "Przetwarzanie uploadu..."
|
||||
|
||||
#: messages.go:190
|
||||
#: messages.go:202
|
||||
msgid "Upload has been processed"
|
||||
msgstr "Przesyłanie zostało przetworzone"
|
||||
|
||||
#: messages.go:191
|
||||
#: messages.go:203
|
||||
msgid "Selection approved"
|
||||
msgstr "Wybór zatwierdzony"
|
||||
|
||||
#: messages.go:192
|
||||
#: messages.go:204
|
||||
msgid "Selection archived"
|
||||
msgstr "Wybór zarchiwizowany"
|
||||
|
||||
#: messages.go:193
|
||||
#: messages.go:205
|
||||
msgid "Selection restored"
|
||||
msgstr "Wybór został przywrócony"
|
||||
|
||||
#: messages.go:194
|
||||
#: messages.go:206
|
||||
msgid "Selection marked as private"
|
||||
msgstr "Wybór oznaczony jako prywatny"
|
||||
|
||||
#: messages.go:195
|
||||
#: messages.go:207
|
||||
msgid "Albums deleted"
|
||||
msgstr "Albumy zostały usunięte"
|
||||
|
||||
#: messages.go:196
|
||||
#: messages.go:208
|
||||
#, c-format
|
||||
msgid "Zip created in %d s"
|
||||
msgstr "Zip utworzony w %d s"
|
||||
|
||||
#: messages.go:197
|
||||
#: messages.go:209
|
||||
msgid "Permanently deleted"
|
||||
msgstr "Trwale usunięty"
|
||||
|
||||
#: messages.go:198
|
||||
#: messages.go:210
|
||||
#, c-format
|
||||
msgid "%s has been restored"
|
||||
msgstr "%s zostało przywrócone"
|
||||
|
||||
#: messages.go:199
|
||||
#: messages.go:211
|
||||
msgid "Successfully verified"
|
||||
msgstr "Pomyślnie zweryfikowano"
|
||||
|
||||
#: messages.go:200
|
||||
#: messages.go:212
|
||||
msgid "Successfully activated"
|
||||
msgstr "Pomyślnie aktywowano"
|
||||
|
||||
|
|
|
|||
|
|
@ -2,9 +2,10 @@ msgid ""
|
|||
msgstr ""
|
||||
"Project-Id-Version: \n"
|
||||
"Report-Msgid-Bugs-To: \n"
|
||||
"POT-Creation-Date: 2025-10-17 17:32+0000\n"
|
||||
"PO-Revision-Date: 2025-10-22 08:25+0000\n"
|
||||
"Last-Translator: DeepL <noreply-mt-deepl@weblate.org>\n"
|
||||
"POT-Creation-Date: 2026-06-27 09:13+0000\n"
|
||||
"PO-Revision-Date: 2026-06-27 10:28+0000\n"
|
||||
"Last-Translator: Google Cloud Translation Basic <noreply-mt-google-"
|
||||
"translate@weblate.org>\n"
|
||||
"Language-Team: Portuguese <https://translate.photoprism.app/projects/"
|
||||
"photoprism/backend/pt/>\n"
|
||||
"Language: pt\n"
|
||||
|
|
@ -12,402 +13,418 @@ msgstr ""
|
|||
"Content-Type: text/plain; charset=UTF-8\n"
|
||||
"Content-Transfer-Encoding: 8bit\n"
|
||||
"Plural-Forms: nplurals=2; plural=n > 1;\n"
|
||||
"X-Generator: Weblate 5.13.3\n"
|
||||
"X-Generator: Weblate 2026.5\n"
|
||||
|
||||
#: messages.go:104
|
||||
#: messages.go:112
|
||||
msgid "Something went wrong, try again"
|
||||
msgstr "Algo correu mal, tente novamente"
|
||||
|
||||
#: messages.go:105
|
||||
#: messages.go:113
|
||||
msgid "Unable to do that"
|
||||
msgstr "Incapaz de fazer isso"
|
||||
|
||||
#: messages.go:106
|
||||
#: messages.go:114
|
||||
msgid "Changes could not be saved"
|
||||
msgstr "As mudanças não foram salvas"
|
||||
|
||||
#: messages.go:107
|
||||
#: messages.go:115
|
||||
msgid "Could not be deleted"
|
||||
msgstr "Não foi possível excluir"
|
||||
|
||||
#: messages.go:108
|
||||
#: messages.go:116
|
||||
#, c-format
|
||||
msgid "%s already exists"
|
||||
msgstr "%s já existe"
|
||||
|
||||
#: messages.go:109
|
||||
#: messages.go:117
|
||||
msgid "Not found"
|
||||
msgstr "Não encontrado"
|
||||
|
||||
#: messages.go:110
|
||||
#: messages.go:118
|
||||
msgid "File not found"
|
||||
msgstr "Arquivo não encontrado"
|
||||
|
||||
#: messages.go:111
|
||||
#: messages.go:119
|
||||
msgid "File too large"
|
||||
msgstr "Arquivo muito grande"
|
||||
|
||||
#: messages.go:112
|
||||
#: messages.go:120
|
||||
msgid "Unsupported"
|
||||
msgstr "Não compatível"
|
||||
|
||||
#: messages.go:113
|
||||
#: messages.go:121
|
||||
msgid "Unsupported type"
|
||||
msgstr "Tipo não suportado"
|
||||
|
||||
#: messages.go:114
|
||||
#: messages.go:122
|
||||
msgid "Unsupported format"
|
||||
msgstr "Formato sem suporte"
|
||||
|
||||
#: messages.go:115
|
||||
#: messages.go:123
|
||||
msgid "Originals folder is empty"
|
||||
msgstr "A pasta dos originais está vazia"
|
||||
|
||||
#: messages.go:116
|
||||
#: messages.go:124
|
||||
msgid "Selection not found"
|
||||
msgstr "Seleção não encontrada"
|
||||
|
||||
#: messages.go:117
|
||||
#: messages.go:125
|
||||
msgid "Entity not found"
|
||||
msgstr "Entidade não encontrada"
|
||||
|
||||
#: messages.go:118
|
||||
#: messages.go:126
|
||||
msgid "Account not found"
|
||||
msgstr "Conta não encontrada"
|
||||
|
||||
#: messages.go:119
|
||||
#: messages.go:127
|
||||
msgid "User not found"
|
||||
msgstr "Usuário não encontrado"
|
||||
|
||||
#: messages.go:120
|
||||
#: messages.go:128
|
||||
msgid "Label not found"
|
||||
msgstr "Etiqueta não encontrada"
|
||||
|
||||
#: messages.go:121
|
||||
#: messages.go:129
|
||||
msgid "Camera not found"
|
||||
msgstr "Não foi encontrada nenhuma câmara"
|
||||
|
||||
#: messages.go:130
|
||||
msgid "Lens not found"
|
||||
msgstr "Lente não encontrada"
|
||||
|
||||
#: messages.go:131
|
||||
msgid "Album not found"
|
||||
msgstr "Álbum não encontrado"
|
||||
|
||||
#: messages.go:122
|
||||
#: messages.go:132
|
||||
msgid "Subject not found"
|
||||
msgstr "Assunto não encontrado"
|
||||
|
||||
#: messages.go:123
|
||||
#: messages.go:133
|
||||
msgid "Person not found"
|
||||
msgstr "Pessoa não encontrada"
|
||||
|
||||
#: messages.go:124
|
||||
#: messages.go:134
|
||||
msgid "Face not found"
|
||||
msgstr "Rosto não encontrado"
|
||||
|
||||
#: messages.go:125
|
||||
#: messages.go:135
|
||||
msgid "Not available in public mode"
|
||||
msgstr "Indisponível em modo público"
|
||||
|
||||
#: messages.go:126
|
||||
#: messages.go:136
|
||||
msgid "Not available in read-only mode"
|
||||
msgstr "Não disponível no modo somente leitura"
|
||||
|
||||
#: messages.go:127
|
||||
#: messages.go:137
|
||||
msgid "Please log in to your account"
|
||||
msgstr "Faça o login em sua conta"
|
||||
|
||||
#: messages.go:128
|
||||
#: messages.go:138
|
||||
msgid "Permission denied"
|
||||
msgstr "Permissão negada"
|
||||
|
||||
#: messages.go:129
|
||||
#: messages.go:139
|
||||
msgid "Payment required"
|
||||
msgstr "Pagamento obrigatório"
|
||||
|
||||
#: messages.go:130
|
||||
#: messages.go:140
|
||||
msgid "Upload might be offensive"
|
||||
msgstr "Envio pode ser ofensivo"
|
||||
|
||||
#: messages.go:131
|
||||
#: messages.go:141
|
||||
msgid "Upload failed"
|
||||
msgstr "Envio falhou"
|
||||
|
||||
#: messages.go:132
|
||||
#: messages.go:142
|
||||
msgid "No items selected"
|
||||
msgstr "Sem itens selecionados"
|
||||
|
||||
#: messages.go:133
|
||||
#: messages.go:143
|
||||
msgid "Failed creating file, please check permissions"
|
||||
msgstr "Falha ao criar arquivo, por favor cheque as permissões"
|
||||
|
||||
#: messages.go:134
|
||||
#: messages.go:144
|
||||
msgid "Failed creating folder, please check permissions"
|
||||
msgstr "Falha ao criar pasta, por favor cheque as permissões"
|
||||
|
||||
#: messages.go:135
|
||||
#: messages.go:145
|
||||
msgid "Could not connect, please try again"
|
||||
msgstr "Não foi possível conectar, por favor tente novamente"
|
||||
|
||||
#: messages.go:136
|
||||
#: messages.go:146
|
||||
msgid "Enter verification code"
|
||||
msgstr "Digite o código de verificação"
|
||||
|
||||
#: messages.go:137
|
||||
#: messages.go:147
|
||||
msgid "Invalid verification code, please try again"
|
||||
msgstr "Código de verificação inválido, tente novamente"
|
||||
|
||||
#: messages.go:138
|
||||
#: messages.go:148
|
||||
msgid "Invalid password, please try again"
|
||||
msgstr "Senha inválida, por favor tente novamente"
|
||||
|
||||
#: messages.go:139
|
||||
#: messages.go:149
|
||||
msgid "Feature disabled"
|
||||
msgstr "Recurso Desativado"
|
||||
|
||||
#: messages.go:140
|
||||
#: messages.go:150
|
||||
msgid "No labels selected"
|
||||
msgstr "Sem etiquetas selecionadas"
|
||||
|
||||
#: messages.go:141
|
||||
#: messages.go:151
|
||||
msgid "No albums selected"
|
||||
msgstr "Sem álbuns selecionados"
|
||||
|
||||
#: messages.go:142
|
||||
#: messages.go:152
|
||||
msgid "No files available for download"
|
||||
msgstr "Sem arquivos disponíveis para baixar"
|
||||
|
||||
#: messages.go:143
|
||||
#: messages.go:153
|
||||
msgid "Failed to create zip file"
|
||||
msgstr "Falha ao criar arquivo zip"
|
||||
|
||||
#: messages.go:144
|
||||
#: messages.go:154
|
||||
msgid "Invalid credentials"
|
||||
msgstr "Credenciais inválidas"
|
||||
|
||||
#: messages.go:145
|
||||
#: messages.go:155
|
||||
msgid "Invalid link"
|
||||
msgstr "Link inválido"
|
||||
|
||||
#: messages.go:146
|
||||
#: messages.go:156
|
||||
msgid "Invalid name"
|
||||
msgstr "Nome inválido"
|
||||
|
||||
#: messages.go:147
|
||||
#: messages.go:157
|
||||
msgid "Busy, please try again later"
|
||||
msgstr "Em uso, por favor tente novamente mais tarde"
|
||||
|
||||
#: messages.go:148
|
||||
#: messages.go:158
|
||||
#, c-format
|
||||
msgid "The wakeup interval is %s, but must be 1h or less"
|
||||
msgstr "O intervalo de despertar é %s, mas deve ser de 1h ou menos"
|
||||
|
||||
#: messages.go:149
|
||||
#: messages.go:159
|
||||
msgid "Your account could not be connected"
|
||||
msgstr "Sua conta não pôde ser conectada"
|
||||
|
||||
#: messages.go:150
|
||||
#: messages.go:160
|
||||
msgid "Too many requests"
|
||||
msgstr "Demasiados pedidos"
|
||||
|
||||
#: messages.go:151
|
||||
#: messages.go:161
|
||||
msgid "Insufficient storage"
|
||||
msgstr "Armazenamento insuficiente"
|
||||
|
||||
#: messages.go:152
|
||||
#: messages.go:162
|
||||
msgid "Quota exceeded"
|
||||
msgstr "Quota excedida"
|
||||
|
||||
#: messages.go:155
|
||||
#: messages.go:163
|
||||
msgid "Registration disabled"
|
||||
msgstr "Cadastro desativado"
|
||||
|
||||
#: messages.go:164
|
||||
msgid "Verified email required"
|
||||
msgstr "É necessário um e-mail verificado."
|
||||
|
||||
#: messages.go:167
|
||||
msgid "Changes successfully saved"
|
||||
msgstr "As mudanças foram salvas com sucesso"
|
||||
|
||||
#: messages.go:156
|
||||
#: messages.go:168
|
||||
msgid "Album created"
|
||||
msgstr "Álbum criado"
|
||||
|
||||
#: messages.go:157
|
||||
#: messages.go:169
|
||||
msgid "Album saved"
|
||||
msgstr "Álbum salvo"
|
||||
|
||||
#: messages.go:158
|
||||
#: messages.go:170
|
||||
#, c-format
|
||||
msgid "Album %s deleted"
|
||||
msgstr "Álbum %s excluído"
|
||||
|
||||
#: messages.go:159
|
||||
#: messages.go:171
|
||||
msgid "Album contents cloned"
|
||||
msgstr "Conteúdo do álbum copiado"
|
||||
|
||||
#: messages.go:160
|
||||
#: messages.go:172
|
||||
msgid "File removed from stack"
|
||||
msgstr "Arquivo removido da pilha"
|
||||
|
||||
#: messages.go:161
|
||||
#: messages.go:173
|
||||
msgid "File deleted"
|
||||
msgstr "Arquivo excluído"
|
||||
|
||||
#: messages.go:162
|
||||
#: messages.go:174
|
||||
#, c-format
|
||||
msgid "Selection added to %s"
|
||||
msgstr "Seleção adicionada a %s"
|
||||
|
||||
#: messages.go:163
|
||||
#: messages.go:175
|
||||
#, c-format
|
||||
msgid "One entry added to %s"
|
||||
msgstr "Uma entrada adicionada a %s"
|
||||
|
||||
#: messages.go:164
|
||||
#: messages.go:176
|
||||
#, c-format
|
||||
msgid "%d entries added to %s"
|
||||
msgstr "%d entradas adicionadas a %s"
|
||||
|
||||
#: messages.go:165
|
||||
#: messages.go:177
|
||||
#, c-format
|
||||
msgid "One entry removed from %s"
|
||||
msgstr "Uma entrada removida de %s"
|
||||
|
||||
#: messages.go:166
|
||||
#: messages.go:178
|
||||
#, c-format
|
||||
msgid "%d entries removed from %s"
|
||||
msgstr "%d entradas removidas de %s"
|
||||
|
||||
#: messages.go:167
|
||||
#: messages.go:179
|
||||
msgid "Account created"
|
||||
msgstr "Conta criada"
|
||||
|
||||
#: messages.go:168
|
||||
#: messages.go:180
|
||||
msgid "Account saved"
|
||||
msgstr "Conta salva"
|
||||
|
||||
#: messages.go:169
|
||||
#: messages.go:181
|
||||
msgid "Account deleted"
|
||||
msgstr "Conta excluída"
|
||||
|
||||
#: messages.go:170
|
||||
#: messages.go:182
|
||||
msgid "Settings saved"
|
||||
msgstr "Configurações salvas"
|
||||
|
||||
#: messages.go:171
|
||||
#: messages.go:183
|
||||
msgid "Password changed"
|
||||
msgstr "Senha alterada"
|
||||
|
||||
#: messages.go:172
|
||||
#: messages.go:184
|
||||
#, c-format
|
||||
msgid "Import completed in %d s"
|
||||
msgstr "Importação completa em %d"
|
||||
|
||||
#: messages.go:173
|
||||
#: messages.go:185
|
||||
msgid "Import canceled"
|
||||
msgstr "Importação cancelada"
|
||||
|
||||
#: messages.go:174
|
||||
#: messages.go:186
|
||||
#, c-format
|
||||
msgid "Indexing completed in %d s"
|
||||
msgstr "Indexação completa em %d"
|
||||
|
||||
#: messages.go:175
|
||||
#: messages.go:187
|
||||
msgid "Indexing originals..."
|
||||
msgstr "Indexando originais..."
|
||||
|
||||
#: messages.go:176
|
||||
#: messages.go:188
|
||||
#, c-format
|
||||
msgid "Indexing files in %s"
|
||||
msgstr "Indexando arquivos em %s"
|
||||
|
||||
#: messages.go:177
|
||||
#: messages.go:189
|
||||
msgid "Indexing canceled"
|
||||
msgstr "Indexação cancelada"
|
||||
|
||||
#: messages.go:178
|
||||
#: messages.go:190
|
||||
#, c-format
|
||||
msgid "Removed %d files and %d photos"
|
||||
msgstr "Removidos %d arquivos e %d fotos"
|
||||
|
||||
#: messages.go:179
|
||||
#: messages.go:191
|
||||
#, c-format
|
||||
msgid "Moving files from %s"
|
||||
msgstr "Movendo arquivos de %s"
|
||||
|
||||
#: messages.go:180
|
||||
#: messages.go:192
|
||||
#, c-format
|
||||
msgid "Copying files from %s"
|
||||
msgstr "Copiando arquivos de %s"
|
||||
|
||||
#: messages.go:181
|
||||
#: messages.go:193
|
||||
msgid "Labels deleted"
|
||||
msgstr "Etiquetas excluídas"
|
||||
|
||||
#: messages.go:182
|
||||
#: messages.go:194
|
||||
msgid "Label saved"
|
||||
msgstr "Etiqueta salva"
|
||||
|
||||
#: messages.go:183
|
||||
#: messages.go:195
|
||||
msgid "Subject saved"
|
||||
msgstr "Assunto salvo"
|
||||
|
||||
#: messages.go:184
|
||||
#: messages.go:196
|
||||
msgid "Subject deleted"
|
||||
msgstr "Assunto eliminado"
|
||||
|
||||
#: messages.go:185
|
||||
#: messages.go:197
|
||||
msgid "Person saved"
|
||||
msgstr "Pessoa salva"
|
||||
|
||||
#: messages.go:186
|
||||
#: messages.go:198
|
||||
msgid "Person deleted"
|
||||
msgstr "Pessoa apagada"
|
||||
|
||||
#: messages.go:187
|
||||
#: messages.go:199
|
||||
msgid "File uploaded"
|
||||
msgstr "Arquivo carregado"
|
||||
|
||||
#: messages.go:188
|
||||
#: messages.go:200
|
||||
#, c-format
|
||||
msgid "%d files uploaded in %d s"
|
||||
msgstr "%d arquivos enviados em %d"
|
||||
|
||||
#: messages.go:189
|
||||
#: messages.go:201
|
||||
msgid "Processing upload..."
|
||||
msgstr "A processar carregamento..."
|
||||
|
||||
#: messages.go:190
|
||||
#: messages.go:202
|
||||
msgid "Upload has been processed"
|
||||
msgstr "O Upload foi processado"
|
||||
|
||||
#: messages.go:191
|
||||
#: messages.go:203
|
||||
msgid "Selection approved"
|
||||
msgstr "Seleção aprovada"
|
||||
|
||||
#: messages.go:192
|
||||
#: messages.go:204
|
||||
msgid "Selection archived"
|
||||
msgstr "Seleção arquivada"
|
||||
|
||||
#: messages.go:193
|
||||
#: messages.go:205
|
||||
msgid "Selection restored"
|
||||
msgstr "Seleção restaurada"
|
||||
|
||||
#: messages.go:194
|
||||
#: messages.go:206
|
||||
msgid "Selection marked as private"
|
||||
msgstr "Seleção marcada como privada"
|
||||
|
||||
#: messages.go:195
|
||||
#: messages.go:207
|
||||
msgid "Albums deleted"
|
||||
msgstr "Álbuns excluídos"
|
||||
|
||||
#: messages.go:196
|
||||
#: messages.go:208
|
||||
#, c-format
|
||||
msgid "Zip created in %d s"
|
||||
msgstr "Zip criado em %d"
|
||||
|
||||
#: messages.go:197
|
||||
#: messages.go:209
|
||||
msgid "Permanently deleted"
|
||||
msgstr "Permanentemente excluídas"
|
||||
|
||||
#: messages.go:198
|
||||
#: messages.go:210
|
||||
#, c-format
|
||||
msgid "%s has been restored"
|
||||
msgstr "%s foi restaurado"
|
||||
|
||||
#: messages.go:199
|
||||
#: messages.go:211
|
||||
msgid "Successfully verified"
|
||||
msgstr "Verificado com sucesso"
|
||||
|
||||
#: messages.go:200
|
||||
#: messages.go:212
|
||||
msgid "Successfully activated"
|
||||
msgstr "Ativado com sucesso"
|
||||
|
||||
|
|
|
|||
|
|
@ -2,9 +2,10 @@ msgid ""
|
|||
msgstr ""
|
||||
"Project-Id-Version: \n"
|
||||
"Report-Msgid-Bugs-To: \n"
|
||||
"POT-Creation-Date: 2025-10-17 17:32+0000\n"
|
||||
"PO-Revision-Date: 2025-10-22 08:25+0000\n"
|
||||
"Last-Translator: DeepL <noreply-mt-deepl@weblate.org>\n"
|
||||
"POT-Creation-Date: 2026-06-27 09:13+0000\n"
|
||||
"PO-Revision-Date: 2026-06-27 10:28+0000\n"
|
||||
"Last-Translator: Google Cloud Translation Basic <noreply-mt-google-"
|
||||
"translate@weblate.org>\n"
|
||||
"Language-Team: Portuguese (Brazil) <https://translate.photoprism.app/"
|
||||
"projects/photoprism/backend/pt_BR/>\n"
|
||||
"Language: pt_BR\n"
|
||||
|
|
@ -12,402 +13,418 @@ msgstr ""
|
|||
"Content-Type: text/plain; charset=UTF-8\n"
|
||||
"Content-Transfer-Encoding: 8bit\n"
|
||||
"Plural-Forms: nplurals=2; plural=n > 1;\n"
|
||||
"X-Generator: Weblate 5.13.3\n"
|
||||
"X-Generator: Weblate 2026.5\n"
|
||||
|
||||
#: messages.go:104
|
||||
#: messages.go:112
|
||||
msgid "Something went wrong, try again"
|
||||
msgstr "Algo deu errado, tente novamente"
|
||||
|
||||
#: messages.go:105
|
||||
#: messages.go:113
|
||||
msgid "Unable to do that"
|
||||
msgstr "Incapaz de fazer isso"
|
||||
|
||||
#: messages.go:106
|
||||
#: messages.go:114
|
||||
msgid "Changes could not be saved"
|
||||
msgstr "As mudanças não foram salvas"
|
||||
|
||||
#: messages.go:107
|
||||
#: messages.go:115
|
||||
msgid "Could not be deleted"
|
||||
msgstr "Não foi possível excluir"
|
||||
|
||||
#: messages.go:108
|
||||
#: messages.go:116
|
||||
#, c-format
|
||||
msgid "%s already exists"
|
||||
msgstr "%s já existe"
|
||||
|
||||
#: messages.go:109
|
||||
#: messages.go:117
|
||||
msgid "Not found"
|
||||
msgstr "Não encontrado"
|
||||
|
||||
#: messages.go:110
|
||||
#: messages.go:118
|
||||
msgid "File not found"
|
||||
msgstr "Arquivo não encontrado"
|
||||
|
||||
#: messages.go:111
|
||||
#: messages.go:119
|
||||
msgid "File too large"
|
||||
msgstr "Arquivo muito grande"
|
||||
|
||||
#: messages.go:112
|
||||
#: messages.go:120
|
||||
msgid "Unsupported"
|
||||
msgstr "Não compatível"
|
||||
|
||||
#: messages.go:113
|
||||
#: messages.go:121
|
||||
msgid "Unsupported type"
|
||||
msgstr "Tipo não suportado"
|
||||
|
||||
#: messages.go:114
|
||||
#: messages.go:122
|
||||
msgid "Unsupported format"
|
||||
msgstr "Formato sem suporte"
|
||||
|
||||
#: messages.go:115
|
||||
#: messages.go:123
|
||||
msgid "Originals folder is empty"
|
||||
msgstr "A pasta dos originais está vazia"
|
||||
|
||||
#: messages.go:116
|
||||
#: messages.go:124
|
||||
msgid "Selection not found"
|
||||
msgstr "Seleção não encontrada"
|
||||
|
||||
#: messages.go:117
|
||||
#: messages.go:125
|
||||
msgid "Entity not found"
|
||||
msgstr "Entidade não encontrada"
|
||||
|
||||
#: messages.go:118
|
||||
#: messages.go:126
|
||||
msgid "Account not found"
|
||||
msgstr "Conta não encontrada"
|
||||
|
||||
#: messages.go:119
|
||||
#: messages.go:127
|
||||
msgid "User not found"
|
||||
msgstr "Usuário não encontrado"
|
||||
|
||||
#: messages.go:120
|
||||
#: messages.go:128
|
||||
msgid "Label not found"
|
||||
msgstr "Etiqueta não encontrada"
|
||||
|
||||
#: messages.go:121
|
||||
#: messages.go:129
|
||||
msgid "Camera not found"
|
||||
msgstr "Câmera não encontrada"
|
||||
|
||||
#: messages.go:130
|
||||
msgid "Lens not found"
|
||||
msgstr "Lente não encontrada"
|
||||
|
||||
#: messages.go:131
|
||||
msgid "Album not found"
|
||||
msgstr "Álbum não encontrado"
|
||||
|
||||
#: messages.go:122
|
||||
#: messages.go:132
|
||||
msgid "Subject not found"
|
||||
msgstr "Assunto não encontrado"
|
||||
|
||||
#: messages.go:123
|
||||
#: messages.go:133
|
||||
msgid "Person not found"
|
||||
msgstr "Pessoa não encontrada"
|
||||
|
||||
#: messages.go:124
|
||||
#: messages.go:134
|
||||
msgid "Face not found"
|
||||
msgstr "Rosto não encontrado"
|
||||
|
||||
#: messages.go:125
|
||||
#: messages.go:135
|
||||
msgid "Not available in public mode"
|
||||
msgstr "Indisponível em modo público"
|
||||
|
||||
#: messages.go:126
|
||||
#: messages.go:136
|
||||
msgid "Not available in read-only mode"
|
||||
msgstr "Não disponível no modo somente leitura"
|
||||
|
||||
#: messages.go:127
|
||||
#: messages.go:137
|
||||
msgid "Please log in to your account"
|
||||
msgstr "Faça o login em sua conta"
|
||||
|
||||
#: messages.go:128
|
||||
#: messages.go:138
|
||||
msgid "Permission denied"
|
||||
msgstr "Permissão negada"
|
||||
|
||||
#: messages.go:129
|
||||
#: messages.go:139
|
||||
msgid "Payment required"
|
||||
msgstr "Pagamento obrigatório"
|
||||
|
||||
#: messages.go:130
|
||||
#: messages.go:140
|
||||
msgid "Upload might be offensive"
|
||||
msgstr "Envio pode ser ofensivo"
|
||||
|
||||
#: messages.go:131
|
||||
#: messages.go:141
|
||||
msgid "Upload failed"
|
||||
msgstr "Envio falhou"
|
||||
|
||||
#: messages.go:132
|
||||
#: messages.go:142
|
||||
msgid "No items selected"
|
||||
msgstr "Sem itens selecionados"
|
||||
|
||||
#: messages.go:133
|
||||
#: messages.go:143
|
||||
msgid "Failed creating file, please check permissions"
|
||||
msgstr "Falha ao criar arquivo, por favor cheque as permissões"
|
||||
|
||||
#: messages.go:134
|
||||
#: messages.go:144
|
||||
msgid "Failed creating folder, please check permissions"
|
||||
msgstr "Falha ao criar pasta, por favor cheque as permissões"
|
||||
|
||||
#: messages.go:135
|
||||
#: messages.go:145
|
||||
msgid "Could not connect, please try again"
|
||||
msgstr "Não foi possível conectar, por favor tente novamente"
|
||||
|
||||
#: messages.go:136
|
||||
#: messages.go:146
|
||||
msgid "Enter verification code"
|
||||
msgstr "Digite o código de verificação"
|
||||
|
||||
#: messages.go:137
|
||||
#: messages.go:147
|
||||
msgid "Invalid verification code, please try again"
|
||||
msgstr "Código de verificação inválido, tente novamente"
|
||||
|
||||
#: messages.go:138
|
||||
#: messages.go:148
|
||||
msgid "Invalid password, please try again"
|
||||
msgstr "Senha inválida, por favor tente novamente"
|
||||
|
||||
#: messages.go:139
|
||||
#: messages.go:149
|
||||
msgid "Feature disabled"
|
||||
msgstr "Recurso Desativado"
|
||||
|
||||
#: messages.go:140
|
||||
#: messages.go:150
|
||||
msgid "No labels selected"
|
||||
msgstr "Sem etiquetas selecionadas"
|
||||
|
||||
#: messages.go:141
|
||||
#: messages.go:151
|
||||
msgid "No albums selected"
|
||||
msgstr "Sem álbuns selecionados"
|
||||
|
||||
#: messages.go:142
|
||||
#: messages.go:152
|
||||
msgid "No files available for download"
|
||||
msgstr "Sem arquivos disponíveis para baixar"
|
||||
|
||||
#: messages.go:143
|
||||
#: messages.go:153
|
||||
msgid "Failed to create zip file"
|
||||
msgstr "Falha ao criar arquivo zip"
|
||||
|
||||
#: messages.go:144
|
||||
#: messages.go:154
|
||||
msgid "Invalid credentials"
|
||||
msgstr "Credenciais inválidas"
|
||||
|
||||
#: messages.go:145
|
||||
#: messages.go:155
|
||||
msgid "Invalid link"
|
||||
msgstr "Link inválido"
|
||||
|
||||
#: messages.go:146
|
||||
#: messages.go:156
|
||||
msgid "Invalid name"
|
||||
msgstr "Nome inválido"
|
||||
|
||||
#: messages.go:147
|
||||
#: messages.go:157
|
||||
msgid "Busy, please try again later"
|
||||
msgstr "Ocupado, por favor tente mais tarde"
|
||||
|
||||
#: messages.go:148
|
||||
#: messages.go:158
|
||||
#, c-format
|
||||
msgid "The wakeup interval is %s, but must be 1h or less"
|
||||
msgstr "O intervalo de despertar é %s, mas deve ser de 1h ou menos"
|
||||
|
||||
#: messages.go:149
|
||||
#: messages.go:159
|
||||
msgid "Your account could not be connected"
|
||||
msgstr "Sua conta não pôde ser conectada"
|
||||
|
||||
#: messages.go:150
|
||||
#: messages.go:160
|
||||
msgid "Too many requests"
|
||||
msgstr "Muitas solicitações"
|
||||
|
||||
#: messages.go:151
|
||||
#: messages.go:161
|
||||
msgid "Insufficient storage"
|
||||
msgstr "Armazenamento insuficiente"
|
||||
|
||||
#: messages.go:152
|
||||
#: messages.go:162
|
||||
msgid "Quota exceeded"
|
||||
msgstr "Cota excedida"
|
||||
|
||||
#: messages.go:155
|
||||
#: messages.go:163
|
||||
msgid "Registration disabled"
|
||||
msgstr "Cadastro desativado"
|
||||
|
||||
#: messages.go:164
|
||||
msgid "Verified email required"
|
||||
msgstr "É necessário um e-mail verificado."
|
||||
|
||||
#: messages.go:167
|
||||
msgid "Changes successfully saved"
|
||||
msgstr "As mudanças foram salvas com sucesso"
|
||||
|
||||
#: messages.go:156
|
||||
#: messages.go:168
|
||||
msgid "Album created"
|
||||
msgstr "Álbum criado"
|
||||
|
||||
#: messages.go:157
|
||||
#: messages.go:169
|
||||
msgid "Album saved"
|
||||
msgstr "Álbum salvo"
|
||||
|
||||
#: messages.go:158
|
||||
#: messages.go:170
|
||||
#, c-format
|
||||
msgid "Album %s deleted"
|
||||
msgstr "Álbum %s excluído"
|
||||
|
||||
#: messages.go:159
|
||||
#: messages.go:171
|
||||
msgid "Album contents cloned"
|
||||
msgstr "Conteúdo do álbum copiado"
|
||||
|
||||
#: messages.go:160
|
||||
#: messages.go:172
|
||||
msgid "File removed from stack"
|
||||
msgstr "Arquivo removido da pilha"
|
||||
|
||||
#: messages.go:161
|
||||
#: messages.go:173
|
||||
msgid "File deleted"
|
||||
msgstr "Arquivo excluído"
|
||||
|
||||
#: messages.go:162
|
||||
#: messages.go:174
|
||||
#, c-format
|
||||
msgid "Selection added to %s"
|
||||
msgstr "Seleção adicionada a %s"
|
||||
|
||||
#: messages.go:163
|
||||
#: messages.go:175
|
||||
#, c-format
|
||||
msgid "One entry added to %s"
|
||||
msgstr "Uma entrada adicionada a %s"
|
||||
|
||||
#: messages.go:164
|
||||
#: messages.go:176
|
||||
#, c-format
|
||||
msgid "%d entries added to %s"
|
||||
msgstr "%d entradas adicionadas a %s"
|
||||
|
||||
#: messages.go:165
|
||||
#: messages.go:177
|
||||
#, c-format
|
||||
msgid "One entry removed from %s"
|
||||
msgstr "Uma entrada removida de %s"
|
||||
|
||||
#: messages.go:166
|
||||
#: messages.go:178
|
||||
#, c-format
|
||||
msgid "%d entries removed from %s"
|
||||
msgstr "%d entradas removidas de %s"
|
||||
|
||||
#: messages.go:167
|
||||
#: messages.go:179
|
||||
msgid "Account created"
|
||||
msgstr "Conta criada"
|
||||
|
||||
#: messages.go:168
|
||||
#: messages.go:180
|
||||
msgid "Account saved"
|
||||
msgstr "Conta salva"
|
||||
|
||||
#: messages.go:169
|
||||
#: messages.go:181
|
||||
msgid "Account deleted"
|
||||
msgstr "Conta excluída"
|
||||
|
||||
#: messages.go:170
|
||||
#: messages.go:182
|
||||
msgid "Settings saved"
|
||||
msgstr "Configurações salvas"
|
||||
|
||||
#: messages.go:171
|
||||
#: messages.go:183
|
||||
msgid "Password changed"
|
||||
msgstr "Senha alterada"
|
||||
|
||||
#: messages.go:172
|
||||
#: messages.go:184
|
||||
#, c-format
|
||||
msgid "Import completed in %d s"
|
||||
msgstr "Importação completa em %d"
|
||||
|
||||
#: messages.go:173
|
||||
#: messages.go:185
|
||||
msgid "Import canceled"
|
||||
msgstr "Importação cancelada"
|
||||
|
||||
#: messages.go:174
|
||||
#: messages.go:186
|
||||
#, c-format
|
||||
msgid "Indexing completed in %d s"
|
||||
msgstr "Indexação completa em %d"
|
||||
|
||||
#: messages.go:175
|
||||
#: messages.go:187
|
||||
msgid "Indexing originals..."
|
||||
msgstr "Indexando originais..."
|
||||
|
||||
#: messages.go:176
|
||||
#: messages.go:188
|
||||
#, c-format
|
||||
msgid "Indexing files in %s"
|
||||
msgstr "Indexando arquivos em %s"
|
||||
|
||||
#: messages.go:177
|
||||
#: messages.go:189
|
||||
msgid "Indexing canceled"
|
||||
msgstr "Indexação cancelada"
|
||||
|
||||
#: messages.go:178
|
||||
#: messages.go:190
|
||||
#, c-format
|
||||
msgid "Removed %d files and %d photos"
|
||||
msgstr "Removidos %d arquivos e %d fotos"
|
||||
|
||||
#: messages.go:179
|
||||
#: messages.go:191
|
||||
#, c-format
|
||||
msgid "Moving files from %s"
|
||||
msgstr "Movendo arquivos de %s"
|
||||
|
||||
#: messages.go:180
|
||||
#: messages.go:192
|
||||
#, c-format
|
||||
msgid "Copying files from %s"
|
||||
msgstr "Copiando arquivos de %s"
|
||||
|
||||
#: messages.go:181
|
||||
#: messages.go:193
|
||||
msgid "Labels deleted"
|
||||
msgstr "Etiquetas excluídas"
|
||||
|
||||
#: messages.go:182
|
||||
#: messages.go:194
|
||||
msgid "Label saved"
|
||||
msgstr "Etiqueta salva"
|
||||
|
||||
#: messages.go:183
|
||||
#: messages.go:195
|
||||
msgid "Subject saved"
|
||||
msgstr "Assunto salvo"
|
||||
|
||||
#: messages.go:184
|
||||
#: messages.go:196
|
||||
msgid "Subject deleted"
|
||||
msgstr "Assunto eliminado"
|
||||
|
||||
#: messages.go:185
|
||||
#: messages.go:197
|
||||
msgid "Person saved"
|
||||
msgstr "Pessoa salva"
|
||||
|
||||
#: messages.go:186
|
||||
#: messages.go:198
|
||||
msgid "Person deleted"
|
||||
msgstr "Pessoa apagada"
|
||||
|
||||
#: messages.go:187
|
||||
#: messages.go:199
|
||||
msgid "File uploaded"
|
||||
msgstr "Arquivo carregado"
|
||||
|
||||
#: messages.go:188
|
||||
#: messages.go:200
|
||||
#, c-format
|
||||
msgid "%d files uploaded in %d s"
|
||||
msgstr "%d arquivos enviados em %d"
|
||||
|
||||
#: messages.go:189
|
||||
#: messages.go:201
|
||||
msgid "Processing upload..."
|
||||
msgstr "Processamento de upload..."
|
||||
|
||||
#: messages.go:190
|
||||
#: messages.go:202
|
||||
msgid "Upload has been processed"
|
||||
msgstr "O Upload foi processado"
|
||||
|
||||
#: messages.go:191
|
||||
#: messages.go:203
|
||||
msgid "Selection approved"
|
||||
msgstr "Seleção aprovada"
|
||||
|
||||
#: messages.go:192
|
||||
#: messages.go:204
|
||||
msgid "Selection archived"
|
||||
msgstr "Seleção arquivada"
|
||||
|
||||
#: messages.go:193
|
||||
#: messages.go:205
|
||||
msgid "Selection restored"
|
||||
msgstr "Seleção restaurada"
|
||||
|
||||
#: messages.go:194
|
||||
#: messages.go:206
|
||||
msgid "Selection marked as private"
|
||||
msgstr "Seleção marcada como privada"
|
||||
|
||||
#: messages.go:195
|
||||
#: messages.go:207
|
||||
msgid "Albums deleted"
|
||||
msgstr "Álbuns excluídos"
|
||||
|
||||
#: messages.go:196
|
||||
#: messages.go:208
|
||||
#, c-format
|
||||
msgid "Zip created in %d s"
|
||||
msgstr "Zip criado em %d"
|
||||
|
||||
#: messages.go:197
|
||||
#: messages.go:209
|
||||
msgid "Permanently deleted"
|
||||
msgstr "Permanentemente excluídas"
|
||||
|
||||
#: messages.go:198
|
||||
#: messages.go:210
|
||||
#, c-format
|
||||
msgid "%s has been restored"
|
||||
msgstr "%s foi restaurado"
|
||||
|
||||
#: messages.go:199
|
||||
#: messages.go:211
|
||||
msgid "Successfully verified"
|
||||
msgstr "Verificado com sucesso"
|
||||
|
||||
#: messages.go:200
|
||||
#: messages.go:212
|
||||
msgid "Successfully activated"
|
||||
msgstr "Ativado com sucesso"
|
||||
|
||||
|
|
|
|||
|
|
@ -2,9 +2,10 @@ msgid ""
|
|||
msgstr ""
|
||||
"Project-Id-Version: PACKAGE VERSION\n"
|
||||
"Report-Msgid-Bugs-To: \n"
|
||||
"POT-Creation-Date: 2025-10-17 17:32+0000\n"
|
||||
"PO-Revision-Date: 2025-10-22 08:25+0000\n"
|
||||
"Last-Translator: DeepL <noreply-mt-deepl@weblate.org>\n"
|
||||
"POT-Creation-Date: 2026-06-27 09:13+0000\n"
|
||||
"PO-Revision-Date: 2026-06-27 10:28+0000\n"
|
||||
"Last-Translator: Google Cloud Translation Basic <noreply-mt-google-"
|
||||
"translate@weblate.org>\n"
|
||||
"Language-Team: Romanian <https://translate.photoprism.app/projects/"
|
||||
"photoprism/backend/ro/>\n"
|
||||
"Language: ro\n"
|
||||
|
|
@ -13,402 +14,418 @@ msgstr ""
|
|||
"Content-Transfer-Encoding: 8bit\n"
|
||||
"Plural-Forms: nplurals=3; plural=n==1 ? 0 : (n==0 || (n%100 > 0 && n%100 < "
|
||||
"20)) ? 1 : 2;\n"
|
||||
"X-Generator: Weblate 5.13.3\n"
|
||||
"X-Generator: Weblate 2026.5\n"
|
||||
|
||||
#: messages.go:104
|
||||
#: messages.go:112
|
||||
msgid "Something went wrong, try again"
|
||||
msgstr "Ceva nu a mers bine, încercați din nou"
|
||||
|
||||
#: messages.go:105
|
||||
#: messages.go:113
|
||||
msgid "Unable to do that"
|
||||
msgstr "Nu se poate face asta"
|
||||
|
||||
#: messages.go:106
|
||||
#: messages.go:114
|
||||
msgid "Changes could not be saved"
|
||||
msgstr "Modificările nu au putut fi salvate"
|
||||
|
||||
#: messages.go:107
|
||||
#: messages.go:115
|
||||
msgid "Could not be deleted"
|
||||
msgstr "Nu a putut fi șters"
|
||||
|
||||
#: messages.go:108
|
||||
#: messages.go:116
|
||||
#, c-format
|
||||
msgid "%s already exists"
|
||||
msgstr "%s deja există"
|
||||
|
||||
#: messages.go:109
|
||||
#: messages.go:117
|
||||
msgid "Not found"
|
||||
msgstr "Nu a fost găsit"
|
||||
|
||||
#: messages.go:110
|
||||
#: messages.go:118
|
||||
msgid "File not found"
|
||||
msgstr "Fișier nedescoperit"
|
||||
|
||||
#: messages.go:111
|
||||
#: messages.go:119
|
||||
msgid "File too large"
|
||||
msgstr "Fișier prea mare"
|
||||
|
||||
#: messages.go:112
|
||||
#: messages.go:120
|
||||
msgid "Unsupported"
|
||||
msgstr "Neacceptat"
|
||||
|
||||
#: messages.go:113
|
||||
#: messages.go:121
|
||||
msgid "Unsupported type"
|
||||
msgstr "Tip neacceptat"
|
||||
|
||||
#: messages.go:114
|
||||
#: messages.go:122
|
||||
msgid "Unsupported format"
|
||||
msgstr "Format neacceptat"
|
||||
|
||||
#: messages.go:115
|
||||
#: messages.go:123
|
||||
msgid "Originals folder is empty"
|
||||
msgstr "Dosarul Originals este gol"
|
||||
|
||||
#: messages.go:116
|
||||
#: messages.go:124
|
||||
msgid "Selection not found"
|
||||
msgstr "Selecția nu a fost găsită"
|
||||
|
||||
#: messages.go:117
|
||||
#: messages.go:125
|
||||
msgid "Entity not found"
|
||||
msgstr "Entitatea nu a fost găsită"
|
||||
|
||||
#: messages.go:118
|
||||
#: messages.go:126
|
||||
msgid "Account not found"
|
||||
msgstr "Contul nu a fost găsit"
|
||||
|
||||
#: messages.go:119
|
||||
#: messages.go:127
|
||||
msgid "User not found"
|
||||
msgstr "Utilizatorul nu a fost găsit"
|
||||
|
||||
#: messages.go:120
|
||||
#: messages.go:128
|
||||
msgid "Label not found"
|
||||
msgstr "Eticheta nu a fost găsită"
|
||||
|
||||
#: messages.go:121
|
||||
#: messages.go:129
|
||||
msgid "Camera not found"
|
||||
msgstr "Nu s-a găsit camera"
|
||||
|
||||
#: messages.go:130
|
||||
msgid "Lens not found"
|
||||
msgstr "Obiectivul nu a fost găsit"
|
||||
|
||||
#: messages.go:131
|
||||
msgid "Album not found"
|
||||
msgstr "Album nedescoperit"
|
||||
|
||||
#: messages.go:122
|
||||
#: messages.go:132
|
||||
msgid "Subject not found"
|
||||
msgstr "Subiectul nu a fost găsit"
|
||||
|
||||
#: messages.go:123
|
||||
#: messages.go:133
|
||||
msgid "Person not found"
|
||||
msgstr "Persoana nu a fost găsită"
|
||||
|
||||
#: messages.go:124
|
||||
#: messages.go:134
|
||||
msgid "Face not found"
|
||||
msgstr "Fața nu a fost găsită"
|
||||
|
||||
#: messages.go:125
|
||||
#: messages.go:135
|
||||
msgid "Not available in public mode"
|
||||
msgstr "Nu este disponibil în modul public"
|
||||
|
||||
#: messages.go:126
|
||||
#: messages.go:136
|
||||
msgid "Not available in read-only mode"
|
||||
msgstr "Nu este disponibil în modul doar pentru citire"
|
||||
|
||||
#: messages.go:127
|
||||
#: messages.go:137
|
||||
msgid "Please log in to your account"
|
||||
msgstr "Vă rugăm să vă conectați la contul dvs"
|
||||
|
||||
#: messages.go:128
|
||||
#: messages.go:138
|
||||
msgid "Permission denied"
|
||||
msgstr "Permisiune refuzată"
|
||||
|
||||
#: messages.go:129
|
||||
#: messages.go:139
|
||||
msgid "Payment required"
|
||||
msgstr "Plata necesară"
|
||||
|
||||
#: messages.go:130
|
||||
#: messages.go:140
|
||||
msgid "Upload might be offensive"
|
||||
msgstr "Încărcarea poate fi ofensatoare"
|
||||
|
||||
#: messages.go:131
|
||||
#: messages.go:141
|
||||
msgid "Upload failed"
|
||||
msgstr "Încărcarea a eșuat"
|
||||
|
||||
#: messages.go:132
|
||||
#: messages.go:142
|
||||
msgid "No items selected"
|
||||
msgstr "Niciun element selectat"
|
||||
|
||||
#: messages.go:133
|
||||
#: messages.go:143
|
||||
msgid "Failed creating file, please check permissions"
|
||||
msgstr "Nu a reușit să creeze fișierul, vă rugăm să verificați permisiunile"
|
||||
|
||||
#: messages.go:134
|
||||
#: messages.go:144
|
||||
msgid "Failed creating folder, please check permissions"
|
||||
msgstr "Nu s-a reușit crearea dosarului, vă rugăm să verificați permisiunile"
|
||||
|
||||
#: messages.go:135
|
||||
#: messages.go:145
|
||||
msgid "Could not connect, please try again"
|
||||
msgstr "Nu s-a putut conecta, vă rugăm să încercați din nou"
|
||||
|
||||
#: messages.go:136
|
||||
#: messages.go:146
|
||||
msgid "Enter verification code"
|
||||
msgstr "Introduceți codul de verificare"
|
||||
|
||||
#: messages.go:137
|
||||
#: messages.go:147
|
||||
msgid "Invalid verification code, please try again"
|
||||
msgstr "Cod de verificare nevalid, încercați din nou"
|
||||
|
||||
#: messages.go:138
|
||||
#: messages.go:148
|
||||
msgid "Invalid password, please try again"
|
||||
msgstr "Parolă invalidă, vă rugăm să încercați din nou"
|
||||
|
||||
#: messages.go:139
|
||||
#: messages.go:149
|
||||
msgid "Feature disabled"
|
||||
msgstr "Caracteristică dezactivată"
|
||||
|
||||
#: messages.go:140
|
||||
#: messages.go:150
|
||||
msgid "No labels selected"
|
||||
msgstr "Nu sunt selectate etichete"
|
||||
|
||||
#: messages.go:141
|
||||
#: messages.go:151
|
||||
msgid "No albums selected"
|
||||
msgstr "Nu sunt selectate albume"
|
||||
|
||||
#: messages.go:142
|
||||
#: messages.go:152
|
||||
msgid "No files available for download"
|
||||
msgstr "Nu există fișiere disponibile pentru descărcare"
|
||||
|
||||
#: messages.go:143
|
||||
#: messages.go:153
|
||||
msgid "Failed to create zip file"
|
||||
msgstr "Nu a reușit să creeze fișierul zip"
|
||||
|
||||
#: messages.go:144
|
||||
#: messages.go:154
|
||||
msgid "Invalid credentials"
|
||||
msgstr "Acreditări nevalabile"
|
||||
|
||||
#: messages.go:145
|
||||
#: messages.go:155
|
||||
msgid "Invalid link"
|
||||
msgstr "Legătură invalidă"
|
||||
|
||||
#: messages.go:146
|
||||
#: messages.go:156
|
||||
msgid "Invalid name"
|
||||
msgstr "Nume invalid"
|
||||
|
||||
#: messages.go:147
|
||||
#: messages.go:157
|
||||
msgid "Busy, please try again later"
|
||||
msgstr "Ocupat, vă rugăm să încercați din nou mai târziu"
|
||||
|
||||
#: messages.go:148
|
||||
#: messages.go:158
|
||||
#, c-format
|
||||
msgid "The wakeup interval is %s, but must be 1h or less"
|
||||
msgstr "Intervalul de trezire este %s, dar trebuie să fie de 1h sau mai puțin"
|
||||
|
||||
#: messages.go:149
|
||||
#: messages.go:159
|
||||
msgid "Your account could not be connected"
|
||||
msgstr "Contul dvs. nu a putut fi conectat"
|
||||
|
||||
#: messages.go:150
|
||||
#: messages.go:160
|
||||
msgid "Too many requests"
|
||||
msgstr "Prea multe cereri"
|
||||
|
||||
#: messages.go:151
|
||||
#: messages.go:161
|
||||
msgid "Insufficient storage"
|
||||
msgstr "Depozitare insuficientă"
|
||||
|
||||
#: messages.go:152
|
||||
#: messages.go:162
|
||||
msgid "Quota exceeded"
|
||||
msgstr "Cota depășită"
|
||||
|
||||
#: messages.go:155
|
||||
#: messages.go:163
|
||||
msgid "Registration disabled"
|
||||
msgstr "Înregistrare dezactivată"
|
||||
|
||||
#: messages.go:164
|
||||
msgid "Verified email required"
|
||||
msgstr "Adresă de e-mail verificată necesară"
|
||||
|
||||
#: messages.go:167
|
||||
msgid "Changes successfully saved"
|
||||
msgstr "Modificări salvate cu succes"
|
||||
|
||||
#: messages.go:156
|
||||
#: messages.go:168
|
||||
msgid "Album created"
|
||||
msgstr "Album creat"
|
||||
|
||||
#: messages.go:157
|
||||
#: messages.go:169
|
||||
msgid "Album saved"
|
||||
msgstr "Album salvat"
|
||||
|
||||
#: messages.go:158
|
||||
#: messages.go:170
|
||||
#, c-format
|
||||
msgid "Album %s deleted"
|
||||
msgstr "Album %s șters"
|
||||
|
||||
#: messages.go:159
|
||||
#: messages.go:171
|
||||
msgid "Album contents cloned"
|
||||
msgstr "Conținutul albumului a fost clonat"
|
||||
|
||||
#: messages.go:160
|
||||
#: messages.go:172
|
||||
msgid "File removed from stack"
|
||||
msgstr "Fișier eliminat din stivă"
|
||||
|
||||
#: messages.go:161
|
||||
#: messages.go:173
|
||||
msgid "File deleted"
|
||||
msgstr "Fișier șters"
|
||||
|
||||
#: messages.go:162
|
||||
#: messages.go:174
|
||||
#, c-format
|
||||
msgid "Selection added to %s"
|
||||
msgstr "Selecție adăugată la %s"
|
||||
|
||||
#: messages.go:163
|
||||
#: messages.go:175
|
||||
#, c-format
|
||||
msgid "One entry added to %s"
|
||||
msgstr "O intrare adăugată la %s"
|
||||
|
||||
#: messages.go:164
|
||||
#: messages.go:176
|
||||
#, c-format
|
||||
msgid "%d entries added to %s"
|
||||
msgstr "%d intrări adăugate la %s"
|
||||
|
||||
#: messages.go:165
|
||||
#: messages.go:177
|
||||
#, c-format
|
||||
msgid "One entry removed from %s"
|
||||
msgstr "O intrare eliminată din %s"
|
||||
|
||||
#: messages.go:166
|
||||
#: messages.go:178
|
||||
#, c-format
|
||||
msgid "%d entries removed from %s"
|
||||
msgstr "%d intrări eliminate din %s"
|
||||
|
||||
#: messages.go:167
|
||||
#: messages.go:179
|
||||
msgid "Account created"
|
||||
msgstr "Cont creat"
|
||||
|
||||
#: messages.go:168
|
||||
#: messages.go:180
|
||||
msgid "Account saved"
|
||||
msgstr "Cont salvat"
|
||||
|
||||
#: messages.go:169
|
||||
#: messages.go:181
|
||||
msgid "Account deleted"
|
||||
msgstr "Cont șters"
|
||||
|
||||
#: messages.go:170
|
||||
#: messages.go:182
|
||||
msgid "Settings saved"
|
||||
msgstr "Setări salvate"
|
||||
|
||||
#: messages.go:171
|
||||
#: messages.go:183
|
||||
msgid "Password changed"
|
||||
msgstr "Parola a fost schimbată"
|
||||
|
||||
#: messages.go:172
|
||||
#: messages.go:184
|
||||
#, c-format
|
||||
msgid "Import completed in %d s"
|
||||
msgstr "Import finalizat în %d s"
|
||||
|
||||
#: messages.go:173
|
||||
#: messages.go:185
|
||||
msgid "Import canceled"
|
||||
msgstr "Importul a fost anulat"
|
||||
|
||||
#: messages.go:174
|
||||
#: messages.go:186
|
||||
#, c-format
|
||||
msgid "Indexing completed in %d s"
|
||||
msgstr "Indexare finalizată în %d s"
|
||||
|
||||
#: messages.go:175
|
||||
#: messages.go:187
|
||||
msgid "Indexing originals..."
|
||||
msgstr "Indexarea originalelor..."
|
||||
|
||||
#: messages.go:176
|
||||
#: messages.go:188
|
||||
#, c-format
|
||||
msgid "Indexing files in %s"
|
||||
msgstr "Indexarea fișierelor în %s"
|
||||
|
||||
#: messages.go:177
|
||||
#: messages.go:189
|
||||
msgid "Indexing canceled"
|
||||
msgstr "Indexare anulată"
|
||||
|
||||
#: messages.go:178
|
||||
#: messages.go:190
|
||||
#, c-format
|
||||
msgid "Removed %d files and %d photos"
|
||||
msgstr "Sau eliminat %d fișiere și %d fotografii"
|
||||
|
||||
#: messages.go:179
|
||||
#: messages.go:191
|
||||
#, c-format
|
||||
msgid "Moving files from %s"
|
||||
msgstr "Mutarea fișierelor din %s"
|
||||
|
||||
#: messages.go:180
|
||||
#: messages.go:192
|
||||
#, c-format
|
||||
msgid "Copying files from %s"
|
||||
msgstr "Copierea fișierelor din %s"
|
||||
|
||||
#: messages.go:181
|
||||
#: messages.go:193
|
||||
msgid "Labels deleted"
|
||||
msgstr "Etichete șterse"
|
||||
|
||||
#: messages.go:182
|
||||
#: messages.go:194
|
||||
msgid "Label saved"
|
||||
msgstr "Etichetă salvată"
|
||||
|
||||
#: messages.go:183
|
||||
#: messages.go:195
|
||||
msgid "Subject saved"
|
||||
msgstr "Subiect salvat"
|
||||
|
||||
#: messages.go:184
|
||||
#: messages.go:196
|
||||
msgid "Subject deleted"
|
||||
msgstr "Subiect eliminat"
|
||||
|
||||
#: messages.go:185
|
||||
#: messages.go:197
|
||||
msgid "Person saved"
|
||||
msgstr "Persoană salvată"
|
||||
|
||||
#: messages.go:186
|
||||
#: messages.go:198
|
||||
msgid "Person deleted"
|
||||
msgstr "Persoană eliminată"
|
||||
|
||||
#: messages.go:187
|
||||
#: messages.go:199
|
||||
msgid "File uploaded"
|
||||
msgstr "Fișier încărcat"
|
||||
|
||||
#: messages.go:188
|
||||
#: messages.go:200
|
||||
#, c-format
|
||||
msgid "%d files uploaded in %d s"
|
||||
msgstr "%d fișiere încărcate în %d s"
|
||||
|
||||
#: messages.go:189
|
||||
#: messages.go:201
|
||||
msgid "Processing upload..."
|
||||
msgstr "Procesarea încărcării..."
|
||||
|
||||
#: messages.go:190
|
||||
#: messages.go:202
|
||||
msgid "Upload has been processed"
|
||||
msgstr "Încărcarea a fost procesată"
|
||||
|
||||
#: messages.go:191
|
||||
#: messages.go:203
|
||||
msgid "Selection approved"
|
||||
msgstr "Selecție aprobată"
|
||||
|
||||
#: messages.go:192
|
||||
#: messages.go:204
|
||||
msgid "Selection archived"
|
||||
msgstr "Selecție arhivată"
|
||||
|
||||
#: messages.go:193
|
||||
#: messages.go:205
|
||||
msgid "Selection restored"
|
||||
msgstr "Selecție restabilită"
|
||||
|
||||
#: messages.go:194
|
||||
#: messages.go:206
|
||||
msgid "Selection marked as private"
|
||||
msgstr "Selecție marcată ca fiind privată"
|
||||
|
||||
#: messages.go:195
|
||||
#: messages.go:207
|
||||
msgid "Albums deleted"
|
||||
msgstr "Albume șterse"
|
||||
|
||||
#: messages.go:196
|
||||
#: messages.go:208
|
||||
#, c-format
|
||||
msgid "Zip created in %d s"
|
||||
msgstr "Fișierul Zip creat în %d s"
|
||||
|
||||
#: messages.go:197
|
||||
#: messages.go:209
|
||||
msgid "Permanently deleted"
|
||||
msgstr "Șterse definitiv"
|
||||
|
||||
#: messages.go:198
|
||||
#: messages.go:210
|
||||
#, c-format
|
||||
msgid "%s has been restored"
|
||||
msgstr "%s a fost restaurat"
|
||||
|
||||
#: messages.go:199
|
||||
#: messages.go:211
|
||||
msgid "Successfully verified"
|
||||
msgstr "Verificat cu succes"
|
||||
|
||||
#: messages.go:200
|
||||
#: messages.go:212
|
||||
msgid "Successfully activated"
|
||||
msgstr "Activat cu succes"
|
||||
|
||||
|
|
|
|||
|
|
@ -2,9 +2,10 @@ msgid ""
|
|||
msgstr ""
|
||||
"Project-Id-Version: \n"
|
||||
"Report-Msgid-Bugs-To: \n"
|
||||
"POT-Creation-Date: 2025-10-17 17:32+0000\n"
|
||||
"PO-Revision-Date: 2025-10-22 08:25+0000\n"
|
||||
"Last-Translator: DeepL <noreply-mt-deepl@weblate.org>\n"
|
||||
"POT-Creation-Date: 2026-06-27 09:13+0000\n"
|
||||
"PO-Revision-Date: 2026-06-27 10:28+0000\n"
|
||||
"Last-Translator: Google Cloud Translation Basic <noreply-mt-google-"
|
||||
"translate@weblate.org>\n"
|
||||
"Language-Team: Russian <https://translate.photoprism.app/projects/photoprism/"
|
||||
"backend/ru/>\n"
|
||||
"Language: ru\n"
|
||||
|
|
@ -13,402 +14,418 @@ msgstr ""
|
|||
"Content-Transfer-Encoding: 8bit\n"
|
||||
"Plural-Forms: nplurals=3; plural=n%10==1 && n%100!=11 ? 0 : n%10>=2 && "
|
||||
"n%10<=4 && (n%100<10 || n%100>=20) ? 1 : 2;\n"
|
||||
"X-Generator: Weblate 5.13.3\n"
|
||||
"X-Generator: Weblate 2026.5\n"
|
||||
|
||||
#: messages.go:104
|
||||
#: messages.go:112
|
||||
msgid "Something went wrong, try again"
|
||||
msgstr "Что-то пошло не так, попробуйте еще раз"
|
||||
|
||||
#: messages.go:105
|
||||
#: messages.go:113
|
||||
msgid "Unable to do that"
|
||||
msgstr "Невозможно сделать это"
|
||||
|
||||
#: messages.go:106
|
||||
#: messages.go:114
|
||||
msgid "Changes could not be saved"
|
||||
msgstr "Изменения не будут сохранены"
|
||||
|
||||
#: messages.go:107
|
||||
#: messages.go:115
|
||||
msgid "Could not be deleted"
|
||||
msgstr "Не будет удалено"
|
||||
|
||||
#: messages.go:108
|
||||
#: messages.go:116
|
||||
#, c-format
|
||||
msgid "%s already exists"
|
||||
msgstr "%s уже существует"
|
||||
|
||||
#: messages.go:109
|
||||
#: messages.go:117
|
||||
msgid "Not found"
|
||||
msgstr "Не найдено"
|
||||
|
||||
#: messages.go:110
|
||||
#: messages.go:118
|
||||
msgid "File not found"
|
||||
msgstr "Файл не найден"
|
||||
|
||||
#: messages.go:111
|
||||
#: messages.go:119
|
||||
msgid "File too large"
|
||||
msgstr "Слишком большой файл"
|
||||
|
||||
#: messages.go:112
|
||||
#: messages.go:120
|
||||
msgid "Unsupported"
|
||||
msgstr "Не поддерживается"
|
||||
|
||||
#: messages.go:113
|
||||
#: messages.go:121
|
||||
msgid "Unsupported type"
|
||||
msgstr "Неподдерживаемый тип"
|
||||
|
||||
#: messages.go:114
|
||||
#: messages.go:122
|
||||
msgid "Unsupported format"
|
||||
msgstr "Неподдерживаемый формат"
|
||||
|
||||
#: messages.go:115
|
||||
#: messages.go:123
|
||||
msgid "Originals folder is empty"
|
||||
msgstr "Папка оригиналов пуста"
|
||||
|
||||
#: messages.go:116
|
||||
#: messages.go:124
|
||||
msgid "Selection not found"
|
||||
msgstr "Выделение не найдено"
|
||||
|
||||
#: messages.go:117
|
||||
#: messages.go:125
|
||||
msgid "Entity not found"
|
||||
msgstr "Сущность не найдена"
|
||||
|
||||
#: messages.go:118
|
||||
#: messages.go:126
|
||||
msgid "Account not found"
|
||||
msgstr "Учетная запись не найдена"
|
||||
|
||||
#: messages.go:119
|
||||
#: messages.go:127
|
||||
msgid "User not found"
|
||||
msgstr "Пользователь не найден"
|
||||
|
||||
#: messages.go:120
|
||||
#: messages.go:128
|
||||
msgid "Label not found"
|
||||
msgstr "Метка не найдена"
|
||||
|
||||
#: messages.go:121
|
||||
#: messages.go:129
|
||||
msgid "Camera not found"
|
||||
msgstr "Камера не найдена"
|
||||
|
||||
#: messages.go:130
|
||||
msgid "Lens not found"
|
||||
msgstr "Объектив не найден"
|
||||
|
||||
#: messages.go:131
|
||||
msgid "Album not found"
|
||||
msgstr "Альбом не найден"
|
||||
|
||||
#: messages.go:122
|
||||
#: messages.go:132
|
||||
msgid "Subject not found"
|
||||
msgstr "Объект не найден"
|
||||
|
||||
#: messages.go:123
|
||||
#: messages.go:133
|
||||
msgid "Person not found"
|
||||
msgstr "Человек не найден"
|
||||
|
||||
#: messages.go:124
|
||||
#: messages.go:134
|
||||
msgid "Face not found"
|
||||
msgstr "Лицо не найдено"
|
||||
|
||||
#: messages.go:125
|
||||
#: messages.go:135
|
||||
msgid "Not available in public mode"
|
||||
msgstr "Не доступно в публичном режиме"
|
||||
|
||||
#: messages.go:126
|
||||
#: messages.go:136
|
||||
msgid "Not available in read-only mode"
|
||||
msgstr "Недоступно в режиме только для чтения"
|
||||
|
||||
#: messages.go:127
|
||||
#: messages.go:137
|
||||
msgid "Please log in to your account"
|
||||
msgstr "Пожалуйста, войдите в свой аккаунт"
|
||||
|
||||
#: messages.go:128
|
||||
#: messages.go:138
|
||||
msgid "Permission denied"
|
||||
msgstr "Доступ запрещен"
|
||||
|
||||
#: messages.go:129
|
||||
#: messages.go:139
|
||||
msgid "Payment required"
|
||||
msgstr "Требуется оплата"
|
||||
|
||||
#: messages.go:130
|
||||
#: messages.go:140
|
||||
msgid "Upload might be offensive"
|
||||
msgstr "Загрузка может быть оскорбительной"
|
||||
|
||||
#: messages.go:131
|
||||
#: messages.go:141
|
||||
msgid "Upload failed"
|
||||
msgstr "Загрузка не удалась"
|
||||
|
||||
#: messages.go:132
|
||||
#: messages.go:142
|
||||
msgid "No items selected"
|
||||
msgstr "Нет выделенных элементов"
|
||||
|
||||
#: messages.go:133
|
||||
#: messages.go:143
|
||||
msgid "Failed creating file, please check permissions"
|
||||
msgstr "Не удалось создать файл, проверьте права доступа"
|
||||
|
||||
#: messages.go:134
|
||||
#: messages.go:144
|
||||
msgid "Failed creating folder, please check permissions"
|
||||
msgstr "Не удалось создать папку, проверьте права доступа"
|
||||
|
||||
#: messages.go:135
|
||||
#: messages.go:145
|
||||
msgid "Could not connect, please try again"
|
||||
msgstr "Нет соединения, попробуйте еще раз"
|
||||
|
||||
#: messages.go:136
|
||||
#: messages.go:146
|
||||
msgid "Enter verification code"
|
||||
msgstr "введите код подтверждения"
|
||||
|
||||
#: messages.go:137
|
||||
#: messages.go:147
|
||||
msgid "Invalid verification code, please try again"
|
||||
msgstr "Неверный код подтверждения. Повторите попытку."
|
||||
|
||||
#: messages.go:138
|
||||
#: messages.go:148
|
||||
msgid "Invalid password, please try again"
|
||||
msgstr "Неверный пароль, пожалуйста попробуйте еще раз"
|
||||
|
||||
#: messages.go:139
|
||||
#: messages.go:149
|
||||
msgid "Feature disabled"
|
||||
msgstr "Данная возможность отключена"
|
||||
|
||||
#: messages.go:140
|
||||
#: messages.go:150
|
||||
msgid "No labels selected"
|
||||
msgstr "Нет выделенных меток"
|
||||
|
||||
#: messages.go:141
|
||||
#: messages.go:151
|
||||
msgid "No albums selected"
|
||||
msgstr "Нет выделенных альбомов"
|
||||
|
||||
#: messages.go:142
|
||||
#: messages.go:152
|
||||
msgid "No files available for download"
|
||||
msgstr "Нет файлов, доступных для скачивания"
|
||||
|
||||
#: messages.go:143
|
||||
#: messages.go:153
|
||||
msgid "Failed to create zip file"
|
||||
msgstr "Не удалось создать zip-файл"
|
||||
|
||||
#: messages.go:144
|
||||
#: messages.go:154
|
||||
msgid "Invalid credentials"
|
||||
msgstr "Неверные учетные данные"
|
||||
|
||||
#: messages.go:145
|
||||
#: messages.go:155
|
||||
msgid "Invalid link"
|
||||
msgstr "Неверная ссылка"
|
||||
|
||||
#: messages.go:146
|
||||
#: messages.go:156
|
||||
msgid "Invalid name"
|
||||
msgstr "Неприемлемое имя"
|
||||
|
||||
#: messages.go:147
|
||||
#: messages.go:157
|
||||
msgid "Busy, please try again later"
|
||||
msgstr "Занят, повторите попытку позже"
|
||||
|
||||
#: messages.go:148
|
||||
#: messages.go:158
|
||||
#, c-format
|
||||
msgid "The wakeup interval is %s, but must be 1h or less"
|
||||
msgstr "Интервал пробуждения составляет %s, но должен быть 1 час или меньше"
|
||||
|
||||
#: messages.go:149
|
||||
#: messages.go:159
|
||||
msgid "Your account could not be connected"
|
||||
msgstr "Ваш аккаунт не удалось подключить"
|
||||
|
||||
#: messages.go:150
|
||||
#: messages.go:160
|
||||
msgid "Too many requests"
|
||||
msgstr "Слишком много запросов"
|
||||
|
||||
#: messages.go:151
|
||||
#: messages.go:161
|
||||
msgid "Insufficient storage"
|
||||
msgstr "Недостаточно места для хранения"
|
||||
|
||||
#: messages.go:152
|
||||
#: messages.go:162
|
||||
msgid "Quota exceeded"
|
||||
msgstr "Квота превышена"
|
||||
|
||||
#: messages.go:155
|
||||
#: messages.go:163
|
||||
msgid "Registration disabled"
|
||||
msgstr "Регистрация отключена"
|
||||
|
||||
#: messages.go:164
|
||||
msgid "Verified email required"
|
||||
msgstr "Требуется подтверждение адреса электронной почты."
|
||||
|
||||
#: messages.go:167
|
||||
msgid "Changes successfully saved"
|
||||
msgstr "Изменения сохранены"
|
||||
|
||||
#: messages.go:156
|
||||
#: messages.go:168
|
||||
msgid "Album created"
|
||||
msgstr "Альбом создан"
|
||||
|
||||
#: messages.go:157
|
||||
#: messages.go:169
|
||||
msgid "Album saved"
|
||||
msgstr "\\альбом сохранен"
|
||||
|
||||
#: messages.go:158
|
||||
#: messages.go:170
|
||||
#, c-format
|
||||
msgid "Album %s deleted"
|
||||
msgstr "Альбом %s удален"
|
||||
|
||||
#: messages.go:159
|
||||
#: messages.go:171
|
||||
msgid "Album contents cloned"
|
||||
msgstr "Содержимое альбома скоприровано"
|
||||
|
||||
#: messages.go:160
|
||||
#: messages.go:172
|
||||
msgid "File removed from stack"
|
||||
msgstr "Файл удален из очереди"
|
||||
|
||||
#: messages.go:161
|
||||
#: messages.go:173
|
||||
msgid "File deleted"
|
||||
msgstr "Файл удалён"
|
||||
|
||||
#: messages.go:162
|
||||
#: messages.go:174
|
||||
#, c-format
|
||||
msgid "Selection added to %s"
|
||||
msgstr "Выделение добавлено к %s"
|
||||
|
||||
#: messages.go:163
|
||||
#: messages.go:175
|
||||
#, c-format
|
||||
msgid "One entry added to %s"
|
||||
msgstr "Один элемент добавлен к %s"
|
||||
|
||||
#: messages.go:164
|
||||
#: messages.go:176
|
||||
#, c-format
|
||||
msgid "%d entries added to %s"
|
||||
msgstr "%d элементов добавлено к %s"
|
||||
|
||||
#: messages.go:165
|
||||
#: messages.go:177
|
||||
#, c-format
|
||||
msgid "One entry removed from %s"
|
||||
msgstr "Один элемент удален из %s"
|
||||
|
||||
#: messages.go:166
|
||||
#: messages.go:178
|
||||
#, c-format
|
||||
msgid "%d entries removed from %s"
|
||||
msgstr "%d элементов удалено из %s"
|
||||
|
||||
#: messages.go:167
|
||||
#: messages.go:179
|
||||
msgid "Account created"
|
||||
msgstr "Учетная запись создана"
|
||||
|
||||
#: messages.go:168
|
||||
#: messages.go:180
|
||||
msgid "Account saved"
|
||||
msgstr "Учетная запись сохранена"
|
||||
|
||||
#: messages.go:169
|
||||
#: messages.go:181
|
||||
msgid "Account deleted"
|
||||
msgstr "Учетная запись удалена"
|
||||
|
||||
#: messages.go:170
|
||||
#: messages.go:182
|
||||
msgid "Settings saved"
|
||||
msgstr "Настройки сохранены"
|
||||
|
||||
#: messages.go:171
|
||||
#: messages.go:183
|
||||
msgid "Password changed"
|
||||
msgstr "Пароль изменен"
|
||||
|
||||
#: messages.go:172
|
||||
#: messages.go:184
|
||||
#, c-format
|
||||
msgid "Import completed in %d s"
|
||||
msgstr "Импортирование завершено за %d c"
|
||||
|
||||
#: messages.go:173
|
||||
#: messages.go:185
|
||||
msgid "Import canceled"
|
||||
msgstr "Импортирование отменено"
|
||||
|
||||
#: messages.go:174
|
||||
#: messages.go:186
|
||||
#, c-format
|
||||
msgid "Indexing completed in %d s"
|
||||
msgstr "Индексирование завершено за %d с"
|
||||
|
||||
#: messages.go:175
|
||||
#: messages.go:187
|
||||
msgid "Indexing originals..."
|
||||
msgstr "Индексирование Оригиналов..."
|
||||
|
||||
#: messages.go:176
|
||||
#: messages.go:188
|
||||
#, c-format
|
||||
msgid "Indexing files in %s"
|
||||
msgstr "Индексирование файлов в %s"
|
||||
|
||||
#: messages.go:177
|
||||
#: messages.go:189
|
||||
msgid "Indexing canceled"
|
||||
msgstr "Индексирование отменено"
|
||||
|
||||
#: messages.go:178
|
||||
#: messages.go:190
|
||||
#, c-format
|
||||
msgid "Removed %d files and %d photos"
|
||||
msgstr "Удаление %d файлов и %d фотографий"
|
||||
|
||||
#: messages.go:179
|
||||
#: messages.go:191
|
||||
#, c-format
|
||||
msgid "Moving files from %s"
|
||||
msgstr "Перемещение файлов из %s"
|
||||
|
||||
#: messages.go:180
|
||||
#: messages.go:192
|
||||
#, c-format
|
||||
msgid "Copying files from %s"
|
||||
msgstr "Копирование файлов из %s"
|
||||
|
||||
#: messages.go:181
|
||||
#: messages.go:193
|
||||
msgid "Labels deleted"
|
||||
msgstr "Метки удалены"
|
||||
|
||||
#: messages.go:182
|
||||
#: messages.go:194
|
||||
msgid "Label saved"
|
||||
msgstr "Метки сохранены"
|
||||
|
||||
#: messages.go:183
|
||||
#: messages.go:195
|
||||
msgid "Subject saved"
|
||||
msgstr "Тема сохранена"
|
||||
|
||||
#: messages.go:184
|
||||
#: messages.go:196
|
||||
msgid "Subject deleted"
|
||||
msgstr "Тема удалена"
|
||||
|
||||
#: messages.go:185
|
||||
#: messages.go:197
|
||||
msgid "Person saved"
|
||||
msgstr "Человек спасен"
|
||||
|
||||
#: messages.go:186
|
||||
#: messages.go:198
|
||||
msgid "Person deleted"
|
||||
msgstr "Лицо удалено"
|
||||
|
||||
#: messages.go:187
|
||||
#: messages.go:199
|
||||
msgid "File uploaded"
|
||||
msgstr "Файл загружен"
|
||||
|
||||
#: messages.go:188
|
||||
#: messages.go:200
|
||||
#, c-format
|
||||
msgid "%d files uploaded in %d s"
|
||||
msgstr "%d файлов загружено за %d с"
|
||||
|
||||
#: messages.go:189
|
||||
#: messages.go:201
|
||||
msgid "Processing upload..."
|
||||
msgstr "Обработка загрузки..."
|
||||
|
||||
#: messages.go:190
|
||||
#: messages.go:202
|
||||
msgid "Upload has been processed"
|
||||
msgstr "Загрузка была обработана"
|
||||
|
||||
#: messages.go:191
|
||||
#: messages.go:203
|
||||
msgid "Selection approved"
|
||||
msgstr "Утвержденный выбор"
|
||||
|
||||
#: messages.go:192
|
||||
#: messages.go:204
|
||||
msgid "Selection archived"
|
||||
msgstr "Выбранное помещено в архив"
|
||||
|
||||
#: messages.go:193
|
||||
#: messages.go:205
|
||||
msgid "Selection restored"
|
||||
msgstr "Выбранное восстановлено"
|
||||
|
||||
#: messages.go:194
|
||||
#: messages.go:206
|
||||
msgid "Selection marked as private"
|
||||
msgstr "Выбранное помечено как приватное"
|
||||
|
||||
#: messages.go:195
|
||||
#: messages.go:207
|
||||
msgid "Albums deleted"
|
||||
msgstr "Альбом удален"
|
||||
|
||||
#: messages.go:196
|
||||
#: messages.go:208
|
||||
#, c-format
|
||||
msgid "Zip created in %d s"
|
||||
msgstr "Zip архив создан за %d с"
|
||||
|
||||
#: messages.go:197
|
||||
#: messages.go:209
|
||||
msgid "Permanently deleted"
|
||||
msgstr "Постоянно удаляется"
|
||||
|
||||
#: messages.go:198
|
||||
#: messages.go:210
|
||||
#, c-format
|
||||
msgid "%s has been restored"
|
||||
msgstr "%s был восстановлен"
|
||||
|
||||
#: messages.go:199
|
||||
#: messages.go:211
|
||||
msgid "Successfully verified"
|
||||
msgstr "Успешно проверено"
|
||||
|
||||
#: messages.go:200
|
||||
#: messages.go:212
|
||||
msgid "Successfully activated"
|
||||
msgstr "Успешно активировано"
|
||||
|
||||
|
|
|
|||
|
|
@ -2,9 +2,10 @@ msgid ""
|
|||
msgstr ""
|
||||
"Project-Id-Version: PACKAGE VERSION\n"
|
||||
"Report-Msgid-Bugs-To: \n"
|
||||
"POT-Creation-Date: 2025-10-17 17:32+0000\n"
|
||||
"PO-Revision-Date: 2025-10-22 08:25+0000\n"
|
||||
"Last-Translator: DeepL <noreply-mt-deepl@weblate.org>\n"
|
||||
"POT-Creation-Date: 2026-06-27 09:13+0000\n"
|
||||
"PO-Revision-Date: 2026-06-27 10:28+0000\n"
|
||||
"Last-Translator: Google Cloud Translation Basic <noreply-mt-google-"
|
||||
"translate@weblate.org>\n"
|
||||
"Language-Team: Slovak <https://translate.photoprism.app/projects/photoprism/"
|
||||
"backend/sk/>\n"
|
||||
"Language: sk\n"
|
||||
|
|
@ -12,402 +13,418 @@ msgstr ""
|
|||
"Content-Type: text/plain; charset=UTF-8\n"
|
||||
"Content-Transfer-Encoding: 8bit\n"
|
||||
"Plural-Forms: nplurals=3; plural=(n==1) ? 0 : (n>=2 && n<=4) ? 1 : 2;\n"
|
||||
"X-Generator: Weblate 5.13.3\n"
|
||||
"X-Generator: Weblate 2026.5\n"
|
||||
|
||||
#: messages.go:104
|
||||
#: messages.go:112
|
||||
msgid "Something went wrong, try again"
|
||||
msgstr "Niečo sa pokazilo, skúste to znova"
|
||||
|
||||
#: messages.go:105
|
||||
#: messages.go:113
|
||||
msgid "Unable to do that"
|
||||
msgstr "Nemožno to urobiť"
|
||||
|
||||
#: messages.go:106
|
||||
#: messages.go:114
|
||||
msgid "Changes could not be saved"
|
||||
msgstr "Zmeny sa neuložili"
|
||||
|
||||
#: messages.go:107
|
||||
#: messages.go:115
|
||||
msgid "Could not be deleted"
|
||||
msgstr "Nepodarilo sa odstrániť"
|
||||
|
||||
#: messages.go:108
|
||||
#: messages.go:116
|
||||
#, c-format
|
||||
msgid "%s already exists"
|
||||
msgstr "%s už existuje"
|
||||
|
||||
#: messages.go:109
|
||||
#: messages.go:117
|
||||
msgid "Not found"
|
||||
msgstr "Nenájdené"
|
||||
|
||||
#: messages.go:110
|
||||
#: messages.go:118
|
||||
msgid "File not found"
|
||||
msgstr "Súbor nenájdený"
|
||||
|
||||
#: messages.go:111
|
||||
#: messages.go:119
|
||||
msgid "File too large"
|
||||
msgstr "Príliš veľký súbor"
|
||||
|
||||
#: messages.go:112
|
||||
#: messages.go:120
|
||||
msgid "Unsupported"
|
||||
msgstr "Nepodporované"
|
||||
|
||||
#: messages.go:113
|
||||
#: messages.go:121
|
||||
msgid "Unsupported type"
|
||||
msgstr "Nepodporovaný typ"
|
||||
|
||||
#: messages.go:114
|
||||
#: messages.go:122
|
||||
msgid "Unsupported format"
|
||||
msgstr "Nepodporovaný formát"
|
||||
|
||||
#: messages.go:115
|
||||
#: messages.go:123
|
||||
msgid "Originals folder is empty"
|
||||
msgstr "Priečinok Originály je prázdny"
|
||||
|
||||
#: messages.go:116
|
||||
#: messages.go:124
|
||||
msgid "Selection not found"
|
||||
msgstr "Výber nenájdený"
|
||||
|
||||
#: messages.go:117
|
||||
#: messages.go:125
|
||||
msgid "Entity not found"
|
||||
msgstr "Subjekt nenájdený"
|
||||
|
||||
#: messages.go:118
|
||||
#: messages.go:126
|
||||
msgid "Account not found"
|
||||
msgstr "Účet nenájdený"
|
||||
|
||||
#: messages.go:119
|
||||
#: messages.go:127
|
||||
msgid "User not found"
|
||||
msgstr "Užívateľ nenájdený"
|
||||
|
||||
#: messages.go:120
|
||||
#: messages.go:128
|
||||
msgid "Label not found"
|
||||
msgstr "Štítok nenájdený"
|
||||
|
||||
#: messages.go:121
|
||||
#: messages.go:129
|
||||
msgid "Camera not found"
|
||||
msgstr "Fotoaparát nebol nájdený"
|
||||
|
||||
#: messages.go:130
|
||||
msgid "Lens not found"
|
||||
msgstr "Objektív nebol nájdený"
|
||||
|
||||
#: messages.go:131
|
||||
msgid "Album not found"
|
||||
msgstr "Album nenájdený"
|
||||
|
||||
#: messages.go:122
|
||||
#: messages.go:132
|
||||
msgid "Subject not found"
|
||||
msgstr "Predmet nenájdený"
|
||||
|
||||
#: messages.go:123
|
||||
#: messages.go:133
|
||||
msgid "Person not found"
|
||||
msgstr "Osoba nenájdená"
|
||||
|
||||
#: messages.go:124
|
||||
#: messages.go:134
|
||||
msgid "Face not found"
|
||||
msgstr "Tvár nenájdená"
|
||||
|
||||
#: messages.go:125
|
||||
#: messages.go:135
|
||||
msgid "Not available in public mode"
|
||||
msgstr "Nedostupné vo verejnom móde"
|
||||
|
||||
#: messages.go:126
|
||||
#: messages.go:136
|
||||
msgid "Not available in read-only mode"
|
||||
msgstr "nedostupné v móde len pre čítanie"
|
||||
|
||||
#: messages.go:127
|
||||
#: messages.go:137
|
||||
msgid "Please log in to your account"
|
||||
msgstr "Prosím prihláste sa a skúste znova"
|
||||
|
||||
#: messages.go:128
|
||||
#: messages.go:138
|
||||
msgid "Permission denied"
|
||||
msgstr "Osoba odstránená"
|
||||
|
||||
#: messages.go:129
|
||||
#: messages.go:139
|
||||
msgid "Payment required"
|
||||
msgstr "Požadovaná platba"
|
||||
|
||||
#: messages.go:130
|
||||
#: messages.go:140
|
||||
msgid "Upload might be offensive"
|
||||
msgstr "Nahrané súbory môžu byť urážlivé"
|
||||
|
||||
#: messages.go:131
|
||||
#: messages.go:141
|
||||
msgid "Upload failed"
|
||||
msgstr "Odovzdávanie zlyhalo"
|
||||
|
||||
#: messages.go:132
|
||||
#: messages.go:142
|
||||
msgid "No items selected"
|
||||
msgstr "Neboli vybraté žiadne položky"
|
||||
|
||||
#: messages.go:133
|
||||
#: messages.go:143
|
||||
msgid "Failed creating file, please check permissions"
|
||||
msgstr "Vytváranie súboru zlyhalo, prosím skontrolujte oprávnenia"
|
||||
|
||||
#: messages.go:134
|
||||
#: messages.go:144
|
||||
msgid "Failed creating folder, please check permissions"
|
||||
msgstr "Vytváranie zložky zlyhalo, prosím skontrolujte oprávnenia"
|
||||
|
||||
#: messages.go:135
|
||||
#: messages.go:145
|
||||
msgid "Could not connect, please try again"
|
||||
msgstr "Nebolo možné sa pripojiť, skúste to znova"
|
||||
|
||||
#: messages.go:136
|
||||
#: messages.go:146
|
||||
msgid "Enter verification code"
|
||||
msgstr "Zadajte overovací kód"
|
||||
|
||||
#: messages.go:137
|
||||
#: messages.go:147
|
||||
msgid "Invalid verification code, please try again"
|
||||
msgstr "Neplatný overovací kód, skúste to znova"
|
||||
|
||||
#: messages.go:138
|
||||
#: messages.go:148
|
||||
msgid "Invalid password, please try again"
|
||||
msgstr "Nesprávne heslo, skúste to znova"
|
||||
|
||||
#: messages.go:139
|
||||
#: messages.go:149
|
||||
msgid "Feature disabled"
|
||||
msgstr "Funkcia vypnutá"
|
||||
|
||||
#: messages.go:140
|
||||
#: messages.go:150
|
||||
msgid "No labels selected"
|
||||
msgstr "Neboli vybraté žiadne štítky"
|
||||
|
||||
#: messages.go:141
|
||||
#: messages.go:151
|
||||
msgid "No albums selected"
|
||||
msgstr "Neboli vybraté žiadne albumy"
|
||||
|
||||
#: messages.go:142
|
||||
#: messages.go:152
|
||||
msgid "No files available for download"
|
||||
msgstr "Žiadne súbory na stiahnutie k dispozícií"
|
||||
|
||||
#: messages.go:143
|
||||
#: messages.go:153
|
||||
msgid "Failed to create zip file"
|
||||
msgstr "Nebolo možné vytvoriť súbor ZIP"
|
||||
|
||||
#: messages.go:144
|
||||
#: messages.go:154
|
||||
msgid "Invalid credentials"
|
||||
msgstr "Neplatné údaje"
|
||||
|
||||
#: messages.go:145
|
||||
#: messages.go:155
|
||||
msgid "Invalid link"
|
||||
msgstr "Neplatný odkaz"
|
||||
|
||||
#: messages.go:146
|
||||
#: messages.go:156
|
||||
msgid "Invalid name"
|
||||
msgstr "Neplatné meno"
|
||||
|
||||
#: messages.go:147
|
||||
#: messages.go:157
|
||||
msgid "Busy, please try again later"
|
||||
msgstr "Systém zaneprázdnený, prosím skúste znovu neskôr"
|
||||
|
||||
#: messages.go:148
|
||||
#: messages.go:158
|
||||
#, c-format
|
||||
msgid "The wakeup interval is %s, but must be 1h or less"
|
||||
msgstr "Interval prebúdzania je %s, ale musí byť najviac 1 h"
|
||||
|
||||
#: messages.go:149
|
||||
#: messages.go:159
|
||||
msgid "Your account could not be connected"
|
||||
msgstr "Vaše konto sa nepodarilo pripojiť"
|
||||
|
||||
#: messages.go:150
|
||||
#: messages.go:160
|
||||
msgid "Too many requests"
|
||||
msgstr "Príliš veľa požiadaviek"
|
||||
|
||||
#: messages.go:151
|
||||
#: messages.go:161
|
||||
msgid "Insufficient storage"
|
||||
msgstr "Nedostatočné skladovanie"
|
||||
|
||||
#: messages.go:152
|
||||
#: messages.go:162
|
||||
msgid "Quota exceeded"
|
||||
msgstr "Prekročenie kvóty"
|
||||
|
||||
#: messages.go:155
|
||||
#: messages.go:163
|
||||
msgid "Registration disabled"
|
||||
msgstr "Registrácia zakázaná"
|
||||
|
||||
#: messages.go:164
|
||||
msgid "Verified email required"
|
||||
msgstr "Vyžaduje sa overený e-mail"
|
||||
|
||||
#: messages.go:167
|
||||
msgid "Changes successfully saved"
|
||||
msgstr "Zmeny úspešne uložené"
|
||||
|
||||
#: messages.go:156
|
||||
#: messages.go:168
|
||||
msgid "Album created"
|
||||
msgstr "Album vytvorený"
|
||||
|
||||
#: messages.go:157
|
||||
#: messages.go:169
|
||||
msgid "Album saved"
|
||||
msgstr "Album uložený"
|
||||
|
||||
#: messages.go:158
|
||||
#: messages.go:170
|
||||
#, c-format
|
||||
msgid "Album %s deleted"
|
||||
msgstr "Album %s vymazaný"
|
||||
|
||||
#: messages.go:159
|
||||
#: messages.go:171
|
||||
msgid "Album contents cloned"
|
||||
msgstr "Obsah albumu prekopírovaný"
|
||||
|
||||
#: messages.go:160
|
||||
#: messages.go:172
|
||||
msgid "File removed from stack"
|
||||
msgstr "Súbor odstránený zo stohu"
|
||||
|
||||
#: messages.go:161
|
||||
#: messages.go:173
|
||||
msgid "File deleted"
|
||||
msgstr "Súbor odstránený"
|
||||
|
||||
#: messages.go:162
|
||||
#: messages.go:174
|
||||
#, c-format
|
||||
msgid "Selection added to %s"
|
||||
msgstr "Výber pridaný do %s"
|
||||
|
||||
#: messages.go:163
|
||||
#: messages.go:175
|
||||
#, c-format
|
||||
msgid "One entry added to %s"
|
||||
msgstr "Jeden záznam pridaný do %s"
|
||||
|
||||
#: messages.go:164
|
||||
#: messages.go:176
|
||||
#, c-format
|
||||
msgid "%d entries added to %s"
|
||||
msgstr "%d záznamov pridaných do %s"
|
||||
|
||||
#: messages.go:165
|
||||
#: messages.go:177
|
||||
#, c-format
|
||||
msgid "One entry removed from %s"
|
||||
msgstr "Jeden záznam odstránený z %s"
|
||||
|
||||
#: messages.go:166
|
||||
#: messages.go:178
|
||||
#, c-format
|
||||
msgid "%d entries removed from %s"
|
||||
msgstr "%d záznamov odstránených z %s"
|
||||
|
||||
#: messages.go:167
|
||||
#: messages.go:179
|
||||
msgid "Account created"
|
||||
msgstr "Účet vytvorený"
|
||||
|
||||
#: messages.go:168
|
||||
#: messages.go:180
|
||||
msgid "Account saved"
|
||||
msgstr "Účet uložený"
|
||||
|
||||
#: messages.go:169
|
||||
#: messages.go:181
|
||||
msgid "Account deleted"
|
||||
msgstr "Účet odstránený"
|
||||
|
||||
#: messages.go:170
|
||||
#: messages.go:182
|
||||
msgid "Settings saved"
|
||||
msgstr "Nastavenia uložené"
|
||||
|
||||
#: messages.go:171
|
||||
#: messages.go:183
|
||||
msgid "Password changed"
|
||||
msgstr "Heslo zmenené"
|
||||
|
||||
#: messages.go:172
|
||||
#: messages.go:184
|
||||
#, c-format
|
||||
msgid "Import completed in %d s"
|
||||
msgstr "Import hotový za %d sekúnd"
|
||||
|
||||
#: messages.go:173
|
||||
#: messages.go:185
|
||||
msgid "Import canceled"
|
||||
msgstr "Import zrušený"
|
||||
|
||||
#: messages.go:174
|
||||
#: messages.go:186
|
||||
#, c-format
|
||||
msgid "Indexing completed in %d s"
|
||||
msgstr "Indexovanie hotové za %d sekúnd"
|
||||
|
||||
#: messages.go:175
|
||||
#: messages.go:187
|
||||
msgid "Indexing originals..."
|
||||
msgstr "Indexovanie originálov..."
|
||||
|
||||
#: messages.go:176
|
||||
#: messages.go:188
|
||||
#, c-format
|
||||
msgid "Indexing files in %s"
|
||||
msgstr "Indexovanie súborov v %s"
|
||||
|
||||
#: messages.go:177
|
||||
#: messages.go:189
|
||||
msgid "Indexing canceled"
|
||||
msgstr "Indexovanie zrušené"
|
||||
|
||||
#: messages.go:178
|
||||
#: messages.go:190
|
||||
#, c-format
|
||||
msgid "Removed %d files and %d photos"
|
||||
msgstr "Bolo odstránených %d súborov a %d fotiek"
|
||||
|
||||
#: messages.go:179
|
||||
#: messages.go:191
|
||||
#, c-format
|
||||
msgid "Moving files from %s"
|
||||
msgstr "Presúvanie súborov z %s"
|
||||
|
||||
#: messages.go:180
|
||||
#: messages.go:192
|
||||
#, c-format
|
||||
msgid "Copying files from %s"
|
||||
msgstr "Kopírovanie súborov z %s"
|
||||
|
||||
#: messages.go:181
|
||||
#: messages.go:193
|
||||
msgid "Labels deleted"
|
||||
msgstr "Štítky odstránené"
|
||||
|
||||
#: messages.go:182
|
||||
#: messages.go:194
|
||||
msgid "Label saved"
|
||||
msgstr "Štítok uložený"
|
||||
|
||||
#: messages.go:183
|
||||
#: messages.go:195
|
||||
msgid "Subject saved"
|
||||
msgstr "Predmet uložený"
|
||||
|
||||
#: messages.go:184
|
||||
#: messages.go:196
|
||||
msgid "Subject deleted"
|
||||
msgstr "Predmet odstránený"
|
||||
|
||||
#: messages.go:185
|
||||
#: messages.go:197
|
||||
msgid "Person saved"
|
||||
msgstr "Osoba uložená"
|
||||
|
||||
#: messages.go:186
|
||||
#: messages.go:198
|
||||
msgid "Person deleted"
|
||||
msgstr "Osoba odstránená"
|
||||
|
||||
#: messages.go:187
|
||||
#: messages.go:199
|
||||
msgid "File uploaded"
|
||||
msgstr "Súbor odstránený"
|
||||
|
||||
#: messages.go:188
|
||||
#: messages.go:200
|
||||
#, c-format
|
||||
msgid "%d files uploaded in %d s"
|
||||
msgstr "%d súborov nahraných za %d sekúnd"
|
||||
|
||||
#: messages.go:189
|
||||
#: messages.go:201
|
||||
msgid "Processing upload..."
|
||||
msgstr "Spracovanie nahrávania..."
|
||||
|
||||
#: messages.go:190
|
||||
#: messages.go:202
|
||||
msgid "Upload has been processed"
|
||||
msgstr "Nahrané súbory môžu byť urážlivé"
|
||||
|
||||
#: messages.go:191
|
||||
#: messages.go:203
|
||||
msgid "Selection approved"
|
||||
msgstr "Označenie schválené"
|
||||
|
||||
#: messages.go:192
|
||||
#: messages.go:204
|
||||
msgid "Selection archived"
|
||||
msgstr "Označenie archivované"
|
||||
|
||||
#: messages.go:193
|
||||
#: messages.go:205
|
||||
msgid "Selection restored"
|
||||
msgstr "Označenie obnovené"
|
||||
|
||||
#: messages.go:194
|
||||
#: messages.go:206
|
||||
msgid "Selection marked as private"
|
||||
msgstr "Označenie označené ako súkromné"
|
||||
|
||||
#: messages.go:195
|
||||
#: messages.go:207
|
||||
msgid "Albums deleted"
|
||||
msgstr "Albumy odstránené"
|
||||
|
||||
#: messages.go:196
|
||||
#: messages.go:208
|
||||
#, c-format
|
||||
msgid "Zip created in %d s"
|
||||
msgstr "Súbor ZIP vytvorený za %d sekúnd"
|
||||
|
||||
#: messages.go:197
|
||||
#: messages.go:209
|
||||
msgid "Permanently deleted"
|
||||
msgstr "Trvalo odstránené"
|
||||
|
||||
#: messages.go:198
|
||||
#: messages.go:210
|
||||
#, c-format
|
||||
msgid "%s has been restored"
|
||||
msgstr "%s bolo obnovené"
|
||||
|
||||
#: messages.go:199
|
||||
#: messages.go:211
|
||||
msgid "Successfully verified"
|
||||
msgstr "Úspešne overené"
|
||||
|
||||
#: messages.go:200
|
||||
#: messages.go:212
|
||||
msgid "Successfully activated"
|
||||
msgstr "Úspešne aktivované"
|
||||
|
||||
|
|
|
|||
|
|
@ -2,9 +2,10 @@ msgid ""
|
|||
msgstr ""
|
||||
"Project-Id-Version: \n"
|
||||
"Report-Msgid-Bugs-To: \n"
|
||||
"POT-Creation-Date: 2025-10-17 17:32+0000\n"
|
||||
"PO-Revision-Date: 2025-10-22 08:25+0000\n"
|
||||
"Last-Translator: DeepL <noreply-mt-deepl@weblate.org>\n"
|
||||
"POT-Creation-Date: 2026-06-27 09:13+0000\n"
|
||||
"PO-Revision-Date: 2026-06-27 10:28+0000\n"
|
||||
"Last-Translator: Google Cloud Translation Basic <noreply-mt-google-"
|
||||
"translate@weblate.org>\n"
|
||||
"Language-Team: none\n"
|
||||
"Language: sl\n"
|
||||
"MIME-Version: 1.0\n"
|
||||
|
|
@ -12,402 +13,418 @@ msgstr ""
|
|||
"Content-Transfer-Encoding: 8bit\n"
|
||||
"Plural-Forms: nplurals=4; plural=n%100==1 ? 0 : n%100==2 ? 1 : n%100==3 || "
|
||||
"n%100==4 ? 2 : 3;\n"
|
||||
"X-Generator: Weblate 5.13.3\n"
|
||||
"X-Generator: Weblate 2026.5\n"
|
||||
|
||||
#: messages.go:104
|
||||
#: messages.go:112
|
||||
msgid "Something went wrong, try again"
|
||||
msgstr "Nekaj je šlo narobe, poskusite znova"
|
||||
|
||||
#: messages.go:105
|
||||
#: messages.go:113
|
||||
msgid "Unable to do that"
|
||||
msgstr "Tega ni mogoče storiti"
|
||||
|
||||
#: messages.go:106
|
||||
#: messages.go:114
|
||||
msgid "Changes could not be saved"
|
||||
msgstr "Sprememb ni bilo mogoče shraniti"
|
||||
|
||||
#: messages.go:107
|
||||
#: messages.go:115
|
||||
msgid "Could not be deleted"
|
||||
msgstr "Ni bilo mogoče izbrisati"
|
||||
|
||||
#: messages.go:108
|
||||
#: messages.go:116
|
||||
#, c-format
|
||||
msgid "%s already exists"
|
||||
msgstr "%s že obstaja"
|
||||
|
||||
#: messages.go:109
|
||||
#: messages.go:117
|
||||
msgid "Not found"
|
||||
msgstr "Ga ni mogoče najti"
|
||||
|
||||
#: messages.go:110
|
||||
#: messages.go:118
|
||||
msgid "File not found"
|
||||
msgstr "Datoteka ni najdena"
|
||||
|
||||
#: messages.go:111
|
||||
#: messages.go:119
|
||||
msgid "File too large"
|
||||
msgstr "Prevelika datoteka"
|
||||
|
||||
#: messages.go:112
|
||||
#: messages.go:120
|
||||
msgid "Unsupported"
|
||||
msgstr "Nepodprto"
|
||||
|
||||
#: messages.go:113
|
||||
#: messages.go:121
|
||||
msgid "Unsupported type"
|
||||
msgstr "Nepodprta vrsta"
|
||||
|
||||
#: messages.go:114
|
||||
#: messages.go:122
|
||||
msgid "Unsupported format"
|
||||
msgstr "Nepodprt format"
|
||||
|
||||
#: messages.go:115
|
||||
#: messages.go:123
|
||||
msgid "Originals folder is empty"
|
||||
msgstr "Mapa Originali je prazna"
|
||||
|
||||
#: messages.go:116
|
||||
#: messages.go:124
|
||||
msgid "Selection not found"
|
||||
msgstr "Izbor ni najden"
|
||||
|
||||
#: messages.go:117
|
||||
#: messages.go:125
|
||||
msgid "Entity not found"
|
||||
msgstr "Entiteta ni bila najdena"
|
||||
|
||||
#: messages.go:118
|
||||
#: messages.go:126
|
||||
msgid "Account not found"
|
||||
msgstr "Račun ni najden"
|
||||
|
||||
#: messages.go:119
|
||||
#: messages.go:127
|
||||
msgid "User not found"
|
||||
msgstr "Uporabnik ne obstaja"
|
||||
|
||||
#: messages.go:120
|
||||
#: messages.go:128
|
||||
msgid "Label not found"
|
||||
msgstr "Oznaka ni bila najdena"
|
||||
|
||||
#: messages.go:121
|
||||
#: messages.go:129
|
||||
msgid "Camera not found"
|
||||
msgstr "Kamera ni bila najdena"
|
||||
|
||||
#: messages.go:130
|
||||
msgid "Lens not found"
|
||||
msgstr "Objektiv ni bil najden"
|
||||
|
||||
#: messages.go:131
|
||||
msgid "Album not found"
|
||||
msgstr "Album ni najden"
|
||||
|
||||
#: messages.go:122
|
||||
#: messages.go:132
|
||||
msgid "Subject not found"
|
||||
msgstr "Zadeva ni bila najdena"
|
||||
|
||||
#: messages.go:123
|
||||
#: messages.go:133
|
||||
msgid "Person not found"
|
||||
msgstr "Oseba ni bila najdena"
|
||||
|
||||
#: messages.go:124
|
||||
#: messages.go:134
|
||||
msgid "Face not found"
|
||||
msgstr "Obraza ni mogoče najti"
|
||||
|
||||
#: messages.go:125
|
||||
#: messages.go:135
|
||||
msgid "Not available in public mode"
|
||||
msgstr "Ni na voljo v javnem načinu"
|
||||
|
||||
#: messages.go:126
|
||||
#: messages.go:136
|
||||
msgid "Not available in read-only mode"
|
||||
msgstr "Ni na voljo v načinu samo za branje"
|
||||
|
||||
#: messages.go:127
|
||||
#: messages.go:137
|
||||
msgid "Please log in to your account"
|
||||
msgstr "Prijavite se v svoj račun"
|
||||
|
||||
#: messages.go:128
|
||||
#: messages.go:138
|
||||
msgid "Permission denied"
|
||||
msgstr "Dovoljenje Zavrnjeno"
|
||||
|
||||
#: messages.go:129
|
||||
#: messages.go:139
|
||||
msgid "Payment required"
|
||||
msgstr "Zahtevano plačilo"
|
||||
|
||||
#: messages.go:130
|
||||
#: messages.go:140
|
||||
msgid "Upload might be offensive"
|
||||
msgstr "Nalaganje je lahko žaljivo"
|
||||
|
||||
#: messages.go:131
|
||||
#: messages.go:141
|
||||
msgid "Upload failed"
|
||||
msgstr "Nalaganje neuspešno"
|
||||
|
||||
#: messages.go:132
|
||||
#: messages.go:142
|
||||
msgid "No items selected"
|
||||
msgstr "Ni izbranih elementov"
|
||||
|
||||
#: messages.go:133
|
||||
#: messages.go:143
|
||||
msgid "Failed creating file, please check permissions"
|
||||
msgstr "Neuspešno ustvarjanje datoteke, preverite dovoljenja"
|
||||
|
||||
#: messages.go:134
|
||||
#: messages.go:144
|
||||
msgid "Failed creating folder, please check permissions"
|
||||
msgstr "Neuspešno ustvarjanje mape, preverite dovoljenja"
|
||||
|
||||
#: messages.go:135
|
||||
#: messages.go:145
|
||||
msgid "Could not connect, please try again"
|
||||
msgstr "Ne morem vzpostaviti povezave, poskusite znova"
|
||||
|
||||
#: messages.go:136
|
||||
#: messages.go:146
|
||||
msgid "Enter verification code"
|
||||
msgstr "vnesi potrditveno kodo"
|
||||
|
||||
#: messages.go:137
|
||||
#: messages.go:147
|
||||
msgid "Invalid verification code, please try again"
|
||||
msgstr "Neveljavna koda za preverjanje, poskusite znova"
|
||||
|
||||
#: messages.go:138
|
||||
#: messages.go:148
|
||||
msgid "Invalid password, please try again"
|
||||
msgstr "Nepravilno geslo, poskusite znova"
|
||||
|
||||
#: messages.go:139
|
||||
#: messages.go:149
|
||||
msgid "Feature disabled"
|
||||
msgstr "Funkcija je onemogočena"
|
||||
|
||||
#: messages.go:140
|
||||
#: messages.go:150
|
||||
msgid "No labels selected"
|
||||
msgstr "Ni izbranih nalepk"
|
||||
|
||||
#: messages.go:141
|
||||
#: messages.go:151
|
||||
msgid "No albums selected"
|
||||
msgstr "Ni izbranih albumov"
|
||||
|
||||
#: messages.go:142
|
||||
#: messages.go:152
|
||||
msgid "No files available for download"
|
||||
msgstr "Za prenos ni na voljo nobenih datotek"
|
||||
|
||||
#: messages.go:143
|
||||
#: messages.go:153
|
||||
msgid "Failed to create zip file"
|
||||
msgstr "Ni uspelo ustvariti datoteke zip"
|
||||
|
||||
#: messages.go:144
|
||||
#: messages.go:154
|
||||
msgid "Invalid credentials"
|
||||
msgstr "Neveljavne poverilnice"
|
||||
|
||||
#: messages.go:145
|
||||
#: messages.go:155
|
||||
msgid "Invalid link"
|
||||
msgstr "Neveljavna povezava"
|
||||
|
||||
#: messages.go:146
|
||||
#: messages.go:156
|
||||
msgid "Invalid name"
|
||||
msgstr "Neveljavno ime"
|
||||
|
||||
#: messages.go:147
|
||||
#: messages.go:157
|
||||
msgid "Busy, please try again later"
|
||||
msgstr "Zaseden, poskusite znova pozneje"
|
||||
|
||||
#: messages.go:148
|
||||
#: messages.go:158
|
||||
#, c-format
|
||||
msgid "The wakeup interval is %s, but must be 1h or less"
|
||||
msgstr "Interval prebujanja je %s, vendar mora biti 1h ali manj"
|
||||
|
||||
#: messages.go:149
|
||||
#: messages.go:159
|
||||
msgid "Your account could not be connected"
|
||||
msgstr "Vašega računa ni bilo mogoče povezati"
|
||||
|
||||
#: messages.go:150
|
||||
#: messages.go:160
|
||||
msgid "Too many requests"
|
||||
msgstr "Preveč zahtev"
|
||||
|
||||
#: messages.go:151
|
||||
#: messages.go:161
|
||||
msgid "Insufficient storage"
|
||||
msgstr "Nezadostno skladiščenje"
|
||||
|
||||
#: messages.go:152
|
||||
#: messages.go:162
|
||||
msgid "Quota exceeded"
|
||||
msgstr "Kvota je presežena"
|
||||
|
||||
#: messages.go:155
|
||||
#: messages.go:163
|
||||
msgid "Registration disabled"
|
||||
msgstr "Registracija onemogočena"
|
||||
|
||||
#: messages.go:164
|
||||
msgid "Verified email required"
|
||||
msgstr "Zahtevan je potrjen e-poštni naslov"
|
||||
|
||||
#: messages.go:167
|
||||
msgid "Changes successfully saved"
|
||||
msgstr "Spremembe so bile uspešno shranjene"
|
||||
|
||||
#: messages.go:156
|
||||
#: messages.go:168
|
||||
msgid "Album created"
|
||||
msgstr "Ustvarjen album"
|
||||
|
||||
#: messages.go:157
|
||||
#: messages.go:169
|
||||
msgid "Album saved"
|
||||
msgstr "Shranjen album"
|
||||
|
||||
#: messages.go:158
|
||||
#: messages.go:170
|
||||
#, c-format
|
||||
msgid "Album %s deleted"
|
||||
msgstr "Album %s izbrisano"
|
||||
|
||||
#: messages.go:159
|
||||
#: messages.go:171
|
||||
msgid "Album contents cloned"
|
||||
msgstr "Vsebina albuma klonirana"
|
||||
|
||||
#: messages.go:160
|
||||
#: messages.go:172
|
||||
msgid "File removed from stack"
|
||||
msgstr "Datoteka odstranjena iz sklada"
|
||||
|
||||
#: messages.go:161
|
||||
#: messages.go:173
|
||||
msgid "File deleted"
|
||||
msgstr "Izbrisana datoteka"
|
||||
|
||||
#: messages.go:162
|
||||
#: messages.go:174
|
||||
#, c-format
|
||||
msgid "Selection added to %s"
|
||||
msgstr "Izbor dodan v %s"
|
||||
|
||||
#: messages.go:163
|
||||
#: messages.go:175
|
||||
#, c-format
|
||||
msgid "One entry added to %s"
|
||||
msgstr "En vnos dodan v %s"
|
||||
|
||||
#: messages.go:164
|
||||
#: messages.go:176
|
||||
#, c-format
|
||||
msgid "%d entries added to %s"
|
||||
msgstr "%d vnosi dodani v %s"
|
||||
|
||||
#: messages.go:165
|
||||
#: messages.go:177
|
||||
#, c-format
|
||||
msgid "One entry removed from %s"
|
||||
msgstr "En vnos odstranjen iz %s"
|
||||
|
||||
#: messages.go:166
|
||||
#: messages.go:178
|
||||
#, c-format
|
||||
msgid "%d entries removed from %s"
|
||||
msgstr "%d vnosi odstranjeni iz %s"
|
||||
|
||||
#: messages.go:167
|
||||
#: messages.go:179
|
||||
msgid "Account created"
|
||||
msgstr "Ustvarjen račun"
|
||||
|
||||
#: messages.go:168
|
||||
#: messages.go:180
|
||||
msgid "Account saved"
|
||||
msgstr "Shranjen račun"
|
||||
|
||||
#: messages.go:169
|
||||
#: messages.go:181
|
||||
msgid "Account deleted"
|
||||
msgstr "Račun je izbrisan"
|
||||
|
||||
#: messages.go:170
|
||||
#: messages.go:182
|
||||
msgid "Settings saved"
|
||||
msgstr "Nastavitve shranjene"
|
||||
|
||||
#: messages.go:171
|
||||
#: messages.go:183
|
||||
msgid "Password changed"
|
||||
msgstr "Geslo spremenjeno"
|
||||
|
||||
#: messages.go:172
|
||||
#: messages.go:184
|
||||
#, c-format
|
||||
msgid "Import completed in %d s"
|
||||
msgstr "Uvoz se zaključi v %d s"
|
||||
|
||||
#: messages.go:173
|
||||
#: messages.go:185
|
||||
msgid "Import canceled"
|
||||
msgstr "Uvoz preklican"
|
||||
|
||||
#: messages.go:174
|
||||
#: messages.go:186
|
||||
#, c-format
|
||||
msgid "Indexing completed in %d s"
|
||||
msgstr "Indeksiranje je končano v %d s"
|
||||
|
||||
#: messages.go:175
|
||||
#: messages.go:187
|
||||
msgid "Indexing originals..."
|
||||
msgstr "Indeksiranje izvirnikov..."
|
||||
|
||||
#: messages.go:176
|
||||
#: messages.go:188
|
||||
#, c-format
|
||||
msgid "Indexing files in %s"
|
||||
msgstr "Indeksiranje datotek v %s"
|
||||
|
||||
#: messages.go:177
|
||||
#: messages.go:189
|
||||
msgid "Indexing canceled"
|
||||
msgstr "Indeksiranje preklicano"
|
||||
|
||||
#: messages.go:178
|
||||
#: messages.go:190
|
||||
#, c-format
|
||||
msgid "Removed %d files and %d photos"
|
||||
msgstr "Odstranjene %d datoteke in %d fotografije"
|
||||
|
||||
#: messages.go:179
|
||||
#: messages.go:191
|
||||
#, c-format
|
||||
msgid "Moving files from %s"
|
||||
msgstr "Premikanje datotek iz %s"
|
||||
|
||||
#: messages.go:180
|
||||
#: messages.go:192
|
||||
#, c-format
|
||||
msgid "Copying files from %s"
|
||||
msgstr "Kopiranje datotek iz %s"
|
||||
|
||||
#: messages.go:181
|
||||
#: messages.go:193
|
||||
msgid "Labels deleted"
|
||||
msgstr "Etikete izbrisane"
|
||||
|
||||
#: messages.go:182
|
||||
#: messages.go:194
|
||||
msgid "Label saved"
|
||||
msgstr "Shranjena nalepka"
|
||||
|
||||
#: messages.go:183
|
||||
#: messages.go:195
|
||||
msgid "Subject saved"
|
||||
msgstr "Zadeva je shranjena"
|
||||
|
||||
#: messages.go:184
|
||||
#: messages.go:196
|
||||
msgid "Subject deleted"
|
||||
msgstr "Predmet izbrisanih"
|
||||
|
||||
#: messages.go:185
|
||||
#: messages.go:197
|
||||
msgid "Person saved"
|
||||
msgstr "Rešena oseba"
|
||||
|
||||
#: messages.go:186
|
||||
#: messages.go:198
|
||||
msgid "Person deleted"
|
||||
msgstr "Izbrisana oseba"
|
||||
|
||||
#: messages.go:187
|
||||
#: messages.go:199
|
||||
msgid "File uploaded"
|
||||
msgstr "Prenesena datoteka"
|
||||
|
||||
#: messages.go:188
|
||||
#: messages.go:200
|
||||
#, c-format
|
||||
msgid "%d files uploaded in %d s"
|
||||
msgstr "%d datoteke, naložene v %d s"
|
||||
|
||||
#: messages.go:189
|
||||
#: messages.go:201
|
||||
msgid "Processing upload..."
|
||||
msgstr "Obdelava nalaganja..."
|
||||
|
||||
#: messages.go:190
|
||||
#: messages.go:202
|
||||
msgid "Upload has been processed"
|
||||
msgstr "Prenos je bil obdelan"
|
||||
|
||||
#: messages.go:191
|
||||
#: messages.go:203
|
||||
msgid "Selection approved"
|
||||
msgstr "Odobren izbor"
|
||||
|
||||
#: messages.go:192
|
||||
#: messages.go:204
|
||||
msgid "Selection archived"
|
||||
msgstr "Arhiviran izbor"
|
||||
|
||||
#: messages.go:193
|
||||
#: messages.go:205
|
||||
msgid "Selection restored"
|
||||
msgstr "Obnovljen izbor"
|
||||
|
||||
#: messages.go:194
|
||||
#: messages.go:206
|
||||
msgid "Selection marked as private"
|
||||
msgstr "Izbor označen kot zasebni"
|
||||
|
||||
#: messages.go:195
|
||||
#: messages.go:207
|
||||
msgid "Albums deleted"
|
||||
msgstr "Izbrisani albumi"
|
||||
|
||||
#: messages.go:196
|
||||
#: messages.go:208
|
||||
#, c-format
|
||||
msgid "Zip created in %d s"
|
||||
msgstr "Zip, ustvarjen v %d s"
|
||||
|
||||
#: messages.go:197
|
||||
#: messages.go:209
|
||||
msgid "Permanently deleted"
|
||||
msgstr "Trajno izbrisano"
|
||||
|
||||
#: messages.go:198
|
||||
#: messages.go:210
|
||||
#, c-format
|
||||
msgid "%s has been restored"
|
||||
msgstr "%s je bil obnovljen"
|
||||
|
||||
#: messages.go:199
|
||||
#: messages.go:211
|
||||
msgid "Successfully verified"
|
||||
msgstr "Uspešno preverjeno"
|
||||
|
||||
#: messages.go:200
|
||||
#: messages.go:212
|
||||
msgid "Successfully activated"
|
||||
msgstr "Uspešno aktiviran"
|
||||
|
||||
|
|
|
|||
|
|
@ -2,9 +2,10 @@ msgid ""
|
|||
msgstr ""
|
||||
"Project-Id-Version: \n"
|
||||
"Report-Msgid-Bugs-To: \n"
|
||||
"POT-Creation-Date: 2025-10-17 17:32+0000\n"
|
||||
"PO-Revision-Date: 2025-10-22 08:25+0000\n"
|
||||
"Last-Translator: DeepL <noreply-mt-deepl@weblate.org>\n"
|
||||
"POT-Creation-Date: 2026-06-27 09:13+0000\n"
|
||||
"PO-Revision-Date: 2026-06-27 10:28+0000\n"
|
||||
"Last-Translator: Google Cloud Translation Basic <noreply-mt-google-"
|
||||
"translate@weblate.org>\n"
|
||||
"Language-Team: Swedish <https://translate.photoprism.app/projects/photoprism/"
|
||||
"backend/sv/>\n"
|
||||
"Language: sv\n"
|
||||
|
|
@ -12,402 +13,418 @@ msgstr ""
|
|||
"Content-Type: text/plain; charset=UTF-8\n"
|
||||
"Content-Transfer-Encoding: 8bit\n"
|
||||
"Plural-Forms: nplurals=2; plural=n != 1;\n"
|
||||
"X-Generator: Weblate 5.13.3\n"
|
||||
"X-Generator: Weblate 2026.5\n"
|
||||
|
||||
#: messages.go:104
|
||||
#: messages.go:112
|
||||
msgid "Something went wrong, try again"
|
||||
msgstr "Något gick fel, försök igen"
|
||||
|
||||
#: messages.go:105
|
||||
#: messages.go:113
|
||||
msgid "Unable to do that"
|
||||
msgstr "Det går inte att göra"
|
||||
|
||||
#: messages.go:106
|
||||
#: messages.go:114
|
||||
msgid "Changes could not be saved"
|
||||
msgstr "Ändringarna kunde inte sparas"
|
||||
|
||||
#: messages.go:107
|
||||
#: messages.go:115
|
||||
msgid "Could not be deleted"
|
||||
msgstr "Kunde inte raderas"
|
||||
|
||||
#: messages.go:108
|
||||
#: messages.go:116
|
||||
#, c-format
|
||||
msgid "%s already exists"
|
||||
msgstr "%s finns redan"
|
||||
|
||||
#: messages.go:109
|
||||
#: messages.go:117
|
||||
msgid "Not found"
|
||||
msgstr "Hittades inte"
|
||||
|
||||
#: messages.go:110
|
||||
#: messages.go:118
|
||||
msgid "File not found"
|
||||
msgstr "Filen kunde inte hittas"
|
||||
|
||||
#: messages.go:111
|
||||
#: messages.go:119
|
||||
msgid "File too large"
|
||||
msgstr "Filen är för stor"
|
||||
|
||||
#: messages.go:112
|
||||
#: messages.go:120
|
||||
msgid "Unsupported"
|
||||
msgstr "Stöds ej"
|
||||
|
||||
#: messages.go:113
|
||||
#: messages.go:121
|
||||
msgid "Unsupported type"
|
||||
msgstr "Denna typ stöds ej"
|
||||
|
||||
#: messages.go:114
|
||||
#: messages.go:122
|
||||
msgid "Unsupported format"
|
||||
msgstr "Format som inte stöds"
|
||||
|
||||
#: messages.go:115
|
||||
#: messages.go:123
|
||||
msgid "Originals folder is empty"
|
||||
msgstr "Mappen med originalen är tom"
|
||||
|
||||
#: messages.go:116
|
||||
#: messages.go:124
|
||||
msgid "Selection not found"
|
||||
msgstr "Urvalet kunde inte hittas"
|
||||
|
||||
#: messages.go:117
|
||||
#: messages.go:125
|
||||
msgid "Entity not found"
|
||||
msgstr "Entitet kunde inte hittas"
|
||||
|
||||
#: messages.go:118
|
||||
#: messages.go:126
|
||||
msgid "Account not found"
|
||||
msgstr "Kontot kunde inte hittas"
|
||||
|
||||
#: messages.go:119
|
||||
#: messages.go:127
|
||||
msgid "User not found"
|
||||
msgstr "Användaren kunde inte hittas"
|
||||
|
||||
#: messages.go:120
|
||||
#: messages.go:128
|
||||
msgid "Label not found"
|
||||
msgstr "Etikett saknas"
|
||||
|
||||
#: messages.go:121
|
||||
#: messages.go:129
|
||||
msgid "Camera not found"
|
||||
msgstr "Kameran hittades inte"
|
||||
|
||||
#: messages.go:130
|
||||
msgid "Lens not found"
|
||||
msgstr "Linsen hittades inte"
|
||||
|
||||
#: messages.go:131
|
||||
msgid "Album not found"
|
||||
msgstr "Albumet finns inte"
|
||||
|
||||
#: messages.go:122
|
||||
#: messages.go:132
|
||||
msgid "Subject not found"
|
||||
msgstr "Ämnet finns inte"
|
||||
|
||||
#: messages.go:123
|
||||
#: messages.go:133
|
||||
msgid "Person not found"
|
||||
msgstr "Personen kunde inte hittas"
|
||||
|
||||
#: messages.go:124
|
||||
#: messages.go:134
|
||||
msgid "Face not found"
|
||||
msgstr "Ansiktet kunde inte hittas"
|
||||
|
||||
#: messages.go:125
|
||||
#: messages.go:135
|
||||
msgid "Not available in public mode"
|
||||
msgstr "Inte tillgängligt i offentligt läge"
|
||||
|
||||
#: messages.go:126
|
||||
#: messages.go:136
|
||||
msgid "Not available in read-only mode"
|
||||
msgstr "Inte tillgänglig i skrivskyddsläge"
|
||||
|
||||
#: messages.go:127
|
||||
#: messages.go:137
|
||||
msgid "Please log in to your account"
|
||||
msgstr "Logga in på ditt konto"
|
||||
|
||||
#: messages.go:128
|
||||
#: messages.go:138
|
||||
msgid "Permission denied"
|
||||
msgstr "Åtkomst nekades"
|
||||
|
||||
#: messages.go:129
|
||||
#: messages.go:139
|
||||
msgid "Payment required"
|
||||
msgstr "Betalning krävs"
|
||||
|
||||
#: messages.go:130
|
||||
#: messages.go:140
|
||||
msgid "Upload might be offensive"
|
||||
msgstr "Uppladdning kan vara stötande"
|
||||
|
||||
#: messages.go:131
|
||||
#: messages.go:141
|
||||
msgid "Upload failed"
|
||||
msgstr "Uppladdning misslyckades"
|
||||
|
||||
#: messages.go:132
|
||||
#: messages.go:142
|
||||
msgid "No items selected"
|
||||
msgstr "Inga objekt har valts"
|
||||
|
||||
#: messages.go:133
|
||||
#: messages.go:143
|
||||
msgid "Failed creating file, please check permissions"
|
||||
msgstr "Det gick inte att skapa en fil, kontrollera behörigheter"
|
||||
|
||||
#: messages.go:134
|
||||
#: messages.go:144
|
||||
msgid "Failed creating folder, please check permissions"
|
||||
msgstr "Det gick inte att skapa en mapp, kontrollera behörigheter"
|
||||
|
||||
#: messages.go:135
|
||||
#: messages.go:145
|
||||
msgid "Could not connect, please try again"
|
||||
msgstr "Kunde inte ansluta, försök igen"
|
||||
|
||||
#: messages.go:136
|
||||
#: messages.go:146
|
||||
msgid "Enter verification code"
|
||||
msgstr "Ange verifieringskod"
|
||||
|
||||
#: messages.go:137
|
||||
#: messages.go:147
|
||||
msgid "Invalid verification code, please try again"
|
||||
msgstr "Ogiltig verifieringskod, försök igen"
|
||||
|
||||
#: messages.go:138
|
||||
#: messages.go:148
|
||||
msgid "Invalid password, please try again"
|
||||
msgstr "Felaktigt lösenord, försök igen"
|
||||
|
||||
#: messages.go:139
|
||||
#: messages.go:149
|
||||
msgid "Feature disabled"
|
||||
msgstr "Funktionen är inaktiverad"
|
||||
|
||||
#: messages.go:140
|
||||
#: messages.go:150
|
||||
msgid "No labels selected"
|
||||
msgstr "Inga etiketter har valts"
|
||||
|
||||
#: messages.go:141
|
||||
#: messages.go:151
|
||||
msgid "No albums selected"
|
||||
msgstr "Inga album har valts"
|
||||
|
||||
#: messages.go:142
|
||||
#: messages.go:152
|
||||
msgid "No files available for download"
|
||||
msgstr "Inga filer finns tillgängliga för nedladdning"
|
||||
|
||||
#: messages.go:143
|
||||
#: messages.go:153
|
||||
msgid "Failed to create zip file"
|
||||
msgstr "Misslyckades med att skapa en zip-fil"
|
||||
|
||||
#: messages.go:144
|
||||
#: messages.go:154
|
||||
msgid "Invalid credentials"
|
||||
msgstr "Ogiltiga autentiseringsuppgifter"
|
||||
|
||||
#: messages.go:145
|
||||
#: messages.go:155
|
||||
msgid "Invalid link"
|
||||
msgstr "Ogiltig länk"
|
||||
|
||||
#: messages.go:146
|
||||
#: messages.go:156
|
||||
msgid "Invalid name"
|
||||
msgstr "Felaktigt namn"
|
||||
|
||||
#: messages.go:147
|
||||
#: messages.go:157
|
||||
msgid "Busy, please try again later"
|
||||
msgstr "Upptagen, försök igen senare"
|
||||
|
||||
#: messages.go:148
|
||||
#: messages.go:158
|
||||
#, c-format
|
||||
msgid "The wakeup interval is %s, but must be 1h or less"
|
||||
msgstr "Uppvakningsintervallet är %s, men måste vara 1 timme eller mindre"
|
||||
|
||||
#: messages.go:149
|
||||
#: messages.go:159
|
||||
msgid "Your account could not be connected"
|
||||
msgstr "Ditt konto kunde inte anslutas"
|
||||
|
||||
#: messages.go:150
|
||||
#: messages.go:160
|
||||
msgid "Too many requests"
|
||||
msgstr "För många förfrågningar"
|
||||
|
||||
#: messages.go:151
|
||||
#: messages.go:161
|
||||
msgid "Insufficient storage"
|
||||
msgstr "Otillräcklig lagring"
|
||||
|
||||
#: messages.go:152
|
||||
#: messages.go:162
|
||||
msgid "Quota exceeded"
|
||||
msgstr "Kvoten överskriden"
|
||||
|
||||
#: messages.go:155
|
||||
#: messages.go:163
|
||||
msgid "Registration disabled"
|
||||
msgstr "Registrering inaktiverad"
|
||||
|
||||
#: messages.go:164
|
||||
msgid "Verified email required"
|
||||
msgstr "Verifierad e-postadress krävs"
|
||||
|
||||
#: messages.go:167
|
||||
msgid "Changes successfully saved"
|
||||
msgstr "Ändringarna har sparats"
|
||||
|
||||
#: messages.go:156
|
||||
#: messages.go:168
|
||||
msgid "Album created"
|
||||
msgstr "Album skapat"
|
||||
|
||||
#: messages.go:157
|
||||
#: messages.go:169
|
||||
msgid "Album saved"
|
||||
msgstr "Album sparat"
|
||||
|
||||
#: messages.go:158
|
||||
#: messages.go:170
|
||||
#, c-format
|
||||
msgid "Album %s deleted"
|
||||
msgstr "Album %s raderat"
|
||||
|
||||
#: messages.go:159
|
||||
#: messages.go:171
|
||||
msgid "Album contents cloned"
|
||||
msgstr "Innehållet i albumet kopieras"
|
||||
|
||||
#: messages.go:160
|
||||
#: messages.go:172
|
||||
msgid "File removed from stack"
|
||||
msgstr "Filen tas bort från stapeln"
|
||||
|
||||
#: messages.go:161
|
||||
#: messages.go:173
|
||||
msgid "File deleted"
|
||||
msgstr "Fil raderad"
|
||||
|
||||
#: messages.go:162
|
||||
#: messages.go:174
|
||||
#, c-format
|
||||
msgid "Selection added to %s"
|
||||
msgstr "Urval tillagt i %s"
|
||||
|
||||
#: messages.go:163
|
||||
#: messages.go:175
|
||||
#, c-format
|
||||
msgid "One entry added to %s"
|
||||
msgstr "En post tillagd i %s"
|
||||
|
||||
#: messages.go:164
|
||||
#: messages.go:176
|
||||
#, c-format
|
||||
msgid "%d entries added to %s"
|
||||
msgstr "%d poster tillagda till %s"
|
||||
|
||||
#: messages.go:165
|
||||
#: messages.go:177
|
||||
#, c-format
|
||||
msgid "One entry removed from %s"
|
||||
msgstr "En post borttagen från %s"
|
||||
|
||||
#: messages.go:166
|
||||
#: messages.go:178
|
||||
#, c-format
|
||||
msgid "%d entries removed from %s"
|
||||
msgstr "%d poster raderade från %s"
|
||||
|
||||
#: messages.go:167
|
||||
#: messages.go:179
|
||||
msgid "Account created"
|
||||
msgstr "Kontot har skapats"
|
||||
|
||||
#: messages.go:168
|
||||
#: messages.go:180
|
||||
msgid "Account saved"
|
||||
msgstr "Kontot sparat"
|
||||
|
||||
#: messages.go:169
|
||||
#: messages.go:181
|
||||
msgid "Account deleted"
|
||||
msgstr "Kontot raderat"
|
||||
|
||||
#: messages.go:170
|
||||
#: messages.go:182
|
||||
msgid "Settings saved"
|
||||
msgstr "Inställningarna har sparats"
|
||||
|
||||
#: messages.go:171
|
||||
#: messages.go:183
|
||||
msgid "Password changed"
|
||||
msgstr "Lösenordet har ändrats"
|
||||
|
||||
#: messages.go:172
|
||||
#: messages.go:184
|
||||
#, c-format
|
||||
msgid "Import completed in %d s"
|
||||
msgstr "Importen slutfördes på %d s"
|
||||
|
||||
#: messages.go:173
|
||||
#: messages.go:185
|
||||
msgid "Import canceled"
|
||||
msgstr "Importen avbruten"
|
||||
|
||||
#: messages.go:174
|
||||
#: messages.go:186
|
||||
#, c-format
|
||||
msgid "Indexing completed in %d s"
|
||||
msgstr "Indexering slutförd på %d s"
|
||||
|
||||
#: messages.go:175
|
||||
#: messages.go:187
|
||||
msgid "Indexing originals..."
|
||||
msgstr "Indexering av original..."
|
||||
|
||||
#: messages.go:176
|
||||
#: messages.go:188
|
||||
#, c-format
|
||||
msgid "Indexing files in %s"
|
||||
msgstr "Indexering av filer i %s"
|
||||
|
||||
#: messages.go:177
|
||||
#: messages.go:189
|
||||
msgid "Indexing canceled"
|
||||
msgstr "Indexering avbruten"
|
||||
|
||||
#: messages.go:178
|
||||
#: messages.go:190
|
||||
#, c-format
|
||||
msgid "Removed %d files and %d photos"
|
||||
msgstr "Tog bort %d filer och %d bilder"
|
||||
|
||||
#: messages.go:179
|
||||
#: messages.go:191
|
||||
#, c-format
|
||||
msgid "Moving files from %s"
|
||||
msgstr "Flyttar filer från %s"
|
||||
|
||||
#: messages.go:180
|
||||
#: messages.go:192
|
||||
#, c-format
|
||||
msgid "Copying files from %s"
|
||||
msgstr "Kopierar filer från %s"
|
||||
|
||||
#: messages.go:181
|
||||
#: messages.go:193
|
||||
msgid "Labels deleted"
|
||||
msgstr "Etiketter raderade"
|
||||
|
||||
#: messages.go:182
|
||||
#: messages.go:194
|
||||
msgid "Label saved"
|
||||
msgstr "Etikett sparad"
|
||||
|
||||
#: messages.go:183
|
||||
#: messages.go:195
|
||||
msgid "Subject saved"
|
||||
msgstr "Ämne sparat"
|
||||
|
||||
#: messages.go:184
|
||||
#: messages.go:196
|
||||
msgid "Subject deleted"
|
||||
msgstr "Ämne raderat"
|
||||
|
||||
#: messages.go:185
|
||||
#: messages.go:197
|
||||
msgid "Person saved"
|
||||
msgstr "Person sparad"
|
||||
|
||||
#: messages.go:186
|
||||
#: messages.go:198
|
||||
msgid "Person deleted"
|
||||
msgstr "Person raderad"
|
||||
|
||||
#: messages.go:187
|
||||
#: messages.go:199
|
||||
msgid "File uploaded"
|
||||
msgstr "Uppladdad fil"
|
||||
|
||||
#: messages.go:188
|
||||
#: messages.go:200
|
||||
#, c-format
|
||||
msgid "%d files uploaded in %d s"
|
||||
msgstr "%d filer uppladdade på %d s"
|
||||
|
||||
#: messages.go:189
|
||||
#: messages.go:201
|
||||
msgid "Processing upload..."
|
||||
msgstr "Behandling av uppladdning..."
|
||||
|
||||
#: messages.go:190
|
||||
#: messages.go:202
|
||||
msgid "Upload has been processed"
|
||||
msgstr "Uppladdningen har behandlats"
|
||||
|
||||
#: messages.go:191
|
||||
#: messages.go:203
|
||||
msgid "Selection approved"
|
||||
msgstr "Urvalet är godkänt"
|
||||
|
||||
#: messages.go:192
|
||||
#: messages.go:204
|
||||
msgid "Selection archived"
|
||||
msgstr "Urval arkiverat"
|
||||
|
||||
#: messages.go:193
|
||||
#: messages.go:205
|
||||
msgid "Selection restored"
|
||||
msgstr "Urvalet har återställts"
|
||||
|
||||
#: messages.go:194
|
||||
#: messages.go:206
|
||||
msgid "Selection marked as private"
|
||||
msgstr "Urval markerat som privat"
|
||||
|
||||
#: messages.go:195
|
||||
#: messages.go:207
|
||||
msgid "Albums deleted"
|
||||
msgstr "Album raderade"
|
||||
|
||||
#: messages.go:196
|
||||
#: messages.go:208
|
||||
#, c-format
|
||||
msgid "Zip created in %d s"
|
||||
msgstr "Zip skapad på %d s"
|
||||
|
||||
#: messages.go:197
|
||||
#: messages.go:209
|
||||
msgid "Permanently deleted"
|
||||
msgstr "Permanent borttagen"
|
||||
|
||||
#: messages.go:198
|
||||
#: messages.go:210
|
||||
#, c-format
|
||||
msgid "%s has been restored"
|
||||
msgstr "%s har återställts"
|
||||
|
||||
#: messages.go:199
|
||||
#: messages.go:211
|
||||
msgid "Successfully verified"
|
||||
msgstr "Verifierad"
|
||||
|
||||
#: messages.go:200
|
||||
#: messages.go:212
|
||||
msgid "Successfully activated"
|
||||
msgstr "Lyckades aktiverad"
|
||||
|
||||
|
|
|
|||
|
|
@ -2,8 +2,8 @@ msgid ""
|
|||
msgstr ""
|
||||
"Project-Id-Version: PACKAGE VERSION\n"
|
||||
"Report-Msgid-Bugs-To: \n"
|
||||
"POT-Creation-Date: 2025-10-17 17:32+0000\n"
|
||||
"PO-Revision-Date: 2025-10-22 08:25+0000\n"
|
||||
"POT-Creation-Date: 2026-06-27 09:13+0000\n"
|
||||
"PO-Revision-Date: 2026-06-27 10:28+0000\n"
|
||||
"Last-Translator: Google Cloud Translation Basic <noreply-mt-google-"
|
||||
"translate@weblate.org>\n"
|
||||
"Language-Team: none\n"
|
||||
|
|
@ -12,402 +12,418 @@ msgstr ""
|
|||
"Content-Type: text/plain; charset=UTF-8\n"
|
||||
"Content-Transfer-Encoding: 8bit\n"
|
||||
"Plural-Forms: nplurals=1; plural=0;\n"
|
||||
"X-Generator: Weblate 5.13.3\n"
|
||||
"X-Generator: Weblate 2026.5\n"
|
||||
|
||||
#: messages.go:104
|
||||
#: messages.go:112
|
||||
msgid "Something went wrong, try again"
|
||||
msgstr "เกิดข้อผิดพลาด โปรดลองอีกครั้ง"
|
||||
|
||||
#: messages.go:105
|
||||
#: messages.go:113
|
||||
msgid "Unable to do that"
|
||||
msgstr "ไม่สามารถทำเช่นนั้นได้"
|
||||
|
||||
#: messages.go:106
|
||||
#: messages.go:114
|
||||
msgid "Changes could not be saved"
|
||||
msgstr "ไม่สามารถบันทึกการเปลี่ยนแปลง"
|
||||
|
||||
#: messages.go:107
|
||||
#: messages.go:115
|
||||
msgid "Could not be deleted"
|
||||
msgstr "ไม่สามารถลบได้"
|
||||
|
||||
#: messages.go:108
|
||||
#: messages.go:116
|
||||
#, c-format
|
||||
msgid "%s already exists"
|
||||
msgstr "%s มีอยู่แล้ว"
|
||||
|
||||
#: messages.go:109
|
||||
#: messages.go:117
|
||||
msgid "Not found"
|
||||
msgstr "ไม่พบ"
|
||||
|
||||
#: messages.go:110
|
||||
#: messages.go:118
|
||||
msgid "File not found"
|
||||
msgstr "ไม่พบไฟล์"
|
||||
|
||||
#: messages.go:111
|
||||
#: messages.go:119
|
||||
msgid "File too large"
|
||||
msgstr "ไฟล์ใหญ่เกินไป"
|
||||
|
||||
#: messages.go:112
|
||||
#: messages.go:120
|
||||
msgid "Unsupported"
|
||||
msgstr "ไม่รองรับ"
|
||||
|
||||
#: messages.go:113
|
||||
#: messages.go:121
|
||||
msgid "Unsupported type"
|
||||
msgstr "ประเภทที่ไม่รองรับ"
|
||||
|
||||
#: messages.go:114
|
||||
#: messages.go:122
|
||||
msgid "Unsupported format"
|
||||
msgstr "รูปแบบที่ไม่สนับสนุน"
|
||||
|
||||
#: messages.go:115
|
||||
#: messages.go:123
|
||||
msgid "Originals folder is empty"
|
||||
msgstr "โฟลเดอร์ต้นฉบับว่างเปล่า"
|
||||
|
||||
#: messages.go:116
|
||||
#: messages.go:124
|
||||
msgid "Selection not found"
|
||||
msgstr "ไม่พบสิ่งที่เลือก"
|
||||
|
||||
#: messages.go:117
|
||||
#: messages.go:125
|
||||
msgid "Entity not found"
|
||||
msgstr "ไม่พบเอนทิตี"
|
||||
|
||||
#: messages.go:118
|
||||
#: messages.go:126
|
||||
msgid "Account not found"
|
||||
msgstr "ไม่พบบัญชี"
|
||||
|
||||
#: messages.go:119
|
||||
#: messages.go:127
|
||||
msgid "User not found"
|
||||
msgstr "ไม่พบผู้ใช้"
|
||||
|
||||
#: messages.go:120
|
||||
#: messages.go:128
|
||||
msgid "Label not found"
|
||||
msgstr "ไม่พบป้ายกำกับ"
|
||||
|
||||
#: messages.go:121
|
||||
#: messages.go:129
|
||||
msgid "Camera not found"
|
||||
msgstr "ไม่พบกล้อง"
|
||||
|
||||
#: messages.go:130
|
||||
msgid "Lens not found"
|
||||
msgstr "ไม่พบเลนส์"
|
||||
|
||||
#: messages.go:131
|
||||
msgid "Album not found"
|
||||
msgstr "ไม่พบอัลบั้ม"
|
||||
|
||||
#: messages.go:122
|
||||
#: messages.go:132
|
||||
msgid "Subject not found"
|
||||
msgstr "ไม่พบหัวเรื่อง"
|
||||
|
||||
#: messages.go:123
|
||||
#: messages.go:133
|
||||
msgid "Person not found"
|
||||
msgstr "ไม่พบบุคคล"
|
||||
|
||||
#: messages.go:124
|
||||
#: messages.go:134
|
||||
msgid "Face not found"
|
||||
msgstr "ไม่พบใบหน้า"
|
||||
|
||||
#: messages.go:125
|
||||
#: messages.go:135
|
||||
msgid "Not available in public mode"
|
||||
msgstr "ไม่พร้อมใช้งานในโหมดสาธารณะ"
|
||||
|
||||
#: messages.go:126
|
||||
#: messages.go:136
|
||||
msgid "Not available in read-only mode"
|
||||
msgstr "ไม่พร้อมใช้งานในโหมดอ่านอย่างเดียว"
|
||||
|
||||
#: messages.go:127
|
||||
#: messages.go:137
|
||||
msgid "Please log in to your account"
|
||||
msgstr "กรุณาเข้าสู่ระบบบัญชีของคุณ"
|
||||
|
||||
#: messages.go:128
|
||||
#: messages.go:138
|
||||
msgid "Permission denied"
|
||||
msgstr "ปฏิเสธการอนุญาต"
|
||||
|
||||
#: messages.go:129
|
||||
#: messages.go:139
|
||||
msgid "Payment required"
|
||||
msgstr "ต้องชำระเงิน"
|
||||
|
||||
#: messages.go:130
|
||||
#: messages.go:140
|
||||
msgid "Upload might be offensive"
|
||||
msgstr "การอัปโหลดอาจไม่เหมาะสม"
|
||||
|
||||
#: messages.go:131
|
||||
#: messages.go:141
|
||||
msgid "Upload failed"
|
||||
msgstr "การอัพโหลดล้มเหลว"
|
||||
|
||||
#: messages.go:132
|
||||
#: messages.go:142
|
||||
msgid "No items selected"
|
||||
msgstr "ไม่มีรายการที่เลือก"
|
||||
|
||||
#: messages.go:133
|
||||
#: messages.go:143
|
||||
msgid "Failed creating file, please check permissions"
|
||||
msgstr "สร้างไฟล์ไม่สำเร็จ โปรดตรวจสอบสิทธิ์"
|
||||
|
||||
#: messages.go:134
|
||||
#: messages.go:144
|
||||
msgid "Failed creating folder, please check permissions"
|
||||
msgstr "สร้างโฟลเดอร์ไม่สำเร็จ โปรดตรวจสอบสิทธิ์"
|
||||
|
||||
#: messages.go:135
|
||||
#: messages.go:145
|
||||
msgid "Could not connect, please try again"
|
||||
msgstr "ไม่สามารถเชื่อมต่อได้ โปรดลองอีกครั้ง"
|
||||
|
||||
#: messages.go:136
|
||||
#: messages.go:146
|
||||
msgid "Enter verification code"
|
||||
msgstr "ระบุรหัสยืนยืน"
|
||||
|
||||
#: messages.go:137
|
||||
#: messages.go:147
|
||||
msgid "Invalid verification code, please try again"
|
||||
msgstr "รหัสยืนยันไม่ถูกต้อง โปรดลองอีกครั้ง"
|
||||
|
||||
#: messages.go:138
|
||||
#: messages.go:148
|
||||
msgid "Invalid password, please try again"
|
||||
msgstr "รหัสผ่านไม่ถูกต้อง โปรดลองอีกครั้ง"
|
||||
|
||||
#: messages.go:139
|
||||
#: messages.go:149
|
||||
msgid "Feature disabled"
|
||||
msgstr "คุณลักษณะถูกปิดใช้งาน"
|
||||
|
||||
#: messages.go:140
|
||||
#: messages.go:150
|
||||
msgid "No labels selected"
|
||||
msgstr "ไม่ได้เลือกป้ายกำกับ"
|
||||
|
||||
#: messages.go:141
|
||||
#: messages.go:151
|
||||
msgid "No albums selected"
|
||||
msgstr "ไม่ได้เลือกอัลบั้ม"
|
||||
|
||||
#: messages.go:142
|
||||
#: messages.go:152
|
||||
msgid "No files available for download"
|
||||
msgstr "ไม่มีไฟล์สำหรับดาวน์โหลด"
|
||||
|
||||
#: messages.go:143
|
||||
#: messages.go:153
|
||||
msgid "Failed to create zip file"
|
||||
msgstr "สร้างไฟล์ zip ไม่สำเร็จ"
|
||||
|
||||
#: messages.go:144
|
||||
#: messages.go:154
|
||||
msgid "Invalid credentials"
|
||||
msgstr "ข้อมูลประจำตัวที่ไม่ถูกต้อง"
|
||||
|
||||
#: messages.go:145
|
||||
#: messages.go:155
|
||||
msgid "Invalid link"
|
||||
msgstr "ลิงก์ไม่ถูกต้อง"
|
||||
|
||||
#: messages.go:146
|
||||
#: messages.go:156
|
||||
msgid "Invalid name"
|
||||
msgstr "ชื่อไม่ถูกต้อง"
|
||||
|
||||
#: messages.go:147
|
||||
#: messages.go:157
|
||||
msgid "Busy, please try again later"
|
||||
msgstr "ไม่ว่าง โปรดลองอีกครั้งในภายหลัง"
|
||||
|
||||
#: messages.go:148
|
||||
#: messages.go:158
|
||||
#, c-format
|
||||
msgid "The wakeup interval is %s, but must be 1h or less"
|
||||
msgstr "ช่วงเวลาปลุกคือ %s แต่ต้องเป็น 1 ชั่วโมงหรือน้อยกว่า"
|
||||
|
||||
#: messages.go:149
|
||||
#: messages.go:159
|
||||
msgid "Your account could not be connected"
|
||||
msgstr "ไม่สามารถเชื่อมต่อบัญชีของคุณได้"
|
||||
|
||||
#: messages.go:150
|
||||
#: messages.go:160
|
||||
msgid "Too many requests"
|
||||
msgstr "คำขอมากเกินไป"
|
||||
|
||||
#: messages.go:151
|
||||
#: messages.go:161
|
||||
msgid "Insufficient storage"
|
||||
msgstr "พื้นที่เก็บข้อมูลไม่เพียงพอ"
|
||||
|
||||
#: messages.go:152
|
||||
#: messages.go:162
|
||||
msgid "Quota exceeded"
|
||||
msgstr "เกินโควตา"
|
||||
|
||||
#: messages.go:155
|
||||
#: messages.go:163
|
||||
msgid "Registration disabled"
|
||||
msgstr "การลงทะเบียนถูกปิดใช้งาน"
|
||||
|
||||
#: messages.go:164
|
||||
msgid "Verified email required"
|
||||
msgstr "ต้องยืนยันอีเมล"
|
||||
|
||||
#: messages.go:167
|
||||
msgid "Changes successfully saved"
|
||||
msgstr "บันทึกการเปลี่ยนแปลงเรียบร้อยแล้ว"
|
||||
|
||||
#: messages.go:156
|
||||
#: messages.go:168
|
||||
msgid "Album created"
|
||||
msgstr "สร้างอัลบั้มแล้ว"
|
||||
|
||||
#: messages.go:157
|
||||
#: messages.go:169
|
||||
msgid "Album saved"
|
||||
msgstr "บันทึกอัลบั้มแล้ว"
|
||||
|
||||
#: messages.go:158
|
||||
#: messages.go:170
|
||||
#, c-format
|
||||
msgid "Album %s deleted"
|
||||
msgstr "ลบอัลบั้ม %s แล้ว"
|
||||
|
||||
#: messages.go:159
|
||||
#: messages.go:171
|
||||
msgid "Album contents cloned"
|
||||
msgstr "โคลนเนื้อหาในอัลบั้ม"
|
||||
|
||||
#: messages.go:160
|
||||
#: messages.go:172
|
||||
msgid "File removed from stack"
|
||||
msgstr "ไฟล์ถูกลบออกจากสแต็ค"
|
||||
|
||||
#: messages.go:161
|
||||
#: messages.go:173
|
||||
msgid "File deleted"
|
||||
msgstr "ลบไฟล์แล้ว"
|
||||
|
||||
#: messages.go:162
|
||||
#: messages.go:174
|
||||
#, c-format
|
||||
msgid "Selection added to %s"
|
||||
msgstr "เพิ่มการเลือกใน %s"
|
||||
|
||||
#: messages.go:163
|
||||
#: messages.go:175
|
||||
#, c-format
|
||||
msgid "One entry added to %s"
|
||||
msgstr "เพิ่มหนึ่งรายการใน %s"
|
||||
|
||||
#: messages.go:164
|
||||
#: messages.go:176
|
||||
#, c-format
|
||||
msgid "%d entries added to %s"
|
||||
msgstr "%d รายการที่เพิ่มใน %s"
|
||||
|
||||
#: messages.go:165
|
||||
#: messages.go:177
|
||||
#, c-format
|
||||
msgid "One entry removed from %s"
|
||||
msgstr "ลบหนึ่งรายการจาก %s"
|
||||
|
||||
#: messages.go:166
|
||||
#: messages.go:178
|
||||
#, c-format
|
||||
msgid "%d entries removed from %s"
|
||||
msgstr "รายการ %d ถูกลบออกจาก %s"
|
||||
|
||||
#: messages.go:167
|
||||
#: messages.go:179
|
||||
msgid "Account created"
|
||||
msgstr "สร้างบัญชีแล้ว"
|
||||
|
||||
#: messages.go:168
|
||||
#: messages.go:180
|
||||
msgid "Account saved"
|
||||
msgstr "บันทึกบัญชีแล้ว"
|
||||
|
||||
#: messages.go:169
|
||||
#: messages.go:181
|
||||
msgid "Account deleted"
|
||||
msgstr "ลบบัญชีแล้ว"
|
||||
|
||||
#: messages.go:170
|
||||
#: messages.go:182
|
||||
msgid "Settings saved"
|
||||
msgstr "การตั้งค่าที่บันทึกไว้"
|
||||
|
||||
#: messages.go:171
|
||||
#: messages.go:183
|
||||
msgid "Password changed"
|
||||
msgstr "เปลี่ยนรหัสผ่านแล้ว"
|
||||
|
||||
#: messages.go:172
|
||||
#: messages.go:184
|
||||
#, c-format
|
||||
msgid "Import completed in %d s"
|
||||
msgstr "การนำเข้าเสร็จสมบูรณ์ใน %d วินาที"
|
||||
|
||||
#: messages.go:173
|
||||
#: messages.go:185
|
||||
msgid "Import canceled"
|
||||
msgstr "ยกเลิกการนำเข้าแล้ว"
|
||||
|
||||
#: messages.go:174
|
||||
#: messages.go:186
|
||||
#, c-format
|
||||
msgid "Indexing completed in %d s"
|
||||
msgstr "การสร้างดัชนีเสร็จสิ้นใน %d วินาที"
|
||||
|
||||
#: messages.go:175
|
||||
#: messages.go:187
|
||||
msgid "Indexing originals..."
|
||||
msgstr "กำลังจัดทำดัชนีต้นฉบับ..."
|
||||
|
||||
#: messages.go:176
|
||||
#: messages.go:188
|
||||
#, c-format
|
||||
msgid "Indexing files in %s"
|
||||
msgstr "การทำดัชนีไฟล์ใน %s"
|
||||
|
||||
#: messages.go:177
|
||||
#: messages.go:189
|
||||
msgid "Indexing canceled"
|
||||
msgstr "ยกเลิกการทำดัชนีแล้ว"
|
||||
|
||||
#: messages.go:178
|
||||
#: messages.go:190
|
||||
#, c-format
|
||||
msgid "Removed %d files and %d photos"
|
||||
msgstr "ลบไฟล์ %d และภาพถ่าย %d"
|
||||
|
||||
#: messages.go:179
|
||||
#: messages.go:191
|
||||
#, c-format
|
||||
msgid "Moving files from %s"
|
||||
msgstr "การย้ายไฟล์จาก %s"
|
||||
|
||||
#: messages.go:180
|
||||
#: messages.go:192
|
||||
#, c-format
|
||||
msgid "Copying files from %s"
|
||||
msgstr "การคัดลอกไฟล์จาก %s"
|
||||
|
||||
#: messages.go:181
|
||||
#: messages.go:193
|
||||
msgid "Labels deleted"
|
||||
msgstr "ลบป้ายกำกับแล้ว"
|
||||
|
||||
#: messages.go:182
|
||||
#: messages.go:194
|
||||
msgid "Label saved"
|
||||
msgstr "บันทึกป้ายกำกับแล้ว"
|
||||
|
||||
#: messages.go:183
|
||||
#: messages.go:195
|
||||
msgid "Subject saved"
|
||||
msgstr "บันทึกหัวเรื่องแล้ว"
|
||||
|
||||
#: messages.go:184
|
||||
#: messages.go:196
|
||||
msgid "Subject deleted"
|
||||
msgstr "ลบหัวเรื่องแล้ว"
|
||||
|
||||
#: messages.go:185
|
||||
#: messages.go:197
|
||||
msgid "Person saved"
|
||||
msgstr "บุคคลที่บันทึกไว้"
|
||||
|
||||
#: messages.go:186
|
||||
#: messages.go:198
|
||||
msgid "Person deleted"
|
||||
msgstr "ลบบุคคลแล้ว"
|
||||
|
||||
#: messages.go:187
|
||||
#: messages.go:199
|
||||
msgid "File uploaded"
|
||||
msgstr "อัปโหลดไฟล์แล้ว"
|
||||
|
||||
#: messages.go:188
|
||||
#: messages.go:200
|
||||
#, c-format
|
||||
msgid "%d files uploaded in %d s"
|
||||
msgstr "ไฟล์ %d ที่อัปโหลดใน %d วินาที"
|
||||
|
||||
#: messages.go:189
|
||||
#: messages.go:201
|
||||
msgid "Processing upload..."
|
||||
msgstr "กำลังประมวลผลการอัปโหลด..."
|
||||
|
||||
#: messages.go:190
|
||||
#: messages.go:202
|
||||
msgid "Upload has been processed"
|
||||
msgstr "อัปโหลดได้รับการดำเนินการ"
|
||||
|
||||
#: messages.go:191
|
||||
#: messages.go:203
|
||||
msgid "Selection approved"
|
||||
msgstr "การเลือกได้รับการอนุมัติ"
|
||||
|
||||
#: messages.go:192
|
||||
#: messages.go:204
|
||||
msgid "Selection archived"
|
||||
msgstr "เก็บถาวรการเลือกแล้ว"
|
||||
|
||||
#: messages.go:193
|
||||
#: messages.go:205
|
||||
msgid "Selection restored"
|
||||
msgstr "คืนค่าการเลือกแล้ว"
|
||||
|
||||
#: messages.go:194
|
||||
#: messages.go:206
|
||||
msgid "Selection marked as private"
|
||||
msgstr "การเลือกถูกทำเครื่องหมายเป็นส่วนตัว"
|
||||
|
||||
#: messages.go:195
|
||||
#: messages.go:207
|
||||
msgid "Albums deleted"
|
||||
msgstr "ลบอัลบั้มแล้ว"
|
||||
|
||||
#: messages.go:196
|
||||
#: messages.go:208
|
||||
#, c-format
|
||||
msgid "Zip created in %d s"
|
||||
msgstr "Zip สร้างใน %d วินาที"
|
||||
|
||||
#: messages.go:197
|
||||
#: messages.go:209
|
||||
msgid "Permanently deleted"
|
||||
msgstr "ลบอย่างถาวร"
|
||||
|
||||
#: messages.go:198
|
||||
#: messages.go:210
|
||||
#, c-format
|
||||
msgid "%s has been restored"
|
||||
msgstr "%s ได้รับการกู้คืนแล้ว"
|
||||
|
||||
#: messages.go:199
|
||||
#: messages.go:211
|
||||
msgid "Successfully verified"
|
||||
msgstr "ตรวจสอบเรียบร้อยแล้ว"
|
||||
|
||||
#: messages.go:200
|
||||
#: messages.go:212
|
||||
msgid "Successfully activated"
|
||||
msgstr "เปิดใช้งานสำเร็จแล้ว"
|
||||
|
||||
|
|
|
|||
|
|
@ -2,411 +2,428 @@ msgid ""
|
|||
msgstr ""
|
||||
"Project-Id-Version: \n"
|
||||
"Report-Msgid-Bugs-To: \n"
|
||||
"POT-Creation-Date: 2025-10-17 17:32+0000\n"
|
||||
"PO-Revision-Date: 2025-10-22 08:25+0000\n"
|
||||
"Last-Translator: DeepL <noreply-mt-deepl@weblate.org>\n"
|
||||
"POT-Creation-Date: 2026-06-27 09:13+0000\n"
|
||||
"PO-Revision-Date: 2026-06-27 10:28+0000\n"
|
||||
"Last-Translator: Google Cloud Translation Basic <noreply-mt-google-"
|
||||
"translate@weblate.org>\n"
|
||||
"Language-Team: none\n"
|
||||
"Language: tr\n"
|
||||
"MIME-Version: 1.0\n"
|
||||
"Content-Type: text/plain; charset=UTF-8\n"
|
||||
"Content-Transfer-Encoding: 8bit\n"
|
||||
"Plural-Forms: nplurals=2; plural=n != 1;\n"
|
||||
"X-Generator: Weblate 5.13.3\n"
|
||||
"X-Generator: Weblate 2026.5\n"
|
||||
|
||||
#: messages.go:104
|
||||
#: messages.go:112
|
||||
msgid "Something went wrong, try again"
|
||||
msgstr "Bir şeyler ters gitti, tekrar deneyin"
|
||||
|
||||
#: messages.go:105
|
||||
#: messages.go:113
|
||||
msgid "Unable to do that"
|
||||
msgstr "Bunu yapmak mümkün değil"
|
||||
|
||||
#: messages.go:106
|
||||
#: messages.go:114
|
||||
msgid "Changes could not be saved"
|
||||
msgstr "Değişiklikler kaydedilemedi"
|
||||
|
||||
#: messages.go:107
|
||||
#: messages.go:115
|
||||
msgid "Could not be deleted"
|
||||
msgstr "Silinemedi"
|
||||
|
||||
#: messages.go:108
|
||||
#: messages.go:116
|
||||
#, c-format
|
||||
msgid "%s already exists"
|
||||
msgstr "%s zaten var"
|
||||
|
||||
#: messages.go:109
|
||||
#: messages.go:117
|
||||
msgid "Not found"
|
||||
msgstr "Bulunamadı"
|
||||
|
||||
#: messages.go:110
|
||||
#: messages.go:118
|
||||
msgid "File not found"
|
||||
msgstr "Dosya bulunamadı"
|
||||
|
||||
#: messages.go:111
|
||||
#: messages.go:119
|
||||
msgid "File too large"
|
||||
msgstr "Dosya çok büyük"
|
||||
|
||||
#: messages.go:112
|
||||
#: messages.go:120
|
||||
msgid "Unsupported"
|
||||
msgstr "Desteklenmiyor"
|
||||
|
||||
#: messages.go:113
|
||||
#: messages.go:121
|
||||
msgid "Unsupported type"
|
||||
msgstr "Desteklenmeyen tür"
|
||||
|
||||
#: messages.go:114
|
||||
#: messages.go:122
|
||||
msgid "Unsupported format"
|
||||
msgstr "Desteklenmeyen format"
|
||||
|
||||
#: messages.go:115
|
||||
#: messages.go:123
|
||||
msgid "Originals folder is empty"
|
||||
msgstr "Orijinaller klasörü boş"
|
||||
|
||||
#: messages.go:116
|
||||
#: messages.go:124
|
||||
msgid "Selection not found"
|
||||
msgstr "Seçim bulunamadı"
|
||||
|
||||
#: messages.go:117
|
||||
#: messages.go:125
|
||||
msgid "Entity not found"
|
||||
msgstr "Varlık bulunamadı"
|
||||
|
||||
#: messages.go:118
|
||||
#: messages.go:126
|
||||
msgid "Account not found"
|
||||
msgstr "Hesap bulunamadı"
|
||||
|
||||
#: messages.go:119
|
||||
#: messages.go:127
|
||||
msgid "User not found"
|
||||
msgstr "Kullanıcı bulunamadı"
|
||||
|
||||
#: messages.go:120
|
||||
#: messages.go:128
|
||||
msgid "Label not found"
|
||||
msgstr "Etiket bulunamadı"
|
||||
|
||||
#: messages.go:121
|
||||
#: messages.go:129
|
||||
msgid "Camera not found"
|
||||
msgstr "Kamera bulunamadı."
|
||||
|
||||
#: messages.go:130
|
||||
msgid "Lens not found"
|
||||
msgstr "Lens bulunamadı."
|
||||
|
||||
#: messages.go:131
|
||||
msgid "Album not found"
|
||||
msgstr "Albüm bulunamadı"
|
||||
|
||||
#: messages.go:122
|
||||
#: messages.go:132
|
||||
msgid "Subject not found"
|
||||
msgstr "Özne bulunamadı"
|
||||
|
||||
#: messages.go:123
|
||||
#: messages.go:133
|
||||
msgid "Person not found"
|
||||
msgstr "Kişi bulunamadı"
|
||||
|
||||
#: messages.go:124
|
||||
#: messages.go:134
|
||||
msgid "Face not found"
|
||||
msgstr "Yüz bulunamadı"
|
||||
|
||||
#: messages.go:125
|
||||
#: messages.go:135
|
||||
msgid "Not available in public mode"
|
||||
msgstr "Genel modda mevcut değil"
|
||||
|
||||
#: messages.go:126
|
||||
#: messages.go:136
|
||||
msgid "Not available in read-only mode"
|
||||
msgstr "Salt okunur modda kullanılamaz"
|
||||
|
||||
#: messages.go:127
|
||||
#: messages.go:137
|
||||
msgid "Please log in to your account"
|
||||
msgstr "Lütfen hesabınıza giriş yapın"
|
||||
|
||||
#: messages.go:128
|
||||
#: messages.go:138
|
||||
msgid "Permission denied"
|
||||
msgstr "İzin reddedildi"
|
||||
|
||||
#: messages.go:129
|
||||
#: messages.go:139
|
||||
msgid "Payment required"
|
||||
msgstr "Ödeme gerekli"
|
||||
|
||||
#: messages.go:130
|
||||
#: messages.go:140
|
||||
msgid "Upload might be offensive"
|
||||
msgstr "Yükleme rahatsız edici olabilir"
|
||||
|
||||
#: messages.go:131
|
||||
#: messages.go:141
|
||||
msgid "Upload failed"
|
||||
msgstr "Yükleme başarısız"
|
||||
|
||||
#: messages.go:132
|
||||
#: messages.go:142
|
||||
msgid "No items selected"
|
||||
msgstr "Seçili öğe yok"
|
||||
|
||||
#: messages.go:133
|
||||
#: messages.go:143
|
||||
msgid "Failed creating file, please check permissions"
|
||||
msgstr "Dosya oluşturulamadı, lütfen izinleri kontrol edin"
|
||||
|
||||
#: messages.go:134
|
||||
#: messages.go:144
|
||||
msgid "Failed creating folder, please check permissions"
|
||||
msgstr "Klasör oluşturulamadı, lütfen izinleri kontrol edin"
|
||||
|
||||
#: messages.go:135
|
||||
#: messages.go:145
|
||||
msgid "Could not connect, please try again"
|
||||
msgstr "Bağlanılamadı, lütfen tekrar deneyin"
|
||||
|
||||
#: messages.go:136
|
||||
#: messages.go:146
|
||||
msgid "Enter verification code"
|
||||
msgstr "Doğrulama kodunu giriniz"
|
||||
|
||||
#: messages.go:137
|
||||
#: messages.go:147
|
||||
msgid "Invalid verification code, please try again"
|
||||
msgstr "Geçersiz doğrulama kodu, lütfen tekrar deneyin"
|
||||
|
||||
#: messages.go:138
|
||||
#: messages.go:148
|
||||
msgid "Invalid password, please try again"
|
||||
msgstr "Geçersiz şifre, lütfen tekrar deneyin"
|
||||
|
||||
#: messages.go:139
|
||||
#: messages.go:149
|
||||
msgid "Feature disabled"
|
||||
msgstr "Özellik devre dışı"
|
||||
|
||||
#: messages.go:140
|
||||
#: messages.go:150
|
||||
msgid "No labels selected"
|
||||
msgstr "Seçili etiket yok"
|
||||
|
||||
#: messages.go:141
|
||||
#: messages.go:151
|
||||
msgid "No albums selected"
|
||||
msgstr "Seçili albüm yok"
|
||||
|
||||
#: messages.go:142
|
||||
#: messages.go:152
|
||||
msgid "No files available for download"
|
||||
msgstr "İndirilebilecek dosya yok"
|
||||
|
||||
#: messages.go:143
|
||||
#: messages.go:153
|
||||
msgid "Failed to create zip file"
|
||||
msgstr "Zip dosyası oluşturulamadı"
|
||||
|
||||
#: messages.go:144
|
||||
#: messages.go:154
|
||||
msgid "Invalid credentials"
|
||||
msgstr "Geçersiz kimlik bilgileri"
|
||||
|
||||
#: messages.go:145
|
||||
#: messages.go:155
|
||||
msgid "Invalid link"
|
||||
msgstr "Geçersiz link"
|
||||
|
||||
#: messages.go:146
|
||||
#: messages.go:156
|
||||
msgid "Invalid name"
|
||||
msgstr "Geçersiz isim"
|
||||
|
||||
#: messages.go:147
|
||||
#: messages.go:157
|
||||
msgid "Busy, please try again later"
|
||||
msgstr "Meşgul, lütfen daha sonra tekrar deneyin"
|
||||
|
||||
#: messages.go:148
|
||||
#: messages.go:158
|
||||
#, c-format
|
||||
msgid "The wakeup interval is %s, but must be 1h or less"
|
||||
msgstr "Uyandırma aralığı %s'dır, ancak 1 saat veya daha az olmalıdır"
|
||||
|
||||
#: messages.go:149
|
||||
#: messages.go:159
|
||||
msgid "Your account could not be connected"
|
||||
msgstr "Hesabınız bağlanamadı"
|
||||
|
||||
#: messages.go:150
|
||||
#: messages.go:160
|
||||
msgid "Too many requests"
|
||||
msgstr "Çok fazla talep var"
|
||||
|
||||
#: messages.go:151
|
||||
#: messages.go:161
|
||||
msgid "Insufficient storage"
|
||||
msgstr "Yetersiz depolama"
|
||||
|
||||
#: messages.go:152
|
||||
#: messages.go:162
|
||||
msgid "Quota exceeded"
|
||||
msgstr "Kota aşıldı"
|
||||
|
||||
#: messages.go:155
|
||||
#: messages.go:163
|
||||
msgid "Registration disabled"
|
||||
msgstr "Kayıt devre dışı bırakıldı"
|
||||
|
||||
#: messages.go:164
|
||||
msgid "Verified email required"
|
||||
msgstr "Doğrulanmış e-posta adresi gereklidir."
|
||||
|
||||
#: messages.go:167
|
||||
msgid "Changes successfully saved"
|
||||
msgstr "Değişiklikler başarıyla kaydedildi"
|
||||
|
||||
#: messages.go:156
|
||||
#: messages.go:168
|
||||
msgid "Album created"
|
||||
msgstr "Albüm oluşturuldu"
|
||||
|
||||
#: messages.go:157
|
||||
#: messages.go:169
|
||||
msgid "Album saved"
|
||||
msgstr "Albüm kaydedildi"
|
||||
|
||||
#: messages.go:158
|
||||
#: messages.go:170
|
||||
#, c-format
|
||||
msgid "Album %s deleted"
|
||||
msgstr "Albüm %s silindi"
|
||||
|
||||
#: messages.go:159
|
||||
#: messages.go:171
|
||||
msgid "Album contents cloned"
|
||||
msgstr "Albüm içeriği klonlandı"
|
||||
|
||||
#: messages.go:160
|
||||
#: messages.go:172
|
||||
msgid "File removed from stack"
|
||||
msgstr "Dosya yığından kaldırıldı"
|
||||
|
||||
#: messages.go:161
|
||||
#: messages.go:173
|
||||
msgid "File deleted"
|
||||
msgstr "Silinmiş dosya"
|
||||
|
||||
#: messages.go:162
|
||||
#: messages.go:174
|
||||
#, c-format
|
||||
msgid "Selection added to %s"
|
||||
msgstr "Seçim %s'a eklendi"
|
||||
|
||||
#: messages.go:163
|
||||
#: messages.go:175
|
||||
#, c-format
|
||||
msgid "One entry added to %s"
|
||||
msgstr "Bir giriş %s'a eklendi"
|
||||
|
||||
#: messages.go:164
|
||||
#: messages.go:176
|
||||
#, c-format
|
||||
msgid "%d entries added to %s"
|
||||
msgstr "%d girişleri %s'e eklendi"
|
||||
|
||||
#: messages.go:165
|
||||
#: messages.go:177
|
||||
#, c-format
|
||||
msgid "One entry removed from %s"
|
||||
msgstr "Bir giriş %s'dan kaldırıldı"
|
||||
|
||||
#: messages.go:166
|
||||
#: messages.go:178
|
||||
#, c-format
|
||||
msgid "%d entries removed from %s"
|
||||
msgstr "%d girişleri %s'den kaldırıldı"
|
||||
|
||||
#: messages.go:167
|
||||
#: messages.go:179
|
||||
msgid "Account created"
|
||||
msgstr "Hesap eklendi"
|
||||
|
||||
#: messages.go:168
|
||||
#: messages.go:180
|
||||
msgid "Account saved"
|
||||
msgstr "Hesap kaydedildi"
|
||||
|
||||
#: messages.go:169
|
||||
#: messages.go:181
|
||||
msgid "Account deleted"
|
||||
msgstr "Hesap silindi"
|
||||
|
||||
#: messages.go:170
|
||||
#: messages.go:182
|
||||
msgid "Settings saved"
|
||||
msgstr "Ayarlar kaydedildi"
|
||||
|
||||
#: messages.go:171
|
||||
#: messages.go:183
|
||||
msgid "Password changed"
|
||||
msgstr "Şifre Değiştirildi"
|
||||
|
||||
#: messages.go:172
|
||||
#: messages.go:184
|
||||
#, c-format
|
||||
msgid "Import completed in %d s"
|
||||
msgstr "İçe aktarma %d s içinde tamamlandı"
|
||||
|
||||
#: messages.go:173
|
||||
#: messages.go:185
|
||||
msgid "Import canceled"
|
||||
msgstr "İçe aktarma iptal edildi"
|
||||
|
||||
#: messages.go:174
|
||||
#: messages.go:186
|
||||
#, c-format
|
||||
msgid "Indexing completed in %d s"
|
||||
msgstr "İndeksleme %d s içinde tamamlandı"
|
||||
|
||||
#: messages.go:175
|
||||
#: messages.go:187
|
||||
msgid "Indexing originals..."
|
||||
msgstr "Orijinalleri dizinliyor..."
|
||||
|
||||
#: messages.go:176
|
||||
#: messages.go:188
|
||||
#, c-format
|
||||
msgid "Indexing files in %s"
|
||||
msgstr "%s dosya yüklendi"
|
||||
|
||||
#: messages.go:177
|
||||
#: messages.go:189
|
||||
msgid "Indexing canceled"
|
||||
msgstr "İndeksleme iptal edildi"
|
||||
|
||||
#: messages.go:178
|
||||
#: messages.go:190
|
||||
#, c-format
|
||||
msgid "Removed %d files and %d photos"
|
||||
msgstr "%d dosya ve %d fotoğraf kaldırıldı"
|
||||
|
||||
#: messages.go:179
|
||||
#: messages.go:191
|
||||
#, c-format
|
||||
msgid "Moving files from %s"
|
||||
msgstr "Dosyaları %s'dan taşıma"
|
||||
|
||||
#: messages.go:180
|
||||
#: messages.go:192
|
||||
#, c-format
|
||||
msgid "Copying files from %s"
|
||||
msgstr "Dosyaları %s'dan kopyalama"
|
||||
|
||||
#: messages.go:181
|
||||
#: messages.go:193
|
||||
msgid "Labels deleted"
|
||||
msgstr "Etiketler silindi"
|
||||
|
||||
#: messages.go:182
|
||||
#: messages.go:194
|
||||
msgid "Label saved"
|
||||
msgstr "Etiket kaydedildi"
|
||||
|
||||
#: messages.go:183
|
||||
#: messages.go:195
|
||||
msgid "Subject saved"
|
||||
msgstr "Konu kaydedildi"
|
||||
|
||||
#: messages.go:184
|
||||
#: messages.go:196
|
||||
msgid "Subject deleted"
|
||||
msgstr "Konu silindi"
|
||||
|
||||
#: messages.go:185
|
||||
#: messages.go:197
|
||||
msgid "Person saved"
|
||||
msgstr "Kurtarılan kişi"
|
||||
|
||||
#: messages.go:186
|
||||
#: messages.go:198
|
||||
msgid "Person deleted"
|
||||
msgstr "Kişi silindi"
|
||||
|
||||
#: messages.go:187
|
||||
#: messages.go:199
|
||||
msgid "File uploaded"
|
||||
msgstr "Dosya yüklendi"
|
||||
|
||||
#: messages.go:188
|
||||
#: messages.go:200
|
||||
#, c-format
|
||||
msgid "%d files uploaded in %d s"
|
||||
msgstr "%d dosyalar %d s içinde yüklendi"
|
||||
|
||||
#: messages.go:189
|
||||
#: messages.go:201
|
||||
msgid "Processing upload..."
|
||||
msgstr "Yükleme işlemi..."
|
||||
|
||||
#: messages.go:190
|
||||
#: messages.go:202
|
||||
msgid "Upload has been processed"
|
||||
msgstr "Yükleme işlemi tamamlandı"
|
||||
|
||||
#: messages.go:191
|
||||
#: messages.go:203
|
||||
msgid "Selection approved"
|
||||
msgstr "Seçim onaylandı"
|
||||
|
||||
#: messages.go:192
|
||||
#: messages.go:204
|
||||
msgid "Selection archived"
|
||||
msgstr "Seçim arşivlendi"
|
||||
|
||||
#: messages.go:193
|
||||
#: messages.go:205
|
||||
msgid "Selection restored"
|
||||
msgstr "Seçim geri yüklendi"
|
||||
|
||||
#: messages.go:194
|
||||
#: messages.go:206
|
||||
msgid "Selection marked as private"
|
||||
msgstr "Özel olarak işaretlenmiş seçim"
|
||||
|
||||
#: messages.go:195
|
||||
#: messages.go:207
|
||||
msgid "Albums deleted"
|
||||
msgstr "Albümler silindi"
|
||||
|
||||
#: messages.go:196
|
||||
#: messages.go:208
|
||||
#, c-format
|
||||
msgid "Zip created in %d s"
|
||||
msgstr "Zip %d s içinde oluşturuldu"
|
||||
|
||||
#: messages.go:197
|
||||
#: messages.go:209
|
||||
msgid "Permanently deleted"
|
||||
msgstr "Kalıcı olarak silindi"
|
||||
|
||||
#: messages.go:198
|
||||
#: messages.go:210
|
||||
#, c-format
|
||||
msgid "%s has been restored"
|
||||
msgstr "%s geri yüklendi"
|
||||
|
||||
#: messages.go:199
|
||||
#: messages.go:211
|
||||
msgid "Successfully verified"
|
||||
msgstr "Başarıyla doğrulandı"
|
||||
|
||||
#: messages.go:200
|
||||
#: messages.go:212
|
||||
msgid "Successfully activated"
|
||||
msgstr "Başarıyla etkinleştirildi"
|
||||
|
||||
|
|
|
|||
|
|
@ -2,9 +2,10 @@ msgid ""
|
|||
msgstr ""
|
||||
"Project-Id-Version: \n"
|
||||
"Report-Msgid-Bugs-To: \n"
|
||||
"POT-Creation-Date: 2025-10-17 17:32+0000\n"
|
||||
"PO-Revision-Date: 2025-10-22 08:25+0000\n"
|
||||
"Last-Translator: DeepL <noreply-mt-deepl@weblate.org>\n"
|
||||
"POT-Creation-Date: 2026-06-27 09:13+0000\n"
|
||||
"PO-Revision-Date: 2026-06-27 10:28+0000\n"
|
||||
"Last-Translator: Google Cloud Translation Basic <noreply-mt-google-"
|
||||
"translate@weblate.org>\n"
|
||||
"Language-Team: none\n"
|
||||
"Language: uk\n"
|
||||
"MIME-Version: 1.0\n"
|
||||
|
|
@ -12,403 +13,419 @@ msgstr ""
|
|||
"Content-Transfer-Encoding: 8bit\n"
|
||||
"Plural-Forms: nplurals=3; plural=n%10==1 && n%100!=11 ? 0 : n%10>=2 && "
|
||||
"n%10<=4 && (n%100<10 || n%100>=20) ? 1 : 2;\n"
|
||||
"X-Generator: Weblate 5.13.3\n"
|
||||
"X-Generator: Weblate 2026.5\n"
|
||||
|
||||
#: messages.go:104
|
||||
#: messages.go:112
|
||||
msgid "Something went wrong, try again"
|
||||
msgstr "Щось пішло не так, спробуйте ще раз"
|
||||
|
||||
#: messages.go:105
|
||||
#: messages.go:113
|
||||
msgid "Unable to do that"
|
||||
msgstr "Неможливо це зробити"
|
||||
|
||||
#: messages.go:106
|
||||
#: messages.go:114
|
||||
msgid "Changes could not be saved"
|
||||
msgstr "Зміни не можливо зберегти"
|
||||
|
||||
#: messages.go:107
|
||||
#: messages.go:115
|
||||
msgid "Could not be deleted"
|
||||
msgstr "Не можливо видалити"
|
||||
|
||||
#: messages.go:108
|
||||
#: messages.go:116
|
||||
#, c-format
|
||||
msgid "%s already exists"
|
||||
msgstr "%s вже існує"
|
||||
|
||||
#: messages.go:109
|
||||
#: messages.go:117
|
||||
msgid "Not found"
|
||||
msgstr "Не знайдено"
|
||||
|
||||
#: messages.go:110
|
||||
#: messages.go:118
|
||||
msgid "File not found"
|
||||
msgstr "Файл не знайдено"
|
||||
|
||||
#: messages.go:111
|
||||
#: messages.go:119
|
||||
msgid "File too large"
|
||||
msgstr "Файл занадто великий"
|
||||
|
||||
#: messages.go:112
|
||||
#: messages.go:120
|
||||
msgid "Unsupported"
|
||||
msgstr "Не підтримується"
|
||||
|
||||
#: messages.go:113
|
||||
#: messages.go:121
|
||||
msgid "Unsupported type"
|
||||
msgstr "Непідтримуваний тип"
|
||||
|
||||
#: messages.go:114
|
||||
#: messages.go:122
|
||||
msgid "Unsupported format"
|
||||
msgstr "Непідтримуваний формат"
|
||||
|
||||
#: messages.go:115
|
||||
#: messages.go:123
|
||||
msgid "Originals folder is empty"
|
||||
msgstr "Папка з оригіналами порожня"
|
||||
|
||||
#: messages.go:116
|
||||
#: messages.go:124
|
||||
msgid "Selection not found"
|
||||
msgstr "Вибір не знайдено"
|
||||
|
||||
#: messages.go:117
|
||||
#: messages.go:125
|
||||
msgid "Entity not found"
|
||||
msgstr "Об'єкт не знайдено"
|
||||
|
||||
#: messages.go:118
|
||||
#: messages.go:126
|
||||
msgid "Account not found"
|
||||
msgstr "Обліковий запис не знайдено"
|
||||
|
||||
#: messages.go:119
|
||||
#: messages.go:127
|
||||
msgid "User not found"
|
||||
msgstr "Користувача не знайдено"
|
||||
|
||||
#: messages.go:120
|
||||
#: messages.go:128
|
||||
msgid "Label not found"
|
||||
msgstr "Мітку не знайдено"
|
||||
|
||||
#: messages.go:121
|
||||
#: messages.go:129
|
||||
msgid "Camera not found"
|
||||
msgstr "Камеру не знайдено"
|
||||
|
||||
#: messages.go:130
|
||||
msgid "Lens not found"
|
||||
msgstr "Об'єктив не знайдено"
|
||||
|
||||
#: messages.go:131
|
||||
msgid "Album not found"
|
||||
msgstr "Альбом не знайдено"
|
||||
|
||||
#: messages.go:122
|
||||
#: messages.go:132
|
||||
msgid "Subject not found"
|
||||
msgstr "Тема не знайдена"
|
||||
|
||||
#: messages.go:123
|
||||
#: messages.go:133
|
||||
msgid "Person not found"
|
||||
msgstr "Особистість не знайдена"
|
||||
|
||||
#: messages.go:124
|
||||
#: messages.go:134
|
||||
msgid "Face not found"
|
||||
msgstr "Обличчя не знайдено"
|
||||
|
||||
#: messages.go:125
|
||||
#: messages.go:135
|
||||
msgid "Not available in public mode"
|
||||
msgstr "Недоступно в публічному режимі"
|
||||
|
||||
#: messages.go:126
|
||||
#: messages.go:136
|
||||
msgid "Not available in read-only mode"
|
||||
msgstr "не доступно в режимі \"тільки читання\""
|
||||
|
||||
#: messages.go:127
|
||||
#: messages.go:137
|
||||
msgid "Please log in to your account"
|
||||
msgstr "Будь ласка, увійдіть до свого облікового запису"
|
||||
|
||||
#: messages.go:128
|
||||
#: messages.go:138
|
||||
msgid "Permission denied"
|
||||
msgstr "В доступі відмовлено"
|
||||
|
||||
#: messages.go:129
|
||||
#: messages.go:139
|
||||
msgid "Payment required"
|
||||
msgstr "Потрібна оплата"
|
||||
|
||||
#: messages.go:130
|
||||
#: messages.go:140
|
||||
msgid "Upload might be offensive"
|
||||
msgstr "Завантаження може бути образливим"
|
||||
|
||||
#: messages.go:131
|
||||
#: messages.go:141
|
||||
msgid "Upload failed"
|
||||
msgstr "Помилка вивантаження"
|
||||
|
||||
#: messages.go:132
|
||||
#: messages.go:142
|
||||
msgid "No items selected"
|
||||
msgstr "Нічого не вибрано"
|
||||
|
||||
#: messages.go:133
|
||||
#: messages.go:143
|
||||
msgid "Failed creating file, please check permissions"
|
||||
msgstr "Помилка створення файла, перевірте дозволи"
|
||||
|
||||
#: messages.go:134
|
||||
#: messages.go:144
|
||||
msgid "Failed creating folder, please check permissions"
|
||||
msgstr "Не вдалося створити папку, перевірте права доступу"
|
||||
|
||||
#: messages.go:135
|
||||
#: messages.go:145
|
||||
msgid "Could not connect, please try again"
|
||||
msgstr "Не можливо підключитися, спробуйте знову"
|
||||
|
||||
#: messages.go:136
|
||||
#: messages.go:146
|
||||
msgid "Enter verification code"
|
||||
msgstr "Введіть код верифікації"
|
||||
|
||||
#: messages.go:137
|
||||
#: messages.go:147
|
||||
msgid "Invalid verification code, please try again"
|
||||
msgstr "Невірний код верифікації, спробуйте знову"
|
||||
|
||||
#: messages.go:138
|
||||
#: messages.go:148
|
||||
msgid "Invalid password, please try again"
|
||||
msgstr "Невірний пароль, спробуйте знову"
|
||||
|
||||
#: messages.go:139
|
||||
#: messages.go:149
|
||||
msgid "Feature disabled"
|
||||
msgstr "Функцію вимкнено"
|
||||
|
||||
#: messages.go:140
|
||||
#: messages.go:150
|
||||
msgid "No labels selected"
|
||||
msgstr "Мітки не вибрано"
|
||||
|
||||
#: messages.go:141
|
||||
#: messages.go:151
|
||||
msgid "No albums selected"
|
||||
msgstr "Альбоми не вибрано"
|
||||
|
||||
#: messages.go:142
|
||||
#: messages.go:152
|
||||
msgid "No files available for download"
|
||||
msgstr "Немає доступних файлів для завантаження"
|
||||
|
||||
#: messages.go:143
|
||||
#: messages.go:153
|
||||
msgid "Failed to create zip file"
|
||||
msgstr "Не вдалося створити zip-файл"
|
||||
|
||||
#: messages.go:144
|
||||
#: messages.go:154
|
||||
msgid "Invalid credentials"
|
||||
msgstr "Недійсні облікові дані"
|
||||
|
||||
#: messages.go:145
|
||||
#: messages.go:155
|
||||
msgid "Invalid link"
|
||||
msgstr "Невірне посилання"
|
||||
|
||||
#: messages.go:146
|
||||
#: messages.go:156
|
||||
msgid "Invalid name"
|
||||
msgstr "Невірне ім'я"
|
||||
|
||||
#: messages.go:147
|
||||
#: messages.go:157
|
||||
msgid "Busy, please try again later"
|
||||
msgstr "Зайнято, спробуйте пізніше"
|
||||
|
||||
#: messages.go:148
|
||||
#: messages.go:158
|
||||
#, c-format
|
||||
msgid "The wakeup interval is %s, but must be 1h or less"
|
||||
msgstr ""
|
||||
"Інтервал пробудження становить %s, але має становити 1 годину або менше"
|
||||
|
||||
#: messages.go:149
|
||||
#: messages.go:159
|
||||
msgid "Your account could not be connected"
|
||||
msgstr "Ваш обліковий запис не вдалося підключити"
|
||||
|
||||
#: messages.go:150
|
||||
#: messages.go:160
|
||||
msgid "Too many requests"
|
||||
msgstr "Занадто багато запитів"
|
||||
|
||||
#: messages.go:151
|
||||
#: messages.go:161
|
||||
msgid "Insufficient storage"
|
||||
msgstr "Недостатнє зберігання"
|
||||
|
||||
#: messages.go:152
|
||||
#: messages.go:162
|
||||
msgid "Quota exceeded"
|
||||
msgstr "Перевищено квоту"
|
||||
|
||||
#: messages.go:155
|
||||
#: messages.go:163
|
||||
msgid "Registration disabled"
|
||||
msgstr "Реєстрацію вимкнено"
|
||||
|
||||
#: messages.go:164
|
||||
msgid "Verified email required"
|
||||
msgstr "Потрібна підтверджена електронна адреса"
|
||||
|
||||
#: messages.go:167
|
||||
msgid "Changes successfully saved"
|
||||
msgstr "Зміни успішно збережено"
|
||||
|
||||
#: messages.go:156
|
||||
#: messages.go:168
|
||||
msgid "Album created"
|
||||
msgstr "Альбом створено"
|
||||
|
||||
#: messages.go:157
|
||||
#: messages.go:169
|
||||
msgid "Album saved"
|
||||
msgstr "Альбом збережено"
|
||||
|
||||
#: messages.go:158
|
||||
#: messages.go:170
|
||||
#, c-format
|
||||
msgid "Album %s deleted"
|
||||
msgstr "Альбом %s видалено"
|
||||
|
||||
#: messages.go:159
|
||||
#: messages.go:171
|
||||
msgid "Album contents cloned"
|
||||
msgstr "Вміст альбому клоновано"
|
||||
|
||||
#: messages.go:160
|
||||
#: messages.go:172
|
||||
msgid "File removed from stack"
|
||||
msgstr "Файл видалено з стеку"
|
||||
|
||||
#: messages.go:161
|
||||
#: messages.go:173
|
||||
msgid "File deleted"
|
||||
msgstr "Файл видалено"
|
||||
|
||||
#: messages.go:162
|
||||
#: messages.go:174
|
||||
#, c-format
|
||||
msgid "Selection added to %s"
|
||||
msgstr "Вибір додано до %s"
|
||||
|
||||
#: messages.go:163
|
||||
#: messages.go:175
|
||||
#, c-format
|
||||
msgid "One entry added to %s"
|
||||
msgstr "Один запис додано до %s"
|
||||
|
||||
#: messages.go:164
|
||||
#: messages.go:176
|
||||
#, c-format
|
||||
msgid "%d entries added to %s"
|
||||
msgstr "%d записів додано до %s"
|
||||
|
||||
#: messages.go:165
|
||||
#: messages.go:177
|
||||
#, c-format
|
||||
msgid "One entry removed from %s"
|
||||
msgstr "Один запис видалено з %s"
|
||||
|
||||
#: messages.go:166
|
||||
#: messages.go:178
|
||||
#, c-format
|
||||
msgid "%d entries removed from %s"
|
||||
msgstr "%d записів видалено з %s"
|
||||
|
||||
#: messages.go:167
|
||||
#: messages.go:179
|
||||
msgid "Account created"
|
||||
msgstr "Обліковий запис створено"
|
||||
|
||||
#: messages.go:168
|
||||
#: messages.go:180
|
||||
msgid "Account saved"
|
||||
msgstr "Обліковий запис збережено"
|
||||
|
||||
#: messages.go:169
|
||||
#: messages.go:181
|
||||
msgid "Account deleted"
|
||||
msgstr "Обліковий запис видалено"
|
||||
|
||||
#: messages.go:170
|
||||
#: messages.go:182
|
||||
msgid "Settings saved"
|
||||
msgstr "Налаштування збережено"
|
||||
|
||||
#: messages.go:171
|
||||
#: messages.go:183
|
||||
msgid "Password changed"
|
||||
msgstr "Пароль змінено"
|
||||
|
||||
#: messages.go:172
|
||||
#: messages.go:184
|
||||
#, c-format
|
||||
msgid "Import completed in %d s"
|
||||
msgstr "Імпортування тривало %d с"
|
||||
|
||||
#: messages.go:173
|
||||
#: messages.go:185
|
||||
msgid "Import canceled"
|
||||
msgstr "Імпортування скасовано"
|
||||
|
||||
#: messages.go:174
|
||||
#: messages.go:186
|
||||
#, c-format
|
||||
msgid "Indexing completed in %d s"
|
||||
msgstr "Індексування тривало %d с"
|
||||
|
||||
#: messages.go:175
|
||||
#: messages.go:187
|
||||
msgid "Indexing originals..."
|
||||
msgstr "Індексуємо оригінали..."
|
||||
|
||||
#: messages.go:176
|
||||
#: messages.go:188
|
||||
#, c-format
|
||||
msgid "Indexing files in %s"
|
||||
msgstr "Індексуємо файли в %s"
|
||||
|
||||
#: messages.go:177
|
||||
#: messages.go:189
|
||||
msgid "Indexing canceled"
|
||||
msgstr "Індексування скасовано"
|
||||
|
||||
#: messages.go:178
|
||||
#: messages.go:190
|
||||
#, c-format
|
||||
msgid "Removed %d files and %d photos"
|
||||
msgstr "Видалено %d файлів та %d фотографій"
|
||||
|
||||
#: messages.go:179
|
||||
#: messages.go:191
|
||||
#, c-format
|
||||
msgid "Moving files from %s"
|
||||
msgstr "Переносимо файли з %s"
|
||||
|
||||
#: messages.go:180
|
||||
#: messages.go:192
|
||||
#, c-format
|
||||
msgid "Copying files from %s"
|
||||
msgstr "Копіюємо файли з %s"
|
||||
|
||||
#: messages.go:181
|
||||
#: messages.go:193
|
||||
msgid "Labels deleted"
|
||||
msgstr "Мітки видалено"
|
||||
|
||||
#: messages.go:182
|
||||
#: messages.go:194
|
||||
msgid "Label saved"
|
||||
msgstr "Мітку збережено"
|
||||
|
||||
#: messages.go:183
|
||||
#: messages.go:195
|
||||
msgid "Subject saved"
|
||||
msgstr "Тема збережена"
|
||||
|
||||
#: messages.go:184
|
||||
#: messages.go:196
|
||||
msgid "Subject deleted"
|
||||
msgstr "Тема видалена"
|
||||
|
||||
#: messages.go:185
|
||||
#: messages.go:197
|
||||
msgid "Person saved"
|
||||
msgstr "Людина збережена"
|
||||
|
||||
#: messages.go:186
|
||||
#: messages.go:198
|
||||
msgid "Person deleted"
|
||||
msgstr "Людина видалена"
|
||||
|
||||
#: messages.go:187
|
||||
#: messages.go:199
|
||||
msgid "File uploaded"
|
||||
msgstr "Файл завантажено"
|
||||
|
||||
#: messages.go:188
|
||||
#: messages.go:200
|
||||
#, c-format
|
||||
msgid "%d files uploaded in %d s"
|
||||
msgstr "%d файлів вивантажено за %d с"
|
||||
|
||||
#: messages.go:189
|
||||
#: messages.go:201
|
||||
msgid "Processing upload..."
|
||||
msgstr "Обробка завантаження..."
|
||||
|
||||
#: messages.go:190
|
||||
#: messages.go:202
|
||||
msgid "Upload has been processed"
|
||||
msgstr "Завантаження оброблено"
|
||||
|
||||
#: messages.go:191
|
||||
#: messages.go:203
|
||||
msgid "Selection approved"
|
||||
msgstr "Вибір затверджено"
|
||||
|
||||
#: messages.go:192
|
||||
#: messages.go:204
|
||||
msgid "Selection archived"
|
||||
msgstr "Вибране заархівовано"
|
||||
|
||||
#: messages.go:193
|
||||
#: messages.go:205
|
||||
msgid "Selection restored"
|
||||
msgstr "Вибране відновлено"
|
||||
|
||||
#: messages.go:194
|
||||
#: messages.go:206
|
||||
msgid "Selection marked as private"
|
||||
msgstr "Вибіране позначено як приватне"
|
||||
|
||||
#: messages.go:195
|
||||
#: messages.go:207
|
||||
msgid "Albums deleted"
|
||||
msgstr "Альбом видалено"
|
||||
|
||||
#: messages.go:196
|
||||
#: messages.go:208
|
||||
#, c-format
|
||||
msgid "Zip created in %d s"
|
||||
msgstr "Zip створено за %d с"
|
||||
|
||||
#: messages.go:197
|
||||
#: messages.go:209
|
||||
msgid "Permanently deleted"
|
||||
msgstr "Остаточно видалено"
|
||||
|
||||
#: messages.go:198
|
||||
#: messages.go:210
|
||||
#, c-format
|
||||
msgid "%s has been restored"
|
||||
msgstr "%s було відновлено"
|
||||
|
||||
#: messages.go:199
|
||||
#: messages.go:211
|
||||
msgid "Successfully verified"
|
||||
msgstr "Верифікація успішна"
|
||||
|
||||
#: messages.go:200
|
||||
#: messages.go:212
|
||||
msgid "Successfully activated"
|
||||
msgstr "Активація успішна"
|
||||
|
||||
|
|
|
|||
|
|
@ -2,8 +2,8 @@ msgid ""
|
|||
msgstr ""
|
||||
"Project-Id-Version: PACKAGE VERSION\n"
|
||||
"Report-Msgid-Bugs-To: \n"
|
||||
"POT-Creation-Date: 2025-10-17 17:32+0000\n"
|
||||
"PO-Revision-Date: 2025-10-22 08:25+0000\n"
|
||||
"POT-Creation-Date: 2026-06-27 09:13+0000\n"
|
||||
"PO-Revision-Date: 2026-06-27 10:28+0000\n"
|
||||
"Last-Translator: Google Cloud Translation Basic <noreply-mt-google-"
|
||||
"translate@weblate.org>\n"
|
||||
"Language-Team: none\n"
|
||||
|
|
@ -12,402 +12,418 @@ msgstr ""
|
|||
"Content-Type: text/plain; charset=UTF-8\n"
|
||||
"Content-Transfer-Encoding: 8bit\n"
|
||||
"Plural-Forms: nplurals=1; plural=0;\n"
|
||||
"X-Generator: Weblate 5.13.3\n"
|
||||
"X-Generator: Weblate 2026.5\n"
|
||||
|
||||
#: messages.go:104
|
||||
#: messages.go:112
|
||||
msgid "Something went wrong, try again"
|
||||
msgstr "Đã xảy ra lỗi, hãy thử lại"
|
||||
|
||||
#: messages.go:105
|
||||
#: messages.go:113
|
||||
msgid "Unable to do that"
|
||||
msgstr "Không thể làm điều đó"
|
||||
|
||||
#: messages.go:106
|
||||
#: messages.go:114
|
||||
msgid "Changes could not be saved"
|
||||
msgstr "Không thể lưu các thay đổi"
|
||||
|
||||
#: messages.go:107
|
||||
#: messages.go:115
|
||||
msgid "Could not be deleted"
|
||||
msgstr "Không thể xóa được"
|
||||
|
||||
#: messages.go:108
|
||||
#: messages.go:116
|
||||
#, c-format
|
||||
msgid "%s already exists"
|
||||
msgstr "%s đã tồn tại"
|
||||
|
||||
#: messages.go:109
|
||||
#: messages.go:117
|
||||
msgid "Not found"
|
||||
msgstr "Không tìm thấy"
|
||||
|
||||
#: messages.go:110
|
||||
#: messages.go:118
|
||||
msgid "File not found"
|
||||
msgstr "Không tìm thấy tập tin"
|
||||
|
||||
#: messages.go:111
|
||||
#: messages.go:119
|
||||
msgid "File too large"
|
||||
msgstr "Tệp quá lớn"
|
||||
|
||||
#: messages.go:112
|
||||
#: messages.go:120
|
||||
msgid "Unsupported"
|
||||
msgstr "Không được hỗ trợ"
|
||||
|
||||
#: messages.go:113
|
||||
#: messages.go:121
|
||||
msgid "Unsupported type"
|
||||
msgstr "Loại không được hỗ trợ"
|
||||
|
||||
#: messages.go:114
|
||||
#: messages.go:122
|
||||
msgid "Unsupported format"
|
||||
msgstr "Định dạng không được hỗ trợ"
|
||||
|
||||
#: messages.go:115
|
||||
#: messages.go:123
|
||||
msgid "Originals folder is empty"
|
||||
msgstr "Thư mục gốc trống"
|
||||
|
||||
#: messages.go:116
|
||||
#: messages.go:124
|
||||
msgid "Selection not found"
|
||||
msgstr "Không tìm thấy lựa chọn"
|
||||
|
||||
#: messages.go:117
|
||||
#: messages.go:125
|
||||
msgid "Entity not found"
|
||||
msgstr "Không tìm thấy thực thể"
|
||||
|
||||
#: messages.go:118
|
||||
#: messages.go:126
|
||||
msgid "Account not found"
|
||||
msgstr "Tài khoản không được tìm thấy"
|
||||
|
||||
#: messages.go:119
|
||||
#: messages.go:127
|
||||
msgid "User not found"
|
||||
msgstr "Không tìm thấy người dùng"
|
||||
|
||||
#: messages.go:120
|
||||
#: messages.go:128
|
||||
msgid "Label not found"
|
||||
msgstr "Không tìm thấy nhãn"
|
||||
|
||||
#: messages.go:121
|
||||
#: messages.go:129
|
||||
msgid "Camera not found"
|
||||
msgstr "Không tìm thấy máy ảnh"
|
||||
|
||||
#: messages.go:130
|
||||
msgid "Lens not found"
|
||||
msgstr "Không tìm thấy ống kính"
|
||||
|
||||
#: messages.go:131
|
||||
msgid "Album not found"
|
||||
msgstr "Không tìm thấy album"
|
||||
|
||||
#: messages.go:122
|
||||
#: messages.go:132
|
||||
msgid "Subject not found"
|
||||
msgstr "Không tìm thấy chủ đề"
|
||||
|
||||
#: messages.go:123
|
||||
#: messages.go:133
|
||||
msgid "Person not found"
|
||||
msgstr "Không tìm thấy người"
|
||||
|
||||
#: messages.go:124
|
||||
#: messages.go:134
|
||||
msgid "Face not found"
|
||||
msgstr "Không tìm thấy khuôn mặt"
|
||||
|
||||
#: messages.go:125
|
||||
#: messages.go:135
|
||||
msgid "Not available in public mode"
|
||||
msgstr "Không khả dụng ở chế độ công khai"
|
||||
|
||||
#: messages.go:126
|
||||
#: messages.go:136
|
||||
msgid "Not available in read-only mode"
|
||||
msgstr "Không khả dụng ở chế độ chỉ đọc"
|
||||
|
||||
#: messages.go:127
|
||||
#: messages.go:137
|
||||
msgid "Please log in to your account"
|
||||
msgstr "Xin hãy đăng nhập vào tài khoản của bạn"
|
||||
|
||||
#: messages.go:128
|
||||
#: messages.go:138
|
||||
msgid "Permission denied"
|
||||
msgstr "Quyền bị từ chối"
|
||||
|
||||
#: messages.go:129
|
||||
#: messages.go:139
|
||||
msgid "Payment required"
|
||||
msgstr "Yêu cầu thanh toán"
|
||||
|
||||
#: messages.go:130
|
||||
#: messages.go:140
|
||||
msgid "Upload might be offensive"
|
||||
msgstr "Tải lên có thể gây khó chịu"
|
||||
|
||||
#: messages.go:131
|
||||
#: messages.go:141
|
||||
msgid "Upload failed"
|
||||
msgstr "Tải lên không thành công"
|
||||
|
||||
#: messages.go:132
|
||||
#: messages.go:142
|
||||
msgid "No items selected"
|
||||
msgstr "Không có mục nào được chọn"
|
||||
|
||||
#: messages.go:133
|
||||
#: messages.go:143
|
||||
msgid "Failed creating file, please check permissions"
|
||||
msgstr "Không tạo được tệp, vui lòng kiểm tra quyền"
|
||||
|
||||
#: messages.go:134
|
||||
#: messages.go:144
|
||||
msgid "Failed creating folder, please check permissions"
|
||||
msgstr "Không tạo được thư mục, vui lòng kiểm tra quyền"
|
||||
|
||||
#: messages.go:135
|
||||
#: messages.go:145
|
||||
msgid "Could not connect, please try again"
|
||||
msgstr "Không thể kết nối, vui lòng thử lại"
|
||||
|
||||
#: messages.go:136
|
||||
#: messages.go:146
|
||||
msgid "Enter verification code"
|
||||
msgstr "Nhập mã xác nhận"
|
||||
|
||||
#: messages.go:137
|
||||
#: messages.go:147
|
||||
msgid "Invalid verification code, please try again"
|
||||
msgstr "Mã xác minh không hợp lệ, vui lòng thử lại"
|
||||
|
||||
#: messages.go:138
|
||||
#: messages.go:148
|
||||
msgid "Invalid password, please try again"
|
||||
msgstr "mật mã không hợp lệ, vui lòng thử lại"
|
||||
|
||||
#: messages.go:139
|
||||
#: messages.go:149
|
||||
msgid "Feature disabled"
|
||||
msgstr "Tính năng bị tắt"
|
||||
|
||||
#: messages.go:140
|
||||
#: messages.go:150
|
||||
msgid "No labels selected"
|
||||
msgstr "Không có nhãn nào được chọn"
|
||||
|
||||
#: messages.go:141
|
||||
#: messages.go:151
|
||||
msgid "No albums selected"
|
||||
msgstr "Không có album nào được chọn"
|
||||
|
||||
#: messages.go:142
|
||||
#: messages.go:152
|
||||
msgid "No files available for download"
|
||||
msgstr "Không có tập tin nào để tải xuống"
|
||||
|
||||
#: messages.go:143
|
||||
#: messages.go:153
|
||||
msgid "Failed to create zip file"
|
||||
msgstr "Không tạo được tệp zip"
|
||||
|
||||
#: messages.go:144
|
||||
#: messages.go:154
|
||||
msgid "Invalid credentials"
|
||||
msgstr "Thông tin không hợp lệ"
|
||||
|
||||
#: messages.go:145
|
||||
#: messages.go:155
|
||||
msgid "Invalid link"
|
||||
msgstr "Liên kết không hợp lệ"
|
||||
|
||||
#: messages.go:146
|
||||
#: messages.go:156
|
||||
msgid "Invalid name"
|
||||
msgstr "Tên không hợp lệ"
|
||||
|
||||
#: messages.go:147
|
||||
#: messages.go:157
|
||||
msgid "Busy, please try again later"
|
||||
msgstr "Đang bận, vui lòng thử lại sau"
|
||||
|
||||
#: messages.go:148
|
||||
#: messages.go:158
|
||||
#, c-format
|
||||
msgid "The wakeup interval is %s, but must be 1h or less"
|
||||
msgstr "Khoảng thời gian đánh thức là %s nhưng phải từ 1 giờ trở xuống"
|
||||
|
||||
#: messages.go:149
|
||||
#: messages.go:159
|
||||
msgid "Your account could not be connected"
|
||||
msgstr "Tài khoản của bạn không thể kết nối được"
|
||||
|
||||
#: messages.go:150
|
||||
#: messages.go:160
|
||||
msgid "Too many requests"
|
||||
msgstr "quá nhiều yêu cầu"
|
||||
|
||||
#: messages.go:151
|
||||
#: messages.go:161
|
||||
msgid "Insufficient storage"
|
||||
msgstr "Không đủ dung lượng lưu trữ"
|
||||
|
||||
#: messages.go:152
|
||||
#: messages.go:162
|
||||
msgid "Quota exceeded"
|
||||
msgstr "Vượt quá hạn ngạch"
|
||||
|
||||
#: messages.go:155
|
||||
#: messages.go:163
|
||||
msgid "Registration disabled"
|
||||
msgstr "Đăng ký bị vô hiệu hóa"
|
||||
|
||||
#: messages.go:164
|
||||
msgid "Verified email required"
|
||||
msgstr "Cần có email đã được xác minh."
|
||||
|
||||
#: messages.go:167
|
||||
msgid "Changes successfully saved"
|
||||
msgstr "Đã lưu thay đổi thành công"
|
||||
|
||||
#: messages.go:156
|
||||
#: messages.go:168
|
||||
msgid "Album created"
|
||||
msgstr "Đã tạo album"
|
||||
|
||||
#: messages.go:157
|
||||
#: messages.go:169
|
||||
msgid "Album saved"
|
||||
msgstr "Đã lưu album"
|
||||
|
||||
#: messages.go:158
|
||||
#: messages.go:170
|
||||
#, c-format
|
||||
msgid "Album %s deleted"
|
||||
msgstr "Album %s đã bị xóa"
|
||||
|
||||
#: messages.go:159
|
||||
#: messages.go:171
|
||||
msgid "Album contents cloned"
|
||||
msgstr "Nội dung album được sao chép"
|
||||
|
||||
#: messages.go:160
|
||||
#: messages.go:172
|
||||
msgid "File removed from stack"
|
||||
msgstr "Đã xóa tệp khỏi ngăn xếp"
|
||||
|
||||
#: messages.go:161
|
||||
#: messages.go:173
|
||||
msgid "File deleted"
|
||||
msgstr "Đã xóa tệp"
|
||||
|
||||
#: messages.go:162
|
||||
#: messages.go:174
|
||||
#, c-format
|
||||
msgid "Selection added to %s"
|
||||
msgstr "Đã thêm lựa chọn vào %s"
|
||||
|
||||
#: messages.go:163
|
||||
#: messages.go:175
|
||||
#, c-format
|
||||
msgid "One entry added to %s"
|
||||
msgstr "Đã thêm một mục vào %s"
|
||||
|
||||
#: messages.go:164
|
||||
#: messages.go:176
|
||||
#, c-format
|
||||
msgid "%d entries added to %s"
|
||||
msgstr "Các mục %d được thêm vào %s"
|
||||
|
||||
#: messages.go:165
|
||||
#: messages.go:177
|
||||
#, c-format
|
||||
msgid "One entry removed from %s"
|
||||
msgstr "Đã xóa một mục khỏi %s"
|
||||
|
||||
#: messages.go:166
|
||||
#: messages.go:178
|
||||
#, c-format
|
||||
msgid "%d entries removed from %s"
|
||||
msgstr "Các mục %d đã bị xóa khỏi %s"
|
||||
|
||||
#: messages.go:167
|
||||
#: messages.go:179
|
||||
msgid "Account created"
|
||||
msgstr "Tài khoản đã được tạo"
|
||||
|
||||
#: messages.go:168
|
||||
#: messages.go:180
|
||||
msgid "Account saved"
|
||||
msgstr "Đã lưu tài khoản"
|
||||
|
||||
#: messages.go:169
|
||||
#: messages.go:181
|
||||
msgid "Account deleted"
|
||||
msgstr "Tài khoản đã bị xóa"
|
||||
|
||||
#: messages.go:170
|
||||
#: messages.go:182
|
||||
msgid "Settings saved"
|
||||
msgstr "Đã lưu cài đặt"
|
||||
|
||||
#: messages.go:171
|
||||
#: messages.go:183
|
||||
msgid "Password changed"
|
||||
msgstr "mật khẩu đã được thay đổi"
|
||||
|
||||
#: messages.go:172
|
||||
#: messages.go:184
|
||||
#, c-format
|
||||
msgid "Import completed in %d s"
|
||||
msgstr "Quá trình nhập hoàn tất sau %d giây"
|
||||
|
||||
#: messages.go:173
|
||||
#: messages.go:185
|
||||
msgid "Import canceled"
|
||||
msgstr "Đã hủy nhập"
|
||||
|
||||
#: messages.go:174
|
||||
#: messages.go:186
|
||||
#, c-format
|
||||
msgid "Indexing completed in %d s"
|
||||
msgstr "Việc lập chỉ mục hoàn tất sau %d giây"
|
||||
|
||||
#: messages.go:175
|
||||
#: messages.go:187
|
||||
msgid "Indexing originals..."
|
||||
msgstr "Lập chỉ mục bản gốc..."
|
||||
|
||||
#: messages.go:176
|
||||
#: messages.go:188
|
||||
#, c-format
|
||||
msgid "Indexing files in %s"
|
||||
msgstr "Lập chỉ mục các tệp trong %s"
|
||||
|
||||
#: messages.go:177
|
||||
#: messages.go:189
|
||||
msgid "Indexing canceled"
|
||||
msgstr "Đã hủy lập chỉ mục"
|
||||
|
||||
#: messages.go:178
|
||||
#: messages.go:190
|
||||
#, c-format
|
||||
msgid "Removed %d files and %d photos"
|
||||
msgstr "Đã xóa tệp %d và ảnh %d"
|
||||
|
||||
#: messages.go:179
|
||||
#: messages.go:191
|
||||
#, c-format
|
||||
msgid "Moving files from %s"
|
||||
msgstr "Di chuyển tệp từ %s"
|
||||
|
||||
#: messages.go:180
|
||||
#: messages.go:192
|
||||
#, c-format
|
||||
msgid "Copying files from %s"
|
||||
msgstr "Sao chép tập tin từ %s"
|
||||
|
||||
#: messages.go:181
|
||||
#: messages.go:193
|
||||
msgid "Labels deleted"
|
||||
msgstr "Đã xóa nhãn"
|
||||
|
||||
#: messages.go:182
|
||||
#: messages.go:194
|
||||
msgid "Label saved"
|
||||
msgstr "Đã lưu nhãn"
|
||||
|
||||
#: messages.go:183
|
||||
#: messages.go:195
|
||||
msgid "Subject saved"
|
||||
msgstr "Đã lưu chủ đề"
|
||||
|
||||
#: messages.go:184
|
||||
#: messages.go:196
|
||||
msgid "Subject deleted"
|
||||
msgstr "Chủ đề đã bị xóa"
|
||||
|
||||
#: messages.go:185
|
||||
#: messages.go:197
|
||||
msgid "Person saved"
|
||||
msgstr "Người đã được cứu"
|
||||
|
||||
#: messages.go:186
|
||||
#: messages.go:198
|
||||
msgid "Person deleted"
|
||||
msgstr "Người đã bị xóa"
|
||||
|
||||
#: messages.go:187
|
||||
#: messages.go:199
|
||||
msgid "File uploaded"
|
||||
msgstr "File đã được tải lên"
|
||||
|
||||
#: messages.go:188
|
||||
#: messages.go:200
|
||||
#, c-format
|
||||
msgid "%d files uploaded in %d s"
|
||||
msgstr "Các tệp %d được tải lên trong %d giây"
|
||||
|
||||
#: messages.go:189
|
||||
#: messages.go:201
|
||||
msgid "Processing upload..."
|
||||
msgstr "Đang xử lý tải lên..."
|
||||
|
||||
#: messages.go:190
|
||||
#: messages.go:202
|
||||
msgid "Upload has been processed"
|
||||
msgstr "Tải lên đã được xử lý"
|
||||
|
||||
#: messages.go:191
|
||||
#: messages.go:203
|
||||
msgid "Selection approved"
|
||||
msgstr "Lựa chọn đã được phê duyệt"
|
||||
|
||||
#: messages.go:192
|
||||
#: messages.go:204
|
||||
msgid "Selection archived"
|
||||
msgstr "Đã lưu trữ lựa chọn"
|
||||
|
||||
#: messages.go:193
|
||||
#: messages.go:205
|
||||
msgid "Selection restored"
|
||||
msgstr "Đã khôi phục lựa chọn"
|
||||
|
||||
#: messages.go:194
|
||||
#: messages.go:206
|
||||
msgid "Selection marked as private"
|
||||
msgstr "Lựa chọn được đánh dấu là riêng tư"
|
||||
|
||||
#: messages.go:195
|
||||
#: messages.go:207
|
||||
msgid "Albums deleted"
|
||||
msgstr "Album đã bị xóa"
|
||||
|
||||
#: messages.go:196
|
||||
#: messages.go:208
|
||||
#, c-format
|
||||
msgid "Zip created in %d s"
|
||||
msgstr "Zip được tạo trong %d giây"
|
||||
|
||||
#: messages.go:197
|
||||
#: messages.go:209
|
||||
msgid "Permanently deleted"
|
||||
msgstr "Đã xóa vĩnh viễn"
|
||||
|
||||
#: messages.go:198
|
||||
#: messages.go:210
|
||||
#, c-format
|
||||
msgid "%s has been restored"
|
||||
msgstr "%s đã được khôi phục"
|
||||
|
||||
#: messages.go:199
|
||||
#: messages.go:211
|
||||
msgid "Successfully verified"
|
||||
msgstr "Đã xác minh thành công"
|
||||
|
||||
#: messages.go:200
|
||||
#: messages.go:212
|
||||
msgid "Successfully activated"
|
||||
msgstr "Đã kích hoạt thành công"
|
||||
|
||||
|
|
|
|||
|
|
@ -2,9 +2,10 @@ msgid ""
|
|||
msgstr ""
|
||||
"Project-Id-Version: \n"
|
||||
"Report-Msgid-Bugs-To: \n"
|
||||
"POT-Creation-Date: 2025-10-17 17:32+0000\n"
|
||||
"PO-Revision-Date: 2025-10-22 08:25+0000\n"
|
||||
"Last-Translator: DeepL <noreply-mt-deepl@weblate.org>\n"
|
||||
"POT-Creation-Date: 2026-06-27 09:13+0000\n"
|
||||
"PO-Revision-Date: 2026-06-27 10:28+0000\n"
|
||||
"Last-Translator: Google Cloud Translation Basic <noreply-mt-google-"
|
||||
"translate@weblate.org>\n"
|
||||
"Language-Team: Chinese (Simplified) <https://translate.photoprism.app/"
|
||||
"projects/photoprism/backend/zh_Hans/>\n"
|
||||
"Language: zh\n"
|
||||
|
|
@ -12,402 +13,418 @@ msgstr ""
|
|||
"Content-Type: text/plain; charset=UTF-8\n"
|
||||
"Content-Transfer-Encoding: 8bit\n"
|
||||
"Plural-Forms: nplurals=1; plural=0;\n"
|
||||
"X-Generator: Weblate 5.13.3\n"
|
||||
"X-Generator: Weblate 2026.5\n"
|
||||
|
||||
#: messages.go:104
|
||||
#: messages.go:112
|
||||
msgid "Something went wrong, try again"
|
||||
msgstr "出错了,再试一次"
|
||||
|
||||
#: messages.go:105
|
||||
#: messages.go:113
|
||||
msgid "Unable to do that"
|
||||
msgstr "无法做到这一点"
|
||||
|
||||
#: messages.go:106
|
||||
#: messages.go:114
|
||||
msgid "Changes could not be saved"
|
||||
msgstr "无法保存变更"
|
||||
|
||||
#: messages.go:107
|
||||
#: messages.go:115
|
||||
msgid "Could not be deleted"
|
||||
msgstr "无法删除"
|
||||
|
||||
#: messages.go:108
|
||||
#: messages.go:116
|
||||
#, c-format
|
||||
msgid "%s already exists"
|
||||
msgstr "%s 已存在"
|
||||
|
||||
#: messages.go:109
|
||||
#: messages.go:117
|
||||
msgid "Not found"
|
||||
msgstr "未找到"
|
||||
|
||||
#: messages.go:110
|
||||
#: messages.go:118
|
||||
msgid "File not found"
|
||||
msgstr "未找到文件"
|
||||
|
||||
#: messages.go:111
|
||||
#: messages.go:119
|
||||
msgid "File too large"
|
||||
msgstr "文件过大"
|
||||
|
||||
#: messages.go:112
|
||||
#: messages.go:120
|
||||
msgid "Unsupported"
|
||||
msgstr "不支持"
|
||||
|
||||
#: messages.go:113
|
||||
#: messages.go:121
|
||||
msgid "Unsupported type"
|
||||
msgstr "不支持的类型"
|
||||
|
||||
#: messages.go:114
|
||||
#: messages.go:122
|
||||
msgid "Unsupported format"
|
||||
msgstr "不支持的格式"
|
||||
|
||||
#: messages.go:115
|
||||
#: messages.go:123
|
||||
msgid "Originals folder is empty"
|
||||
msgstr "原件文件夹是空的"
|
||||
|
||||
#: messages.go:116
|
||||
#: messages.go:124
|
||||
msgid "Selection not found"
|
||||
msgstr "未找到所选内容"
|
||||
|
||||
#: messages.go:117
|
||||
#: messages.go:125
|
||||
msgid "Entity not found"
|
||||
msgstr "未找到实体"
|
||||
|
||||
#: messages.go:118
|
||||
#: messages.go:126
|
||||
msgid "Account not found"
|
||||
msgstr "未找到账户"
|
||||
|
||||
#: messages.go:119
|
||||
#: messages.go:127
|
||||
msgid "User not found"
|
||||
msgstr "未找到用户"
|
||||
|
||||
#: messages.go:120
|
||||
#: messages.go:128
|
||||
msgid "Label not found"
|
||||
msgstr "未找到标签"
|
||||
|
||||
#: messages.go:121
|
||||
#: messages.go:129
|
||||
msgid "Camera not found"
|
||||
msgstr "未找到摄像头"
|
||||
|
||||
#: messages.go:130
|
||||
msgid "Lens not found"
|
||||
msgstr "未找到镜头"
|
||||
|
||||
#: messages.go:131
|
||||
msgid "Album not found"
|
||||
msgstr "未找到相册"
|
||||
|
||||
#: messages.go:122
|
||||
#: messages.go:132
|
||||
msgid "Subject not found"
|
||||
msgstr "未找到主题"
|
||||
|
||||
#: messages.go:123
|
||||
#: messages.go:133
|
||||
msgid "Person not found"
|
||||
msgstr "未找到人物"
|
||||
|
||||
#: messages.go:124
|
||||
#: messages.go:134
|
||||
msgid "Face not found"
|
||||
msgstr "未找到面孔"
|
||||
|
||||
#: messages.go:125
|
||||
#: messages.go:135
|
||||
msgid "Not available in public mode"
|
||||
msgstr "在公开模式下不可用"
|
||||
|
||||
#: messages.go:126
|
||||
#: messages.go:136
|
||||
msgid "Not available in read-only mode"
|
||||
msgstr "在只读模式下不可用"
|
||||
|
||||
#: messages.go:127
|
||||
#: messages.go:137
|
||||
msgid "Please log in to your account"
|
||||
msgstr "请登录你的账户"
|
||||
|
||||
#: messages.go:128
|
||||
#: messages.go:138
|
||||
msgid "Permission denied"
|
||||
msgstr "没有权限"
|
||||
|
||||
#: messages.go:129
|
||||
#: messages.go:139
|
||||
msgid "Payment required"
|
||||
msgstr "需要付款"
|
||||
|
||||
#: messages.go:130
|
||||
#: messages.go:140
|
||||
msgid "Upload might be offensive"
|
||||
msgstr "上传内容可能具有冒犯性"
|
||||
|
||||
#: messages.go:131
|
||||
#: messages.go:141
|
||||
msgid "Upload failed"
|
||||
msgstr "上传失败"
|
||||
|
||||
#: messages.go:132
|
||||
#: messages.go:142
|
||||
msgid "No items selected"
|
||||
msgstr "未选择任何项目"
|
||||
|
||||
#: messages.go:133
|
||||
#: messages.go:143
|
||||
msgid "Failed creating file, please check permissions"
|
||||
msgstr "创建文件失败,请检查权限"
|
||||
|
||||
#: messages.go:134
|
||||
#: messages.go:144
|
||||
msgid "Failed creating folder, please check permissions"
|
||||
msgstr "创建目录失败,请检查权限"
|
||||
|
||||
#: messages.go:135
|
||||
#: messages.go:145
|
||||
msgid "Could not connect, please try again"
|
||||
msgstr "无法连接,请重试"
|
||||
|
||||
#: messages.go:136
|
||||
#: messages.go:146
|
||||
msgid "Enter verification code"
|
||||
msgstr "输入验证码"
|
||||
|
||||
#: messages.go:137
|
||||
#: messages.go:147
|
||||
msgid "Invalid verification code, please try again"
|
||||
msgstr "验证码无效,请重试"
|
||||
|
||||
#: messages.go:138
|
||||
#: messages.go:148
|
||||
msgid "Invalid password, please try again"
|
||||
msgstr "无效密码,请重试"
|
||||
|
||||
#: messages.go:139
|
||||
#: messages.go:149
|
||||
msgid "Feature disabled"
|
||||
msgstr "功能已禁用"
|
||||
|
||||
#: messages.go:140
|
||||
#: messages.go:150
|
||||
msgid "No labels selected"
|
||||
msgstr "未选择标签"
|
||||
|
||||
#: messages.go:141
|
||||
#: messages.go:151
|
||||
msgid "No albums selected"
|
||||
msgstr "未选择相册"
|
||||
|
||||
#: messages.go:142
|
||||
#: messages.go:152
|
||||
msgid "No files available for download"
|
||||
msgstr "没有可供下载的文件"
|
||||
|
||||
#: messages.go:143
|
||||
#: messages.go:153
|
||||
msgid "Failed to create zip file"
|
||||
msgstr "创建压缩文件失败"
|
||||
|
||||
#: messages.go:144
|
||||
#: messages.go:154
|
||||
msgid "Invalid credentials"
|
||||
msgstr "无效凭证"
|
||||
|
||||
#: messages.go:145
|
||||
#: messages.go:155
|
||||
msgid "Invalid link"
|
||||
msgstr "无效链接"
|
||||
|
||||
#: messages.go:146
|
||||
#: messages.go:156
|
||||
msgid "Invalid name"
|
||||
msgstr "无效名称"
|
||||
|
||||
#: messages.go:147
|
||||
#: messages.go:157
|
||||
msgid "Busy, please try again later"
|
||||
msgstr "忙碌中,请稍后重试"
|
||||
|
||||
#: messages.go:148
|
||||
#: messages.go:158
|
||||
#, c-format
|
||||
msgid "The wakeup interval is %s, but must be 1h or less"
|
||||
msgstr "唤醒间隔为 %s,但必须小于等于 1 小时"
|
||||
|
||||
#: messages.go:149
|
||||
#: messages.go:159
|
||||
msgid "Your account could not be connected"
|
||||
msgstr "你的账户无法连接"
|
||||
|
||||
#: messages.go:150
|
||||
#: messages.go:160
|
||||
msgid "Too many requests"
|
||||
msgstr "请求太多"
|
||||
|
||||
#: messages.go:151
|
||||
#: messages.go:161
|
||||
msgid "Insufficient storage"
|
||||
msgstr "存储不足"
|
||||
|
||||
#: messages.go:152
|
||||
#: messages.go:162
|
||||
msgid "Quota exceeded"
|
||||
msgstr "超出配额"
|
||||
|
||||
#: messages.go:155
|
||||
#: messages.go:163
|
||||
msgid "Registration disabled"
|
||||
msgstr "注册已禁用"
|
||||
|
||||
#: messages.go:164
|
||||
msgid "Verified email required"
|
||||
msgstr "需要已验证的电子邮件地址"
|
||||
|
||||
#: messages.go:167
|
||||
msgid "Changes successfully saved"
|
||||
msgstr "更改成功保存"
|
||||
|
||||
#: messages.go:156
|
||||
#: messages.go:168
|
||||
msgid "Album created"
|
||||
msgstr "相册已创建"
|
||||
|
||||
#: messages.go:157
|
||||
#: messages.go:169
|
||||
msgid "Album saved"
|
||||
msgstr "相册已保存"
|
||||
|
||||
#: messages.go:158
|
||||
#: messages.go:170
|
||||
#, c-format
|
||||
msgid "Album %s deleted"
|
||||
msgstr "相册 %s 已删除"
|
||||
|
||||
#: messages.go:159
|
||||
#: messages.go:171
|
||||
msgid "Album contents cloned"
|
||||
msgstr "相册内容已复制"
|
||||
|
||||
#: messages.go:160
|
||||
#: messages.go:172
|
||||
msgid "File removed from stack"
|
||||
msgstr "文件已从堆中移除"
|
||||
|
||||
#: messages.go:161
|
||||
#: messages.go:173
|
||||
msgid "File deleted"
|
||||
msgstr "文件已删除"
|
||||
|
||||
#: messages.go:162
|
||||
#: messages.go:174
|
||||
#, c-format
|
||||
msgid "Selection added to %s"
|
||||
msgstr "所选项目已加入 %s"
|
||||
|
||||
#: messages.go:163
|
||||
#: messages.go:175
|
||||
#, c-format
|
||||
msgid "One entry added to %s"
|
||||
msgstr "条目已添加到 %s"
|
||||
|
||||
#: messages.go:164
|
||||
#: messages.go:176
|
||||
#, c-format
|
||||
msgid "%d entries added to %s"
|
||||
msgstr "%d 个条目已添加到 %s"
|
||||
|
||||
#: messages.go:165
|
||||
#: messages.go:177
|
||||
#, c-format
|
||||
msgid "One entry removed from %s"
|
||||
msgstr "条目已从 %s 移除"
|
||||
|
||||
#: messages.go:166
|
||||
#: messages.go:178
|
||||
#, c-format
|
||||
msgid "%d entries removed from %s"
|
||||
msgstr "%d 个条目已从 %s 移除"
|
||||
|
||||
#: messages.go:167
|
||||
#: messages.go:179
|
||||
msgid "Account created"
|
||||
msgstr "账户已创建"
|
||||
|
||||
#: messages.go:168
|
||||
#: messages.go:180
|
||||
msgid "Account saved"
|
||||
msgstr "账户已保存"
|
||||
|
||||
#: messages.go:169
|
||||
#: messages.go:181
|
||||
msgid "Account deleted"
|
||||
msgstr "账户已删除"
|
||||
|
||||
#: messages.go:170
|
||||
#: messages.go:182
|
||||
msgid "Settings saved"
|
||||
msgstr "设置已保存"
|
||||
|
||||
#: messages.go:171
|
||||
#: messages.go:183
|
||||
msgid "Password changed"
|
||||
msgstr "密码已更改"
|
||||
|
||||
#: messages.go:172
|
||||
#: messages.go:184
|
||||
#, c-format
|
||||
msgid "Import completed in %d s"
|
||||
msgstr "导入成功,耗时 %d 秒"
|
||||
|
||||
#: messages.go:173
|
||||
#: messages.go:185
|
||||
msgid "Import canceled"
|
||||
msgstr "导入已取消"
|
||||
|
||||
#: messages.go:174
|
||||
#: messages.go:186
|
||||
#, c-format
|
||||
msgid "Indexing completed in %d s"
|
||||
msgstr "索引成功,耗时 %d 秒"
|
||||
|
||||
#: messages.go:175
|
||||
#: messages.go:187
|
||||
msgid "Indexing originals..."
|
||||
msgstr "索引源文件..."
|
||||
|
||||
#: messages.go:176
|
||||
#: messages.go:188
|
||||
#, c-format
|
||||
msgid "Indexing files in %s"
|
||||
msgstr "索引 %s 中的文件"
|
||||
|
||||
#: messages.go:177
|
||||
#: messages.go:189
|
||||
msgid "Indexing canceled"
|
||||
msgstr "索引已取消"
|
||||
|
||||
#: messages.go:178
|
||||
#: messages.go:190
|
||||
#, c-format
|
||||
msgid "Removed %d files and %d photos"
|
||||
msgstr "移除了 %d 个文件和 %d 张照片"
|
||||
|
||||
#: messages.go:179
|
||||
#: messages.go:191
|
||||
#, c-format
|
||||
msgid "Moving files from %s"
|
||||
msgstr "正在从 %s 中移动文件"
|
||||
|
||||
#: messages.go:180
|
||||
#: messages.go:192
|
||||
#, c-format
|
||||
msgid "Copying files from %s"
|
||||
msgstr "正在从 %s 中复制文件"
|
||||
|
||||
#: messages.go:181
|
||||
#: messages.go:193
|
||||
msgid "Labels deleted"
|
||||
msgstr "标签已移除"
|
||||
|
||||
#: messages.go:182
|
||||
#: messages.go:194
|
||||
msgid "Label saved"
|
||||
msgstr "标签已保存"
|
||||
|
||||
#: messages.go:183
|
||||
#: messages.go:195
|
||||
msgid "Subject saved"
|
||||
msgstr "主题已保存"
|
||||
|
||||
#: messages.go:184
|
||||
#: messages.go:196
|
||||
msgid "Subject deleted"
|
||||
msgstr "主题已删除"
|
||||
|
||||
#: messages.go:185
|
||||
#: messages.go:197
|
||||
msgid "Person saved"
|
||||
msgstr "人物已保存"
|
||||
|
||||
#: messages.go:186
|
||||
#: messages.go:198
|
||||
msgid "Person deleted"
|
||||
msgstr "人物已删除"
|
||||
|
||||
#: messages.go:187
|
||||
#: messages.go:199
|
||||
msgid "File uploaded"
|
||||
msgstr "已上传文件"
|
||||
|
||||
#: messages.go:188
|
||||
#: messages.go:200
|
||||
#, c-format
|
||||
msgid "%d files uploaded in %d s"
|
||||
msgstr "已上传 %d 个文件,耗时 %d 秒"
|
||||
|
||||
#: messages.go:189
|
||||
#: messages.go:201
|
||||
msgid "Processing upload..."
|
||||
msgstr "处理上传..."
|
||||
|
||||
#: messages.go:190
|
||||
#: messages.go:202
|
||||
msgid "Upload has been processed"
|
||||
msgstr "上传已被处理"
|
||||
|
||||
#: messages.go:191
|
||||
#: messages.go:203
|
||||
msgid "Selection approved"
|
||||
msgstr "所选项已批准"
|
||||
|
||||
#: messages.go:192
|
||||
#: messages.go:204
|
||||
msgid "Selection archived"
|
||||
msgstr "所选项已归档"
|
||||
|
||||
#: messages.go:193
|
||||
#: messages.go:205
|
||||
msgid "Selection restored"
|
||||
msgstr "所选项已恢复"
|
||||
|
||||
#: messages.go:194
|
||||
#: messages.go:206
|
||||
msgid "Selection marked as private"
|
||||
msgstr "所选项已设为私有"
|
||||
|
||||
#: messages.go:195
|
||||
#: messages.go:207
|
||||
msgid "Albums deleted"
|
||||
msgstr "相册已删除"
|
||||
|
||||
#: messages.go:196
|
||||
#: messages.go:208
|
||||
#, c-format
|
||||
msgid "Zip created in %d s"
|
||||
msgstr "Zip 文件创建成功,耗时 %d 秒"
|
||||
|
||||
#: messages.go:197
|
||||
#: messages.go:209
|
||||
msgid "Permanently deleted"
|
||||
msgstr "已永久删除"
|
||||
|
||||
#: messages.go:198
|
||||
#: messages.go:210
|
||||
#, c-format
|
||||
msgid "%s has been restored"
|
||||
msgstr "%s 已恢复"
|
||||
|
||||
#: messages.go:199
|
||||
#: messages.go:211
|
||||
msgid "Successfully verified"
|
||||
msgstr "验证成功"
|
||||
|
||||
#: messages.go:200
|
||||
#: messages.go:212
|
||||
msgid "Successfully activated"
|
||||
msgstr "已成功激活"
|
||||
|
||||
|
|
|
|||
|
|
@ -2,8 +2,8 @@ msgid ""
|
|||
msgstr ""
|
||||
"Project-Id-Version: \n"
|
||||
"Report-Msgid-Bugs-To: \n"
|
||||
"POT-Creation-Date: 2025-10-17 17:32+0000\n"
|
||||
"PO-Revision-Date: 2025-10-22 08:25+0000\n"
|
||||
"POT-Creation-Date: 2026-06-27 09:13+0000\n"
|
||||
"PO-Revision-Date: 2026-06-27 10:28+0000\n"
|
||||
"Last-Translator: Google Cloud Translation Basic <noreply-mt-google-"
|
||||
"translate@weblate.org>\n"
|
||||
"Language-Team: Chinese (Traditional) <https://translate.photoprism.app/"
|
||||
|
|
@ -13,402 +13,418 @@ msgstr ""
|
|||
"Content-Type: text/plain; charset=UTF-8\n"
|
||||
"Content-Transfer-Encoding: 8bit\n"
|
||||
"Plural-Forms: nplurals=1; plural=0;\n"
|
||||
"X-Generator: Weblate 5.13.3\n"
|
||||
"X-Generator: Weblate 2026.5\n"
|
||||
|
||||
#: messages.go:104
|
||||
#: messages.go:112
|
||||
msgid "Something went wrong, try again"
|
||||
msgstr "出错了,再试一次"
|
||||
|
||||
#: messages.go:105
|
||||
#: messages.go:113
|
||||
msgid "Unable to do that"
|
||||
msgstr "无法做到这一点"
|
||||
|
||||
#: messages.go:106
|
||||
#: messages.go:114
|
||||
msgid "Changes could not be saved"
|
||||
msgstr "無法儲存更改項目"
|
||||
|
||||
#: messages.go:107
|
||||
#: messages.go:115
|
||||
msgid "Could not be deleted"
|
||||
msgstr "無法刪除"
|
||||
|
||||
#: messages.go:108
|
||||
#: messages.go:116
|
||||
#, c-format
|
||||
msgid "%s already exists"
|
||||
msgstr "%s 已存在"
|
||||
|
||||
#: messages.go:109
|
||||
#: messages.go:117
|
||||
msgid "Not found"
|
||||
msgstr "未找到"
|
||||
|
||||
#: messages.go:110
|
||||
#: messages.go:118
|
||||
msgid "File not found"
|
||||
msgstr "未找到檔案"
|
||||
|
||||
#: messages.go:111
|
||||
#: messages.go:119
|
||||
msgid "File too large"
|
||||
msgstr "文件過大"
|
||||
|
||||
#: messages.go:112
|
||||
#: messages.go:120
|
||||
msgid "Unsupported"
|
||||
msgstr "不支援"
|
||||
|
||||
#: messages.go:113
|
||||
#: messages.go:121
|
||||
msgid "Unsupported type"
|
||||
msgstr "不支援的類型"
|
||||
|
||||
#: messages.go:114
|
||||
#: messages.go:122
|
||||
msgid "Unsupported format"
|
||||
msgstr "不支持的格式"
|
||||
|
||||
#: messages.go:115
|
||||
#: messages.go:123
|
||||
msgid "Originals folder is empty"
|
||||
msgstr "原稿文件夾是空的"
|
||||
|
||||
#: messages.go:116
|
||||
#: messages.go:124
|
||||
msgid "Selection not found"
|
||||
msgstr "未找到選取項目"
|
||||
|
||||
#: messages.go:117
|
||||
#: messages.go:125
|
||||
msgid "Entity not found"
|
||||
msgstr "未找到實體"
|
||||
|
||||
#: messages.go:118
|
||||
#: messages.go:126
|
||||
msgid "Account not found"
|
||||
msgstr "未找到帳號"
|
||||
|
||||
#: messages.go:119
|
||||
#: messages.go:127
|
||||
msgid "User not found"
|
||||
msgstr "未找到使用者"
|
||||
|
||||
#: messages.go:120
|
||||
#: messages.go:128
|
||||
msgid "Label not found"
|
||||
msgstr "未找到標籤"
|
||||
|
||||
#: messages.go:121
|
||||
#: messages.go:129
|
||||
msgid "Camera not found"
|
||||
msgstr "未找到攝影機"
|
||||
|
||||
#: messages.go:130
|
||||
msgid "Lens not found"
|
||||
msgstr "未找到鏡頭"
|
||||
|
||||
#: messages.go:131
|
||||
msgid "Album not found"
|
||||
msgstr "未找到相簿"
|
||||
|
||||
#: messages.go:122
|
||||
#: messages.go:132
|
||||
msgid "Subject not found"
|
||||
msgstr "未找到主體"
|
||||
|
||||
#: messages.go:123
|
||||
#: messages.go:133
|
||||
msgid "Person not found"
|
||||
msgstr "找不到人"
|
||||
|
||||
#: messages.go:124
|
||||
#: messages.go:134
|
||||
msgid "Face not found"
|
||||
msgstr "找不到面貌"
|
||||
|
||||
#: messages.go:125
|
||||
#: messages.go:135
|
||||
msgid "Not available in public mode"
|
||||
msgstr "不適用於公開模式"
|
||||
|
||||
#: messages.go:126
|
||||
#: messages.go:136
|
||||
msgid "Not available in read-only mode"
|
||||
msgstr "不適用於唯讀模式"
|
||||
|
||||
#: messages.go:127
|
||||
#: messages.go:137
|
||||
msgid "Please log in to your account"
|
||||
msgstr "請登入您的帳戶"
|
||||
|
||||
#: messages.go:128
|
||||
#: messages.go:138
|
||||
msgid "Permission denied"
|
||||
msgstr "權限遭拒"
|
||||
|
||||
#: messages.go:129
|
||||
#: messages.go:139
|
||||
msgid "Payment required"
|
||||
msgstr "需要付款"
|
||||
|
||||
#: messages.go:130
|
||||
#: messages.go:140
|
||||
msgid "Upload might be offensive"
|
||||
msgstr "所上傳檔案可能會冒犯其他人"
|
||||
|
||||
#: messages.go:131
|
||||
#: messages.go:141
|
||||
msgid "Upload failed"
|
||||
msgstr "上傳失敗"
|
||||
|
||||
#: messages.go:132
|
||||
#: messages.go:142
|
||||
msgid "No items selected"
|
||||
msgstr "未選取任何項目"
|
||||
|
||||
#: messages.go:133
|
||||
#: messages.go:143
|
||||
msgid "Failed creating file, please check permissions"
|
||||
msgstr "建立文件失敗,請檢查權限"
|
||||
|
||||
#: messages.go:134
|
||||
#: messages.go:144
|
||||
msgid "Failed creating folder, please check permissions"
|
||||
msgstr "建立目錄失敗,請檢查權限"
|
||||
|
||||
#: messages.go:135
|
||||
#: messages.go:145
|
||||
msgid "Could not connect, please try again"
|
||||
msgstr "無法連線,請重試"
|
||||
|
||||
#: messages.go:136
|
||||
#: messages.go:146
|
||||
msgid "Enter verification code"
|
||||
msgstr "輸入驗證碼"
|
||||
|
||||
#: messages.go:137
|
||||
#: messages.go:147
|
||||
msgid "Invalid verification code, please try again"
|
||||
msgstr "驗證碼無效,請重試"
|
||||
|
||||
#: messages.go:138
|
||||
#: messages.go:148
|
||||
msgid "Invalid password, please try again"
|
||||
msgstr "密碼無效,請重試"
|
||||
|
||||
#: messages.go:139
|
||||
#: messages.go:149
|
||||
msgid "Feature disabled"
|
||||
msgstr "功能未開啟"
|
||||
|
||||
#: messages.go:140
|
||||
#: messages.go:150
|
||||
msgid "No labels selected"
|
||||
msgstr "未選擇標籤"
|
||||
|
||||
#: messages.go:141
|
||||
#: messages.go:151
|
||||
msgid "No albums selected"
|
||||
msgstr "未選取相簿"
|
||||
|
||||
#: messages.go:142
|
||||
#: messages.go:152
|
||||
msgid "No files available for download"
|
||||
msgstr "没有可以下載的檔案"
|
||||
|
||||
#: messages.go:143
|
||||
#: messages.go:153
|
||||
msgid "Failed to create zip file"
|
||||
msgstr "建立 zip 檔失敗"
|
||||
|
||||
#: messages.go:144
|
||||
#: messages.go:154
|
||||
msgid "Invalid credentials"
|
||||
msgstr "認證無效"
|
||||
|
||||
#: messages.go:145
|
||||
#: messages.go:155
|
||||
msgid "Invalid link"
|
||||
msgstr "超連結無效"
|
||||
|
||||
#: messages.go:146
|
||||
#: messages.go:156
|
||||
msgid "Invalid name"
|
||||
msgstr "無效名稱"
|
||||
|
||||
#: messages.go:147
|
||||
#: messages.go:157
|
||||
msgid "Busy, please try again later"
|
||||
msgstr "忙碌中,請稍候再試"
|
||||
|
||||
#: messages.go:148
|
||||
#: messages.go:158
|
||||
#, c-format
|
||||
msgid "The wakeup interval is %s, but must be 1h or less"
|
||||
msgstr "喚醒間隔為 %s,但必須少於1 小時"
|
||||
|
||||
#: messages.go:149
|
||||
#: messages.go:159
|
||||
msgid "Your account could not be connected"
|
||||
msgstr "您的賬戶無法連接"
|
||||
|
||||
#: messages.go:150
|
||||
#: messages.go:160
|
||||
msgid "Too many requests"
|
||||
msgstr "请求太多"
|
||||
|
||||
#: messages.go:151
|
||||
#: messages.go:161
|
||||
msgid "Insufficient storage"
|
||||
msgstr "儲存空間不足"
|
||||
|
||||
#: messages.go:152
|
||||
#: messages.go:162
|
||||
msgid "Quota exceeded"
|
||||
msgstr "超過配額"
|
||||
|
||||
#: messages.go:155
|
||||
#: messages.go:163
|
||||
msgid "Registration disabled"
|
||||
msgstr "註冊已停用"
|
||||
|
||||
#: messages.go:164
|
||||
msgid "Verified email required"
|
||||
msgstr "需要已驗證的電子郵件地址"
|
||||
|
||||
#: messages.go:167
|
||||
msgid "Changes successfully saved"
|
||||
msgstr "成功儲存變更"
|
||||
|
||||
#: messages.go:156
|
||||
#: messages.go:168
|
||||
msgid "Album created"
|
||||
msgstr "相簿已建立"
|
||||
|
||||
#: messages.go:157
|
||||
#: messages.go:169
|
||||
msgid "Album saved"
|
||||
msgstr "相簿已儲存"
|
||||
|
||||
#: messages.go:158
|
||||
#: messages.go:170
|
||||
#, c-format
|
||||
msgid "Album %s deleted"
|
||||
msgstr "相簿 %s 已刪除"
|
||||
|
||||
#: messages.go:159
|
||||
#: messages.go:171
|
||||
msgid "Album contents cloned"
|
||||
msgstr "相簿内容已被複製"
|
||||
|
||||
#: messages.go:160
|
||||
#: messages.go:172
|
||||
msgid "File removed from stack"
|
||||
msgstr "檔案已從堆疊中移除"
|
||||
|
||||
#: messages.go:161
|
||||
#: messages.go:173
|
||||
msgid "File deleted"
|
||||
msgstr "檔案已刪除"
|
||||
|
||||
#: messages.go:162
|
||||
#: messages.go:174
|
||||
#, c-format
|
||||
msgid "Selection added to %s"
|
||||
msgstr "選取項目已加入 %s"
|
||||
|
||||
#: messages.go:163
|
||||
#: messages.go:175
|
||||
#, c-format
|
||||
msgid "One entry added to %s"
|
||||
msgstr "已在 %s 增加一個項目"
|
||||
|
||||
#: messages.go:164
|
||||
#: messages.go:176
|
||||
#, c-format
|
||||
msgid "%d entries added to %s"
|
||||
msgstr "%d個項目已加入%s"
|
||||
|
||||
#: messages.go:165
|
||||
#: messages.go:177
|
||||
#, c-format
|
||||
msgid "One entry removed from %s"
|
||||
msgstr "已從 %s 移除一個項目"
|
||||
|
||||
#: messages.go:166
|
||||
#: messages.go:178
|
||||
#, c-format
|
||||
msgid "%d entries removed from %s"
|
||||
msgstr "%d 個項目已從 %s 移除"
|
||||
|
||||
#: messages.go:167
|
||||
#: messages.go:179
|
||||
msgid "Account created"
|
||||
msgstr "帳號已建立"
|
||||
|
||||
#: messages.go:168
|
||||
#: messages.go:180
|
||||
msgid "Account saved"
|
||||
msgstr "帳號已儲存"
|
||||
|
||||
#: messages.go:169
|
||||
#: messages.go:181
|
||||
msgid "Account deleted"
|
||||
msgstr "帳號已刪除"
|
||||
|
||||
#: messages.go:170
|
||||
#: messages.go:182
|
||||
msgid "Settings saved"
|
||||
msgstr "設定已儲存"
|
||||
|
||||
#: messages.go:171
|
||||
#: messages.go:183
|
||||
msgid "Password changed"
|
||||
msgstr "密碼已更改"
|
||||
|
||||
#: messages.go:172
|
||||
#: messages.go:184
|
||||
#, c-format
|
||||
msgid "Import completed in %d s"
|
||||
msgstr "匯入成功, 共用 %d 秒"
|
||||
|
||||
#: messages.go:173
|
||||
#: messages.go:185
|
||||
msgid "Import canceled"
|
||||
msgstr "匯入取消"
|
||||
|
||||
#: messages.go:174
|
||||
#: messages.go:186
|
||||
#, c-format
|
||||
msgid "Indexing completed in %d s"
|
||||
msgstr "索引建立成功, 共用 %d 秒"
|
||||
|
||||
#: messages.go:175
|
||||
#: messages.go:187
|
||||
msgid "Indexing originals..."
|
||||
msgstr "索引原始檔案..."
|
||||
|
||||
#: messages.go:176
|
||||
#: messages.go:188
|
||||
#, c-format
|
||||
msgid "Indexing files in %s"
|
||||
msgstr "建立 %s 中的檔案索引"
|
||||
|
||||
#: messages.go:177
|
||||
#: messages.go:189
|
||||
msgid "Indexing canceled"
|
||||
msgstr "建立索引取消"
|
||||
|
||||
#: messages.go:178
|
||||
#: messages.go:190
|
||||
#, c-format
|
||||
msgid "Removed %d files and %d photos"
|
||||
msgstr "刪除了 %d 個檔案和 %d 張照片"
|
||||
|
||||
#: messages.go:179
|
||||
#: messages.go:191
|
||||
#, c-format
|
||||
msgid "Moving files from %s"
|
||||
msgstr "正在從 %s 中移動檔案"
|
||||
|
||||
#: messages.go:180
|
||||
#: messages.go:192
|
||||
#, c-format
|
||||
msgid "Copying files from %s"
|
||||
msgstr "正在從 %s 中複製檔案"
|
||||
|
||||
#: messages.go:181
|
||||
#: messages.go:193
|
||||
msgid "Labels deleted"
|
||||
msgstr "已刪除標籤"
|
||||
|
||||
#: messages.go:182
|
||||
#: messages.go:194
|
||||
msgid "Label saved"
|
||||
msgstr "標籤已儲存"
|
||||
|
||||
#: messages.go:183
|
||||
#: messages.go:195
|
||||
msgid "Subject saved"
|
||||
msgstr "主題已儲存"
|
||||
|
||||
#: messages.go:184
|
||||
#: messages.go:196
|
||||
msgid "Subject deleted"
|
||||
msgstr "主題已刪除"
|
||||
|
||||
#: messages.go:185
|
||||
#: messages.go:197
|
||||
msgid "Person saved"
|
||||
msgstr "人物已儲存"
|
||||
|
||||
#: messages.go:186
|
||||
#: messages.go:198
|
||||
msgid "Person deleted"
|
||||
msgstr "人物已刪除"
|
||||
|
||||
#: messages.go:187
|
||||
#: messages.go:199
|
||||
msgid "File uploaded"
|
||||
msgstr "檔案上傳成功"
|
||||
|
||||
#: messages.go:188
|
||||
#: messages.go:200
|
||||
#, c-format
|
||||
msgid "%d files uploaded in %d s"
|
||||
msgstr "已上傳 %d 個檔案, 共用 %d 秒"
|
||||
|
||||
#: messages.go:189
|
||||
#: messages.go:201
|
||||
msgid "Processing upload..."
|
||||
msgstr "正在處理上傳..."
|
||||
|
||||
#: messages.go:190
|
||||
#: messages.go:202
|
||||
msgid "Upload has been processed"
|
||||
msgstr "上傳已處理完畢"
|
||||
|
||||
#: messages.go:191
|
||||
#: messages.go:203
|
||||
msgid "Selection approved"
|
||||
msgstr "選取項目已認可"
|
||||
|
||||
#: messages.go:192
|
||||
#: messages.go:204
|
||||
msgid "Selection archived"
|
||||
msgstr "選取項目已封存"
|
||||
|
||||
#: messages.go:193
|
||||
#: messages.go:205
|
||||
msgid "Selection restored"
|
||||
msgstr "選取項目已被復原"
|
||||
|
||||
#: messages.go:194
|
||||
#: messages.go:206
|
||||
msgid "Selection marked as private"
|
||||
msgstr "選取項目已設為私人"
|
||||
|
||||
#: messages.go:195
|
||||
#: messages.go:207
|
||||
msgid "Albums deleted"
|
||||
msgstr "相簿已刪除"
|
||||
|
||||
#: messages.go:196
|
||||
#: messages.go:208
|
||||
#, c-format
|
||||
msgid "Zip created in %d s"
|
||||
msgstr "Zip檔建立成功, 共用 %d 秒"
|
||||
|
||||
#: messages.go:197
|
||||
#: messages.go:209
|
||||
msgid "Permanently deleted"
|
||||
msgstr "永久刪除"
|
||||
|
||||
#: messages.go:198
|
||||
#: messages.go:210
|
||||
#, c-format
|
||||
msgid "%s has been restored"
|
||||
msgstr "%s 已被回復"
|
||||
|
||||
#: messages.go:199
|
||||
#: messages.go:211
|
||||
msgid "Successfully verified"
|
||||
msgstr "驗證成功"
|
||||
|
||||
#: messages.go:200
|
||||
#: messages.go:212
|
||||
msgid "Successfully activated"
|
||||
msgstr "激活成功"
|
||||
|
||||
|
|
|
|||
|
Before Width: | Height: | Size: 62 KiB After Width: | Height: | Size: 62 KiB |
|
Before Width: | Height: | Size: 159 KiB After Width: | Height: | Size: 159 KiB |
|
Before Width: | Height: | Size: 58 KiB After Width: | Height: | Size: 58 KiB |
|
Before Width: | Height: | Size: 58 KiB After Width: | Height: | Size: 58 KiB |
|
Before Width: | Height: | Size: 58 KiB After Width: | Height: | Size: 58 KiB |
|
Before Width: | Height: | Size: 65 KiB After Width: | Height: | Size: 65 KiB |
|
Before Width: | Height: | Size: 54 KiB After Width: | Height: | Size: 54 KiB |