mirror of
https://github.com/Donkie/Spoolman.git
synced 2026-10-19 08:39:58 -05:00
Compare commits
538
Commits
auth-system
...
master
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
362d80e55d | ||
|
|
5fc8e6cf42 | ||
|
|
b7a282d2eb | ||
|
|
c979e63513 | ||
|
|
0e88109cc6 | ||
|
|
ed9124cb06 | ||
|
|
f399855d3b | ||
|
|
d102f9475b | ||
|
|
61e85c29bf | ||
|
|
ef3dee4728 | ||
|
|
8656e04055 | ||
|
|
744284391d | ||
|
|
f8642bedd6 | ||
|
|
8285a4da45 | ||
|
|
f6f28a8df8 | ||
|
|
abdfc73b8d | ||
|
|
90713bf5e2 | ||
|
|
636e12e737 | ||
|
|
896e473807 | ||
|
|
b01e4e5bbe | ||
|
|
c881740e69 | ||
|
|
dc18a3017f | ||
|
|
f7c3988fed | ||
|
|
8d363bbec4 | ||
|
|
57ef303c93 | ||
|
|
bcf340bdc7 | ||
|
|
69e541ce67 | ||
|
|
6746bc4fce | ||
|
|
c492cc05fe | ||
|
|
1b039bca19 | ||
|
|
bd9553342f | ||
|
|
6a9904adbb | ||
|
|
74f93b4afb | ||
|
|
073bf15108 | ||
|
|
15f0124a4c | ||
|
|
1c87bb9c0e | ||
|
|
715cd47b9f | ||
|
|
fa92ab465d | ||
|
|
a9e1802c2a | ||
|
|
72031f0ea5 | ||
|
|
a3977509eb | ||
|
|
3a8ac87b13 | ||
|
|
3e9c3b68bd | ||
|
|
9708d02498 | ||
|
|
58a01e3389 | ||
|
|
bb0bcc1b5f | ||
|
|
6b6c13e4f1 | ||
|
|
b0faab5cfd | ||
|
|
62963935eb | ||
|
|
3f8cb8f1d1 | ||
|
|
89fba3f4a8 | ||
|
|
e72b2d1821 | ||
|
|
4658f42798 | ||
|
|
abe5bd909f | ||
|
|
645ef72937 | ||
|
|
12199575de | ||
|
|
975e0cc702 | ||
|
|
15381fcf01 | ||
|
|
ca007aa561 | ||
|
|
43101b2a2d | ||
|
|
a31beee46b | ||
|
|
6447198fe3 | ||
|
|
c35983ee52 | ||
|
|
1e800ec5f8 | ||
|
|
016ca6791e | ||
|
|
e5944c94e0 | ||
|
|
a35331e50a | ||
|
|
bcc1ba1ace | ||
|
|
629b8228d8 | ||
|
|
7fbe604cc2 | ||
|
|
bff2a485e6 | ||
|
|
7e83451226 | ||
|
|
30928407a7 | ||
|
|
02f5c07c13 | ||
|
|
022285d64d | ||
|
|
6b1e01ecd8 | ||
|
|
594e14b465 | ||
|
|
bce0d8069a | ||
|
|
cc34b8ea24 | ||
|
|
82137bf35b | ||
|
|
7c4dcc7da7 | ||
|
|
dcb4618399 | ||
|
|
7a1114f8fc | ||
|
|
423cf234be | ||
|
|
2c15af00b8 | ||
|
|
ac9a32fa23 | ||
|
|
787d912dec | ||
|
|
8badd51707 | ||
|
|
53f09eb2bc | ||
|
|
b3d35d751d | ||
|
|
9f29826588 | ||
|
|
f7c53187c1 | ||
|
|
1e9d74cd6e | ||
|
|
1a04139c1d | ||
|
|
aae2b4df56 | ||
|
|
e1ad9feb30 | ||
|
|
5b93b3b37e | ||
|
|
bd4b9351aa | ||
|
|
958d5bd9ee | ||
|
|
c9b1215cb6 | ||
|
|
586299aaa6 | ||
|
|
7e98987b87 | ||
|
|
ba62681856 | ||
|
|
05e4da7a10 | ||
|
|
0543b9145b | ||
|
|
25d25e3701 | ||
|
|
a353983f85 | ||
|
|
bed3f14ee7 | ||
|
|
27ea256e2d | ||
|
|
7b82f2afb2 | ||
|
|
45cc8246d3 | ||
|
|
0c4caa527e | ||
|
|
2ab68cdff9 | ||
|
|
fc6aa55d27 | ||
|
|
92e093b16d | ||
|
|
55d11d0dc4 | ||
|
|
6c5d03d4ec | ||
|
|
058490a3c6 | ||
|
|
9131454aa2 | ||
|
|
c73bce4301 | ||
|
|
1c0f668c16 | ||
|
|
de81990a29 | ||
|
|
e4a78bb352 | ||
|
|
196ebd66d0 | ||
|
|
d1f3401b37 | ||
|
|
d848ddef97 | ||
|
|
5c65cb5495 | ||
|
|
72d2cbe986 | ||
|
|
3ecdf5dfc6 | ||
|
|
d5a49e3340 | ||
|
|
83897b9744 | ||
|
|
c386ac34e2 | ||
|
|
205d8fb813 | ||
|
|
c74f77b478 | ||
|
|
a40b20df8c | ||
|
|
dc56305a97 | ||
|
|
ae2319a215 | ||
|
|
9f90c2238d | ||
|
|
c157946eca | ||
|
|
0966ecada9 | ||
|
|
9ae9827f4c | ||
|
|
e9e76a088f | ||
|
|
a4c749ad14 | ||
|
|
994e5d422b | ||
|
|
1db2ed3851 | ||
|
|
b9b5784108 | ||
|
|
c01342d182 | ||
|
|
0388fb60bf | ||
|
|
feb67ab500 | ||
|
|
ed946223d9 | ||
|
|
c405739b1d | ||
|
|
e744049343 | ||
|
|
179fc0a117 | ||
|
|
6520ce6d1b | ||
|
|
83b0238bb4 | ||
|
|
f55188e346 | ||
|
|
4fee8db323 | ||
|
|
81636f253e | ||
|
|
0f705e80c0 | ||
|
|
3c7f68e2bd | ||
|
|
64b29a561b | ||
|
|
8f9c214dac | ||
|
|
1305857efb | ||
|
|
dd5a0a89dc | ||
|
|
1eeb2948b2 | ||
|
|
348499f469 | ||
|
|
d34fb88b31 | ||
|
|
a63af285f5 | ||
|
|
798d8b1ded | ||
|
|
f8ffaa0837 | ||
|
|
09fea9f668 | ||
|
|
789b7fd88f | ||
|
|
5424a638b1 | ||
|
|
c281114c6f | ||
|
|
9566f7848d | ||
|
|
4f9cc1b75d | ||
|
|
42721c7ebc | ||
|
|
d1dc40b3cc | ||
|
|
92be2975b8 | ||
|
|
a62e4ce6c1 | ||
|
|
0a3404cefe | ||
|
|
c2002e43f7 | ||
|
|
85e3ac7163 | ||
|
|
33aa3de515 | ||
|
|
e238592e4d | ||
|
|
107a134da8 | ||
|
|
3cf7a9fa61 | ||
|
|
1e5b28ab7d | ||
|
|
035922b49f | ||
|
|
eced7f22db | ||
|
|
4c2febbba6 | ||
|
|
e37045dcd4 | ||
|
|
f83b9d9ea4 | ||
|
|
0b3d7ba140 | ||
|
|
b6217c4b30 | ||
|
|
09953643dc | ||
|
|
a6512da598 | ||
|
|
6da0902c8e | ||
|
|
6bcda3d307 | ||
|
|
9dd0f73be1 | ||
|
|
5171330c44 | ||
|
|
009f9e3bae | ||
|
|
a039095360 | ||
|
|
205de5f0ce | ||
|
|
05a1b12e33 | ||
|
|
f458995104 | ||
|
|
9f048a34c8 | ||
|
|
ba891d5830 | ||
|
|
f841da6561 | ||
|
|
931e3c9b3b | ||
|
|
9775c2c42e | ||
|
|
a9e50559bb | ||
|
|
91d5dc8f42 | ||
|
|
8528847957 | ||
|
|
5799fac1a6 | ||
|
|
ce1c781ae7 | ||
|
|
dc72f3d5eb | ||
|
|
aa5821f005 | ||
|
|
13f7667bf4 | ||
|
|
ed732170d1 | ||
|
|
8465481ab3 | ||
|
|
9935d74886 | ||
|
|
35d10f899d | ||
|
|
785984e685 | ||
|
|
8b71fb9345 | ||
|
|
9bb8973af2 | ||
|
|
332b3e0fe4 | ||
|
|
8d9eb7395d | ||
|
|
413254b79a | ||
|
|
21c7b98844 | ||
|
|
97758f2c4c | ||
|
|
9aea271ee5 | ||
|
|
6ab045cde8 | ||
|
|
90492ff75d | ||
|
|
1f2670cf81 | ||
|
|
565abec742 | ||
|
|
afb3094c1b | ||
|
|
96065fbd9f | ||
|
|
8d65e53e7c | ||
|
|
48221c270a | ||
|
|
f9c2c3838a | ||
|
|
bd877c1ec7 | ||
|
|
328c508c39 | ||
|
|
052d3e9eb9 | ||
|
|
9a98e8ba5d | ||
|
|
6dce8717a0 | ||
|
|
5b480f7db7 | ||
|
|
1b4beb9593 | ||
|
|
33ad8d7173 | ||
|
|
713cb51f09 | ||
|
|
fa39c6d08e | ||
|
|
61e2c0c27c | ||
|
|
83ea5001fd | ||
|
|
6fd64f9ed4 | ||
|
|
2edd96dbb0 | ||
|
|
61e1b62a38 | ||
|
|
7e2e98b30a | ||
|
|
6d97cd34b3 | ||
|
|
5624a0a605 | ||
|
|
6e289d76ca | ||
|
|
5b39b2848f | ||
|
|
99932ceda8 | ||
|
|
fbaa83eead | ||
|
|
d2db504cc5 | ||
|
|
74a86683b3 | ||
|
|
2434b424db | ||
|
|
678213f67e | ||
|
|
21e0b71efe | ||
|
|
6a786bac88 | ||
|
|
38b77a9b14 | ||
|
|
fb1567a9b0 | ||
|
|
01c7ff65be | ||
|
|
d43552bd26 | ||
|
|
ff2e3ec31a | ||
|
|
5144b64a8a | ||
|
|
9d77b08114 | ||
|
|
b4292398f5 | ||
|
|
9ec5181d4c | ||
|
|
91dec46936 | ||
|
|
d67a2afbe4 | ||
|
|
64e70076f1 | ||
|
|
ac7865ecbc | ||
|
|
419a4763d5 | ||
|
|
3f1d3b4c7b | ||
|
|
1507f9b3b8 | ||
|
|
7f42bd6f02 | ||
|
|
fd9b06d33c | ||
|
|
de533bc74d | ||
|
|
8979f80e74 | ||
|
|
f261dee61b | ||
|
|
422657d18f | ||
|
|
01be8ddd5b | ||
|
|
bf265c12c3 | ||
|
|
c90cc3acab | ||
|
|
9423acbc9e | ||
|
|
05628eb593 | ||
|
|
aac4a26cde | ||
|
|
2d08061c45 | ||
|
|
aec9b276b2 | ||
|
|
0931b03a80 | ||
|
|
740b1ad808 | ||
|
|
379354159a | ||
|
|
e9b06d91c7 | ||
|
|
fb723f0af8 | ||
|
|
93d5e234b6 | ||
|
|
7a31afaa39 | ||
|
|
b2c46e22c7 | ||
|
|
84caec0f81 | ||
|
|
250aa7c308 | ||
|
|
34a990efcf | ||
|
|
7eaf37fa35 | ||
|
|
f462245622 | ||
|
|
a46caaabf5 | ||
|
|
5deb6f8ca6 | ||
|
|
948c95866d | ||
|
|
0cc77dccb3 | ||
|
|
16feb404ba | ||
|
|
3843785690 | ||
|
|
a17e351e25 | ||
|
|
9bcaece766 | ||
|
|
f02ebbc93e | ||
|
|
292f8ee305 | ||
|
|
423c06abc8 | ||
|
|
7dc17f12da | ||
|
|
bfabb54c3c | ||
|
|
dd16672a4a | ||
|
|
587521eff6 | ||
|
|
2c84acfd24 | ||
|
|
43bf140675 | ||
|
|
b6d220a3ef | ||
|
|
421ad925a7 | ||
|
|
01f13357b4 | ||
|
|
e5daed84e6 | ||
|
|
bd244e8387 | ||
|
|
d81e43aa56 | ||
|
|
18e31bf4b1 | ||
|
|
dd8e7868be | ||
|
|
179ea3b4d0 | ||
|
|
64d41c78b3 | ||
|
|
352d36cb86 | ||
|
|
56c181f634 | ||
|
|
8b00fc0d43 | ||
|
|
2225db0b5f | ||
|
|
30fa35d38b | ||
|
|
8680805416 | ||
|
|
aa83c0c1e9 | ||
|
|
7f19ff0952 | ||
|
|
e09d63b443 | ||
|
|
41e6c65199 | ||
|
|
d7c2e52a67 | ||
|
|
4ad904d270 | ||
|
|
9b652b5d77 | ||
|
|
dd13f6ea34 | ||
|
|
4e3e0e849d | ||
|
|
c321346571 | ||
|
|
93f49449a0 | ||
|
|
538c78e7b3 | ||
|
|
bef99d5891 | ||
|
|
2f1a2a2b2d | ||
|
|
633e1fa2b0 | ||
|
|
4c1c905a83 | ||
|
|
71c607122f | ||
|
|
16e34da538 | ||
|
|
3e0a143966 | ||
|
|
b315b63ddc | ||
|
|
590b510f20 | ||
|
|
216eba5d26 | ||
|
|
f38720314b | ||
|
|
910f0b079b | ||
|
|
29113812f3 | ||
|
|
a03229be6f | ||
|
|
007a0e0ff5 | ||
|
|
2d6945f5f6 | ||
|
|
e3800433e7 | ||
|
|
3583c5d011 | ||
|
|
e4813ce86c | ||
|
|
c1a0882ee9 | ||
|
|
52deaf7c8c | ||
|
|
b0c9f572f7 | ||
|
|
5cfdde4cc6 | ||
|
|
dd39a11c7e | ||
|
|
3e1c4ffcd7 | ||
|
|
5208b47007 | ||
|
|
0d73e0d34e | ||
|
|
5e2c4b0c0c | ||
|
|
63eee038d7 | ||
|
|
f38743b179 | ||
|
|
9bf4022776 | ||
|
|
de8c6de460 | ||
|
|
0d75364b07 | ||
|
|
7d07905091 | ||
|
|
08bbd6480b | ||
|
|
86204ffddb | ||
|
|
4be91b365a | ||
|
|
5af5ca17d1 | ||
|
|
8013dd1ce2 | ||
|
|
ee9cf0d830 | ||
|
|
3e8eaf6aaf | ||
|
|
2af3b95d4f | ||
|
|
7707dad1a4 | ||
|
|
8382a9037d | ||
|
|
fc4cf78451 | ||
|
|
13b1ab7f94 | ||
|
|
7262563e4d | ||
|
|
7cf8f6f0eb | ||
|
|
01462d3df3 | ||
|
|
faa4659b6d | ||
|
|
aaa8714f66 | ||
|
|
da5eeef1a0 | ||
|
|
e73f603f39 | ||
|
|
a7be90ef4a | ||
|
|
5b889c2e7a | ||
|
|
796ef5941e | ||
|
|
58f4b13cd2 | ||
|
|
e50c2ec72f | ||
|
|
fcf0e8b145 | ||
|
|
a4c113ba8e | ||
|
|
b12e129e5b | ||
|
|
b2f5088081 | ||
|
|
7aa864e457 | ||
|
|
032b3f05c2 | ||
|
|
7db40b4036 | ||
|
|
4ed1fbfc67 | ||
|
|
155e8f3737 | ||
|
|
b885108a3d | ||
|
|
1d5b8c1d3d | ||
|
|
f2b060f6ca | ||
|
|
9d53a3f292 | ||
|
|
708af05ab2 | ||
|
|
ae12072cdd | ||
|
|
2a03f9f64c | ||
|
|
cefd2caa42 | ||
|
|
3beb2b4483 | ||
|
|
0c3ce54da9 | ||
|
|
ac3ec7d1a2 | ||
|
|
7e4d2ee419 | ||
|
|
46beda2264 | ||
|
|
18f114419f | ||
|
|
3c1d8bfa6d | ||
|
|
20462e86e2 | ||
|
|
a2cfe33cd3 | ||
|
|
f8db2a0f09 | ||
|
|
95230eaa73 | ||
|
|
2cdfcc1bae | ||
|
|
e175708b3e | ||
|
|
a5e4bc0bf3 | ||
|
|
cbc6458c5d | ||
|
|
13b7a9b62f | ||
|
|
7c29d5f54a | ||
|
|
6663a42ab5 | ||
|
|
b34b872140 | ||
|
|
dadc2ba760 | ||
|
|
35cc1c7d43 | ||
|
|
e08c930ef8 | ||
|
|
8318a5f970 | ||
|
|
c7b59fe322 | ||
|
|
c9c59b3d9e | ||
|
|
09c29703f0 | ||
|
|
a8da5e312b | ||
|
|
c8be881e03 | ||
|
|
57f2b30a4c | ||
|
|
7405ce77fd | ||
|
|
673ca1d2fb | ||
|
|
4e1e3c50c9 | ||
|
|
f369253c67 | ||
|
|
dd6b334a79 | ||
|
|
a8b3641a90 | ||
|
|
72daa29cd2 | ||
|
|
7e9533965a | ||
|
|
97524b1107 | ||
|
|
e3dbd3e609 | ||
|
|
388e87ec96 | ||
|
|
ff7170f0f7 | ||
|
|
3c414503d6 | ||
|
|
b00c1b875d | ||
|
|
0c03f8b404 | ||
|
|
67022e7c6d | ||
|
|
4ab99768ae | ||
|
|
c1d5c6b46e | ||
|
|
aad337234e | ||
|
|
9bdf4d1a5e | ||
|
|
24e6f7fd34 | ||
|
|
f4eba480d6 | ||
|
|
59672ecb30 | ||
|
|
c781869d09 | ||
|
|
a76c8ed3d9 | ||
|
|
7e353595c0 | ||
|
|
6ca753bca0 | ||
|
|
c9ae367dc0 | ||
|
|
b38468ffe2 | ||
|
|
d2cabd5d29 | ||
|
|
87a07a5560 | ||
|
|
ae3208a9c3 | ||
|
|
04d6ee72bd | ||
|
|
680f2a063b | ||
|
|
bf15e64fe5 | ||
|
|
814ddfcd92 | ||
|
|
aa47cd015a | ||
|
|
372554adbd | ||
|
|
c4be425dcc | ||
|
|
aa447dd05b | ||
|
|
21651216af | ||
|
|
bf3480cfba | ||
|
|
39f6ededfd | ||
|
+2 |
4219230aa1 | ||
|
|
17f8b9fee1 | ||
|
|
6af053b682 | ||
|
|
2befcfc389 | ||
|
|
8f7794e487 | ||
|
|
7ab45ca1ab | ||
|
|
e8b363c10b | ||
|
|
64e94bd97f | ||
|
|
89ffd3e4b1 | ||
|
|
2e396d6cda | ||
|
|
f08e27c6fd | ||
|
|
733dcf9209 | ||
|
|
1262eb664a | ||
|
|
9a93892a91 | ||
|
|
2924850317 | ||
|
|
b369cf049e | ||
|
|
d1ab338b91 | ||
|
|
a2e9e66153 | ||
|
|
5d812e269e | ||
|
|
7d683eb246 | ||
|
|
1b1dbbb78f | ||
|
|
404b03173b | ||
|
|
c33f65243c | ||
|
|
7d4728ae9b | ||
|
|
eced411a51 | ||
|
|
6e1065009c | ||
|
|
c2c6a8dd8f | ||
|
|
0076058280 | ||
|
|
54b67f53ef | ||
|
|
129650237a | ||
|
|
5c5e8b44e1 | ||
|
|
a0987e063e | ||
|
|
fc606ec8fc | ||
|
|
f7da164599 |
No files matched your search
+34
-7
@@ -53,6 +53,10 @@ SPOOLMAN_PORT=7912
|
||||
# Default: FALSE
|
||||
#SPOOLMAN_METRICS_ENABLED=TRUE
|
||||
|
||||
# Periodically check GitHub for a newer Spoolman release, shown in the UI footer and server log
|
||||
# Default: TRUE
|
||||
#SPOOLMAN_UPDATE_CHECK=FALSE
|
||||
|
||||
# Collect items (filaments, materials, etc.) from an external database
|
||||
# Set this to a URL of an external database. Set to an empty string to disable
|
||||
# Default: https://donkie.github.io/SpoolmanDB/
|
||||
@@ -65,6 +69,13 @@ SPOOLMAN_PORT=7912
|
||||
# Default: SpoolmanDB
|
||||
#EXTERNAL_DB_NAME=SpoolmanDB
|
||||
|
||||
# Serve the previous (React) web client instead of the current one
|
||||
# Both clients ship in the image and talk to the same API, so this is a safe
|
||||
# rollback if the current client misbehaves on your setup. Your data is untouched
|
||||
# either way. Please report the problem so it can be fixed.
|
||||
# Default: FALSE
|
||||
#SPOOLMAN_LEGACY_CLIENT=TRUE
|
||||
|
||||
# Enable debug mode
|
||||
# If enabled, the client will accept requests from any host
|
||||
# This can be useful when developing, but is also a security risk
|
||||
@@ -77,10 +88,26 @@ SPOOLMAN_PORT=7912
|
||||
#PUID=1000
|
||||
#PGID=1000
|
||||
|
||||
# Allows CORS ORIGIN.
|
||||
# Use the https://developer.mozilla.org/en-US/docs/Web/HTTP/Reference/Headers/Access-Control-Allow-Origin semantics
|
||||
# separated by commas
|
||||
# for example to allow request from source1.domain.com on port p1 and source2.domain.com on port p2
|
||||
# SPOOLMAN_CORS_ORIGIN=source1.domain.com:p1, source2.domain.com:p2
|
||||
# to allow from any
|
||||
# SPOOLMAN_CORS_ORIGIN=*
|
||||
# Extra browser origins allowed to talk to Spoolman, separated by commas.
|
||||
# Only needed for a web UI served from a different address than Spoolman, such as a Fluidd or
|
||||
# Mainsail instance on another host. Spoolman's own web UI does not need it, and neither does
|
||||
# Moonraker, OctoPrint, Home Assistant or anything else that is not a browser.
|
||||
# Each entry must include the scheme -- a bare "host:port" is not an origin and will never match.
|
||||
# See https://developer.mozilla.org/en-US/docs/Web/HTTP/Reference/Headers/Access-Control-Allow-Origin
|
||||
#SPOOLMAN_CORS_ORIGIN=https://fluidd.local,http://mainsail.local:8080
|
||||
# To allow every origin. WARNING: this turns the origin checks off entirely, so any website you
|
||||
# visit can read and modify your Spoolman data in the background. Only on a trusted network.
|
||||
#SPOOLMAN_CORS_ORIGIN=*
|
||||
|
||||
# Hostnames this Spoolman answers to, separated by commas. Off unless set.
|
||||
# Protects against DNS rebinding, where a domain an attacker owns is pointed at your Spoolman's
|
||||
# local address so that their web page can talk to it. Hostnames, not origins: no scheme, no port.
|
||||
# "*.mydomain.com" covers the domain and its subdomains.
|
||||
# IP addresses, single-word names, .local/.lan/.home/.home.arpa/.internal names and any hostname
|
||||
# already in SPOOLMAN_CORS_ORIGIN keep working without being listed.
|
||||
# If you reach Spoolman through a reverse proxy on a real domain, that domain must be listed here
|
||||
# once this is set, or every request is refused with a 400.
|
||||
#SPOOLMAN_ALLOWED_HOSTS=spoolman.mydomain.com
|
||||
|
||||
# See the Security page in the wiki for how these two fit together:
|
||||
# https://github.com/Donkie/Spoolman/wiki/Security
|
||||
+2
-2
@@ -1,9 +1,9 @@
|
||||
# These are supported funding model platforms
|
||||
|
||||
github: # Replace with up to 4 GitHub Sponsors-enabled usernames e.g., [user1, user2]
|
||||
github: Donkie # Replace with up to 4 GitHub Sponsors-enabled usernames e.g., [user1, user2]
|
||||
patreon: # Replace with a single Patreon username
|
||||
open_collective: # Replace with a single Open Collective username
|
||||
ko_fi: donkie
|
||||
ko_fi:
|
||||
tidelift: # Replace with a single Tidelift platform-name/package-name e.g., npm/babel
|
||||
community_bridge: # Replace with a single Community Bridge project-name e.g., cloud-foundry
|
||||
liberapay: # Replace with a single Liberapay username
|
||||
|
||||
Binary file not shown.
|
After Width: | Height: | Size: 312 KiB |
Binary file not shown.
|
After Width: | Height: | Size: 136 KiB |
Binary file not shown.
|
After Width: | Height: | Size: 162 KiB |
Binary file not shown.
|
After Width: | Height: | Size: 49 KiB |
@@ -0,0 +1,67 @@
|
||||
<svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" viewBox="0 0 800 570" width="800" height="570">
|
||||
<!-- Generated by https://github.com/antfu-collective/sponsorkit -->
|
||||
<style>
|
||||
text {
|
||||
font-weight: 300;
|
||||
font-size: 14px;
|
||||
fill: #777777;
|
||||
font-family: -apple-system, BlinkMacSystemFont, 'Segoe UI', Roboto, Oxygen, Ubuntu, Cantarell, 'Open Sans', 'Helvetica Neue', sans-serif;
|
||||
}
|
||||
.sponsorkit-link {
|
||||
cursor: pointer;
|
||||
}
|
||||
.sponsorkit-tier-title {
|
||||
font-weight: 500;
|
||||
font-size: 20px;
|
||||
}
|
||||
</style>
|
||||
<text x="400" y="40" text-anchor="middle" class="sponsorkit-tier-title">Gold Sponsors</text><a href="https://joshix.com" class="sponsorkit-link" target="_blank" id="joshix">
|
||||
<text x="400" y="203" text-anchor="middle" class="sponsorkit-name" fill="currentColor">Josh Wood</text>
|
||||
|
||||
<clipPath id="c0">
|
||||
<rect x="340" y="65" width="120" height="120" rx="60" ry="60" />
|
||||
</clipPath>
|
||||
<image x="340" y="65" width="120" height="120" href="data:image/webp;base64,UklGRsgGAABXRUJQVlA4ILwGAACwJACdASp4AHgAPm0skkYkIqGhL5ENkIANiUfPo+yShwQpAbER6gG8GTCe9OgMo/Ux8Mb6gcyqPI8xGY/5PrE+/PpB5ypAjRkDFzrivwF62s/DK34rzvVhAPgCBtQjb6uCuPF1IciZ/eOsAm2YcRY0JTDqwAeM+a8G/bPnitwjyrcNv4JeKAdm+2kIGNTUplFYHTh5H/6cvX/J2boEqumFpsZ4H+BTtbcCJ1umGOvIdIZ7mJJ4wKAIqBezjekx2kJcEuJv1TQjTzvFltO1PQyGeQS85A0kZIQo/eL9EMzL7yHbRNB95Za7xMB23tgYLYRGioR+cObcTdJh1itU3qSDjOx5GX2qxaVkPqMDgaM/dJltCbRr48Uj9txgtIhRKvgNxLd0fZ2iU1+9n5MIMAD+/PQBSjyc0vbGv1rJpHHondsozJ5is5nynZ+bxtrKmbuULzqkfkHTd2EZMZR4pKqYe4vgUljlur1epNBEkArOAPbtmGjmkwqXRkZtDettTONSDKtn7bi5F52h+cnz5FvLoE7c+pK+ZkBlpZy9Y7Wzx9bvKE/Org0ItinAq7f9TmihQ1eizXWPtgBKFd+Qu7BF+wqFv/68qGwtXD/9iMyD9G0NFBxF/YHjCzsUt0rvHlkPkG3u0s43UFSi+tFMWXfJVDMX9bqV1Y7dvCwhQ7NY+SZCNaoq487tNhvEhIlUb1mqdXv3rxhJ8QLM0iZ5muNzgAZH8rnxR/JlNXsfZhe4ZvsIgsa8/f3eUhXSZ/acnJ1dh8SayPmOJysvTMy4SmXCvIWvFZrAdbXjfUKSV2SDj8CFjFa3S/U+VcTXqTm5RTpQy2R6citHAtZ/FAo0R2l+ubQvHAZbG1naXrdCmvx9IQxQE9DrQrFccqLpAroykRLrIPEyTcvzXPoy6DcrqpzWpVsskaKDksL8HIeM6LvYhAMaz7kmdYfHfQhxnTzQEV3bii5mXAh7RLbsvuml5HPVj3hHYPeWcyqXuwdbKs1ei9Is2LWps/OYoY1/S8HkS7yWsH3lJGIp3YRtJrl0CBj80B5Kc7FCt1kLT7l02XMn2sp4G/Tmc2PTOSToCkOEzWm60rUaX7gU/NBUAHcFJzcveQBzWbtm/QvAzmyYRv27bSozA8jcjTB11XwBz7aRW6bOdhZevq1oNodI75fAQ9SjxsqijU6icL/C17hatpRfNDRK5339AsbtAKnhUpcmbBrYXmYrjfmcXLsTjT9m4yYPLzmAr38FhZbZYTXEwcQ611OLliezqUGH63rwrrD/Y1D7DP5TeGiQ6fSqUs5MbV+bW1zQlCU4ZZ6GFhrOnXhlH6oN2N9aO/Eu35SHfnCxZk2cch4YgaPmOGn8R7/6u2il6/EgXYMDeK7HcSEmss7n1CREawmfINYUCUxLB4s3z4pQQkVOTAy0PM3uylOfQt6LDpQ7ZjnhwGGNbVqPRwsClzPpxRnIAPXaDHJW0tFtNHZSNOmo3m9VzNkVN0wUOHb+/i1tW3RUHhuE+6p8D8C4px/D5MTU4l9INiryqSPO8KR9Pauk1PT7p4Iuf1GbZ9pYXVqIQcpIkYNKRyyJObLYCEVJYyUQ9s1sHx3kWGY8BVNVsZ45IfByrst+0iJywhlRMZLvY719IU2ssAyx9bQyJ+FOZOH11nib/g5i86gKhw1inytSYr7KSrOZ3vEZK0d131xF8D4Tqq5fmEuoaR7R9e/DvkPRxiSPwp6caZYHNjW0vw28jfBIeuc2Hu86STZP0dSWeaIOiTXK74vJEmLdMAUbYCX3jw2eTZJxYSuEI9YivnsnsJSPF9gk8RFk5dx+BVE3a+ypXgbjVO8Bg1tuNmJDEAH22PMgOxKSCbOhQ/ox19PW73FJ4ybJojgF3dPjPKzue/4Hf429x0Jsn2/tlNCrJf0T7XyE1cIgKvt5DbNFfh5Ss0cZe+I/9HUA7JwZCQ5LF2GqEB21XI1qJZor9y46SIjj2HxWJnJPdqHCEe6Tb7D+NLFsjfl+ZJGZu/HX6vjuORb0RIkmbq0aEVzHGjIawLzSZRKs+q7uRCXS2erdaj3ZPTqTV4YfqwFYAW3uYbwD+3Ktu9mIXLpFMsw8IiQNZopAHBbVQo+/Qk+1LBLeHztLhFDya0zWaexlFWshmq4c3J6RepzwNd/yweyeESecwL9eXf8fanxvJ2hOMKKU7Rh1g1ZBdGFJYXrZzN9PgAoBk/w77D0swqmrjebS9hmnON+C9owqx15EgS8f/BGWnupWZs+frjmVzRfc881ei87vK+ccntgAq2JzNWMLH1DB2R+Y8pkBzwAAAA==" clip-path="url(#c0)"/>
|
||||
</a><text x="400" y="255" text-anchor="middle" class="sponsorkit-tier-title">Supporters</text><a href="https://github.com/swtaylor" class="sponsorkit-link" target="_blank" id="swtaylor">
|
||||
<text x="360" y="348" text-anchor="middle" class="sponsorkit-name" fill="currentColor">Scott</text>
|
||||
|
||||
<clipPath id="c1">
|
||||
<rect x="335" y="280" width="50" height="50" rx="25" ry="25" />
|
||||
</clipPath>
|
||||
<image x="335" y="280" width="50" height="50" href="data:image/webp;base64,UklGRpoEAABXRUJQVlA4II4EAABQFgCdASpQAFAAPmkqkUWkIqGXrAdgQAaEsYBhWgnHTNnEshj28rNZ+GmOXmp93KFPcld/L/07TSyJCfZvbGHb5moRzw0e45eO2MkuhDHxKdpqpve1uYdG0BsLtaR1qQkiaMCv1f1r0sWQvsyKv+yTj4NBtLITGsATKV0IENN3Bl8f6aAHqFPbX/IIwHqJ5dhsp8hpZiO3hdsJnuJjXBSNoo/ohDiJMtm1nZDTgJRCWMgANxShzJ+lEFPAAP79QB9OMqjqK/Wb/XKJUhuVyjCLtjHwBkqY5p46HUIIHw/VhGYrttpwJLsPtJ3UJc+EdV/S8DwYN/yByU6U0rMLIGZSGqa2ErEr7V4GGC9IxFbTvXtQDpVVaddvvt0O1HhsxCFwCfsVJwpY1+j6FX0BkGY97/sXD6e4FiqF4u1+mgpFo5AvXaoOAnyAXGYvs9mrbX7kY2vf2rzqVsTsXUDRBIdM9zf8QYGvyqij+qJIWtiJDJtziH6+PIJPNyYaF3dIun0bWAOTdHDJDIxzmdua4QIZ3+SGIdZ6zj9igFRf/D/OkJzQCGsrZMNHiAul/RsCjH5bv2NQCrlcm8Tek/Bol07kSj6qBCsK/tnGmvsT5mrYoWbQsc4tflV2jYurFzbXEjfmMJTron7S5k+b88/hOxLGsnpY7GN+cajmuqSNIAdZ5Es22QFpRJOcqh4DbtElMbp4JmiIP45o+v5aoyEyIsS6tJ/LWKnofIE+2BdiITSXHMzWWzLZ4yBVsG5jcvHbzsqFp9QFsEMe6GYubnNwvK+3uPptk8jnZN/0geWJiLFMxprrPEhv3N3VEKZ1n4yf3EoOYfywMYJ8syuqMKLLH7PB7tDql0Qxsl77fR4fURVBPGgoHbDUjrhRmEeoMSuuWD6FfZ2sx4D8aLlWKdTcRjMO7i2yNb+apfklcWh9CkNjigw1K6OlcaslrUAguez3uDHP3/e0RlxlD9oXf2i7bPFmeW32p6/krBex+5LE4YroYFb6azBBWEixY90qpd5zwSzarPhNoxV4gRRgKTbMmmIQBTtNa7l3sPIIf0znFnxX+RXwIzLmfRPY66VGkoxV5zEcJwTYngDDe8zfqp4uBhCEIq76aOUn/Kf6ydnnBwkv9EvRuTQ5wEh7jIfn74wudig9529et3sKwVIC/3DyAKgOvwkmC2wiuE/MdSRyVEgJfYBkOWSn8IJEl+ZBUelXSxrKGBeAn3CJUN7vn0hBYCKhrVCuYqCQxB4RtM9ewors7V6olzJUbu6E8WazDVYTU69/pqNi1eOfeYqbv3/il9BdKqx1InGxSUo06kUmrmTyn6cmrDkyIUYrAOttFM6Sy9SKCxPlXgDG3YV1NWmkW8vZQli8jp71xHO/80aXNIOPq4kWo3h4dKuH3JF6yDQVpAN3PJb6rD5ZE8m6JN4hbYWXPjH5YnM0xk8X7xJCgZyaSgFgvc5CeJSohiXsOdwanYvLqgpgjznJYJw+YLcVlbPsLGeg0I1HVpaxWt8Sds1iBtQ+I5ZF2VWTAbdhn9vK+oC8c498LHPQiREbCHMgAA==" clip-path="url(#c1)"/>
|
||||
</a>
|
||||
<a href="https://github.com/tlangkabel" class="sponsorkit-link" target="_blank" id="tlangkabel">
|
||||
<text x="440" y="348" text-anchor="middle" class="sponsorkit-name" fill="currentColor">tlangkabel</text>
|
||||
|
||||
<clipPath id="c2">
|
||||
<rect x="415" y="280" width="50" height="50" rx="25" ry="25" />
|
||||
</clipPath>
|
||||
<image x="415" y="280" width="50" height="50" href="data:image/webp;base64,UklGRlADAABXRUJQVlA4IEQDAACQEQCdASpQAFAAPm0wlEikIqGhJnM6aIANiWVfalewGPbCULeZf9lVKyeAFRcq/sb9iNrYjtrl20Tl9Brpxl6pzt/hrSsHFFGzOJtddJg/shyIiZ1LzVI7175shK6DAWErqJbPidMLUWg3ubKTpxfjBC+/K7Eh9dbQf4YG/eS9ejJPeMpsfu0N2Ta9ObSG201Sy7FkAAD+/lcRS9KSg1a5BZKoJe3h3qj9X3MvB+vnUNlwpci/lOuX9adPeFnDrws/r9sfemPaCgBt/l/Us8nItNrXxn5gmJbR+d1kXCM15yJi87WEtT4HCgIDAlIcW7CNJpCpFzXlmUiZuTpXY9h0L3P1/9DlXWJ6UxR6Eka9lGj1h3gbBdw5XJNayBK6l5knJ75c3VxeMfA41IqIUfRBLqAJxTUAFirrc8GjSidiV2PrpxHD/vIDyqxi0CwSZHZneIXXKdQgElMsiWY7lv2ZYJRbz852fWqChfw8V7O8CmRHJeflh1n6bsJZJW15B0GdmNkd9rEcEEN9c02fOga7TRSa5J9qqm5mQK6ttlG3o20FKndVI0RGhhZ0QoJZiWB2E6EVN8GReTD++Q4tmgx+anuuTQYLlqIbPj0fiNMWruZYNaWBR7lQfGtCltKKoXpGrdsEsb78iI+dXE+PByx8SYCDE7YMosWquKmh38fWmtCWRExHFt6J+fOK7878sckHHUxk7dOZiMG6VJPl1M6s7RVupY4pG4KbEsXrIVmKJ2PMgZqR81XYynE68U6nfMgqjmpQKS+5rFiSdo9GtJr0g9EWmfCGX21fjpknlYAQ4LQMZxVpxCGUkeedmYL/GqnCnxtjZJ4m7M8/y8rkFZZ1HEy8m7h9/qg9sTYZEd+SuGny1fVkAXSsJO6xrQFyB4W5X+QY+dKANG78hoe1ZJqb7LqT4nlWM/49WvYLYLjxLvUEcDmySZFru6bT8XZangg+KyZQR73z0+f7IiRj/PuASJHhqcqirbnHPTDWfKrQu6dWrKHR5kcRlz5Dpnb0gBEPKIQrv5DXBVJRILmF23xJK0rUzUkwQ/L6pkq0Ty8GGXnfzba9DbTT4HHDUwuMOzyNOyuL3/r/ySX1m8qwdpWmnnoAAA==" clip-path="url(#c2)"/>
|
||||
</a><text x="400" y="400" text-anchor="middle" class="sponsorkit-tier-title">Backers</text><a href="https://polymorphic.dk" class="sponsorkit-link" target="_blank" id="polymorphicdk">
|
||||
|
||||
<clipPath id="c3">
|
||||
<rect x="372.5" y="425" width="25" height="25" rx="12.5" ry="12.5" />
|
||||
</clipPath>
|
||||
<image x="372.5" y="425" width="25" height="25" href="data:image/webp;base64,UklGRjYCAABXRUJQVlA4ICoCAADwCwCdASoyADIAPmUqkEWkIquZ/Z4AuAZEsYBfefuIopNZ6c4YXlAnC2/DzVHzOazQULy+IzbYtxgfWvdvZMf3fvpN64RGUtlBqaalSwhyxpsxwa2VBwP9czxhfRUkgHDC3n7wM35VAAD++cjP0J212mopM4/Rh0hOscBf9Z3H09zvnh+baFS5+i/jyZ8i0WlzZRzLr9W56mlBTdHVe7poj6YN27piHQHv4HFq8LNPFIaEo2UCdds7haNciUEC46JgnRrnv7x+SK2UmmeRCGWLE0tMvr9Lj7Msgwnee0YpKdP2gtm7UAQ6hAMR+/hIP28TYk/3Jc3oOFFIcOOAwbvtVofjEaORNOQj5vpSLYgA1YmU3MvsWKJiHK3wAxZSAEODjaEXSgWuFQDo/u4k0dv0NcRqX5vjk4COQg+LoZEOWWOnfY3J0rqmkONX0GtvUXQ1vhgSv0fst67tyvesub67hOcUmsPZCS2W/NVUshMelGBQ6+shQOlHXxNysIkuO9ciE/I5vxamqTWlG92zlO5w2IZIbq2x10b5KfSCjkFr/Lspe+4EXhtwhfaZOKBx8eESeBLmBmMMDoK+v1nSYACGfyvQ7ii2bxvOkchviukeoj4B7Q3i8cHNE2d+he9657d5nwMMJ1cubwm7umN5MGKk5B731r3aX3uCbazwf6lY5MQLnw7xU4XxGtQNkQEHQqsG5ajWgOeLm5upXvEKFTLc8trHi1L8A4pAAA==" clip-path="url(#c3)"/>
|
||||
</a>
|
||||
<a href="https://github.com/Kreism" class="sponsorkit-link" target="_blank" id="Kreism">
|
||||
|
||||
<clipPath id="c4">
|
||||
<rect x="402.5" y="425" width="25" height="25" rx="12.5" ry="12.5" />
|
||||
</clipPath>
|
||||
<image x="402.5" y="425" width="25" height="25" href="data:image/webp;base64,UklGRlAEAABXRUJQVlA4IEQEAAAQEwCdASoyADIAPm0wkkakIyGhKhzK6IANiUATpygqc9AuwDC76jadzy/+jFdrvoARipqP9l4STP6Jkfek45SHQI9T+wT+s2+cmrUBCJ9Mic9iBdMAlBmtbr3k3fO+bnxwdUPe9YN0drh6w7q4kO+jqNk0uEzUpkgTMYiFhrnVc9qKcB0G35IUcNmQFww80vxGnlkoIEV/s7YNLN7cVA0xQAD++ScfQpSJONSUqCMK+Ol5ZCh0b26aEtYQ7wo7d/iK4GFJ/Oln8/RBtU+uqnwhlmNv/XvVpC/PS5bd8Mbw8mdK7EK/bTtH2GXbGoqm+fSThwv9egzABKWJmjoyNIybs62ApVKMR1syEfaHs9rrVJa4Ku+3KznIaFb3nP3rKOJTl0JxjplCTw0qEoyER2/l8s9Fx7Wj27E7je+BerqTiLU2WKIiK6oWo6qxLj7DM4pmLTmy2HRcdZW4HbJKEvw2qtft+aVqnIpmkpHQ7gIUZB8YqXVLOuf479mRmJSRWUM8XDM+/ZHsiRjQLB8/63zHaV36axymJybL7DPubsyezxXHl3gW1oAHTPcn4dG6tghnVGt61bBjLL4xKpu+jhr9KGulx5hg9zz03dwj6wQGMzLoAS0KS1ootiTv7tSxN8h8BQKdViSfbkmzM/WQZgxko9b7T0mJ3RPfTsolRpzwAOjDjSkxnIA6VC2hoKAHSGYvW/ug0PznrxyLQlqs0eNgZM46ou98sNg2+VDv3Lc+ke9E7g3i9yt7ws/XeGzfyvfyZZlBCDKPStuncmbbhTf808x5SIglbQFAZGxHtRnUaqkoa8E4PlA6mlfzqRey1HGPP/oBPQe25l86Y71vr3eeZn2GcLFzKwjIaDNA9OMteOhej30/TXc+yBzpdTsWtQPyLo3IqXfdT5c8eyWgB4lmNJaOIgcTBCsZW/E/js1Iww91n/KKNlN9puBaomIKqdBj9FbL1nVpR97y+x9x7Vuw2LRI8xu8jNj73/Guv+NyuTRu6t7+QlUXob0HmqrdNuLf8HmZoRE6bv4f6MTQWWfGBSeT6vkpw9I2Qpz3NyC7sC4HMdPjh5JvW4J93BcKqA1N6Nw+bVRvl2ew47w+Kc2vN3IAj5IngbnUvDKEqQZgN+zQ/7BqM5d4YIk6vkyUxeXcAZ0pwBuwstcAJh0sx2PbQrT71ohYigAPz7xq1HAZ/mYsBogBIa5gO2HGgEFavUP9k+jD/GJZvLziNZzsbcX7YdjCdKTH0xwuEqiuufKzOaECClx4DsZuvipljXph50HXFc5XAfZgS+sQOZbpmb6Kf3mMjtfCCDW7efAAxeoPhCCHRcVOV3vJgGILkvW4p2k4VUrVyfDLJ3k9+AriK2tAZroSkIBkalglP1yJ4tYR22YS5slOQ3/CLnU0an8lFGOhWHQVw1CN0JCygQkClgJR4q5+ghh23OXWA/3HEAKNDvo3oAA=" clip-path="url(#c4)"/>
|
||||
</a><text x="400" y="485" text-anchor="middle" class="sponsorkit-tier-title">Past Sponsors</text><a href="https://github.com/marko-p" class="sponsorkit-link" target="_blank" id="marko-p">
|
||||
|
||||
<clipPath id="c5">
|
||||
<rect x="372.5" y="510" width="25" height="25" rx="12.5" ry="12.5" />
|
||||
</clipPath>
|
||||
<image x="372.5" y="510" width="25" height="25" href="data:image/webp;base64,UklGRl4BAABXRUJQVlA4IFIBAAAwCQCdASoyADIAPm00lEakIyIhLhkoAIANiUAYoZG41zSo4e3a0MDqVd5hvyUF1IEn9JgXObpn2Mt9prYfftYf4GRNRZ7hZ/fWD/6kU0akoeFYAP7mh/5A2Gfo2763tH9O1yC1D3TebcFfF/bO2z76334lot7jYxzsHcClMluiJtad5Z2A9ZtsHn0CgO1qVt/DcFFWwoCom7DWqiX/JeWTPmV7+u5ecLmedHJQ6jheSaRadpREwA9UiSGzpAggcCbnuZdKF5py6aWBIPoYdwJPwQTuDBoyC3glR90OjgWIADT7RZMYVBOeJZ0jA7g8++YxIx+GNqekY+gLy77edX+cDhTWBlwoSyzAKTVFGooGOFJwHGufQopr/cr1nMvbodaPTkzq9FZtdY+eVmTADFYRaCF0QDCX+qURMnt+yeGaWDzHEhEsTMeIJbGyRhUdMgAAAA==" clip-path="url(#c5)"/>
|
||||
</a>
|
||||
<a href="https://github.com/mrgirosky" class="sponsorkit-link" target="_blank" id="mrgirosky">
|
||||
|
||||
<clipPath id="c6">
|
||||
<rect x="402.5" y="510" width="25" height="25" rx="12.5" ry="12.5" />
|
||||
</clipPath>
|
||||
<image x="402.5" y="510" width="25" height="25" href="data:image/webp;base64,UklGRqoBAABXRUJQVlA4IJ4BAADwCwCdASoyADIAPm0wlUYkIyIhMBYJAIANiWYAy5x8BkkfdwjET0C9gJwHmAfqB0gPMB0EPOg6lXn2PaFvyUJKOZTATBzOiskTHqIVkrjKyrKQ96FyqvM1Gv1jQBXFMKi+U5hNm1EI8AD+8QHHdvGR1JUV2sahGaCbtFiJaByUNdMrLaM575u+kR44ggAKv3SXhizdVAvYYtYu0xpoP1QuZzHV05ERx1UDN3JJOZQA2eCKoCPnSiD3aW7Cp+XxYc07Q+Xfur3IkZX89Dy0NN7ogFFINEj83SaUWhjo7BEkmq5OUe8vjhUSout2T6n2+fwYwcD6/3bekvfYqCCWM1HLHyjGroEjvI40NzvNVty9uCAfSiHRL48OpEWqqoi85QWoAQLMK4WoSLcWsXpVCQCI88AiLHFkRtMAV4H+PUfk2ZsEzGSka1EFOtnn3npbU1/aitYgLuS4rcly4D0v9dMawDumQfY5uMacYPo6dkjOTJAdPQDXloB9LbiSBWrbcdnYyZZ/WOaAySoDhCCl3eQFOdBCSqnKG0gHZXAAAAA=" clip-path="url(#c6)"/>
|
||||
</a>
|
||||
</svg>
|
||||
|
After Width: | Height: | Size: 11 KiB |
@@ -0,0 +1,3 @@
|
||||
node_modules
|
||||
.env
|
||||
.cache.json
|
||||
Generated
+852
@@ -0,0 +1,852 @@
|
||||
{
|
||||
"name": "spoolman-sponsorkit",
|
||||
"lockfileVersion": 3,
|
||||
"requires": true,
|
||||
"packages": {
|
||||
"": {
|
||||
"name": "spoolman-sponsorkit",
|
||||
"devDependencies": {
|
||||
"sponsorkit": "18.0.0"
|
||||
}
|
||||
},
|
||||
"node_modules/@emnapi/runtime": {
|
||||
"version": "1.11.3",
|
||||
"resolved": "https://registry.npmjs.org/@emnapi/runtime/-/runtime-1.11.3.tgz",
|
||||
"integrity": "sha512-Xz4Tpyki7XyrpbUK1jR1AhdAdaXyhhY4lZ3neLodmhpuWfy2PAQN5B46sAiU4liOXGLkHypn/qU+jvfWSCYYLA==",
|
||||
"dev": true,
|
||||
"license": "MIT",
|
||||
"optional": true,
|
||||
"dependencies": {
|
||||
"tslib": "^2.4.0"
|
||||
}
|
||||
},
|
||||
"node_modules/@img/colour": {
|
||||
"version": "1.1.0",
|
||||
"resolved": "https://registry.npmjs.org/@img/colour/-/colour-1.1.0.tgz",
|
||||
"integrity": "sha512-Td76q7j57o/tLVdgS746cYARfSyxk8iEfRxewL9h4OMzYhbW4TAcppl0mT4eyqXddh6L/jwoM75mo7ixa/pCeQ==",
|
||||
"dev": true,
|
||||
"license": "MIT",
|
||||
"engines": {
|
||||
"node": ">=18"
|
||||
}
|
||||
},
|
||||
"node_modules/@img/sharp-darwin-arm64": {
|
||||
"version": "0.35.5",
|
||||
"resolved": "https://registry.npmjs.org/@img/sharp-darwin-arm64/-/sharp-darwin-arm64-0.35.5.tgz",
|
||||
"integrity": "sha512-QRUlFQ0WxvdWyqqG/WtI3iupfD5rBzmCHXSdPsY91sAtVtTo7Q4cb6zOccZ3gqEqkr0f1As1ehLqmEpDsRf+lg==",
|
||||
"cpu": [
|
||||
"arm64"
|
||||
],
|
||||
"dev": true,
|
||||
"license": "Apache-2.0",
|
||||
"optional": true,
|
||||
"os": [
|
||||
"darwin"
|
||||
],
|
||||
"engines": {
|
||||
"node": ">=20.9.0"
|
||||
},
|
||||
"funding": {
|
||||
"url": "https://opencollective.com/libvips"
|
||||
},
|
||||
"optionalDependencies": {
|
||||
"@img/sharp-libvips-darwin-arm64": "1.3.4"
|
||||
}
|
||||
},
|
||||
"node_modules/@img/sharp-darwin-x64": {
|
||||
"version": "0.35.5",
|
||||
"resolved": "https://registry.npmjs.org/@img/sharp-darwin-x64/-/sharp-darwin-x64-0.35.5.tgz",
|
||||
"integrity": "sha512-+BR255RhDlpygUpOc/Jdt1nT6DQ3XG/ERo5wbcdOf5Q320dKtPCKPLR1LJs9VGXRaMa8l1uUa0tkCNOXiAxZUw==",
|
||||
"cpu": [
|
||||
"x64"
|
||||
],
|
||||
"dev": true,
|
||||
"license": "Apache-2.0",
|
||||
"optional": true,
|
||||
"os": [
|
||||
"darwin"
|
||||
],
|
||||
"engines": {
|
||||
"node": ">=20.9.0"
|
||||
},
|
||||
"funding": {
|
||||
"url": "https://opencollective.com/libvips"
|
||||
},
|
||||
"optionalDependencies": {
|
||||
"@img/sharp-libvips-darwin-x64": "1.3.4"
|
||||
}
|
||||
},
|
||||
"node_modules/@img/sharp-freebsd-wasm32": {
|
||||
"version": "0.35.5",
|
||||
"resolved": "https://registry.npmjs.org/@img/sharp-freebsd-wasm32/-/sharp-freebsd-wasm32-0.35.5.tgz",
|
||||
"integrity": "sha512-Y/z91nEZ4uIBX5X3nfTovjU9lHNKFYbL2lpHCLVNmXQK03VIZvXBBt0KxbPGp2SdGSF+2mQU4e+hQaWOt86iAw==",
|
||||
"dev": true,
|
||||
"license": "Apache-2.0",
|
||||
"optional": true,
|
||||
"os": [
|
||||
"freebsd"
|
||||
],
|
||||
"dependencies": {
|
||||
"@img/sharp-wasm32": "0.35.5"
|
||||
},
|
||||
"engines": {
|
||||
"node": ">=20.9.0"
|
||||
},
|
||||
"funding": {
|
||||
"url": "https://opencollective.com/libvips"
|
||||
}
|
||||
},
|
||||
"node_modules/@img/sharp-libvips-darwin-arm64": {
|
||||
"version": "1.3.4",
|
||||
"resolved": "https://registry.npmjs.org/@img/sharp-libvips-darwin-arm64/-/sharp-libvips-darwin-arm64-1.3.4.tgz",
|
||||
"integrity": "sha512-5R89nBYiRdUlSWJxPhO+GVtaXzXSxKnRu/xqMn3KTA3L9EB9Oy/P+Nn2f2vlhPuUdy/Zusb2DarbyTpGCfEDuw==",
|
||||
"cpu": [
|
||||
"arm64"
|
||||
],
|
||||
"dev": true,
|
||||
"license": "LGPL-3.0-or-later",
|
||||
"optional": true,
|
||||
"os": [
|
||||
"darwin"
|
||||
],
|
||||
"funding": {
|
||||
"url": "https://opencollective.com/libvips"
|
||||
}
|
||||
},
|
||||
"node_modules/@img/sharp-libvips-darwin-x64": {
|
||||
"version": "1.3.4",
|
||||
"resolved": "https://registry.npmjs.org/@img/sharp-libvips-darwin-x64/-/sharp-libvips-darwin-x64-1.3.4.tgz",
|
||||
"integrity": "sha512-iR2OKH80yi0U+dUplyh3/xdpFvps6YkCwsXenIJxqxR1v9o+xtKTGbS9H7cps+2Vxjc8B1j96p75NmTGjIhtpQ==",
|
||||
"cpu": [
|
||||
"x64"
|
||||
],
|
||||
"dev": true,
|
||||
"license": "LGPL-3.0-or-later",
|
||||
"optional": true,
|
||||
"os": [
|
||||
"darwin"
|
||||
],
|
||||
"funding": {
|
||||
"url": "https://opencollective.com/libvips"
|
||||
}
|
||||
},
|
||||
"node_modules/@img/sharp-libvips-linux-arm": {
|
||||
"version": "1.3.4",
|
||||
"resolved": "https://registry.npmjs.org/@img/sharp-libvips-linux-arm/-/sharp-libvips-linux-arm-1.3.4.tgz",
|
||||
"integrity": "sha512-LmRtTsOHuvM2+wlO2Db37dx5MiZhB0FvSunciw48YjdOkZz9KAiRbm8ujeMOA1INqmei5NapFxYEK1D1ZSidmw==",
|
||||
"cpu": [
|
||||
"arm"
|
||||
],
|
||||
"dev": true,
|
||||
"license": "LGPL-3.0-or-later",
|
||||
"optional": true,
|
||||
"os": [
|
||||
"linux"
|
||||
],
|
||||
"funding": {
|
||||
"url": "https://opencollective.com/libvips"
|
||||
}
|
||||
},
|
||||
"node_modules/@img/sharp-libvips-linux-arm64": {
|
||||
"version": "1.3.4",
|
||||
"resolved": "https://registry.npmjs.org/@img/sharp-libvips-linux-arm64/-/sharp-libvips-linux-arm64-1.3.4.tgz",
|
||||
"integrity": "sha512-Y3dgX/6lE2QhQb+Gxy0WZxfg9MEm/JBjamZpS2IklP7xIQoKN4hzAm7KcMVGtaVDt3neE9OKBC7vAfonA/Lr1A==",
|
||||
"cpu": [
|
||||
"arm64"
|
||||
],
|
||||
"dev": true,
|
||||
"license": "LGPL-3.0-or-later",
|
||||
"optional": true,
|
||||
"os": [
|
||||
"linux"
|
||||
],
|
||||
"funding": {
|
||||
"url": "https://opencollective.com/libvips"
|
||||
}
|
||||
},
|
||||
"node_modules/@img/sharp-libvips-linux-ppc64": {
|
||||
"version": "1.3.4",
|
||||
"resolved": "https://registry.npmjs.org/@img/sharp-libvips-linux-ppc64/-/sharp-libvips-linux-ppc64-1.3.4.tgz",
|
||||
"integrity": "sha512-Le6boB8Tai0Nis+gIxIpKx68UDVVIqdR8Tin5Yf1z2LJJQLDJvCDRqRu+jC2qCoD+eIomonmOwB4smBRxfVpYQ==",
|
||||
"cpu": [
|
||||
"ppc64"
|
||||
],
|
||||
"dev": true,
|
||||
"license": "LGPL-3.0-or-later",
|
||||
"optional": true,
|
||||
"os": [
|
||||
"linux"
|
||||
],
|
||||
"funding": {
|
||||
"url": "https://opencollective.com/libvips"
|
||||
}
|
||||
},
|
||||
"node_modules/@img/sharp-libvips-linux-riscv64": {
|
||||
"version": "1.3.4",
|
||||
"resolved": "https://registry.npmjs.org/@img/sharp-libvips-linux-riscv64/-/sharp-libvips-linux-riscv64-1.3.4.tgz",
|
||||
"integrity": "sha512-aHkkIEHPRdQEegJN20MLmGtxYD9R2wQr3Cwpddnu5+YKMt6Uzax7S9h5gpZTo8wyrGuZSlfQ63OevL5mTyOC7Q==",
|
||||
"cpu": [
|
||||
"riscv64"
|
||||
],
|
||||
"dev": true,
|
||||
"license": "LGPL-3.0-or-later",
|
||||
"optional": true,
|
||||
"os": [
|
||||
"linux"
|
||||
],
|
||||
"funding": {
|
||||
"url": "https://opencollective.com/libvips"
|
||||
}
|
||||
},
|
||||
"node_modules/@img/sharp-libvips-linux-s390x": {
|
||||
"version": "1.3.4",
|
||||
"resolved": "https://registry.npmjs.org/@img/sharp-libvips-linux-s390x/-/sharp-libvips-linux-s390x-1.3.4.tgz",
|
||||
"integrity": "sha512-ra/mB6MikESDUO7Yg+Mi95bFBb9GsObURuhnOv3OqknjGe9sZrG8tCe9q0xSIGrtLgvgw0gKnFWcK4blSgQOuQ==",
|
||||
"cpu": [
|
||||
"s390x"
|
||||
],
|
||||
"dev": true,
|
||||
"license": "LGPL-3.0-or-later",
|
||||
"optional": true,
|
||||
"os": [
|
||||
"linux"
|
||||
],
|
||||
"funding": {
|
||||
"url": "https://opencollective.com/libvips"
|
||||
}
|
||||
},
|
||||
"node_modules/@img/sharp-libvips-linux-x64": {
|
||||
"version": "1.3.4",
|
||||
"resolved": "https://registry.npmjs.org/@img/sharp-libvips-linux-x64/-/sharp-libvips-linux-x64-1.3.4.tgz",
|
||||
"integrity": "sha512-GJ//SSXbnwSDes02umB3nDJLFcQzw8a18V8fyhqr6tV515tOEMdImjjxj1AoafMRz56F3PHgftnj1QEKSU1zkw==",
|
||||
"cpu": [
|
||||
"x64"
|
||||
],
|
||||
"dev": true,
|
||||
"license": "LGPL-3.0-or-later",
|
||||
"optional": true,
|
||||
"os": [
|
||||
"linux"
|
||||
],
|
||||
"funding": {
|
||||
"url": "https://opencollective.com/libvips"
|
||||
}
|
||||
},
|
||||
"node_modules/@img/sharp-libvips-linuxmusl-arm64": {
|
||||
"version": "1.3.4",
|
||||
"resolved": "https://registry.npmjs.org/@img/sharp-libvips-linuxmusl-arm64/-/sharp-libvips-linuxmusl-arm64-1.3.4.tgz",
|
||||
"integrity": "sha512-hvulFwtjUcagsis6BBxHwGFwWoNZjgYmULGVrZcyfNbjA8hKILbRxGg15/7w5HDyXHXUos/j6baAWqnCyQ2DWA==",
|
||||
"cpu": [
|
||||
"arm64"
|
||||
],
|
||||
"dev": true,
|
||||
"license": "LGPL-3.0-or-later",
|
||||
"optional": true,
|
||||
"os": [
|
||||
"linux"
|
||||
],
|
||||
"funding": {
|
||||
"url": "https://opencollective.com/libvips"
|
||||
}
|
||||
},
|
||||
"node_modules/@img/sharp-libvips-linuxmusl-x64": {
|
||||
"version": "1.3.4",
|
||||
"resolved": "https://registry.npmjs.org/@img/sharp-libvips-linuxmusl-x64/-/sharp-libvips-linuxmusl-x64-1.3.4.tgz",
|
||||
"integrity": "sha512-6zXKeE/p39I1AmA3cJG35eyBGNqNddLnUXjhwBnsGjFPWqf5VKkDBEqaEkPDoTEtkxwi2vv8Tcr2mDyP4So7Fg==",
|
||||
"cpu": [
|
||||
"x64"
|
||||
],
|
||||
"dev": true,
|
||||
"license": "LGPL-3.0-or-later",
|
||||
"optional": true,
|
||||
"os": [
|
||||
"linux"
|
||||
],
|
||||
"funding": {
|
||||
"url": "https://opencollective.com/libvips"
|
||||
}
|
||||
},
|
||||
"node_modules/@img/sharp-linux-arm": {
|
||||
"version": "0.35.5",
|
||||
"resolved": "https://registry.npmjs.org/@img/sharp-linux-arm/-/sharp-linux-arm-0.35.5.tgz",
|
||||
"integrity": "sha512-LEaXK2WdXVK5ykcw0buWyPMsmLLL2vpHLD6yrNSW+JGEL3BZPA4tpKN6iaMc4AxTTAoaX/sU1rOL51lcIz48ZQ==",
|
||||
"cpu": [
|
||||
"arm"
|
||||
],
|
||||
"dev": true,
|
||||
"license": "Apache-2.0",
|
||||
"optional": true,
|
||||
"os": [
|
||||
"linux"
|
||||
],
|
||||
"engines": {
|
||||
"node": ">=20.9.0"
|
||||
},
|
||||
"funding": {
|
||||
"url": "https://opencollective.com/libvips"
|
||||
},
|
||||
"optionalDependencies": {
|
||||
"@img/sharp-libvips-linux-arm": "1.3.4"
|
||||
}
|
||||
},
|
||||
"node_modules/@img/sharp-linux-arm64": {
|
||||
"version": "0.35.5",
|
||||
"resolved": "https://registry.npmjs.org/@img/sharp-linux-arm64/-/sharp-linux-arm64-0.35.5.tgz",
|
||||
"integrity": "sha512-LYVx5JTsOM2CBzmxreh+nl64/3H6Xb09iSLknqH47z2T2DFFxDeFLP5y4dJwe6H7uGQlHPyEEtIqyo3DYsRwdQ==",
|
||||
"cpu": [
|
||||
"arm64"
|
||||
],
|
||||
"dev": true,
|
||||
"license": "Apache-2.0",
|
||||
"optional": true,
|
||||
"os": [
|
||||
"linux"
|
||||
],
|
||||
"engines": {
|
||||
"node": ">=20.9.0"
|
||||
},
|
||||
"funding": {
|
||||
"url": "https://opencollective.com/libvips"
|
||||
},
|
||||
"optionalDependencies": {
|
||||
"@img/sharp-libvips-linux-arm64": "1.3.4"
|
||||
}
|
||||
},
|
||||
"node_modules/@img/sharp-linux-ppc64": {
|
||||
"version": "0.35.5",
|
||||
"resolved": "https://registry.npmjs.org/@img/sharp-linux-ppc64/-/sharp-linux-ppc64-0.35.5.tgz",
|
||||
"integrity": "sha512-QVxAAq8evVRI9ia2vqgwrmWucn5Dfv+JdWzj75pD8omHLPSP7f8p20O8jxzjCcuCEQEOtYOZUmX1hkiZ0kdevA==",
|
||||
"cpu": [
|
||||
"ppc64"
|
||||
],
|
||||
"dev": true,
|
||||
"license": "Apache-2.0",
|
||||
"optional": true,
|
||||
"os": [
|
||||
"linux"
|
||||
],
|
||||
"engines": {
|
||||
"node": ">=20.9.0"
|
||||
},
|
||||
"funding": {
|
||||
"url": "https://opencollective.com/libvips"
|
||||
},
|
||||
"optionalDependencies": {
|
||||
"@img/sharp-libvips-linux-ppc64": "1.3.4"
|
||||
}
|
||||
},
|
||||
"node_modules/@img/sharp-linux-riscv64": {
|
||||
"version": "0.35.5",
|
||||
"resolved": "https://registry.npmjs.org/@img/sharp-linux-riscv64/-/sharp-linux-riscv64-0.35.5.tgz",
|
||||
"integrity": "sha512-LtdreXguaavKODPIfzJ4kffx7UNt1omwtK0rch4EBbbSTXPnxWmYSayXdLJw0fJzQ97kHt1gL/yh4tvU+nCyRQ==",
|
||||
"cpu": [
|
||||
"riscv64"
|
||||
],
|
||||
"dev": true,
|
||||
"license": "Apache-2.0",
|
||||
"optional": true,
|
||||
"os": [
|
||||
"linux"
|
||||
],
|
||||
"engines": {
|
||||
"node": ">=20.9.0"
|
||||
},
|
||||
"funding": {
|
||||
"url": "https://opencollective.com/libvips"
|
||||
},
|
||||
"optionalDependencies": {
|
||||
"@img/sharp-libvips-linux-riscv64": "1.3.4"
|
||||
}
|
||||
},
|
||||
"node_modules/@img/sharp-linux-s390x": {
|
||||
"version": "0.35.5",
|
||||
"resolved": "https://registry.npmjs.org/@img/sharp-linux-s390x/-/sharp-linux-s390x-0.35.5.tgz",
|
||||
"integrity": "sha512-UZasTOFiYzotTsGOCu42BfUzP6Tu6Do/947iRm1RsLKvlllxwGcn4RN27LibGWceix4Y+Pmw3jsnTcCQIgWjqA==",
|
||||
"cpu": [
|
||||
"s390x"
|
||||
],
|
||||
"dev": true,
|
||||
"license": "Apache-2.0",
|
||||
"optional": true,
|
||||
"os": [
|
||||
"linux"
|
||||
],
|
||||
"engines": {
|
||||
"node": ">=20.9.0"
|
||||
},
|
||||
"funding": {
|
||||
"url": "https://opencollective.com/libvips"
|
||||
},
|
||||
"optionalDependencies": {
|
||||
"@img/sharp-libvips-linux-s390x": "1.3.4"
|
||||
}
|
||||
},
|
||||
"node_modules/@img/sharp-linux-x64": {
|
||||
"version": "0.35.5",
|
||||
"resolved": "https://registry.npmjs.org/@img/sharp-linux-x64/-/sharp-linux-x64-0.35.5.tgz",
|
||||
"integrity": "sha512-SxFtLTeJInhAA9Q836kux2vZNeOBQEx658qvbboZScr0wIARym3IcGmW7KpVD5sbVg0Ojy+udFQdayYIZyoNog==",
|
||||
"cpu": [
|
||||
"x64"
|
||||
],
|
||||
"dev": true,
|
||||
"license": "Apache-2.0",
|
||||
"optional": true,
|
||||
"os": [
|
||||
"linux"
|
||||
],
|
||||
"engines": {
|
||||
"node": ">=20.9.0"
|
||||
},
|
||||
"funding": {
|
||||
"url": "https://opencollective.com/libvips"
|
||||
},
|
||||
"optionalDependencies": {
|
||||
"@img/sharp-libvips-linux-x64": "1.3.4"
|
||||
}
|
||||
},
|
||||
"node_modules/@img/sharp-linuxmusl-arm64": {
|
||||
"version": "0.35.5",
|
||||
"resolved": "https://registry.npmjs.org/@img/sharp-linuxmusl-arm64/-/sharp-linuxmusl-arm64-0.35.5.tgz",
|
||||
"integrity": "sha512-9HbMclmI1zlNkFRs3z9/eBtDjfD0sGlrX1z6b1qwmiFY5ElDLh4BC0LPBdVp7z1DXFiKlIcznf+ZlsuZzLxQqg==",
|
||||
"cpu": [
|
||||
"arm64"
|
||||
],
|
||||
"dev": true,
|
||||
"license": "Apache-2.0",
|
||||
"optional": true,
|
||||
"os": [
|
||||
"linux"
|
||||
],
|
||||
"engines": {
|
||||
"node": ">=20.9.0"
|
||||
},
|
||||
"funding": {
|
||||
"url": "https://opencollective.com/libvips"
|
||||
},
|
||||
"optionalDependencies": {
|
||||
"@img/sharp-libvips-linuxmusl-arm64": "1.3.4"
|
||||
}
|
||||
},
|
||||
"node_modules/@img/sharp-linuxmusl-x64": {
|
||||
"version": "0.35.5",
|
||||
"resolved": "https://registry.npmjs.org/@img/sharp-linuxmusl-x64/-/sharp-linuxmusl-x64-0.35.5.tgz",
|
||||
"integrity": "sha512-4KOphqB035HrVdqLZfCgMzzERrQkkzOwRhl4OAkRO1YCldbaFjySXMaK534Mo0V+LndnlJk+sbUyLeU0ULyD1A==",
|
||||
"cpu": [
|
||||
"x64"
|
||||
],
|
||||
"dev": true,
|
||||
"license": "Apache-2.0",
|
||||
"optional": true,
|
||||
"os": [
|
||||
"linux"
|
||||
],
|
||||
"engines": {
|
||||
"node": ">=20.9.0"
|
||||
},
|
||||
"funding": {
|
||||
"url": "https://opencollective.com/libvips"
|
||||
},
|
||||
"optionalDependencies": {
|
||||
"@img/sharp-libvips-linuxmusl-x64": "1.3.4"
|
||||
}
|
||||
},
|
||||
"node_modules/@img/sharp-wasm32": {
|
||||
"version": "0.35.5",
|
||||
"resolved": "https://registry.npmjs.org/@img/sharp-wasm32/-/sharp-wasm32-0.35.5.tgz",
|
||||
"integrity": "sha512-Ptsga1su4tQx+LLF1ECS9U6nz5kmrXKo6XVbtR48Ke3ZRxxgaWBu7IDtEe1quo8hiupwm6WFqxVlXaSf7IINGQ==",
|
||||
"dev": true,
|
||||
"license": "Apache-2.0 AND LGPL-3.0-or-later AND MIT",
|
||||
"optional": true,
|
||||
"dependencies": {
|
||||
"@emnapi/runtime": "^1.11.3"
|
||||
},
|
||||
"engines": {
|
||||
"node": ">=20.9.0"
|
||||
},
|
||||
"funding": {
|
||||
"url": "https://opencollective.com/libvips"
|
||||
}
|
||||
},
|
||||
"node_modules/@img/sharp-webcontainers-wasm32": {
|
||||
"version": "0.35.5",
|
||||
"resolved": "https://registry.npmjs.org/@img/sharp-webcontainers-wasm32/-/sharp-webcontainers-wasm32-0.35.5.tgz",
|
||||
"integrity": "sha512-hfhF/FmoQyTUkA0bIKFOtw536BQSeBMe6BF6QyWlrPxT754+TFLaZ7sKKTfvvM0yJgKgaYTwnFCIZ/GuDw5SUA==",
|
||||
"cpu": [
|
||||
"wasm32"
|
||||
],
|
||||
"dev": true,
|
||||
"license": "Apache-2.0",
|
||||
"optional": true,
|
||||
"dependencies": {
|
||||
"@img/sharp-wasm32": "0.35.5"
|
||||
},
|
||||
"engines": {
|
||||
"node": ">=20.9.0"
|
||||
},
|
||||
"funding": {
|
||||
"url": "https://opencollective.com/libvips"
|
||||
}
|
||||
},
|
||||
"node_modules/@img/sharp-win32-arm64": {
|
||||
"version": "0.35.5",
|
||||
"resolved": "https://registry.npmjs.org/@img/sharp-win32-arm64/-/sharp-win32-arm64-0.35.5.tgz",
|
||||
"integrity": "sha512-X4t7g+7ZA5DKblCBEXGjUqqemj4vczING/5viFwAL8h4N3qYeyjwdCvRLHi4EdOUI+2Z7UFlp1VM+p/AuEtm6Q==",
|
||||
"cpu": [
|
||||
"arm64"
|
||||
],
|
||||
"dev": true,
|
||||
"license": "Apache-2.0 AND LGPL-3.0-or-later",
|
||||
"optional": true,
|
||||
"os": [
|
||||
"win32"
|
||||
],
|
||||
"engines": {
|
||||
"node": ">=20.9.0"
|
||||
},
|
||||
"funding": {
|
||||
"url": "https://opencollective.com/libvips"
|
||||
}
|
||||
},
|
||||
"node_modules/@img/sharp-win32-ia32": {
|
||||
"version": "0.35.5",
|
||||
"resolved": "https://registry.npmjs.org/@img/sharp-win32-ia32/-/sharp-win32-ia32-0.35.5.tgz",
|
||||
"integrity": "sha512-5Zm82LoBc43nhwNybZlG7Y1KO//Zhsn306fQl29ZOuStHLGTo3BWL83q3cznX0poxSAMuYL1On/BHBxkBeKr6A==",
|
||||
"cpu": [
|
||||
"ia32"
|
||||
],
|
||||
"dev": true,
|
||||
"license": "Apache-2.0 AND LGPL-3.0-or-later",
|
||||
"optional": true,
|
||||
"os": [
|
||||
"win32"
|
||||
],
|
||||
"engines": {
|
||||
"node": "^20.9.0"
|
||||
},
|
||||
"funding": {
|
||||
"url": "https://opencollective.com/libvips"
|
||||
}
|
||||
},
|
||||
"node_modules/@img/sharp-win32-x64": {
|
||||
"version": "0.35.5",
|
||||
"resolved": "https://registry.npmjs.org/@img/sharp-win32-x64/-/sharp-win32-x64-0.35.5.tgz",
|
||||
"integrity": "sha512-x76eH0vEiHlcMQu8Y8IenntaACtddpT6W0wmXtWrnKcnKI7ME5DdgqhAD6SEWOEl1v2zDvkZDhFA9KnURwpfqg==",
|
||||
"cpu": [
|
||||
"x64"
|
||||
],
|
||||
"dev": true,
|
||||
"license": "Apache-2.0 AND LGPL-3.0-or-later",
|
||||
"optional": true,
|
||||
"os": [
|
||||
"win32"
|
||||
],
|
||||
"engines": {
|
||||
"node": ">=20.9.0"
|
||||
},
|
||||
"funding": {
|
||||
"url": "https://opencollective.com/libvips"
|
||||
}
|
||||
},
|
||||
"node_modules/@quansync/fs": {
|
||||
"version": "1.0.0",
|
||||
"resolved": "https://registry.npmjs.org/@quansync/fs/-/fs-1.0.0.tgz",
|
||||
"integrity": "sha512-4TJ3DFtlf1L5LDMaM6CanJ/0lckGNtJcMjQ1NAV6zDmA0tEHKZtxNKin8EgPaVX1YzljbxckyT2tJrpQKAtngQ==",
|
||||
"dev": true,
|
||||
"license": "MIT",
|
||||
"dependencies": {
|
||||
"quansync": "^1.0.0"
|
||||
},
|
||||
"funding": {
|
||||
"url": "https://github.com/sponsors/sxzz"
|
||||
}
|
||||
},
|
||||
"node_modules/ansis": {
|
||||
"version": "4.3.1",
|
||||
"resolved": "https://registry.npmjs.org/ansis/-/ansis-4.3.1.tgz",
|
||||
"integrity": "sha512-BJ8/l4R5LRE7hW9WdSuGYrLSHi2ynxeFpDFbH0K/CgNeY/tyhk+vO6TYxXC5r5CpUhNVX310xzPsN/H9lCdfOA==",
|
||||
"dev": true,
|
||||
"license": "ISC",
|
||||
"engines": {
|
||||
"node": ">=14"
|
||||
}
|
||||
},
|
||||
"node_modules/cac": {
|
||||
"version": "7.0.0",
|
||||
"resolved": "https://registry.npmjs.org/cac/-/cac-7.0.0.tgz",
|
||||
"integrity": "sha512-tixWYgm5ZoOD+3g6UTea91eow5z6AAHaho3g0V9CNSNb45gM8SmflpAc+GRd1InC4AqN/07Unrgp56Y94N9hJQ==",
|
||||
"dev": true,
|
||||
"license": "MIT",
|
||||
"engines": {
|
||||
"node": ">=20.19.0"
|
||||
}
|
||||
},
|
||||
"node_modules/consola": {
|
||||
"version": "3.4.2",
|
||||
"resolved": "https://registry.npmjs.org/consola/-/consola-3.4.2.tgz",
|
||||
"integrity": "sha512-5IKcdX0nnYavi6G7TtOhwkYzyjfJlatbjMjuLSfE2kYT5pMDOilZ4OvMhi637CcDICTmz3wARPoyhqyX1Y+XvA==",
|
||||
"dev": true,
|
||||
"license": "MIT",
|
||||
"engines": {
|
||||
"node": "^14.18.0 || >=16.10.0"
|
||||
}
|
||||
},
|
||||
"node_modules/d3-hierarchy": {
|
||||
"version": "3.1.2",
|
||||
"resolved": "https://registry.npmjs.org/d3-hierarchy/-/d3-hierarchy-3.1.2.tgz",
|
||||
"integrity": "sha512-FX/9frcub54beBdugHjDCdikxThEqjnR93Qt7PvQTOHxyiNCAlvMrHhclk3cD5VeAaq9fxmfRp+CnWw9rEMBuA==",
|
||||
"dev": true,
|
||||
"license": "ISC",
|
||||
"engines": {
|
||||
"node": ">=12"
|
||||
}
|
||||
},
|
||||
"node_modules/defu": {
|
||||
"version": "6.1.7",
|
||||
"resolved": "https://registry.npmjs.org/defu/-/defu-6.1.7.tgz",
|
||||
"integrity": "sha512-7z22QmUWiQ/2d0KkdYmANbRUVABpZ9SNYyH5vx6PZ+nE5bcC0l7uFvEfHlyld/HcGBFTL536ClDt3DEcSlEJAQ==",
|
||||
"dev": true,
|
||||
"license": "MIT"
|
||||
},
|
||||
"node_modules/destr": {
|
||||
"version": "2.0.5",
|
||||
"resolved": "https://registry.npmjs.org/destr/-/destr-2.0.5.tgz",
|
||||
"integrity": "sha512-ugFTXCtDZunbzasqBxrK93Ik/DRYsO6S/fedkWEMKqt04xZ4csmnmwGDBAb07QWNaGMAmnTIemsYZCksjATwsA==",
|
||||
"dev": true,
|
||||
"license": "MIT"
|
||||
},
|
||||
"node_modules/detect-libc": {
|
||||
"version": "2.1.2",
|
||||
"resolved": "https://registry.npmjs.org/detect-libc/-/detect-libc-2.1.2.tgz",
|
||||
"integrity": "sha512-Btj2BOOO83o3WyH59e8MgXsxEQVcarkUOpEYrubB0urwnN10yQ364rsiByU11nZlqWYZm05i/of7io4mzihBtQ==",
|
||||
"dev": true,
|
||||
"license": "Apache-2.0",
|
||||
"engines": {
|
||||
"node": ">=8"
|
||||
}
|
||||
},
|
||||
"node_modules/jiti": {
|
||||
"version": "2.7.0",
|
||||
"resolved": "https://registry.npmjs.org/jiti/-/jiti-2.7.0.tgz",
|
||||
"integrity": "sha512-AC/7JofJvZGrrneWNaEnJeOLUx+JlGt7tNa0wZiRPT4MY1wmfKjt2+6O2p2uz2+skll8OZZmJMNqeke7kKbNgQ==",
|
||||
"dev": true,
|
||||
"license": "MIT",
|
||||
"bin": {
|
||||
"jiti": "lib/jiti-cli.mjs"
|
||||
}
|
||||
},
|
||||
"node_modules/node-fetch-native": {
|
||||
"version": "1.6.7",
|
||||
"resolved": "https://registry.npmjs.org/node-fetch-native/-/node-fetch-native-1.6.7.tgz",
|
||||
"integrity": "sha512-g9yhqoedzIUm0nTnTqAQvueMPVOuIY16bqgAJJC8XOOubYFNwz6IER9qs0Gq2Xd0+CecCKFjtdDTMA4u4xG06Q==",
|
||||
"dev": true,
|
||||
"license": "MIT"
|
||||
},
|
||||
"node_modules/normalize-url": {
|
||||
"version": "9.0.1",
|
||||
"resolved": "https://registry.npmjs.org/normalize-url/-/normalize-url-9.0.1.tgz",
|
||||
"integrity": "sha512-ARftfC5HdUNu9jJeL8pHj8debUIHA2b91FizCoMzY4lG6dDX13jdvTK0TBe24IBDRf2HvJSzzwEPvmbkQWHRSg==",
|
||||
"dev": true,
|
||||
"license": "MIT",
|
||||
"engines": {
|
||||
"node": ">=20"
|
||||
},
|
||||
"funding": {
|
||||
"url": "https://github.com/sponsors/sindresorhus"
|
||||
}
|
||||
},
|
||||
"node_modules/ofetch": {
|
||||
"version": "1.5.1",
|
||||
"resolved": "https://registry.npmjs.org/ofetch/-/ofetch-1.5.1.tgz",
|
||||
"integrity": "sha512-2W4oUZlVaqAPAil6FUg/difl6YhqhUR7x2eZY4bQCko22UXg3hptq9KLQdqFClV+Wu85UX7hNtdGTngi/1BxcA==",
|
||||
"dev": true,
|
||||
"license": "MIT",
|
||||
"dependencies": {
|
||||
"destr": "^2.0.5",
|
||||
"node-fetch-native": "^1.6.7",
|
||||
"ufo": "^1.6.1"
|
||||
}
|
||||
},
|
||||
"node_modules/p-limit": {
|
||||
"version": "7.3.1",
|
||||
"resolved": "https://registry.npmjs.org/p-limit/-/p-limit-7.3.1.tgz",
|
||||
"integrity": "sha512-0trZaiG7Y7kN/Egy9a8j47t9osC0Tch4PaIWd9yGF6bvmlk7muExRvGNYb8sXBwEKMoNKsbNN9P8EefuQekE4Q==",
|
||||
"dev": true,
|
||||
"license": "MIT",
|
||||
"dependencies": {
|
||||
"yocto-queue": "^1.2.1"
|
||||
},
|
||||
"engines": {
|
||||
"node": ">=20"
|
||||
},
|
||||
"funding": {
|
||||
"url": "https://github.com/sponsors/sindresorhus"
|
||||
}
|
||||
},
|
||||
"node_modules/quansync": {
|
||||
"version": "1.0.0",
|
||||
"resolved": "https://registry.npmjs.org/quansync/-/quansync-1.0.0.tgz",
|
||||
"integrity": "sha512-5xZacEEufv3HSTPQuchrvV6soaiACMFnq1H8wkVioctoH3TRha9Sz66lOxRwPK/qZj7HPiSveih9yAyh98gvqA==",
|
||||
"dev": true,
|
||||
"funding": [
|
||||
{
|
||||
"type": "individual",
|
||||
"url": "https://github.com/sponsors/antfu"
|
||||
},
|
||||
{
|
||||
"type": "individual",
|
||||
"url": "https://github.com/sponsors/sxzz"
|
||||
}
|
||||
],
|
||||
"license": "MIT"
|
||||
},
|
||||
"node_modules/semver": {
|
||||
"version": "7.8.5",
|
||||
"resolved": "https://registry.npmjs.org/semver/-/semver-7.8.5.tgz",
|
||||
"integrity": "sha512-Y7/KDsb8LjooZpwaqGyulO6DQlksgCncchHGk+sZIY4SBvUocMBEFH5Ur1fI4dV+Jvl0w6cjvucaIi40puRioA==",
|
||||
"dev": true,
|
||||
"license": "ISC",
|
||||
"bin": {
|
||||
"semver": "bin/semver.js"
|
||||
},
|
||||
"engines": {
|
||||
"node": ">=10"
|
||||
}
|
||||
},
|
||||
"node_modules/sharp": {
|
||||
"version": "0.35.5",
|
||||
"resolved": "https://registry.npmjs.org/sharp/-/sharp-0.35.5.tgz",
|
||||
"integrity": "sha512-Ywn4OnzGukp7CDMrp08RQ50YKmuwG47brZgIVPTvBaaAfQlRlygrRqSrxdCiL9M+LlzLBiJ68IR1QqvzHyjC7g==",
|
||||
"dev": true,
|
||||
"license": "Apache-2.0",
|
||||
"dependencies": {
|
||||
"@img/colour": "^1.1.0",
|
||||
"detect-libc": "^2.1.2",
|
||||
"semver": "^7.8.5"
|
||||
},
|
||||
"engines": {
|
||||
"node": ">=20.9.0"
|
||||
},
|
||||
"funding": {
|
||||
"url": "https://opencollective.com/libvips"
|
||||
},
|
||||
"optionalDependencies": {
|
||||
"@img/sharp-darwin-arm64": "0.35.5",
|
||||
"@img/sharp-darwin-x64": "0.35.5",
|
||||
"@img/sharp-freebsd-wasm32": "0.35.5",
|
||||
"@img/sharp-libvips-darwin-arm64": "1.3.4",
|
||||
"@img/sharp-libvips-darwin-x64": "1.3.4",
|
||||
"@img/sharp-libvips-linux-arm": "1.3.4",
|
||||
"@img/sharp-libvips-linux-arm64": "1.3.4",
|
||||
"@img/sharp-libvips-linux-ppc64": "1.3.4",
|
||||
"@img/sharp-libvips-linux-riscv64": "1.3.4",
|
||||
"@img/sharp-libvips-linux-s390x": "1.3.4",
|
||||
"@img/sharp-libvips-linux-x64": "1.3.4",
|
||||
"@img/sharp-libvips-linuxmusl-arm64": "1.3.4",
|
||||
"@img/sharp-libvips-linuxmusl-x64": "1.3.4",
|
||||
"@img/sharp-linux-arm": "0.35.5",
|
||||
"@img/sharp-linux-arm64": "0.35.5",
|
||||
"@img/sharp-linux-ppc64": "0.35.5",
|
||||
"@img/sharp-linux-riscv64": "0.35.5",
|
||||
"@img/sharp-linux-s390x": "0.35.5",
|
||||
"@img/sharp-linux-x64": "0.35.5",
|
||||
"@img/sharp-linuxmusl-arm64": "0.35.5",
|
||||
"@img/sharp-linuxmusl-x64": "0.35.5",
|
||||
"@img/sharp-webcontainers-wasm32": "0.35.5",
|
||||
"@img/sharp-win32-arm64": "0.35.5",
|
||||
"@img/sharp-win32-ia32": "0.35.5",
|
||||
"@img/sharp-win32-x64": "0.35.5"
|
||||
},
|
||||
"peerDependenciesMeta": {
|
||||
"@types/node": {
|
||||
"optional": true
|
||||
}
|
||||
}
|
||||
},
|
||||
"node_modules/sponsorkit": {
|
||||
"version": "18.0.0",
|
||||
"resolved": "https://registry.npmjs.org/sponsorkit/-/sponsorkit-18.0.0.tgz",
|
||||
"integrity": "sha512-9Jr+n4SjU8Qtldq8i0UlwwqBEAVy5JFbIQNXRUIs1N+LPTCnX2/of5oyHYftCLi3KxAODVMmyEdWqkJMTagR6w==",
|
||||
"dev": true,
|
||||
"license": "MIT",
|
||||
"dependencies": {
|
||||
"ansis": "^4.3.1",
|
||||
"cac": "^7.0.0",
|
||||
"consola": "^3.4.2",
|
||||
"d3-hierarchy": "^3.1.2",
|
||||
"normalize-url": "^9.0.1",
|
||||
"ofetch": "^1.5.1",
|
||||
"p-limit": "^7.3.1",
|
||||
"sharp": "^0.35.3",
|
||||
"unconfig": "^7.5.0"
|
||||
},
|
||||
"bin": {
|
||||
"sponsorkit": "dist/cli.mjs"
|
||||
},
|
||||
"engines": {
|
||||
"node": "^22.18.0 || ^24.11.0 || >=26.0.0"
|
||||
},
|
||||
"funding": {
|
||||
"url": "https://github.com/sponsors/antfu"
|
||||
}
|
||||
},
|
||||
"node_modules/tslib": {
|
||||
"version": "2.8.1",
|
||||
"resolved": "https://registry.npmjs.org/tslib/-/tslib-2.8.1.tgz",
|
||||
"integrity": "sha512-oJFu94HQb+KVduSUQL7wnpmqnfmLsOA/nAh6b6EH0wCEoK0/mPeXU6c3wKDV83MkOuHPRHtSXKKU99IBazS/2w==",
|
||||
"dev": true,
|
||||
"license": "0BSD",
|
||||
"optional": true
|
||||
},
|
||||
"node_modules/ufo": {
|
||||
"version": "1.6.4",
|
||||
"resolved": "https://registry.npmjs.org/ufo/-/ufo-1.6.4.tgz",
|
||||
"integrity": "sha512-JFNbkD1Svwe0KvGi8GOeLcP4kAWQ609twvCdcHxq1oSL8svv39ZuSvajcD8B+5D0eL4+s1Is2D/O6KN3qcTeRA==",
|
||||
"dev": true,
|
||||
"license": "MIT"
|
||||
},
|
||||
"node_modules/unconfig": {
|
||||
"version": "7.5.0",
|
||||
"resolved": "https://registry.npmjs.org/unconfig/-/unconfig-7.5.0.tgz",
|
||||
"integrity": "sha512-oi8Qy2JV4D3UQ0PsopR28CzdQ3S/5A1zwsUwp/rosSbfhJ5z7b90bIyTwi/F7hCLD4SGcZVjDzd4XoUQcEanvA==",
|
||||
"dev": true,
|
||||
"license": "MIT",
|
||||
"dependencies": {
|
||||
"@quansync/fs": "^1.0.0",
|
||||
"defu": "^6.1.4",
|
||||
"jiti": "^2.6.1",
|
||||
"quansync": "^1.0.0",
|
||||
"unconfig-core": "7.5.0"
|
||||
},
|
||||
"funding": {
|
||||
"url": "https://github.com/sponsors/antfu"
|
||||
}
|
||||
},
|
||||
"node_modules/unconfig-core": {
|
||||
"version": "7.5.0",
|
||||
"resolved": "https://registry.npmjs.org/unconfig-core/-/unconfig-core-7.5.0.tgz",
|
||||
"integrity": "sha512-Su3FauozOGP44ZmKdHy2oE6LPjk51M/TRRjHv2HNCWiDvfvCoxC2lno6jevMA91MYAdCdwP05QnWdWpSbncX/w==",
|
||||
"dev": true,
|
||||
"license": "MIT",
|
||||
"dependencies": {
|
||||
"@quansync/fs": "^1.0.0",
|
||||
"quansync": "^1.0.0"
|
||||
},
|
||||
"funding": {
|
||||
"url": "https://github.com/sponsors/antfu"
|
||||
}
|
||||
},
|
||||
"node_modules/yocto-queue": {
|
||||
"version": "1.2.2",
|
||||
"resolved": "https://registry.npmjs.org/yocto-queue/-/yocto-queue-1.2.2.tgz",
|
||||
"integrity": "sha512-4LCcse/U2MHZ63HAJVE+v71o7yOdIe4cZ70Wpf8D/IyjDKYQLV5GD46B+hSTjJsvV5PztjvHoU580EftxjDZFQ==",
|
||||
"dev": true,
|
||||
"license": "MIT",
|
||||
"engines": {
|
||||
"node": ">=12.20"
|
||||
},
|
||||
"funding": {
|
||||
"url": "https://github.com/sponsors/sindresorhus"
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,9 @@
|
||||
{
|
||||
"name": "spoolman-sponsorkit",
|
||||
"private": true,
|
||||
"description": "Generates the sponsors image rendered in the README. Run by .github/workflows/sponsors.yml.",
|
||||
"type": "module",
|
||||
"devDependencies": {
|
||||
"sponsorkit": "18.0.0"
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,112 @@
|
||||
import { defineConfig, tierPresets } from 'sponsorkit'
|
||||
import type { Provider, Sponsorship } from 'sponsorkit'
|
||||
|
||||
/**
|
||||
* People who tipped on Ko-fi and asked to be credited on the sponsors board.
|
||||
* Ko-fi has no API we can query, so these are transcribed by hand from the
|
||||
* Ko-fi dashboard. A tip counts toward a tier for KOFI_TIP_EFFECTIVITY_DAYS,
|
||||
* after which the entry drops to "Past Sponsors" on its own - the same way a
|
||||
* one-time GitHub sponsorship ages out, so nothing here needs pruning.
|
||||
*/
|
||||
const kofiTips: KofiTip[] = [
|
||||
{ login: 'marko-p', dollars: 10, date: '2026-09-01' },
|
||||
]
|
||||
|
||||
/** Days a one-time tip keeps counting. Matches sponsorkit's own Ko-fi provider. */
|
||||
const KOFI_TIP_EFFECTIVITY_DAYS = 30
|
||||
|
||||
interface KofiTip {
|
||||
/** GitHub login. Drives the avatar and the link on the board. */
|
||||
login: string
|
||||
/** Display name, defaults to the login. */
|
||||
name?: string
|
||||
/** Tip amount in USD. Decides the tier, see the `tiers` list below. */
|
||||
dollars: number
|
||||
/** Date of the tip, YYYY-MM-DD. */
|
||||
date: string
|
||||
}
|
||||
|
||||
function kofiTipToSponsorship(tip: KofiTip): Sponsorship {
|
||||
const expireAt = new Date(Date.parse(tip.date) + KOFI_TIP_EFFECTIVITY_DAYS * 24 * 60 * 60 * 1000)
|
||||
return {
|
||||
sponsor: {
|
||||
type: 'User',
|
||||
login: tip.login,
|
||||
name: tip.name ?? tip.login,
|
||||
avatarUrl: `https://github.com/${tip.login}.png`,
|
||||
linkUrl: `https://github.com/${tip.login}`,
|
||||
},
|
||||
// -1 is sponsorkit's marker for a sponsorship that has run out.
|
||||
monthlyDollars: expireAt > new Date() ? tip.dollars : -1,
|
||||
isOneTime: true,
|
||||
privacyLevel: 'PUBLIC',
|
||||
tierName: 'Ko-fi',
|
||||
createdAt: new Date(tip.date).toISOString(),
|
||||
expireAt: expireAt.toISOString(),
|
||||
}
|
||||
}
|
||||
|
||||
const KofiManualProvider: Provider = {
|
||||
name: 'kofi-manual',
|
||||
async fetchSponsors() {
|
||||
return kofiTips.map(kofiTipToSponsorship)
|
||||
},
|
||||
}
|
||||
|
||||
export default defineConfig({
|
||||
github: {
|
||||
login: 'Donkie',
|
||||
type: 'user',
|
||||
},
|
||||
|
||||
// Listing providers explicitly disables auto-detection, so GitHub has to be
|
||||
// named here alongside the hand-maintained Ko-fi list.
|
||||
providers: ['github', KofiManualProvider],
|
||||
|
||||
width: 800,
|
||||
renderer: 'tiers',
|
||||
formats: ['svg', 'png'],
|
||||
// Relative to this directory. Lands next to the other README images.
|
||||
outputDir: '../media',
|
||||
name: 'sponsors',
|
||||
// Resolved against outputDir; keep the fetch cache out of the media folder.
|
||||
cacheFile: '../sponsorkit/.cache.json',
|
||||
|
||||
tiers: [
|
||||
{
|
||||
title: 'Backers',
|
||||
preset: tierPresets.xs,
|
||||
},
|
||||
{
|
||||
title: 'Supporters',
|
||||
monthlyDollars: 10,
|
||||
preset: tierPresets.medium,
|
||||
},
|
||||
{
|
||||
title: 'Sponsors',
|
||||
monthlyDollars: 25,
|
||||
preset: tierPresets.large,
|
||||
},
|
||||
{
|
||||
title: 'Silver Sponsors',
|
||||
monthlyDollars: 50,
|
||||
preset: tierPresets.xl,
|
||||
},
|
||||
{
|
||||
title: 'Gold Sponsors',
|
||||
monthlyDollars: 100,
|
||||
preset: {
|
||||
...tierPresets.xl,
|
||||
avatar: { size: 120 },
|
||||
boxWidth: 150,
|
||||
boxHeight: 160,
|
||||
name: { maxLength: 25 },
|
||||
},
|
||||
},
|
||||
{
|
||||
title: 'Past Sponsors',
|
||||
monthlyDollars: -1,
|
||||
preset: tierPresets.xs,
|
||||
},
|
||||
],
|
||||
})
|
||||
+279
-11
@@ -3,7 +3,13 @@ name: CI
|
||||
on:
|
||||
push:
|
||||
branches:
|
||||
- master
|
||||
# Every branch builds, so a fix can be handed to a bug reporter as a Docker
|
||||
# image before it merges (see publish-images). Weblate pushes locale-only
|
||||
# commits constantly and dependabot's branches arrive as PRs anyway, so
|
||||
# bot branches skip push runs and are built by the pull_request run instead.
|
||||
- "**"
|
||||
- "!weblate*"
|
||||
- "!dependabot/**"
|
||||
tags:
|
||||
- "v*"
|
||||
pull_request:
|
||||
@@ -14,6 +20,13 @@ permissions:
|
||||
contents: read
|
||||
packages: read
|
||||
|
||||
# A new push makes the previous run's result irrelevant, so cancel it and let the
|
||||
# new one have the runners. Master and tags are exempt: both publish images, and a
|
||||
# cancelled run there is a half-published release.
|
||||
concurrency:
|
||||
group: ${{ github.workflow }}-${{ github.ref }}
|
||||
cancel-in-progress: ${{ github.ref != 'refs/heads/master' && !startsWith(github.ref, 'refs/tags/') }}
|
||||
|
||||
env:
|
||||
GHCR_IMAGE: donkie/spoolman
|
||||
|
||||
@@ -22,6 +35,11 @@ jobs:
|
||||
# Linting
|
||||
#
|
||||
style:
|
||||
# Same-repo branches already got a full run from the push trigger, so skip the
|
||||
# duplicate pull_request run. Bot branches excluded above still need it, as do
|
||||
# forks, whose pushes fire no event here. Skipping the three jobs with no `needs`
|
||||
# cascades to every other job, since a skipped dependency skips its dependents.
|
||||
if: ${{ github.event_name != 'pull_request' || github.event.pull_request.head.repo.full_name != github.repository || startsWith(github.head_ref, 'dependabot/') || startsWith(github.head_ref, 'weblate') }}
|
||||
runs-on: ubuntu-latest
|
||||
steps:
|
||||
- name: Checkout
|
||||
@@ -30,7 +48,7 @@ jobs:
|
||||
- name: Install node
|
||||
uses: actions/setup-node@v4.0.3
|
||||
with:
|
||||
node-version: '20'
|
||||
node-version: '24'
|
||||
|
||||
- name: Install uv
|
||||
uses: astral-sh/setup-uv@v7
|
||||
@@ -50,6 +68,13 @@ jobs:
|
||||
cd client
|
||||
npm ci
|
||||
|
||||
# lefthook's `ci` hook lints/formats/type-checks client_v2 too, via
|
||||
# hardcoded ./node_modules/.bin/* paths, so its deps must be present.
|
||||
- name: Install client_v2 dependencies
|
||||
run: |
|
||||
cd client_v2
|
||||
npm ci
|
||||
|
||||
- name: Run pre-commit
|
||||
run: uv run lefthook run ci
|
||||
#
|
||||
@@ -57,6 +82,11 @@ jobs:
|
||||
# This is done on native hardware to speed things up, vite is very slow on emulated hardware
|
||||
#
|
||||
build-client:
|
||||
# Same-repo branches already got a full run from the push trigger, so skip the
|
||||
# duplicate pull_request run. Bot branches excluded above still need it, as do
|
||||
# forks, whose pushes fire no event here. Skipping the three jobs with no `needs`
|
||||
# cascades to every other job, since a skipped dependency skips its dependents.
|
||||
if: ${{ github.event_name != 'pull_request' || github.event.pull_request.head.repo.full_name != github.repository || startsWith(github.head_ref, 'dependabot/') || startsWith(github.head_ref, 'weblate') }}
|
||||
runs-on: ubuntu-latest
|
||||
steps:
|
||||
- name: Checkout
|
||||
@@ -65,7 +95,7 @@ jobs:
|
||||
- name: Install node
|
||||
uses: actions/setup-node@v4.0.3
|
||||
with:
|
||||
node-version: '20'
|
||||
node-version: '24'
|
||||
|
||||
- name: Install uv
|
||||
uses: astral-sh/setup-uv@v7
|
||||
@@ -204,6 +234,11 @@ jobs:
|
||||
# Build tester image for integration tests
|
||||
#
|
||||
build-tester:
|
||||
# Same-repo branches already got a full run from the push trigger, so skip the
|
||||
# duplicate pull_request run. Bot branches excluded above still need it, as do
|
||||
# forks, whose pushes fire no event here. Skipping the three jobs with no `needs`
|
||||
# cascades to every other job, since a skipped dependency skips its dependents.
|
||||
if: ${{ github.event_name != 'pull_request' || github.event.pull_request.head.repo.full_name != github.repository || startsWith(github.head_ref, 'dependabot/') || startsWith(github.head_ref, 'weblate') }}
|
||||
runs-on: ubuntu-latest
|
||||
permissions:
|
||||
packages: write
|
||||
@@ -298,7 +333,7 @@ jobs:
|
||||
- name: Install node
|
||||
uses: actions/setup-node@v4.0.3
|
||||
with:
|
||||
node-version: '20'
|
||||
node-version: '24'
|
||||
|
||||
- name: Install Playwright
|
||||
run: |
|
||||
@@ -330,12 +365,79 @@ jobs:
|
||||
if: always()
|
||||
run: docker compose -f tests_frontend/docker-compose.yml down -v
|
||||
#
|
||||
# Perform frontend (browser) integration tests for client_v2 against the real image
|
||||
#
|
||||
test-frontend-v2:
|
||||
needs: [build-amd64]
|
||||
runs-on: ubuntu-latest
|
||||
permissions:
|
||||
contents: read
|
||||
# Argos authenticates via OIDC; fork PRs get no id-token and fall back to tokenless upload.
|
||||
id-token: write
|
||||
steps:
|
||||
- name: Checkout
|
||||
uses: actions/checkout@v6
|
||||
|
||||
- name: Download built image
|
||||
uses: actions/download-artifact@v4.1.7
|
||||
with:
|
||||
name: spoolman-image
|
||||
path: /tmp/spoolman-image
|
||||
|
||||
- name: Load built image
|
||||
run: docker load --input /tmp/spoolman-image/spoolman.tar
|
||||
|
||||
- name: Install node
|
||||
uses: actions/setup-node@v4.0.3
|
||||
with:
|
||||
node-version: '24'
|
||||
|
||||
- name: Install Playwright
|
||||
run: |
|
||||
cd tests_frontend_v2
|
||||
npm ci
|
||||
npx playwright install --with-deps chromium
|
||||
|
||||
- name: Start Spoolman
|
||||
run: docker compose -f tests_frontend_v2/docker-compose.yml up -d --wait
|
||||
|
||||
# Screenshots first: they seed a fixed dataset and need the database empty.
|
||||
# The Argos reporter uploads them and posts the visual diff on the PR.
|
||||
- name: Take client_v2 screenshots
|
||||
env:
|
||||
ARGOS_UPLOAD: "1"
|
||||
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
|
||||
run: |
|
||||
cd tests_frontend_v2
|
||||
npx playwright test --project screenshots
|
||||
|
||||
- name: Run client_v2 frontend integration tests
|
||||
run: |
|
||||
cd tests_frontend_v2
|
||||
npx playwright test --project chromium
|
||||
|
||||
- name: Dump Spoolman logs on failure
|
||||
if: failure()
|
||||
run: docker compose -f tests_frontend_v2/docker-compose.yml logs spoolman
|
||||
|
||||
- name: Upload Playwright report
|
||||
if: ${{ !cancelled() }}
|
||||
uses: actions/upload-artifact@v4.4.0
|
||||
with:
|
||||
name: playwright-report-v2
|
||||
path: tests_frontend_v2/playwright-report
|
||||
retention-days: 7
|
||||
|
||||
- name: Stop Spoolman
|
||||
if: always()
|
||||
run: docker compose -f tests_frontend_v2/docker-compose.yml down -v
|
||||
#
|
||||
# Build arm64 image
|
||||
# Don't run this for pull requests
|
||||
# Only push to buildcache and let release job push to registry
|
||||
# Also exported to a tar so test-multiarch-smoke can boot it under QEMU.
|
||||
# On pull requests we can't push to buildcache (forks don't have registry
|
||||
# write access), so cache-to is skipped and we only read from it.
|
||||
#
|
||||
build-arm64:
|
||||
if: ${{ github.event_name != 'pull_request' }}
|
||||
needs: [build-client]
|
||||
runs-on: ubuntu-latest
|
||||
permissions:
|
||||
@@ -370,19 +472,39 @@ jobs:
|
||||
password: ${{ secrets.GITHUB_TOKEN }}
|
||||
|
||||
- name: Build and cache Docker image
|
||||
if: ${{ github.event_name != 'pull_request' }}
|
||||
uses: docker/build-push-action@v6.7.0
|
||||
with:
|
||||
context: .
|
||||
platforms: linux/arm64
|
||||
tags: ${{ env.GHCR_IMAGE }}:test-arm64
|
||||
outputs: type=docker,dest=/tmp/spoolman-arm64.tar
|
||||
cache-from: type=registry,ref=ghcr.io/${{ env.GHCR_IMAGE }}:buildcache-arm64
|
||||
cache-to: type=registry,ref=ghcr.io/${{ env.GHCR_IMAGE }}:buildcache-arm64,mode=max
|
||||
|
||||
# Separate build for pull requests since PRs dont have access to store cache
|
||||
- name: Build and cache Docker image (PR)
|
||||
if: ${{ github.event_name == 'pull_request' }}
|
||||
uses: docker/build-push-action@v6.7.0
|
||||
with:
|
||||
context: .
|
||||
platforms: linux/arm64
|
||||
tags: ${{ env.GHCR_IMAGE }}:test-arm64
|
||||
outputs: type=docker,dest=/tmp/spoolman-arm64.tar
|
||||
cache-from: type=registry,ref=ghcr.io/${{ env.GHCR_IMAGE }}:buildcache-arm64
|
||||
|
||||
- name: Upload arm64 image artifact
|
||||
uses: actions/upload-artifact@v4.4.0
|
||||
with:
|
||||
name: spoolman-image-arm64
|
||||
path: /tmp/spoolman-arm64.tar
|
||||
#
|
||||
# Build arm/v7 image
|
||||
# Don't run this for pull requests
|
||||
# Only push to buildcache and let release job push to registry
|
||||
# Also exported to a tar so test-multiarch-smoke can boot it under QEMU.
|
||||
# On pull requests we can't push to buildcache (forks don't have registry
|
||||
# write access), so cache-to is skipped and we only read from it.
|
||||
#
|
||||
build-armv7:
|
||||
if: ${{ github.event_name != 'pull_request' }}
|
||||
needs: [build-client]
|
||||
runs-on: ubuntu-latest
|
||||
permissions:
|
||||
@@ -407,8 +529,28 @@ jobs:
|
||||
uses: docker/setup-qemu-action@v3.2.0
|
||||
|
||||
- name: Set up Docker Buildx
|
||||
id: buildx
|
||||
uses: docker/setup-buildx-action@v3.6.1
|
||||
|
||||
# Keep uv's cache of wheels built from source (asyncpg, greenlet, ...) across
|
||||
# runs. They have no armv7 wheels, and compiling them under QEMU is ~9 of the
|
||||
# ~11 minutes of a build that misses the layer cache (lockfile or base image
|
||||
# changed). The Dockerfile prunes the cache down to just those wheels, so it's
|
||||
# small enough to save on every run and always restore the newest one.
|
||||
- name: Cache uv wheels
|
||||
uses: actions/cache@v4
|
||||
with:
|
||||
path: uv-cache
|
||||
key: uv-cache-armv7-${{ github.run_id }}
|
||||
restore-keys: uv-cache-armv7-
|
||||
|
||||
- name: Inject uv cache into BuildKit
|
||||
uses: reproducible-containers/buildkit-cache-dance@v3.4.0
|
||||
with:
|
||||
builder: ${{ steps.buildx.outputs.name }}
|
||||
cache-map: |
|
||||
{ "uv-cache": "/root/.cache/uv" }
|
||||
|
||||
- name: Log in to the Github Container registry
|
||||
uses: docker/login-action@v3.3.0
|
||||
with:
|
||||
@@ -417,22 +559,117 @@ jobs:
|
||||
password: ${{ secrets.GITHUB_TOKEN }}
|
||||
|
||||
- name: Build and cache Docker image
|
||||
if: ${{ github.event_name != 'pull_request' }}
|
||||
uses: docker/build-push-action@v6.7.0
|
||||
with:
|
||||
context: .
|
||||
platforms: linux/arm/v7
|
||||
tags: ${{ env.GHCR_IMAGE }}:test-armv7
|
||||
outputs: type=docker,dest=/tmp/spoolman-armv7.tar
|
||||
cache-from: type=registry,ref=ghcr.io/${{ env.GHCR_IMAGE }}:buildcache-armv7
|
||||
cache-to: type=registry,ref=ghcr.io/${{ env.GHCR_IMAGE }}:buildcache-armv7,mode=max
|
||||
|
||||
# Separate build for pull requests since PRs dont have access to store cache
|
||||
- name: Build and cache Docker image (PR)
|
||||
if: ${{ github.event_name == 'pull_request' }}
|
||||
uses: docker/build-push-action@v6.7.0
|
||||
with:
|
||||
context: .
|
||||
platforms: linux/arm/v7
|
||||
tags: ${{ env.GHCR_IMAGE }}:test-armv7
|
||||
outputs: type=docker,dest=/tmp/spoolman-armv7.tar
|
||||
cache-from: type=registry,ref=ghcr.io/${{ env.GHCR_IMAGE }}:buildcache-armv7
|
||||
|
||||
- name: Upload armv7 image artifact
|
||||
uses: actions/upload-artifact@v4.4.0
|
||||
with:
|
||||
name: spoolman-image-armv7
|
||||
path: /tmp/spoolman-armv7.tar
|
||||
#
|
||||
# Smoke test the arm64 and armv7 images under QEMU emulation: boot the
|
||||
# container with no config (defaults to SQLite, no external DB needed) and
|
||||
# confirm /api/v1/health comes up. Emulated boot (interpreter start +
|
||||
# alembic migrations) is slow, hence the generous retry budget.
|
||||
#
|
||||
test-multiarch-smoke:
|
||||
needs: [build-arm64, build-armv7]
|
||||
strategy:
|
||||
fail-fast: false
|
||||
matrix:
|
||||
include:
|
||||
- arch: arm64
|
||||
platform: linux/arm64
|
||||
artifact: spoolman-image-arm64
|
||||
tarball: spoolman-arm64.tar
|
||||
- arch: armv7
|
||||
platform: linux/arm/v7
|
||||
artifact: spoolman-image-armv7
|
||||
tarball: spoolman-armv7.tar
|
||||
runs-on: ubuntu-latest
|
||||
timeout-minutes: 15
|
||||
steps:
|
||||
- name: Set up QEMU
|
||||
uses: docker/setup-qemu-action@v3.2.0
|
||||
|
||||
- name: Download built image
|
||||
uses: actions/download-artifact@v4.1.7
|
||||
with:
|
||||
name: ${{ matrix.artifact }}
|
||||
path: /tmp/spoolman-image
|
||||
|
||||
- name: Load built image
|
||||
run: docker load --input /tmp/spoolman-image/${{ matrix.tarball }}
|
||||
|
||||
- name: Start Spoolman (${{ matrix.arch }}, emulated via QEMU)
|
||||
run: |
|
||||
docker run -d --name spoolman-smoke \
|
||||
--platform ${{ matrix.platform }} \
|
||||
-p 8000:8000 \
|
||||
${{ env.GHCR_IMAGE }}:test-${{ matrix.arch }}
|
||||
|
||||
- name: Wait for /health endpoint
|
||||
run: |
|
||||
for i in $(seq 1 90); do
|
||||
if curl -fsS http://localhost:8000/api/v1/health; then
|
||||
echo
|
||||
echo "Spoolman (${{ matrix.arch }}) is healthy"
|
||||
exit 0
|
||||
fi
|
||||
sleep 5
|
||||
done
|
||||
echo "Spoolman (${{ matrix.arch }}) did not become healthy in time" >&2
|
||||
exit 1
|
||||
|
||||
- name: Dump Spoolman logs on failure
|
||||
if: failure()
|
||||
run: docker logs spoolman-smoke
|
||||
|
||||
- name: Stop Spoolman
|
||||
if: always()
|
||||
run: docker rm -f spoolman-smoke
|
||||
#
|
||||
# Release images GHCR and Docker Hub if tests pass
|
||||
# Don't run this for pull requests
|
||||
#
|
||||
publish-images:
|
||||
if: ${{ github.event_name != 'pull_request' }}
|
||||
needs: [test, test-frontend, build-amd64, build-arm64, build-armv7, style, build-client]
|
||||
needs:
|
||||
[
|
||||
test,
|
||||
test-frontend,
|
||||
test-frontend-v2,
|
||||
test-multiarch-smoke,
|
||||
build-amd64,
|
||||
build-arm64,
|
||||
build-armv7,
|
||||
style,
|
||||
build-client,
|
||||
]
|
||||
runs-on: ubuntu-latest
|
||||
permissions:
|
||||
packages: write
|
||||
# Lets cosign fetch an OIDC token from Github and sign without a private key.
|
||||
id-token: write
|
||||
steps:
|
||||
- name: Checkout
|
||||
uses: actions/checkout@v6
|
||||
@@ -462,6 +699,10 @@ jobs:
|
||||
username: ${{ github.actor }}
|
||||
password: ${{ secrets.GITHUB_TOKEN }}
|
||||
|
||||
# The trailing type=ref,event=branch is what gives an unmerged branch a
|
||||
# pullable image (ghcr.io/donkie/spoolman:my-branch) for a bug reporter to
|
||||
# test. It is GHCR-only and skips master (already published as :edge), so
|
||||
# Docker Hub keeps carrying nothing but :edge and tagged releases.
|
||||
- name: Extract metadata (tags, labels) for GHCR
|
||||
id: meta-ghcr
|
||||
uses: docker/metadata-action@v5.5.1
|
||||
@@ -473,6 +714,7 @@ jobs:
|
||||
type=semver,pattern={{version}}
|
||||
type=semver,pattern={{major}}.{{minor}}
|
||||
type=semver,pattern={{major}}
|
||||
type=ref,event=branch,enable=${{ github.ref_name != 'master' }}
|
||||
|
||||
- name: Extract metadata (tags, labels) for Docker Hub
|
||||
id: meta-dh
|
||||
@@ -498,7 +740,15 @@ jobs:
|
||||
echo "GIT_COMMIT=$(git rev-parse --short HEAD)" >> "$GITHUB_ENV"
|
||||
echo "BUILD_DATE=$(date -u +"%Y-%m-%dT%H:%M:%SZ")" >> "$GITHUB_ENV"
|
||||
|
||||
- name: Install cosign
|
||||
uses: sigstore/cosign-installer@v4.1.2
|
||||
with:
|
||||
# Installer v4+ verifies cosign v3 downloads via the Sigstore bundle
|
||||
# format; pin an explicit, current cosign release for reproducibility.
|
||||
cosign-release: v3.1.1
|
||||
|
||||
- name: Build and push Docker images
|
||||
id: build
|
||||
uses: docker/build-push-action@v6.7.0
|
||||
with:
|
||||
context: .
|
||||
@@ -515,6 +765,24 @@ jobs:
|
||||
type=registry,ref=ghcr.io/${{ env.GHCR_IMAGE }}:buildcache-amd64
|
||||
type=registry,ref=ghcr.io/${{ env.GHCR_IMAGE }}:buildcache-arm64
|
||||
type=registry,ref=ghcr.io/${{ env.GHCR_IMAGE }}:buildcache-armv7
|
||||
|
||||
# Sign the manifest by digest rather than by tag: all the tags above point
|
||||
# at the same digest, and the same digest is valid in both registries, so
|
||||
# signing every tag would just repeat the same signature.
|
||||
- name: Sign the published images
|
||||
env:
|
||||
DIGEST: ${{ steps.build.outputs.digest }}
|
||||
TAGS: |
|
||||
${{ steps.meta-ghcr.outputs.tags }}
|
||||
${{ steps.meta-dh.outputs.tags }}
|
||||
run: |
|
||||
echo "${TAGS}" | while read -r tag; do
|
||||
[ -n "${tag}" ] || continue
|
||||
echo "${tag%:*}"
|
||||
done | sort --unique | while read -r repository; do
|
||||
echo "Signing ${repository}@${DIGEST}"
|
||||
cosign sign --yes "${repository}@${DIGEST}"
|
||||
done
|
||||
#
|
||||
# Create Github Release if CI was triggered by a tag
|
||||
#
|
||||
|
||||
@@ -2,13 +2,22 @@ name: Guard Translations
|
||||
|
||||
# Translations are managed exclusively through Weblate (https://hosted.weblate.org/projects/spoolman/).
|
||||
# Only the "en" source locale is edited by hand in this repo; every other language is written back
|
||||
# by the Weblate bot. This workflow fails any PR (except Weblate's own) that MODIFIES or DELETES an
|
||||
# existing non-English translation file, so manual edits don't get overwritten and lost on the next
|
||||
# Weblate sync.
|
||||
# by the Weblate bot. This workflow fails any PR (except Weblate's own) that hand-edits a non-English
|
||||
# translation file, so manual edits don't get overwritten and lost on the next Weblate sync.
|
||||
#
|
||||
# ADDING a brand-new language file is allowed: contributors bootstrapping a new language must add the
|
||||
# code entry in client/src/i18n.ts, and they may include the initial client/public/locales/<lang>/
|
||||
# file in the same PR. Only edits to files that ALREADY exist on the base branch are blocked.
|
||||
# Two clients, two different rules:
|
||||
#
|
||||
# client_v2/locales/ — the ACTIVE translation target. Weblate translates this one.
|
||||
# MODIFY/DELETE of an existing non-English file is blocked; ADDING a
|
||||
# brand-new language file is allowed, because bootstrapping a language
|
||||
# also needs two hand-written code entries (see NEW_LANGUAGE_HOWTO
|
||||
# below) that only a human PR can add.
|
||||
#
|
||||
# client/public/locales/ — the LEGACY React client, CLOSED to translation work. Its Weblate
|
||||
# component is locked, so nothing new arrives from translators and
|
||||
# the files here are frozen at whatever shipped. Any change to a
|
||||
# non-English file is blocked, including adding a new language:
|
||||
# effort spent there is effort not spent on the client users get.
|
||||
|
||||
on:
|
||||
pull_request:
|
||||
@@ -43,57 +52,98 @@ jobs:
|
||||
run: |
|
||||
set -euo pipefail
|
||||
|
||||
# Files changed in this PR, keyed by change type. --no-renames turns any rename into a
|
||||
# delete + add pair, so a "renamed" (i.e. rewritten) existing file still trips the delete
|
||||
# rule below and can't be smuggled through as a fresh add.
|
||||
# --no-renames turns any rename into a delete + add pair, so a "renamed" (i.e. rewritten)
|
||||
# existing file still trips the delete rule and can't be smuggled through as a fresh add.
|
||||
#
|
||||
# --diff-filter=MD keeps only Modified and Deleted paths: edits to files that ALREADY
|
||||
# exist on the base branch. Added (A) files are intentionally excluded, so a contributor
|
||||
# may add a brand-new client/public/locales/<lang>/ file for a new language.
|
||||
offending="$(git diff --no-renames --diff-filter=MD --name-only "$BASE_SHA" "$HEAD_SHA" \
|
||||
# --diff-filter=MD keeps only Modified and Deleted paths: edits to files that ALREADY exist
|
||||
# on the base branch. Added (A) files are handled separately per client below.
|
||||
# Three dots, not two. `git diff A B` compares the two trees as they stand, so every
|
||||
# commit that landed on the base branch after this PR forked shows up as if the PR had
|
||||
# changed it -- a Weblate sync merging to master made unrelated PRs fail with
|
||||
# "client_v2/locales/sv/common.json" in the offending list. `git diff A...B` diffs from
|
||||
# the MERGE BASE instead, which is exactly "what this PR changed" and stays correct no
|
||||
# matter how far master has moved on.
|
||||
edited="$(git diff --no-renames --diff-filter=MD --name-only "$BASE_SHA...$HEAD_SHA" || true)"
|
||||
added="$(git diff --no-renames --diff-filter=A --name-only "$BASE_SHA...$HEAD_SHA" || true)"
|
||||
|
||||
# Active client: edits to existing non-English files are blocked, new languages are fine.
|
||||
offending_v2="$(printf '%s\n' "$edited" \
|
||||
| grep -E '^client_v2/locales/[^/]+/' \
|
||||
| grep -vE '^client_v2/locales/en/' \
|
||||
|| true)"
|
||||
|
||||
# Legacy client: every non-English change is blocked, adds included.
|
||||
offending_legacy="$(printf '%s\n' "$edited" "$added" \
|
||||
| grep -E '^client/public/locales/[^/]+/' \
|
||||
| grep -vE '^client/public/locales/en/' \
|
||||
|| true)"
|
||||
|
||||
if [ -n "$offending" ]; then
|
||||
echo "::error title=Manual translation edits are not allowed::This PR edits existing non-English translation files. See the job summary for details."
|
||||
|
||||
{
|
||||
echo "## ❌ Manual translation edits detected"
|
||||
echo ""
|
||||
echo "This PR modifies or deletes one or more **existing non-English** translation files:"
|
||||
echo ""
|
||||
echo '```'
|
||||
echo "$offending"
|
||||
echo '```'
|
||||
echo ""
|
||||
echo "### Why this is blocked"
|
||||
echo ""
|
||||
echo "Every language except the English source (\`client/public/locales/en/\`) is managed"
|
||||
echo "**exclusively through Weblate**. Any manual edit to an existing non-English file here"
|
||||
echo "will be **silently overwritten and lost** the next time Weblate syncs — so we don't"
|
||||
echo "accept them."
|
||||
echo ""
|
||||
echo "### What to do instead"
|
||||
echo ""
|
||||
echo "- **To fix or improve an existing translation:** contribute it through Weblate at"
|
||||
echo " <https://hosted.weblate.org/projects/spoolman/>. It's free, requires no coding,"
|
||||
echo " and your change flows back into the repo automatically."
|
||||
echo "- **To add or change a user-facing string:** edit **only** the English source files under"
|
||||
echo " \`client/public/locales/en/\`. Weblate will pick up the new keys and expose them to"
|
||||
echo " translators. Revert your changes to every other language and push again."
|
||||
echo "- **To add a brand-new language:** that IS allowed here. Add the language entry to"
|
||||
echo " \`client/src/i18n.ts\` and, if you like, an initial \`client/public/locales/<lang>/\`"
|
||||
echo " file — new files are fine, only edits to existing ones are blocked."
|
||||
echo ""
|
||||
echo "> If you believe an existing file genuinely needs a manual change (e.g. a structural"
|
||||
echo "> fix), please explain it in a PR comment so a maintainer can review."
|
||||
} >> "$GITHUB_STEP_SUMMARY"
|
||||
|
||||
echo ""
|
||||
echo "Offending files:"
|
||||
echo "$offending"
|
||||
exit 1
|
||||
if [ -z "$offending_v2" ] && [ -z "$offending_legacy" ]; then
|
||||
echo "No manual edits to non-English translation files detected. ✅"
|
||||
exit 0
|
||||
fi
|
||||
|
||||
echo "No manual edits to existing non-English translation files detected. ✅"
|
||||
echo "::error title=Manual translation edits are not allowed::This PR hand-edits non-English translation files. See the job summary for details."
|
||||
|
||||
{
|
||||
echo "## ❌ Manual translation edits detected"
|
||||
echo ""
|
||||
|
||||
if [ -n "$offending_v2" ]; then
|
||||
echo "### Existing translations edited by hand"
|
||||
echo ""
|
||||
echo "This PR modifies or deletes existing non-English translation files:"
|
||||
echo ""
|
||||
echo '```'
|
||||
echo "$offending_v2"
|
||||
echo '```'
|
||||
echo ""
|
||||
echo "Every language except the English source (\`client_v2/locales/en/common.json\`) is"
|
||||
echo "managed **exclusively through Weblate**. A manual edit here will be **silently"
|
||||
echo "overwritten and lost** the next time Weblate syncs — so we don't accept them."
|
||||
echo ""
|
||||
echo "**What to do instead:**"
|
||||
echo ""
|
||||
echo "- **To fix or improve a translation:** contribute it through Weblate at"
|
||||
echo " <https://hosted.weblate.org/projects/spoolman/>. It's free, requires no coding,"
|
||||
echo " and your change flows back into the repo automatically."
|
||||
echo "- **To add or change a user-facing string:** edit **only**"
|
||||
echo " \`client_v2/locales/en/common.json\`. Weblate picks up the new keys and exposes"
|
||||
echo " them to translators. Revert your changes to every other language and push again."
|
||||
echo "- **To add a brand-new language:** that IS allowed here — new files aren't blocked,"
|
||||
echo " only edits to existing ones. A new language needs two code entries as well:"
|
||||
echo " the locale code in \`client_v2/project.inlang/settings.json\` (so paraglide compiles"
|
||||
echo " it) and an endonym in \`client_v2/src/lib/i18n/languages.ts\` (so it appears in the"
|
||||
echo " language picker). Without both, the translation file is built but unreachable."
|
||||
echo ""
|
||||
fi
|
||||
|
||||
if [ -n "$offending_legacy" ]; then
|
||||
echo "### Legacy client translations are closed"
|
||||
echo ""
|
||||
echo "This PR changes non-English translation files of the **legacy React client**:"
|
||||
echo ""
|
||||
echo '```'
|
||||
echo "$offending_legacy"
|
||||
echo '```'
|
||||
echo ""
|
||||
echo "\`client/public/locales/\` belongs to the old client, which is only kept around for"
|
||||
echo "the \`SPOOLMAN_LEGACY_CLIENT\` fallback. Its Weblate component is **locked** and its"
|
||||
echo "translations are frozen — nothing here reaches the UI that users get by default."
|
||||
echo ""
|
||||
echo "**Translate \`client_v2\` instead:** the same strings, in the client everyone actually"
|
||||
echo "sees, at <https://hosted.weblate.org/projects/spoolman/>."
|
||||
echo ""
|
||||
fi
|
||||
|
||||
echo "> If you believe a file genuinely needs a manual change (e.g. a structural fix),"
|
||||
echo "> please explain it in a PR comment so a maintainer can review."
|
||||
} >> "$GITHUB_STEP_SUMMARY"
|
||||
|
||||
echo ""
|
||||
echo "Offending files:"
|
||||
# Plain `if` rather than `[ -n … ] && echo …`: under `set -e` a false test makes the
|
||||
# whole && list return non-zero and abort the step, which would skip the second echo.
|
||||
if [ -n "$offending_v2" ]; then echo "$offending_v2"; fi
|
||||
if [ -n "$offending_legacy" ]; then echo "$offending_legacy"; fi
|
||||
exit 1
|
||||
@@ -22,7 +22,7 @@ jobs:
|
||||
issue-manager:
|
||||
runs-on: ubuntu-latest
|
||||
steps:
|
||||
- uses: tiangolo/issue-manager@0.5.1
|
||||
- uses: tiangolo/issue-manager@0.8.1
|
||||
with:
|
||||
token: ${{ secrets.GITHUB_TOKEN }}
|
||||
config: >
|
||||
@@ -32,7 +32,7 @@ jobs:
|
||||
"message": "It seems the issue was answered, closing this now."
|
||||
},
|
||||
"waiting": {
|
||||
"delay": 60400,
|
||||
"delay": 604800,
|
||||
"message": "Closing after 7 days of waiting for the additional info requested."
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,77 @@
|
||||
name: Label sponsor issues
|
||||
|
||||
on:
|
||||
issues:
|
||||
types: [opened]
|
||||
|
||||
permissions:
|
||||
issues: write
|
||||
|
||||
concurrency:
|
||||
group: sponsor-label-${{ github.event.issue.number }}
|
||||
cancel-in-progress: false
|
||||
|
||||
jobs:
|
||||
label:
|
||||
runs-on: ubuntu-latest
|
||||
steps:
|
||||
- name: Label the issue if its author is a sponsor
|
||||
uses: actions/github-script@v9
|
||||
with:
|
||||
# The sponsorship lookup is viewer-relative: it answers "is this person
|
||||
# sponsoring *me*" for whoever owns the token. GITHUB_TOKEN's viewer is
|
||||
# the Actions bot, which nobody sponsors, so it always comes back empty.
|
||||
# It has to be the PAT, and reading privacyLevel needs its read:user scope.
|
||||
github-token: ${{ secrets.PAT }}
|
||||
script: |
|
||||
// The Supporter tier and up. Below this, no tag was promised.
|
||||
const MIN_MONTHLY_DOLLARS = 10
|
||||
const LABEL = 'sponsor'
|
||||
|
||||
const issue = context.payload.issue
|
||||
const author = issue.user.login
|
||||
if (author.endsWith('[bot]')) return
|
||||
|
||||
const query = `query($login: String!) {
|
||||
user(login: $login) {
|
||||
sponsorshipForViewerAsSponsorable(activeOnly: true) {
|
||||
privacyLevel
|
||||
tier { monthlyPriceInDollars }
|
||||
}
|
||||
}
|
||||
}`
|
||||
|
||||
let sponsorship
|
||||
try {
|
||||
const data = await github.graphql(query, { login: author })
|
||||
sponsorship = data.user?.sponsorshipForViewerAsSponsorable
|
||||
} catch (error) {
|
||||
// Deleted accounts and app logins never resolve to a user.
|
||||
core.info(`Could not look up ${author}: ${error.message}`)
|
||||
return
|
||||
}
|
||||
|
||||
if (!sponsorship) {
|
||||
core.info(`${author} is not an active sponsor`)
|
||||
return
|
||||
}
|
||||
|
||||
const dollars = sponsorship.tier.monthlyPriceInDollars
|
||||
if (dollars < MIN_MONTHLY_DOLLARS) {
|
||||
core.info(`${author} sponsors at $${dollars}, below the $${MIN_MONTHLY_DOLLARS} tier`)
|
||||
return
|
||||
}
|
||||
|
||||
// A private sponsor chose not to be listed publicly. This label is
|
||||
// public, so applying it would out them; skip rather than disclose.
|
||||
if (sponsorship.privacyLevel === 'PRIVATE') {
|
||||
core.info(`${author} sponsors privately, leaving the issue unlabelled`)
|
||||
return
|
||||
}
|
||||
|
||||
await github.rest.issues.addLabels({
|
||||
...context.repo,
|
||||
issue_number: issue.number,
|
||||
labels: [LABEL],
|
||||
})
|
||||
core.info(`Labelled #${issue.number}, opened by $${dollars}/month sponsor ${author}`)
|
||||
@@ -0,0 +1,51 @@
|
||||
name: Generate sponsors image
|
||||
|
||||
on:
|
||||
schedule:
|
||||
- cron: '0 3 * * *' # daily
|
||||
workflow_dispatch:
|
||||
|
||||
permissions:
|
||||
contents: write
|
||||
|
||||
concurrency:
|
||||
group: sponsors
|
||||
cancel-in-progress: false
|
||||
|
||||
jobs:
|
||||
sponsorkit:
|
||||
runs-on: ubuntu-latest
|
||||
steps:
|
||||
# Checks out with the PAT rather than the default GITHUB_TOKEN: the commit
|
||||
# step below pushes straight to master, and the ruleset there only lets a
|
||||
# bypass-capable actor through.
|
||||
- name: Checkout
|
||||
uses: actions/checkout@v7
|
||||
with:
|
||||
persist-credentials: true
|
||||
token: ${{ secrets.PAT }}
|
||||
|
||||
- name: Setup Node
|
||||
uses: actions/setup-node@v7
|
||||
with:
|
||||
node-version: '24'
|
||||
cache: npm
|
||||
cache-dependency-path: .github/sponsorkit/package-lock.json
|
||||
|
||||
- name: Install sponsorkit
|
||||
working-directory: .github/sponsorkit
|
||||
run: npm ci
|
||||
|
||||
- name: Generate sponsors image
|
||||
working-directory: .github/sponsorkit
|
||||
run: npx sponsorkit
|
||||
env:
|
||||
SPONSORKIT_GITHUB_TOKEN: ${{ secrets.PAT }}
|
||||
|
||||
# Only commits when the rendered image actually differs from what is checked in.
|
||||
- name: Commit sponsors image
|
||||
uses: stefanzweifel/git-auto-commit-action@v7
|
||||
with:
|
||||
commit_message: 'chore: update sponsors image'
|
||||
file_pattern: '.github/media/sponsors.svg .github/media/sponsors.png'
|
||||
skip_dirty_check: false
|
||||
@@ -38,7 +38,7 @@ jobs:
|
||||
- name: Install node
|
||||
uses: actions/setup-node@v4.0.3
|
||||
with:
|
||||
node-version: '20'
|
||||
node-version: '24'
|
||||
|
||||
- name: Bump version
|
||||
run: |
|
||||
|
||||
@@ -2,25 +2,23 @@ name: Auto-merge Weblate PRs
|
||||
|
||||
# Translations are managed exclusively through Weblate (https://hosted.weblate.org/projects/spoolman/),
|
||||
# which opens a pull request for every sync back to this repo (see guard-translations.yml). Those PRs
|
||||
# are machine-generated, always scoped to client/public/locales/, and gated by the full CI suite just
|
||||
# like any other PR. Rather than hand-merging each one, this workflow turns on GitHub's native
|
||||
# auto-merge for Weblate-authored PRs so they merge themselves once all required status checks pass.
|
||||
# are machine-generated, always scoped to a locale tree (client_v2/locales/ today), and gated by the
|
||||
# full CI suite just like any other PR. Rather than hand-merging each one, this workflow turns on GitHub's native
|
||||
# auto-merge once a week for Weblate-authored PRs so they merge themselves once all required status checks pass.
|
||||
#
|
||||
# Why auto-merge instead of giving Weblate direct push access to master:
|
||||
# - Every sync still runs through style/tests/build before it can land — nothing merges unvalidated.
|
||||
# - Every sync still runs through style/tests/build before it can land; nothing merges unvalidated.
|
||||
# - No actor gains unrestricted, un-CI'd direct write to master. A compromised Weblate token can only
|
||||
# open a PR; auto-merge fires solely on green CI for Weblate-authored PRs.
|
||||
# - GitHub write/bypass can't be scoped to locale files, so direct write would grant all-file access.
|
||||
|
||||
on:
|
||||
pull_request_target:
|
||||
types:
|
||||
- opened
|
||||
- reopened
|
||||
- synchronize
|
||||
schedule:
|
||||
- cron: "0 6 * * 1"
|
||||
workflow_dispatch:
|
||||
|
||||
# contents+pull-requests write let the built-in GITHUB_TOKEN enable auto-merge and perform the squash
|
||||
# merge. The token is not a ruleset bypass actor and doesn't need to be: with 0 required approvals it
|
||||
# contents+pull-requests write let the built-in GITHUB_TOKEN enable auto-merge and perform the merge.
|
||||
# The token is not a ruleset bypass actor and doesn't need to be: with 0 required approvals it
|
||||
# satisfies the branch requirements once the required checks go green, exactly like a manual merge.
|
||||
permissions:
|
||||
contents: write
|
||||
@@ -30,56 +28,109 @@ jobs:
|
||||
auto-merge:
|
||||
runs-on: ubuntu-latest
|
||||
# Only ever act on Weblate's own translation-sync PRs. Human PRs are never touched.
|
||||
# pull_request_target runs in the base-repo context (so GITHUB_TOKEN has write access even for
|
||||
# branch PRs), and this job is safe under it because it never checks out or executes PR code —
|
||||
# it only calls the GitHub API to enable auto-merge.
|
||||
if: github.event.pull_request.user.login == 'weblate'
|
||||
# Scheduled runs use the default-branch workflow. This job never checks out or executes
|
||||
# PR code; it only calls the GitHub API to inspect PRs and enable auto-merge or merge them.
|
||||
steps:
|
||||
# Defence in depth: don't trust the author alone, trust the diff. Even a compromised Weblate
|
||||
# token can only ever get auto-merged if the PR is confined to locale JSON files. Anything
|
||||
# else (a code file, a workflow, a non-.json file, a file outside client/public/locales/)
|
||||
# fails this step, auto-merge is never enabled, and the PR waits for a human. The file list is
|
||||
# read from the API — this step never checks out or runs PR code, so pull_request_target is safe.
|
||||
- name: Verify PR only changes locale JSON files
|
||||
# else (a code file, a workflow, a non-.json file, a file outside the two locale trees)
|
||||
# fails the check, auto-merge is never enabled, and the PR waits for a human. The file list is
|
||||
# read from the API; this step never checks out or runs PR code.
|
||||
#
|
||||
# Both locale trees are allowed. client_v2/locales/ is where translations go now; the legacy
|
||||
# client/public/locales/ tree stays on the list only so that a sync opened before its Weblate
|
||||
# component was locked isn't stranded half-merged. Locking the component, not this allowlist,
|
||||
# is what stops new legacy translations (see guard-translations.yml).
|
||||
- name: Verify and merge open Weblate PRs
|
||||
env:
|
||||
GH_TOKEN: ${{ secrets.GITHUB_TOKEN }}
|
||||
REPO: ${{ github.repository }}
|
||||
PR_NUMBER: ${{ github.event.pull_request.number }}
|
||||
# Merge commit, NOT squash. This is load-bearing for Weblate, not a style preference.
|
||||
#
|
||||
# Weblate keeps its own clone of this repo and rebases it onto master to pick up our changes.
|
||||
# A squash merge replaces the Weblate commits with one brand-new commit that has a different
|
||||
# hash AND, when the PR held more than one commit, a different patch-id than any of them. The
|
||||
# rebase therefore can't tell that the work already landed, replays each original commit on top
|
||||
# of a master that already contains those very strings, and dies on a content conflict:
|
||||
#
|
||||
# Rebasing (1/3)
|
||||
# CONFLICT (content): Merge conflict in client_v2/locales/ru/common.json
|
||||
#
|
||||
# From then on Weblate can't merge upstream and stops syncing until someone resets it by hand
|
||||
# (this happened with PR #1004, which squashed two Russian commits into one). Weblate's own
|
||||
# docs are explicit: "Do not squash merge it. Squash merging creates a new commit instead of
|
||||
# preserving the Weblate commits, so Weblate might not recognize that its local commits are
|
||||
# already included upstream and might need a repository reset to recover."
|
||||
#
|
||||
# A merge commit keeps every Weblate commit reachable with its original hash, so the rebase
|
||||
# sees them as already upstream and drops them silently. Nothing else forces squash here:
|
||||
# the repo has allow_merge_commit enabled and the master ruleset carries no linear-history
|
||||
# rule, and human PRs are merge-committed too.
|
||||
run: |
|
||||
set -euo pipefail
|
||||
|
||||
files="$(gh api --paginate "repos/${REPO}/pulls/${PR_NUMBER}/files" --jq '.[].filename')"
|
||||
prs="$(gh pr list --repo "$REPO" --author weblate --state open --limit 10000 --json number,url)"
|
||||
rows="$(printf '%s\n' "$prs" | jq -r '.[] | [.number, .url] | @tsv')"
|
||||
failed=0
|
||||
while IFS=$'\t' read -r PR_NUMBER PR_URL; do
|
||||
[ -n "$PR_NUMBER" ] || continue
|
||||
if ! files="$(gh api --paginate "repos/${REPO}/pulls/${PR_NUMBER}/files" --jq '.[].filename')"; then
|
||||
echo "::error::Could not read changed files for $PR_URL; refusing to auto-merge."
|
||||
echo "## ❌ Auto-merge blocked: could not read files for $PR_URL" >> "$GITHUB_STEP_SUMMARY"
|
||||
failed=1
|
||||
continue
|
||||
fi
|
||||
|
||||
if [ -z "$files" ]; then
|
||||
echo "::error title=Empty diff::Weblate PR reports no changed files; refusing to auto-merge."
|
||||
exit 1
|
||||
fi
|
||||
if [ -z "$files" ]; then
|
||||
echo "::error title=Empty diff::Weblate PR $PR_URL reports no changed files; refusing to auto-merge."
|
||||
echo "## ❌ Auto-merge blocked: empty diff for $PR_URL" >> "$GITHUB_STEP_SUMMARY"
|
||||
failed=1
|
||||
continue
|
||||
fi
|
||||
|
||||
# Every changed path must be a .json file under client/public/locales/<lang>/.
|
||||
offending="$(printf '%s\n' "$files" | grep -vE '^client/public/locales/[^/]+/.+\.json$' || true)"
|
||||
# Every changed path must be a .json file under client_v2/locales/<lang>/ (active) or
|
||||
# client/public/locales/<lang>/ (legacy, being wound down).
|
||||
offending="$(printf '%s\n' "$files" \
|
||||
| grep -vE '^(client_v2/locales|client/public/locales)/[^/]+/.+\.json$' || true)"
|
||||
|
||||
if [ -n "$offending" ]; then
|
||||
echo "::error title=Out-of-scope Weblate PR::PR touches files outside client/public/locales/**/*.json; not auto-merging."
|
||||
{
|
||||
echo "## ❌ Auto-merge blocked: out-of-scope changes"
|
||||
echo ""
|
||||
echo "This Weblate PR changes files that are **not** locale JSON under \`client/public/locales/\`:"
|
||||
echo ""
|
||||
echo '```'
|
||||
echo "$offending"
|
||||
echo '```'
|
||||
echo ""
|
||||
echo "Weblate sync PRs are only auto-merged when every changed file is a translation JSON"
|
||||
echo "file. This PR isn't, so it has been left for a maintainer to review and merge by hand."
|
||||
} >> "$GITHUB_STEP_SUMMARY"
|
||||
exit 1
|
||||
fi
|
||||
if [ -n "$offending" ]; then
|
||||
echo "::error title=Out-of-scope Weblate PR::$PR_URL touches files outside the locale trees; not auto-merging."
|
||||
{
|
||||
echo "## ❌ Auto-merge blocked: out-of-scope changes"
|
||||
echo ""
|
||||
echo "Weblate PR: $PR_URL"
|
||||
echo ""
|
||||
echo "This Weblate PR changes files that are **not** locale JSON under"
|
||||
echo "\`client_v2/locales/\` or \`client/public/locales/\`:"
|
||||
echo ""
|
||||
echo '```'
|
||||
echo "$offending"
|
||||
echo '```'
|
||||
echo ""
|
||||
echo "Weblate sync PRs are only auto-merged when every changed file is a translation JSON"
|
||||
echo "file. This PR isn't, so it has been left for a maintainer to review and merge by hand."
|
||||
} >> "$GITHUB_STEP_SUMMARY"
|
||||
failed=1
|
||||
continue
|
||||
fi
|
||||
|
||||
echo "All $(printf '%s\n' "$files" | wc -l) changed file(s) are locale JSON. Safe to auto-merge."
|
||||
echo "$PR_URL: all $(printf '%s\n' "$files" | wc -l) changed file(s) are locale JSON. Safe to auto-merge."
|
||||
if merge_output="$(gh pr merge --repo "$REPO" --auto --merge "$PR_URL" 2>&1)"; then
|
||||
echo "$merge_output"
|
||||
continue
|
||||
fi
|
||||
|
||||
- name: Enable auto-merge
|
||||
env:
|
||||
GH_TOKEN: ${{ secrets.GITHUB_TOKEN }}
|
||||
PR_URL: ${{ github.event.pull_request.html_url }}
|
||||
# Squash is the only merge method the repo and the master ruleset allow.
|
||||
run: gh pr merge --auto --squash "$PR_URL"
|
||||
echo "$merge_output"
|
||||
# GitHub can refuse auto-merge when the PR is already ready to merge.
|
||||
if [[ "$merge_output" == *"clean status"* || "$merge_output" == *"already mergeable"* ]]; then
|
||||
if gh pr merge --repo "$REPO" --merge "$PR_URL"; then
|
||||
continue
|
||||
fi
|
||||
fi
|
||||
|
||||
echo "::error::Could not merge $PR_URL."
|
||||
echo "## ❌ Auto-merge blocked: merge failed for $PR_URL" >> "$GITHUB_STEP_SUMMARY"
|
||||
failed=1
|
||||
done <<< "$rows"
|
||||
|
||||
exit "$failed"
|
||||
+29
-6
@@ -1,16 +1,25 @@
|
||||
FROM python:3.14-slim-bookworm AS python-builder
|
||||
|
||||
# A multi-platform build runs this stage once per platform in parallel. Each gets
|
||||
# its own uv cache: wheels are per-platform anyway, and one shared cache made the
|
||||
# platforms queue on uv's cache lock until the slow emulated armv7 sync pushed the
|
||||
# others past uv's 300 s lock timeout whenever uv.lock changed.
|
||||
ARG TARGETARCH
|
||||
ARG TARGETVARIANT
|
||||
|
||||
ENV UV_COMPILE_BYTECODE=1
|
||||
ENV UV_LINK_MODE=copy
|
||||
ENV UV_NO_DEV=1
|
||||
ENV UV_PYTHON_DOWNLOADS=0
|
||||
|
||||
# Install system dependencies
|
||||
RUN apt-get update && apt-get install -y \
|
||||
# No python3-dev: the base image already ships the 3.14 headers, and python3-dev
|
||||
# would pull in Debian's whole python3.11 stack. patchelf is for armv7, see below.
|
||||
RUN apt-get update && apt-get install -y --no-install-recommends \
|
||||
g++ \
|
||||
python3-dev \
|
||||
libpq-dev \
|
||||
libffi-dev \
|
||||
patchelf \
|
||||
&& apt-get clean \
|
||||
&& rm -rf /var/lib/apt/lists/*
|
||||
|
||||
@@ -19,10 +28,23 @@ RUN pip install --no-cache-dir uv
|
||||
|
||||
# Install dependencies
|
||||
WORKDIR /home/app/spoolman
|
||||
RUN --mount=type=cache,target=/root/.cache/uv \
|
||||
RUN --mount=type=cache,id=uv-${TARGETARCH}${TARGETVARIANT},target=/root/.cache/uv \
|
||||
--mount=type=bind,source=uv.lock,target=uv.lock \
|
||||
--mount=type=bind,source=pyproject.toml,target=pyproject.toml \
|
||||
uv sync --locked --no-install-project
|
||||
uv sync --locked --no-install-project \
|
||||
&& uv cache prune --ci
|
||||
|
||||
# greenlet ships no 32-bit ARM wheel, so on armv7 it is compiled from source.
|
||||
# setuptools links the C++ extension with gcc, which leaves libstdc++ out of the
|
||||
# .so's NEEDED list, and it then crashes at import with an undefined libstdc++
|
||||
# typeinfo symbol, taking startup down during the DB migration. Add libstdc++ to
|
||||
# the NEEDED list so the loader pulls it in. Only armv7 is affected; amd64 and
|
||||
# arm64 use a correctly linked prebuilt wheel. Done before the app is copied in so
|
||||
# the layer stays cached across source-only changes.
|
||||
RUN if [ "$(uname -m)" = "armv7l" ]; then \
|
||||
patchelf --add-needed libstdc++.so.6 \
|
||||
"$(find /home/app/spoolman/.venv -name '_greenlet*.so')"; \
|
||||
fi
|
||||
|
||||
# Copy and install app. No --chown here: the "app" user only exists in the
|
||||
# runner stage, and Podman (unlike Docker/BuildKit) refuses to resolve it. Final
|
||||
@@ -30,8 +52,9 @@ RUN --mount=type=cache,target=/root/.cache/uv \
|
||||
COPY migrations /home/app/spoolman/migrations
|
||||
COPY spoolman /home/app/spoolman/spoolman
|
||||
COPY alembic.ini README.md uv.lock pyproject.toml /home/app/spoolman/
|
||||
RUN --mount=type=cache,target=/root/.cache/uv \
|
||||
uv sync --locked
|
||||
RUN --mount=type=cache,id=uv-${TARGETARCH}${TARGETVARIANT},target=/root/.cache/uv \
|
||||
uv sync --locked \
|
||||
&& uv cache prune --ci
|
||||
|
||||
FROM python:3.14-slim-bookworm AS python-runner
|
||||
|
||||
|
||||
@@ -12,6 +12,7 @@ Spoolman is a self-hosted web service designed to help you efficiently manage yo
|
||||
|
||||
[](https://github.com/Donkie/Spoolman/wiki)
|
||||
[](https://github.com/Donkie/Spoolman/releases)
|
||||
[](https://github.com/sponsors/Donkie)
|
||||
|
||||
### Features
|
||||
* **Filament Management**: Keep comprehensive records of filament types, manufacturers, and individual spools.
|
||||
@@ -20,8 +21,9 @@ Spoolman is a self-hosted web service designed to help you efficiently manage yo
|
||||
* **Central Filament Database**: A community-supported database of manufacturers and filaments simplify adding new spools to your inventory. Contribute by heading to [SpoolmanDB](https://github.com/Donkie/SpoolmanDB).
|
||||
* **Web-Based Client**: Spoolman includes a built-in web client that lets you manage data effortlessly:
|
||||
* View, create, edit, and delete filament data.
|
||||
* Search, group and filter your inventory by manufacturer, material, location and more.
|
||||
* Add custom fields to tailor information to your specific needs.
|
||||
* Print labels with QR codes for easy spool identification and tracking.
|
||||
* Design and print labels with QR codes for easy spool identification and tracking.
|
||||
* Contribute to its translation into 18 languages via [Weblate](https://hosted.weblate.org/projects/spoolman/).
|
||||
* **Database Support**: SQLite, PostgreSQL, MySQL, and CockroachDB.
|
||||
* **Multi-Printer Management**: Handles spool updates from several printers simultaneously.
|
||||
@@ -35,7 +37,30 @@ Spoolman is a self-hosted web service designed to help you efficiently manage yo
|
||||
* [MCP Server](https://github.com/Disane87/spoolman-mcp) - Manage your filament inventory through AI assistants like Claude using the Model Context Protocol
|
||||
|
||||
**Web client preview:**
|
||||

|
||||

|
||||
|
||||
<table>
|
||||
<tr>
|
||||
<td width="50%"><img alt="The Spoolman dashboard, showing spools as draggable cards grouped by storage location" src=".github/media/dashboard-screenshot.png"></td>
|
||||
<td width="50%"><img alt="The Spoolman label designer, showing a 50 by 25 mm spool label with a QR code, filament name and colour swatch" src=".github/media/label-designer-screenshot.png"></td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td align="center"><sub>Dashboard — spools as cards, grouped by location or any other field. Drag one to move it.</sub></td>
|
||||
<td align="center"><sub>Label designer — QR labels built from any spool, filament or vendor field.</sub></td>
|
||||
</tr>
|
||||
</table>
|
||||
|
||||
## Installation
|
||||
Please see the [Installation page on the Wiki](https://github.com/Donkie/Spoolman/wiki/Installation) for details how to install Spoolman.
|
||||
|
||||
If the new client misbehaves on your setup, set `SPOOLMAN_LEGACY_CLIENT=TRUE` to go back to
|
||||
the previous one. Both ship in every release and talk to the same API, so your data is
|
||||
untouched either way — but please [report the problem](https://github.com/Donkie/Spoolman/issues)
|
||||
so it can be fixed.
|
||||
|
||||
## Sponsors
|
||||
Spoolman is developed and maintained in my spare time. If it is useful to you, consider [sponsoring the project](https://github.com/sponsors/Donkie).
|
||||
|
||||
<a href="https://github.com/sponsors/Donkie">
|
||||
<img alt="The people currently sponsoring Spoolman" src=".github/media/sponsors.svg">
|
||||
</a>
|
||||
@@ -1,5 +1,6 @@
|
||||
{
|
||||
"printWidth": 120,
|
||||
"endOfLine": "auto",
|
||||
"overrides": [
|
||||
{
|
||||
"files": ["public/locales/**/*.json"],
|
||||
|
||||
Generated
+1175
-817
File diff suppressed because it is too large.
Load diff
+4
-4
@@ -1,8 +1,8 @@
|
||||
{
|
||||
"name": "spoolman-ui",
|
||||
"version": "0.24.0",
|
||||
"version": "0.27.0",
|
||||
"engines": {
|
||||
"node": "20.x"
|
||||
"node": "^20.19 || ^22.12 || >=24"
|
||||
},
|
||||
"private": true,
|
||||
"type": "module",
|
||||
@@ -22,13 +22,13 @@
|
||||
"html-to-image": "^1.11.13",
|
||||
"i18next": "^25.7.3",
|
||||
"i18next-browser-languagedetector": "^8.2.0",
|
||||
"i18next-http-backend": "^3.0.2",
|
||||
"i18next-http-backend": "^4.0.2",
|
||||
"react": "^19.2.3",
|
||||
"react-dnd": "^16.0.1",
|
||||
"react-dnd-html5-backend": "^16.0.1",
|
||||
"react-dom": "^19.2.3",
|
||||
"react-i18next": "^16.5.1",
|
||||
"react-router": "^7.11.0",
|
||||
"react-router": "^7.18.3",
|
||||
"react-to-print": "^3.2.0",
|
||||
"uuid": "^14.0.0",
|
||||
"vite-plugin-svgr": "^4.5.0",
|
||||
|
||||
Binary file not shown.
|
Before Width: | Height: | Size: 2.9 KiB |
@@ -60,8 +60,8 @@
|
||||
"printing": {
|
||||
"generic": {
|
||||
"title": "Probíhá tisk",
|
||||
"description": "Níže uvedeným nastavením dosáhnete požadovaného rozložení tisku. Mějte na paměti, že tiskárny a váš operační systém mohou použít vlastní okraje a měřítka, takže možná budete muset provést několik pokusů a omylů, než bude vše správně nastaveno. Před tiskem na skutečné štítky si to vyzkoušejte na kousku běžného papíru.",
|
||||
"helpMargin": "Okraje by měly být nastaveny tak, aby odpovídaly papíru na štítky a tiskárně, jejich změna ovlivní velikost celé mřížky.",
|
||||
"description": "Níže uvedeným nastavením dosáhnete požadovaného rozložení tisku. Mějte na paměti, že tiskárny a váš operační systém mohou použít vlastní okraje a měřítka, takže možná budete muset provést několik pokusů a omylů, než bude vše správně nastaveno. Před tiskem na skutečné etikety si to vyzkoušejte na listu běžného papíru.",
|
||||
"helpMargin": "Okraje by měly být nastaveny tak, aby odpovídaly listu etiket a tiskárně, jejich změna ovlivní velikost celé mřížky.",
|
||||
"helpPrinterMargin": "Bezpečná zóna by měla být nastavena tak, jak blízko okraje papíru může tiskárna tisknout, jejich změna neovlivní celou mřížku.",
|
||||
"print": "Tisk",
|
||||
"columns": "Sloupce",
|
||||
@@ -102,16 +102,16 @@
|
||||
"saveAsImage": "Uložit jako obrázek"
|
||||
},
|
||||
"qrcode": {
|
||||
"button": "Tisk štítků",
|
||||
"title": "Tisk štítku",
|
||||
"button": "Tisk etiket",
|
||||
"title": "Tisk etikety",
|
||||
"spoolWeight": "Hmotnost cívky: {{weight}}",
|
||||
"lotNr": "Číslo šarže: {{lot}}",
|
||||
"bedTemp": "BT: {{temp}}",
|
||||
"extruderTemp": "ET: {{temp}}",
|
||||
"textSize": "Velikost textu štítku",
|
||||
"textSize": "Velikost textu etikety",
|
||||
"showSpoolmanIcon": "Zobrazit ikonu Spoolman",
|
||||
"showVendor": "Výrobce",
|
||||
"showContent": "Tisk štítku",
|
||||
"showContent": "Tisk etikety",
|
||||
"showLotNr": "Číslo šarže",
|
||||
"showSpoolWeight": "Hmotnost cívky",
|
||||
"showTemperatures": "Teploty",
|
||||
@@ -127,7 +127,7 @@
|
||||
},
|
||||
"preview": "Náhled:"
|
||||
},
|
||||
"template": "Šablona štítku",
|
||||
"template": "Šablona etikety",
|
||||
"templateHelp": "Pomocí {} vložíte hodnoty objektu cívky jako text. Například, {id} bude nahrazeno ID cívky nebo {filament.material} bude nahrazeno materiálem cívky. Pokud hodnota chybí, bude nahrazena znakem „?“. K odstranění této hodnoty lze použít druhou sadu {}. Kromě toho bude odstraněn jakýkoli text mezi sadami {}, pokud hodnota chybí. Například {Lot Nr: {lot_nr}} zobrazí popisek pouze v případě, že cívka má číslo šarže. Text uzavřete dvojitou hvězdičkou **, aby byl tučný. Kliknutím na tlačítko zobrazíte seznam všech dostupných značek.",
|
||||
"showQRCode": "Tisk QR kódu",
|
||||
"showQRCodeMode": {
|
||||
@@ -138,7 +138,7 @@
|
||||
},
|
||||
"spoolSelect": {
|
||||
"title": "Vybrat cívky",
|
||||
"description": "Vyberte cívky, pro které chcete tisknout štítky.",
|
||||
"description": "Vyberte cívky, pro které chcete tisknout etikety.",
|
||||
"showArchived": "Zobrazit archivované",
|
||||
"noSpoolsSelected": "Nevybrali jste žádné cívky.",
|
||||
"selectAll": "Vybrat/odebrat vše",
|
||||
@@ -383,8 +383,9 @@
|
||||
"non_unique_key_error": "Tento klíč musí být jedinečný.",
|
||||
"key_not_changed": "Změňte prosím klíč na jiný.",
|
||||
"delete_confirm": "Smazat pole {{name}}?",
|
||||
"description": "<p>Zde můžete přidat další vlastní pole k subjektům.</p><p>Jakmile je pole přidáno, nemůžete změnit jeho klíč ani typ a u polí typu výběr nemůžete odebrat volby ani změnit stav více voleb. Pokud pole odstraníte, budou odstraněna přidružená data pro všechny subjekty.</p><p>Klíčové je, jako co ostatní programy čtou/zapisují data, takže pokud má být vaše vlastní pole integrováno s programem třetí strany, ujistěte se, že je správně nastaveno. Výchozí hodnota se použije pouze pro nové položky.</p><p>Výstupní pole nelze v zobrazeních tabulky řadit ani filtrovat.</p>",
|
||||
"delete_confirm_description": "Tím se odstraní pole a všechna související data pro všechny subjekty."
|
||||
"description": "<p>Zde můžete přidat další vlastní pole k subjektům.</p><p>Jakmile je pole přidáno, nelze změnit jeho klíč ani typ; u polí typu „výběr“ nelze odstranit možnosti ani změnit nastavení pro více výběrů. Pokud pole odstraníte, budou smazána související data u všech subjektů.</p><p>Klíč určuje, pod jakým názvem budou data čtena a zapisována jinými programy, takže pokud má být vaše vlastní pole integrováno s programem třetí strany ujistěte se, že je správně nastaveno. Výchozí hodnota se použije pouze u nových položek.</p><p>Vlastní pole lze zobrazit a seřadit v tabulkových zobrazeních. Pole s výběrem a logická pole zde také nabízejí možnosti filtrování a všechny typy vlastních polí podporují filtrování podle prázdných hodnot.</p>",
|
||||
"delete_confirm_description": "Tím se odstraní pole a všechna související data pro všechny subjekty.",
|
||||
"choices_reorder_hint": "Přetažením nebo pomocí šipek můžete změnit pořadí této volby."
|
||||
},
|
||||
"header": "Nastavení",
|
||||
"general": {
|
||||
@@ -408,5 +409,11 @@
|
||||
"no_locations_help": "Na této stránce můžete uspořádat své cívky podle umístění, přidejte několik cívek a začněte!",
|
||||
"new_location": "Nové umístění",
|
||||
"no_location": "Žádné umístění"
|
||||
},
|
||||
"theme": {
|
||||
"label": "Téma",
|
||||
"system": "Systém",
|
||||
"light": "Světlé",
|
||||
"dark": "Tmavé"
|
||||
}
|
||||
}
|
||||
@@ -407,5 +407,6 @@
|
||||
"no_locations_help": "Diese Seite lässt Sie Ihre Spulen zu Orten zuweisen, fügen Sie ein paar Spulen hinzu um loszulegen!",
|
||||
"locations": "Orte",
|
||||
"new_location": "Neuer Ort"
|
||||
}
|
||||
},
|
||||
"sponsor": "Unterstütze mich auf GitHub"
|
||||
}
|
||||
@@ -46,7 +46,7 @@
|
||||
"saveSuccessful": "Save successful!",
|
||||
"validationError": "Validation error: {{error}}"
|
||||
},
|
||||
"kofi": "Tip me on Ko-fi",
|
||||
"sponsor": "Sponsor me on GitHub",
|
||||
"loading": "Loading",
|
||||
"version": "Version",
|
||||
"unknown": "Unknown",
|
||||
@@ -356,6 +356,7 @@
|
||||
"boolean_true": "Yes",
|
||||
"boolean_false": "No",
|
||||
"choices_missing_error": "You cannot remove choices. The following choices are missing: {{choices}}",
|
||||
"choices_reorder_hint": "Drag, or use the arrow keys, to reorder this choice.",
|
||||
"non_unique_key_error": "The key must be unique.",
|
||||
"key_not_changed": "Please change the key to something else.",
|
||||
"delete_confirm": "Delete field {{name}}?",
|
||||
|
||||
@@ -140,7 +140,7 @@
|
||||
"registered": "Enregistré",
|
||||
"first_used": "Première utilisation",
|
||||
"used_weight": "Poids utilisé",
|
||||
"id": "ID",
|
||||
"id": "Identifiant",
|
||||
"remaining_weight": "Poids restant",
|
||||
"price": "Prix",
|
||||
"initial_weight": "Poids initial",
|
||||
@@ -238,7 +238,7 @@
|
||||
"settings_bed_temp": "Température du lit",
|
||||
"vendor": "Fabricant",
|
||||
"density": "Densité",
|
||||
"id": "ID",
|
||||
"id": "Identifiant",
|
||||
"color_hex": "Couleur",
|
||||
"article_number": "Numéro d'article",
|
||||
"spools": "Afficher les bobines",
|
||||
@@ -260,7 +260,7 @@
|
||||
"form": {
|
||||
"filament_updated": "Ce filament a été mis à jour par quelqu'un/quelque chose depuis que vous avez ouvert cette page. Enregistrer écrasera ces changements !",
|
||||
"import_external": "Importer depuis externe",
|
||||
"import_external_description": "Sélectionnez un filament dans la liste pour renseigner automatiquement ses détails dans le formulaire de création de filament. Cela écrasera toutes les données que vous avez saisies dans le formulaire.<br><br>Un objet fabricant sera créé automatiquement lorsque vous cliquerez sur OK, si nécessaire."
|
||||
"import_external_description": "Sélectionnez un filament dans la liste pour renseigner automatiquement ses détails dans le formulaire de création de filament. Cela écrasera toutes les données que vous avez saisies dans le formulaire.<br><br>Un objet fabricant sera créé automatiquement lorsque vous cliquerez sur Ok, si nécessaire."
|
||||
},
|
||||
"buttons": {
|
||||
"add_spool": "Ajouter une bobine"
|
||||
@@ -314,7 +314,7 @@
|
||||
"registered": "Enregistré",
|
||||
"comment": "Commentaire",
|
||||
"name": "Nom",
|
||||
"id": "ID",
|
||||
"id": "Identifiant",
|
||||
"empty_spool_weight": "Poids de la bobine vide",
|
||||
"external_id": "ID externe"
|
||||
},
|
||||
@@ -352,7 +352,7 @@
|
||||
"home": {
|
||||
"home": "Accueil",
|
||||
"welcome": "Bienvenue sur votre instance Spoolman !",
|
||||
"description": ""
|
||||
"description": "Il semble que vous n'ayez pas encore ajouté de bobines. Consultez la <helpPageLink>page d'aide</helpPageLink> pour bien démarrer."
|
||||
},
|
||||
"settings": {
|
||||
"settings": "Paramètres",
|
||||
@@ -385,7 +385,8 @@
|
||||
"choices_missing_error": "Vous ne pouvez pas retirer les choix. Les choix suivants sont manquants : {{choices}}",
|
||||
"key_not_changed": "Changer la clé pour quelque chose d'autre.",
|
||||
"delete_confirm": "Supprimer le champ {{name}} ?",
|
||||
"description": "<p>Ici vous pouvez ajouter des champs personnalisés supplémentaires à vos entités.</p><p>Une fois qu'un champ est ajouté, vous ne pouvez plus changer sa clé ou son type, et pour les champs de types \"Choix\", vous ne pouvez plus retirer un choix ou changer l'état des choix multiples. Si vous supprimez un champ, les données associées aux entités seront supprimées.</p><p>La clé correspond à ce que les autres programmes lisent/écrivent, donc si votre champs doit s'intégrer avec un programme tiers, assurez-vous de le configurer correctement. La valeur par défaut n'est appliquées qu'aux nouveaux éléments.</p><p>Les champs supplementaires ne peuvent pas être triés ou filtrés dans les vues de table.</p>"
|
||||
"description": "<p>Ici vous pouvez ajouter des champs personnalisés supplémentaires à vos entités.</p><p>Une fois qu'un champ est ajouté, vous ne pouvez plus changer sa clé ou son type, et pour les champs de types \"Choix\", vous ne pouvez plus retirer un choix ou changer l'état des choix multiples. Si vous supprimez un champ, les données associées aux entités seront supprimées.</p><p>La clé correspond à ce que les autres programmes lisent/écrivent, donc si votre champs doit s'intégrer avec un programme tiers, assurez-vous de le configurer correctement. La valeur par défaut n'est appliquées qu'aux nouveaux éléments.</p><p>Les champs supplémentaires peuvent être affichés, triés ou filtrés dans les vues de table. Les champs de type \"Choix\" et booléen offrent également des options de filtrage, et tous les types de champs supplémentaires prennent en charge le filtrage des valeurs vides. </p>",
|
||||
"choices_reorder_hint": "Glissez, ou utilisez les touches fléchées, pour réorganiser ce choix."
|
||||
},
|
||||
"header": "Paramètres",
|
||||
"general": {
|
||||
@@ -398,8 +399,8 @@
|
||||
"tooltip": "La base de l'URL à utiliser lors de la génération de QR codes."
|
||||
},
|
||||
"round_prices": {
|
||||
"label": "",
|
||||
"tooltip": ""
|
||||
"label": "Arrondir les prix",
|
||||
"tooltip": "Arrondir les prix au nombre entier le plus proche."
|
||||
}
|
||||
}
|
||||
},
|
||||
@@ -408,5 +409,12 @@
|
||||
"new_location": "Créer un emplacement",
|
||||
"no_location": "Pas de localisation",
|
||||
"no_locations_help": "Cette page vous permet d'organiser vos bobines par lieu, ajoutez une bobine pour commencer !"
|
||||
}
|
||||
},
|
||||
"theme": {
|
||||
"label": "Thème",
|
||||
"system": "Système",
|
||||
"light": "Clair",
|
||||
"dark": "Sombre"
|
||||
},
|
||||
"sponsor": "Soutenez-moi sur GitHub"
|
||||
}
|
||||
@@ -14,7 +14,7 @@
|
||||
"delete": "삭제",
|
||||
"edit": "수정",
|
||||
"cancel": "취소",
|
||||
"confirm": "확실 합니까?",
|
||||
"confirm": "정말 하시겠습니까?",
|
||||
"continue": "계속",
|
||||
"filter": "필터",
|
||||
"refresh": "새로고침",
|
||||
@@ -23,45 +23,45 @@
|
||||
"import": "가져오기",
|
||||
"clone": "복제",
|
||||
"archive": "보관",
|
||||
"unArchive": "보관취소",
|
||||
"unArchive": "보관 해제",
|
||||
"hideArchived": "보관 숨기기",
|
||||
"showArchived": "보관 보이기",
|
||||
"notAccessTitle": "접속 권한이 없습니다",
|
||||
"showArchived": "보관된 항목 표시",
|
||||
"notAccessTitle": "접근 권한이 없습니다",
|
||||
"hideColumns": "열 숨김",
|
||||
"clearFilters": "필터 초기화",
|
||||
"clear": "지우기"
|
||||
},
|
||||
"warnWhenUnsavedChanges": "정말 나갑니까? 변경 사항이 저장되지 않습니다.",
|
||||
"warnWhenUnsavedChanges": "정말 나가시겠습니까? 저장하지 않은 변경 사항이 있습니다.",
|
||||
"notifications": {
|
||||
"success": "성공",
|
||||
"error": "오류 (상태 코드: {{statusCode}})",
|
||||
"saveSuccessful": "저장 완료!",
|
||||
"validationError": "검증 오류:{{error}}",
|
||||
"undoable": "{{seconds}}초 이내에 취소할 수 있습니다.",
|
||||
"createSuccess": "생성 완료 {{resource}}",
|
||||
"validationError": "검증 오류: {{error}}",
|
||||
"undoable": "{{seconds}}초 이내에 되돌릴 수 있습니다.",
|
||||
"createSuccess": "{{resource}} 생성 완료",
|
||||
"createError": "{{resource}} 생성 중 오류가 발생했습니다 (상태 코드: {{statusCode}})",
|
||||
"deleteSuccess": "삭제 완료 {{resource}}",
|
||||
"deleteSuccess": "{{resource}} 삭제 완료",
|
||||
"deleteError": "{{resource}} 삭제 중 오류 발생 (상태 코드: {{statusCode}})",
|
||||
"editSuccess": "수정 완료 {{resource}}",
|
||||
"editError": "{{resource}} 편집 중 오류 발생 (상태 코드: {{statusCode}})",
|
||||
"importProgress": "가져오기: {{processed}}/{{total}}"
|
||||
},
|
||||
"kofi": "Ko-fi 로 개발 지원",
|
||||
"kofi": "Ko-fi로 개발 지원",
|
||||
"loading": "로딩",
|
||||
"version": "버전",
|
||||
"unknown": "모름",
|
||||
"unknown": "알 수 없음",
|
||||
"yes": "네",
|
||||
"no": "아니오",
|
||||
"tags": {
|
||||
"clone": "복제"
|
||||
},
|
||||
"dashboard": {
|
||||
"title": "대쉬보드"
|
||||
"title": "대시보드"
|
||||
},
|
||||
"printing": {
|
||||
"generic": {
|
||||
"title": "프린팅",
|
||||
"print": "프린트",
|
||||
"title": "인쇄",
|
||||
"print": "인쇄",
|
||||
"columns": "열",
|
||||
"rows": "행",
|
||||
"paperSize": "종이 크기",
|
||||
@@ -70,8 +70,8 @@
|
||||
"showBorder": "테두리 보이기",
|
||||
"contentSettings": "내용 설정",
|
||||
"layoutSettings": "레이아웃 설정",
|
||||
"horizontalSpacing": "수평 여백",
|
||||
"verticalSpacing": "수직 여백",
|
||||
"horizontalSpacing": "수평 간격",
|
||||
"verticalSpacing": "수직 간격",
|
||||
"marginLeft": "왼쪽 여백",
|
||||
"marginRight": "오른쪽 여백",
|
||||
"marginTop": "위쪽 여백",
|
||||
@@ -85,34 +85,34 @@
|
||||
"defaultSettings": "기본값",
|
||||
"addSettings": "프리셋 추가",
|
||||
"newSetting": "신규",
|
||||
"duplicateSettings": "중복",
|
||||
"duplicateSettings": "복제",
|
||||
"deleteSettings": "프리셋 삭제",
|
||||
"deleteSettingsConfirm": "이 프리셋을 삭제하시겠습니까?",
|
||||
"settingsName": "프리셋 이름",
|
||||
"saveSetting": "프리셋 저장",
|
||||
"saveAsImage": "그림으로 저장",
|
||||
"skipItems": "항목 건너뛰기",
|
||||
"itemCopies": "항목 복사",
|
||||
"itemCopies": "항목 복사본 수",
|
||||
"description": "아래 설정을 조정하여 원하는 인쇄 레이아웃을 얻으십시오. 프린터와 운영체제(OS)가 자체 여백 및 크기 조정을 적용할 수 있으므로, 완벽하게 맞출 때까지 몇 번의 시행착오가 필요할 수 있습니다. 실제 라벨에 인쇄하기 전에 일반 용지에 테스트 인쇄를 해보십시오.",
|
||||
"helpMargin": "여백은 라벨 용지와 프린터에 맞게 설정해야 하며, 이를 변경하면 전체 그리드 크기에 영향을 미칩니다.",
|
||||
"previewScale": "미리보기 크기",
|
||||
"helpPrinterMargin": "안전 영역은 프린터가 용지 가장자리에서 얼마나 가까운 위치까지 인쇄할 수 있는 지를 설정하는 것이며, 이 값을 변경해도 전체 격자에는 영향을 미치지 않습니다.",
|
||||
"previewScale": "미리보기 배율",
|
||||
"helpPrinterMargin": "안전구역은 프린터가 용지 가장자리에서 얼마나 가까운 위치까지 인쇄할 수 있는지를 설정하는 것이며, 이 값을 변경해도 전체 격자에는 영향을 미치지 않습니다.",
|
||||
"printerMarginLeft": "안전구역 왼쪽",
|
||||
"printerMarginRight": "안전구역 오른쪽",
|
||||
"printerMarginTop": "안전구역 위쪽",
|
||||
"printerMarginBottom": "안전구역 아래쪽"
|
||||
},
|
||||
"qrcode": {
|
||||
"button": "프린트 라벨",
|
||||
"button": "라벨 인쇄",
|
||||
"title": "라벨 인쇄",
|
||||
"template": "라벨 템플릿",
|
||||
"templateHelp": "{}를 사용하여 스풀 객체의 값을 텍스트로 삽입합니다. 예를 들어, {id}는 스풀 id로 대체되고, {filament.material}은 스풀의 재료로 대체됩니다. 값이 누락된 경우 \"?\"로 대체됩니다. 두 번째 {} 세트를 사용하여 이를 제거할 수 있습니다. 또한, {} 쌍 사이에 있는 텍스트는 값이 누락된 경우 제거됩니다. 예를 들어, {Lot Nr: {lot_nr}}은 스풀에 로트 번호가 있을 때만 라벨을 표시합니다. 텍스트를 두 개의 별표 **로 감싸면 굵게 표시됩니다. 사용 가능한 모든 태그 목록을 보려면 버튼을 클릭하세요.",
|
||||
"textSize": "라벨 글씨 크기",
|
||||
"showQRCode": "QR 코드 인쇄",
|
||||
"showContent": "프린트 라벨",
|
||||
"showContent": "라벨 인쇄",
|
||||
"useHTTPUrl": {
|
||||
"label": "QR 코드 링크",
|
||||
"tooltip": "Spoolman의 스캐닝 기능(기본값)에서 스캔 한 경우에만 작동하는 독점 링크를 사용합니다. URL은 설정에 지정된 기본 URL을 사용하거나 설정되지 않은 경우 현재 페이지 URL을 사용합니다.",
|
||||
"tooltip": "Spoolman의 스캔 기능으로 스캔한 경우에만 작동하는 전용 링크를 사용합니다(기본값). URL은 설정에 지정된 기본 URL을 사용하며, 설정되지 않은 경우 현재 페이지 URL을 사용합니다.",
|
||||
"options": {
|
||||
"default": "기본값",
|
||||
"url": "URL"
|
||||
@@ -128,22 +128,22 @@
|
||||
"spoolSelect": {
|
||||
"title": "스풀 선택",
|
||||
"description": "라벨을 인쇄할 스풀을 선택합니다.",
|
||||
"showArchived": "보관 보기",
|
||||
"showArchived": "보관 보이기",
|
||||
"noSpoolsSelected": "스풀을 선택하지 않았습니다.",
|
||||
"selectAll": "선택/모두 해제",
|
||||
"selectedTotal_other": "{{count}} 스풀 선택됨"
|
||||
"selectAll": "모두 선택/해제",
|
||||
"selectedTotal_other": "스풀 {{count}}개 선택됨"
|
||||
}
|
||||
},
|
||||
"scanner": {
|
||||
"title": "QR 코드 스캐너",
|
||||
"description": "스풀맨 QR 코드를 스캔하여 스풀에 대한 세부 정보를 확인하세요.",
|
||||
"description": "Spoolman QR 코드를 스캔하여 스풀에 대한 세부 정보를 확인하세요.",
|
||||
"error": {
|
||||
"notAllowed": "카메라 접근 권한을 허용하지 않았습니다.",
|
||||
"insecureContext": "해당 페이지는 HTTPS를 통해 제공되지 않습니다.",
|
||||
"streamApiNotSupported": "브라우저가 MediaStream API를 지원하지 않습니다.",
|
||||
"notReadable": "카메라를 읽을 수 없습니다.",
|
||||
"notFound": "카메라를 찾을 수 없습니다.",
|
||||
"unknown": "알수 없는 오류 발생. {{error}}"
|
||||
"unknown": "알 수 없는 오류가 발생했습니다. ({{error}})"
|
||||
}
|
||||
},
|
||||
"spool": {
|
||||
@@ -158,14 +158,14 @@
|
||||
"material": "재료",
|
||||
"weight_to_use": "중량",
|
||||
"used_weight": "사용 중량",
|
||||
"remaining_weight": "잔여 중량",
|
||||
"remaining_weight": "남은 무게",
|
||||
"measured_weight": "측정 중량",
|
||||
"used_length": "사용 길이",
|
||||
"remaining_length": "잔여 길이",
|
||||
"initial_weight": "초기 중량",
|
||||
"spool_weight": "빈 중량",
|
||||
"spool_weight": "빈 스풀 중량",
|
||||
"location": "위치",
|
||||
"lot_nr": "Lot Nr",
|
||||
"lot_nr": "로트 번호",
|
||||
"first_used": "첫 사용",
|
||||
"last_used": "최종 사용",
|
||||
"registered": "등록됨",
|
||||
@@ -174,15 +174,15 @@
|
||||
},
|
||||
"fields_help": {
|
||||
"price": "전체 스풀 가격. 설정되지 않은 경우 필라멘트 가격이 대신 적용됩니다.",
|
||||
"weight_to_use": "입력할 가중치 값을 선택합니다. 측정된 중량은 선택한 필라멘트에 대해 스풀 중량이 설정된 경우에만 사용할 수 있습니다.",
|
||||
"weight_to_use": "입력할 중량 값을 선택합니다. 측정 중량은 선택한 필라멘트에 스풀 중량이 설정된 경우에만 사용할 수 있습니다.",
|
||||
"used_weight": "스풀에서 사용된 필라멘트 양입니다. 새 스풀은 사용량이 0g이어야 합니다.",
|
||||
"remaining_weight": "스풀에 남은 필라멘트 양은 얼마입니까. 새 스풀의 경우 스풀 무게와 일치해야 합니다.",
|
||||
"measured_weight": "필라멘트와 스풀의 무게는 얼마입니까.",
|
||||
"remaining_weight": "스풀에 남은 필라멘트 양입니다. 새 스풀이라면 스풀 무게와 일치해야 합니다.",
|
||||
"measured_weight": "필라멘트와 스풀을 합한 무게입니다.",
|
||||
"initial_weight": "스풀에 감긴 필라멘트의 초기 중량(순중량). 설정되지 않은 경우 필라멘트 객체의 중량을 사용합니다.",
|
||||
"spool_weight": "스풀이 비어 있을 때의 무게. 필라멘트 또는 제조업체의 값을 사용하려면 비워 두십시오.",
|
||||
"spool_weight": "스풀이 비어 있을 때의 무게. 필라멘트 또는 제조사의 값을 사용하려면 비워 두십시오.",
|
||||
"location": "여러 위치에 스풀을 보관하는 경우 스풀이 위치한 곳.",
|
||||
"lot_nr": "제조업체 lot 번호. 여러 개의 스풀을 사용할 경우 인쇄물의 색상이 일관되도록 보장하는 데 사용할 수 있습니다.",
|
||||
"external_filament": "외부 데이터베이스에서 필라멘트를 선택하였습니다. 이 스풀을 생성할 때 필라멘트 객체(및 제조업체 객체)가 자동으로 생성됩니다. 해당 필라멘트에 대해 이미 필라멘트 객체가 생성된 경우 중복 객체가 생성될 수 있습니다."
|
||||
"lot_nr": "제조사의 로트 번호입니다. 여러 개의 스풀을 사용할 경우 인쇄물의 색상을 일관되게 유지하는 데 사용할 수 있습니다.",
|
||||
"external_filament": "외부 데이터베이스에서 필라멘트를 선택하였습니다. 이 스풀을 생성할 때 필라멘트 객체(및 경우에 따라 제조사 객체)가 자동으로 생성됩니다. 해당 필라멘트에 대해 이미 필라멘트 객체가 생성된 경우 중복 객체가 생성될 수 있습니다."
|
||||
},
|
||||
"titles": {
|
||||
"create": "스풀 생성",
|
||||
@@ -200,10 +200,10 @@
|
||||
"weight": "중량"
|
||||
},
|
||||
"measurement_type_label": "측정 유형",
|
||||
"adjust_filament_help": "여기서 필라멘트를 스풀에서 직접 추가하거나 제거할 수 있습니다. 양수 값은 필라멘트를 소모하고, 음수 값은 필라멘트를 추가합니다.",
|
||||
"adjust_filament_help": "여기서 스풀의 필라멘트를 직접 더하거나 뺄 수 있습니다. 양수 값은 필라멘트를 소모하고, 음수 값은 필라멘트를 추가합니다.",
|
||||
"adjust_filament_value": "소모량",
|
||||
"new_location_prompt": "새 위치 입력",
|
||||
"spool_updated": "이 페이지를 열었을 때 이후로 다른 사람/무언가에 의해 이 스풀이 업데이트 되었습니다. 저장하면 해당 변경 사항이 덮어쓰게 됩니다!"
|
||||
"spool_updated": "이 페이지를 연 이후 다른 사용자나 프로그램이 이 스풀을 업데이트했습니다. 저장하면 해당 변경 사항을 덮어쓰게 됩니다!"
|
||||
},
|
||||
"messages": {
|
||||
"archive": "이 스풀을 보관하시겠습니까?"
|
||||
@@ -222,30 +222,30 @@
|
||||
"material": "재료",
|
||||
"price": "가격",
|
||||
"density": "밀도",
|
||||
"diameter": "외경",
|
||||
"diameter": "직경",
|
||||
"weight": "중량",
|
||||
"spool_weight": "스풀 중량",
|
||||
"article_number": "제품 번호",
|
||||
"registered": "등록됨",
|
||||
"comment": "주석",
|
||||
"settings_extruder_temp": "압출기 온도",
|
||||
"settings_bed_temp": "배드 온도",
|
||||
"settings_bed_temp": "베드 온도",
|
||||
"color_hex": "색상",
|
||||
"single_color": "단일",
|
||||
"multi_color": "다중",
|
||||
"coaxial": "공압출",
|
||||
"external_id": "외부 ID",
|
||||
"spools": "스풀 보기",
|
||||
"longitudinal": "세로"
|
||||
"longitudinal": "종방향"
|
||||
},
|
||||
"fields_help": {
|
||||
"name": "필라멘트 이름, 동일한 제조사의 다른 필라멘트 유형과 구별하기 위한 명칭. 예를 들어 색상을 포함해야 합니다.",
|
||||
"material": "예. PLA, ABS, PETG, 등.",
|
||||
"material": "예: PLA, ABS, PETG 등.",
|
||||
"price": "전체 스풀 가격.",
|
||||
"weight": "전체 스풀의 필라멘트 중량(순중량). 여기에는 스풀 자체의 무게는 포함되지 않으며 필라멘트만 포함됩니다. 일반적으로 포장지에 표기되는 내용입니다.",
|
||||
"spool_weight": "빈 스풀의 무게. 스풀의 측정 무게를 결정하는 데 사용됩니다.",
|
||||
"article_number": "예. EAN, UPC, 등.",
|
||||
"multi_color_direction": "필라멘트는 두 가지 방식으로 다중 색상을 가질 수 있습니다: 일관된 다중 색상을 가진 이중 색상 필라멘트처럼 공압출을 통해서이거나, 스풀을 따라 색상이 변하는 그라데이션 필라멘트처럼 종방향 색상 변화를 통해서입니다."
|
||||
"article_number": "예: EAN, UPC 등",
|
||||
"multi_color_direction": "필라멘트가 여러 색상을 갖는 방식은 두 가지입니다. 하나는 색상이 일정하게 유지되는 이중 색상 필라멘트처럼 공압출을 이용하는 방식이고, 다른 하나는 스풀을 따라 색상이 바뀌는 그라데이션 필라멘트처럼 종방향으로 색상이 변하는 방식입니다."
|
||||
},
|
||||
"titles": {
|
||||
"create": "필라멘트 생성",
|
||||
@@ -256,9 +256,9 @@
|
||||
"show_title": "[필라멘트 #{{id}}] {{name}}"
|
||||
},
|
||||
"form": {
|
||||
"filament_updated": "이 필라멘트는 귀하가 이 페이지를 열었을 때 이후로 다른 사람/무언가에 의해 업데이트 되었습니다. 저장하면 해당 변경 사항이 덮어쓰게 됩니다!",
|
||||
"filament_updated": "이 필라멘트는 이 페이지를 연 이후 다른 사람 또는 다른 프로그램에 의해 업데이트되었습니다. 저장하면 해당 변경 사항을 덮어쓰게 됩니다!",
|
||||
"import_external": "외부에서 가져오기",
|
||||
"import_external_description": "목록에서 필라멘트를 선택하면 필라멘트 생성 양식에 해당 세부 정보가 자동으로 채워집니다. 이 경우 양식에 입력한 기존 데이터는 모두 덮어쓰게 됩니다.<br><br>필요한 경우 확인을 클릭하면 제조업체 객체가 자동으로 생성됩니다."
|
||||
"import_external_description": "목록에서 필라멘트를 선택하면 필라멘트 생성 양식에 해당 세부 정보가 자동으로 채워집니다. 이 경우 양식에 입력한 기존 데이터는 모두 덮어쓰게 됩니다.<br><br>필요한 경우 확인을 클릭하면 제조사 객체가 자동으로 생성됩니다."
|
||||
},
|
||||
"buttons": {
|
||||
"add_spool": "스풀 추가"
|
||||
@@ -286,25 +286,25 @@
|
||||
"show_title": "[제조사 #{{id}}] {{name}}"
|
||||
},
|
||||
"form": {
|
||||
"vendor_updated": "이 제조업체 정보는 귀하가 이 페이지를 열었을 때 이후로 다른 사람/무언가에 의해 업데이트 되었습니다. 저장하면 해당 변경 사항이 덮어쓰게 됩니다!"
|
||||
"vendor_updated": "이 제조사 정보는 이 페이지를 연 이후 다른 사람 또는 다른 프로그램에 의해 업데이트되었습니다. 저장하면 해당 변경 사항을 덮어쓰게 됩니다!"
|
||||
}
|
||||
},
|
||||
"home": {
|
||||
"home": "홈",
|
||||
"welcome": "스풀맨 인스턴스에 오신 것을 환영합니다!",
|
||||
"welcome": "Spoolman 인스턴스에 오신 것을 환영합니다!",
|
||||
"description": "아직 스풀을 추가하지 않은 것 같습니다. 시작하는 방법에 대한 도움말은 <helpPageLink>도움말 페이지</helpPageLink>를 참조하세요."
|
||||
},
|
||||
"help": {
|
||||
"help": "도움말",
|
||||
"resources": {
|
||||
"filament": "필라멘트 브랜드. 이름, 재질, 색상, 직경 등의 속성을 가집니다.",
|
||||
"filament": "필라멘트 브랜드. 이름, 재료, 색상, 직경 등의 속성을 가집니다.",
|
||||
"spool": "특정 필라멘트의 개별 물리적 스풀.",
|
||||
"vendor": "필라멘트를 제조하는 기업들."
|
||||
},
|
||||
"description": "<title>도움말</title><p>시작하는 데 도움이 될 몇 가지 팁을 소개합니다.</p><p>Spoolman은 3가지 유형의 데이터를 보유합니다:</p><itemsHelp/><p>데이터베이스에 새 스풀을 추가하려면 먼저 <filamentCreateLink>필라멘트</filamentCreateLink> 객체를 생성하세요. 그런 다음 해당 스풀에 대한 <spoolCreateLink>스풀</spoolCreateLink> 객체를 생성합니다. 나중에 동일한 필라멘트의 추가 스풀을 구입한 경우, 동일한 필라멘트 객체를 재사용하고 추가 스풀 객체만 생성하면 됩니다.</p><p>필요에 따라 필라멘트 제조사를 추적하려면 해당 회사에 대한 <vendorCreateLink>제조사</vendorCreateLink> 객체를 생성할 수도 있습니다. </p><p>필라멘트 사용량을 자동으로 모니터링하고 스풀 객체를 업데이트해주는 Moonraker 같은 다른 3D 프린터 서비스를 Spoolman에 연결할 수도 있습니다. 설정 방법은 <readmeLink>Spoolman README</readmeLink>를 참고하세요.</p>"
|
||||
},
|
||||
"table": {
|
||||
"actions": "행동"
|
||||
"actions": "작업"
|
||||
},
|
||||
"settings": {
|
||||
"settings": "설정",
|
||||
@@ -316,16 +316,16 @@
|
||||
},
|
||||
"base_url": {
|
||||
"label": "기본 URL",
|
||||
"tooltip": "QR 코드와 같은 기능을 생성할 때 사용할 기본 URL."
|
||||
"tooltip": "QR 코드와 같은 기능을 생성할 때 사용할 기본 URL입니다."
|
||||
},
|
||||
"round_prices": {
|
||||
"label": "반올림 가격",
|
||||
"tooltip": "가격을 가장 가까운 정수로 반올림 합니다."
|
||||
"label": "가격 반올림",
|
||||
"tooltip": "가격을 가장 가까운 정수로 반올림합니다."
|
||||
}
|
||||
},
|
||||
"extra_fields": {
|
||||
"tab": "추가 필드",
|
||||
"description": "<p>여기에서 엔터티에 추가 사용자 정의 필드를 추가할 수 있습니다.</p><p>필드를 추가한 후에는 키나 유형을 변경할 수 없으며, 선택형 필드의 경우 선택 항목을 제거하거나 다중 선택 상태를 변경할 수 없습니다. 필드를 삭제하면 모든 엔티티의 관련 데이터가 삭제됩니다.</p><p>키 값은 다른 프로그램이 데이터를 읽고 쓰는 방식이므로, 사용자 정의 필드가 타사 프로그램과 연동될 예정이라면 반드시 올바르게 설정해야 합니다. 기본값은 새 항목에만 적용됩니다.</p><p>추가 필드는 테이블 보기에서 정렬하거나 필터링할 수 없습니다.</p>",
|
||||
"description": "<p>여기에서 엔티티에 추가 사용자 정의 필드를 추가할 수 있습니다.</p><p>필드를 추가한 후에는 키나 유형을 변경할 수 없으며, 선택형 필드의 경우 선택 항목을 제거하거나 다중 선택 상태를 변경할 수 없습니다. 필드를 삭제하면 모든 엔티티의 관련 데이터가 삭제됩니다.</p><p>키 값은 다른 프로그램이 데이터를 읽고 쓰는 방식이므로, 사용자 정의 필드가 타사 프로그램과 연동될 예정이라면 반드시 올바르게 설정해야 합니다. 기본값은 새 항목에만 적용됩니다.</p><p>추가 필드는 테이블 보기에 표시하고 정렬할 수 있습니다. 선택형과 불리언 필드는 필터 옵션도 함께 제공하며, 모든 추가 필드 유형은 빈 값 필터링을 지원합니다.</p>",
|
||||
"params": {
|
||||
"key": "키",
|
||||
"name": "이름",
|
||||
@@ -333,17 +333,17 @@
|
||||
"unit": "단위",
|
||||
"order": "순번",
|
||||
"default_value": "기본값",
|
||||
"choices": "선택",
|
||||
"choices": "선택 항목",
|
||||
"multi_choice": "다중 선택"
|
||||
},
|
||||
"field_type": {
|
||||
"text": "텍스트",
|
||||
"integer": "정수",
|
||||
"integer_range": "정수 범위",
|
||||
"float": "Float",
|
||||
"float_range": "Float 범위",
|
||||
"float": "실수",
|
||||
"float_range": "실수 범위",
|
||||
"datetime": "날짜 및 시간",
|
||||
"boolean": "Boolean",
|
||||
"boolean": "논리형",
|
||||
"choice": "선택"
|
||||
},
|
||||
"boolean_true": "네",
|
||||
@@ -352,7 +352,8 @@
|
||||
"non_unique_key_error": "키는 고유해야 합니다.",
|
||||
"key_not_changed": "키 값을 다른 것으로 바꿔 주세요.",
|
||||
"delete_confirm": "{{name}} 필드 삭제?",
|
||||
"delete_confirm_description": "이 작업은 모든 엔티티에 대해 해당 필드와 관련된 모든 데이터를 삭제합니다."
|
||||
"delete_confirm_description": "이 작업은 모든 엔티티에 대해 해당 필드와 관련된 모든 데이터를 삭제합니다.",
|
||||
"choices_reorder_hint": "드래그하거나 방향키를 사용해 이 선택 항목의 순서를 변경하세요."
|
||||
}
|
||||
},
|
||||
"documentTitle": {
|
||||
@@ -394,5 +395,11 @@
|
||||
"new_location": "새로운 위치",
|
||||
"no_location": "위치 없음",
|
||||
"no_locations_help": "이 페이지에서는 스풀을 위치별로 정리할 수 있습니다. 시작하려면 스풀을 추가하세요!"
|
||||
},
|
||||
"theme": {
|
||||
"label": "테마",
|
||||
"system": "시스템",
|
||||
"light": "라이트",
|
||||
"dark": "다크"
|
||||
}
|
||||
}
|
||||
@@ -354,7 +354,8 @@
|
||||
"non_unique_key_error": "Raktas turi būti unukalus.",
|
||||
"key_not_changed": "Prašome pakeisti raktą į ką nors kitą.",
|
||||
"delete_confirm": "Šalinti lauką {{name}}?",
|
||||
"delete_confirm_description": "Tai ištrins lauką ir visus susijusius duomenis visiems objektams."
|
||||
"delete_confirm_description": "Tai ištrins lauką ir visus susijusius duomenis visiems objektams.",
|
||||
"choices_reorder_hint": "Temkite arba naudokite rodyklių klavišus, kad pakeistumėte eilės tvarką."
|
||||
}
|
||||
},
|
||||
"documentTitle": {
|
||||
@@ -396,5 +397,10 @@
|
||||
"new_location": "Nauja vieta",
|
||||
"no_location": "Be vietos",
|
||||
"no_locations_help": "Šiame puslapyje galite tvarkyti rites pagal vietas, pridėkite keletą ričių, kad pradėtumėte!"
|
||||
},
|
||||
"theme": {
|
||||
"label": "Tema",
|
||||
"system": "Sistema",
|
||||
"dark": "Tamsus"
|
||||
}
|
||||
}
|
||||
@@ -2,7 +2,9 @@
|
||||
"actions": {
|
||||
"create": "Izveidot",
|
||||
"edit": "Rediģēt",
|
||||
"clone": "Klonēt"
|
||||
"clone": "Klonēt",
|
||||
"list": "",
|
||||
"show": ""
|
||||
},
|
||||
"buttons": {
|
||||
"create": "Izveidot",
|
||||
@@ -14,6 +16,385 @@
|
||||
"confirm": "Vai esat pārliecināts?",
|
||||
"continue": "Turpināt",
|
||||
"filter": "Filtrēt",
|
||||
"clear": "Notīrīt"
|
||||
"clear": "Notīrīt",
|
||||
"show": "",
|
||||
"cancel": "",
|
||||
"showArchived": "",
|
||||
"archive": "",
|
||||
"hideColumns": "",
|
||||
"undo": "",
|
||||
"import": "",
|
||||
"refresh": "",
|
||||
"notAccessTitle": "",
|
||||
"hideArchived": "",
|
||||
"clearFilters": "",
|
||||
"unArchive": "",
|
||||
"clone": ""
|
||||
},
|
||||
"vendor": {
|
||||
"fields": {
|
||||
"external_id": "",
|
||||
"registered": "",
|
||||
"comment": "",
|
||||
"name": "",
|
||||
"empty_spool_weight": "",
|
||||
"id": ""
|
||||
},
|
||||
"fields_help": {
|
||||
"empty_spool_weight": ""
|
||||
},
|
||||
"titles": {
|
||||
"show_title": "",
|
||||
"show": "",
|
||||
"edit": "",
|
||||
"clone": "",
|
||||
"create": "",
|
||||
"list": ""
|
||||
},
|
||||
"form": {
|
||||
"vendor_updated": ""
|
||||
},
|
||||
"vendor": ""
|
||||
},
|
||||
"documentTitle": {
|
||||
"vendor": {
|
||||
"create": "",
|
||||
"clone": "",
|
||||
"edit": "",
|
||||
"list": "",
|
||||
"show": ""
|
||||
},
|
||||
"default": "",
|
||||
"home": {
|
||||
"list": ""
|
||||
},
|
||||
"spool": {
|
||||
"edit": "",
|
||||
"list": "",
|
||||
"create": "",
|
||||
"show": "",
|
||||
"clone": ""
|
||||
},
|
||||
"filament": {
|
||||
"list": "",
|
||||
"show": "",
|
||||
"clone": "",
|
||||
"create": "",
|
||||
"edit": ""
|
||||
},
|
||||
"suffix": "",
|
||||
"locations": {
|
||||
"list": ""
|
||||
},
|
||||
"help": {
|
||||
"list": ""
|
||||
}
|
||||
},
|
||||
"spool": {
|
||||
"fields": {
|
||||
"measured_weight": "",
|
||||
"last_used": "",
|
||||
"filament_internal": "",
|
||||
"material": "",
|
||||
"spool_weight": "",
|
||||
"weight_to_use": "",
|
||||
"lot_nr": "",
|
||||
"filament_name": "",
|
||||
"price": "",
|
||||
"comment": "",
|
||||
"filament": "",
|
||||
"location": "",
|
||||
"used_length": "",
|
||||
"archived": "",
|
||||
"remaining_length": "",
|
||||
"registered": "",
|
||||
"first_used": "",
|
||||
"used_weight": "",
|
||||
"id": "",
|
||||
"remaining_weight": "",
|
||||
"initial_weight": "",
|
||||
"filament_external": ""
|
||||
},
|
||||
"titles": {
|
||||
"archive": "",
|
||||
"adjust": "",
|
||||
"show": "",
|
||||
"edit": "",
|
||||
"create": "",
|
||||
"clone": "",
|
||||
"show_title": "",
|
||||
"list": ""
|
||||
},
|
||||
"fields_help": {
|
||||
"external_filament": "",
|
||||
"used_weight": "",
|
||||
"weight_to_use": "",
|
||||
"measured_weight": "",
|
||||
"price": "",
|
||||
"spool_weight": "",
|
||||
"lot_nr": "",
|
||||
"remaining_weight": "",
|
||||
"location": "",
|
||||
"initial_weight": ""
|
||||
},
|
||||
"form": {
|
||||
"spool_updated": "",
|
||||
"measurement_type_label": "",
|
||||
"adjust_filament_value": "",
|
||||
"new_location_prompt": "",
|
||||
"measurement_type": {
|
||||
"weight": "",
|
||||
"length": ""
|
||||
},
|
||||
"adjust_filament_help": ""
|
||||
},
|
||||
"spool": "",
|
||||
"formats": {
|
||||
"last_used": ""
|
||||
},
|
||||
"messages": {
|
||||
"archive": ""
|
||||
}
|
||||
},
|
||||
"filament": {
|
||||
"form": {
|
||||
"import_external": "",
|
||||
"filament_updated": "",
|
||||
"import_external_description": ""
|
||||
},
|
||||
"fields_help": {
|
||||
"name": "",
|
||||
"article_number": "",
|
||||
"spool_weight": "",
|
||||
"price": "",
|
||||
"weight": "",
|
||||
"multi_color_direction": "",
|
||||
"material": ""
|
||||
},
|
||||
"fields": {
|
||||
"material": "",
|
||||
"vendor_name": "",
|
||||
"settings_extruder_temp": "",
|
||||
"comment": "",
|
||||
"multi_color": "",
|
||||
"diameter": "",
|
||||
"weight": "",
|
||||
"spool_weight": "",
|
||||
"external_id": "",
|
||||
"single_color": "",
|
||||
"registered": "",
|
||||
"spools": "",
|
||||
"name": "",
|
||||
"price": "",
|
||||
"settings_bed_temp": "",
|
||||
"vendor": "",
|
||||
"density": "",
|
||||
"longitudinal": "",
|
||||
"id": "",
|
||||
"color_hex": "",
|
||||
"article_number": "",
|
||||
"coaxial": ""
|
||||
},
|
||||
"titles": {
|
||||
"clone": "",
|
||||
"show_title": "",
|
||||
"show": "",
|
||||
"create": "",
|
||||
"edit": "",
|
||||
"list": ""
|
||||
},
|
||||
"buttons": {
|
||||
"add_spool": ""
|
||||
},
|
||||
"filament": ""
|
||||
},
|
||||
"printing": {
|
||||
"generic": {
|
||||
"printerMarginBottom": "",
|
||||
"verticalSpacing": "",
|
||||
"rows": "",
|
||||
"borders": {
|
||||
"none": "",
|
||||
"grid": "",
|
||||
"border": ""
|
||||
},
|
||||
"printerMarginTop": "",
|
||||
"deleteSettingsConfirm": "",
|
||||
"deleteSettings": "",
|
||||
"customSize": "",
|
||||
"title": "",
|
||||
"contentSettings": "",
|
||||
"marginRight": "",
|
||||
"printerMarginRight": "",
|
||||
"itemCopies": "",
|
||||
"helpPrinterMargin": "",
|
||||
"settingsName": "",
|
||||
"previewScale": "",
|
||||
"helpMargin": "",
|
||||
"marginTop": "",
|
||||
"skipItems": "",
|
||||
"newSetting": "",
|
||||
"addSettings": "",
|
||||
"layoutSettings": "",
|
||||
"paperSize": "",
|
||||
"columns": "",
|
||||
"description": "",
|
||||
"marginBottom": "",
|
||||
"horizontalSpacing": "",
|
||||
"duplicateSettings": "",
|
||||
"settings": "",
|
||||
"saveSetting": "",
|
||||
"marginLeft": "",
|
||||
"showBorder": "",
|
||||
"saveAsImage": "",
|
||||
"printerMarginLeft": "",
|
||||
"dimensions": "",
|
||||
"defaultSettings": "",
|
||||
"print": ""
|
||||
},
|
||||
"qrcode": {
|
||||
"useHTTPUrl": {
|
||||
"options": {
|
||||
"default": "",
|
||||
"url": ""
|
||||
},
|
||||
"preview": "",
|
||||
"tooltip": "",
|
||||
"label": ""
|
||||
},
|
||||
"showContent": "",
|
||||
"showQRCodeMode": {
|
||||
"withIcon": "",
|
||||
"no": "",
|
||||
"simple": ""
|
||||
},
|
||||
"templateHelp": "",
|
||||
"textSize": "",
|
||||
"showQRCode": "",
|
||||
"template": "",
|
||||
"title": "",
|
||||
"button": ""
|
||||
},
|
||||
"spoolSelect": {
|
||||
"selectedTotal_zero": "",
|
||||
"selectedTotal_one": "",
|
||||
"selectedTotal_other": "",
|
||||
"description": "",
|
||||
"showArchived": "",
|
||||
"title": "",
|
||||
"selectAll": "",
|
||||
"noSpoolsSelected": ""
|
||||
}
|
||||
},
|
||||
"settings": {
|
||||
"extra_fields": {
|
||||
"non_unique_key_error": "",
|
||||
"params": {
|
||||
"unit": "",
|
||||
"choices": "",
|
||||
"default_value": "",
|
||||
"field_type": "",
|
||||
"multi_choice": "",
|
||||
"order": "",
|
||||
"name": "",
|
||||
"key": ""
|
||||
},
|
||||
"boolean_true": "",
|
||||
"choices_missing_error": "",
|
||||
"boolean_false": "",
|
||||
"delete_confirm_description": "",
|
||||
"field_type": {
|
||||
"boolean": "",
|
||||
"float": "",
|
||||
"choice": "",
|
||||
"float_range": "",
|
||||
"datetime": "",
|
||||
"integer": "",
|
||||
"integer_range": "",
|
||||
"text": ""
|
||||
},
|
||||
"tab": "",
|
||||
"description": "",
|
||||
"delete_confirm": "",
|
||||
"key_not_changed": ""
|
||||
},
|
||||
"general": {
|
||||
"tab": "",
|
||||
"base_url": {
|
||||
"tooltip": "",
|
||||
"label": ""
|
||||
},
|
||||
"round_prices": {
|
||||
"label": "",
|
||||
"tooltip": ""
|
||||
},
|
||||
"currency": {
|
||||
"label": ""
|
||||
}
|
||||
},
|
||||
"header": "",
|
||||
"settings": ""
|
||||
},
|
||||
"home": {
|
||||
"welcome": "",
|
||||
"home": "",
|
||||
"description": ""
|
||||
},
|
||||
"scanner": {
|
||||
"title": "",
|
||||
"error": {
|
||||
"insecureContext": "",
|
||||
"notReadable": "",
|
||||
"notAllowed": "",
|
||||
"unknown": "",
|
||||
"notFound": "",
|
||||
"streamApiNotSupported": ""
|
||||
},
|
||||
"description": ""
|
||||
},
|
||||
"help": {
|
||||
"resources": {
|
||||
"vendor": "",
|
||||
"filament": "",
|
||||
"spool": ""
|
||||
},
|
||||
"description": "",
|
||||
"help": ""
|
||||
},
|
||||
"notifications": {
|
||||
"deleteSuccess": "",
|
||||
"error": "",
|
||||
"editError": "",
|
||||
"saveSuccessful": "",
|
||||
"undoable": "",
|
||||
"importProgress": "",
|
||||
"createError": "",
|
||||
"validationError": "",
|
||||
"success": "",
|
||||
"editSuccess": "",
|
||||
"deleteError": "",
|
||||
"createSuccess": ""
|
||||
},
|
||||
"no": "",
|
||||
"unknown": "",
|
||||
"yes": "",
|
||||
"locations": {
|
||||
"new_location": "",
|
||||
"no_location": "",
|
||||
"locations": "",
|
||||
"no_locations_help": ""
|
||||
},
|
||||
"version": "",
|
||||
"kofi": "",
|
||||
"table": {
|
||||
"actions": ""
|
||||
},
|
||||
"warnWhenUnsavedChanges": "",
|
||||
"loading": "",
|
||||
"dashboard": {
|
||||
"title": ""
|
||||
},
|
||||
"tags": {
|
||||
"clone": ""
|
||||
}
|
||||
}
|
||||
@@ -277,7 +277,7 @@
|
||||
"external_id": "Extern ID",
|
||||
"single_color": "Enkel",
|
||||
"multi_color": "Meervoudig",
|
||||
"coaxial": "Gecoëxtrudeerde",
|
||||
"coaxial": "Gecoëxtrudeerd",
|
||||
"longitudinal": "Longitudinaal"
|
||||
},
|
||||
"titles": {
|
||||
@@ -291,11 +291,11 @@
|
||||
"filament": "Filamenten",
|
||||
"form": {
|
||||
"filament_updated": "Dit filament is bijgewerkt door iemand/iets anders sinds je deze pagina geopend hebt. Deze veranderingen worden overschreven als je op slaat!",
|
||||
"import_external_description": "Selecteer een filament in de lijst om de details ervan automatisch in te vullen in het formulier voor het maken van filamenten. Hierdoor worden alle gegevens die u in het formulier hebt ingevoerd, overschreven.<br><br>Er wordt indien nodig automatisch een Fabrikant-object gemaakt als u op OK klikt.",
|
||||
"import_external_description": "Selecteer een filament uit de lijst om de details automatisch aan het formulier voor het maken van filamenten toe te voegen. Hierdoor worden alle gegevens die je in het formulier ingevoerd hebt, overschreven.<br><br>Er wordt indien nodig automatisch een fabrikant-object aangemaakt als je op OK klikt.",
|
||||
"import_external": "Importeren van extern"
|
||||
},
|
||||
"buttons": {
|
||||
"add_spool": "Spoel toevoegen"
|
||||
"add_spool": "Spoel Toevoegen"
|
||||
}
|
||||
},
|
||||
"scanner": {
|
||||
@@ -314,8 +314,8 @@
|
||||
"titles": {
|
||||
"show": "Fabrikant tonen",
|
||||
"edit": "Fabrikant bewerken",
|
||||
"clone": "Fabrikant klonen",
|
||||
"create": "Fabrikant maken",
|
||||
"clone": "Fabrikant Klonen",
|
||||
"create": "Fabrikant Aanmaken",
|
||||
"list": "Fabrikanten",
|
||||
"show_title": "[Fabrikant #{{id}}] {{name}}"
|
||||
},
|
||||
@@ -324,8 +324,8 @@
|
||||
"comment": "Opmerking",
|
||||
"name": "Naam",
|
||||
"id": "ID",
|
||||
"empty_spool_weight": "Gewicht lege spoel",
|
||||
"external_id": "Extern ID"
|
||||
"empty_spool_weight": "Gewicht Lege Spoel",
|
||||
"external_id": "Externe ID"
|
||||
},
|
||||
"vendor": "Fabrikanten",
|
||||
"form": {
|
||||
@@ -350,8 +350,8 @@
|
||||
"kofi": "Tip mij op Ko-fi",
|
||||
"home": {
|
||||
"home": "Thuis",
|
||||
"welcome": "",
|
||||
"description": ""
|
||||
"welcome": "Welkom bij je eigen Spoolman-account!",
|
||||
"description": "Het lijkt erop dat je nog geen spoelen hebt toegevoegd. Zie de <helpPageLink>Help-pagina</helpPageLink> voor hulp bij het opstarten."
|
||||
},
|
||||
"settings": {
|
||||
"header": "Instellingen",
|
||||
@@ -373,7 +373,7 @@
|
||||
"tab": "Extra velden",
|
||||
"params": {
|
||||
"name": "Naam",
|
||||
"key": "Key",
|
||||
"key": "Sleutel",
|
||||
"field_type": "Type",
|
||||
"unit": "Eenheid",
|
||||
"order": "Volgorde",
|
||||
@@ -398,7 +398,8 @@
|
||||
"key_not_changed": "Key niet gewijzigd.",
|
||||
"delete_confirm": "Veld {{name}} verwijderen?",
|
||||
"delete_confirm_description": "Hierdoor worden het veld en alle bijbehorende gegevens voor alle entiteiten verwijderd.",
|
||||
"description": "<p>Hier kunt u extra aangepaste velden toevoegen aan uw entiteiten.</p><p>Zodra een veld is toegevoegd, kunt u de key of het type ervan niet wijzigen, en voor velden met keuzetypes kunt u geen keuzes verwijderen of de meervoudige velden wijzigen. Als u een veld verwijdert, worden de bijbehorende gegevens voor alle entiteiten verwijderd.</p><p>De key is hoe andere programma's de gegevens lezen/schrijven, dus of uw aangepaste veld moet worden geïntegreerd met een derde partij programma, zorg ervoor dat u het correct instelt. De standaardwaarde wordt alleen toegepast op nieuwe items.</p><p>Extra velden kunnen niet worden gesorteerd of gefilterd in de tabelweergaven.</p>"
|
||||
"description": "<p>Hier kunt u extra aangepaste velden toevoegen aan uw entiteiten.</p><p>Zodra een veld is toegevoegd, kunt u de key of het type ervan niet wijzigen, en voor velden met keuzetypes kunt u geen keuzes verwijderen of de meervoudige velden wijzigen. Als u een veld verwijdert, worden de bijbehorende gegevens voor alle entiteiten verwijderd.</p><p>De key is hoe andere programma's de gegevens lezen/schrijven, dus of uw aangepaste veld moet worden geïntegreerd met een derde partij programma, zorg ervoor dat u het correct instelt. De standaardwaarde wordt alleen toegepast op nieuwe items.</p><p>Extra velden kunnen worden weergegeven en gesorteerd in de tabelweergaven. Keuze- en booleaanse-velden bieden daar ook filteropties, en alle typen extra velden ondersteunen het filteren op lege waarden.</p>",
|
||||
"choices_reorder_hint": "Sleep of gebruik de pijltjestoetsen om deze keuze opnieuw te ordenen."
|
||||
},
|
||||
"settings": "Instellingen"
|
||||
},
|
||||
@@ -407,5 +408,12 @@
|
||||
"no_locations_help": "Op deze pagina kunt u uw spoelen op verschillende locaties ordenen. Voeg spoelen toe om aan de slag te gaan!",
|
||||
"locations": "Locaties",
|
||||
"new_location": "Nieuwe locatie"
|
||||
}
|
||||
},
|
||||
"theme": {
|
||||
"light": "Licht",
|
||||
"dark": "Donker",
|
||||
"system": "Systeem",
|
||||
"label": "Thema"
|
||||
},
|
||||
"sponsor": "Steun me op GitHub"
|
||||
}
|
||||
@@ -8,7 +8,7 @@
|
||||
},
|
||||
"buttons": {
|
||||
"edit": "Edytuj",
|
||||
"unArchive": "Odarchiwizuj",
|
||||
"unArchive": "Przywróć",
|
||||
"cancel": "Anuluj",
|
||||
"create": "Utwórz",
|
||||
"save": "Zapisz",
|
||||
@@ -56,7 +56,7 @@
|
||||
"first_used": "Pierwsze użycie",
|
||||
"last_used": "Ostatnie użycie",
|
||||
"comment": "Komentarz",
|
||||
"archived": "Zarchiwizowano",
|
||||
"archived": "Zarchiwizowana",
|
||||
"used_weight": "Zużyta waga",
|
||||
"registered": "Zarejestrowano",
|
||||
"measured_weight": "Zmierzona waga",
|
||||
@@ -111,7 +111,7 @@
|
||||
"importProgress": "Importowanie: {{processed}}/{{total}}",
|
||||
"error": "Błąd (kod statusu: {{statusCode}})",
|
||||
"createError": "Wystąpił błąd podczas tworzenia {{resource}} (kod statusu: {{statusCode}})",
|
||||
"saveSuccessful": "Pomyślnie zapisano!",
|
||||
"saveSuccessful": "Zapisano pomyślnie!",
|
||||
"validationError": "Błąd walidacji: {{error}}"
|
||||
},
|
||||
"loading": "Wczytywanie",
|
||||
@@ -125,38 +125,38 @@
|
||||
"printing": {
|
||||
"generic": {
|
||||
"title": "Drukowanie",
|
||||
"helpMargin": "Marginesy powinny być skonfigurowane tak, aby pasowały do papieru etykietowego i drukarki, ich zmiana wpłynie na rozmiar całej siatki.",
|
||||
"helpPrinterMargin": "Bezpieczna strefa powinna być ustawiona tak, aby znajdowała się jak najbliżej krawędzi papieru, na którym drukarka może drukować, zmiana tych ustawień nie wpłynie na całą siatkę.",
|
||||
"helpMargin": "Marginesy powinny odpowiadać papierowi etykiet i drukarce — ich zmiana wpływa na rozmiar całej siatki.",
|
||||
"helpPrinterMargin": "Strefę bezpieczną ustaw na to, jak blisko krawędzi papieru drukarka jeszcze drukuje. Zmiana tych wartości nie wpływa na całą siatkę.",
|
||||
"print": "Drukuj",
|
||||
"columns": "Kolumny",
|
||||
"rows": "Wiersze",
|
||||
"paperSize": "Rozmiar papieru",
|
||||
"customSize": "Niestandardowy",
|
||||
"customSize": "Własny",
|
||||
"dimensions": "Wymiary",
|
||||
"showBorder": "Pokaż obramowanie",
|
||||
"previewScale": "Skala podglądu",
|
||||
"skipItems": "Pomiń elementy",
|
||||
"skipItems": "Pomiń pozycje",
|
||||
"contentSettings": "Ustawienia zawartości",
|
||||
"layoutSettings": "Ustawienia układu",
|
||||
"verticalSpacing": "Pionowy odstęp",
|
||||
"marginLeft": "Lewy margines",
|
||||
"marginRight": "Prawy margines",
|
||||
"marginTop": "Górny margines",
|
||||
"marginBottom": "Dolny margines",
|
||||
"printerMarginLeft": "Bezpieczna strefa po lewej",
|
||||
"printerMarginRight": "Bezpieczna strefa po prawej",
|
||||
"printerMarginTop": "Bezpieczna strefa od góry",
|
||||
"verticalSpacing": "Odstęp pionowy",
|
||||
"marginLeft": "Margines lewy",
|
||||
"marginRight": "Margines prawy",
|
||||
"marginTop": "Margines górny",
|
||||
"marginBottom": "Margines dolny",
|
||||
"printerMarginLeft": "Strefa bezpieczna lewo",
|
||||
"printerMarginRight": "Strefa bezpieczna prawo",
|
||||
"printerMarginTop": "Strefa bezpieczna góra",
|
||||
"borders": {
|
||||
"none": "Brak",
|
||||
"border": "Obwódka",
|
||||
"grid": "Siatka"
|
||||
},
|
||||
"description": "Dostosuj poniższe ustawienia, aby uzyskać pożądany układ wydruku. Należy pamiętać, że drukarki i system operacyjny mogą stosować własne marginesy i skalowanie, więc może być konieczne wykonanie kilku prób i błędów, zanim wszystko będzie prawidłowe. Przed wydrukowaniem etykiet przetestuj je na zwykłym papierze.",
|
||||
"horizontalSpacing": "Poziomy odstęp",
|
||||
"printerMarginBottom": "Bezpieczna strefa od dołu",
|
||||
"description": "Dopasuj ustawienia poniżej, aby uzyskać właściwy układ wydruku. Pamiętaj, że drukarka i system mogą dodać własne marginesy i skalowanie, więc zwykle trzeba trochę poeksperymentować. Przetestuj na zwykłej kartce, zanim zujesz właściwe etykiety.",
|
||||
"horizontalSpacing": "Odstęp poziomy",
|
||||
"printerMarginBottom": "Strefa bezpieczna dół",
|
||||
"newSetting": "Nowe",
|
||||
"defaultSettings": "Domyślne",
|
||||
"itemCopies": "Skopiuj element",
|
||||
"itemCopies": "Kopie pozycji",
|
||||
"settings": "Presety",
|
||||
"saveAsImage": "Zapisz jako obraz",
|
||||
"duplicateSettings": "Zduplikuj",
|
||||
@@ -186,12 +186,12 @@
|
||||
"template": "Wzór etykiety",
|
||||
"useHTTPUrl": {
|
||||
"preview": "Podgląd:",
|
||||
"label": "Link kodu QR",
|
||||
"label": "Link w kodzie QR",
|
||||
"options": {
|
||||
"default": "Domyślne",
|
||||
"default": "Domyślny",
|
||||
"url": "URL"
|
||||
},
|
||||
"tooltip": "Zostanie użyty link który będzie działał tylko gdy zostanie zeskanowany przez funkcję skanowania Spoolmana (Domyślna opcja). Link URL używa bazowego URL ustawionego w ustawieniach lub aktualnego URL strony jeżeli nie jest ustawiony w ustawieniach."
|
||||
"tooltip": "Użyje zastrzeżonego linku, który zadziała tylko po zeskanowaniu za pomocą funkcji skanowania w Spoolman (domyślnie). Opcja URL używa podstawowego adresu URL określonego w ustawieniach lub, jeśli nie jest ustawiony, adresu URL bieżącej strony."
|
||||
},
|
||||
"showQRCode": "Drukuj kod QR",
|
||||
"showQRCodeMode": {
|
||||
@@ -199,7 +199,7 @@
|
||||
"withIcon": "Z ikoną",
|
||||
"simple": "Proste"
|
||||
},
|
||||
"templateHelp": "Użyj {}, aby wstawić wartości obiektu szpuli jako tekst. Na przykład {id} zostanie zastąpione identyfikatorem szpuli lub {filament.material} zostanie zastąpione materiałem szpuli. jeśli brakuje wartości, zostanie ona zastąpiona „?”. Drugi zestaw {} może być użyty do usunięcia tego. Ponadto każdy tekst między zestawami {} zostanie usunięty, jeśli brakuje wartości. Na przykład {Lot Nr: {lot_nr}} pokaże etykietę tylko wtedy, gdy szpula ma numer partii. Otocz tekst podwójną gwiazdką **, aby go pogrubić. Kliknij przycisk, aby wyświetlić listę wszystkich dostępnych tagów."
|
||||
"templateHelp": "Użyj {} do wprowadzenia wartości elementu szpuli jako tekst. Na przykład, {id} zostanie zastąpione przez id szpuli lub {filament.material} zostanie zastąpione przez materiał szpuli. Jeżeli brakuje wartości, to zostanie ona zastąpiona znakiem \"?\". Drugi zestaw {} można użyć, aby usunąć brakujące wartości. Dodatkowo każdy tekst między znakami {} będzie usunięty jeżeli brakuje wartości. Na przykład {Numer partii: {lot_nr}} pokaże etykietę wtedy gdy szpula będzie miała numer partii. Otocz tekst gwiazdkami by go pogrubić. Kliknij na przycisk by zobaczyć listę dostępnych znaczników."
|
||||
},
|
||||
"spoolSelect": {
|
||||
"title": "Wybierz szpule",
|
||||
@@ -216,13 +216,13 @@
|
||||
"title": "Skaner kodów QR",
|
||||
"error": {
|
||||
"notAllowed": "Nie zezwolono na dostęp do kamery.",
|
||||
"insecureContext": "Strona nie jest dostarczana przez HTTPS.",
|
||||
"streamApiNotSupported": "Przeglądarka nie obsługuje API MediaStream.",
|
||||
"insecureContext": "Strona nie jest serwowana przez HTTPS.",
|
||||
"streamApiNotSupported": "Przeglądarka nie obsługuje MediaStream API.",
|
||||
"notReadable": "Kamera jest niedostępna do odczytu.",
|
||||
"notFound": "Nie znaleziono kamery.",
|
||||
"unknown": "Wystąpił nieznany błąd. ({{error}})"
|
||||
},
|
||||
"description": "Zeskanuj kod QR Spoolman, aby wyświetlić szczegółowe informacje o szpuli."
|
||||
"description": "Zeskanuj kod QR Spoolmana, aby zobaczyć szczegóły szpuli."
|
||||
},
|
||||
"filament": {
|
||||
"filament": "Filamenty",
|
||||
@@ -248,7 +248,7 @@
|
||||
"single_color": "Pojedynczy",
|
||||
"multi_color": "Wielo",
|
||||
"longitudinal": "Wzdłużny",
|
||||
"coaxial": "Koekstrudowany"
|
||||
"coaxial": "Współwytłaczany"
|
||||
},
|
||||
"fields_help": {
|
||||
"material": "Np. PLA, ABS, PETG itp.",
|
||||
@@ -348,7 +348,7 @@
|
||||
"help": "Pomoc",
|
||||
"description": "<title>Pomoc</title><p>Oto kilka wskazówek na początek.</p><p>Spoolman przechowuje 3 różne typy danych:</p><itemsHelp/><p>Aby dodać nową szpulę do bazy danych, zacznij od utworzenia obiektu <filamentCreateLink>Filament</filamentCreateLink>. Gdy już to zrobisz, przejdź do utworzenia obiektu <spoolCreateLink>Szpula</spoolCreateLink> dla tej konkretnej szpuli. Jeśli później zdobędziesz dodatkowe szpule tego samego filamentu, po prostu wygeneruj dodatkowe obiekty Szpula i ponownie użyj tego samego obiektu Filament.</p><p>Opcjonalnie możesz także wygenerować obiekt <vendorCreateLink>Producent</vendorCreateLink> dla firmy produkującej filament, jeśli chcesz śledzić te informacje.</p><p>Masz możliwość połączenia innych usług drukarek 3D ze Spoolmanem, takich jak Moonraker, który może automatycznie monitorować zużycie filamentu i aktualizować obiekty Szpula. Wskazówki dotyczące konfiguracji można znaleźć w <readmeLink>Spoolman README</readmeLink>.</p>"
|
||||
},
|
||||
"kofi": "Daj napiwek na Ko-fi",
|
||||
"kofi": "Wesprzyj mnie na Ko-fi",
|
||||
"home": {
|
||||
"home": "Strona główna",
|
||||
"welcome": "Witaj w instancji Spoolman!",
|
||||
@@ -395,11 +395,12 @@
|
||||
"boolean": "Wartość logiczna"
|
||||
},
|
||||
"non_unique_key_error": "Klucz musi być unikalny.",
|
||||
"description": "<p>Tutaj możesz dodać dodatkowe pola niestandardowe do swoich podmiotów.</p><p>Po dodaniu pola nie można zmienić jego klucza ani typu, a w przypadku pól typu wyboru nie można usunąć wyborów ani zmienić stanu wielokrotnego wyboru. Jeśli usuniesz pole, powiązane dane dla wszystkich podmiotów zostaną usunięte.</p><p>Klucz jest tym, co inne programy odczytują/zapisują jako dane, więc jeśli twoje niestandardowe pole ma być zintegrowane z programem innej firmy, upewnij się, że ustawiłeś je poprawnie. Wartość domyślna jest stosowana tylko do nowych elementów.</p><p>Dodatkowych pól nie można sortować ani filtrować w widokach tabeli.</p>",
|
||||
"description": "<p>Tutaj możesz dodać dodatkowe pola niestandardowe do swoich encji.</p><p>Po dodaniu pola nie można zmienić jego klucza ani typu, a w przypadku pól typu „wybór” nie można usuwać opcji ani zmieniać ustawienia wielu wyborów. Usunięcie pola spowoduje usunięcie powiązanych danych dla wszystkich encji.</p><p>Klucz jest wartością, którą inne programy odczytują i zapisują jako dane, więc jeśli Twoje pole niestandardowe ma integrować się z programem zewnętrznym, upewnij się, że jest ustawione poprawnie. Wartość domyślna jest stosowana tylko do nowych elementów.</p><p>Pola dodatkowe można wyświetlać i sortować w widokach tabeli. Pola typu „wybór” i logiczne (boolean) udostępniają tam również opcje filtrowania, a wszystkie typy pól dodatkowych obsługują filtrowanie wartości pustych.</p>",
|
||||
"choices_missing_error": "Nie możesz usunąc możliwośći wyboru. Ten wybór nie istnieje: {{choices}}",
|
||||
"key_not_changed": "Zmień klucz na inny.",
|
||||
"delete_confirm": "Usunąć pole {{name}}?",
|
||||
"delete_confirm_description": "Ta akcja usunie wszystkie pola i powiązane z nimi dane dla wszystkich obiektów."
|
||||
"delete_confirm_description": "Ta akcja usunie wszystkie pola i powiązane z nimi dane dla wszystkich obiektów.",
|
||||
"choices_reorder_hint": "Przeciągnij lub użyj klawiszy strzałek, aby zmienić kolejność tej opcji."
|
||||
},
|
||||
"header": "Ustawienia"
|
||||
},
|
||||
@@ -408,5 +409,12 @@
|
||||
"new_location": "Nowa lokalizacja",
|
||||
"no_location": "Brak lokalizacji",
|
||||
"no_locations_help": "Ta strona pozwala uporządkować szpule w lokalizacjach, dodaj kilka szpul aby rozpocząć!"
|
||||
}
|
||||
},
|
||||
"theme": {
|
||||
"label": "Motyw",
|
||||
"system": "System",
|
||||
"light": "Jasny",
|
||||
"dark": "Ciemny"
|
||||
},
|
||||
"sponsor": "Wesprzyj mnie na GitHubie"
|
||||
}
|
||||
@@ -354,7 +354,8 @@
|
||||
"non_unique_key_error": "A chave deve ser única.",
|
||||
"key_not_changed": "Por favor, escolha outra chave.",
|
||||
"delete_confirm": "Apagar o campo {{name}}?",
|
||||
"delete_confirm_description": "Isso excluirá o campo e todos os dados associados em todas as entidades."
|
||||
"delete_confirm_description": "Isso excluirá o campo e todos os dados associados em todas as entidades.",
|
||||
"choices_reorder_hint": "Arraste, ou use as setas direcionais, para reordenar essa opção."
|
||||
}
|
||||
},
|
||||
"documentTitle": {
|
||||
@@ -396,5 +397,11 @@
|
||||
"new_location": "Novo Local",
|
||||
"no_location": "Sem Local",
|
||||
"no_locations_help": "Esta página permite que você organize seus carretéis em locais, adicione alguns carretéis para começar!"
|
||||
},
|
||||
"theme": {
|
||||
"label": "Tema",
|
||||
"system": "Sistema",
|
||||
"light": "Claro",
|
||||
"dark": "Escuro"
|
||||
}
|
||||
}
|
||||
@@ -376,15 +376,16 @@
|
||||
"boolean": "Booleano",
|
||||
"choice": "Opção"
|
||||
},
|
||||
"key_not_changed": "Por favor, mude a chave por outra.",
|
||||
"key_not_changed": "Por favor, altere a chave para algo diferente.",
|
||||
"delete_confirm": "Apagar o campo {{name}}?",
|
||||
"delete_confirm_description": "Isto irá apagar o campo e todos os dados associados em todas as entidades.",
|
||||
"delete_confirm_description": "Isto irá apagar o campo e todos os dados associados a todas as entidades.",
|
||||
"description": "<p>Aqui pode adicionar campos personalizados extras às suas entidades.</p><p>Uma vez que um campo é adicionado, não se pode alterar sua chave ou tipo, e para campos do tipo \"opção\" não se pode remover as opções ou alterar o estado da múltipla opção. Se remover um campo, os dados associados para todas as entidades serão excluídos.</p><p>A chave é como outros programas leem/gravam os dados, portanto, se o seu campo personalizado se destina a integrar com um programa de terceiros, certifique-se de defini-lo corretamente. O valor padrão só é aplicado a novos itens.</p><p>Campos extras não podem ser ordenados ou filtrados nas visualizações de tabela.</p>",
|
||||
"choices_missing_error": "Não pode remover as opções. As seguintes opções serão perdidas: {{choices}}",
|
||||
"tab": "Campos Extras",
|
||||
"boolean_true": "Sim",
|
||||
"boolean_false": "Não",
|
||||
"non_unique_key_error": "A chave deve ser única."
|
||||
"non_unique_key_error": "A chave deve ser única.",
|
||||
"choices_reorder_hint": "Arraste ou use as setas para reordenar esta escolha."
|
||||
},
|
||||
"settings": "Configurações",
|
||||
"header": "Configurações",
|
||||
@@ -408,5 +409,11 @@
|
||||
"new_location": "Novo Local",
|
||||
"no_location": "Sem Local",
|
||||
"no_locations_help": "Esta página permite organizar as suas bobines em locais, adicione algumas bobines para começar!"
|
||||
},
|
||||
"theme": {
|
||||
"label": "Tema",
|
||||
"system": "Sistema",
|
||||
"light": "Claro",
|
||||
"dark": "Escuro"
|
||||
}
|
||||
}
|
||||
@@ -345,7 +345,7 @@
|
||||
"filament": "Марка филамента. У них есть такие свойства, как имя, материал, цвет, диаметр и многое другое.",
|
||||
"vendor": "Компании, производящие филаменты."
|
||||
},
|
||||
"description": "<title>Помощь</title><p>Вот несколько советов, которые помогут вам начать</p><p>Spoolman хранит 3 различных типа данных:</p><itemsHelp/><p>Чтобы добавить новую катушку в базу данных, начните с создания объекта <filamentCreateLink>Филамент</filamentCreateLink>. Как только это будет сделано, приступайте к созданию объекта <spoolCreateLink>Катушка</spoolCreateLink> для этой конкретной катушки. Если позже вы приобретете дополнительные катушки того же филамента, просто создайте дополнительные объекты катушек и повторно используйте тот же объект Филамент.</p><p>При желании вы также можете создать объект <vendorCreateLink>Производитель</vendorCreateLink> для компании, производящий филамент, если хотите отслеживать эту информацию.</p><p>У вас есть возможность связать Spoolman с другими службами 3D-принтеров, например Moonraker, который может автоматически отслеживать использование филамента и обновлять объекты Катушек для вас. Обратитесь к <readmeLink>Spoolman README</readmeLink> для получения инструкций по настройке.</p>",
|
||||
"description": "<title>Помощь</title><p>Вот несколько советов, которые помогут вам начать.</p><p>Spoolman хранит 3 различных типа данных:</p><itemsHelp/><p>Чтобы добавить новую катушку в базу данных, начните с создания объекта <filamentCreateLink>филамент</filamentCreateLink>. Как только это будет сделано, приступайте к созданию объекта <spoolCreateLink>катушка</spoolCreateLink> для этой конкретной катушки. Если позже вы приобретете дополнительные катушки того же филамента, просто создайте дополнительные объекты катушек и повторно используйте тот же объект филамент.</p><p>При желании вы также можете создать объект <vendorCreateLink>производитель</vendorCreateLink> для компании, производящей филамент, если хотите отслеживать эту информацию.</p><p>У вас есть возможность связать Spoolman с другими службами 3D-принтеров, например Moonraker, который может автоматически отслеживать использование филамента и обновлять объекты катушек для вас. Обратитесь к <readmeLink>Spoolman README</readmeLink> для получения инструкций по настройке.</p>",
|
||||
"help": "Помощь"
|
||||
},
|
||||
"kofi": "Поддержите меня на Ko-fi",
|
||||
@@ -356,7 +356,7 @@
|
||||
},
|
||||
"settings": {
|
||||
"extra_fields": {
|
||||
"description": "<p>Здесь вы можете добавлять дополнительные пользовательские поля к своим сущностям.</p><p>Как только поле добавлено, вы не можете изменить его ключ или тип, а для полей типа выбора вы не можете удалить варианты или изменить состояние множественного выбора. Если вы удалите поле, связанные данные для всех сущностей будут удалены.</p><p>Ключевым моментом является то, как другие программы считывают/записывают данные, поэтому, если предполагается, что ваше пользовательское поле интегрируется со сторонней программой, убедитесь, что оно настроено правильно. Значение по умолчанию применяется только к новым элементам.</p><p>Дополнительные поля нельзя отсортировать или отфильтровать в табличных представлениях.</p>",
|
||||
"description": "<p>Здесь вы можете добавить дополнительные пользовательские поля к сущностям.</p><p>После добавления поля нельзя изменить его ключ или тип, а для полей выбора нельзя удалять варианты или изменять состояние множественного выбора. Если вы удалите поле, связанные данные для всех сущностей будут удалены.</p><p>Ключ используется другими программами для чтения и записи данных, поэтому если ваше пользовательское поле должно интегрироваться со сторонней программой, убедитесь, что задали его правильно. Значение по умолчанию применяется только к новым элементам.</p><p>Дополнительные поля можно отображать и сортировать в табличных представлениях. Поля выбора и логические поля также предоставляют там параметры фильтрации, а все типы дополнительных полей поддерживают фильтрацию по пустым значениям.</p>",
|
||||
"tab": "Дополнительные поля",
|
||||
"params": {
|
||||
"key": "Ключ",
|
||||
@@ -384,7 +384,8 @@
|
||||
"delete_confirm_description": "Это приведет к удалению поля и всех связанных с ним данных для всех объектов.",
|
||||
"boolean_true": "Да",
|
||||
"boolean_false": "Нет",
|
||||
"choices_missing_error": "Вы не можете удалить варианты. Отсутствуют следующие варианты: {{choices}}"
|
||||
"choices_missing_error": "Вы не можете удалить варианты. Отсутствуют следующие варианты: {{choices}}",
|
||||
"choices_reorder_hint": "Перетащите или используйте стрелки."
|
||||
},
|
||||
"header": "Настройки",
|
||||
"general": {
|
||||
@@ -408,5 +409,12 @@
|
||||
"locations": "Местоположения",
|
||||
"new_location": "Новое местоположение",
|
||||
"no_location": "Нет местоположения"
|
||||
}
|
||||
},
|
||||
"theme": {
|
||||
"label": "Тема",
|
||||
"system": "Как в системе",
|
||||
"light": "Светлая",
|
||||
"dark": "Тёмная"
|
||||
},
|
||||
"sponsor": "Поддержать меня на GitHub"
|
||||
}
|
||||
@@ -19,7 +19,10 @@
|
||||
"undo": "Späť",
|
||||
"hideArchived": "Skryť Archivované",
|
||||
"showArchived": "Zobraziť Archivované",
|
||||
"notAccessTitle": "Nedostatočné oprávnenia na prístup"
|
||||
"notAccessTitle": "Nedostatočné oprávnenia na prístup",
|
||||
"hideColumns": "",
|
||||
"clearFilters": "",
|
||||
"unArchive": ""
|
||||
},
|
||||
"actions": {
|
||||
"create": "Vytvoriť",
|
||||
@@ -34,6 +37,364 @@
|
||||
"undoable": "Máte {{seconds}} sekúnd do undo.",
|
||||
"editSuccess": "Úspešne upravené {{resource}}",
|
||||
"editError": "Chyba pri editácii {{resource}} (status kód: {{statusCode}})",
|
||||
"importProgress": "Import: {{processed}}/{{total}}"
|
||||
"importProgress": "Import: {{processed}}/{{total}}",
|
||||
"deleteSuccess": "",
|
||||
"saveSuccessful": "",
|
||||
"createError": "",
|
||||
"validationError": "",
|
||||
"deleteError": "",
|
||||
"createSuccess": ""
|
||||
},
|
||||
"vendor": {
|
||||
"fields": {
|
||||
"external_id": "",
|
||||
"registered": "",
|
||||
"comment": "",
|
||||
"name": "",
|
||||
"empty_spool_weight": "",
|
||||
"id": ""
|
||||
},
|
||||
"fields_help": {
|
||||
"empty_spool_weight": ""
|
||||
},
|
||||
"titles": {
|
||||
"show_title": "",
|
||||
"show": "",
|
||||
"edit": "",
|
||||
"clone": "",
|
||||
"create": "",
|
||||
"list": ""
|
||||
},
|
||||
"form": {
|
||||
"vendor_updated": ""
|
||||
},
|
||||
"vendor": ""
|
||||
},
|
||||
"documentTitle": {
|
||||
"vendor": {
|
||||
"create": "",
|
||||
"clone": "",
|
||||
"edit": "",
|
||||
"list": "",
|
||||
"show": ""
|
||||
},
|
||||
"default": "",
|
||||
"home": {
|
||||
"list": ""
|
||||
},
|
||||
"spool": {
|
||||
"edit": "",
|
||||
"list": "",
|
||||
"create": "",
|
||||
"show": "",
|
||||
"clone": ""
|
||||
},
|
||||
"filament": {
|
||||
"list": "",
|
||||
"show": "",
|
||||
"clone": "",
|
||||
"create": "",
|
||||
"edit": ""
|
||||
},
|
||||
"suffix": "",
|
||||
"locations": {
|
||||
"list": ""
|
||||
},
|
||||
"help": {
|
||||
"list": ""
|
||||
}
|
||||
},
|
||||
"spool": {
|
||||
"fields": {
|
||||
"measured_weight": "",
|
||||
"last_used": "",
|
||||
"filament_internal": "",
|
||||
"material": "",
|
||||
"spool_weight": "",
|
||||
"weight_to_use": "",
|
||||
"lot_nr": "",
|
||||
"filament_name": "",
|
||||
"price": "",
|
||||
"comment": "",
|
||||
"filament": "",
|
||||
"location": "",
|
||||
"used_length": "",
|
||||
"archived": "",
|
||||
"remaining_length": "",
|
||||
"registered": "",
|
||||
"first_used": "",
|
||||
"used_weight": "",
|
||||
"id": "",
|
||||
"remaining_weight": "",
|
||||
"initial_weight": "",
|
||||
"filament_external": ""
|
||||
},
|
||||
"titles": {
|
||||
"archive": "",
|
||||
"adjust": "",
|
||||
"show": "",
|
||||
"edit": "",
|
||||
"create": "",
|
||||
"clone": "",
|
||||
"show_title": "",
|
||||
"list": ""
|
||||
},
|
||||
"fields_help": {
|
||||
"external_filament": "",
|
||||
"used_weight": "",
|
||||
"weight_to_use": "",
|
||||
"measured_weight": "",
|
||||
"price": "",
|
||||
"spool_weight": "",
|
||||
"lot_nr": "",
|
||||
"remaining_weight": "",
|
||||
"location": "",
|
||||
"initial_weight": ""
|
||||
},
|
||||
"form": {
|
||||
"spool_updated": "",
|
||||
"measurement_type_label": "",
|
||||
"adjust_filament_value": "",
|
||||
"new_location_prompt": "",
|
||||
"measurement_type": {
|
||||
"weight": "",
|
||||
"length": ""
|
||||
},
|
||||
"adjust_filament_help": ""
|
||||
},
|
||||
"spool": "",
|
||||
"formats": {
|
||||
"last_used": ""
|
||||
},
|
||||
"messages": {
|
||||
"archive": ""
|
||||
}
|
||||
},
|
||||
"filament": {
|
||||
"form": {
|
||||
"import_external": "",
|
||||
"filament_updated": "",
|
||||
"import_external_description": ""
|
||||
},
|
||||
"fields_help": {
|
||||
"name": "",
|
||||
"article_number": "",
|
||||
"spool_weight": "",
|
||||
"price": "",
|
||||
"weight": "",
|
||||
"multi_color_direction": "",
|
||||
"material": ""
|
||||
},
|
||||
"fields": {
|
||||
"material": "",
|
||||
"vendor_name": "",
|
||||
"settings_extruder_temp": "",
|
||||
"comment": "",
|
||||
"multi_color": "",
|
||||
"diameter": "",
|
||||
"weight": "",
|
||||
"spool_weight": "",
|
||||
"external_id": "",
|
||||
"single_color": "",
|
||||
"registered": "",
|
||||
"spools": "",
|
||||
"name": "",
|
||||
"price": "",
|
||||
"settings_bed_temp": "",
|
||||
"vendor": "",
|
||||
"density": "",
|
||||
"longitudinal": "",
|
||||
"id": "",
|
||||
"color_hex": "",
|
||||
"article_number": "",
|
||||
"coaxial": ""
|
||||
},
|
||||
"titles": {
|
||||
"clone": "",
|
||||
"show_title": "",
|
||||
"show": "",
|
||||
"create": "",
|
||||
"edit": "",
|
||||
"list": ""
|
||||
},
|
||||
"buttons": {
|
||||
"add_spool": ""
|
||||
},
|
||||
"filament": ""
|
||||
},
|
||||
"printing": {
|
||||
"generic": {
|
||||
"printerMarginBottom": "",
|
||||
"verticalSpacing": "",
|
||||
"rows": "",
|
||||
"borders": {
|
||||
"none": "",
|
||||
"grid": "",
|
||||
"border": ""
|
||||
},
|
||||
"printerMarginTop": "",
|
||||
"deleteSettingsConfirm": "",
|
||||
"deleteSettings": "",
|
||||
"customSize": "",
|
||||
"title": "",
|
||||
"contentSettings": "",
|
||||
"marginRight": "",
|
||||
"printerMarginRight": "",
|
||||
"itemCopies": "",
|
||||
"helpPrinterMargin": "",
|
||||
"settingsName": "",
|
||||
"previewScale": "",
|
||||
"helpMargin": "",
|
||||
"marginTop": "",
|
||||
"skipItems": "",
|
||||
"newSetting": "",
|
||||
"addSettings": "",
|
||||
"layoutSettings": "",
|
||||
"paperSize": "",
|
||||
"columns": "",
|
||||
"description": "",
|
||||
"marginBottom": "",
|
||||
"horizontalSpacing": "",
|
||||
"duplicateSettings": "",
|
||||
"settings": "",
|
||||
"saveSetting": "",
|
||||
"marginLeft": "",
|
||||
"showBorder": "",
|
||||
"saveAsImage": "",
|
||||
"printerMarginLeft": "",
|
||||
"dimensions": "",
|
||||
"defaultSettings": "",
|
||||
"print": ""
|
||||
},
|
||||
"qrcode": {
|
||||
"useHTTPUrl": {
|
||||
"options": {
|
||||
"default": "",
|
||||
"url": ""
|
||||
},
|
||||
"preview": "",
|
||||
"tooltip": "",
|
||||
"label": ""
|
||||
},
|
||||
"showContent": "",
|
||||
"showQRCodeMode": {
|
||||
"withIcon": "",
|
||||
"no": "",
|
||||
"simple": ""
|
||||
},
|
||||
"templateHelp": "",
|
||||
"textSize": "",
|
||||
"showQRCode": "",
|
||||
"template": "",
|
||||
"title": "",
|
||||
"button": ""
|
||||
},
|
||||
"spoolSelect": {
|
||||
"selectedTotal_one": "",
|
||||
"selectedTotal_few": "",
|
||||
"selectedTotal_other": "",
|
||||
"description": "",
|
||||
"showArchived": "",
|
||||
"title": "",
|
||||
"selectAll": "",
|
||||
"noSpoolsSelected": ""
|
||||
}
|
||||
},
|
||||
"settings": {
|
||||
"extra_fields": {
|
||||
"non_unique_key_error": "",
|
||||
"params": {
|
||||
"unit": "",
|
||||
"choices": "",
|
||||
"default_value": "",
|
||||
"field_type": "",
|
||||
"multi_choice": "",
|
||||
"order": "",
|
||||
"name": "",
|
||||
"key": ""
|
||||
},
|
||||
"boolean_true": "",
|
||||
"choices_missing_error": "",
|
||||
"boolean_false": "",
|
||||
"delete_confirm_description": "",
|
||||
"field_type": {
|
||||
"boolean": "",
|
||||
"float": "",
|
||||
"choice": "",
|
||||
"float_range": "",
|
||||
"datetime": "",
|
||||
"integer": "",
|
||||
"integer_range": "",
|
||||
"text": ""
|
||||
},
|
||||
"tab": "",
|
||||
"description": "",
|
||||
"delete_confirm": "",
|
||||
"key_not_changed": ""
|
||||
},
|
||||
"general": {
|
||||
"tab": "",
|
||||
"base_url": {
|
||||
"tooltip": "",
|
||||
"label": ""
|
||||
},
|
||||
"round_prices": {
|
||||
"label": "",
|
||||
"tooltip": ""
|
||||
},
|
||||
"currency": {
|
||||
"label": ""
|
||||
}
|
||||
},
|
||||
"header": "",
|
||||
"settings": ""
|
||||
},
|
||||
"home": {
|
||||
"welcome": "",
|
||||
"home": "",
|
||||
"description": ""
|
||||
},
|
||||
"scanner": {
|
||||
"title": "",
|
||||
"error": {
|
||||
"insecureContext": "",
|
||||
"notReadable": "",
|
||||
"notAllowed": "",
|
||||
"unknown": "",
|
||||
"notFound": "",
|
||||
"streamApiNotSupported": ""
|
||||
},
|
||||
"description": ""
|
||||
},
|
||||
"help": {
|
||||
"resources": {
|
||||
"vendor": "",
|
||||
"filament": "",
|
||||
"spool": ""
|
||||
},
|
||||
"description": "",
|
||||
"help": ""
|
||||
},
|
||||
"no": "",
|
||||
"unknown": "",
|
||||
"yes": "",
|
||||
"locations": {
|
||||
"new_location": "",
|
||||
"no_location": "",
|
||||
"locations": "",
|
||||
"no_locations_help": ""
|
||||
},
|
||||
"version": "",
|
||||
"kofi": "",
|
||||
"table": {
|
||||
"actions": ""
|
||||
},
|
||||
"warnWhenUnsavedChanges": "",
|
||||
"loading": "",
|
||||
"dashboard": {
|
||||
"title": ""
|
||||
},
|
||||
"tags": {
|
||||
"clone": ""
|
||||
}
|
||||
}
|
||||
@@ -248,8 +248,9 @@
|
||||
"key_not_changed": "Spremenite geslo v nekaj drugega.",
|
||||
"delete_confirm": "Zbrišem polje {{name}}?",
|
||||
"delete_confirm_description": "S tem boste izbrisali polje in vse povezane podatke za vse vnose.",
|
||||
"description": "<p>Tukaj lahko svojim entitetam dodate dodatna polja po meri.</p><p>Ko je polje dodano, njegovega ključa ali tipa ni mogoče spremeniti, pri poljih tipa »izbira« pa ni mogoče odstraniti možnosti ali spremeniti nastavitve za večkratno izbiro. Če polje odstranite, bodo povezani podatki za vse entitete izbrisani.</p><p>Ključ je tisto, kar drugi programi uporabljajo za branje/pisanje podatkov, zato če naj bi se vaše polje po meri integriralo s programom tretje osebe, poskrbite, da ga nastavite pravilno. Privzeta vrednost se uporablja le za nove elemente.</p><p>Dodatna polja ni mogoče razvrstiti ali filtrirati v pogledih tabel.</p>",
|
||||
"choices_missing_error": "Možnosti ni mogoče odstraniti. Manjkajo naslednje možnosti: {{choices}}"
|
||||
"description": "<p>Tukaj lahko svojim entitetam dodate dodatna polja po meri.</p><p>Ko je polje dodano, njegovega ključa ali tipa ni mogoče spremeniti, pri poljih tipa »izbira« pa ni mogoče odstraniti možnosti ali spremeniti nastavitve za večkratno izbiro. Če polje odstranite, bodo povezani podatki za vse entitete izbrisani.</p><p>Ključ je tisto, kar drugi programi uporabljajo za branje/pisanje podatkov, zato če naj bi se vaše polje po meri integriralo s programom tretje osebe, poskrbite, da ga nastavite pravilno. Privzeta vrednost se uporablja le za nove elemente.</p><p>V preglednicah je mogoče prikazati in razvrstiti dodatna polja. Polja tipa »izbira« in »booleanska« tam omogočajo tudi možnosti filtriranja, vsi tipi dodatnih polj pa podpirajo filtriranje po praznih vrednostih.</p>",
|
||||
"choices_missing_error": "Možnosti ni mogoče odstraniti. Manjkajo naslednje možnosti: {{choices}}",
|
||||
"choices_reorder_hint": "Za spremembo vrstnega reda izbire, povlecite ali uporabite smerne tipke."
|
||||
}
|
||||
},
|
||||
"scanner": {
|
||||
@@ -397,5 +398,12 @@
|
||||
"new_location": "Nova lokacija",
|
||||
"no_location": "Brez lokacije",
|
||||
"no_locations_help": "Na tej strani lahko kolute razvrstite po lokacijah. Za začetek dodajte nekaj kolutov."
|
||||
},
|
||||
"sponsor": "Sponzorirajte me na GitHubu",
|
||||
"theme": {
|
||||
"label": "Tema",
|
||||
"system": "Sistem",
|
||||
"light": "Svetla",
|
||||
"dark": "Temna"
|
||||
}
|
||||
}
|
||||
@@ -31,7 +31,7 @@
|
||||
"create": "สร้างม้วนพลาสติก",
|
||||
"adjust": "ปรับการใช้ม้วนพลาสติก",
|
||||
"edit": "แก้ไขม้วนพลาสติก",
|
||||
"list": "รายการม้วนพลาสติก",
|
||||
"list": "ม้วนพลาสติก",
|
||||
"show": "แสดงม้วนพลาสติก"
|
||||
},
|
||||
"form": {
|
||||
@@ -175,10 +175,10 @@
|
||||
},
|
||||
"filament": {
|
||||
"fields_help": {
|
||||
"spool_weight": "น้ำหนักม้วนพลาสติกเปล่า ใช้เพื่อคำนวณน้ำหนักรวมของม้วนพลาสติก",
|
||||
"spool_weight": "น้ำหนักของม้วนพลาสติกเปล่า ใช้เพื่อคำนวณน้ำหนักที่วัดได้ของม้วนพลาสติก",
|
||||
"material": "ตัวอย่างเช่น PLA, ABS, PETG, TPU, ASA, PC, PA เป็นต้น",
|
||||
"article_number": "เช่น EAN, UPC, เป็นต้น",
|
||||
"price": "ราคาของม้วนพลาสติกเต็ม (เส้นพลาสติกทั้งหมด)",
|
||||
"price": "ราคาของม้วนพลาสติกเต็ม",
|
||||
"weight": "น้ำหนักของเส้นพลาสติกในม้วนพลาสติก (สุทธิ) ไม่รวมม้วนพลาสติกเปล่า เป็นค่าน้ำหนักที่มักระบุบนบรรจุภัณฑ์",
|
||||
"name": "ชื่อเส้นพลาสติก เพื่อแยกความต่างระหว่างเส้นพลาสติกแบบเดียวกันจากผู้ผลิตเดียวกัน โดยทั่วไปควรระบุสีในชื่อด้วย",
|
||||
"multi_color_direction": "เส้นพลาสติกหลายสีสามารถมีหลายสีได้ 2 รูปแบบ: แบบ coextrusion (เช่น เส้นพลาสติกสองสีพร้อมกัน) หรือแบบไล่สีตามความยาว (เช่น เส้นพลาสติกเปลี่ยนสีไปเรื่อยๆ)"
|
||||
@@ -193,15 +193,15 @@
|
||||
"material": "วัสดุ",
|
||||
"id": "ID",
|
||||
"settings_bed_temp": "อุณหภูมิฐานพิมพ์",
|
||||
"vendor_name": "ยี่ห้อ",
|
||||
"vendor_name": "ผู้ผลิต",
|
||||
"diameter": "เส้นผ่านศูนย์กลาง",
|
||||
"article_number": "เลขบทความ",
|
||||
"article_number": "รหัสสินค้า",
|
||||
"multi_color": "หลายสี",
|
||||
"external_id": "รหัสภายนอก",
|
||||
"color_hex": "สี",
|
||||
"price": "ราคา",
|
||||
"spool_weight": "น้ำหนักม้วนพลาสติกเปล่า",
|
||||
"coaxial": "เส้นหลายสี",
|
||||
"coaxial": "เส้นประกบหลายสี",
|
||||
"name": "ชื่อ",
|
||||
"spools": "แสดงม้วนพลาสติก",
|
||||
"registered": "ลงทะเบียน",
|
||||
@@ -209,7 +209,7 @@
|
||||
},
|
||||
"titles": {
|
||||
"edit": "แก้ไขเส้นพลาสติก",
|
||||
"list": "รายการเส้นพลาสติก",
|
||||
"list": "เส้นพลาสติก",
|
||||
"show": "แสดงเส้นพลาสติก",
|
||||
"clone": "ทำซ้ำเส้นพลาสติก",
|
||||
"show_title": "[เส้นพลาสติก #{{id}}] {{name}}",
|
||||
@@ -218,7 +218,7 @@
|
||||
"form": {
|
||||
"filament_updated": "เส้นพลาสติกนี้ได้รับการอัปเดตโดยผู้อื่นหลังจากที่คุณเปิดหน้านี้ การบันทึกจะเขียนทับการเปลี่ยนแปลง!",
|
||||
"import_external": "นำเข้าจากภายนอก",
|
||||
"import_external_description": "เลือกเส้นพลาสติกในรายการเพื่อกรอกข้อมูลอัตโนมัติในฟอร์มนี้ การดำเนินการนี้จะเขียนทับข้อมูลที่คุณกรอกไว้ อ็อบเจ็กต์ผู้ผลิตจะถูกสร้างขึ้นโดยอัตโนมัติเมื่อคุณคลิกตกลง"
|
||||
"import_external_description": "เลือกเส้นพลาสติกในรายการเพื่อกรอกข้อมูลอัตโนมัติในฟอร์มนี้ การดำเนินการนี้จะเขียนทับข้อมูลที่คุณกรอกไว้<br><br>อ็อบเจ็กต์ผู้ผลิตจะถูกสร้างขึ้นโดยอัตโนมัติเมื่อคุณคลิกตกลง หากจำเป็น"
|
||||
},
|
||||
"buttons": {
|
||||
"add_spool": "เพิ่มม้วนพลาสติก"
|
||||
@@ -270,7 +270,7 @@
|
||||
"locations": {
|
||||
"list": "สถานที่เก็บ | Spoolman"
|
||||
},
|
||||
"default": "สปูลแมน"
|
||||
"default": "Spoolman"
|
||||
},
|
||||
"notifications": {
|
||||
"error": "เกิดข้อผิดพลาด (รหัสสถานะ: {{statusCode}})",
|
||||
@@ -296,12 +296,12 @@
|
||||
},
|
||||
"vendor": {
|
||||
"titles": {
|
||||
"create": "สร้างผู้ผลิต/ยี่ห้อ",
|
||||
"list": "รายการผู้ผลิต/ยี่ห้อ",
|
||||
"clone": "ทำซ้ำผู้ผลิต/ยี่ห้อ",
|
||||
"create": "สร้างผู้ผลิต",
|
||||
"list": "ผู้ผลิต",
|
||||
"clone": "ทำซ้ำผู้ผลิต",
|
||||
"show_title": "[ผู้ผลิต #{{id}}] {{name}}",
|
||||
"edit": "แก้ไขผู้ผลิต/ยี่ห้อ",
|
||||
"show": "แสดงผู้ผลิต/ยี่ห้อ"
|
||||
"edit": "แก้ไขผู้ผลิต",
|
||||
"show": "แสดงผู้ผลิต"
|
||||
},
|
||||
"fields": {
|
||||
"empty_spool_weight": "น้ำหนักม้วนพลาสติกเปล่า",
|
||||
@@ -312,21 +312,21 @@
|
||||
"name": "ชื่อ"
|
||||
},
|
||||
"fields_help": {
|
||||
"empty_spool_weight": "น้ำหนักม้วนพลาสติกเปล่าของผู้ผลิตนี้"
|
||||
"empty_spool_weight": "น้ำหนักของม้วนพลาสติกเปล่าจากผู้ผลิตนี้"
|
||||
},
|
||||
"form": {
|
||||
"vendor_updated": "ผู้ผลิตนี้ถูกอัปเดตโดยผู้อื่นหลังจากที่คุณเปิดหน้านี้ การบันทึกจะเขียนทับการเปลี่ยนแปลง!"
|
||||
"vendor_updated": "ผู้ผลิตนี้ได้รับการอัปเดตโดยผู้อื่นหลังจากที่คุณเปิดหน้านี้ การบันทึกจะเขียนทับการเปลี่ยนแปลง!"
|
||||
},
|
||||
"vendor": "ผู้ผลิต"
|
||||
},
|
||||
"help": {
|
||||
"resources": {
|
||||
"vendor": "บริษัทที่ผลิตเส้นพลาสติก",
|
||||
"spool": "ม้วนพลาสติกจริงสำหรับเส้นพลาสติกเฉพาะ",
|
||||
"filament": "แบรนด์เส้นพลาสติก มีคุณสมบัติต่างๆ เช่น ชื่อ วัสดุ สี เส้นผ่านศูนย์กลาง และอื่นๆ"
|
||||
"vendor": "บริษัทที่เป็นผู้ผลิตเส้นพลาสติก",
|
||||
"spool": "ม้วนพลาสติกจริงของเส้นพลาสติกเฉพาะแต่ละม้วน",
|
||||
"filament": "แบรนด์ของเส้นพลาสติก ซึ่งมีคุณสมบัติต่างๆ เช่น ชื่อ วัสดุ สี เส้นผ่านศูนย์กลาง และอื่นๆ"
|
||||
},
|
||||
"help": "วิธีใช้",
|
||||
"description": "<title>วิธีใช้</title><p>นี่คือเคล็ดลับบางส่วนเพื่อเริ่มต้น</p><p>Spoolman เก็บข้อมูลหลัก 3 ประเภท:</p><itemsHelp/><p>ในการเพิ่มม้วนพลาสติกใหม่ลงในฐานข้อมูล ให้เริ่มด้วยการสร้างอ็อบเจ็กต์ <filamentCreateLink>เส้นพลาสติก</filamentCreateLink> เมื่อเสร็จแล้วจึงสร้างอ็อบเจ็กต์ <spoolCreateLink>ม้วนพลาสติก</spoolCreateLink> สำหรับม้วนพลาสติกนั้น หากคุณได้ม้วนพลาสติกเพิ่มในภายหลัง ก็เพียงสร้างอ็อบเจ็กต์ม้วนพลาสติกใหม่และใช้วัตถุ เส้นพลาสติก เดิมได้</p><p>คุณสามารถสร้างอ็อบเจ็กต์ <vendorCreateLink>Manufacturer</vendorCreateLink> เพื่อเก็บข้อมูลบริษัทผู้ผลิตเส้นพลาสติกหากคุณต้องการติดตามข้อมูลนั้น</p><p>คุณสามารถเชื่อมต่อบริการ 3D printer อื่นๆ เข้ากับ Spoolman เช่น Moonraker เพื่อบันทึกปริมาณการใช้เส้นพลาสติกโดยอัตโนมัติและอัปเดตอ็อบเจ็กต์ม้วนพลาสติกของคุณ ดูเพิ่มเติมได้ที่ <readmeLink>Spoolman README</readmeLink></p>"
|
||||
"description": "<title>วิธีใช้</title><p>นี่คือเคล็ดลับบางส่วนเพื่อเริ่มต้นใช้งาน</p><p>Spoolman เก็บข้อมูล 3 ประเภทที่แตกต่างกัน:</p><itemsHelp/><p>ในการเพิ่มม้วนพลาสติกใหม่ลงในฐานข้อมูล ให้เริ่มด้วยการสร้างอ็อบเจ็กต์ <filamentCreateLink>Filament</filamentCreateLink> เมื่อเสร็จแล้วจึงสร้างอ็อบเจ็กต์ <spoolCreateLink>Spool</spoolCreateLink> สำหรับม้วนพลาสติกนั้น หากคุณได้ม้วนพลาสติกของเส้นพลาสติกเดิมเพิ่มในภายหลัง ก็เพียงสร้างอ็อบเจ็กต์ Spool ใหม่และใช้อ็อบเจ็กต์ Filament เดิมซ้ำได้</p><p>นอกจากนี้คุณยังสามารถสร้างอ็อบเจ็กต์ <vendorCreateLink>Manufacturer</vendorCreateLink> สำหรับบริษัทที่ผลิตเส้นพลาสติกได้หากต้องการติดตามข้อมูลนั้น</p><p>คุณสามารถเชื่อมต่อบริการเครื่องพิมพ์ 3D อื่นๆ เข้ากับ Spoolman เช่น Moonraker ซึ่งสามารถตรวจสอบการใช้เส้นพลาสติกโดยอัตโนมัติและอัปเดตอ็อบเจ็กต์ Spool ให้คุณ ดูคำแนะนำในการตั้งค่าได้ที่ <readmeLink>Spoolman README</readmeLink></p>"
|
||||
},
|
||||
"dashboard": {
|
||||
"title": "แดชบอร์ด"
|
||||
@@ -340,17 +340,17 @@
|
||||
"label": "สกุลเงิน"
|
||||
},
|
||||
"base_url": {
|
||||
"label": "URLพื้นฐาน",
|
||||
"tooltip": "URLพื้นฐาน ที่ใช้สำหรับสร้างฟีเจอร์ต่างๆ เช่น QR code"
|
||||
"label": "URL พื้นฐาน",
|
||||
"tooltip": "URL พื้นฐานที่ใช้สำหรับสร้างฟีเจอร์ต่างๆ เช่น QR code"
|
||||
},
|
||||
"round_prices": {
|
||||
"label": "",
|
||||
"tooltip": ""
|
||||
"label": "ปัดเศษราคา",
|
||||
"tooltip": "ปัดเศษราคาเป็นจำนวนเต็มที่ใกล้ที่สุด"
|
||||
}
|
||||
},
|
||||
"extra_fields": {
|
||||
"params": {
|
||||
"multi_choice": "เลือกหลายตัว",
|
||||
"multi_choice": "เลือกได้หลายรายการ",
|
||||
"key": "คีย์",
|
||||
"name": "ชื่อ",
|
||||
"field_type": "ประเภท",
|
||||
@@ -359,7 +359,7 @@
|
||||
"default_value": "ค่าเริ่มต้น",
|
||||
"choices": "ตัวเลือก"
|
||||
},
|
||||
"delete_confirm_description": "สิ่งนี้จะลบฟิลด์และข้อมูลที่เกี่ยวข้องทั้งหมดสำหรับเอนทิตี",
|
||||
"delete_confirm_description": "สิ่งนี้จะลบฟิลด์และข้อมูลที่เกี่ยวข้องทั้งหมดของทุกเอนทิตี",
|
||||
"field_type": {
|
||||
"text": "ข้อความ",
|
||||
"integer": "จำนวนเต็ม",
|
||||
@@ -367,7 +367,7 @@
|
||||
"float": "ทศนิยม",
|
||||
"float_range": "ช่วงทศนิยม",
|
||||
"datetime": "วันเวลา",
|
||||
"boolean": "บูลีน(ใส่เฉพาะ ใช่/ไม่)",
|
||||
"boolean": "บูลีน",
|
||||
"choice": "ตัวเลือก"
|
||||
},
|
||||
"tab": "ฟิลด์เพิ่มเติม",
|
||||
@@ -377,7 +377,8 @@
|
||||
"non_unique_key_error": "คีย์ต้องไม่ซ้ำ",
|
||||
"key_not_changed": "โปรดเปลี่ยนคีย์เป็นอย่างอื่น",
|
||||
"delete_confirm": "ลบฟิลด์ {{name}} หรือไม่?",
|
||||
"description": "<p>คุณสามารถเพิ่มฟิลด์ที่กำหนดเองเพิ่มเติมสำหรับเอนทิตีของคุณได้ที่นี่</p><p>เมื่อเพิ่มฟิลด์แล้ว คุณจะไม่สามารถเปลี่ยนคีย์หรือประเภทของฟิลด์ได้ และสำหรับฟิลด์ประเภทตัวเลือกคุณจะไม่สามารถลบตัวเลือกหรือเปลี่ยนโหมด multi choice ได้ หากคุณลบฟิลด์ ข้อมูลของเอนทิตีทั้งหมดจะถูกลบด้วย</p><p>คีย์คือสิ่งที่โปรแกรมอื่นจะใช้เพื่ออ่าน/เขียนข้อมูล ดังนั้นหากฟิลด์ที่คุณสร้างเพื่อเชื่อมต่อกับโปรแกรมอื่น กรุณาตั้งค่าให้ถูกต้อง ค่าดีฟอลต์จะถูกนำไปใช้เฉพาะกับรายการใหม่เท่านั้น</p><p>ฟิลด์เพิ่มเติมไม่สามารถเรียงหรือกรองได้ในตาราง</p>"
|
||||
"description": "<p>คุณสามารถเพิ่มฟิลด์ที่กำหนดเองเพิ่มเติมสำหรับเอนทิตีของคุณได้ที่นี่</p><p>เมื่อเพิ่มฟิลด์แล้ว คุณจะไม่สามารถเปลี่ยนคีย์หรือประเภทของฟิลด์ได้ และสำหรับฟิลด์ประเภทตัวเลือกคุณจะไม่สามารถลบตัวเลือกหรือเปลี่ยนสถานะตัวเลือกหลายรายการได้ หากคุณลบฟิลด์ ข้อมูลที่เกี่ยวข้องของทุกเอนทิตีจะถูกลบไปด้วย</p><p>คีย์คือสิ่งที่โปรแกรมอื่นจะใช้เพื่ออ่าน/เขียนข้อมูล ดังนั้นหากฟิลด์ที่คุณสร้างต้องการเชื่อมต่อกับโปรแกรมภายนอก กรุณาตั้งค่าให้ถูกต้อง ค่าเริ่มต้นจะถูกนำไปใช้เฉพาะกับรายการใหม่เท่านั้น</p><p>ฟิลด์เพิ่มเติมสามารถแสดงและจัดเรียงในมุมมองตารางได้ ฟิลด์ประเภทตัวเลือกและบูลีนยังมีตัวเลือกการกรองที่นั่นด้วย และฟิลด์เพิ่มเติมทุกประเภทรองรับการกรองหาค่าว่าง</p>",
|
||||
"choices_reorder_hint": "ลาก หรือใช้ปุ่มลูกศร เพื่อจัดเรียงตัวเลือกนี้"
|
||||
}
|
||||
},
|
||||
"locations": {
|
||||
@@ -388,11 +389,17 @@
|
||||
},
|
||||
"home": {
|
||||
"home": "หน้าแรก",
|
||||
"welcome": "",
|
||||
"description": ""
|
||||
"welcome": "ยินดีต้อนรับสู่ Spoolman ของคุณ!",
|
||||
"description": "ดูเหมือนว่าคุณยังไม่ได้เพิ่มม้วนพลาสติกใดๆ ดูคำแนะนำการเริ่มต้นใช้งานได้ที่ <helpPageLink>หน้าวิธีใช้</helpPageLink>"
|
||||
},
|
||||
"warnWhenUnsavedChanges": "คุณแน่ใจหรือไม่ว่าต้องการออก? คุณมีการเปลี่ยนแปลงที่ยังไม่ได้บันทึก",
|
||||
"table": {
|
||||
"actions": "การดำเนินการ"
|
||||
},
|
||||
"theme": {
|
||||
"label": "ธีม",
|
||||
"system": "ตามระบบ",
|
||||
"light": "โหมดสว่าง",
|
||||
"dark": "โหมดมืด"
|
||||
}
|
||||
}
|
||||
@@ -16,7 +16,7 @@
|
||||
"cancel": "取消",
|
||||
"confirm": "您確定嗎?",
|
||||
"continue": "繼續",
|
||||
"filter": "過濾器",
|
||||
"filter": "篩選",
|
||||
"clear": "清除",
|
||||
"refresh": "重新整理",
|
||||
"show": "檢視",
|
||||
@@ -61,8 +61,8 @@
|
||||
"printing": {
|
||||
"generic": {
|
||||
"title": "列印中",
|
||||
"description": "調整以下設定以獲得所需的列印佈局。請注意,列表機和您的操作系統可能會套用自己的邊距和縮放比例,因此可能需要進行一些反覆測試才能達到理想效果。在實際標籤上列印之前,先在普通紙上測試。",
|
||||
"helpMargin": "邊距應配置為與您的標籤紙和列表機相符,調整這些將影響整個網格的大小。",
|
||||
"description": "調整以下設定以取得所需的列印版面。請注意,印表機與作業系統可能會套用自己的邊距和縮放比例,因此可能需要多次測試。列印實際標籤前,請先使用一般紙張測試。",
|
||||
"helpMargin": "邊距應設定為與您的標籤紙和印表機相符,調整這些將影響整個網格的大小。",
|
||||
"rows": "列",
|
||||
"paperSize": "紙張大小",
|
||||
"customSize": "自訂",
|
||||
@@ -70,7 +70,7 @@
|
||||
"showBorder": "顯示外框",
|
||||
"previewScale": "預覽縮放比例",
|
||||
"skipItems": "跳過項目",
|
||||
"itemCopies": "項目複製",
|
||||
"itemCopies": "每項份數",
|
||||
"contentSettings": "內容設定",
|
||||
"layoutSettings": "佈局設定",
|
||||
"horizontalSpacing": "水平間距",
|
||||
@@ -100,7 +100,7 @@
|
||||
"columns": "欄",
|
||||
"verticalSpacing": "垂直間距",
|
||||
"marginTop": "上邊界",
|
||||
"helpPrinterMargin": "安全區域應設定為列表機能列印的距離紙張的邊界,更改此選項不影響整個網格。"
|
||||
"helpPrinterMargin": "安全區域應設定為印表機能列印的距離紙張的邊界,更改此選項不影響整個網格。"
|
||||
},
|
||||
"qrcode": {
|
||||
"title": "標籤列印中",
|
||||
@@ -110,7 +110,7 @@
|
||||
"textSize": "標籤文字大小",
|
||||
"showContent": "列印標籤",
|
||||
"useHTTPUrl": {
|
||||
"label": "QR碼連結",
|
||||
"label": "QR 碼連結",
|
||||
"preview": "預覽:",
|
||||
"options": {
|
||||
"default": "預設",
|
||||
@@ -131,11 +131,11 @@
|
||||
"showArchived": "檢視已封存",
|
||||
"noSpoolsSelected": "您尚未選擇任何料盤。",
|
||||
"selectAll": "選擇/取消全選",
|
||||
"selectedTotal_other": "已選擇 {{count}} 個料盤"
|
||||
"selectedTotal_other": "已選擇 {{count}} 個線軸"
|
||||
}
|
||||
},
|
||||
"scanner": {
|
||||
"description": "掃描Spoolman的QR碼以檢視關於料盤的詳細資料。",
|
||||
"description": "掃描 Spoolman QR 碼以檢視線軸的詳細資料。",
|
||||
"error": {
|
||||
"notAllowed": "您未被允許存取攝影機。",
|
||||
"streamApiNotSupported": "瀏覽器不支援MediaStream API。",
|
||||
@@ -144,10 +144,10 @@
|
||||
"insecureContext": "此頁面未通過 HTTPS 提供服務。",
|
||||
"unknown": "發生未知的錯誤。({{error}})"
|
||||
},
|
||||
"title": "掃描QR碼"
|
||||
"title": "QR 碼掃描器"
|
||||
},
|
||||
"spool": {
|
||||
"spool": "料盤",
|
||||
"spool": "線軸",
|
||||
"fields": {
|
||||
"id": "ID",
|
||||
"filament": "線材",
|
||||
@@ -346,7 +346,7 @@
|
||||
"general": {
|
||||
"tab": "一般",
|
||||
"currency": {
|
||||
"label": "貨幣設定標籤"
|
||||
"label": "貨幣"
|
||||
},
|
||||
"base_url": {
|
||||
"tooltip": "生成 QR 碼等功能時使用的基本 URL。",
|
||||
@@ -394,5 +394,6 @@
|
||||
"no_location": "未設定位置",
|
||||
"no_locations_help": "這個頁面讓您將料盤按位置進行整理,請從增加一些線盤來開始!",
|
||||
"new_location": "新增位置"
|
||||
}
|
||||
},
|
||||
"sponsor": "在 GitHub 上贊助專案"
|
||||
}
|
||||
@@ -21,10 +21,10 @@
|
||||
"undo": "撤销",
|
||||
"import": "导入",
|
||||
"clone": "克隆",
|
||||
"archive": "存档",
|
||||
"unArchive": "取消存档",
|
||||
"archive": "归档",
|
||||
"unArchive": "解除归档",
|
||||
"hideArchived": "隐藏存档",
|
||||
"showArchived": "显示存档",
|
||||
"showArchived": "显示已归档项",
|
||||
"notAccessTitle": "您没有访问权限",
|
||||
"hideColumns": "隐藏列",
|
||||
"clearFilters": "清除筛选器",
|
||||
@@ -34,7 +34,7 @@
|
||||
"warnWhenUnsavedChanges": "您确定要离开吗?您有未保存的更改。",
|
||||
"notifications": {
|
||||
"success": "操作成功",
|
||||
"error": "出现错误 (状态码:{{statusCode}})",
|
||||
"error": "发生错误 (状态码:{{statusCode}})",
|
||||
"undoable": "您有 {{seconds}} 秒可以撤销。",
|
||||
"createSuccess": "成功创建 {{resource}}",
|
||||
"createError": "创建 {{resource}} 时出现错误 (状态码:{{statusCode}})",
|
||||
@@ -60,30 +60,30 @@
|
||||
"printing": {
|
||||
"generic": {
|
||||
"title": "打印中",
|
||||
"description": "调整以下设置以获得所需的打印布局。请记住,打印机和您的操作系统可能会应用自己的边距和缩放,因此您可能需要多次尝试后才能正确打印。在实际标签上打印之前,请在一张普通纸上进行测试。",
|
||||
"helpMargin": "页边距应设置为与您的标签纸和打印机相匹配,更改这些将影响整个网格的大小。",
|
||||
"helpPrinterMargin": "安全区应设置为打印机可以打印的离纸张边缘距离,更改这些不会影响整个网格。",
|
||||
"description": "在下方微调设置以获取理想的打印布局。请注意,打印机驱动和操作系统可能会自动应用边距与缩放,因此您可能需要进行几次试打印。建议在正式打印前先用普通纸测试。",
|
||||
"helpMargin": "页边距应与您的标签纸和打印机相匹配,修改此项会影响整个标签网格的位置。",
|
||||
"helpPrinterMargin": "安全打印区域应设置为打印机允许贴近纸张边缘打印的极限距离,修改此项不会改变标签网格的位置。",
|
||||
"print": "打印",
|
||||
"columns": "行",
|
||||
"columns": "列数",
|
||||
"rows": "列",
|
||||
"paperSize": "纸张尺寸",
|
||||
"customSize": "自定义",
|
||||
"dimensions": "尺寸标注",
|
||||
"customSize": "自定义尺寸",
|
||||
"dimensions": "尺寸规格",
|
||||
"showBorder": "显示边框",
|
||||
"previewScale": "预览比例",
|
||||
"skipItems": "跳过项目",
|
||||
"skipItems": "跳过初始格子数",
|
||||
"contentSettings": "内容设置",
|
||||
"layoutSettings": "布局设置",
|
||||
"horizontalSpacing": "水平间距",
|
||||
"verticalSpacing": "垂直间距",
|
||||
"marginLeft": "左边界",
|
||||
"marginRight": "右边界",
|
||||
"marginTop": "上边界",
|
||||
"marginBottom": "下边界",
|
||||
"printerMarginLeft": "安全区左侧",
|
||||
"printerMarginRight": "安全区右侧",
|
||||
"printerMarginTop": "安全区顶部",
|
||||
"printerMarginBottom": "安全区底部",
|
||||
"horizontalSpacing": "列间距 (水平)",
|
||||
"verticalSpacing": "行间距 (垂直)",
|
||||
"marginLeft": "左边距",
|
||||
"marginRight": "右边距",
|
||||
"marginTop": "上边距",
|
||||
"marginBottom": "下边距",
|
||||
"printerMarginLeft": "左侧安全区域",
|
||||
"printerMarginRight": "右侧安全区域",
|
||||
"printerMarginTop": "顶部安全区域",
|
||||
"printerMarginBottom": "底部安全区域",
|
||||
"borders": {
|
||||
"none": "无",
|
||||
"border": "外边框",
|
||||
@@ -97,7 +97,7 @@
|
||||
"deleteSettingsConfirm": "确定删除此预设吗?",
|
||||
"saveAsImage": "保存为图片",
|
||||
"newSetting": "新增",
|
||||
"itemCopies": "复制项目",
|
||||
"itemCopies": "单个标签打印份数",
|
||||
"duplicateSettings": "复制",
|
||||
"deleteSettings": "删除当前预设"
|
||||
},
|
||||
@@ -127,11 +127,11 @@
|
||||
},
|
||||
"templateHelp": "使用 {} 将料盘的值插入为文本。例如,{id} 将被替换为料盘的ID,或者 {filament.material} 将被替换为料盘的材质。如果某个值缺失,将用 \"?\" 替代。可以使用第二组 {} 来删除缺失值相关的内容。此外,任意位于两组 {} 之间的文本,如果值缺失,将被一同删除。例如,{Lot Nr: {lot_nr}} 只有在料盘存在批号时才会显示标签内容。用双星号 ** 包裹文本可以将其加粗。点击按钮查看所有可用的标签列表。",
|
||||
"useHTTPUrl": {
|
||||
"tooltip": "将使用专有链接(默认情况下,仅能通过 **Spoolman** 的扫描功能访问)。URL 将使用设置中指定的基础 URL;如果未设置基础 URL,则使用当前页面的 URL。",
|
||||
"label": "二维码链接",
|
||||
"tooltip": "将使用专有链接,该链接仅在通过 Spoolman 的内置扫描功能扫描时生效(默认)。URL 将使用设置中指定的基准 URL;若未设置,则使用当前页面的 URL。",
|
||||
"label": "二维码编码内容",
|
||||
"options": {
|
||||
"default": "默认",
|
||||
"url": "URL"
|
||||
"default": "默认(Spoolman 专属格式)",
|
||||
"url": "标准网页 URL"
|
||||
},
|
||||
"preview": "预览:"
|
||||
}
|
||||
@@ -142,42 +142,42 @@
|
||||
"showArchived": "显示存档",
|
||||
"noSpoolsSelected": "您尚未选择任何料盘。",
|
||||
"selectAll": "选择/取消选择全部",
|
||||
"selectedTotal_other": "已选择{{count}}个料盘"
|
||||
"selectedTotal_other": "已选择 {{count}} 卷耗材"
|
||||
}
|
||||
},
|
||||
"scanner": {
|
||||
"title": "扫码二维码",
|
||||
"description": "扫描Spoolman二维码,查看有关料盘的详细信息。",
|
||||
"title": "二维码扫描器",
|
||||
"description": "扫描 Spoolman 专属二维码以快速查看该耗材卷的详细信息。",
|
||||
"error": {
|
||||
"notAllowed": "您不被允许访问相机。",
|
||||
"insecureContext": "该页面不是通过HTTPS传输。",
|
||||
"streamApiNotSupported": "浏览器不支持MediaStream API。",
|
||||
"notAllowed": "您尚未授权允许使用摄像头。",
|
||||
"insecureContext": "当前页面未通过安全的 HTTPS 协议提供服务。",
|
||||
"streamApiNotSupported": "当前浏览器不支持 MediaStream API 视频流。",
|
||||
"notReadable": "相机不可读。",
|
||||
"notFound": "没有找到相机。",
|
||||
"unknown": "发生未知错误。({{error}})"
|
||||
"notFound": "未检测到可用摄像头。",
|
||||
"unknown": "发生未知错误。({{error}})"
|
||||
}
|
||||
},
|
||||
"spool": {
|
||||
"spool": "料盘",
|
||||
"spool": "耗材卷",
|
||||
"fields": {
|
||||
"id": "编号",
|
||||
"id": "编号 (ID)",
|
||||
"filament_name": "耗材",
|
||||
"filament": "耗材",
|
||||
"material": "材料",
|
||||
"filament": "耗材规格",
|
||||
"material": "材质",
|
||||
"weight_to_use": "重量",
|
||||
"used_weight": "已用重量",
|
||||
"remaining_weight": "剩余重量",
|
||||
"measured_weight": "净重",
|
||||
"used_length": "已用长度",
|
||||
"remaining_length": "剩余长度",
|
||||
"location": "位置",
|
||||
"location": "存放位置",
|
||||
"lot_nr": "批号",
|
||||
"first_used": "首次使用",
|
||||
"last_used": "最后使用",
|
||||
"registered": "登记时间",
|
||||
"registered": "录入时间",
|
||||
"comment": "备注",
|
||||
"archived": "存档",
|
||||
"price": "价格",
|
||||
"archived": "已归档",
|
||||
"price": "采购价格",
|
||||
"spool_weight": "空料盘重量",
|
||||
"initial_weight": "初始重量",
|
||||
"filament_internal": "内部",
|
||||
@@ -224,20 +224,20 @@
|
||||
}
|
||||
},
|
||||
"filament": {
|
||||
"filament": "耗材",
|
||||
"filament": "耗材规格",
|
||||
"fields": {
|
||||
"id": "编号",
|
||||
"id": "ID",
|
||||
"vendor_name": "制造商",
|
||||
"vendor": "制造商",
|
||||
"vendor": "厂商",
|
||||
"name": "名称",
|
||||
"material": "材料",
|
||||
"material": "材质",
|
||||
"price": "价格",
|
||||
"density": "密度",
|
||||
"diameter": "直径",
|
||||
"weight": "重量",
|
||||
"diameter": "线径",
|
||||
"weight": "耗材净重",
|
||||
"spool_weight": "料盘重量",
|
||||
"article_number": "产品编号",
|
||||
"registered": "登记时间",
|
||||
"registered": "录入时间",
|
||||
"comment": "备注",
|
||||
"settings_extruder_temp": "挤出头温度",
|
||||
"settings_bed_temp": "热床温度",
|
||||
@@ -245,8 +245,8 @@
|
||||
"spools": "显示料盘",
|
||||
"external_id": "外部ID",
|
||||
"multi_color": "多色",
|
||||
"longitudinal": "纵向",
|
||||
"coaxial": "共挤出",
|
||||
"longitudinal": "纵向渐变",
|
||||
"coaxial": "双色共挤",
|
||||
"single_color": "单色"
|
||||
},
|
||||
"fields_help": {
|
||||
@@ -278,9 +278,9 @@
|
||||
"vendor": {
|
||||
"vendor": "制造商",
|
||||
"fields": {
|
||||
"id": "编号",
|
||||
"name": "名称",
|
||||
"registered": "登记时间",
|
||||
"id": "ID",
|
||||
"name": "厂商名称",
|
||||
"registered": "录入时间",
|
||||
"comment": "备注",
|
||||
"external_id": "外部ID",
|
||||
"empty_spool_weight": "空料盘重量"
|
||||
@@ -340,8 +340,8 @@
|
||||
"kofi": "在Ko-fi上给我打赏一点小费",
|
||||
"home": {
|
||||
"home": "主页",
|
||||
"welcome": "",
|
||||
"description": ""
|
||||
"welcome": "欢迎使用您的 Spoolman 实例!",
|
||||
"description": "看来您尚未添加任何耗材。请参阅 <helpPageLink> 帮助页面 </helpPageLink> ,了解入门指南。"
|
||||
},
|
||||
"help": {
|
||||
"help": "帮助",
|
||||
@@ -367,7 +367,7 @@
|
||||
"choice": "选项"
|
||||
},
|
||||
"delete_confirm_description": "这将删除该字段以及所有实体的关联数据。",
|
||||
"description": "<p>这里你可以为你的实体添加额外的自定义字段。</p><p>一旦添加了字段,就无法更改其键或类型;对于选择类型字段,无法删除选项或更改多选状态。如果删除字段,则所有实体的相关数据将被删除。</p><p>键是其他程序读取/写入数据的标识,因此,如果你的自定义字段需要与第三方程序集成,请确保设置正确。默认值仅适用于新项目。</p><p>额外字段在表视图中无法进行排序或过滤。</p>",
|
||||
"description": "<p>您可以在此处为不同的实体对象添加自定义扩展字段。</p><p>字段一旦添加,其键名 (Key) 和数据类型将无法修改;对于单选/多选字段,已有的选项将无法删除,也无法更改其多选状态。如果您删除某个字段,所有对应实体中存储的该字段数据都将被永久抹除。</p><p>键名 (Key) 是第三方程序读取/写入数据时使用的唯一标识。如果您需要将自定义字段与第三方程序集成,请务必设置正确的键名。默认值仅应用于新建的项目。</p><p>扩展字段可以显示在表格视图中并支持排序。单选框与布尔值字段还提供相应的筛选选项,且所有扩展字段类型均支持筛选空值。</p>",
|
||||
"params": {
|
||||
"name": "名称",
|
||||
"field_type": "类型",
|
||||
@@ -383,13 +383,14 @@
|
||||
"choices_missing_error": "您无法删除选择。以下选项丢失:{{choices}}",
|
||||
"non_unique_key_error": "键必须是唯一的。",
|
||||
"key_not_changed": "请将键改成其他的。",
|
||||
"delete_confirm": "删除字段 {{name}}?"
|
||||
"delete_confirm": "删除字段 {{name}}?",
|
||||
"choices_reorder_hint": "拖动或使用方向键来重新排列此选项的顺序。"
|
||||
},
|
||||
"header": "设置",
|
||||
"header": "系统设置",
|
||||
"general": {
|
||||
"tab": "常规",
|
||||
"tab": "常规设置",
|
||||
"currency": {
|
||||
"label": "货币"
|
||||
"label": "货币单位"
|
||||
},
|
||||
"base_url": {
|
||||
"label": "基础URL",
|
||||
@@ -406,5 +407,12 @@
|
||||
"locations": "位置",
|
||||
"new_location": "新位置",
|
||||
"no_location": "没有位置"
|
||||
},
|
||||
"sponsor": "在 GitHub 上赞助项目",
|
||||
"theme": {
|
||||
"label": "主题",
|
||||
"system": "系统",
|
||||
"light": "明亮",
|
||||
"dark": "暗黑"
|
||||
}
|
||||
}
|
||||
@@ -187,16 +187,20 @@ export function ParsedExtras<T extends { extra?: { [key: string]: string } }>(
|
||||
|
||||
/**
|
||||
* Convert the JSON-parsed value extra key-values of an entity to their string values.
|
||||
*
|
||||
* A field the user left empty has no value, which travels as an explicit null: the API
|
||||
* merges `extra` per key, so a key simply left out of the map would keep whatever it
|
||||
* already held instead of being cleared.
|
||||
* @param obj
|
||||
* @returns
|
||||
*/
|
||||
export function StringifiedExtras<T extends { extra?: { [key: string]: unknown } }>(
|
||||
obj: T,
|
||||
): Omit<T, "extra"> & { extra?: { [key: string]: string } } {
|
||||
): Omit<T, "extra"> & { extra?: { [key: string]: string | null } } {
|
||||
if (obj.extra) {
|
||||
const newExtra: { [key: string]: string } = {};
|
||||
const newExtra: { [key: string]: string | null } = {};
|
||||
Object.entries(obj.extra).forEach(([key, value]) => {
|
||||
newExtra[key] = JSON.stringify(value);
|
||||
newExtra[key] = value === undefined ? null : JSON.stringify(value);
|
||||
});
|
||||
return {
|
||||
...obj,
|
||||
|
||||
@@ -3,10 +3,15 @@ import { useTranslate } from "@refinedev/core";
|
||||
import { Button } from "antd";
|
||||
import { Footer } from "antd/es/layout/layout";
|
||||
import Logo from "../icon.svg?react";
|
||||
import { getBasePath } from "../utils/url";
|
||||
import { Header } from "./header";
|
||||
import { Version } from "./version";
|
||||
|
||||
const SponsorHeart = () => (
|
||||
<svg viewBox="0 0 16 16" width="1.2em" height="1.2em" fill="#db61a2" aria-hidden="true">
|
||||
<path d="m8 14.25.345.666a.75.75 0 0 1-.69 0l-.008-.004-.018-.01a7.152 7.152 0 0 1-.31-.17 22.055 22.055 0 0 1-3.434-2.414C2.045 10.731 0 8.35 0 5.5 0 2.836 2.086 1 4.25 1 5.797 1 7.153 1.802 8 3.02 8.847 1.802 10.203 1 11.75 1 13.914 1 16 2.836 16 5.5c0 2.85-2.045 5.231-3.885 6.818a22.066 22.066 0 0 1-3.744 2.584l-.018.01-.006.003h-.002Z" />
|
||||
</svg>
|
||||
);
|
||||
|
||||
const SpoolmanFooter = () => {
|
||||
const t = useTranslate();
|
||||
|
||||
@@ -26,19 +31,13 @@ const SpoolmanFooter = () => {
|
||||
</div>
|
||||
<div>
|
||||
<Button
|
||||
icon={
|
||||
<img
|
||||
src={getBasePath() + "/kofi_s_logo_nolabel.png"}
|
||||
style={{
|
||||
height: "1.6em",
|
||||
}}
|
||||
/>
|
||||
}
|
||||
icon={<SponsorHeart />}
|
||||
type="text"
|
||||
href="https://ko-fi.com/donkie"
|
||||
href="https://github.com/sponsors/Donkie"
|
||||
target="_blank"
|
||||
rel="noopener noreferrer"
|
||||
>
|
||||
{t("kofi")}
|
||||
{t("sponsor")}
|
||||
</Button>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
@@ -19,6 +19,10 @@ We also need to stringify them again before sending them back to the API, which
|
||||
the form's onFinish method. Form.Item's normalize should do this, but it doesn't seem to work.
|
||||
*/
|
||||
|
||||
// What the form submits: extra values back as JSON strings, with null for a field left
|
||||
// empty — the API merges extra per key, so null is what clears a value.
|
||||
type IFilamentRequest = Omit<IFilament, "extra"> & { extra?: { [key: string]: string | null } };
|
||||
|
||||
export const FilamentEdit = () => {
|
||||
const t = useTranslate();
|
||||
const [messageApi, contextHolder] = message.useMessage();
|
||||
@@ -27,7 +31,7 @@ export const FilamentEdit = () => {
|
||||
const currency = useCurrency();
|
||||
const [colorType, setColorType] = useState<"single" | "multi">("single");
|
||||
|
||||
const { formProps, saveButtonProps } = useForm<IFilament, HttpError, IFilament, IFilament>({
|
||||
const { formProps, saveButtonProps } = useForm<IFilament, HttpError, IFilamentRequest, IFilament>({
|
||||
liveMode: "manual",
|
||||
onLiveEvent() {
|
||||
// Warn the user if the filament has been updated since the form was opened
|
||||
|
||||
@@ -1,4 +1,4 @@
|
||||
import { PlusOutlined } from "@ant-design/icons";
|
||||
import { HolderOutlined, PlusOutlined } from "@ant-design/icons";
|
||||
import { useTranslate } from "@refinedev/core";
|
||||
import {
|
||||
Button,
|
||||
@@ -12,6 +12,7 @@ import {
|
||||
Select,
|
||||
Space,
|
||||
Table,
|
||||
Tag,
|
||||
message,
|
||||
} from "antd";
|
||||
import { FormItemProps, Rule } from "antd/es/form";
|
||||
@@ -20,7 +21,9 @@ import dayjs from "dayjs";
|
||||
import advancedFormat from "dayjs/plugin/advancedFormat";
|
||||
import timezone from "dayjs/plugin/timezone";
|
||||
import utc from "dayjs/plugin/utc";
|
||||
import { useState } from "react";
|
||||
import { useRef, useState } from "react";
|
||||
import { DndProvider, useDrag, useDrop } from "react-dnd";
|
||||
import { HTML5Backend } from "react-dnd-html5-backend";
|
||||
import { Trans } from "react-i18next";
|
||||
import { useParams } from "react-router";
|
||||
import { DateTimePicker } from "../../components/dateTimePicker";
|
||||
@@ -55,6 +58,92 @@ const canEditField = (dataIndex: string, isNew: boolean) => {
|
||||
return dataIndex !== "key" && dataIndex !== "field_type" && dataIndex !== "multi_choice";
|
||||
};
|
||||
|
||||
const CHOICE_DRAG_TYPE = "extraFieldChoice";
|
||||
|
||||
interface ChoiceDragItem {
|
||||
choice: string;
|
||||
}
|
||||
|
||||
interface DraggableChoiceTagProps {
|
||||
label: React.ReactNode;
|
||||
value: string;
|
||||
closable: boolean;
|
||||
onClose: (e?: React.MouseEvent<HTMLElement>) => void;
|
||||
form: FormInstance;
|
||||
}
|
||||
|
||||
/**
|
||||
* A tag in the choices editor that can be dragged, or arrow-keyed, to a new position.
|
||||
* The order of the choices is the order they're presented in wherever the field is used,
|
||||
* so it's the choices form value itself that gets reordered.
|
||||
*/
|
||||
const DraggableChoiceTag = ({ label, value, closable, onClose, form }: DraggableChoiceTagProps) => {
|
||||
const t = useTranslate();
|
||||
const ref = useRef<HTMLSpanElement>(null);
|
||||
|
||||
// Choices are unique, so a choice's own value identifies its position.
|
||||
const moveChoice = (choice: string, before: string) => {
|
||||
const choices: string[] = [...(form.getFieldValue("choices") || [])];
|
||||
const from = choices.indexOf(choice);
|
||||
const to = choices.indexOf(before);
|
||||
if (from === -1 || to === -1 || from === to) {
|
||||
return;
|
||||
}
|
||||
choices.splice(from, 1);
|
||||
choices.splice(to, 0, choice);
|
||||
form.setFieldValue("choices", choices);
|
||||
};
|
||||
|
||||
const moveChoiceBy = (offset: number) => {
|
||||
const choices: string[] = form.getFieldValue("choices") || [];
|
||||
const to = choices.indexOf(value) + offset;
|
||||
if (to < 0 || to >= choices.length) {
|
||||
return;
|
||||
}
|
||||
moveChoice(value, choices[to]);
|
||||
};
|
||||
|
||||
const [{ isDragging }, drag] = useDrag<ChoiceDragItem, void, { isDragging: boolean }>({
|
||||
type: CHOICE_DRAG_TYPE,
|
||||
item: { choice: value },
|
||||
collect: (monitor) => ({ isDragging: monitor.isDragging() }),
|
||||
});
|
||||
|
||||
const [, drop] = useDrop<ChoiceDragItem>({
|
||||
accept: CHOICE_DRAG_TYPE,
|
||||
hover: (item) => moveChoice(item.choice, value),
|
||||
});
|
||||
|
||||
drag(drop(ref));
|
||||
|
||||
return (
|
||||
<span
|
||||
ref={ref}
|
||||
// rc-select wraps every custom tag in a span that preventDefaults mousedown,
|
||||
// which stops the browser from ever starting a drag. Keep the event away from it.
|
||||
onMouseDown={(e) => e.stopPropagation()}
|
||||
style={{ display: "inline-flex", opacity: isDragging ? 0.4 : 1 }}
|
||||
>
|
||||
<Tag
|
||||
closable={closable}
|
||||
onClose={onClose}
|
||||
tabIndex={0}
|
||||
title={t("settings.extra_fields.choices_reorder_hint")}
|
||||
onKeyDown={(e) => {
|
||||
if (e.key === "ArrowLeft" || e.key === "ArrowRight") {
|
||||
e.preventDefault();
|
||||
moveChoiceBy(e.key === "ArrowLeft" ? -1 : 1);
|
||||
}
|
||||
}}
|
||||
style={{ marginInlineEnd: 4, cursor: "grab", userSelect: "none" }}
|
||||
>
|
||||
<HolderOutlined style={{ marginInlineEnd: 4 }} />
|
||||
{label}
|
||||
</Tag>
|
||||
</span>
|
||||
);
|
||||
};
|
||||
|
||||
const EditableCell = ({ record, editing, dataIndex, children, form, ...restProps }: EditableCellProps) => {
|
||||
const t = useTranslate();
|
||||
|
||||
@@ -221,7 +310,22 @@ const EditableCell = ({ record, editing, dataIndex, children, form, ...restProps
|
||||
}
|
||||
} else if (dataIndex === "choices") {
|
||||
if (fieldType === FieldType.choice) {
|
||||
inputNode = <Select mode="tags" tokenSeparators={[","]} open={false} />;
|
||||
inputNode = (
|
||||
<Select
|
||||
mode="tags"
|
||||
tokenSeparators={[","]}
|
||||
open={false}
|
||||
tagRender={(props) => (
|
||||
<DraggableChoiceTag
|
||||
label={props.label}
|
||||
value={props.value}
|
||||
closable={props.closable}
|
||||
onClose={props.onClose}
|
||||
form={form}
|
||||
/>
|
||||
)}
|
||||
/>
|
||||
);
|
||||
rules.push({
|
||||
required: true,
|
||||
min: 1,
|
||||
@@ -608,18 +712,20 @@ export function ExtraFieldsSettings() {
|
||||
}}
|
||||
/>
|
||||
<Form form={form} component={false} disabled={isSubmitting}>
|
||||
<Table
|
||||
components={{
|
||||
body: {
|
||||
cell: EditableCell,
|
||||
},
|
||||
}}
|
||||
columns={mergedColumns}
|
||||
dataSource={tableFields}
|
||||
loading={fields.isLoading}
|
||||
rowClassName="editable-row"
|
||||
pagination={false}
|
||||
/>
|
||||
<DndProvider backend={HTML5Backend}>
|
||||
<Table
|
||||
components={{
|
||||
body: {
|
||||
cell: EditableCell,
|
||||
},
|
||||
}}
|
||||
columns={mergedColumns}
|
||||
dataSource={tableFields}
|
||||
loading={fields.isLoading}
|
||||
rowClassName="editable-row"
|
||||
pagination={false}
|
||||
/>
|
||||
</DndProvider>
|
||||
</Form>
|
||||
{newField == null && (
|
||||
<Flex justify="center">
|
||||
|
||||
Vendored
+5
-1
@@ -15,13 +15,17 @@ We also need to stringify them again before sending them back to the API, which
|
||||
the form's onFinish method. Form.Item's normalize should do this, but it doesn't seem to work.
|
||||
*/
|
||||
|
||||
// What the form submits: extra values back as JSON strings, with null for a field left
|
||||
// empty — the API merges extra per key, so null is what clears a value.
|
||||
type IVendorRequest = Omit<IVendor, "extra"> & { extra?: { [key: string]: string | null } };
|
||||
|
||||
export const VendorEdit = () => {
|
||||
const t = useTranslate();
|
||||
const [messageApi, contextHolder] = message.useMessage();
|
||||
const [hasChanged, setHasChanged] = useState(false);
|
||||
const extraFields = useGetFields(EntityType.vendor);
|
||||
|
||||
const { formProps, saveButtonProps } = useForm<IVendor, HttpError, IVendor, IVendor>({
|
||||
const { formProps, saveButtonProps } = useForm<IVendor, HttpError, IVendorRequest, IVendor>({
|
||||
liveMode: "manual",
|
||||
onLiveEvent() {
|
||||
// Warn the user if the vendor has been updated since the form was opened
|
||||
|
||||
@@ -2,7 +2,11 @@ import { useGetSetting } from "./querySettings";
|
||||
|
||||
export function useCurrency() {
|
||||
const { data: currency } = useGetSetting("currency");
|
||||
return JSON.parse(currency?.value ?? '"EUR"');
|
||||
try {
|
||||
return JSON.parse(currency?.value ?? '"EUR"');
|
||||
} catch {
|
||||
return "EUR";
|
||||
}
|
||||
}
|
||||
|
||||
export function getCurrencySymbol(locale: string | undefined, currency: string) {
|
||||
@@ -20,7 +24,12 @@ export function getCurrencySymbol(locale: string | undefined, currency: string)
|
||||
|
||||
export function useCurrencyFormatter() {
|
||||
const currency = useCurrency();
|
||||
const roundPrices = JSON.parse(useGetSetting("round_prices").data?.value ?? "false");
|
||||
let roundPrices = false;
|
||||
try {
|
||||
roundPrices = JSON.parse(useGetSetting("round_prices").data?.value ?? "false");
|
||||
} catch {
|
||||
roundPrices = false;
|
||||
}
|
||||
|
||||
return new Intl.NumberFormat(undefined, {
|
||||
style: "currency",
|
||||
|
||||
@@ -9,3 +9,12 @@ node_modules
|
||||
|
||||
# Generated code (paraglide i18n compiler output — also gitignored)
|
||||
src/lib/paraglide
|
||||
|
||||
# Written into the inlang project by the compiler; everything but settings.json
|
||||
# there is gitignored, so compiling before linting must not fail the check.
|
||||
project.inlang/.meta.json
|
||||
project.inlang/README.md
|
||||
project.inlang/cache
|
||||
|
||||
# Local scratch notes (gitignored, never reaches CI — don't fail the local hook)
|
||||
docs
|
||||
@@ -3,6 +3,7 @@
|
||||
"singleQuote": true,
|
||||
"trailingComma": "none",
|
||||
"printWidth": 110,
|
||||
"endOfLine": "auto",
|
||||
"plugins": ["prettier-plugin-svelte"],
|
||||
"overrides": [{ "files": "*.svelte", "options": { "parser": "svelte" } }]
|
||||
}
|
||||
@@ -135,7 +135,7 @@ async function audit(page: Page, testInfo: TestInfo, label: string) {
|
||||
|
||||
const STATIC_ROUTES: { path: string; label: string }[] = [
|
||||
{ path: '/', label: 'library (home)' },
|
||||
{ path: '/locations', label: 'locations' },
|
||||
{ path: '/dashboard', label: 'dashboard' },
|
||||
{ path: '/labels', label: 'labels' },
|
||||
{ path: '/settings', label: 'settings' }
|
||||
];
|
||||
|
||||
@@ -5,7 +5,7 @@ import { SURFACES_DIR, REPORT_PATH, TAP_MIN, type SurfaceResult } from './report
|
||||
// Runs once after the suite (in the main process, so it survives worker
|
||||
// restarts): read every per-surface JSON and render the consolidated report.
|
||||
export default async function globalTeardown() {
|
||||
let files: string[] = [];
|
||||
let files: string[];
|
||||
try {
|
||||
files = (await readdir(SURFACES_DIR)).filter((f) => f.endsWith('.json'));
|
||||
} catch {
|
||||
@@ -22,7 +22,10 @@ export default async function globalTeardown() {
|
||||
}
|
||||
results.sort((a, b) => a.order - b.order);
|
||||
|
||||
const esc = (s: string) => s.replace(/\|/g, '\\|');
|
||||
// Escape backslash and pipe in one pass (escaping them separately would let a
|
||||
// trailing backslash re-escape its own escape and leak the pipe through), and
|
||||
// flatten newlines since they'd break the table row regardless.
|
||||
const esc = (s: string) => s.replace(/[\\|]/g, '\\$&').replace(/\s*[\r\n]+\s*/g, ' ');
|
||||
const lines: string[] = [];
|
||||
lines.push('# Mobile accessibility audit — client_v2');
|
||||
lines.push('');
|
||||
|
||||
@@ -31,13 +31,14 @@ export default ts.config(
|
||||
},
|
||||
rules: {
|
||||
// Typed as `no-undef`; TypeScript already reports undefined identifiers.
|
||||
'no-undef': 'off',
|
||||
// Base-path resolution is centralized in src/lib/library/params.ts helpers
|
||||
// (selectHref/libraryHref/etc. already call resolve() from $app/paths), and
|
||||
// generic components take a pre-resolved href prop. This rule can't see through
|
||||
// those helpers, so it only produces false positives here — and blindly wrapping
|
||||
// call sites in resolve() would double-apply the deploy base path.
|
||||
'svelte/no-navigation-without-resolve': 'off'
|
||||
'no-undef': 'off'
|
||||
// svelte/no-navigation-without-resolve is left ON: it is the only automated guard
|
||||
// against base-path navigation bugs, and those are invisible to anyone developing
|
||||
// at the root path. It can't see through the helpers in src/lib/library/params.ts
|
||||
// (selectHref/libraryHref/... already call resolve() from $app/paths) nor through
|
||||
// components that take an already-resolved href prop, so the files where that is
|
||||
// the case carry a file-level disable naming the reason. Never "fix" one of those
|
||||
// by wrapping the call site in resolve() — that double-applies the base path.
|
||||
// svelte/prefer-svelte-reactivity is left ON to guard against in-place mutation of
|
||||
// reactive Set/Map. The current hits are all transient computation-local collections
|
||||
// and are silenced with per-line eslint-disable comments at each site.
|
||||
|
||||
@@ -1,17 +1,150 @@
|
||||
{
|
||||
"add.addAndNew": "Přidat & nová",
|
||||
"add.addN_few": "Přidat {{count}} cívky",
|
||||
"add.addN_one": "Přidat {{count}} cívku",
|
||||
"add.addN_other": "Přidat {{count}} cívky",
|
||||
"add.adding": "Přidávám...",
|
||||
"add.advanced": "Podrobné technické údaje",
|
||||
"add.advancedNote": "hustota, průměr, teploty (automaticky vyplněno podle materiálu)",
|
||||
"add.change": "změna",
|
||||
"add.count": "Počet",
|
||||
"add.createNew": "Vytvořit nový filament",
|
||||
"add.createNewSub": "není ve vašem katalogu ani v {{name}}",
|
||||
"add.dbUnavailable": "{{name}} není k dispozici",
|
||||
"add.duplicate": "duplikát",
|
||||
"add.duplicateNote": "Technické parametry, výrobce a cena byly zkopírovány. Zadejte nový název a barvu.",
|
||||
"add.duplicateRename": "Stále má stejný název jako původní – přejmenujte jej, abyste je mohli od sebe odlišit.",
|
||||
"add.duplicateTitle": "Nový filament · kopie „{{name}}“",
|
||||
"add.filamentNamePlaceholder": "např. PolyTerra Matte Sage",
|
||||
"add.fill.full": "Celý",
|
||||
"add.fillLevel": "Úroveň naplnění",
|
||||
"add.importNote": "Tento filament se přidá do vašeho katalogu jakmile přidáte cívky.",
|
||||
"add.inCatalog": "v katalogu",
|
||||
"add.locationHint": "Kde cívku fyzicky uchováváte – na polici, v krabici nebo v tiskárně. Pokud je všechny uchováváte na jednom místě, pole nechte prázdné.",
|
||||
"add.locationPlaceholder": "např. police A, sušička 2, tiskárna 1",
|
||||
"add.manufacturerPlaceholder": "např. Polymaker",
|
||||
"add.nameHint": "Uveďte barvu – právě podle ní se dají vaše filamenty od sebe rozeznat.",
|
||||
"add.newFilament": "nový filament",
|
||||
"add.newFilamentTitle": "Nový filament",
|
||||
"add.noCatalog": "Ve vašem katalogu nejsou žádné filamenty",
|
||||
"add.noManufacturer": "Žádný výrobce",
|
||||
"add.pickColor": "Vyberte barvu",
|
||||
"add.searchPlaceholder": "Prohledejte svůj katalog a {{name}}...",
|
||||
"add.searching": "Hledám...",
|
||||
"add.section.filament": "Filament",
|
||||
"add.section.filamentNote": "Výrobek na cívce – jedna položka na každou barvu.",
|
||||
"add.section.manufacturer": "Výrobce",
|
||||
"add.section.manufacturerNote": "Subjekt, který filament vyrobil. Uvedeno jednou, poté se tento údaj používá pro všechny jejich filamenty.",
|
||||
"add.section.spool": "Cívka",
|
||||
"add.section.spoolNote": "Fyzické cívky, které se přidávají do vašeho inventáře.",
|
||||
"add.section.spoolSharedNote": "Jako výchozí hodnoty nového filamentu se uloží také hmotnost, hmotnost cívky a cena.",
|
||||
"add.spoolWeightPreset.cardboard": "Karton {{weight}} g",
|
||||
"add.spoolWeightPreset.plastic": "Plast {{weight}} g",
|
||||
"add.spoolWeightPresetsLead": "Začněte s typickou cívkou:",
|
||||
"add.step2": "Krok 2 · podrobnosti o cívce",
|
||||
"add.step2New": "Krok 2 · Údaje o filamentu a cívce",
|
||||
"add.summary_few": "{{count}} cívky",
|
||||
"add.summary_one": "{{count}} cívka",
|
||||
"add.summary_other": "{{count}} cívek",
|
||||
"add.typeToSearchAll": "Zadejte text a prohledejte tisíce filamentů",
|
||||
"add.typeToSearchMatches": "Zadejte text pro vyhledávání — žádné výsledky",
|
||||
"add.useExisting": "použít stávající",
|
||||
"add.vendorHint.existing": "S využitím stávajícího výrobce “{{name}}”",
|
||||
"add.vendorHint.new": "Nový výrobce “{{name}}” bude vytvořen",
|
||||
"add.vendorHint.optional": "Volitelné — pokud není uveden výrobce, ponechte pole prázdné",
|
||||
"add.weightPresets": "Běžné rozměry rolí",
|
||||
"add.yourCatalog": "Váš katalog",
|
||||
"buttons.apply": "Použít",
|
||||
"buttons.archive": "Archivovat",
|
||||
"buttons.cancel": "Zrušit",
|
||||
"buttons.clear": "Vymazat",
|
||||
"buttons.close": "Zavřít",
|
||||
"buttons.delete": "Smazat",
|
||||
"buttons.edit": "Upravit",
|
||||
"buttons.filter": "Filtr",
|
||||
"buttons.save": "Uložit",
|
||||
"buttons.showArchived": "Zobrazit archivované",
|
||||
"buttons.showNoSpools": "Zobrazit filamenty bez cívek",
|
||||
"buttons.unArchive": "Zrušit archivaci",
|
||||
"changeFilament.action": "Výměna",
|
||||
"changeFilament.adoptWeight": "Nastavte celkovou hmotnost této cívky na {{full}}",
|
||||
"changeFilament.adoptWeightHelp": "Je zaznamenána jako {{current}}, a to na základě hodnoty, kterou měla předtím. Použitá hmotnost ({{used}}) se v každém případě zachová, takže zůstává hodnota {{remaining}}.",
|
||||
"changeFilament.apply": "Vyměnit filament",
|
||||
"changeFilament.applying": "Probíhá změna...",
|
||||
"changeFilament.current": "aktuální",
|
||||
"changeFilament.done": "Filament vyměněn.",
|
||||
"changeFilament.failed": "Nepodařilo se vyměnit filament.",
|
||||
"changeFilament.importNote": "Tento filament bude přidán do vašeho katalogu, jakmile změnu potvrdíte.",
|
||||
"changeFilament.intro": "Cívka č. {{id}} si zachovává své číslo, umístění, data a historii použití – mění se pouze filament, který obsahuje.",
|
||||
"changeFilament.newTag": "nový",
|
||||
"changeFilament.next": "Změnit na",
|
||||
"changeFilament.now": "V současné době",
|
||||
"changeFilament.pickBelow": "Vyberte si z níže uvedených filamentů",
|
||||
"changeFilament.title": "Vyměnit filament",
|
||||
"changeFilament.useExisting": "Vyberte existující filament",
|
||||
"changeFilament.weightFollows": "Tento filamentnemá žádnou vlastní plnou hmotnost, takže přebírá plnou hmotnost nového filamentu: {{full}}, přičemž po odečtení již spotřebovaného množství {{used}} zbývá {{remaining}}.",
|
||||
"changeVendor.action": "Výměna",
|
||||
"changeVendor.apply": "Změnit výrobce",
|
||||
"changeVendor.applying": "Probíhá změna...",
|
||||
"changeVendor.clearHint": "Uveďte u tohoto filamentu, že nemá výrobce",
|
||||
"changeVendor.create": "Vytvořit “{{name}}”",
|
||||
"changeVendor.createHint": "Zatím mezi vašimi výrobci není – bude přidán",
|
||||
"changeVendor.current": "aktuální",
|
||||
"changeVendor.done": "Změna výrobce.",
|
||||
"changeVendor.emptySpool": "Prázdná cívka {{value}}",
|
||||
"changeVendor.failed": "Nepodařilo se změnit výrobce.",
|
||||
"changeVendor.intro": "“{{name}}” si zachovává své cívky, technické parametry i historii – mění se pouze výrobce, pod jehož jménem je zařazeno.",
|
||||
"changeVendor.next": "Změnit na",
|
||||
"changeVendor.noEmptySpool": "Žádná hmotnost prázdné cívky",
|
||||
"changeVendor.noMatches": "Žádný výrobce neodpovídá",
|
||||
"changeVendor.none": "Zatím žádní výrobci",
|
||||
"changeVendor.noneNote": "Zařazeno do kategorie bez značky",
|
||||
"changeVendor.now": "V současné době",
|
||||
"changeVendor.pickBelow": "Vyberte si níže výrobce",
|
||||
"changeVendor.searchPlaceholder": "Vyhledat nebo zadat název výrobce",
|
||||
"changeVendor.tareFollows": "Tento filament nemá vlastní hmotnost prázdné cívky, takže se přebírá hodnota udávaná výrobcem. Po výměně je to {{value}}, což je hmotnost prázdné cívky při měření.",
|
||||
"changeVendor.tareGone": "Tato filamentová cívka nemá vlastní hmotnost prázdné cívky a přebírá hodnotu {{current}} od výrobce. Po změně není žádná hodnota k převzetí, dokud filamentu žádnou hodnotu nepřidělíte.",
|
||||
"changeVendor.title": "Změnit výrobce",
|
||||
"changeVendor.willBeCreated": "Bude vytvořeno",
|
||||
"common.decrement": "Snížení",
|
||||
"common.increment": "Zvýšení",
|
||||
"common.remove": "Odstranit",
|
||||
"common.search": "Hledat",
|
||||
"dashboard.addFieldHint": "V nastaveních přidejte do cívek textové nebo výběrové pole, abyste mohli seskupovat i podle něj",
|
||||
"dashboard.dashboard": "Přehledová obrazovka",
|
||||
"dashboard.deleteGroup": "Odstranit skupinu",
|
||||
"dashboard.dragHint": "Přetáhněte cívku na jinou kartu, abyste změnili její {{field}}, nebo ji přetáhněte v rámci jedné karty, abyste změnili pořadí",
|
||||
"dashboard.dropHere": "vložte cívky sem",
|
||||
"dashboard.emptyHelp": "Na této stránce jsou vaše cívky seskupeny podle pole, které si sami vyberete. Přidejte nějaké cívky a můžete začít!",
|
||||
"dashboard.errorEmptyName": "Jméno nesmí být prázdné",
|
||||
"dashboard.errorExists": "Skupina s tímto názvem již existuje",
|
||||
"dashboard.errorRename": "Přejmenování skupiny se nezdařilo",
|
||||
"dashboard.lastUsed": "Naposledy použito před {{time}}",
|
||||
"dashboard.newGroup": "Nová skupina",
|
||||
"dashboard.newGroupName": "Nová skupina {{n}}",
|
||||
"dashboard.reorderGroup": "Přetažením změňte pořadí ve skupině",
|
||||
"dashboard.spoolCount_few": "{{count}} cívky",
|
||||
"dashboard.spoolCount_one": "{{count}} cívka",
|
||||
"dashboard.spoolCount_other": "{{count}} cívek",
|
||||
"dashboard.unassigned": "Nepřiřazeno",
|
||||
"datetime.done": "Hotovo",
|
||||
"datetime.hour": "Hodina",
|
||||
"datetime.minute": "Minuta",
|
||||
"datetime.nextMonth": "Příští měsíc",
|
||||
"datetime.now": "Nyní",
|
||||
"datetime.pick": "Vyberte datum a čas",
|
||||
"datetime.prevMonth": "Předchozí měsíc",
|
||||
"datetime.time": "Čas",
|
||||
"documentTitle.dashboard.list": "Ovládací panel | Spoolman",
|
||||
"documentTitle.labels.list": "Etikety | Spoolman",
|
||||
"documentTitle.library.list": "Knihovna | Spoolman",
|
||||
"documentTitle.locations.list": "Umístění | Spoolman",
|
||||
"documentTitle.settings.list": "Nastavení | Spoolman",
|
||||
"filament.fields.addColor": "Přidat barvu",
|
||||
"filament.fields.articleNumber": "Číslo výrobku",
|
||||
"filament.fields.coaxial": "Koextrudovaný",
|
||||
"filament.fields.colorHex": "Barva",
|
||||
"filament.fields.colorType": "Typ barvy",
|
||||
"filament.fields.comment": "Komentář",
|
||||
"filament.fields.density": "Hustota",
|
||||
"filament.fields.diameter": "Průměr",
|
||||
@@ -21,8 +154,10 @@
|
||||
"filament.fields.material": "Materiál",
|
||||
"filament.fields.multiColor": "Více",
|
||||
"filament.fields.name": "Název",
|
||||
"filament.fields.opacity": "Průhlednost",
|
||||
"filament.fields.price": "Cena",
|
||||
"filament.fields.registered": "Registrováno",
|
||||
"filament.fields.removeColor": "Odstranit barvu",
|
||||
"filament.fields.settingsBedTemp": "Teplota podložky",
|
||||
"filament.fields.settingsExtruderTemp": "Teplota extruderu",
|
||||
"filament.fields.singleColor": "Jediný",
|
||||
@@ -34,21 +169,244 @@
|
||||
"filament.fieldsHelp.spoolWeight": "Hmotnost prázdné cívky. Slouží k určení naměřené hmotnosti cívky.",
|
||||
"filament.fieldsHelp.weight": "Hmotnost plného cívky filamentu (čistá hmotnost). Tato hmotnost by neměla zahrnovat hmotnost samotné cívky, ale pouze filamentu. Obvykle se uvádí na obalu.",
|
||||
"filament.filament": "Filamenty",
|
||||
"footer.documentation": "Dokumentace",
|
||||
"footer.reportIssue": "Nahlásit problém",
|
||||
"help.help": "Nápověda",
|
||||
"inspector.addSpoolsOfThis": "Přidejte k tomu tyto cívky",
|
||||
"inspector.adjustFailed": "Nastavení hmotnosti se nezdařilo.",
|
||||
"inspector.adjustHelp": "Kladná hodnota spotřebovává filament, záporna jej zase doplňuje.",
|
||||
"inspector.adjustWeight": "Nastavit váhu",
|
||||
"inspector.apply": "Použít",
|
||||
"inspector.applying": "Používám...",
|
||||
"inspector.colorHex": "Hexadecimální kód barvy",
|
||||
"inspector.consumeAmount": "Spotřebované množství:",
|
||||
"inspector.defaultFrom.filament": "{{value}} · výchozí filament",
|
||||
"inspector.defaultFrom.manufacturer": "{{value}} · výchozí výrobce",
|
||||
"inspector.delete.deleting": "Odstraňování...",
|
||||
"inspector.delete.errorGone": "Už to bylo smazáno.",
|
||||
"inspector.delete.errorSpoolsExist": "Tento filament nelze smazat – cívky ho stále používají.",
|
||||
"inspector.delete.errorUnknown": "Odstranění se nezdařilo. Podrobnosti najdete v protokolech serveru.",
|
||||
"inspector.delete.filament": "Odstranit filament",
|
||||
"inspector.delete.filamentBlockedHint": "Nejdřív smažte tyto cívky. Jejich archivace nestačí.",
|
||||
"inspector.delete.filamentBlockedTitle": "Tento filament nelze smazat",
|
||||
"inspector.delete.filamentBlocked_few": "{{count}} cívky stále používá „{{name}}“, včetně archivovaných.",
|
||||
"inspector.delete.filamentBlocked_one": "{{count}} cívka stále používá „{{name}}“, včetně archivovaných.",
|
||||
"inspector.delete.filamentBlocked_other": "{{count}} cívek stále používá „{{name}}“, včetně archivovaných.",
|
||||
"inspector.delete.filamentBody": "“{{name}}“ bude z vašeho katalogu odstraněno. Tuto akci nelze vrátit zpět.",
|
||||
"inspector.delete.filamentDone": "Filament byl odstraněn.",
|
||||
"inspector.delete.filamentTitle": "Smazat tento filament?",
|
||||
"inspector.delete.spool": "Smazat cívku",
|
||||
"inspector.delete.spoolBody": "Cívka # {{id}} z “{{name}}“ bude odstraněna spolu s její historií používání. Toto nelze vrátit zpět.",
|
||||
"inspector.delete.spoolDone": "Cívka vymazána.",
|
||||
"inspector.delete.spoolRemaining": "Zbývá na ní ještě {{weight}} filamentu. Pokud ji chcete jen odstranit, archivujte ji.",
|
||||
"inspector.delete.spoolTitle": "Smazat tuto cívku?",
|
||||
"inspector.delete.vendor": "Odstranit výrobce",
|
||||
"inspector.delete.vendorBody": "“{{name}}“ bude odstraněn. Tuto akci nelze vrátit zpět.",
|
||||
"inspector.delete.vendorDone": "Výrobce vymazán.",
|
||||
"inspector.delete.vendorOrphans_few": "{{count}} vlákna zůstávají zachována, ale není k nim uveden výrobce.",
|
||||
"inspector.delete.vendorOrphans_one": "{{count}} vlákno zůstává zachováno, ale není k němu uveden výrobce.",
|
||||
"inspector.delete.vendorOrphans_other": "{{count}} vláken zůstávají zachována, ale není k nim uveden výrobce.",
|
||||
"inspector.delete.vendorTitle": "Smazat tohoto výrobce?",
|
||||
"inspector.duplicateFilament": "Duplikát",
|
||||
"inspector.empty": "Vyberte si ze seznamu cívku, filament nebo výrobce a zobrazte si zde jejich podrobnosti.",
|
||||
"inspector.enterValidLength": "Zadejte platnou délku.",
|
||||
"inspector.enterValidWeight": "Zadejte platnou váhu.",
|
||||
"inspector.loading": "Načítání...",
|
||||
"inspector.manageExtraFields": "Správa polí",
|
||||
"inspector.measuredHelp": "Celková hmotnost cívky + zbývajícího filamentu, jak ji ukazuje váha.",
|
||||
"inspector.multi": "multi ×{{count}}",
|
||||
"inspector.newGross": "Nová celková hmotnost:",
|
||||
"inspector.noExtraFields": "Zatím žádná — přidejte si vlastní pole, abyste mohli sledovat vše, co Spoolman nesleduje.",
|
||||
"inspector.notFound": "Tuto položku se nepodařilo najít. Možná byla smazána.",
|
||||
"inspector.ofRemaining": "zbývá {{weight}} · {{length}} m",
|
||||
"inspector.openFilament": "Otevřený filament",
|
||||
"inspector.openLink": "Otevřít {{url}} v nové záložce",
|
||||
"inspector.openManufacturer": "Otevřít výrobce",
|
||||
"inspector.override.byFilament": "Přepsáno tímto vláknem · {{value}}",
|
||||
"inspector.override.bySpool": "Přepsáno touto cívkou · {{value}}",
|
||||
"inspector.override.overridesFilament": "Přepíše filament · {{value}}",
|
||||
"inspector.override.overridesManufacturer": "Přepsání výrobce · {{value}}",
|
||||
"inspector.specs": "Specifikace — úpravy přímo v dokumentu",
|
||||
"inspector.spoolsCount": "Cívky · {{count}}",
|
||||
"inspector.spoolsTotalRemaining": "{{weight}} celkem",
|
||||
"inspector.used": "použité",
|
||||
"inspector.vendorSub_few": "{{count}} filamenty",
|
||||
"inspector.vendorSub_one": "{{count}} filament",
|
||||
"inspector.vendorSub_other": "{{count}} filamentů",
|
||||
"kofi": "Příspěvek autorovi na Ko-fi",
|
||||
"labels.addHead": "Přidat",
|
||||
"labels.addQr": "QR kód",
|
||||
"labels.addRect": "Obdélník",
|
||||
"labels.addSwatch": "Vzorník barev",
|
||||
"labels.addText": "Text / pole",
|
||||
"labels.align": "Zarovnat",
|
||||
"labels.alignCenter": "Na střed",
|
||||
"labels.alignLeft": "Vlevo",
|
||||
"labels.alignRight": "Vpravo",
|
||||
"labels.blank": "Zatím nemáte žádné návrhy etiket.",
|
||||
"labels.bold": "Tučně",
|
||||
"labels.canvasHint": "Přetažením přesunete · kliknutím vyberete · pomocí úchytů změníte velikost.",
|
||||
"labels.centerLogo": "Spoolman logo uprostřed",
|
||||
"labels.chooseField": "Vyberte pole...",
|
||||
"labels.clearFill": "Průhledné vyplnění (pouze obrys)",
|
||||
"labels.copies": "Kopie",
|
||||
"labels.cornerRadiusMm": "Zaoblení rohu",
|
||||
"labels.createFirst": "Vytvořte svůj první šítek",
|
||||
"labels.cutGuides": "Řezací vodítka",
|
||||
"labels.deleteConfirm": "Chcete tento návrh etikety smazat?",
|
||||
"labels.deleteElement": "Odstranit prvek",
|
||||
"labels.designName": "Název návrhu",
|
||||
"labels.designerDesc": "Navrhujte etikety s QR kódy s libovolnými poli pro cívky, filamenty nebo dodavatele a poté je vytiskněte na archy nebo na tiskárně etiket. Návrhy se ukládají na server.",
|
||||
"labels.designerTitle": "Návrhář etiket",
|
||||
"labels.dpi": "Rozlišení",
|
||||
"labels.dpiHint": "",
|
||||
"labels.duplicate": "Duplikát",
|
||||
"labels.exportFormat": "Formát souboru",
|
||||
"labels.exportFormatOptions.aml": "Formát souboru etiket AML",
|
||||
"labels.exportFormatOptions.png": "Obrázek PNG",
|
||||
"labels.fields.bedTemp": "Teplota podložky",
|
||||
"labels.fields.diameterMm": "Průměr (mm)",
|
||||
"labels.fields.groupVendor": "Dodavatel",
|
||||
"labels.fields.initialG": "Počáteční (g)",
|
||||
"labels.fields.netWeightG": "Čistá hmotnost (g)",
|
||||
"labels.fields.remainingG": "Zbývající množství (g)",
|
||||
"labels.filamentsSelected_few": "{{count}} filamenty byl vybrány",
|
||||
"labels.filamentsSelected_one": "{{count}} filament byl vybrán",
|
||||
"labels.filamentsSelected_other": "{{count}} filamentů bylo vybráno",
|
||||
"labels.fill": "Vyplnit",
|
||||
"labels.fitWidth": "Přizpůsobit šířku sloupcům",
|
||||
"labels.fitWidthHint": "Nastavte šířku popisků tak, aby zvolený počet sloupců vyplnil celou stránku.",
|
||||
"labels.fontMm": "Písmo",
|
||||
"labels.gridInfo": "{{cols}} × {{rows}} = {{perPage}} etiket / stránka",
|
||||
"labels.hMm": "H",
|
||||
"labels.heightMm": "Výška",
|
||||
"labels.hintNowrap": "Text zůstává na jednom řádku; vše, co přesahuje šířku, se ořízne.",
|
||||
"labels.hintSwatch": "",
|
||||
"labels.hintWrap": "",
|
||||
"labels.imageDesc": "",
|
||||
"labels.imageZipNote": "",
|
||||
"labels.insertField": "Přidat pole",
|
||||
"labels.kind.qr": "QR kód",
|
||||
"labels.kind.rect": "Obdelník",
|
||||
"labels.kind.swatch": "Vzorek",
|
||||
"labels.kind.text": "Text",
|
||||
"labels.labelSize": "Velikost etikety",
|
||||
"labels.labelType": "Typ etikety",
|
||||
"labels.layout": "Rozvržení",
|
||||
"labels.modeImage": "Obrázkové soubory",
|
||||
"labels.modeLabel": "Tiskárna etiket",
|
||||
"labels.modeSheet": "",
|
||||
"labels.new": "Nový",
|
||||
"labels.newText": "Nový text",
|
||||
"labels.noDesignsOption": "Zatím žádné návrhy",
|
||||
"labels.noFilaments": "Žádné filamenty.",
|
||||
"labels.noSpools": "Žádné cívky.",
|
||||
"labels.onePerLabel": "",
|
||||
"labels.preparing": "Příprava...",
|
||||
"labels.preview": "Náhled",
|
||||
"labels.previewWith": "Náhled pomocí",
|
||||
"labels.printN_few": "Vytisknout {{count}} štítky",
|
||||
"labels.printN_one": "Vytisknout {{count}} etiket",
|
||||
"labels.printN_other": "Vytisknout {{count}} štítků",
|
||||
"labels.radiusMm": "Poloměr",
|
||||
"labels.sampleData": "Ukázková data",
|
||||
"labels.saveAsFormat": "Uložit jako {{format}}",
|
||||
"labels.saved": "Uloženo",
|
||||
"labels.saving": "Ukládání...",
|
||||
"labels.searchFilaments": "Vyhledávám filamenty...",
|
||||
"labels.searchSpools": "Vyhledávám cívky...",
|
||||
"labels.selectAllShort": "Vše",
|
||||
"labels.selectAtLeastOne": "Vyberte alespoň jednu cívku.",
|
||||
"labels.selectAtLeastOneFilament": "Vyberte alespoň jeden filament.",
|
||||
"labels.selectDesign": "Vyberte návrh etikety",
|
||||
"labels.selectElement": "",
|
||||
"labels.selectNoneShort": "Žádné",
|
||||
"labels.selectRecentHint": "",
|
||||
"labels.selectRecentShort": "",
|
||||
"labels.showingFilament": "",
|
||||
"labels.showingReal": "",
|
||||
"labels.showingSpool": "",
|
||||
"labels.showingTags": "",
|
||||
"labels.sizeMm": "Velikost",
|
||||
"labels.skipHint": "",
|
||||
"labels.sortHint": "Seřadit cívky",
|
||||
"labels.sortId": "#",
|
||||
"labels.sortNewest": "Nejnovější",
|
||||
"labels.stroke": "",
|
||||
"labels.strokeMm": "",
|
||||
"labels.tabDesign": "",
|
||||
"labels.tabPrint": "Tisk",
|
||||
"labels.textTemplate": "Text / šablona",
|
||||
"labels.typeFilament": "Filament",
|
||||
"labels.typeHint": "",
|
||||
"labels.typeSpool": "Cívka",
|
||||
"labels.unknownFilament": "Neznámý filament",
|
||||
"labels.wMm": "Š",
|
||||
"labels.widthMm": "Šířka",
|
||||
"labels.wrapText": "",
|
||||
"labels.xMm": "X",
|
||||
"labels.yMm": "Y",
|
||||
"library.apiError": "",
|
||||
"library.collapseGroup": "",
|
||||
"library.dateFilter.never": "Nikdy",
|
||||
"library.dateFilter.olderThan": "Starší než {{span}}",
|
||||
"library.dateFilter.since": "Od {{date}}",
|
||||
"library.dateFilter.to": "Do (volitelně)",
|
||||
"library.emptyBody": "",
|
||||
"library.emptyFiltered": "",
|
||||
"library.emptyTitle": "Zatím žádné cívky",
|
||||
"library.expandGroup": "Zobrazit tyto cívky",
|
||||
"library.filterBy": "Filtrovat podle",
|
||||
"library.groupBy": "Skupina",
|
||||
"library.groupNone": "",
|
||||
"library.groupSpools_few": "{{count}} cívky",
|
||||
"library.groupSpools_one": "{{count}} cívka",
|
||||
"library.groupSpools_other": "{{count}} cívek",
|
||||
"library.nUnused": "",
|
||||
"library.noLocation": "bez uvedení místa",
|
||||
"library.noSpools": "Žádné cívky",
|
||||
"library.noValues": "Žádné hodnoty",
|
||||
"library.openGroup": "",
|
||||
"library.openManufacturer": "",
|
||||
"library.section.extra": "",
|
||||
"library.section.filament": "Filament",
|
||||
"library.section.spool": "Cívka",
|
||||
"library.section.vendor": "Výrobce",
|
||||
"library.showMore": "",
|
||||
"library.sort.nozzle": "Teplota trysky",
|
||||
"library.sortBy": "",
|
||||
"library.unassigned": "",
|
||||
"library.unitGroups": "",
|
||||
"library.unitSpools": "cívky",
|
||||
"library.unused": "",
|
||||
"library.unusedGroup": "",
|
||||
"library.unusedGroupMixed": "",
|
||||
"library.unusedSub": "",
|
||||
"library.unusedSubMixed": "{{location}}",
|
||||
"library.used": "",
|
||||
"library.usedAgo": "",
|
||||
"loading": "Načítání",
|
||||
"locations.locations": "Umístění",
|
||||
"locations.newLocation": "Nové umístění",
|
||||
"locations.noLocation": "Žádné umístění",
|
||||
"locations.noLocationsHelp": "Na této stránce můžete uspořádat své cívky podle umístění, přidejte několik cívek a začněte!",
|
||||
"nav.labels": "Etikety",
|
||||
"nav.library": "Knihovna",
|
||||
"no": "Ne",
|
||||
"notifications.error": "Chyba (kód chyby: {{statusCode}})",
|
||||
"notifications.saveSuccessful": "Úspěšně uloženo!",
|
||||
"pagination.empty": "",
|
||||
"pagination.next": "Další stránka",
|
||||
"pagination.pageSize": "Velikost stránky",
|
||||
"pagination.perPage": "",
|
||||
"pagination.prev": "Předchozí stránka",
|
||||
"pagination.range": "",
|
||||
"printing.generic.columns": "Sloupce",
|
||||
"printing.generic.customSize": "Vlastní",
|
||||
"printing.generic.description": "Níže uvedeným nastavením dosáhnete požadovaného rozložení tisku. Mějte na paměti, že tiskárny a váš operační systém mohou použít vlastní okraje a měřítka, takže možná budete muset provést několik pokusů a omylů, než bude vše správně nastaveno. Před tiskem na skutečné štítky si to vyzkoušejte na kousku běžného papíru.",
|
||||
"printing.generic.description": "Níže uvedeným nastavením dosáhnete požadovaného rozložení tisku. Mějte na paměti, že tiskárny a váš operační systém mohou použít vlastní okraje a měřítka, takže možná budete muset provést několik pokusů a omylů, než bude vše správně nastaveno. Před tiskem na skutečné etikety si to vyzkoušejte na listu běžného papíru.",
|
||||
"printing.generic.dimensions": "Rozměry",
|
||||
"printing.generic.helpMargin": "Okraje by měly být nastaveny tak, aby odpovídaly papíru na štítky a tiskárně, jejich změna ovlivní velikost celé mřížky.",
|
||||
"printing.generic.gridTooWide": "",
|
||||
"printing.generic.helpMargin": "Okraje by měly být nastaveny tak, aby odpovídaly listu etiket a tiskárně, jejich změna ovlivní velikost celé mřížky.",
|
||||
"printing.generic.helpPrinterMargin": "Bezpečná zóna by měla být nastavena tak, jak blízko okraje papíru může tiskárna tisknout, jejich změna neovlivní celou mřížku.",
|
||||
"printing.generic.horizontalSpacing": "Vodorovná rozteč",
|
||||
"printing.generic.itemCopies": "Kopie položky",
|
||||
@@ -64,8 +422,12 @@
|
||||
"printing.generic.saveAsImage": "Uložit jako obrázek",
|
||||
"printing.generic.skipItems": "Vynechat položky",
|
||||
"printing.generic.verticalSpacing": "Svislá rozteč",
|
||||
"printing.qrcode.button": "Tisk štítků",
|
||||
"printing.qrcode.button": "Tisk etiket",
|
||||
"printing.qrcode.customUrl.caveat": "",
|
||||
"printing.qrcode.customUrl.hint": "",
|
||||
"printing.qrcode.customUrl.label": "",
|
||||
"printing.qrcode.useHTTPUrl.label": "Odkaz na QR kód",
|
||||
"printing.qrcode.useHTTPUrl.options.custom": "",
|
||||
"printing.qrcode.useHTTPUrl.options.default": "Výchozí",
|
||||
"printing.qrcode.useHTTPUrl.options.url": "URL",
|
||||
"printing.qrcode.useHTTPUrl.preview": "Náhled:",
|
||||
@@ -74,19 +436,47 @@
|
||||
"printing.spoolSelect.selectedTotal_one": "{{count}} vybraná cívka",
|
||||
"printing.spoolSelect.selectedTotal_other": "{{count}} vybraných cívek",
|
||||
"scanner.description": "Naskenováním QR kódu Spoolman zobrazíte podrobnosti o cívce.",
|
||||
"scanner.error.inUse": "",
|
||||
"scanner.error.insecureContext": "Stránka se nezobrazuje přes protokol HTTPS.",
|
||||
"scanner.error.notAllowed": "Nemáte povolen přístup ke kameře.",
|
||||
"scanner.error.notFound": "Nebyla nalezena žádná kamera.",
|
||||
"scanner.error.streamApiNotSupported": "Prohlížeč nepodporuje MediaStream API.",
|
||||
"scanner.error.unknown": "Došlo k neznámé chybě. ({{error}})",
|
||||
"scanner.starting": "",
|
||||
"scanner.title": "Skener QR kódu",
|
||||
"search.colorHint": "Názvy barev je třeba zadávat v angličtině.",
|
||||
"search.moreSpools": "+{{count}} více",
|
||||
"search.noResults": "Nebyly nalezeny žádné výsledky",
|
||||
"search.searching": "Vyhledávám...",
|
||||
"search.section.filaments": "Filamenty",
|
||||
"search.section.spools": "Cívky",
|
||||
"search.section.vendors": "Výrobci",
|
||||
"search.threshold": "Shoda barev",
|
||||
"search.unknownFilament": "Neznámý filament",
|
||||
"settings.appearance.tab": "",
|
||||
"settings.appearance.theme.dark": "Tmavé",
|
||||
"settings.appearance.theme.desc": "Barevné téma (pouze v tomto prohlížeči)",
|
||||
"settings.appearance.theme.label": "Téma",
|
||||
"settings.appearance.theme.light": "Světlé",
|
||||
"settings.appearance.theme.system": "Systém",
|
||||
"settings.extraFields.addChoice": "",
|
||||
"settings.extraFields.addChoicesFirst": "",
|
||||
"settings.extraFields.addEntityField": "",
|
||||
"settings.extraFields.booleanFalse": "Ne",
|
||||
"settings.extraFields.booleanTrue": "Ano",
|
||||
"settings.extraFields.deleteConfirm": "Smazat pole {{name}}?",
|
||||
"settings.extraFields.description.intro": "Zde můžete přidat další vlastní pole k subjektům.",
|
||||
"settings.extraFields.deleteConfirm": "Mám odstranit pole {{name}} z {{entity}}?",
|
||||
"settings.extraFields.description.constraints": "Jakmile je pole přidáno, nemůžete změnit jeho klíč ani typ a u polí typu výběr nemůžete odebrat volby ani změnit stav více voleb. Pokud pole odstraníte, budou odstraněna přidružená data pro všechny subjekty.",
|
||||
"settings.extraFields.description.intro": "Zde můžete přidat další vlastní pole k subjektům.",
|
||||
"settings.extraFields.description.keyUsage": "Klíčové je, jako co ostatní programy čtou/zapisují data, takže pokud má být vaše vlastní pole integrováno s programem třetí strany, ujistěte se, že je správně nastaveno. Výchozí hodnota se použije pouze pro nové položky.",
|
||||
"settings.extraFields.description.tableViews": "Výstupní pole nelze v zobrazeních tabulky řadit ani filtrovat.",
|
||||
"settings.extraFields.editorEdit": "",
|
||||
"settings.extraFields.editorNew": "",
|
||||
"settings.extraFields.errors.choiceNeeded": "",
|
||||
"settings.extraFields.errors.choicesRemoved": "",
|
||||
"settings.extraFields.errors.deleteFailed": "",
|
||||
"settings.extraFields.errors.keyFormat": "",
|
||||
"settings.extraFields.errors.nameRequired": "Jméno je povinné.",
|
||||
"settings.extraFields.errors.saveFailed": "",
|
||||
"settings.extraFields.fieldType.boolean": "Logická hodnota",
|
||||
"settings.extraFields.fieldType.choice": "Volba",
|
||||
"settings.extraFields.fieldType.datetime": "Datumčas",
|
||||
@@ -95,7 +485,13 @@
|
||||
"settings.extraFields.fieldType.integer": "Celé číslo",
|
||||
"settings.extraFields.fieldType.integerRange": "Rozsah celých čísel",
|
||||
"settings.extraFields.fieldType.text": "Text",
|
||||
"settings.extraFields.max": "max",
|
||||
"settings.extraFields.min": "min",
|
||||
"settings.extraFields.multiSuffix": "",
|
||||
"settings.extraFields.multiple": "Více",
|
||||
"settings.extraFields.namePlaceholder": "Zobrazovaný název",
|
||||
"settings.extraFields.nonUniqueKeyError": "Tento klíč musí být jedinečný.",
|
||||
"settings.extraFields.none": "",
|
||||
"settings.extraFields.params.choices": "Volby",
|
||||
"settings.extraFields.params.defaultValue": "Výchozí hodnota",
|
||||
"settings.extraFields.params.fieldType": "Typ",
|
||||
@@ -103,14 +499,21 @@
|
||||
"settings.extraFields.params.name": "Název",
|
||||
"settings.extraFields.params.order": "Objednávka",
|
||||
"settings.extraFields.params.unit": "Jednotka",
|
||||
"settings.extraFields.saveField": "Uložit pole",
|
||||
"settings.extraFields.tab": "Další pole",
|
||||
"settings.general.baseUrl.label": "Základní URL",
|
||||
"settings.general.baseUrl.tooltip": "Základní adresa URL, která se má použít při generování funkcí, jako jsou QR kódy.",
|
||||
"settings.general.currency.desc": "Třípísmenný kód ISO (např. EUR, USD) používaný pro ceny",
|
||||
"settings.general.currency.label": "Měna",
|
||||
"settings.general.roundPrices.label": "Zaokrouhlené ceny",
|
||||
"settings.general.roundPrices.tooltip": "Zaokrouhlete ceny na nejbližší celé číslo.",
|
||||
"settings.general.tab": "Obecné",
|
||||
"settings.header": "Nastavení",
|
||||
"settings.language.desc": "Jazyk rozhraní (pouze v tomto prohlížeči)",
|
||||
"settings.language.label": "Jazyk",
|
||||
"settings.library.lowThreshold.desc": "",
|
||||
"settings.library.lowThreshold.label": "",
|
||||
"settings.library.tab": "Chování knihovny",
|
||||
"spool.fields.archived": "Archivováno",
|
||||
"spool.fields.comment": "Komentář",
|
||||
"spool.fields.filament": "Filament",
|
||||
@@ -124,17 +527,29 @@
|
||||
"spool.fields.price": "Cena",
|
||||
"spool.fields.registered": "Registrováno",
|
||||
"spool.fields.remainingWeight": "Zbývající hmotnost",
|
||||
"spool.fields.spoolWeight": "Váha cívky",
|
||||
"spool.fields.usedWeight": "Použitá hmotnost",
|
||||
"spool.fields.weight": "Váha",
|
||||
"spool.fieldsHelp.location": "Kde se cívka nachází, pokud máte více míst, kde cívky skladujete.",
|
||||
"spool.fieldsHelp.lotNr": "Číslo šarže výrobce. Lze použít k zajištění jednotné barvy tisku v případě použití více cívek.",
|
||||
"spool.fieldsHelp.measuredWeight": "Jaká je hmotnost filamentu a cívky.",
|
||||
"spool.fieldsHelp.price": "Cena celé cívky. Pokud není nastavena, předpokládá se cena filamentu.",
|
||||
"spool.fieldsHelp.remainingWeight": "Kolik filamentu zbývá na cívce. U nové cívky by to mělo odpovídat hmotnosti filamentu na cívce.",
|
||||
"spool.fieldsHelp.usedWeight": "Kolik filamntu bylo z cívky spotřebováno. Na nové cívce by mělo být použito 0 g.",
|
||||
"spool.fieldsHelp.weight": "Kolik filamentu tato cívka pojala, když byla plná (čistá hmotnost, bez hmotnosti samotné cívky). Nechte toto pole prázdné, chcete-li sledovat hmotnost filamentu, a zadejte hodnotu pouze v případě, že se tato konkrétní cívka liší – jedná-li se o částečně naplněnou cívku nebo o stejný filament zakoupený na větší cívce.",
|
||||
"spool.form.measurementType.length": "Délka",
|
||||
"spool.form.measurementType.weight": "Hmotnost",
|
||||
"spool.spool": "Cívky",
|
||||
"topbar.addSpools": "Přidat cívky",
|
||||
"topbar.searchPlaceholder": "Vyhledávání — zkuste \"červený“ nebo \"pla“",
|
||||
"unknown": "Neznámý",
|
||||
"validation.hexDigits": "",
|
||||
"validation.maxChars": "",
|
||||
"validation.mustBeGt": "",
|
||||
"validation.mustBeMax": "",
|
||||
"validation.mustBeMin": "",
|
||||
"validation.mustBeNumber": "Musí to být číslo",
|
||||
"validation.required": "Povinné",
|
||||
"vendor.fields.comment": "Komentář",
|
||||
"vendor.fields.emptySpoolWeight": "Hmotnost prázdné cívky",
|
||||
"vendor.fields.externalId": "Externí ID",
|
||||
|
||||
@@ -1,17 +1,90 @@
|
||||
{
|
||||
"add.addAndNew": "",
|
||||
"add.adding": "",
|
||||
"add.advanced": "",
|
||||
"add.advancedNote": "",
|
||||
"add.change": "",
|
||||
"add.count": "",
|
||||
"add.createNew": "",
|
||||
"add.createNewSub": "",
|
||||
"add.dbUnavailable": "",
|
||||
"add.duplicate": "",
|
||||
"add.duplicateNote": "",
|
||||
"add.duplicateRename": "",
|
||||
"add.duplicateTitle": "",
|
||||
"add.filamentNamePlaceholder": "",
|
||||
"add.fill.full": "",
|
||||
"add.fillLevel": "",
|
||||
"add.importNote": "",
|
||||
"add.inCatalog": "",
|
||||
"add.locationHint": "",
|
||||
"add.locationPlaceholder": "",
|
||||
"add.manufacturerPlaceholder": "",
|
||||
"add.nameHint": "",
|
||||
"add.newFilament": "",
|
||||
"add.newFilamentTitle": "",
|
||||
"add.noCatalog": "",
|
||||
"add.noManufacturer": "",
|
||||
"add.pickColor": "",
|
||||
"add.searchPlaceholder": "",
|
||||
"add.searching": "",
|
||||
"add.spoolWeightPreset.cardboard": "",
|
||||
"add.spoolWeightPreset.plastic": "",
|
||||
"add.spoolWeightPresetsLead": "",
|
||||
"add.step2": "",
|
||||
"add.typeToSearchAll": "",
|
||||
"add.typeToSearchMatches": "",
|
||||
"add.useExisting": "",
|
||||
"add.vendorHint.existing": "",
|
||||
"add.vendorHint.new": "",
|
||||
"add.vendorHint.optional": "",
|
||||
"add.yourCatalog": "",
|
||||
"buttons.archive": "Arkivér",
|
||||
"buttons.cancel": "Annuller",
|
||||
"buttons.clear": "Ryd",
|
||||
"buttons.close": "",
|
||||
"buttons.delete": "Slet",
|
||||
"buttons.edit": "Redigér",
|
||||
"buttons.filter": "Filtrér",
|
||||
"buttons.save": "Gem",
|
||||
"buttons.showArchived": "Vis arkiverede",
|
||||
"buttons.unArchive": "Gendan arkiv",
|
||||
"common.decrement": "",
|
||||
"common.increment": "",
|
||||
"common.remove": "",
|
||||
"common.search": "",
|
||||
"dashboard.addFieldHint": "",
|
||||
"dashboard.dashboard": "",
|
||||
"dashboard.deleteGroup": "",
|
||||
"dashboard.dragHint": "",
|
||||
"dashboard.dropHere": "",
|
||||
"dashboard.emptyHelp": "",
|
||||
"dashboard.errorEmptyName": "",
|
||||
"dashboard.errorExists": "",
|
||||
"dashboard.errorRename": "",
|
||||
"dashboard.lastUsed": "",
|
||||
"dashboard.newGroup": "",
|
||||
"dashboard.newGroupName": "",
|
||||
"dashboard.reorderGroup": "",
|
||||
"dashboard.unassigned": "",
|
||||
"datetime.done": "",
|
||||
"datetime.hour": "",
|
||||
"datetime.minute": "",
|
||||
"datetime.nextMonth": "",
|
||||
"datetime.now": "",
|
||||
"datetime.pick": "",
|
||||
"datetime.prevMonth": "",
|
||||
"datetime.time": "",
|
||||
"documentTitle.dashboard.list": "",
|
||||
"documentTitle.labels.list": "",
|
||||
"documentTitle.library.list": "",
|
||||
"documentTitle.locations.list": "Lokationer | Spoolman",
|
||||
"documentTitle.settings.list": "",
|
||||
"filament.fields.addColor": "",
|
||||
"filament.fields.articleNumber": "Produktnummer",
|
||||
"filament.fields.coaxial": "Koaksialt",
|
||||
"filament.fields.colorHex": "Farve",
|
||||
"filament.fields.colorType": "",
|
||||
"filament.fields.comment": "Kommentar",
|
||||
"filament.fields.density": "Massefylde",
|
||||
"filament.fields.diameter": "Diameter",
|
||||
@@ -23,6 +96,7 @@
|
||||
"filament.fields.name": "Navn",
|
||||
"filament.fields.price": "Pris",
|
||||
"filament.fields.registered": "Registreret",
|
||||
"filament.fields.removeColor": "",
|
||||
"filament.fields.settingsBedTemp": "Printpladetemperatur",
|
||||
"filament.fields.settingsExtruderTemp": "Ekstrudertemperatur",
|
||||
"filament.fields.singleColor": "Enkeltfarvet",
|
||||
@@ -34,20 +108,210 @@
|
||||
"filament.fieldsHelp.spoolWeight": "Vægten af en tom spole. Bruges til at angive den målte vægt af en spole.",
|
||||
"filament.fieldsHelp.weight": "Filamentets vægt på en ny spole (nettovægt). Dette bør ikke inkludere vægten af selve spolen, kun filamentet. Det er som regel den angivne vægt på pakken.",
|
||||
"filament.filament": "Filamenter",
|
||||
"footer.documentation": "",
|
||||
"footer.reportIssue": "",
|
||||
"help.help": "Hjælp",
|
||||
"inspector.addSpoolsOfThis": "",
|
||||
"inspector.adjustFailed": "",
|
||||
"inspector.adjustHelp": "",
|
||||
"inspector.adjustWeight": "",
|
||||
"inspector.apply": "",
|
||||
"inspector.applying": "",
|
||||
"inspector.colorHex": "",
|
||||
"inspector.consumeAmount": "",
|
||||
"inspector.delete.deleting": "",
|
||||
"inspector.delete.errorGone": "",
|
||||
"inspector.delete.errorSpoolsExist": "",
|
||||
"inspector.delete.errorUnknown": "",
|
||||
"inspector.delete.filament": "",
|
||||
"inspector.delete.filamentBlockedHint": "",
|
||||
"inspector.delete.filamentBlockedTitle": "",
|
||||
"inspector.delete.filamentBody": "",
|
||||
"inspector.delete.filamentDone": "",
|
||||
"inspector.delete.filamentTitle": "",
|
||||
"inspector.delete.spool": "",
|
||||
"inspector.delete.spoolBody": "",
|
||||
"inspector.delete.spoolDone": "",
|
||||
"inspector.delete.spoolRemaining": "",
|
||||
"inspector.delete.spoolTitle": "",
|
||||
"inspector.delete.vendor": "",
|
||||
"inspector.delete.vendorBody": "",
|
||||
"inspector.delete.vendorDone": "",
|
||||
"inspector.delete.vendorTitle": "",
|
||||
"inspector.duplicateFilament": "",
|
||||
"inspector.empty": "",
|
||||
"inspector.enterValidLength": "",
|
||||
"inspector.enterValidWeight": "",
|
||||
"inspector.loading": "",
|
||||
"inspector.manageExtraFields": "",
|
||||
"inspector.measuredHelp": "",
|
||||
"inspector.multi": "",
|
||||
"inspector.newGross": "",
|
||||
"inspector.noExtraFields": "",
|
||||
"inspector.notFound": "",
|
||||
"inspector.ofRemaining": "",
|
||||
"inspector.openFilament": "",
|
||||
"inspector.openLink": "",
|
||||
"inspector.openManufacturer": "",
|
||||
"inspector.specs": "",
|
||||
"inspector.spoolsCount": "",
|
||||
"inspector.spoolsTotalRemaining": "",
|
||||
"inspector.used": "",
|
||||
"kofi": "Donér på Ko-fi",
|
||||
"labels.addHead": "",
|
||||
"labels.addQr": "",
|
||||
"labels.addRect": "",
|
||||
"labels.addSwatch": "",
|
||||
"labels.addText": "",
|
||||
"labels.align": "",
|
||||
"labels.alignCenter": "",
|
||||
"labels.alignLeft": "",
|
||||
"labels.alignRight": "",
|
||||
"labels.blank": "",
|
||||
"labels.bold": "",
|
||||
"labels.canvasHint": "",
|
||||
"labels.centerLogo": "",
|
||||
"labels.chooseField": "",
|
||||
"labels.clearFill": "",
|
||||
"labels.copies": "",
|
||||
"labels.cornerRadiusMm": "",
|
||||
"labels.createFirst": "",
|
||||
"labels.cutGuides": "",
|
||||
"labels.deleteConfirm": "",
|
||||
"labels.deleteElement": "",
|
||||
"labels.designName": "",
|
||||
"labels.designerDesc": "",
|
||||
"labels.designerTitle": "",
|
||||
"labels.dpi": "",
|
||||
"labels.dpiHint": "",
|
||||
"labels.duplicate": "",
|
||||
"labels.fields.bedTemp": "",
|
||||
"labels.fields.diameterMm": "",
|
||||
"labels.fields.groupVendor": "",
|
||||
"labels.fields.initialG": "",
|
||||
"labels.fields.netWeightG": "",
|
||||
"labels.fields.remainingG": "",
|
||||
"labels.fill": "",
|
||||
"labels.fitWidth": "",
|
||||
"labels.fitWidthHint": "",
|
||||
"labels.fontMm": "",
|
||||
"labels.gridInfo": "",
|
||||
"labels.hMm": "",
|
||||
"labels.heightMm": "",
|
||||
"labels.hintNowrap": "",
|
||||
"labels.hintSwatch": "",
|
||||
"labels.hintWrap": "",
|
||||
"labels.imageDesc": "",
|
||||
"labels.imageZipNote": "",
|
||||
"labels.insertField": "",
|
||||
"labels.kind.qr": "",
|
||||
"labels.kind.rect": "",
|
||||
"labels.kind.swatch": "",
|
||||
"labels.kind.text": "",
|
||||
"labels.labelSize": "",
|
||||
"labels.labelType": "",
|
||||
"labels.layout": "",
|
||||
"labels.modeImage": "",
|
||||
"labels.modeLabel": "",
|
||||
"labels.modeSheet": "",
|
||||
"labels.new": "",
|
||||
"labels.newText": "",
|
||||
"labels.noDesignsOption": "",
|
||||
"labels.noFilaments": "",
|
||||
"labels.noSpools": "",
|
||||
"labels.onePerLabel": "",
|
||||
"labels.preparing": "",
|
||||
"labels.preview": "",
|
||||
"labels.previewWith": "",
|
||||
"labels.radiusMm": "",
|
||||
"labels.sampleData": "",
|
||||
"labels.saved": "",
|
||||
"labels.saving": "",
|
||||
"labels.searchFilaments": "",
|
||||
"labels.searchSpools": "",
|
||||
"labels.selectAllShort": "",
|
||||
"labels.selectAtLeastOne": "",
|
||||
"labels.selectAtLeastOneFilament": "",
|
||||
"labels.selectDesign": "",
|
||||
"labels.selectElement": "",
|
||||
"labels.selectNoneShort": "",
|
||||
"labels.selectRecentHint": "",
|
||||
"labels.selectRecentShort": "",
|
||||
"labels.showingFilament": "",
|
||||
"labels.showingReal": "",
|
||||
"labels.showingSpool": "",
|
||||
"labels.showingTags": "",
|
||||
"labels.sizeMm": "",
|
||||
"labels.skipHint": "",
|
||||
"labels.sortHint": "",
|
||||
"labels.sortId": "",
|
||||
"labels.sortNewest": "",
|
||||
"labels.stroke": "",
|
||||
"labels.strokeMm": "",
|
||||
"labels.tabDesign": "",
|
||||
"labels.tabPrint": "",
|
||||
"labels.textTemplate": "",
|
||||
"labels.typeFilament": "",
|
||||
"labels.typeHint": "",
|
||||
"labels.typeSpool": "",
|
||||
"labels.unknownFilament": "",
|
||||
"labels.wMm": "",
|
||||
"labels.widthMm": "",
|
||||
"labels.wrapText": "",
|
||||
"labels.xMm": "",
|
||||
"labels.yMm": "",
|
||||
"library.apiError": "",
|
||||
"library.collapseGroup": "",
|
||||
"library.emptyBody": "",
|
||||
"library.emptyFiltered": "",
|
||||
"library.emptyTitle": "",
|
||||
"library.expandGroup": "",
|
||||
"library.filterBy": "",
|
||||
"library.groupBy": "",
|
||||
"library.groupNone": "",
|
||||
"library.nUnused": "",
|
||||
"library.noLocation": "",
|
||||
"library.noValues": "",
|
||||
"library.openGroup": "",
|
||||
"library.openManufacturer": "",
|
||||
"library.section.extra": "",
|
||||
"library.section.filament": "",
|
||||
"library.section.spool": "",
|
||||
"library.section.vendor": "",
|
||||
"library.showMore": "",
|
||||
"library.sort.nozzle": "",
|
||||
"library.sortBy": "",
|
||||
"library.unassigned": "",
|
||||
"library.unitGroups": "",
|
||||
"library.unitSpools": "",
|
||||
"library.unused": "",
|
||||
"library.unusedGroup": "",
|
||||
"library.unusedGroupMixed": "",
|
||||
"library.unusedSub": "",
|
||||
"library.unusedSubMixed": "",
|
||||
"library.used": "",
|
||||
"library.usedAgo": "",
|
||||
"loading": "Indlæser",
|
||||
"locations.locations": "Lokationer",
|
||||
"locations.newLocation": "Ny lokation",
|
||||
"locations.noLocation": "Ingen lokation",
|
||||
"locations.noLocationsHelp": "Denne side lader dig organisere dine spoler i lokationer, tilføj nogle spoler for at komme i gang!",
|
||||
"nav.labels": "",
|
||||
"nav.library": "",
|
||||
"no": "Nej",
|
||||
"notifications.error": "Fejl (statuskode: {{statusCode}})",
|
||||
"notifications.saveSuccessful": "Gemt!",
|
||||
"pagination.empty": "",
|
||||
"pagination.next": "",
|
||||
"pagination.pageSize": "",
|
||||
"pagination.perPage": "",
|
||||
"pagination.prev": "",
|
||||
"pagination.range": "",
|
||||
"printing.generic.columns": "Kolonner",
|
||||
"printing.generic.customSize": "Brugerdefineret",
|
||||
"printing.generic.description": "Redigér nedenstående indstillinger for at opnå det ønskede layout. Husk på at printere og dit operativsystem kan tilføje deres egne margener og skalering, så det kan kræve et par forsøg, før alt er korrekt. Test på et stykke almindeligt papir, før du udskriver på etiketter.",
|
||||
"printing.generic.dimensions": "Dimensioner",
|
||||
"printing.generic.gridTooWide": "",
|
||||
"printing.generic.helpMargin": "Margener bør indstilles til at matche din printer og papir. Ændringer her vil have indflydelse på hele layoutet.",
|
||||
"printing.generic.helpPrinterMargin": "\"Safe-Zone\" bør indstilles til hvor tæt på kanten af papiret din printer kan printe. Ændringer her vil IKKE have indflydelse på hele layoutet.",
|
||||
"printing.generic.horizontalSpacing": "Horisontal afstand",
|
||||
@@ -65,7 +329,11 @@
|
||||
"printing.generic.skipItems": "Spring over",
|
||||
"printing.generic.verticalSpacing": "Vertikal afstand",
|
||||
"printing.qrcode.button": "Print etiketter",
|
||||
"printing.qrcode.customUrl.caveat": "",
|
||||
"printing.qrcode.customUrl.hint": "",
|
||||
"printing.qrcode.customUrl.label": "",
|
||||
"printing.qrcode.useHTTPUrl.label": "QR-kode link",
|
||||
"printing.qrcode.useHTTPUrl.options.custom": "",
|
||||
"printing.qrcode.useHTTPUrl.options.default": "Standard",
|
||||
"printing.qrcode.useHTTPUrl.options.url": "Webadresse",
|
||||
"printing.qrcode.useHTTPUrl.preview": "Forhåndsvisning:",
|
||||
@@ -73,19 +341,46 @@
|
||||
"printing.spoolSelect.selectedTotal_one": "{{count}} spole valgt",
|
||||
"printing.spoolSelect.selectedTotal_other": "{{count}} spoler valgt",
|
||||
"scanner.description": "Skan en Spoolman QR-kode for at se detaljer om spolen.",
|
||||
"scanner.error.inUse": "",
|
||||
"scanner.error.insecureContext": "Denne side er ikke sikret med HTTPS.",
|
||||
"scanner.error.notAllowed": "Du har ikke givet adgang til kameraet.",
|
||||
"scanner.error.notFound": "Intet kamera fundet.",
|
||||
"scanner.error.streamApiNotSupported": "Denne browser understøtter ikke MediaStream API'et.",
|
||||
"scanner.error.unknown": "En ukendt fejl opstod. {{error}}",
|
||||
"scanner.starting": "",
|
||||
"scanner.title": "QR-kode skanner",
|
||||
"search.colorHint": "",
|
||||
"search.noResults": "",
|
||||
"search.searching": "",
|
||||
"search.section.filaments": "",
|
||||
"search.section.spools": "",
|
||||
"search.section.vendors": "",
|
||||
"search.threshold": "",
|
||||
"search.unknownFilament": "",
|
||||
"settings.appearance.tab": "",
|
||||
"settings.appearance.theme.dark": "",
|
||||
"settings.appearance.theme.desc": "",
|
||||
"settings.appearance.theme.label": "",
|
||||
"settings.appearance.theme.light": "",
|
||||
"settings.appearance.theme.system": "",
|
||||
"settings.extraFields.addChoice": "",
|
||||
"settings.extraFields.addChoicesFirst": "",
|
||||
"settings.extraFields.addEntityField": "",
|
||||
"settings.extraFields.booleanFalse": "Nej",
|
||||
"settings.extraFields.booleanTrue": "Ja",
|
||||
"settings.extraFields.deleteConfirm": "Slet felt: {{name}}?",
|
||||
"settings.extraFields.description.intro": "Her kan du tilføje ekstra felter til dine poster.",
|
||||
"settings.extraFields.description.constraints": "Når et felt er tilføjet kan du ikke redigere dens Nøgle eller Type, og for visse felttyper kan du ikke fjerne valg, eller ændre multi-valgstatus. Hvis du fjerner et felt, vil associeret data i alle poster blive slettet.",
|
||||
"settings.extraFields.description.intro": "Her kan du tilføje ekstra felter til dine poster.",
|
||||
"settings.extraFields.description.keyUsage": "Nøglen er hvad andre programmer læser/skriver data som, så hvis dit felt skal integreres med et tredjepartsprogram, skal du sørge for at indstille det korrekt. Standardværdi bliver kun tilføjet til nye felter.",
|
||||
"settings.extraFields.description.tableViews": "Ekstra felter kan ikke sorteres eller filtreres i oversigterne.",
|
||||
"settings.extraFields.editorEdit": "",
|
||||
"settings.extraFields.editorNew": "",
|
||||
"settings.extraFields.errors.choiceNeeded": "",
|
||||
"settings.extraFields.errors.choicesRemoved": "",
|
||||
"settings.extraFields.errors.deleteFailed": "",
|
||||
"settings.extraFields.errors.keyFormat": "",
|
||||
"settings.extraFields.errors.nameRequired": "",
|
||||
"settings.extraFields.errors.saveFailed": "",
|
||||
"settings.extraFields.fieldType.boolean": "Boolean (Ja/Nej)",
|
||||
"settings.extraFields.fieldType.choice": "Valg",
|
||||
"settings.extraFields.fieldType.datetime": "Dato-tid",
|
||||
@@ -94,7 +389,13 @@
|
||||
"settings.extraFields.fieldType.integer": "Heltal",
|
||||
"settings.extraFields.fieldType.integerRange": "Heltalspænd",
|
||||
"settings.extraFields.fieldType.text": "Tekst",
|
||||
"settings.extraFields.max": "",
|
||||
"settings.extraFields.min": "",
|
||||
"settings.extraFields.multiSuffix": "",
|
||||
"settings.extraFields.multiple": "",
|
||||
"settings.extraFields.namePlaceholder": "",
|
||||
"settings.extraFields.nonUniqueKeyError": "Nøglen skal være Unik.",
|
||||
"settings.extraFields.none": "",
|
||||
"settings.extraFields.params.choices": "Valgmuligheder",
|
||||
"settings.extraFields.params.defaultValue": "Standardværdi",
|
||||
"settings.extraFields.params.fieldType": "Type",
|
||||
@@ -102,14 +403,21 @@
|
||||
"settings.extraFields.params.name": "Navn",
|
||||
"settings.extraFields.params.order": "Sortering",
|
||||
"settings.extraFields.params.unit": "Enhed",
|
||||
"settings.extraFields.saveField": "",
|
||||
"settings.extraFields.tab": "Ekstra felter",
|
||||
"settings.general.baseUrl.label": "Basis-webadresse",
|
||||
"settings.general.baseUrl.tooltip": "Basis-webadressen til at benytte ved generering af funktioner, såsom QR-koder.",
|
||||
"settings.general.currency.desc": "",
|
||||
"settings.general.currency.label": "Valuta",
|
||||
"settings.general.roundPrices.label": "Afrund priser",
|
||||
"settings.general.roundPrices.tooltip": "Afrund priser til nærmeste heltal.",
|
||||
"settings.general.tab": "Generelt",
|
||||
"settings.header": "Indstillinger",
|
||||
"settings.language.desc": "",
|
||||
"settings.language.label": "",
|
||||
"settings.library.lowThreshold.desc": "",
|
||||
"settings.library.lowThreshold.label": "",
|
||||
"settings.library.tab": "",
|
||||
"spool.fields.archived": "Arkiveret",
|
||||
"spool.fields.comment": "Kommentar",
|
||||
"spool.fields.filament": "Filament",
|
||||
@@ -133,7 +441,16 @@
|
||||
"spool.form.measurementType.length": "Længde",
|
||||
"spool.form.measurementType.weight": "Vægt",
|
||||
"spool.spool": "Spoler",
|
||||
"topbar.addSpools": "",
|
||||
"topbar.searchPlaceholder": "",
|
||||
"unknown": "Ukendt",
|
||||
"validation.hexDigits": "",
|
||||
"validation.maxChars": "",
|
||||
"validation.mustBeGt": "",
|
||||
"validation.mustBeMax": "",
|
||||
"validation.mustBeMin": "",
|
||||
"validation.mustBeNumber": "",
|
||||
"validation.required": "",
|
||||
"vendor.fields.comment": "Kommentar",
|
||||
"vendor.fields.emptySpoolWeight": "Tom Spolevægt",
|
||||
"vendor.fields.externalId": "Eksternt ID",
|
||||
|
||||
@@ -1,17 +1,147 @@
|
||||
{
|
||||
"add.addAndNew": "Hinzufügen & neu",
|
||||
"add.addN_one": "{{count}} Spule hinzufügen",
|
||||
"add.addN_other": "{{count}} Spulen hinzufügen",
|
||||
"add.adding": "Hinzufügen...",
|
||||
"add.advanced": "Erweiterte Spezifikation",
|
||||
"add.advancedNote": "Dichte, Durchmesser, Temperaturen (autom. von Material gesetzt)",
|
||||
"add.change": "ändern",
|
||||
"add.count": "Anzahl",
|
||||
"add.createNew": "Erstelle ein neues Filament",
|
||||
"add.createNewSub": "nicht in deinem Katalog oder {{name}}",
|
||||
"add.dbUnavailable": "{{name}} nicht verfügbar",
|
||||
"add.duplicate": "duplizieren",
|
||||
"add.duplicateNote": "Spezifikationen, Hersteller und Preis wurden übernommen. Vergib einen neuen Namen und Farbe.",
|
||||
"add.duplicateRename": "Heißt Immer noch so wie das Original — Benenne es um, um sie voneinander unterscheiden zu können.",
|
||||
"add.duplicateTitle": "Neues Filament · Kopie von \"{{name}}\"",
|
||||
"add.filamentNamePlaceholder": "z.B. PolyTerra Matte Sage",
|
||||
"add.fill.full": "Voll",
|
||||
"add.fillLevel": "Füllstand",
|
||||
"add.importNote": "Wenn du Spulen hinzufügst, wird dieses Filament in deinen Katalog übernommen.",
|
||||
"add.inCatalog": "im Katalog",
|
||||
"add.locationHint": "Wo du physikalisch deine Spule aufbewahrst — ein Regal, eine Kiste, oder einen Drucker. Lasse es leer, wenn du sie alle an einem Platz aufbewahrst.",
|
||||
"add.locationPlaceholder": "z.B. Regal A, Trockenbox 2, Drucker 1",
|
||||
"add.manufacturerPlaceholder": "z.B. Polymaker",
|
||||
"add.nameHint": "Gib die Farbe mit an — Daran lässt sich dein Filament unterscheiden.",
|
||||
"add.newFilament": "neues Filament",
|
||||
"add.newFilamentTitle": "Neues Filament",
|
||||
"add.noCatalog": "Kein Filament in deinem Katalog",
|
||||
"add.noManufacturer": "Kein Hersteller",
|
||||
"add.pickColor": "Wähle eine Farbe",
|
||||
"add.searchPlaceholder": "Suche deinen Katalog und {{name}}...",
|
||||
"add.searching": "Suche...",
|
||||
"add.section.filament": "Filament",
|
||||
"add.section.filamentNote": "Das Produkt auf der Spule — ein Eintrag pro Farbe.",
|
||||
"add.section.manufacturer": "Hersteller",
|
||||
"add.section.manufacturerNote": "Wer das Filament herstellt. Einmal hinzugefügt, wird es für alle ihre Filamente wiederverwendet.",
|
||||
"add.section.spool": "Spule",
|
||||
"add.section.spoolNote": "Die physischen Spulen, die in deinen Bestand kommen.",
|
||||
"add.section.spoolSharedNote": "Gewicht, Spulengewicht und Preis werden ebenfalls als neuer Filament Standard gespeichert.",
|
||||
"add.spoolWeightPreset.cardboard": "Kartonspule {{weight}} g",
|
||||
"add.spoolWeightPreset.plastic": "Plastikspule {{weight}} g",
|
||||
"add.spoolWeightPresetsLead": "Gehe von einer typischen Spule aus:",
|
||||
"add.step2": "Schritt 2 - Spulendetails",
|
||||
"add.step2New": "Schritt 2 - Filament & Spulen Details",
|
||||
"add.summary_one": "{{count}} Spule",
|
||||
"add.summary_other": "{{count}} Spulen",
|
||||
"add.typeToSearchAll": "Tippe um nach tausenden von Filamenten zu suchen",
|
||||
"add.typeToSearchMatches": "Tippe um zu suchen — keine Treffer",
|
||||
"add.useExisting": "Verwende ein Bestehendes",
|
||||
"add.vendorHint.existing": "Verwende vorhandenen Hersteller \"{{name}}\"",
|
||||
"add.vendorHint.new": "Neuer Hersteller \"{{name}}\" wird erstellt",
|
||||
"add.vendorHint.optional": "Optional — leer lassen für keinen Hersteller",
|
||||
"add.weightPresets": "häufige Spulengrößen",
|
||||
"add.yourCatalog": "Dein Katalog",
|
||||
"buttons.apply": "Zustimmen",
|
||||
"buttons.archive": "Archiv",
|
||||
"buttons.cancel": "Abbrechen",
|
||||
"buttons.clear": "Bereinigen",
|
||||
"buttons.close": "Schließen",
|
||||
"buttons.delete": "Löschen",
|
||||
"buttons.edit": "Bearbeiten",
|
||||
"buttons.filter": "Filter",
|
||||
"buttons.save": "Speichern",
|
||||
"buttons.showArchived": "Archivierte anzeigen",
|
||||
"buttons.showNoSpools": "Zeige Filamente die keine Spulen haben",
|
||||
"buttons.unArchive": "Archivieren rückgängig machen",
|
||||
"changeFilament.action": "Ändern",
|
||||
"changeFilament.adoptWeight": "Setze das volle Gewicht dieser Spule auf {{full}}",
|
||||
"changeFilament.adoptWeightHelp": "Es wird als {{current}} aufgezeichnet, von dem Filament, das es zuvor hielt. Das verwendete Gewicht ({{used}}) bleibt in jedem Fall erhalten, sodass {{remaining}} übrig bleibt.",
|
||||
"changeFilament.apply": "Filament ändern",
|
||||
"changeFilament.applying": "Ändern...",
|
||||
"changeFilament.current": "aktuell",
|
||||
"changeFilament.done": "Filament geändert.",
|
||||
"changeFilament.failed": "Konnte das Filament nicht ändern.",
|
||||
"changeFilament.importNote": "Wenn du der Änderung zustimmst, wird dieses Filament deinem Katalog hinzugefügt.",
|
||||
"changeFilament.intro": "Spule #{{id}} behält ihre Nummer, Standort, Daten und Verbrauchshistorie — nur das Filament, das es hält, verändert sich.",
|
||||
"changeFilament.newTag": "neu",
|
||||
"changeFilament.next": "Ändere zu",
|
||||
"changeFilament.now": "Momentan",
|
||||
"changeFilament.pickBelow": "Wähle ein Filament von unten",
|
||||
"changeFilament.title": "Ändere Filament",
|
||||
"changeFilament.useExisting": "Wähle ein bestehendes Filament",
|
||||
"changeFilament.weightFollows": "Diese Spule hat selbst kein volles Gewicht, deshalb wird die des Filaments verwendet: {{full}}, damit bleiben {{remaining}} nachdem {{used}} verwendet wurden.",
|
||||
"changeVendor.action": "Ändern",
|
||||
"changeVendor.apply": "Ändere Hersteller",
|
||||
"changeVendor.applying": "Ändere...",
|
||||
"changeVendor.clearHint": "Belasse dieses Filament ohne Hersteller",
|
||||
"changeVendor.create": "Erstelle \"{{name}}\"",
|
||||
"changeVendor.createHint": "Bis jetzt noch keiner deiner Hersteller — er wird hinzugefügt",
|
||||
"changeVendor.current": "aktuell",
|
||||
"changeVendor.done": "Hersteller geändert.",
|
||||
"changeVendor.emptySpool": "Leere Spule {{value}}",
|
||||
"changeVendor.failed": "Konnte den Hersteller nicht ändern.",
|
||||
"changeVendor.intro": "\"{{name}}\" behält seine Spulen, seine Spezifikationen und die Historie — nur beim Hersteller ändern sich die Einträge.",
|
||||
"changeVendor.next": "Ändere zu",
|
||||
"changeVendor.noEmptySpool": "Kein leeres Spulengewicht",
|
||||
"changeVendor.noMatches": "Kein Hersteller gefunden",
|
||||
"changeVendor.none": "Keine Hersteller vorhanden",
|
||||
"changeVendor.noneNote": "Unter keiner Marke gespeichert",
|
||||
"changeVendor.now": "Momentan",
|
||||
"changeVendor.pickBelow": "Wähle einen Hersteller von unten",
|
||||
"changeVendor.searchPlaceholder": "Suche oder nenne einen Hersteller",
|
||||
"changeVendor.tareFollows": "Dieses Filament hat kein eigenes Leergewicht der Spule, also das seines Herstellers übernommen. Nach der Änderung beträgt es {{value}}, also das Gewicht einer leeren Spule, wenn man eine wiegt.",
|
||||
"changeVendor.tareGone": "Dieses Filament hat kein eigenes Spulenleergewicht und übernimmt das des Herstellers {{current}}. Nach der Änderung gibt es keins zu übernehmen, bis du dem Filament eines gibst.",
|
||||
"changeVendor.title": "Ändere Hersteller",
|
||||
"changeVendor.willBeCreated": "Wird erzeugt",
|
||||
"common.decrement": "Verringern",
|
||||
"common.increment": "Erhöhen",
|
||||
"common.remove": "Entfernen",
|
||||
"common.search": "Suchen",
|
||||
"dashboard.addFieldHint": "Füge in den Einstellungen ein Text- oder Auswahlfeld zu den Spulen hinzu, um auch danach gruppieren zu können",
|
||||
"dashboard.dashboard": "Verwaltung",
|
||||
"dashboard.deleteGroup": "Lösche Gruppe",
|
||||
"dashboard.dragHint": "Ziehe eine Spule auf eine andere Karte, um ihr {{field}} zu ändern, oder innerhalb einer Karte, um die Reihenfolge zu ändern",
|
||||
"dashboard.dropHere": "Spulen hier ablegen",
|
||||
"dashboard.emptyHelp": "Diese Seite gruppiert deine Spulen nach einem von dir gewählten Feld, füge ein paar Spulen hinzu, um zu starten!",
|
||||
"dashboard.errorEmptyName": "Name darf nicht leer sein",
|
||||
"dashboard.errorExists": "Eine Gruppe mit diesem Namen existiert bereits",
|
||||
"dashboard.errorRename": "Umbenennen der Gruppe fehlgeschlagen",
|
||||
"dashboard.lastUsed": "Zuletzt vor {{time}} benutzt",
|
||||
"dashboard.newGroup": "Neue Gruppe",
|
||||
"dashboard.newGroupName": "Neue Gruppe {{n}}",
|
||||
"dashboard.reorderGroup": "Ziehe um die Gruppe neu anzuordnen",
|
||||
"dashboard.spoolCount_one": "{{count}} Spule",
|
||||
"dashboard.spoolCount_other": "{{count}} Spulen",
|
||||
"dashboard.unassigned": "Nicht zugewiesen",
|
||||
"datetime.done": "Erledigt",
|
||||
"datetime.hour": "Stunde",
|
||||
"datetime.minute": "Minute",
|
||||
"datetime.nextMonth": "Nächster Monat",
|
||||
"datetime.now": "Jetzt",
|
||||
"datetime.pick": "Datum und Uhrzeit wählen",
|
||||
"datetime.prevMonth": "Vorheriger Monat",
|
||||
"datetime.time": "Zeit",
|
||||
"documentTitle.dashboard.list": "Verwaltung | Spoolman",
|
||||
"documentTitle.labels.list": "Etiketten | Spoolman",
|
||||
"documentTitle.library.list": "Bibliothek | Spoolman",
|
||||
"documentTitle.locations.list": "Orte | Spoolman",
|
||||
"documentTitle.settings.list": "Einstellungen | Spoolman",
|
||||
"filament.fields.addColor": "Farbe hinzufügen",
|
||||
"filament.fields.articleNumber": "Artikelnummer",
|
||||
"filament.fields.coaxial": "Coextrudiert",
|
||||
"filament.fields.colorHex": "Farbe",
|
||||
"filament.fields.colorType": "Farben Typ",
|
||||
"filament.fields.comment": "Kommentar",
|
||||
"filament.fields.density": "Dichte",
|
||||
"filament.fields.diameter": "Durchmesser",
|
||||
@@ -21,33 +151,277 @@
|
||||
"filament.fields.material": "Material",
|
||||
"filament.fields.multiColor": "Mehrfarbig",
|
||||
"filament.fields.name": "Name",
|
||||
"filament.fields.opacity": "Deckkraft",
|
||||
"filament.fields.price": "Preis",
|
||||
"filament.fields.registered": "Registriert",
|
||||
"filament.fields.removeColor": "Farbe entfernen",
|
||||
"filament.fields.settingsBedTemp": "Betttemperatur",
|
||||
"filament.fields.settingsExtruderTemp": "Düsentemperatur",
|
||||
"filament.fields.settingsExtruderTemp": "Extruder Temperatur",
|
||||
"filament.fields.singleColor": "Einfarbig",
|
||||
"filament.fields.spoolWeight": "Gewicht Spule",
|
||||
"filament.fields.vendor": "Hersteller",
|
||||
"filament.fields.weight": "Gewicht",
|
||||
"filament.fieldsHelp.articleNumber": "z.B. EAN, UPC o.Ä.",
|
||||
"filament.fieldsHelp.multiColorDirection": "Filamente können auf zwei Arten mehrere Farben haben: entweder durch Koextrusion, wie bei zweifarbigen Filamenten mit konsistenten Mehrfarben, oder durch Farbveränderungen in Längsrichtung, wie bei Gradient-Filamenten, die die Farben entlang der Spule verschieben.",
|
||||
"filament.fieldsHelp.spoolWeight": "Das Gewicht der leeren Spule. Wird verwendet, um das gemessene Gewicht der Spule zu berechnen.",
|
||||
"filament.fieldsHelp.multiColorDirection": "Filamente können auf zwei Arten mehrere Farben haben: entweder durch Koextrusion, wie bei zweifarbigen Filamenten mit konsistenten Mehrfarben, oder durch Farbveränderungen in Längsrichtung, wie bei Gradient-Filamenten, welche die Farben entlang der Spule verschieben.",
|
||||
"filament.fieldsHelp.spoolWeight": "Das Gewicht einer leeren Spule. Wird verwendet, um das gemessene Gewicht einer Spule zu bestimmen. Nicht sicher? Pappspulen wiegen normalerweise 130–150 g und Kunststoffspulen 180–250 g – für eine genaue Zahl einfach die Spule auf die Waage legen, sobald sie leer ist.",
|
||||
"filament.fieldsHelp.weight": "Das Gewicht einer vollen Spule (Nettogewicht). Sollte nicht das Gewicht der Spule, sondern nur dass des Filaments auf der Spule enthalten. Entspricht normalerweise dem Gewicht, das auf der Spule aufgedruckt ist.",
|
||||
"filament.filament": "Filamente",
|
||||
"footer.documentation": "Dokumentation",
|
||||
"footer.reportIssue": "Ein Problem melden",
|
||||
"footer.updateAvailable": "v{{version}} verfügbar",
|
||||
"help.help": "Hilfe",
|
||||
"inspector.addSpoolsOfThis": "Diese Spulen hinzufügen",
|
||||
"inspector.adjustFailed": "Anpassung des Gewichts fehlgeschlagen.",
|
||||
"inspector.adjustHelp": "Positiv verbraucht Filament, negativ fügt hinzu.",
|
||||
"inspector.adjustWeight": "Gewicht anpassen",
|
||||
"inspector.apply": "Zustimmen",
|
||||
"inspector.applying": "Zustimmen...",
|
||||
"inspector.colorHex": "Farbe hex",
|
||||
"inspector.consumeAmount": "Verbrauchsmenge:",
|
||||
"inspector.defaultFrom.filament": "{{value}} · Standard des Filaments",
|
||||
"inspector.defaultFrom.manufacturer": "{{value}} · Standard des Herstellers",
|
||||
"inspector.delete.deleting": "Löschen...",
|
||||
"inspector.delete.errorGone": "Es wurde bereits gelöscht.",
|
||||
"inspector.delete.errorSpoolsExist": "Kann das Filament nicht löschen — Spule ist in Benutzung.",
|
||||
"inspector.delete.errorUnknown": "Löschen fehlgeschlagen. Für Details, im ServerLog schauen..",
|
||||
"inspector.delete.filament": "Filament löschen",
|
||||
"inspector.delete.filamentBlockedHint": "Lösche diese Spulen zunächst. Archivieren ist nicht ausreichend.",
|
||||
"inspector.delete.filamentBlockedTitle": "Dieses Filament kann nicht gelöscht werden",
|
||||
"inspector.delete.filamentBlocked_one": "{{count}} Spule verwendet \"{{name}}\", inklusive Archivierter.",
|
||||
"inspector.delete.filamentBlocked_other": "{{count}} Spulen verwenden \"{{name}}\", inklusive Archivierter.",
|
||||
"inspector.delete.filamentBody": "“{{name}}” wird aus Deinem Katalog entfernt. Das kann nicht rückgängig gemacht werden.",
|
||||
"inspector.delete.filamentDone": "Filament gelöscht.",
|
||||
"inspector.delete.filamentTitle": "Dieses Filament löschen?",
|
||||
"inspector.delete.spool": "Spule löschen",
|
||||
"inspector.delete.spoolBody": "Spule #{{id}} von “{{name}}” wird gelöscht, gemeinsam mit ihrer Nutzungshistorie. Das kann nicht rückgängig gemacht werden.",
|
||||
"inspector.delete.spoolDone": "Spule gelöscht.",
|
||||
"inspector.delete.spoolRemaining": "Die Spule hat {{weight}} Filament übrig. Archiviere sie stattdessen, falls Du sie nur aus dem Weg haben möchtest.",
|
||||
"inspector.delete.spoolTitle": "Diese Spule löschen?",
|
||||
"inspector.delete.vendor": "Hersteller löschen",
|
||||
"inspector.delete.vendorBody": "\"{{name}}\" wird gelöscht. Das kann nicht rückgängig gemacht werden.",
|
||||
"inspector.delete.vendorDone": "Hersteller gelöscht.",
|
||||
"inspector.delete.vendorOrphans_one": "Das {{count}} Filament wird behalten, aber es bleibt ohne Hersteller.",
|
||||
"inspector.delete.vendorOrphans_other": "Die {{count}} Filamente werden behalten, aber sie bleiben ohne Hersteller.",
|
||||
"inspector.delete.vendorTitle": "Diesen Hersteller löschen?",
|
||||
"inspector.duplicateFilament": "Duplizieren",
|
||||
"inspector.empty": "Wähle eine Spule, ein Filament oder einen Hersteller aus der Liste, um Details dazu hier anzuzeigen.",
|
||||
"inspector.enterValidLength": "Gib eine valide Länge ein.",
|
||||
"inspector.enterValidWeight": "Gib ein valides Gewicht ein.",
|
||||
"inspector.loading": "Lade...",
|
||||
"inspector.manageExtraFields": "Felder bearbeiten",
|
||||
"inspector.measuredHelp": "Gesamtgewicht der Spule + übriges Filament, wie auf der Waage gemessen.",
|
||||
"inspector.multi": "mehrfach x{{count}}",
|
||||
"inspector.newGross": "Neues Bruttogewicht:",
|
||||
"inspector.noExtraFields": "Noch keine — füge deine eigenen Felder hinzu, um alles zu verfolgen, was Spoolman nicht tut.",
|
||||
"inspector.notFound": "Dieses Objekt konnte nicht gefunden werden. Es könnte gelöscht worden sein.",
|
||||
"inspector.ofRemaining": "von {{weight}} übrig · {{length}} m",
|
||||
"inspector.openFilament": "Filament öffnen",
|
||||
"inspector.openLink": "{{url}} in einem neuen Tab öffnen",
|
||||
"inspector.openManufacturer": "Hersteller öffnen",
|
||||
"inspector.override.byFilament": "Überschrieben durch dieses Filament · {{value}}",
|
||||
"inspector.override.bySpool": "Überschrieben durch diese Spule · {{value}}",
|
||||
"inspector.override.overridesFilament": "Überschreibt Filament · {{value}}",
|
||||
"inspector.override.overridesManufacturer": "Überschreibt Hersteller · {{value}}",
|
||||
"inspector.specs": "Spezifikationen — Direktbearbeitung",
|
||||
"inspector.spoolsCount": "Spulen · {{count}}",
|
||||
"inspector.spoolsTotalRemaining": "Gesamt {{weight}}",
|
||||
"inspector.used": "verwendet",
|
||||
"inspector.vendorSub_one": "{{count}} Filament",
|
||||
"inspector.vendorSub_other": "{{count}} Filamente",
|
||||
"kofi": "Schick mir ein Trinkgeld über Ko-fi",
|
||||
"labels.addHead": "Hinzufügen",
|
||||
"labels.addQr": "QR Code",
|
||||
"labels.addRect": "Rechteck",
|
||||
"labels.addSwatch": "Farbmuster",
|
||||
"labels.addText": "Text / Feld",
|
||||
"labels.align": "Ausrichten",
|
||||
"labels.alignCenter": "Mittig",
|
||||
"labels.alignLeft": "Links",
|
||||
"labels.alignRight": "Rechts",
|
||||
"labels.blank": "Du hast bisher kein Label Design.",
|
||||
"labels.bold": "Fettgedruckt",
|
||||
"labels.canvasHint": "Ziehen zum Verschieben · Klicken zum Auswählen · Eckpunkte zum Ändern der Größe.",
|
||||
"labels.centerLogo": "Zentriere Spoolman Logo",
|
||||
"labels.chooseField": "Wähle ein Feld aus...",
|
||||
"labels.clearFill": "Lösche Füllung (nur Rahmen)",
|
||||
"labels.copies": "Kopien",
|
||||
"labels.cornerRadiusMm": "Eckenradius",
|
||||
"labels.createFirst": "Erstelle Dein erstes Label",
|
||||
"labels.cutGuides": "Schnittlinie",
|
||||
"labels.deleteConfirm": "Dieses Label Design löschen?",
|
||||
"labels.deleteElement": "Element löschen",
|
||||
"labels.designName": "Name des Designs",
|
||||
"labels.designerDesc": "Erstelle QR-Code Etiketten mit beliebigen Spulen-, Filament-, oder Herstellerfeldern und drucke sie auf Papier oder mit einem Etikettendrucker. Die Designs werden auf dem Server gespeichert.",
|
||||
"labels.designerTitle": "Label Designer",
|
||||
"labels.dpi": "Auflösung",
|
||||
"labels.dpiHint": "Stelle deinen Drucker ein, um kleine Etiketten scharf zu halten: 203 dpi für die meisten Thermodrucker, 300 oder mehr für Laser- und Tintenstrahldrucker.",
|
||||
"labels.duplicate": "Duplizieren",
|
||||
"labels.exportDescAml": "Speichert für jedes ausgewählte Etikett eine .aml-Datei, jeweils {{w}}×{{h}} mm. Kann in den LPAPI-basierten Apps geöffnet werden, die mit den meisten Thermodruckern geliefert werden und die physische Größe aus der Datei lesen.",
|
||||
"labels.exportDescPng": "Speichert ein PNG-Bild pro ausgewähltem Label, jeweils {{w}}×{{h}} mm.",
|
||||
"labels.exportFormat": "Dateiformat",
|
||||
"labels.exportFormatOptions.aml": "AML Label Datei",
|
||||
"labels.exportFormatOptions.png": "PNG Bild",
|
||||
"labels.fields.bedTemp": "Druckbetttemperatur",
|
||||
"labels.fields.diameterMm": "Durchmesser (mm)",
|
||||
"labels.fields.groupVendor": "Verkäufer",
|
||||
"labels.fields.initialG": "Initial Gewicht (g)",
|
||||
"labels.fields.netWeightG": "Nettogewicht (g)",
|
||||
"labels.fields.remainingG": "Verbleibend (g)",
|
||||
"labels.filamentsSelected_one": "{{count}} Filament ausgewählt",
|
||||
"labels.filamentsSelected_other": "{{count}} Filamente ausgewählt",
|
||||
"labels.fill": "Füllen",
|
||||
"labels.fitWidth": "Breite an Spalten anpassen",
|
||||
"labels.fitWidthHint": "Setzt die Breite der Etiketten so, dass die ausgewählte Anzahl an Spalten die Seite ausfüllt.",
|
||||
"labels.fontMm": "Schriftart",
|
||||
"labels.gridInfo": "{{cols}} × {{rows}} = {{perPage}} Etiketten / Seite",
|
||||
"labels.hMm": "H",
|
||||
"labels.heightMm": "Höhe",
|
||||
"labels.hintNowrap": "Text bleibt in einer Zeile; alles, was über die Breite hinausgeht, wird abgeschnitten.",
|
||||
"labels.hintSwatch": "Wird mit den Filamentfarbe(n) der Spule zum Druckzeitpunkt gefüllt.",
|
||||
"labels.hintWrap": "Umhülle ein Feld, um es zu verbergen, wenn es leer ist:",
|
||||
"labels.imageDesc": "",
|
||||
"labels.imageZipNote": "Mehr als {{threshold}} Etiketten werden als eine einzige zip Datei geliefert.",
|
||||
"labels.insertField": "Feld hinzufügen",
|
||||
"labels.kind.qr": "QR Code",
|
||||
"labels.kind.rect": "Rechteck",
|
||||
"labels.kind.swatch": "Farbmuster",
|
||||
"labels.kind.text": "Text",
|
||||
"labels.labelSize": "Größe des Etiketts",
|
||||
"labels.labelType": "Art des Etiketts",
|
||||
"labels.layout": "Layout",
|
||||
"labels.modeImage": "Dateien",
|
||||
"labels.modeLabel": "Etikettendrucker",
|
||||
"labels.modeSheet": "Blatt (Kachel)",
|
||||
"labels.new": "Neu",
|
||||
"labels.newText": "Neuer Text",
|
||||
"labels.noDesignsOption": "Noch keine Designs",
|
||||
"labels.noFilaments": "Keine Filamente.",
|
||||
"labels.noSpools": "Keine Spulen.",
|
||||
"labels.onePerLabel": "Eine {{w}}×{{h}} mm Seite pro Etikett.",
|
||||
"labels.preparing": "Bereite vor...",
|
||||
"labels.preview": "Vorschau",
|
||||
"labels.previewWith": "Vorschau mit",
|
||||
"labels.printN_one": "{{count}} Etikett drucken",
|
||||
"labels.printN_other": "{{count}} Etiketten drucken",
|
||||
"labels.radiusMm": "Radius",
|
||||
"labels.sampleData": "Beispieldaten",
|
||||
"labels.saveAsFormat": "Speichern als {{format}}",
|
||||
"labels.saved": "Gespeichert",
|
||||
"labels.saving": "Speichere...",
|
||||
"labels.searchFilaments": "Filamente suchen...",
|
||||
"labels.searchSpools": "Spulen suchen...",
|
||||
"labels.selectAllShort": "Alle",
|
||||
"labels.selectAtLeastOne": "Wähle mindestens eine Spule.",
|
||||
"labels.selectAtLeastOneFilament": "Wähle mindestens ein Filament.",
|
||||
"labels.selectDesign": "Wähle Label Design",
|
||||
"labels.selectElement": "Wähle ein Element aus, um es zu bearbeiten, oder füge eines aus der Palette hinzu.",
|
||||
"labels.selectNoneShort": "Keine",
|
||||
"labels.selectRecentHint": "Wähle alle Spulen, die in den letzten 24 Stunden hinzugefügt wurden",
|
||||
"labels.selectRecentShort": "Kürzlich ({{count}})",
|
||||
"labels.showingFilament": "Zeige Filament #{{id}}",
|
||||
"labels.showingReal": "Echte Spulendaten anzeigen.",
|
||||
"labels.showingSpool": "Zeige Spule #{{id}}",
|
||||
"labels.showingTags": "Felder werden als Tags angezeigt, bis du oben eine Spule auswählst.",
|
||||
"labels.sizeMm": "Größe",
|
||||
"labels.skipHint": "Mit 'Objekt überspringen' werden so viele Zellen vor dem ersten Etikett leer gelassen, dass du ein teilweise benutztes Blatt wiederverwenden kannst: Zähle die Etiketten, die schon abgezogen wurden, von oben nach unten und von links nach rechts.",
|
||||
"labels.sortHint": "Sortiere Spulen",
|
||||
"labels.sortId": "#",
|
||||
"labels.sortNewest": "Neueste",
|
||||
"labels.stroke": "Rahmen",
|
||||
"labels.strokeMm": "Rahmen",
|
||||
"labels.tabDesign": "Design",
|
||||
"labels.tabPrint": "Drucken",
|
||||
"labels.textTemplate": "Text / Vorlage",
|
||||
"labels.typeFilament": "'Filamen",
|
||||
"labels.typeHint": "Filament-Etiketten lassen spool-only-Felder weg, und ihr QR-Code verlinkt zum Filament statt zu einer Spule.",
|
||||
"labels.typeSpool": "Spule",
|
||||
"labels.unknownFilament": "Unbekanntes Filament",
|
||||
"labels.wMm": "B",
|
||||
"labels.widthMm": "Breite",
|
||||
"labels.wrapText": "Zeilenumbruch",
|
||||
"labels.xMm": "X",
|
||||
"labels.yMm": "Y",
|
||||
"library.apiError": "Konnte die Spoolman API nicht erreichen. Läuft das Backend?",
|
||||
"library.catalog.allFilaments": "Alle Filamente",
|
||||
"library.catalog.allManufacturers": "Alle Hersteller",
|
||||
"library.catalog.backToSpools": "Zurück zu Spulen",
|
||||
"library.catalog.filamentCount_one": "{{count}} Filament",
|
||||
"library.catalog.filamentCount_other": "{{count}} Filamente",
|
||||
"library.catalog.manufacturerCount_one": "{{count}} Hersteller",
|
||||
"library.catalog.manufacturerCount_other": "{{count}} Hersteller",
|
||||
"library.catalog.noManufacturer": "kein Hersteller",
|
||||
"library.catalog.notSet": "Nicht gesetzt",
|
||||
"library.catalog.switchList": "Liste wechseln",
|
||||
"library.catalog.unitFilaments": "Filamente",
|
||||
"library.catalog.unitManufacturers": "Hersteller",
|
||||
"library.collapseGroup": "Verstecke diese Spulen",
|
||||
"library.dateFilter.ago": "vor {{span}}",
|
||||
"library.dateFilter.between": "{{from}} – {{to}}",
|
||||
"library.dateFilter.customRange": "Benutzerdefinierter Bereich",
|
||||
"library.dateFilter.from": "Von",
|
||||
"library.dateFilter.last": "Letzte {{span}}",
|
||||
"library.dateFilter.never": "Nie",
|
||||
"library.dateFilter.olderThan": "Älter als {{span}}",
|
||||
"library.dateFilter.since": "Seit {{date}}",
|
||||
"library.dateFilter.to": "Bis (optional)",
|
||||
"library.dateFilter.until": "Bis {{date}}",
|
||||
"library.emptyBody": "Füge deine erste Spule hinzu, um dein Filament zu verfolgen.",
|
||||
"library.emptyFiltered": "Keine {{unit}} passen zu den aktuellen Filtern.",
|
||||
"library.emptyTitle": "Noch keine Spulen",
|
||||
"library.expandGroup": "Zeige diese Spulen",
|
||||
"library.filterBy": "Filtern nach",
|
||||
"library.groupBy": "Gruppieren",
|
||||
"library.groupNone": "Keine (flach)",
|
||||
"library.groupSpools_one": "{{count}} Spule",
|
||||
"library.groupSpools_other": "{{count}} Spulen",
|
||||
"library.nUnused": "×{{count}} unbenutzt",
|
||||
"library.noLocation": "kein Ort",
|
||||
"library.noSpools": "Keine Spulen",
|
||||
"library.noValues": "Keine Werte",
|
||||
"library.openGroup": "Öffne {{name}}",
|
||||
"library.openManufacturer": "Öffne Hersteller {{name}}",
|
||||
"library.resizeList": "Größe der Liste ändern (doppelklicken zum Zurücksetzen)",
|
||||
"library.reverseSort": "Sortierreihenfolge umkehren",
|
||||
"library.section.extra": "Zusätzliche Felder",
|
||||
"library.section.filament": "Filament",
|
||||
"library.section.spool": "Spule",
|
||||
"library.section.vendor": "Hersteller",
|
||||
"library.showMore": "zeige {{count}} mehr",
|
||||
"library.sort.nozzle": "Düsen Temperatur",
|
||||
"library.sortBy": "Sortieren",
|
||||
"library.unassigned": "nicht zugewiesen",
|
||||
"library.unitGroups": "Gruppen",
|
||||
"library.unitSpools": "Spulen",
|
||||
"library.unused": "ungenutzt",
|
||||
"library.unusedGroup": "{{count}} unbenutzt · {{weight}} g jede",
|
||||
"library.unusedGroupMixed": "{{count}} unbenutzt",
|
||||
"library.unusedSub": "jede {{weight}} g · {{location}}",
|
||||
"library.unusedSubMixed": "{{location}}",
|
||||
"library.used": "verbraucht",
|
||||
"library.usedAgo": "vor {{time}} verwendet",
|
||||
"library.viewMenu.browse": "Durchsuchen",
|
||||
"library.views": "Bibliotheksansichten",
|
||||
"loading": "Läd",
|
||||
"locations.locations": "Orte",
|
||||
"locations.newLocation": "Neuer Ort",
|
||||
"locations.noLocation": "Kein Ort",
|
||||
"locations.noLocationsHelp": "Diese Seite lässt Sie Ihre Spulen zu Orten zuweisen, fügen Sie ein paar Spulen hinzu um loszulegen!",
|
||||
"nav.labels": "Labels",
|
||||
"nav.library": "Bibliothek",
|
||||
"no": "Nein",
|
||||
"notifications.error": "Fehler (status code: {{statusCode}})",
|
||||
"notifications.saveSuccessful": "Erfolgreich gespeichert!",
|
||||
"pagination.empty": "Keine {{unit}}",
|
||||
"pagination.next": "Nächste Seite",
|
||||
"pagination.pageSize": "Seitengröße",
|
||||
"pagination.perPage": "{{size}} / Seite",
|
||||
"pagination.prev": "vorherige Seite",
|
||||
"pagination.range": "{{from}}–{{to}} von {{total}} {{unit}}",
|
||||
"printing.generic.columns": "Spalten",
|
||||
"printing.generic.customSize": "Benutzerdefiniert",
|
||||
"printing.generic.description": "Passe die Einstellungen unten an, um das gewünschte Drucklayout zu bekommen. Denk daran, dass Drucker und dein OS eigene Abstände und Skalierungen anwenden könnte, also musst du vielleicht ein bisschen ausprobieren, bis alles passt. Teste es auf einem normalen Blatt Papier, bevor du auf die richtigen Labels druckst.",
|
||||
"printing.generic.dimensions": "Dimensionen",
|
||||
"printing.generic.gridTooWide": "Die Etiketten sind breiter als die Seite. Reduziere die Anzahl der Spalten, den Abstand oder die Ränder.",
|
||||
"printing.generic.helpMargin": "Abstände sollten so konfiguriert werden, dass sie zum Papier und Drucker passen. Änderungen beeinflussen die Abmessungen des gesamten Gitters.",
|
||||
"printing.generic.helpPrinterMargin": "Der Sicherheitsabstand sollte so eingestellt werden, wie dicht der Drucker am Rand des Papiers drucken kann. Änderungen beeinflussen nicht die Abmessungen des Gitters.",
|
||||
"printing.generic.horizontalSpacing": "Horizontaler Abstand",
|
||||
@@ -65,27 +439,64 @@
|
||||
"printing.generic.skipItems": "Objekt überspringen",
|
||||
"printing.generic.verticalSpacing": "Vertikaler Abstand",
|
||||
"printing.qrcode.button": "Beschriftung drucken",
|
||||
"printing.qrcode.customUrl.caveat": "Eine benutzerdefinierte URL wird nicht zurück in Spoolman gescannt – benutze sie, um einen gedruckten QR-Code auf eine externe App oder einen anderen Host zu verweisen.",
|
||||
"printing.qrcode.customUrl.fieldsHint": "Beschriftungsfelder funktionieren zum Beispiel auch",
|
||||
"printing.qrcode.customUrl.hint": "Setze die Spulen Id irgendwo mit dem Platzhalter ein",
|
||||
"printing.qrcode.customUrl.label": "Benutzerdefinierte URL-Vorlage",
|
||||
"printing.qrcode.useHTTPUrl.label": "QR Code Link",
|
||||
"printing.qrcode.useHTTPUrl.options.custom": "Benutzerdefinierte URL",
|
||||
"printing.qrcode.useHTTPUrl.options.default": "Standard",
|
||||
"printing.qrcode.useHTTPUrl.options.url": "URL",
|
||||
"printing.qrcode.useHTTPUrl.preview": "Vorschau:",
|
||||
"printing.qrcode.useHTTPUrl.tooltip": "Die Standardeinstellung verwendet einen proprietären Link, der nur funktioniert, wenn er mit der Scanfunktion von Spoolman gescannt wird. URL verwendet entweder die in den Einstellungen angegebene Basis-URL oder wenn diese nicht festgelegt ist die aktuelle Seiten-URL.",
|
||||
"printing.spoolSelect.selectedTotal_one": "{{count}} Spule ausgewählt",
|
||||
"printing.spoolSelect.selectedTotal_other": "{{count}} Spulen ausgewählt",
|
||||
"scanner.camera": "Kamera",
|
||||
"scanner.cameraNumbered": "Kamera {{number}}",
|
||||
"scanner.description": "Spoolman QR-Code scannen, um Details der Spule anzuzeigen.",
|
||||
"scanner.error.inUse": "Die Kamera wird bereits von einer anderen Anwendung genutzt.",
|
||||
"scanner.error.insecureContext": "Die Seite wird nicht über HTTPS bereitgestellt.",
|
||||
"scanner.error.notAllowed": "Zugriff auf Kamera wurde nicht erlaubt.",
|
||||
"scanner.error.notFound": "Keine Kamera gefunden.",
|
||||
"scanner.error.streamApiNotSupported": "Der Browser unterstützt die MediaStream API nicht.",
|
||||
"scanner.error.unknown": "Ein unbekannter Fehler ist aufgetreten. ({{error}})",
|
||||
"scanner.starting": "Starte Kamera…",
|
||||
"scanner.title": "QR-Code Scanner",
|
||||
"search.browseAll": "Durchsuche alle",
|
||||
"search.colorHint": "Farbnamen müssen in englisch eingegeben werden.",
|
||||
"search.hint": "Suche Spulen, Filamente und Hersteller nach Name, Farbe, Material oder nach jedem anderen Feld.",
|
||||
"search.moreSpools": "+{{count}} mehr",
|
||||
"search.noResults": "Keine Treffer gefunden",
|
||||
"search.searching": "Suchen…",
|
||||
"search.section.filaments": "Filamente",
|
||||
"search.section.spools": "Spulen",
|
||||
"search.section.vendors": "Hersteller",
|
||||
"search.threshold": "Farbtreffer",
|
||||
"search.unknownFilament": "Unbekanntes Filament",
|
||||
"settings.appearance.tab": "Darstellung",
|
||||
"settings.appearance.theme.dark": "Dunkel",
|
||||
"settings.appearance.theme.desc": "Farbschema (nur dieser Browser)",
|
||||
"settings.appearance.theme.label": "Schema",
|
||||
"settings.appearance.theme.light": "Hell",
|
||||
"settings.appearance.theme.system": "System",
|
||||
"settings.extraFields.addChoice": "Option hinzufügen…",
|
||||
"settings.extraFields.addChoicesFirst": "Füge zuerst Optionen hinzu",
|
||||
"settings.extraFields.addEntityField": "Feld {{entity}} hinzufügen",
|
||||
"settings.extraFields.booleanFalse": "Nein",
|
||||
"settings.extraFields.booleanTrue": "Ja",
|
||||
"settings.extraFields.deleteConfirm": "Feld {{name}} entfernen?",
|
||||
"settings.extraFields.description.intro": "Hier können Sie zusätzliche benutzerdefinierte Felder zu Ihren Elementen hinzufügen.",
|
||||
"settings.extraFields.deleteConfirm": "Feld {{name}} des Objekts {{entity}} löschen?",
|
||||
"settings.extraFields.description.constraints": "Nach dem Hinzufügen eines Feldes können Sie dessen Schlüssel oder Typ nicht mehr ändern, und bei Auswahlfeldern können Sie keine Auswahlmöglichkeiten entfernen oder den Mehrfachauswahlstatus ändern. Wenn Sie ein Feld entfernen, werden die zugehörigen Daten für alle Elemente gelöscht.",
|
||||
"settings.extraFields.description.intro": "Hier können Sie zusätzliche benutzerdefinierte Felder zu Ihren Elementen hinzufügen.",
|
||||
"settings.extraFields.description.keyUsage": "Der Schlüssel ist derjenige, unter dem andere Programme die Daten lesen/schreiben, wenn Ihr benutzerdefiniertes Feld also mit einem Programm eines Drittanbieters integriert werden soll, stellen Sie sicher, dass Sie ihn richtig einstellen. Der Standardwert wird nur auf neue Elemente angewendet.",
|
||||
"settings.extraFields.description.tableViews": "Zusätzliche Felder können in den Tabellenansichten nicht sortiert oder gefiltert werden.",
|
||||
"settings.extraFields.editorEdit": "Feld {{entity}} bearbeiten",
|
||||
"settings.extraFields.editorNew": "Neues Feld {{entity}}",
|
||||
"settings.extraFields.errors.choiceNeeded": "Auswahlfelder brauchen mindestens eine Auswahlmöglichkeit.",
|
||||
"settings.extraFields.errors.choicesRemoved": "Bestehende Optionen können nicht entfernt werden: {{choices}}.",
|
||||
"settings.extraFields.errors.deleteFailed": "Feld konnte nicht gelöscht werden.",
|
||||
"settings.extraFields.errors.keyFormat": "Der Schlüssel darf nur Kleinbuchstaben, Zahlen und Unterstriche enthalten.",
|
||||
"settings.extraFields.errors.nameRequired": "Name wird benötigt.",
|
||||
"settings.extraFields.errors.saveFailed": "Feld konnte nicht gespeichert werden.",
|
||||
"settings.extraFields.fieldType.boolean": "Wahr/Falsch",
|
||||
"settings.extraFields.fieldType.choice": "Auswahl",
|
||||
"settings.extraFields.fieldType.datetime": "Datum und Uhrzeit",
|
||||
@@ -94,7 +505,13 @@
|
||||
"settings.extraFields.fieldType.integer": "Ganze Zahl",
|
||||
"settings.extraFields.fieldType.integerRange": "Ganzzahlbereich",
|
||||
"settings.extraFields.fieldType.text": "Text",
|
||||
"settings.extraFields.max": "max",
|
||||
"settings.extraFields.min": "min",
|
||||
"settings.extraFields.multiSuffix": " ·· multi",
|
||||
"settings.extraFields.multiple": "Mehrere",
|
||||
"settings.extraFields.namePlaceholder": "Anzeigename",
|
||||
"settings.extraFields.nonUniqueKeyError": "Der Schlüssel muss einzigartig sein.",
|
||||
"settings.extraFields.none": "Noch keine zusätzlichen {{entity}} Felder definiert.",
|
||||
"settings.extraFields.params.choices": "Auswahlmöglichkeiten",
|
||||
"settings.extraFields.params.defaultValue": "Standardwert",
|
||||
"settings.extraFields.params.fieldType": "Typ",
|
||||
@@ -102,14 +519,37 @@
|
||||
"settings.extraFields.params.name": "Name",
|
||||
"settings.extraFields.params.order": "Reihenfolge",
|
||||
"settings.extraFields.params.unit": "Einheit",
|
||||
"settings.extraFields.reorderChoice": "Ziehen oder benutze die Pfeiltasten, um diese Auswahl neu zu ordnen.",
|
||||
"settings.extraFields.saveField": "Feld speichern",
|
||||
"settings.extraFields.tab": "Extra Felder",
|
||||
"settings.general.baseUrl.label": "Basis URL",
|
||||
"settings.general.baseUrl.tooltip": "Die basis URL für die Generierung von Funktionen wie QR Codes.",
|
||||
"settings.general.currency.desc": "Dreistelliger ISO Code (z.B. EUR, USD) der für Preise genutzt wird",
|
||||
"settings.general.currency.label": "Währung",
|
||||
"settings.general.roundPrices.label": "Gerundeter Preis",
|
||||
"settings.general.roundPrices.tooltip": "Rundet die Preise auf die nächsthöhere ganze Zahl.",
|
||||
"settings.general.tab": "Allgemein",
|
||||
"settings.header": "Einstellungen",
|
||||
"settings.language.desc": "Benutzeroberflächensprache (nur für diesen Browser)",
|
||||
"settings.language.label": "Sprache",
|
||||
"settings.library.lowThreshold.desc": "Spulen mit diesem Gewicht oder weniger werden rot markiert (nur in diesem Browser)",
|
||||
"settings.library.lowThreshold.label": "Niedriger Lagerbestand Schwelle",
|
||||
"settings.library.tab": "Bibliotheksverhalten",
|
||||
"settings.scanner.autoNavigate.desc": "Navigiere automatisch in diesem Webbrowser zu einer Spule oder Filament, die von einem Tag Lesegerät gelesen wird.",
|
||||
"settings.scanner.autoNavigate.label": "Auto-Navigation",
|
||||
"settings.scanner.docs": "Wie man einen Tag Leser einrichtet",
|
||||
"settings.scanner.lastSeen": "vor {{when}}",
|
||||
"settings.scanner.pair": "Zum Koppeln tippen",
|
||||
"settings.scanner.reader.anyDesc": "Scans von jedem Leser, öffnet Spulen in diesem Webbrowser. Wenn du mehr Kontrolle willst, kannst du dich mit einem bestimmten koppeln. Das ist auch der Leser, der verwendet wird, um neue Tags zu Spulen oder Filamenten hinzuzufügen.",
|
||||
"settings.scanner.reader.label": "Tag Leser",
|
||||
"settings.scanner.reader.pairedDesc": "Nur Scans von diesem Leser öffnen Spulen in diesem Webbrowser.",
|
||||
"settings.scanner.recent": "Kürzliche Leser",
|
||||
"settings.scanner.recentNone": "Kein Leser im Speicher, richte einen Tag Leser ein und lese dann einen beliebigen Tag, damit er hier erscheint.",
|
||||
"settings.scanner.tab": "Tag Scannen",
|
||||
"settings.scanner.unpair": "Benutze irgendeinen Leser",
|
||||
"settings.scanner.use": "Benutze diesen",
|
||||
"settings.scanner.waiting": "Tippe auf einen beliebigen Tag auf dem Leser, den du möchtest...",
|
||||
"sponsor": "Unterstütze mich auf GitHub",
|
||||
"spool.fields.archived": "Archiviert",
|
||||
"spool.fields.comment": "Kommentar",
|
||||
"spool.fields.filament": "Filament",
|
||||
@@ -123,17 +563,81 @@
|
||||
"spool.fields.price": "Preis",
|
||||
"spool.fields.registered": "Registriert",
|
||||
"spool.fields.remainingWeight": "Verbleibendes Gewicht",
|
||||
"spool.fields.spoolWeight": "Spulengewicht",
|
||||
"spool.fields.usedWeight": "Verbrauchtes Gewicht",
|
||||
"spool.fields.weight": "Gewicht",
|
||||
"spool.fieldsHelp.location": "Ort, an dem die Spule gelagert wird.",
|
||||
"spool.fieldsHelp.lotNr": "Chargennummer des Herstellers. Kann verwendet werden um gleichmäßige Farben zu garantieren, wenn mehrere Spulen verwendet werden.",
|
||||
"spool.fieldsHelp.measuredWeight": "Gesamtgewicht von Spule und Filament.",
|
||||
"spool.fieldsHelp.price": "Preis einer vollen Spule. Falls nicht ausgewählt, wird der Preis des Filaments geschätzt.",
|
||||
"spool.fieldsHelp.remainingWeight": "Wie viel Filament noch auf der Spule ist. Entspricht dem auf der Spule angegeben Nettogewicht, wenn die Spule neu ist.",
|
||||
"spool.fieldsHelp.spoolWeight": "Was diese Spule wiegt, wenn sie leer ist. Lasse es leer, um das Gewicht der Spule (Filament) zu nehmen, und stelle es ein, wenn diese spezielle Spule anders ist – eine neu aufgewickelte Spule oder eine Pappspule, die gegen einen Plastikspule getauscht wurde. Das ist das, was vom gewogenen Gewicht abgezogen wird, wenn du es nach gemessenem Gewicht anpasst, also gibt ein falsches Spulengewicht einen falschen Wert, wie viel Filament noch übrig ist.",
|
||||
"spool.fieldsHelp.usedWeight": "Wie viel Gewicht bereits verbraucht wurde z.B. 0g für eine neue Spule.",
|
||||
"spool.fieldsHelp.weight": "Wie viel Filament diese Spule hatte, als sie voll war (Nettogewicht, ohne die Spule selbst). Lasse es leer, um das Gewicht der Spule (Filament) zu nehmen, und trage es ein, wenn diese spezielle Spule anders ist – eine partielle Spule oder dasselbe Filament auf einer größeren Spule gekauft.",
|
||||
"spool.form.measurementType.length": "Länge",
|
||||
"spool.form.measurementType.weight": "Gewicht",
|
||||
"spool.spool": "Spulen",
|
||||
"tags.add": "Tag hinzufügen",
|
||||
"tags.added": "Tag verlinkt.",
|
||||
"tags.addedOn": "Hinzugefügt {{date}}",
|
||||
"tags.modal.alreadyHere": "Dieser Tag kennzeichnet diese Spule bereits.",
|
||||
"tags.modal.alreadyHereFilament": "Dieses Tag kennzeichnet dieses Filament bereits.",
|
||||
"tags.modal.badUid": "Eine Tag UID ist hexadezimal, wie 04A2B3C4.",
|
||||
"tags.modal.checking": "Prüfen…",
|
||||
"tags.modal.failed": "Konnte den Tag nicht verknüpfen.",
|
||||
"tags.modal.filamentNamed": "Filament {{name}}",
|
||||
"tags.modal.free": "Dieser Tag ist noch mit nichts verbunden.",
|
||||
"tags.modal.intro": "Wenn du diesen Tag auf einem Reader antippst, findest du dann Spule #{{id}}.",
|
||||
"tags.modal.introFilament": "Wenn man diesen Tag auf einem Leser antippt, wird dieses Filament dann gefunden.",
|
||||
"tags.modal.lastSeenOn": "{{reader}} zuletzt gelesen {{uid}}.",
|
||||
"tags.modal.link": "Verbinde Tag",
|
||||
"tags.modal.linking": "Verbinden…",
|
||||
"tags.modal.move": "Verschiebe es hierher von #{{id}}",
|
||||
"tags.modal.moveFailed": "Konnte den Tag nicht verschieben. Er ist nun möglicherweise mit keiner Spule verbunden – versuche ihn erneut zu verlinken.",
|
||||
"tags.modal.moveFailedFilament": "Der Tag konnte nicht verschoben werden. Er ist jetzt möglicherweise mit nichts verknüpft – versuche, ihn erneut zu verknüpfen.",
|
||||
"tags.modal.moveHere": "Bewege es hierhin",
|
||||
"tags.modal.moving": "Verschieben…",
|
||||
"tags.modal.phoneReading": "Halte den Tag an dein Handy...",
|
||||
"tags.modal.phoneScan": "Lese den Tag mit deinem Handy",
|
||||
"tags.modal.spoolNamed": "Spule #{{id}}, {{name}}",
|
||||
"tags.modal.spoolShort": "Spule #{{id}}",
|
||||
"tags.modal.takenBy": "Derzeit mit {{spool}} verbunden.",
|
||||
"tags.modal.title": "Verbinde einen Tag",
|
||||
"tags.modal.uidHelp": "Trennzeichen und Großschreibung machen keinen Unterschied: 04:a2:b3:c4, 04-A2-B3-C4 und 04a2b3c4 sind alle derselbe Tag.",
|
||||
"tags.modal.uidLabel": "Tag UID",
|
||||
"tags.modal.uidPlaceholder": "04A2B3C4",
|
||||
"tags.modal.useLastSeen": "Benutze es",
|
||||
"tags.modal.waitingAny": "Warte auf ein Tippen auf einem beliebigen Leser.",
|
||||
"tags.modal.waitingOn": "Warte auf ein Tippen auf {{reader}}.",
|
||||
"tags.moved": "Tag wurde von Spule #{{id}} hierher verschoben.",
|
||||
"tags.movedFromFilament": "Tag wurde von Filament {{name}} hierher verschoben.",
|
||||
"tags.nfc.insecureContext": "Das Lesen von Tags erfordert eine sichere Verbindung. Öffne Spoolman über HTTPS, um das NFC deines Handy zu nutzen.",
|
||||
"tags.nfc.notAllowed": "Diese Seite darf NFC nicht verwenden. Gewähre ihr die Erlaubnis in den Seiten Einstellungen deines Browsers und versuche es erneut.",
|
||||
"tags.nfc.notReadable": "Der NFC-Leser ist nicht verfügbar — eine andere App könnte ihn gerade benutzen.",
|
||||
"tags.nfc.notSupported": "Dieses Handy hat kein NFC oder NFC ist in den Systemeinstellungen ausgeschaltet.",
|
||||
"tags.nfc.unknown": "Konnte keinen Tag lesen.",
|
||||
"tags.none": "Keine Tag's verbunden.",
|
||||
"tags.scan.openedFilament": "Tag gescannt: Filament {{name}} geöffnet.",
|
||||
"tags.scan.openedSpool": "Tag gescannt: Spule #{{id}}, {{name}} geöffnet.",
|
||||
"tags.scan.unknown": "Unbekannter Tag {{uid}}. Öffne die zugehörige Spule und benutze „Tag hinzufügen“, um ihn zu verknüpfen.",
|
||||
"tags.section": "Tag's",
|
||||
"tags.unlink": "Verknüpfung aufheben",
|
||||
"tags.unlinkBody": "Tag {{uid}} wird stoppen, diese Spule zu identifizieren. Nichts wird direkt auf dem Tag selbst geschrieben, daher kannst du ihn jederzeit wieder — mit dieser Spule oder einer Anderen — verknüpfen.",
|
||||
"tags.unlinkBodyFilament": "Tag {{uid}} wird aufhören, dieses Filament zu identifizieren. Es wird nichts auf den Tag selbst geschrieben, sodass du ihn jederzeit wieder verknüpfen kannst — hier oder irgendwo anders.",
|
||||
"tags.unlinkFailed": "Konnte die Verbindung des Tag's nicht entfernen.",
|
||||
"tags.unlinkTitle": "Verbindung für diesen Tag aufheben?",
|
||||
"tags.unlinked": "Verbindung des Tag's aufgehoben.",
|
||||
"tags.unlinking": "Verbindung aufheben…",
|
||||
"topbar.addSpools": "Spulen hinzufügen",
|
||||
"topbar.searchPlaceholder": "Suchen — versuche \"rot\" oder \"pla\"",
|
||||
"unknown": "Unbekannt",
|
||||
"validation.hexDigits": "Benutze 6 oder 8 hexadezimal Stellen",
|
||||
"validation.maxChars": "Höchstens {{max}} Zeichen",
|
||||
"validation.mustBeGt": "Muss größer als {{value}} sein",
|
||||
"validation.mustBeMax": "Muss {{value}}, oder weniger sein",
|
||||
"validation.mustBeMin": "Muss {{value}}, oder mehr sein",
|
||||
"validation.mustBeNumber": "Muss eine Zahl sein",
|
||||
"validation.required": "Erforderlich",
|
||||
"vendor.fields.comment": "Kommentar",
|
||||
"vendor.fields.emptySpoolWeight": "Gewicht der leeren Spule",
|
||||
"vendor.fields.externalId": "Externe ID",
|
||||
@@ -141,5 +645,6 @@
|
||||
"vendor.fields.name": "Name",
|
||||
"vendor.fields.registered": "Registriert",
|
||||
"vendor.fieldsHelp.emptySpoolWeight": "Das Gewicht einer leeren Spule von diesem Hersteller.",
|
||||
"vendor.showAsList": "Zeige als Liste",
|
||||
"yes": "Ja"
|
||||
}
|
||||
@@ -1,45 +1,316 @@
|
||||
{
|
||||
"add.addAndNew": "",
|
||||
"add.adding": "",
|
||||
"add.advanced": "",
|
||||
"add.advancedNote": "",
|
||||
"add.change": "",
|
||||
"add.count": "",
|
||||
"add.createNew": "",
|
||||
"add.createNewSub": "",
|
||||
"add.dbUnavailable": "",
|
||||
"add.duplicate": "",
|
||||
"add.duplicateNote": "",
|
||||
"add.duplicateRename": "",
|
||||
"add.duplicateTitle": "",
|
||||
"add.filamentNamePlaceholder": "",
|
||||
"add.fill.full": "",
|
||||
"add.fillLevel": "",
|
||||
"add.importNote": "",
|
||||
"add.inCatalog": "",
|
||||
"add.locationHint": "",
|
||||
"add.locationPlaceholder": "",
|
||||
"add.manufacturerPlaceholder": "",
|
||||
"add.nameHint": "",
|
||||
"add.newFilament": "",
|
||||
"add.newFilamentTitle": "",
|
||||
"add.noCatalog": "",
|
||||
"add.noManufacturer": "",
|
||||
"add.pickColor": "",
|
||||
"add.searchPlaceholder": "",
|
||||
"add.searching": "",
|
||||
"add.spoolWeightPreset.cardboard": "",
|
||||
"add.spoolWeightPreset.plastic": "",
|
||||
"add.spoolWeightPresetsLead": "",
|
||||
"add.step2": "",
|
||||
"add.typeToSearchAll": "",
|
||||
"add.typeToSearchMatches": "",
|
||||
"add.useExisting": "",
|
||||
"add.vendorHint.existing": "",
|
||||
"add.vendorHint.new": "",
|
||||
"add.vendorHint.optional": "",
|
||||
"add.yourCatalog": "",
|
||||
"buttons.archive": "Αρχειοθέτηση",
|
||||
"buttons.cancel": "Ακύρωση",
|
||||
"buttons.clear": "Εκκαθάριση",
|
||||
"buttons.close": "",
|
||||
"buttons.delete": "Διαγραφή",
|
||||
"buttons.edit": "Τροποποίηση",
|
||||
"buttons.filter": "Φιλτράρισμα",
|
||||
"buttons.save": "Αποθήκευση",
|
||||
"buttons.showArchived": "Εμφάνιση Αρχειοθετημένων",
|
||||
"buttons.unArchive": "Επαναφορά Αρχειοθετημένου",
|
||||
"common.decrement": "",
|
||||
"common.increment": "",
|
||||
"common.remove": "",
|
||||
"common.search": "",
|
||||
"dashboard.addFieldHint": "",
|
||||
"dashboard.dashboard": "",
|
||||
"dashboard.deleteGroup": "",
|
||||
"dashboard.dragHint": "",
|
||||
"dashboard.dropHere": "",
|
||||
"dashboard.emptyHelp": "",
|
||||
"dashboard.errorEmptyName": "",
|
||||
"dashboard.errorExists": "",
|
||||
"dashboard.errorRename": "",
|
||||
"dashboard.lastUsed": "",
|
||||
"dashboard.newGroup": "",
|
||||
"dashboard.newGroupName": "",
|
||||
"dashboard.reorderGroup": "",
|
||||
"dashboard.unassigned": "",
|
||||
"datetime.done": "",
|
||||
"datetime.hour": "",
|
||||
"datetime.minute": "",
|
||||
"datetime.nextMonth": "",
|
||||
"datetime.now": "",
|
||||
"datetime.pick": "",
|
||||
"datetime.prevMonth": "",
|
||||
"datetime.time": "",
|
||||
"documentTitle.dashboard.list": "",
|
||||
"documentTitle.labels.list": "",
|
||||
"documentTitle.library.list": "",
|
||||
"documentTitle.settings.list": "",
|
||||
"filament.fields.addColor": "",
|
||||
"filament.fields.articleNumber": "Κωδικός Προϊόντος",
|
||||
"filament.fields.coaxial": "",
|
||||
"filament.fields.colorHex": "Χρώμα",
|
||||
"filament.fields.colorType": "",
|
||||
"filament.fields.comment": "Σχόλια",
|
||||
"filament.fields.density": "Πυκνότητα",
|
||||
"filament.fields.diameter": "Διάμετρος",
|
||||
"filament.fields.externalId": "",
|
||||
"filament.fields.id": "Α/Α",
|
||||
"filament.fields.longitudinal": "",
|
||||
"filament.fields.material": "Υλικό",
|
||||
"filament.fields.multiColor": "",
|
||||
"filament.fields.name": "Όνομα",
|
||||
"filament.fields.price": "Τιμή",
|
||||
"filament.fields.registered": "Ημερομηνία Εγγραφής",
|
||||
"filament.fields.removeColor": "",
|
||||
"filament.fields.settingsBedTemp": "Θερμοκρασία Κρεβατιού",
|
||||
"filament.fields.settingsExtruderTemp": "Θερμοκρασία Μύτης",
|
||||
"filament.fields.singleColor": "",
|
||||
"filament.fields.spoolWeight": "Βάρος Καρουλιού",
|
||||
"filament.fields.vendor": "Προμηθευτής",
|
||||
"filament.fields.weight": "Βάρος",
|
||||
"filament.fieldsHelp.articleNumber": "Π.χ. EAN, UPC, κλπ.",
|
||||
"filament.fieldsHelp.multiColorDirection": "",
|
||||
"filament.fieldsHelp.spoolWeight": "Το βάρος ενός άδειου καρουλιού. Χρησιμοποιείται για τον προσδιορισμό του μετρημένου βάρους ενός καρουλιού.",
|
||||
"filament.fieldsHelp.weight": "Το βάρος του νήματος ενός πλήρους καρουλιού (καθαρό βάρος). Αυτό δεν πρέπει να περιλαμβάνει το βάρος του ίδιου του καρουλιού, μόνο το βάρος του νήματος. Είναι αυτό που συνήθως αναγράφεται στη συσκευασία.",
|
||||
"filament.filament": "Νήματα",
|
||||
"footer.documentation": "",
|
||||
"footer.reportIssue": "",
|
||||
"help.help": "Βοήθεια",
|
||||
"inspector.addSpoolsOfThis": "",
|
||||
"inspector.adjustFailed": "",
|
||||
"inspector.adjustHelp": "",
|
||||
"inspector.adjustWeight": "",
|
||||
"inspector.apply": "",
|
||||
"inspector.applying": "",
|
||||
"inspector.colorHex": "",
|
||||
"inspector.consumeAmount": "",
|
||||
"inspector.delete.deleting": "",
|
||||
"inspector.delete.errorGone": "",
|
||||
"inspector.delete.errorSpoolsExist": "",
|
||||
"inspector.delete.errorUnknown": "",
|
||||
"inspector.delete.filament": "",
|
||||
"inspector.delete.filamentBlockedHint": "",
|
||||
"inspector.delete.filamentBlockedTitle": "",
|
||||
"inspector.delete.filamentBody": "",
|
||||
"inspector.delete.filamentDone": "",
|
||||
"inspector.delete.filamentTitle": "",
|
||||
"inspector.delete.spool": "",
|
||||
"inspector.delete.spoolBody": "",
|
||||
"inspector.delete.spoolDone": "",
|
||||
"inspector.delete.spoolRemaining": "",
|
||||
"inspector.delete.spoolTitle": "",
|
||||
"inspector.delete.vendor": "",
|
||||
"inspector.delete.vendorBody": "",
|
||||
"inspector.delete.vendorDone": "",
|
||||
"inspector.delete.vendorTitle": "",
|
||||
"inspector.duplicateFilament": "",
|
||||
"inspector.empty": "",
|
||||
"inspector.enterValidLength": "",
|
||||
"inspector.enterValidWeight": "",
|
||||
"inspector.loading": "",
|
||||
"inspector.manageExtraFields": "",
|
||||
"inspector.measuredHelp": "",
|
||||
"inspector.multi": "",
|
||||
"inspector.newGross": "",
|
||||
"inspector.noExtraFields": "",
|
||||
"inspector.notFound": "",
|
||||
"inspector.ofRemaining": "",
|
||||
"inspector.openFilament": "",
|
||||
"inspector.openLink": "",
|
||||
"inspector.openManufacturer": "",
|
||||
"inspector.specs": "",
|
||||
"inspector.spoolsCount": "",
|
||||
"inspector.spoolsTotalRemaining": "",
|
||||
"inspector.used": "",
|
||||
"kofi": "Φιλοδώρημα στο Ko-fi",
|
||||
"labels.addHead": "",
|
||||
"labels.addQr": "",
|
||||
"labels.addRect": "",
|
||||
"labels.addSwatch": "",
|
||||
"labels.addText": "",
|
||||
"labels.align": "",
|
||||
"labels.alignCenter": "",
|
||||
"labels.alignLeft": "",
|
||||
"labels.alignRight": "",
|
||||
"labels.blank": "",
|
||||
"labels.bold": "",
|
||||
"labels.canvasHint": "",
|
||||
"labels.centerLogo": "",
|
||||
"labels.chooseField": "",
|
||||
"labels.clearFill": "",
|
||||
"labels.copies": "",
|
||||
"labels.cornerRadiusMm": "",
|
||||
"labels.createFirst": "",
|
||||
"labels.cutGuides": "",
|
||||
"labels.deleteConfirm": "",
|
||||
"labels.deleteElement": "",
|
||||
"labels.designName": "",
|
||||
"labels.designerDesc": "",
|
||||
"labels.designerTitle": "",
|
||||
"labels.dpi": "",
|
||||
"labels.dpiHint": "",
|
||||
"labels.duplicate": "",
|
||||
"labels.fields.bedTemp": "",
|
||||
"labels.fields.diameterMm": "",
|
||||
"labels.fields.groupVendor": "",
|
||||
"labels.fields.initialG": "",
|
||||
"labels.fields.netWeightG": "",
|
||||
"labels.fields.remainingG": "",
|
||||
"labels.fill": "",
|
||||
"labels.fitWidth": "",
|
||||
"labels.fitWidthHint": "",
|
||||
"labels.fontMm": "",
|
||||
"labels.gridInfo": "",
|
||||
"labels.hMm": "",
|
||||
"labels.heightMm": "",
|
||||
"labels.hintNowrap": "",
|
||||
"labels.hintSwatch": "",
|
||||
"labels.hintWrap": "",
|
||||
"labels.imageDesc": "",
|
||||
"labels.imageZipNote": "",
|
||||
"labels.insertField": "",
|
||||
"labels.kind.qr": "",
|
||||
"labels.kind.rect": "",
|
||||
"labels.kind.swatch": "",
|
||||
"labels.kind.text": "",
|
||||
"labels.labelSize": "",
|
||||
"labels.labelType": "",
|
||||
"labels.layout": "",
|
||||
"labels.modeImage": "",
|
||||
"labels.modeLabel": "",
|
||||
"labels.modeSheet": "",
|
||||
"labels.new": "",
|
||||
"labels.newText": "",
|
||||
"labels.noDesignsOption": "",
|
||||
"labels.noFilaments": "",
|
||||
"labels.noSpools": "",
|
||||
"labels.onePerLabel": "",
|
||||
"labels.preparing": "",
|
||||
"labels.preview": "",
|
||||
"labels.previewWith": "",
|
||||
"labels.radiusMm": "",
|
||||
"labels.sampleData": "",
|
||||
"labels.saved": "",
|
||||
"labels.saving": "",
|
||||
"labels.searchFilaments": "",
|
||||
"labels.searchSpools": "",
|
||||
"labels.selectAllShort": "",
|
||||
"labels.selectAtLeastOne": "",
|
||||
"labels.selectAtLeastOneFilament": "",
|
||||
"labels.selectDesign": "",
|
||||
"labels.selectElement": "",
|
||||
"labels.selectNoneShort": "",
|
||||
"labels.selectRecentHint": "",
|
||||
"labels.selectRecentShort": "",
|
||||
"labels.showingFilament": "",
|
||||
"labels.showingReal": "",
|
||||
"labels.showingSpool": "",
|
||||
"labels.showingTags": "",
|
||||
"labels.sizeMm": "",
|
||||
"labels.skipHint": "",
|
||||
"labels.sortHint": "",
|
||||
"labels.sortId": "",
|
||||
"labels.sortNewest": "",
|
||||
"labels.stroke": "",
|
||||
"labels.strokeMm": "",
|
||||
"labels.tabDesign": "",
|
||||
"labels.tabPrint": "",
|
||||
"labels.textTemplate": "",
|
||||
"labels.typeFilament": "",
|
||||
"labels.typeHint": "",
|
||||
"labels.typeSpool": "",
|
||||
"labels.unknownFilament": "",
|
||||
"labels.wMm": "",
|
||||
"labels.widthMm": "",
|
||||
"labels.wrapText": "",
|
||||
"labels.xMm": "",
|
||||
"labels.yMm": "",
|
||||
"library.apiError": "",
|
||||
"library.collapseGroup": "",
|
||||
"library.emptyBody": "",
|
||||
"library.emptyFiltered": "",
|
||||
"library.emptyTitle": "",
|
||||
"library.expandGroup": "",
|
||||
"library.filterBy": "",
|
||||
"library.groupBy": "",
|
||||
"library.groupNone": "",
|
||||
"library.nUnused": "",
|
||||
"library.noLocation": "",
|
||||
"library.noValues": "",
|
||||
"library.openGroup": "",
|
||||
"library.openManufacturer": "",
|
||||
"library.section.extra": "",
|
||||
"library.section.filament": "",
|
||||
"library.section.spool": "",
|
||||
"library.section.vendor": "",
|
||||
"library.showMore": "",
|
||||
"library.sort.nozzle": "",
|
||||
"library.sortBy": "",
|
||||
"library.unassigned": "",
|
||||
"library.unitGroups": "",
|
||||
"library.unitSpools": "",
|
||||
"library.unused": "",
|
||||
"library.unusedGroup": "",
|
||||
"library.unusedGroupMixed": "",
|
||||
"library.unusedSub": "",
|
||||
"library.unusedSubMixed": "",
|
||||
"library.used": "",
|
||||
"library.usedAgo": "",
|
||||
"loading": "Φόρτωση",
|
||||
"nav.labels": "",
|
||||
"nav.library": "",
|
||||
"no": "Όχι",
|
||||
"notifications.error": "Λάθος (status code: {{statusCode}})",
|
||||
"notifications.saveSuccessful": "Επιτυχής Αποθήκευση!",
|
||||
"pagination.empty": "",
|
||||
"pagination.next": "",
|
||||
"pagination.pageSize": "",
|
||||
"pagination.perPage": "",
|
||||
"pagination.prev": "",
|
||||
"pagination.range": "",
|
||||
"printing.generic.columns": "Στήλες",
|
||||
"printing.generic.customSize": "Προσαρμοσμένο",
|
||||
"printing.generic.description": "Τροποποιήστε τις παρακάτω ρυθμίσεις για να αποκτήσετε την επιθυμητή διάταξη εκτύπωσης. Λάβετε υπόψη ότι οι εκτυπωτές και το λειτουργικό σας σύστημα ενδέχεται να εφαρμόζουν τα δικά τους περιθώρια και την δική τους μεγέθυνση, επομένως ίσως χρειαστεί να εκτελέσετε κάποιες δοκιμές πριν είναι όλα σωστά. Δοκιμάστε τις ρυθμίσεις σε ένα κομμάτι κανονικού χαρτιού πριν εκτυπώσετε στις πραγματικές ετικέτες.",
|
||||
"printing.generic.dimensions": "Διαστάσεις",
|
||||
"printing.generic.gridTooWide": "",
|
||||
"printing.generic.helpMargin": "Τα περιθώρια θα πρέπει να διαμορφωθούν ώστε να ταιριάζουν με το χαρτί ετικετών που χρησιμοποιείτε αλλά και τον εκτυπωτή σας. Η αλλαγή αυτών των περιθωρίων θα επηρεάσει το μέγεθος ολόκληρου του πλέγματος.",
|
||||
"printing.generic.helpPrinterMargin": "Το ασφαλές περιθώριο πρέπει να ρυθμιστεί στο πόσο κοντά στην άκρη του χαρτιού μπορεί να εκτυπώσει ο εκτυπωτής σας. Η αλλαγή αυτών δεν θα επηρεάσει ολόκληρο το πλέγμα.",
|
||||
"printing.generic.horizontalSpacing": "Οριζόντιο Διάστημα",
|
||||
"printing.generic.itemCopies": "",
|
||||
"printing.generic.marginBottom": "Κάτω Περιθώριο",
|
||||
"printing.generic.marginLeft": "Αριστερό περιθώριο",
|
||||
"printing.generic.marginRight": "Δεξιό Περιθώριο",
|
||||
@@ -49,25 +320,62 @@
|
||||
"printing.generic.printerMarginLeft": "Ασφαλές Περιθώριο Αριστερά",
|
||||
"printing.generic.printerMarginRight": "Ασφαλές Περιθώριο Δεξιά",
|
||||
"printing.generic.printerMarginTop": "Ασφαλές Περιθώριο Επάνω",
|
||||
"printing.generic.saveAsImage": "",
|
||||
"printing.generic.skipItems": "Παράληψη Αντικειμένων",
|
||||
"printing.generic.verticalSpacing": "Κάθετο Διάστημα",
|
||||
"printing.qrcode.button": "Tύπωση Κωδικών QR",
|
||||
"printing.qrcode.customUrl.caveat": "",
|
||||
"printing.qrcode.customUrl.hint": "",
|
||||
"printing.qrcode.customUrl.label": "",
|
||||
"printing.qrcode.useHTTPUrl.label": "",
|
||||
"printing.qrcode.useHTTPUrl.options.custom": "",
|
||||
"printing.qrcode.useHTTPUrl.options.default": "",
|
||||
"printing.qrcode.useHTTPUrl.options.url": "",
|
||||
"printing.qrcode.useHTTPUrl.preview": "",
|
||||
"printing.qrcode.useHTTPUrl.tooltip": "",
|
||||
"printing.spoolSelect.selectedTotal_one": "{{count}} καρούλι έχει επιλεγεί",
|
||||
"printing.spoolSelect.selectedTotal_other": "{{count}} καρούλια έχουν επιλεγεί",
|
||||
"scanner.description": "Σκάναρε τον Spoolman κωδικό QR για να δεις πληροφορίες για το νήμα.",
|
||||
"scanner.error.inUse": "",
|
||||
"scanner.error.insecureContext": "Η σελίδα δεν υποστηρίζεται μέσω HTTPS.",
|
||||
"scanner.error.notAllowed": "Δεν έχετε επιτρέψει την πρόσβαση στην κάμερα.",
|
||||
"scanner.error.notFound": "Δεν βρέθηκε κάμερα.",
|
||||
"scanner.error.streamApiNotSupported": "Αυτός ο browser δεν υποστηρίζει το MediaStream API.",
|
||||
"scanner.error.unknown": "Προέκυψε άγνωστο σφάλμα. ({{error}})",
|
||||
"scanner.starting": "",
|
||||
"scanner.title": "Αναγνώστης κωδικού QR",
|
||||
"search.colorHint": "",
|
||||
"search.noResults": "",
|
||||
"search.searching": "",
|
||||
"search.section.filaments": "",
|
||||
"search.section.spools": "",
|
||||
"search.section.vendors": "",
|
||||
"search.threshold": "",
|
||||
"search.unknownFilament": "",
|
||||
"settings.appearance.tab": "",
|
||||
"settings.appearance.theme.dark": "",
|
||||
"settings.appearance.theme.desc": "",
|
||||
"settings.appearance.theme.label": "",
|
||||
"settings.appearance.theme.light": "",
|
||||
"settings.appearance.theme.system": "",
|
||||
"settings.extraFields.addChoice": "",
|
||||
"settings.extraFields.addChoicesFirst": "",
|
||||
"settings.extraFields.addEntityField": "",
|
||||
"settings.extraFields.booleanFalse": "Τιμή για ένα πρόσθετο πεδίο boolean Λανθασμένο",
|
||||
"settings.extraFields.booleanTrue": "Τιμή για ένα πρόσθετο πεδίο boolean Αληθές",
|
||||
"settings.extraFields.deleteConfirm": "Διαγραφή πεδίου {{name}};",
|
||||
"settings.extraFields.description.intro": "Εδώ μπορείτε να προσθέσετε επιπλέον προσαρμοσμένα πεδία στις οντότητες σας.",
|
||||
"settings.extraFields.description.constraints": "Μόλις προστεθεί ένα πεδίο, δεν μπορείτε να αλλάξετε το κλειδί ή τον τύπο του και για στα πεδία τύπου επιλογής δεν μπορείτε να αφαιρέσετε επιλογές ή να αλλάξετε την κατάσταση πολλαπλών επιλογών. Εάν καταργήσετε ένα πεδίο, τα συσχετισμένα δεδομένα για όλες τις οντότητες θα διαγραφούν.",
|
||||
"settings.extraFields.description.intro": "Εδώ μπορείτε να προσθέσετε επιπλέον προσαρμοσμένα πεδία στις οντότητες σας.",
|
||||
"settings.extraFields.description.keyUsage": "Το κλειδί είναι πώς τα άλλα προγράμματα διαβάζουν/εγγράφουν τα δεδομένα, οπότε αν το προσαρμοσμένο πεδίο σας υποτίθεται ότι ενσωματώνεται με ένα πρόγραμμα τρίτου κατασκευαστή, φροντίστε να το ρυθμίσετε σωστά. Η προεπιλεγμένη τιμή εφαρμόζεται μόνο σε νέα στοιχεία.",
|
||||
"settings.extraFields.description.tableViews": "Τα πρόσθετα πεδία δεν μπορούν να ταξινομηθούν ή να φιλτραριστούν στις προβολές πίνακα.",
|
||||
"settings.extraFields.editorEdit": "",
|
||||
"settings.extraFields.editorNew": "",
|
||||
"settings.extraFields.errors.choiceNeeded": "",
|
||||
"settings.extraFields.errors.choicesRemoved": "",
|
||||
"settings.extraFields.errors.deleteFailed": "",
|
||||
"settings.extraFields.errors.keyFormat": "",
|
||||
"settings.extraFields.errors.nameRequired": "",
|
||||
"settings.extraFields.errors.saveFailed": "",
|
||||
"settings.extraFields.fieldType.boolean": "Πρόσθετο πεδίο τύπου \"Boolean\", Ναι/Όχι",
|
||||
"settings.extraFields.fieldType.choice": "\"Choice\" πληκτρολογήστε επιπλέον πεδίο, οι χρήστες μπορούν να επιλέξουν από μια λίστα τιμών",
|
||||
"settings.extraFields.fieldType.datetime": "Πληκτρολογήστε επιπλέον πεδίο \"Date+Time\"",
|
||||
@@ -76,7 +384,13 @@
|
||||
"settings.extraFields.fieldType.integer": "\"Integer\" πληκτρολογήστε επιπλέον πεδίο, ακέραιο αριθμό χωρίς δεκαδικούς αριθμούς",
|
||||
"settings.extraFields.fieldType.integerRange": "\"Integer Range\" πληκτρολογήστε επιπλέον πεδίο, ένα εύρος δύο ακέραιων αριθμών χωρίς δεκαδικoύς αριθμούς",
|
||||
"settings.extraFields.fieldType.text": "Πληκτρολογήστε επιπλέον πεδίο \"Text\".",
|
||||
"settings.extraFields.max": "",
|
||||
"settings.extraFields.min": "",
|
||||
"settings.extraFields.multiSuffix": "",
|
||||
"settings.extraFields.multiple": "",
|
||||
"settings.extraFields.namePlaceholder": "",
|
||||
"settings.extraFields.nonUniqueKeyError": "Το κλειδί πρέπει να είναι μοναδικό.",
|
||||
"settings.extraFields.none": "",
|
||||
"settings.extraFields.params.choices": "Επιλογές",
|
||||
"settings.extraFields.params.defaultValue": "Προεπιλεγμένη τιμή",
|
||||
"settings.extraFields.params.fieldType": "Τύπος",
|
||||
@@ -84,10 +398,21 @@
|
||||
"settings.extraFields.params.name": "Όνομα",
|
||||
"settings.extraFields.params.order": "Σειρά",
|
||||
"settings.extraFields.params.unit": "Μονάδα",
|
||||
"settings.extraFields.saveField": "",
|
||||
"settings.extraFields.tab": "Επιπλέον Πεδία",
|
||||
"settings.general.baseUrl.label": "",
|
||||
"settings.general.baseUrl.tooltip": "",
|
||||
"settings.general.currency.desc": "",
|
||||
"settings.general.currency.label": "Ετικέτα για τη ρύθμιση του νομίσματος",
|
||||
"settings.general.roundPrices.label": "",
|
||||
"settings.general.roundPrices.tooltip": "",
|
||||
"settings.general.tab": "Γενικές",
|
||||
"settings.header": "Ρυθμίσεις",
|
||||
"settings.language.desc": "",
|
||||
"settings.language.label": "",
|
||||
"settings.library.lowThreshold.desc": "",
|
||||
"settings.library.lowThreshold.label": "",
|
||||
"settings.library.tab": "",
|
||||
"spool.fields.archived": "Αρχειοθετημένο",
|
||||
"spool.fields.comment": "Σχόλια",
|
||||
"spool.fields.filament": "Νήμα",
|
||||
@@ -108,11 +433,25 @@
|
||||
"spool.fieldsHelp.price": "Τιμή πλήρους καρουλιού. Εάν δεν οριστεί, η τιμή του νήματος θα θεωρηθεί αντ' αυτού.",
|
||||
"spool.fieldsHelp.remainingWeight": "Πόσο νήμα έχει απομείνει στο καρούλι. Για ένα καινούργιο καρούλι αυτό πρέπει να συμπίπτει με το βάρος του καρουλιού.",
|
||||
"spool.fieldsHelp.usedWeight": "Πόσο νήμα έχει χρησιμοποιηθεί από το καρούλι. Σε ένα καινούργιο καρούλι θα πρέπει να έχουν χρησιμοποιηθεί 0g.",
|
||||
"spool.form.measurementType.length": "",
|
||||
"spool.form.measurementType.weight": "",
|
||||
"spool.spool": "Καρούλια",
|
||||
"topbar.addSpools": "",
|
||||
"topbar.searchPlaceholder": "",
|
||||
"unknown": "Άγνωστος",
|
||||
"validation.hexDigits": "",
|
||||
"validation.maxChars": "",
|
||||
"validation.mustBeGt": "",
|
||||
"validation.mustBeMax": "",
|
||||
"validation.mustBeMin": "",
|
||||
"validation.mustBeNumber": "",
|
||||
"validation.required": "",
|
||||
"vendor.fields.comment": "Σχόλια",
|
||||
"vendor.fields.emptySpoolWeight": "",
|
||||
"vendor.fields.externalId": "",
|
||||
"vendor.fields.id": "Α/Α",
|
||||
"vendor.fields.name": "Όνομα",
|
||||
"vendor.fields.registered": "Ημερομηνία Εγγραφής",
|
||||
"vendor.fieldsHelp.emptySpoolWeight": "",
|
||||
"yes": "Ναι"
|
||||
}
|
||||
@@ -9,14 +9,20 @@
|
||||
"add.count": "Count",
|
||||
"add.createNew": "Create a new filament",
|
||||
"add.createNewSub": "not in your catalog or {{name}}",
|
||||
"add.duplicate": "duplicate",
|
||||
"add.duplicateTitle": "New filament · copy of “{{name}}”",
|
||||
"add.duplicateNote": "Specs, manufacturer and price were copied over. Give it a new name and color.",
|
||||
"add.duplicateRename": "Still named like the original — rename it to tell them apart.",
|
||||
"add.dbUnavailable": "{{name}} unavailable",
|
||||
"add.manufacturerPlaceholder": "e.g. Polymaker",
|
||||
"add.filamentNamePlaceholder": "e.g. PolyTerra Matte Sage",
|
||||
"add.nameHint": "Include the color — it’s what tells your filaments apart.",
|
||||
"add.fill.full": "Full",
|
||||
"add.fillLevel": "Fill level",
|
||||
"add.importNote": "This filament will be added to your catalog when you add the spools.",
|
||||
"add.inCatalog": "in catalog",
|
||||
"add.locationPlaceholder": "e.g. Shelf A",
|
||||
"add.locationHint": "Where you physically keep the spool — a shelf, a box, or a printer. Leave it blank if you keep them all in one place.",
|
||||
"add.locationPlaceholder": "e.g. Shelf A, Dry box 2, Printer 1",
|
||||
"add.newFilament": "new filament",
|
||||
"add.newFilamentTitle": "New filament",
|
||||
"add.noCatalog": "No filaments in your catalog",
|
||||
@@ -24,7 +30,18 @@
|
||||
"add.pickColor": "Pick color",
|
||||
"add.searchPlaceholder": "Search your catalog and {{name}}...",
|
||||
"add.searching": "Searching...",
|
||||
"add.section.manufacturer": "Manufacturer",
|
||||
"add.section.manufacturerNote": "Who makes the filament. Added once, then reused for all their filaments.",
|
||||
"add.section.filament": "Filament",
|
||||
"add.section.filamentNote": "The product on the spool — one entry per color.",
|
||||
"add.section.spool": "Spool",
|
||||
"add.section.spoolNote": "The physical spools going into your inventory.",
|
||||
"add.section.spoolSharedNote": "Weight, spool weight and price are also saved as the new filament’s defaults.",
|
||||
"add.spoolWeightPreset.cardboard": "Cardboard {{weight}} g",
|
||||
"add.spoolWeightPreset.plastic": "Plastic {{weight}} g",
|
||||
"add.spoolWeightPresetsLead": "Start from a typical spool:",
|
||||
"add.step2": "Step 2 · spool details",
|
||||
"add.step2New": "Step 2 · filament & spool details",
|
||||
"add.summary_one": "{{count}} spool",
|
||||
"add.summary_other": "{{count}} spools",
|
||||
"add.typeToSearchAll": "Type to search thousands of filaments",
|
||||
@@ -33,7 +50,9 @@
|
||||
"add.vendorHint.existing": "Using existing manufacturer “{{name}}”",
|
||||
"add.vendorHint.new": "New manufacturer “{{name}}” will be created",
|
||||
"add.vendorHint.optional": "Optional — leave blank for no manufacturer",
|
||||
"add.weightPresets": "Common roll sizes",
|
||||
"add.yourCatalog": "Your catalog",
|
||||
"buttons.apply": "Apply",
|
||||
"buttons.archive": "Archive",
|
||||
"buttons.cancel": "Cancel",
|
||||
"buttons.clear": "Clear",
|
||||
@@ -43,11 +62,69 @@
|
||||
"buttons.filter": "Filter",
|
||||
"buttons.save": "Save",
|
||||
"buttons.showArchived": "Show Archived",
|
||||
"buttons.showLotNumbers": "Show lot numbers",
|
||||
"buttons.showNoSpools": "Show filaments with no spools",
|
||||
"buttons.unArchive": "Unarchive",
|
||||
"changeFilament.adoptWeight": "Set this spool’s full weight to {{full}}",
|
||||
"changeFilament.adoptWeightHelp": "It is recorded as {{current}}, from the filament it held before. Used weight ({{used}}) is kept either way, leaving {{remaining}}.",
|
||||
"changeFilament.action": "Change",
|
||||
"changeFilament.apply": "Change filament",
|
||||
"changeFilament.applying": "Changing...",
|
||||
"changeFilament.current": "current",
|
||||
"changeFilament.done": "Filament changed.",
|
||||
"changeFilament.failed": "Couldn’t change the filament.",
|
||||
"changeFilament.importNote": "This filament will be added to your catalog when you apply the change.",
|
||||
"changeFilament.intro": "Spool #{{id}} keeps its number, location, dates and usage history — only the filament it holds changes.",
|
||||
"changeFilament.newTag": "new",
|
||||
"changeFilament.next": "Change to",
|
||||
"changeFilament.now": "Currently",
|
||||
"changeFilament.pickBelow": "Pick a filament below",
|
||||
"changeFilament.title": "Change filament",
|
||||
"changeFilament.useExisting": "Pick an existing filament",
|
||||
"changeFilament.weightFollows": "This spool has no full weight of its own, so it takes the new filament’s: {{full}}, leaving {{remaining}} after the {{used}} already used.",
|
||||
"changeVendor.action": "Change",
|
||||
"changeVendor.apply": "Change manufacturer",
|
||||
"changeVendor.applying": "Changing...",
|
||||
"changeVendor.clearHint": "Leave this filament with no manufacturer",
|
||||
"changeVendor.create": "Create “{{name}}”",
|
||||
"changeVendor.createHint": "Not one of your manufacturers yet — it will be added",
|
||||
"changeVendor.current": "current",
|
||||
"changeVendor.done": "Manufacturer changed.",
|
||||
"changeVendor.emptySpool": "Empty spool {{value}}",
|
||||
"changeVendor.failed": "Couldn’t change the manufacturer.",
|
||||
"changeVendor.intro": "“{{name}}” keeps its spools, its specs and its history — only the manufacturer it is filed under changes.",
|
||||
"changeVendor.next": "Change to",
|
||||
"changeVendor.noEmptySpool": "No empty spool weight",
|
||||
"changeVendor.noMatches": "No manufacturer matches",
|
||||
"changeVendor.none": "No manufacturers yet",
|
||||
"changeVendor.noneNote": "Filed under no brand",
|
||||
"changeVendor.now": "Currently",
|
||||
"changeVendor.pickBelow": "Pick a manufacturer below",
|
||||
"changeVendor.searchPlaceholder": "Search or name a manufacturer",
|
||||
"changeVendor.tareFollows": "This filament has no empty spool weight of its own, so it takes its manufacturer’s. After the change that is {{value}}, which is what a spool of it weighs empty when you measure one.",
|
||||
"changeVendor.tareGone": "This filament has no empty spool weight of its own and takes its manufacturer’s {{current}}. After the change there is none to take, until you give the filament one.",
|
||||
"changeVendor.title": "Change manufacturer",
|
||||
"changeVendor.willBeCreated": "Will be created",
|
||||
"common.decrement": "Decrement",
|
||||
"common.increment": "Increment",
|
||||
"common.remove": "Remove",
|
||||
"common.search": "Search",
|
||||
"dashboard.addFieldHint": "Add a text or choice field to spools in Settings to group by it too",
|
||||
"dashboard.dashboard": "Dashboard",
|
||||
"dashboard.deleteGroup": "Delete group",
|
||||
"dashboard.dragHint": "Drag a spool to another card to change its {{field}}, or within a card to reorder",
|
||||
"dashboard.dropHere": "drop spools here",
|
||||
"dashboard.emptyHelp": "This page groups your spools by a field of your choosing, add some spools to get started!",
|
||||
"dashboard.errorEmptyName": "Name cannot be empty",
|
||||
"dashboard.errorExists": "A group with that name already exists",
|
||||
"dashboard.errorRename": "Failed to rename group",
|
||||
"dashboard.lastUsed": "Last used {{time}} ago",
|
||||
"dashboard.newGroup": "New group",
|
||||
"dashboard.newGroupName": "New group {{n}}",
|
||||
"dashboard.reorderGroup": "Drag to reorder group",
|
||||
"dashboard.spoolCount_one": "{{count}} spool",
|
||||
"dashboard.spoolCount_other": "{{count}} spools",
|
||||
"dashboard.unassigned": "Unassigned",
|
||||
"datetime.done": "Done",
|
||||
"datetime.hour": "Hour",
|
||||
"datetime.minute": "Minute",
|
||||
@@ -56,9 +133,9 @@
|
||||
"datetime.pick": "Pick date and time",
|
||||
"datetime.prevMonth": "Previous month",
|
||||
"datetime.time": "Time",
|
||||
"documentTitle.dashboard.list": "Dashboard | Spoolman",
|
||||
"documentTitle.labels.list": "Labels | Spoolman",
|
||||
"documentTitle.library.list": "Library | Spoolman",
|
||||
"documentTitle.locations.list": "Locations | Spoolman",
|
||||
"documentTitle.settings.list": "Settings | Spoolman",
|
||||
"filament.fields.addColor": "Add color",
|
||||
"filament.fields.articleNumber": "Article Number",
|
||||
@@ -74,6 +151,7 @@
|
||||
"filament.fields.material": "Material",
|
||||
"filament.fields.multiColor": "Multi",
|
||||
"filament.fields.name": "Name",
|
||||
"filament.fields.opacity": "Opacity",
|
||||
"filament.fields.price": "Price",
|
||||
"filament.fields.registered": "Registered",
|
||||
"filament.fields.removeColor": "Remove color",
|
||||
@@ -85,11 +163,12 @@
|
||||
"filament.fields.weight": "Weight",
|
||||
"filament.fieldsHelp.articleNumber": "E.g. EAN, UPC, etc.",
|
||||
"filament.fieldsHelp.multiColorDirection": "Filaments can have multiple colors in two ways: either through coextrusion, like dual-color filaments with consistent multi-colors, or through longitudinal color changes, like gradient filaments that shift colors along the spool.",
|
||||
"filament.fieldsHelp.spoolWeight": "The weight of an empty spool. Used to determine measured weight of a spool.",
|
||||
"filament.fieldsHelp.spoolWeight": "The weight of an empty spool. Used to determine measured weight of a spool. Not sure? Cardboard spools usually weigh 130–150 g and plastic ones 180–250 g — for an exact number, put the spool on a scale once it runs out.",
|
||||
"filament.fieldsHelp.weight": "The filament weight of a full spool (net weight). This should not include the weight of the spool itself, only the filament. It is what is usually written on the packaging.",
|
||||
"filament.filament": "Filaments",
|
||||
"footer.documentation": "Documentation",
|
||||
"footer.reportIssue": "Report an issue",
|
||||
"footer.updateAvailable": "v{{version}} available",
|
||||
"help.help": "Help",
|
||||
"inspector.addSpoolsOfThis": "Add spools of this",
|
||||
"inspector.adjustFailed": "Failed to adjust weight.",
|
||||
@@ -99,24 +178,56 @@
|
||||
"inspector.applying": "Applying...",
|
||||
"inspector.colorHex": "Color hex",
|
||||
"inspector.consumeAmount": "Consume amount:",
|
||||
"inspector.delete.deleting": "Deleting...",
|
||||
"inspector.delete.errorGone": "It had already been deleted.",
|
||||
"inspector.delete.errorSpoolsExist": "Can't delete this filament — spools still use it.",
|
||||
"inspector.delete.errorUnknown": "Delete failed. See the server logs for details.",
|
||||
"inspector.delete.filament": "Delete filament",
|
||||
"inspector.delete.filamentBlockedHint": "Delete those spools first. Archiving them is not enough.",
|
||||
"inspector.delete.filamentBlockedTitle": "This filament can't be deleted",
|
||||
"inspector.delete.filamentBlocked_one": "{{count}} spool still uses “{{name}}”, including archived ones.",
|
||||
"inspector.delete.filamentBlocked_other": "{{count}} spools still use “{{name}}”, including archived ones.",
|
||||
"inspector.delete.filamentBody": "“{{name}}” will be removed from your catalog. This cannot be undone.",
|
||||
"inspector.delete.filamentDone": "Filament deleted.",
|
||||
"inspector.delete.filamentTitle": "Delete this filament?",
|
||||
"inspector.delete.spool": "Delete spool",
|
||||
"inspector.delete.spoolBody": "Spool #{{id}} of “{{name}}” will be removed, along with its usage history. This cannot be undone.",
|
||||
"inspector.delete.spoolDone": "Spool deleted.",
|
||||
"inspector.delete.spoolRemaining": "It still has {{weight}} of filament left. Archive it instead if you only want it out of the way.",
|
||||
"inspector.delete.spoolTitle": "Delete this spool?",
|
||||
"inspector.delete.vendor": "Delete manufacturer",
|
||||
"inspector.delete.vendorBody": "“{{name}}” will be removed. This cannot be undone.",
|
||||
"inspector.delete.vendorDone": "Manufacturer deleted.",
|
||||
"inspector.delete.vendorOrphans_one": "Its {{count}} filament is kept, but is left without a manufacturer.",
|
||||
"inspector.delete.vendorOrphans_other": "Its {{count}} filaments are kept, but are left without a manufacturer.",
|
||||
"inspector.delete.vendorTitle": "Delete this manufacturer?",
|
||||
"inspector.duplicateFilament": "Duplicate",
|
||||
"inspector.empty": "Select a spool, filament or manufacturer from the list to see its details here.",
|
||||
"inspector.loading": "Loading...",
|
||||
"inspector.notFound": "This item could not be found. It may have been deleted.",
|
||||
"inspector.enterValidLength": "Enter a valid length.",
|
||||
"inspector.enterValidWeight": "Enter a valid weight.",
|
||||
"inspector.filamentDefault": "{{price}} · filament default",
|
||||
"inspector.defaultFrom.filament": "{{value}} · filament default",
|
||||
"inspector.defaultFrom.manufacturer": "{{value}} · manufacturer default",
|
||||
"inspector.override.byFilament": "Overridden by this filament · {{value}}",
|
||||
"inspector.override.bySpool": "Overridden by this spool · {{value}}",
|
||||
"inspector.override.overridesFilament": "Overrides filament · {{value}}",
|
||||
"inspector.override.overridesManufacturer": "Overrides manufacturer · {{value}}",
|
||||
"inspector.measuredHelp": "Total weight of the spool + remaining filament, as read from a scale.",
|
||||
"inspector.manageExtraFields": "Manage fields",
|
||||
"inspector.multi": "multi ×{{count}}",
|
||||
"inspector.newGross": "New gross weight:",
|
||||
"inspector.noExtraFields": "None yet — add your own fields to track anything Spoolman doesn't.",
|
||||
"inspector.ofRemaining": "of {{weight}} remaining · {{length}} m",
|
||||
"inspector.openFilament": "Open filament",
|
||||
"inspector.openLink": "Open {{url}} in a new tab",
|
||||
"inspector.openManufacturer": "Open manufacturer",
|
||||
"inspector.specs": "Specs — edit in place",
|
||||
"inspector.spoolsCount": "Spools · {{count}}",
|
||||
"inspector.spoolsTotalRemaining": "{{weight}} total",
|
||||
"inspector.used": "used",
|
||||
"inspector.vendorSub_one": "{{count}} filament",
|
||||
"inspector.vendorSub_other": "{{count}} filaments",
|
||||
"kofi": "Tip me on Ko-fi",
|
||||
"labels.addHead": "Add",
|
||||
"labels.addQr": "QR code",
|
||||
"labels.addRect": "Rectangle",
|
||||
@@ -145,6 +256,11 @@
|
||||
"labels.dpi": "Resolution",
|
||||
"labels.dpiHint": "Match your printer to keep small labels sharp: 203 dpi for most thermal label printers, 300 or more for laser and inkjet.",
|
||||
"labels.duplicate": "Duplicate",
|
||||
"labels.exportDescAml": "Saves one .aml label file per selected label, each {{w}}×{{h}} mm. Opens in the LPAPI-based apps that ship with most thermal label printers, which read the physical size from the file.",
|
||||
"labels.exportDescPng": "Saves one PNG image per selected label, each {{w}}×{{h}} mm.",
|
||||
"labels.exportFormat": "File format",
|
||||
"labels.exportFormatOptions.aml": "AML label file",
|
||||
"labels.exportFormatOptions.png": "PNG image",
|
||||
"labels.fields.bedTemp": "Bed temp",
|
||||
"labels.fields.diameterMm": "Diameter (mm)",
|
||||
"labels.fields.groupVendor": "Vendor",
|
||||
@@ -163,7 +279,6 @@
|
||||
"labels.hintNowrap": "Text stays on one line; anything past the width is clipped.",
|
||||
"labels.hintSwatch": "Filled with the spool's filament color(s) at print time.",
|
||||
"labels.hintWrap": "Wrap a field to hide it when empty:",
|
||||
"labels.imageDesc": "Saves one PNG per selected spool instead of printing, each {{w}}×{{h}} mm.",
|
||||
"labels.imageZipNote": "More than {{threshold}} labels are delivered as a single zip file.",
|
||||
"labels.insertField": "Insert field",
|
||||
"labels.kind.qr": "QR code",
|
||||
@@ -173,7 +288,7 @@
|
||||
"labels.labelSize": "Label size",
|
||||
"labels.labelType": "Label type",
|
||||
"labels.layout": "Layout",
|
||||
"labels.modeImage": "Image files",
|
||||
"labels.modeImage": "Files",
|
||||
"labels.modeLabel": "Label printer",
|
||||
"labels.modeSheet": "Sheet (tile)",
|
||||
"labels.new": "New",
|
||||
@@ -189,6 +304,7 @@
|
||||
"labels.printN_other": "Print {{count}} labels",
|
||||
"labels.radiusMm": "Radius",
|
||||
"labels.sampleData": "Sample data",
|
||||
"labels.saveAsFormat": "Save as {{format}}",
|
||||
"labels.saved": "Saved",
|
||||
"labels.saving": "Saving...",
|
||||
"labels.searchFilaments": "Search filaments...",
|
||||
@@ -208,6 +324,7 @@
|
||||
"labels.showingSpool": "Showing spool #{{id}}",
|
||||
"labels.showingTags": "Fields show as tags until you pick a spool above.",
|
||||
"labels.sizeMm": "Size",
|
||||
"labels.skipHint": "Skip Items leaves that many cells blank before the first label, letting you reuse a partly used sheet: count the labels already peeled off, left to right from the top.",
|
||||
"labels.stroke": "Stroke",
|
||||
"labels.strokeMm": "Stroke",
|
||||
"labels.tabDesign": "Design",
|
||||
@@ -223,16 +340,46 @@
|
||||
"labels.xMm": "X",
|
||||
"labels.yMm": "Y",
|
||||
"library.apiError": "Couldn't reach the Spoolman API. Is the backend running?",
|
||||
"library.collapseGroup": "Hide these spools",
|
||||
"library.dateFilter.ago": "{{span}} ago",
|
||||
"library.dateFilter.between": "{{from}} – {{to}}",
|
||||
"library.dateFilter.customRange": "Custom range",
|
||||
"library.dateFilter.from": "From",
|
||||
"library.dateFilter.last": "Last {{span}}",
|
||||
"library.dateFilter.never": "Never",
|
||||
"library.dateFilter.olderThan": "Older than {{span}}",
|
||||
"library.dateFilter.since": "Since {{date}}",
|
||||
"library.dateFilter.to": "To (optional)",
|
||||
"library.dateFilter.until": "Until {{date}}",
|
||||
"library.catalog.allFilaments": "All filaments",
|
||||
"library.catalog.allManufacturers": "All manufacturers",
|
||||
"library.catalog.backToSpools": "Back to spools",
|
||||
"library.catalog.filamentCount_one": "{{count}} filament",
|
||||
"library.catalog.filamentCount_other": "{{count}} filaments",
|
||||
"library.catalog.manufacturerCount_one": "{{count}} manufacturer",
|
||||
"library.catalog.manufacturerCount_other": "{{count}} manufacturers",
|
||||
"library.catalog.noManufacturer": "No manufacturer",
|
||||
"library.catalog.notSet": "Not set",
|
||||
"library.catalog.switchList": "Switch list",
|
||||
"library.catalog.unitFilaments": "filaments",
|
||||
"library.catalog.unitManufacturers": "manufacturers",
|
||||
"library.emptyFiltered": "No {{unit}} match the current filters.",
|
||||
"library.emptyTitle": "No spools yet",
|
||||
"library.emptyBody": "Add your first spool to start tracking your filament.",
|
||||
"library.expandGroup": "Show these spools",
|
||||
"library.filterBy": "Filter by",
|
||||
"library.groupBy": "Group",
|
||||
"library.groupNone": "None (flat)",
|
||||
"library.inUse": "in use",
|
||||
"library.groupSpools_one": "{{count}} spool",
|
||||
"library.groupSpools_other": "{{count}} spools",
|
||||
"library.nUnused": "×{{count}} unused",
|
||||
"library.noLocation": "no location",
|
||||
"library.noSpools": "No spools",
|
||||
"library.noValues": "No values",
|
||||
"library.openGroup": "Open {{name}}",
|
||||
"library.openManufacturer": "Open manufacturer {{name}}",
|
||||
"library.resizeList": "Resize the list (double-click to reset)",
|
||||
"library.reverseSort": "Reverse the sort order",
|
||||
"library.section.extra": "Extra fields",
|
||||
"library.section.filament": "Filament",
|
||||
"library.section.spool": "Spool",
|
||||
@@ -248,23 +395,11 @@
|
||||
"library.unusedGroupMixed": "{{count}} unused",
|
||||
"library.unusedSub": "{{weight}} g each · {{location}}",
|
||||
"library.unusedSubMixed": "{{location}}",
|
||||
"library.used": "used",
|
||||
"library.usedAgo": "used {{time}} ago",
|
||||
"library.viewMenu.browse": "Browse",
|
||||
"library.views": "Library views",
|
||||
"loading": "Loading",
|
||||
"locations.dragHint": "Drag spools between locations to reassign them, or within a location to reorder them",
|
||||
"locations.dropHere": "drop spools here",
|
||||
"locations.errorEmpty": "Location name cannot be empty",
|
||||
"locations.errorExists": "A location with that name already exists",
|
||||
"locations.errorRename": "Failed to rename location",
|
||||
"locations.lastUsed": "Last used {{time}} ago",
|
||||
"locations.locations": "Locations",
|
||||
"locations.newLocation": "New Location",
|
||||
"locations.newShelf": "New location {{n}}",
|
||||
"locations.noLocation": "No Location",
|
||||
"locations.deleteLocation": "Delete location",
|
||||
"locations.noLocationsHelp": "This page lets you organize your spools in locations, add some spools to get started!",
|
||||
"locations.reorderLocation": "Drag to reorder location",
|
||||
"locations.spoolCount_one": "{{count}} spool",
|
||||
"locations.spoolCount_other": "{{count}} spools",
|
||||
"nav.labels": "Labels",
|
||||
"nav.library": "Library",
|
||||
"no": "No",
|
||||
@@ -294,11 +429,11 @@
|
||||
"printing.generic.printerMarginLeft": "Safe-Zone Left",
|
||||
"printing.generic.printerMarginRight": "Safe-Zone Right",
|
||||
"printing.generic.printerMarginTop": "Safe-Zone Top",
|
||||
"printing.generic.saveAsImage": "Save as Image",
|
||||
"printing.generic.skipItems": "Skip Items",
|
||||
"printing.generic.verticalSpacing": "Vertical Spacing",
|
||||
"printing.qrcode.button": "Print Labels",
|
||||
"printing.qrcode.customUrl.caveat": "A custom URL won't scan back into Spoolman — use it to point a printed QR at an external app or a different host.",
|
||||
"printing.qrcode.customUrl.fieldsHint": "Label fields work too, for example",
|
||||
"printing.qrcode.customUrl.hint": "Insert the spool id anywhere with the placeholder",
|
||||
"printing.qrcode.customUrl.label": "Custom URL template",
|
||||
"printing.qrcode.useHTTPUrl.label": "QR code link",
|
||||
@@ -309,6 +444,8 @@
|
||||
"printing.qrcode.useHTTPUrl.tooltip": "Default encodes a Spoolman-only code that only Spoolman's own scanner can read. URL encodes a normal web link that any scanner can open, built from the base URL in settings — or this site's address if that's unset.",
|
||||
"printing.spoolSelect.selectedTotal_one": "{{count}} spool selected",
|
||||
"printing.spoolSelect.selectedTotal_other": "{{count}} spools selected",
|
||||
"scanner.camera": "Camera",
|
||||
"scanner.cameraNumbered": "Camera {{number}}",
|
||||
"scanner.description": "Scan a Spoolman QR code to view details about the spool.",
|
||||
"scanner.error.insecureContext": "The page is not served over HTTPS.",
|
||||
"scanner.error.notAllowed": "You have not allowed access to the camera.",
|
||||
@@ -319,6 +456,9 @@
|
||||
"scanner.starting": "Starting camera...",
|
||||
"scanner.title": "QR Code Scanner",
|
||||
"search.colorHint": "Color names must be entered in English.",
|
||||
"search.browseAll": "Browse all",
|
||||
"search.hint": "Search spools, filaments and manufacturers by name, color, material or any field.",
|
||||
"search.moreSpools": "+{{count}} more",
|
||||
"search.noResults": "No matches found",
|
||||
"search.searching": "Searching...",
|
||||
"search.section.filaments": "Filaments",
|
||||
@@ -372,6 +512,7 @@
|
||||
"settings.extraFields.params.name": "Name",
|
||||
"settings.extraFields.params.order": "Order",
|
||||
"settings.extraFields.params.unit": "Unit",
|
||||
"settings.extraFields.reorderChoice": "Drag, or use the arrow keys, to reorder this choice.",
|
||||
"settings.extraFields.saveField": "Save field",
|
||||
"settings.extraFields.tab": "Extra Fields",
|
||||
"settings.general.baseUrl.label": "Base URL",
|
||||
@@ -387,6 +528,21 @@
|
||||
"settings.library.lowThreshold.desc": "Spools at or below this weight are flagged red (this browser only)",
|
||||
"settings.library.lowThreshold.label": "Low-stock threshold",
|
||||
"settings.library.tab": "Library behavior",
|
||||
"settings.scanner.autoNavigate.desc": "Automatically navigate in this web browser to a spool or filament that gets read by a tag reader.",
|
||||
"settings.scanner.autoNavigate.label": "Auto-navigate",
|
||||
"settings.scanner.docs": "How to set up a tag reader",
|
||||
"settings.scanner.lastSeen": "{{when}} ago",
|
||||
"settings.scanner.pair": "Pair by tapping",
|
||||
"settings.scanner.reader.anyDesc": "Scans from any reader open spools or filaments in this web browser. You can pair with a specific one if you want finer control. This is also the reader that will be used for adding new tags to spools and filaments.",
|
||||
"settings.scanner.reader.label": "Tag Reader",
|
||||
"settings.scanner.reader.pairedDesc": "Only scans from this reader open spools in this web browser.",
|
||||
"settings.scanner.recent": "Recent readers",
|
||||
"settings.scanner.recentNone": "No reader in memory, set up a tag reader then read any tag for it to appear here.",
|
||||
"settings.scanner.tab": "Tag Scanning",
|
||||
"settings.scanner.unpair": "Use any reader",
|
||||
"settings.scanner.use": "Use this one",
|
||||
"settings.scanner.waiting": "Tap any tag on the reader you want...",
|
||||
"sponsor": "Sponsor me on GitHub",
|
||||
"spool.fields.archived": "Archived",
|
||||
"spool.fields.comment": "Comment",
|
||||
"spool.fields.filament": "Filament",
|
||||
@@ -400,16 +556,71 @@
|
||||
"spool.fields.price": "Price",
|
||||
"spool.fields.registered": "Registered",
|
||||
"spool.fields.remainingWeight": "Remaining Weight",
|
||||
"spool.fields.spoolWeight": "Spool Weight",
|
||||
"spool.fields.usedWeight": "Used Weight",
|
||||
"spool.fieldsHelp.location": "Where the spool is located if you have multiple locations where you store your spools.",
|
||||
"spool.fields.weight": "Weight",
|
||||
"spool.fieldsHelp.location": "Where you physically keep this spool — a shelf, a drawer, a dry box, or the printer it is loaded in. Spools are grouped by location in your library, so it is how you find one again.",
|
||||
"spool.fieldsHelp.lotNr": "Manufacturer's lot number. Can be used to ensure a print has consistent color if multiple spools are used.",
|
||||
"spool.fieldsHelp.measuredWeight": "How much the filament and spool weigh.",
|
||||
"spool.fieldsHelp.price": "Price of a full spool. If not set, the price of the filament will be assumed instead.",
|
||||
"spool.fieldsHelp.remainingWeight": "How much filament is left on the spool. For a new spool this should match the spool weight.",
|
||||
"spool.fieldsHelp.spoolWeight": "What this spool weighs when empty. Leave it blank to follow the filament's spool weight, and set it when this particular spool differs — a respooled roll, or a cardboard core swapped for a plastic one. It is what gets subtracted from the reading when you adjust by measured weight, so a wrong one misstates how much filament is left.",
|
||||
"spool.fieldsHelp.usedWeight": "How much filament has been used from the spool. A new spool should have 0g used.",
|
||||
"spool.fieldsHelp.weight": "How much filament this spool held when full (net weight, not counting the spool itself). Leave it blank to follow the filament's weight, and set it when this particular spool differs — a partial roll, or the same filament bought on a larger one.",
|
||||
"spool.form.measurementType.length": "Length",
|
||||
"spool.form.measurementType.weight": "Weight",
|
||||
"spool.spool": "Spools",
|
||||
"tags.add": "Add tag",
|
||||
"tags.added": "Tag linked.",
|
||||
"tags.addedOn": "Added {{date}}",
|
||||
"tags.modal.alreadyHere": "This tag already identifies this spool.",
|
||||
"tags.modal.alreadyHereFilament": "This tag already identifies this filament.",
|
||||
"tags.modal.badUid": "A tag UID is hexadecimal, like 04A2B3C4.",
|
||||
"tags.modal.checking": "Checking...",
|
||||
"tags.modal.failed": "Could not link the tag.",
|
||||
"tags.modal.filamentNamed": "filament {{name}}",
|
||||
"tags.modal.free": "This tag is not linked to anything yet.",
|
||||
"tags.modal.intro": "Tapping this tag on a reader will then find spool #{{id}}.",
|
||||
"tags.modal.introFilament": "Tapping this tag on a reader will then find this filament.",
|
||||
"tags.modal.lastSeenOn": "{{reader}} last read {{uid}}.",
|
||||
"tags.modal.link": "Link tag",
|
||||
"tags.modal.linking": "Linking...",
|
||||
"tags.modal.move": "Move it here from #{{id}}",
|
||||
"tags.modal.moveFailed": "Could not move the tag. It may now be linked to neither spool — try linking it again.",
|
||||
"tags.modal.moveFailedFilament": "Could not move the tag. It may now be linked to nothing — try linking it again.",
|
||||
"tags.modal.moveHere": "Move it here",
|
||||
"tags.modal.moving": "Moving...",
|
||||
"tags.modal.phoneReading": "Hold the tag against your phone...",
|
||||
"tags.modal.phoneScan": "Read a tag with this phone",
|
||||
"tags.modal.spoolNamed": "spool #{{id}}, {{name}}",
|
||||
"tags.modal.spoolShort": "spool #{{id}}",
|
||||
"tags.modal.takenBy": "Currently linked to {{spool}}.",
|
||||
"tags.modal.title": "Link a tag",
|
||||
"tags.modal.uidHelp": "Separators and capitalisation make no difference: 04:a2:b3:c4, 04-A2-B3-C4 and 04a2b3c4 are all the same tag.",
|
||||
"tags.modal.uidLabel": "Tag UID",
|
||||
"tags.modal.uidPlaceholder": "04A2B3C4",
|
||||
"tags.modal.useLastSeen": "Use it",
|
||||
"tags.modal.waitingAny": "Waiting for a tap on any reader.",
|
||||
"tags.modal.waitingOn": "Waiting for a tap on {{reader}}.",
|
||||
"tags.moved": "Tag moved here from spool #{{id}}.",
|
||||
"tags.movedFromFilament": "Tag moved here from filament {{name}}.",
|
||||
"tags.nfc.insecureContext": "Reading tags needs a secure connection. Open Spoolman over HTTPS to use your phone's NFC.",
|
||||
"tags.nfc.notAllowed": "This site is not allowed to use NFC. Grant it permission in your browser's site settings and try again.",
|
||||
"tags.nfc.notReadable": "The NFC reader is unavailable — another app may be using it.",
|
||||
"tags.nfc.notSupported": "This phone has no NFC, or NFC is switched off in system settings.",
|
||||
"tags.nfc.unknown": "Could not read a tag.",
|
||||
"tags.none": "No tags linked.",
|
||||
"tags.scan.openedFilament": "Tag scanned: opened filament {{name}}.",
|
||||
"tags.scan.openedSpool": "Tag scanned: opened spool #{{id}}, {{name}}.",
|
||||
"tags.scan.unknown": "Unknown tag {{uid}}. Open the spool or filament it belongs to and use Add tag to link it.",
|
||||
"tags.section": "Tags",
|
||||
"tags.unlink": "Unlink",
|
||||
"tags.unlinkBody": "Tag {{uid}} will stop identifying this spool. Nothing is written to the tag itself, so you can link it again — to this spool or another one — whenever you like.",
|
||||
"tags.unlinkBodyFilament": "Tag {{uid}} will stop identifying this filament. Nothing is written to the tag itself, so you can link it again — here or somewhere else — whenever you like.",
|
||||
"tags.unlinkFailed": "Could not unlink the tag.",
|
||||
"tags.unlinkTitle": "Unlink this tag?",
|
||||
"tags.unlinked": "Tag unlinked.",
|
||||
"tags.unlinking": "Unlinking...",
|
||||
"topbar.addSpools": "Add spools",
|
||||
"topbar.searchPlaceholder": "Search — try \"red\" or \"pla\"",
|
||||
"unknown": "Unknown",
|
||||
@@ -426,6 +637,7 @@
|
||||
"vendor.fields.id": "ID",
|
||||
"vendor.fields.name": "Name",
|
||||
"vendor.fields.registered": "Registered",
|
||||
"vendor.showAsList": "Show as a list",
|
||||
"vendor.fieldsHelp.emptySpoolWeight": "The weight of an empty spool from this manufacturer.",
|
||||
"yes": "Yes"
|
||||
}
|
||||
}
|
||||
@@ -1,17 +1,93 @@
|
||||
{
|
||||
"add.addAndNew": "",
|
||||
"add.addN_many": "Añadir {{count}} bobinas",
|
||||
"add.addN_one": "Añadir {{count}} bobina",
|
||||
"add.addN_other": "Añadir {{count}} bobinas",
|
||||
"add.adding": "",
|
||||
"add.advanced": "Especificaciones Avanzadas",
|
||||
"add.advancedNote": "densidad, diámetro, temperaturas (autorrellenado desde material)",
|
||||
"add.change": "",
|
||||
"add.count": "",
|
||||
"add.createNew": "",
|
||||
"add.createNewSub": "",
|
||||
"add.dbUnavailable": "",
|
||||
"add.duplicate": "",
|
||||
"add.duplicateNote": "",
|
||||
"add.duplicateRename": "",
|
||||
"add.duplicateTitle": "",
|
||||
"add.filamentNamePlaceholder": "",
|
||||
"add.fill.full": "",
|
||||
"add.fillLevel": "",
|
||||
"add.importNote": "",
|
||||
"add.inCatalog": "",
|
||||
"add.locationHint": "",
|
||||
"add.locationPlaceholder": "",
|
||||
"add.manufacturerPlaceholder": "",
|
||||
"add.nameHint": "",
|
||||
"add.newFilament": "",
|
||||
"add.newFilamentTitle": "",
|
||||
"add.noCatalog": "",
|
||||
"add.noManufacturer": "",
|
||||
"add.pickColor": "",
|
||||
"add.searchPlaceholder": "",
|
||||
"add.searching": "",
|
||||
"add.spoolWeightPreset.cardboard": "",
|
||||
"add.spoolWeightPreset.plastic": "",
|
||||
"add.spoolWeightPresetsLead": "",
|
||||
"add.step2": "",
|
||||
"add.typeToSearchAll": "",
|
||||
"add.typeToSearchMatches": "",
|
||||
"add.useExisting": "",
|
||||
"add.vendorHint.existing": "",
|
||||
"add.vendorHint.new": "",
|
||||
"add.vendorHint.optional": "",
|
||||
"add.yourCatalog": "",
|
||||
"buttons.archive": "Archivar",
|
||||
"buttons.cancel": "Cancelar",
|
||||
"buttons.clear": "Limpiar",
|
||||
"buttons.close": "",
|
||||
"buttons.delete": "Borrar",
|
||||
"buttons.edit": "Editar",
|
||||
"buttons.filter": "Filtrar",
|
||||
"buttons.save": "Guardar",
|
||||
"buttons.showArchived": "Mostrar Archivados",
|
||||
"buttons.unArchive": "Desarchivar",
|
||||
"common.decrement": "",
|
||||
"common.increment": "",
|
||||
"common.remove": "",
|
||||
"common.search": "",
|
||||
"dashboard.addFieldHint": "",
|
||||
"dashboard.dashboard": "",
|
||||
"dashboard.deleteGroup": "",
|
||||
"dashboard.dragHint": "",
|
||||
"dashboard.dropHere": "",
|
||||
"dashboard.emptyHelp": "",
|
||||
"dashboard.errorEmptyName": "",
|
||||
"dashboard.errorExists": "",
|
||||
"dashboard.errorRename": "",
|
||||
"dashboard.lastUsed": "",
|
||||
"dashboard.newGroup": "",
|
||||
"dashboard.newGroupName": "",
|
||||
"dashboard.reorderGroup": "",
|
||||
"dashboard.unassigned": "",
|
||||
"datetime.done": "",
|
||||
"datetime.hour": "",
|
||||
"datetime.minute": "",
|
||||
"datetime.nextMonth": "",
|
||||
"datetime.now": "",
|
||||
"datetime.pick": "",
|
||||
"datetime.prevMonth": "",
|
||||
"datetime.time": "",
|
||||
"documentTitle.dashboard.list": "",
|
||||
"documentTitle.labels.list": "",
|
||||
"documentTitle.library.list": "",
|
||||
"documentTitle.locations.list": "Ubicaciones | Spoolman",
|
||||
"documentTitle.settings.list": "",
|
||||
"filament.fields.addColor": "",
|
||||
"filament.fields.articleNumber": "Numero de Articulo",
|
||||
"filament.fields.coaxial": "coextruido",
|
||||
"filament.fields.colorHex": "Color",
|
||||
"filament.fields.colorType": "",
|
||||
"filament.fields.comment": "Comentarios",
|
||||
"filament.fields.density": "Densidad",
|
||||
"filament.fields.diameter": "Diámetro",
|
||||
@@ -23,6 +99,7 @@
|
||||
"filament.fields.name": "Nombre",
|
||||
"filament.fields.price": "Precio",
|
||||
"filament.fields.registered": "Registrado",
|
||||
"filament.fields.removeColor": "",
|
||||
"filament.fields.settingsBedTemp": "Temp. de Cama",
|
||||
"filament.fields.settingsExtruderTemp": "Temp. del Extrusor",
|
||||
"filament.fields.singleColor": "Único",
|
||||
@@ -34,20 +111,210 @@
|
||||
"filament.fieldsHelp.spoolWeight": "El peso de una bobina vacía. Se utiliza para determinar el peso medido de una bobina.",
|
||||
"filament.fieldsHelp.weight": "El peso de una bobina entera (peso neto). Esta cifra no debe incluir el peso de la bobina vacía, solo el filamento. Es, normalmente, el peso escrito en la etiqueta de la bobina.",
|
||||
"filament.filament": "Filamentos",
|
||||
"footer.documentation": "",
|
||||
"footer.reportIssue": "",
|
||||
"help.help": "Ayuda",
|
||||
"inspector.addSpoolsOfThis": "",
|
||||
"inspector.adjustFailed": "",
|
||||
"inspector.adjustHelp": "",
|
||||
"inspector.adjustWeight": "",
|
||||
"inspector.apply": "",
|
||||
"inspector.applying": "",
|
||||
"inspector.colorHex": "",
|
||||
"inspector.consumeAmount": "",
|
||||
"inspector.delete.deleting": "",
|
||||
"inspector.delete.errorGone": "",
|
||||
"inspector.delete.errorSpoolsExist": "",
|
||||
"inspector.delete.errorUnknown": "",
|
||||
"inspector.delete.filament": "",
|
||||
"inspector.delete.filamentBlockedHint": "",
|
||||
"inspector.delete.filamentBlockedTitle": "",
|
||||
"inspector.delete.filamentBody": "",
|
||||
"inspector.delete.filamentDone": "",
|
||||
"inspector.delete.filamentTitle": "",
|
||||
"inspector.delete.spool": "",
|
||||
"inspector.delete.spoolBody": "",
|
||||
"inspector.delete.spoolDone": "",
|
||||
"inspector.delete.spoolRemaining": "",
|
||||
"inspector.delete.spoolTitle": "",
|
||||
"inspector.delete.vendor": "",
|
||||
"inspector.delete.vendorBody": "",
|
||||
"inspector.delete.vendorDone": "",
|
||||
"inspector.delete.vendorTitle": "",
|
||||
"inspector.duplicateFilament": "",
|
||||
"inspector.empty": "",
|
||||
"inspector.enterValidLength": "",
|
||||
"inspector.enterValidWeight": "",
|
||||
"inspector.loading": "",
|
||||
"inspector.manageExtraFields": "",
|
||||
"inspector.measuredHelp": "",
|
||||
"inspector.multi": "",
|
||||
"inspector.newGross": "",
|
||||
"inspector.noExtraFields": "",
|
||||
"inspector.notFound": "",
|
||||
"inspector.ofRemaining": "",
|
||||
"inspector.openFilament": "",
|
||||
"inspector.openLink": "",
|
||||
"inspector.openManufacturer": "",
|
||||
"inspector.specs": "",
|
||||
"inspector.spoolsCount": "",
|
||||
"inspector.spoolsTotalRemaining": "",
|
||||
"inspector.used": "",
|
||||
"kofi": "Donar en Ko-fi",
|
||||
"labels.addHead": "",
|
||||
"labels.addQr": "",
|
||||
"labels.addRect": "",
|
||||
"labels.addSwatch": "",
|
||||
"labels.addText": "",
|
||||
"labels.align": "",
|
||||
"labels.alignCenter": "",
|
||||
"labels.alignLeft": "",
|
||||
"labels.alignRight": "",
|
||||
"labels.blank": "",
|
||||
"labels.bold": "",
|
||||
"labels.canvasHint": "",
|
||||
"labels.centerLogo": "",
|
||||
"labels.chooseField": "",
|
||||
"labels.clearFill": "",
|
||||
"labels.copies": "",
|
||||
"labels.cornerRadiusMm": "",
|
||||
"labels.createFirst": "",
|
||||
"labels.cutGuides": "",
|
||||
"labels.deleteConfirm": "",
|
||||
"labels.deleteElement": "",
|
||||
"labels.designName": "",
|
||||
"labels.designerDesc": "",
|
||||
"labels.designerTitle": "",
|
||||
"labels.dpi": "",
|
||||
"labels.dpiHint": "",
|
||||
"labels.duplicate": "",
|
||||
"labels.fields.bedTemp": "",
|
||||
"labels.fields.diameterMm": "",
|
||||
"labels.fields.groupVendor": "",
|
||||
"labels.fields.initialG": "",
|
||||
"labels.fields.netWeightG": "",
|
||||
"labels.fields.remainingG": "",
|
||||
"labels.fill": "",
|
||||
"labels.fitWidth": "",
|
||||
"labels.fitWidthHint": "",
|
||||
"labels.fontMm": "",
|
||||
"labels.gridInfo": "",
|
||||
"labels.hMm": "",
|
||||
"labels.heightMm": "",
|
||||
"labels.hintNowrap": "",
|
||||
"labels.hintSwatch": "",
|
||||
"labels.hintWrap": "",
|
||||
"labels.imageDesc": "",
|
||||
"labels.imageZipNote": "",
|
||||
"labels.insertField": "",
|
||||
"labels.kind.qr": "",
|
||||
"labels.kind.rect": "",
|
||||
"labels.kind.swatch": "",
|
||||
"labels.kind.text": "",
|
||||
"labels.labelSize": "",
|
||||
"labels.labelType": "",
|
||||
"labels.layout": "",
|
||||
"labels.modeImage": "",
|
||||
"labels.modeLabel": "",
|
||||
"labels.modeSheet": "",
|
||||
"labels.new": "",
|
||||
"labels.newText": "",
|
||||
"labels.noDesignsOption": "",
|
||||
"labels.noFilaments": "",
|
||||
"labels.noSpools": "",
|
||||
"labels.onePerLabel": "",
|
||||
"labels.preparing": "",
|
||||
"labels.preview": "",
|
||||
"labels.previewWith": "",
|
||||
"labels.radiusMm": "",
|
||||
"labels.sampleData": "",
|
||||
"labels.saved": "",
|
||||
"labels.saving": "",
|
||||
"labels.searchFilaments": "",
|
||||
"labels.searchSpools": "",
|
||||
"labels.selectAllShort": "",
|
||||
"labels.selectAtLeastOne": "",
|
||||
"labels.selectAtLeastOneFilament": "",
|
||||
"labels.selectDesign": "",
|
||||
"labels.selectElement": "",
|
||||
"labels.selectNoneShort": "",
|
||||
"labels.selectRecentHint": "",
|
||||
"labels.selectRecentShort": "",
|
||||
"labels.showingFilament": "",
|
||||
"labels.showingReal": "",
|
||||
"labels.showingSpool": "",
|
||||
"labels.showingTags": "",
|
||||
"labels.sizeMm": "",
|
||||
"labels.skipHint": "",
|
||||
"labels.sortHint": "",
|
||||
"labels.sortId": "",
|
||||
"labels.sortNewest": "",
|
||||
"labels.stroke": "",
|
||||
"labels.strokeMm": "",
|
||||
"labels.tabDesign": "",
|
||||
"labels.tabPrint": "",
|
||||
"labels.textTemplate": "",
|
||||
"labels.typeFilament": "",
|
||||
"labels.typeHint": "",
|
||||
"labels.typeSpool": "",
|
||||
"labels.unknownFilament": "",
|
||||
"labels.wMm": "",
|
||||
"labels.widthMm": "",
|
||||
"labels.wrapText": "",
|
||||
"labels.xMm": "",
|
||||
"labels.yMm": "",
|
||||
"library.apiError": "",
|
||||
"library.collapseGroup": "",
|
||||
"library.emptyBody": "",
|
||||
"library.emptyFiltered": "",
|
||||
"library.emptyTitle": "",
|
||||
"library.expandGroup": "",
|
||||
"library.filterBy": "",
|
||||
"library.groupBy": "",
|
||||
"library.groupNone": "",
|
||||
"library.nUnused": "",
|
||||
"library.noLocation": "",
|
||||
"library.noValues": "",
|
||||
"library.openGroup": "",
|
||||
"library.openManufacturer": "",
|
||||
"library.section.extra": "",
|
||||
"library.section.filament": "",
|
||||
"library.section.spool": "",
|
||||
"library.section.vendor": "",
|
||||
"library.showMore": "",
|
||||
"library.sort.nozzle": "",
|
||||
"library.sortBy": "",
|
||||
"library.unassigned": "",
|
||||
"library.unitGroups": "",
|
||||
"library.unitSpools": "",
|
||||
"library.unused": "",
|
||||
"library.unusedGroup": "",
|
||||
"library.unusedGroupMixed": "",
|
||||
"library.unusedSub": "",
|
||||
"library.unusedSubMixed": "",
|
||||
"library.used": "",
|
||||
"library.usedAgo": "",
|
||||
"loading": "Cargando",
|
||||
"locations.locations": "Ubicaciones",
|
||||
"locations.newLocation": "Nueva ubicación",
|
||||
"locations.noLocation": "Sin ubicación",
|
||||
"locations.noLocationsHelp": "Esta página te permite organizar tus carretes en ubicaciones, ¡añade algunos carretes para empezar!",
|
||||
"nav.labels": "",
|
||||
"nav.library": "",
|
||||
"no": "No",
|
||||
"notifications.error": "Error (status code: {{statusCode}})",
|
||||
"notifications.saveSuccessful": "¡Se guardo correctamente!",
|
||||
"pagination.empty": "",
|
||||
"pagination.next": "",
|
||||
"pagination.pageSize": "",
|
||||
"pagination.perPage": "",
|
||||
"pagination.prev": "",
|
||||
"pagination.range": "",
|
||||
"printing.generic.columns": "Columnas",
|
||||
"printing.generic.customSize": "Personalizar",
|
||||
"printing.generic.description": "Ajuste los parámetros siguientes para obtener el diseño de impresión deseado. Recuerda que impresoras y el sistema operativo aplican sus propios márgenes y escala. Es probable que tengas que probar con valores varias veces hasta que el diseño te parezca correcto. Prueba en papel normal antes de usar etiquetas.",
|
||||
"printing.generic.dimensions": "Dimensiones",
|
||||
"printing.generic.gridTooWide": "",
|
||||
"printing.generic.helpMargin": "Los márgenes deben ser configurados a ser los mismos que tu papel e impresora. Cambiar los mismos afectaran todas las etiquetas.",
|
||||
"printing.generic.helpPrinterMargin": "La Zona de Seguridad debe ajustarse lo más cercano posible al borde que tu impresora es capaz de imprimir. Cambiar estos valores no afectaran todas las etiquetas.",
|
||||
"printing.generic.horizontalSpacing": "Espacio Horizontal",
|
||||
@@ -65,7 +332,11 @@
|
||||
"printing.generic.skipItems": "Saltar Elementos",
|
||||
"printing.generic.verticalSpacing": "Espacio Vertical",
|
||||
"printing.qrcode.button": "Imprimir las etiquetas",
|
||||
"printing.qrcode.customUrl.caveat": "",
|
||||
"printing.qrcode.customUrl.hint": "",
|
||||
"printing.qrcode.customUrl.label": "",
|
||||
"printing.qrcode.useHTTPUrl.label": "Enlace al código QR",
|
||||
"printing.qrcode.useHTTPUrl.options.custom": "",
|
||||
"printing.qrcode.useHTTPUrl.options.default": "Por defecto",
|
||||
"printing.qrcode.useHTTPUrl.options.url": "URL",
|
||||
"printing.qrcode.useHTTPUrl.preview": "Vista previa:",
|
||||
@@ -74,19 +345,46 @@
|
||||
"printing.spoolSelect.selectedTotal_one": "{{count}} bobina seleccionada",
|
||||
"printing.spoolSelect.selectedTotal_other": "{{count}} bobinas seleccionadas",
|
||||
"scanner.description": "Escanea un código QR de Spoolman para ver detalles de la bobina.",
|
||||
"scanner.error.inUse": "",
|
||||
"scanner.error.insecureContext": "La página no se muestra a través de HTTPS.",
|
||||
"scanner.error.notAllowed": "No has dado permiso de acceso a la cámara.",
|
||||
"scanner.error.notFound": "La cámara no ha sido detectada.",
|
||||
"scanner.error.streamApiNotSupported": "El navegador no es compatible con la API MediaStream.",
|
||||
"scanner.error.unknown": "Un error desconocido ocurrió. ({{error}})",
|
||||
"scanner.starting": "",
|
||||
"scanner.title": "Escáner de Código QR",
|
||||
"search.colorHint": "",
|
||||
"search.noResults": "",
|
||||
"search.searching": "",
|
||||
"search.section.filaments": "",
|
||||
"search.section.spools": "",
|
||||
"search.section.vendors": "",
|
||||
"search.threshold": "",
|
||||
"search.unknownFilament": "",
|
||||
"settings.appearance.tab": "",
|
||||
"settings.appearance.theme.dark": "",
|
||||
"settings.appearance.theme.desc": "",
|
||||
"settings.appearance.theme.label": "",
|
||||
"settings.appearance.theme.light": "",
|
||||
"settings.appearance.theme.system": "",
|
||||
"settings.extraFields.addChoice": "",
|
||||
"settings.extraFields.addChoicesFirst": "",
|
||||
"settings.extraFields.addEntityField": "",
|
||||
"settings.extraFields.booleanFalse": "No",
|
||||
"settings.extraFields.booleanTrue": "Sí",
|
||||
"settings.extraFields.deleteConfirm": "¿Borrar campo {{name}}?",
|
||||
"settings.extraFields.description.intro": " Aquí puede agregar más campos personalizados a los asuntos.",
|
||||
"settings.extraFields.description.constraints": " Una vez que se agrega un campo, no puede cambiar su clave o tipo, y no puede eliminar opciones ni cambiar el estado de múltiples opciones para campos seleccionados. Si elimina un campo, se eliminarán los datos asociados a todos los sujetos.",
|
||||
"settings.extraFields.description.intro": " Aquí puede agregar más campos personalizados a los asuntos.",
|
||||
"settings.extraFields.description.keyUsage": " La forma en que otros programas leen/escriben los datos es clave, por lo que si su campo personalizado se va a integrar con un programa de terceros, asegúrese de que esté configurado correctamente. El valor predeterminado solo se utilizará para elementos nuevos.",
|
||||
"settings.extraFields.description.tableViews": " Los campos de salida no se pueden ordenar ni filtrar en las vistas de tabla.",
|
||||
"settings.extraFields.editorEdit": "",
|
||||
"settings.extraFields.editorNew": "",
|
||||
"settings.extraFields.errors.choiceNeeded": "",
|
||||
"settings.extraFields.errors.choicesRemoved": "",
|
||||
"settings.extraFields.errors.deleteFailed": "",
|
||||
"settings.extraFields.errors.keyFormat": "",
|
||||
"settings.extraFields.errors.nameRequired": "",
|
||||
"settings.extraFields.errors.saveFailed": "",
|
||||
"settings.extraFields.fieldType.boolean": "Booleano",
|
||||
"settings.extraFields.fieldType.choice": "Opción",
|
||||
"settings.extraFields.fieldType.datetime": "Fecha y hora",
|
||||
@@ -95,7 +393,13 @@
|
||||
"settings.extraFields.fieldType.integer": "Entero",
|
||||
"settings.extraFields.fieldType.integerRange": "Rango de enteros",
|
||||
"settings.extraFields.fieldType.text": "Texto",
|
||||
"settings.extraFields.max": "",
|
||||
"settings.extraFields.min": "",
|
||||
"settings.extraFields.multiSuffix": "",
|
||||
"settings.extraFields.multiple": "",
|
||||
"settings.extraFields.namePlaceholder": "",
|
||||
"settings.extraFields.nonUniqueKeyError": "La clave debe ser única.",
|
||||
"settings.extraFields.none": "",
|
||||
"settings.extraFields.params.choices": "Opciones",
|
||||
"settings.extraFields.params.defaultValue": "Valor predeterminado",
|
||||
"settings.extraFields.params.fieldType": "Tipo",
|
||||
@@ -103,14 +407,21 @@
|
||||
"settings.extraFields.params.name": "Nombre",
|
||||
"settings.extraFields.params.order": "Orden",
|
||||
"settings.extraFields.params.unit": "Unidad",
|
||||
"settings.extraFields.saveField": "",
|
||||
"settings.extraFields.tab": "Campos adicionales",
|
||||
"settings.general.baseUrl.label": "URL base",
|
||||
"settings.general.baseUrl.tooltip": "La URL base que se utilizará al generar funciones como códigos QR.",
|
||||
"settings.general.currency.desc": "",
|
||||
"settings.general.currency.label": "Moneda",
|
||||
"settings.general.roundPrices.label": "Redondear precios",
|
||||
"settings.general.roundPrices.tooltip": "Redondear precios al número entero más cercano.",
|
||||
"settings.general.tab": "General",
|
||||
"settings.header": "Ajustes",
|
||||
"settings.language.desc": "",
|
||||
"settings.language.label": "",
|
||||
"settings.library.lowThreshold.desc": "",
|
||||
"settings.library.lowThreshold.label": "",
|
||||
"settings.library.tab": "",
|
||||
"spool.fields.archived": "Archivado",
|
||||
"spool.fields.comment": "Comentarios",
|
||||
"spool.fields.filament": "Filamento",
|
||||
@@ -134,7 +445,16 @@
|
||||
"spool.form.measurementType.length": "Longitud",
|
||||
"spool.form.measurementType.weight": "Peso",
|
||||
"spool.spool": "Bobinas",
|
||||
"topbar.addSpools": "",
|
||||
"topbar.searchPlaceholder": "",
|
||||
"unknown": "Desconocido",
|
||||
"validation.hexDigits": "",
|
||||
"validation.maxChars": "",
|
||||
"validation.mustBeGt": "",
|
||||
"validation.mustBeMax": "",
|
||||
"validation.mustBeMin": "",
|
||||
"validation.mustBeNumber": "",
|
||||
"validation.required": "",
|
||||
"vendor.fields.comment": "Comentarios",
|
||||
"vendor.fields.emptySpoolWeight": "Peso de bobina vacía",
|
||||
"vendor.fields.externalId": "ID Externa",
|
||||
|
||||
@@ -1,17 +1,90 @@
|
||||
{
|
||||
"add.addAndNew": "",
|
||||
"add.adding": "",
|
||||
"add.advanced": "",
|
||||
"add.advancedNote": "",
|
||||
"add.change": "",
|
||||
"add.count": "",
|
||||
"add.createNew": "",
|
||||
"add.createNewSub": "",
|
||||
"add.dbUnavailable": "",
|
||||
"add.duplicate": "",
|
||||
"add.duplicateNote": "",
|
||||
"add.duplicateRename": "",
|
||||
"add.duplicateTitle": "",
|
||||
"add.filamentNamePlaceholder": "",
|
||||
"add.fill.full": "",
|
||||
"add.fillLevel": "",
|
||||
"add.importNote": "",
|
||||
"add.inCatalog": "",
|
||||
"add.locationHint": "",
|
||||
"add.locationPlaceholder": "",
|
||||
"add.manufacturerPlaceholder": "",
|
||||
"add.nameHint": "",
|
||||
"add.newFilament": "",
|
||||
"add.newFilamentTitle": "",
|
||||
"add.noCatalog": "",
|
||||
"add.noManufacturer": "",
|
||||
"add.pickColor": "",
|
||||
"add.searchPlaceholder": "",
|
||||
"add.searching": "",
|
||||
"add.spoolWeightPreset.cardboard": "",
|
||||
"add.spoolWeightPreset.plastic": "",
|
||||
"add.spoolWeightPresetsLead": "",
|
||||
"add.step2": "",
|
||||
"add.typeToSearchAll": "",
|
||||
"add.typeToSearchMatches": "",
|
||||
"add.useExisting": "",
|
||||
"add.vendorHint.existing": "",
|
||||
"add.vendorHint.new": "",
|
||||
"add.vendorHint.optional": "",
|
||||
"add.yourCatalog": "",
|
||||
"buttons.archive": "Arhiveeri",
|
||||
"buttons.cancel": "Tühista",
|
||||
"buttons.clear": "Tühjenda",
|
||||
"buttons.close": "",
|
||||
"buttons.delete": "Kustuta",
|
||||
"buttons.edit": "Muuda",
|
||||
"buttons.filter": "Filtreeri",
|
||||
"buttons.save": "Salvesta",
|
||||
"buttons.showArchived": "Näita arhiveeritud",
|
||||
"buttons.unArchive": "Võta arhiivist tagasi",
|
||||
"common.decrement": "",
|
||||
"common.increment": "",
|
||||
"common.remove": "",
|
||||
"common.search": "",
|
||||
"dashboard.addFieldHint": "",
|
||||
"dashboard.dashboard": "",
|
||||
"dashboard.deleteGroup": "",
|
||||
"dashboard.dragHint": "",
|
||||
"dashboard.dropHere": "",
|
||||
"dashboard.emptyHelp": "",
|
||||
"dashboard.errorEmptyName": "",
|
||||
"dashboard.errorExists": "",
|
||||
"dashboard.errorRename": "",
|
||||
"dashboard.lastUsed": "",
|
||||
"dashboard.newGroup": "",
|
||||
"dashboard.newGroupName": "",
|
||||
"dashboard.reorderGroup": "",
|
||||
"dashboard.unassigned": "",
|
||||
"datetime.done": "",
|
||||
"datetime.hour": "",
|
||||
"datetime.minute": "",
|
||||
"datetime.nextMonth": "",
|
||||
"datetime.now": "",
|
||||
"datetime.pick": "",
|
||||
"datetime.prevMonth": "",
|
||||
"datetime.time": "",
|
||||
"documentTitle.dashboard.list": "",
|
||||
"documentTitle.labels.list": "",
|
||||
"documentTitle.library.list": "",
|
||||
"documentTitle.locations.list": "",
|
||||
"documentTitle.settings.list": "",
|
||||
"filament.fields.addColor": "",
|
||||
"filament.fields.articleNumber": "",
|
||||
"filament.fields.coaxial": "",
|
||||
"filament.fields.colorHex": "",
|
||||
"filament.fields.colorType": "",
|
||||
"filament.fields.comment": "",
|
||||
"filament.fields.density": "",
|
||||
"filament.fields.diameter": "",
|
||||
@@ -23,6 +96,7 @@
|
||||
"filament.fields.name": "",
|
||||
"filament.fields.price": "",
|
||||
"filament.fields.registered": "",
|
||||
"filament.fields.removeColor": "",
|
||||
"filament.fields.settingsBedTemp": "",
|
||||
"filament.fields.settingsExtruderTemp": "",
|
||||
"filament.fields.singleColor": "",
|
||||
@@ -34,20 +108,210 @@
|
||||
"filament.fieldsHelp.spoolWeight": "",
|
||||
"filament.fieldsHelp.weight": "",
|
||||
"filament.filament": "",
|
||||
"footer.documentation": "",
|
||||
"footer.reportIssue": "",
|
||||
"help.help": "",
|
||||
"inspector.addSpoolsOfThis": "",
|
||||
"inspector.adjustFailed": "",
|
||||
"inspector.adjustHelp": "",
|
||||
"inspector.adjustWeight": "",
|
||||
"inspector.apply": "",
|
||||
"inspector.applying": "",
|
||||
"inspector.colorHex": "",
|
||||
"inspector.consumeAmount": "",
|
||||
"inspector.delete.deleting": "",
|
||||
"inspector.delete.errorGone": "",
|
||||
"inspector.delete.errorSpoolsExist": "",
|
||||
"inspector.delete.errorUnknown": "",
|
||||
"inspector.delete.filament": "",
|
||||
"inspector.delete.filamentBlockedHint": "",
|
||||
"inspector.delete.filamentBlockedTitle": "",
|
||||
"inspector.delete.filamentBody": "",
|
||||
"inspector.delete.filamentDone": "",
|
||||
"inspector.delete.filamentTitle": "",
|
||||
"inspector.delete.spool": "",
|
||||
"inspector.delete.spoolBody": "",
|
||||
"inspector.delete.spoolDone": "",
|
||||
"inspector.delete.spoolRemaining": "",
|
||||
"inspector.delete.spoolTitle": "",
|
||||
"inspector.delete.vendor": "",
|
||||
"inspector.delete.vendorBody": "",
|
||||
"inspector.delete.vendorDone": "",
|
||||
"inspector.delete.vendorTitle": "",
|
||||
"inspector.duplicateFilament": "",
|
||||
"inspector.empty": "",
|
||||
"inspector.enterValidLength": "",
|
||||
"inspector.enterValidWeight": "",
|
||||
"inspector.loading": "",
|
||||
"inspector.manageExtraFields": "",
|
||||
"inspector.measuredHelp": "",
|
||||
"inspector.multi": "",
|
||||
"inspector.newGross": "",
|
||||
"inspector.noExtraFields": "",
|
||||
"inspector.notFound": "",
|
||||
"inspector.ofRemaining": "",
|
||||
"inspector.openFilament": "",
|
||||
"inspector.openLink": "",
|
||||
"inspector.openManufacturer": "",
|
||||
"inspector.specs": "",
|
||||
"inspector.spoolsCount": "",
|
||||
"inspector.spoolsTotalRemaining": "",
|
||||
"inspector.used": "",
|
||||
"kofi": "Anna mulle tippi Ko-fi's",
|
||||
"labels.addHead": "",
|
||||
"labels.addQr": "",
|
||||
"labels.addRect": "",
|
||||
"labels.addSwatch": "",
|
||||
"labels.addText": "",
|
||||
"labels.align": "",
|
||||
"labels.alignCenter": "",
|
||||
"labels.alignLeft": "",
|
||||
"labels.alignRight": "",
|
||||
"labels.blank": "",
|
||||
"labels.bold": "",
|
||||
"labels.canvasHint": "",
|
||||
"labels.centerLogo": "",
|
||||
"labels.chooseField": "",
|
||||
"labels.clearFill": "",
|
||||
"labels.copies": "",
|
||||
"labels.cornerRadiusMm": "",
|
||||
"labels.createFirst": "",
|
||||
"labels.cutGuides": "",
|
||||
"labels.deleteConfirm": "",
|
||||
"labels.deleteElement": "",
|
||||
"labels.designName": "",
|
||||
"labels.designerDesc": "",
|
||||
"labels.designerTitle": "",
|
||||
"labels.dpi": "",
|
||||
"labels.dpiHint": "",
|
||||
"labels.duplicate": "",
|
||||
"labels.fields.bedTemp": "",
|
||||
"labels.fields.diameterMm": "",
|
||||
"labels.fields.groupVendor": "",
|
||||
"labels.fields.initialG": "",
|
||||
"labels.fields.netWeightG": "",
|
||||
"labels.fields.remainingG": "",
|
||||
"labels.fill": "",
|
||||
"labels.fitWidth": "",
|
||||
"labels.fitWidthHint": "",
|
||||
"labels.fontMm": "",
|
||||
"labels.gridInfo": "",
|
||||
"labels.hMm": "",
|
||||
"labels.heightMm": "",
|
||||
"labels.hintNowrap": "",
|
||||
"labels.hintSwatch": "",
|
||||
"labels.hintWrap": "",
|
||||
"labels.imageDesc": "",
|
||||
"labels.imageZipNote": "",
|
||||
"labels.insertField": "",
|
||||
"labels.kind.qr": "",
|
||||
"labels.kind.rect": "",
|
||||
"labels.kind.swatch": "",
|
||||
"labels.kind.text": "",
|
||||
"labels.labelSize": "",
|
||||
"labels.labelType": "",
|
||||
"labels.layout": "",
|
||||
"labels.modeImage": "",
|
||||
"labels.modeLabel": "",
|
||||
"labels.modeSheet": "",
|
||||
"labels.new": "",
|
||||
"labels.newText": "",
|
||||
"labels.noDesignsOption": "",
|
||||
"labels.noFilaments": "",
|
||||
"labels.noSpools": "",
|
||||
"labels.onePerLabel": "",
|
||||
"labels.preparing": "",
|
||||
"labels.preview": "",
|
||||
"labels.previewWith": "",
|
||||
"labels.radiusMm": "",
|
||||
"labels.sampleData": "",
|
||||
"labels.saved": "",
|
||||
"labels.saving": "",
|
||||
"labels.searchFilaments": "",
|
||||
"labels.searchSpools": "",
|
||||
"labels.selectAllShort": "",
|
||||
"labels.selectAtLeastOne": "",
|
||||
"labels.selectAtLeastOneFilament": "",
|
||||
"labels.selectDesign": "",
|
||||
"labels.selectElement": "",
|
||||
"labels.selectNoneShort": "",
|
||||
"labels.selectRecentHint": "",
|
||||
"labels.selectRecentShort": "",
|
||||
"labels.showingFilament": "",
|
||||
"labels.showingReal": "",
|
||||
"labels.showingSpool": "",
|
||||
"labels.showingTags": "",
|
||||
"labels.sizeMm": "",
|
||||
"labels.skipHint": "",
|
||||
"labels.sortHint": "",
|
||||
"labels.sortId": "",
|
||||
"labels.sortNewest": "",
|
||||
"labels.stroke": "",
|
||||
"labels.strokeMm": "",
|
||||
"labels.tabDesign": "",
|
||||
"labels.tabPrint": "",
|
||||
"labels.textTemplate": "",
|
||||
"labels.typeFilament": "",
|
||||
"labels.typeHint": "",
|
||||
"labels.typeSpool": "",
|
||||
"labels.unknownFilament": "",
|
||||
"labels.wMm": "",
|
||||
"labels.widthMm": "",
|
||||
"labels.wrapText": "",
|
||||
"labels.xMm": "",
|
||||
"labels.yMm": "",
|
||||
"library.apiError": "",
|
||||
"library.collapseGroup": "",
|
||||
"library.emptyBody": "",
|
||||
"library.emptyFiltered": "",
|
||||
"library.emptyTitle": "",
|
||||
"library.expandGroup": "",
|
||||
"library.filterBy": "",
|
||||
"library.groupBy": "",
|
||||
"library.groupNone": "",
|
||||
"library.nUnused": "",
|
||||
"library.noLocation": "",
|
||||
"library.noValues": "",
|
||||
"library.openGroup": "",
|
||||
"library.openManufacturer": "",
|
||||
"library.section.extra": "",
|
||||
"library.section.filament": "",
|
||||
"library.section.spool": "",
|
||||
"library.section.vendor": "",
|
||||
"library.showMore": "",
|
||||
"library.sort.nozzle": "",
|
||||
"library.sortBy": "",
|
||||
"library.unassigned": "",
|
||||
"library.unitGroups": "",
|
||||
"library.unitSpools": "",
|
||||
"library.unused": "",
|
||||
"library.unusedGroup": "",
|
||||
"library.unusedGroupMixed": "",
|
||||
"library.unusedSub": "",
|
||||
"library.unusedSubMixed": "",
|
||||
"library.used": "",
|
||||
"library.usedAgo": "",
|
||||
"loading": "Laadimine",
|
||||
"locations.locations": "",
|
||||
"locations.newLocation": "",
|
||||
"locations.noLocation": "",
|
||||
"locations.noLocationsHelp": "",
|
||||
"nav.labels": "",
|
||||
"nav.library": "",
|
||||
"no": "Ei",
|
||||
"notifications.error": "Viga (kood: {{statusCode}})",
|
||||
"notifications.saveSuccessful": "Salvesta edukalt!",
|
||||
"pagination.empty": "",
|
||||
"pagination.next": "",
|
||||
"pagination.pageSize": "",
|
||||
"pagination.perPage": "",
|
||||
"pagination.prev": "",
|
||||
"pagination.range": "",
|
||||
"printing.generic.columns": "",
|
||||
"printing.generic.customSize": "",
|
||||
"printing.generic.description": "",
|
||||
"printing.generic.dimensions": "",
|
||||
"printing.generic.gridTooWide": "",
|
||||
"printing.generic.helpMargin": "",
|
||||
"printing.generic.helpPrinterMargin": "",
|
||||
"printing.generic.horizontalSpacing": "",
|
||||
@@ -65,7 +329,11 @@
|
||||
"printing.generic.skipItems": "",
|
||||
"printing.generic.verticalSpacing": "",
|
||||
"printing.qrcode.button": "",
|
||||
"printing.qrcode.customUrl.caveat": "",
|
||||
"printing.qrcode.customUrl.hint": "",
|
||||
"printing.qrcode.customUrl.label": "",
|
||||
"printing.qrcode.useHTTPUrl.label": "",
|
||||
"printing.qrcode.useHTTPUrl.options.custom": "",
|
||||
"printing.qrcode.useHTTPUrl.options.default": "",
|
||||
"printing.qrcode.useHTTPUrl.options.url": "",
|
||||
"printing.qrcode.useHTTPUrl.preview": "",
|
||||
@@ -73,16 +341,47 @@
|
||||
"printing.spoolSelect.selectedTotal_one": "",
|
||||
"printing.spoolSelect.selectedTotal_other": "",
|
||||
"scanner.description": "",
|
||||
"scanner.error.inUse": "",
|
||||
"scanner.error.insecureContext": "",
|
||||
"scanner.error.notAllowed": "",
|
||||
"scanner.error.notFound": "",
|
||||
"scanner.error.streamApiNotSupported": "",
|
||||
"scanner.error.unknown": "",
|
||||
"scanner.starting": "",
|
||||
"scanner.title": "",
|
||||
"search.colorHint": "",
|
||||
"search.noResults": "",
|
||||
"search.searching": "",
|
||||
"search.section.filaments": "",
|
||||
"search.section.spools": "",
|
||||
"search.section.vendors": "",
|
||||
"search.threshold": "",
|
||||
"search.unknownFilament": "",
|
||||
"settings.appearance.tab": "",
|
||||
"settings.appearance.theme.dark": "",
|
||||
"settings.appearance.theme.desc": "",
|
||||
"settings.appearance.theme.label": "",
|
||||
"settings.appearance.theme.light": "",
|
||||
"settings.appearance.theme.system": "",
|
||||
"settings.extraFields.addChoice": "",
|
||||
"settings.extraFields.addChoicesFirst": "",
|
||||
"settings.extraFields.addEntityField": "",
|
||||
"settings.extraFields.booleanFalse": "",
|
||||
"settings.extraFields.booleanTrue": "",
|
||||
"settings.extraFields.deleteConfirm": "",
|
||||
"settings.extraFields.description": "",
|
||||
"settings.extraFields.description.constraints": "",
|
||||
"settings.extraFields.description.intro": "",
|
||||
"settings.extraFields.description.keyUsage": "",
|
||||
"settings.extraFields.description.tableViews": "",
|
||||
"settings.extraFields.editorEdit": "",
|
||||
"settings.extraFields.editorNew": "",
|
||||
"settings.extraFields.errors.choiceNeeded": "",
|
||||
"settings.extraFields.errors.choicesRemoved": "",
|
||||
"settings.extraFields.errors.deleteFailed": "",
|
||||
"settings.extraFields.errors.keyFormat": "",
|
||||
"settings.extraFields.errors.nameRequired": "",
|
||||
"settings.extraFields.errors.saveFailed": "",
|
||||
"settings.extraFields.fieldType.boolean": "",
|
||||
"settings.extraFields.fieldType.choice": "",
|
||||
"settings.extraFields.fieldType.datetime": "",
|
||||
@@ -91,7 +390,13 @@
|
||||
"settings.extraFields.fieldType.integer": "",
|
||||
"settings.extraFields.fieldType.integerRange": "",
|
||||
"settings.extraFields.fieldType.text": "",
|
||||
"settings.extraFields.max": "",
|
||||
"settings.extraFields.min": "",
|
||||
"settings.extraFields.multiSuffix": "",
|
||||
"settings.extraFields.multiple": "",
|
||||
"settings.extraFields.namePlaceholder": "",
|
||||
"settings.extraFields.nonUniqueKeyError": "",
|
||||
"settings.extraFields.none": "",
|
||||
"settings.extraFields.params.choices": "",
|
||||
"settings.extraFields.params.defaultValue": "",
|
||||
"settings.extraFields.params.fieldType": "",
|
||||
@@ -99,14 +404,21 @@
|
||||
"settings.extraFields.params.name": "",
|
||||
"settings.extraFields.params.order": "",
|
||||
"settings.extraFields.params.unit": "",
|
||||
"settings.extraFields.saveField": "",
|
||||
"settings.extraFields.tab": "",
|
||||
"settings.general.baseUrl.label": "",
|
||||
"settings.general.baseUrl.tooltip": "",
|
||||
"settings.general.currency.desc": "",
|
||||
"settings.general.currency.label": "",
|
||||
"settings.general.roundPrices.label": "",
|
||||
"settings.general.roundPrices.tooltip": "",
|
||||
"settings.general.tab": "",
|
||||
"settings.header": "",
|
||||
"settings.language.desc": "",
|
||||
"settings.language.label": "",
|
||||
"settings.library.lowThreshold.desc": "",
|
||||
"settings.library.lowThreshold.label": "",
|
||||
"settings.library.tab": "",
|
||||
"spool.fields.archived": "",
|
||||
"spool.fields.comment": "",
|
||||
"spool.fields.filament": "",
|
||||
@@ -130,7 +442,16 @@
|
||||
"spool.form.measurementType.length": "",
|
||||
"spool.form.measurementType.weight": "",
|
||||
"spool.spool": "",
|
||||
"topbar.addSpools": "",
|
||||
"topbar.searchPlaceholder": "",
|
||||
"unknown": "Tundmatu",
|
||||
"validation.hexDigits": "",
|
||||
"validation.maxChars": "",
|
||||
"validation.mustBeGt": "",
|
||||
"validation.mustBeMax": "",
|
||||
"validation.mustBeMin": "",
|
||||
"validation.mustBeNumber": "",
|
||||
"validation.required": "",
|
||||
"vendor.fields.comment": "",
|
||||
"vendor.fields.emptySpoolWeight": "",
|
||||
"vendor.fields.externalId": "",
|
||||
|
||||
@@ -1,16 +1,89 @@
|
||||
{
|
||||
"add.addAndNew": "",
|
||||
"add.adding": "",
|
||||
"add.advanced": "",
|
||||
"add.advancedNote": "",
|
||||
"add.change": "",
|
||||
"add.count": "",
|
||||
"add.createNew": "",
|
||||
"add.createNewSub": "",
|
||||
"add.dbUnavailable": "",
|
||||
"add.duplicate": "",
|
||||
"add.duplicateNote": "",
|
||||
"add.duplicateRename": "",
|
||||
"add.duplicateTitle": "",
|
||||
"add.filamentNamePlaceholder": "",
|
||||
"add.fill.full": "",
|
||||
"add.fillLevel": "",
|
||||
"add.importNote": "",
|
||||
"add.inCatalog": "",
|
||||
"add.locationHint": "",
|
||||
"add.locationPlaceholder": "",
|
||||
"add.manufacturerPlaceholder": "",
|
||||
"add.nameHint": "",
|
||||
"add.newFilament": "",
|
||||
"add.newFilamentTitle": "",
|
||||
"add.noCatalog": "",
|
||||
"add.noManufacturer": "",
|
||||
"add.pickColor": "",
|
||||
"add.searchPlaceholder": "",
|
||||
"add.searching": "",
|
||||
"add.spoolWeightPreset.cardboard": "",
|
||||
"add.spoolWeightPreset.plastic": "",
|
||||
"add.spoolWeightPresetsLead": "",
|
||||
"add.step2": "",
|
||||
"add.typeToSearchAll": "",
|
||||
"add.typeToSearchMatches": "",
|
||||
"add.useExisting": "",
|
||||
"add.vendorHint.existing": "",
|
||||
"add.vendorHint.new": "",
|
||||
"add.vendorHint.optional": "",
|
||||
"add.yourCatalog": "",
|
||||
"buttons.archive": "آرشیو کردن",
|
||||
"buttons.cancel": "انصراف",
|
||||
"buttons.clear": "پاک کردن",
|
||||
"buttons.close": "",
|
||||
"buttons.delete": "حذف",
|
||||
"buttons.edit": "ویرایش",
|
||||
"buttons.filter": "فیلتر",
|
||||
"buttons.save": "ذخیره",
|
||||
"buttons.showArchived": "نمایش آرشیو",
|
||||
"buttons.unArchive": "درآوردن از آرشیو",
|
||||
"common.decrement": "",
|
||||
"common.increment": "",
|
||||
"common.remove": "",
|
||||
"common.search": "",
|
||||
"dashboard.addFieldHint": "",
|
||||
"dashboard.dashboard": "",
|
||||
"dashboard.deleteGroup": "",
|
||||
"dashboard.dragHint": "",
|
||||
"dashboard.dropHere": "",
|
||||
"dashboard.emptyHelp": "",
|
||||
"dashboard.errorEmptyName": "",
|
||||
"dashboard.errorExists": "",
|
||||
"dashboard.errorRename": "",
|
||||
"dashboard.lastUsed": "",
|
||||
"dashboard.newGroup": "",
|
||||
"dashboard.newGroupName": "",
|
||||
"dashboard.reorderGroup": "",
|
||||
"dashboard.unassigned": "",
|
||||
"datetime.done": "",
|
||||
"datetime.hour": "",
|
||||
"datetime.minute": "",
|
||||
"datetime.nextMonth": "",
|
||||
"datetime.now": "",
|
||||
"datetime.pick": "",
|
||||
"datetime.prevMonth": "",
|
||||
"datetime.time": "",
|
||||
"documentTitle.dashboard.list": "",
|
||||
"documentTitle.labels.list": "",
|
||||
"documentTitle.library.list": "",
|
||||
"documentTitle.settings.list": "",
|
||||
"filament.fields.addColor": "",
|
||||
"filament.fields.articleNumber": "شماره انحصاری تولید",
|
||||
"filament.fields.coaxial": "کوپلیمری",
|
||||
"filament.fields.colorHex": "رنگ",
|
||||
"filament.fields.colorType": "",
|
||||
"filament.fields.comment": "توضیحات",
|
||||
"filament.fields.density": "چگالی (Density)",
|
||||
"filament.fields.diameter": "ضخامت",
|
||||
@@ -22,6 +95,7 @@
|
||||
"filament.fields.name": "عنوان",
|
||||
"filament.fields.price": "قیمت",
|
||||
"filament.fields.registered": "ثبت شده",
|
||||
"filament.fields.removeColor": "",
|
||||
"filament.fields.settingsBedTemp": "دمای هیت بد",
|
||||
"filament.fields.settingsExtruderTemp": "دمای اکسترودر",
|
||||
"filament.fields.singleColor": "تک رنگ",
|
||||
@@ -33,16 +107,206 @@
|
||||
"filament.fieldsHelp.spoolWeight": "وزن یک قرقره خالی. برای تعیین وزن اندازهگیریشده یک قرقره استفاده میشود.",
|
||||
"filament.fieldsHelp.weight": "وزن فیلامنت یک قرقره کامل (وزن خالص). این باید شامل وزن خود قرقره نباشد و فقط فیلامنت را شامل شود. معمولاً روی بستهبندی نوشته شده است.",
|
||||
"filament.filament": "فیلامنت ها",
|
||||
"footer.documentation": "",
|
||||
"footer.reportIssue": "",
|
||||
"help.help": "راهنما",
|
||||
"inspector.addSpoolsOfThis": "",
|
||||
"inspector.adjustFailed": "",
|
||||
"inspector.adjustHelp": "",
|
||||
"inspector.adjustWeight": "",
|
||||
"inspector.apply": "",
|
||||
"inspector.applying": "",
|
||||
"inspector.colorHex": "",
|
||||
"inspector.consumeAmount": "",
|
||||
"inspector.delete.deleting": "",
|
||||
"inspector.delete.errorGone": "",
|
||||
"inspector.delete.errorSpoolsExist": "",
|
||||
"inspector.delete.errorUnknown": "",
|
||||
"inspector.delete.filament": "",
|
||||
"inspector.delete.filamentBlockedHint": "",
|
||||
"inspector.delete.filamentBlockedTitle": "",
|
||||
"inspector.delete.filamentBody": "",
|
||||
"inspector.delete.filamentDone": "",
|
||||
"inspector.delete.filamentTitle": "",
|
||||
"inspector.delete.spool": "",
|
||||
"inspector.delete.spoolBody": "",
|
||||
"inspector.delete.spoolDone": "",
|
||||
"inspector.delete.spoolRemaining": "",
|
||||
"inspector.delete.spoolTitle": "",
|
||||
"inspector.delete.vendor": "",
|
||||
"inspector.delete.vendorBody": "",
|
||||
"inspector.delete.vendorDone": "",
|
||||
"inspector.delete.vendorTitle": "",
|
||||
"inspector.duplicateFilament": "",
|
||||
"inspector.empty": "",
|
||||
"inspector.enterValidLength": "",
|
||||
"inspector.enterValidWeight": "",
|
||||
"inspector.loading": "",
|
||||
"inspector.manageExtraFields": "",
|
||||
"inspector.measuredHelp": "",
|
||||
"inspector.multi": "",
|
||||
"inspector.newGross": "",
|
||||
"inspector.noExtraFields": "",
|
||||
"inspector.notFound": "",
|
||||
"inspector.ofRemaining": "",
|
||||
"inspector.openFilament": "",
|
||||
"inspector.openLink": "",
|
||||
"inspector.openManufacturer": "",
|
||||
"inspector.specs": "",
|
||||
"inspector.spoolsCount": "",
|
||||
"inspector.spoolsTotalRemaining": "",
|
||||
"inspector.used": "",
|
||||
"kofi": "حمایت از سازنده این برنامه",
|
||||
"labels.addHead": "",
|
||||
"labels.addQr": "",
|
||||
"labels.addRect": "",
|
||||
"labels.addSwatch": "",
|
||||
"labels.addText": "",
|
||||
"labels.align": "",
|
||||
"labels.alignCenter": "",
|
||||
"labels.alignLeft": "",
|
||||
"labels.alignRight": "",
|
||||
"labels.blank": "",
|
||||
"labels.bold": "",
|
||||
"labels.canvasHint": "",
|
||||
"labels.centerLogo": "",
|
||||
"labels.chooseField": "",
|
||||
"labels.clearFill": "",
|
||||
"labels.copies": "",
|
||||
"labels.cornerRadiusMm": "",
|
||||
"labels.createFirst": "",
|
||||
"labels.cutGuides": "",
|
||||
"labels.deleteConfirm": "",
|
||||
"labels.deleteElement": "",
|
||||
"labels.designName": "",
|
||||
"labels.designerDesc": "",
|
||||
"labels.designerTitle": "",
|
||||
"labels.dpi": "",
|
||||
"labels.dpiHint": "",
|
||||
"labels.duplicate": "",
|
||||
"labels.fields.bedTemp": "",
|
||||
"labels.fields.diameterMm": "",
|
||||
"labels.fields.groupVendor": "",
|
||||
"labels.fields.initialG": "",
|
||||
"labels.fields.netWeightG": "",
|
||||
"labels.fields.remainingG": "",
|
||||
"labels.fill": "",
|
||||
"labels.fitWidth": "",
|
||||
"labels.fitWidthHint": "",
|
||||
"labels.fontMm": "",
|
||||
"labels.gridInfo": "",
|
||||
"labels.hMm": "",
|
||||
"labels.heightMm": "",
|
||||
"labels.hintNowrap": "",
|
||||
"labels.hintSwatch": "",
|
||||
"labels.hintWrap": "",
|
||||
"labels.imageDesc": "",
|
||||
"labels.imageZipNote": "",
|
||||
"labels.insertField": "",
|
||||
"labels.kind.qr": "",
|
||||
"labels.kind.rect": "",
|
||||
"labels.kind.swatch": "",
|
||||
"labels.kind.text": "",
|
||||
"labels.labelSize": "",
|
||||
"labels.labelType": "",
|
||||
"labels.layout": "",
|
||||
"labels.modeImage": "",
|
||||
"labels.modeLabel": "",
|
||||
"labels.modeSheet": "",
|
||||
"labels.new": "",
|
||||
"labels.newText": "",
|
||||
"labels.noDesignsOption": "",
|
||||
"labels.noFilaments": "",
|
||||
"labels.noSpools": "",
|
||||
"labels.onePerLabel": "",
|
||||
"labels.preparing": "",
|
||||
"labels.preview": "",
|
||||
"labels.previewWith": "",
|
||||
"labels.radiusMm": "",
|
||||
"labels.sampleData": "",
|
||||
"labels.saved": "",
|
||||
"labels.saving": "",
|
||||
"labels.searchFilaments": "",
|
||||
"labels.searchSpools": "",
|
||||
"labels.selectAllShort": "",
|
||||
"labels.selectAtLeastOne": "",
|
||||
"labels.selectAtLeastOneFilament": "",
|
||||
"labels.selectDesign": "",
|
||||
"labels.selectElement": "",
|
||||
"labels.selectNoneShort": "",
|
||||
"labels.selectRecentHint": "",
|
||||
"labels.selectRecentShort": "",
|
||||
"labels.showingFilament": "",
|
||||
"labels.showingReal": "",
|
||||
"labels.showingSpool": "",
|
||||
"labels.showingTags": "",
|
||||
"labels.sizeMm": "",
|
||||
"labels.skipHint": "",
|
||||
"labels.sortHint": "",
|
||||
"labels.sortId": "",
|
||||
"labels.sortNewest": "",
|
||||
"labels.stroke": "",
|
||||
"labels.strokeMm": "",
|
||||
"labels.tabDesign": "",
|
||||
"labels.tabPrint": "",
|
||||
"labels.textTemplate": "",
|
||||
"labels.typeFilament": "",
|
||||
"labels.typeHint": "",
|
||||
"labels.typeSpool": "",
|
||||
"labels.unknownFilament": "",
|
||||
"labels.wMm": "",
|
||||
"labels.widthMm": "",
|
||||
"labels.wrapText": "",
|
||||
"labels.xMm": "",
|
||||
"labels.yMm": "",
|
||||
"library.apiError": "",
|
||||
"library.collapseGroup": "",
|
||||
"library.emptyBody": "",
|
||||
"library.emptyFiltered": "",
|
||||
"library.emptyTitle": "",
|
||||
"library.expandGroup": "",
|
||||
"library.filterBy": "",
|
||||
"library.groupBy": "",
|
||||
"library.groupNone": "",
|
||||
"library.nUnused": "",
|
||||
"library.noLocation": "",
|
||||
"library.noValues": "",
|
||||
"library.openGroup": "",
|
||||
"library.openManufacturer": "",
|
||||
"library.section.extra": "",
|
||||
"library.section.filament": "",
|
||||
"library.section.spool": "",
|
||||
"library.section.vendor": "",
|
||||
"library.showMore": "",
|
||||
"library.sort.nozzle": "",
|
||||
"library.sortBy": "",
|
||||
"library.unassigned": "",
|
||||
"library.unitGroups": "",
|
||||
"library.unitSpools": "",
|
||||
"library.unused": "",
|
||||
"library.unusedGroup": "",
|
||||
"library.unusedGroupMixed": "",
|
||||
"library.unusedSub": "",
|
||||
"library.unusedSubMixed": "",
|
||||
"library.used": "",
|
||||
"library.usedAgo": "",
|
||||
"loading": "در حال بارگذاری",
|
||||
"nav.labels": "",
|
||||
"nav.library": "",
|
||||
"no": "خیر",
|
||||
"notifications.error": "خطای {{statusCode}} رخ داد",
|
||||
"notifications.saveSuccessful": "با موفقیت ثبت شد!",
|
||||
"pagination.empty": "",
|
||||
"pagination.next": "",
|
||||
"pagination.pageSize": "",
|
||||
"pagination.perPage": "",
|
||||
"pagination.prev": "",
|
||||
"pagination.range": "",
|
||||
"printing.generic.columns": "ستون",
|
||||
"printing.generic.customSize": "کاستوم",
|
||||
"printing.generic.description": "تنظیمات زیر را جوری تنظیم کنید که چیدمان پرینت لیبل مد نظرتان بدست بیاید. توجه کنید پرینتر و سیستم عامل شما ممکن است تنظیمات خودشان را لحاظ کنند، لذا ممکن است کمی آزمون و خطا نیاز باشد تا نتیجه مطلوب بدست بیاید. قبل اینکه لیبل نهایی را پرینت کنید ابتدا روی یک تکه کاغذ معمولی پرینت بگیرید و تست کنید.",
|
||||
"printing.generic.dimensions": "ابعاد",
|
||||
"printing.generic.gridTooWide": "",
|
||||
"printing.generic.helpMargin": "حاشیهها باید با کاغذ برچسب و چاپگر شما هماهنگ شوند، تغییر دادن این تنظیمات بر اندازه کل شبکه تأثیر میگذارد.",
|
||||
"printing.generic.helpPrinterMargin": "ناحیه امن باید بر اساس نزدیکترین فاصلهای که چاپگر شما میتواند تا لبه کاغذ چاپ کند تنظیم شود. تغییر این تنظیمات بر کل شبکه تأثیری نخواهد داشت.",
|
||||
"printing.generic.horizontalSpacing": "فاصله افقی",
|
||||
@@ -60,7 +324,11 @@
|
||||
"printing.generic.skipItems": "نادیده گرفتن یک آیتم",
|
||||
"printing.generic.verticalSpacing": "فاصله عمودی",
|
||||
"printing.qrcode.button": "پرینت لیبل",
|
||||
"printing.qrcode.customUrl.caveat": "",
|
||||
"printing.qrcode.customUrl.hint": "",
|
||||
"printing.qrcode.customUrl.label": "",
|
||||
"printing.qrcode.useHTTPUrl.label": "لینک بارکد QR",
|
||||
"printing.qrcode.useHTTPUrl.options.custom": "",
|
||||
"printing.qrcode.useHTTPUrl.options.default": "پیشفرض",
|
||||
"printing.qrcode.useHTTPUrl.options.url": "لینک",
|
||||
"printing.qrcode.useHTTPUrl.preview": "پیش نمایش:",
|
||||
@@ -68,19 +336,46 @@
|
||||
"printing.spoolSelect.selectedTotal_one": "{{count}} رول فیلامنت انتخاب شد",
|
||||
"printing.spoolSelect.selectedTotal_other": "تعدا د {{count}} رول فیلامنت انتخاب شد",
|
||||
"scanner.description": "یک بارکد QR از Spoolman را اسکن کنید تا جزئیات مربوط به spool را مشاهده کنید.",
|
||||
"scanner.error.inUse": "",
|
||||
"scanner.error.insecureContext": "این صفحه از طریق HTTPS ارائه نمیشود.",
|
||||
"scanner.error.notAllowed": "شما اجازه دسترسی به دوربین را ندادهاید.",
|
||||
"scanner.error.notFound": "دوربینی پیدا نشد.",
|
||||
"scanner.error.streamApiNotSupported": "مرورگر از API رسانهای (MediaStream API) پشتیبانی نمیکند.",
|
||||
"scanner.error.unknown": "خطای نامشخص {{error}} رخ داد",
|
||||
"scanner.starting": "",
|
||||
"scanner.title": "اسکنر بارکد QR",
|
||||
"search.colorHint": "",
|
||||
"search.noResults": "",
|
||||
"search.searching": "",
|
||||
"search.section.filaments": "",
|
||||
"search.section.spools": "",
|
||||
"search.section.vendors": "",
|
||||
"search.threshold": "",
|
||||
"search.unknownFilament": "",
|
||||
"settings.appearance.tab": "",
|
||||
"settings.appearance.theme.dark": "",
|
||||
"settings.appearance.theme.desc": "",
|
||||
"settings.appearance.theme.label": "",
|
||||
"settings.appearance.theme.light": "",
|
||||
"settings.appearance.theme.system": "",
|
||||
"settings.extraFields.addChoice": "",
|
||||
"settings.extraFields.addChoicesFirst": "",
|
||||
"settings.extraFields.addEntityField": "",
|
||||
"settings.extraFields.booleanFalse": "خیر",
|
||||
"settings.extraFields.booleanTrue": "بله",
|
||||
"settings.extraFields.deleteConfirm": "آیا میخواهید {{name}} را حذف کنید؟",
|
||||
"settings.extraFields.description.intro": "در اینجا میتوانید فیلدهای سفارشی اضافی را به موجودیهای خود اضافه کنید.",
|
||||
"settings.extraFields.description.constraints": "پس از افزودن یک فیلد، نمیتوانید کلید یا نوع آن را تغییر دهید و برای فیلدهای نوع انتخاب، نمیتوانید گزینهها را حذف یا وضعیت چندانتخابی را تغییر دهید. اگر یک فیلد را حذف کنید، دادههای مرتبط با تمام موجودیها حذف خواهد شد.",
|
||||
"settings.extraFields.description.intro": "در اینجا میتوانید فیلدهای سفارشی اضافی را به موجودیهای خود اضافه کنید.",
|
||||
"settings.extraFields.description.keyUsage": "کلید، اطلاعاتی است که برنامههای دیگر آن را میخوانند یا مینویسند، بنابراین اگر فیلد سفارشی شما قرار است با یک برنامه شخص ثالث ادغام شود، اطمینان حاصل کنید که به درستی تنظیم شده باشد. مقدار پیشفرض فقط بر روی اقلام جدید اعمال میشود.",
|
||||
"settings.extraFields.description.tableViews": "فیلدهای اضافی نمیتوانند در نماهای جدول مرتب یا فیلتر شوند.",
|
||||
"settings.extraFields.editorEdit": "",
|
||||
"settings.extraFields.editorNew": "",
|
||||
"settings.extraFields.errors.choiceNeeded": "",
|
||||
"settings.extraFields.errors.choicesRemoved": "",
|
||||
"settings.extraFields.errors.deleteFailed": "",
|
||||
"settings.extraFields.errors.keyFormat": "",
|
||||
"settings.extraFields.errors.nameRequired": "",
|
||||
"settings.extraFields.errors.saveFailed": "",
|
||||
"settings.extraFields.fieldType.boolean": "Boolean",
|
||||
"settings.extraFields.fieldType.choice": "انتخاب",
|
||||
"settings.extraFields.fieldType.datetime": "زمان و تاریخ",
|
||||
@@ -89,7 +384,13 @@
|
||||
"settings.extraFields.fieldType.integer": "عدد بدون اعشار",
|
||||
"settings.extraFields.fieldType.integerRange": "رنج عددی بدون اعشار",
|
||||
"settings.extraFields.fieldType.text": "متن",
|
||||
"settings.extraFields.max": "",
|
||||
"settings.extraFields.min": "",
|
||||
"settings.extraFields.multiSuffix": "",
|
||||
"settings.extraFields.multiple": "",
|
||||
"settings.extraFields.namePlaceholder": "",
|
||||
"settings.extraFields.nonUniqueKeyError": "شاخصه کلیدی باید منحصر به فرد باشد.",
|
||||
"settings.extraFields.none": "",
|
||||
"settings.extraFields.params.choices": "آپشن های قابل استفاده",
|
||||
"settings.extraFields.params.defaultValue": "مقدار پیشفرض",
|
||||
"settings.extraFields.params.fieldType": "نوع",
|
||||
@@ -97,12 +398,21 @@
|
||||
"settings.extraFields.params.name": "عنوان",
|
||||
"settings.extraFields.params.order": "ترتیب",
|
||||
"settings.extraFields.params.unit": "واحد",
|
||||
"settings.extraFields.saveField": "",
|
||||
"settings.extraFields.tab": "فیلد های اضافه",
|
||||
"settings.general.baseUrl.label": "لینک Spoolman",
|
||||
"settings.general.baseUrl.tooltip": "آدرس پایگاه داده Spoolman که باید هنگام ایجاد ویژگیهایی مانند کدهای QR استفاده شود.",
|
||||
"settings.general.currency.desc": "",
|
||||
"settings.general.currency.label": "ارز مورد استفاده",
|
||||
"settings.general.roundPrices.label": "",
|
||||
"settings.general.roundPrices.tooltip": "",
|
||||
"settings.general.tab": "تنظیمات کلی",
|
||||
"settings.header": "تنظیمات",
|
||||
"settings.language.desc": "",
|
||||
"settings.language.label": "",
|
||||
"settings.library.lowThreshold.desc": "",
|
||||
"settings.library.lowThreshold.label": "",
|
||||
"settings.library.tab": "",
|
||||
"spool.fields.archived": "آرشیو شده",
|
||||
"spool.fields.comment": "توضیحات",
|
||||
"spool.fields.filament": "فیلامنت",
|
||||
@@ -126,7 +436,16 @@
|
||||
"spool.form.measurementType.length": "طول",
|
||||
"spool.form.measurementType.weight": "وزن",
|
||||
"spool.spool": "رول های فیلامنت",
|
||||
"topbar.addSpools": "",
|
||||
"topbar.searchPlaceholder": "",
|
||||
"unknown": "نامشخص",
|
||||
"validation.hexDigits": "",
|
||||
"validation.maxChars": "",
|
||||
"validation.mustBeGt": "",
|
||||
"validation.mustBeMax": "",
|
||||
"validation.mustBeMin": "",
|
||||
"validation.mustBeNumber": "",
|
||||
"validation.required": "",
|
||||
"vendor.fields.comment": "توضیحات",
|
||||
"vendor.fields.emptySpoolWeight": "وزن قرقره فیلامنت خالی",
|
||||
"vendor.fields.externalId": "شماره خارجی",
|
||||
|
||||
@@ -1,28 +1,163 @@
|
||||
{
|
||||
"add.addAndNew": "Ajouter & nouveau",
|
||||
"add.addN_many": "Ajouter {{count}} bobines",
|
||||
"add.addN_one": "Ajouter {{count}} bobine",
|
||||
"add.addN_other": "Ajouter {{count}} bobines",
|
||||
"add.adding": "Ajout...",
|
||||
"add.advanced": "Spécifications avancées",
|
||||
"add.advancedNote": "densité, diamètre, températures (remplies automatiquement à partir du matériau)",
|
||||
"add.change": "changer",
|
||||
"add.count": "Décompte",
|
||||
"add.createNew": "Créer un nouveau filament",
|
||||
"add.createNewSub": "n'est pas dans votre catalogue ou {{name}}",
|
||||
"add.dbUnavailable": "{{name}} indisponible",
|
||||
"add.duplicate": "dupliquer",
|
||||
"add.duplicateNote": "Les caractéristiques, le fabricant et le prix ont été repris. Donnez-lui un nouveau nom et une nouvelle couleur.",
|
||||
"add.duplicateRename": "Il porte toujours le même nom que l'original : renommez-le pour les distinguer.",
|
||||
"add.duplicateTitle": "Nouveau filament copie de “{{name}}”",
|
||||
"add.filamentNamePlaceholder": "Exemple : PolyTerra Matte Sage",
|
||||
"add.fill.full": "Rempli",
|
||||
"add.fillLevel": "Niveau de remplissage",
|
||||
"add.importNote": "Ce filament sera ajouté à votre catalogue lorsque vous ajouterez les bobines.",
|
||||
"add.inCatalog": "au catalogue",
|
||||
"add.locationHint": "L’endroit où vous rangez physiquement la bobine — une étagère, une caisse ou une imprimante. Laissez vide si vous les gardez toutes au même endroit.",
|
||||
"add.locationPlaceholder": "ex. Étagère A, Caisson 2, Imprimante 1",
|
||||
"add.manufacturerPlaceholder": "exemple : Polymaker",
|
||||
"add.nameHint": "Indiquez la couleur : c’est ce qui permet de distinguer vos filaments.",
|
||||
"add.newFilament": "Ajouter filament",
|
||||
"add.newFilamentTitle": "Nouveau filament",
|
||||
"add.noCatalog": "Aucun filament dans votre catalogue",
|
||||
"add.noManufacturer": "Sans fabriquant",
|
||||
"add.pickColor": "Choisissez une couleur",
|
||||
"add.searchPlaceholder": "Recherchez dans votre catalogue et {{name}}…",
|
||||
"add.searching": "Recherche…",
|
||||
"add.section.filament": "Filament",
|
||||
"add.section.filamentNote": "Le produit sur la bobine — une entrée par couleur.",
|
||||
"add.section.manufacturer": "Fabriquant",
|
||||
"add.section.manufacturerNote": "Qui fabrique le filament ? Ajouté une seule fois, puis réutilisé pour tous leurs filaments.",
|
||||
"add.section.spool": "Bobine",
|
||||
"add.section.spoolNote": "Les bobines physiques qui rejoignent votre inventaire.",
|
||||
"add.section.spoolSharedNote": "Le poids, le poids de la bobine et le prix sont également enregistrés comme valeurs par défaut pour le nouveau filament.",
|
||||
"add.spoolWeightPreset.cardboard": "Carton {{weight}}g",
|
||||
"add.spoolWeightPreset.plastic": "Plastique {{weight}}g",
|
||||
"add.spoolWeightPresetsLead": "Partez d'une bobine standard :",
|
||||
"add.step2": "Étape 2 · Détails de la bobine",
|
||||
"add.step2New": "Étape 2 · Détails du filament et de la bobine",
|
||||
"add.summary_many": "{{count}} bobines",
|
||||
"add.summary_one": "{{count}} bobine",
|
||||
"add.summary_other": "{{count}} bobines",
|
||||
"add.typeToSearchAll": "Tapez pour rechercher parmi des milliers de filaments",
|
||||
"add.typeToSearchMatches": "Tapez pour rechercher — aucun résultat",
|
||||
"add.useExisting": "utiliser un existant",
|
||||
"add.vendorHint.existing": "Utilisation du fabricant existant \"{{name}}\"",
|
||||
"add.vendorHint.new": "Le nouveau fabricant « {{name}} » sera créé",
|
||||
"add.vendorHint.optional": "Facultatif — laissez vide pour ne pas indiquer de fabricant",
|
||||
"add.weightPresets": "Tailles de bobines courantes",
|
||||
"add.yourCatalog": "Votre catalogue",
|
||||
"buttons.apply": "Appliquer",
|
||||
"buttons.archive": "Archiver",
|
||||
"buttons.cancel": "Abandonner",
|
||||
"buttons.clear": "Effacer",
|
||||
"buttons.close": "Fermer",
|
||||
"buttons.delete": "Supprimer",
|
||||
"buttons.edit": "Editer",
|
||||
"buttons.filter": "Filtre",
|
||||
"buttons.save": "Enregistrer",
|
||||
"buttons.showArchived": "Afficher les archives",
|
||||
"buttons.showNoSpools": "Afficher les filaments sans bobine",
|
||||
"buttons.unArchive": "Désarchiver",
|
||||
"changeFilament.action": "Changer",
|
||||
"changeFilament.adoptWeight": "Fixer le poids plein de cette bobine à {{full}}",
|
||||
"changeFilament.adoptWeightHelp": "Il est enregistré à {{current}}, hérité du filament précédent. Le poids consommé ({{used}}) est conservé dans les deux cas, ce qui laisse {{remaining}}.",
|
||||
"changeFilament.apply": "Changer le filament",
|
||||
"changeFilament.applying": "Changement en cours…",
|
||||
"changeFilament.current": "actuel",
|
||||
"changeFilament.done": "Filament changé.",
|
||||
"changeFilament.failed": "Le changement de filament a échoué.",
|
||||
"changeFilament.importNote": "Ce filament sera ajouté à votre catalogue lorsque vous validerez le changement.",
|
||||
"changeFilament.intro": "La bobine n° {{id}} conserve son numéro, son emplacement, ses dates et son historique d’utilisation — seul le filament qu’elle contient change.",
|
||||
"changeFilament.newTag": "nouveau",
|
||||
"changeFilament.next": "Remplacer par",
|
||||
"changeFilament.now": "Actuellement",
|
||||
"changeFilament.pickBelow": "Choisissez un filament ci-dessous",
|
||||
"changeFilament.title": "Changer le filament",
|
||||
"changeFilament.useExisting": "Choisir un filament existant",
|
||||
"changeFilament.weightFollows": "Cette bobine n’a pas de poids plein propre : elle reprend celui du nouveau filament, soit {{full}}, ce qui laisse {{remaining}} après les {{used}} déjà consommés.",
|
||||
"changeVendor.action": "Changer",
|
||||
"changeVendor.apply": "Changer le fabricant",
|
||||
"changeVendor.applying": "Changement en cours…",
|
||||
"changeVendor.clearHint": "Laisser ce filament sans fabricant",
|
||||
"changeVendor.create": "Créer « {{name}} »",
|
||||
"changeVendor.createHint": "Ne fait pas encore partie de vos fabricants — il sera ajouté",
|
||||
"changeVendor.current": "actuel",
|
||||
"changeVendor.done": "Fabricant changé.",
|
||||
"changeVendor.emptySpool": "Bobine vide {{value}}",
|
||||
"changeVendor.failed": "Le changement de fabricant a échoué.",
|
||||
"changeVendor.intro": "« {{name}} » conserve ses bobines, ses caractéristiques et son historique — seul le fabricant sous lequel il est classé change.",
|
||||
"changeVendor.next": "Remplacer par",
|
||||
"changeVendor.noEmptySpool": "Aucun poids de bobine vide",
|
||||
"changeVendor.noMatches": "Aucun fabricant ne correspond",
|
||||
"changeVendor.none": "Aucun fabricant pour l’instant",
|
||||
"changeVendor.noneNote": "Classé sans marque",
|
||||
"changeVendor.now": "Actuellement",
|
||||
"changeVendor.pickBelow": "Choisissez un fabricant ci-dessous",
|
||||
"changeVendor.searchPlaceholder": "Rechercher ou nommer un fabricant",
|
||||
"changeVendor.tareFollows": "Ce filament n’a pas de poids de bobine vide propre : il reprend celui de son fabricant. Après le changement, ce sera {{value}}, c’est-à-dire ce que pèse une bobine vide de ce filament lorsque vous la mesurez.",
|
||||
"changeVendor.tareGone": "Ce filament n’a pas de poids de bobine vide propre et reprend les {{current}} de son fabricant. Après le changement, il n’y en aura plus à reprendre, jusqu’à ce que vous en donniez un au filament.",
|
||||
"changeVendor.title": "Changer le fabricant",
|
||||
"changeVendor.willBeCreated": "Sera créé",
|
||||
"common.decrement": "Diminuer",
|
||||
"common.increment": "Augmenter",
|
||||
"common.remove": "Retirer",
|
||||
"common.search": "Rechercher",
|
||||
"dashboard.addFieldHint": "Ajoutez un champ texte ou à choix aux bobines dans les Réglages pour pouvoir aussi les grouper par ce champ",
|
||||
"dashboard.dashboard": "Tableau de bord",
|
||||
"dashboard.deleteGroup": "Supprimer le groupe",
|
||||
"dashboard.dragHint": "Faites glisser une bobine vers une autre carte pour changer son champ {{field}}, ou à l’intérieur d’une carte pour la réordonner",
|
||||
"dashboard.dropHere": "déposez des bobines ici",
|
||||
"dashboard.emptyHelp": "Cette page regroupe vos bobines selon le champ de votre choix. Ajoutez des bobines pour commencer !",
|
||||
"dashboard.errorEmptyName": "Le nom ne peut pas être vide",
|
||||
"dashboard.errorExists": "Un groupe portant ce nom existe déjà",
|
||||
"dashboard.errorRename": "Le renommage du groupe a échoué",
|
||||
"dashboard.lastUsed": "Utilisée il y a {{time}}",
|
||||
"dashboard.newGroup": "Nouveau groupe",
|
||||
"dashboard.newGroupName": "Nouveau groupe {{n}}",
|
||||
"dashboard.reorderGroup": "Faites glisser pour réordonner le groupe",
|
||||
"dashboard.spoolCount_many": "{{count}} bobines",
|
||||
"dashboard.spoolCount_one": "{{count}} bobine",
|
||||
"dashboard.spoolCount_other": "{{count}} bobines",
|
||||
"dashboard.unassigned": "Sans groupe",
|
||||
"datetime.done": "Terminé",
|
||||
"datetime.hour": "Heure",
|
||||
"datetime.minute": "Minute",
|
||||
"datetime.nextMonth": "Mois suivant",
|
||||
"datetime.now": "Maintenant",
|
||||
"datetime.pick": "Choisir la date et l’heure",
|
||||
"datetime.prevMonth": "Mois précédent",
|
||||
"datetime.time": "Heure",
|
||||
"documentTitle.dashboard.list": "Tableau de bord | Spoolman",
|
||||
"documentTitle.labels.list": "Étiquettes | Spoolman",
|
||||
"documentTitle.library.list": "Bibliothèque | Spoolman",
|
||||
"documentTitle.locations.list": "Emplacements | Spoolman",
|
||||
"documentTitle.settings.list": "Réglages | Spoolman",
|
||||
"filament.fields.addColor": "Ajouter une couleur",
|
||||
"filament.fields.articleNumber": "Numéro d'article",
|
||||
"filament.fields.coaxial": "Coextrudée",
|
||||
"filament.fields.colorHex": "Couleur",
|
||||
"filament.fields.colorType": "Type de couleur",
|
||||
"filament.fields.comment": "Commentaire",
|
||||
"filament.fields.density": "Densité",
|
||||
"filament.fields.diameter": "Diamètre",
|
||||
"filament.fields.externalId": "ID externe",
|
||||
"filament.fields.id": "ID",
|
||||
"filament.fields.id": "Identifiant",
|
||||
"filament.fields.longitudinal": "Longitudinale",
|
||||
"filament.fields.material": "Matériau",
|
||||
"filament.fields.multiColor": "Multi",
|
||||
"filament.fields.name": "Nom",
|
||||
"filament.fields.opacity": "Opacité",
|
||||
"filament.fields.price": "Prix",
|
||||
"filament.fields.registered": "Enregistré",
|
||||
"filament.fields.removeColor": "Retirer la couleur",
|
||||
"filament.fields.settingsBedTemp": "Température du lit",
|
||||
"filament.fields.settingsExtruderTemp": "Température de l'extrudeuse",
|
||||
"filament.fields.singleColor": "Unique",
|
||||
@@ -34,20 +169,253 @@
|
||||
"filament.fieldsHelp.spoolWeight": "Le poids d'une bobine vide. Utilisé pour déterminer le poids d'une bobine.",
|
||||
"filament.fieldsHelp.weight": "Le poids du filament d'une bobine complète (poids net). Ce poids ne doit pas inclure le poids de la bobine elle-même, mais uniquement celui du filament. C'est ce qui est généralement indiqué sur l'emballage.",
|
||||
"filament.filament": "Filaments",
|
||||
"footer.documentation": "Documentation",
|
||||
"footer.reportIssue": "Signaler un problème",
|
||||
"help.help": "Aide",
|
||||
"inspector.addSpoolsOfThis": "Ajouter des bobines de ce filament",
|
||||
"inspector.adjustFailed": "L’ajustement du poids a échoué.",
|
||||
"inspector.adjustHelp": "Une valeur positive consomme du filament, une valeur négative en rend.",
|
||||
"inspector.adjustWeight": "Ajuster le poids",
|
||||
"inspector.apply": "Appliquer",
|
||||
"inspector.applying": "Application en cours…",
|
||||
"inspector.colorHex": "Couleur hexadécimale",
|
||||
"inspector.consumeAmount": "Quantité à consommer :",
|
||||
"inspector.defaultFrom.filament": "{{value}} — valeur par défaut du filament",
|
||||
"inspector.defaultFrom.manufacturer": "{{value}} — valeur par défaut du fabricant",
|
||||
"inspector.delete.deleting": "Suppression en cours…",
|
||||
"inspector.delete.errorGone": "L’élément avait déjà été supprimé.",
|
||||
"inspector.delete.errorSpoolsExist": "Impossible de supprimer ce filament — des bobines l’utilisent encore.",
|
||||
"inspector.delete.errorUnknown": "La suppression a échoué. Consultez les journaux du serveur pour en savoir plus.",
|
||||
"inspector.delete.filament": "Supprimer le filament",
|
||||
"inspector.delete.filamentBlockedHint": "Supprimez d’abord ces bobines. Les archiver ne suffit pas.",
|
||||
"inspector.delete.filamentBlockedTitle": "Ce filament ne peut pas être supprimé",
|
||||
"inspector.delete.filamentBlocked_many": "{{count}} bobines utilisent encore « {{name}} », archives comprises.",
|
||||
"inspector.delete.filamentBlocked_one": "{{count}} bobine utilise encore « {{name}} », archives comprises.",
|
||||
"inspector.delete.filamentBlocked_other": "{{count}} bobines utilisent encore « {{name}} », archives comprises.",
|
||||
"inspector.delete.filamentBody": "« {{name}} » sera retiré de votre catalogue. Cette action est irréversible.",
|
||||
"inspector.delete.filamentDone": "Filament supprimé.",
|
||||
"inspector.delete.filamentTitle": "Supprimer ce filament ?",
|
||||
"inspector.delete.spool": "Supprimer la bobine",
|
||||
"inspector.delete.spoolBody": "La bobine n° {{id}} de « {{name}} » sera supprimée, ainsi que son historique d’utilisation. Cette action est irréversible.",
|
||||
"inspector.delete.spoolDone": "Bobine supprimée.",
|
||||
"inspector.delete.spoolRemaining": "Il lui reste encore {{weight}} de filament. Archivez-la plutôt, si vous voulez simplement l’écarter.",
|
||||
"inspector.delete.spoolTitle": "Supprimer cette bobine ?",
|
||||
"inspector.delete.vendor": "Supprimer le fabricant",
|
||||
"inspector.delete.vendorBody": "« {{name}} » sera supprimé. Cette action est irréversible.",
|
||||
"inspector.delete.vendorDone": "Fabricant supprimé.",
|
||||
"inspector.delete.vendorOrphans_many": "Ses {{count}} filaments sont conservés, mais se retrouvent sans fabricant.",
|
||||
"inspector.delete.vendorOrphans_one": "Son {{count}} filament est conservé, mais se retrouve sans fabricant.",
|
||||
"inspector.delete.vendorOrphans_other": "Ses {{count}} filaments sont conservés, mais se retrouvent sans fabricant.",
|
||||
"inspector.delete.vendorTitle": "Supprimer ce fabricant ?",
|
||||
"inspector.duplicateFilament": "Dupliquer",
|
||||
"inspector.empty": "Sélectionnez une bobine, un filament ou un fabricant dans la liste pour en afficher le détail ici.",
|
||||
"inspector.enterValidLength": "Saisissez une longueur valide.",
|
||||
"inspector.enterValidWeight": "Saisissez un poids valide.",
|
||||
"inspector.loading": "Chargement…",
|
||||
"inspector.manageExtraFields": "Gérer les champs",
|
||||
"inspector.measuredHelp": "Poids total de la bobine et du filament restant, tel que lu sur une balance.",
|
||||
"inspector.multi": "multi ×{{count}}",
|
||||
"inspector.newGross": "Nouveau poids brut :",
|
||||
"inspector.noExtraFields": "Aucun pour l’instant — ajoutez vos propres champs pour suivre ce que Spoolman ne gère pas.",
|
||||
"inspector.notFound": "Cet élément est introuvable. Il a peut-être été supprimé.",
|
||||
"inspector.ofRemaining": "sur {{weight}} restants · {{length}} m",
|
||||
"inspector.openFilament": "Ouvrir le filament",
|
||||
"inspector.openLink": "Ouvrir {{url}} dans un nouvel onglet",
|
||||
"inspector.openManufacturer": "Ouvrir le fabricant",
|
||||
"inspector.override.byFilament": "Remplacé par ce filament — {{value}}",
|
||||
"inspector.override.bySpool": "Remplacé par cette bobine — {{value}}",
|
||||
"inspector.override.overridesFilament": "Remplace le filament — {{value}}",
|
||||
"inspector.override.overridesManufacturer": "Remplace le fabricant — {{value}}",
|
||||
"inspector.specs": "Caractéristiques — modifiables sur place",
|
||||
"inspector.spoolsCount": "Bobines · {{count}}",
|
||||
"inspector.spoolsTotalRemaining": "{{weight}} au total",
|
||||
"inspector.used": "consommé",
|
||||
"inspector.vendorSub_many": "{{count}} filaments",
|
||||
"inspector.vendorSub_one": "{{count}} filament",
|
||||
"inspector.vendorSub_other": "{{count}} filaments",
|
||||
"kofi": "Me donner un pourboire sur Ko-fi",
|
||||
"labels.addHead": "Ajouter",
|
||||
"labels.addQr": "QR code",
|
||||
"labels.addRect": "Rectangle",
|
||||
"labels.addSwatch": "Pastille de couleur",
|
||||
"labels.addText": "Texte / champ",
|
||||
"labels.align": "Alignement",
|
||||
"labels.alignCenter": "Centré",
|
||||
"labels.alignLeft": "À gauche",
|
||||
"labels.alignRight": "À droite",
|
||||
"labels.blank": "Vous n’avez encore aucun modèle d’étiquette.",
|
||||
"labels.bold": "Gras",
|
||||
"labels.canvasHint": "Glissez pour déplacer · cliquez pour sélectionner · poignées pour redimensionner.",
|
||||
"labels.centerLogo": "Centrer le logo Spoolman",
|
||||
"labels.chooseField": "Choisissez un champ…",
|
||||
"labels.clearFill": "Supprimer le remplissage (contour seul)",
|
||||
"labels.copies": "Exemplaires",
|
||||
"labels.cornerRadiusMm": "Rayon des coins",
|
||||
"labels.createFirst": "Créez votre première étiquette",
|
||||
"labels.cutGuides": "Repères de coupe",
|
||||
"labels.deleteConfirm": "Supprimer ce modèle d’étiquette ?",
|
||||
"labels.deleteElement": "Supprimer l’élément",
|
||||
"labels.designName": "Nom du modèle",
|
||||
"labels.designerDesc": "Concevez des étiquettes à QR code avec n’importe quel champ de bobine, de filament ou de fabricant, puis imprimez-les sur planche ou sur une imprimante d’étiquettes. Les modèles sont enregistrés sur le serveur.",
|
||||
"labels.designerTitle": "Éditeur d’étiquettes",
|
||||
"labels.dpi": "Résolution",
|
||||
"labels.dpiHint": "Accordez-la à votre imprimante pour que les petites étiquettes restent nettes : 203 ppp pour la plupart des imprimantes thermiques, 300 ou plus pour le laser et le jet d’encre.",
|
||||
"labels.duplicate": "Dupliquer",
|
||||
"labels.exportDescAml": "Enregistre un fichier d’étiquette .aml par étiquette sélectionnée, chacune de {{w}} × {{h}} mm. S’ouvre dans les applications LPAPI fournies avec la plupart des imprimantes d’étiquettes thermiques, qui lisent la taille physique dans le fichier.",
|
||||
"labels.exportDescPng": "Enregistre une image PNG par étiquette sélectionnée, chacune de {{w}} × {{h}} mm.",
|
||||
"labels.exportFormat": "Format de fichier",
|
||||
"labels.exportFormatOptions.aml": "Fichier d’étiquette AML",
|
||||
"labels.exportFormatOptions.png": "Image PNG",
|
||||
"labels.fields.bedTemp": "Temp. plateau",
|
||||
"labels.fields.diameterMm": "Diamètre (mm)",
|
||||
"labels.fields.groupVendor": "Fabricant",
|
||||
"labels.fields.initialG": "Initial (g)",
|
||||
"labels.fields.netWeightG": "Poids net (g)",
|
||||
"labels.fields.remainingG": "Restant (g)",
|
||||
"labels.filamentsSelected_many": "{{count}} filaments sélectionnés",
|
||||
"labels.filamentsSelected_one": "{{count}} filament sélectionné",
|
||||
"labels.filamentsSelected_other": "{{count}} filaments sélectionnés",
|
||||
"labels.fill": "Remplissage",
|
||||
"labels.fitWidth": "Ajuster la largeur aux colonnes",
|
||||
"labels.fitWidthHint": "Règle la largeur de l’étiquette pour que le nombre de colonnes choisi remplisse la page.",
|
||||
"labels.fontMm": "Police",
|
||||
"labels.gridInfo": "{{cols}} × {{rows}} = {{perPage}} étiquettes par page",
|
||||
"labels.hMm": "H",
|
||||
"labels.heightMm": "Hauteur",
|
||||
"labels.hintNowrap": "Le texte reste sur une seule ligne ; ce qui dépasse la largeur est coupé.",
|
||||
"labels.hintSwatch": "Rempli avec la ou les couleurs du filament de la bobine au moment de l’impression.",
|
||||
"labels.hintWrap": "Encadrez un champ pour le masquer lorsqu’il est vide :",
|
||||
"labels.imageDesc": "",
|
||||
"labels.imageZipNote": "Au-delà de {{threshold}} étiquettes, le tout est livré dans un seul fichier zip.",
|
||||
"labels.insertField": "Insérer un champ",
|
||||
"labels.kind.qr": "QR code",
|
||||
"labels.kind.rect": "Rectangle",
|
||||
"labels.kind.swatch": "Pastille",
|
||||
"labels.kind.text": "Texte",
|
||||
"labels.labelSize": "Taille de l’étiquette",
|
||||
"labels.labelType": "Type d’étiquette",
|
||||
"labels.layout": "Disposition",
|
||||
"labels.modeImage": "Fichiers",
|
||||
"labels.modeLabel": "Imprimante d’étiquettes",
|
||||
"labels.modeSheet": "Planche (mosaïque)",
|
||||
"labels.new": "Nouveau",
|
||||
"labels.newText": "Nouveau texte",
|
||||
"labels.noDesignsOption": "Aucun modèle pour l’instant",
|
||||
"labels.noFilaments": "Aucun filament.",
|
||||
"labels.noSpools": "Aucune bobine.",
|
||||
"labels.onePerLabel": "Une page de {{w}} × {{h}} mm par étiquette.",
|
||||
"labels.preparing": "Préparation…",
|
||||
"labels.preview": "Aperçu",
|
||||
"labels.previewWith": "Aperçu avec",
|
||||
"labels.printN_many": "Imprimer {{count}} étiquettes",
|
||||
"labels.printN_one": "Imprimer {{count}} étiquette",
|
||||
"labels.printN_other": "Imprimer {{count}} étiquettes",
|
||||
"labels.radiusMm": "Rayon",
|
||||
"labels.sampleData": "Données d’exemple",
|
||||
"labels.saveAsFormat": "Enregistrer au format {{format}}",
|
||||
"labels.saved": "Enregistré",
|
||||
"labels.saving": "Enregistrement…",
|
||||
"labels.searchFilaments": "Rechercher des filaments…",
|
||||
"labels.searchSpools": "Rechercher des bobines…",
|
||||
"labels.selectAllShort": "Tout",
|
||||
"labels.selectAtLeastOne": "Sélectionnez au moins une bobine.",
|
||||
"labels.selectAtLeastOneFilament": "Sélectionnez au moins un filament.",
|
||||
"labels.selectDesign": "Choisir un modèle d’étiquette",
|
||||
"labels.selectElement": "Sélectionnez un élément pour le modifier, ou ajoutez-en un depuis la palette.",
|
||||
"labels.selectNoneShort": "Aucun",
|
||||
"labels.selectRecentHint": "Sélectionner les bobines ajoutées dans les dernières 24 heures",
|
||||
"labels.selectRecentShort": "Récentes ({{count}})",
|
||||
"labels.showingFilament": "Affichage du filament n° {{id}}",
|
||||
"labels.showingReal": "Affichage des données réelles de la bobine.",
|
||||
"labels.showingSpool": "Affichage de la bobine n° {{id}}",
|
||||
"labels.showingTags": "Les champs s’affichent sous forme d’étiquettes tant que vous n’avez pas choisi une bobine ci-dessus.",
|
||||
"labels.sizeMm": "Taille",
|
||||
"labels.skipHint": "« Ignorer des cases » laisse ce nombre de cases vides avant la première étiquette, ce qui permet de réutiliser une planche entamée : comptez les étiquettes déjà décollées, de gauche à droite en partant du haut.",
|
||||
"labels.sortHint": "Trier les bobines",
|
||||
"labels.sortId": "N°",
|
||||
"labels.sortNewest": "Plus récentes",
|
||||
"labels.stroke": "Contour",
|
||||
"labels.strokeMm": "Contour",
|
||||
"labels.tabDesign": "Conception",
|
||||
"labels.tabPrint": "Impression",
|
||||
"labels.textTemplate": "Texte / modèle",
|
||||
"labels.typeFilament": "Filament",
|
||||
"labels.typeHint": "Les étiquettes de filament omettent les champs propres aux bobines, et leur QR code renvoie vers le filament plutôt que vers une bobine.",
|
||||
"labels.typeSpool": "Bobine",
|
||||
"labels.unknownFilament": "Filament inconnu",
|
||||
"labels.wMm": "L",
|
||||
"labels.widthMm": "Largeur",
|
||||
"labels.wrapText": "Retour à la ligne",
|
||||
"labels.xMm": "X",
|
||||
"labels.yMm": "Y",
|
||||
"library.apiError": "Impossible de joindre l’API de Spoolman. Le serveur est-il démarré ?",
|
||||
"library.collapseGroup": "Masquer ces bobines",
|
||||
"library.dateFilter.ago": "il y a {{span}}",
|
||||
"library.dateFilter.between": "{{from}} — {{to}}",
|
||||
"library.dateFilter.customRange": "Période personnalisée",
|
||||
"library.dateFilter.from": "Du",
|
||||
"library.dateFilter.last": "{{span}} écoulés",
|
||||
"library.dateFilter.never": "Jamais",
|
||||
"library.dateFilter.olderThan": "Plus ancien que {{span}}",
|
||||
"library.dateFilter.since": "Depuis le {{date}}",
|
||||
"library.dateFilter.to": "Au (facultatif)",
|
||||
"library.dateFilter.until": "Jusqu’au {{date}}",
|
||||
"library.emptyBody": "Ajoutez votre première bobine pour commencer à suivre votre filament.",
|
||||
"library.emptyFiltered": "Aucune correspondance parmi les {{unit}} avec les filtres actuels.",
|
||||
"library.emptyTitle": "Aucune bobine pour l’instant",
|
||||
"library.expandGroup": "Afficher ces bobines",
|
||||
"library.filterBy": "Filtrer par",
|
||||
"library.groupBy": "Grouper",
|
||||
"library.groupNone": "Aucun (liste simple)",
|
||||
"library.groupSpools_many": "{{count}} bobines",
|
||||
"library.groupSpools_one": "{{count}} bobine",
|
||||
"library.groupSpools_other": "{{count}} bobines",
|
||||
"library.nUnused": "×{{count}} neuves",
|
||||
"library.noLocation": "sans emplacement",
|
||||
"library.noSpools": "Aucune bobine",
|
||||
"library.noValues": "Aucune valeur",
|
||||
"library.openGroup": "Ouvrir {{name}}",
|
||||
"library.openManufacturer": "Ouvrir le fabricant {{name}}",
|
||||
"library.resizeList": "Redimensionner la liste (double-clic pour réinitialiser)",
|
||||
"library.reverseSort": "Inverser l’ordre de tri",
|
||||
"library.section.extra": "Champs supplémentaires",
|
||||
"library.section.filament": "Filament",
|
||||
"library.section.spool": "Bobine",
|
||||
"library.section.vendor": "Fabricant",
|
||||
"library.showMore": "afficher {{count}} de plus",
|
||||
"library.sort.nozzle": "Temp. buse",
|
||||
"library.sortBy": "Trier",
|
||||
"library.unassigned": "non assignée",
|
||||
"library.unitGroups": "groupes",
|
||||
"library.unitSpools": "bobines",
|
||||
"library.unused": "neuve",
|
||||
"library.unusedGroup": "{{count}} neuves · {{weight}} g chacune",
|
||||
"library.unusedGroupMixed": "{{count}} neuves",
|
||||
"library.unusedSub": "{{weight}} g chacune · {{location}}",
|
||||
"library.unusedSubMixed": "{{location}}",
|
||||
"library.used": "entamée",
|
||||
"library.usedAgo": "utilisée il y a {{time}}",
|
||||
"loading": "Chargement",
|
||||
"locations.locations": "Emplacements",
|
||||
"locations.newLocation": "Créer un emplacement",
|
||||
"locations.noLocation": "Pas de localisation",
|
||||
"locations.noLocationsHelp": "Cette page vous permet d'organiser vos bobines par lieu, ajoutez une bobine pour commencer !",
|
||||
"nav.labels": "Étiquettes",
|
||||
"nav.library": "Bibliothèque",
|
||||
"no": "Non",
|
||||
"notifications.error": "Erreur (status code : {{statusCode}})",
|
||||
"notifications.saveSuccessful": "Sauvegarde réussie !",
|
||||
"pagination.empty": "Aucune {{unit}}",
|
||||
"pagination.next": "Page suivante",
|
||||
"pagination.pageSize": "Taille de page",
|
||||
"pagination.perPage": "{{size}} par page",
|
||||
"pagination.prev": "Page précédente",
|
||||
"pagination.range": "{{from}}–{{to}} sur {{total}} {{unit}}",
|
||||
"printing.generic.columns": "Colonnes",
|
||||
"printing.generic.customSize": "Personnaliser",
|
||||
"printing.generic.description": "Ajustez les paramètres ci-dessous pour obtenir la mise en page d'impression souhaitée. Gardez à l'esprit que les imprimantes et votre système d'exploitation peuvent appliquer leurs propres marges et mises à l'échelle, il se peut donc que vous deviez faire quelques essais avant que tout soit correct. Testez-le sur une feuille de papier ordinaire avant d'imprimer les étiquettes en elles mêmes.",
|
||||
"printing.generic.dimensions": "Dimensions",
|
||||
"printing.generic.gridTooWide": "Les étiquettes sont plus larges que la page. Réduisez le nombre de colonnes, l’espacement ou les marges.",
|
||||
"printing.generic.helpMargin": "Les marges doivent être configurées en fonction de votre papier à étiquettes et de votre imprimante, leur modification aura une incidence sur la taille de l'ensemble de la grille.",
|
||||
"printing.generic.helpPrinterMargin": "La zone de sécurité doit être définie en fonction de la proximité du bord du papier que votre imprimante peut imprimer, la modification de ces paramètres n'affectera pas l'ensemble de la grille.",
|
||||
"printing.generic.horizontalSpacing": "Espacement horizontal",
|
||||
@@ -65,7 +433,11 @@
|
||||
"printing.generic.skipItems": "Articles ignorés",
|
||||
"printing.generic.verticalSpacing": "Espacement vertical",
|
||||
"printing.qrcode.button": "Imprimer des étiquettes",
|
||||
"printing.qrcode.customUrl.caveat": "Une URL personnalisée ne ramènera pas vers Spoolman à la lecture — utilisez-la pour pointer un QR code imprimé vers une application externe ou un autre serveur.",
|
||||
"printing.qrcode.customUrl.hint": "Insérez l’identifiant de la bobine où vous voulez à l’aide du marqueur",
|
||||
"printing.qrcode.customUrl.label": "Modèle d’URL personnalisée",
|
||||
"printing.qrcode.useHTTPUrl.label": "Lien du QR code",
|
||||
"printing.qrcode.useHTTPUrl.options.custom": "URL personnalisée",
|
||||
"printing.qrcode.useHTTPUrl.options.default": "Défaut",
|
||||
"printing.qrcode.useHTTPUrl.options.url": "URL",
|
||||
"printing.qrcode.useHTTPUrl.preview": "Prévisualisation :",
|
||||
@@ -74,19 +446,47 @@
|
||||
"printing.spoolSelect.selectedTotal_one": "{{count}} bobine sélectionnée",
|
||||
"printing.spoolSelect.selectedTotal_other": "{{count}} bobines sélectionnées",
|
||||
"scanner.description": "Scannez un code QR de Spoolman pour afficher les détails de la bobine.",
|
||||
"scanner.error.inUse": "La caméra est déjà utilisée par une autre application.",
|
||||
"scanner.error.insecureContext": "La page n'est pas servie par HTTPS.",
|
||||
"scanner.error.notAllowed": "Vous n'avez pas autorisé l'accès à l'appareil photo.",
|
||||
"scanner.error.notFound": "Aucun appareil photo n'a été trouvé.",
|
||||
"scanner.error.streamApiNotSupported": "Le navigateur ne prend pas en charge l'API MediaStream.",
|
||||
"scanner.error.unknown": "Une erreur inconnue s'est produite. ({{error}})",
|
||||
"scanner.starting": "Démarrage de la caméra…",
|
||||
"scanner.title": "Scanner de code QR",
|
||||
"search.colorHint": "Les noms de couleurs doivent être saisis en anglais.",
|
||||
"search.moreSpools": "+{{count}} de plus",
|
||||
"search.noResults": "Aucun résultat",
|
||||
"search.searching": "Recherche en cours…",
|
||||
"search.section.filaments": "Filaments",
|
||||
"search.section.spools": "Bobines",
|
||||
"search.section.vendors": "Fabricants",
|
||||
"search.threshold": "Correspondance de couleur",
|
||||
"search.unknownFilament": "Filament inconnu",
|
||||
"settings.appearance.tab": "Apparence",
|
||||
"settings.appearance.theme.dark": "Sombre",
|
||||
"settings.appearance.theme.desc": "Thème de couleurs (ce navigateur uniquement)",
|
||||
"settings.appearance.theme.label": "Thème",
|
||||
"settings.appearance.theme.light": "Clair",
|
||||
"settings.appearance.theme.system": "Système",
|
||||
"settings.extraFields.addChoice": "ajouter un choix…",
|
||||
"settings.extraFields.addChoicesFirst": "Ajoutez d’abord des choix",
|
||||
"settings.extraFields.addEntityField": "Ajouter un champ {{entity}}",
|
||||
"settings.extraFields.booleanFalse": "Non",
|
||||
"settings.extraFields.booleanTrue": "Oui",
|
||||
"settings.extraFields.deleteConfirm": "Supprimer le champ {{name}} ?",
|
||||
"settings.extraFields.description.intro": "Ici vous pouvez ajouter des champs personnalisés supplémentaires à vos entités.",
|
||||
"settings.extraFields.deleteConfirm": "Supprimer le champ {{name}} de {{entity}} ?",
|
||||
"settings.extraFields.description.constraints": "Une fois qu'un champ est ajouté, vous ne pouvez plus changer sa clé ou son type, et pour les champs de types \"Choix\", vous ne pouvez plus retirer un choix ou changer l'état des choix multiples. Si vous supprimez un champ, les données associées aux entités seront supprimées.",
|
||||
"settings.extraFields.description.intro": "Ici vous pouvez ajouter des champs personnalisés supplémentaires à vos entités.",
|
||||
"settings.extraFields.description.keyUsage": "La clé correspond à ce que les autres programmes lisent/écrivent, donc si votre champs doit s'intégrer avec un programme tiers, assurez-vous de le configurer correctement. La valeur par défaut n'est appliquées qu'aux nouveaux éléments.",
|
||||
"settings.extraFields.description.tableViews": "Les champs supplementaires ne peuvent pas être triés ou filtrés dans les vues de table.",
|
||||
"settings.extraFields.editorEdit": "Modifier le champ {{entity}}",
|
||||
"settings.extraFields.editorNew": "Nouveau champ {{entity}}",
|
||||
"settings.extraFields.errors.choiceNeeded": "Un champ à choix nécessite au moins un choix.",
|
||||
"settings.extraFields.errors.choicesRemoved": "Les choix existants ne peuvent pas être retirés : {{choices}}.",
|
||||
"settings.extraFields.errors.deleteFailed": "La suppression du champ a échoué.",
|
||||
"settings.extraFields.errors.keyFormat": "La clé ne doit contenir que des minuscules, des chiffres et des tirets bas.",
|
||||
"settings.extraFields.errors.nameRequired": "Le nom est obligatoire.",
|
||||
"settings.extraFields.errors.saveFailed": "L’enregistrement du champ a échoué.",
|
||||
"settings.extraFields.fieldType.boolean": "Booléen",
|
||||
"settings.extraFields.fieldType.choice": "Choix",
|
||||
"settings.extraFields.fieldType.datetime": "Date et heure",
|
||||
@@ -95,7 +495,13 @@
|
||||
"settings.extraFields.fieldType.integer": "Entier",
|
||||
"settings.extraFields.fieldType.integerRange": "Plage d'entier",
|
||||
"settings.extraFields.fieldType.text": "Texte",
|
||||
"settings.extraFields.max": "max",
|
||||
"settings.extraFields.min": "min",
|
||||
"settings.extraFields.multiSuffix": " · multiple",
|
||||
"settings.extraFields.multiple": "Multiple",
|
||||
"settings.extraFields.namePlaceholder": "Nom affiché",
|
||||
"settings.extraFields.nonUniqueKeyError": "La clé doit être unique.",
|
||||
"settings.extraFields.none": "Aucun champ supplémentaire défini pour {{entity}}.",
|
||||
"settings.extraFields.params.choices": "Choix",
|
||||
"settings.extraFields.params.defaultValue": "Valeur par défaut",
|
||||
"settings.extraFields.params.fieldType": "Type",
|
||||
@@ -103,17 +509,42 @@
|
||||
"settings.extraFields.params.name": "Nom",
|
||||
"settings.extraFields.params.order": "Ordre",
|
||||
"settings.extraFields.params.unit": "Unité",
|
||||
"settings.extraFields.reorderChoice": "Faites glisser, ou utilisez les flèches du clavier, pour réordonner ce choix.",
|
||||
"settings.extraFields.saveField": "Enregistrer le champ",
|
||||
"settings.extraFields.tab": "Champs additionnel",
|
||||
"settings.general.baseUrl.label": "Base de l'URL",
|
||||
"settings.general.baseUrl.tooltip": "La base de l'URL à utiliser lors de la génération de QR codes.",
|
||||
"settings.general.currency.desc": "Code ISO à trois lettres (par exemple EUR, USD) utilisé pour les prix",
|
||||
"settings.general.currency.label": "Devise",
|
||||
"settings.general.roundPrices.label": "Arrondir les prix",
|
||||
"settings.general.roundPrices.tooltip": "Arrondir les prix au nombre entier le plus proche.",
|
||||
"settings.general.tab": "Général",
|
||||
"settings.header": "Paramètres",
|
||||
"settings.language.desc": "Langue de l’interface (ce navigateur uniquement)",
|
||||
"settings.language.label": "Langue",
|
||||
"settings.library.lowThreshold.desc": "Les bobines à ce poids ou en dessous sont signalées en rouge (ce navigateur uniquement)",
|
||||
"settings.library.lowThreshold.label": "Seuil de stock bas",
|
||||
"settings.library.tab": "Comportement de la bibliothèque",
|
||||
"settings.scanner.autoNavigate.desc": "Ouvrir automatiquement, dans ce navigateur, la bobine ou le filament lu par un lecteur de puces.",
|
||||
"settings.scanner.autoNavigate.label": "Ouverture automatique",
|
||||
"settings.scanner.docs": "Comment configurer un lecteur de puces",
|
||||
"settings.scanner.lastSeen": "il y a {{when}}",
|
||||
"settings.scanner.pair": "Associer par lecture",
|
||||
"settings.scanner.reader.anyDesc": "Les lectures de n’importe quel lecteur ouvrent les bobines dans ce navigateur. Vous pouvez en associer un en particulier si vous souhaitez un contrôle plus fin. C’est aussi ce lecteur qui servira à ajouter de nouvelles puces aux bobines et aux filaments.",
|
||||
"settings.scanner.reader.label": "Lecteur de puces",
|
||||
"settings.scanner.reader.pairedDesc": "Seules les lectures de ce lecteur ouvrent les bobines dans ce navigateur.",
|
||||
"settings.scanner.recent": "Lecteurs récents",
|
||||
"settings.scanner.recentNone": "Aucun lecteur en mémoire. Configurez un lecteur de puces, puis lisez une puce pour le voir apparaître ici.",
|
||||
"settings.scanner.tab": "Lecture de puces",
|
||||
"settings.scanner.unpair": "Utiliser n’importe quel lecteur",
|
||||
"settings.scanner.use": "Utiliser celui-ci",
|
||||
"settings.scanner.waiting": "Présentez une puce sur le lecteur que vous souhaitez associer…",
|
||||
"sponsor": "Soutenez-moi sur GitHub",
|
||||
"spool.fields.archived": "Archivé",
|
||||
"spool.fields.comment": "Commentaire",
|
||||
"spool.fields.filament": "Filament",
|
||||
"spool.fields.firstUsed": "Première utilisation",
|
||||
"spool.fields.id": "ID",
|
||||
"spool.fields.id": "Identifiant",
|
||||
"spool.fields.lastUsed": "Dernière utilisation",
|
||||
"spool.fields.location": "Localisation",
|
||||
"spool.fields.lotNr": "N° de Lot",
|
||||
@@ -122,21 +553,85 @@
|
||||
"spool.fields.price": "Prix",
|
||||
"spool.fields.registered": "Enregistré",
|
||||
"spool.fields.remainingWeight": "Poids restant",
|
||||
"spool.fields.spoolWeight": "Poids de la bobine",
|
||||
"spool.fields.usedWeight": "Poids utilisé",
|
||||
"spool.fields.weight": "Poids",
|
||||
"spool.fieldsHelp.location": "L'emplacement de la bobine si vous stockez vos bobines à plusieurs endroits.",
|
||||
"spool.fieldsHelp.lotNr": "Numéro de lot du fabricant. Peut être utilisé pour s'assurer que la couleur d'une impression est homogène si plusieurs bobines sont utilisées.",
|
||||
"spool.fieldsHelp.measuredWeight": "Le poids du filament et de la bobine.",
|
||||
"spool.fieldsHelp.price": "Prix d'une bobine complète. S'il n'est pas défini, le prix du filament sera pris en compte.",
|
||||
"spool.fieldsHelp.remainingWeight": "La quantité de filament restant sur la bobine. Pour une nouvelle bobine, cela devrait correspondre au poids de la bobine.",
|
||||
"spool.fieldsHelp.spoolWeight": "Ce que pèse cette bobine à vide. Laissez le champ libre pour suivre le poids de bobine du filament, et renseignez-le lorsque cette bobine précise diffère — un rouleau rembobiné, ou un mandrin carton remplacé par du plastique. C’est ce qui est soustrait de la mesure lorsque vous ajustez au poids pesé : une valeur erronée fausse aussi la quantité de filament restante.",
|
||||
"spool.fieldsHelp.usedWeight": "Combien de filament a été utilisé à partir de la bobine. Une bobine neuve devrait avoir 0g utilisé.",
|
||||
"spool.fieldsHelp.weight": "Quantité de filament que contenait cette bobine pleine (poids net, sans compter la bobine elle-même). Laissez le champ libre pour suivre le poids du filament, et renseignez-le lorsque cette bobine précise diffère — un rouleau entamé, ou le même filament acheté sur une bobine plus grande.",
|
||||
"spool.form.measurementType.length": "Longueur",
|
||||
"spool.form.measurementType.weight": "Poids",
|
||||
"spool.spool": "Bobines",
|
||||
"tags.add": "Ajouter une puce",
|
||||
"tags.added": "Puce associée.",
|
||||
"tags.addedOn": "Ajoutée le {{date}}",
|
||||
"tags.modal.alreadyHere": "Cette puce identifie déjà cette bobine.",
|
||||
"tags.modal.alreadyHereFilament": "Cette puce identifie déjà ce filament.",
|
||||
"tags.modal.badUid": "L’UID d’une puce est hexadécimal, par exemple 04A2B3C4.",
|
||||
"tags.modal.checking": "Vérification…",
|
||||
"tags.modal.failed": "L’association de la puce a échoué.",
|
||||
"tags.modal.filamentNamed": "le filament {{name}}",
|
||||
"tags.modal.free": "Cette puce n’est encore associée à rien.",
|
||||
"tags.modal.intro": "Présenter cette puce sur un lecteur ouvrira désormais la bobine n° {{id}}.",
|
||||
"tags.modal.introFilament": "Présenter cette puce sur un lecteur ouvrira désormais ce filament.",
|
||||
"tags.modal.lastSeenOn": "{{reader}} a lu {{uid}} en dernier.",
|
||||
"tags.modal.link": "Associer la puce",
|
||||
"tags.modal.linking": "Association en cours…",
|
||||
"tags.modal.move": "La déplacer ici depuis la n° {{id}}",
|
||||
"tags.modal.moveFailed": "Le déplacement de la puce a échoué. Elle peut n’être désormais associée à aucune des deux bobines — essayez de l’associer à nouveau.",
|
||||
"tags.modal.moveFailedFilament": "Le déplacement de la puce a échoué. Elle peut n’être désormais associée à rien — essayez de l’associer à nouveau.",
|
||||
"tags.modal.moveHere": "La déplacer ici",
|
||||
"tags.modal.moving": "Déplacement en cours…",
|
||||
"tags.modal.phoneReading": "Maintenez la puce contre votre téléphone…",
|
||||
"tags.modal.phoneScan": "Lire une puce avec ce téléphone",
|
||||
"tags.modal.spoolNamed": "la bobine n° {{id}}, {{name}}",
|
||||
"tags.modal.spoolShort": "la bobine n° {{id}}",
|
||||
"tags.modal.takenBy": "Actuellement associée à {{spool}}.",
|
||||
"tags.modal.title": "Associer une puce",
|
||||
"tags.modal.uidHelp": "Les séparateurs et la casse n’ont aucune importance : 04:a2:b3:c4, 04-A2-B3-C4 et 04a2b3c4 désignent la même puce.",
|
||||
"tags.modal.uidLabel": "UID de la puce",
|
||||
"tags.modal.uidPlaceholder": "04A2B3C4",
|
||||
"tags.modal.useLastSeen": "L’utiliser",
|
||||
"tags.modal.waitingAny": "En attente d’une lecture sur n’importe quel lecteur.",
|
||||
"tags.modal.waitingOn": "En attente d’une lecture sur {{reader}}.",
|
||||
"tags.moved": "Puce déplacée ici depuis la bobine n° {{id}}.",
|
||||
"tags.movedFromFilament": "Puce déplacée ici depuis le filament {{name}}.",
|
||||
"tags.nfc.insecureContext": "La lecture des puces nécessite une connexion sécurisée. Ouvrez Spoolman en HTTPS pour utiliser le NFC de votre téléphone.",
|
||||
"tags.nfc.notAllowed": "Ce site n’est pas autorisé à utiliser le NFC. Accordez-lui la permission dans les réglages de site de votre navigateur, puis réessayez.",
|
||||
"tags.nfc.notReadable": "Le lecteur NFC est indisponible — une autre application l’utilise peut-être.",
|
||||
"tags.nfc.notSupported": "Ce téléphone n’a pas de NFC, ou le NFC est désactivé dans les réglages du système.",
|
||||
"tags.nfc.unknown": "La lecture de la puce a échoué.",
|
||||
"tags.none": "Aucune puce associée.",
|
||||
"tags.scan.openedFilament": "Puce lue : filament {{name}} ouvert.",
|
||||
"tags.scan.openedSpool": "Puce lue : bobine n° {{id}} ouverte, {{name}}.",
|
||||
"tags.scan.unknown": "Puce inconnue {{uid}}. Ouvrez la bobine à laquelle elle appartient et utilisez « Ajouter une puce » pour l’associer.",
|
||||
"tags.section": "Puces",
|
||||
"tags.unlink": "Dissocier",
|
||||
"tags.unlinkBody": "La puce {{uid}} cessera d’identifier cette bobine. Rien n’est écrit sur la puce elle-même : vous pourrez l’associer à nouveau — à cette bobine ou à une autre — quand vous le souhaiterez.",
|
||||
"tags.unlinkBodyFilament": "La puce {{uid}} cessera d’identifier ce filament. Rien n’est écrit sur la puce elle-même : vous pourrez l’associer à nouveau — ici ou ailleurs — quand vous le souhaiterez.",
|
||||
"tags.unlinkFailed": "La dissociation de la puce a échoué.",
|
||||
"tags.unlinkTitle": "Dissocier cette puce ?",
|
||||
"tags.unlinked": "Puce dissociée.",
|
||||
"tags.unlinking": "Dissociation en cours…",
|
||||
"topbar.addSpools": "Ajouter des bobines",
|
||||
"topbar.searchPlaceholder": "Rechercher — essayez « red » ou « pla »",
|
||||
"unknown": "Inconnu",
|
||||
"validation.hexDigits": "Utilisez 6 ou 8 chiffres hexadécimaux",
|
||||
"validation.maxChars": "{{max}} caractères au maximum",
|
||||
"validation.mustBeGt": "Doit être supérieur à {{value}}",
|
||||
"validation.mustBeMax": "Doit être inférieur ou égal à {{value}}",
|
||||
"validation.mustBeMin": "Doit être supérieur ou égal à {{value}}",
|
||||
"validation.mustBeNumber": "Doit être un nombre",
|
||||
"validation.required": "Obligatoire",
|
||||
"vendor.fields.comment": "Commentaire",
|
||||
"vendor.fields.emptySpoolWeight": "Poids de la bobine vide",
|
||||
"vendor.fields.externalId": "ID externe",
|
||||
"vendor.fields.id": "ID",
|
||||
"vendor.fields.id": "Identifiant",
|
||||
"vendor.fields.name": "Nom",
|
||||
"vendor.fields.registered": "Enregistré",
|
||||
"vendor.fieldsHelp.emptySpoolWeight": "Le poids d'une bobine vide de ce fabricant.",
|
||||
|
||||
@@ -1,17 +1,90 @@
|
||||
{
|
||||
"add.addAndNew": "",
|
||||
"add.adding": "",
|
||||
"add.advanced": "",
|
||||
"add.advancedNote": "",
|
||||
"add.change": "",
|
||||
"add.count": "",
|
||||
"add.createNew": "",
|
||||
"add.createNewSub": "",
|
||||
"add.dbUnavailable": "",
|
||||
"add.duplicate": "",
|
||||
"add.duplicateNote": "",
|
||||
"add.duplicateRename": "",
|
||||
"add.duplicateTitle": "",
|
||||
"add.filamentNamePlaceholder": "",
|
||||
"add.fill.full": "",
|
||||
"add.fillLevel": "",
|
||||
"add.importNote": "",
|
||||
"add.inCatalog": "",
|
||||
"add.locationHint": "",
|
||||
"add.locationPlaceholder": "",
|
||||
"add.manufacturerPlaceholder": "",
|
||||
"add.nameHint": "",
|
||||
"add.newFilament": "",
|
||||
"add.newFilamentTitle": "",
|
||||
"add.noCatalog": "",
|
||||
"add.noManufacturer": "",
|
||||
"add.pickColor": "",
|
||||
"add.searchPlaceholder": "",
|
||||
"add.searching": "",
|
||||
"add.spoolWeightPreset.cardboard": "",
|
||||
"add.spoolWeightPreset.plastic": "",
|
||||
"add.spoolWeightPresetsLead": "",
|
||||
"add.step2": "",
|
||||
"add.typeToSearchAll": "",
|
||||
"add.typeToSearchMatches": "",
|
||||
"add.useExisting": "",
|
||||
"add.vendorHint.existing": "",
|
||||
"add.vendorHint.new": "",
|
||||
"add.vendorHint.optional": "",
|
||||
"add.yourCatalog": "",
|
||||
"buttons.archive": "",
|
||||
"buttons.cancel": "",
|
||||
"buttons.clear": "",
|
||||
"buttons.close": "",
|
||||
"buttons.delete": "",
|
||||
"buttons.edit": "Sampadan Karen",
|
||||
"buttons.filter": "",
|
||||
"buttons.save": "Sahejen",
|
||||
"buttons.showArchived": "",
|
||||
"buttons.unArchive": "",
|
||||
"common.decrement": "",
|
||||
"common.increment": "",
|
||||
"common.remove": "",
|
||||
"common.search": "",
|
||||
"dashboard.addFieldHint": "",
|
||||
"dashboard.dashboard": "",
|
||||
"dashboard.deleteGroup": "",
|
||||
"dashboard.dragHint": "",
|
||||
"dashboard.dropHere": "",
|
||||
"dashboard.emptyHelp": "",
|
||||
"dashboard.errorEmptyName": "",
|
||||
"dashboard.errorExists": "",
|
||||
"dashboard.errorRename": "",
|
||||
"dashboard.lastUsed": "",
|
||||
"dashboard.newGroup": "",
|
||||
"dashboard.newGroupName": "",
|
||||
"dashboard.reorderGroup": "",
|
||||
"dashboard.unassigned": "",
|
||||
"datetime.done": "",
|
||||
"datetime.hour": "",
|
||||
"datetime.minute": "",
|
||||
"datetime.nextMonth": "",
|
||||
"datetime.now": "",
|
||||
"datetime.pick": "",
|
||||
"datetime.prevMonth": "",
|
||||
"datetime.time": "",
|
||||
"documentTitle.dashboard.list": "",
|
||||
"documentTitle.labels.list": "",
|
||||
"documentTitle.library.list": "",
|
||||
"documentTitle.locations.list": "",
|
||||
"documentTitle.settings.list": "",
|
||||
"filament.fields.addColor": "",
|
||||
"filament.fields.articleNumber": "",
|
||||
"filament.fields.coaxial": "",
|
||||
"filament.fields.colorHex": "",
|
||||
"filament.fields.colorType": "",
|
||||
"filament.fields.comment": "",
|
||||
"filament.fields.density": "",
|
||||
"filament.fields.diameter": "",
|
||||
@@ -23,6 +96,7 @@
|
||||
"filament.fields.name": "",
|
||||
"filament.fields.price": "",
|
||||
"filament.fields.registered": "",
|
||||
"filament.fields.removeColor": "",
|
||||
"filament.fields.settingsBedTemp": "",
|
||||
"filament.fields.settingsExtruderTemp": "",
|
||||
"filament.fields.singleColor": "",
|
||||
@@ -34,20 +108,210 @@
|
||||
"filament.fieldsHelp.spoolWeight": "",
|
||||
"filament.fieldsHelp.weight": "",
|
||||
"filament.filament": "",
|
||||
"footer.documentation": "",
|
||||
"footer.reportIssue": "",
|
||||
"help.help": "",
|
||||
"inspector.addSpoolsOfThis": "",
|
||||
"inspector.adjustFailed": "",
|
||||
"inspector.adjustHelp": "",
|
||||
"inspector.adjustWeight": "",
|
||||
"inspector.apply": "",
|
||||
"inspector.applying": "",
|
||||
"inspector.colorHex": "",
|
||||
"inspector.consumeAmount": "",
|
||||
"inspector.delete.deleting": "",
|
||||
"inspector.delete.errorGone": "",
|
||||
"inspector.delete.errorSpoolsExist": "",
|
||||
"inspector.delete.errorUnknown": "",
|
||||
"inspector.delete.filament": "",
|
||||
"inspector.delete.filamentBlockedHint": "",
|
||||
"inspector.delete.filamentBlockedTitle": "",
|
||||
"inspector.delete.filamentBody": "",
|
||||
"inspector.delete.filamentDone": "",
|
||||
"inspector.delete.filamentTitle": "",
|
||||
"inspector.delete.spool": "",
|
||||
"inspector.delete.spoolBody": "",
|
||||
"inspector.delete.spoolDone": "",
|
||||
"inspector.delete.spoolRemaining": "",
|
||||
"inspector.delete.spoolTitle": "",
|
||||
"inspector.delete.vendor": "",
|
||||
"inspector.delete.vendorBody": "",
|
||||
"inspector.delete.vendorDone": "",
|
||||
"inspector.delete.vendorTitle": "",
|
||||
"inspector.duplicateFilament": "",
|
||||
"inspector.empty": "",
|
||||
"inspector.enterValidLength": "",
|
||||
"inspector.enterValidWeight": "",
|
||||
"inspector.loading": "",
|
||||
"inspector.manageExtraFields": "",
|
||||
"inspector.measuredHelp": "",
|
||||
"inspector.multi": "",
|
||||
"inspector.newGross": "",
|
||||
"inspector.noExtraFields": "",
|
||||
"inspector.notFound": "",
|
||||
"inspector.ofRemaining": "",
|
||||
"inspector.openFilament": "",
|
||||
"inspector.openLink": "",
|
||||
"inspector.openManufacturer": "",
|
||||
"inspector.specs": "",
|
||||
"inspector.spoolsCount": "",
|
||||
"inspector.spoolsTotalRemaining": "",
|
||||
"inspector.used": "",
|
||||
"kofi": "",
|
||||
"labels.addHead": "",
|
||||
"labels.addQr": "",
|
||||
"labels.addRect": "",
|
||||
"labels.addSwatch": "",
|
||||
"labels.addText": "",
|
||||
"labels.align": "",
|
||||
"labels.alignCenter": "",
|
||||
"labels.alignLeft": "",
|
||||
"labels.alignRight": "",
|
||||
"labels.blank": "",
|
||||
"labels.bold": "",
|
||||
"labels.canvasHint": "",
|
||||
"labels.centerLogo": "",
|
||||
"labels.chooseField": "",
|
||||
"labels.clearFill": "",
|
||||
"labels.copies": "",
|
||||
"labels.cornerRadiusMm": "",
|
||||
"labels.createFirst": "",
|
||||
"labels.cutGuides": "",
|
||||
"labels.deleteConfirm": "",
|
||||
"labels.deleteElement": "",
|
||||
"labels.designName": "",
|
||||
"labels.designerDesc": "",
|
||||
"labels.designerTitle": "",
|
||||
"labels.dpi": "",
|
||||
"labels.dpiHint": "",
|
||||
"labels.duplicate": "",
|
||||
"labels.fields.bedTemp": "",
|
||||
"labels.fields.diameterMm": "",
|
||||
"labels.fields.groupVendor": "",
|
||||
"labels.fields.initialG": "",
|
||||
"labels.fields.netWeightG": "",
|
||||
"labels.fields.remainingG": "",
|
||||
"labels.fill": "",
|
||||
"labels.fitWidth": "",
|
||||
"labels.fitWidthHint": "",
|
||||
"labels.fontMm": "",
|
||||
"labels.gridInfo": "",
|
||||
"labels.hMm": "",
|
||||
"labels.heightMm": "",
|
||||
"labels.hintNowrap": "",
|
||||
"labels.hintSwatch": "",
|
||||
"labels.hintWrap": "",
|
||||
"labels.imageDesc": "",
|
||||
"labels.imageZipNote": "",
|
||||
"labels.insertField": "",
|
||||
"labels.kind.qr": "",
|
||||
"labels.kind.rect": "",
|
||||
"labels.kind.swatch": "",
|
||||
"labels.kind.text": "",
|
||||
"labels.labelSize": "",
|
||||
"labels.labelType": "",
|
||||
"labels.layout": "",
|
||||
"labels.modeImage": "",
|
||||
"labels.modeLabel": "",
|
||||
"labels.modeSheet": "",
|
||||
"labels.new": "",
|
||||
"labels.newText": "",
|
||||
"labels.noDesignsOption": "",
|
||||
"labels.noFilaments": "",
|
||||
"labels.noSpools": "",
|
||||
"labels.onePerLabel": "",
|
||||
"labels.preparing": "",
|
||||
"labels.preview": "",
|
||||
"labels.previewWith": "",
|
||||
"labels.radiusMm": "",
|
||||
"labels.sampleData": "",
|
||||
"labels.saved": "",
|
||||
"labels.saving": "",
|
||||
"labels.searchFilaments": "",
|
||||
"labels.searchSpools": "",
|
||||
"labels.selectAllShort": "",
|
||||
"labels.selectAtLeastOne": "",
|
||||
"labels.selectAtLeastOneFilament": "",
|
||||
"labels.selectDesign": "",
|
||||
"labels.selectElement": "",
|
||||
"labels.selectNoneShort": "",
|
||||
"labels.selectRecentHint": "",
|
||||
"labels.selectRecentShort": "",
|
||||
"labels.showingFilament": "",
|
||||
"labels.showingReal": "",
|
||||
"labels.showingSpool": "",
|
||||
"labels.showingTags": "",
|
||||
"labels.sizeMm": "",
|
||||
"labels.skipHint": "",
|
||||
"labels.sortHint": "",
|
||||
"labels.sortId": "",
|
||||
"labels.sortNewest": "",
|
||||
"labels.stroke": "",
|
||||
"labels.strokeMm": "",
|
||||
"labels.tabDesign": "",
|
||||
"labels.tabPrint": "",
|
||||
"labels.textTemplate": "",
|
||||
"labels.typeFilament": "",
|
||||
"labels.typeHint": "",
|
||||
"labels.typeSpool": "",
|
||||
"labels.unknownFilament": "",
|
||||
"labels.wMm": "",
|
||||
"labels.widthMm": "",
|
||||
"labels.wrapText": "",
|
||||
"labels.xMm": "",
|
||||
"labels.yMm": "",
|
||||
"library.apiError": "",
|
||||
"library.collapseGroup": "",
|
||||
"library.emptyBody": "",
|
||||
"library.emptyFiltered": "",
|
||||
"library.emptyTitle": "",
|
||||
"library.expandGroup": "",
|
||||
"library.filterBy": "",
|
||||
"library.groupBy": "",
|
||||
"library.groupNone": "",
|
||||
"library.nUnused": "",
|
||||
"library.noLocation": "",
|
||||
"library.noValues": "",
|
||||
"library.openGroup": "",
|
||||
"library.openManufacturer": "",
|
||||
"library.section.extra": "",
|
||||
"library.section.filament": "",
|
||||
"library.section.spool": "",
|
||||
"library.section.vendor": "",
|
||||
"library.showMore": "",
|
||||
"library.sort.nozzle": "",
|
||||
"library.sortBy": "",
|
||||
"library.unassigned": "",
|
||||
"library.unitGroups": "",
|
||||
"library.unitSpools": "",
|
||||
"library.unused": "",
|
||||
"library.unusedGroup": "",
|
||||
"library.unusedGroupMixed": "",
|
||||
"library.unusedSub": "",
|
||||
"library.unusedSubMixed": "",
|
||||
"library.used": "",
|
||||
"library.usedAgo": "",
|
||||
"loading": "",
|
||||
"locations.locations": "",
|
||||
"locations.newLocation": "",
|
||||
"locations.noLocation": "",
|
||||
"locations.noLocationsHelp": "",
|
||||
"nav.labels": "",
|
||||
"nav.library": "",
|
||||
"no": "",
|
||||
"notifications.error": "",
|
||||
"notifications.saveSuccessful": "",
|
||||
"pagination.empty": "",
|
||||
"pagination.next": "",
|
||||
"pagination.pageSize": "",
|
||||
"pagination.perPage": "",
|
||||
"pagination.prev": "",
|
||||
"pagination.range": "",
|
||||
"printing.generic.columns": "",
|
||||
"printing.generic.customSize": "",
|
||||
"printing.generic.description": "",
|
||||
"printing.generic.dimensions": "",
|
||||
"printing.generic.gridTooWide": "",
|
||||
"printing.generic.helpMargin": "",
|
||||
"printing.generic.helpPrinterMargin": "",
|
||||
"printing.generic.horizontalSpacing": "",
|
||||
@@ -65,7 +329,11 @@
|
||||
"printing.generic.skipItems": "",
|
||||
"printing.generic.verticalSpacing": "",
|
||||
"printing.qrcode.button": "",
|
||||
"printing.qrcode.customUrl.caveat": "",
|
||||
"printing.qrcode.customUrl.hint": "",
|
||||
"printing.qrcode.customUrl.label": "",
|
||||
"printing.qrcode.useHTTPUrl.label": "",
|
||||
"printing.qrcode.useHTTPUrl.options.custom": "",
|
||||
"printing.qrcode.useHTTPUrl.options.default": "",
|
||||
"printing.qrcode.useHTTPUrl.options.url": "",
|
||||
"printing.qrcode.useHTTPUrl.preview": "",
|
||||
@@ -73,16 +341,47 @@
|
||||
"printing.spoolSelect.selectedTotal_one": "",
|
||||
"printing.spoolSelect.selectedTotal_other": "",
|
||||
"scanner.description": "",
|
||||
"scanner.error.inUse": "",
|
||||
"scanner.error.insecureContext": "",
|
||||
"scanner.error.notAllowed": "",
|
||||
"scanner.error.notFound": "",
|
||||
"scanner.error.streamApiNotSupported": "",
|
||||
"scanner.error.unknown": "",
|
||||
"scanner.starting": "",
|
||||
"scanner.title": "",
|
||||
"search.colorHint": "",
|
||||
"search.noResults": "",
|
||||
"search.searching": "",
|
||||
"search.section.filaments": "",
|
||||
"search.section.spools": "",
|
||||
"search.section.vendors": "",
|
||||
"search.threshold": "",
|
||||
"search.unknownFilament": "",
|
||||
"settings.appearance.tab": "",
|
||||
"settings.appearance.theme.dark": "",
|
||||
"settings.appearance.theme.desc": "",
|
||||
"settings.appearance.theme.label": "",
|
||||
"settings.appearance.theme.light": "",
|
||||
"settings.appearance.theme.system": "",
|
||||
"settings.extraFields.addChoice": "",
|
||||
"settings.extraFields.addChoicesFirst": "",
|
||||
"settings.extraFields.addEntityField": "",
|
||||
"settings.extraFields.booleanFalse": "",
|
||||
"settings.extraFields.booleanTrue": "",
|
||||
"settings.extraFields.deleteConfirm": "",
|
||||
"settings.extraFields.description": "",
|
||||
"settings.extraFields.description.constraints": "",
|
||||
"settings.extraFields.description.intro": "",
|
||||
"settings.extraFields.description.keyUsage": "",
|
||||
"settings.extraFields.description.tableViews": "",
|
||||
"settings.extraFields.editorEdit": "",
|
||||
"settings.extraFields.editorNew": "",
|
||||
"settings.extraFields.errors.choiceNeeded": "",
|
||||
"settings.extraFields.errors.choicesRemoved": "",
|
||||
"settings.extraFields.errors.deleteFailed": "",
|
||||
"settings.extraFields.errors.keyFormat": "",
|
||||
"settings.extraFields.errors.nameRequired": "",
|
||||
"settings.extraFields.errors.saveFailed": "",
|
||||
"settings.extraFields.fieldType.boolean": "",
|
||||
"settings.extraFields.fieldType.choice": "",
|
||||
"settings.extraFields.fieldType.datetime": "",
|
||||
@@ -91,7 +390,13 @@
|
||||
"settings.extraFields.fieldType.integer": "",
|
||||
"settings.extraFields.fieldType.integerRange": "",
|
||||
"settings.extraFields.fieldType.text": "",
|
||||
"settings.extraFields.max": "",
|
||||
"settings.extraFields.min": "",
|
||||
"settings.extraFields.multiSuffix": "",
|
||||
"settings.extraFields.multiple": "",
|
||||
"settings.extraFields.namePlaceholder": "",
|
||||
"settings.extraFields.nonUniqueKeyError": "",
|
||||
"settings.extraFields.none": "",
|
||||
"settings.extraFields.params.choices": "",
|
||||
"settings.extraFields.params.defaultValue": "",
|
||||
"settings.extraFields.params.fieldType": "",
|
||||
@@ -99,14 +404,21 @@
|
||||
"settings.extraFields.params.name": "",
|
||||
"settings.extraFields.params.order": "",
|
||||
"settings.extraFields.params.unit": "",
|
||||
"settings.extraFields.saveField": "",
|
||||
"settings.extraFields.tab": "",
|
||||
"settings.general.baseUrl.label": "",
|
||||
"settings.general.baseUrl.tooltip": "",
|
||||
"settings.general.currency.desc": "",
|
||||
"settings.general.currency.label": "",
|
||||
"settings.general.roundPrices.label": "",
|
||||
"settings.general.roundPrices.tooltip": "",
|
||||
"settings.general.tab": "",
|
||||
"settings.header": "",
|
||||
"settings.language.desc": "",
|
||||
"settings.language.label": "",
|
||||
"settings.library.lowThreshold.desc": "",
|
||||
"settings.library.lowThreshold.label": "",
|
||||
"settings.library.tab": "",
|
||||
"spool.fields.archived": "",
|
||||
"spool.fields.comment": "",
|
||||
"spool.fields.filament": "",
|
||||
@@ -130,7 +442,16 @@
|
||||
"spool.form.measurementType.length": "",
|
||||
"spool.form.measurementType.weight": "",
|
||||
"spool.spool": "",
|
||||
"topbar.addSpools": "",
|
||||
"topbar.searchPlaceholder": "",
|
||||
"unknown": "",
|
||||
"validation.hexDigits": "",
|
||||
"validation.maxChars": "",
|
||||
"validation.mustBeGt": "",
|
||||
"validation.mustBeMax": "",
|
||||
"validation.mustBeMin": "",
|
||||
"validation.mustBeNumber": "",
|
||||
"validation.required": "",
|
||||
"vendor.fields.comment": "",
|
||||
"vendor.fields.emptySpoolWeight": "",
|
||||
"vendor.fields.externalId": "",
|
||||
|
||||
@@ -1,48 +1,317 @@
|
||||
{
|
||||
"add.addAndNew": "",
|
||||
"add.adding": "",
|
||||
"add.advanced": "",
|
||||
"add.advancedNote": "",
|
||||
"add.change": "",
|
||||
"add.count": "",
|
||||
"add.createNew": "",
|
||||
"add.createNewSub": "",
|
||||
"add.dbUnavailable": "",
|
||||
"add.duplicate": "",
|
||||
"add.duplicateNote": "",
|
||||
"add.duplicateRename": "",
|
||||
"add.duplicateTitle": "",
|
||||
"add.filamentNamePlaceholder": "",
|
||||
"add.fill.full": "",
|
||||
"add.fillLevel": "",
|
||||
"add.importNote": "",
|
||||
"add.inCatalog": "",
|
||||
"add.locationHint": "",
|
||||
"add.locationPlaceholder": "",
|
||||
"add.manufacturerPlaceholder": "",
|
||||
"add.nameHint": "",
|
||||
"add.newFilament": "",
|
||||
"add.newFilamentTitle": "",
|
||||
"add.noCatalog": "",
|
||||
"add.noManufacturer": "",
|
||||
"add.pickColor": "",
|
||||
"add.searchPlaceholder": "",
|
||||
"add.searching": "",
|
||||
"add.spoolWeightPreset.cardboard": "",
|
||||
"add.spoolWeightPreset.plastic": "",
|
||||
"add.spoolWeightPresetsLead": "",
|
||||
"add.step2": "",
|
||||
"add.typeToSearchAll": "",
|
||||
"add.typeToSearchMatches": "",
|
||||
"add.useExisting": "",
|
||||
"add.vendorHint.existing": "",
|
||||
"add.vendorHint.new": "",
|
||||
"add.vendorHint.optional": "",
|
||||
"add.yourCatalog": "",
|
||||
"buttons.archive": "Arhiválás",
|
||||
"buttons.cancel": "Mégse",
|
||||
"buttons.clear": "Törlés",
|
||||
"buttons.close": "",
|
||||
"buttons.delete": "Töröl",
|
||||
"buttons.edit": "Szerkeszt",
|
||||
"buttons.filter": "Szűrő",
|
||||
"buttons.save": "Mentés",
|
||||
"buttons.showArchived": "Arhiváltak megjelítése",
|
||||
"buttons.unArchive": "Arhiválás visszavonása",
|
||||
"common.decrement": "",
|
||||
"common.increment": "",
|
||||
"common.remove": "",
|
||||
"common.search": "",
|
||||
"dashboard.addFieldHint": "",
|
||||
"dashboard.dashboard": "",
|
||||
"dashboard.deleteGroup": "",
|
||||
"dashboard.dragHint": "",
|
||||
"dashboard.dropHere": "",
|
||||
"dashboard.emptyHelp": "",
|
||||
"dashboard.errorEmptyName": "",
|
||||
"dashboard.errorExists": "",
|
||||
"dashboard.errorRename": "",
|
||||
"dashboard.lastUsed": "",
|
||||
"dashboard.newGroup": "",
|
||||
"dashboard.newGroupName": "",
|
||||
"dashboard.reorderGroup": "",
|
||||
"dashboard.unassigned": "",
|
||||
"datetime.done": "",
|
||||
"datetime.hour": "",
|
||||
"datetime.minute": "",
|
||||
"datetime.nextMonth": "",
|
||||
"datetime.now": "",
|
||||
"datetime.pick": "",
|
||||
"datetime.prevMonth": "",
|
||||
"datetime.time": "",
|
||||
"documentTitle.dashboard.list": "",
|
||||
"documentTitle.labels.list": "",
|
||||
"documentTitle.library.list": "",
|
||||
"documentTitle.locations.list": "Tároló helyek | Spoolman",
|
||||
"documentTitle.settings.list": "",
|
||||
"filament.fields.addColor": "",
|
||||
"filament.fields.articleNumber": "Cikkszám",
|
||||
"filament.fields.coaxial": "",
|
||||
"filament.fields.colorHex": "Szín",
|
||||
"filament.fields.colorType": "",
|
||||
"filament.fields.comment": "Megjegyzés",
|
||||
"filament.fields.density": "Sűrűség",
|
||||
"filament.fields.diameter": "Átmérő",
|
||||
"filament.fields.externalId": "Külső ID",
|
||||
"filament.fields.id": "ID",
|
||||
"filament.fields.longitudinal": "",
|
||||
"filament.fields.material": "Anyag",
|
||||
"filament.fields.multiColor": "",
|
||||
"filament.fields.name": "Név",
|
||||
"filament.fields.price": "Ár",
|
||||
"filament.fields.registered": "Nyilvántartott",
|
||||
"filament.fields.removeColor": "",
|
||||
"filament.fields.settingsBedTemp": "Tárgyasztal hőmérséklet",
|
||||
"filament.fields.settingsExtruderTemp": "Extruder hőmérséklet",
|
||||
"filament.fields.singleColor": "",
|
||||
"filament.fields.spoolWeight": "Tekercs súlya",
|
||||
"filament.fields.vendor": "Gyártó",
|
||||
"filament.fields.weight": "Súly",
|
||||
"filament.fieldsHelp.articleNumber": "Például. EAN, UPC stb.",
|
||||
"filament.fieldsHelp.multiColorDirection": "",
|
||||
"filament.fieldsHelp.spoolWeight": "Az üres tekercs súlya. Ezt használják a tekercs mért súlyának meghatározásához.",
|
||||
"filament.fieldsHelp.weight": "A teljes tekercs súlya (nettó súly), amely nem tartalmazza a tekercs saját súlyát, csak a filament súlyát. Általában ez szerepel a csomagoláson.",
|
||||
"filament.filament": "Szálak",
|
||||
"footer.documentation": "",
|
||||
"footer.reportIssue": "",
|
||||
"help.help": "Segítség",
|
||||
"inspector.addSpoolsOfThis": "",
|
||||
"inspector.adjustFailed": "",
|
||||
"inspector.adjustHelp": "",
|
||||
"inspector.adjustWeight": "",
|
||||
"inspector.apply": "",
|
||||
"inspector.applying": "",
|
||||
"inspector.colorHex": "",
|
||||
"inspector.consumeAmount": "",
|
||||
"inspector.delete.deleting": "",
|
||||
"inspector.delete.errorGone": "",
|
||||
"inspector.delete.errorSpoolsExist": "",
|
||||
"inspector.delete.errorUnknown": "",
|
||||
"inspector.delete.filament": "",
|
||||
"inspector.delete.filamentBlockedHint": "",
|
||||
"inspector.delete.filamentBlockedTitle": "",
|
||||
"inspector.delete.filamentBody": "",
|
||||
"inspector.delete.filamentDone": "",
|
||||
"inspector.delete.filamentTitle": "",
|
||||
"inspector.delete.spool": "",
|
||||
"inspector.delete.spoolBody": "",
|
||||
"inspector.delete.spoolDone": "",
|
||||
"inspector.delete.spoolRemaining": "",
|
||||
"inspector.delete.spoolTitle": "",
|
||||
"inspector.delete.vendor": "",
|
||||
"inspector.delete.vendorBody": "",
|
||||
"inspector.delete.vendorDone": "",
|
||||
"inspector.delete.vendorTitle": "",
|
||||
"inspector.duplicateFilament": "",
|
||||
"inspector.empty": "",
|
||||
"inspector.enterValidLength": "",
|
||||
"inspector.enterValidWeight": "",
|
||||
"inspector.loading": "",
|
||||
"inspector.manageExtraFields": "",
|
||||
"inspector.measuredHelp": "",
|
||||
"inspector.multi": "",
|
||||
"inspector.newGross": "",
|
||||
"inspector.noExtraFields": "",
|
||||
"inspector.notFound": "",
|
||||
"inspector.ofRemaining": "",
|
||||
"inspector.openFilament": "",
|
||||
"inspector.openLink": "",
|
||||
"inspector.openManufacturer": "",
|
||||
"inspector.specs": "",
|
||||
"inspector.spoolsCount": "",
|
||||
"inspector.spoolsTotalRemaining": "",
|
||||
"inspector.used": "",
|
||||
"kofi": "Tipp a Ko-fi-ra",
|
||||
"labels.addHead": "",
|
||||
"labels.addQr": "",
|
||||
"labels.addRect": "",
|
||||
"labels.addSwatch": "",
|
||||
"labels.addText": "",
|
||||
"labels.align": "",
|
||||
"labels.alignCenter": "",
|
||||
"labels.alignLeft": "",
|
||||
"labels.alignRight": "",
|
||||
"labels.blank": "",
|
||||
"labels.bold": "",
|
||||
"labels.canvasHint": "",
|
||||
"labels.centerLogo": "",
|
||||
"labels.chooseField": "",
|
||||
"labels.clearFill": "",
|
||||
"labels.copies": "",
|
||||
"labels.cornerRadiusMm": "",
|
||||
"labels.createFirst": "",
|
||||
"labels.cutGuides": "",
|
||||
"labels.deleteConfirm": "",
|
||||
"labels.deleteElement": "",
|
||||
"labels.designName": "",
|
||||
"labels.designerDesc": "",
|
||||
"labels.designerTitle": "",
|
||||
"labels.dpi": "",
|
||||
"labels.dpiHint": "",
|
||||
"labels.duplicate": "",
|
||||
"labels.fields.bedTemp": "",
|
||||
"labels.fields.diameterMm": "",
|
||||
"labels.fields.groupVendor": "",
|
||||
"labels.fields.initialG": "",
|
||||
"labels.fields.netWeightG": "",
|
||||
"labels.fields.remainingG": "",
|
||||
"labels.fill": "",
|
||||
"labels.fitWidth": "",
|
||||
"labels.fitWidthHint": "",
|
||||
"labels.fontMm": "",
|
||||
"labels.gridInfo": "",
|
||||
"labels.hMm": "",
|
||||
"labels.heightMm": "",
|
||||
"labels.hintNowrap": "",
|
||||
"labels.hintSwatch": "",
|
||||
"labels.hintWrap": "",
|
||||
"labels.imageDesc": "",
|
||||
"labels.imageZipNote": "",
|
||||
"labels.insertField": "",
|
||||
"labels.kind.qr": "",
|
||||
"labels.kind.rect": "",
|
||||
"labels.kind.swatch": "",
|
||||
"labels.kind.text": "",
|
||||
"labels.labelSize": "",
|
||||
"labels.labelType": "",
|
||||
"labels.layout": "",
|
||||
"labels.modeImage": "",
|
||||
"labels.modeLabel": "",
|
||||
"labels.modeSheet": "",
|
||||
"labels.new": "",
|
||||
"labels.newText": "",
|
||||
"labels.noDesignsOption": "",
|
||||
"labels.noFilaments": "",
|
||||
"labels.noSpools": "",
|
||||
"labels.onePerLabel": "",
|
||||
"labels.preparing": "",
|
||||
"labels.preview": "",
|
||||
"labels.previewWith": "",
|
||||
"labels.radiusMm": "",
|
||||
"labels.sampleData": "",
|
||||
"labels.saved": "",
|
||||
"labels.saving": "",
|
||||
"labels.searchFilaments": "",
|
||||
"labels.searchSpools": "",
|
||||
"labels.selectAllShort": "",
|
||||
"labels.selectAtLeastOne": "",
|
||||
"labels.selectAtLeastOneFilament": "",
|
||||
"labels.selectDesign": "",
|
||||
"labels.selectElement": "",
|
||||
"labels.selectNoneShort": "",
|
||||
"labels.selectRecentHint": "",
|
||||
"labels.selectRecentShort": "",
|
||||
"labels.showingFilament": "",
|
||||
"labels.showingReal": "",
|
||||
"labels.showingSpool": "",
|
||||
"labels.showingTags": "",
|
||||
"labels.sizeMm": "",
|
||||
"labels.skipHint": "",
|
||||
"labels.sortHint": "",
|
||||
"labels.sortId": "",
|
||||
"labels.sortNewest": "",
|
||||
"labels.stroke": "",
|
||||
"labels.strokeMm": "",
|
||||
"labels.tabDesign": "",
|
||||
"labels.tabPrint": "",
|
||||
"labels.textTemplate": "",
|
||||
"labels.typeFilament": "",
|
||||
"labels.typeHint": "",
|
||||
"labels.typeSpool": "",
|
||||
"labels.unknownFilament": "",
|
||||
"labels.wMm": "",
|
||||
"labels.widthMm": "",
|
||||
"labels.wrapText": "",
|
||||
"labels.xMm": "",
|
||||
"labels.yMm": "",
|
||||
"library.apiError": "",
|
||||
"library.collapseGroup": "",
|
||||
"library.emptyBody": "",
|
||||
"library.emptyFiltered": "",
|
||||
"library.emptyTitle": "",
|
||||
"library.expandGroup": "",
|
||||
"library.filterBy": "",
|
||||
"library.groupBy": "",
|
||||
"library.groupNone": "",
|
||||
"library.nUnused": "",
|
||||
"library.noLocation": "",
|
||||
"library.noValues": "",
|
||||
"library.openGroup": "",
|
||||
"library.openManufacturer": "",
|
||||
"library.section.extra": "",
|
||||
"library.section.filament": "",
|
||||
"library.section.spool": "",
|
||||
"library.section.vendor": "",
|
||||
"library.showMore": "",
|
||||
"library.sort.nozzle": "",
|
||||
"library.sortBy": "",
|
||||
"library.unassigned": "",
|
||||
"library.unitGroups": "",
|
||||
"library.unitSpools": "",
|
||||
"library.unused": "",
|
||||
"library.unusedGroup": "",
|
||||
"library.unusedGroupMixed": "",
|
||||
"library.unusedSub": "",
|
||||
"library.unusedSubMixed": "",
|
||||
"library.used": "",
|
||||
"library.usedAgo": "",
|
||||
"loading": "Betöltés",
|
||||
"locations.locations": "Helyek",
|
||||
"locations.newLocation": "Új hely",
|
||||
"locations.noLocation": "Nincs hely megadva",
|
||||
"locations.noLocationsHelp": "Ez az oldal lehetővé teszi, hogy rendszerezd a tekercseket helyek szerint, adj hozzá néhány tekercset a kezdéshez!",
|
||||
"nav.labels": "",
|
||||
"nav.library": "",
|
||||
"no": "Nem",
|
||||
"notifications.error": "Hiba (Hibakód: {{statusCode}})",
|
||||
"notifications.saveSuccessful": "Sikeres mentés!",
|
||||
"pagination.empty": "",
|
||||
"pagination.next": "",
|
||||
"pagination.pageSize": "",
|
||||
"pagination.perPage": "",
|
||||
"pagination.prev": "",
|
||||
"pagination.range": "",
|
||||
"printing.generic.columns": "Oszlopok",
|
||||
"printing.generic.customSize": "Egyéni",
|
||||
"printing.generic.description": "A kívánt nyomtatási elrendezés eléréséhez állítsd be az alábbi beállításokat. Tartsd észben, hogy a nyomtatók és az operációs rendszer saját margókat és méretezéseket alkalmazhatnak, ezért szükséged lehet néhány próbára és hibára, mielőtt minden tökéletes lesz. Teszteld egy darab normál papíron, mielőtt az aktuális címkéken nyomtatnád.",
|
||||
"printing.generic.dimensions": "Dimenziók",
|
||||
"printing.generic.gridTooWide": "",
|
||||
"printing.generic.helpMargin": "A margókat úgy kell beállítani, hogy illeszkedjenek a címképapírhoz és a nyomtatóhoz, azok megváltoztatása befolyásolja az egész rács méretét.",
|
||||
"printing.generic.helpPrinterMargin": "A biztonsági zónát úgy kell beállítani, hogy mekkora távolságban legyen a tárgyasztal szélétől, ahol a nyomtató tud nyomtatni. Ezeknek a beállításoknak a megváltoztatása nem befolyásolja az egész rácsot.",
|
||||
"printing.generic.horizontalSpacing": "Vízszintes távolság",
|
||||
@@ -60,26 +329,58 @@
|
||||
"printing.generic.skipItems": "Elem átugrása",
|
||||
"printing.generic.verticalSpacing": "Függőleges térköz",
|
||||
"printing.qrcode.button": "Cimkék Nyomtatása",
|
||||
"printing.qrcode.customUrl.caveat": "",
|
||||
"printing.qrcode.customUrl.hint": "",
|
||||
"printing.qrcode.customUrl.label": "",
|
||||
"printing.qrcode.useHTTPUrl.label": "QR kód link",
|
||||
"printing.qrcode.useHTTPUrl.options.custom": "",
|
||||
"printing.qrcode.useHTTPUrl.options.default": "Alapbeállítás",
|
||||
"printing.qrcode.useHTTPUrl.options.url": "URL",
|
||||
"printing.qrcode.useHTTPUrl.preview": "Előnézet:",
|
||||
"printing.qrcode.useHTTPUrl.tooltip": "",
|
||||
"printing.spoolSelect.selectedTotal_one": "{{count}} tekercs kiválasztva",
|
||||
"printing.spoolSelect.selectedTotal_other": "{{count}} db tekercs kiválasztva",
|
||||
"scanner.description": "Olvass be egy Spoolman QR kódot a tekercsről szóló részletek megtekintéséhez.",
|
||||
"scanner.error.inUse": "",
|
||||
"scanner.error.insecureContext": "Az oldal kiszolgálása nem HTTPS-en keresztül történik.",
|
||||
"scanner.error.notAllowed": "Nem engedélyezte a kamerához való hozzáférést.",
|
||||
"scanner.error.notFound": "Nem található kamera.",
|
||||
"scanner.error.streamApiNotSupported": "A böngésző nem támogatja a MediaStream API-t.",
|
||||
"scanner.error.unknown": "Ismeretlen hiba történt. ({{error}})",
|
||||
"scanner.starting": "",
|
||||
"scanner.title": "QR kód beolvasása",
|
||||
"search.colorHint": "",
|
||||
"search.noResults": "",
|
||||
"search.searching": "",
|
||||
"search.section.filaments": "",
|
||||
"search.section.spools": "",
|
||||
"search.section.vendors": "",
|
||||
"search.threshold": "",
|
||||
"search.unknownFilament": "",
|
||||
"settings.appearance.tab": "",
|
||||
"settings.appearance.theme.dark": "",
|
||||
"settings.appearance.theme.desc": "",
|
||||
"settings.appearance.theme.label": "",
|
||||
"settings.appearance.theme.light": "",
|
||||
"settings.appearance.theme.system": "",
|
||||
"settings.extraFields.addChoice": "",
|
||||
"settings.extraFields.addChoicesFirst": "",
|
||||
"settings.extraFields.addEntityField": "",
|
||||
"settings.extraFields.booleanFalse": "Nem",
|
||||
"settings.extraFields.booleanTrue": "Igen",
|
||||
"settings.extraFields.deleteConfirm": "Töröli a következő mezőt: {{name}}?",
|
||||
"settings.extraFields.description.intro": "Itt hozzáadhatsz további egyedi mezőket az entitásokhoz.",
|
||||
"settings.extraFields.description.constraints": "Ha egy mezőt hozzáadtál, nem lehet megváltoztatni annak kulcsát vagy típusát, és a választási típusú mezők esetében nem lehet eltávolítani a választásokat vagy megváltoztatni a többválasztásos állapotot. Ha eltávolítasz egy mezőt, az összes entitásra vonatkozó adat törlődik.",
|
||||
"settings.extraFields.description.intro": "Itt hozzáadhatsz további egyedi mezőket az entitásokhoz.",
|
||||
"settings.extraFields.description.keyUsage": "A kulcs az, amit más programok olvasnak/írnak az adatokként, tehát ha az egyedi meződ egy harmadik féllel integrálódik, győződj meg róla, hogy helyesen van beállítva. Az alapértelmezett érték csak az új elemekre vonatkozik.",
|
||||
"settings.extraFields.description.tableViews": "Az extra mezőket nem lehet rendezni vagy szűrni a táblázatnézetekben.",
|
||||
"settings.extraFields.editorEdit": "",
|
||||
"settings.extraFields.editorNew": "",
|
||||
"settings.extraFields.errors.choiceNeeded": "",
|
||||
"settings.extraFields.errors.choicesRemoved": "",
|
||||
"settings.extraFields.errors.deleteFailed": "",
|
||||
"settings.extraFields.errors.keyFormat": "",
|
||||
"settings.extraFields.errors.nameRequired": "",
|
||||
"settings.extraFields.errors.saveFailed": "",
|
||||
"settings.extraFields.fieldType.boolean": "Logikai",
|
||||
"settings.extraFields.fieldType.choice": "Választás",
|
||||
"settings.extraFields.fieldType.datetime": "Dátum és idő",
|
||||
@@ -88,7 +389,13 @@
|
||||
"settings.extraFields.fieldType.integer": "Egész szám",
|
||||
"settings.extraFields.fieldType.integerRange": "Egész szám tartománya",
|
||||
"settings.extraFields.fieldType.text": "Szöveg",
|
||||
"settings.extraFields.max": "",
|
||||
"settings.extraFields.min": "",
|
||||
"settings.extraFields.multiSuffix": "",
|
||||
"settings.extraFields.multiple": "",
|
||||
"settings.extraFields.namePlaceholder": "",
|
||||
"settings.extraFields.nonUniqueKeyError": "A kulcsnak egyedinek kell lennie.",
|
||||
"settings.extraFields.none": "",
|
||||
"settings.extraFields.params.choices": "Választás",
|
||||
"settings.extraFields.params.defaultValue": "Alapértelmezet érték",
|
||||
"settings.extraFields.params.fieldType": "Típus",
|
||||
@@ -96,13 +403,21 @@
|
||||
"settings.extraFields.params.name": "Név",
|
||||
"settings.extraFields.params.order": "Rendezés",
|
||||
"settings.extraFields.params.unit": "Egység",
|
||||
"settings.extraFields.saveField": "",
|
||||
"settings.extraFields.tab": "Extra mezők",
|
||||
"settings.general.baseUrl.label": "Alap URL",
|
||||
"settings.general.baseUrl.tooltip": "",
|
||||
"settings.general.currency.desc": "",
|
||||
"settings.general.currency.label": "Pénznem",
|
||||
"settings.general.roundPrices.label": "Árak kerekítése",
|
||||
"settings.general.roundPrices.tooltip": "Az árak legközelebbi egész számra való kerekítése.",
|
||||
"settings.general.tab": "Általános",
|
||||
"settings.header": "Beállítások",
|
||||
"settings.language.desc": "",
|
||||
"settings.language.label": "",
|
||||
"settings.library.lowThreshold.desc": "",
|
||||
"settings.library.lowThreshold.label": "",
|
||||
"settings.library.tab": "",
|
||||
"spool.fields.archived": "Arhivált",
|
||||
"spool.fields.comment": "Megjegyzés",
|
||||
"spool.fields.filament": "Szál",
|
||||
@@ -126,7 +441,16 @@
|
||||
"spool.form.measurementType.length": "Hossz",
|
||||
"spool.form.measurementType.weight": "Súly",
|
||||
"spool.spool": "Tekercsek",
|
||||
"topbar.addSpools": "",
|
||||
"topbar.searchPlaceholder": "",
|
||||
"unknown": "Ismeretlen",
|
||||
"validation.hexDigits": "",
|
||||
"validation.maxChars": "",
|
||||
"validation.mustBeGt": "",
|
||||
"validation.mustBeMax": "",
|
||||
"validation.mustBeMin": "",
|
||||
"validation.mustBeNumber": "",
|
||||
"validation.required": "",
|
||||
"vendor.fields.comment": "Megjegyzés",
|
||||
"vendor.fields.emptySpoolWeight": "Üres tekercs súlya",
|
||||
"vendor.fields.externalId": "Külső ID",
|
||||
|
||||
@@ -1,17 +1,90 @@
|
||||
{
|
||||
"add.addAndNew": "",
|
||||
"add.adding": "",
|
||||
"add.advanced": "",
|
||||
"add.advancedNote": "",
|
||||
"add.change": "",
|
||||
"add.count": "",
|
||||
"add.createNew": "",
|
||||
"add.createNewSub": "",
|
||||
"add.dbUnavailable": "",
|
||||
"add.duplicate": "",
|
||||
"add.duplicateNote": "",
|
||||
"add.duplicateRename": "",
|
||||
"add.duplicateTitle": "",
|
||||
"add.filamentNamePlaceholder": "",
|
||||
"add.fill.full": "",
|
||||
"add.fillLevel": "",
|
||||
"add.importNote": "",
|
||||
"add.inCatalog": "",
|
||||
"add.locationHint": "",
|
||||
"add.locationPlaceholder": "",
|
||||
"add.manufacturerPlaceholder": "",
|
||||
"add.nameHint": "",
|
||||
"add.newFilament": "",
|
||||
"add.newFilamentTitle": "",
|
||||
"add.noCatalog": "",
|
||||
"add.noManufacturer": "",
|
||||
"add.pickColor": "",
|
||||
"add.searchPlaceholder": "",
|
||||
"add.searching": "",
|
||||
"add.spoolWeightPreset.cardboard": "",
|
||||
"add.spoolWeightPreset.plastic": "",
|
||||
"add.spoolWeightPresetsLead": "",
|
||||
"add.step2": "",
|
||||
"add.typeToSearchAll": "",
|
||||
"add.typeToSearchMatches": "",
|
||||
"add.useExisting": "",
|
||||
"add.vendorHint.existing": "",
|
||||
"add.vendorHint.new": "",
|
||||
"add.vendorHint.optional": "",
|
||||
"add.yourCatalog": "",
|
||||
"buttons.archive": "Archivia",
|
||||
"buttons.cancel": "Cancella",
|
||||
"buttons.clear": "Pulisci",
|
||||
"buttons.close": "",
|
||||
"buttons.delete": "Elimina",
|
||||
"buttons.edit": "Modifica",
|
||||
"buttons.filter": "Filtro",
|
||||
"buttons.save": "Salva",
|
||||
"buttons.showArchived": "Mostra Archiviati",
|
||||
"buttons.unArchive": "Ripristina",
|
||||
"common.decrement": "",
|
||||
"common.increment": "",
|
||||
"common.remove": "",
|
||||
"common.search": "",
|
||||
"dashboard.addFieldHint": "",
|
||||
"dashboard.dashboard": "",
|
||||
"dashboard.deleteGroup": "",
|
||||
"dashboard.dragHint": "",
|
||||
"dashboard.dropHere": "",
|
||||
"dashboard.emptyHelp": "",
|
||||
"dashboard.errorEmptyName": "",
|
||||
"dashboard.errorExists": "",
|
||||
"dashboard.errorRename": "",
|
||||
"dashboard.lastUsed": "",
|
||||
"dashboard.newGroup": "",
|
||||
"dashboard.newGroupName": "",
|
||||
"dashboard.reorderGroup": "",
|
||||
"dashboard.unassigned": "",
|
||||
"datetime.done": "",
|
||||
"datetime.hour": "",
|
||||
"datetime.minute": "",
|
||||
"datetime.nextMonth": "",
|
||||
"datetime.now": "",
|
||||
"datetime.pick": "",
|
||||
"datetime.prevMonth": "",
|
||||
"datetime.time": "",
|
||||
"documentTitle.dashboard.list": "",
|
||||
"documentTitle.labels.list": "",
|
||||
"documentTitle.library.list": "",
|
||||
"documentTitle.locations.list": "Posizione | Spoolman",
|
||||
"documentTitle.settings.list": "",
|
||||
"filament.fields.addColor": "",
|
||||
"filament.fields.articleNumber": "Numero Articolo",
|
||||
"filament.fields.coaxial": "Coestruso",
|
||||
"filament.fields.colorHex": "Colore",
|
||||
"filament.fields.colorType": "",
|
||||
"filament.fields.comment": "Note",
|
||||
"filament.fields.density": "Densità",
|
||||
"filament.fields.diameter": "Diametro",
|
||||
@@ -23,6 +96,7 @@
|
||||
"filament.fields.name": "Nome",
|
||||
"filament.fields.price": "Prezzo",
|
||||
"filament.fields.registered": "Registrato",
|
||||
"filament.fields.removeColor": "",
|
||||
"filament.fields.settingsBedTemp": "Temperatura Piatto",
|
||||
"filament.fields.settingsExtruderTemp": "Temperatura Estrusore",
|
||||
"filament.fields.singleColor": "Unico",
|
||||
@@ -34,20 +108,210 @@
|
||||
"filament.fieldsHelp.spoolWeight": "Il peso di una bobina vuota. Utilizzato per determinare il peso misurato di una bobina.",
|
||||
"filament.fieldsHelp.weight": "Il peso del filamento di una bobina piena (peso netto). Questo non dovrebbe includere il peso della bobina stessa, ma solo del filamento. È quello che solitamente c'è scritto sulla confezione.",
|
||||
"filament.filament": "Filamenti",
|
||||
"footer.documentation": "",
|
||||
"footer.reportIssue": "",
|
||||
"help.help": "Aiuto",
|
||||
"inspector.addSpoolsOfThis": "",
|
||||
"inspector.adjustFailed": "",
|
||||
"inspector.adjustHelp": "",
|
||||
"inspector.adjustWeight": "",
|
||||
"inspector.apply": "",
|
||||
"inspector.applying": "",
|
||||
"inspector.colorHex": "",
|
||||
"inspector.consumeAmount": "",
|
||||
"inspector.delete.deleting": "",
|
||||
"inspector.delete.errorGone": "",
|
||||
"inspector.delete.errorSpoolsExist": "",
|
||||
"inspector.delete.errorUnknown": "",
|
||||
"inspector.delete.filament": "",
|
||||
"inspector.delete.filamentBlockedHint": "",
|
||||
"inspector.delete.filamentBlockedTitle": "",
|
||||
"inspector.delete.filamentBody": "",
|
||||
"inspector.delete.filamentDone": "",
|
||||
"inspector.delete.filamentTitle": "",
|
||||
"inspector.delete.spool": "",
|
||||
"inspector.delete.spoolBody": "",
|
||||
"inspector.delete.spoolDone": "",
|
||||
"inspector.delete.spoolRemaining": "",
|
||||
"inspector.delete.spoolTitle": "",
|
||||
"inspector.delete.vendor": "",
|
||||
"inspector.delete.vendorBody": "",
|
||||
"inspector.delete.vendorDone": "",
|
||||
"inspector.delete.vendorTitle": "",
|
||||
"inspector.duplicateFilament": "",
|
||||
"inspector.empty": "",
|
||||
"inspector.enterValidLength": "",
|
||||
"inspector.enterValidWeight": "",
|
||||
"inspector.loading": "",
|
||||
"inspector.manageExtraFields": "",
|
||||
"inspector.measuredHelp": "",
|
||||
"inspector.multi": "",
|
||||
"inspector.newGross": "",
|
||||
"inspector.noExtraFields": "",
|
||||
"inspector.notFound": "",
|
||||
"inspector.ofRemaining": "",
|
||||
"inspector.openFilament": "",
|
||||
"inspector.openLink": "",
|
||||
"inspector.openManufacturer": "",
|
||||
"inspector.specs": "",
|
||||
"inspector.spoolsCount": "",
|
||||
"inspector.spoolsTotalRemaining": "",
|
||||
"inspector.used": "",
|
||||
"kofi": "Donazione su Ko-fi",
|
||||
"labels.addHead": "",
|
||||
"labels.addQr": "",
|
||||
"labels.addRect": "",
|
||||
"labels.addSwatch": "",
|
||||
"labels.addText": "",
|
||||
"labels.align": "",
|
||||
"labels.alignCenter": "",
|
||||
"labels.alignLeft": "",
|
||||
"labels.alignRight": "",
|
||||
"labels.blank": "",
|
||||
"labels.bold": "",
|
||||
"labels.canvasHint": "",
|
||||
"labels.centerLogo": "",
|
||||
"labels.chooseField": "",
|
||||
"labels.clearFill": "",
|
||||
"labels.copies": "",
|
||||
"labels.cornerRadiusMm": "",
|
||||
"labels.createFirst": "",
|
||||
"labels.cutGuides": "",
|
||||
"labels.deleteConfirm": "",
|
||||
"labels.deleteElement": "",
|
||||
"labels.designName": "",
|
||||
"labels.designerDesc": "",
|
||||
"labels.designerTitle": "",
|
||||
"labels.dpi": "",
|
||||
"labels.dpiHint": "",
|
||||
"labels.duplicate": "",
|
||||
"labels.fields.bedTemp": "",
|
||||
"labels.fields.diameterMm": "",
|
||||
"labels.fields.groupVendor": "",
|
||||
"labels.fields.initialG": "",
|
||||
"labels.fields.netWeightG": "",
|
||||
"labels.fields.remainingG": "",
|
||||
"labels.fill": "",
|
||||
"labels.fitWidth": "",
|
||||
"labels.fitWidthHint": "",
|
||||
"labels.fontMm": "",
|
||||
"labels.gridInfo": "",
|
||||
"labels.hMm": "",
|
||||
"labels.heightMm": "",
|
||||
"labels.hintNowrap": "",
|
||||
"labels.hintSwatch": "",
|
||||
"labels.hintWrap": "",
|
||||
"labels.imageDesc": "",
|
||||
"labels.imageZipNote": "",
|
||||
"labels.insertField": "",
|
||||
"labels.kind.qr": "",
|
||||
"labels.kind.rect": "",
|
||||
"labels.kind.swatch": "",
|
||||
"labels.kind.text": "",
|
||||
"labels.labelSize": "",
|
||||
"labels.labelType": "",
|
||||
"labels.layout": "",
|
||||
"labels.modeImage": "",
|
||||
"labels.modeLabel": "",
|
||||
"labels.modeSheet": "",
|
||||
"labels.new": "",
|
||||
"labels.newText": "",
|
||||
"labels.noDesignsOption": "",
|
||||
"labels.noFilaments": "",
|
||||
"labels.noSpools": "",
|
||||
"labels.onePerLabel": "",
|
||||
"labels.preparing": "",
|
||||
"labels.preview": "",
|
||||
"labels.previewWith": "",
|
||||
"labels.radiusMm": "",
|
||||
"labels.sampleData": "",
|
||||
"labels.saved": "",
|
||||
"labels.saving": "",
|
||||
"labels.searchFilaments": "",
|
||||
"labels.searchSpools": "",
|
||||
"labels.selectAllShort": "",
|
||||
"labels.selectAtLeastOne": "",
|
||||
"labels.selectAtLeastOneFilament": "",
|
||||
"labels.selectDesign": "",
|
||||
"labels.selectElement": "",
|
||||
"labels.selectNoneShort": "",
|
||||
"labels.selectRecentHint": "",
|
||||
"labels.selectRecentShort": "",
|
||||
"labels.showingFilament": "",
|
||||
"labels.showingReal": "",
|
||||
"labels.showingSpool": "",
|
||||
"labels.showingTags": "",
|
||||
"labels.sizeMm": "",
|
||||
"labels.skipHint": "",
|
||||
"labels.sortHint": "",
|
||||
"labels.sortId": "",
|
||||
"labels.sortNewest": "",
|
||||
"labels.stroke": "",
|
||||
"labels.strokeMm": "",
|
||||
"labels.tabDesign": "",
|
||||
"labels.tabPrint": "",
|
||||
"labels.textTemplate": "",
|
||||
"labels.typeFilament": "",
|
||||
"labels.typeHint": "",
|
||||
"labels.typeSpool": "",
|
||||
"labels.unknownFilament": "",
|
||||
"labels.wMm": "",
|
||||
"labels.widthMm": "",
|
||||
"labels.wrapText": "",
|
||||
"labels.xMm": "",
|
||||
"labels.yMm": "",
|
||||
"library.apiError": "",
|
||||
"library.collapseGroup": "",
|
||||
"library.emptyBody": "",
|
||||
"library.emptyFiltered": "",
|
||||
"library.emptyTitle": "",
|
||||
"library.expandGroup": "",
|
||||
"library.filterBy": "",
|
||||
"library.groupBy": "",
|
||||
"library.groupNone": "",
|
||||
"library.nUnused": "",
|
||||
"library.noLocation": "",
|
||||
"library.noValues": "",
|
||||
"library.openGroup": "",
|
||||
"library.openManufacturer": "",
|
||||
"library.section.extra": "",
|
||||
"library.section.filament": "",
|
||||
"library.section.spool": "",
|
||||
"library.section.vendor": "",
|
||||
"library.showMore": "",
|
||||
"library.sort.nozzle": "",
|
||||
"library.sortBy": "",
|
||||
"library.unassigned": "",
|
||||
"library.unitGroups": "",
|
||||
"library.unitSpools": "",
|
||||
"library.unused": "",
|
||||
"library.unusedGroup": "",
|
||||
"library.unusedGroupMixed": "",
|
||||
"library.unusedSub": "",
|
||||
"library.unusedSubMixed": "",
|
||||
"library.used": "",
|
||||
"library.usedAgo": "",
|
||||
"loading": "Caricamento",
|
||||
"locations.locations": "Posizioni",
|
||||
"locations.newLocation": "Nuova Posizione",
|
||||
"locations.noLocation": "Nessuna Posizione",
|
||||
"locations.noLocationsHelp": "Questa pagina ti consente di organizzare le bobine in base alla posizione. Aggiungi alcune bobine per iniziare!",
|
||||
"nav.labels": "",
|
||||
"nav.library": "",
|
||||
"no": "No",
|
||||
"notifications.error": "Errore (status code: {{statusCode}})",
|
||||
"notifications.saveSuccessful": "Salvataggio completato!",
|
||||
"pagination.empty": "",
|
||||
"pagination.next": "",
|
||||
"pagination.pageSize": "",
|
||||
"pagination.perPage": "",
|
||||
"pagination.prev": "",
|
||||
"pagination.range": "",
|
||||
"printing.generic.columns": "Colonne",
|
||||
"printing.generic.customSize": "Personalizzato",
|
||||
"printing.generic.description": "Sintonizza le impostazioni di seguito per ottenere il layout di stampa desiderato. Tieni presente che le stampanti e il tuo sistema operativo potrebbero applicare i propri margini e ridimensionamenti, quindi potrebbe essere necessario eseguire alcuni tentativi ed errori prima che tutto sia corretto. Provalo su un pezzo di carta normale prima di stampare sulle etichette effettive.",
|
||||
"printing.generic.dimensions": "Dimensioni",
|
||||
"printing.generic.gridTooWide": "",
|
||||
"printing.generic.helpMargin": "I margini devono essere configurati affinchè corrispondano alla carta per etichette e alla stampante, la modifica di questi influirà sulla dimensione dell'intera griglia.",
|
||||
"printing.generic.helpPrinterMargin": "La Safe-Zone deve essere impostata in prossimità del bordo stampabile della carta; la modifica di questi valori non influirà sull'intera griglia.",
|
||||
"printing.generic.horizontalSpacing": "Spaziatura Orizzontale",
|
||||
@@ -65,7 +329,11 @@
|
||||
"printing.generic.skipItems": "Salta Elementi",
|
||||
"printing.generic.verticalSpacing": "Spaziatura Verticale",
|
||||
"printing.qrcode.button": "Stampa etichette",
|
||||
"printing.qrcode.customUrl.caveat": "",
|
||||
"printing.qrcode.customUrl.hint": "",
|
||||
"printing.qrcode.customUrl.label": "",
|
||||
"printing.qrcode.useHTTPUrl.label": "Link codice QR",
|
||||
"printing.qrcode.useHTTPUrl.options.custom": "",
|
||||
"printing.qrcode.useHTTPUrl.options.default": "Preimpostato",
|
||||
"printing.qrcode.useHTTPUrl.options.url": "URL",
|
||||
"printing.qrcode.useHTTPUrl.preview": "Anteprima:",
|
||||
@@ -74,19 +342,46 @@
|
||||
"printing.spoolSelect.selectedTotal_one": "{{count}} bobina selezionata",
|
||||
"printing.spoolSelect.selectedTotal_other": "{{count}} bobine selezionate",
|
||||
"scanner.description": "Scansiona uno Spoolman QR-Code per visualizzare i dettagli della bobina.",
|
||||
"scanner.error.inUse": "",
|
||||
"scanner.error.insecureContext": "La pagina non è disponibile tramite HTTPS.",
|
||||
"scanner.error.notAllowed": "Non hai accesso alla fotocamera.",
|
||||
"scanner.error.notFound": "Nessuna fotocamera rilevata.",
|
||||
"scanner.error.streamApiNotSupported": "il browser non supporta le API MediaStream.",
|
||||
"scanner.error.unknown": "Si è verificato un errore. ({{error}})",
|
||||
"scanner.starting": "",
|
||||
"scanner.title": "QR-Code Scanner",
|
||||
"search.colorHint": "",
|
||||
"search.noResults": "",
|
||||
"search.searching": "",
|
||||
"search.section.filaments": "",
|
||||
"search.section.spools": "",
|
||||
"search.section.vendors": "",
|
||||
"search.threshold": "",
|
||||
"search.unknownFilament": "",
|
||||
"settings.appearance.tab": "",
|
||||
"settings.appearance.theme.dark": "",
|
||||
"settings.appearance.theme.desc": "",
|
||||
"settings.appearance.theme.label": "",
|
||||
"settings.appearance.theme.light": "",
|
||||
"settings.appearance.theme.system": "",
|
||||
"settings.extraFields.addChoice": "",
|
||||
"settings.extraFields.addChoicesFirst": "",
|
||||
"settings.extraFields.addEntityField": "",
|
||||
"settings.extraFields.booleanFalse": "No",
|
||||
"settings.extraFields.booleanTrue": "Si",
|
||||
"settings.extraFields.deleteConfirm": "Cancellare il campo {{name}}?",
|
||||
"settings.extraFields.description.intro": "Qui è possibile aggiungere campi personalizzati.",
|
||||
"settings.extraFields.description.constraints": "Una volta aggiunto un campo, non è possibile modificarne la chiave o il tipo, e per i campi di tipo scelta non è possibile rimuovere le scelte o modificare lo stato di scelta multipla. Se si rimuove un campo, tutti i dati associati saranno cancellati.",
|
||||
"settings.extraFields.description.intro": "Qui è possibile aggiungere campi personalizzati.",
|
||||
"settings.extraFields.description.keyUsage": "La chiave è il modo in cui gli altri programmi leggono/scrivono i dati, quindi se il campo personalizzato deve integrarsi con un programma di terze parti, assicurarsi di impostarla correttamente. Il valore predefinito viene applicato solo ai nuovi elementi.",
|
||||
"settings.extraFields.description.tableViews": "I campi extra non possono essere ordinati o filtrati nelle viste tabella.",
|
||||
"settings.extraFields.editorEdit": "",
|
||||
"settings.extraFields.editorNew": "",
|
||||
"settings.extraFields.errors.choiceNeeded": "",
|
||||
"settings.extraFields.errors.choicesRemoved": "",
|
||||
"settings.extraFields.errors.deleteFailed": "",
|
||||
"settings.extraFields.errors.keyFormat": "",
|
||||
"settings.extraFields.errors.nameRequired": "",
|
||||
"settings.extraFields.errors.saveFailed": "",
|
||||
"settings.extraFields.fieldType.boolean": "Booleano",
|
||||
"settings.extraFields.fieldType.choice": "Scelta",
|
||||
"settings.extraFields.fieldType.datetime": "Data e ora",
|
||||
@@ -95,7 +390,13 @@
|
||||
"settings.extraFields.fieldType.integer": "\"Intero\" per tipo campo extra, numero intero senza decimali",
|
||||
"settings.extraFields.fieldType.integerRange": "Intervallo di numeri interi",
|
||||
"settings.extraFields.fieldType.text": "\"Testo\" per tipo campo extra",
|
||||
"settings.extraFields.max": "",
|
||||
"settings.extraFields.min": "",
|
||||
"settings.extraFields.multiSuffix": "",
|
||||
"settings.extraFields.multiple": "",
|
||||
"settings.extraFields.namePlaceholder": "",
|
||||
"settings.extraFields.nonUniqueKeyError": "La chiave deve essere univoca.",
|
||||
"settings.extraFields.none": "",
|
||||
"settings.extraFields.params.choices": "Scelte",
|
||||
"settings.extraFields.params.defaultValue": "Valore di Default",
|
||||
"settings.extraFields.params.fieldType": "Tipo",
|
||||
@@ -103,14 +404,21 @@
|
||||
"settings.extraFields.params.name": "Nome",
|
||||
"settings.extraFields.params.order": "Ordine",
|
||||
"settings.extraFields.params.unit": "Unità",
|
||||
"settings.extraFields.saveField": "",
|
||||
"settings.extraFields.tab": "Campi extra",
|
||||
"settings.general.baseUrl.label": "URL di base",
|
||||
"settings.general.baseUrl.tooltip": "L'URL di base da utilizzare quando si generano funzioni come i codici QR.",
|
||||
"settings.general.currency.desc": "",
|
||||
"settings.general.currency.label": "Valuta",
|
||||
"settings.general.roundPrices.label": "Prezzi arrotondati",
|
||||
"settings.general.roundPrices.tooltip": "Prezzi arrotondati al numero intero più vicino.",
|
||||
"settings.general.tab": "Generale",
|
||||
"settings.header": "Configurazione",
|
||||
"settings.language.desc": "",
|
||||
"settings.language.label": "",
|
||||
"settings.library.lowThreshold.desc": "",
|
||||
"settings.library.lowThreshold.label": "",
|
||||
"settings.library.tab": "",
|
||||
"spool.fields.archived": "Archiviati",
|
||||
"spool.fields.comment": "Note",
|
||||
"spool.fields.filament": "Filamento",
|
||||
@@ -134,7 +442,16 @@
|
||||
"spool.form.measurementType.length": "Lunghezza",
|
||||
"spool.form.measurementType.weight": "Peso",
|
||||
"spool.spool": "Bobine",
|
||||
"topbar.addSpools": "",
|
||||
"topbar.searchPlaceholder": "",
|
||||
"unknown": "Sconosciuto",
|
||||
"validation.hexDigits": "",
|
||||
"validation.maxChars": "",
|
||||
"validation.mustBeGt": "",
|
||||
"validation.mustBeMax": "",
|
||||
"validation.mustBeMin": "",
|
||||
"validation.mustBeNumber": "",
|
||||
"validation.required": "",
|
||||
"vendor.fields.comment": "Note",
|
||||
"vendor.fields.emptySpoolWeight": "Peso a vuoto della bobina/tara",
|
||||
"vendor.fields.externalId": "ID Esterno",
|
||||
|
||||
@@ -1,17 +1,93 @@
|
||||
{
|
||||
"add.addAndNew": "",
|
||||
"add.addN_other": "",
|
||||
"add.adding": "",
|
||||
"add.advanced": "",
|
||||
"add.advancedNote": "",
|
||||
"add.change": "",
|
||||
"add.count": "",
|
||||
"add.createNew": "",
|
||||
"add.createNewSub": "",
|
||||
"add.dbUnavailable": "",
|
||||
"add.duplicate": "",
|
||||
"add.duplicateNote": "",
|
||||
"add.duplicateRename": "",
|
||||
"add.duplicateTitle": "",
|
||||
"add.filamentNamePlaceholder": "",
|
||||
"add.fill.full": "",
|
||||
"add.fillLevel": "",
|
||||
"add.importNote": "",
|
||||
"add.inCatalog": "",
|
||||
"add.locationHint": "",
|
||||
"add.locationPlaceholder": "",
|
||||
"add.manufacturerPlaceholder": "",
|
||||
"add.nameHint": "",
|
||||
"add.newFilament": "",
|
||||
"add.newFilamentTitle": "",
|
||||
"add.noCatalog": "",
|
||||
"add.noManufacturer": "",
|
||||
"add.pickColor": "",
|
||||
"add.searchPlaceholder": "",
|
||||
"add.searching": "",
|
||||
"add.spoolWeightPreset.cardboard": "",
|
||||
"add.spoolWeightPreset.plastic": "",
|
||||
"add.spoolWeightPresetsLead": "",
|
||||
"add.step2": "",
|
||||
"add.summary_other": "",
|
||||
"add.typeToSearchAll": "",
|
||||
"add.typeToSearchMatches": "",
|
||||
"add.useExisting": "",
|
||||
"add.vendorHint.existing": "",
|
||||
"add.vendorHint.new": "",
|
||||
"add.vendorHint.optional": "",
|
||||
"add.yourCatalog": "",
|
||||
"buttons.archive": "アーカイブ",
|
||||
"buttons.cancel": "キャンセル",
|
||||
"buttons.clear": "クリア",
|
||||
"buttons.close": "",
|
||||
"buttons.delete": "削除",
|
||||
"buttons.edit": "編集",
|
||||
"buttons.filter": "フィルター",
|
||||
"buttons.save": "保存",
|
||||
"buttons.showArchived": "アーカイブを表示",
|
||||
"buttons.unArchive": "非アーカイブ",
|
||||
"common.decrement": "",
|
||||
"common.increment": "",
|
||||
"common.remove": "",
|
||||
"common.search": "",
|
||||
"dashboard.addFieldHint": "",
|
||||
"dashboard.dashboard": "",
|
||||
"dashboard.deleteGroup": "",
|
||||
"dashboard.dragHint": "",
|
||||
"dashboard.dropHere": "",
|
||||
"dashboard.emptyHelp": "",
|
||||
"dashboard.errorEmptyName": "",
|
||||
"dashboard.errorExists": "",
|
||||
"dashboard.errorRename": "",
|
||||
"dashboard.lastUsed": "",
|
||||
"dashboard.newGroup": "",
|
||||
"dashboard.newGroupName": "",
|
||||
"dashboard.reorderGroup": "",
|
||||
"dashboard.spoolCount_other": "",
|
||||
"dashboard.unassigned": "",
|
||||
"datetime.done": "",
|
||||
"datetime.hour": "",
|
||||
"datetime.minute": "",
|
||||
"datetime.nextMonth": "",
|
||||
"datetime.now": "",
|
||||
"datetime.pick": "",
|
||||
"datetime.prevMonth": "",
|
||||
"datetime.time": "",
|
||||
"documentTitle.dashboard.list": "",
|
||||
"documentTitle.labels.list": "",
|
||||
"documentTitle.library.list": "",
|
||||
"documentTitle.locations.list": "場所 | Spoolman",
|
||||
"documentTitle.settings.list": "",
|
||||
"filament.fields.addColor": "",
|
||||
"filament.fields.articleNumber": "製品番号",
|
||||
"filament.fields.coaxial": "断面",
|
||||
"filament.fields.colorHex": "色",
|
||||
"filament.fields.colorType": "",
|
||||
"filament.fields.comment": "コメント",
|
||||
"filament.fields.density": "密度",
|
||||
"filament.fields.diameter": "直径",
|
||||
@@ -23,6 +99,7 @@
|
||||
"filament.fields.name": "名称",
|
||||
"filament.fields.price": "価格",
|
||||
"filament.fields.registered": "登録",
|
||||
"filament.fields.removeColor": "",
|
||||
"filament.fields.settingsBedTemp": "ベッド温度",
|
||||
"filament.fields.settingsExtruderTemp": "エクストルーダー温度",
|
||||
"filament.fields.singleColor": "単色",
|
||||
@@ -34,20 +111,216 @@
|
||||
"filament.fieldsHelp.spoolWeight": "空のスプールの重量。スプールの測定重量を決定するために使用されます。",
|
||||
"filament.fieldsHelp.weight": "フィラメントの正味重量(フルスプール時)。スプール自体の重量は含まず、フィラメントのみの重量です。通常、パッケージに記載されている重量です。",
|
||||
"filament.filament": "フィラメント",
|
||||
"footer.documentation": "",
|
||||
"footer.reportIssue": "",
|
||||
"help.help": "ヘルプ",
|
||||
"inspector.addSpoolsOfThis": "",
|
||||
"inspector.adjustFailed": "",
|
||||
"inspector.adjustHelp": "",
|
||||
"inspector.adjustWeight": "",
|
||||
"inspector.apply": "",
|
||||
"inspector.applying": "",
|
||||
"inspector.colorHex": "",
|
||||
"inspector.consumeAmount": "",
|
||||
"inspector.delete.deleting": "",
|
||||
"inspector.delete.errorGone": "",
|
||||
"inspector.delete.errorSpoolsExist": "",
|
||||
"inspector.delete.errorUnknown": "",
|
||||
"inspector.delete.filament": "",
|
||||
"inspector.delete.filamentBlockedHint": "",
|
||||
"inspector.delete.filamentBlockedTitle": "",
|
||||
"inspector.delete.filamentBlocked_other": "",
|
||||
"inspector.delete.filamentBody": "",
|
||||
"inspector.delete.filamentDone": "",
|
||||
"inspector.delete.filamentTitle": "",
|
||||
"inspector.delete.spool": "",
|
||||
"inspector.delete.spoolBody": "",
|
||||
"inspector.delete.spoolDone": "",
|
||||
"inspector.delete.spoolRemaining": "",
|
||||
"inspector.delete.spoolTitle": "",
|
||||
"inspector.delete.vendor": "",
|
||||
"inspector.delete.vendorBody": "",
|
||||
"inspector.delete.vendorDone": "",
|
||||
"inspector.delete.vendorOrphans_other": "",
|
||||
"inspector.delete.vendorTitle": "",
|
||||
"inspector.duplicateFilament": "",
|
||||
"inspector.empty": "",
|
||||
"inspector.enterValidLength": "",
|
||||
"inspector.enterValidWeight": "",
|
||||
"inspector.loading": "",
|
||||
"inspector.manageExtraFields": "",
|
||||
"inspector.measuredHelp": "",
|
||||
"inspector.multi": "",
|
||||
"inspector.newGross": "",
|
||||
"inspector.noExtraFields": "",
|
||||
"inspector.notFound": "",
|
||||
"inspector.ofRemaining": "",
|
||||
"inspector.openFilament": "",
|
||||
"inspector.openLink": "",
|
||||
"inspector.openManufacturer": "",
|
||||
"inspector.specs": "",
|
||||
"inspector.spoolsCount": "",
|
||||
"inspector.spoolsTotalRemaining": "",
|
||||
"inspector.used": "",
|
||||
"inspector.vendorSub_other": "",
|
||||
"kofi": "Ko-fiでチップをください",
|
||||
"labels.addHead": "",
|
||||
"labels.addQr": "",
|
||||
"labels.addRect": "",
|
||||
"labels.addSwatch": "",
|
||||
"labels.addText": "",
|
||||
"labels.align": "",
|
||||
"labels.alignCenter": "",
|
||||
"labels.alignLeft": "",
|
||||
"labels.alignRight": "",
|
||||
"labels.blank": "",
|
||||
"labels.bold": "",
|
||||
"labels.canvasHint": "",
|
||||
"labels.centerLogo": "",
|
||||
"labels.chooseField": "",
|
||||
"labels.clearFill": "",
|
||||
"labels.copies": "",
|
||||
"labels.cornerRadiusMm": "",
|
||||
"labels.createFirst": "",
|
||||
"labels.cutGuides": "",
|
||||
"labels.deleteConfirm": "",
|
||||
"labels.deleteElement": "",
|
||||
"labels.designName": "",
|
||||
"labels.designerDesc": "",
|
||||
"labels.designerTitle": "",
|
||||
"labels.dpi": "",
|
||||
"labels.dpiHint": "",
|
||||
"labels.duplicate": "",
|
||||
"labels.fields.bedTemp": "",
|
||||
"labels.fields.diameterMm": "",
|
||||
"labels.fields.groupVendor": "",
|
||||
"labels.fields.initialG": "",
|
||||
"labels.fields.netWeightG": "",
|
||||
"labels.fields.remainingG": "",
|
||||
"labels.filamentsSelected_other": "",
|
||||
"labels.fill": "",
|
||||
"labels.fitWidth": "",
|
||||
"labels.fitWidthHint": "",
|
||||
"labels.fontMm": "",
|
||||
"labels.gridInfo": "",
|
||||
"labels.hMm": "",
|
||||
"labels.heightMm": "",
|
||||
"labels.hintNowrap": "",
|
||||
"labels.hintSwatch": "",
|
||||
"labels.hintWrap": "",
|
||||
"labels.imageDesc": "",
|
||||
"labels.imageZipNote": "",
|
||||
"labels.insertField": "",
|
||||
"labels.kind.qr": "",
|
||||
"labels.kind.rect": "",
|
||||
"labels.kind.swatch": "",
|
||||
"labels.kind.text": "",
|
||||
"labels.labelSize": "",
|
||||
"labels.labelType": "",
|
||||
"labels.layout": "",
|
||||
"labels.modeImage": "",
|
||||
"labels.modeLabel": "",
|
||||
"labels.modeSheet": "",
|
||||
"labels.new": "",
|
||||
"labels.newText": "",
|
||||
"labels.noDesignsOption": "",
|
||||
"labels.noFilaments": "",
|
||||
"labels.noSpools": "",
|
||||
"labels.onePerLabel": "",
|
||||
"labels.preparing": "",
|
||||
"labels.preview": "",
|
||||
"labels.previewWith": "",
|
||||
"labels.printN_other": "",
|
||||
"labels.radiusMm": "",
|
||||
"labels.sampleData": "",
|
||||
"labels.saved": "",
|
||||
"labels.saving": "",
|
||||
"labels.searchFilaments": "",
|
||||
"labels.searchSpools": "",
|
||||
"labels.selectAllShort": "",
|
||||
"labels.selectAtLeastOne": "",
|
||||
"labels.selectAtLeastOneFilament": "",
|
||||
"labels.selectDesign": "",
|
||||
"labels.selectElement": "",
|
||||
"labels.selectNoneShort": "",
|
||||
"labels.selectRecentHint": "",
|
||||
"labels.selectRecentShort": "",
|
||||
"labels.showingFilament": "",
|
||||
"labels.showingReal": "",
|
||||
"labels.showingSpool": "",
|
||||
"labels.showingTags": "",
|
||||
"labels.sizeMm": "",
|
||||
"labels.skipHint": "",
|
||||
"labels.sortHint": "",
|
||||
"labels.sortId": "",
|
||||
"labels.sortNewest": "",
|
||||
"labels.stroke": "",
|
||||
"labels.strokeMm": "",
|
||||
"labels.tabDesign": "",
|
||||
"labels.tabPrint": "",
|
||||
"labels.textTemplate": "",
|
||||
"labels.typeFilament": "",
|
||||
"labels.typeHint": "",
|
||||
"labels.typeSpool": "",
|
||||
"labels.unknownFilament": "",
|
||||
"labels.wMm": "",
|
||||
"labels.widthMm": "",
|
||||
"labels.wrapText": "",
|
||||
"labels.xMm": "",
|
||||
"labels.yMm": "",
|
||||
"library.apiError": "",
|
||||
"library.collapseGroup": "",
|
||||
"library.emptyBody": "",
|
||||
"library.emptyFiltered": "",
|
||||
"library.emptyTitle": "",
|
||||
"library.expandGroup": "",
|
||||
"library.filterBy": "",
|
||||
"library.groupBy": "",
|
||||
"library.groupNone": "",
|
||||
"library.groupSpools_other": "",
|
||||
"library.nUnused": "",
|
||||
"library.noLocation": "",
|
||||
"library.noValues": "",
|
||||
"library.openGroup": "",
|
||||
"library.openManufacturer": "",
|
||||
"library.section.extra": "",
|
||||
"library.section.filament": "",
|
||||
"library.section.spool": "",
|
||||
"library.section.vendor": "",
|
||||
"library.showMore": "",
|
||||
"library.sort.nozzle": "",
|
||||
"library.sortBy": "",
|
||||
"library.unassigned": "",
|
||||
"library.unitGroups": "",
|
||||
"library.unitSpools": "",
|
||||
"library.unused": "",
|
||||
"library.unusedGroup": "",
|
||||
"library.unusedGroupMixed": "",
|
||||
"library.unusedSub": "",
|
||||
"library.unusedSubMixed": "",
|
||||
"library.used": "",
|
||||
"library.usedAgo": "",
|
||||
"loading": "読み込み中",
|
||||
"locations.locations": "場所",
|
||||
"locations.newLocation": "新しい場所",
|
||||
"locations.noLocation": "場所なし",
|
||||
"locations.noLocationsHelp": "このページでは、スプールを場所ごとに整理することができます!",
|
||||
"nav.labels": "",
|
||||
"nav.library": "",
|
||||
"no": "いいえ",
|
||||
"notifications.error": "エラー (status code: {{statusCode}})",
|
||||
"notifications.saveSuccessful": "保存完了!",
|
||||
"pagination.empty": "",
|
||||
"pagination.next": "",
|
||||
"pagination.pageSize": "",
|
||||
"pagination.perPage": "",
|
||||
"pagination.prev": "",
|
||||
"pagination.range": "",
|
||||
"printing.generic.columns": "列",
|
||||
"printing.generic.customSize": "カスタム",
|
||||
"printing.generic.description": "以下の設定を調整して、希望する印刷レイアウトを得てください。プリンターやOSが独自のマージンや拡大縮小を適用する場合があるため、すべてが正確になるまでには試行錯誤が必要かもしれません。実際のラベルに印刷する前に、普通の紙でテストしてください。",
|
||||
"printing.generic.dimensions": "寸法",
|
||||
"printing.generic.gridTooWide": "",
|
||||
"printing.generic.helpMargin": "マージンはラベル用紙とプリンターに合わせて設定する必要があります。これらを変更すると、グリッド全体のサイズに影響します。",
|
||||
"printing.generic.helpPrinterMargin": "セーフゾーンは、プリンターが用紙の端にどれだけ近づけて印刷できるかの設定です。これらを変更しても、グリッド全体には影響しません。",
|
||||
"printing.generic.horizontalSpacing": "水平方向の余白",
|
||||
@@ -65,26 +338,57 @@
|
||||
"printing.generic.skipItems": "スキップ",
|
||||
"printing.generic.verticalSpacing": "垂直方向の余白",
|
||||
"printing.qrcode.button": "ラベルを印刷",
|
||||
"printing.qrcode.customUrl.caveat": "",
|
||||
"printing.qrcode.customUrl.hint": "",
|
||||
"printing.qrcode.customUrl.label": "",
|
||||
"printing.qrcode.useHTTPUrl.label": "QRコードリンク",
|
||||
"printing.qrcode.useHTTPUrl.options.custom": "",
|
||||
"printing.qrcode.useHTTPUrl.options.default": "デフォルト",
|
||||
"printing.qrcode.useHTTPUrl.options.url": "URL",
|
||||
"printing.qrcode.useHTTPUrl.preview": "プレビュー:",
|
||||
"printing.qrcode.useHTTPUrl.tooltip": "Spoolmanのスキャン機能からスキャンした場合にのみ機能する独自リンクを使用します(デフォルト)。URLは設定で指定されたベースURLを使用するか、設定されていない場合は現在のページURLを使用します。",
|
||||
"printing.spoolSelect.selectedTotal_other": "{{count}}本のスプールを選択",
|
||||
"scanner.description": "スプールの詳細を表示するには、SpoolmanのQRコードをスキャンしてください。",
|
||||
"scanner.error.inUse": "",
|
||||
"scanner.error.insecureContext": "このページはHTTPSで接続されていません。",
|
||||
"scanner.error.notAllowed": "カメラへのアクセスが許可されていません。",
|
||||
"scanner.error.notFound": "カメラが見つかりません。",
|
||||
"scanner.error.streamApiNotSupported": "ブラウザがMediaStream APIに対応していません。",
|
||||
"scanner.error.unknown": "未知のエラーが発生しました。({{error}})",
|
||||
"scanner.starting": "",
|
||||
"scanner.title": "QRコードスキャナ",
|
||||
"search.colorHint": "",
|
||||
"search.noResults": "",
|
||||
"search.searching": "",
|
||||
"search.section.filaments": "",
|
||||
"search.section.spools": "",
|
||||
"search.section.vendors": "",
|
||||
"search.threshold": "",
|
||||
"search.unknownFilament": "",
|
||||
"settings.appearance.tab": "",
|
||||
"settings.appearance.theme.dark": "",
|
||||
"settings.appearance.theme.desc": "",
|
||||
"settings.appearance.theme.label": "",
|
||||
"settings.appearance.theme.light": "",
|
||||
"settings.appearance.theme.system": "",
|
||||
"settings.extraFields.addChoice": "",
|
||||
"settings.extraFields.addChoicesFirst": "",
|
||||
"settings.extraFields.addEntityField": "",
|
||||
"settings.extraFields.booleanFalse": "いいえ",
|
||||
"settings.extraFields.booleanTrue": "はい",
|
||||
"settings.extraFields.deleteConfirm": "{{name}}のフィールドを削除しますか?",
|
||||
"settings.extraFields.description.intro": "ここで追加のカスタムフィールドを追加できます。",
|
||||
"settings.extraFields.description.constraints": "フィールドを追加すると、そのキーやタイプを変更することはできません。また、選択肢タイプのフィールドでは、選択肢の削除や複数選択の状態を変更することはできません。フィールドを削除すると、すべてのエンティティの関連データが削除されます。",
|
||||
"settings.extraFields.description.intro": "ここで追加のカスタムフィールドを追加できます。",
|
||||
"settings.extraFields.description.keyUsage": "キーは他のプログラムがデータを読み書きする際に使用するものなので、カスタムフィールドがサードパーティのプログラムと連携する予定がある場合は、正しく設定してください。デフォルト値は新しいアイテムにのみ適用されます。",
|
||||
"settings.extraFields.description.tableViews": "追加フィールドはテーブルビューで並べ替えやフィルタリングすることはできません。",
|
||||
"settings.extraFields.editorEdit": "",
|
||||
"settings.extraFields.editorNew": "",
|
||||
"settings.extraFields.errors.choiceNeeded": "",
|
||||
"settings.extraFields.errors.choicesRemoved": "",
|
||||
"settings.extraFields.errors.deleteFailed": "",
|
||||
"settings.extraFields.errors.keyFormat": "",
|
||||
"settings.extraFields.errors.nameRequired": "",
|
||||
"settings.extraFields.errors.saveFailed": "",
|
||||
"settings.extraFields.fieldType.boolean": "真偽値",
|
||||
"settings.extraFields.fieldType.choice": "選択肢",
|
||||
"settings.extraFields.fieldType.datetime": "日時",
|
||||
@@ -93,7 +397,13 @@
|
||||
"settings.extraFields.fieldType.integer": "整数",
|
||||
"settings.extraFields.fieldType.integerRange": "数値範囲",
|
||||
"settings.extraFields.fieldType.text": "テキスト",
|
||||
"settings.extraFields.max": "",
|
||||
"settings.extraFields.min": "",
|
||||
"settings.extraFields.multiSuffix": "",
|
||||
"settings.extraFields.multiple": "",
|
||||
"settings.extraFields.namePlaceholder": "",
|
||||
"settings.extraFields.nonUniqueKeyError": "キーは一意の値である必要があります。",
|
||||
"settings.extraFields.none": "",
|
||||
"settings.extraFields.params.choices": "選択肢",
|
||||
"settings.extraFields.params.defaultValue": "デフォルト値",
|
||||
"settings.extraFields.params.fieldType": "タイプ",
|
||||
@@ -101,14 +411,21 @@
|
||||
"settings.extraFields.params.name": "名称",
|
||||
"settings.extraFields.params.order": "数量",
|
||||
"settings.extraFields.params.unit": "単位",
|
||||
"settings.extraFields.saveField": "",
|
||||
"settings.extraFields.tab": "追加項目",
|
||||
"settings.general.baseUrl.label": "ベースURL",
|
||||
"settings.general.baseUrl.tooltip": "QRコードなどの機能を生成する際に使用する基本URL。",
|
||||
"settings.general.currency.desc": "",
|
||||
"settings.general.currency.label": "通過",
|
||||
"settings.general.roundPrices.label": "価格の端数処理",
|
||||
"settings.general.roundPrices.tooltip": "価格の小数点以下を四捨五入する。",
|
||||
"settings.general.tab": "一般",
|
||||
"settings.header": "設定",
|
||||
"settings.language.desc": "",
|
||||
"settings.language.label": "",
|
||||
"settings.library.lowThreshold.desc": "",
|
||||
"settings.library.lowThreshold.label": "",
|
||||
"settings.library.tab": "",
|
||||
"spool.fields.archived": "アーカイブ",
|
||||
"spool.fields.comment": "コメント",
|
||||
"spool.fields.filament": "フィラメント",
|
||||
@@ -132,7 +449,16 @@
|
||||
"spool.form.measurementType.length": "長さ",
|
||||
"spool.form.measurementType.weight": "重さ",
|
||||
"spool.spool": "スプール",
|
||||
"topbar.addSpools": "",
|
||||
"topbar.searchPlaceholder": "",
|
||||
"unknown": "未知",
|
||||
"validation.hexDigits": "",
|
||||
"validation.maxChars": "",
|
||||
"validation.mustBeGt": "",
|
||||
"validation.mustBeMax": "",
|
||||
"validation.mustBeMin": "",
|
||||
"validation.mustBeNumber": "",
|
||||
"validation.required": "",
|
||||
"vendor.fields.comment": "コメント",
|
||||
"vendor.fields.emptySpoolWeight": "空スプールの重さ",
|
||||
"vendor.fields.externalId": "外部ID",
|
||||
|
||||
@@ -1,28 +1,143 @@
|
||||
{
|
||||
"add.addAndNew": "추가 & 새로 만들기",
|
||||
"add.addN_other": "스풀 {{count}}개 추가",
|
||||
"add.adding": "추가 중...",
|
||||
"add.advanced": "상세 제원",
|
||||
"add.advancedNote": "밀도, 지름, 온도 (재료에서 자동 입력됨)",
|
||||
"add.change": "변경",
|
||||
"add.count": "개수",
|
||||
"add.createNew": "새 필라멘트 생성",
|
||||
"add.createNewSub": "목록 또는 {{name}}에 등록되지 않음",
|
||||
"add.dbUnavailable": "{{name}} 사용 불가",
|
||||
"add.duplicate": "복제",
|
||||
"add.duplicateNote": "제원, 제조사 및 가격이 복사되었습니다. 새로운 이름과 색상을 지정하세요.",
|
||||
"add.duplicateRename": "아직 원본 이름과 동일합니다 — 구분하려면 이름을 바꾸세요.",
|
||||
"add.duplicateTitle": "새 필라멘트 · “{{name}}”의 복사본",
|
||||
"add.filamentNamePlaceholder": "예) PolyTerra Matte Sage",
|
||||
"add.fill.full": "가득 참",
|
||||
"add.fillLevel": "잔량",
|
||||
"add.importNote": "스풀을 추가할 때 이 필라멘트가 목록에 함께 등록됩니다.",
|
||||
"add.inCatalog": "목록에 있음",
|
||||
"add.locationHint": "스풀을 실제로 보관하는 곳입니다. 선반, 상자, 프린터 등을 적으세요. 모두 한곳에 둔다면 비워 두세요.",
|
||||
"add.locationPlaceholder": "예) 선반 A, 건조기 2, 프린터 1",
|
||||
"add.manufacturerPlaceholder": "예) Polymaker",
|
||||
"add.nameHint": "색상을 함께 적으세요. 필라멘트를 구분하는 기준이 됩니다.",
|
||||
"add.newFilament": "새 필라멘트",
|
||||
"add.newFilamentTitle": "새 필라멘트",
|
||||
"add.noCatalog": "목록에 필라멘트가 없습니다",
|
||||
"add.noManufacturer": "제조사 없음",
|
||||
"add.pickColor": "색상 선택",
|
||||
"add.searchPlaceholder": "내 목록과 {{name}}에서 검색...",
|
||||
"add.searching": "검색 중...",
|
||||
"add.spoolWeightPreset.cardboard": "종이 스풀 {{weight}} g",
|
||||
"add.spoolWeightPreset.plastic": "플라스틱 스풀 {{weight}} g",
|
||||
"add.spoolWeightPresetsLead": "일반적인 스풀 값으로 시작하기:",
|
||||
"add.step2": "2단계 · 스풀 정보",
|
||||
"add.summary_other": "스풀 {{count}}개",
|
||||
"add.typeToSearchAll": "입력하면 수천 종의 필라멘트를 검색합니다",
|
||||
"add.typeToSearchMatches": "입력해서 검색하세요. 일치하는 항목이 없습니다",
|
||||
"add.useExisting": "기존 필라멘트 사용",
|
||||
"add.vendorHint.existing": "기존 제조사 “{{name}}”을(를) 사용합니다",
|
||||
"add.vendorHint.new": "새 제조사 “{{name}}”이(가) 생성됩니다",
|
||||
"add.vendorHint.optional": "선택 사항 - 제조사가 없으면 비워 두세요",
|
||||
"add.yourCatalog": "내 목록",
|
||||
"buttons.archive": "보관",
|
||||
"buttons.cancel": "취소",
|
||||
"buttons.clear": "지우기",
|
||||
"buttons.close": "닫기",
|
||||
"buttons.delete": "삭제",
|
||||
"buttons.edit": "수정",
|
||||
"buttons.filter": "필터",
|
||||
"buttons.save": "저장",
|
||||
"buttons.showArchived": "보관 보이기",
|
||||
"buttons.unArchive": "보관취소",
|
||||
"buttons.showArchived": "보관된 항목 표시",
|
||||
"buttons.unArchive": "보관 해제",
|
||||
"changeFilament.action": "변경",
|
||||
"changeFilament.adoptWeight": "이 스풀의 전체 무게를 {{full}}로 설정",
|
||||
"changeFilament.adoptWeightHelp": "이전에 감겨 있던 필라멘트 기준으로 {{current}}로 기록되어 있습니다. 사용량({{used}})은 어느 쪽이든 유지되며, 남은 양은 {{remaining}}이 됩니다.",
|
||||
"changeFilament.apply": "필라멘트 변경",
|
||||
"changeFilament.applying": "변경 중...",
|
||||
"changeFilament.current": "현재",
|
||||
"changeFilament.done": "필라멘트를 변경했습니다.",
|
||||
"changeFilament.failed": "필라멘트를 변경하지 못했습니다.",
|
||||
"changeFilament.importNote": "변경을 적용할 때 이 필라멘트가 목록에 함께 등록됩니다.",
|
||||
"changeFilament.intro": "스풀 #{{id}}의 번호, 위치, 날짜, 사용 기록은 그대로 유지되고 필라멘트만 바뀝니다.",
|
||||
"changeFilament.next": "변경",
|
||||
"changeFilament.now": "현재",
|
||||
"changeFilament.pickBelow": "아래에서 필라멘트를 선택하세요",
|
||||
"changeFilament.title": "필라멘트 변경",
|
||||
"changeFilament.weightFollows": "이 스풀에는 자체 전체 무게가 없어 새 필라멘트의 값 {{full}}을 따릅니다. 이미 사용한 {{used}}을 빼면 {{remaining}}이 남습니다.",
|
||||
"changeVendor.action": "변경",
|
||||
"changeVendor.apply": "제조사 변경",
|
||||
"changeVendor.applying": "변경 중...",
|
||||
"changeVendor.clearHint": "이 필라멘트를 제조사 없이 둡니다",
|
||||
"changeVendor.create": "“{{name}}” 생성",
|
||||
"changeVendor.createHint": "아직 등록되지 않은 제조사입니다. 새로 추가됩니다",
|
||||
"changeVendor.current": "현재",
|
||||
"changeVendor.done": "제조사를 변경했습니다.",
|
||||
"changeVendor.emptySpool": "빈 스풀 {{value}}",
|
||||
"changeVendor.failed": "제조사를 변경하지 못했습니다.",
|
||||
"changeVendor.intro": "“{{name}}”의 스풀, 제원, 사용 기록은 그대로 유지되고 등록된 제조사만 바뀝니다.",
|
||||
"changeVendor.next": "변경",
|
||||
"changeVendor.noEmptySpool": "빈 스풀 중량 없음",
|
||||
"changeVendor.noMatches": "일치하는 제조사 없음",
|
||||
"changeVendor.none": "등록된 제조사 없음",
|
||||
"changeVendor.noneNote": "제조사 없이 등록됨",
|
||||
"changeVendor.now": "현재",
|
||||
"changeVendor.pickBelow": "아래에서 제조사를 선택하세요",
|
||||
"changeVendor.searchPlaceholder": "제조사 검색 또는 새 이름 입력",
|
||||
"changeVendor.tareFollows": "이 필라멘트는 자체 빈 스풀 무게가 없어 제조사 값을 따릅니다. 변경 후에는 {{value}}이며, 이는 이 필라멘트의 스풀을 측정했을 때 나오는 빈 무게입니다.",
|
||||
"changeVendor.tareGone": "이 필라멘트는 자체 빈 스풀 무게가 없어 제조사 값 {{current}}을 따릅니다. 변경 후에는 필라멘트에 값을 지정하기 전까지 가져올 값이 없습니다.",
|
||||
"changeVendor.title": "제조사 변경",
|
||||
"changeVendor.willBeCreated": "생성 예정",
|
||||
"common.decrement": "감소",
|
||||
"common.increment": "증가",
|
||||
"common.remove": "제거",
|
||||
"common.search": "검색",
|
||||
"dashboard.addFieldHint": "설정에서 스풀에 텍스트나 선택 필드를 추가하면 그 필드로도 묶어 볼 수 있습니다",
|
||||
"dashboard.dashboard": "대시보드",
|
||||
"dashboard.deleteGroup": "그룹 삭제",
|
||||
"dashboard.dragHint": "스풀을 다른 카드로 끌어다 놓으면 {{field}}이(가) 바뀌고, 카드 안에서 끌면 순서가 바뀝니다",
|
||||
"dashboard.dropHere": "여기에 스풀을 놓으세요",
|
||||
"dashboard.emptyHelp": "이 페이지에서는 원하는 필드를 기준으로 스풀을 묶어서 볼 수 있습니다. 시작하려면 스풀을 추가하세요!",
|
||||
"dashboard.errorEmptyName": "이름은 비워 둘 수 없습니다",
|
||||
"dashboard.errorExists": "같은 이름의 그룹이 이미 있습니다",
|
||||
"dashboard.errorRename": "그룹 이름을 변경하지 못했습니다",
|
||||
"dashboard.lastUsed": "{{time}} 전 최종 사용",
|
||||
"dashboard.newGroup": "새 그룹",
|
||||
"dashboard.newGroupName": "새 그룹 {{n}}",
|
||||
"dashboard.reorderGroup": "끌어서 그룹 순서 변경",
|
||||
"dashboard.spoolCount_other": "스풀 {{count}}개",
|
||||
"dashboard.unassigned": "미지정",
|
||||
"datetime.done": "완료",
|
||||
"datetime.hour": "시",
|
||||
"datetime.minute": "분",
|
||||
"datetime.nextMonth": "다음 달",
|
||||
"datetime.now": "지금",
|
||||
"datetime.pick": "날짜와 시간 선택",
|
||||
"datetime.prevMonth": "이전 달",
|
||||
"datetime.time": "시간",
|
||||
"documentTitle.dashboard.list": "대시보드 | Spoolman",
|
||||
"documentTitle.labels.list": "라벨 | Spoolman",
|
||||
"documentTitle.library.list": "라이브러리 | Spoolman",
|
||||
"documentTitle.locations.list": "위치 | Spoolman",
|
||||
"documentTitle.settings.list": "설정 | Spoolman",
|
||||
"filament.fields.addColor": "색상 추가",
|
||||
"filament.fields.articleNumber": "제품 번호",
|
||||
"filament.fields.coaxial": "공압출",
|
||||
"filament.fields.colorHex": "색상",
|
||||
"filament.fields.colorType": "색상 유형",
|
||||
"filament.fields.comment": "주석",
|
||||
"filament.fields.density": "밀도",
|
||||
"filament.fields.diameter": "외경",
|
||||
"filament.fields.diameter": "직경",
|
||||
"filament.fields.externalId": "외부 ID",
|
||||
"filament.fields.id": "ID",
|
||||
"filament.fields.longitudinal": "세로",
|
||||
"filament.fields.longitudinal": "종방향",
|
||||
"filament.fields.material": "재료",
|
||||
"filament.fields.multiColor": "다중",
|
||||
"filament.fields.name": "이름",
|
||||
"filament.fields.price": "가격",
|
||||
"filament.fields.registered": "등록됨",
|
||||
"filament.fields.removeColor": "색상 제거",
|
||||
"filament.fields.settingsBedTemp": "배드 온도",
|
||||
"filament.fields.settingsExtruderTemp": "압출기 온도",
|
||||
"filament.fields.singleColor": "단일",
|
||||
@@ -34,24 +149,233 @@
|
||||
"filament.fieldsHelp.spoolWeight": "빈 스풀의 무게. 스풀의 측정 무게를 결정하는 데 사용됩니다.",
|
||||
"filament.fieldsHelp.weight": "전체 스풀의 필라멘트 중량(순중량). 여기에는 스풀 자체의 무게는 포함되지 않으며 필라멘트만 포함됩니다. 일반적으로 포장지에 표기되는 내용입니다.",
|
||||
"filament.filament": "필라멘트",
|
||||
"footer.documentation": "문서",
|
||||
"footer.reportIssue": "문제 신고",
|
||||
"help.help": "도움말",
|
||||
"kofi": "Ko-fi 로 개발 지원",
|
||||
"inspector.addSpoolsOfThis": "이 필라멘트의 스풀 추가",
|
||||
"inspector.adjustFailed": "무게 조정에 실패했습니다.",
|
||||
"inspector.adjustHelp": "양수는 필라멘트를 소모하고, 음수는 다시 더합니다.",
|
||||
"inspector.adjustWeight": "무게 조정",
|
||||
"inspector.apply": "적용",
|
||||
"inspector.applying": "적용 중...",
|
||||
"inspector.colorHex": "HEX 색상",
|
||||
"inspector.consumeAmount": "소모량:",
|
||||
"inspector.defaultFrom.filament": "{{value}} · 필라멘트 기본값",
|
||||
"inspector.defaultFrom.manufacturer": "{{value}} · 제조사 기본값",
|
||||
"inspector.delete.deleting": "삭제 중...",
|
||||
"inspector.delete.errorGone": "이미 삭제된 항목입니다.",
|
||||
"inspector.delete.errorSpoolsExist": "이 필라멘트를 사용 중인 스풀이 남아 있어 삭제할 수 없습니다.",
|
||||
"inspector.delete.errorUnknown": "삭제에 실패했습니다. 자세한 내용은 서버 로그를 확인하세요.",
|
||||
"inspector.delete.filament": "필라멘트 삭제",
|
||||
"inspector.delete.filamentBlockedHint": "먼저 해당 스풀을 삭제하세요. 보관 처리만으로는 삭제할 수 없습니다.",
|
||||
"inspector.delete.filamentBlockedTitle": "이 필라멘트는 삭제할 수 없습니다",
|
||||
"inspector.delete.filamentBlocked_other": "보관된 것을 포함해 스풀 {{count}}개가 아직 “{{name}}”을(를) 사용하고 있습니다.",
|
||||
"inspector.delete.filamentBody": "“{{name}}”이(가) 목록에서 삭제됩니다. 이 작업은 되돌릴 수 없습니다.",
|
||||
"inspector.delete.filamentDone": "필라멘트를 삭제했습니다.",
|
||||
"inspector.delete.filamentTitle": "이 필라멘트를 삭제하시겠습니까?",
|
||||
"inspector.delete.spool": "스풀 삭제",
|
||||
"inspector.delete.spoolBody": "“{{name}}”의 스풀 #{{id}}이(가) 사용 기록과 함께 삭제됩니다. 이 작업은 되돌릴 수 없습니다.",
|
||||
"inspector.delete.spoolDone": "스풀을 삭제했습니다.",
|
||||
"inspector.delete.spoolRemaining": "아직 필라멘트가 {{weight}} 남아 있습니다. 그냥 치워 두려는 것뿐이라면 삭제 대신 보관하세요.",
|
||||
"inspector.delete.spoolTitle": "이 스풀을 삭제하시겠습니까?",
|
||||
"inspector.delete.vendor": "제조사 삭제",
|
||||
"inspector.delete.vendorBody": "“{{name}}”이(가) 삭제됩니다. 이 작업은 되돌릴 수 없습니다.",
|
||||
"inspector.delete.vendorDone": "제조사를 삭제했습니다.",
|
||||
"inspector.delete.vendorOrphans_other": "이 제조사의 필라멘트 {{count}}개는 유지되지만 제조사가 없는 상태가 됩니다.",
|
||||
"inspector.delete.vendorTitle": "이 제조사를 삭제하시겠습니까?",
|
||||
"inspector.duplicateFilament": "복제",
|
||||
"inspector.empty": "목록에서 스풀, 필라멘트 또는 제조사를 선택하면 여기에 세부 정보가 표시됩니다.",
|
||||
"inspector.enterValidLength": "올바른 길이를 입력하세요.",
|
||||
"inspector.enterValidWeight": "올바른 무게를 입력하세요.",
|
||||
"inspector.loading": "로딩 중...",
|
||||
"inspector.manageExtraFields": "필드 관리",
|
||||
"inspector.measuredHelp": "저울로 잰 스풀과 남은 필라멘트를 합한 무게입니다.",
|
||||
"inspector.multi": "다중 ×{{count}}",
|
||||
"inspector.newGross": "새 총 무게:",
|
||||
"inspector.noExtraFields": "아직 없습니다. Spoolman이 다루지 않는 정보는 직접 필드를 추가해 관리하세요.",
|
||||
"inspector.notFound": "항목을 찾을 수 없습니다. 삭제되었을 수 있습니다.",
|
||||
"inspector.ofRemaining": "중 {{weight}} 남음 · {{length}} m",
|
||||
"inspector.openFilament": "필라멘트 열기",
|
||||
"inspector.openLink": "{{url}}을(를) 새 탭에서 열기",
|
||||
"inspector.openManufacturer": "제조사 열기",
|
||||
"inspector.override.byFilament": "이 필라멘트 값으로 재정의 되었습니다 · {{value}}",
|
||||
"inspector.override.bySpool": "이 스풀 값으로 재정의 되었습니다 · {{value}}",
|
||||
"inspector.override.overridesFilament": "필라멘트를 재정의합니다 · {{value}}",
|
||||
"inspector.override.overridesManufacturer": "제조사를 재정의합니다 · {{value}}",
|
||||
"inspector.specs": "제원 · 바로 수정",
|
||||
"inspector.spoolsCount": "스풀 · {{count}}",
|
||||
"inspector.spoolsTotalRemaining": "총 {{weight}}",
|
||||
"inspector.used": "사용",
|
||||
"inspector.vendorSub_other": "필라멘트 {{count}}개",
|
||||
"kofi": "Ko-fi로 개발 지원",
|
||||
"labels.addHead": "추가",
|
||||
"labels.addQr": "QR 코드",
|
||||
"labels.addRect": "사각형",
|
||||
"labels.addSwatch": "색상 견본",
|
||||
"labels.addText": "텍스트 / 필드",
|
||||
"labels.align": "정렬",
|
||||
"labels.alignCenter": "가운데",
|
||||
"labels.alignLeft": "왼쪽",
|
||||
"labels.alignRight": "오른쪽",
|
||||
"labels.blank": "아직 라벨 디자인이 없습니다.",
|
||||
"labels.bold": "굵게",
|
||||
"labels.canvasHint": "끌어서 이동 · 클릭해서 선택 · 핸들로 크기 조절.",
|
||||
"labels.centerLogo": "가운데에 Spoolman 로고 표시",
|
||||
"labels.chooseField": "필드 선택...",
|
||||
"labels.clearFill": "채우기 없음 (외곽선만)",
|
||||
"labels.copies": "매수",
|
||||
"labels.cornerRadiusMm": "모서리 반지름",
|
||||
"labels.createFirst": "첫 라벨 만들기",
|
||||
"labels.cutGuides": "재단선",
|
||||
"labels.deleteConfirm": "이 라벨 디자인을 삭제하시겠습니까?",
|
||||
"labels.deleteElement": "요소 삭제",
|
||||
"labels.designName": "디자인 이름",
|
||||
"labels.designerDesc": "스풀, 필라멘트, 제조사의 모든 필드를 활용해 QR 코드 라벨을 디자인하고, 라벨 용지나 라벨 프린터로 인쇄합니다. 디자인은 서버에 저장됩니다.",
|
||||
"labels.designerTitle": "라벨 디자이너",
|
||||
"labels.dpi": "해상도",
|
||||
"labels.dpiHint": "작은 라벨을 선명하게 인쇄하려면 프린터에 맞춰 설정하세요. 대부분의 감열식 라벨 프린터는 203 dpi, 레이저와 잉크젯은 300 dpi 이상입니다.",
|
||||
"labels.duplicate": "복제",
|
||||
"labels.exportDescAml": "선택한 레이블당 하나의 .aml 라벨 파일을 저장합니다. 각 파일은 {{w}}×{{h}} mm입니다. 대부분의 열 라벨 프린터와 함께 제공되는 LPAPI 기반 앱에서 열리며, 파일의 물리적 크기를 읽어줍니다.",
|
||||
"labels.exportDescPng": "선택한 라벨당 PNG 이미지 하나를 저장합니다. 각 라벨은 {{w}}×{{h}} mm입니다.",
|
||||
"labels.exportFormat": "파일 유형",
|
||||
"labels.exportFormatOptions.aml": "AML 라벨 파일",
|
||||
"labels.exportFormatOptions.png": "PNG 이미지",
|
||||
"labels.fields.bedTemp": "베드 온도",
|
||||
"labels.fields.diameterMm": "직경 (mm)",
|
||||
"labels.fields.groupVendor": "제조사",
|
||||
"labels.fields.initialG": "초기 중량 (g)",
|
||||
"labels.fields.netWeightG": "순중량 (g)",
|
||||
"labels.fields.remainingG": "남은 양 (g)",
|
||||
"labels.filamentsSelected_other": "필라멘트 {{count}}개 선택됨",
|
||||
"labels.fill": "채우기",
|
||||
"labels.fitWidth": "너비를 열 수에 맞춤",
|
||||
"labels.fitWidthHint": "선택한 열 수가 페이지를 가득 채우도록 라벨 너비를 설정합니다.",
|
||||
"labels.fontMm": "글자 크기",
|
||||
"labels.gridInfo": "{{cols}} × {{rows}} = 페이지당 라벨 {{perPage}}개",
|
||||
"labels.hMm": "세로",
|
||||
"labels.heightMm": "높이",
|
||||
"labels.hintNowrap": "텍스트가 한 줄로 유지되며, 너비를 넘어가는 부분은 잘립니다.",
|
||||
"labels.hintSwatch": "인쇄할 때 스풀의 필라멘트 색상으로 채워집니다.",
|
||||
"labels.hintWrap": "필드를 감싸면 값이 비어 있을 때 숨겨집니다:",
|
||||
"labels.imageDesc": "인쇄하는 대신 선택한 스풀마다 {{w}}×{{h}} mm 크기의 PNG 파일을 하나씩 저장합니다.",
|
||||
"labels.imageZipNote": "{{threshold}}개가 넘는 라벨은 하나의 zip 파일로 제공됩니다.",
|
||||
"labels.insertField": "필드 삽입",
|
||||
"labels.kind.qr": "QR 코드",
|
||||
"labels.kind.rect": "사각형",
|
||||
"labels.kind.swatch": "견본",
|
||||
"labels.kind.text": "텍스트",
|
||||
"labels.labelSize": "라벨 크기",
|
||||
"labels.labelType": "라벨 종류",
|
||||
"labels.layout": "레이아웃",
|
||||
"labels.modeImage": "이미지 파일",
|
||||
"labels.modeLabel": "라벨 프린터",
|
||||
"labels.modeSheet": "용지 (타일 배치)",
|
||||
"labels.new": "새로 만들기",
|
||||
"labels.newText": "새 텍스트",
|
||||
"labels.noDesignsOption": "아직 디자인 없음",
|
||||
"labels.noFilaments": "필라멘트가 없습니다.",
|
||||
"labels.noSpools": "스풀이 없습니다.",
|
||||
"labels.onePerLabel": "라벨 하나당 {{w}}×{{h}} mm 페이지 한 장씩 인쇄합니다.",
|
||||
"labels.preparing": "준비 중...",
|
||||
"labels.preview": "미리보기",
|
||||
"labels.previewWith": "미리보기 대상",
|
||||
"labels.printN_other": "라벨 {{count}}장 인쇄",
|
||||
"labels.radiusMm": "반지름",
|
||||
"labels.sampleData": "샘플 데이터",
|
||||
"labels.saveAsFormat": "{{format}}로 저장",
|
||||
"labels.saved": "저장됨",
|
||||
"labels.saving": "저장 중...",
|
||||
"labels.searchFilaments": "필라멘트 검색...",
|
||||
"labels.searchSpools": "스풀 검색...",
|
||||
"labels.selectAllShort": "전체",
|
||||
"labels.selectAtLeastOne": "스풀을 하나 이상 선택하세요.",
|
||||
"labels.selectAtLeastOneFilament": "필라멘트를 하나 이상 선택하세요.",
|
||||
"labels.selectDesign": "라벨 디자인 선택",
|
||||
"labels.selectElement": "편집할 요소를 선택하거나, 팔레트에서 새 요소를 추가하세요.",
|
||||
"labels.selectNoneShort": "해제",
|
||||
"labels.selectRecentHint": "최근 24시간 이내에 추가된 스풀을 선택합니다",
|
||||
"labels.selectRecentShort": "최근 ({{count}})",
|
||||
"labels.showingFilament": "필라멘트 #{{id}} 표시 중",
|
||||
"labels.showingReal": "실제 스풀 데이터를 표시하고 있습니다.",
|
||||
"labels.showingSpool": "스풀 #{{id}} 표시 중",
|
||||
"labels.showingTags": "위에서 스풀을 선택하기 전까지 필드는 태그로 표시됩니다.",
|
||||
"labels.sizeMm": "크기",
|
||||
"labels.skipHint": "항목 건너뛰기를 설정하면 첫 라벨 앞의 칸을 그 수만큼 비워 두므로, 일부만 사용한 용지를 다시 쓸 수 있습니다. 위에서부터 왼쪽에서 오른쪽 순서로 이미 떼어낸 라벨 수를 세어 입력하세요.",
|
||||
"labels.sortHint": "스풀 정렬",
|
||||
"labels.sortId": "#",
|
||||
"labels.sortNewest": "최신순",
|
||||
"labels.stroke": "선",
|
||||
"labels.strokeMm": "선 굵기",
|
||||
"labels.tabDesign": "디자인",
|
||||
"labels.tabPrint": "인쇄",
|
||||
"labels.textTemplate": "텍스트 / 템플릿",
|
||||
"labels.typeFilament": "필라멘트",
|
||||
"labels.typeHint": "필라멘트 라벨에는 스풀 전용 필드가 표시되지 않으며, QR 코드는 스풀 대신 필라멘트로 연결됩니다.",
|
||||
"labels.typeSpool": "스풀",
|
||||
"labels.unknownFilament": "알 수 없는 필라멘트",
|
||||
"labels.wMm": "가로",
|
||||
"labels.widthMm": "너비",
|
||||
"labels.wrapText": "텍스트 줄바꿈",
|
||||
"labels.xMm": "X",
|
||||
"labels.yMm": "Y",
|
||||
"library.apiError": "Spoolman API에 연결할 수 없습니다. 백엔드가 실행 중인가요?",
|
||||
"library.collapseGroup": "이 스풀 숨기기",
|
||||
"library.emptyBody": "첫 스풀을 추가하고 필라멘트 관리를 시작하세요.",
|
||||
"library.emptyFiltered": "현재 필터와 일치하는 {{unit}}이 없습니다.",
|
||||
"library.emptyTitle": "아직 스풀이 없습니다",
|
||||
"library.expandGroup": "이 스풀 보기",
|
||||
"library.filterBy": "필터 기준",
|
||||
"library.groupBy": "그룹",
|
||||
"library.groupNone": "없음 (평면 목록)",
|
||||
"library.groupSpools_other": "스풀 {{count}}개",
|
||||
"library.nUnused": "×{{count}} 미사용",
|
||||
"library.noLocation": "위치 없음",
|
||||
"library.noValues": "값 없음",
|
||||
"library.openGroup": "{{name}} 열기",
|
||||
"library.openManufacturer": "제조사 {{name}} 열기",
|
||||
"library.resizeList": "목록 크기 조정 (두 번 클릭하면 초기화됩니다)",
|
||||
"library.section.extra": "추가 필드",
|
||||
"library.section.filament": "필라멘트",
|
||||
"library.section.spool": "스풀",
|
||||
"library.section.vendor": "제조사",
|
||||
"library.showMore": "{{count}}개 더 보기",
|
||||
"library.sort.nozzle": "노즐 온도",
|
||||
"library.sortBy": "정렬",
|
||||
"library.unassigned": "미지정",
|
||||
"library.unitGroups": "그룹",
|
||||
"library.unitSpools": "스풀",
|
||||
"library.unused": "미사용",
|
||||
"library.unusedGroup": "{{count}}개 미사용 · 개당 {{weight}} g",
|
||||
"library.unusedGroupMixed": "{{count}}개 미사용",
|
||||
"library.unusedSub": "개당 {{weight}} g · {{location}}",
|
||||
"library.unusedSubMixed": "{{location}}",
|
||||
"library.used": "사용됨",
|
||||
"library.usedAgo": "{{time}} 전 사용",
|
||||
"loading": "로딩",
|
||||
"locations.locations": "위치",
|
||||
"locations.newLocation": "새로운 위치",
|
||||
"locations.noLocation": "위치 없음",
|
||||
"locations.noLocationsHelp": "이 페이지에서는 스풀을 위치별로 정리할 수 있습니다. 시작하려면 스풀을 추가하세요!",
|
||||
"nav.labels": "라벨",
|
||||
"nav.library": "라이브러리",
|
||||
"no": "아니오",
|
||||
"notifications.error": "오류 (상태 코드: {{statusCode}})",
|
||||
"notifications.saveSuccessful": "저장 완료!",
|
||||
"pagination.empty": "{{unit}} 없음",
|
||||
"pagination.next": "다음 페이지",
|
||||
"pagination.pageSize": "페이지 크기",
|
||||
"pagination.perPage": "{{size}}개 / 페이지",
|
||||
"pagination.prev": "이전 페이지",
|
||||
"pagination.range": "{{unit}} {{total}}개 중 {{from}}–{{to}}",
|
||||
"printing.generic.columns": "열",
|
||||
"printing.generic.customSize": "커스텀",
|
||||
"printing.generic.description": "아래 설정을 조정하여 원하는 인쇄 레이아웃을 얻으십시오. 프린터와 운영체제(OS)가 자체 여백 및 크기 조정을 적용할 수 있으므로, 완벽하게 맞출 때까지 몇 번의 시행착오가 필요할 수 있습니다. 실제 라벨에 인쇄하기 전에 일반 용지에 테스트 인쇄를 해보십시오.",
|
||||
"printing.generic.dimensions": "치수",
|
||||
"printing.generic.gridTooWide": "라벨이 용지보다 넓습니다. 열 개수나 간격, 여백을 줄이세요.",
|
||||
"printing.generic.helpMargin": "여백은 라벨 용지와 프린터에 맞게 설정해야 하며, 이를 변경하면 전체 그리드 크기에 영향을 미칩니다.",
|
||||
"printing.generic.helpPrinterMargin": "안전 영역은 프린터가 용지 가장자리에서 얼마나 가까운 위치까지 인쇄할 수 있는 지를 설정하는 것이며, 이 값을 변경해도 전체 격자에는 영향을 미치지 않습니다.",
|
||||
"printing.generic.horizontalSpacing": "수평 여백",
|
||||
"printing.generic.itemCopies": "항목 복사",
|
||||
"printing.generic.helpPrinterMargin": "안전구역은 프린터가 용지 가장자리에서 얼마나 가까운 위치까지 인쇄할 수 있는지를 설정하는 것이며, 이 값을 변경해도 전체 격자에는 영향을 미치지 않습니다.",
|
||||
"printing.generic.horizontalSpacing": "수평 간격",
|
||||
"printing.generic.itemCopies": "항목 복사본 수",
|
||||
"printing.generic.marginBottom": "아래쪽 여백",
|
||||
"printing.generic.marginLeft": "왼쪽 여백",
|
||||
"printing.generic.marginRight": "오른쪽 여백",
|
||||
@@ -63,28 +387,60 @@
|
||||
"printing.generic.printerMarginTop": "안전구역 위쪽",
|
||||
"printing.generic.saveAsImage": "그림으로 저장",
|
||||
"printing.generic.skipItems": "항목 건너뛰기",
|
||||
"printing.generic.verticalSpacing": "수직 여백",
|
||||
"printing.qrcode.button": "프린트 라벨",
|
||||
"printing.generic.verticalSpacing": "수직 간격",
|
||||
"printing.qrcode.button": "라벨 인쇄",
|
||||
"printing.qrcode.customUrl.caveat": "사용자 지정 URL은 Spoolman에서 다시 스캔되지 않습니다. 인쇄한 QR 코드를 외부 앱이나 다른 호스트로 연결할 때 사용하세요.",
|
||||
"printing.qrcode.customUrl.hint": "Placeholder를 사용하면 원하는 위치에 스풀 id를 넣을 수 있습니다",
|
||||
"printing.qrcode.customUrl.label": "사용자 지정 URL 템플릿",
|
||||
"printing.qrcode.useHTTPUrl.label": "QR 코드 링크",
|
||||
"printing.qrcode.useHTTPUrl.options.custom": "사용자 지정 URL",
|
||||
"printing.qrcode.useHTTPUrl.options.default": "기본값",
|
||||
"printing.qrcode.useHTTPUrl.options.url": "URL",
|
||||
"printing.qrcode.useHTTPUrl.preview": "미리보기:",
|
||||
"printing.qrcode.useHTTPUrl.tooltip": "Spoolman의 스캐닝 기능(기본값)에서 스캔 한 경우에만 작동하는 독점 링크를 사용합니다. URL은 설정에 지정된 기본 URL을 사용하거나 설정되지 않은 경우 현재 페이지 URL을 사용합니다.",
|
||||
"printing.spoolSelect.selectedTotal_other": "{{count}} 스풀 선택됨",
|
||||
"scanner.description": "스풀맨 QR 코드를 스캔하여 스풀에 대한 세부 정보를 확인하세요.",
|
||||
"printing.qrcode.useHTTPUrl.tooltip": "기본값은 Spoolman 자체 스캐너만 읽을 수 있는 Spoolman 전용 코드를 생성합니다. URL은 어떤 스캐너로도 열 수 있는 일반 웹 링크를 생성하며, 설정의 기본 URL을 사용하고 값이 없으면 이 사이트 주소를 사용합니다.",
|
||||
"printing.spoolSelect.selectedTotal_other": "스풀 {{count}}개 선택됨",
|
||||
"scanner.description": "Spoolman QR 코드를 스캔하여 스풀에 대한 세부 정보를 확인하세요.",
|
||||
"scanner.error.inUse": "다른 애플리케이션이 이미 카메라를 사용 중입니다.",
|
||||
"scanner.error.insecureContext": "해당 페이지는 HTTPS를 통해 제공되지 않습니다.",
|
||||
"scanner.error.notAllowed": "카메라 접근 권한을 허용하지 않았습니다.",
|
||||
"scanner.error.notFound": "카메라를 찾을 수 없습니다.",
|
||||
"scanner.error.streamApiNotSupported": "브라우저가 MediaStream API를 지원하지 않습니다.",
|
||||
"scanner.error.unknown": "알수 없는 오류 발생. {{error}}",
|
||||
"scanner.error.unknown": "알 수 없는 오류가 발생했습니다. ({{error}})",
|
||||
"scanner.starting": "카메라 시작 중...",
|
||||
"scanner.title": "QR 코드 스캐너",
|
||||
"search.colorHint": "색상 이름은 영어로 입력해야 합니다.",
|
||||
"search.moreSpools": "+{{count}}개 더",
|
||||
"search.noResults": "검색 결과가 없습니다",
|
||||
"search.searching": "검색 중...",
|
||||
"search.section.filaments": "필라멘트",
|
||||
"search.section.spools": "스풀",
|
||||
"search.section.vendors": "제조사",
|
||||
"search.threshold": "색상 일치도",
|
||||
"search.unknownFilament": "알 수 없는 필라멘트",
|
||||
"settings.appearance.tab": "화면",
|
||||
"settings.appearance.theme.dark": "다크",
|
||||
"settings.appearance.theme.desc": "색상 테마 (이 브라우저에만 적용됩니다)",
|
||||
"settings.appearance.theme.label": "테마",
|
||||
"settings.appearance.theme.light": "라이트",
|
||||
"settings.appearance.theme.system": "시스템",
|
||||
"settings.extraFields.addChoice": "선택 항목 추가...",
|
||||
"settings.extraFields.addChoicesFirst": "선택 항목을 먼저 추가하세요",
|
||||
"settings.extraFields.addEntityField": "{{entity}} 필드 추가",
|
||||
"settings.extraFields.booleanFalse": "아니오",
|
||||
"settings.extraFields.booleanTrue": "네",
|
||||
"settings.extraFields.deleteConfirm": "{{name}} 필드 삭제?",
|
||||
"settings.extraFields.description.intro": "여기에서 엔터티에 추가 사용자 정의 필드를 추가할 수 있습니다.",
|
||||
"settings.extraFields.deleteConfirm": "{{entity}}의 {{name}} 필드를 삭제하시겠습니까?",
|
||||
"settings.extraFields.description.constraints": "필드를 추가한 후에는 키나 유형을 변경할 수 없으며, 선택형 필드의 경우 선택 항목을 제거하거나 다중 선택 상태를 변경할 수 없습니다. 필드를 삭제하면 모든 엔티티의 관련 데이터가 삭제됩니다.",
|
||||
"settings.extraFields.description.intro": "여기에서 엔터티에 추가 사용자 정의 필드를 추가할 수 있습니다.",
|
||||
"settings.extraFields.description.keyUsage": "키 값은 다른 프로그램이 데이터를 읽고 쓰는 방식이므로, 사용자 정의 필드가 타사 프로그램과 연동될 예정이라면 반드시 올바르게 설정해야 합니다. 기본값은 새 항목에만 적용됩니다.",
|
||||
"settings.extraFields.description.tableViews": "추가 필드는 테이블 보기에서 정렬하거나 필터링할 수 없습니다.",
|
||||
"settings.extraFields.editorEdit": "{{entity}} 필드 수정",
|
||||
"settings.extraFields.editorNew": "새 {{entity}} 필드",
|
||||
"settings.extraFields.errors.choiceNeeded": "선택형 필드에는 선택 항목이 최소 하나 필요합니다.",
|
||||
"settings.extraFields.errors.choicesRemoved": "기존 선택 항목은 제거할 수 없습니다: {{choices}}.",
|
||||
"settings.extraFields.errors.deleteFailed": "필드 삭제에 실패했습니다.",
|
||||
"settings.extraFields.errors.keyFormat": "키는 영문 소문자, 숫자, 밑줄만 사용할 수 있습니다.",
|
||||
"settings.extraFields.errors.nameRequired": "이름은 필수입니다.",
|
||||
"settings.extraFields.errors.saveFailed": "필드 저장에 실패했습니다.",
|
||||
"settings.extraFields.fieldType.boolean": "Boolean",
|
||||
"settings.extraFields.fieldType.choice": "선택",
|
||||
"settings.extraFields.fieldType.datetime": "날짜 및 시간",
|
||||
@@ -93,7 +449,13 @@
|
||||
"settings.extraFields.fieldType.integer": "정수",
|
||||
"settings.extraFields.fieldType.integerRange": "정수 범위",
|
||||
"settings.extraFields.fieldType.text": "텍스트",
|
||||
"settings.extraFields.max": "최대",
|
||||
"settings.extraFields.min": "최소",
|
||||
"settings.extraFields.multiSuffix": " · 다중",
|
||||
"settings.extraFields.multiple": "다중 선택",
|
||||
"settings.extraFields.namePlaceholder": "표시 이름",
|
||||
"settings.extraFields.nonUniqueKeyError": "키는 고유해야 합니다.",
|
||||
"settings.extraFields.none": "{{entity}}에 정의된 추가 필드가 아직 없습니다.",
|
||||
"settings.extraFields.params.choices": "선택",
|
||||
"settings.extraFields.params.defaultValue": "기본값",
|
||||
"settings.extraFields.params.fieldType": "유형",
|
||||
@@ -101,14 +463,22 @@
|
||||
"settings.extraFields.params.name": "이름",
|
||||
"settings.extraFields.params.order": "순번",
|
||||
"settings.extraFields.params.unit": "단위",
|
||||
"settings.extraFields.reorderChoice": "드래그하거나 화살표 키를 사용해 이 선택 항목의 순서를 바꿉니다.",
|
||||
"settings.extraFields.saveField": "필드 저장",
|
||||
"settings.extraFields.tab": "추가 필드",
|
||||
"settings.general.baseUrl.label": "기본 URL",
|
||||
"settings.general.baseUrl.tooltip": "QR 코드와 같은 기능을 생성할 때 사용할 기본 URL.",
|
||||
"settings.general.currency.desc": "가격에 사용할 세 글자 ISO 코드입니다 (예: WON, USD)",
|
||||
"settings.general.currency.label": "통화",
|
||||
"settings.general.roundPrices.label": "반올림 가격",
|
||||
"settings.general.roundPrices.tooltip": "가격을 가장 가까운 정수로 반올림 합니다.",
|
||||
"settings.general.tab": "일반",
|
||||
"settings.header": "설정",
|
||||
"settings.language.desc": "인터페이스 언어 (이 브라우저에만 적용됩니다)",
|
||||
"settings.language.label": "언어",
|
||||
"settings.library.lowThreshold.desc": "이 무게 이하인 스풀은 빨간색으로 표시됩니다 (이 브라우저에만 적용됩니다)",
|
||||
"settings.library.lowThreshold.label": "재고 부족 기준",
|
||||
"settings.library.tab": "라이브러리 동작",
|
||||
"spool.fields.archived": "보관됨",
|
||||
"spool.fields.comment": "주석",
|
||||
"spool.fields.filament": "필라멘트",
|
||||
@@ -122,17 +492,30 @@
|
||||
"spool.fields.price": "가격",
|
||||
"spool.fields.registered": "등록됨",
|
||||
"spool.fields.remainingWeight": "잔여 중량",
|
||||
"spool.fields.spoolWeight": "빈 스풀 무게",
|
||||
"spool.fields.usedWeight": "사용 중량",
|
||||
"spool.fields.weight": "중량",
|
||||
"spool.fieldsHelp.location": "여러 위치에 스풀을 보관하는 경우 스풀이 위치한 곳.",
|
||||
"spool.fieldsHelp.lotNr": "제조업체 lot 번호. 여러 개의 스풀을 사용할 경우 인쇄물의 색상이 일관되도록 보장하는 데 사용할 수 있습니다.",
|
||||
"spool.fieldsHelp.measuredWeight": "필라멘트와 스풀의 무게는 얼마입니까.",
|
||||
"spool.fieldsHelp.price": "전체 스풀 가격. 설정되지 않은 경우 필라멘트 가격이 대신 적용됩니다.",
|
||||
"spool.fieldsHelp.remainingWeight": "스풀에 남은 필라멘트 양은 얼마입니까. 새 스풀의 경우 스풀 무게와 일치해야 합니다.",
|
||||
"spool.fieldsHelp.spoolWeight": "이 스풀이 비어 있을 때의 무게입니다. 비워 두면 필라멘트에 설정된 스풀 중량을 따르며, 다시 감은 롤이거나 종이 스풀을 플라스틱 스풀로 바꾼 경우처럼 이 스풀만 다를 때 값을 입력하세요. 측정 무게로 조정할 때 측정값에서 빼는 값이므로, 잘못 입력하면 남은 양이 실제와 달라집니다.",
|
||||
"spool.fieldsHelp.usedWeight": "스풀에서 사용된 필라멘트 양입니다. 새 스풀은 사용량이 0g이어야 합니다.",
|
||||
"spool.fieldsHelp.weight": "이 스풀이 가득 찼을 때 감겨 있던 필라멘트 양입니다(스풀 자체를 뺀 순중량). 비워 두면 필라멘트에 설정된 중량을 따르며, 일부만 남은 롤이거나 같은 필라멘트를 더 큰 스풀로 구입한 경우처럼 이 스풀만 다를 때 값을 입력하세요.",
|
||||
"spool.form.measurementType.length": "길이",
|
||||
"spool.form.measurementType.weight": "중량",
|
||||
"spool.spool": "스풀",
|
||||
"unknown": "모름",
|
||||
"topbar.addSpools": "스풀 추가",
|
||||
"topbar.searchPlaceholder": "검색 — \"red\"나 \"pla\"로 찾아보세요",
|
||||
"unknown": "알 수 없음",
|
||||
"validation.hexDigits": "16진수 6자리 또는 8자리로 입력하세요",
|
||||
"validation.maxChars": "최대 {{max}}자까지 입력할 수 있습니다",
|
||||
"validation.mustBeGt": "{{value}}보다 커야 합니다",
|
||||
"validation.mustBeMax": "{{value}} 이하여야 합니다",
|
||||
"validation.mustBeMin": "{{value}} 이상이어야 합니다",
|
||||
"validation.mustBeNumber": "숫자여야 합니다",
|
||||
"validation.required": "필수 항목입니다",
|
||||
"vendor.fields.comment": "주석",
|
||||
"vendor.fields.emptySpoolWeight": "빈 스풀 중량",
|
||||
"vendor.fields.externalId": "외부 ID",
|
||||
|
||||
@@ -1,17 +1,90 @@
|
||||
{
|
||||
"add.addAndNew": "",
|
||||
"add.adding": "Pridedama...",
|
||||
"add.advanced": "",
|
||||
"add.advancedNote": "tankis, skersmuo, temperatūros (automatiškai užpildoma pagal medžiagą)",
|
||||
"add.change": "Keisti",
|
||||
"add.count": "",
|
||||
"add.createNew": "",
|
||||
"add.createNewSub": "nėra tavo kataloge ar {{name}}",
|
||||
"add.dbUnavailable": "{{name}} nepasiekiams",
|
||||
"add.duplicate": "dvigubinti",
|
||||
"add.duplicateNote": "Spesifikacijos, gamintojas ir kainos buvo per kopijuotos. Pervardinkite ir suteikite spalvą.",
|
||||
"add.duplicateRename": "Pavadinimas nepakeistas — pervardykite, kad galėtumėte atskirti.",
|
||||
"add.duplicateTitle": "",
|
||||
"add.filamentNamePlaceholder": "",
|
||||
"add.fill.full": "Pilnas",
|
||||
"add.fillLevel": "",
|
||||
"add.importNote": "",
|
||||
"add.inCatalog": "",
|
||||
"add.locationHint": "Kur fiziškai laikote ritę – lentynoje, dėžėje ar ant spausdintuvo. Palikite lauką tuščią, jei visas jas laikote vienoje vietoje.",
|
||||
"add.locationPlaceholder": "pvz. Lentyna A, Džiovinimo dėžė 2, Spausdintuvas 1",
|
||||
"add.manufacturerPlaceholder": "pvz. Polymaker",
|
||||
"add.nameHint": "",
|
||||
"add.newFilament": "",
|
||||
"add.newFilamentTitle": "",
|
||||
"add.noCatalog": "",
|
||||
"add.noManufacturer": "Trūksta gamintojo",
|
||||
"add.pickColor": "Pasirinkite spalvą",
|
||||
"add.searchPlaceholder": "Ieškokite savo kataloge ir {{name}}...",
|
||||
"add.searching": "Ieškoma...",
|
||||
"add.spoolWeightPreset.cardboard": "",
|
||||
"add.spoolWeightPreset.plastic": "",
|
||||
"add.spoolWeightPresetsLead": "",
|
||||
"add.step2": "Žingsnis 2 · ritės duomenys",
|
||||
"add.typeToSearchAll": "Rašykite, norėdami ieškoti tarp tūkstančių gijų",
|
||||
"add.typeToSearchMatches": "Rašykite – atitikmenų nerasta",
|
||||
"add.useExisting": "Naudoti esamą",
|
||||
"add.vendorHint.existing": "Naudoti esamą gamintoją „{{name}}“",
|
||||
"add.vendorHint.new": "Naujas gamintojas „{{name}}“ bus sukurtas",
|
||||
"add.vendorHint.optional": "Nebūtina – palikite tuščią, jei gamintojo nėra",
|
||||
"add.yourCatalog": "Jūsų katalogas",
|
||||
"buttons.archive": "Archyvas",
|
||||
"buttons.cancel": "Atšaukti",
|
||||
"buttons.clear": "Išvalyti",
|
||||
"buttons.close": "Uždaryti",
|
||||
"buttons.delete": "Šalinti",
|
||||
"buttons.edit": "Redaguoti",
|
||||
"buttons.filter": "Filtras",
|
||||
"buttons.save": "Išsaugoti",
|
||||
"buttons.showArchived": "Rodyti archyvuotus",
|
||||
"buttons.unArchive": "Išarchyvuoti",
|
||||
"common.decrement": "",
|
||||
"common.increment": "",
|
||||
"common.remove": "Panaikinti",
|
||||
"common.search": "Ieškoti",
|
||||
"dashboard.addFieldHint": "Nustatymuose prie ritinių pridėkite teksto arba pasirinkimo lauką, kad pagal jį taip pat būtų galima grupuoti",
|
||||
"dashboard.dashboard": "",
|
||||
"dashboard.deleteGroup": "Ištrinti grupę",
|
||||
"dashboard.dragHint": "Nutempkite ritę prie kitos kortelės, kad pakeistumėte jos {{field}}, arba ant kortelės, kad pakeistumėte tvarką",
|
||||
"dashboard.dropHere": "Čia dėkite rites",
|
||||
"dashboard.emptyHelp": "",
|
||||
"dashboard.errorEmptyName": "Pavadinimo laukas negali būti tuščias",
|
||||
"dashboard.errorExists": "Tokio pavadinimo grupė jau egzistuoja",
|
||||
"dashboard.errorRename": "Nepavyko pervardyti grupės",
|
||||
"dashboard.lastUsed": "Paskutinį kartą naudota prieš {{time}}",
|
||||
"dashboard.newGroup": "Nauja grupė",
|
||||
"dashboard.newGroupName": "Nauja grupė {{n}}",
|
||||
"dashboard.reorderGroup": "Temkite, kad perrūšiuotumėte grupes",
|
||||
"dashboard.unassigned": "Nepriskita",
|
||||
"datetime.done": "Baigta",
|
||||
"datetime.hour": "Valanda",
|
||||
"datetime.minute": "Minutė",
|
||||
"datetime.nextMonth": "Kitas mėnuo",
|
||||
"datetime.now": "Dabar",
|
||||
"datetime.pick": "Pasirinkite datą ir laiką",
|
||||
"datetime.prevMonth": "Praeitas mėnuo",
|
||||
"datetime.time": "Laikas",
|
||||
"documentTitle.dashboard.list": "",
|
||||
"documentTitle.labels.list": "Etiketės | Spoolman",
|
||||
"documentTitle.library.list": "",
|
||||
"documentTitle.locations.list": "Vieta | Spoolman",
|
||||
"documentTitle.settings.list": "",
|
||||
"filament.fields.addColor": "Pridėti spalvą",
|
||||
"filament.fields.articleNumber": "Gaminio numeris",
|
||||
"filament.fields.coaxial": "Koekstruduotas",
|
||||
"filament.fields.colorHex": "Spalva",
|
||||
"filament.fields.colorType": "Spalvos tipas",
|
||||
"filament.fields.comment": "Komentaras",
|
||||
"filament.fields.density": "Tankis",
|
||||
"filament.fields.diameter": "Skersmuo",
|
||||
@@ -23,6 +96,7 @@
|
||||
"filament.fields.name": "Pavadinimas",
|
||||
"filament.fields.price": "Kaina",
|
||||
"filament.fields.registered": "Registruota",
|
||||
"filament.fields.removeColor": "Panaikinti spalvą",
|
||||
"filament.fields.settingsBedTemp": "Pado temperatūra",
|
||||
"filament.fields.settingsExtruderTemp": "Ekstruderio temperatūra",
|
||||
"filament.fields.singleColor": "Viena",
|
||||
@@ -30,24 +104,214 @@
|
||||
"filament.fields.vendor": "Gamintojas",
|
||||
"filament.fields.weight": "Svoris",
|
||||
"filament.fieldsHelp.articleNumber": "Pvz. EAN, UPC, ir tt.",
|
||||
"filament.fieldsHelp.multiColorDirection": "Gijos turėti kelias spalvas dviem būdais: arba dėl koekstruzijos, kaip dviejų spalvų gijos su nuosekliomis daugiaspalvėmis spalvomis, arba dėl išilginių spalvų pokyčių, kaip gradientinės gijos, kurios keičia spalvas išilgai ritės.",
|
||||
"filament.fieldsHelp.spoolWeight": "Tuščios ritės svoris. Naudojamas išmatuotam ritės svoriui nustatyti.",
|
||||
"filament.fieldsHelp.multiColorDirection": "Gijos gali turėti kelias spalvas dviem būdais: arba dėl koekstruzijos, kaip dviejų spalvų gijos su nuosekliomis daugiaspalvėmis spalvomis, arba dėl išilginių spalvų pokyčių, kaip gradientinės gijos, kurios keičia spalvas išilgai ritės.",
|
||||
"filament.fieldsHelp.spoolWeight": "Tuščios ritės svoris. Naudojamas išmatuotam ritės svoriui nustatyti. Nesi tikras? Kartoninės ritės dažniausiai sveria 130 – 150 g. ir plastikinės 180 – 250 g, — tiksliam svoriui nustatyti pasverkite ritę jai pasibaigus.",
|
||||
"filament.fieldsHelp.weight": "Pilnos ritės gijos svoris (grynasis svoris). Į šį skaičių neturėtų būti įtrauktas pačios ritės svoris, tik gijos svoris. Tai paprastai nurodoma ant pakuotės.",
|
||||
"filament.filament": "Gijos",
|
||||
"footer.documentation": "",
|
||||
"footer.reportIssue": "Praneškite apie problemą",
|
||||
"help.help": "Pagalba",
|
||||
"inspector.addSpoolsOfThis": "",
|
||||
"inspector.adjustFailed": "",
|
||||
"inspector.adjustHelp": "",
|
||||
"inspector.adjustWeight": "",
|
||||
"inspector.apply": "",
|
||||
"inspector.applying": "",
|
||||
"inspector.colorHex": "",
|
||||
"inspector.consumeAmount": "",
|
||||
"inspector.delete.deleting": "",
|
||||
"inspector.delete.errorGone": "",
|
||||
"inspector.delete.errorSpoolsExist": "",
|
||||
"inspector.delete.errorUnknown": "",
|
||||
"inspector.delete.filament": "",
|
||||
"inspector.delete.filamentBlockedHint": "",
|
||||
"inspector.delete.filamentBlockedTitle": "",
|
||||
"inspector.delete.filamentBody": "",
|
||||
"inspector.delete.filamentDone": "",
|
||||
"inspector.delete.filamentTitle": "",
|
||||
"inspector.delete.spool": "",
|
||||
"inspector.delete.spoolBody": "",
|
||||
"inspector.delete.spoolDone": "",
|
||||
"inspector.delete.spoolRemaining": "",
|
||||
"inspector.delete.spoolTitle": "",
|
||||
"inspector.delete.vendor": "",
|
||||
"inspector.delete.vendorBody": "",
|
||||
"inspector.delete.vendorDone": "",
|
||||
"inspector.delete.vendorTitle": "",
|
||||
"inspector.duplicateFilament": "",
|
||||
"inspector.empty": "",
|
||||
"inspector.enterValidLength": "",
|
||||
"inspector.enterValidWeight": "",
|
||||
"inspector.loading": "",
|
||||
"inspector.manageExtraFields": "",
|
||||
"inspector.measuredHelp": "",
|
||||
"inspector.multi": "",
|
||||
"inspector.newGross": "",
|
||||
"inspector.noExtraFields": "",
|
||||
"inspector.notFound": "",
|
||||
"inspector.ofRemaining": "",
|
||||
"inspector.openFilament": "",
|
||||
"inspector.openLink": "",
|
||||
"inspector.openManufacturer": "",
|
||||
"inspector.specs": "",
|
||||
"inspector.spoolsCount": "",
|
||||
"inspector.spoolsTotalRemaining": "",
|
||||
"inspector.used": "",
|
||||
"kofi": "Paremk mane Ko-fi",
|
||||
"labels.addHead": "",
|
||||
"labels.addQr": "",
|
||||
"labels.addRect": "",
|
||||
"labels.addSwatch": "",
|
||||
"labels.addText": "",
|
||||
"labels.align": "",
|
||||
"labels.alignCenter": "",
|
||||
"labels.alignLeft": "",
|
||||
"labels.alignRight": "",
|
||||
"labels.blank": "",
|
||||
"labels.bold": "",
|
||||
"labels.canvasHint": "",
|
||||
"labels.centerLogo": "",
|
||||
"labels.chooseField": "",
|
||||
"labels.clearFill": "",
|
||||
"labels.copies": "",
|
||||
"labels.cornerRadiusMm": "",
|
||||
"labels.createFirst": "",
|
||||
"labels.cutGuides": "",
|
||||
"labels.deleteConfirm": "",
|
||||
"labels.deleteElement": "",
|
||||
"labels.designName": "",
|
||||
"labels.designerDesc": "",
|
||||
"labels.designerTitle": "",
|
||||
"labels.dpi": "",
|
||||
"labels.dpiHint": "",
|
||||
"labels.duplicate": "",
|
||||
"labels.fields.bedTemp": "",
|
||||
"labels.fields.diameterMm": "",
|
||||
"labels.fields.groupVendor": "",
|
||||
"labels.fields.initialG": "",
|
||||
"labels.fields.netWeightG": "",
|
||||
"labels.fields.remainingG": "",
|
||||
"labels.fill": "",
|
||||
"labels.fitWidth": "",
|
||||
"labels.fitWidthHint": "",
|
||||
"labels.fontMm": "",
|
||||
"labels.gridInfo": "",
|
||||
"labels.hMm": "",
|
||||
"labels.heightMm": "",
|
||||
"labels.hintNowrap": "",
|
||||
"labels.hintSwatch": "",
|
||||
"labels.hintWrap": "",
|
||||
"labels.imageDesc": "",
|
||||
"labels.imageZipNote": "",
|
||||
"labels.insertField": "",
|
||||
"labels.kind.qr": "",
|
||||
"labels.kind.rect": "",
|
||||
"labels.kind.swatch": "",
|
||||
"labels.kind.text": "",
|
||||
"labels.labelSize": "",
|
||||
"labels.labelType": "",
|
||||
"labels.layout": "",
|
||||
"labels.modeImage": "",
|
||||
"labels.modeLabel": "",
|
||||
"labels.modeSheet": "",
|
||||
"labels.new": "",
|
||||
"labels.newText": "",
|
||||
"labels.noDesignsOption": "",
|
||||
"labels.noFilaments": "",
|
||||
"labels.noSpools": "",
|
||||
"labels.onePerLabel": "",
|
||||
"labels.preparing": "",
|
||||
"labels.preview": "",
|
||||
"labels.previewWith": "",
|
||||
"labels.radiusMm": "",
|
||||
"labels.sampleData": "",
|
||||
"labels.saved": "",
|
||||
"labels.saving": "",
|
||||
"labels.searchFilaments": "",
|
||||
"labels.searchSpools": "",
|
||||
"labels.selectAllShort": "",
|
||||
"labels.selectAtLeastOne": "",
|
||||
"labels.selectAtLeastOneFilament": "",
|
||||
"labels.selectDesign": "",
|
||||
"labels.selectElement": "",
|
||||
"labels.selectNoneShort": "",
|
||||
"labels.selectRecentHint": "",
|
||||
"labels.selectRecentShort": "",
|
||||
"labels.showingFilament": "",
|
||||
"labels.showingReal": "",
|
||||
"labels.showingSpool": "",
|
||||
"labels.showingTags": "",
|
||||
"labels.sizeMm": "",
|
||||
"labels.skipHint": "",
|
||||
"labels.sortHint": "",
|
||||
"labels.sortId": "",
|
||||
"labels.sortNewest": "",
|
||||
"labels.stroke": "",
|
||||
"labels.strokeMm": "",
|
||||
"labels.tabDesign": "",
|
||||
"labels.tabPrint": "",
|
||||
"labels.textTemplate": "",
|
||||
"labels.typeFilament": "",
|
||||
"labels.typeHint": "",
|
||||
"labels.typeSpool": "",
|
||||
"labels.unknownFilament": "",
|
||||
"labels.wMm": "",
|
||||
"labels.widthMm": "",
|
||||
"labels.wrapText": "",
|
||||
"labels.xMm": "",
|
||||
"labels.yMm": "",
|
||||
"library.apiError": "",
|
||||
"library.collapseGroup": "",
|
||||
"library.emptyBody": "",
|
||||
"library.emptyFiltered": "",
|
||||
"library.emptyTitle": "",
|
||||
"library.expandGroup": "",
|
||||
"library.filterBy": "",
|
||||
"library.groupBy": "",
|
||||
"library.groupNone": "",
|
||||
"library.nUnused": "",
|
||||
"library.noLocation": "",
|
||||
"library.noValues": "",
|
||||
"library.openGroup": "",
|
||||
"library.openManufacturer": "",
|
||||
"library.section.extra": "",
|
||||
"library.section.filament": "",
|
||||
"library.section.spool": "",
|
||||
"library.section.vendor": "",
|
||||
"library.showMore": "",
|
||||
"library.sort.nozzle": "",
|
||||
"library.sortBy": "",
|
||||
"library.unassigned": "",
|
||||
"library.unitGroups": "",
|
||||
"library.unitSpools": "",
|
||||
"library.unused": "",
|
||||
"library.unusedGroup": "",
|
||||
"library.unusedGroupMixed": "",
|
||||
"library.unusedSub": "",
|
||||
"library.unusedSubMixed": "",
|
||||
"library.used": "",
|
||||
"library.usedAgo": "",
|
||||
"loading": "Kraunasi",
|
||||
"locations.locations": "Vietos",
|
||||
"locations.newLocation": "Nauja vieta",
|
||||
"locations.noLocation": "Be vietos",
|
||||
"locations.noLocationsHelp": "Šiame puslapyje galite tvarkyti rites pagal vietas, pridėkite keletą ričių, kad pradėtumėte!",
|
||||
"nav.labels": "",
|
||||
"nav.library": "",
|
||||
"no": "Ne",
|
||||
"notifications.error": "Klaida (kodas: {{statusCode}})",
|
||||
"notifications.saveSuccessful": "Įrašytaa sėkmingai!",
|
||||
"pagination.empty": "",
|
||||
"pagination.next": "",
|
||||
"pagination.pageSize": "",
|
||||
"pagination.perPage": "",
|
||||
"pagination.prev": "",
|
||||
"pagination.range": "",
|
||||
"printing.generic.columns": "Stulpeliai",
|
||||
"printing.generic.customSize": "Tinkintas",
|
||||
"printing.generic.description": "Norėdami gauti norimą spausdinimo maketą, pakoreguokite toliau pateiktus nustatymus. Atminkite, kad spausdintuvai ir jūsų operacinė sistema gali taikyti savo paraštes ir mastelį, todėl gali tekti atlikti bandymus ir klaidas, kol viskas bus teisinga. Prieš spausdindami ant etikečių, išbandykite ant įprasto popieriaus lapo.",
|
||||
"printing.generic.dimensions": "Matmenys",
|
||||
"printing.generic.gridTooWide": "",
|
||||
"printing.generic.helpMargin": "Paraštės turėtų būti sukonfigūruotos taip, kad atitiktų jūsų etikečių popierių ir spausdintuvą, nes jų keitimas turės įtakos viso tinklelio dydžiui.",
|
||||
"printing.generic.helpPrinterMargin": "Saugios zonos nustatymas turėtų atitikti spausdinimo atstumą nuo popieriaus krašto. Šios zonos keitimas neturės įtakos visam tinkleliui.",
|
||||
"printing.generic.horizontalSpacing": "Horizontalūs tarpai",
|
||||
@@ -65,7 +329,11 @@
|
||||
"printing.generic.skipItems": "Praleisti elementus",
|
||||
"printing.generic.verticalSpacing": "Vertikalūs tarpai",
|
||||
"printing.qrcode.button": "Spausdinti etiketes",
|
||||
"printing.qrcode.customUrl.caveat": "",
|
||||
"printing.qrcode.customUrl.hint": "",
|
||||
"printing.qrcode.customUrl.label": "",
|
||||
"printing.qrcode.useHTTPUrl.label": "QR kodo nuoroda",
|
||||
"printing.qrcode.useHTTPUrl.options.custom": "",
|
||||
"printing.qrcode.useHTTPUrl.options.default": "Numatytasis",
|
||||
"printing.qrcode.useHTTPUrl.options.url": "URL",
|
||||
"printing.qrcode.useHTTPUrl.preview": "Peržiūra:",
|
||||
@@ -74,19 +342,46 @@
|
||||
"printing.spoolSelect.selectedTotal_one": "{{count}} ritė pasirinkta",
|
||||
"printing.spoolSelect.selectedTotal_other": "{{count}} ričių pasirinkta",
|
||||
"scanner.description": "Nuskaitykite Spoolman QR kodą, kad peržiūrėtumėte išsamią informaciją apie ritę.",
|
||||
"scanner.error.inUse": "",
|
||||
"scanner.error.insecureContext": "Puslapis neperduodamas per HTTPS.",
|
||||
"scanner.error.notAllowed": "Jūs nesuteikėte leidimo pasiekti kameros.",
|
||||
"scanner.error.notFound": "Nerasta jokios kameros.",
|
||||
"scanner.error.streamApiNotSupported": "Naršyklė nepalaiko „MediaStream“ API.",
|
||||
"scanner.error.unknown": "Įvyko nežinoma klaida. ({{error}})",
|
||||
"scanner.starting": "",
|
||||
"scanner.title": "QR kodo skaitytuvas",
|
||||
"search.colorHint": "",
|
||||
"search.noResults": "",
|
||||
"search.searching": "",
|
||||
"search.section.filaments": "",
|
||||
"search.section.spools": "",
|
||||
"search.section.vendors": "",
|
||||
"search.threshold": "",
|
||||
"search.unknownFilament": "",
|
||||
"settings.appearance.tab": "",
|
||||
"settings.appearance.theme.dark": "",
|
||||
"settings.appearance.theme.desc": "",
|
||||
"settings.appearance.theme.label": "",
|
||||
"settings.appearance.theme.light": "",
|
||||
"settings.appearance.theme.system": "",
|
||||
"settings.extraFields.addChoice": "",
|
||||
"settings.extraFields.addChoicesFirst": "",
|
||||
"settings.extraFields.addEntityField": "",
|
||||
"settings.extraFields.booleanFalse": "Ne",
|
||||
"settings.extraFields.booleanTrue": "Taip",
|
||||
"settings.extraFields.deleteConfirm": "Šalinti lauką {{name}}?",
|
||||
"settings.extraFields.description.intro": "Čia galite pridėti papildomų pasirinktinių laukų prie savo objektų.",
|
||||
"settings.extraFields.description.constraints": "Pridėjus lauką, negalite keisti jo rakto ar tipo, o pasirinkimų tipo laukų negalite pašalinti pasirinkimų ar pakeisti kelių pasirinkimų būsenos. Jei pašalinsite lauką, bus ištrinti su visais objektais susiję duomenys.",
|
||||
"settings.extraFields.description.intro": "Čia galite pridėti papildomų pasirinktinių laukų prie savo objektų.",
|
||||
"settings.extraFields.description.keyUsage": "Raktas yra tai, kaip kitos programos skaito / rašo duomenis, todėl jei jūsų pasirinktinis laukas turėtų būti integruotas su trečiosios šalies programa, įsitikinkite, kad jis nustatytas teisingai. Numatytoji reikšmė taikoma tik naujiems elementams.",
|
||||
"settings.extraFields.description.tableViews": "Papildomų laukų negalima rūšiuoti ar filtruoti lentelės rodiniuose.",
|
||||
"settings.extraFields.editorEdit": "",
|
||||
"settings.extraFields.editorNew": "",
|
||||
"settings.extraFields.errors.choiceNeeded": "",
|
||||
"settings.extraFields.errors.choicesRemoved": "",
|
||||
"settings.extraFields.errors.deleteFailed": "",
|
||||
"settings.extraFields.errors.keyFormat": "",
|
||||
"settings.extraFields.errors.nameRequired": "",
|
||||
"settings.extraFields.errors.saveFailed": "",
|
||||
"settings.extraFields.fieldType.boolean": "Loginis",
|
||||
"settings.extraFields.fieldType.choice": "Pasirinkimas",
|
||||
"settings.extraFields.fieldType.datetime": "Data Laikas",
|
||||
@@ -95,7 +390,13 @@
|
||||
"settings.extraFields.fieldType.integer": "Skaičius",
|
||||
"settings.extraFields.fieldType.integerRange": "Sveiki skaičiai",
|
||||
"settings.extraFields.fieldType.text": "Tekstas",
|
||||
"settings.extraFields.max": "",
|
||||
"settings.extraFields.min": "",
|
||||
"settings.extraFields.multiSuffix": "",
|
||||
"settings.extraFields.multiple": "",
|
||||
"settings.extraFields.namePlaceholder": "",
|
||||
"settings.extraFields.nonUniqueKeyError": "Raktas turi būti unukalus.",
|
||||
"settings.extraFields.none": "",
|
||||
"settings.extraFields.params.choices": "Pasirinkimai",
|
||||
"settings.extraFields.params.defaultValue": "Numatytoji reikšmė",
|
||||
"settings.extraFields.params.fieldType": "Tipas",
|
||||
@@ -103,14 +404,21 @@
|
||||
"settings.extraFields.params.name": "Pavadinimas",
|
||||
"settings.extraFields.params.order": "Tvarka",
|
||||
"settings.extraFields.params.unit": "Vienetas",
|
||||
"settings.extraFields.saveField": "",
|
||||
"settings.extraFields.tab": "Papildomi laukai",
|
||||
"settings.general.baseUrl.label": "Bazinis URL",
|
||||
"settings.general.baseUrl.tooltip": "Bazinis URL, naudojamas generuojant tokias funkcijas kaip QR kodai.",
|
||||
"settings.general.currency.desc": "",
|
||||
"settings.general.currency.label": "Valiuta",
|
||||
"settings.general.roundPrices.label": "Apvalinti kainas",
|
||||
"settings.general.roundPrices.tooltip": "Apvalinkite kainas iki artimiausio sveikojo skaičiaus.",
|
||||
"settings.general.tab": "Pagrindiniai",
|
||||
"settings.header": "Nustatymai",
|
||||
"settings.language.desc": "",
|
||||
"settings.language.label": "",
|
||||
"settings.library.lowThreshold.desc": "",
|
||||
"settings.library.lowThreshold.label": "",
|
||||
"settings.library.tab": "",
|
||||
"spool.fields.archived": "Archyvuota",
|
||||
"spool.fields.comment": "Komentaras",
|
||||
"spool.fields.filament": "Gija",
|
||||
@@ -134,7 +442,16 @@
|
||||
"spool.form.measurementType.length": "Ilgis",
|
||||
"spool.form.measurementType.weight": "Svoris",
|
||||
"spool.spool": "Ritės",
|
||||
"topbar.addSpools": "",
|
||||
"topbar.searchPlaceholder": "",
|
||||
"unknown": "Nežinoma",
|
||||
"validation.hexDigits": "",
|
||||
"validation.maxChars": "",
|
||||
"validation.mustBeGt": "",
|
||||
"validation.mustBeMax": "",
|
||||
"validation.mustBeMin": "",
|
||||
"validation.mustBeNumber": "",
|
||||
"validation.required": "",
|
||||
"vendor.fields.comment": "Komentaras",
|
||||
"vendor.fields.emptySpoolWeight": "Tuščios ritės svoris",
|
||||
"vendor.fields.externalId": "Išorinis ID",
|
||||
|
||||
@@ -1,7 +1,455 @@
|
||||
{
|
||||
"add.addAndNew": "",
|
||||
"add.adding": "",
|
||||
"add.advanced": "",
|
||||
"add.advancedNote": "",
|
||||
"add.change": "",
|
||||
"add.count": "",
|
||||
"add.createNew": "",
|
||||
"add.createNewSub": "",
|
||||
"add.dbUnavailable": "",
|
||||
"add.duplicate": "",
|
||||
"add.duplicateNote": "",
|
||||
"add.duplicateRename": "",
|
||||
"add.duplicateTitle": "",
|
||||
"add.filamentNamePlaceholder": "",
|
||||
"add.fill.full": "",
|
||||
"add.fillLevel": "",
|
||||
"add.importNote": "",
|
||||
"add.inCatalog": "",
|
||||
"add.locationHint": "",
|
||||
"add.locationPlaceholder": "",
|
||||
"add.manufacturerPlaceholder": "",
|
||||
"add.nameHint": "",
|
||||
"add.newFilament": "",
|
||||
"add.newFilamentTitle": "",
|
||||
"add.noCatalog": "",
|
||||
"add.noManufacturer": "",
|
||||
"add.pickColor": "",
|
||||
"add.searchPlaceholder": "",
|
||||
"add.searching": "",
|
||||
"add.spoolWeightPreset.cardboard": "",
|
||||
"add.spoolWeightPreset.plastic": "",
|
||||
"add.spoolWeightPresetsLead": "",
|
||||
"add.step2": "",
|
||||
"add.typeToSearchAll": "",
|
||||
"add.typeToSearchMatches": "",
|
||||
"add.useExisting": "",
|
||||
"add.vendorHint.existing": "",
|
||||
"add.vendorHint.new": "",
|
||||
"add.vendorHint.optional": "",
|
||||
"add.yourCatalog": "",
|
||||
"buttons.archive": "",
|
||||
"buttons.cancel": "",
|
||||
"buttons.clear": "Notīrīt",
|
||||
"buttons.close": "",
|
||||
"buttons.delete": "Dzēst",
|
||||
"buttons.edit": "Rediģēt",
|
||||
"buttons.filter": "Filtrēt",
|
||||
"buttons.save": "Saglabāt"
|
||||
"buttons.save": "Saglabāt",
|
||||
"buttons.showArchived": "",
|
||||
"buttons.unArchive": "",
|
||||
"common.decrement": "",
|
||||
"common.increment": "",
|
||||
"common.remove": "",
|
||||
"common.search": "",
|
||||
"dashboard.addFieldHint": "",
|
||||
"dashboard.dashboard": "",
|
||||
"dashboard.deleteGroup": "",
|
||||
"dashboard.dragHint": "",
|
||||
"dashboard.dropHere": "",
|
||||
"dashboard.emptyHelp": "",
|
||||
"dashboard.errorEmptyName": "",
|
||||
"dashboard.errorExists": "",
|
||||
"dashboard.errorRename": "",
|
||||
"dashboard.lastUsed": "",
|
||||
"dashboard.newGroup": "",
|
||||
"dashboard.newGroupName": "",
|
||||
"dashboard.reorderGroup": "",
|
||||
"dashboard.unassigned": "",
|
||||
"datetime.done": "",
|
||||
"datetime.hour": "",
|
||||
"datetime.minute": "",
|
||||
"datetime.nextMonth": "",
|
||||
"datetime.now": "",
|
||||
"datetime.pick": "",
|
||||
"datetime.prevMonth": "",
|
||||
"datetime.time": "",
|
||||
"documentTitle.dashboard.list": "",
|
||||
"documentTitle.labels.list": "",
|
||||
"documentTitle.library.list": "",
|
||||
"documentTitle.settings.list": "",
|
||||
"filament.fields.addColor": "",
|
||||
"filament.fields.articleNumber": "",
|
||||
"filament.fields.coaxial": "",
|
||||
"filament.fields.colorHex": "",
|
||||
"filament.fields.colorType": "",
|
||||
"filament.fields.comment": "",
|
||||
"filament.fields.density": "",
|
||||
"filament.fields.diameter": "",
|
||||
"filament.fields.externalId": "",
|
||||
"filament.fields.id": "",
|
||||
"filament.fields.longitudinal": "",
|
||||
"filament.fields.material": "",
|
||||
"filament.fields.multiColor": "",
|
||||
"filament.fields.name": "",
|
||||
"filament.fields.price": "",
|
||||
"filament.fields.registered": "",
|
||||
"filament.fields.removeColor": "",
|
||||
"filament.fields.settingsBedTemp": "",
|
||||
"filament.fields.settingsExtruderTemp": "",
|
||||
"filament.fields.singleColor": "",
|
||||
"filament.fields.spoolWeight": "",
|
||||
"filament.fields.vendor": "",
|
||||
"filament.fields.weight": "",
|
||||
"filament.fieldsHelp.articleNumber": "",
|
||||
"filament.fieldsHelp.multiColorDirection": "",
|
||||
"filament.fieldsHelp.spoolWeight": "",
|
||||
"filament.fieldsHelp.weight": "",
|
||||
"filament.filament": "",
|
||||
"footer.documentation": "",
|
||||
"footer.reportIssue": "",
|
||||
"help.help": "",
|
||||
"inspector.addSpoolsOfThis": "",
|
||||
"inspector.adjustFailed": "",
|
||||
"inspector.adjustHelp": "",
|
||||
"inspector.adjustWeight": "",
|
||||
"inspector.apply": "",
|
||||
"inspector.applying": "",
|
||||
"inspector.colorHex": "",
|
||||
"inspector.consumeAmount": "",
|
||||
"inspector.delete.deleting": "",
|
||||
"inspector.delete.errorGone": "",
|
||||
"inspector.delete.errorSpoolsExist": "",
|
||||
"inspector.delete.errorUnknown": "",
|
||||
"inspector.delete.filament": "",
|
||||
"inspector.delete.filamentBlockedHint": "",
|
||||
"inspector.delete.filamentBlockedTitle": "",
|
||||
"inspector.delete.filamentBody": "",
|
||||
"inspector.delete.filamentDone": "",
|
||||
"inspector.delete.filamentTitle": "",
|
||||
"inspector.delete.spool": "",
|
||||
"inspector.delete.spoolBody": "",
|
||||
"inspector.delete.spoolDone": "",
|
||||
"inspector.delete.spoolRemaining": "",
|
||||
"inspector.delete.spoolTitle": "",
|
||||
"inspector.delete.vendor": "",
|
||||
"inspector.delete.vendorBody": "",
|
||||
"inspector.delete.vendorDone": "",
|
||||
"inspector.delete.vendorTitle": "",
|
||||
"inspector.duplicateFilament": "",
|
||||
"inspector.empty": "",
|
||||
"inspector.enterValidLength": "",
|
||||
"inspector.enterValidWeight": "",
|
||||
"inspector.loading": "",
|
||||
"inspector.manageExtraFields": "",
|
||||
"inspector.measuredHelp": "",
|
||||
"inspector.multi": "",
|
||||
"inspector.newGross": "",
|
||||
"inspector.noExtraFields": "",
|
||||
"inspector.notFound": "",
|
||||
"inspector.ofRemaining": "",
|
||||
"inspector.openFilament": "",
|
||||
"inspector.openLink": "",
|
||||
"inspector.openManufacturer": "",
|
||||
"inspector.specs": "",
|
||||
"inspector.spoolsCount": "",
|
||||
"inspector.spoolsTotalRemaining": "",
|
||||
"inspector.used": "",
|
||||
"kofi": "",
|
||||
"labels.addHead": "",
|
||||
"labels.addQr": "",
|
||||
"labels.addRect": "",
|
||||
"labels.addSwatch": "",
|
||||
"labels.addText": "",
|
||||
"labels.align": "",
|
||||
"labels.alignCenter": "",
|
||||
"labels.alignLeft": "",
|
||||
"labels.alignRight": "",
|
||||
"labels.blank": "",
|
||||
"labels.bold": "",
|
||||
"labels.canvasHint": "",
|
||||
"labels.centerLogo": "",
|
||||
"labels.chooseField": "",
|
||||
"labels.clearFill": "",
|
||||
"labels.copies": "",
|
||||
"labels.cornerRadiusMm": "",
|
||||
"labels.createFirst": "",
|
||||
"labels.cutGuides": "",
|
||||
"labels.deleteConfirm": "",
|
||||
"labels.deleteElement": "",
|
||||
"labels.designName": "",
|
||||
"labels.designerDesc": "",
|
||||
"labels.designerTitle": "",
|
||||
"labels.dpi": "",
|
||||
"labels.dpiHint": "",
|
||||
"labels.duplicate": "",
|
||||
"labels.fields.bedTemp": "",
|
||||
"labels.fields.diameterMm": "",
|
||||
"labels.fields.groupVendor": "",
|
||||
"labels.fields.initialG": "",
|
||||
"labels.fields.netWeightG": "",
|
||||
"labels.fields.remainingG": "",
|
||||
"labels.fill": "",
|
||||
"labels.fitWidth": "",
|
||||
"labels.fitWidthHint": "",
|
||||
"labels.fontMm": "",
|
||||
"labels.gridInfo": "",
|
||||
"labels.hMm": "",
|
||||
"labels.heightMm": "",
|
||||
"labels.hintNowrap": "",
|
||||
"labels.hintSwatch": "",
|
||||
"labels.hintWrap": "",
|
||||
"labels.imageDesc": "",
|
||||
"labels.imageZipNote": "",
|
||||
"labels.insertField": "",
|
||||
"labels.kind.qr": "",
|
||||
"labels.kind.rect": "",
|
||||
"labels.kind.swatch": "",
|
||||
"labels.kind.text": "",
|
||||
"labels.labelSize": "",
|
||||
"labels.labelType": "",
|
||||
"labels.layout": "",
|
||||
"labels.modeImage": "",
|
||||
"labels.modeLabel": "",
|
||||
"labels.modeSheet": "",
|
||||
"labels.new": "",
|
||||
"labels.newText": "",
|
||||
"labels.noDesignsOption": "",
|
||||
"labels.noFilaments": "",
|
||||
"labels.noSpools": "",
|
||||
"labels.onePerLabel": "",
|
||||
"labels.preparing": "",
|
||||
"labels.preview": "",
|
||||
"labels.previewWith": "",
|
||||
"labels.radiusMm": "",
|
||||
"labels.sampleData": "",
|
||||
"labels.saved": "",
|
||||
"labels.saving": "",
|
||||
"labels.searchFilaments": "",
|
||||
"labels.searchSpools": "",
|
||||
"labels.selectAllShort": "",
|
||||
"labels.selectAtLeastOne": "",
|
||||
"labels.selectAtLeastOneFilament": "",
|
||||
"labels.selectDesign": "",
|
||||
"labels.selectElement": "",
|
||||
"labels.selectNoneShort": "",
|
||||
"labels.selectRecentHint": "",
|
||||
"labels.selectRecentShort": "",
|
||||
"labels.showingFilament": "",
|
||||
"labels.showingReal": "",
|
||||
"labels.showingSpool": "",
|
||||
"labels.showingTags": "",
|
||||
"labels.sizeMm": "",
|
||||
"labels.skipHint": "",
|
||||
"labels.sortHint": "",
|
||||
"labels.sortId": "",
|
||||
"labels.sortNewest": "",
|
||||
"labels.stroke": "",
|
||||
"labels.strokeMm": "",
|
||||
"labels.tabDesign": "",
|
||||
"labels.tabPrint": "",
|
||||
"labels.textTemplate": "",
|
||||
"labels.typeFilament": "",
|
||||
"labels.typeHint": "",
|
||||
"labels.typeSpool": "",
|
||||
"labels.unknownFilament": "",
|
||||
"labels.wMm": "",
|
||||
"labels.widthMm": "",
|
||||
"labels.wrapText": "",
|
||||
"labels.xMm": "",
|
||||
"labels.yMm": "",
|
||||
"library.apiError": "",
|
||||
"library.collapseGroup": "",
|
||||
"library.emptyBody": "",
|
||||
"library.emptyFiltered": "",
|
||||
"library.emptyTitle": "",
|
||||
"library.expandGroup": "",
|
||||
"library.filterBy": "",
|
||||
"library.groupBy": "",
|
||||
"library.groupNone": "",
|
||||
"library.nUnused": "",
|
||||
"library.noLocation": "",
|
||||
"library.noValues": "",
|
||||
"library.openGroup": "",
|
||||
"library.openManufacturer": "",
|
||||
"library.section.extra": "",
|
||||
"library.section.filament": "",
|
||||
"library.section.spool": "",
|
||||
"library.section.vendor": "",
|
||||
"library.showMore": "",
|
||||
"library.sort.nozzle": "",
|
||||
"library.sortBy": "",
|
||||
"library.unassigned": "",
|
||||
"library.unitGroups": "",
|
||||
"library.unitSpools": "",
|
||||
"library.unused": "",
|
||||
"library.unusedGroup": "",
|
||||
"library.unusedGroupMixed": "",
|
||||
"library.unusedSub": "",
|
||||
"library.unusedSubMixed": "",
|
||||
"library.used": "",
|
||||
"library.usedAgo": "",
|
||||
"loading": "",
|
||||
"nav.labels": "",
|
||||
"nav.library": "",
|
||||
"no": "",
|
||||
"notifications.error": "",
|
||||
"notifications.saveSuccessful": "",
|
||||
"pagination.empty": "",
|
||||
"pagination.next": "",
|
||||
"pagination.pageSize": "",
|
||||
"pagination.perPage": "",
|
||||
"pagination.prev": "",
|
||||
"pagination.range": "",
|
||||
"printing.generic.columns": "",
|
||||
"printing.generic.customSize": "",
|
||||
"printing.generic.description": "",
|
||||
"printing.generic.dimensions": "",
|
||||
"printing.generic.gridTooWide": "",
|
||||
"printing.generic.helpMargin": "",
|
||||
"printing.generic.helpPrinterMargin": "",
|
||||
"printing.generic.horizontalSpacing": "",
|
||||
"printing.generic.itemCopies": "",
|
||||
"printing.generic.marginBottom": "",
|
||||
"printing.generic.marginLeft": "",
|
||||
"printing.generic.marginRight": "",
|
||||
"printing.generic.marginTop": "",
|
||||
"printing.generic.paperSize": "",
|
||||
"printing.generic.printerMarginBottom": "",
|
||||
"printing.generic.printerMarginLeft": "",
|
||||
"printing.generic.printerMarginRight": "",
|
||||
"printing.generic.printerMarginTop": "",
|
||||
"printing.generic.saveAsImage": "",
|
||||
"printing.generic.skipItems": "",
|
||||
"printing.generic.verticalSpacing": "",
|
||||
"printing.qrcode.button": "",
|
||||
"printing.qrcode.customUrl.caveat": "",
|
||||
"printing.qrcode.customUrl.hint": "",
|
||||
"printing.qrcode.customUrl.label": "",
|
||||
"printing.qrcode.useHTTPUrl.label": "",
|
||||
"printing.qrcode.useHTTPUrl.options.custom": "",
|
||||
"printing.qrcode.useHTTPUrl.options.default": "",
|
||||
"printing.qrcode.useHTTPUrl.options.url": "",
|
||||
"printing.qrcode.useHTTPUrl.preview": "",
|
||||
"printing.qrcode.useHTTPUrl.tooltip": "",
|
||||
"scanner.description": "",
|
||||
"scanner.error.inUse": "",
|
||||
"scanner.error.insecureContext": "",
|
||||
"scanner.error.notAllowed": "",
|
||||
"scanner.error.notFound": "",
|
||||
"scanner.error.streamApiNotSupported": "",
|
||||
"scanner.error.unknown": "",
|
||||
"scanner.starting": "",
|
||||
"scanner.title": "",
|
||||
"search.colorHint": "",
|
||||
"search.noResults": "",
|
||||
"search.searching": "",
|
||||
"search.section.filaments": "",
|
||||
"search.section.spools": "",
|
||||
"search.section.vendors": "",
|
||||
"search.threshold": "",
|
||||
"search.unknownFilament": "",
|
||||
"settings.appearance.tab": "",
|
||||
"settings.appearance.theme.dark": "",
|
||||
"settings.appearance.theme.desc": "",
|
||||
"settings.appearance.theme.label": "",
|
||||
"settings.appearance.theme.light": "",
|
||||
"settings.appearance.theme.system": "",
|
||||
"settings.extraFields.addChoice": "",
|
||||
"settings.extraFields.addChoicesFirst": "",
|
||||
"settings.extraFields.addEntityField": "",
|
||||
"settings.extraFields.booleanFalse": "",
|
||||
"settings.extraFields.booleanTrue": "",
|
||||
"settings.extraFields.deleteConfirm": "",
|
||||
"settings.extraFields.description.constraints": "",
|
||||
"settings.extraFields.description.intro": "",
|
||||
"settings.extraFields.description.keyUsage": "",
|
||||
"settings.extraFields.description.tableViews": "",
|
||||
"settings.extraFields.editorEdit": "",
|
||||
"settings.extraFields.editorNew": "",
|
||||
"settings.extraFields.errors.choiceNeeded": "",
|
||||
"settings.extraFields.errors.choicesRemoved": "",
|
||||
"settings.extraFields.errors.deleteFailed": "",
|
||||
"settings.extraFields.errors.keyFormat": "",
|
||||
"settings.extraFields.errors.nameRequired": "",
|
||||
"settings.extraFields.errors.saveFailed": "",
|
||||
"settings.extraFields.fieldType.boolean": "",
|
||||
"settings.extraFields.fieldType.choice": "",
|
||||
"settings.extraFields.fieldType.datetime": "",
|
||||
"settings.extraFields.fieldType.float": "",
|
||||
"settings.extraFields.fieldType.floatRange": "",
|
||||
"settings.extraFields.fieldType.integer": "",
|
||||
"settings.extraFields.fieldType.integerRange": "",
|
||||
"settings.extraFields.fieldType.text": "",
|
||||
"settings.extraFields.max": "",
|
||||
"settings.extraFields.min": "",
|
||||
"settings.extraFields.multiSuffix": "",
|
||||
"settings.extraFields.multiple": "",
|
||||
"settings.extraFields.namePlaceholder": "",
|
||||
"settings.extraFields.nonUniqueKeyError": "",
|
||||
"settings.extraFields.none": "",
|
||||
"settings.extraFields.params.choices": "",
|
||||
"settings.extraFields.params.defaultValue": "",
|
||||
"settings.extraFields.params.fieldType": "",
|
||||
"settings.extraFields.params.key": "",
|
||||
"settings.extraFields.params.name": "",
|
||||
"settings.extraFields.params.order": "",
|
||||
"settings.extraFields.params.unit": "",
|
||||
"settings.extraFields.saveField": "",
|
||||
"settings.extraFields.tab": "",
|
||||
"settings.general.baseUrl.label": "",
|
||||
"settings.general.baseUrl.tooltip": "",
|
||||
"settings.general.currency.desc": "",
|
||||
"settings.general.currency.label": "",
|
||||
"settings.general.roundPrices.label": "",
|
||||
"settings.general.roundPrices.tooltip": "",
|
||||
"settings.general.tab": "",
|
||||
"settings.header": "",
|
||||
"settings.language.desc": "",
|
||||
"settings.language.label": "",
|
||||
"settings.library.lowThreshold.desc": "",
|
||||
"settings.library.lowThreshold.label": "",
|
||||
"settings.library.tab": "",
|
||||
"spool.fields.archived": "",
|
||||
"spool.fields.comment": "",
|
||||
"spool.fields.filament": "",
|
||||
"spool.fields.firstUsed": "",
|
||||
"spool.fields.id": "",
|
||||
"spool.fields.lastUsed": "",
|
||||
"spool.fields.location": "",
|
||||
"spool.fields.lotNr": "",
|
||||
"spool.fields.material": "",
|
||||
"spool.fields.measuredWeight": "",
|
||||
"spool.fields.price": "",
|
||||
"spool.fields.registered": "",
|
||||
"spool.fields.remainingWeight": "",
|
||||
"spool.fields.usedWeight": "",
|
||||
"spool.fieldsHelp.location": "",
|
||||
"spool.fieldsHelp.lotNr": "",
|
||||
"spool.fieldsHelp.measuredWeight": "",
|
||||
"spool.fieldsHelp.price": "",
|
||||
"spool.fieldsHelp.remainingWeight": "",
|
||||
"spool.fieldsHelp.usedWeight": "",
|
||||
"spool.form.measurementType.length": "",
|
||||
"spool.form.measurementType.weight": "",
|
||||
"spool.spool": "",
|
||||
"topbar.addSpools": "",
|
||||
"topbar.searchPlaceholder": "",
|
||||
"unknown": "",
|
||||
"validation.hexDigits": "",
|
||||
"validation.maxChars": "",
|
||||
"validation.mustBeGt": "",
|
||||
"validation.mustBeMax": "",
|
||||
"validation.mustBeMin": "",
|
||||
"validation.mustBeNumber": "",
|
||||
"validation.required": "",
|
||||
"vendor.fields.comment": "",
|
||||
"vendor.fields.emptySpoolWeight": "",
|
||||
"vendor.fields.externalId": "",
|
||||
"vendor.fields.id": "",
|
||||
"vendor.fields.name": "",
|
||||
"vendor.fields.registered": "",
|
||||
"vendor.fieldsHelp.emptySpoolWeight": "",
|
||||
"yes": ""
|
||||
}
|
||||
@@ -1,17 +1,90 @@
|
||||
{
|
||||
"add.addAndNew": "",
|
||||
"add.adding": "",
|
||||
"add.advanced": "",
|
||||
"add.advancedNote": "",
|
||||
"add.change": "",
|
||||
"add.count": "",
|
||||
"add.createNew": "",
|
||||
"add.createNewSub": "",
|
||||
"add.dbUnavailable": "",
|
||||
"add.duplicate": "",
|
||||
"add.duplicateNote": "",
|
||||
"add.duplicateRename": "",
|
||||
"add.duplicateTitle": "",
|
||||
"add.filamentNamePlaceholder": "",
|
||||
"add.fill.full": "",
|
||||
"add.fillLevel": "",
|
||||
"add.importNote": "",
|
||||
"add.inCatalog": "",
|
||||
"add.locationHint": "",
|
||||
"add.locationPlaceholder": "",
|
||||
"add.manufacturerPlaceholder": "",
|
||||
"add.nameHint": "",
|
||||
"add.newFilament": "",
|
||||
"add.newFilamentTitle": "",
|
||||
"add.noCatalog": "",
|
||||
"add.noManufacturer": "",
|
||||
"add.pickColor": "",
|
||||
"add.searchPlaceholder": "",
|
||||
"add.searching": "",
|
||||
"add.spoolWeightPreset.cardboard": "",
|
||||
"add.spoolWeightPreset.plastic": "",
|
||||
"add.spoolWeightPresetsLead": "",
|
||||
"add.step2": "",
|
||||
"add.typeToSearchAll": "",
|
||||
"add.typeToSearchMatches": "",
|
||||
"add.useExisting": "",
|
||||
"add.vendorHint.existing": "",
|
||||
"add.vendorHint.new": "",
|
||||
"add.vendorHint.optional": "",
|
||||
"add.yourCatalog": "",
|
||||
"buttons.archive": "Arkiver",
|
||||
"buttons.cancel": "Avbryt",
|
||||
"buttons.clear": "Tøm",
|
||||
"buttons.close": "",
|
||||
"buttons.delete": "Slett",
|
||||
"buttons.edit": "Rediger",
|
||||
"buttons.filter": "Filtrer",
|
||||
"buttons.save": "Lagre",
|
||||
"buttons.showArchived": "Vis arkiverte",
|
||||
"buttons.unArchive": "Opphev arkivering",
|
||||
"common.decrement": "",
|
||||
"common.increment": "",
|
||||
"common.remove": "",
|
||||
"common.search": "",
|
||||
"dashboard.addFieldHint": "",
|
||||
"dashboard.dashboard": "",
|
||||
"dashboard.deleteGroup": "",
|
||||
"dashboard.dragHint": "",
|
||||
"dashboard.dropHere": "",
|
||||
"dashboard.emptyHelp": "",
|
||||
"dashboard.errorEmptyName": "",
|
||||
"dashboard.errorExists": "",
|
||||
"dashboard.errorRename": "",
|
||||
"dashboard.lastUsed": "",
|
||||
"dashboard.newGroup": "",
|
||||
"dashboard.newGroupName": "",
|
||||
"dashboard.reorderGroup": "",
|
||||
"dashboard.unassigned": "",
|
||||
"datetime.done": "",
|
||||
"datetime.hour": "",
|
||||
"datetime.minute": "",
|
||||
"datetime.nextMonth": "",
|
||||
"datetime.now": "",
|
||||
"datetime.pick": "",
|
||||
"datetime.prevMonth": "",
|
||||
"datetime.time": "",
|
||||
"documentTitle.dashboard.list": "",
|
||||
"documentTitle.labels.list": "",
|
||||
"documentTitle.library.list": "",
|
||||
"documentTitle.locations.list": "Lokasjoner | Spoolman",
|
||||
"documentTitle.settings.list": "",
|
||||
"filament.fields.addColor": "",
|
||||
"filament.fields.articleNumber": "Artikkelnummer",
|
||||
"filament.fields.coaxial": "Koaksial",
|
||||
"filament.fields.colorHex": "Farge",
|
||||
"filament.fields.colorType": "",
|
||||
"filament.fields.comment": "Kommentar",
|
||||
"filament.fields.density": "Tetthet",
|
||||
"filament.fields.diameter": "Diameter",
|
||||
@@ -23,6 +96,7 @@
|
||||
"filament.fields.name": "Navn",
|
||||
"filament.fields.price": "Pris",
|
||||
"filament.fields.registered": "Registrert",
|
||||
"filament.fields.removeColor": "",
|
||||
"filament.fields.settingsBedTemp": "Printplate temp",
|
||||
"filament.fields.settingsExtruderTemp": "Dysetemperatur",
|
||||
"filament.fields.singleColor": "Ensfarget",
|
||||
@@ -34,20 +108,210 @@
|
||||
"filament.fieldsHelp.spoolWeight": "Vekten av en tom spole. Brukes til å bestemme målt vekt på en spole.",
|
||||
"filament.fieldsHelp.weight": "Filamentvekten til en full spole (nettovekt). Bør ikke inkludere vekten av selve spolen, kun filamentet. Det er det som vanligvis står på emballasjen.",
|
||||
"filament.filament": "Filamenter",
|
||||
"footer.documentation": "",
|
||||
"footer.reportIssue": "",
|
||||
"help.help": "Hjelp",
|
||||
"inspector.addSpoolsOfThis": "",
|
||||
"inspector.adjustFailed": "",
|
||||
"inspector.adjustHelp": "",
|
||||
"inspector.adjustWeight": "",
|
||||
"inspector.apply": "",
|
||||
"inspector.applying": "",
|
||||
"inspector.colorHex": "",
|
||||
"inspector.consumeAmount": "",
|
||||
"inspector.delete.deleting": "",
|
||||
"inspector.delete.errorGone": "",
|
||||
"inspector.delete.errorSpoolsExist": "",
|
||||
"inspector.delete.errorUnknown": "",
|
||||
"inspector.delete.filament": "",
|
||||
"inspector.delete.filamentBlockedHint": "",
|
||||
"inspector.delete.filamentBlockedTitle": "",
|
||||
"inspector.delete.filamentBody": "",
|
||||
"inspector.delete.filamentDone": "",
|
||||
"inspector.delete.filamentTitle": "",
|
||||
"inspector.delete.spool": "",
|
||||
"inspector.delete.spoolBody": "",
|
||||
"inspector.delete.spoolDone": "",
|
||||
"inspector.delete.spoolRemaining": "",
|
||||
"inspector.delete.spoolTitle": "",
|
||||
"inspector.delete.vendor": "",
|
||||
"inspector.delete.vendorBody": "",
|
||||
"inspector.delete.vendorDone": "",
|
||||
"inspector.delete.vendorTitle": "",
|
||||
"inspector.duplicateFilament": "",
|
||||
"inspector.empty": "",
|
||||
"inspector.enterValidLength": "",
|
||||
"inspector.enterValidWeight": "",
|
||||
"inspector.loading": "",
|
||||
"inspector.manageExtraFields": "",
|
||||
"inspector.measuredHelp": "",
|
||||
"inspector.multi": "",
|
||||
"inspector.newGross": "",
|
||||
"inspector.noExtraFields": "",
|
||||
"inspector.notFound": "",
|
||||
"inspector.ofRemaining": "",
|
||||
"inspector.openFilament": "",
|
||||
"inspector.openLink": "",
|
||||
"inspector.openManufacturer": "",
|
||||
"inspector.specs": "",
|
||||
"inspector.spoolsCount": "",
|
||||
"inspector.spoolsTotalRemaining": "",
|
||||
"inspector.used": "",
|
||||
"kofi": "Gi meg tips på Ko-fi",
|
||||
"labels.addHead": "",
|
||||
"labels.addQr": "",
|
||||
"labels.addRect": "",
|
||||
"labels.addSwatch": "",
|
||||
"labels.addText": "",
|
||||
"labels.align": "",
|
||||
"labels.alignCenter": "",
|
||||
"labels.alignLeft": "",
|
||||
"labels.alignRight": "",
|
||||
"labels.blank": "",
|
||||
"labels.bold": "",
|
||||
"labels.canvasHint": "",
|
||||
"labels.centerLogo": "",
|
||||
"labels.chooseField": "",
|
||||
"labels.clearFill": "",
|
||||
"labels.copies": "",
|
||||
"labels.cornerRadiusMm": "",
|
||||
"labels.createFirst": "",
|
||||
"labels.cutGuides": "",
|
||||
"labels.deleteConfirm": "",
|
||||
"labels.deleteElement": "",
|
||||
"labels.designName": "",
|
||||
"labels.designerDesc": "",
|
||||
"labels.designerTitle": "",
|
||||
"labels.dpi": "",
|
||||
"labels.dpiHint": "",
|
||||
"labels.duplicate": "",
|
||||
"labels.fields.bedTemp": "",
|
||||
"labels.fields.diameterMm": "",
|
||||
"labels.fields.groupVendor": "",
|
||||
"labels.fields.initialG": "",
|
||||
"labels.fields.netWeightG": "",
|
||||
"labels.fields.remainingG": "",
|
||||
"labels.fill": "",
|
||||
"labels.fitWidth": "",
|
||||
"labels.fitWidthHint": "",
|
||||
"labels.fontMm": "",
|
||||
"labels.gridInfo": "",
|
||||
"labels.hMm": "",
|
||||
"labels.heightMm": "",
|
||||
"labels.hintNowrap": "",
|
||||
"labels.hintSwatch": "",
|
||||
"labels.hintWrap": "",
|
||||
"labels.imageDesc": "",
|
||||
"labels.imageZipNote": "",
|
||||
"labels.insertField": "",
|
||||
"labels.kind.qr": "",
|
||||
"labels.kind.rect": "",
|
||||
"labels.kind.swatch": "",
|
||||
"labels.kind.text": "",
|
||||
"labels.labelSize": "",
|
||||
"labels.labelType": "",
|
||||
"labels.layout": "",
|
||||
"labels.modeImage": "",
|
||||
"labels.modeLabel": "",
|
||||
"labels.modeSheet": "",
|
||||
"labels.new": "",
|
||||
"labels.newText": "",
|
||||
"labels.noDesignsOption": "",
|
||||
"labels.noFilaments": "",
|
||||
"labels.noSpools": "",
|
||||
"labels.onePerLabel": "",
|
||||
"labels.preparing": "",
|
||||
"labels.preview": "",
|
||||
"labels.previewWith": "",
|
||||
"labels.radiusMm": "",
|
||||
"labels.sampleData": "",
|
||||
"labels.saved": "",
|
||||
"labels.saving": "",
|
||||
"labels.searchFilaments": "",
|
||||
"labels.searchSpools": "",
|
||||
"labels.selectAllShort": "",
|
||||
"labels.selectAtLeastOne": "",
|
||||
"labels.selectAtLeastOneFilament": "",
|
||||
"labels.selectDesign": "",
|
||||
"labels.selectElement": "",
|
||||
"labels.selectNoneShort": "",
|
||||
"labels.selectRecentHint": "",
|
||||
"labels.selectRecentShort": "",
|
||||
"labels.showingFilament": "",
|
||||
"labels.showingReal": "",
|
||||
"labels.showingSpool": "",
|
||||
"labels.showingTags": "",
|
||||
"labels.sizeMm": "",
|
||||
"labels.skipHint": "",
|
||||
"labels.sortHint": "",
|
||||
"labels.sortId": "",
|
||||
"labels.sortNewest": "",
|
||||
"labels.stroke": "",
|
||||
"labels.strokeMm": "",
|
||||
"labels.tabDesign": "",
|
||||
"labels.tabPrint": "",
|
||||
"labels.textTemplate": "",
|
||||
"labels.typeFilament": "",
|
||||
"labels.typeHint": "",
|
||||
"labels.typeSpool": "",
|
||||
"labels.unknownFilament": "",
|
||||
"labels.wMm": "",
|
||||
"labels.widthMm": "",
|
||||
"labels.wrapText": "",
|
||||
"labels.xMm": "",
|
||||
"labels.yMm": "",
|
||||
"library.apiError": "",
|
||||
"library.collapseGroup": "",
|
||||
"library.emptyBody": "",
|
||||
"library.emptyFiltered": "",
|
||||
"library.emptyTitle": "",
|
||||
"library.expandGroup": "",
|
||||
"library.filterBy": "",
|
||||
"library.groupBy": "",
|
||||
"library.groupNone": "",
|
||||
"library.nUnused": "",
|
||||
"library.noLocation": "",
|
||||
"library.noValues": "",
|
||||
"library.openGroup": "",
|
||||
"library.openManufacturer": "",
|
||||
"library.section.extra": "",
|
||||
"library.section.filament": "",
|
||||
"library.section.spool": "",
|
||||
"library.section.vendor": "",
|
||||
"library.showMore": "",
|
||||
"library.sort.nozzle": "",
|
||||
"library.sortBy": "",
|
||||
"library.unassigned": "",
|
||||
"library.unitGroups": "",
|
||||
"library.unitSpools": "",
|
||||
"library.unused": "",
|
||||
"library.unusedGroup": "",
|
||||
"library.unusedGroupMixed": "",
|
||||
"library.unusedSub": "",
|
||||
"library.unusedSubMixed": "",
|
||||
"library.used": "",
|
||||
"library.usedAgo": "",
|
||||
"loading": "Laster",
|
||||
"locations.locations": "Lokasjoner",
|
||||
"locations.newLocation": "Ny lokasjon",
|
||||
"locations.noLocation": "Ingen lokasjon",
|
||||
"locations.noLocationsHelp": "Denne siden mar deg organisere rullene med filament i lokasjoner. Legg til noen ruller for å starte!",
|
||||
"nav.labels": "",
|
||||
"nav.library": "",
|
||||
"no": "Nei",
|
||||
"notifications.error": "Feil (statuskode: {{statusCode}})",
|
||||
"notifications.saveSuccessful": "Lagring vellykket!",
|
||||
"pagination.empty": "",
|
||||
"pagination.next": "",
|
||||
"pagination.pageSize": "",
|
||||
"pagination.perPage": "",
|
||||
"pagination.prev": "",
|
||||
"pagination.range": "",
|
||||
"printing.generic.columns": "Kolonner",
|
||||
"printing.generic.customSize": "Egendefinert",
|
||||
"printing.generic.description": "Still inn innstillingene nedenfor for å få ønsket utskriftsoppsett. Husk at skrivere og operativsystemet ditt kan bruke sine egne marger og skalering, så det kan hende du må prøve og feile før alt er riktig. Test det på et stykke vanlig papir før du skriver ut på selve etikettene.",
|
||||
"printing.generic.dimensions": "Dimensjoner",
|
||||
"printing.generic.gridTooWide": "",
|
||||
"printing.generic.helpMargin": "Margene bør konfigureres til å matche etikettpapiret og skriveren, endring av disse vil påvirke størrelsen på hele rutenettet.",
|
||||
"printing.generic.helpPrinterMargin": "Safe-Zone bør settes til hvor nær papirkanten skriveren kan skrive ut, endring av disse vil ikke påvirke hele rutenettet.",
|
||||
"printing.generic.horizontalSpacing": "Horisontal avstand",
|
||||
@@ -65,7 +329,11 @@
|
||||
"printing.generic.skipItems": "Hopp over elementer",
|
||||
"printing.generic.verticalSpacing": "Vertikal avstand",
|
||||
"printing.qrcode.button": "Skriv ut etiketter",
|
||||
"printing.qrcode.customUrl.caveat": "",
|
||||
"printing.qrcode.customUrl.hint": "",
|
||||
"printing.qrcode.customUrl.label": "",
|
||||
"printing.qrcode.useHTTPUrl.label": "QR-kodelenke",
|
||||
"printing.qrcode.useHTTPUrl.options.custom": "",
|
||||
"printing.qrcode.useHTTPUrl.options.default": "Standard",
|
||||
"printing.qrcode.useHTTPUrl.options.url": "URL",
|
||||
"printing.qrcode.useHTTPUrl.preview": "Forhåndsvisning:",
|
||||
@@ -73,19 +341,46 @@
|
||||
"printing.spoolSelect.selectedTotal_one": "{{count}} spole valgt",
|
||||
"printing.spoolSelect.selectedTotal_other": "{{count}} spoler valgt",
|
||||
"scanner.description": "Skann en Spoolman QR-kode for å se detaljer om spolen.",
|
||||
"scanner.error.inUse": "",
|
||||
"scanner.error.insecureContext": "Siden serveres ikke over HTTPS.",
|
||||
"scanner.error.notAllowed": "Du har ikke gitt tilgang til kameraet.",
|
||||
"scanner.error.notFound": "Fant ingen kameraer.",
|
||||
"scanner.error.streamApiNotSupported": "Nettleseren støtter ikke MediaStream API.",
|
||||
"scanner.error.unknown": "Ukjent feil. {{error}}",
|
||||
"scanner.starting": "",
|
||||
"scanner.title": "QR-kodeskanner",
|
||||
"search.colorHint": "",
|
||||
"search.noResults": "",
|
||||
"search.searching": "",
|
||||
"search.section.filaments": "",
|
||||
"search.section.spools": "",
|
||||
"search.section.vendors": "",
|
||||
"search.threshold": "",
|
||||
"search.unknownFilament": "",
|
||||
"settings.appearance.tab": "",
|
||||
"settings.appearance.theme.dark": "",
|
||||
"settings.appearance.theme.desc": "",
|
||||
"settings.appearance.theme.label": "",
|
||||
"settings.appearance.theme.light": "",
|
||||
"settings.appearance.theme.system": "",
|
||||
"settings.extraFields.addChoice": "",
|
||||
"settings.extraFields.addChoicesFirst": "",
|
||||
"settings.extraFields.addEntityField": "",
|
||||
"settings.extraFields.booleanFalse": "Nei",
|
||||
"settings.extraFields.booleanTrue": "Ja",
|
||||
"settings.extraFields.deleteConfirm": "Slette felt {{name}}?",
|
||||
"settings.extraFields.description.intro": "Her kan du legge til ekstra tilpassede felt til enhetene dine.",
|
||||
"settings.extraFields.description.constraints": "Når et felt er lagt til, kan du ikke endre nøkkelen eller typen, og for valgtypefelt kan du ikke fjerne valg eller endre flervalgsstatusen. Hvis du fjerner et felt, slettes de tilknyttede dataene for alle enheter.",
|
||||
"settings.extraFields.description.intro": "Her kan du legge til ekstra tilpassede felt til enhetene dine.",
|
||||
"settings.extraFields.description.keyUsage": "Nøkkelen er det andre programmer leser/skriver dataene som, så hvis det tilpassede feltet ditt skal integreres med et tredjepartsprogram, må du sørge for å angi det riktig. Standardverdien brukes bare på nye elementer.",
|
||||
"settings.extraFields.description.tableViews": "Ekstra felt kan ikke sorteres eller filtreres i tabellvisningene.",
|
||||
"settings.extraFields.editorEdit": "",
|
||||
"settings.extraFields.editorNew": "",
|
||||
"settings.extraFields.errors.choiceNeeded": "",
|
||||
"settings.extraFields.errors.choicesRemoved": "",
|
||||
"settings.extraFields.errors.deleteFailed": "",
|
||||
"settings.extraFields.errors.keyFormat": "",
|
||||
"settings.extraFields.errors.nameRequired": "",
|
||||
"settings.extraFields.errors.saveFailed": "",
|
||||
"settings.extraFields.fieldType.boolean": "Ja/Nei",
|
||||
"settings.extraFields.fieldType.choice": "Valg",
|
||||
"settings.extraFields.fieldType.datetime": "Dato/Tid",
|
||||
@@ -94,7 +389,13 @@
|
||||
"settings.extraFields.fieldType.integer": "Heltall",
|
||||
"settings.extraFields.fieldType.integerRange": "Heltallsområde",
|
||||
"settings.extraFields.fieldType.text": "Tekst",
|
||||
"settings.extraFields.max": "",
|
||||
"settings.extraFields.min": "",
|
||||
"settings.extraFields.multiSuffix": "",
|
||||
"settings.extraFields.multiple": "",
|
||||
"settings.extraFields.namePlaceholder": "",
|
||||
"settings.extraFields.nonUniqueKeyError": "Nøkkelen må være unik.",
|
||||
"settings.extraFields.none": "",
|
||||
"settings.extraFields.params.choices": "Valg",
|
||||
"settings.extraFields.params.defaultValue": "Standardverdi",
|
||||
"settings.extraFields.params.fieldType": "Felttype",
|
||||
@@ -102,14 +403,21 @@
|
||||
"settings.extraFields.params.name": "Navn",
|
||||
"settings.extraFields.params.order": "Rekkefølge",
|
||||
"settings.extraFields.params.unit": "Enhet",
|
||||
"settings.extraFields.saveField": "",
|
||||
"settings.extraFields.tab": "Ekstra felt",
|
||||
"settings.general.baseUrl.label": "Base-URL",
|
||||
"settings.general.baseUrl.tooltip": "URL som brukes ved generering av QR-koder og eksterne lenker.",
|
||||
"settings.general.currency.desc": "",
|
||||
"settings.general.currency.label": "Valuta",
|
||||
"settings.general.roundPrices.label": "Avrund priser",
|
||||
"settings.general.roundPrices.tooltip": "Runder priser til nærmeste hele verdi.",
|
||||
"settings.general.tab": "Generelt",
|
||||
"settings.header": "Innstillinger",
|
||||
"settings.language.desc": "",
|
||||
"settings.language.label": "",
|
||||
"settings.library.lowThreshold.desc": "",
|
||||
"settings.library.lowThreshold.label": "",
|
||||
"settings.library.tab": "",
|
||||
"spool.fields.archived": "Arkivert",
|
||||
"spool.fields.comment": "Kommentar",
|
||||
"spool.fields.filament": "Filament",
|
||||
@@ -133,7 +441,16 @@
|
||||
"spool.form.measurementType.length": "Lengde",
|
||||
"spool.form.measurementType.weight": "Vekt",
|
||||
"spool.spool": "Spoler",
|
||||
"topbar.addSpools": "",
|
||||
"topbar.searchPlaceholder": "",
|
||||
"unknown": "Ukjent",
|
||||
"validation.hexDigits": "",
|
||||
"validation.maxChars": "",
|
||||
"validation.mustBeGt": "",
|
||||
"validation.mustBeMax": "",
|
||||
"validation.mustBeMin": "",
|
||||
"validation.mustBeNumber": "",
|
||||
"validation.required": "",
|
||||
"vendor.fields.comment": "Kommentar",
|
||||
"vendor.fields.emptySpoolWeight": "Tom spolevekt",
|
||||
"vendor.fields.externalId": "Ekstern ID",
|
||||
|
||||
@@ -1,53 +1,388 @@
|
||||
{
|
||||
"add.addAndNew": "Toevoegen & nieuw",
|
||||
"add.addN_one": "Voeg {{count}} spoel toe",
|
||||
"add.addN_other": "Voeg {{count}} spoelen toe",
|
||||
"add.adding": "Toevoegen...",
|
||||
"add.advanced": "Geavanceerde specificaties",
|
||||
"add.advancedNote": "dichtheid, diameter, temperaturen (automatisch ingevuld via het material)",
|
||||
"add.change": "aanpassen",
|
||||
"add.count": "Aantal",
|
||||
"add.createNew": "Maak nieuw filament aan",
|
||||
"add.createNewSub": "niet in je catalogus of {{name}}",
|
||||
"add.dbUnavailable": "{{name}} niet beschikbaar",
|
||||
"add.duplicate": "duplicaat",
|
||||
"add.duplicateNote": "Specificaties, fabrikant en prijs zijn gekopieerd. Geef het een nieuwe naam en kleur.",
|
||||
"add.duplicateRename": "Nog steeds dezelfde naam als het origineel — geef het een andere naam om ze van elkaar te kunnen onderscheiden.",
|
||||
"add.duplicateTitle": "Nieuw filament · kopie van “{{name}}”",
|
||||
"add.filamentNamePlaceholder": "bijv. PolyTerra Matte Sage",
|
||||
"add.fill.full": "Vol",
|
||||
"add.fillLevel": "Vul niveau",
|
||||
"add.importNote": "Dit filament wordt aan je catalogus toegevoegd wanneer je de spoelen toevoegt.",
|
||||
"add.inCatalog": "in catalogus",
|
||||
"add.locationHint": "Waar je de spoel fysiek bewaart — op een plank, in een doos of in een printer. Laat dit veld leeg als je ze allemaal op één plek bewaart.",
|
||||
"add.locationPlaceholder": "bijv. plank A, container 2, printer 1",
|
||||
"add.manufacturerPlaceholder": "bijv. Polymaker",
|
||||
"add.nameHint": "Vermeld de kleur — daarmee kun je de filamenten van elkaar onderscheiden.",
|
||||
"add.newFilament": "nieuw filament",
|
||||
"add.newFilamentTitle": "Nieuw filament",
|
||||
"add.noCatalog": "Geen filamenten in je catalogus",
|
||||
"add.noManufacturer": "Geen fabrikant",
|
||||
"add.pickColor": "Kies kleur",
|
||||
"add.searchPlaceholder": "Zoek je catalogus en {{name}}...",
|
||||
"add.searching": "Zoeken...",
|
||||
"add.section.filament": "Filament",
|
||||
"add.section.filamentNote": "Het product op de spoel — een vermelding per kleur.",
|
||||
"add.section.manufacturer": "Fabrikant",
|
||||
"add.section.manufacturerNote": "Wie maakt het filament. Eenmalig toegevoegd en vervolgens voor al hun filamenten hergebruikt.",
|
||||
"add.section.spool": "Spoel",
|
||||
"add.section.spoolNote": "De fysieke spoelen die in je voorraad terechtkomen.",
|
||||
"add.section.spoolSharedNote": "Gewicht, spoelgewicht en prijs worden ook bewaard als standaardinstelling voor het nieuwe filament.",
|
||||
"add.spoolWeightPreset.cardboard": "Karton {{weight}} g",
|
||||
"add.spoolWeightPreset.plastic": "Plastic {{weight}} g",
|
||||
"add.spoolWeightPresetsLead": "Begin vanaf een typische spoel:",
|
||||
"add.step2": "Stap 2 · spoel details",
|
||||
"add.step2New": "Stap 2 · filament & spoel details",
|
||||
"add.summary_one": "{{count}} spoel",
|
||||
"add.summary_other": "{{count}} spoelen",
|
||||
"add.typeToSearchAll": "Typ om duizenden filamenten te doorzoeken",
|
||||
"add.typeToSearchMatches": "Typ om te zoeken — geen overeenkomsten",
|
||||
"add.useExisting": "gebruik een bestaande",
|
||||
"add.vendorHint.existing": "Gebruik een bestaande fabrikant \"{{name}}\"",
|
||||
"add.vendorHint.new": "Nieuwe fabrikant \"{{name}}\" wordt aangemaakt",
|
||||
"add.vendorHint.optional": "Optioneel — laat leeg voor geen fabrikant",
|
||||
"add.weightPresets": "Algemene spoel gewichten",
|
||||
"add.yourCatalog": "Je catalogus",
|
||||
"buttons.apply": "Toepassen",
|
||||
"buttons.archive": "Archiveren",
|
||||
"buttons.cancel": "Annuleren",
|
||||
"buttons.clear": "Wissen",
|
||||
"buttons.close": "Sluiten",
|
||||
"buttons.delete": "Verwijderen",
|
||||
"buttons.edit": "Bewerken",
|
||||
"buttons.filter": "Filter",
|
||||
"buttons.save": "Opslaan",
|
||||
"buttons.showArchived": "Gearchiveerd tonen",
|
||||
"buttons.showNoSpools": "Laat filamenten zonder spoel zien",
|
||||
"buttons.unArchive": "Terugzetten",
|
||||
"changeFilament.action": "Aanpassen",
|
||||
"changeFilament.adoptWeight": "Stel het volledige gewicht van deze spoel in op {{full}}",
|
||||
"changeFilament.adoptWeightHelp": "Het wordt geregistreerd als {{current}}, op basis van het filament dat het voorheen bevatte. Gebruikt gewicht ({{used}}) blijft hoe dan ook behouden, waardoor {{remaining}} overblijft.",
|
||||
"changeFilament.apply": "Pas filament aan",
|
||||
"changeFilament.applying": "Aanpassend...",
|
||||
"changeFilament.current": "huidig",
|
||||
"changeFilament.done": "Filament aangepast.",
|
||||
"changeFilament.failed": "Kon het filament niet veranderen.",
|
||||
"changeFilament.importNote": "Dit filament wordt aan je catalogus toegevoegd wanneer je de wijziging toepast.",
|
||||
"changeFilament.intro": "Spoel #{{id}} behoudt zijn nummer, locatie, data en gebruiksgeschiedenis — alleen het filament dat erin zit, verandert.",
|
||||
"changeFilament.newTag": "nieuw",
|
||||
"changeFilament.next": "Verander naar",
|
||||
"changeFilament.now": "Huidig",
|
||||
"changeFilament.pickBelow": "Kies een filament hieronder",
|
||||
"changeFilament.title": "Verander filament",
|
||||
"changeFilament.useExisting": "Kies een bestaand filament",
|
||||
"changeFilament.weightFollows": "Deze spoel heeft zelf geen volledig gewicht, dus er is nieuw filament nodig: {{full}}, waardoor {{remaining}} overblijft na de {{used}} die al is gebruikt.",
|
||||
"changeVendor.action": "Aanpassen",
|
||||
"changeVendor.apply": "Pas fabrikant aan",
|
||||
"changeVendor.applying": "Aanpassend...",
|
||||
"changeVendor.clearHint": "Verlaat dit filament zonder fabrikant",
|
||||
"changeVendor.create": "Maak \"{{name}}\" aan",
|
||||
"changeVendor.createHint": "Deze fabrikant bestaat nog niet in je lijst — het zal worden toegevoegd",
|
||||
"changeVendor.current": "huidig",
|
||||
"changeVendor.done": "Fabrikant gewijzigd.",
|
||||
"changeVendor.emptySpool": "Lege spoel {{value}}",
|
||||
"changeVendor.failed": "Kon de fabrikant niet aanpassen.",
|
||||
"changeVendor.intro": "“{{name}}” behoudt zijn spoelen, specificaties en geschiedenis — alleen de fabrikant waaronder het is bewaard wijzigt.",
|
||||
"changeVendor.next": "Verander naar",
|
||||
"changeVendor.noEmptySpool": "Geen leeg spoel gewicht",
|
||||
"changeVendor.noMatches": "Kan fabrikant niet vinden",
|
||||
"changeVendor.none": "Nog geen fabrikant",
|
||||
"changeVendor.noneNote": "Opgeslagen zonder merk",
|
||||
"changeVendor.now": "Huidig",
|
||||
"changeVendor.pickBelow": "Kies een fabrikant hieronder",
|
||||
"changeVendor.searchPlaceholder": "Zoek of noem een fabrikant",
|
||||
"changeVendor.tareFollows": "Dit filament heeft geen eigen leeg spoelgewicht, dus het is van de fabrikant. Na de verandering is dat {{value}}, wat een lege spoel weegt als je het meet.",
|
||||
"changeVendor.tareGone": "Dit filament heeft zelf geen leeg spoelgewicht en neemt de {{current}} van de fabrikant over. Na de aanpassing is er niks om in te vullen, totdat je het filament toevoegt.",
|
||||
"changeVendor.title": "Pas fabrikant aan",
|
||||
"changeVendor.willBeCreated": "Wordt aangemaakt",
|
||||
"common.decrement": "Verlagen",
|
||||
"common.increment": "Verhogen",
|
||||
"common.remove": "Verwijder",
|
||||
"common.search": "Zoek",
|
||||
"dashboard.addFieldHint": "Voeg een tekst- of keuzeveld toe aan de spoelen in Instellingen om er ook op te groeperen",
|
||||
"dashboard.dashboard": "Dashboard",
|
||||
"dashboard.deleteGroup": "Verwijder groep",
|
||||
"dashboard.dragHint": "Sleep een spoel naar een andere kaart om het {{field}} te wijzigen, of binnen een kaart om opnieuw te bestellen",
|
||||
"dashboard.dropHere": "laat spoelen hier los",
|
||||
"dashboard.emptyHelp": "Deze pagina groepeert je spoelen op een veld naar keuze, voeg wat spoelen toe om aan de slag te gaan!",
|
||||
"dashboard.errorEmptyName": "Naam mag niet leeg zijn",
|
||||
"dashboard.errorExists": "Een groep met die naam bestaat al",
|
||||
"dashboard.errorRename": "Hernoemen van groep is mislukt",
|
||||
"dashboard.lastUsed": "Laatst gebruikt {{time}} geleden",
|
||||
"dashboard.newGroup": "Nieuwe groep",
|
||||
"dashboard.newGroupName": "Nieuwe groep {{n}}",
|
||||
"dashboard.reorderGroup": "Sleep om de groep te herordenen",
|
||||
"dashboard.spoolCount_one": "{{count}} spoel",
|
||||
"dashboard.spoolCount_other": "{{count}} spoelen",
|
||||
"dashboard.unassigned": "Niet toegewezen",
|
||||
"datetime.done": "Klaar",
|
||||
"datetime.hour": "uur",
|
||||
"datetime.minute": "minuut",
|
||||
"datetime.nextMonth": "Volgende maand",
|
||||
"datetime.now": "Nu",
|
||||
"datetime.pick": "Kies datum en tijd",
|
||||
"datetime.prevMonth": "Vorige maand",
|
||||
"datetime.time": "Tijd",
|
||||
"documentTitle.dashboard.list": "Dashboard | Spoolman",
|
||||
"documentTitle.labels.list": "Labels | Spoolman",
|
||||
"documentTitle.library.list": "Bibliotheek | Spoolman",
|
||||
"documentTitle.locations.list": "Locaties | Spoolman",
|
||||
"documentTitle.settings.list": "Instellingen | Spoolman",
|
||||
"filament.fields.addColor": "Voeg kleur toe",
|
||||
"filament.fields.articleNumber": "Artikel nummer",
|
||||
"filament.fields.coaxial": "Gecoëxtrudeerde",
|
||||
"filament.fields.coaxial": "Gecoëxtrudeerd",
|
||||
"filament.fields.colorHex": "Kleur",
|
||||
"filament.fields.colorType": "Kleurtype",
|
||||
"filament.fields.comment": "Opmerking",
|
||||
"filament.fields.density": "Dichtheid",
|
||||
"filament.fields.diameter": "Diameter",
|
||||
"filament.fields.externalId": "Extern ID",
|
||||
"filament.fields.externalId": "Externe ID",
|
||||
"filament.fields.id": "ID",
|
||||
"filament.fields.longitudinal": "Longitudinaal",
|
||||
"filament.fields.material": "Materiaal",
|
||||
"filament.fields.multiColor": "Meervoudig",
|
||||
"filament.fields.name": "Naam",
|
||||
"filament.fields.opacity": "Ondoorzichtigheid",
|
||||
"filament.fields.price": "Prijs",
|
||||
"filament.fields.registered": "Geregistreerd",
|
||||
"filament.fields.settingsBedTemp": "Bed temperatuur",
|
||||
"filament.fields.removeColor": "Verwijder kleur",
|
||||
"filament.fields.settingsBedTemp": "Bed Temperatuur",
|
||||
"filament.fields.settingsExtruderTemp": "Extruder Temperatuur",
|
||||
"filament.fields.singleColor": "Enkel",
|
||||
"filament.fields.spoolWeight": "Gewicht spoel",
|
||||
"filament.fields.spoolWeight": "Gewicht Spoel",
|
||||
"filament.fields.vendor": "Fabrikant",
|
||||
"filament.fields.weight": "Gewicht",
|
||||
"filament.fieldsHelp.articleNumber": "Bv. EAN. UPC, enz.",
|
||||
"filament.fieldsHelp.multiColorDirection": "Filamenten kunnen op twee manieren meerdere kleuren hebben: door coëxtrusie, zoals tweekleurige filamenten met consistente meerkleuren, of door kleurveranderingen in de lengterichting, zoals verloopfilamenten die van kleur veranderen langs de spoel.",
|
||||
"filament.fieldsHelp.spoolWeight": "Het gewicht van een lege spoel. Wordt gebruikt om het gemeten gewicht van een spoel te bepalen.",
|
||||
"filament.fieldsHelp.articleNumber": "Bijv. EAN, UPC, enz.",
|
||||
"filament.fieldsHelp.multiColorDirection": "Filamenten kunnen op twee manieren meerdere kleuren hebben: door coëxtrusie, zoals tweekleurige filamenten met consistente meerkleurigheid, of door kleurveranderingen in de lengterichting, zoals verloopfilamenten die van kleur veranderen langs de spoel.",
|
||||
"filament.fieldsHelp.spoolWeight": "Het gewicht van een lege spoel. Wordt gebruikt om het gemeten gewicht van een spoel te bepalen. Onzeker? Kartonnen spoelen wegen meestal 130–150 g en plastic spoelen 180–250 g — voor een exact aantal, zet de spoel op een weegschaal zodra deze leeg is.",
|
||||
"filament.fieldsHelp.weight": "Het filamentgewicht van een volle spoel (nettogewicht). Dit mag niet het gewicht van de spoel zelf omvatten, alleen het filament. Dit staat meestal op de verpakking.",
|
||||
"filament.filament": "Filamenten",
|
||||
"footer.documentation": "Documentatie",
|
||||
"footer.reportIssue": "Meld een probleem",
|
||||
"footer.updateAvailable": "v{{version}} beschikbaar",
|
||||
"help.help": "Help",
|
||||
"inspector.addSpoolsOfThis": "Voeg spoelen hiervan toe",
|
||||
"inspector.adjustFailed": "Aanpassen van gewicht is mislukt.",
|
||||
"inspector.adjustHelp": "Positief verbruikt filament, negatief voegt het terug.",
|
||||
"inspector.adjustWeight": "Pas gewicht aan",
|
||||
"inspector.apply": "Toepassen",
|
||||
"inspector.applying": "Toepassen...",
|
||||
"inspector.colorHex": "Hex kleur",
|
||||
"inspector.consumeAmount": "Verbruikte hoeveelheid:",
|
||||
"inspector.defaultFrom.filament": "{{value}} · standaard filament",
|
||||
"inspector.defaultFrom.manufacturer": "{{value}} · standaard fabrikant",
|
||||
"inspector.delete.deleting": "Verwijderen...",
|
||||
"inspector.delete.errorGone": "Het was al verwijderd.",
|
||||
"inspector.delete.errorSpoolsExist": "Kan dit filament niet verwijderen — spoelen gebruiken het nog steeds.",
|
||||
"inspector.delete.errorUnknown": "Verwijderen mislukt. Zie de server logs voor details.",
|
||||
"inspector.delete.filament": "Verwijder filament",
|
||||
"inspector.delete.filamentBlockedHint": "Verwijder die spoelen eerst. Het archiveren ervan is niet voldoende.",
|
||||
"inspector.delete.filamentBlockedTitle": "Dit filament kan niet verwijderd woden",
|
||||
"inspector.delete.filamentBlocked_one": "{{count}} spoel gebruikt nog steeds “{{name}}”, inclusief de gearchiveerde.",
|
||||
"inspector.delete.filamentBlocked_other": "{{count}} spoelen gebruiken nog steeds “{{name}}”, inclusief de gearchiveerde.",
|
||||
"inspector.delete.filamentBody": "“{{name}}” wordt uit je catalogus verwijderd. Dit kan niet ongedaan worden gemaakt.",
|
||||
"inspector.delete.filamentDone": "Filament verwijderd.",
|
||||
"inspector.delete.filamentTitle": "Verwijder dit filament?",
|
||||
"inspector.delete.spool": "Verwijder spoel",
|
||||
"inspector.delete.spoolBody": "Spoel #{{id}} van “{{name}}” wordt verwijderd, samen met de gebruiksgeschiedenis. Dit kan niet ongedaan worden gemaakt.",
|
||||
"inspector.delete.spoolDone": "Spoel verwijderd.",
|
||||
"inspector.delete.spoolRemaining": "Er is nog {{weight}} filament over. Archiveer het in plaats daarvan als je het alleen maar wilt opruimen.",
|
||||
"inspector.delete.spoolTitle": "Verwijder deze spoel?",
|
||||
"inspector.delete.vendor": "Verwijder fabrikant",
|
||||
"inspector.delete.vendorBody": "“{{name}}” wordt verwijderd. Dit kan niet ongedaan worden gemaakt.",
|
||||
"inspector.delete.vendorDone": "Fabrikant verwijderd.",
|
||||
"inspector.delete.vendorOrphans_one": "Het filament {{count}} wordt bewaard, maar blijft zonder fabrikant achter.",
|
||||
"inspector.delete.vendorOrphans_other": "De {{count}} filamenten worden bewaard, maar blijven zonder fabrikant achter.",
|
||||
"inspector.delete.vendorTitle": "Verwijder deze fabrikant?",
|
||||
"inspector.duplicateFilament": "Dupliceer",
|
||||
"inspector.empty": "Selecteer een spoel, filament of fabrikant uit de lijst om de details hier te zien.",
|
||||
"inspector.enterValidLength": "Voer een geldige lengte in.",
|
||||
"inspector.enterValidWeight": "Voer een geldig gewicht in.",
|
||||
"inspector.loading": "Laden...",
|
||||
"inspector.manageExtraFields": "Velden beheren",
|
||||
"inspector.measuredHelp": "Totaal gewicht van de spoel + overblijvend filament, afgelezen van een weegschaal.",
|
||||
"inspector.multi": "multi ×{{count}}",
|
||||
"inspector.newGross": "Nieuw brutogewicht:",
|
||||
"inspector.noExtraFields": "Nog geen — voeg je eigen velden toe om iets bij te houden wat Spoolman niet zelf doet.",
|
||||
"inspector.notFound": "Dit item kon niet worden gevonden. Mogelijk is het verwijderd.",
|
||||
"inspector.ofRemaining": "van {{weight}} resterende · {{length}} m",
|
||||
"inspector.openFilament": "Open filament",
|
||||
"inspector.openLink": "Open {{url}} in een nieuw tabblad",
|
||||
"inspector.openManufacturer": "Open fabrikant",
|
||||
"inspector.override.byFilament": "Overschreven door dit filament · {{value}}",
|
||||
"inspector.override.bySpool": "Overschreven door deze spoel · {{value}}",
|
||||
"inspector.override.overridesFilament": "Overschrijft filament · {{value}}",
|
||||
"inspector.override.overridesManufacturer": "Overschrijft fabrikant · {{value}}",
|
||||
"inspector.specs": "Specs — bewerken op zijn plaats",
|
||||
"inspector.spoolsCount": "Spoelen · {{count}}",
|
||||
"inspector.spoolsTotalRemaining": "{{weight}} totaal",
|
||||
"inspector.used": "gebruikt",
|
||||
"inspector.vendorSub_one": "{{count}} filament",
|
||||
"inspector.vendorSub_other": "{{count}} filamenten",
|
||||
"kofi": "Tip mij op Ko-fi",
|
||||
"labels.addHead": "Voeg toe",
|
||||
"labels.addQr": "QR code",
|
||||
"labels.addRect": "Rechthoek",
|
||||
"labels.addSwatch": "Kleurstaal",
|
||||
"labels.addText": "Tekst / veld",
|
||||
"labels.align": "Uitlijnen",
|
||||
"labels.alignCenter": "Centreren",
|
||||
"labels.alignLeft": "Links",
|
||||
"labels.alignRight": "Rechts",
|
||||
"labels.blank": "Je hebt nog geen labelontwerpen.",
|
||||
"labels.bold": "Vet",
|
||||
"labels.canvasHint": "Sleep om te verplaatsen · klik om te selecteren · handvatten om de grootte te wijzigen.",
|
||||
"labels.centerLogo": "Centreer Spoolman logo",
|
||||
"labels.chooseField": "Kies een veld...",
|
||||
"labels.clearFill": "Leeg vulling (alleen outline)",
|
||||
"labels.copies": "Kopieën",
|
||||
"labels.cornerRadiusMm": "Hoekradius",
|
||||
"labels.createFirst": "Maak je eerste label",
|
||||
"labels.cutGuides": "Snij gids",
|
||||
"labels.deleteConfirm": "Verwijder dit label ontwerp?",
|
||||
"labels.deleteElement": "Verwijder element",
|
||||
"labels.designName": "Ontwerp naam",
|
||||
"labels.designerDesc": "Ontwerp QR-codelabels met elk spoel-, filament- of leveranciersveld en print ze vervolgens op vellen of een labelprinter. Ontwerpen worden opgeslagen op de server.",
|
||||
"labels.designerTitle": "",
|
||||
"labels.dpi": "",
|
||||
"labels.dpiHint": "",
|
||||
"labels.duplicate": "",
|
||||
"labels.fields.bedTemp": "",
|
||||
"labels.fields.diameterMm": "",
|
||||
"labels.fields.groupVendor": "",
|
||||
"labels.fields.initialG": "",
|
||||
"labels.fields.netWeightG": "",
|
||||
"labels.fields.remainingG": "",
|
||||
"labels.fill": "",
|
||||
"labels.fitWidth": "",
|
||||
"labels.fitWidthHint": "",
|
||||
"labels.fontMm": "",
|
||||
"labels.gridInfo": "",
|
||||
"labels.hMm": "",
|
||||
"labels.heightMm": "",
|
||||
"labels.hintNowrap": "",
|
||||
"labels.hintSwatch": "",
|
||||
"labels.hintWrap": "",
|
||||
"labels.imageDesc": "",
|
||||
"labels.imageZipNote": "",
|
||||
"labels.insertField": "",
|
||||
"labels.kind.qr": "",
|
||||
"labels.kind.rect": "",
|
||||
"labels.kind.swatch": "",
|
||||
"labels.kind.text": "",
|
||||
"labels.labelSize": "",
|
||||
"labels.labelType": "",
|
||||
"labels.layout": "",
|
||||
"labels.modeImage": "",
|
||||
"labels.modeLabel": "",
|
||||
"labels.modeSheet": "",
|
||||
"labels.new": "",
|
||||
"labels.newText": "",
|
||||
"labels.noDesignsOption": "",
|
||||
"labels.noFilaments": "",
|
||||
"labels.noSpools": "",
|
||||
"labels.onePerLabel": "",
|
||||
"labels.preparing": "",
|
||||
"labels.preview": "",
|
||||
"labels.previewWith": "",
|
||||
"labels.radiusMm": "",
|
||||
"labels.sampleData": "",
|
||||
"labels.saved": "",
|
||||
"labels.saving": "",
|
||||
"labels.searchFilaments": "",
|
||||
"labels.searchSpools": "",
|
||||
"labels.selectAllShort": "",
|
||||
"labels.selectAtLeastOne": "",
|
||||
"labels.selectAtLeastOneFilament": "",
|
||||
"labels.selectDesign": "Selecteer labelontwerp",
|
||||
"labels.selectElement": "",
|
||||
"labels.selectNoneShort": "",
|
||||
"labels.selectRecentHint": "",
|
||||
"labels.selectRecentShort": "",
|
||||
"labels.showingFilament": "",
|
||||
"labels.showingReal": "",
|
||||
"labels.showingSpool": "",
|
||||
"labels.showingTags": "",
|
||||
"labels.sizeMm": "",
|
||||
"labels.skipHint": "",
|
||||
"labels.sortHint": "",
|
||||
"labels.sortId": "",
|
||||
"labels.sortNewest": "",
|
||||
"labels.stroke": "",
|
||||
"labels.strokeMm": "",
|
||||
"labels.tabDesign": "",
|
||||
"labels.tabPrint": "",
|
||||
"labels.textTemplate": "",
|
||||
"labels.typeFilament": "",
|
||||
"labels.typeHint": "",
|
||||
"labels.typeSpool": "",
|
||||
"labels.unknownFilament": "",
|
||||
"labels.wMm": "",
|
||||
"labels.widthMm": "",
|
||||
"labels.wrapText": "",
|
||||
"labels.xMm": "",
|
||||
"labels.yMm": "",
|
||||
"library.apiError": "",
|
||||
"library.collapseGroup": "",
|
||||
"library.emptyBody": "",
|
||||
"library.emptyFiltered": "",
|
||||
"library.emptyTitle": "",
|
||||
"library.expandGroup": "",
|
||||
"library.filterBy": "",
|
||||
"library.groupBy": "",
|
||||
"library.groupNone": "",
|
||||
"library.nUnused": "",
|
||||
"library.noLocation": "",
|
||||
"library.noValues": "",
|
||||
"library.openGroup": "",
|
||||
"library.openManufacturer": "",
|
||||
"library.section.extra": "",
|
||||
"library.section.filament": "",
|
||||
"library.section.spool": "",
|
||||
"library.section.vendor": "",
|
||||
"library.showMore": "",
|
||||
"library.sort.nozzle": "",
|
||||
"library.sortBy": "",
|
||||
"library.unassigned": "",
|
||||
"library.unitGroups": "",
|
||||
"library.unitSpools": "",
|
||||
"library.unused": "",
|
||||
"library.unusedGroup": "",
|
||||
"library.unusedGroupMixed": "",
|
||||
"library.unusedSub": "",
|
||||
"library.unusedSubMixed": "",
|
||||
"library.used": "",
|
||||
"library.usedAgo": "",
|
||||
"loading": "Laden",
|
||||
"locations.locations": "Locaties",
|
||||
"locations.newLocation": "Nieuwe locatie",
|
||||
"locations.noLocation": "Geen locatie",
|
||||
"locations.noLocationsHelp": "Op deze pagina kunt u uw spoelen op verschillende locaties ordenen. Voeg spoelen toe om aan de slag te gaan!",
|
||||
"nav.labels": "",
|
||||
"nav.library": "",
|
||||
"no": "Nee",
|
||||
"notifications.error": "Fout (fout code {{statusCode}})",
|
||||
"notifications.saveSuccessful": "Succesvol opgeslagen!",
|
||||
"pagination.empty": "",
|
||||
"pagination.next": "",
|
||||
"pagination.pageSize": "",
|
||||
"pagination.perPage": "",
|
||||
"pagination.prev": "",
|
||||
"pagination.range": "",
|
||||
"printing.generic.columns": "Kolommen",
|
||||
"printing.generic.customSize": "Aangepast",
|
||||
"printing.generic.description": "Stem de onderstaande instellingen af om de gewenste print lay-out te krijgen. Houd er rekening mee dat printers en je besturingssysteem hun eigen marges en schaling kunnen toepassen, dus het kan zijn dat je met wat instellingen moet spelen voordat alles correct is. Test het op een stuk gewoon papier voordat u op de daadwerkelijke etiketten afdrukt.",
|
||||
"printing.generic.dimensions": "Afmetingen",
|
||||
"printing.generic.gridTooWide": "",
|
||||
"printing.generic.helpMargin": "Marges moeten worden geconfigureerd zodat ze overeenkomen met je labelpapier en printer. Als u deze wijzigt, heeft dit invloed op de grootte van het hele raster.",
|
||||
"printing.generic.helpPrinterMargin": "Safe-Zone moet worden ingesteld op hoe dicht bij de papierrand uw printer kan afdrukken. Als u deze wijzigt, heeft dit geen invloed op het hele raster.",
|
||||
"printing.generic.horizontalSpacing": "Horizontale afstand",
|
||||
@@ -65,7 +400,11 @@
|
||||
"printing.generic.skipItems": "Items overslaan",
|
||||
"printing.generic.verticalSpacing": "Verticale afstand",
|
||||
"printing.qrcode.button": "Labels afdrukken",
|
||||
"printing.qrcode.customUrl.caveat": "",
|
||||
"printing.qrcode.customUrl.hint": "",
|
||||
"printing.qrcode.customUrl.label": "",
|
||||
"printing.qrcode.useHTTPUrl.label": "QR-codelink",
|
||||
"printing.qrcode.useHTTPUrl.options.custom": "",
|
||||
"printing.qrcode.useHTTPUrl.options.default": "Standaard",
|
||||
"printing.qrcode.useHTTPUrl.options.url": "URL",
|
||||
"printing.qrcode.useHTTPUrl.preview": "Voorbeeld:",
|
||||
@@ -73,19 +412,46 @@
|
||||
"printing.spoolSelect.selectedTotal_one": "{{count}} spoel geselecteerd",
|
||||
"printing.spoolSelect.selectedTotal_other": "{{count}} spoelen geselecteerd",
|
||||
"scanner.description": "Scan een Spoolman QR-Code om details van de spoel te tonen.",
|
||||
"scanner.error.inUse": "",
|
||||
"scanner.error.insecureContext": "De pagina wordt niet weergegeven via HTTPS.",
|
||||
"scanner.error.notAllowed": "Je hebt geen toegang tot de camera verleend.",
|
||||
"scanner.error.notFound": "Geen camera gevonden.",
|
||||
"scanner.error.streamApiNotSupported": "De browser ondersteunt de MediaStream API niet.",
|
||||
"scanner.error.unknown": "Er is een onbekende fout opgetreden. ({{error}})",
|
||||
"scanner.starting": "",
|
||||
"scanner.title": "QR-Code scanner",
|
||||
"search.colorHint": "",
|
||||
"search.noResults": "",
|
||||
"search.searching": "",
|
||||
"search.section.filaments": "",
|
||||
"search.section.spools": "",
|
||||
"search.section.vendors": "",
|
||||
"search.threshold": "",
|
||||
"search.unknownFilament": "",
|
||||
"settings.appearance.tab": "",
|
||||
"settings.appearance.theme.dark": "",
|
||||
"settings.appearance.theme.desc": "",
|
||||
"settings.appearance.theme.label": "",
|
||||
"settings.appearance.theme.light": "",
|
||||
"settings.appearance.theme.system": "",
|
||||
"settings.extraFields.addChoice": "",
|
||||
"settings.extraFields.addChoicesFirst": "",
|
||||
"settings.extraFields.addEntityField": "",
|
||||
"settings.extraFields.booleanFalse": "Nee",
|
||||
"settings.extraFields.booleanTrue": "Ja",
|
||||
"settings.extraFields.deleteConfirm": "Veld {{name}} verwijderen?",
|
||||
"settings.extraFields.description.intro": "Hier kunt u extra aangepaste velden toevoegen aan uw entiteiten.",
|
||||
"settings.extraFields.deleteConfirm": "Veld {{name}} van {{entity}} verwijderen?",
|
||||
"settings.extraFields.description.constraints": "Zodra een veld is toegevoegd, kunt u de key of het type ervan niet wijzigen, en voor velden met keuzetypes kunt u geen keuzes verwijderen of de meervoudige velden wijzigen. Als u een veld verwijdert, worden de bijbehorende gegevens voor alle entiteiten verwijderd.",
|
||||
"settings.extraFields.description.intro": "Hier kunt u extra aangepaste velden toevoegen aan uw entiteiten.",
|
||||
"settings.extraFields.description.keyUsage": "De key is hoe andere programma's de gegevens lezen/schrijven, dus of uw aangepaste veld moet worden geïntegreerd met een derde partij programma, zorg ervoor dat u het correct instelt. De standaardwaarde wordt alleen toegepast op nieuwe items.",
|
||||
"settings.extraFields.description.tableViews": "Extra velden kunnen niet worden gesorteerd of gefilterd in de tabelweergaven.",
|
||||
"settings.extraFields.editorEdit": "",
|
||||
"settings.extraFields.editorNew": "",
|
||||
"settings.extraFields.errors.choiceNeeded": "",
|
||||
"settings.extraFields.errors.choicesRemoved": "",
|
||||
"settings.extraFields.errors.deleteFailed": "",
|
||||
"settings.extraFields.errors.keyFormat": "",
|
||||
"settings.extraFields.errors.nameRequired": "",
|
||||
"settings.extraFields.errors.saveFailed": "",
|
||||
"settings.extraFields.fieldType.boolean": "Booleaanse waarde",
|
||||
"settings.extraFields.fieldType.choice": "Keuze",
|
||||
"settings.extraFields.fieldType.datetime": "Datum/tijd",
|
||||
@@ -94,22 +460,36 @@
|
||||
"settings.extraFields.fieldType.integer": "Gehele getallen",
|
||||
"settings.extraFields.fieldType.integerRange": "Bereik van gehele getallen",
|
||||
"settings.extraFields.fieldType.text": "Tekst",
|
||||
"settings.extraFields.max": "",
|
||||
"settings.extraFields.min": "",
|
||||
"settings.extraFields.multiSuffix": "",
|
||||
"settings.extraFields.multiple": "",
|
||||
"settings.extraFields.namePlaceholder": "",
|
||||
"settings.extraFields.nonUniqueKeyError": "De key moet uniek zijn.",
|
||||
"settings.extraFields.none": "",
|
||||
"settings.extraFields.params.choices": "Keuzes",
|
||||
"settings.extraFields.params.defaultValue": "Standaardwaarde",
|
||||
"settings.extraFields.params.fieldType": "Type",
|
||||
"settings.extraFields.params.key": "Key",
|
||||
"settings.extraFields.params.key": "Sleutel",
|
||||
"settings.extraFields.params.name": "Naam",
|
||||
"settings.extraFields.params.order": "Volgorde",
|
||||
"settings.extraFields.params.unit": "Eenheid",
|
||||
"settings.extraFields.saveField": "",
|
||||
"settings.extraFields.tab": "Extra velden",
|
||||
"settings.general.baseUrl.label": "Basis-URL",
|
||||
"settings.general.baseUrl.tooltip": "De basis-URL die moet worden gebruikt bij het genereren van functies zoals QR-codes.",
|
||||
"settings.general.currency.desc": "",
|
||||
"settings.general.currency.label": "Valuta",
|
||||
"settings.general.roundPrices.label": "Afgeronde prijzen",
|
||||
"settings.general.roundPrices.tooltip": "Rond prijzen af op het dichtstbijzijnde gehele getal.",
|
||||
"settings.general.tab": "Algemeen",
|
||||
"settings.header": "Instellingen",
|
||||
"settings.language.desc": "",
|
||||
"settings.language.label": "",
|
||||
"settings.library.lowThreshold.desc": "",
|
||||
"settings.library.lowThreshold.label": "",
|
||||
"settings.library.tab": "",
|
||||
"sponsor": "Steun me op GitHub",
|
||||
"spool.fields.archived": "Gearchiveerd",
|
||||
"spool.fields.comment": "Opmerking",
|
||||
"spool.fields.filament": "Filament",
|
||||
@@ -133,7 +513,16 @@
|
||||
"spool.form.measurementType.length": "Lengte",
|
||||
"spool.form.measurementType.weight": "Gewicht",
|
||||
"spool.spool": "Spoelen",
|
||||
"topbar.addSpools": "",
|
||||
"topbar.searchPlaceholder": "",
|
||||
"unknown": "Onbekend",
|
||||
"validation.hexDigits": "",
|
||||
"validation.maxChars": "",
|
||||
"validation.mustBeGt": "",
|
||||
"validation.mustBeMax": "",
|
||||
"validation.mustBeMin": "",
|
||||
"validation.mustBeNumber": "",
|
||||
"validation.required": "",
|
||||
"vendor.fields.comment": "Opmerking",
|
||||
"vendor.fields.emptySpoolWeight": "Gewicht lege spoel",
|
||||
"vendor.fields.externalId": "Extern ID",
|
||||
|
||||
@@ -1,146 +1,663 @@
|
||||
{
|
||||
"add.addAndNew": "Dodaj i nowa",
|
||||
"add.addN_few": "Dodaj {{count}} szpule",
|
||||
"add.addN_many": "dodaj {{count}} szpul",
|
||||
"add.addN_one": "Dodaj {{count}} szpulę",
|
||||
"add.adding": "Dodawanie...",
|
||||
"add.advanced": "Parametry zaawansowane",
|
||||
"add.advancedNote": "gęstość, średnica, temperatury (uzupełniane z materiału)",
|
||||
"add.change": "zmień",
|
||||
"add.count": "Liczba",
|
||||
"add.createNew": "Utwórz nowy filament",
|
||||
"add.createNewSub": "brak w katalogu i w {{name}}",
|
||||
"add.dbUnavailable": "{{name}} niedostępna",
|
||||
"add.duplicate": "duplikuj",
|
||||
"add.duplicateNote": "Parametry, producent i cena zostały skopiowane. Nadaj nową nazwę i kolor.",
|
||||
"add.duplicateRename": "Nadal ma nazwę oryginału — zmień ją, żeby je rozróżnić.",
|
||||
"add.duplicateTitle": "Nowy filament · kopia „{{name}}”",
|
||||
"add.filamentNamePlaceholder": "np. PolyTerra Matte Sage",
|
||||
"add.fill.full": "Pełna",
|
||||
"add.fillLevel": "Poziom napełnienia",
|
||||
"add.importNote": "Ten filament trafi do katalogu po dodaniu szpul.",
|
||||
"add.inCatalog": "w katalogu",
|
||||
"add.locationHint": "Gdzie fizycznie trzymasz szpulę — półka, pudełko albo drukarka. Zostaw puste, jeśli wszystkie są w jednym miejscu.",
|
||||
"add.locationPlaceholder": "np. Półka A, Dry box 2, Drukarka 1",
|
||||
"add.manufacturerPlaceholder": "np. Polymaker",
|
||||
"add.nameHint": "Uwzględnij kolor — to on odróżnia filamenty od siebie.",
|
||||
"add.newFilament": "nowy filament",
|
||||
"add.newFilamentTitle": "Nowy filament",
|
||||
"add.noCatalog": "Brak filamentów w katalogu",
|
||||
"add.noManufacturer": "Brak producenta",
|
||||
"add.pickColor": "Wybierz kolor",
|
||||
"add.searchPlaceholder": "Szukaj w katalogu i {{name}}...",
|
||||
"add.searching": "Szukanie...",
|
||||
"add.section.filament": "Filament",
|
||||
"add.section.filamentNote": "Produkt na szpuli — jeden wpis na kolor.",
|
||||
"add.section.manufacturer": "Producent",
|
||||
"add.section.manufacturerNote": "Kto produkuje filament. Dodajesz raz, potem używasz dla wszystkich ich filamentów.",
|
||||
"add.section.spool": "Szpula",
|
||||
"add.section.spoolNote": "Fizyczne szpule dodawane do magazynu.",
|
||||
"add.section.spoolSharedNote": "Waga, waga szpuli i cena zostaną też zapisane jako domyślne dla nowego filamentu.",
|
||||
"add.spoolWeightPreset.cardboard": "Karton {{weight}} g",
|
||||
"add.spoolWeightPreset.plastic": "Plastik {{weight}} g",
|
||||
"add.spoolWeightPresetsLead": "Zacznij od typowej szpuli:",
|
||||
"add.step2": "Krok 2 · dane szpuli",
|
||||
"add.step2New": "Krok 2 · dane filamentu i szpuli",
|
||||
"add.summary_few": "{{count}} szpule",
|
||||
"add.summary_many": "{{count}} szpul",
|
||||
"add.summary_one": "{{count}} szpula",
|
||||
"add.typeToSearchAll": "Wpisz, aby przeszukać tysiące filamentów",
|
||||
"add.typeToSearchMatches": "Wpisz, aby szukać — brak wyników",
|
||||
"add.useExisting": "użyj istniejącego",
|
||||
"add.vendorHint.existing": "Używany istniejący producent „{{name}}”",
|
||||
"add.vendorHint.new": "Zostanie utworzony nowy producent „{{name}}”",
|
||||
"add.vendorHint.optional": "Opcjonalnie — zostaw puste, jeśli bez producenta",
|
||||
"add.weightPresets": "Typowe rozmiary rolek",
|
||||
"add.yourCatalog": "Twój katalog",
|
||||
"buttons.apply": "Zastosuj",
|
||||
"buttons.archive": "Archiwizuj",
|
||||
"buttons.cancel": "Anuluj",
|
||||
"buttons.clear": "Wyczyść",
|
||||
"buttons.close": "Zamknij",
|
||||
"buttons.delete": "Usuń",
|
||||
"buttons.edit": "Edytuj",
|
||||
"buttons.filter": "Filtruj",
|
||||
"buttons.save": "Zapisz",
|
||||
"buttons.showArchived": "Pokaż zarchiwizowane",
|
||||
"buttons.unArchive": "Odarchiwizuj",
|
||||
"buttons.showLotNumbers": "Pokaż numery partii",
|
||||
"buttons.showNoSpools": "Pokaż filamenty bez szpul",
|
||||
"buttons.unArchive": "Przywróć",
|
||||
"changeFilament.action": "Zmień",
|
||||
"changeFilament.adoptWeight": "Ustaw pełną wagę tej szpuli na {{full}}",
|
||||
"changeFilament.adoptWeightHelp": "Zapisana jest jako {{current}}, z filamentu, który była wcześniej. Zużyta waga ({{used}}) zostaje w obu przypadkach, zostaje {{remaining}}.",
|
||||
"changeFilament.apply": "Zmień filament",
|
||||
"changeFilament.applying": "Zmienianie...",
|
||||
"changeFilament.current": "obecny",
|
||||
"changeFilament.done": "Filament zmieniony.",
|
||||
"changeFilament.failed": "Nie udało się zmienić filamentu.",
|
||||
"changeFilament.importNote": "Ten filament trafi do katalogu po zatwierdzeniu zmiany.",
|
||||
"changeFilament.intro": "Szpula #{{id}} zachowuje numer, lokalizację, daty i historię zużycia — zmienia się tylko filament.",
|
||||
"changeFilament.newTag": "nowy",
|
||||
"changeFilament.next": "Zmień na",
|
||||
"changeFilament.now": "Obecnie",
|
||||
"changeFilament.pickBelow": "Wybierz filament poniżej",
|
||||
"changeFilament.title": "Zmień filament",
|
||||
"changeFilament.useExisting": "Wybierz istniejący filament",
|
||||
"changeFilament.weightFollows": "Ta szpula nie ma własnej pełnej wagi, więc przejmuje ją z nowego filamentu: {{full}}, po już zużytych {{used}} zostaje {{remaining}}.",
|
||||
"changeVendor.action": "Zmień",
|
||||
"changeVendor.apply": "Zmień producenta",
|
||||
"changeVendor.applying": "Zmienianie...",
|
||||
"changeVendor.clearHint": "Zostaw ten filament bez producenta",
|
||||
"changeVendor.create": "Utwórz „{{name}}”",
|
||||
"changeVendor.createHint": "Nie ma go jeszcze na liście producentów — zostanie dodany",
|
||||
"changeVendor.current": "obecny",
|
||||
"changeVendor.done": "Producent zmieniony.",
|
||||
"changeVendor.emptySpool": "Pusta szpula {{value}}",
|
||||
"changeVendor.failed": "Nie udało się zmienić producenta.",
|
||||
"changeVendor.intro": "„{{name}}” zachowuje szpule, parametry i historię — zmienia się tylko producent, pod którym jest zapisany.",
|
||||
"changeVendor.next": "Zmień na",
|
||||
"changeVendor.noEmptySpool": "Brak wagi pustej szpuli",
|
||||
"changeVendor.noMatches": "Brak pasujących producentów",
|
||||
"changeVendor.none": "Brak producentów",
|
||||
"changeVendor.noneNote": "Bez marki",
|
||||
"changeVendor.now": "Obecnie",
|
||||
"changeVendor.pickBelow": "Wybierz producenta poniżej",
|
||||
"changeVendor.searchPlaceholder": "Szukaj lub wpisz producenta",
|
||||
"changeVendor.tareFollows": "Ten filament nie ma własnej wagi pustej szpuli, więc bierze ją od producenta. Po zmianie będzie to {{value}} — tyle waży pusta szpula przy ważeniu.",
|
||||
"changeVendor.tareGone": "Ten filament nie ma własnej wagi pustej szpuli i bierze {{current}} od producenta. Po zmianie nie będzie czego przejąć, dopóki nie ustawisz jej przy filamencie.",
|
||||
"changeVendor.title": "Zmień producenta",
|
||||
"changeVendor.willBeCreated": "Zostanie utworzony",
|
||||
"common.decrement": "Zmniejsz",
|
||||
"common.increment": "Zwiększ",
|
||||
"common.remove": "Usuń",
|
||||
"common.search": "Szukaj",
|
||||
"dashboard.addFieldHint": "Dodaj pole tekstowe lub wyboru do szpul w Ustawieniach, aby też po nim grupować",
|
||||
"dashboard.dashboard": "Pulpit",
|
||||
"dashboard.deleteGroup": "Usuń grupę",
|
||||
"dashboard.dragHint": "Przeciągnij szpulę na inną kartę, aby zmienić {{field}}, albo w obrębie karty, aby zmienić kolejność",
|
||||
"dashboard.dropHere": "upuść szpule tutaj",
|
||||
"dashboard.emptyHelp": "Ta strona grupuje szpule według wybranego pola — dodaj szpule, aby zacząć!",
|
||||
"dashboard.errorEmptyName": "Nazwa nie może być pusta",
|
||||
"dashboard.errorExists": "Grupa o tej nazwie już istnieje",
|
||||
"dashboard.errorRename": "Nie udało się zmienić nazwy grupy",
|
||||
"dashboard.lastUsed": "Ostatnio użyto {{time}} temu",
|
||||
"dashboard.newGroup": "Nowa grupa",
|
||||
"dashboard.newGroupName": "Nowa grupa {{n}}",
|
||||
"dashboard.reorderGroup": "Przeciągnij, aby zmienić kolejność grupy",
|
||||
"dashboard.spoolCount_few": "{{count}} szpule",
|
||||
"dashboard.spoolCount_many": "{{count}} szpul",
|
||||
"dashboard.spoolCount_one": "{{count}} szpula",
|
||||
"dashboard.unassigned": "Nieprzypisane",
|
||||
"datetime.done": "Gotowe",
|
||||
"datetime.hour": "Godzina",
|
||||
"datetime.minute": "Minuta",
|
||||
"datetime.nextMonth": "Następny miesiąc",
|
||||
"datetime.now": "Teraz",
|
||||
"datetime.pick": "Wybierz datę i godzinę",
|
||||
"datetime.prevMonth": "Poprzedni miesiąc",
|
||||
"datetime.time": "Czas",
|
||||
"documentTitle.dashboard.list": "Pulpit | Spoolman",
|
||||
"documentTitle.labels.list": "Etykiety | Spoolman",
|
||||
"documentTitle.library.list": "Biblioteka | Spoolman",
|
||||
"documentTitle.locations.list": "Lokalizacje | Spoolman",
|
||||
"documentTitle.settings.list": "Ustawienia | Spoolman",
|
||||
"filament.fields.addColor": "Dodaj kolor",
|
||||
"filament.fields.articleNumber": "Numer artykułu",
|
||||
"filament.fields.coaxial": "Koekstrudowany",
|
||||
"filament.fields.coaxial": "Współwytłaczany",
|
||||
"filament.fields.colorHex": "Kolor",
|
||||
"filament.fields.colorType": "Typ koloru",
|
||||
"filament.fields.comment": "Komentarz",
|
||||
"filament.fields.density": "Gęstość",
|
||||
"filament.fields.diameter": "Średnica",
|
||||
"filament.fields.externalId": "Zewnętrzne ID",
|
||||
"filament.fields.externalId": "ID zewnętrzne",
|
||||
"filament.fields.id": "ID",
|
||||
"filament.fields.longitudinal": "Wzdłużny",
|
||||
"filament.fields.material": "Materiał",
|
||||
"filament.fields.multiColor": "Wielo",
|
||||
"filament.fields.name": "Nazwa",
|
||||
"filament.fields.opacity": "Krycie",
|
||||
"filament.fields.price": "Cena",
|
||||
"filament.fields.registered": "Zarejestrowano",
|
||||
"filament.fields.settingsBedTemp": "Temperatura stołu",
|
||||
"filament.fields.settingsExtruderTemp": "Temperatura ekstrudera",
|
||||
"filament.fields.singleColor": "Pojedynczy",
|
||||
"filament.fields.removeColor": "Usuń kolor",
|
||||
"filament.fields.settingsBedTemp": "Temp. stołu",
|
||||
"filament.fields.settingsExtruderTemp": "Temp. extrudera",
|
||||
"filament.fields.singleColor": "Jednolity",
|
||||
"filament.fields.spoolWeight": "Waga szpuli",
|
||||
"filament.fields.vendor": "Producent",
|
||||
"filament.fields.weight": "Waga",
|
||||
"filament.fieldsHelp.articleNumber": "Np. EAN, UPC itp.",
|
||||
"filament.fieldsHelp.multiColorDirection": "Filamenty mogą mieć wiele kolorów na dwa sposoby: Kolory mogą się ciągnąć równolegle na całej długości filamentu lub kolory filamentu mogą się zmieniać na długości filamentu.",
|
||||
"filament.fieldsHelp.spoolWeight": "Waga pustej szpuli. Używana do określenia ciężaru szpuli.",
|
||||
"filament.fieldsHelp.weight": "Waga filamentu na pełnej szpuli (waga netto). Nie powinno to obejmować wagi samej szpuli, a jedynie filamentu. Jest to zwykle napisane na opakowaniu.",
|
||||
"filament.fieldsHelp.articleNumber": "Np. EAN, UPC itd.",
|
||||
"filament.fieldsHelp.multiColorDirection": "Filament może mieć kilka kolorów na dwa sposoby: przez współwytłaczanie, jak dwukolorowe filamenty o stałym układzie barw, albo przez zmianę wzdłużną, jak filamenty gradientowe, których kolor przechodzi wzdłuż szpuli.",
|
||||
"filament.fieldsHelp.spoolWeight": "Waga pustej szpuli. Służy do wyliczenia zmierzonej wagi szpuli. Nie wiesz ile? Kartonowe zwykle ważą 130–150 g, plastikowe 180–250 g — dokładną wartość dostaniesz, ważąc szpulę po zużyciu filamentu.",
|
||||
"filament.fieldsHelp.weight": "Waga filamentu na pełnej szpuli (masa netto). Nie wliczaj samej szpuli, tylko filament. To zwykle to, co jest napisane na opakowaniu.",
|
||||
"filament.filament": "Filamenty",
|
||||
"footer.documentation": "Dokumentacja",
|
||||
"footer.reportIssue": "Zgłoś problem",
|
||||
"footer.updateAvailable": "Nowa wersja: v{{version}}",
|
||||
"help.help": "Pomoc",
|
||||
"kofi": "Daj napiwek na Ko-fi",
|
||||
"inspector.addSpoolsOfThis": "Dodaj szpule tego filamentu",
|
||||
"inspector.adjustFailed": "Nie udało się skorygować wagi.",
|
||||
"inspector.adjustHelp": "Wartość dodatnia zużywa filament, ujemna dodaje go z powrotem.",
|
||||
"inspector.adjustWeight": "Skoryguj wagę",
|
||||
"inspector.apply": "Zastosuj",
|
||||
"inspector.applying": "Stosowanie...",
|
||||
"inspector.colorHex": "Kolor hex",
|
||||
"inspector.consumeAmount": "Ilość do zużycia:",
|
||||
"inspector.defaultFrom.filament": "{{value}} · domyślne filamentu",
|
||||
"inspector.defaultFrom.manufacturer": "{{value}} · domyślne producenta",
|
||||
"inspector.delete.deleting": "Usuwanie...",
|
||||
"inspector.delete.errorGone": "Ten element był już usunięty.",
|
||||
"inspector.delete.errorSpoolsExist": "Nie można usunąć tego filamentu — nadal używają go szpule.",
|
||||
"inspector.delete.errorUnknown": "Usuwanie nie powiodło się. Szczegóły w logach serwera.",
|
||||
"inspector.delete.filament": "Usuń filament",
|
||||
"inspector.delete.filamentBlockedHint": "Najpierw usuń te szpule. Sama archiwizacja nie wystarczy.",
|
||||
"inspector.delete.filamentBlockedTitle": "Tego filamentu nie można usunąć",
|
||||
"inspector.delete.filamentBlocked_few": "{{count}} szpule nadal używają „{{name}}”, w tym zarchiwizowane.",
|
||||
"inspector.delete.filamentBlocked_many": "{{count}} szpul nadal używa „{{name}}”, w tym zarchiwizowane.",
|
||||
"inspector.delete.filamentBlocked_one": "{{count}} szpula nadal używa „{{name}}”, w tym zarchiwizowane.",
|
||||
"inspector.delete.filamentBody": "„{{name}}” zostanie usunięty z katalogu. Tej operacji nie można cofnąć.",
|
||||
"inspector.delete.filamentDone": "Filament usunięty.",
|
||||
"inspector.delete.filamentTitle": "Usunąć ten filament?",
|
||||
"inspector.delete.spool": "Usuń szpulę",
|
||||
"inspector.delete.spoolBody": "Szpula #{{id}} „{{name}}” zostanie usunięta wraz z historią zużycia. Tej operacji nie można cofnąć.",
|
||||
"inspector.delete.spoolDone": "Szpula usunięta.",
|
||||
"inspector.delete.spoolRemaining": "Zostało jeszcze {{weight}} filamentu. Zarchiwizuj ją, jeśli chcesz ją tylko odłożyć na bok.",
|
||||
"inspector.delete.spoolTitle": "Usunąć tę szpulę?",
|
||||
"inspector.delete.vendor": "Usuń producenta",
|
||||
"inspector.delete.vendorBody": "„{{name}}” zostanie usunięty. Tej operacji nie można cofnąć.",
|
||||
"inspector.delete.vendorDone": "Producent usunięty.",
|
||||
"inspector.delete.vendorOrphans_few": "{{count}} filamenty zostały zachowane, ale nie mają już producenta.",
|
||||
"inspector.delete.vendorOrphans_many": "{{count}} filamentów zostało zachowanych, ale nie mają już producenta.",
|
||||
"inspector.delete.vendorOrphans_one": "{{count}} filament został zachowany, ale nie ma już producenta.",
|
||||
"inspector.delete.vendorTitle": "Usunąć tego producenta?",
|
||||
"inspector.duplicateFilament": "Duplikuj",
|
||||
"inspector.empty": "Wybierz szpulę, filament albo producenta z listy, aby zobaczyć szczegóły.",
|
||||
"inspector.enterValidLength": "Podaj poprawną długość.",
|
||||
"inspector.enterValidWeight": "Podaj poprawną wagę.",
|
||||
"inspector.loading": "Wczytywanie...",
|
||||
"inspector.manageExtraFields": "Zarządzaj polami",
|
||||
"inspector.measuredHelp": "Całkowita waga szpuli + pozostałego filamentu, odczytana z wagi.",
|
||||
"inspector.multi": "wielo ×{{count}}",
|
||||
"inspector.newGross": "Nowa waga brutto:",
|
||||
"inspector.noExtraFields": "Na razie brak — dodaj własne pola na to, czego Spoolman nie śledzi.",
|
||||
"inspector.notFound": "Nie znaleziono tego elementu. Mógł zostać usunięty.",
|
||||
"inspector.ofRemaining": "z {{weight}} pozostało · {{length}} m",
|
||||
"inspector.openFilament": "Otwórz filament",
|
||||
"inspector.openLink": "Otwórz {{url}} w nowej karcie",
|
||||
"inspector.openManufacturer": "Otwórz producenta",
|
||||
"inspector.override.byFilament": "Nadpisane przez ten filament · {{value}}",
|
||||
"inspector.override.bySpool": "Nadpisane przez tę szpulę · {{value}}",
|
||||
"inspector.override.overridesFilament": "Nadpisuje filament · {{value}}",
|
||||
"inspector.override.overridesManufacturer": "Nadpisuje producenta · {{value}}",
|
||||
"inspector.specs": "Parametry — edycja w miejscu",
|
||||
"inspector.spoolsCount": "Szpule · {{count}}",
|
||||
"inspector.spoolsTotalRemaining": "{{weight}} łącznie",
|
||||
"inspector.used": "zużyto",
|
||||
"inspector.vendorSub_few": "{{count}} filamenty",
|
||||
"inspector.vendorSub_many": "{{count}} filamentów",
|
||||
"inspector.vendorSub_one": "{{count}} filament",
|
||||
"kofi": "Wesprzyj mnie na Ko-fi",
|
||||
"labels.addHead": "Dodaj",
|
||||
"labels.addQr": "Kod QR",
|
||||
"labels.addRect": "Prostokąt",
|
||||
"labels.addSwatch": "Próbka koloru",
|
||||
"labels.addText": "Tekst / pole",
|
||||
"labels.align": "Wyrównanie",
|
||||
"labels.alignCenter": "Do środka",
|
||||
"labels.alignLeft": "Do lewej",
|
||||
"labels.alignRight": "Do prawej",
|
||||
"labels.blank": "Nie masz jeszcze żadnych projektów etykiet.",
|
||||
"labels.bold": "Pogrubienie",
|
||||
"labels.canvasHint": "Przeciągnij, aby przesunąć · kliknij, aby zaznaczyć · uchwyty zmieniają rozmiar.",
|
||||
"labels.centerLogo": "Wyśrodkuj logo Spoolmana",
|
||||
"labels.chooseField": "Wybierz pole...",
|
||||
"labels.clearFill": "Usuń wypełnienie (sam obrys)",
|
||||
"labels.copies": "Kopie",
|
||||
"labels.cornerRadiusMm": "Promień narożnika",
|
||||
"labels.createFirst": "Utwórz pierwszą etykietę",
|
||||
"labels.cutGuides": "Linie cięcia",
|
||||
"labels.deleteConfirm": "Usunąć ten projekt etykiety?",
|
||||
"labels.deleteElement": "Usuń element",
|
||||
"labels.designName": "Nazwa projektu",
|
||||
"labels.designerDesc": "Projektuj etykiety z kodem QR z dowolnym polem szpuli, filamentu albo producenta, a potem drukuj je na arkuszach albo drukarce etykiet. Projekty są zapisywane na serwerze.",
|
||||
"labels.designerTitle": "Projektant etykiet",
|
||||
"labels.dpi": "Rozdzielczość",
|
||||
"labels.dpiHint": "Dopasuj do drukarki, żeby małe etykiety były ostre: 203 dpi dla większości termicznych drukarek etykiet, 300 lub więcej dla laserowych i atramentowych.",
|
||||
"labels.duplicate": "Duplikuj",
|
||||
"labels.exportDescAml": "Zapisuje jeden plik etykiety .aml na każdą wybraną etykietę, każda {{w}}×{{h}} mm. Otwiera się w aplikacjach LPAPI dołączanych do większości termicznych drukarek etykiet, które odczytują rozmiar fizyczny z pliku.",
|
||||
"labels.exportDescPng": "Zapisuje jeden obraz PNG na każdą wybraną etykietę, każda {{w}}×{{h}} mm.",
|
||||
"labels.exportFormat": "Format pliku",
|
||||
"labels.exportFormatOptions.aml": "Plik etykiety AML",
|
||||
"labels.exportFormatOptions.png": "Obraz PNG",
|
||||
"labels.fields.bedTemp": "Temp. stołu",
|
||||
"labels.fields.diameterMm": "Średnica (mm)",
|
||||
"labels.fields.groupVendor": "Producent",
|
||||
"labels.fields.initialG": "Początkowa (g)",
|
||||
"labels.fields.netWeightG": "Waga netto (g)",
|
||||
"labels.fields.remainingG": "Pozostało (g)",
|
||||
"labels.filamentsSelected_few": "Wybrano {{count}} filamenty",
|
||||
"labels.filamentsSelected_many": "Wybrano {{count}} filamentów",
|
||||
"labels.filamentsSelected_one": "Wybrano {{count}} filament",
|
||||
"labels.fill": "Wypełnienie",
|
||||
"labels.fitWidth": "Dopasuj szerokość do kolumn",
|
||||
"labels.fitWidthHint": "Ustaw szerokość etykiety tak, aby wybrana liczba kolumn wypełniła stronę.",
|
||||
"labels.fontMm": "Czcionka",
|
||||
"labels.gridInfo": "{{cols}} × {{rows}} = {{perPage}} etykiet / strona",
|
||||
"labels.hMm": "W",
|
||||
"labels.heightMm": "Wysokość",
|
||||
"labels.hintNowrap": "Tekst zostaje w jednej linii; wszystko poza szerokością jest obcinane.",
|
||||
"labels.hintSwatch": "Wypełniane kolorem(-ami) filamentu szpuli przy druku.",
|
||||
"labels.hintWrap": "Owiń pole, aby ukryć je, gdy jest puste:",
|
||||
"labels.imageDesc": "",
|
||||
"labels.imageZipNote": "Powyżej {{threshold}} etykiet pliki są pakowane do jednego ZIP-a.",
|
||||
"labels.insertField": "Wstaw pole",
|
||||
"labels.kind.qr": "Kod QR",
|
||||
"labels.kind.rect": "Prostokąt",
|
||||
"labels.kind.swatch": "Próbka",
|
||||
"labels.kind.text": "Tekst",
|
||||
"labels.labelSize": "Rozmiar etykiety",
|
||||
"labels.labelType": "Typ etykiety",
|
||||
"labels.layout": "Układ",
|
||||
"labels.modeImage": "Pliki",
|
||||
"labels.modeLabel": "Drukarka etykiet",
|
||||
"labels.modeSheet": "Arkusz (siatka)",
|
||||
"labels.new": "Nowy",
|
||||
"labels.newText": "Nowy tekst",
|
||||
"labels.noDesignsOption": "Brak projektów",
|
||||
"labels.noFilaments": "Brak filamentów.",
|
||||
"labels.noSpools": "Brak szpul.",
|
||||
"labels.onePerLabel": "Jedna strona {{w}}×{{h}} mm na etykietę.",
|
||||
"labels.preparing": "Przygotowywanie...",
|
||||
"labels.preview": "Podgląd",
|
||||
"labels.previewWith": "Podgląd z",
|
||||
"labels.printN_few": "Drukuj {{count}} etykiety",
|
||||
"labels.printN_many": "Drukuj {{count}} etykiet",
|
||||
"labels.printN_one": "Drukuj {{count}} etykietę",
|
||||
"labels.radiusMm": "Promień",
|
||||
"labels.sampleData": "Dane przykładowe",
|
||||
"labels.saveAsFormat": "Zapisz jako {{format}}",
|
||||
"labels.saved": "Zapisano",
|
||||
"labels.saving": "Zapisywanie...",
|
||||
"labels.searchFilaments": "Szukaj filamentów...",
|
||||
"labels.searchSpools": "Szukaj szpul...",
|
||||
"labels.selectAllShort": "Wszystkie",
|
||||
"labels.selectAtLeastOne": "Wybierz przynajmniej jedną szpulę.",
|
||||
"labels.selectAtLeastOneFilament": "Wybierz przynajmniej jeden filament.",
|
||||
"labels.selectDesign": "Wybierz projekt etykiety",
|
||||
"labels.selectElement": "Zaznacz element do edycji albo dodaj nowy z palety.",
|
||||
"labels.selectNoneShort": "Żadne",
|
||||
"labels.selectRecentHint": "Zaznacz szpule dodane w ciągu ostatnich 24 godzin",
|
||||
"labels.selectRecentShort": "Ostatnie ({{count}})",
|
||||
"labels.showingFilament": "Pokazywany filament #{{id}}",
|
||||
"labels.showingReal": "Pokazywane rzeczywiste dane szpuli.",
|
||||
"labels.showingSpool": "Pokazywana szpula #{{id}}",
|
||||
"labels.showingTags": "Pola widać jako tagi, dopóki nie wybierzesz szpuli powyżej.",
|
||||
"labels.sizeMm": "Rozmiar",
|
||||
"labels.skipHint": "Pomiń pozycje zostawia tyle pustych komórek przed pierwszą etykietą, żebyś mógł użyć częściowo zużytego arkusza: policz już oderwane etykiety, od lewej do prawej od góry.",
|
||||
"labels.sortHint": "Sortuj szpule",
|
||||
"labels.sortId": "#",
|
||||
"labels.sortNewest": "Najnowsze",
|
||||
"labels.stroke": "Obrys",
|
||||
"labels.strokeMm": "Obrys",
|
||||
"labels.tabDesign": "Projekt",
|
||||
"labels.tabPrint": "Druk",
|
||||
"labels.textTemplate": "Tekst / szablon",
|
||||
"labels.typeFilament": "Filament",
|
||||
"labels.typeHint": "Etykiety filamentu pomijają pola tylko szpuli, a ich kod QR prowadzi do filamentu, nie do szpuli.",
|
||||
"labels.typeSpool": "Szpula",
|
||||
"labels.unknownFilament": "Nieznany filament",
|
||||
"labels.wMm": "S",
|
||||
"labels.widthMm": "Szerokość",
|
||||
"labels.wrapText": "Zawijaj tekst",
|
||||
"labels.xMm": "X",
|
||||
"labels.yMm": "Y",
|
||||
"library.apiError": "Nie udało się połączyć z API Spoolmana. Czy backend działa?",
|
||||
"library.catalog.allFilaments": "Wszystkie filamenty",
|
||||
"library.catalog.allManufacturers": "Wszyscy producenci",
|
||||
"library.catalog.backToSpools": "Cofnij do szpul",
|
||||
"library.catalog.filamentCount_few": "{{count}} filamenty",
|
||||
"library.catalog.filamentCount_many": "{{count}} filamentów",
|
||||
"library.catalog.filamentCount_one": "{{count}} filament",
|
||||
"library.catalog.manufacturerCount_few": "{{count}} producenci",
|
||||
"library.catalog.manufacturerCount_many": "{{count}} producentów",
|
||||
"library.catalog.manufacturerCount_one": "{{count}} producent",
|
||||
"library.catalog.noManufacturer": "Brak producenta",
|
||||
"library.catalog.notSet": "Nie ustawiono",
|
||||
"library.catalog.switchList": "Przełącz listę",
|
||||
"library.catalog.unitFilaments": "filamenty",
|
||||
"library.catalog.unitManufacturers": "producenci",
|
||||
"library.collapseGroup": "Ukryj te szpule",
|
||||
"library.dateFilter.ago": "{{span}} temu",
|
||||
"library.dateFilter.between": "{{from}} – {{to}}",
|
||||
"library.dateFilter.customRange": "Własny zakres",
|
||||
"library.dateFilter.from": "Od",
|
||||
"library.dateFilter.last": "Ostatnie {{span}}",
|
||||
"library.dateFilter.never": "Nigdy",
|
||||
"library.dateFilter.olderThan": "Starsze niż {{span}}",
|
||||
"library.dateFilter.since": "Od {{date}}",
|
||||
"library.dateFilter.to": "Do (opcjonalnie)",
|
||||
"library.dateFilter.until": "Do {{date}}",
|
||||
"library.emptyBody": "Dodaj pierwszą szpulę, aby zacząć śledzić filament.",
|
||||
"library.emptyFiltered": "Żadne {{unit}} nie pasują do bieżących filtrów.",
|
||||
"library.emptyTitle": "Brak szpul",
|
||||
"library.expandGroup": "Pokaż te szpule",
|
||||
"library.filterBy": "Filtruj według",
|
||||
"library.groupBy": "Grupuj",
|
||||
"library.groupNone": "Brak (płaska lista)",
|
||||
"library.groupSpools_few": "{{count}} szpule",
|
||||
"library.groupSpools_many": "{{count}} szpul",
|
||||
"library.groupSpools_one": "{{count}} szpula",
|
||||
"library.nUnused": "×{{count}} nierozpoczętych",
|
||||
"library.noLocation": "brak lokalizacji",
|
||||
"library.noSpools": "Brak szpul",
|
||||
"library.noValues": "Brak wartości",
|
||||
"library.openGroup": "Otwórz {{name}}",
|
||||
"library.openManufacturer": "Otwórz producenta {{name}}",
|
||||
"library.resizeList": "Zmień szerokość listy (podwójne kliknięcie resetuje)",
|
||||
"library.reverseSort": "Odwróć kolejność sortowania",
|
||||
"library.section.extra": "Dodatkowe pola",
|
||||
"library.section.filament": "Filament",
|
||||
"library.section.spool": "Szpula",
|
||||
"library.section.vendor": "Producent",
|
||||
"library.showMore": "pokaż jeszcze {{count}}",
|
||||
"library.sort.nozzle": "Temp. dyszy",
|
||||
"library.sortBy": "Sortuj",
|
||||
"library.unassigned": "nieprzypisane",
|
||||
"library.unitGroups": "grupy",
|
||||
"library.unitSpools": "szpule",
|
||||
"library.unused": "nieużyta",
|
||||
"library.unusedGroup": "{{count}} nieużywanych · po {{weight}} g",
|
||||
"library.unusedGroupMixed": "{{count}} nieużywanych",
|
||||
"library.unusedSub": "po {{weight}} g · {{location}}",
|
||||
"library.unusedSubMixed": "{{location}}",
|
||||
"library.used": "użyta",
|
||||
"library.usedAgo": "użyto {{time}} temu",
|
||||
"library.viewMenu.browse": "Przeglądaj",
|
||||
"library.views": "Widoki biblioteki",
|
||||
"loading": "Wczytywanie",
|
||||
"locations.locations": "Lokalizacje",
|
||||
"locations.newLocation": "Nowa lokalizacja",
|
||||
"locations.noLocation": "Brak lokalizacji",
|
||||
"locations.noLocationsHelp": "Ta strona pozwala uporządkować szpule w lokalizacjach, dodaj kilka szpul aby rozpocząć!",
|
||||
"nav.labels": "Etykiety",
|
||||
"nav.library": "Biblioteka",
|
||||
"no": "Nie",
|
||||
"notifications.error": "Błąd (kod statusu: {{statusCode}})",
|
||||
"notifications.saveSuccessful": "Pomyślnie zapisano!",
|
||||
"notifications.saveSuccessful": "Zapisano pomyślnie!",
|
||||
"pagination.empty": "Brak {{unit}}",
|
||||
"pagination.next": "Następna strona",
|
||||
"pagination.pageSize": "Rozmiar strony",
|
||||
"pagination.perPage": "{{size}} / stronę",
|
||||
"pagination.prev": "Poprzednia strona",
|
||||
"pagination.range": "{{from}}–{{to}} z {{total}} {{unit}}",
|
||||
"printing.generic.columns": "Kolumny",
|
||||
"printing.generic.customSize": "Niestandardowy",
|
||||
"printing.generic.description": "Dostosuj poniższe ustawienia, aby uzyskać pożądany układ wydruku. Należy pamiętać, że drukarki i system operacyjny mogą stosować własne marginesy i skalowanie, więc może być konieczne wykonanie kilku prób i błędów, zanim wszystko będzie prawidłowe. Przed wydrukowaniem etykiet przetestuj je na zwykłym papierze.",
|
||||
"printing.generic.customSize": "Własny",
|
||||
"printing.generic.description": "Dopasuj ustawienia poniżej, aby uzyskać właściwy układ wydruku. Pamiętaj, że drukarka i system mogą dodać własne marginesy i skalowanie, więc zwykle trzeba trochę poeksperymentować. Przetestuj na zwykłej kartce, zanim zujesz właściwe etykiety.",
|
||||
"printing.generic.dimensions": "Wymiary",
|
||||
"printing.generic.helpMargin": "Marginesy powinny być skonfigurowane tak, aby pasowały do papieru etykietowego i drukarki, ich zmiana wpłynie na rozmiar całej siatki.",
|
||||
"printing.generic.helpPrinterMargin": "Bezpieczna strefa powinna być ustawiona tak, aby znajdowała się jak najbliżej krawędzi papieru, na którym drukarka może drukować, zmiana tych ustawień nie wpłynie na całą siatkę.",
|
||||
"printing.generic.horizontalSpacing": "Poziomy odstęp",
|
||||
"printing.generic.itemCopies": "Skopiuj element",
|
||||
"printing.generic.marginBottom": "Dolny margines",
|
||||
"printing.generic.marginLeft": "Lewy margines",
|
||||
"printing.generic.marginRight": "Prawy margines",
|
||||
"printing.generic.marginTop": "Górny margines",
|
||||
"printing.generic.gridTooWide": "Etykiety są szersze niż strona. Zmniejsz liczbę kolumn, odstępy albo marginesy.",
|
||||
"printing.generic.helpMargin": "Marginesy powinny odpowiadać papierowi etykiet i drukarce — ich zmiana wpływa na rozmiar całej siatki.",
|
||||
"printing.generic.helpPrinterMargin": "Strefę bezpieczną ustaw na to, jak blisko krawędzi papieru drukarka jeszcze drukuje. Zmiana tych wartości nie wpływa na całą siatkę.",
|
||||
"printing.generic.horizontalSpacing": "Odstęp poziomy",
|
||||
"printing.generic.itemCopies": "Kopie pozycji",
|
||||
"printing.generic.marginBottom": "Margines dolny",
|
||||
"printing.generic.marginLeft": "Margines lewy",
|
||||
"printing.generic.marginRight": "Margines prawy",
|
||||
"printing.generic.marginTop": "Margines górny",
|
||||
"printing.generic.paperSize": "Rozmiar papieru",
|
||||
"printing.generic.printerMarginBottom": "Bezpieczna strefa od dołu",
|
||||
"printing.generic.printerMarginLeft": "Bezpieczna strefa po lewej",
|
||||
"printing.generic.printerMarginRight": "Bezpieczna strefa po prawej",
|
||||
"printing.generic.printerMarginTop": "Bezpieczna strefa od góry",
|
||||
"printing.generic.printerMarginBottom": "Strefa bezpieczna dół",
|
||||
"printing.generic.printerMarginLeft": "Strefa bezpieczna lewo",
|
||||
"printing.generic.printerMarginRight": "Strefa bezpieczna prawo",
|
||||
"printing.generic.printerMarginTop": "Strefa bezpieczna góra",
|
||||
"printing.generic.saveAsImage": "Zapisz jako obraz",
|
||||
"printing.generic.skipItems": "Pomiń elementy",
|
||||
"printing.generic.verticalSpacing": "Pionowy odstęp",
|
||||
"printing.generic.skipItems": "Pomiń pozycje",
|
||||
"printing.generic.verticalSpacing": "Odstęp pionowy",
|
||||
"printing.qrcode.button": "Drukuj etykiety",
|
||||
"printing.qrcode.useHTTPUrl.label": "Link kodu QR",
|
||||
"printing.qrcode.useHTTPUrl.options.default": "Domyślne",
|
||||
"printing.qrcode.customUrl.caveat": "Własny URL nie wróci skanem do Spoolmana — użyj go, żeby kod QR otwierał zewnętrzną aplikację albo inny host.",
|
||||
"printing.qrcode.customUrl.fieldsHint": "Pola etykiet również działają, na przykład",
|
||||
"printing.qrcode.customUrl.hint": "Wstaw identyfikator szpuli w dowolnym miejscu za pomocą placeholdera",
|
||||
"printing.qrcode.customUrl.label": "Własny szablon URL",
|
||||
"printing.qrcode.useHTTPUrl.label": "Link w kodzie QR",
|
||||
"printing.qrcode.useHTTPUrl.options.custom": "Własny URL",
|
||||
"printing.qrcode.useHTTPUrl.options.default": "Domyślny",
|
||||
"printing.qrcode.useHTTPUrl.options.url": "URL",
|
||||
"printing.qrcode.useHTTPUrl.preview": "Podgląd:",
|
||||
"printing.qrcode.useHTTPUrl.tooltip": "Zostanie użyty link który będzie działał tylko gdy zostanie zeskanowany przez funkcję skanowania Spoolmana (Domyślna opcja). Link URL używa bazowego URL ustawionego w ustawieniach lub aktualnego URL strony jeżeli nie jest ustawiony w ustawieniach.",
|
||||
"printing.qrcode.useHTTPUrl.tooltip": "Domyślnie tworzy kod czytelny tylko dla własnego skanera Spoolmana. Opcja URL tworzy zwykły link sieciowy, który otworzy dowolny skaner — na podstawie podstawowego adresu URL z ustawień lub adresu tej witryny, jeśli ustawienie jest puste.",
|
||||
"printing.spoolSelect.selectedTotal_few": "Wybrano {{count}} szpule",
|
||||
"printing.spoolSelect.selectedTotal_many": "Wybrano {{count}} szpul",
|
||||
"printing.spoolSelect.selectedTotal_one": "Wybrano {{count}} szpulę",
|
||||
"scanner.description": "Zeskanuj kod QR Spoolman, aby wyświetlić szczegółowe informacje o szpuli.",
|
||||
"scanner.error.insecureContext": "Strona nie jest dostarczana przez HTTPS.",
|
||||
"scanner.camera": "Kamera",
|
||||
"scanner.cameraNumbered": "Kamera {{number}}",
|
||||
"scanner.description": "Zeskanuj kod QR Spoolmana, aby zobaczyć szczegóły szpuli.",
|
||||
"scanner.error.inUse": "Kamera jest już używana przez inną aplikację.",
|
||||
"scanner.error.insecureContext": "Strona nie jest serwowana przez HTTPS.",
|
||||
"scanner.error.notAllowed": "Nie zezwolono na dostęp do kamery.",
|
||||
"scanner.error.notFound": "Nie znaleziono kamery.",
|
||||
"scanner.error.streamApiNotSupported": "Przeglądarka nie obsługuje API MediaStream.",
|
||||
"scanner.error.streamApiNotSupported": "Przeglądarka nie obsługuje MediaStream API.",
|
||||
"scanner.error.unknown": "Wystąpił nieznany błąd. ({{error}})",
|
||||
"scanner.starting": "Uruchamianie kamery...",
|
||||
"scanner.title": "Skaner kodów QR",
|
||||
"search.browseAll": "Przeglądaj wszystko",
|
||||
"search.colorHint": "Nazwy kolorów trzeba wpisywać po angielsku.",
|
||||
"search.hint": "Wyszukuj szpule, filamenty i producentów według nazwy, koloru, materiału lub dowolnego pola.",
|
||||
"search.moreSpools": "+{{count}} więcej",
|
||||
"search.noResults": "Brak wyników",
|
||||
"search.searching": "Szukanie...",
|
||||
"search.section.filaments": "Filamenty",
|
||||
"search.section.spools": "Szpule",
|
||||
"search.section.vendors": "Producenci",
|
||||
"search.threshold": "Dopasowanie koloru",
|
||||
"search.unknownFilament": "Nieznany filament",
|
||||
"settings.appearance.tab": "Wygląd",
|
||||
"settings.appearance.theme.dark": "Ciemny",
|
||||
"settings.appearance.theme.desc": "Motyw kolorystyczny (tylko ta przeglądarka)",
|
||||
"settings.appearance.theme.label": "Motyw",
|
||||
"settings.appearance.theme.light": "Jasny",
|
||||
"settings.appearance.theme.system": "Systemowy",
|
||||
"settings.extraFields.addChoice": "dodaj opcję...",
|
||||
"settings.extraFields.addChoicesFirst": "Najpierw dodaj opcje",
|
||||
"settings.extraFields.addEntityField": "Dodaj pole {{entity}}",
|
||||
"settings.extraFields.booleanFalse": "Nie",
|
||||
"settings.extraFields.booleanTrue": "Tak",
|
||||
"settings.extraFields.deleteConfirm": "Usunąć pole {{name}}?",
|
||||
"settings.extraFields.description.intro": "Tutaj możesz dodać dodatkowe pola niestandardowe do swoich podmiotów.",
|
||||
"settings.extraFields.description.constraints": "Po dodaniu pola nie można zmienić jego klucza ani typu, a w przypadku pól typu wyboru nie można usunąć wyborów ani zmienić stanu wielokrotnego wyboru. Jeśli usuniesz pole, powiązane dane dla wszystkich podmiotów zostaną usunięte.",
|
||||
"settings.extraFields.description.keyUsage": "Klucz jest tym, co inne programy odczytują/zapisują jako dane, więc jeśli twoje niestandardowe pole ma być zintegrowane z programem innej firmy, upewnij się, że ustawiłeś je poprawnie. Wartość domyślna jest stosowana tylko do nowych elementów.",
|
||||
"settings.extraFields.description.tableViews": "Dodatkowych pól nie można sortować ani filtrować w widokach tabeli.",
|
||||
"settings.extraFields.fieldType.boolean": "Wartość logiczna",
|
||||
"settings.extraFields.deleteConfirm": "Usunąć pole {{name}} na {{entity}}?",
|
||||
"settings.extraFields.description.constraints": "Po dodaniu pola nie zmienisz już klucza ani typu, a w polach wyboru nie usuniesz opcji ani nie zmienisz trybu wielokrotnego wyboru. Usunięcie pola kasuje powiązane dane ze wszystkich encji.",
|
||||
"settings.extraFields.description.intro": "Tutaj dodasz własne dodatkowe pola do encji.",
|
||||
"settings.extraFields.description.keyUsage": "Klucz to nazwa, pod którą inne programy odczytują i zapisują dane. Jeśli pole ma się integrować z zewnętrznym programem, ustaw go poprawnie. Wartość domyślna dotyczy tylko nowych elementów.",
|
||||
"settings.extraFields.description.tableViews": "Dodatkowe pola można pokazywać i sortować w widokach tabeli. Pola wyboru i logiczne dają tam też filtry, a wszystkie typy obsługują filtrowanie pustych wartości.",
|
||||
"settings.extraFields.editorEdit": "Edytuj pole {{entity}}",
|
||||
"settings.extraFields.editorNew": "Nowe pole {{entity}}",
|
||||
"settings.extraFields.errors.choiceNeeded": "Pole wyboru wymaga przynajmniej jednej opcji.",
|
||||
"settings.extraFields.errors.choicesRemoved": "Istniejących opcji nie można usunąć: {{choices}}.",
|
||||
"settings.extraFields.errors.deleteFailed": "Nie udało się usunąć pola.",
|
||||
"settings.extraFields.errors.keyFormat": "Klucz może zawierać tylko małe litery, cyfry i podkreślenia.",
|
||||
"settings.extraFields.errors.nameRequired": "Nazwa jest wymagana.",
|
||||
"settings.extraFields.errors.saveFailed": "Nie udało się zapisać pola.",
|
||||
"settings.extraFields.fieldType.boolean": "Logiczne",
|
||||
"settings.extraFields.fieldType.choice": "Wybór",
|
||||
"settings.extraFields.fieldType.datetime": "Data i Czas",
|
||||
"settings.extraFields.fieldType.float": "Liczba zmiennoprzecinkowa",
|
||||
"settings.extraFields.fieldType.floatRange": "Zakres",
|
||||
"settings.extraFields.fieldType.integer": "Liczba całkowita",
|
||||
"settings.extraFields.fieldType.integerRange": "Zakres liczb",
|
||||
"settings.extraFields.fieldType.datetime": "Data i czas",
|
||||
"settings.extraFields.fieldType.float": "Zmiennoprzecinkowa",
|
||||
"settings.extraFields.fieldType.floatRange": "Zakres zmiennoprzecinkowy",
|
||||
"settings.extraFields.fieldType.integer": "Całkowita",
|
||||
"settings.extraFields.fieldType.integerRange": "Zakres całkowity",
|
||||
"settings.extraFields.fieldType.text": "Tekst",
|
||||
"settings.extraFields.max": "maks.",
|
||||
"settings.extraFields.min": "min.",
|
||||
"settings.extraFields.multiSuffix": " · multi",
|
||||
"settings.extraFields.multiple": "Wiele",
|
||||
"settings.extraFields.namePlaceholder": "Nazwa wyświetlana",
|
||||
"settings.extraFields.nonUniqueKeyError": "Klucz musi być unikalny.",
|
||||
"settings.extraFields.params.choices": "Wybory",
|
||||
"settings.extraFields.params.defaultValue": "Domyślna wartość",
|
||||
"settings.extraFields.none": "Brak dodatkowych pól {{entity}}.",
|
||||
"settings.extraFields.params.choices": "Opcje",
|
||||
"settings.extraFields.params.defaultValue": "Wartość domyślna",
|
||||
"settings.extraFields.params.fieldType": "Typ",
|
||||
"settings.extraFields.params.key": "Klucz",
|
||||
"settings.extraFields.params.name": "Nazwa",
|
||||
"settings.extraFields.params.order": "Kolejność",
|
||||
"settings.extraFields.params.unit": "Jednostka",
|
||||
"settings.extraFields.tab": "Dodatkowe parametry",
|
||||
"settings.extraFields.reorderChoice": "Przeciągnij albo użyj strzałek, aby zmienić kolejność tej opcji.",
|
||||
"settings.extraFields.saveField": "Zapisz pole",
|
||||
"settings.extraFields.tab": "Dodatkowe pola",
|
||||
"settings.general.baseUrl.label": "Bazowy URL",
|
||||
"settings.general.baseUrl.tooltip": "Bazowy URL zostanie użyty podczas generowania QR code oraz w innych funkcjonalnościach.",
|
||||
"settings.general.baseUrl.tooltip": "Bazowy URL używany przy generowaniu m.in. kodów QR.",
|
||||
"settings.general.currency.desc": "Trzyliterowy kod ISO (np. PLN, EUR, USD) używany przy cenach",
|
||||
"settings.general.currency.label": "Waluta",
|
||||
"settings.general.roundPrices.label": "Zaokrąglone ceny",
|
||||
"settings.general.roundPrices.tooltip": "Zaokrąglij ceny do najbliższej liczby całkowitej.",
|
||||
"settings.general.roundPrices.label": "Zaokrąglaj ceny",
|
||||
"settings.general.roundPrices.tooltip": "Zaokrąglaj ceny do najbliższej liczby całkowitej.",
|
||||
"settings.general.tab": "Ogólne",
|
||||
"settings.header": "Ustawienia",
|
||||
"spool.fields.archived": "Zarchiwizowano",
|
||||
"settings.language.desc": "Język interfejsu (tylko ta przeglądarka)",
|
||||
"settings.language.label": "Język",
|
||||
"settings.library.lowThreshold.desc": "Szpule o wadze równej lub niższej są oznaczane na czerwono (tylko ta przeglądarka)",
|
||||
"settings.library.lowThreshold.label": "Próg niskiego stanu",
|
||||
"settings.library.tab": "Zachowanie biblioteki",
|
||||
"settings.scanner.autoNavigate.desc": "Automatycznie przechodź w tej przeglądarce do szpuli lub filamentu odczytanego przez czytnik tagów.",
|
||||
"settings.scanner.autoNavigate.label": "Automatyczna nawigacja",
|
||||
"settings.scanner.docs": "Jak skonfigurować czytnik tagów",
|
||||
"settings.scanner.lastSeen": "{{when}} temu",
|
||||
"settings.scanner.pair": "Sparuj przez przyłożenie tagu",
|
||||
"settings.scanner.reader.anyDesc": "Skanowanie z dowolnego czytnika otwiera szpule lub filamenty w tej przeglądarce. Możesz sparować konkretny czytnik, aby uzyskać większą kontrolę. Ten czytnik będzie również używany do dodawania nowych tagów do szpul i filamentów.",
|
||||
"settings.scanner.reader.label": "Czytnik tagów",
|
||||
"settings.scanner.reader.pairedDesc": "Tylko odczyty z tego czytnika otwierają szpule w tej przeglądarce.",
|
||||
"settings.scanner.recent": "Ostatnio używane czytniki",
|
||||
"settings.scanner.recentNone": "Brak zapamiętanych czytników. Skonfiguruj czytnik tagów i odczytaj dowolny tag, aby pojawił się tutaj.",
|
||||
"settings.scanner.tab": "Skanowanie tagów",
|
||||
"settings.scanner.unpair": "Używaj dowolnego czytnika",
|
||||
"settings.scanner.use": "Użyj tego czytnika",
|
||||
"settings.scanner.waiting": "Przyłóż dowolny tag do wybranego czytnika...",
|
||||
"sponsor": "Wesprzyj mnie na GitHubie",
|
||||
"spool.fields.archived": "Zarchiwizowana",
|
||||
"spool.fields.comment": "Komentarz",
|
||||
"spool.fields.filament": "Filament",
|
||||
"spool.fields.firstUsed": "Pierwsze użycie",
|
||||
"spool.fields.id": "ID",
|
||||
"spool.fields.lastUsed": "Ostatnie użycie",
|
||||
"spool.fields.location": "Lokalizacja",
|
||||
"spool.fields.lotNr": "Numer partii (LOT)",
|
||||
"spool.fields.lotNr": "Nr partii",
|
||||
"spool.fields.material": "Materiał",
|
||||
"spool.fields.measuredWeight": "Zmierzona waga",
|
||||
"spool.fields.price": "Cena",
|
||||
"spool.fields.registered": "Zarejestrowano",
|
||||
"spool.fields.remainingWeight": "Pozostała waga",
|
||||
"spool.fields.spoolWeight": "Waga szpuli",
|
||||
"spool.fields.usedWeight": "Zużyta waga",
|
||||
"spool.fieldsHelp.location": "Wpisz gdzie znajduje się szpula, jeśli masz wiele lokalizacji, w których przechowujesz szpule.",
|
||||
"spool.fieldsHelp.lotNr": "Numer partii producenta. Może być stosowany w celu zapewnienia jednolitego koloru wydruku w przypadku użycia wielu szpul.",
|
||||
"spool.fieldsHelp.measuredWeight": "Waga filamentu i szpuli.",
|
||||
"spool.fieldsHelp.price": "Cena pełnej szpuli. Jeśli nie ustawiona, cena filamentu będzie domyślna.",
|
||||
"spool.fieldsHelp.remainingWeight": "Ile filamentu pozostało na szpuli. W przypadku nowej szpuli powinno to odpowiadać wadze szpuli.",
|
||||
"spool.fieldsHelp.usedWeight": "Podaj ile filamentu użyto ze szpuli. Jeśli jest nowa, podaj 0g użycia.",
|
||||
"spool.fields.weight": "Waga",
|
||||
"spool.fieldsHelp.location": "Gdzie fizycznie trzymasz tę szpulę — półka, szuflada, dry box albo drukarka, w której jest załadowana. W bibliotece szpule są grupowane po lokalizacji, więc tak je potem znajdziesz.",
|
||||
"spool.fieldsHelp.lotNr": "Numer partii producenta. Przydaje się, gdy chcesz utrzymać ten sam odcień przy użyciu kilku szpul.",
|
||||
"spool.fieldsHelp.measuredWeight": "Ile ważą filament i szpula razem.",
|
||||
"spool.fieldsHelp.price": "Cena pełnej szpuli. Jeśli pusta, przyjmowana jest cena filamentu.",
|
||||
"spool.fieldsHelp.remainingWeight": "Ile filamentu zostało na szpuli. W nowej szpuli powinno to odpowiadać wadze netto pełnej rolki.",
|
||||
"spool.fieldsHelp.spoolWeight": "Ile waży ta szpula na pusto. Zostaw puste, aby brać wagę szpuli z filamentu, i ustaw, gdy ta konkretna się różni — przekręcona rolka albo rdzeń kartonowy zamieniony na plastikowy. To właśnie jest odejmowane od odczytu przy korekcie wagą zmierzoną, więc zła wartość przekłamuje, ile filamentu zostało.",
|
||||
"spool.fieldsHelp.usedWeight": "Ile filamentu zużyto z tej szpuli. Nowa szpula powinna mieć 0 g zużycia.",
|
||||
"spool.fieldsHelp.weight": "Ile filamentu miała ta szpula na pełno (masa netto, bez samej szpuli). Zostaw puste, aby brać wagę z filamentu, i ustaw, gdy ta konkretna się różni — niepełna rolka albo ten sam filament kupiony na większej.",
|
||||
"spool.form.measurementType.length": "Długość",
|
||||
"spool.form.measurementType.weight": "Waga",
|
||||
"spool.spool": "Szpule",
|
||||
"tags.add": "Dodaj tag",
|
||||
"tags.added": "Tag został połączony.",
|
||||
"tags.addedOn": "Dodano {{date}}",
|
||||
"tags.modal.alreadyHere": "Ten tag już identyfikuje tę szpulę.",
|
||||
"tags.modal.alreadyHereFilament": "Ten tag już identyfikuje ten filament.",
|
||||
"tags.modal.badUid": "UID tagu jest zapisem szesnastkowym, np. 04A2B3C4.",
|
||||
"tags.modal.checking": "Sprawdzanie...",
|
||||
"tags.modal.failed": "Nie udało się połączyć tagu.",
|
||||
"tags.modal.filamentNamed": "filament {{name}}",
|
||||
"tags.modal.free": "Ten tag nie jest jeszcze z niczym połączony.",
|
||||
"tags.modal.intro": "Po przyłożeniu tego tagu do czytnika zostanie znaleziona szpula #{{id}}.",
|
||||
"tags.modal.introFilament": "Dotknięcie tego tagu czytnikiem spowoduje znalezienie tego filamentu.",
|
||||
"tags.modal.lastSeenOn": "{{reader}} ostatnio odczytał {{uid}}.",
|
||||
"tags.modal.link": "Połącz tag",
|
||||
"tags.modal.linking": "Łączenie...",
|
||||
"tags.modal.move": "Przenieś go tutaj ze szpuli #{{id}}",
|
||||
"tags.modal.moveFailed": "Nie udało się przenieść tagu. Może on teraz nie być połączony z żadną szpulą — spróbuj połączyć go ponownie.",
|
||||
"tags.modal.moveFailedFilament": "Nie udało się przenieść tagu. Może być teraz niepowiązany z żadnym elementem — spróbuj połączyć go ponownie.",
|
||||
"tags.modal.moveHere": "Przenieś tutaj",
|
||||
"tags.modal.moving": "Przenoszenie...",
|
||||
"tags.modal.phoneReading": "Przyłóż tag do telefonu...",
|
||||
"tags.modal.phoneScan": "Odczytaj tag tym telefonem",
|
||||
"tags.modal.spoolNamed": "szpula #{{id}}, {{name}}",
|
||||
"tags.modal.spoolShort": "szpula #{{id}}",
|
||||
"tags.modal.takenBy": "Obecnie połączony z: {{spool}}.",
|
||||
"tags.modal.title": "Połącz tag",
|
||||
"tags.modal.uidHelp": "Separatory i wielkość liter nie mają znaczenia: 04:a2:b3:c4, 04-A2-B3-C4 oraz 04a2b3c4 oznaczają ten sam tag.",
|
||||
"tags.modal.uidLabel": "UID tagu",
|
||||
"tags.modal.uidPlaceholder": "04A2B3C4",
|
||||
"tags.modal.useLastSeen": "Użyj",
|
||||
"tags.modal.waitingAny": "Oczekiwanie na przyłożenie tagu do dowolnego czytnika.",
|
||||
"tags.modal.waitingOn": "Oczekiwanie na przyłożenie tagu do: {{reader}}.",
|
||||
"tags.moved": "Tag przeniesiono tutaj ze szpuli #{{id}}.",
|
||||
"tags.movedFromFilament": "Tag przeniesiony tutaj z filamentu {{name}}.",
|
||||
"tags.nfc.insecureContext": "Odczytywanie tagów wymaga bezpiecznego połączenia. Otwórz Spoolmana przez HTTPS, aby używać NFC telefonu.",
|
||||
"tags.nfc.notAllowed": "Ta witryna nie ma uprawnień do korzystania z NFC. Nadaj jej uprawnienie w ustawieniach witryny przeglądarki i spróbuj ponownie.",
|
||||
"tags.nfc.notReadable": "Czytnik NFC jest niedostępny — może go używać inna aplikacja.",
|
||||
"tags.nfc.notSupported": "Ten telefon nie obsługuje NFC albo funkcja NFC jest wyłączona w ustawieniach systemu.",
|
||||
"tags.nfc.unknown": "Nie udało się odczytać tagu.",
|
||||
"tags.none": "Brak połączonych tagów.",
|
||||
"tags.scan.openedFilament": "Zeskanowano tag: otwarto filament {{name}}.",
|
||||
"tags.scan.openedSpool": "Zeskanowano tag: otwarto szpulę nr {{id}}, {{name}}.",
|
||||
"tags.scan.unknown": "Nieznany tag {{uid}}. Otwórz szpulę lub filament, do którego należy, i użyj opcji „Dodaj tag”, aby go przypisać.",
|
||||
"tags.section": "Tagi",
|
||||
"tags.unlink": "Odłącz",
|
||||
"tags.unlinkBody": "Tag {{uid}} przestanie identyfikować tę szpulę. Na samym tagu nie są zapisywane żadne dane, więc możesz go ponownie połączyć z tą lub inną szpulą, kiedy tylko zechcesz.",
|
||||
"tags.unlinkBodyFilament": "Tag {{uid}} przestanie identyfikować ten filament. Na samym tagu nic nie jest zapisywane, więc możesz połączyć go ponownie — tutaj lub gdzie indziej — w dowolnym momencie.",
|
||||
"tags.unlinkFailed": "Nie udało się odłączyć tagu.",
|
||||
"tags.unlinkTitle": "Odłączyć ten tag?",
|
||||
"tags.unlinked": "Tag został odłączony.",
|
||||
"tags.unlinking": "Odłączanie...",
|
||||
"topbar.addSpools": "Dodaj szpule",
|
||||
"topbar.searchPlaceholder": "Szukaj — spróbuj \"red\" albo \"pla\"",
|
||||
"unknown": "Nieznane",
|
||||
"validation.hexDigits": "Podaj 6 albo 8 cyfr hex",
|
||||
"validation.maxChars": "Co najwyżej {{max}} znaków",
|
||||
"validation.mustBeGt": "Musi być większe niż {{value}}",
|
||||
"validation.mustBeMax": "Musi być {{value}} albo mniej",
|
||||
"validation.mustBeMin": "Musi być {{value}} albo więcej",
|
||||
"validation.mustBeNumber": "Musi być liczbą",
|
||||
"validation.required": "Wymagane",
|
||||
"vendor.fields.comment": "Komentarz",
|
||||
"vendor.fields.emptySpoolWeight": "Waga pustej szpuli",
|
||||
"vendor.fields.externalId": "Zewnętrzne ID",
|
||||
"vendor.fields.externalId": "ID zewnętrzne",
|
||||
"vendor.fields.id": "ID",
|
||||
"vendor.fields.name": "Nazwa",
|
||||
"vendor.fields.registered": "Zarejestrowano",
|
||||
"vendor.fieldsHelp.emptySpoolWeight": "Waga pustej szpuli od tego producenta.",
|
||||
"vendor.fieldsHelp.emptySpoolWeight": "Waga pustej szpuli tego producenta.",
|
||||
"vendor.showAsList": "Pokaż jako listę",
|
||||
"yes": "Tak"
|
||||
}
|
||||
@@ -1,17 +1,96 @@
|
||||
{
|
||||
"add.addAndNew": "Adicionar e Criar Outro",
|
||||
"add.addN_many": "Adicionar {{count}} carretéis",
|
||||
"add.addN_one": "Adicionar {{count}} carretel",
|
||||
"add.addN_other": "Adicionar {{count}} carretéis",
|
||||
"add.adding": "Adicionando...",
|
||||
"add.advanced": "Especificações avançadas",
|
||||
"add.advancedNote": "densidade, diâmetro, temperaturas (preenchido automaticamente a partir do material)",
|
||||
"add.change": "alterar",
|
||||
"add.count": "Quantidade",
|
||||
"add.createNew": "Criar um novo filamento",
|
||||
"add.createNewSub": "Ausente em seu catálogo ou no {{name}}",
|
||||
"add.dbUnavailable": "{{name}} indisponível",
|
||||
"add.duplicate": "duplicar",
|
||||
"add.duplicateNote": "As especificações, o fabricante e o preço foram copiados. Dê a ele um novo nome e uma nova cor.",
|
||||
"add.duplicateRename": "Ainda com o mesmo nome do original. Renomeie-o para diferenciá-los.",
|
||||
"add.duplicateTitle": "Novo filamento · cópia de “{{name}}”",
|
||||
"add.filamentNamePlaceholder": "por exemplo: PLA Dourado Silk",
|
||||
"add.fill.full": "Cheio",
|
||||
"add.fillLevel": "Quantidade de filamento",
|
||||
"add.importNote": "Este filamento será adicionado ao seu catálogo quando você adicionar os carretéis.",
|
||||
"add.inCatalog": "no catálogo",
|
||||
"add.locationHint": "Onde você guarda fisicamente o carretel: em uma prateleira, em uma caixa ou na impressora. Deixe em branco se você guardar todos eles no mesmo lugar.",
|
||||
"add.locationPlaceholder": "por ex.: Prateleira A, Secadora 2, Impressora 1",
|
||||
"add.manufacturerPlaceholder": "por exemplo: Polymaker",
|
||||
"add.nameHint": "Inclua a cor. É ela que diferencia os seus filamentos.",
|
||||
"add.newFilament": "novo filamento",
|
||||
"add.newFilamentTitle": "Novo filamento",
|
||||
"add.noCatalog": "Não há filamentos no seu catálogo",
|
||||
"add.noManufacturer": "Sem fabricante",
|
||||
"add.pickColor": "Escolher cor",
|
||||
"add.searchPlaceholder": "Pesquisar em seu catálogo e no {{name}}...",
|
||||
"add.searching": "Pesquisando...",
|
||||
"add.section.filament": "Filamento",
|
||||
"add.section.manufacturer": "Fabricante",
|
||||
"add.section.manufacturerNote": "Quem fabrica o filamento. É adicionado uma vez, depois é reutilizado em todos os filamentos do mesmo fabricante.",
|
||||
"add.spoolWeightPreset.cardboard": "",
|
||||
"add.spoolWeightPreset.plastic": "",
|
||||
"add.spoolWeightPresetsLead": "",
|
||||
"add.step2": "",
|
||||
"add.typeToSearchAll": "",
|
||||
"add.typeToSearchMatches": "",
|
||||
"add.useExisting": "",
|
||||
"add.vendorHint.existing": "",
|
||||
"add.vendorHint.new": "",
|
||||
"add.vendorHint.optional": "",
|
||||
"add.yourCatalog": "",
|
||||
"buttons.archive": "Arquivar",
|
||||
"buttons.cancel": "Cancelar",
|
||||
"buttons.clear": "Limpar",
|
||||
"buttons.close": "",
|
||||
"buttons.delete": "Excluir",
|
||||
"buttons.edit": "Editar",
|
||||
"buttons.filter": "Filtrar",
|
||||
"buttons.save": "Salvar",
|
||||
"buttons.showArchived": "Mostrar Arquivados",
|
||||
"buttons.unArchive": "Desarquivar",
|
||||
"common.decrement": "",
|
||||
"common.increment": "",
|
||||
"common.remove": "",
|
||||
"common.search": "",
|
||||
"dashboard.addFieldHint": "",
|
||||
"dashboard.dashboard": "",
|
||||
"dashboard.deleteGroup": "",
|
||||
"dashboard.dragHint": "",
|
||||
"dashboard.dropHere": "",
|
||||
"dashboard.emptyHelp": "",
|
||||
"dashboard.errorEmptyName": "",
|
||||
"dashboard.errorExists": "",
|
||||
"dashboard.errorRename": "",
|
||||
"dashboard.lastUsed": "",
|
||||
"dashboard.newGroup": "",
|
||||
"dashboard.newGroupName": "",
|
||||
"dashboard.reorderGroup": "",
|
||||
"dashboard.unassigned": "",
|
||||
"datetime.done": "",
|
||||
"datetime.hour": "",
|
||||
"datetime.minute": "",
|
||||
"datetime.nextMonth": "",
|
||||
"datetime.now": "",
|
||||
"datetime.pick": "",
|
||||
"datetime.prevMonth": "",
|
||||
"datetime.time": "",
|
||||
"documentTitle.dashboard.list": "",
|
||||
"documentTitle.labels.list": "",
|
||||
"documentTitle.library.list": "",
|
||||
"documentTitle.locations.list": "Locais | Spoolman",
|
||||
"documentTitle.settings.list": "",
|
||||
"filament.fields.addColor": "",
|
||||
"filament.fields.articleNumber": "Número do Artigo",
|
||||
"filament.fields.coaxial": "Coextrusada",
|
||||
"filament.fields.colorHex": "Cor",
|
||||
"filament.fields.colorType": "",
|
||||
"filament.fields.comment": "Comentário",
|
||||
"filament.fields.density": "Densidade",
|
||||
"filament.fields.diameter": "Diâmetro",
|
||||
@@ -23,6 +102,7 @@
|
||||
"filament.fields.name": "Nome",
|
||||
"filament.fields.price": "Preço",
|
||||
"filament.fields.registered": "Registrado",
|
||||
"filament.fields.removeColor": "",
|
||||
"filament.fields.settingsBedTemp": "Temperatura da Mesa",
|
||||
"filament.fields.settingsExtruderTemp": "Temperatura da Extrusora",
|
||||
"filament.fields.singleColor": "Única",
|
||||
@@ -31,23 +111,213 @@
|
||||
"filament.fields.weight": "Peso",
|
||||
"filament.fieldsHelp.articleNumber": "Por exemplo: EAN, UPC, etc.",
|
||||
"filament.fieldsHelp.multiColorDirection": "Os filamentos podem ter múltiplas cores de duas maneiras: por meio de coextrusão, como os filamentos bicolores com as cores consistentes ao longo do carretel, ou por meio de mudanças longitudinais de cor, como os filamentos gradientes que mudam as cores ao longo do carretel.",
|
||||
"filament.fieldsHelp.spoolWeight": "O peso de um carretel vazio. Usado para determinar o peso medido de um carretel.",
|
||||
"filament.fieldsHelp.spoolWeight": "O peso de um carretel vazio. Usado para determinar o peso medido de um carretel. Não tem certeza? Carretéis de papelão geralmente pesam entre 130 e 150 g, e os de plástico, entre 180 e 250 g. Para obter um valor exato, coloque o carretel em uma balança quando ele estiver vazio ou consulte o fabricante.",
|
||||
"filament.fieldsHelp.weight": "O peso do filamento de um carretel cheio (peso líquido). Isso não deve incluir o peso do carretel em si, apenas o filamento. É o que normalmente está escrito na embalagem.",
|
||||
"filament.filament": "Filamentos",
|
||||
"footer.documentation": "",
|
||||
"footer.reportIssue": "",
|
||||
"help.help": "Ajuda",
|
||||
"inspector.addSpoolsOfThis": "",
|
||||
"inspector.adjustFailed": "",
|
||||
"inspector.adjustHelp": "",
|
||||
"inspector.adjustWeight": "",
|
||||
"inspector.apply": "",
|
||||
"inspector.applying": "",
|
||||
"inspector.colorHex": "",
|
||||
"inspector.consumeAmount": "",
|
||||
"inspector.delete.deleting": "",
|
||||
"inspector.delete.errorGone": "",
|
||||
"inspector.delete.errorSpoolsExist": "",
|
||||
"inspector.delete.errorUnknown": "",
|
||||
"inspector.delete.filament": "",
|
||||
"inspector.delete.filamentBlockedHint": "",
|
||||
"inspector.delete.filamentBlockedTitle": "",
|
||||
"inspector.delete.filamentBody": "",
|
||||
"inspector.delete.filamentDone": "",
|
||||
"inspector.delete.filamentTitle": "",
|
||||
"inspector.delete.spool": "",
|
||||
"inspector.delete.spoolBody": "",
|
||||
"inspector.delete.spoolDone": "",
|
||||
"inspector.delete.spoolRemaining": "",
|
||||
"inspector.delete.spoolTitle": "",
|
||||
"inspector.delete.vendor": "",
|
||||
"inspector.delete.vendorBody": "",
|
||||
"inspector.delete.vendorDone": "",
|
||||
"inspector.delete.vendorTitle": "",
|
||||
"inspector.duplicateFilament": "",
|
||||
"inspector.empty": "",
|
||||
"inspector.enterValidLength": "",
|
||||
"inspector.enterValidWeight": "",
|
||||
"inspector.loading": "",
|
||||
"inspector.manageExtraFields": "",
|
||||
"inspector.measuredHelp": "",
|
||||
"inspector.multi": "",
|
||||
"inspector.newGross": "",
|
||||
"inspector.noExtraFields": "",
|
||||
"inspector.notFound": "",
|
||||
"inspector.ofRemaining": "",
|
||||
"inspector.openFilament": "",
|
||||
"inspector.openLink": "",
|
||||
"inspector.openManufacturer": "",
|
||||
"inspector.specs": "",
|
||||
"inspector.spoolsCount": "",
|
||||
"inspector.spoolsTotalRemaining": "",
|
||||
"inspector.used": "",
|
||||
"kofi": "Doe pelo Ko-fi",
|
||||
"labels.addHead": "",
|
||||
"labels.addQr": "",
|
||||
"labels.addRect": "",
|
||||
"labels.addSwatch": "",
|
||||
"labels.addText": "",
|
||||
"labels.align": "",
|
||||
"labels.alignCenter": "",
|
||||
"labels.alignLeft": "",
|
||||
"labels.alignRight": "",
|
||||
"labels.blank": "",
|
||||
"labels.bold": "",
|
||||
"labels.canvasHint": "",
|
||||
"labels.centerLogo": "",
|
||||
"labels.chooseField": "",
|
||||
"labels.clearFill": "",
|
||||
"labels.copies": "",
|
||||
"labels.cornerRadiusMm": "",
|
||||
"labels.createFirst": "",
|
||||
"labels.cutGuides": "",
|
||||
"labels.deleteConfirm": "",
|
||||
"labels.deleteElement": "",
|
||||
"labels.designName": "",
|
||||
"labels.designerDesc": "",
|
||||
"labels.designerTitle": "",
|
||||
"labels.dpi": "",
|
||||
"labels.dpiHint": "",
|
||||
"labels.duplicate": "",
|
||||
"labels.fields.bedTemp": "",
|
||||
"labels.fields.diameterMm": "",
|
||||
"labels.fields.groupVendor": "",
|
||||
"labels.fields.initialG": "",
|
||||
"labels.fields.netWeightG": "",
|
||||
"labels.fields.remainingG": "",
|
||||
"labels.fill": "",
|
||||
"labels.fitWidth": "",
|
||||
"labels.fitWidthHint": "",
|
||||
"labels.fontMm": "",
|
||||
"labels.gridInfo": "",
|
||||
"labels.hMm": "",
|
||||
"labels.heightMm": "",
|
||||
"labels.hintNowrap": "",
|
||||
"labels.hintSwatch": "",
|
||||
"labels.hintWrap": "",
|
||||
"labels.imageDesc": "",
|
||||
"labels.imageZipNote": "",
|
||||
"labels.insertField": "",
|
||||
"labels.kind.qr": "",
|
||||
"labels.kind.rect": "",
|
||||
"labels.kind.swatch": "",
|
||||
"labels.kind.text": "",
|
||||
"labels.labelSize": "",
|
||||
"labels.labelType": "",
|
||||
"labels.layout": "",
|
||||
"labels.modeImage": "",
|
||||
"labels.modeLabel": "",
|
||||
"labels.modeSheet": "",
|
||||
"labels.new": "",
|
||||
"labels.newText": "",
|
||||
"labels.noDesignsOption": "",
|
||||
"labels.noFilaments": "",
|
||||
"labels.noSpools": "",
|
||||
"labels.onePerLabel": "",
|
||||
"labels.preparing": "",
|
||||
"labels.preview": "",
|
||||
"labels.previewWith": "",
|
||||
"labels.radiusMm": "",
|
||||
"labels.sampleData": "",
|
||||
"labels.saved": "",
|
||||
"labels.saving": "",
|
||||
"labels.searchFilaments": "",
|
||||
"labels.searchSpools": "",
|
||||
"labels.selectAllShort": "",
|
||||
"labels.selectAtLeastOne": "",
|
||||
"labels.selectAtLeastOneFilament": "",
|
||||
"labels.selectDesign": "",
|
||||
"labels.selectElement": "",
|
||||
"labels.selectNoneShort": "",
|
||||
"labels.selectRecentHint": "",
|
||||
"labels.selectRecentShort": "",
|
||||
"labels.showingFilament": "",
|
||||
"labels.showingReal": "",
|
||||
"labels.showingSpool": "",
|
||||
"labels.showingTags": "",
|
||||
"labels.sizeMm": "",
|
||||
"labels.skipHint": "",
|
||||
"labels.sortHint": "",
|
||||
"labels.sortId": "",
|
||||
"labels.sortNewest": "",
|
||||
"labels.stroke": "",
|
||||
"labels.strokeMm": "",
|
||||
"labels.tabDesign": "",
|
||||
"labels.tabPrint": "",
|
||||
"labels.textTemplate": "",
|
||||
"labels.typeFilament": "",
|
||||
"labels.typeHint": "",
|
||||
"labels.typeSpool": "",
|
||||
"labels.unknownFilament": "",
|
||||
"labels.wMm": "",
|
||||
"labels.widthMm": "",
|
||||
"labels.wrapText": "",
|
||||
"labels.xMm": "",
|
||||
"labels.yMm": "",
|
||||
"library.apiError": "",
|
||||
"library.collapseGroup": "",
|
||||
"library.emptyBody": "",
|
||||
"library.emptyFiltered": "",
|
||||
"library.emptyTitle": "",
|
||||
"library.expandGroup": "",
|
||||
"library.filterBy": "",
|
||||
"library.groupBy": "",
|
||||
"library.groupNone": "",
|
||||
"library.nUnused": "",
|
||||
"library.noLocation": "",
|
||||
"library.noValues": "",
|
||||
"library.openGroup": "",
|
||||
"library.openManufacturer": "",
|
||||
"library.section.extra": "",
|
||||
"library.section.filament": "",
|
||||
"library.section.spool": "",
|
||||
"library.section.vendor": "",
|
||||
"library.showMore": "",
|
||||
"library.sort.nozzle": "",
|
||||
"library.sortBy": "",
|
||||
"library.unassigned": "",
|
||||
"library.unitGroups": "",
|
||||
"library.unitSpools": "",
|
||||
"library.unused": "",
|
||||
"library.unusedGroup": "",
|
||||
"library.unusedGroupMixed": "",
|
||||
"library.unusedSub": "",
|
||||
"library.unusedSubMixed": "",
|
||||
"library.used": "",
|
||||
"library.usedAgo": "",
|
||||
"loading": "Carregando",
|
||||
"locations.locations": "Locais",
|
||||
"locations.newLocation": "Novo Local",
|
||||
"locations.noLocation": "Sem Local",
|
||||
"locations.noLocationsHelp": "Esta página permite que você organize seus carretéis em locais, adicione alguns carretéis para começar!",
|
||||
"nav.labels": "",
|
||||
"nav.library": "",
|
||||
"no": "Não",
|
||||
"notifications.error": "Erro (código de status: {{statusCode}})",
|
||||
"notifications.saveSuccessful": "Salvo com sucesso!",
|
||||
"pagination.empty": "",
|
||||
"pagination.next": "",
|
||||
"pagination.pageSize": "",
|
||||
"pagination.perPage": "",
|
||||
"pagination.prev": "",
|
||||
"pagination.range": "",
|
||||
"printing.generic.columns": "Colunas",
|
||||
"printing.generic.customSize": "Personalizado",
|
||||
"printing.generic.description": "Ajuste as configurações abaixo para obter o layout de impressão desejado. Tenha em mente que as impressoras e o seu sistema operacional podem aplicar suas próprias margens e dimensionamento, portanto, pode ser necessário realizar algumas tentativas e erros antes que tudo esteja correto. Teste em um papel comum antes de imprimir nas etiquetas reais.",
|
||||
"printing.generic.dimensions": "Dimensões",
|
||||
"printing.generic.gridTooWide": "",
|
||||
"printing.generic.helpMargin": "As margens devem ser configuradas para corresponder às suas etiquetas e impressora. Alterá-las afetará o tamanho de toda a grade.",
|
||||
"printing.generic.helpPrinterMargin": "A Zona de Segurança deve ser definida para o quão próximo da borda do papel sua impressora pode imprimir. Alterá-la não afetará toda a grade.",
|
||||
"printing.generic.horizontalSpacing": "Espaçamento Horizontal",
|
||||
@@ -65,7 +335,11 @@
|
||||
"printing.generic.skipItems": "Pular Itens",
|
||||
"printing.generic.verticalSpacing": "Espaçamento Vertical",
|
||||
"printing.qrcode.button": "Imprimir Etiquetas",
|
||||
"printing.qrcode.customUrl.caveat": "",
|
||||
"printing.qrcode.customUrl.hint": "",
|
||||
"printing.qrcode.customUrl.label": "",
|
||||
"printing.qrcode.useHTTPUrl.label": "Endereço do código QR",
|
||||
"printing.qrcode.useHTTPUrl.options.custom": "",
|
||||
"printing.qrcode.useHTTPUrl.options.default": "Padrão",
|
||||
"printing.qrcode.useHTTPUrl.options.url": "URL",
|
||||
"printing.qrcode.useHTTPUrl.preview": "Pré-visualização:",
|
||||
@@ -74,19 +348,46 @@
|
||||
"printing.spoolSelect.selectedTotal_one": "{{count}} carretel selecionado",
|
||||
"printing.spoolSelect.selectedTotal_other": "{{count}} carretéis selecionados",
|
||||
"scanner.description": "Escaneie um código QR do Spoolman para ver detalhes sobre o carretel.",
|
||||
"scanner.error.inUse": "",
|
||||
"scanner.error.insecureContext": "A página não é servida por HTTPS.",
|
||||
"scanner.error.notAllowed": "Você não deu permissão de acesso à câmera.",
|
||||
"scanner.error.notFound": "Nenhuma câmera foi encontrada.",
|
||||
"scanner.error.streamApiNotSupported": "O navegador não oferece suporte à API MediaStream.",
|
||||
"scanner.error.unknown": "Ocorreu um erro desconhecido. ({{error}})",
|
||||
"scanner.starting": "",
|
||||
"scanner.title": "Leitor de Código QR",
|
||||
"search.colorHint": "",
|
||||
"search.noResults": "",
|
||||
"search.searching": "",
|
||||
"search.section.filaments": "",
|
||||
"search.section.spools": "",
|
||||
"search.section.vendors": "",
|
||||
"search.threshold": "",
|
||||
"search.unknownFilament": "",
|
||||
"settings.appearance.tab": "",
|
||||
"settings.appearance.theme.dark": "",
|
||||
"settings.appearance.theme.desc": "",
|
||||
"settings.appearance.theme.label": "",
|
||||
"settings.appearance.theme.light": "",
|
||||
"settings.appearance.theme.system": "",
|
||||
"settings.extraFields.addChoice": "",
|
||||
"settings.extraFields.addChoicesFirst": "",
|
||||
"settings.extraFields.addEntityField": "",
|
||||
"settings.extraFields.booleanFalse": "Não",
|
||||
"settings.extraFields.booleanTrue": "Sim",
|
||||
"settings.extraFields.deleteConfirm": "Apagar o campo {{name}}?",
|
||||
"settings.extraFields.deleteConfirm": "Apagar o campo {{name}} em {{entity}}?",
|
||||
"settings.extraFields.description.constraints": "Depois que um campo for adicionado, você não poderá alterar sua chave ou tipo, e para campos do tipo \"opção\" você não pode remover as opções ou alterar o estado da opção de \"múltipla de escolha\". Se você remover um campo, os dados associados a ele em todas as entidades serão excluídos.",
|
||||
"settings.extraFields.description.intro": "Aqui você pode adicionar campos personalizados extras às suas entidades.",
|
||||
"settings.extraFields.description.constraints": "Depois que um campo é adicionado, você não pode alterar sua chave ou tipo, e para campos do tipo \"escolha\" você não pode remover as opções ou alterar o estado de \"múltipla de escolha\". Se você remover um campo, os dados associados a ele em todas as entidades serão excluídos.",
|
||||
"settings.extraFields.description.keyUsage": "A chave é como outros programas leem/gravam os dados, portanto, se o seu campo personalizado for para uma integração com um programa de terceiros, certifique-se de configurá-lo corretamente. O valor padrão é aplicado somente a novos itens.",
|
||||
"settings.extraFields.description.tableViews": "Campos extras não podem ser ordenados ou filtrados nas visualizações de tabela.",
|
||||
"settings.extraFields.description.tableViews": "Campos extras não podem ser ordenados ou filtrados nas visualizações de tabela. Campos dos tipos \"opção\" e \"booleano\" também disponibilizam opções de filtragem nesses locais, e todos os tipos de campos extras oferecem suporte à filtragem de valores vazios.",
|
||||
"settings.extraFields.editorEdit": "",
|
||||
"settings.extraFields.editorNew": "",
|
||||
"settings.extraFields.errors.choiceNeeded": "",
|
||||
"settings.extraFields.errors.choicesRemoved": "",
|
||||
"settings.extraFields.errors.deleteFailed": "",
|
||||
"settings.extraFields.errors.keyFormat": "",
|
||||
"settings.extraFields.errors.nameRequired": "",
|
||||
"settings.extraFields.errors.saveFailed": "",
|
||||
"settings.extraFields.fieldType.boolean": "Booleano",
|
||||
"settings.extraFields.fieldType.choice": "Opção",
|
||||
"settings.extraFields.fieldType.datetime": "Data e Hora",
|
||||
@@ -95,7 +396,13 @@
|
||||
"settings.extraFields.fieldType.integer": "Inteiro",
|
||||
"settings.extraFields.fieldType.integerRange": "Intervalo de Inteiros",
|
||||
"settings.extraFields.fieldType.text": "Texto",
|
||||
"settings.extraFields.max": "",
|
||||
"settings.extraFields.min": "",
|
||||
"settings.extraFields.multiSuffix": "",
|
||||
"settings.extraFields.multiple": "",
|
||||
"settings.extraFields.namePlaceholder": "",
|
||||
"settings.extraFields.nonUniqueKeyError": "A chave deve ser única.",
|
||||
"settings.extraFields.none": "",
|
||||
"settings.extraFields.params.choices": "Opções",
|
||||
"settings.extraFields.params.defaultValue": "Valor Padrão",
|
||||
"settings.extraFields.params.fieldType": "Tipo",
|
||||
@@ -103,14 +410,21 @@
|
||||
"settings.extraFields.params.name": "Nome",
|
||||
"settings.extraFields.params.order": "Ordem",
|
||||
"settings.extraFields.params.unit": "Unidade",
|
||||
"settings.extraFields.saveField": "",
|
||||
"settings.extraFields.tab": "Campos Extras",
|
||||
"settings.general.baseUrl.label": "URL Base",
|
||||
"settings.general.baseUrl.tooltip": "A URL base a ser usada ao gerar recursos como códigos QR.",
|
||||
"settings.general.currency.desc": "",
|
||||
"settings.general.currency.label": "Moeda",
|
||||
"settings.general.roundPrices.label": "Arredondar preços",
|
||||
"settings.general.roundPrices.tooltip": "Arredonda os preços para o número inteiro mais próximo.",
|
||||
"settings.general.tab": "Geral",
|
||||
"settings.header": "Configurações",
|
||||
"settings.language.desc": "",
|
||||
"settings.language.label": "",
|
||||
"settings.library.lowThreshold.desc": "",
|
||||
"settings.library.lowThreshold.label": "",
|
||||
"settings.library.tab": "",
|
||||
"spool.fields.archived": "Arquivado",
|
||||
"spool.fields.comment": "Comentário",
|
||||
"spool.fields.filament": "Filamento",
|
||||
@@ -125,7 +439,7 @@
|
||||
"spool.fields.registered": "Registrado",
|
||||
"spool.fields.remainingWeight": "Peso Restante",
|
||||
"spool.fields.usedWeight": "Peso Utilizado",
|
||||
"spool.fieldsHelp.location": "Onde o carretel está localizado se você tiver vários locais onde armazena seus carretéis.",
|
||||
"spool.fieldsHelp.location": "O local onde você guarda fisicamente esse carretel: uma prateleira, uma gaveta, uma secadora de filamentos ou a própria impressora em que ele está carregado. Os carretéis são agrupados por localização na sua biblioteca, é assim que você os encontra novamente.",
|
||||
"spool.fieldsHelp.lotNr": "Número de lote do fabricante. Pode ser usado para garantir que uma impressão tenha cores consistentes se vários carretéis forem usados.",
|
||||
"spool.fieldsHelp.measuredWeight": "Quanto pesa o filamento e o carretel.",
|
||||
"spool.fieldsHelp.price": "Preço de um carretel cheio. Se não for definido, o preço do filamento será assumido.",
|
||||
@@ -134,7 +448,16 @@
|
||||
"spool.form.measurementType.length": "Comprimento",
|
||||
"spool.form.measurementType.weight": "Peso",
|
||||
"spool.spool": "Carretéis",
|
||||
"topbar.addSpools": "",
|
||||
"topbar.searchPlaceholder": "",
|
||||
"unknown": "Desconhecido",
|
||||
"validation.hexDigits": "",
|
||||
"validation.maxChars": "",
|
||||
"validation.mustBeGt": "",
|
||||
"validation.mustBeMax": "",
|
||||
"validation.mustBeMin": "",
|
||||
"validation.mustBeNumber": "",
|
||||
"validation.required": "",
|
||||
"vendor.fields.comment": "Comentário",
|
||||
"vendor.fields.emptySpoolWeight": "Peso do Carretel Vazio",
|
||||
"vendor.fields.externalId": "ID Externo",
|
||||
|
||||
@@ -1,17 +1,90 @@
|
||||
{
|
||||
"add.addAndNew": "",
|
||||
"add.adding": "",
|
||||
"add.advanced": "",
|
||||
"add.advancedNote": "",
|
||||
"add.change": "",
|
||||
"add.count": "",
|
||||
"add.createNew": "",
|
||||
"add.createNewSub": "",
|
||||
"add.dbUnavailable": "",
|
||||
"add.duplicate": "",
|
||||
"add.duplicateNote": "",
|
||||
"add.duplicateRename": "",
|
||||
"add.duplicateTitle": "",
|
||||
"add.filamentNamePlaceholder": "",
|
||||
"add.fill.full": "",
|
||||
"add.fillLevel": "",
|
||||
"add.importNote": "",
|
||||
"add.inCatalog": "",
|
||||
"add.locationHint": "",
|
||||
"add.locationPlaceholder": "",
|
||||
"add.manufacturerPlaceholder": "",
|
||||
"add.nameHint": "",
|
||||
"add.newFilament": "",
|
||||
"add.newFilamentTitle": "",
|
||||
"add.noCatalog": "",
|
||||
"add.noManufacturer": "",
|
||||
"add.pickColor": "",
|
||||
"add.searchPlaceholder": "",
|
||||
"add.searching": "",
|
||||
"add.spoolWeightPreset.cardboard": "",
|
||||
"add.spoolWeightPreset.plastic": "",
|
||||
"add.spoolWeightPresetsLead": "",
|
||||
"add.step2": "",
|
||||
"add.typeToSearchAll": "",
|
||||
"add.typeToSearchMatches": "",
|
||||
"add.useExisting": "",
|
||||
"add.vendorHint.existing": "",
|
||||
"add.vendorHint.new": "",
|
||||
"add.vendorHint.optional": "",
|
||||
"add.yourCatalog": "",
|
||||
"buttons.archive": "Arquivar",
|
||||
"buttons.cancel": "Cancelar",
|
||||
"buttons.clear": "Limpar",
|
||||
"buttons.close": "",
|
||||
"buttons.delete": "Excluir",
|
||||
"buttons.edit": "Editar",
|
||||
"buttons.filter": "Filtrar",
|
||||
"buttons.save": "Guardar",
|
||||
"buttons.showArchived": "Mostrar Arquivados",
|
||||
"buttons.unArchive": "Desarquivar",
|
||||
"common.decrement": "",
|
||||
"common.increment": "",
|
||||
"common.remove": "",
|
||||
"common.search": "",
|
||||
"dashboard.addFieldHint": "",
|
||||
"dashboard.dashboard": "",
|
||||
"dashboard.deleteGroup": "",
|
||||
"dashboard.dragHint": "",
|
||||
"dashboard.dropHere": "",
|
||||
"dashboard.emptyHelp": "",
|
||||
"dashboard.errorEmptyName": "",
|
||||
"dashboard.errorExists": "",
|
||||
"dashboard.errorRename": "",
|
||||
"dashboard.lastUsed": "",
|
||||
"dashboard.newGroup": "",
|
||||
"dashboard.newGroupName": "",
|
||||
"dashboard.reorderGroup": "",
|
||||
"dashboard.unassigned": "",
|
||||
"datetime.done": "",
|
||||
"datetime.hour": "",
|
||||
"datetime.minute": "",
|
||||
"datetime.nextMonth": "",
|
||||
"datetime.now": "",
|
||||
"datetime.pick": "",
|
||||
"datetime.prevMonth": "",
|
||||
"datetime.time": "",
|
||||
"documentTitle.dashboard.list": "",
|
||||
"documentTitle.labels.list": "",
|
||||
"documentTitle.library.list": "",
|
||||
"documentTitle.locations.list": "Locais | Spoolman",
|
||||
"documentTitle.settings.list": "",
|
||||
"filament.fields.addColor": "",
|
||||
"filament.fields.articleNumber": "Número do Artigo",
|
||||
"filament.fields.coaxial": "Coextrusado",
|
||||
"filament.fields.colorHex": "Cor",
|
||||
"filament.fields.colorType": "",
|
||||
"filament.fields.comment": "Comentário",
|
||||
"filament.fields.density": "Densidade",
|
||||
"filament.fields.diameter": "Diâmetro",
|
||||
@@ -23,6 +96,7 @@
|
||||
"filament.fields.name": "Nome",
|
||||
"filament.fields.price": "Preço",
|
||||
"filament.fields.registered": "Registrado",
|
||||
"filament.fields.removeColor": "",
|
||||
"filament.fields.settingsBedTemp": "Temperatura da Mesa",
|
||||
"filament.fields.settingsExtruderTemp": "Temperatura do Bico",
|
||||
"filament.fields.singleColor": "Único",
|
||||
@@ -34,20 +108,210 @@
|
||||
"filament.fieldsHelp.spoolWeight": "O peso de uma bobine vazia. Usado para determinar o peso medido de uma bobine.",
|
||||
"filament.fieldsHelp.weight": "O peso do filamento de uma bobine cheia (peso líquido). Isso não deve incluir o peso da bobine em si, apenas o filamento. É o que normalmente está escrito na embalagem.",
|
||||
"filament.filament": "Filamentos",
|
||||
"footer.documentation": "",
|
||||
"footer.reportIssue": "",
|
||||
"help.help": "Ajuda",
|
||||
"inspector.addSpoolsOfThis": "",
|
||||
"inspector.adjustFailed": "",
|
||||
"inspector.adjustHelp": "",
|
||||
"inspector.adjustWeight": "",
|
||||
"inspector.apply": "",
|
||||
"inspector.applying": "",
|
||||
"inspector.colorHex": "",
|
||||
"inspector.consumeAmount": "",
|
||||
"inspector.delete.deleting": "",
|
||||
"inspector.delete.errorGone": "",
|
||||
"inspector.delete.errorSpoolsExist": "",
|
||||
"inspector.delete.errorUnknown": "",
|
||||
"inspector.delete.filament": "",
|
||||
"inspector.delete.filamentBlockedHint": "",
|
||||
"inspector.delete.filamentBlockedTitle": "",
|
||||
"inspector.delete.filamentBody": "",
|
||||
"inspector.delete.filamentDone": "",
|
||||
"inspector.delete.filamentTitle": "",
|
||||
"inspector.delete.spool": "",
|
||||
"inspector.delete.spoolBody": "",
|
||||
"inspector.delete.spoolDone": "",
|
||||
"inspector.delete.spoolRemaining": "",
|
||||
"inspector.delete.spoolTitle": "",
|
||||
"inspector.delete.vendor": "",
|
||||
"inspector.delete.vendorBody": "",
|
||||
"inspector.delete.vendorDone": "",
|
||||
"inspector.delete.vendorTitle": "",
|
||||
"inspector.duplicateFilament": "",
|
||||
"inspector.empty": "",
|
||||
"inspector.enterValidLength": "",
|
||||
"inspector.enterValidWeight": "",
|
||||
"inspector.loading": "",
|
||||
"inspector.manageExtraFields": "",
|
||||
"inspector.measuredHelp": "",
|
||||
"inspector.multi": "",
|
||||
"inspector.newGross": "",
|
||||
"inspector.noExtraFields": "",
|
||||
"inspector.notFound": "",
|
||||
"inspector.ofRemaining": "",
|
||||
"inspector.openFilament": "",
|
||||
"inspector.openLink": "",
|
||||
"inspector.openManufacturer": "",
|
||||
"inspector.specs": "",
|
||||
"inspector.spoolsCount": "",
|
||||
"inspector.spoolsTotalRemaining": "",
|
||||
"inspector.used": "",
|
||||
"kofi": "Doe no Ko-fi",
|
||||
"labels.addHead": "",
|
||||
"labels.addQr": "",
|
||||
"labels.addRect": "",
|
||||
"labels.addSwatch": "",
|
||||
"labels.addText": "",
|
||||
"labels.align": "",
|
||||
"labels.alignCenter": "",
|
||||
"labels.alignLeft": "",
|
||||
"labels.alignRight": "",
|
||||
"labels.blank": "",
|
||||
"labels.bold": "",
|
||||
"labels.canvasHint": "",
|
||||
"labels.centerLogo": "",
|
||||
"labels.chooseField": "",
|
||||
"labels.clearFill": "",
|
||||
"labels.copies": "",
|
||||
"labels.cornerRadiusMm": "",
|
||||
"labels.createFirst": "",
|
||||
"labels.cutGuides": "",
|
||||
"labels.deleteConfirm": "",
|
||||
"labels.deleteElement": "",
|
||||
"labels.designName": "",
|
||||
"labels.designerDesc": "",
|
||||
"labels.designerTitle": "",
|
||||
"labels.dpi": "",
|
||||
"labels.dpiHint": "",
|
||||
"labels.duplicate": "",
|
||||
"labels.fields.bedTemp": "",
|
||||
"labels.fields.diameterMm": "",
|
||||
"labels.fields.groupVendor": "",
|
||||
"labels.fields.initialG": "",
|
||||
"labels.fields.netWeightG": "",
|
||||
"labels.fields.remainingG": "",
|
||||
"labels.fill": "",
|
||||
"labels.fitWidth": "",
|
||||
"labels.fitWidthHint": "",
|
||||
"labels.fontMm": "",
|
||||
"labels.gridInfo": "",
|
||||
"labels.hMm": "",
|
||||
"labels.heightMm": "",
|
||||
"labels.hintNowrap": "",
|
||||
"labels.hintSwatch": "",
|
||||
"labels.hintWrap": "",
|
||||
"labels.imageDesc": "",
|
||||
"labels.imageZipNote": "",
|
||||
"labels.insertField": "",
|
||||
"labels.kind.qr": "",
|
||||
"labels.kind.rect": "",
|
||||
"labels.kind.swatch": "",
|
||||
"labels.kind.text": "",
|
||||
"labels.labelSize": "",
|
||||
"labels.labelType": "",
|
||||
"labels.layout": "",
|
||||
"labels.modeImage": "",
|
||||
"labels.modeLabel": "",
|
||||
"labels.modeSheet": "",
|
||||
"labels.new": "",
|
||||
"labels.newText": "",
|
||||
"labels.noDesignsOption": "",
|
||||
"labels.noFilaments": "",
|
||||
"labels.noSpools": "",
|
||||
"labels.onePerLabel": "",
|
||||
"labels.preparing": "",
|
||||
"labels.preview": "",
|
||||
"labels.previewWith": "",
|
||||
"labels.radiusMm": "",
|
||||
"labels.sampleData": "",
|
||||
"labels.saved": "",
|
||||
"labels.saving": "",
|
||||
"labels.searchFilaments": "",
|
||||
"labels.searchSpools": "",
|
||||
"labels.selectAllShort": "",
|
||||
"labels.selectAtLeastOne": "",
|
||||
"labels.selectAtLeastOneFilament": "",
|
||||
"labels.selectDesign": "",
|
||||
"labels.selectElement": "",
|
||||
"labels.selectNoneShort": "",
|
||||
"labels.selectRecentHint": "",
|
||||
"labels.selectRecentShort": "",
|
||||
"labels.showingFilament": "",
|
||||
"labels.showingReal": "",
|
||||
"labels.showingSpool": "",
|
||||
"labels.showingTags": "",
|
||||
"labels.sizeMm": "",
|
||||
"labels.skipHint": "",
|
||||
"labels.sortHint": "",
|
||||
"labels.sortId": "",
|
||||
"labels.sortNewest": "",
|
||||
"labels.stroke": "",
|
||||
"labels.strokeMm": "",
|
||||
"labels.tabDesign": "",
|
||||
"labels.tabPrint": "",
|
||||
"labels.textTemplate": "",
|
||||
"labels.typeFilament": "",
|
||||
"labels.typeHint": "",
|
||||
"labels.typeSpool": "",
|
||||
"labels.unknownFilament": "",
|
||||
"labels.wMm": "",
|
||||
"labels.widthMm": "",
|
||||
"labels.wrapText": "",
|
||||
"labels.xMm": "",
|
||||
"labels.yMm": "",
|
||||
"library.apiError": "",
|
||||
"library.collapseGroup": "",
|
||||
"library.emptyBody": "",
|
||||
"library.emptyFiltered": "",
|
||||
"library.emptyTitle": "",
|
||||
"library.expandGroup": "",
|
||||
"library.filterBy": "",
|
||||
"library.groupBy": "",
|
||||
"library.groupNone": "",
|
||||
"library.nUnused": "",
|
||||
"library.noLocation": "",
|
||||
"library.noValues": "",
|
||||
"library.openGroup": "",
|
||||
"library.openManufacturer": "",
|
||||
"library.section.extra": "",
|
||||
"library.section.filament": "",
|
||||
"library.section.spool": "",
|
||||
"library.section.vendor": "",
|
||||
"library.showMore": "",
|
||||
"library.sort.nozzle": "",
|
||||
"library.sortBy": "",
|
||||
"library.unassigned": "",
|
||||
"library.unitGroups": "",
|
||||
"library.unitSpools": "",
|
||||
"library.unused": "",
|
||||
"library.unusedGroup": "",
|
||||
"library.unusedGroupMixed": "",
|
||||
"library.unusedSub": "",
|
||||
"library.unusedSubMixed": "",
|
||||
"library.used": "",
|
||||
"library.usedAgo": "",
|
||||
"loading": "Carregando",
|
||||
"locations.locations": "Locais",
|
||||
"locations.newLocation": "Novo Local",
|
||||
"locations.noLocation": "Sem Local",
|
||||
"locations.noLocationsHelp": "Esta página permite organizar as suas bobines em locais, adicione algumas bobines para começar!",
|
||||
"nav.labels": "",
|
||||
"nav.library": "",
|
||||
"no": "Não",
|
||||
"notifications.error": "Erro (código de status: {{statusCode}})",
|
||||
"notifications.saveSuccessful": "Guardado com sucesso!",
|
||||
"pagination.empty": "",
|
||||
"pagination.next": "",
|
||||
"pagination.pageSize": "",
|
||||
"pagination.perPage": "",
|
||||
"pagination.prev": "",
|
||||
"pagination.range": "",
|
||||
"printing.generic.columns": "Colunas",
|
||||
"printing.generic.customSize": "Personalizado",
|
||||
"printing.generic.description": "Ajuste as configurações abaixo para obter o layout de impressão desejado. Tenha em mente que impressoras e sistemas operacionais podem aplicar suas próprias margens e escalonamento, portanto, pode ser necessário fazer algumas tentativas antes que tudo estaja correto. Teste em uma folha de papel comum antes de imprimir nas etiquetas reais.",
|
||||
"printing.generic.dimensions": "Dimensões",
|
||||
"printing.generic.gridTooWide": "",
|
||||
"printing.generic.helpMargin": "As margens devem ser configuradas para corresponder à sua etiqueta de papel e à impressora. Alterá-las afetará o tamanho de toda a grade.",
|
||||
"printing.generic.helpPrinterMargin": "A zona segura deve ser definida para o quão próximo da borda do papel sua impressora pode imprimir, alterá-la não afetará toda a grade.",
|
||||
"printing.generic.horizontalSpacing": "Espaçamento Horizontal",
|
||||
@@ -65,7 +329,11 @@
|
||||
"printing.generic.skipItems": "Pular Itens",
|
||||
"printing.generic.verticalSpacing": "Espaçamento Vertical",
|
||||
"printing.qrcode.button": "Imprimir Etiquetas",
|
||||
"printing.qrcode.customUrl.caveat": "",
|
||||
"printing.qrcode.customUrl.hint": "",
|
||||
"printing.qrcode.customUrl.label": "",
|
||||
"printing.qrcode.useHTTPUrl.label": "Endereço do Código QR",
|
||||
"printing.qrcode.useHTTPUrl.options.custom": "",
|
||||
"printing.qrcode.useHTTPUrl.options.default": "Por omissão",
|
||||
"printing.qrcode.useHTTPUrl.options.url": "Endereço",
|
||||
"printing.qrcode.useHTTPUrl.preview": "Pré-visualização:",
|
||||
@@ -74,19 +342,46 @@
|
||||
"printing.spoolSelect.selectedTotal_one": "{{count}} bobine selecionado",
|
||||
"printing.spoolSelect.selectedTotal_other": "{{count}} bobines selecionados",
|
||||
"scanner.description": "Digitalize um código QR do Spoolman para ver detalhes sobre a bobine.",
|
||||
"scanner.error.inUse": "",
|
||||
"scanner.error.insecureContext": "A página não é protegida por HTTPS.",
|
||||
"scanner.error.notAllowed": "Não deu permissão de acesso à câmara.",
|
||||
"scanner.error.notFound": "Nenhuma câmara foi encontrada.",
|
||||
"scanner.error.streamApiNotSupported": "O navegador não oferece suporte à API MediaStream.",
|
||||
"scanner.error.unknown": "Ocorreu um erro desconhecido. ({{error}})",
|
||||
"scanner.starting": "",
|
||||
"scanner.title": "Leitor de Código QR",
|
||||
"search.colorHint": "",
|
||||
"search.noResults": "",
|
||||
"search.searching": "",
|
||||
"search.section.filaments": "",
|
||||
"search.section.spools": "",
|
||||
"search.section.vendors": "",
|
||||
"search.threshold": "",
|
||||
"search.unknownFilament": "",
|
||||
"settings.appearance.tab": "",
|
||||
"settings.appearance.theme.dark": "",
|
||||
"settings.appearance.theme.desc": "",
|
||||
"settings.appearance.theme.label": "",
|
||||
"settings.appearance.theme.light": "",
|
||||
"settings.appearance.theme.system": "",
|
||||
"settings.extraFields.addChoice": "",
|
||||
"settings.extraFields.addChoicesFirst": "",
|
||||
"settings.extraFields.addEntityField": "",
|
||||
"settings.extraFields.booleanFalse": "Não",
|
||||
"settings.extraFields.booleanTrue": "Sim",
|
||||
"settings.extraFields.deleteConfirm": "Apagar o campo {{name}}?",
|
||||
"settings.extraFields.description.intro": "Aqui pode adicionar campos personalizados extras às suas entidades.",
|
||||
"settings.extraFields.description.constraints": "Uma vez que um campo é adicionado, não se pode alterar sua chave ou tipo, e para campos do tipo \"opção\" não se pode remover as opções ou alterar o estado da múltipla opção. Se remover um campo, os dados associados para todas as entidades serão excluídos.",
|
||||
"settings.extraFields.description.intro": "Aqui pode adicionar campos personalizados extras às suas entidades.",
|
||||
"settings.extraFields.description.keyUsage": "A chave é como outros programas leem/gravam os dados, portanto, se o seu campo personalizado se destina a integrar com um programa de terceiros, certifique-se de defini-lo corretamente. O valor padrão só é aplicado a novos itens.",
|
||||
"settings.extraFields.description.tableViews": "Campos extras não podem ser ordenados ou filtrados nas visualizações de tabela.",
|
||||
"settings.extraFields.editorEdit": "",
|
||||
"settings.extraFields.editorNew": "",
|
||||
"settings.extraFields.errors.choiceNeeded": "",
|
||||
"settings.extraFields.errors.choicesRemoved": "",
|
||||
"settings.extraFields.errors.deleteFailed": "",
|
||||
"settings.extraFields.errors.keyFormat": "",
|
||||
"settings.extraFields.errors.nameRequired": "",
|
||||
"settings.extraFields.errors.saveFailed": "",
|
||||
"settings.extraFields.fieldType.boolean": "Booleano",
|
||||
"settings.extraFields.fieldType.choice": "Opção",
|
||||
"settings.extraFields.fieldType.datetime": "Date e Hora",
|
||||
@@ -95,7 +390,13 @@
|
||||
"settings.extraFields.fieldType.integer": "Inteiro",
|
||||
"settings.extraFields.fieldType.integerRange": "Intervalo Inteiro",
|
||||
"settings.extraFields.fieldType.text": "Texto",
|
||||
"settings.extraFields.max": "",
|
||||
"settings.extraFields.min": "",
|
||||
"settings.extraFields.multiSuffix": "",
|
||||
"settings.extraFields.multiple": "",
|
||||
"settings.extraFields.namePlaceholder": "",
|
||||
"settings.extraFields.nonUniqueKeyError": "A chave deve ser única.",
|
||||
"settings.extraFields.none": "",
|
||||
"settings.extraFields.params.choices": "Opções",
|
||||
"settings.extraFields.params.defaultValue": "Valor Padrão",
|
||||
"settings.extraFields.params.fieldType": "Tipo",
|
||||
@@ -103,14 +404,21 @@
|
||||
"settings.extraFields.params.name": "Nome",
|
||||
"settings.extraFields.params.order": "Ordem",
|
||||
"settings.extraFields.params.unit": "Unidade",
|
||||
"settings.extraFields.saveField": "",
|
||||
"settings.extraFields.tab": "Campos Extras",
|
||||
"settings.general.baseUrl.label": "Endereço Base",
|
||||
"settings.general.baseUrl.tooltip": "O endereço base a utilizar em funcionalidades tais como os códigos QR.",
|
||||
"settings.general.currency.desc": "",
|
||||
"settings.general.currency.label": "Moeda",
|
||||
"settings.general.roundPrices.label": "Arredondar preços",
|
||||
"settings.general.roundPrices.tooltip": "Arredonda os preços para o número inteiro mais próximo.",
|
||||
"settings.general.tab": "Geral",
|
||||
"settings.header": "Configurações",
|
||||
"settings.language.desc": "",
|
||||
"settings.language.label": "",
|
||||
"settings.library.lowThreshold.desc": "",
|
||||
"settings.library.lowThreshold.label": "",
|
||||
"settings.library.tab": "",
|
||||
"spool.fields.archived": "Arquivado",
|
||||
"spool.fields.comment": "Comentário",
|
||||
"spool.fields.filament": "Filamento",
|
||||
@@ -134,7 +442,16 @@
|
||||
"spool.form.measurementType.length": "Comprimento",
|
||||
"spool.form.measurementType.weight": "Peso",
|
||||
"spool.spool": "Bobines",
|
||||
"topbar.addSpools": "",
|
||||
"topbar.searchPlaceholder": "",
|
||||
"unknown": "Desconhecido",
|
||||
"validation.hexDigits": "",
|
||||
"validation.maxChars": "",
|
||||
"validation.mustBeGt": "",
|
||||
"validation.mustBeMax": "",
|
||||
"validation.mustBeMin": "",
|
||||
"validation.mustBeNumber": "",
|
||||
"validation.required": "",
|
||||
"vendor.fields.comment": "Comentário",
|
||||
"vendor.fields.emptySpoolWeight": "Peso da Bobine Vazia",
|
||||
"vendor.fields.externalId": "ID Externo",
|
||||
|
||||
@@ -1,17 +1,90 @@
|
||||
{
|
||||
"add.addAndNew": "",
|
||||
"add.adding": "",
|
||||
"add.advanced": "",
|
||||
"add.advancedNote": "",
|
||||
"add.change": "",
|
||||
"add.count": "",
|
||||
"add.createNew": "",
|
||||
"add.createNewSub": "",
|
||||
"add.dbUnavailable": "",
|
||||
"add.duplicate": "",
|
||||
"add.duplicateNote": "",
|
||||
"add.duplicateRename": "",
|
||||
"add.duplicateTitle": "",
|
||||
"add.filamentNamePlaceholder": "",
|
||||
"add.fill.full": "",
|
||||
"add.fillLevel": "",
|
||||
"add.importNote": "",
|
||||
"add.inCatalog": "",
|
||||
"add.locationHint": "",
|
||||
"add.locationPlaceholder": "",
|
||||
"add.manufacturerPlaceholder": "",
|
||||
"add.nameHint": "",
|
||||
"add.newFilament": "",
|
||||
"add.newFilamentTitle": "",
|
||||
"add.noCatalog": "",
|
||||
"add.noManufacturer": "",
|
||||
"add.pickColor": "",
|
||||
"add.searchPlaceholder": "",
|
||||
"add.searching": "",
|
||||
"add.spoolWeightPreset.cardboard": "",
|
||||
"add.spoolWeightPreset.plastic": "",
|
||||
"add.spoolWeightPresetsLead": "",
|
||||
"add.step2": "",
|
||||
"add.typeToSearchAll": "",
|
||||
"add.typeToSearchMatches": "",
|
||||
"add.useExisting": "",
|
||||
"add.vendorHint.existing": "",
|
||||
"add.vendorHint.new": "",
|
||||
"add.vendorHint.optional": "",
|
||||
"add.yourCatalog": "",
|
||||
"buttons.archive": "arhiveaza",
|
||||
"buttons.cancel": "anuleaza",
|
||||
"buttons.clear": "Șterge",
|
||||
"buttons.close": "",
|
||||
"buttons.delete": "Șterge",
|
||||
"buttons.edit": "editeaza",
|
||||
"buttons.filter": "filtreaza",
|
||||
"buttons.save": "salveaza",
|
||||
"buttons.showArchived": "Arata arhivate",
|
||||
"buttons.unArchive": "dezarhiveaza",
|
||||
"common.decrement": "",
|
||||
"common.increment": "",
|
||||
"common.remove": "",
|
||||
"common.search": "",
|
||||
"dashboard.addFieldHint": "",
|
||||
"dashboard.dashboard": "",
|
||||
"dashboard.deleteGroup": "",
|
||||
"dashboard.dragHint": "",
|
||||
"dashboard.dropHere": "",
|
||||
"dashboard.emptyHelp": "",
|
||||
"dashboard.errorEmptyName": "",
|
||||
"dashboard.errorExists": "",
|
||||
"dashboard.errorRename": "",
|
||||
"dashboard.lastUsed": "",
|
||||
"dashboard.newGroup": "",
|
||||
"dashboard.newGroupName": "",
|
||||
"dashboard.reorderGroup": "",
|
||||
"dashboard.unassigned": "",
|
||||
"datetime.done": "",
|
||||
"datetime.hour": "",
|
||||
"datetime.minute": "",
|
||||
"datetime.nextMonth": "",
|
||||
"datetime.now": "",
|
||||
"datetime.pick": "",
|
||||
"datetime.prevMonth": "",
|
||||
"datetime.time": "",
|
||||
"documentTitle.dashboard.list": "",
|
||||
"documentTitle.labels.list": "",
|
||||
"documentTitle.library.list": "",
|
||||
"documentTitle.locations.list": "Zone | Spoolman",
|
||||
"documentTitle.settings.list": "",
|
||||
"filament.fields.addColor": "",
|
||||
"filament.fields.articleNumber": "Numarul articolului",
|
||||
"filament.fields.coaxial": "Co-extrudat",
|
||||
"filament.fields.colorHex": "Culoare",
|
||||
"filament.fields.colorType": "",
|
||||
"filament.fields.comment": "Comentariu",
|
||||
"filament.fields.density": "Densitate",
|
||||
"filament.fields.diameter": "Diametru",
|
||||
@@ -23,6 +96,7 @@
|
||||
"filament.fields.name": "Nume",
|
||||
"filament.fields.price": "Preț",
|
||||
"filament.fields.registered": "Înregistrat",
|
||||
"filament.fields.removeColor": "",
|
||||
"filament.fields.settingsBedTemp": "Temperatura patului",
|
||||
"filament.fields.settingsExtruderTemp": "Temperatura extruderului",
|
||||
"filament.fields.singleColor": "Unică",
|
||||
@@ -34,20 +108,210 @@
|
||||
"filament.fieldsHelp.spoolWeight": "Greutatea unei bobine goale (fara filament). Este folosita pentru a calcula greutatea unei bobine cu filament.",
|
||||
"filament.fieldsHelp.weight": "Greutatea neta a filamentului de pe o bobina. Nu trebuie sa includa greutatea bobinei, ci doar cea a filamentului. De obicei greutatea filementului este cea inscrisa pe ambalaj.",
|
||||
"filament.filament": "Filamente",
|
||||
"footer.documentation": "",
|
||||
"footer.reportIssue": "",
|
||||
"help.help": "Ajutor",
|
||||
"inspector.addSpoolsOfThis": "",
|
||||
"inspector.adjustFailed": "",
|
||||
"inspector.adjustHelp": "",
|
||||
"inspector.adjustWeight": "",
|
||||
"inspector.apply": "",
|
||||
"inspector.applying": "",
|
||||
"inspector.colorHex": "",
|
||||
"inspector.consumeAmount": "",
|
||||
"inspector.delete.deleting": "",
|
||||
"inspector.delete.errorGone": "",
|
||||
"inspector.delete.errorSpoolsExist": "",
|
||||
"inspector.delete.errorUnknown": "",
|
||||
"inspector.delete.filament": "",
|
||||
"inspector.delete.filamentBlockedHint": "",
|
||||
"inspector.delete.filamentBlockedTitle": "",
|
||||
"inspector.delete.filamentBody": "",
|
||||
"inspector.delete.filamentDone": "",
|
||||
"inspector.delete.filamentTitle": "",
|
||||
"inspector.delete.spool": "",
|
||||
"inspector.delete.spoolBody": "",
|
||||
"inspector.delete.spoolDone": "",
|
||||
"inspector.delete.spoolRemaining": "",
|
||||
"inspector.delete.spoolTitle": "",
|
||||
"inspector.delete.vendor": "",
|
||||
"inspector.delete.vendorBody": "",
|
||||
"inspector.delete.vendorDone": "",
|
||||
"inspector.delete.vendorTitle": "",
|
||||
"inspector.duplicateFilament": "",
|
||||
"inspector.empty": "",
|
||||
"inspector.enterValidLength": "",
|
||||
"inspector.enterValidWeight": "",
|
||||
"inspector.loading": "",
|
||||
"inspector.manageExtraFields": "",
|
||||
"inspector.measuredHelp": "",
|
||||
"inspector.multi": "",
|
||||
"inspector.newGross": "",
|
||||
"inspector.noExtraFields": "",
|
||||
"inspector.notFound": "",
|
||||
"inspector.ofRemaining": "",
|
||||
"inspector.openFilament": "",
|
||||
"inspector.openLink": "",
|
||||
"inspector.openManufacturer": "",
|
||||
"inspector.specs": "",
|
||||
"inspector.spoolsCount": "",
|
||||
"inspector.spoolsTotalRemaining": "",
|
||||
"inspector.used": "",
|
||||
"kofi": "Doneaza pe Ko-fi",
|
||||
"labels.addHead": "",
|
||||
"labels.addQr": "",
|
||||
"labels.addRect": "",
|
||||
"labels.addSwatch": "",
|
||||
"labels.addText": "",
|
||||
"labels.align": "",
|
||||
"labels.alignCenter": "",
|
||||
"labels.alignLeft": "",
|
||||
"labels.alignRight": "",
|
||||
"labels.blank": "",
|
||||
"labels.bold": "",
|
||||
"labels.canvasHint": "",
|
||||
"labels.centerLogo": "",
|
||||
"labels.chooseField": "",
|
||||
"labels.clearFill": "",
|
||||
"labels.copies": "",
|
||||
"labels.cornerRadiusMm": "",
|
||||
"labels.createFirst": "",
|
||||
"labels.cutGuides": "",
|
||||
"labels.deleteConfirm": "",
|
||||
"labels.deleteElement": "",
|
||||
"labels.designName": "",
|
||||
"labels.designerDesc": "",
|
||||
"labels.designerTitle": "",
|
||||
"labels.dpi": "",
|
||||
"labels.dpiHint": "",
|
||||
"labels.duplicate": "",
|
||||
"labels.fields.bedTemp": "",
|
||||
"labels.fields.diameterMm": "",
|
||||
"labels.fields.groupVendor": "",
|
||||
"labels.fields.initialG": "",
|
||||
"labels.fields.netWeightG": "",
|
||||
"labels.fields.remainingG": "",
|
||||
"labels.fill": "",
|
||||
"labels.fitWidth": "",
|
||||
"labels.fitWidthHint": "",
|
||||
"labels.fontMm": "",
|
||||
"labels.gridInfo": "",
|
||||
"labels.hMm": "",
|
||||
"labels.heightMm": "",
|
||||
"labels.hintNowrap": "",
|
||||
"labels.hintSwatch": "",
|
||||
"labels.hintWrap": "",
|
||||
"labels.imageDesc": "",
|
||||
"labels.imageZipNote": "",
|
||||
"labels.insertField": "",
|
||||
"labels.kind.qr": "",
|
||||
"labels.kind.rect": "",
|
||||
"labels.kind.swatch": "",
|
||||
"labels.kind.text": "",
|
||||
"labels.labelSize": "",
|
||||
"labels.labelType": "",
|
||||
"labels.layout": "",
|
||||
"labels.modeImage": "",
|
||||
"labels.modeLabel": "",
|
||||
"labels.modeSheet": "",
|
||||
"labels.new": "",
|
||||
"labels.newText": "",
|
||||
"labels.noDesignsOption": "",
|
||||
"labels.noFilaments": "",
|
||||
"labels.noSpools": "",
|
||||
"labels.onePerLabel": "",
|
||||
"labels.preparing": "",
|
||||
"labels.preview": "",
|
||||
"labels.previewWith": "",
|
||||
"labels.radiusMm": "",
|
||||
"labels.sampleData": "",
|
||||
"labels.saved": "",
|
||||
"labels.saving": "",
|
||||
"labels.searchFilaments": "",
|
||||
"labels.searchSpools": "",
|
||||
"labels.selectAllShort": "",
|
||||
"labels.selectAtLeastOne": "",
|
||||
"labels.selectAtLeastOneFilament": "",
|
||||
"labels.selectDesign": "",
|
||||
"labels.selectElement": "",
|
||||
"labels.selectNoneShort": "",
|
||||
"labels.selectRecentHint": "",
|
||||
"labels.selectRecentShort": "",
|
||||
"labels.showingFilament": "",
|
||||
"labels.showingReal": "",
|
||||
"labels.showingSpool": "",
|
||||
"labels.showingTags": "",
|
||||
"labels.sizeMm": "",
|
||||
"labels.skipHint": "",
|
||||
"labels.sortHint": "",
|
||||
"labels.sortId": "",
|
||||
"labels.sortNewest": "",
|
||||
"labels.stroke": "",
|
||||
"labels.strokeMm": "",
|
||||
"labels.tabDesign": "",
|
||||
"labels.tabPrint": "",
|
||||
"labels.textTemplate": "",
|
||||
"labels.typeFilament": "",
|
||||
"labels.typeHint": "",
|
||||
"labels.typeSpool": "",
|
||||
"labels.unknownFilament": "",
|
||||
"labels.wMm": "",
|
||||
"labels.widthMm": "",
|
||||
"labels.wrapText": "",
|
||||
"labels.xMm": "",
|
||||
"labels.yMm": "",
|
||||
"library.apiError": "",
|
||||
"library.collapseGroup": "",
|
||||
"library.emptyBody": "",
|
||||
"library.emptyFiltered": "",
|
||||
"library.emptyTitle": "",
|
||||
"library.expandGroup": "",
|
||||
"library.filterBy": "",
|
||||
"library.groupBy": "",
|
||||
"library.groupNone": "",
|
||||
"library.nUnused": "",
|
||||
"library.noLocation": "",
|
||||
"library.noValues": "",
|
||||
"library.openGroup": "",
|
||||
"library.openManufacturer": "",
|
||||
"library.section.extra": "",
|
||||
"library.section.filament": "",
|
||||
"library.section.spool": "",
|
||||
"library.section.vendor": "",
|
||||
"library.showMore": "",
|
||||
"library.sort.nozzle": "",
|
||||
"library.sortBy": "",
|
||||
"library.unassigned": "",
|
||||
"library.unitGroups": "",
|
||||
"library.unitSpools": "",
|
||||
"library.unused": "",
|
||||
"library.unusedGroup": "",
|
||||
"library.unusedGroupMixed": "",
|
||||
"library.unusedSub": "",
|
||||
"library.unusedSubMixed": "",
|
||||
"library.used": "",
|
||||
"library.usedAgo": "",
|
||||
"loading": "Incarca",
|
||||
"locations.locations": "Zone",
|
||||
"locations.newLocation": "Zonă nouă",
|
||||
"locations.noLocation": "Fără zonă",
|
||||
"locations.noLocationsHelp": "Această pagină îți permite să îți organizezi rolele în zone, adaugă câteva role pentru a începe!",
|
||||
"nav.labels": "",
|
||||
"nav.library": "",
|
||||
"no": "Nu",
|
||||
"notifications.error": "Eroare (Cod: {{statusCode}})",
|
||||
"notifications.saveSuccessful": "Salvare reusita!",
|
||||
"pagination.empty": "",
|
||||
"pagination.next": "",
|
||||
"pagination.pageSize": "",
|
||||
"pagination.perPage": "",
|
||||
"pagination.prev": "",
|
||||
"pagination.range": "",
|
||||
"printing.generic.columns": "Coloane",
|
||||
"printing.generic.customSize": "Personalizat",
|
||||
"printing.generic.description": "Modificati setările de mai jos pentru a obține aspectul dorit al etichetelor. Rețineți că imprimantele și sistemul dvs. de operare pot aplica propriile setări, așa că poate fi necesar să incercati mai multe opțiuni înainte ca totul să fie corect. Testați-l pe o bucată de hârtie obișnuită înainte de a imprima pe etichetele reale.",
|
||||
"printing.generic.dimensions": "Dimensiuni",
|
||||
"printing.generic.gridTooWide": "",
|
||||
"printing.generic.helpMargin": "Marginile trebuie configurate pentru a se potrivi cu hârtia de etichetă și imprimanta dvs., modificarea acestora va afecta dimensiunea întregii grile.",
|
||||
"printing.generic.helpPrinterMargin": "Safe-Zone ar trebui să fie setată la cât de aproape de marginea hârtiei poate imprima imprimanta dvs., modificarea acestora nu va afecta întreaga grilă.",
|
||||
"printing.generic.horizontalSpacing": "Spațiere orizontală",
|
||||
@@ -65,7 +329,11 @@
|
||||
"printing.generic.skipItems": "Treci peste articole",
|
||||
"printing.generic.verticalSpacing": "Spațiere verticală",
|
||||
"printing.qrcode.button": "Imprimați codurile QR",
|
||||
"printing.qrcode.customUrl.caveat": "",
|
||||
"printing.qrcode.customUrl.hint": "",
|
||||
"printing.qrcode.customUrl.label": "",
|
||||
"printing.qrcode.useHTTPUrl.label": "Link către codul QR",
|
||||
"printing.qrcode.useHTTPUrl.options.custom": "",
|
||||
"printing.qrcode.useHTTPUrl.options.default": "Implicit",
|
||||
"printing.qrcode.useHTTPUrl.options.url": "URL",
|
||||
"printing.qrcode.useHTTPUrl.preview": "Previzualizare:",
|
||||
@@ -74,19 +342,46 @@
|
||||
"printing.spoolSelect.selectedTotal_one": "{{count}} bobina selectata",
|
||||
"printing.spoolSelect.selectedTotal_other": "{{count}} bobine selectate",
|
||||
"scanner.description": "Scanati QR code-ul Spoolman pentru detalii.",
|
||||
"scanner.error.inUse": "",
|
||||
"scanner.error.insecureContext": "Aceasta pagina nu este servita peste HTTPS.",
|
||||
"scanner.error.notAllowed": "Accesul la camera nu a fost permis.",
|
||||
"scanner.error.notFound": "Nicio camera nu a fost gasita.",
|
||||
"scanner.error.streamApiNotSupported": "Browserul nu suporta MediaStream API.",
|
||||
"scanner.error.unknown": "Eroare necunoscuta. ({{error}})",
|
||||
"scanner.starting": "",
|
||||
"scanner.title": "Scanner QR code",
|
||||
"search.colorHint": "",
|
||||
"search.noResults": "",
|
||||
"search.searching": "",
|
||||
"search.section.filaments": "",
|
||||
"search.section.spools": "",
|
||||
"search.section.vendors": "",
|
||||
"search.threshold": "",
|
||||
"search.unknownFilament": "",
|
||||
"settings.appearance.tab": "",
|
||||
"settings.appearance.theme.dark": "",
|
||||
"settings.appearance.theme.desc": "",
|
||||
"settings.appearance.theme.label": "",
|
||||
"settings.appearance.theme.light": "",
|
||||
"settings.appearance.theme.system": "",
|
||||
"settings.extraFields.addChoice": "",
|
||||
"settings.extraFields.addChoicesFirst": "",
|
||||
"settings.extraFields.addEntityField": "",
|
||||
"settings.extraFields.booleanFalse": "Nu",
|
||||
"settings.extraFields.booleanTrue": "Da",
|
||||
"settings.extraFields.deleteConfirm": "Ștergi câmpul{{name}}?",
|
||||
"settings.extraFields.description.intro": "Aici poți adăuga câmpuri suplimentare personalizate entităților tale.",
|
||||
"settings.extraFields.description.constraints": "Odată ce un câmp este adăugat, nu poți schimba cheia sau tipul acestuia, iar pentru câmpurile de tip alegere nu poți elimina opțiunile sau schimba starea de alegere multiplă. Dacă elimini un câmp, datele asociate pentru toate entitățile vor fi șterse.",
|
||||
"settings.extraFields.description.intro": "Aici poți adăuga câmpuri suplimentare personalizate entităților tale.",
|
||||
"settings.extraFields.description.keyUsage": "Cheia este ceea ce alte programe folosesc pentru a citi/scrie date, așa că, dacă câmpul tău personalizat ar trebui să se integreze cu un program de terță parte, asigură-te că îl setezi corect. Valoarea implicită se aplică doar articolelor noi.",
|
||||
"settings.extraFields.description.tableViews": "Câmpurile suplimentare nu pot fi sortate sau filtrate în tabele.",
|
||||
"settings.extraFields.editorEdit": "",
|
||||
"settings.extraFields.editorNew": "",
|
||||
"settings.extraFields.errors.choiceNeeded": "",
|
||||
"settings.extraFields.errors.choicesRemoved": "",
|
||||
"settings.extraFields.errors.deleteFailed": "",
|
||||
"settings.extraFields.errors.keyFormat": "",
|
||||
"settings.extraFields.errors.nameRequired": "",
|
||||
"settings.extraFields.errors.saveFailed": "",
|
||||
"settings.extraFields.fieldType.boolean": "Boolean",
|
||||
"settings.extraFields.fieldType.choice": "Selecție",
|
||||
"settings.extraFields.fieldType.datetime": "Dată/timp",
|
||||
@@ -95,7 +390,13 @@
|
||||
"settings.extraFields.fieldType.integer": "Întreg",
|
||||
"settings.extraFields.fieldType.integerRange": "Interval întreg",
|
||||
"settings.extraFields.fieldType.text": "Text",
|
||||
"settings.extraFields.max": "",
|
||||
"settings.extraFields.min": "",
|
||||
"settings.extraFields.multiSuffix": "",
|
||||
"settings.extraFields.multiple": "",
|
||||
"settings.extraFields.namePlaceholder": "",
|
||||
"settings.extraFields.nonUniqueKeyError": "Cheia trebuie să fie unică.",
|
||||
"settings.extraFields.none": "",
|
||||
"settings.extraFields.params.choices": "Selecții",
|
||||
"settings.extraFields.params.defaultValue": "Valoarea implicită",
|
||||
"settings.extraFields.params.fieldType": "Tip",
|
||||
@@ -103,14 +404,21 @@
|
||||
"settings.extraFields.params.name": "Nume",
|
||||
"settings.extraFields.params.order": "Stoc",
|
||||
"settings.extraFields.params.unit": "Unitate",
|
||||
"settings.extraFields.saveField": "",
|
||||
"settings.extraFields.tab": "Câmpuri extra",
|
||||
"settings.general.baseUrl.label": "URL de bază",
|
||||
"settings.general.baseUrl.tooltip": "URL-ul de bază care trebuie utilizat atunci când generați caracteristici, cum ar fi codurile QR.",
|
||||
"settings.general.currency.desc": "",
|
||||
"settings.general.currency.label": "Valută",
|
||||
"settings.general.roundPrices.label": "Prețurile estimative",
|
||||
"settings.general.roundPrices.tooltip": "Prețurile estimative la cel mai apropiat întreg.",
|
||||
"settings.general.tab": "General",
|
||||
"settings.header": "Setări",
|
||||
"settings.language.desc": "",
|
||||
"settings.language.label": "",
|
||||
"settings.library.lowThreshold.desc": "",
|
||||
"settings.library.lowThreshold.label": "",
|
||||
"settings.library.tab": "",
|
||||
"spool.fields.archived": "Arhivat",
|
||||
"spool.fields.comment": "Comentariu",
|
||||
"spool.fields.filament": "Filament",
|
||||
@@ -134,7 +442,16 @@
|
||||
"spool.form.measurementType.length": "Lungime",
|
||||
"spool.form.measurementType.weight": "Greutate",
|
||||
"spool.spool": "Bobine",
|
||||
"topbar.addSpools": "",
|
||||
"topbar.searchPlaceholder": "",
|
||||
"unknown": "Necunoscut",
|
||||
"validation.hexDigits": "",
|
||||
"validation.maxChars": "",
|
||||
"validation.mustBeGt": "",
|
||||
"validation.mustBeMax": "",
|
||||
"validation.mustBeMin": "",
|
||||
"validation.mustBeNumber": "",
|
||||
"validation.required": "",
|
||||
"vendor.fields.comment": "Comentariu",
|
||||
"vendor.fields.emptySpoolWeight": "Greutatea rolei goale",
|
||||
"vendor.fields.externalId": "ID extern",
|
||||
|
||||
@@ -1,17 +1,150 @@
|
||||
{
|
||||
"add.addAndNew": "Добавить и новое",
|
||||
"add.addN_few": "Добавить {{count}} катушки",
|
||||
"add.addN_many": "Добавить {{count}} катушек",
|
||||
"add.addN_one": "Добавить {{count}} катушку",
|
||||
"add.adding": "Добавление...",
|
||||
"add.advanced": "Расширенные характеристики",
|
||||
"add.advancedNote": "плотность, диаметр, температуры (заполняются автоматически из материала)",
|
||||
"add.change": "изменить",
|
||||
"add.count": "Количество",
|
||||
"add.createNew": "Создать новый филамент",
|
||||
"add.createNewSub": "нет в вашем каталоге или {{name}}",
|
||||
"add.dbUnavailable": "{{name}} недоступен",
|
||||
"add.duplicate": "клонировать",
|
||||
"add.duplicateNote": "Характеристики, производитель и цена были скопированы. Задайте ему новое название и цвет.",
|
||||
"add.duplicateRename": "Название все еще как у оригинала — переименуйте его, чтобы различать их.",
|
||||
"add.duplicateTitle": "Новый филамент · копия «{{name}}",
|
||||
"add.filamentNamePlaceholder": "например, PolyTerra Matte Sage",
|
||||
"add.fill.full": "Полная",
|
||||
"add.fillLevel": "Уровень заполнения",
|
||||
"add.importNote": "Этот филамент будет добавлен в ваш каталог при добавлении катушек.",
|
||||
"add.inCatalog": "в каталоге",
|
||||
"add.locationHint": "Где физически хранится катушка — полка, коробка или принтер. Оставьте пустым, если они хранятся в одном месте.",
|
||||
"add.locationPlaceholder": "например: Полка А, Сухой бокс 2, Принтер 1",
|
||||
"add.manufacturerPlaceholder": "например, Polymaker",
|
||||
"add.nameHint": "Укажите цвет — именно по нему можно различать филаменты.",
|
||||
"add.newFilament": "новый филамент",
|
||||
"add.newFilamentTitle": "Новый филамент",
|
||||
"add.noCatalog": "В каталоге нет филаментов",
|
||||
"add.noManufacturer": "Нет производителя",
|
||||
"add.pickColor": "Выбрать цвет",
|
||||
"add.searchPlaceholder": "Поиск по каталогу и {{name}}...",
|
||||
"add.searching": "Поиск...",
|
||||
"add.section.filament": "Филамент",
|
||||
"add.section.filamentNote": "Продукт на катушке — одна запись на цвет.",
|
||||
"add.section.manufacturer": "Производитель",
|
||||
"add.section.manufacturerNote": "Кто производит филамент. Добавляется один раз, затем используется для всех их филаментов.",
|
||||
"add.section.spool": "Катушка",
|
||||
"add.section.spoolNote": "Физические катушки в вашем инвентаре.",
|
||||
"add.section.spoolSharedNote": "Вес, вес катушки и цена также сохраняются как значения по умолчанию для нового филамента.",
|
||||
"add.spoolWeightPreset.cardboard": "Картонная {{weight}} г",
|
||||
"add.spoolWeightPreset.plastic": "Пластиковая {{weight}} г",
|
||||
"add.spoolWeightPresetsLead": "Начните с типичной катушки:",
|
||||
"add.step2": "Шаг 2 · детали катушки",
|
||||
"add.step2New": "Шаг 2 · детали филамента и катушки",
|
||||
"add.summary_few": "{{count}} катушки",
|
||||
"add.summary_many": "{{count}} катушек",
|
||||
"add.summary_one": "{{count}} катушка",
|
||||
"add.typeToSearchAll": "Введите для поиска по тысячам филаментов",
|
||||
"add.typeToSearchMatches": "Введите для поиска — нет совпадений",
|
||||
"add.useExisting": "использовать существующий",
|
||||
"add.vendorHint.existing": "Используется существующий производитель «{{name}}",
|
||||
"add.vendorHint.new": "Будет создан новый производитель «{{name}}",
|
||||
"add.vendorHint.optional": "Необязательно — оставьте пустым, если производитель не нужен",
|
||||
"add.weightPresets": "Стандартные размеры катушек",
|
||||
"add.yourCatalog": "Ваш каталог",
|
||||
"buttons.apply": "Применить",
|
||||
"buttons.archive": "В архив",
|
||||
"buttons.cancel": "Отмена",
|
||||
"buttons.clear": "Очистить",
|
||||
"buttons.close": "Закрыть",
|
||||
"buttons.delete": "Удалить",
|
||||
"buttons.edit": "Редактировать",
|
||||
"buttons.filter": "Фильтр",
|
||||
"buttons.save": "Сохранить",
|
||||
"buttons.showArchived": "Показать архивные",
|
||||
"buttons.showNoSpools": "Показать филамент без катушек",
|
||||
"buttons.unArchive": "Из архива",
|
||||
"changeFilament.action": "Изменить",
|
||||
"changeFilament.adoptWeight": "Установить полный вес этой катушки на {{full}}",
|
||||
"changeFilament.adoptWeightHelp": "Записано как {{current}}, из предыдущего филамента. Использованный вес ({{used}}) сохранен, оставляя {{remaining}}.",
|
||||
"changeFilament.apply": "Сменить филамент",
|
||||
"changeFilament.applying": "Смена...",
|
||||
"changeFilament.current": "текущий",
|
||||
"changeFilament.done": "Филамент изменён.",
|
||||
"changeFilament.failed": "Не получилось сменить филамент.",
|
||||
"changeFilament.importNote": "Этот филамент будет добавлен в ваш каталог после применения изменения.",
|
||||
"changeFilament.intro": "Катушка #{{id}} сохранит свой номер, расположение, даты и историю использования - только хранимый филамент будет изменён.",
|
||||
"changeFilament.newTag": "новый",
|
||||
"changeFilament.next": "Изменить на",
|
||||
"changeFilament.now": "Текущий",
|
||||
"changeFilament.pickBelow": "Выберите филамент ниже",
|
||||
"changeFilament.title": "Смена филамента",
|
||||
"changeFilament.useExisting": "Выбрать существующий филамент",
|
||||
"changeFilament.weightFollows": "У этой катушки нет собственного полного веса, поэтому она принимает вес нового филамента: {{full}}, оставляя {{remaining}} после {{used}} уже использованных.",
|
||||
"changeVendor.action": "Изменить",
|
||||
"changeVendor.apply": "Сменить производителя",
|
||||
"changeVendor.applying": "Смена...",
|
||||
"changeVendor.clearHint": "Оставить этот филамент без производителя",
|
||||
"changeVendor.create": "Создать “{{name}}”",
|
||||
"changeVendor.createHint": "Еще не в списке ваших производителей — будет добавлен",
|
||||
"changeVendor.current": "текущий",
|
||||
"changeVendor.done": "Производитель изменен.",
|
||||
"changeVendor.emptySpool": "Вес пустой катушки {{value}}",
|
||||
"changeVendor.failed": "Не удалось сменить производителя.",
|
||||
"changeVendor.intro": "“{{name}}” сохраняет свои катушки, характеристики и историю — меняется только производитель.",
|
||||
"changeVendor.next": "Изменить на",
|
||||
"changeVendor.noEmptySpool": "Нет веса пустой катушки",
|
||||
"changeVendor.noMatches": "Нет совпадений по производителям",
|
||||
"changeVendor.none": "Производителей еще нет",
|
||||
"changeVendor.noneNote": "Без бренда",
|
||||
"changeVendor.now": "Сейчас",
|
||||
"changeVendor.pickBelow": "Выберите производителя ниже",
|
||||
"changeVendor.searchPlaceholder": "Поиск или имя производителя",
|
||||
"changeVendor.tareFollows": "У этого филамента нет собственного веса пустой катушки, поэтому он принимает вес производителя. После изменения он составит {{value}}.",
|
||||
"changeVendor.tareGone": "У этого филамента нет собственного веса пустой катушки, он принимал значение {{current}} от производителя. После изменения значения нет, пока вы не зададите его филаменту.",
|
||||
"changeVendor.title": "Смена производителя",
|
||||
"changeVendor.willBeCreated": "Будет создан",
|
||||
"common.decrement": "Уменьшить",
|
||||
"common.increment": "Увеличить",
|
||||
"common.remove": "Удалить",
|
||||
"common.search": "Поиск",
|
||||
"dashboard.addFieldHint": "Добавьте текстовое поле или поле выбора для катушек в Настройках, чтобы группировать и по нему",
|
||||
"dashboard.dashboard": "Панель",
|
||||
"dashboard.deleteGroup": "Удалить группу",
|
||||
"dashboard.dragHint": "Перетащите катушку на другую карточку, чтобы изменить её {{field}}, или внутри карточки для изменения порядка",
|
||||
"dashboard.dropHere": "перетащите катушки сюда",
|
||||
"dashboard.emptyHelp": "На этой странице катушки группируются по выбранному вами полю. Добавьте катушки, чтобы начать!",
|
||||
"dashboard.errorEmptyName": "Имя не может быть пустым",
|
||||
"dashboard.errorExists": "Группа с таким именем уже существует",
|
||||
"dashboard.errorRename": "Не удалось переименовать группу",
|
||||
"dashboard.lastUsed": "Последнее использование {{time}} назад",
|
||||
"dashboard.newGroup": "Новая группа",
|
||||
"dashboard.newGroupName": "Новая группа {{n}}",
|
||||
"dashboard.reorderGroup": "Перетащите для изменения порядка группы",
|
||||
"dashboard.spoolCount_few": "\"{{count}} катушки",
|
||||
"dashboard.spoolCount_many": "\"{{count}} катушек",
|
||||
"dashboard.spoolCount_one": "\"{{count}} катушка",
|
||||
"dashboard.unassigned": "Не назначено",
|
||||
"datetime.done": "Готово",
|
||||
"datetime.hour": "Час",
|
||||
"datetime.minute": "Минута",
|
||||
"datetime.nextMonth": "Следующий месяц",
|
||||
"datetime.now": "Сейчас",
|
||||
"datetime.pick": "Выберите дату и время",
|
||||
"datetime.prevMonth": "Предыдущий месяц",
|
||||
"datetime.time": "Время",
|
||||
"documentTitle.dashboard.list": "Панель | Spoolman",
|
||||
"documentTitle.labels.list": "Этикетки | Spoolman",
|
||||
"documentTitle.library.list": "Библиотека | Spoolman",
|
||||
"documentTitle.locations.list": "Местоположения | Spoolman",
|
||||
"documentTitle.settings.list": "Настройки | Spoolman",
|
||||
"filament.fields.addColor": "Добавить цвет",
|
||||
"filament.fields.articleNumber": "Артикул",
|
||||
"filament.fields.coaxial": "Коэкструдированный",
|
||||
"filament.fields.colorHex": "Цвет",
|
||||
"filament.fields.colorType": "Тип цвета",
|
||||
"filament.fields.comment": "Комментарий",
|
||||
"filament.fields.density": "Плотность",
|
||||
"filament.fields.diameter": "Диаметр",
|
||||
@@ -21,8 +154,10 @@
|
||||
"filament.fields.material": "Материал",
|
||||
"filament.fields.multiColor": "Многоцветный",
|
||||
"filament.fields.name": "Имя",
|
||||
"filament.fields.opacity": "Непрозрачность",
|
||||
"filament.fields.price": "Цена",
|
||||
"filament.fields.registered": "Добавлен",
|
||||
"filament.fields.removeColor": "Удалить цвет",
|
||||
"filament.fields.settingsBedTemp": "Температура стола",
|
||||
"filament.fields.settingsExtruderTemp": "Температура экструдера",
|
||||
"filament.fields.singleColor": "Одноцветный",
|
||||
@@ -34,20 +169,254 @@
|
||||
"filament.fieldsHelp.spoolWeight": "Вес пустой катушки. Используется для определения измеренного веса катушки.",
|
||||
"filament.fieldsHelp.weight": "Вес филамента на полной катушке (вес нетто). Сюда не следует включать вес самой катушки, а только филамента. Это то, что обычно пишут на упаковке.",
|
||||
"filament.filament": "Филаменты",
|
||||
"footer.documentation": "Документация",
|
||||
"footer.reportIssue": "Сообщить о проблеме",
|
||||
"help.help": "Помощь",
|
||||
"inspector.addSpoolsOfThis": "Добавить катушки этого филамента",
|
||||
"inspector.adjustFailed": "Не удалось изменить вес.",
|
||||
"inspector.adjustHelp": "Положительное значение расходует филамент, отрицательное — добавляет.",
|
||||
"inspector.adjustWeight": "Изменить вес",
|
||||
"inspector.apply": "Применить",
|
||||
"inspector.applying": "Применение...",
|
||||
"inspector.colorHex": "Шестнадцатеричный код цвета",
|
||||
"inspector.consumeAmount": "Количество для списания:",
|
||||
"inspector.defaultFrom.filament": "{{value}} · по умолчанию для филамента",
|
||||
"inspector.defaultFrom.manufacturer": "{{value}} · по умолчанию для производителя",
|
||||
"inspector.delete.deleting": "Удаление...",
|
||||
"inspector.delete.errorGone": "Он уже был удален.",
|
||||
"inspector.delete.errorSpoolsExist": "Невозможно удалить этот филамент — его используют катушки.",
|
||||
"inspector.delete.errorUnknown": "Не удалось удалить. Подробности см. в логах сервера.",
|
||||
"inspector.delete.filament": "Удалить филамент",
|
||||
"inspector.delete.filamentBlockedHint": "Сначала удалите эти катушки. Архивирования недостаточно.",
|
||||
"inspector.delete.filamentBlockedTitle": "Этот филамент не может быть удален",
|
||||
"inspector.delete.filamentBlocked_few": "{{count}} катушки все еще использует «{{name}}», включая архивные.",
|
||||
"inspector.delete.filamentBlocked_many": "{{count}} катушек все еще использует «{{name}}», включая архивные.",
|
||||
"inspector.delete.filamentBlocked_one": "{{count}} катушка все еще использует «{{name}}», включая архивные.",
|
||||
"inspector.delete.filamentBody": "«{{name}}» будет удален из вашего каталога. Это действие нельзя отменить.",
|
||||
"inspector.delete.filamentDone": "Филамент удален.",
|
||||
"inspector.delete.filamentTitle": "Удалить этот филамент?",
|
||||
"inspector.delete.spool": "Удалить катушку",
|
||||
"inspector.delete.spoolBody": "Катушка #{{id}} «{{name}}» будет удалена вместе с историей использования. Это действие нельзя отменить.",
|
||||
"inspector.delete.spoolDone": "Катушка удалена.",
|
||||
"inspector.delete.spoolRemaining": "На ней еще осталось {{weight}} филамента. Архивируйте её, если вы просто хотите убрать её с глаз.",
|
||||
"inspector.delete.spoolTitle": "Удалить эту катушку?",
|
||||
"inspector.delete.vendor": "Удалить производителя",
|
||||
"inspector.delete.vendorBody": "«{{name}}» будет удален. Это действие нельзя отменить.",
|
||||
"inspector.delete.vendorDone": "Производитель удален.",
|
||||
"inspector.delete.vendorOrphans_few": "Его {{count}} филамента сохранено, но остался без производителя.",
|
||||
"inspector.delete.vendorOrphans_many": "Его {{count}} филаментов сохранено, но остался без производителя.",
|
||||
"inspector.delete.vendorOrphans_one": "Его {{count}} филамент сохранен, но остался без производителя.",
|
||||
"inspector.delete.vendorTitle": "Удалить этого производителя?",
|
||||
"inspector.duplicateFilament": "Клонировать",
|
||||
"inspector.empty": "Выберите катушку, филамент или производителя из списка, чтобы просмотреть подробную информацию здесь.",
|
||||
"inspector.enterValidLength": "Введите корректную длину.",
|
||||
"inspector.enterValidWeight": "Введите корректный вес.",
|
||||
"inspector.filamentDefault": "{{price}} · по умолчанию для филамента",
|
||||
"inspector.loading": "Загрузка...",
|
||||
"inspector.manageExtraFields": "Управление полями",
|
||||
"inspector.measuredHelp": "Общий вес катушки + оставшийся филамент по показаниям весов.",
|
||||
"inspector.multi": "мульти ×{{count}}",
|
||||
"inspector.newGross": "Новый брутто-вес:",
|
||||
"inspector.noExtraFields": "Пока нет — добавьте собственные поля для отслеживания того, чего нет в Spoolman.",
|
||||
"inspector.notFound": "Элемент не найден. Возможно, он был удален.",
|
||||
"inspector.ofRemaining": "осталось {{weight}} · {{length}} м",
|
||||
"inspector.openFilament": "Открыть филамент",
|
||||
"inspector.openLink": "Открыть {{url}} в новой вкладке",
|
||||
"inspector.openManufacturer": "Открыть производителя",
|
||||
"inspector.override.byFilament": "Переопределено этим филаментом · {{value}}",
|
||||
"inspector.override.bySpool": "Переопределено этой катушкой · {{value}}",
|
||||
"inspector.override.overridesFilament": "Переопределяет филамент · {{value}}",
|
||||
"inspector.override.overridesManufacturer": "Переопределяет производителя · {{value}}",
|
||||
"inspector.specs": "Характеристики — редактирование на месте",
|
||||
"inspector.spoolsCount": "Катушки · {{count}}",
|
||||
"inspector.spoolsTotalRemaining": "всего {{weight}}",
|
||||
"inspector.used": "использовано",
|
||||
"inspector.vendorSub_few": "{{count}} филамента",
|
||||
"inspector.vendorSub_many": "{{count}} филаментов",
|
||||
"inspector.vendorSub_one": "{{count}} филамент",
|
||||
"kofi": "Поддержите меня на Ko-fi",
|
||||
"labels.addHead": "Добавить",
|
||||
"labels.addQr": "QR-код",
|
||||
"labels.addRect": "Прямоугольник",
|
||||
"labels.addSwatch": "Образец цвета",
|
||||
"labels.addText": "Текст / поле",
|
||||
"labels.align": "Выравнивание",
|
||||
"labels.alignCenter": "По центру",
|
||||
"labels.alignLeft": "По левому краю",
|
||||
"labels.alignRight": "По правому краю",
|
||||
"labels.blank": "У вас пока нет дизайнов этикеток.",
|
||||
"labels.bold": "Жирный",
|
||||
"labels.canvasHint": "Перетащите для перемещения · нажмите для выбора · маркеры изменения размера.",
|
||||
"labels.centerLogo": "Центрировать логотип Spoolman",
|
||||
"labels.chooseField": "Выберите поле...",
|
||||
"labels.clearFill": "Без заливки (только контур)",
|
||||
"labels.copies": "Копии",
|
||||
"labels.cornerRadiusMm": "Радиус скругления",
|
||||
"labels.createFirst": "Создайте свою первую этикетку",
|
||||
"labels.cutGuides": "Линии реза",
|
||||
"labels.deleteConfirm": "Удалить этот дизайн этикетки?",
|
||||
"labels.deleteElement": "Удалить элемент",
|
||||
"labels.designName": "Название дизайна",
|
||||
"labels.designerDesc": "\"Создавайте QR-этикетки с любыми полями катушки, филамента или производителя, а затем печатайте их на листах или термопринтере. Дизайны сохраняются на сервере.",
|
||||
"labels.designerTitle": "Дизайнер этикеток",
|
||||
"labels.dpi": "Разрешение",
|
||||
"labels.dpiHint": "Соответствуйте параметрам принтера, чтобы мелкие этикетки были четкими: 203 dpi для большинства термопринтеров, 300 или более для лазерных и струйных.",
|
||||
"labels.duplicate": "Дублировать",
|
||||
"labels.exportDescAml": "Сохраняет один файл .aml для каждой этикетки размером {{w}}×{{h}} мм. Открывается в приложениях на базе LPAPI (обычно поставляются с термопринтерами), которые считывают размер из файла.",
|
||||
"labels.exportDescPng": "Сохраняет одно PNG изображение для каждой этикетки размером {{w}}×{{h}} мм.",
|
||||
"labels.exportFormat": "Формат файла",
|
||||
"labels.exportFormatOptions.aml": "Файл этикетки AML",
|
||||
"labels.exportFormatOptions.png": "Изображение PNG",
|
||||
"labels.fields.bedTemp": "Температура стола",
|
||||
"labels.fields.diameterMm": "Диаметр (мм)",
|
||||
"labels.fields.groupVendor": "Производитель",
|
||||
"labels.fields.initialG": "Начальный (г)",
|
||||
"labels.fields.netWeightG": "Вес нетто (г)",
|
||||
"labels.fields.remainingG": "Остаток (г)",
|
||||
"labels.filamentsSelected_few": "{{count}} филамента выбрано",
|
||||
"labels.filamentsSelected_many": "{{count}} филаментов выбрано",
|
||||
"labels.filamentsSelected_one": "{{count}} филамент выбран",
|
||||
"labels.fill": "Заливка",
|
||||
"labels.fitWidth": "Подгонять ширину под столбцы",
|
||||
"labels.fitWidthHint": "Установите ширину этикетки так, чтобы выбранное количество столбцов заполняло страницу.",
|
||||
"labels.fontMm": "Шрифт",
|
||||
"labels.gridInfo": "{{cols}} × {{rows}} = {{perPage}} этикеток / страница",
|
||||
"labels.hMm": "В",
|
||||
"labels.heightMm": "Высота",
|
||||
"labels.hintNowrap": "Текст остается на одной строке; всё, что выходит за пределы ширины, обрежется.",
|
||||
"labels.hintSwatch": "Заполняется цветом(-ами) филамента катушки во время печати.",
|
||||
"labels.hintWrap": "Оберните поле, чтобы скрыть его, если оно пустое:",
|
||||
"labels.imageDesc": "Сохраняет по одному PNG на выбранную катушку вместо печати, размер каждого {{w}}×{{h}} мм.",
|
||||
"labels.imageZipNote": "Более {{threshold}} этикеток доставляются в виде одного zip-архива.",
|
||||
"labels.insertField": "Вставить поле",
|
||||
"labels.kind.qr": "QR-код",
|
||||
"labels.kind.rect": "Прямоугольник",
|
||||
"labels.kind.swatch": "Образец цвета",
|
||||
"labels.kind.text": "Текст",
|
||||
"labels.labelSize": "Размер этикетки",
|
||||
"labels.labelType": "Тип этикетки",
|
||||
"labels.layout": "Макет",
|
||||
"labels.modeImage": "Файлы",
|
||||
"labels.modeLabel": "Принтер этикеток",
|
||||
"labels.modeSheet": "Лист (плитка)",
|
||||
"labels.new": "Новый",
|
||||
"labels.newText": "Новый текст",
|
||||
"labels.noDesignsOption": "Пока нет дизайнов",
|
||||
"labels.noFilaments": "Нет филаментов.",
|
||||
"labels.noSpools": "Нет катушек.",
|
||||
"labels.onePerLabel": "Одна страница {{w}}×{{h}} мм на этикетку.",
|
||||
"labels.preparing": "Подготовка...",
|
||||
"labels.preview": "Предпросмотр",
|
||||
"labels.previewWith": "Предпросмотр с",
|
||||
"labels.printN_few": "Печать {{count}} этикетки",
|
||||
"labels.printN_many": "Печать {{count}} этикеток",
|
||||
"labels.printN_one": "Печать {{count}} этикетки",
|
||||
"labels.radiusMm": "Радиус",
|
||||
"labels.sampleData": "Пример данных",
|
||||
"labels.saveAsFormat": "Сохранить как {{format}}",
|
||||
"labels.saved": "Сохранено",
|
||||
"labels.saving": "Сохранение...",
|
||||
"labels.searchFilaments": "Поиск филаментов...",
|
||||
"labels.searchSpools": "Поиск катушек...",
|
||||
"labels.selectAllShort": "Все",
|
||||
"labels.selectAtLeastOne": "Выберите хотя бы одну катушку.",
|
||||
"labels.selectAtLeastOneFilament": "Выберите хотя бы один филамент.",
|
||||
"labels.selectDesign": "Выберите дизайн этикетки",
|
||||
"labels.selectElement": "Выберите элемент для редактирования или добавьте его из палитры.",
|
||||
"labels.selectNoneShort": "Ничего",
|
||||
"labels.selectRecentHint": "Выбрать катушки, добавленные за последние 24 часа",
|
||||
"labels.selectRecentShort": "Недавние ({{count}})",
|
||||
"labels.showingFilament": "Отображение филамента #{{id}}",
|
||||
"labels.showingReal": "Отображение реальных данных катушки.",
|
||||
"labels.showingSpool": "Отображение катушки #{{id}}",
|
||||
"labels.showingTags": "Поля отображаются как теги, пока не выбрана катушка выше.",
|
||||
"labels.sizeMm": "Размер",
|
||||
"labels.skipHint": "Пропустить элементы — оставляет указанное количество клеток пустыми, чтобы использовать остатки листа.",
|
||||
"labels.sortHint": "Сортировать катушки",
|
||||
"labels.sortId": "#",
|
||||
"labels.sortNewest": "Самые новые",
|
||||
"labels.stroke": "Обводка",
|
||||
"labels.strokeMm": "Обводка",
|
||||
"labels.tabDesign": "Дизайн",
|
||||
"labels.tabPrint": "Печать",
|
||||
"labels.textTemplate": "Текст / шаблон",
|
||||
"labels.typeFilament": "Филамет",
|
||||
"labels.typeHint": "Этикетки для филамента исключают поля, специфичные для катушки, а QR-код ведет на страницу филамента.",
|
||||
"labels.typeSpool": "Катушка",
|
||||
"labels.unknownFilament": "Неизвестный филамент",
|
||||
"labels.wMm": "Ш",
|
||||
"labels.widthMm": "Ширина",
|
||||
"labels.wrapText": "Перенос текста",
|
||||
"labels.xMm": "X",
|
||||
"labels.yMm": "Y",
|
||||
"library.apiError": "Spoolman API недоступен. Сервер запущен?",
|
||||
"library.collapseGroup": "Скрыть эти катушки",
|
||||
"library.dateFilter.ago": "{{span}} назад",
|
||||
"library.dateFilter.between": "{{from}} – {{to}}",
|
||||
"library.dateFilter.customRange": "Пользовательский диапазон",
|
||||
"library.dateFilter.from": "От",
|
||||
"library.dateFilter.last": "Последние {{span}}",
|
||||
"library.dateFilter.never": "Никогда",
|
||||
"library.dateFilter.olderThan": "Старше чем {{span}}",
|
||||
"library.dateFilter.since": "С {{date}}",
|
||||
"library.dateFilter.to": "До (необязательно)",
|
||||
"library.dateFilter.until": "До {{date}}",
|
||||
"library.emptyBody": "Добавьте первую катушку, чтобы начать отслеживать филамент.",
|
||||
"library.emptyFiltered": "Нет {{unit}}, соответствующих фильтрам.",
|
||||
"library.emptyTitle": "Катушек пока нет",
|
||||
"library.expandGroup": "Показать эти катушки",
|
||||
"library.filterBy": "Фильтровать по",
|
||||
"library.groupBy": "Группировать",
|
||||
"library.groupNone": "Нет (списком)",
|
||||
"library.groupSpools_few": "{{count}} катушки",
|
||||
"library.groupSpools_many": "{{count}} катушек",
|
||||
"library.groupSpools_one": "{{count}} катушка",
|
||||
"library.nUnused": "×{{count}} не использовано",
|
||||
"library.noLocation": "нет местоположения",
|
||||
"library.noSpools": "Нет катушек",
|
||||
"library.noValues": "Нет значений",
|
||||
"library.openGroup": "Открыть {{name}}",
|
||||
"library.openManufacturer": "Открыть производителя {{name}}",
|
||||
"library.resizeList": "Изменить размер списка (двойной клик для сброса)",
|
||||
"library.reverseSort": "Обратить порядок сортировки",
|
||||
"library.section.extra": "Дополнительные поля",
|
||||
"library.section.filament": "Филамент",
|
||||
"library.section.spool": "Катушка",
|
||||
"library.section.vendor": "Производитель",
|
||||
"library.showMore": "показать еще {{count}}",
|
||||
"library.sort.nozzle": "Темп. сопла",
|
||||
"library.sortBy": "Сортировать",
|
||||
"library.unassigned": "без категории",
|
||||
"library.unitGroups": "группы",
|
||||
"library.unitSpools": "катушки",
|
||||
"library.unused": "не использовано",
|
||||
"library.unusedGroup": "{{count}} не использовано · {{weight}} г каждая",
|
||||
"library.unusedGroupMixed": "{{count}} не использовано",
|
||||
"library.unusedSub": "{{weight}} г каждая · {{location}}",
|
||||
"library.unusedSubMixed": "{{location}}",
|
||||
"library.used": "использовано",
|
||||
"library.usedAgo": "использовано {{time}} назад",
|
||||
"loading": "Загрузка",
|
||||
"locations.locations": "Местоположения",
|
||||
"locations.newLocation": "Новое местоположение",
|
||||
"locations.noLocation": "Нет местоположения",
|
||||
"locations.noLocationsHelp": "Эта страница позволяет организовать катушки по местоположениям. Добавьте несколько катушек, чтобы начать!",
|
||||
"nav.labels": "Этикетки",
|
||||
"nav.library": "Библиотека",
|
||||
"no": "Нет",
|
||||
"notifications.error": "Ошибка (status code: {{statusCode}})",
|
||||
"notifications.saveSuccessful": "Успешное сохранение!",
|
||||
"pagination.empty": "Нет {{unit}}",
|
||||
"pagination.next": "Следующая страница",
|
||||
"pagination.pageSize": "Размер страницы",
|
||||
"pagination.perPage": "{{size}} / страница",
|
||||
"pagination.prev": "Предыдущая страница",
|
||||
"pagination.range": "{{from}}–{{to}} из {{total}} {{unit}}",
|
||||
"printing.generic.columns": "Столбцы",
|
||||
"printing.generic.customSize": "Настроить",
|
||||
"printing.generic.description": "Настройте параметры ниже, чтобы получить желаемый макет печати. Имейте в виду, что принтеры и ваша ОС могут применять свои собственные поля и масштабирование, поэтому вам, возможно, придется выполнить несколько проб и ошибок, прежде чем все будет правильно. Прежде чем печатать на этикетках, проверьте это на листе обычной бумаги.",
|
||||
"printing.generic.dimensions": "Размеры",
|
||||
"printing.generic.gridTooWide": "Этикетки шире страницы. Уменьшите количество столбцов, интервалы или поля.",
|
||||
"printing.generic.helpMargin": "Поля должны быть настроены в соответствии с вашей этикеточной бумагой и принтером. Их изменение повлияет на размер всей сетки.",
|
||||
"printing.generic.helpPrinterMargin": "В безопасной зоне должно быть установлено, насколько близко к краю бумаги может печатать ваш принтер. Изменение этих значений не повлияет на всю сетку.",
|
||||
"printing.generic.horizontalSpacing": "Горизонтальный интервал",
|
||||
@@ -65,7 +434,11 @@
|
||||
"printing.generic.skipItems": "Пропустить элементы",
|
||||
"printing.generic.verticalSpacing": "Вертикальный интервал",
|
||||
"printing.qrcode.button": "Печать этикеток",
|
||||
"printing.qrcode.customUrl.caveat": "Пользовательский URL не будет сканироваться обратно в Spoolman — используйте его для внешних приложений.",
|
||||
"printing.qrcode.customUrl.hint": "Вставьте ID катушки в любое место с помощью плейсхолдера",
|
||||
"printing.qrcode.customUrl.label": "Шаблон пользовательского URL",
|
||||
"printing.qrcode.useHTTPUrl.label": "Ссылка на QR-код",
|
||||
"printing.qrcode.useHTTPUrl.options.custom": "Пользовательский URL",
|
||||
"printing.qrcode.useHTTPUrl.options.default": "По умолчанию",
|
||||
"printing.qrcode.useHTTPUrl.options.url": "URL",
|
||||
"printing.qrcode.useHTTPUrl.preview": "Предварительный просмотр:",
|
||||
@@ -74,19 +447,47 @@
|
||||
"printing.spoolSelect.selectedTotal_many": "{{count}} катушек выбрано",
|
||||
"printing.spoolSelect.selectedTotal_one": "{{count}} катушка выбрана",
|
||||
"scanner.description": "Отсканируйте QR-код Spoolman, чтобы просмотреть подробную информацию о катушке.",
|
||||
"scanner.error.inUse": "Камера уже используется другим приложением.",
|
||||
"scanner.error.insecureContext": "Страница не обслуживается по протоколу HTTPS.",
|
||||
"scanner.error.notAllowed": "Вы запретили доступ к камере.",
|
||||
"scanner.error.notFound": "Ни одна камера не найдена.",
|
||||
"scanner.error.streamApiNotSupported": "Браузер не поддерживает API MediaStream.",
|
||||
"scanner.error.unknown": "Произошла неизвестная ошибка. ({{error}})",
|
||||
"scanner.starting": "Запуск камеры...",
|
||||
"scanner.title": "Сканер QR-кода",
|
||||
"search.colorHint": "Имена цветов должны быть на английском.",
|
||||
"search.moreSpools": "+{{count}} еще",
|
||||
"search.noResults": "Совпадений не найдено",
|
||||
"search.searching": "Поиск...",
|
||||
"search.section.filaments": "Филаменты",
|
||||
"search.section.spools": "Катушки",
|
||||
"search.section.vendors": "Производители",
|
||||
"search.threshold": "Соответствие цвета",
|
||||
"search.unknownFilament": "Неизвестный филамент",
|
||||
"settings.appearance.tab": "Внешний вид",
|
||||
"settings.appearance.theme.dark": "Темная",
|
||||
"settings.appearance.theme.desc": "Цветовая тема (только для этого браузера)",
|
||||
"settings.appearance.theme.label": "Тема",
|
||||
"settings.appearance.theme.light": "Светлая",
|
||||
"settings.appearance.theme.system": "Системная",
|
||||
"settings.extraFields.addChoice": "добавить вариант...",
|
||||
"settings.extraFields.addChoicesFirst": "Сначала добавьте варианты",
|
||||
"settings.extraFields.addEntityField": "Добавить поле для {{entity}}",
|
||||
"settings.extraFields.booleanFalse": "Нет",
|
||||
"settings.extraFields.booleanTrue": "Да",
|
||||
"settings.extraFields.deleteConfirm": "Удалить поле {{name}}?",
|
||||
"settings.extraFields.description.intro": "Здесь вы можете добавлять дополнительные пользовательские поля к своим сущностям.",
|
||||
"settings.extraFields.deleteConfirm": "Удалить поле {{name}} у {{entity}}?",
|
||||
"settings.extraFields.description.constraints": "Как только поле добавлено, вы не можете изменить его ключ или тип, а для полей типа выбора вы не можете удалить варианты или изменить состояние множественного выбора. Если вы удалите поле, связанные данные для всех сущностей будут удалены.",
|
||||
"settings.extraFields.description.intro": "Здесь вы можете добавлять дополнительные пользовательские поля к своим сущностям.",
|
||||
"settings.extraFields.description.keyUsage": "Ключевым моментом является то, как другие программы считывают/записывают данные, поэтому, если предполагается, что ваше пользовательское поле интегрируется со сторонней программой, убедитесь, что оно настроено правильно. Значение по умолчанию применяется только к новым элементам.",
|
||||
"settings.extraFields.description.tableViews": "Дополнительные поля нельзя отсортировать или отфильтровать в табличных представлениях.",
|
||||
"settings.extraFields.editorEdit": "Редактировать поле {{entity}}",
|
||||
"settings.extraFields.editorNew": "Новое поле {{entity}}",
|
||||
"settings.extraFields.errors.choiceNeeded": "Поля выбора требуют минимум один вариант.",
|
||||
"settings.extraFields.errors.choicesRemoved": "Существующие варианты нельзя удалить: {{choices}}.",
|
||||
"settings.extraFields.errors.deleteFailed": "Не удалось удалить поле.",
|
||||
"settings.extraFields.errors.keyFormat": "Ключ может содержать только строчные буквы, цифры и подчеркивания.",
|
||||
"settings.extraFields.errors.nameRequired": "Имя обязательно.",
|
||||
"settings.extraFields.errors.saveFailed": "Не удалось сохранить поле.",
|
||||
"settings.extraFields.fieldType.boolean": "Логический",
|
||||
"settings.extraFields.fieldType.choice": "Выбор",
|
||||
"settings.extraFields.fieldType.datetime": "Дата и время",
|
||||
@@ -95,22 +496,51 @@
|
||||
"settings.extraFields.fieldType.integer": "Целое число",
|
||||
"settings.extraFields.fieldType.integerRange": "Целочисленный диапазон",
|
||||
"settings.extraFields.fieldType.text": "Текст",
|
||||
"settings.extraFields.max": "макс",
|
||||
"settings.extraFields.min": "мин",
|
||||
"settings.extraFields.multiSuffix": " · мульти",
|
||||
"settings.extraFields.multiple": "Множественный",
|
||||
"settings.extraFields.namePlaceholder": "Отображаемое название",
|
||||
"settings.extraFields.nonUniqueKeyError": "Ключ должен быть уникальным.",
|
||||
"settings.extraFields.none": "Нет дополнительных полей для {{entity}}.",
|
||||
"settings.extraFields.params.choices": "Выбор",
|
||||
"settings.extraFields.params.defaultValue": "Значение по умолчанию",
|
||||
"settings.extraFields.params.fieldType": "Тип",
|
||||
"settings.extraFields.params.key": "Ключ",
|
||||
"settings.extraFields.params.name": "Имя",
|
||||
"settings.extraFields.params.order": "Заказ",
|
||||
"settings.extraFields.params.order": "Сортировка",
|
||||
"settings.extraFields.params.unit": "Единица измерения",
|
||||
"settings.extraFields.reorderChoice": "Перетащите или используйте стрелки для изменения порядка вариантов.",
|
||||
"settings.extraFields.saveField": "Сохранить поле",
|
||||
"settings.extraFields.tab": "Дополнительные поля",
|
||||
"settings.general.baseUrl.label": "Базовый URL-адрес",
|
||||
"settings.general.baseUrl.tooltip": "Базовый URL-адрес, используемый при создании таких функций, как QR-коды.",
|
||||
"settings.general.currency.desc": "Трёхбуквенный ISO код валюты (например RUB, USD)",
|
||||
"settings.general.currency.label": "Валюта",
|
||||
"settings.general.roundPrices.label": "Округлять цены",
|
||||
"settings.general.roundPrices.tooltip": "Округлять цены до ближайшего целого числа.",
|
||||
"settings.general.tab": "Общие",
|
||||
"settings.header": "Настройки",
|
||||
"settings.language.desc": "Язык интерфейса (только этот браузер)",
|
||||
"settings.language.label": "Язык",
|
||||
"settings.library.lowThreshold.desc": "Катушка с таким остатком или меньше, будет помечена красным (только этот браузер)",
|
||||
"settings.library.lowThreshold.label": "Порог низкого остатка",
|
||||
"settings.library.tab": "Поведение библиотеки",
|
||||
"settings.scanner.autoNavigate.desc": "Автоматически переходить в этом веб-браузере к катушке или филаменту, считанным считывателем меток.",
|
||||
"settings.scanner.autoNavigate.label": "Автопереход",
|
||||
"settings.scanner.docs": "Как настроить считыватель меток",
|
||||
"settings.scanner.lastSeen": "{{when}} назад",
|
||||
"settings.scanner.pair": "Сопряжение касанием",
|
||||
"settings.scanner.reader.anyDesc": "Сканирование любым считывателем открывает катушки в этом веб-браузере. Вы можете выполнить сопряжение с конкретным считывателем, если вам нужен более точный контроль. Этот же считыватель будет использоваться для добавления новых меток к катушкам и филаментам.",
|
||||
"settings.scanner.reader.label": "Считыватель меток",
|
||||
"settings.scanner.reader.pairedDesc": "Только сканирование этим считывателем открывает катушки в этом веб-браузере.",
|
||||
"settings.scanner.recent": "Недавние считыватели",
|
||||
"settings.scanner.recentNone": "В памяти нет считывателей. Настройте считыватель меток, а затем считайте любую метку, чтобы он появился здесь.",
|
||||
"settings.scanner.tab": "Сканирование меток",
|
||||
"settings.scanner.unpair": "Использовать любой считыватель",
|
||||
"settings.scanner.use": "Использовать этот",
|
||||
"settings.scanner.waiting": "Приложите любую метку к нужному считывателю...",
|
||||
"sponsor": "Поддержать меня на GitHub",
|
||||
"spool.fields.archived": "В архиве",
|
||||
"spool.fields.comment": "Комментарий",
|
||||
"spool.fields.filament": "Филамент",
|
||||
@@ -124,17 +554,81 @@
|
||||
"spool.fields.price": "Цена",
|
||||
"spool.fields.registered": "Добавлен",
|
||||
"spool.fields.remainingWeight": "Оставшийся вес",
|
||||
"spool.fields.spoolWeight": "Вес катушки",
|
||||
"spool.fields.usedWeight": "Использованный вес",
|
||||
"spool.fields.weight": "Вес",
|
||||
"spool.fieldsHelp.location": "Где находится катушка, если у вас есть несколько мест хранения катушек.",
|
||||
"spool.fieldsHelp.lotNr": "Номер партии производителя. Может использоваться для обеспечения однородного цвета печати при использовании нескольких катушек.",
|
||||
"spool.fieldsHelp.measuredWeight": "Сколько весит филамент и катушка.",
|
||||
"spool.fieldsHelp.price": "Цена полной катушки. Если не указано, будет использоваться цена филамента.",
|
||||
"spool.fieldsHelp.remainingWeight": "Сколько филамента осталось на катушке. Для новой катушки этот вес должен соответствовать весу катушки.",
|
||||
"spool.fieldsHelp.spoolWeight": "Вес пустой катушки. Оставьте поле пустым, чтобы использовать значение по умолчанию для филамента, или укажите, если эта конкретная катушка отличается (например, перемотанный ролик или картонная втулка вместо пластиковой). Это значение вычитается из измеренного веса при настройке, поэтому неправильное значение приведет к неверному расчету остатка филамента.",
|
||||
"spool.fieldsHelp.usedWeight": "Сколько филамента было использовано с катушки. На новой катушке должно быть использовано 0 г.",
|
||||
"spool.fieldsHelp.weight": "Сколько филамента было на катушке, когда она была полной (вес нетто, без учета самой катушки). Оставьте поле пустым, чтобы использовать вес филамента, или укажите значение, если эта конкретная катушка отличается — например, неполный рулон или тот же филамент на катушке большего размера.",
|
||||
"spool.form.measurementType.length": "Длина",
|
||||
"spool.form.measurementType.weight": "Вес",
|
||||
"spool.spool": "Катушки",
|
||||
"tags.add": "Добавить метку",
|
||||
"tags.added": "Метка привязана.",
|
||||
"tags.addedOn": "Добавлено {{date}}",
|
||||
"tags.modal.alreadyHere": "Эта метка уже идентифицирует эту катушку.",
|
||||
"tags.modal.alreadyHereFilament": "Эта метка уже идентифицирует этот филамент.",
|
||||
"tags.modal.badUid": "UID метки в HEX-формате, например 04A2B3C4.",
|
||||
"tags.modal.checking": "Проверка...",
|
||||
"tags.modal.failed": "Не удалось привязать метку.",
|
||||
"tags.modal.filamentNamed": "филамент {{name}}",
|
||||
"tags.modal.free": "Эта метка пока ни к чему не привязана.",
|
||||
"tags.modal.intro": "При поднесении этой метки к считывателю будет найдена катушка #{{id}}.",
|
||||
"tags.modal.introFilament": "При поднесении этой метки к считывателю будет найден этот филамент.",
|
||||
"tags.modal.lastSeenOn": "{{reader}} последний раз считал {{uid}}.",
|
||||
"tags.modal.link": "Привязать метку",
|
||||
"tags.modal.linking": "Привязка...",
|
||||
"tags.modal.move": "Переместить сюда с #{{id}}",
|
||||
"tags.modal.moveFailed": "Не удалось переместить метку. Возможно, теперь она не привязана ни к одной из катушек — попробуйте привязать её снова.",
|
||||
"tags.modal.moveFailedFilament": "Не удалось переместить метку. Возможно, теперь она ни к чему не привязана — попробуйте привязать её снова.",
|
||||
"tags.modal.moveHere": "Переместить сюда",
|
||||
"tags.modal.moving": "Перемещение...",
|
||||
"tags.modal.phoneReading": "Приложите метку к телефону...",
|
||||
"tags.modal.phoneScan": "Считать метку с помощью этого телефона",
|
||||
"tags.modal.spoolNamed": "катушка #{{id}}, {{name}}",
|
||||
"tags.modal.spoolShort": "катушка #{{id}}",
|
||||
"tags.modal.takenBy": "В настоящее время привязана к {{spool}}.",
|
||||
"tags.modal.title": "Привязать метку",
|
||||
"tags.modal.uidHelp": "Разделители и регистр не имеют значения: 04:a2:b3:c4, 04-A2-B3-C4 и 04a2b3c4 — это одна и та же метка.",
|
||||
"tags.modal.uidLabel": "UID метки",
|
||||
"tags.modal.uidPlaceholder": "04A2B3C4",
|
||||
"tags.modal.useLastSeen": "Использовать",
|
||||
"tags.modal.waitingAny": "Ожидание считывания на любом считывателе.",
|
||||
"tags.modal.waitingOn": "Ожидание считывания на {{reader}}.",
|
||||
"tags.moved": "Метка перемещена сюда с катушки #{{id}}.",
|
||||
"tags.movedFromFilament": "Метка перемещена сюда с филамента {{name}}.",
|
||||
"tags.nfc.insecureContext": "Для считывания меток требуется защищённое соединение. Откройте Spoolman по HTTPS, чтобы использовать NFC телефона.",
|
||||
"tags.nfc.notAllowed": "Этому сайту не разрешено использовать NFC. Предоставьте разрешение в настройках сайта в браузере и попробуйте снова.",
|
||||
"tags.nfc.notReadable": "Считыватель NFC недоступен — возможно, его использует другое приложение.",
|
||||
"tags.nfc.notSupported": "В этом телефоне нет NFC или NFC отключён в системных настройках.",
|
||||
"tags.nfc.unknown": "Не удалось считать метку.",
|
||||
"tags.none": "Нет привязанных меток.",
|
||||
"tags.scan.openedFilament": "Метка отсканирована: открыт филамент {{name}}.",
|
||||
"tags.scan.openedSpool": "Метка отсканирована: открыта катушка #{{id}}, {{name}}.",
|
||||
"tags.scan.unknown": "Неизвестная метка {{uid}}. Откройте катушку, которой она принадлежит, и используйте «Добавить метку», чтобы привязать её.",
|
||||
"tags.section": "Метки",
|
||||
"tags.unlink": "Отвязать",
|
||||
"tags.unlinkBody": "Метка {{uid}} больше не будет идентифицировать эту катушку. На саму метку ничего не записывается, поэтому вы можете привязать её снова — к этой или другой катушке — в любое время.",
|
||||
"tags.unlinkBodyFilament": "Метка {{uid}} больше не будет идентифицировать этот филамент. На саму метку ничего не записывается, поэтому вы можете привязать её снова — здесь или в другом месте — в любое время.",
|
||||
"tags.unlinkFailed": "Не удалось отвязать метку.",
|
||||
"tags.unlinkTitle": "Отвязать эту метку?",
|
||||
"tags.unlinked": "Метка отвязана.",
|
||||
"tags.unlinking": "Отвязка...",
|
||||
"topbar.addSpools": "Добавить катушки",
|
||||
"topbar.searchPlaceholder": "Поиск — попробуйте \"red\" или \"pla\"",
|
||||
"unknown": "Неизвестно",
|
||||
"validation.hexDigits": "Используйте 6 или 8 шестнадцатеричных цифр",
|
||||
"validation.maxChars": "Максимум {{max}} символов",
|
||||
"validation.mustBeGt": "Должно быть больше {{value}}",
|
||||
"validation.mustBeMax": "Должно быть равно или меньше {{value}}",
|
||||
"validation.mustBeMin": "Должно быть равно или больше {{value}}",
|
||||
"validation.mustBeNumber": "Должно быть числом",
|
||||
"validation.required": "Обязательное",
|
||||
"vendor.fields.comment": "Комментарий",
|
||||
"vendor.fields.emptySpoolWeight": "Вес пустой катушки",
|
||||
"vendor.fields.externalId": "Внешний ID",
|
||||
|
||||
@@ -1,11 +1,455 @@
|
||||
{
|
||||
"add.addAndNew": "",
|
||||
"add.adding": "",
|
||||
"add.advanced": "",
|
||||
"add.advancedNote": "",
|
||||
"add.change": "",
|
||||
"add.count": "",
|
||||
"add.createNew": "",
|
||||
"add.createNewSub": "",
|
||||
"add.dbUnavailable": "",
|
||||
"add.duplicate": "",
|
||||
"add.duplicateNote": "",
|
||||
"add.duplicateRename": "",
|
||||
"add.duplicateTitle": "",
|
||||
"add.filamentNamePlaceholder": "",
|
||||
"add.fill.full": "",
|
||||
"add.fillLevel": "",
|
||||
"add.importNote": "",
|
||||
"add.inCatalog": "",
|
||||
"add.locationHint": "",
|
||||
"add.locationPlaceholder": "",
|
||||
"add.manufacturerPlaceholder": "",
|
||||
"add.nameHint": "",
|
||||
"add.newFilament": "",
|
||||
"add.newFilamentTitle": "",
|
||||
"add.noCatalog": "",
|
||||
"add.noManufacturer": "",
|
||||
"add.pickColor": "",
|
||||
"add.searchPlaceholder": "",
|
||||
"add.searching": "",
|
||||
"add.spoolWeightPreset.cardboard": "",
|
||||
"add.spoolWeightPreset.plastic": "",
|
||||
"add.spoolWeightPresetsLead": "",
|
||||
"add.step2": "",
|
||||
"add.typeToSearchAll": "",
|
||||
"add.typeToSearchMatches": "",
|
||||
"add.useExisting": "",
|
||||
"add.vendorHint.existing": "",
|
||||
"add.vendorHint.new": "",
|
||||
"add.vendorHint.optional": "",
|
||||
"add.yourCatalog": "",
|
||||
"buttons.archive": "Archivovať",
|
||||
"buttons.cancel": "Zrušiť",
|
||||
"buttons.clear": "Vyčistiť",
|
||||
"buttons.close": "",
|
||||
"buttons.delete": "Zmazať",
|
||||
"buttons.edit": "Editovať",
|
||||
"buttons.filter": "Filter",
|
||||
"buttons.save": "Uložiť",
|
||||
"buttons.showArchived": "Zobraziť Archivované",
|
||||
"notifications.error": "Chyba (status code: {{statusCode}})"
|
||||
"buttons.unArchive": "",
|
||||
"common.decrement": "",
|
||||
"common.increment": "",
|
||||
"common.remove": "",
|
||||
"common.search": "",
|
||||
"dashboard.addFieldHint": "",
|
||||
"dashboard.dashboard": "",
|
||||
"dashboard.deleteGroup": "",
|
||||
"dashboard.dragHint": "",
|
||||
"dashboard.dropHere": "",
|
||||
"dashboard.emptyHelp": "",
|
||||
"dashboard.errorEmptyName": "",
|
||||
"dashboard.errorExists": "",
|
||||
"dashboard.errorRename": "",
|
||||
"dashboard.lastUsed": "",
|
||||
"dashboard.newGroup": "",
|
||||
"dashboard.newGroupName": "",
|
||||
"dashboard.reorderGroup": "",
|
||||
"dashboard.unassigned": "",
|
||||
"datetime.done": "",
|
||||
"datetime.hour": "",
|
||||
"datetime.minute": "",
|
||||
"datetime.nextMonth": "",
|
||||
"datetime.now": "",
|
||||
"datetime.pick": "",
|
||||
"datetime.prevMonth": "",
|
||||
"datetime.time": "",
|
||||
"documentTitle.dashboard.list": "",
|
||||
"documentTitle.labels.list": "",
|
||||
"documentTitle.library.list": "",
|
||||
"documentTitle.settings.list": "",
|
||||
"filament.fields.addColor": "",
|
||||
"filament.fields.articleNumber": "",
|
||||
"filament.fields.coaxial": "",
|
||||
"filament.fields.colorHex": "",
|
||||
"filament.fields.colorType": "",
|
||||
"filament.fields.comment": "",
|
||||
"filament.fields.density": "",
|
||||
"filament.fields.diameter": "",
|
||||
"filament.fields.externalId": "",
|
||||
"filament.fields.id": "",
|
||||
"filament.fields.longitudinal": "",
|
||||
"filament.fields.material": "",
|
||||
"filament.fields.multiColor": "",
|
||||
"filament.fields.name": "",
|
||||
"filament.fields.price": "",
|
||||
"filament.fields.registered": "",
|
||||
"filament.fields.removeColor": "",
|
||||
"filament.fields.settingsBedTemp": "",
|
||||
"filament.fields.settingsExtruderTemp": "",
|
||||
"filament.fields.singleColor": "",
|
||||
"filament.fields.spoolWeight": "",
|
||||
"filament.fields.vendor": "",
|
||||
"filament.fields.weight": "",
|
||||
"filament.fieldsHelp.articleNumber": "",
|
||||
"filament.fieldsHelp.multiColorDirection": "",
|
||||
"filament.fieldsHelp.spoolWeight": "",
|
||||
"filament.fieldsHelp.weight": "",
|
||||
"filament.filament": "",
|
||||
"footer.documentation": "",
|
||||
"footer.reportIssue": "",
|
||||
"help.help": "",
|
||||
"inspector.addSpoolsOfThis": "",
|
||||
"inspector.adjustFailed": "",
|
||||
"inspector.adjustHelp": "",
|
||||
"inspector.adjustWeight": "",
|
||||
"inspector.apply": "",
|
||||
"inspector.applying": "",
|
||||
"inspector.colorHex": "",
|
||||
"inspector.consumeAmount": "",
|
||||
"inspector.delete.deleting": "",
|
||||
"inspector.delete.errorGone": "",
|
||||
"inspector.delete.errorSpoolsExist": "",
|
||||
"inspector.delete.errorUnknown": "",
|
||||
"inspector.delete.filament": "",
|
||||
"inspector.delete.filamentBlockedHint": "",
|
||||
"inspector.delete.filamentBlockedTitle": "",
|
||||
"inspector.delete.filamentBody": "",
|
||||
"inspector.delete.filamentDone": "",
|
||||
"inspector.delete.filamentTitle": "",
|
||||
"inspector.delete.spool": "",
|
||||
"inspector.delete.spoolBody": "",
|
||||
"inspector.delete.spoolDone": "",
|
||||
"inspector.delete.spoolRemaining": "",
|
||||
"inspector.delete.spoolTitle": "",
|
||||
"inspector.delete.vendor": "",
|
||||
"inspector.delete.vendorBody": "",
|
||||
"inspector.delete.vendorDone": "",
|
||||
"inspector.delete.vendorTitle": "",
|
||||
"inspector.duplicateFilament": "",
|
||||
"inspector.empty": "",
|
||||
"inspector.enterValidLength": "",
|
||||
"inspector.enterValidWeight": "",
|
||||
"inspector.loading": "",
|
||||
"inspector.manageExtraFields": "",
|
||||
"inspector.measuredHelp": "",
|
||||
"inspector.multi": "",
|
||||
"inspector.newGross": "",
|
||||
"inspector.noExtraFields": "",
|
||||
"inspector.notFound": "",
|
||||
"inspector.ofRemaining": "",
|
||||
"inspector.openFilament": "",
|
||||
"inspector.openLink": "",
|
||||
"inspector.openManufacturer": "",
|
||||
"inspector.specs": "",
|
||||
"inspector.spoolsCount": "",
|
||||
"inspector.spoolsTotalRemaining": "",
|
||||
"inspector.used": "",
|
||||
"kofi": "",
|
||||
"labels.addHead": "",
|
||||
"labels.addQr": "",
|
||||
"labels.addRect": "",
|
||||
"labels.addSwatch": "",
|
||||
"labels.addText": "",
|
||||
"labels.align": "",
|
||||
"labels.alignCenter": "",
|
||||
"labels.alignLeft": "",
|
||||
"labels.alignRight": "",
|
||||
"labels.blank": "",
|
||||
"labels.bold": "",
|
||||
"labels.canvasHint": "",
|
||||
"labels.centerLogo": "",
|
||||
"labels.chooseField": "",
|
||||
"labels.clearFill": "",
|
||||
"labels.copies": "",
|
||||
"labels.cornerRadiusMm": "",
|
||||
"labels.createFirst": "",
|
||||
"labels.cutGuides": "",
|
||||
"labels.deleteConfirm": "",
|
||||
"labels.deleteElement": "",
|
||||
"labels.designName": "",
|
||||
"labels.designerDesc": "",
|
||||
"labels.designerTitle": "",
|
||||
"labels.dpi": "",
|
||||
"labels.dpiHint": "",
|
||||
"labels.duplicate": "",
|
||||
"labels.fields.bedTemp": "",
|
||||
"labels.fields.diameterMm": "",
|
||||
"labels.fields.groupVendor": "",
|
||||
"labels.fields.initialG": "",
|
||||
"labels.fields.netWeightG": "",
|
||||
"labels.fields.remainingG": "",
|
||||
"labels.fill": "",
|
||||
"labels.fitWidth": "",
|
||||
"labels.fitWidthHint": "",
|
||||
"labels.fontMm": "",
|
||||
"labels.gridInfo": "",
|
||||
"labels.hMm": "",
|
||||
"labels.heightMm": "",
|
||||
"labels.hintNowrap": "",
|
||||
"labels.hintSwatch": "",
|
||||
"labels.hintWrap": "",
|
||||
"labels.imageDesc": "",
|
||||
"labels.imageZipNote": "",
|
||||
"labels.insertField": "",
|
||||
"labels.kind.qr": "",
|
||||
"labels.kind.rect": "",
|
||||
"labels.kind.swatch": "",
|
||||
"labels.kind.text": "",
|
||||
"labels.labelSize": "",
|
||||
"labels.labelType": "",
|
||||
"labels.layout": "",
|
||||
"labels.modeImage": "",
|
||||
"labels.modeLabel": "",
|
||||
"labels.modeSheet": "",
|
||||
"labels.new": "",
|
||||
"labels.newText": "",
|
||||
"labels.noDesignsOption": "",
|
||||
"labels.noFilaments": "",
|
||||
"labels.noSpools": "",
|
||||
"labels.onePerLabel": "",
|
||||
"labels.preparing": "",
|
||||
"labels.preview": "",
|
||||
"labels.previewWith": "",
|
||||
"labels.radiusMm": "",
|
||||
"labels.sampleData": "",
|
||||
"labels.saved": "",
|
||||
"labels.saving": "",
|
||||
"labels.searchFilaments": "",
|
||||
"labels.searchSpools": "",
|
||||
"labels.selectAllShort": "",
|
||||
"labels.selectAtLeastOne": "",
|
||||
"labels.selectAtLeastOneFilament": "",
|
||||
"labels.selectDesign": "",
|
||||
"labels.selectElement": "",
|
||||
"labels.selectNoneShort": "",
|
||||
"labels.selectRecentHint": "",
|
||||
"labels.selectRecentShort": "",
|
||||
"labels.showingFilament": "",
|
||||
"labels.showingReal": "",
|
||||
"labels.showingSpool": "",
|
||||
"labels.showingTags": "",
|
||||
"labels.sizeMm": "",
|
||||
"labels.skipHint": "",
|
||||
"labels.sortHint": "",
|
||||
"labels.sortId": "",
|
||||
"labels.sortNewest": "",
|
||||
"labels.stroke": "",
|
||||
"labels.strokeMm": "",
|
||||
"labels.tabDesign": "",
|
||||
"labels.tabPrint": "",
|
||||
"labels.textTemplate": "",
|
||||
"labels.typeFilament": "",
|
||||
"labels.typeHint": "",
|
||||
"labels.typeSpool": "",
|
||||
"labels.unknownFilament": "",
|
||||
"labels.wMm": "",
|
||||
"labels.widthMm": "",
|
||||
"labels.wrapText": "",
|
||||
"labels.xMm": "",
|
||||
"labels.yMm": "",
|
||||
"library.apiError": "",
|
||||
"library.collapseGroup": "",
|
||||
"library.emptyBody": "",
|
||||
"library.emptyFiltered": "",
|
||||
"library.emptyTitle": "",
|
||||
"library.expandGroup": "",
|
||||
"library.filterBy": "",
|
||||
"library.groupBy": "",
|
||||
"library.groupNone": "",
|
||||
"library.nUnused": "",
|
||||
"library.noLocation": "",
|
||||
"library.noValues": "",
|
||||
"library.openGroup": "",
|
||||
"library.openManufacturer": "",
|
||||
"library.section.extra": "",
|
||||
"library.section.filament": "",
|
||||
"library.section.spool": "",
|
||||
"library.section.vendor": "",
|
||||
"library.showMore": "",
|
||||
"library.sort.nozzle": "",
|
||||
"library.sortBy": "",
|
||||
"library.unassigned": "",
|
||||
"library.unitGroups": "",
|
||||
"library.unitSpools": "",
|
||||
"library.unused": "",
|
||||
"library.unusedGroup": "",
|
||||
"library.unusedGroupMixed": "",
|
||||
"library.unusedSub": "",
|
||||
"library.unusedSubMixed": "",
|
||||
"library.used": "",
|
||||
"library.usedAgo": "",
|
||||
"loading": "",
|
||||
"nav.labels": "",
|
||||
"nav.library": "",
|
||||
"no": "",
|
||||
"notifications.error": "Chyba (status code: {{statusCode}})",
|
||||
"notifications.saveSuccessful": "",
|
||||
"pagination.empty": "",
|
||||
"pagination.next": "",
|
||||
"pagination.pageSize": "",
|
||||
"pagination.perPage": "",
|
||||
"pagination.prev": "",
|
||||
"pagination.range": "",
|
||||
"printing.generic.columns": "",
|
||||
"printing.generic.customSize": "",
|
||||
"printing.generic.description": "",
|
||||
"printing.generic.dimensions": "",
|
||||
"printing.generic.gridTooWide": "",
|
||||
"printing.generic.helpMargin": "",
|
||||
"printing.generic.helpPrinterMargin": "",
|
||||
"printing.generic.horizontalSpacing": "",
|
||||
"printing.generic.itemCopies": "",
|
||||
"printing.generic.marginBottom": "",
|
||||
"printing.generic.marginLeft": "",
|
||||
"printing.generic.marginRight": "",
|
||||
"printing.generic.marginTop": "",
|
||||
"printing.generic.paperSize": "",
|
||||
"printing.generic.printerMarginBottom": "",
|
||||
"printing.generic.printerMarginLeft": "",
|
||||
"printing.generic.printerMarginRight": "",
|
||||
"printing.generic.printerMarginTop": "",
|
||||
"printing.generic.saveAsImage": "",
|
||||
"printing.generic.skipItems": "",
|
||||
"printing.generic.verticalSpacing": "",
|
||||
"printing.qrcode.button": "",
|
||||
"printing.qrcode.customUrl.caveat": "",
|
||||
"printing.qrcode.customUrl.hint": "",
|
||||
"printing.qrcode.customUrl.label": "",
|
||||
"printing.qrcode.useHTTPUrl.label": "",
|
||||
"printing.qrcode.useHTTPUrl.options.custom": "",
|
||||
"printing.qrcode.useHTTPUrl.options.default": "",
|
||||
"printing.qrcode.useHTTPUrl.options.url": "",
|
||||
"printing.qrcode.useHTTPUrl.preview": "",
|
||||
"printing.qrcode.useHTTPUrl.tooltip": "",
|
||||
"scanner.description": "",
|
||||
"scanner.error.inUse": "",
|
||||
"scanner.error.insecureContext": "",
|
||||
"scanner.error.notAllowed": "",
|
||||
"scanner.error.notFound": "",
|
||||
"scanner.error.streamApiNotSupported": "",
|
||||
"scanner.error.unknown": "",
|
||||
"scanner.starting": "",
|
||||
"scanner.title": "",
|
||||
"search.colorHint": "",
|
||||
"search.noResults": "",
|
||||
"search.searching": "",
|
||||
"search.section.filaments": "",
|
||||
"search.section.spools": "",
|
||||
"search.section.vendors": "",
|
||||
"search.threshold": "",
|
||||
"search.unknownFilament": "",
|
||||
"settings.appearance.tab": "",
|
||||
"settings.appearance.theme.dark": "",
|
||||
"settings.appearance.theme.desc": "",
|
||||
"settings.appearance.theme.label": "",
|
||||
"settings.appearance.theme.light": "",
|
||||
"settings.appearance.theme.system": "",
|
||||
"settings.extraFields.addChoice": "",
|
||||
"settings.extraFields.addChoicesFirst": "",
|
||||
"settings.extraFields.addEntityField": "",
|
||||
"settings.extraFields.booleanFalse": "",
|
||||
"settings.extraFields.booleanTrue": "",
|
||||
"settings.extraFields.deleteConfirm": "",
|
||||
"settings.extraFields.description.constraints": "",
|
||||
"settings.extraFields.description.intro": "",
|
||||
"settings.extraFields.description.keyUsage": "",
|
||||
"settings.extraFields.description.tableViews": "",
|
||||
"settings.extraFields.editorEdit": "",
|
||||
"settings.extraFields.editorNew": "",
|
||||
"settings.extraFields.errors.choiceNeeded": "",
|
||||
"settings.extraFields.errors.choicesRemoved": "",
|
||||
"settings.extraFields.errors.deleteFailed": "",
|
||||
"settings.extraFields.errors.keyFormat": "",
|
||||
"settings.extraFields.errors.nameRequired": "",
|
||||
"settings.extraFields.errors.saveFailed": "",
|
||||
"settings.extraFields.fieldType.boolean": "",
|
||||
"settings.extraFields.fieldType.choice": "",
|
||||
"settings.extraFields.fieldType.datetime": "",
|
||||
"settings.extraFields.fieldType.float": "",
|
||||
"settings.extraFields.fieldType.floatRange": "",
|
||||
"settings.extraFields.fieldType.integer": "",
|
||||
"settings.extraFields.fieldType.integerRange": "",
|
||||
"settings.extraFields.fieldType.text": "",
|
||||
"settings.extraFields.max": "",
|
||||
"settings.extraFields.min": "",
|
||||
"settings.extraFields.multiSuffix": "",
|
||||
"settings.extraFields.multiple": "",
|
||||
"settings.extraFields.namePlaceholder": "",
|
||||
"settings.extraFields.nonUniqueKeyError": "",
|
||||
"settings.extraFields.none": "",
|
||||
"settings.extraFields.params.choices": "",
|
||||
"settings.extraFields.params.defaultValue": "",
|
||||
"settings.extraFields.params.fieldType": "",
|
||||
"settings.extraFields.params.key": "",
|
||||
"settings.extraFields.params.name": "",
|
||||
"settings.extraFields.params.order": "",
|
||||
"settings.extraFields.params.unit": "",
|
||||
"settings.extraFields.saveField": "",
|
||||
"settings.extraFields.tab": "",
|
||||
"settings.general.baseUrl.label": "",
|
||||
"settings.general.baseUrl.tooltip": "",
|
||||
"settings.general.currency.desc": "",
|
||||
"settings.general.currency.label": "",
|
||||
"settings.general.roundPrices.label": "",
|
||||
"settings.general.roundPrices.tooltip": "",
|
||||
"settings.general.tab": "",
|
||||
"settings.header": "",
|
||||
"settings.language.desc": "",
|
||||
"settings.language.label": "",
|
||||
"settings.library.lowThreshold.desc": "",
|
||||
"settings.library.lowThreshold.label": "",
|
||||
"settings.library.tab": "",
|
||||
"spool.fields.archived": "",
|
||||
"spool.fields.comment": "",
|
||||
"spool.fields.filament": "",
|
||||
"spool.fields.firstUsed": "",
|
||||
"spool.fields.id": "",
|
||||
"spool.fields.lastUsed": "",
|
||||
"spool.fields.location": "",
|
||||
"spool.fields.lotNr": "",
|
||||
"spool.fields.material": "",
|
||||
"spool.fields.measuredWeight": "",
|
||||
"spool.fields.price": "",
|
||||
"spool.fields.registered": "",
|
||||
"spool.fields.remainingWeight": "",
|
||||
"spool.fields.usedWeight": "",
|
||||
"spool.fieldsHelp.location": "",
|
||||
"spool.fieldsHelp.lotNr": "",
|
||||
"spool.fieldsHelp.measuredWeight": "",
|
||||
"spool.fieldsHelp.price": "",
|
||||
"spool.fieldsHelp.remainingWeight": "",
|
||||
"spool.fieldsHelp.usedWeight": "",
|
||||
"spool.form.measurementType.length": "",
|
||||
"spool.form.measurementType.weight": "",
|
||||
"spool.spool": "",
|
||||
"topbar.addSpools": "",
|
||||
"topbar.searchPlaceholder": "",
|
||||
"unknown": "",
|
||||
"validation.hexDigits": "",
|
||||
"validation.maxChars": "",
|
||||
"validation.mustBeGt": "",
|
||||
"validation.mustBeMax": "",
|
||||
"validation.mustBeMin": "",
|
||||
"validation.mustBeNumber": "",
|
||||
"validation.required": "",
|
||||
"vendor.fields.comment": "",
|
||||
"vendor.fields.emptySpoolWeight": "",
|
||||
"vendor.fields.externalId": "",
|
||||
"vendor.fields.id": "",
|
||||
"vendor.fields.name": "",
|
||||
"vendor.fields.registered": "",
|
||||
"vendor.fieldsHelp.emptySpoolWeight": "",
|
||||
"yes": ""
|
||||
}
|
||||
@@ -1,17 +1,141 @@
|
||||
{
|
||||
"add.addAndNew": "Dodaj in novo",
|
||||
"add.adding": "Dodajanje ...",
|
||||
"add.advanced": "Napredne specifikacije",
|
||||
"add.advancedNote": "gostota, premer, temperature (samodejno izpolnjeno iz materiala)",
|
||||
"add.change": "spremeni",
|
||||
"add.count": "Število",
|
||||
"add.createNew": "Ustvari nov filament",
|
||||
"add.createNewSub": "ni v vašem katalogu ali {{name}}",
|
||||
"add.dbUnavailable": "{{name}} ni na voljo",
|
||||
"add.duplicate": "podvoji",
|
||||
"add.duplicateNote": "Specifikacije, proizvajalec in cena so bili prekopirani. Določite novo ime in barvo.",
|
||||
"add.duplicateRename": "Še vedno ima isto ime kot izvirnik — preimenujte ga, da ju boste razlikovali.",
|
||||
"add.duplicateTitle": "Nov filament · kopija „{{name}}“",
|
||||
"add.filamentNamePlaceholder": "npr. PolyTerra Matte Sage",
|
||||
"add.fill.full": "Polno",
|
||||
"add.fillLevel": "Raven napolnjenosti",
|
||||
"add.importNote": "Ta filament bo dodan v vaš katalog, ko dodate kolute.",
|
||||
"add.inCatalog": "v katalogu",
|
||||
"add.locationHint": "Kjer fizično hranite kolut — polica, škatla ali tiskalnik. Pustite prazno, če jih vse hranite na istem mestu.",
|
||||
"add.locationPlaceholder": "npr. Polica A, suha škatla 2, tiskalnik 1",
|
||||
"add.manufacturerPlaceholder": "npr. Polymaker",
|
||||
"add.nameHint": "Vključite barvo — po njej boste ločili svoje filamente.",
|
||||
"add.newFilament": "nov filament",
|
||||
"add.newFilamentTitle": "Nov filament",
|
||||
"add.noCatalog": "V vašem katalogu ni filamentov",
|
||||
"add.noManufacturer": "Ni proizvajalca",
|
||||
"add.pickColor": "Izberi barvo",
|
||||
"add.searchPlaceholder": "Iskanje po vašem katalogu in {{name}} ...",
|
||||
"add.searching": "Iskanje ...",
|
||||
"add.section.filament": "Filament",
|
||||
"add.section.filamentNote": "Izdelek na kolutu – en vnos na barvo.",
|
||||
"add.section.manufacturer": "Proizvajalec",
|
||||
"add.section.manufacturerNote": "Kdo izdeluje filament. Doda se enkrat, nato pa uporabi za vse njihove filamente.",
|
||||
"add.section.spool": "Kolut",
|
||||
"add.section.spoolNote": "Fizični koluti, ki gredo v vaš inventar.",
|
||||
"add.section.spoolSharedNote": "Teža, teža koluta in cena se shranijo tudi kot privzete vrednosti novega filamenta.",
|
||||
"add.spoolWeightPreset.cardboard": "Karton {{weight}} g",
|
||||
"add.spoolWeightPreset.plastic": "Plastika {{weight}} g",
|
||||
"add.spoolWeightPresetsLead": "Začnite s tipičnim kolutom:",
|
||||
"add.step2": "2. korak · podrobnosti o kolutu",
|
||||
"add.step2New": "2. korak · podrobnosti o filamentu in kolutu",
|
||||
"add.typeToSearchAll": "Tipkajte za iskanje med tisoči filamenti",
|
||||
"add.typeToSearchMatches": "Tipkajte za iskanje — ni zadetkov",
|
||||
"add.useExisting": "uporabi obstoječega",
|
||||
"add.vendorHint.existing": "Uporaba obstoječega proizvajalca „{{name}}“",
|
||||
"add.vendorHint.new": "Ustvarjen bo nov proizvajalec „{{name}}“",
|
||||
"add.vendorHint.optional": "Izbirno — pustite prazno, če ni proizvajalca",
|
||||
"add.weightPresets": "Običajne velikosti zvitkov",
|
||||
"add.yourCatalog": "Vaš katalog",
|
||||
"buttons.apply": "Uporabi",
|
||||
"buttons.archive": "Arhiviraj",
|
||||
"buttons.cancel": "Prekliči",
|
||||
"buttons.clear": "Počisti",
|
||||
"buttons.close": "Zapri",
|
||||
"buttons.delete": "Izbriši",
|
||||
"buttons.edit": "Uredi",
|
||||
"buttons.filter": "Filter",
|
||||
"buttons.save": "Shrani",
|
||||
"buttons.showArchived": "Prikaži arhiv",
|
||||
"buttons.showNoSpools": "Prikaži filamente brez kolutov",
|
||||
"buttons.unArchive": "Odstrani iz arhiva",
|
||||
"changeFilament.action": "Spremeni",
|
||||
"changeFilament.adoptWeight": "Nastavi polno težo tega koluta na {{full}}",
|
||||
"changeFilament.adoptWeightHelp": "Zabeležen je kot {{current}} na podlagi filamenta, ki je bil na njem prej. Porabljena teža ({{used}}) se ohrani v obeh primerih, kar pomeni {{remaining}} preostanka.",
|
||||
"changeFilament.apply": "Spremeni filament",
|
||||
"changeFilament.applying": "Spreminjanje ...",
|
||||
"changeFilament.current": "trenutno",
|
||||
"changeFilament.done": "Filament je spremenjen.",
|
||||
"changeFilament.failed": "Filamenta ni bilo mogoče spremeniti.",
|
||||
"changeFilament.importNote": "Ta filament bo dodan v vaš katalog, ko uveljavite spremembo.",
|
||||
"changeFilament.intro": "Kolut št. {{id}} ohrani svojo številko, lokacijo, datume in zgodovino uporabe – spremeni se le filament na njem.",
|
||||
"changeFilament.newTag": "novo",
|
||||
"changeFilament.next": "Spremeni v",
|
||||
"changeFilament.now": "Trenutno",
|
||||
"changeFilament.pickBelow": "Spodaj izberite filament",
|
||||
"changeFilament.title": "Spremeni filament",
|
||||
"changeFilament.useExisting": "Izberite obstoječ filament",
|
||||
"changeFilament.weightFollows": "Ta kolut nima lastne polne teže, zato prevzame težo novega filamenta: {{full}}, kar po že porabljenih {{used}} pusti {{remaining}}.",
|
||||
"changeVendor.action": "Spremeni",
|
||||
"changeVendor.apply": "Spremeni proizvajalca",
|
||||
"changeVendor.applying": "Spreminjanje ...",
|
||||
"changeVendor.clearHint": "Pusti ta filament brez proizvajalca",
|
||||
"changeVendor.create": "Ustvari „{{name}}“",
|
||||
"changeVendor.createHint": "Še ni med vašimi proizvajalci – dodan bo",
|
||||
"changeVendor.current": "trenutno",
|
||||
"changeVendor.done": "Proizvajalec je spremenjen.",
|
||||
"changeVendor.emptySpool": "Prazen kolut {{value}}",
|
||||
"changeVendor.failed": "Proizvajalca ni bilo mogoče spremeniti.",
|
||||
"changeVendor.intro": "„{{name}}“ ohrani svoje kolute, specifikacije in zgodovino – spremeni se le proizvajalec, pod katerega je uvrščen.",
|
||||
"changeVendor.next": "Spremeni v",
|
||||
"changeVendor.noEmptySpool": "Ni teže praznega koluta",
|
||||
"changeVendor.noMatches": "Noben proizvajalec se ne ujema",
|
||||
"changeVendor.none": "Ni še proizvajalcev",
|
||||
"changeVendor.noneNote": "Brez blagovne znamke",
|
||||
"changeVendor.now": "Trenutno",
|
||||
"changeVendor.pickBelow": "Spodaj izberite proizvajalca",
|
||||
"changeVendor.searchPlaceholder": "Iščite ali poimenujte proizvajalca",
|
||||
"changeVendor.tareFollows": "Ta filament nima lastne teže praznega koluta, zato prevzame težo proizvajalca. Po spremembi je to {{value}}, kar predstavlja težo praznega koluta, ko ga izmerite.",
|
||||
"changeVendor.tareGone": "Ta filament nima lastne teže praznega koluta in prevzame proizvajalčevo vrednost {{current}}. Po spremembi ni nobene vrednosti, ki bi jo lahko prevzel, dokler je ne določite filamentu.",
|
||||
"changeVendor.title": "Spremeni proizvajalca",
|
||||
"changeVendor.willBeCreated": "Bo ustvarjeno",
|
||||
"common.decrement": "Zmanjšaj",
|
||||
"common.increment": "Povečaj",
|
||||
"common.remove": "Odstrani",
|
||||
"common.search": "Išči",
|
||||
"dashboard.addFieldHint": "V nastavitvah dodajte besedilno polje ali polje z izbiro h kolutom, da boste lahko združevali tudi po tem",
|
||||
"dashboard.dashboard": "Nadzorna plošča",
|
||||
"dashboard.deleteGroup": "Izbriši skupino",
|
||||
"dashboard.dragHint": "Povlecite kolut na drugo kartico, da spremenite njegovo polje {{field}}, ali znotraj kartice, da spremenite vrstni red",
|
||||
"dashboard.dropHere": "spustite kolute sem",
|
||||
"dashboard.emptyHelp": "Ta stran združuje vaše kolute po polju po vaši izbiri; za začetek dodajte nekaj kolutov!",
|
||||
"dashboard.errorEmptyName": "Ime ne more biti prazno",
|
||||
"dashboard.errorExists": "Skupina s tem imenom že obstaja",
|
||||
"dashboard.errorRename": "Preimenovanje skupine ni uspelo",
|
||||
"dashboard.lastUsed": "Zadnjič uporabljeno pred {{time}}",
|
||||
"dashboard.newGroup": "Nova skupina",
|
||||
"dashboard.newGroupName": "Nova skupina {{n}}",
|
||||
"dashboard.reorderGroup": "Povlecite za spremembo vrstnega reda skupine",
|
||||
"dashboard.unassigned": "Nedodeljeno",
|
||||
"datetime.done": "Končano",
|
||||
"datetime.hour": "Ura",
|
||||
"datetime.minute": "Minuta",
|
||||
"datetime.nextMonth": "Naslednji mesec",
|
||||
"datetime.now": "Zdaj",
|
||||
"datetime.pick": "Izberite datum in čas",
|
||||
"datetime.prevMonth": "Prejšnji mesec",
|
||||
"datetime.time": "Čas",
|
||||
"documentTitle.dashboard.list": "Nadzorna plošča | Spoolman",
|
||||
"documentTitle.labels.list": "Nalepke | Spoolman",
|
||||
"documentTitle.library.list": "Knjižnica | Spoolman",
|
||||
"documentTitle.locations.list": "Lokacije | Kolutar",
|
||||
"documentTitle.settings.list": "Nastavitve | Spoolman",
|
||||
"filament.fields.addColor": "Dodaj barvo",
|
||||
"filament.fields.articleNumber": "Številka izdelka",
|
||||
"filament.fields.coaxial": "Soosno",
|
||||
"filament.fields.colorHex": "Barva",
|
||||
"filament.fields.colorType": "Vrsta barve",
|
||||
"filament.fields.comment": "Komentar",
|
||||
"filament.fields.density": "Gostota",
|
||||
"filament.fields.diameter": "Premer",
|
||||
@@ -21,8 +145,10 @@
|
||||
"filament.fields.material": "Material",
|
||||
"filament.fields.multiColor": "Večbarvno",
|
||||
"filament.fields.name": "Ime",
|
||||
"filament.fields.opacity": "Prosojnost",
|
||||
"filament.fields.price": "Cena",
|
||||
"filament.fields.registered": "Registrirano",
|
||||
"filament.fields.removeColor": "Odstrani barvo",
|
||||
"filament.fields.settingsBedTemp": "Temperatura mize",
|
||||
"filament.fields.settingsExtruderTemp": "Temperatura ekstruderja",
|
||||
"filament.fields.singleColor": "Enobarvno",
|
||||
@@ -34,20 +160,235 @@
|
||||
"filament.fieldsHelp.spoolWeight": "Masa praznega koluta. Uporablja se za določitev izmerjene mase koluta.",
|
||||
"filament.fieldsHelp.weight": "Masa filamenta na polnem kolutu (neto masa). V to se ne sme vključiti mase samega koluta, temveč le masa filamenta. To je običajno navedeno na embalaži.",
|
||||
"filament.filament": "Filamenti",
|
||||
"footer.documentation": "Dokumentacija",
|
||||
"footer.reportIssue": "Prijavi težavo",
|
||||
"help.help": "Pomoč",
|
||||
"inspector.addSpoolsOfThis": "Dodaj kolute tega filamenta",
|
||||
"inspector.adjustFailed": "Prilagoditev teže ni uspela.",
|
||||
"inspector.adjustHelp": "Pozitivna vrednost porablja filament, negativna ga doda nazaj.",
|
||||
"inspector.adjustWeight": "Prilagodi težo",
|
||||
"inspector.apply": "Uporabi",
|
||||
"inspector.applying": "Uporabljanje ...",
|
||||
"inspector.colorHex": "Heksadecimalna koda barve",
|
||||
"inspector.consumeAmount": "Količina porabe:",
|
||||
"inspector.defaultFrom.filament": "{{value}} · privzeto za filament",
|
||||
"inspector.defaultFrom.manufacturer": "{{value}} · privzeto za proizvajalca",
|
||||
"inspector.delete.deleting": "Brisanje ...",
|
||||
"inspector.delete.errorGone": "Že prej je bil izbrisan.",
|
||||
"inspector.delete.errorSpoolsExist": "Tega filamenta ni mogoče izbrisati – koluti ga še vedno uporabljajo.",
|
||||
"inspector.delete.errorUnknown": "Brisanje ni uspelo. Za podrobnosti si oglejte strežniške dnevnike.",
|
||||
"inspector.delete.filament": "Izbriši filament",
|
||||
"inspector.delete.filamentBlockedHint": "Najprej izbrišite te kolute. Arhiviranje ne zadostuje.",
|
||||
"inspector.delete.filamentBlockedTitle": "Tega filamenta ni mogoče izbrisati",
|
||||
"inspector.delete.filamentBody": "„{{name}}“ bo odstranjen iz vašega kataloga. Tega dejanja ni mogoče razveljaviti.",
|
||||
"inspector.delete.filamentDone": "Filament je izbrisan.",
|
||||
"inspector.delete.filamentTitle": "Želite izbrisati ta filament?",
|
||||
"inspector.delete.spool": "Izbriši kolut",
|
||||
"inspector.delete.spoolBody": "Kolut št. {{id}} izdelka „{{name}}“ bo odstranjen skupaj z zgodovino uporabe. Tega dejanja ni mogoče razveljaviti.",
|
||||
"inspector.delete.spoolDone": "Kolut je izbrisan.",
|
||||
"inspector.delete.spoolRemaining": "Preostalo je še {{weight}} filamenta. Če ga želite le umakniti, ga raje arhivirajte.",
|
||||
"inspector.delete.spoolTitle": "Želite izbrisati ta kolut?",
|
||||
"inspector.delete.vendor": "Izbriši proizvajalca",
|
||||
"inspector.delete.vendorBody": "„{{name}}“ bo odstranjen. Tega dejanja ni mogoče razveljaviti.",
|
||||
"inspector.delete.vendorDone": "Proizvajalec je izbrisan.",
|
||||
"inspector.delete.vendorTitle": "Želite izbrisati tega proizvajalca?",
|
||||
"inspector.duplicateFilament": "Podvoji",
|
||||
"inspector.empty": "Na seznamu izberite kolut, filament ali proizvajalca, da si tukaj ogledate podrobnosti.",
|
||||
"inspector.enterValidLength": "Vnesite veljavno dolžino.",
|
||||
"inspector.enterValidWeight": "Vnesite veljavno težo.",
|
||||
"inspector.loading": "Nalaganje ...",
|
||||
"inspector.manageExtraFields": "Upravljanje polj",
|
||||
"inspector.measuredHelp": "Skupna teža koluta + preostalega filamenta, kot je razvidno s tehtnice.",
|
||||
"inspector.multi": "več ×{{count}}",
|
||||
"inspector.newGross": "Nova bruto teža:",
|
||||
"inspector.noExtraFields": "Še nič — dodajte svoja polja za sledenje vsemu, čemur Spoolman ne sledi.",
|
||||
"inspector.notFound": "Tega predmeta ni bilo mogoče najti. Morda je bil izbrisan.",
|
||||
"inspector.ofRemaining": "od {{weight}} preostalo · {{length}} m",
|
||||
"inspector.openFilament": "Odpri filament",
|
||||
"inspector.openLink": "Odpri {{url}} v novem zavihku",
|
||||
"inspector.openManufacturer": "Odpri proizvajalca",
|
||||
"inspector.override.byFilament": "Povoženo s tem filamentom · {{value}}",
|
||||
"inspector.override.bySpool": "Povoženo s tem kolutom · {{value}}",
|
||||
"inspector.override.overridesFilament": "Povozi filament · {{value}}",
|
||||
"inspector.override.overridesManufacturer": "Povozi proizvajalca · {{value}}",
|
||||
"inspector.specs": "Specifikacije — uredi na mestu",
|
||||
"inspector.spoolsCount": "Koluti · {{count}}",
|
||||
"inspector.spoolsTotalRemaining": "{{weight}} skupaj",
|
||||
"inspector.used": "porabljeno",
|
||||
"kofi": "Prispevajte na Ko-fi",
|
||||
"labels.addHead": "Dodaj",
|
||||
"labels.addQr": "Koda QR",
|
||||
"labels.addRect": "Pravokotnik",
|
||||
"labels.addSwatch": "Barvni vzorec",
|
||||
"labels.addText": "Besedilo / polje",
|
||||
"labels.align": "Poravnaj",
|
||||
"labels.alignCenter": "Sredina",
|
||||
"labels.alignLeft": "Levo",
|
||||
"labels.alignRight": "Desno",
|
||||
"labels.blank": "Nimate še nobenih načrtov nalepk.",
|
||||
"labels.bold": "Krepko",
|
||||
"labels.canvasHint": "Povlecite za premikanje · kliknite za izbiro · ročaji za spreminjanje velikosti.",
|
||||
"labels.centerLogo": "Sredinski logotip Spoolman",
|
||||
"labels.chooseField": "Izberite polje ...",
|
||||
"labels.clearFill": "Brez polnila (samo obroba)",
|
||||
"labels.copies": "Kopije",
|
||||
"labels.cornerRadiusMm": "Polmer kota",
|
||||
"labels.createFirst": "Ustvarite svojo prvo nalepko",
|
||||
"labels.cutGuides": "Vodilne črte za rezanje",
|
||||
"labels.deleteConfirm": "Želite izbrisati ta načrt nalepke?",
|
||||
"labels.deleteElement": "Izbriši element",
|
||||
"labels.designName": "Ime načrta",
|
||||
"labels.designerDesc": "Oblikujte nalepke s kodami QR s poljubnim poljem za kolut, filament ali dobavitelja, nato pa jih natisnite na pole ali s tiskalnikom nalepk. Načrti so shranjeni na strežniku.",
|
||||
"labels.designerTitle": "Oblikovalnik nalepk",
|
||||
"labels.dpi": "Ločljivost",
|
||||
"labels.dpiHint": "Uskladite s tiskalnikom, da bodo majhne nalepke ostre: 203 dpi za večino termičnih tiskalnikov nalepk, 300 ali več za laserske in brizgalne tiskalnike.",
|
||||
"labels.duplicate": "Podvoji",
|
||||
"labels.exportDescAml": "Shrani eno datoteko nalepke .aml na izbrano nalepko, vsaka velikosti {{w}}×{{h}} mm. Odpre se v aplikacijah, temelječih na LPAPI, ki so priložene večini termičnih tiskalnikov nalepk in preberejo fizično velikost iz datoteke.",
|
||||
"labels.exportDescPng": "Shrani eno sliko PNG na izbrano nalepko, vsaka velikosti {{w}}×{{h}} mm.",
|
||||
"labels.exportFormat": "Format datoteke",
|
||||
"labels.exportFormatOptions.aml": "Datoteka nalepke AML",
|
||||
"labels.exportFormatOptions.png": "Slika PNG",
|
||||
"labels.fields.bedTemp": "Temp. delovne plošče",
|
||||
"labels.fields.diameterMm": "Premer (mm)",
|
||||
"labels.fields.groupVendor": "Dobavitelj",
|
||||
"labels.fields.initialG": "Začetna (g)",
|
||||
"labels.fields.netWeightG": "Neto teža (g)",
|
||||
"labels.fields.remainingG": "Preostalo (g)",
|
||||
"labels.fill": "Polnilo",
|
||||
"labels.fitWidth": "Prilagodi širino stolpcem",
|
||||
"labels.fitWidthHint": "Nastavite širino nalepke tako, da izbrano število stolpcev zapolni stran.",
|
||||
"labels.fontMm": "Pisava",
|
||||
"labels.gridInfo": "{{cols}} × {{rows}} = {{perPage}} nalepk / stran",
|
||||
"labels.hMm": "V",
|
||||
"labels.heightMm": "Višina",
|
||||
"labels.hintNowrap": "Besedilo ostane v eni vrstici; vse, kar presega širino, je odrezano.",
|
||||
"labels.hintSwatch": "Ob tiskanju se zapolni z barvami filamenta na kolutu.",
|
||||
"labels.hintWrap": "Obdajte polje, da ga skrijete, ko je prazno:",
|
||||
"labels.imageDesc": "",
|
||||
"labels.imageZipNote": "Več kot {{threshold}} nalepk se dostavi kot ena datoteka zip.",
|
||||
"labels.insertField": "Vstavi polje",
|
||||
"labels.kind.qr": "Koda QR",
|
||||
"labels.kind.rect": "Pravokotnik",
|
||||
"labels.kind.swatch": "Vzorec",
|
||||
"labels.kind.text": "Besedilo",
|
||||
"labels.labelSize": "Velikost nalepke",
|
||||
"labels.labelType": "Vrsta nalepke",
|
||||
"labels.layout": "Postavitev",
|
||||
"labels.modeImage": "Datoteke",
|
||||
"labels.modeLabel": "Tiskalnik nalepk",
|
||||
"labels.modeSheet": "Pola (ploščice)",
|
||||
"labels.new": "Novo",
|
||||
"labels.newText": "Novo besedilo",
|
||||
"labels.noDesignsOption": "Ni še načrtov",
|
||||
"labels.noFilaments": "Ni filamentov.",
|
||||
"labels.noSpools": "Ni kolutov.",
|
||||
"labels.onePerLabel": "Ena stran {{w}}×{{h}} mm na nalepko.",
|
||||
"labels.preparing": "Priprava ...",
|
||||
"labels.preview": "Predogled",
|
||||
"labels.previewWith": "Predogled z",
|
||||
"labels.radiusMm": "Polmer",
|
||||
"labels.sampleData": "Vzorčni podatki",
|
||||
"labels.saveAsFormat": "Shrani kot {{format}}",
|
||||
"labels.saved": "Shranjeno",
|
||||
"labels.saving": "Shranjevanje ...",
|
||||
"labels.searchFilaments": "Išči filamente ...",
|
||||
"labels.searchSpools": "Išči kolute ...",
|
||||
"labels.selectAllShort": "Vse",
|
||||
"labels.selectAtLeastOne": "Izberite vsaj en kolut.",
|
||||
"labels.selectAtLeastOneFilament": "Izberite vsaj en filament.",
|
||||
"labels.selectDesign": "Izberi načrt nalepke",
|
||||
"labels.selectElement": "Izberite element za urejanje ali pa ga dodajte iz palete.",
|
||||
"labels.selectNoneShort": "Brez",
|
||||
"labels.selectRecentHint": "Izberite kolute, dodane v zadnjih 24 urah",
|
||||
"labels.selectRecentShort": "Nedavno ({{count}})",
|
||||
"labels.showingFilament": "Prikaz filamenta št. {{id}}",
|
||||
"labels.showingReal": "Prikaz dejanskih podatkov o kolutu.",
|
||||
"labels.showingSpool": "Prikaz koluta št. {{id}}",
|
||||
"labels.showingTags": "Polja so prikazana kot oznake, dokler zgoraj ne izberete koluta.",
|
||||
"labels.sizeMm": "Velikost",
|
||||
"labels.skipHint": "Možnost Preskoči elemente pusti toliko praznih celic pred prvo nalepko, kar vam omogoča ponovno uporabo delno porabljene pole: preštejte že odlepljene nalepke od leve proti desni z vrha.",
|
||||
"labels.sortHint": "Razvrsti kolute",
|
||||
"labels.sortId": "#",
|
||||
"labels.sortNewest": "Najnovejše",
|
||||
"labels.stroke": "Črta",
|
||||
"labels.strokeMm": "Črta",
|
||||
"labels.tabDesign": "Načrt",
|
||||
"labels.tabPrint": "Natisni",
|
||||
"labels.textTemplate": "Besedilo / predloga",
|
||||
"labels.typeFilament": "Filament",
|
||||
"labels.typeHint": "Nalepke za filamente izpustijo polja, ki so specifična za kolute, njihova koda QR pa vodi do filamenta namesto do koluta.",
|
||||
"labels.typeSpool": "Kolut",
|
||||
"labels.unknownFilament": "Neznan filament",
|
||||
"labels.wMm": "Š",
|
||||
"labels.widthMm": "Širina",
|
||||
"labels.wrapText": "Prelomi besedilo",
|
||||
"labels.xMm": "X",
|
||||
"labels.yMm": "Y",
|
||||
"library.apiError": "Povezava z API-jem Spoolman ni uspela. Ali zaledje deluje?",
|
||||
"library.collapseGroup": "Skrij te kolute",
|
||||
"library.dateFilter.ago": "pred {{span}}",
|
||||
"library.dateFilter.between": "{{from}} – {{to}}",
|
||||
"library.dateFilter.customRange": "Obseg po meri",
|
||||
"library.dateFilter.from": "Od",
|
||||
"library.dateFilter.last": "Zadnjih {{span}}",
|
||||
"library.dateFilter.never": "Nikoli",
|
||||
"library.dateFilter.olderThan": "Starejše od {{span}}",
|
||||
"library.dateFilter.since": "Od {{date}}",
|
||||
"library.dateFilter.to": "Do (neobvezno)",
|
||||
"library.dateFilter.until": "Do {{date}}",
|
||||
"library.emptyBody": "Dodajte svoj prvi kolut, da začnete slediti svojemu filamentu.",
|
||||
"library.emptyFiltered": "Noben {{unit}} ne ustreza trenutnim filtrom.",
|
||||
"library.emptyTitle": "Ni še kolutov",
|
||||
"library.expandGroup": "Prikaži te kolute",
|
||||
"library.filterBy": "Filtriraj po",
|
||||
"library.groupBy": "Skupina",
|
||||
"library.groupNone": "Brez (ravno)",
|
||||
"library.nUnused": "×{{count}} neporabljeno",
|
||||
"library.noLocation": "brez lokacije",
|
||||
"library.noSpools": "Ni kolutov",
|
||||
"library.noValues": "Ni vrednosti",
|
||||
"library.openGroup": "Odpri {{name}}",
|
||||
"library.openManufacturer": "Odpri proizvajalca {{name}}",
|
||||
"library.resizeList": "Spremeni velikost seznama (dvojni klik za ponastavitev)",
|
||||
"library.reverseSort": "Obrni vrstni red razvrščanja",
|
||||
"library.section.extra": "Dodatna polja",
|
||||
"library.section.filament": "Filament",
|
||||
"library.section.spool": "Kolut",
|
||||
"library.section.vendor": "Proizvajalec",
|
||||
"library.showMore": "prikaži še {{count}}",
|
||||
"library.sort.nozzle": "Temp. šobe",
|
||||
"library.sortBy": "Razvrsti",
|
||||
"library.unassigned": "nedodeljeno",
|
||||
"library.unitGroups": "skupine",
|
||||
"library.unitSpools": "koluti",
|
||||
"library.unused": "neporabljeno",
|
||||
"library.unusedGroup": "{{count}} neporabljenih · {{weight}} g vsak",
|
||||
"library.unusedGroupMixed": "{{count}} neporabljenih",
|
||||
"library.unusedSub": "{{weight}} g vsak · {{location}}",
|
||||
"library.unusedSubMixed": "{{location}}",
|
||||
"library.used": "porabljeno",
|
||||
"library.usedAgo": "uporabljeno pred {{time}}",
|
||||
"loading": "Nalaganje",
|
||||
"locations.locations": "Lokacije",
|
||||
"locations.newLocation": "Nova lokacija",
|
||||
"locations.noLocation": "Brez lokacije",
|
||||
"locations.noLocationsHelp": "Na tej strani lahko kolute razvrstite po lokacijah. Za začetek dodajte nekaj kolutov.",
|
||||
"nav.labels": "Nalepke",
|
||||
"nav.library": "Knjižnica",
|
||||
"no": "Ne",
|
||||
"notifications.error": "Napaka (status code: {{statusCode}})",
|
||||
"notifications.saveSuccessful": "Uspešno shranjeno!",
|
||||
"pagination.empty": "Ni {{unit}}",
|
||||
"pagination.next": "Naslednja stran",
|
||||
"pagination.pageSize": "Velikost strani",
|
||||
"pagination.perPage": "{{size}} / stran",
|
||||
"pagination.prev": "Prejšnja stran",
|
||||
"pagination.range": "{{from}}–{{to}} od {{total}} {{unit}}",
|
||||
"printing.generic.columns": "Stolpci",
|
||||
"printing.generic.customSize": "Po meri",
|
||||
"printing.generic.description": "Prilagodite spodnje nastavitve, da dobite želeno postavitev tiskanja. Upoštevajte, da lahko tiskalniki in vaš operacijski sistem uporabijo svoje robove in merilo, zato boste morda morali nekajkrat poskusiti, preden bo vse pravilno. Preizkusite to na navadnem listu papirja, preden natisnete na dejanske nalepke.",
|
||||
"printing.generic.dimensions": "Dimenzije",
|
||||
"printing.generic.gridTooWide": "Nalepke so širše od strani. Zmanjšajte število stolpcev, razmik ali robove.",
|
||||
"printing.generic.helpMargin": "Robove je treba nastaviti tako, da ustrezajo papirju za nalepke in tiskalniku; njihova sprememba bo vplivala na velikost celotne mreže.",
|
||||
"printing.generic.helpPrinterMargin": "Varnostno območje je treba nastaviti glede na to, kako blizu roba papirja lahko tiskalnik tiska; sprememba teh nastavitev ne bo vplivala na celotno mrežo.",
|
||||
"printing.generic.horizontalSpacing": "Vodoraven razmik",
|
||||
@@ -65,7 +406,11 @@
|
||||
"printing.generic.skipItems": "Preskoči elemente",
|
||||
"printing.generic.verticalSpacing": "Navpičen razmik",
|
||||
"printing.qrcode.button": "Natisni nalepke",
|
||||
"printing.qrcode.customUrl.caveat": "URL po meri se ne bo skeniral nazaj v Spoolman — uporabite ga za usmerjanje natisnjene kode QR na zunanjo aplikacijo ali drugega gostitelja.",
|
||||
"printing.qrcode.customUrl.hint": "Z uporabo mesta za vstavljanje vstavite ID koluta kamor koli",
|
||||
"printing.qrcode.customUrl.label": "Predloga URL-ja po meri",
|
||||
"printing.qrcode.useHTTPUrl.label": "Povezava QR kode",
|
||||
"printing.qrcode.useHTTPUrl.options.custom": "URL po meri",
|
||||
"printing.qrcode.useHTTPUrl.options.default": "Privzeto",
|
||||
"printing.qrcode.useHTTPUrl.options.url": "URL",
|
||||
"printing.qrcode.useHTTPUrl.preview": "Predogled:",
|
||||
@@ -75,19 +420,47 @@
|
||||
"printing.spoolSelect.selectedTotal_other": "Izbranih {{count}} kolutov",
|
||||
"printing.spoolSelect.selectedTotal_two": "Izbrana {{count}} koluta",
|
||||
"scanner.description": "Preberite Kolutarjevo QR kodo za ogled podrobnosti o kolutu.",
|
||||
"scanner.error.inUse": "Kamero že uporablja druga aplikacija.",
|
||||
"scanner.error.insecureContext": "Stran ni dostopna prek protokola HTTPS.",
|
||||
"scanner.error.notAllowed": "Niste omogočili dostopa do kamere.",
|
||||
"scanner.error.notFound": "Kamere ni bilo mogoče najti.",
|
||||
"scanner.error.streamApiNotSupported": "Brskalnik ne podpira MediaStream API.",
|
||||
"scanner.error.unknown": "Prišlo je do neznane napake. ({{error}})",
|
||||
"scanner.starting": "Zagon kamere ...",
|
||||
"scanner.title": "Čitalnik QR kode",
|
||||
"search.colorHint": "Imena barv morajo biti vnesena v angleščini.",
|
||||
"search.moreSpools": "še +{{count}}",
|
||||
"search.noResults": "Ni najdenih zadetkov",
|
||||
"search.searching": "Iskanje ...",
|
||||
"search.section.filaments": "Filamenti",
|
||||
"search.section.spools": "Koluti",
|
||||
"search.section.vendors": "Proizvajalci",
|
||||
"search.threshold": "Ujemanje barv",
|
||||
"search.unknownFilament": "Neznan filament",
|
||||
"settings.appearance.tab": "Videz",
|
||||
"settings.appearance.theme.dark": "Temno",
|
||||
"settings.appearance.theme.desc": "Barvna tema (samo za ta brskalnik)",
|
||||
"settings.appearance.theme.label": "Tema",
|
||||
"settings.appearance.theme.light": "Svetlo",
|
||||
"settings.appearance.theme.system": "Sistemsko",
|
||||
"settings.extraFields.addChoice": "dodaj izbiro ...",
|
||||
"settings.extraFields.addChoicesFirst": "Najprej dodajte izbire",
|
||||
"settings.extraFields.addEntityField": "Dodaj polje za {{entity}}",
|
||||
"settings.extraFields.booleanFalse": "Ne",
|
||||
"settings.extraFields.booleanTrue": "Da",
|
||||
"settings.extraFields.deleteConfirm": "Zbrišem polje {{name}}?",
|
||||
"settings.extraFields.description.intro": "Tukaj lahko svojim entitetam dodate dodatna polja po meri.",
|
||||
"settings.extraFields.description.constraints": "Ko je polje dodano, njegovega ključa ali tipa ni mogoče spremeniti, pri poljih tipa »izbira« pa ni mogoče odstraniti možnosti ali spremeniti nastavitve za večkratno izbiro. Če polje odstranite, bodo povezani podatki za vse entitete izbrisani.",
|
||||
"settings.extraFields.description.intro": "Tukaj lahko svojim entitetam dodate dodatna polja po meri.",
|
||||
"settings.extraFields.description.keyUsage": "Ključ je tisto, kar drugi programi uporabljajo za branje/pisanje podatkov, zato če naj bi se vaše polje po meri integriralo s programom tretje osebe, poskrbite, da ga nastavite pravilno. Privzeta vrednost se uporablja le za nove elemente.",
|
||||
"settings.extraFields.description.tableViews": "Dodatna polja ni mogoče razvrstiti ali filtrirati v pogledih tabel.",
|
||||
"settings.extraFields.editorEdit": "Uredi polje za {{entity}}",
|
||||
"settings.extraFields.editorNew": "Novo polje za {{entity}}",
|
||||
"settings.extraFields.errors.choiceNeeded": "Polja z izbirami potrebujejo vsaj eno izbiro.",
|
||||
"settings.extraFields.errors.choicesRemoved": "Obstoječih izbir ni mogoče odstraniti: {{choices}}.",
|
||||
"settings.extraFields.errors.deleteFailed": "Brisanje polja ni uspelo.",
|
||||
"settings.extraFields.errors.keyFormat": "Ključ lahko vsebuje samo male črke, številke in podčrtaje.",
|
||||
"settings.extraFields.errors.nameRequired": "Ime je obvezno.",
|
||||
"settings.extraFields.errors.saveFailed": "Shranjevanje polja ni uspelo.",
|
||||
"settings.extraFields.fieldType.boolean": "Logična vrednost",
|
||||
"settings.extraFields.fieldType.choice": "Izbira",
|
||||
"settings.extraFields.fieldType.datetime": "Datum in čas",
|
||||
@@ -96,7 +469,13 @@
|
||||
"settings.extraFields.fieldType.integer": "Celo število",
|
||||
"settings.extraFields.fieldType.integerRange": "Območje celih števil",
|
||||
"settings.extraFields.fieldType.text": "Besedilo",
|
||||
"settings.extraFields.max": "največ",
|
||||
"settings.extraFields.min": "najmanj",
|
||||
"settings.extraFields.multiSuffix": " · več",
|
||||
"settings.extraFields.multiple": "Več",
|
||||
"settings.extraFields.namePlaceholder": "Prikazno ime",
|
||||
"settings.extraFields.nonUniqueKeyError": "Ključ mora biti edinstven.",
|
||||
"settings.extraFields.none": "Za {{entity}} še ni definiranih dodatnih polj.",
|
||||
"settings.extraFields.params.choices": "Izbire",
|
||||
"settings.extraFields.params.defaultValue": "Privzeta vrednost",
|
||||
"settings.extraFields.params.fieldType": "Tip",
|
||||
@@ -104,14 +483,37 @@
|
||||
"settings.extraFields.params.name": "Ime",
|
||||
"settings.extraFields.params.order": "Zaporedje",
|
||||
"settings.extraFields.params.unit": "Enota",
|
||||
"settings.extraFields.reorderChoice": "Povlecite ali uporabite puščice za spremembo vrstnega reda te izbire.",
|
||||
"settings.extraFields.saveField": "Shrani polje",
|
||||
"settings.extraFields.tab": "Dodatna polja",
|
||||
"settings.general.baseUrl.label": "Osnovni URL",
|
||||
"settings.general.baseUrl.tooltip": "Osnoven URL, ki se uporablja pri ustvarjanju elementov, kot npr. QR-kode.",
|
||||
"settings.general.currency.desc": "Trimestna koda ISO (npr. EUR, USD), ki se uporablja za cene",
|
||||
"settings.general.currency.label": "Valuta",
|
||||
"settings.general.roundPrices.label": "Zaokrožene cene",
|
||||
"settings.general.roundPrices.tooltip": "Zaokroži cene na najbližje celo število.",
|
||||
"settings.general.tab": "Splošno",
|
||||
"settings.header": "Nastavitve",
|
||||
"settings.language.desc": "Jezik vmesnika (samo za ta brskalnik)",
|
||||
"settings.language.label": "Jezik",
|
||||
"settings.library.lowThreshold.desc": "Koluti s to težo ali manj so označeni rdeče (samo za ta brskalnik)",
|
||||
"settings.library.lowThreshold.label": "Prag za nizko zalogo",
|
||||
"settings.library.tab": "Vedenje knjižnice",
|
||||
"settings.scanner.autoNavigate.desc": "V tem spletnem brskalniku samodejno navigiraj do koluta ali filamenta, ki ga zazna čitalnik oznak.",
|
||||
"settings.scanner.autoNavigate.label": "Samodejna navigacija",
|
||||
"settings.scanner.docs": "Kako nastaviti čitalnik oznak",
|
||||
"settings.scanner.lastSeen": "pred {{when}}",
|
||||
"settings.scanner.pair": "Poveži s tapkanjem",
|
||||
"settings.scanner.reader.anyDesc": "Skeniranja s katerega koli čitalnika odprejo kolute v tem spletnem brskalniku. Za natančnejši nadzor se lahko povežete z določenim čitalnikom. To je tudi čitalnik, ki bo uporabljen za dodajanje novih oznak kolutom in filamentom.",
|
||||
"settings.scanner.reader.label": "Čitalnik oznak",
|
||||
"settings.scanner.reader.pairedDesc": "Samo skeniranja s tega čitalnika odprejo kolute v tem spletnem brskalniku.",
|
||||
"settings.scanner.recent": "Nedavni čitalniki",
|
||||
"settings.scanner.recentNone": "V pomnilniku ni čitalnika; nastavite čitalnik oznak in nato preberite katero koli oznako, da se pojavi tukaj.",
|
||||
"settings.scanner.tab": "Skeniranje oznak",
|
||||
"settings.scanner.unpair": "Uporabi kateri koli čitalnik",
|
||||
"settings.scanner.use": "Uporabi tega",
|
||||
"settings.scanner.waiting": "Tapnite katero koli oznako na čitalniku, ki ga želite ...",
|
||||
"sponsor": "Sponzorirajte me na GitHubu",
|
||||
"spool.fields.archived": "Arhivirano",
|
||||
"spool.fields.comment": "Komentar",
|
||||
"spool.fields.filament": "Filament",
|
||||
@@ -125,17 +527,81 @@
|
||||
"spool.fields.price": "Cena",
|
||||
"spool.fields.registered": "Registrirano",
|
||||
"spool.fields.remainingWeight": "Preostala masa",
|
||||
"spool.fields.spoolWeight": "Teža koluta",
|
||||
"spool.fields.usedWeight": "Porabljena masa",
|
||||
"spool.fields.weight": "Teža",
|
||||
"spool.fieldsHelp.location": "Kje se nahaja kolut, če imate več mest za shranjevanje.",
|
||||
"spool.fieldsHelp.lotNr": "Številka serije proizvajalca. Uporablja se za zagotavljanje barvne doslednosti tiska, če se uporablja več kolutov.",
|
||||
"spool.fieldsHelp.measuredWeight": "Koliko tehtata filament in kolut.",
|
||||
"spool.fieldsHelp.price": "Cena polnega koluta. Če ta vrednost ni nastavljena, se namesto nje upošteva cena filamenta.",
|
||||
"spool.fieldsHelp.remainingWeight": "Koliko filamenta je še na kolutu. Pri novem kolutu se ta količina ujema z maso koluta.",
|
||||
"spool.fieldsHelp.spoolWeight": "Teža tega koluta, ko je prazen. Pustite prazno, da upoštevate težo koluta za ta filament, in jo nastavite le, ko se ta specifični kolut razlikuje – npr. ponovno navit kolut ali zamenjava kartonskega jedra s plastičnim. To je vrednost, ki se odšteje od meritve pri prilagajanju glede na izmerjeno težo, zato napačna vrednost napačno prikaže preostanek filamenta.",
|
||||
"spool.fieldsHelp.usedWeight": "Koliko filamenta je bilo porabljenega s koluta. Pri novem kolutu je vrednost 0 g.",
|
||||
"spool.fieldsHelp.weight": "Koliko filamenta je bilo na tem kolutu, ko je bil poln (neto teža, brez samega koluta). Pustite prazno, da upoštevate težo filamenta, in jo nastavite le, ko se ta specifični kolut razlikuje – npr. delno porabljen kolut ali isti filament na večjem kolutu.",
|
||||
"spool.form.measurementType.length": "Dolžina",
|
||||
"spool.form.measurementType.weight": "Masa",
|
||||
"spool.spool": "Koluti",
|
||||
"tags.add": "Dodaj oznako",
|
||||
"tags.added": "Oznaka je povezana.",
|
||||
"tags.addedOn": "Dodano {{date}}",
|
||||
"tags.modal.alreadyHere": "Ta oznaka že identificira ta kolut.",
|
||||
"tags.modal.alreadyHereFilament": "Ta oznaka že identificira ta filament.",
|
||||
"tags.modal.badUid": "UID oznake je heksadecimalen, npr. 04A2B3C4.",
|
||||
"tags.modal.checking": "Preverjanje ...",
|
||||
"tags.modal.failed": "Oznake ni bilo mogoče povezati.",
|
||||
"tags.modal.filamentNamed": "filament {{name}}",
|
||||
"tags.modal.free": "Ta oznaka še ni povezana z ničemer.",
|
||||
"tags.modal.intro": "S tapkanjem te oznake na čitalniku boste nato našli kolut št. {{id}}.",
|
||||
"tags.modal.introFilament": "S tapkanjem te oznake na čitalniku boste nato našli ta filament.",
|
||||
"tags.modal.lastSeenOn": "{{reader}} je nazadnje prebral {{uid}}.",
|
||||
"tags.modal.link": "Poveži oznako",
|
||||
"tags.modal.linking": "Povezovanje ...",
|
||||
"tags.modal.move": "Premakni sem s št. {{id}}",
|
||||
"tags.modal.moveFailed": "Oznake ni bilo mogoče premakniti. Morda zdaj ni povezana z nobenim kolutom – poskusite jo znova povezati.",
|
||||
"tags.modal.moveFailedFilament": "Oznake ni bilo mogoče premakniti. Morda zdaj ni povezana z ničemer – poskusite jo znova povezati.",
|
||||
"tags.modal.moveHere": "Premakni sem",
|
||||
"tags.modal.moving": "Premikanje ...",
|
||||
"tags.modal.phoneReading": "Pridržite oznako ob telefonu ...",
|
||||
"tags.modal.phoneScan": "Preberi oznako s tem telefonom",
|
||||
"tags.modal.spoolNamed": "kolut št. {{id}}, {{name}}",
|
||||
"tags.modal.spoolShort": "kolut št. {{id}}",
|
||||
"tags.modal.takenBy": "Trenutno povezano s kolutom {{spool}}.",
|
||||
"tags.modal.title": "Poveži oznako",
|
||||
"tags.modal.uidHelp": "Ločila in velike začetnice ne igrajo vloge: 04:a2:b3:c4, 04-A2-B3-C4 in 04a2b3c4 so vse ista oznaka.",
|
||||
"tags.modal.uidLabel": "UID oznake",
|
||||
"tags.modal.uidPlaceholder": "04A2B3C4",
|
||||
"tags.modal.useLastSeen": "Uporabi jo",
|
||||
"tags.modal.waitingAny": "Čakanje na tapkanje na katerem koli čitalniku.",
|
||||
"tags.modal.waitingOn": "Čakanje na tapkanje na {{reader}}.",
|
||||
"tags.moved": "Oznaka je bila premaknjena sem s koluta št. {{id}}.",
|
||||
"tags.movedFromFilament": "Oznaka je bila premaknjena sem s filamenta {{name}}.",
|
||||
"tags.nfc.insecureContext": "Branje oznak zahteva varno povezavo. Odprite Spoolman prek HTTPS, da uporabite NFC svojega telefona.",
|
||||
"tags.nfc.notAllowed": "To spletno mesto nima dovoljenja za uporabo NFC. Podelite dovoljenje v nastavitvah spletnega mesta v brskalniku in poskusite znova.",
|
||||
"tags.nfc.notReadable": "Čitalnik NFC ni na voljo – morda ga uporablja druga aplikacija.",
|
||||
"tags.nfc.notSupported": "Ta telefon nima NFC ali pa je NFC izklopljen v sistemskih nastavitvah.",
|
||||
"tags.nfc.unknown": "Oznake ni bilo mogoče prebrati.",
|
||||
"tags.none": "Ni povezanih oznak.",
|
||||
"tags.scan.openedFilament": "Oznaka skenirana: odprt filament {{name}}.",
|
||||
"tags.scan.openedSpool": "Oznaka skenirana: odprt kolut št. {{id}}, {{name}}.",
|
||||
"tags.scan.unknown": "Neznana oznaka {{uid}}. Odprite kolut, ki mu pripada, in uporabite možnost Dodaj oznako, da jo povežete.",
|
||||
"tags.section": "Oznake",
|
||||
"tags.unlink": "Prekini povezavo",
|
||||
"tags.unlinkBody": "Oznaka {{uid}} ne bo več identificirala tega koluta. Na samo oznako se nič ne zapiše, zato jo lahko kadar koli znova povežete – s tem kolutom ali drugim.",
|
||||
"tags.unlinkBodyFilament": "Oznaka {{uid}} ne bo več identificirala tega filamenta. Na samo oznako se nič ne zapiše, zato jo lahko kadar koli znova povežete – tukaj ali drugje.",
|
||||
"tags.unlinkFailed": "Povezave z oznako ni bilo mogoče prekiniti.",
|
||||
"tags.unlinkTitle": "Želite prekiniti povezavo s to oznako?",
|
||||
"tags.unlinked": "Povezava z oznako je prekinjena.",
|
||||
"tags.unlinking": "Prekinjanje povezave ...",
|
||||
"topbar.addSpools": "Dodaj kolute",
|
||||
"topbar.searchPlaceholder": "Iskanje — poskusite »rdeča« ali »pla«",
|
||||
"unknown": "Neznano",
|
||||
"validation.hexDigits": "Uporabite 6 ali 8 heksadecimalnih številk",
|
||||
"validation.maxChars": "Največ {{max}} znakov",
|
||||
"validation.mustBeGt": "Mora biti večje od {{value}}",
|
||||
"validation.mustBeMax": "Mora biti {{value}} ali manj",
|
||||
"validation.mustBeMin": "Mora biti {{value}} ali več",
|
||||
"validation.mustBeNumber": "Mora biti številka",
|
||||
"validation.required": "Obvezno",
|
||||
"vendor.fields.comment": "Komentar",
|
||||
"vendor.fields.emptySpoolWeight": "Masa praznega koluta",
|
||||
"vendor.fields.externalId": "Zunanji ID",
|
||||
|
||||
@@ -1,16 +1,133 @@
|
||||
{
|
||||
"add.addAndNew": "Lägg till och nytt",
|
||||
"add.addN_one": "Lägg till {{count}} spole",
|
||||
"add.addN_other": "Lägg till {{count}} spolar",
|
||||
"add.adding": "Lägger till...",
|
||||
"add.advanced": "Avancerade specifikationer",
|
||||
"add.advancedNote": "densitet, diameter, temperaturer (auto-fylld av materialet)",
|
||||
"add.change": "ändra",
|
||||
"add.count": "Antal",
|
||||
"add.createNew": "Skapa ett nytt filament",
|
||||
"add.createNewSub": "inte i din katalog eller {{name}}",
|
||||
"add.dbUnavailable": "{{name}} otillgänglig",
|
||||
"add.duplicate": "duplicera",
|
||||
"add.duplicateNote": "Parametrar, tillverkare och pris kopierades över. Ge det ett nytt namn och färg.",
|
||||
"add.duplicateRename": "Fortfarande samma namn som originalet - byt namn för att hålla dem isär.",
|
||||
"add.duplicateTitle": "Nytt filament · kopia av \"{{name}}\"",
|
||||
"add.filamentNamePlaceholder": "till exempel PolyTerra Matte Sage",
|
||||
"add.fill.full": "Full",
|
||||
"add.fillLevel": "Fyllnadsnivå",
|
||||
"add.importNote": "Detta filament kommer att läggas till i din katalog när du lägger till spolarna.",
|
||||
"add.inCatalog": "i katalog",
|
||||
"add.locationHint": "Där spolen fysiskt finns - en hylla, en låda eller en skrivare. Lämna det tomt om du håller dem alla på ett ställe.",
|
||||
"add.locationPlaceholder": "till exempel Hylla A, Låda 2, Skrivare 1",
|
||||
"add.manufacturerPlaceholder": "till exempel Polymaker",
|
||||
"add.nameHint": "Inkludera färgnamnet - det är vad som skiljer dina filament ifrån varandra.",
|
||||
"add.newFilament": "nytt filament",
|
||||
"add.newFilamentTitle": "Nytt filament",
|
||||
"add.noCatalog": "Inga filament i din katalog",
|
||||
"add.noManufacturer": "Ingen tillverkare",
|
||||
"add.pickColor": "Välj färg",
|
||||
"add.searchPlaceholder": "Sök i din katalog och {{name}}...",
|
||||
"add.searching": "Söker...",
|
||||
"add.spoolWeightPreset.cardboard": "Kartong {{weight}} g",
|
||||
"add.spoolWeightPreset.plastic": "Plast {{weight}} g",
|
||||
"add.spoolWeightPresetsLead": "Börja med en typisk spole:",
|
||||
"add.step2": "Steg 2 · Spoldetaljer",
|
||||
"add.summary_one": "{{count}} spole",
|
||||
"add.summary_other": "{{count}} spolar",
|
||||
"add.typeToSearchAll": "Skriv för att söka bland tusentals filament",
|
||||
"add.typeToSearchMatches": "Skriv för att söka - inga resultat",
|
||||
"add.useExisting": "använd en befintlig",
|
||||
"add.vendorHint.existing": "Använd befintlig tillverkare \"{{name}}\"",
|
||||
"add.vendorHint.new": "Ny tillverkare \"{{name}}\" kommer att skapas",
|
||||
"add.vendorHint.optional": "Valfritt - lämna tomt för ingen tillverkare",
|
||||
"add.yourCatalog": "Din katalog",
|
||||
"buttons.archive": "Arkivera",
|
||||
"buttons.cancel": "Avbryt",
|
||||
"buttons.clear": "Rensa",
|
||||
"buttons.close": "Stäng",
|
||||
"buttons.delete": "Ta bort",
|
||||
"buttons.edit": "Ändra",
|
||||
"buttons.filter": "Filtrera",
|
||||
"buttons.save": "Spara",
|
||||
"buttons.showArchived": "Visa arkiverade",
|
||||
"buttons.unArchive": "Avarkivera",
|
||||
"changeFilament.action": "Ändra",
|
||||
"changeFilament.adoptWeight": "Ställ in denna spolens fulla vikt till {{full}}",
|
||||
"changeFilament.adoptWeightHelp": "Den är satt till {{current}}, från filamentet som den höll innan. Förbrukad vikt ({{used}}) är satt oavsett, vilket innebär att {{remaining}} kvarstår.",
|
||||
"changeFilament.apply": "Ändra filament",
|
||||
"changeFilament.applying": "Ändrar...",
|
||||
"changeFilament.current": "nuvarande",
|
||||
"changeFilament.done": "Filamentet ändrades.",
|
||||
"changeFilament.failed": "Kunde inte ändra filamentet.",
|
||||
"changeFilament.importNote": "Detta filament kommer att läggas till i din katalog när du sparar ändringen.",
|
||||
"changeFilament.intro": "Spole #{{id}} behåller sitt id, plats, datum och användningshistorik - bara filamentet som det ligger under ändras.",
|
||||
"changeFilament.next": "Ändra till",
|
||||
"changeFilament.now": "Nuvarande",
|
||||
"changeFilament.pickBelow": "Välj ett filament nedan",
|
||||
"changeFilament.title": "Ändra filament",
|
||||
"changeFilament.weightFollows": "Denna spole har ingen egen satt full vikt, så vikten tas från det nya filamentet: {{full}}, resulterar i {{remaining}} kvar efter de {{used}} som redan används.",
|
||||
"changeVendor.action": "Ändra",
|
||||
"changeVendor.apply": "Ändra tillverkare",
|
||||
"changeVendor.applying": "Ändrar...",
|
||||
"changeVendor.clearHint": "Lämna detta filament utan tillverkare",
|
||||
"changeVendor.create": "Skapa \"{{name}}\"",
|
||||
"changeVendor.createHint": "Inte en av dina tillverkare ännu - det kommer att läggas till",
|
||||
"changeVendor.current": "nuvarande",
|
||||
"changeVendor.done": "Tillverkare ändrats.",
|
||||
"changeVendor.emptySpool": "Tom spole {{value}}",
|
||||
"changeVendor.failed": "Kunde inte ändra tillverkaren.",
|
||||
"changeVendor.intro": "\"{{name}}\" behåller sina spolar, dess specifikationer och dess historia - endast tillverkaren den ligger under ändras.",
|
||||
"changeVendor.next": "Ändra till",
|
||||
"changeVendor.noEmptySpool": "Ingen tom spolvikt",
|
||||
"changeVendor.noMatches": "Inga tillverkare hittades",
|
||||
"changeVendor.none": "Inga tillverkare ännu",
|
||||
"changeVendor.noneNote": "Satt till ingen tillverkare",
|
||||
"changeVendor.now": "För närvarande",
|
||||
"changeVendor.pickBelow": "Välj en tillverkare nedan",
|
||||
"changeVendor.searchPlaceholder": "Sök eller namnge en tillverkare",
|
||||
"changeVendor.tareFollows": "Detta filament har ingen egen tom spolvikt, så det tar tillverkarens. Efter denna ändring så är det {{value}}, vilket är vad en tom spole väger när du mäter den.",
|
||||
"changeVendor.tareGone": "Detta filament har ingen egen tom spolvikt och tar tillverkarens {{current}}. Efter denna ändring finns det ingen att ta, tills du ger filamentet en.",
|
||||
"changeVendor.title": "Ändra tillverkare",
|
||||
"changeVendor.willBeCreated": "Kommer skapas",
|
||||
"common.decrement": "Sänk",
|
||||
"common.increment": "Öka",
|
||||
"common.remove": "Ta bort",
|
||||
"common.search": "Sök",
|
||||
"dashboard.addFieldHint": "Lägg till ett text- eller valfält på spolar i inställningarna för att gruppera på det också",
|
||||
"dashboard.dashboard": "Tavla",
|
||||
"dashboard.deleteGroup": "Ta bort grupp",
|
||||
"dashboard.dragHint": "Dra en spol mellan grupper för att ändra dess {{field}}, eller inom en grupp för att ändra ordning",
|
||||
"dashboard.dropHere": "släpp spolar här",
|
||||
"dashboard.emptyHelp": "Denna sida grupperar dina spolar baserat på valfritt fält, lägg till några spolar för att komma igång!",
|
||||
"dashboard.errorEmptyName": "Namnet kan inte vara tomt",
|
||||
"dashboard.errorExists": "En grupp med det namnet finns redan",
|
||||
"dashboard.errorRename": "Misslyckades med att byta namn på grupp",
|
||||
"dashboard.lastUsed": "Användes senast {{time}} sedan",
|
||||
"dashboard.newGroup": "Ny grupp",
|
||||
"dashboard.newGroupName": "Ny grupp {{n}}",
|
||||
"dashboard.reorderGroup": "Dra för att flytta grupp",
|
||||
"dashboard.spoolCount_one": "{{count}} spole",
|
||||
"dashboard.spoolCount_other": "{{count}} spolar",
|
||||
"dashboard.unassigned": "Ej tilldelad",
|
||||
"datetime.done": "Klar",
|
||||
"datetime.hour": "Timme",
|
||||
"datetime.minute": "Minut",
|
||||
"datetime.nextMonth": "Nästa månad",
|
||||
"datetime.now": "Nu",
|
||||
"datetime.pick": "Välj datum och tid",
|
||||
"datetime.prevMonth": "Föregående månad",
|
||||
"datetime.time": "Tid",
|
||||
"documentTitle.dashboard.list": "Tavla | Spoolman",
|
||||
"documentTitle.labels.list": "Etiketter | Spoolman",
|
||||
"documentTitle.library.list": "Bibliotek | Spoolman",
|
||||
"documentTitle.settings.list": "Inställningar | Spoolman",
|
||||
"filament.fields.addColor": "Lägg till färg",
|
||||
"filament.fields.articleNumber": "Artikelnummer",
|
||||
"filament.fields.coaxial": "Coextruderad",
|
||||
"filament.fields.colorHex": "Färg",
|
||||
"filament.fields.colorType": "Färgtyp",
|
||||
"filament.fields.comment": "Kommentar",
|
||||
"filament.fields.density": "Densitet",
|
||||
"filament.fields.diameter": "Diameter",
|
||||
@@ -22,6 +139,7 @@
|
||||
"filament.fields.name": "Namn",
|
||||
"filament.fields.price": "Pris",
|
||||
"filament.fields.registered": "Registrerad",
|
||||
"filament.fields.removeColor": "Ta bort färg",
|
||||
"filament.fields.settingsBedTemp": "Bäddtemp",
|
||||
"filament.fields.settingsExtruderTemp": "Extrudertemp",
|
||||
"filament.fields.singleColor": "Enkel",
|
||||
@@ -33,18 +151,218 @@
|
||||
"filament.fieldsHelp.spoolWeight": "Vikten på en tom spole. Används för att beräkna filamentvikten från en vägning.",
|
||||
"filament.fieldsHelp.weight": "Vikten på en full spole (nettovikt). Detta ska inte inkludera vikten på spolen själv, bara filamentet. Det är vad som vanligtvis står på förpackningen.",
|
||||
"filament.filament": "Filament",
|
||||
"footer.documentation": "Dokumentation",
|
||||
"footer.reportIssue": "Rapportera ett problem",
|
||||
"help.help": "Hjälp",
|
||||
"inspector.addSpoolsOfThis": "Lägg till spolar av detta",
|
||||
"inspector.adjustFailed": "Misslyckades med att justera vikt.",
|
||||
"inspector.adjustHelp": "Positivt värde konsumerar filament, negativt lägger tillbaka.",
|
||||
"inspector.adjustWeight": "Justera vikt",
|
||||
"inspector.apply": "Applicera",
|
||||
"inspector.applying": "Applicerar...",
|
||||
"inspector.colorHex": "Färg Hex",
|
||||
"inspector.consumeAmount": "Mängd att konsumera:",
|
||||
"inspector.defaultFrom.filament": "{{value}} · filament standard",
|
||||
"inspector.defaultFrom.manufacturer": "{{value}} · tillverkare standard",
|
||||
"inspector.delete.deleting": "Tar bort...",
|
||||
"inspector.delete.errorGone": "Det hade redan tagits bort.",
|
||||
"inspector.delete.errorSpoolsExist": "Kan inte ta bort detta filament - spolar använder det fortfarande.",
|
||||
"inspector.delete.errorUnknown": "Borttagning misslyckades. Se serverns loggar för detaljer.",
|
||||
"inspector.delete.filament": "Radera filament",
|
||||
"inspector.delete.filamentBlockedHint": "Ta bort dessa spolar först. Att arkivera dem räcker inte.",
|
||||
"inspector.delete.filamentBlockedTitle": "Detta filament kan inte raderas",
|
||||
"inspector.delete.filamentBlocked_one": "{{count}} spole använder fortfarande \"{{name}}\", inklusive arkiverade.",
|
||||
"inspector.delete.filamentBlocked_other": "{{count}} spolar använder fortfarande \"{{name}}\", inklusive arkiverade.",
|
||||
"inspector.delete.filamentBody": "\"{{name}}\" kommer att tas bort från din katalog. Detta kan inte ångras.",
|
||||
"inspector.delete.filamentDone": "Filament raderat.",
|
||||
"inspector.delete.filamentTitle": "Ta bort detta filament?",
|
||||
"inspector.delete.spool": "Radera spole",
|
||||
"inspector.delete.spoolBody": "Spole #{{id}} av \"{{name}}\" kommer att tas bort, tillsammans med dess användningshistorik. Detta kan inte ångras.",
|
||||
"inspector.delete.spoolDone": "Spole raderad.",
|
||||
"inspector.delete.spoolRemaining": "Den har fortfarande {{weight}} av filament kvar. Arkivera det istället om du bara vill ha det ur vägen.",
|
||||
"inspector.delete.spoolTitle": "Ta bort denna spole?",
|
||||
"inspector.delete.vendor": "Radera tillverkare",
|
||||
"inspector.delete.vendorBody": "\"{{name}}\" kommer att tas bort. Detta kan inte ångras.",
|
||||
"inspector.delete.vendorDone": "Tillverkaren har raderats.",
|
||||
"inspector.delete.vendorOrphans_one": "Dess {{count}} filament hålls, men lämnas utan tillverkare.",
|
||||
"inspector.delete.vendorOrphans_other": "Dess {{count}} filament hålls, men lämnas utan tillverkare.",
|
||||
"inspector.delete.vendorTitle": "Ta bort denna tillverkare?",
|
||||
"inspector.duplicateFilament": "Duplicera",
|
||||
"inspector.empty": "Välj en spole, ett filament eller en tillverkare från listan för att se dess detaljer här.",
|
||||
"inspector.enterValidLength": "Ange en giltig längd.",
|
||||
"inspector.enterValidWeight": "Ange en giltig vikt.",
|
||||
"inspector.loading": "Laddar...",
|
||||
"inspector.manageExtraFields": "Hantera fält",
|
||||
"inspector.measuredHelp": "Totalvikt av spolen + återstående filament, som avläses från en våg.",
|
||||
"inspector.multi": "multi ×{{count}}",
|
||||
"inspector.newGross": "Ny bruttovikt:",
|
||||
"inspector.noExtraFields": "Inga ännu - lägg till dina egna fält för att spåra något som Spoolman inte gör.",
|
||||
"inspector.notFound": "Detta objekt kunde inte hittas. Det kan ha tagits bort.",
|
||||
"inspector.ofRemaining": "",
|
||||
"inspector.openFilament": "",
|
||||
"inspector.openLink": "",
|
||||
"inspector.openManufacturer": "",
|
||||
"inspector.override.byFilament": "Överskuggad av detta filament · {{value}}",
|
||||
"inspector.override.bySpool": "Överskuggad av denna spole · {{value}}",
|
||||
"inspector.override.overridesFilament": "Överskuggar filament · {{value}}",
|
||||
"inspector.override.overridesManufacturer": "Överskuggar tillverkare · {{value}}",
|
||||
"inspector.specs": "",
|
||||
"inspector.spoolsCount": "",
|
||||
"inspector.spoolsTotalRemaining": "",
|
||||
"inspector.used": "",
|
||||
"kofi": "Dricksa mig på Ko-fi",
|
||||
"labels.addHead": "",
|
||||
"labels.addQr": "",
|
||||
"labels.addRect": "",
|
||||
"labels.addSwatch": "",
|
||||
"labels.addText": "",
|
||||
"labels.align": "",
|
||||
"labels.alignCenter": "",
|
||||
"labels.alignLeft": "",
|
||||
"labels.alignRight": "",
|
||||
"labels.blank": "",
|
||||
"labels.bold": "",
|
||||
"labels.canvasHint": "",
|
||||
"labels.centerLogo": "",
|
||||
"labels.chooseField": "",
|
||||
"labels.clearFill": "",
|
||||
"labels.copies": "",
|
||||
"labels.cornerRadiusMm": "",
|
||||
"labels.createFirst": "",
|
||||
"labels.cutGuides": "",
|
||||
"labels.deleteConfirm": "",
|
||||
"labels.deleteElement": "",
|
||||
"labels.designName": "",
|
||||
"labels.designerDesc": "",
|
||||
"labels.designerTitle": "",
|
||||
"labels.dpi": "",
|
||||
"labels.dpiHint": "",
|
||||
"labels.duplicate": "",
|
||||
"labels.fields.bedTemp": "",
|
||||
"labels.fields.diameterMm": "",
|
||||
"labels.fields.groupVendor": "",
|
||||
"labels.fields.initialG": "",
|
||||
"labels.fields.netWeightG": "",
|
||||
"labels.fields.remainingG": "",
|
||||
"labels.fill": "",
|
||||
"labels.fitWidth": "",
|
||||
"labels.fitWidthHint": "",
|
||||
"labels.fontMm": "",
|
||||
"labels.gridInfo": "",
|
||||
"labels.hMm": "",
|
||||
"labels.heightMm": "",
|
||||
"labels.hintNowrap": "",
|
||||
"labels.hintSwatch": "",
|
||||
"labels.hintWrap": "",
|
||||
"labels.imageDesc": "",
|
||||
"labels.imageZipNote": "",
|
||||
"labels.insertField": "",
|
||||
"labels.kind.qr": "",
|
||||
"labels.kind.rect": "",
|
||||
"labels.kind.swatch": "",
|
||||
"labels.kind.text": "",
|
||||
"labels.labelSize": "",
|
||||
"labels.labelType": "",
|
||||
"labels.layout": "",
|
||||
"labels.modeImage": "",
|
||||
"labels.modeLabel": "",
|
||||
"labels.modeSheet": "",
|
||||
"labels.new": "",
|
||||
"labels.newText": "",
|
||||
"labels.noDesignsOption": "",
|
||||
"labels.noFilaments": "",
|
||||
"labels.noSpools": "",
|
||||
"labels.onePerLabel": "",
|
||||
"labels.preparing": "",
|
||||
"labels.preview": "",
|
||||
"labels.previewWith": "",
|
||||
"labels.radiusMm": "",
|
||||
"labels.sampleData": "",
|
||||
"labels.saved": "",
|
||||
"labels.saving": "",
|
||||
"labels.searchFilaments": "",
|
||||
"labels.searchSpools": "",
|
||||
"labels.selectAllShort": "",
|
||||
"labels.selectAtLeastOne": "",
|
||||
"labels.selectAtLeastOneFilament": "",
|
||||
"labels.selectDesign": "",
|
||||
"labels.selectElement": "",
|
||||
"labels.selectNoneShort": "",
|
||||
"labels.selectRecentHint": "",
|
||||
"labels.selectRecentShort": "",
|
||||
"labels.showingFilament": "",
|
||||
"labels.showingReal": "",
|
||||
"labels.showingSpool": "",
|
||||
"labels.showingTags": "",
|
||||
"labels.sizeMm": "",
|
||||
"labels.skipHint": "",
|
||||
"labels.sortHint": "",
|
||||
"labels.sortId": "",
|
||||
"labels.sortNewest": "",
|
||||
"labels.stroke": "",
|
||||
"labels.strokeMm": "",
|
||||
"labels.tabDesign": "",
|
||||
"labels.tabPrint": "",
|
||||
"labels.textTemplate": "",
|
||||
"labels.typeFilament": "",
|
||||
"labels.typeHint": "",
|
||||
"labels.typeSpool": "",
|
||||
"labels.unknownFilament": "",
|
||||
"labels.wMm": "",
|
||||
"labels.widthMm": "",
|
||||
"labels.wrapText": "",
|
||||
"labels.xMm": "",
|
||||
"labels.yMm": "",
|
||||
"library.apiError": "",
|
||||
"library.collapseGroup": "",
|
||||
"library.emptyBody": "",
|
||||
"library.emptyFiltered": "",
|
||||
"library.emptyTitle": "",
|
||||
"library.expandGroup": "",
|
||||
"library.filterBy": "",
|
||||
"library.groupBy": "",
|
||||
"library.groupNone": "",
|
||||
"library.nUnused": "",
|
||||
"library.noLocation": "",
|
||||
"library.noValues": "",
|
||||
"library.openGroup": "",
|
||||
"library.openManufacturer": "",
|
||||
"library.section.extra": "",
|
||||
"library.section.filament": "",
|
||||
"library.section.spool": "",
|
||||
"library.section.vendor": "",
|
||||
"library.showMore": "",
|
||||
"library.sort.nozzle": "",
|
||||
"library.sortBy": "",
|
||||
"library.unassigned": "",
|
||||
"library.unitGroups": "",
|
||||
"library.unitSpools": "",
|
||||
"library.unused": "",
|
||||
"library.unusedGroup": "",
|
||||
"library.unusedGroupMixed": "",
|
||||
"library.unusedSub": "",
|
||||
"library.unusedSubMixed": "",
|
||||
"library.used": "",
|
||||
"library.usedAgo": "",
|
||||
"loading": "Laddar",
|
||||
"locations.newLocation": "Ny plats",
|
||||
"locations.noLocation": "Ingen plats",
|
||||
"nav.labels": "",
|
||||
"nav.library": "",
|
||||
"no": "Nej",
|
||||
"notifications.error": "Fel (statuskod: {{statusCode}})",
|
||||
"notifications.saveSuccessful": "Sparning lyckades!",
|
||||
"pagination.empty": "",
|
||||
"pagination.next": "",
|
||||
"pagination.pageSize": "",
|
||||
"pagination.perPage": "",
|
||||
"pagination.prev": "",
|
||||
"pagination.range": "",
|
||||
"printing.generic.columns": "Kolumner",
|
||||
"printing.generic.customSize": "Anpassad",
|
||||
"printing.generic.description": "Justera inställningarna nedan för att få önskat utskriftslayout. Kom ihåg att skrivare och ditt operativsystem kan tillämpa sina egna marginaler och skalning, så du kan behöva justera inställningarna därefter. Testa på ett vanligt papper innan du skriver ut på de faktiska etiketterna.",
|
||||
"printing.generic.dimensions": "Dimensioner",
|
||||
"printing.generic.gridTooWide": "",
|
||||
"printing.generic.helpMargin": "Marginaler bör konfigureras för att matcha ditt etikettpapper och skrivare, ändringar av dessa kommer att påverka storleken på hela rutnätet.",
|
||||
"printing.generic.helpPrinterMargin": "Säkerhetszon bör ställas in på hur nära papperskanten din skrivare kan skriva ut, ändringar av dessa kommer inte att påverka hela rutnätet.",
|
||||
"printing.generic.horizontalSpacing": "Horisontellt avstånd",
|
||||
@@ -62,22 +380,58 @@
|
||||
"printing.generic.skipItems": "Hoppa över objekt",
|
||||
"printing.generic.verticalSpacing": "Vertikalt avstånd",
|
||||
"printing.qrcode.button": "Skriv ut etiketter",
|
||||
"printing.qrcode.customUrl.caveat": "",
|
||||
"printing.qrcode.customUrl.hint": "",
|
||||
"printing.qrcode.customUrl.label": "",
|
||||
"printing.qrcode.useHTTPUrl.label": "",
|
||||
"printing.qrcode.useHTTPUrl.options.custom": "",
|
||||
"printing.qrcode.useHTTPUrl.options.default": "",
|
||||
"printing.qrcode.useHTTPUrl.options.url": "",
|
||||
"printing.qrcode.useHTTPUrl.preview": "",
|
||||
"printing.qrcode.useHTTPUrl.tooltip": "",
|
||||
"printing.spoolSelect.selectedTotal_one": "{{count}} spole vald",
|
||||
"printing.spoolSelect.selectedTotal_other": "{{count}} spolar valda",
|
||||
"scanner.description": "Skanna en QR-kod för att visa information om en spole.",
|
||||
"scanner.error.inUse": "",
|
||||
"scanner.error.insecureContext": "Sidan måste använda sig av HTTPS.",
|
||||
"scanner.error.notAllowed": "Du har inte tillåtit åtkomst till kameran.",
|
||||
"scanner.error.notFound": "Ingen kamera hittades.",
|
||||
"scanner.error.streamApiNotSupported": "Webbläsaren stödjer inte MediaStream API.",
|
||||
"scanner.error.unknown": "Ett okänt fel inträffade. ({{error}})",
|
||||
"scanner.starting": "",
|
||||
"scanner.title": "Skanna QR-kod",
|
||||
"search.colorHint": "",
|
||||
"search.noResults": "",
|
||||
"search.searching": "",
|
||||
"search.section.filaments": "",
|
||||
"search.section.spools": "",
|
||||
"search.section.vendors": "",
|
||||
"search.threshold": "",
|
||||
"search.unknownFilament": "",
|
||||
"settings.appearance.tab": "",
|
||||
"settings.appearance.theme.dark": "",
|
||||
"settings.appearance.theme.desc": "",
|
||||
"settings.appearance.theme.label": "",
|
||||
"settings.appearance.theme.light": "",
|
||||
"settings.appearance.theme.system": "",
|
||||
"settings.extraFields.addChoice": "",
|
||||
"settings.extraFields.addChoicesFirst": "",
|
||||
"settings.extraFields.addEntityField": "",
|
||||
"settings.extraFields.booleanFalse": "Nej",
|
||||
"settings.extraFields.booleanTrue": "Ja",
|
||||
"settings.extraFields.deleteConfirm": "Ta bort fältet {{name}}?",
|
||||
"settings.extraFields.description.intro": "Här kan du lägga till extra anpassade fält för dina objekt.",
|
||||
"settings.extraFields.description.constraints": "När ett fält har lagts till kan du inte ändra dess nyckel eller typ, och för fält av typen \"val\" kan du inte ta bort val eller ändra flervalsläget. Om du tar bort ett fält kommer den associerade datan för alla enheter att raderas.",
|
||||
"settings.extraFields.description.intro": "Här kan du lägga till extra anpassade fält för dina objekt.",
|
||||
"settings.extraFields.description.keyUsage": "Nyckeln är vad andra program läser/skriver datan som, så om ditt anpassade fält ska integreras med ett tredjepartsprogram, se till att ställa in det korrekt. Standardvärdet tillämpas endast på nya objekt.",
|
||||
"settings.extraFields.description.tableViews": "Extra fält kan inte sorteras eller filtreras i tabellvyn.",
|
||||
"settings.extraFields.editorEdit": "",
|
||||
"settings.extraFields.editorNew": "",
|
||||
"settings.extraFields.errors.choiceNeeded": "",
|
||||
"settings.extraFields.errors.choicesRemoved": "",
|
||||
"settings.extraFields.errors.deleteFailed": "",
|
||||
"settings.extraFields.errors.keyFormat": "",
|
||||
"settings.extraFields.errors.nameRequired": "",
|
||||
"settings.extraFields.errors.saveFailed": "",
|
||||
"settings.extraFields.fieldType.boolean": "Booleansk",
|
||||
"settings.extraFields.fieldType.choice": "Val",
|
||||
"settings.extraFields.fieldType.datetime": "Datum och tid",
|
||||
@@ -86,7 +440,13 @@
|
||||
"settings.extraFields.fieldType.integer": "Heltal",
|
||||
"settings.extraFields.fieldType.integerRange": "Heltalsintervall",
|
||||
"settings.extraFields.fieldType.text": "Text",
|
||||
"settings.extraFields.max": "",
|
||||
"settings.extraFields.min": "",
|
||||
"settings.extraFields.multiSuffix": "",
|
||||
"settings.extraFields.multiple": "",
|
||||
"settings.extraFields.namePlaceholder": "",
|
||||
"settings.extraFields.nonUniqueKeyError": "Nyckeln måste vara unik.",
|
||||
"settings.extraFields.none": "",
|
||||
"settings.extraFields.params.choices": "Val",
|
||||
"settings.extraFields.params.defaultValue": "Standardvärde",
|
||||
"settings.extraFields.params.fieldType": "Typ",
|
||||
@@ -94,10 +454,21 @@
|
||||
"settings.extraFields.params.name": "Namn",
|
||||
"settings.extraFields.params.order": "Ordning",
|
||||
"settings.extraFields.params.unit": "Enhet",
|
||||
"settings.extraFields.saveField": "",
|
||||
"settings.extraFields.tab": "Extra Fält",
|
||||
"settings.general.baseUrl.label": "",
|
||||
"settings.general.baseUrl.tooltip": "",
|
||||
"settings.general.currency.desc": "",
|
||||
"settings.general.currency.label": "Valuta",
|
||||
"settings.general.roundPrices.label": "",
|
||||
"settings.general.roundPrices.tooltip": "",
|
||||
"settings.general.tab": "Allmänt",
|
||||
"settings.header": "Inställningar",
|
||||
"settings.language.desc": "",
|
||||
"settings.language.label": "",
|
||||
"settings.library.lowThreshold.desc": "",
|
||||
"settings.library.lowThreshold.label": "",
|
||||
"settings.library.tab": "",
|
||||
"spool.fields.archived": "Arkiverad",
|
||||
"spool.fields.comment": "Kommentar",
|
||||
"spool.fields.filament": "Filament",
|
||||
@@ -121,7 +492,16 @@
|
||||
"spool.form.measurementType.length": "Längd",
|
||||
"spool.form.measurementType.weight": "Vikt",
|
||||
"spool.spool": "Spolar",
|
||||
"topbar.addSpools": "",
|
||||
"topbar.searchPlaceholder": "",
|
||||
"unknown": "Okänd",
|
||||
"validation.hexDigits": "",
|
||||
"validation.maxChars": "",
|
||||
"validation.mustBeGt": "",
|
||||
"validation.mustBeMax": "",
|
||||
"validation.mustBeMin": "",
|
||||
"validation.mustBeNumber": "",
|
||||
"validation.required": "",
|
||||
"vendor.fields.comment": "Kommentar",
|
||||
"vendor.fields.emptySpoolWeight": "Tom spolvikt",
|
||||
"vendor.fields.externalId": "Externt ID",
|
||||
|
||||
@@ -1,17 +1,90 @@
|
||||
{
|
||||
"add.addAndNew": "",
|
||||
"add.adding": "",
|
||||
"add.advanced": "",
|
||||
"add.advancedNote": "",
|
||||
"add.change": "",
|
||||
"add.count": "",
|
||||
"add.createNew": "",
|
||||
"add.createNewSub": "",
|
||||
"add.dbUnavailable": "",
|
||||
"add.duplicate": "",
|
||||
"add.duplicateNote": "",
|
||||
"add.duplicateRename": "",
|
||||
"add.duplicateTitle": "",
|
||||
"add.filamentNamePlaceholder": "",
|
||||
"add.fill.full": "",
|
||||
"add.fillLevel": "",
|
||||
"add.importNote": "",
|
||||
"add.inCatalog": "",
|
||||
"add.locationHint": "",
|
||||
"add.locationPlaceholder": "",
|
||||
"add.manufacturerPlaceholder": "",
|
||||
"add.nameHint": "",
|
||||
"add.newFilament": "",
|
||||
"add.newFilamentTitle": "",
|
||||
"add.noCatalog": "",
|
||||
"add.noManufacturer": "",
|
||||
"add.pickColor": "",
|
||||
"add.searchPlaceholder": "",
|
||||
"add.searching": "",
|
||||
"add.spoolWeightPreset.cardboard": "",
|
||||
"add.spoolWeightPreset.plastic": "",
|
||||
"add.spoolWeightPresetsLead": "",
|
||||
"add.step2": "",
|
||||
"add.typeToSearchAll": "",
|
||||
"add.typeToSearchMatches": "",
|
||||
"add.useExisting": "",
|
||||
"add.vendorHint.existing": "",
|
||||
"add.vendorHint.new": "",
|
||||
"add.vendorHint.optional": "",
|
||||
"add.yourCatalog": "",
|
||||
"buttons.archive": "காப்பகம்",
|
||||
"buttons.cancel": "ரத்துசெய்",
|
||||
"buttons.clear": "தெளிவான",
|
||||
"buttons.close": "",
|
||||
"buttons.delete": "நீக்கு",
|
||||
"buttons.edit": "தொகு",
|
||||
"buttons.filter": "வடிப்பி",
|
||||
"buttons.save": "சேமி",
|
||||
"buttons.showArchived": "காப்பகப்படுத்தப்பட்டதைக் காட்டு",
|
||||
"buttons.unArchive": "அன்கான்",
|
||||
"common.decrement": "",
|
||||
"common.increment": "",
|
||||
"common.remove": "",
|
||||
"common.search": "",
|
||||
"dashboard.addFieldHint": "",
|
||||
"dashboard.dashboard": "",
|
||||
"dashboard.deleteGroup": "",
|
||||
"dashboard.dragHint": "",
|
||||
"dashboard.dropHere": "",
|
||||
"dashboard.emptyHelp": "",
|
||||
"dashboard.errorEmptyName": "",
|
||||
"dashboard.errorExists": "",
|
||||
"dashboard.errorRename": "",
|
||||
"dashboard.lastUsed": "",
|
||||
"dashboard.newGroup": "",
|
||||
"dashboard.newGroupName": "",
|
||||
"dashboard.reorderGroup": "",
|
||||
"dashboard.unassigned": "",
|
||||
"datetime.done": "",
|
||||
"datetime.hour": "",
|
||||
"datetime.minute": "",
|
||||
"datetime.nextMonth": "",
|
||||
"datetime.now": "",
|
||||
"datetime.pick": "",
|
||||
"datetime.prevMonth": "",
|
||||
"datetime.time": "",
|
||||
"documentTitle.dashboard.list": "",
|
||||
"documentTitle.labels.list": "",
|
||||
"documentTitle.library.list": "",
|
||||
"documentTitle.locations.list": "இடங்கள் | ச்பூல்மேன்",
|
||||
"documentTitle.settings.list": "",
|
||||
"filament.fields.addColor": "",
|
||||
"filament.fields.articleNumber": "கட்டுரை எண்",
|
||||
"filament.fields.coaxial": "இணை",
|
||||
"filament.fields.colorHex": "நிறம்",
|
||||
"filament.fields.colorType": "",
|
||||
"filament.fields.comment": "கருத்து",
|
||||
"filament.fields.density": "அடர்த்தி",
|
||||
"filament.fields.diameter": "விட்டம்",
|
||||
@@ -23,6 +96,7 @@
|
||||
"filament.fields.name": "பெயர்",
|
||||
"filament.fields.price": "விலை",
|
||||
"filament.fields.registered": "பதிவுசெய்யப்பட்டது",
|
||||
"filament.fields.removeColor": "",
|
||||
"filament.fields.settingsBedTemp": "படுக்கை தற்காலிக",
|
||||
"filament.fields.settingsExtruderTemp": "எக்ச்ட்ரூடர் தற்காலிக",
|
||||
"filament.fields.singleColor": "ஒற்றை",
|
||||
@@ -34,20 +108,210 @@
|
||||
"filament.fieldsHelp.spoolWeight": "வெற்று ச்பூலின் எடை. ஒரு ச்பூலின் அளவிடப்பட்ட எடையை தீர்மானிக்கப் பயன்படுகிறது.",
|
||||
"filament.fieldsHelp.weight": "ஒரு முழு ச்பூலின் இழை எடை (நிகர எடை). இதில் ச்பூலின் எடையை சேர்க்கக்கூடாது, இழை மட்டுமே. இது பொதுவாக பேக்கேசிங்கில் எழுதப்படுகிறது.",
|
||||
"filament.filament": "இழைகள்",
|
||||
"footer.documentation": "",
|
||||
"footer.reportIssue": "",
|
||||
"help.help": "உதவி",
|
||||
"inspector.addSpoolsOfThis": "",
|
||||
"inspector.adjustFailed": "",
|
||||
"inspector.adjustHelp": "",
|
||||
"inspector.adjustWeight": "",
|
||||
"inspector.apply": "",
|
||||
"inspector.applying": "",
|
||||
"inspector.colorHex": "",
|
||||
"inspector.consumeAmount": "",
|
||||
"inspector.delete.deleting": "",
|
||||
"inspector.delete.errorGone": "",
|
||||
"inspector.delete.errorSpoolsExist": "",
|
||||
"inspector.delete.errorUnknown": "",
|
||||
"inspector.delete.filament": "",
|
||||
"inspector.delete.filamentBlockedHint": "",
|
||||
"inspector.delete.filamentBlockedTitle": "",
|
||||
"inspector.delete.filamentBody": "",
|
||||
"inspector.delete.filamentDone": "",
|
||||
"inspector.delete.filamentTitle": "",
|
||||
"inspector.delete.spool": "",
|
||||
"inspector.delete.spoolBody": "",
|
||||
"inspector.delete.spoolDone": "",
|
||||
"inspector.delete.spoolRemaining": "",
|
||||
"inspector.delete.spoolTitle": "",
|
||||
"inspector.delete.vendor": "",
|
||||
"inspector.delete.vendorBody": "",
|
||||
"inspector.delete.vendorDone": "",
|
||||
"inspector.delete.vendorTitle": "",
|
||||
"inspector.duplicateFilament": "",
|
||||
"inspector.empty": "",
|
||||
"inspector.enterValidLength": "",
|
||||
"inspector.enterValidWeight": "",
|
||||
"inspector.loading": "",
|
||||
"inspector.manageExtraFields": "",
|
||||
"inspector.measuredHelp": "",
|
||||
"inspector.multi": "",
|
||||
"inspector.newGross": "",
|
||||
"inspector.noExtraFields": "",
|
||||
"inspector.notFound": "",
|
||||
"inspector.ofRemaining": "",
|
||||
"inspector.openFilament": "",
|
||||
"inspector.openLink": "",
|
||||
"inspector.openManufacturer": "",
|
||||
"inspector.specs": "",
|
||||
"inspector.spoolsCount": "",
|
||||
"inspector.spoolsTotalRemaining": "",
|
||||
"inspector.used": "",
|
||||
"kofi": "உதவிக்குறிப்பு மற்றும் ஆன்-ஃபை",
|
||||
"labels.addHead": "",
|
||||
"labels.addQr": "",
|
||||
"labels.addRect": "",
|
||||
"labels.addSwatch": "",
|
||||
"labels.addText": "",
|
||||
"labels.align": "",
|
||||
"labels.alignCenter": "",
|
||||
"labels.alignLeft": "",
|
||||
"labels.alignRight": "",
|
||||
"labels.blank": "",
|
||||
"labels.bold": "",
|
||||
"labels.canvasHint": "",
|
||||
"labels.centerLogo": "",
|
||||
"labels.chooseField": "",
|
||||
"labels.clearFill": "",
|
||||
"labels.copies": "",
|
||||
"labels.cornerRadiusMm": "",
|
||||
"labels.createFirst": "",
|
||||
"labels.cutGuides": "",
|
||||
"labels.deleteConfirm": "",
|
||||
"labels.deleteElement": "",
|
||||
"labels.designName": "",
|
||||
"labels.designerDesc": "",
|
||||
"labels.designerTitle": "",
|
||||
"labels.dpi": "",
|
||||
"labels.dpiHint": "",
|
||||
"labels.duplicate": "",
|
||||
"labels.fields.bedTemp": "",
|
||||
"labels.fields.diameterMm": "",
|
||||
"labels.fields.groupVendor": "",
|
||||
"labels.fields.initialG": "",
|
||||
"labels.fields.netWeightG": "",
|
||||
"labels.fields.remainingG": "",
|
||||
"labels.fill": "",
|
||||
"labels.fitWidth": "",
|
||||
"labels.fitWidthHint": "",
|
||||
"labels.fontMm": "",
|
||||
"labels.gridInfo": "",
|
||||
"labels.hMm": "",
|
||||
"labels.heightMm": "",
|
||||
"labels.hintNowrap": "",
|
||||
"labels.hintSwatch": "",
|
||||
"labels.hintWrap": "",
|
||||
"labels.imageDesc": "",
|
||||
"labels.imageZipNote": "",
|
||||
"labels.insertField": "",
|
||||
"labels.kind.qr": "",
|
||||
"labels.kind.rect": "",
|
||||
"labels.kind.swatch": "",
|
||||
"labels.kind.text": "",
|
||||
"labels.labelSize": "",
|
||||
"labels.labelType": "",
|
||||
"labels.layout": "",
|
||||
"labels.modeImage": "",
|
||||
"labels.modeLabel": "",
|
||||
"labels.modeSheet": "",
|
||||
"labels.new": "",
|
||||
"labels.newText": "",
|
||||
"labels.noDesignsOption": "",
|
||||
"labels.noFilaments": "",
|
||||
"labels.noSpools": "",
|
||||
"labels.onePerLabel": "",
|
||||
"labels.preparing": "",
|
||||
"labels.preview": "",
|
||||
"labels.previewWith": "",
|
||||
"labels.radiusMm": "",
|
||||
"labels.sampleData": "",
|
||||
"labels.saved": "",
|
||||
"labels.saving": "",
|
||||
"labels.searchFilaments": "",
|
||||
"labels.searchSpools": "",
|
||||
"labels.selectAllShort": "",
|
||||
"labels.selectAtLeastOne": "",
|
||||
"labels.selectAtLeastOneFilament": "",
|
||||
"labels.selectDesign": "",
|
||||
"labels.selectElement": "",
|
||||
"labels.selectNoneShort": "",
|
||||
"labels.selectRecentHint": "",
|
||||
"labels.selectRecentShort": "",
|
||||
"labels.showingFilament": "",
|
||||
"labels.showingReal": "",
|
||||
"labels.showingSpool": "",
|
||||
"labels.showingTags": "",
|
||||
"labels.sizeMm": "",
|
||||
"labels.skipHint": "",
|
||||
"labels.sortHint": "",
|
||||
"labels.sortId": "",
|
||||
"labels.sortNewest": "",
|
||||
"labels.stroke": "",
|
||||
"labels.strokeMm": "",
|
||||
"labels.tabDesign": "",
|
||||
"labels.tabPrint": "",
|
||||
"labels.textTemplate": "",
|
||||
"labels.typeFilament": "",
|
||||
"labels.typeHint": "",
|
||||
"labels.typeSpool": "",
|
||||
"labels.unknownFilament": "",
|
||||
"labels.wMm": "",
|
||||
"labels.widthMm": "",
|
||||
"labels.wrapText": "",
|
||||
"labels.xMm": "",
|
||||
"labels.yMm": "",
|
||||
"library.apiError": "",
|
||||
"library.collapseGroup": "",
|
||||
"library.emptyBody": "",
|
||||
"library.emptyFiltered": "",
|
||||
"library.emptyTitle": "",
|
||||
"library.expandGroup": "",
|
||||
"library.filterBy": "",
|
||||
"library.groupBy": "",
|
||||
"library.groupNone": "",
|
||||
"library.nUnused": "",
|
||||
"library.noLocation": "",
|
||||
"library.noValues": "",
|
||||
"library.openGroup": "",
|
||||
"library.openManufacturer": "",
|
||||
"library.section.extra": "",
|
||||
"library.section.filament": "",
|
||||
"library.section.spool": "",
|
||||
"library.section.vendor": "",
|
||||
"library.showMore": "",
|
||||
"library.sort.nozzle": "",
|
||||
"library.sortBy": "",
|
||||
"library.unassigned": "",
|
||||
"library.unitGroups": "",
|
||||
"library.unitSpools": "",
|
||||
"library.unused": "",
|
||||
"library.unusedGroup": "",
|
||||
"library.unusedGroupMixed": "",
|
||||
"library.unusedSub": "",
|
||||
"library.unusedSubMixed": "",
|
||||
"library.used": "",
|
||||
"library.usedAgo": "",
|
||||
"loading": "ஏற்றுகிறது",
|
||||
"locations.locations": "இருப்பிடங்கள்",
|
||||
"locations.newLocation": "புதிய இடம்",
|
||||
"locations.noLocation": "இடம் இல்லை",
|
||||
"locations.noLocationsHelp": "இந்த பக்கம் உங்கள் ச்பூல்களை இருப்பிடங்களில் ஒழுங்கமைக்க அனுமதிக்கிறது, தொடங்குவதற்கு சில ச்பூல்களைச் சேர்க்கவும்!",
|
||||
"nav.labels": "",
|
||||
"nav.library": "",
|
||||
"no": "இல்லை",
|
||||
"notifications.error": "பிழை (நிலை குறியீடு: {{statusCode}})",
|
||||
"notifications.saveSuccessful": "வெற்றிகரமாக சேமிக்கவும்!",
|
||||
"pagination.empty": "",
|
||||
"pagination.next": "",
|
||||
"pagination.pageSize": "",
|
||||
"pagination.perPage": "",
|
||||
"pagination.prev": "",
|
||||
"pagination.range": "",
|
||||
"printing.generic.columns": "நெடுவரிசைகள்",
|
||||
"printing.generic.customSize": "தனிப்பயன்",
|
||||
"printing.generic.description": "விரும்பிய அச்சு தளவமைப்பைப் பெற கீழேயுள்ள அமைப்புகளில் டியூன் செய்யுங்கள். அச்சுப்பொறிகளும் உங்கள் ஓஎச்வும் அதன் சொந்த ஓரங்கள் மற்றும் அளவிடுதலைப் பயன்படுத்தலாம் என்பதை நினைவில் கொள்ளுங்கள், எனவே இவை அனைத்தும் சரியானதாக இருப்பதற்கு முன்பு நீங்கள் சில சோதனை மற்றும் பிழை செய்ய வேண்டியிருக்கும். உண்மையான லேபிள்களில் அச்சிடுவதற்கு முன் வழக்கமான காகிதத்தில் அதை சோதிக்கவும்.",
|
||||
"printing.generic.dimensions": "பரிமாணங்கள்",
|
||||
"printing.generic.gridTooWide": "",
|
||||
"printing.generic.helpMargin": "உங்கள் சிட்டை காகிதம் மற்றும் அச்சுப்பொறியுடன் பொருந்தக்கூடிய வகையில் விளிம்புகள் கட்டமைக்கப்பட வேண்டும், இவற்றை மாற்றுவது முழு கட்டத்தின் அளவையும் பாதிக்கும்.",
|
||||
"printing.generic.helpPrinterMargin": "உங்கள் அச்சுப்பொறி எவ்வளவு நெருக்கமாக அச்சிட முடியும் என்பதற்கு பாதுகாப்பான-மண்டலத்தை அமைக்க வேண்டும், இவற்றை மாற்றுவது முழு கட்டத்தையும் பாதிக்காது.",
|
||||
"printing.generic.horizontalSpacing": "கிடைமட்ட இடைவெளி",
|
||||
@@ -65,7 +329,11 @@
|
||||
"printing.generic.skipItems": "உருப்படிகளைத் தவிர்க்கவும்",
|
||||
"printing.generic.verticalSpacing": "செங்குத்து இடைவெளி",
|
||||
"printing.qrcode.button": "லேபிள்களை அச்சிடுக",
|
||||
"printing.qrcode.customUrl.caveat": "",
|
||||
"printing.qrcode.customUrl.hint": "",
|
||||
"printing.qrcode.customUrl.label": "",
|
||||
"printing.qrcode.useHTTPUrl.label": "QR குறியீடு இணைப்பு",
|
||||
"printing.qrcode.useHTTPUrl.options.custom": "",
|
||||
"printing.qrcode.useHTTPUrl.options.default": "இயல்புநிலை",
|
||||
"printing.qrcode.useHTTPUrl.options.url": "முகவரி",
|
||||
"printing.qrcode.useHTTPUrl.preview": "முன்னோட்டம்:",
|
||||
@@ -73,19 +341,46 @@
|
||||
"printing.spoolSelect.selectedTotal_one": "{{count}} ச்பூல் தேர்ந்தெடுக்கப்பட்டது",
|
||||
"printing.spoolSelect.selectedTotal_other": "{{count}} spools தேர்ந்தெடுக்கப்பட்டவை",
|
||||
"scanner.description": "ச்பூல் பற்றிய விவரங்களைக் காண ஒரு ச்பூல்மேன் கியூஆர் குறியீட்டை ச்கேன் செய்யுங்கள்.",
|
||||
"scanner.error.inUse": "",
|
||||
"scanner.error.insecureContext": "பக்கம் HTTPS க்கு மேல் வழங்கப்படவில்லை.",
|
||||
"scanner.error.notAllowed": "கேமராவை அணுக நீங்கள் அனுமதிக்கவில்லை.",
|
||||
"scanner.error.notFound": "கேமரா எதுவும் கண்டுபிடிக்கப்படவில்லை.",
|
||||
"scanner.error.streamApiNotSupported": "உலாவி மீடியாச்ட்ரீம் பநிஇ ஆதரிக்காது.",
|
||||
"scanner.error.unknown": "அறியப்படாத பிழை ஏற்பட்டது. ({{error}})",
|
||||
"scanner.starting": "",
|
||||
"scanner.title": "QR குறியீடு ச்கேனர்",
|
||||
"search.colorHint": "",
|
||||
"search.noResults": "",
|
||||
"search.searching": "",
|
||||
"search.section.filaments": "",
|
||||
"search.section.spools": "",
|
||||
"search.section.vendors": "",
|
||||
"search.threshold": "",
|
||||
"search.unknownFilament": "",
|
||||
"settings.appearance.tab": "",
|
||||
"settings.appearance.theme.dark": "",
|
||||
"settings.appearance.theme.desc": "",
|
||||
"settings.appearance.theme.label": "",
|
||||
"settings.appearance.theme.light": "",
|
||||
"settings.appearance.theme.system": "",
|
||||
"settings.extraFields.addChoice": "",
|
||||
"settings.extraFields.addChoicesFirst": "",
|
||||
"settings.extraFields.addEntityField": "",
|
||||
"settings.extraFields.booleanFalse": "இல்லை",
|
||||
"settings.extraFields.booleanTrue": "ஆம்",
|
||||
"settings.extraFields.deleteConfirm": "புலம் {{name}} ஐ நீக்கு?",
|
||||
"settings.extraFields.description.intro": " இங்கே நீங்கள் உங்கள் நிறுவனங்களுக்குக் கூடுதல் தனிப்பயன் புலங்களைச் சேர்க்கலாம். நீங்கள் ஒரு புலத்தை அகற்றினால், அனைத்து நிறுவனங்களுக்கும் தொடர்புடைய தரவு நீக்கப்படும்.",
|
||||
"settings.extraFields.description.constraints": " மற்ற நிரல்கள் தரவைப் படிக்கிறோம்/எழுதுகின்றன என்பதுதான் முக்கியமானது, எனவே உங்கள் தனிப்பயன் புலம் மூன்றாம் தரப்பு நிரலுடன் ஒருங்கிணைக்க வேண்டுமானால், அதைச் சரியாக அமைக்க உறுதிசெய்க. ",
|
||||
"settings.extraFields.description.intro": " இங்கே நீங்கள் உங்கள் நிறுவனங்களுக்குக் கூடுதல் தனிப்பயன் புலங்களைச் சேர்க்கலாம். நீங்கள் ஒரு புலத்தை அகற்றினால், அனைத்து நிறுவனங்களுக்கும் தொடர்புடைய தரவு நீக்கப்படும்.",
|
||||
"settings.extraFields.description.keyUsage": "இயல்புநிலை மதிப்பு புதிய உருப்படிகளுக்கு மட்டுமே பயன்படுத்தப்படுகிறது. ",
|
||||
"settings.extraFields.description.tableViews": " கூடுதல் புலங்களை அட்டவணை காட்சிகளில் வரிசைப்படுத்தவோ வடிகட்டவோ முடியாது. ",
|
||||
"settings.extraFields.editorEdit": "",
|
||||
"settings.extraFields.editorNew": "",
|
||||
"settings.extraFields.errors.choiceNeeded": "",
|
||||
"settings.extraFields.errors.choicesRemoved": "",
|
||||
"settings.extraFields.errors.deleteFailed": "",
|
||||
"settings.extraFields.errors.keyFormat": "",
|
||||
"settings.extraFields.errors.nameRequired": "",
|
||||
"settings.extraFields.errors.saveFailed": "",
|
||||
"settings.extraFields.fieldType.boolean": "பூலியன்",
|
||||
"settings.extraFields.fieldType.choice": "தேர்வு",
|
||||
"settings.extraFields.fieldType.datetime": "தேதிநேரம்",
|
||||
@@ -94,7 +389,13 @@
|
||||
"settings.extraFields.fieldType.integer": "முழு எண்",
|
||||
"settings.extraFields.fieldType.integerRange": "முழு எண் வரம்பு",
|
||||
"settings.extraFields.fieldType.text": "உரை",
|
||||
"settings.extraFields.max": "",
|
||||
"settings.extraFields.min": "",
|
||||
"settings.extraFields.multiSuffix": "",
|
||||
"settings.extraFields.multiple": "",
|
||||
"settings.extraFields.namePlaceholder": "",
|
||||
"settings.extraFields.nonUniqueKeyError": "முக்கியமானது தனித்துவமாக இருக்க வேண்டும்.",
|
||||
"settings.extraFields.none": "",
|
||||
"settings.extraFields.params.choices": "தேர்வுகள்",
|
||||
"settings.extraFields.params.defaultValue": "இயல்புநிலை மதிப்பு",
|
||||
"settings.extraFields.params.fieldType": "வகை",
|
||||
@@ -102,14 +403,21 @@
|
||||
"settings.extraFields.params.name": "பெயர்",
|
||||
"settings.extraFields.params.order": "ஒழுங்கு",
|
||||
"settings.extraFields.params.unit": "அலகு",
|
||||
"settings.extraFields.saveField": "",
|
||||
"settings.extraFields.tab": "கூடுதல் புலங்கள்",
|
||||
"settings.general.baseUrl.label": "அடிப்படை முகவரி",
|
||||
"settings.general.baseUrl.tooltip": "QR குறியீடுகள் போன்ற அம்சங்களை உருவாக்கும்போது பயன்படுத்த வேண்டிய அடிப்படை முகவரி.",
|
||||
"settings.general.currency.desc": "",
|
||||
"settings.general.currency.label": "நாணயம்",
|
||||
"settings.general.roundPrices.label": "சுற்று விலைகள்",
|
||||
"settings.general.roundPrices.tooltip": "அருகிலுள்ள முழு எண்ணுக்கு வட்ட விலைகள்.",
|
||||
"settings.general.tab": "பொது",
|
||||
"settings.header": "அமைப்புகள்",
|
||||
"settings.language.desc": "",
|
||||
"settings.language.label": "",
|
||||
"settings.library.lowThreshold.desc": "",
|
||||
"settings.library.lowThreshold.label": "",
|
||||
"settings.library.tab": "",
|
||||
"spool.fields.archived": "காப்பகப்படுத்தப்பட்டது",
|
||||
"spool.fields.comment": "கருத்து",
|
||||
"spool.fields.filament": "தாள்",
|
||||
@@ -133,7 +441,16 @@
|
||||
"spool.form.measurementType.length": "நீளம்",
|
||||
"spool.form.measurementType.weight": "எடை",
|
||||
"spool.spool": "ச்பூல்கள்",
|
||||
"topbar.addSpools": "",
|
||||
"topbar.searchPlaceholder": "",
|
||||
"unknown": "தெரியவில்லை",
|
||||
"validation.hexDigits": "",
|
||||
"validation.maxChars": "",
|
||||
"validation.mustBeGt": "",
|
||||
"validation.mustBeMax": "",
|
||||
"validation.mustBeMin": "",
|
||||
"validation.mustBeNumber": "",
|
||||
"validation.required": "",
|
||||
"vendor.fields.comment": "கருத்து",
|
||||
"vendor.fields.emptySpoolWeight": "வெற்று ச்பூல் எடை",
|
||||
"vendor.fields.externalId": "வெளிப்புற ஐடி",
|
||||
|
||||
@@ -1,17 +1,143 @@
|
||||
{
|
||||
"add.addAndNew": "บันทึกและเพิ่มรายการใหม่",
|
||||
"add.addN_other": "เพิ่ม {{count}} ม้วน",
|
||||
"add.adding": "กำลังเพิ่ม...",
|
||||
"add.advanced": "สเปกขั้นสูง",
|
||||
"add.advancedNote": "ความหนาแน่น เส้นผ่านศูนย์กลาง อุณหภูมิ (กรอกอัตโนมัติตามวัสดุ)",
|
||||
"add.change": "เปลี่ยน",
|
||||
"add.count": "จำนวน",
|
||||
"add.createNew": "สร้างเส้นพลาสติกใหม่",
|
||||
"add.createNewSub": "ไม่อยู่ในแค็ตตาล็อกของคุณหรือ {{name}}",
|
||||
"add.dbUnavailable": "ไม่สามารถใช้งาน {{name}} ได้",
|
||||
"add.duplicate": "ทำซ้ำ",
|
||||
"add.duplicateNote": "คัดลอกสเปก ผู้ผลิต และราคามาแล้ว กรุณาตั้งชื่อและเลือกสีใหม่",
|
||||
"add.duplicateRename": "ชื่อยังเหมือนกับต้นฉบับ — เปลี่ยนชื่อเพื่อแยกความต่าง",
|
||||
"add.duplicateTitle": "เส้นพลาสติกใหม่ · สำเนาของ “{{name}}”",
|
||||
"add.filamentNamePlaceholder": "เช่น PolyTerra Matte Sage",
|
||||
"add.fill.full": "เต็มม้วน",
|
||||
"add.fillLevel": "ระดับปริมาณคงเหลือ",
|
||||
"add.importNote": "เส้นพลาสติกนี้จะถูกเพิ่มลงในแค็ตตาล็อกของคุณเมื่อคุณเพิ่มม้วนพลาสติก",
|
||||
"add.inCatalog": "ในแค็ตตาล็อก",
|
||||
"add.locationHint": "ตำแหน่งที่คุณจัดเก็บม้วนพลาสติกจริง — เช่น ชั้นวาง กล่อง หรือเครื่องพิมพ์ เว้นว่างไว้หากเก็บไว้ที่เดียวกันทั้งหมด",
|
||||
"add.locationPlaceholder": "เช่น ชั้นวาง A, กล่องกันชื้น 2, เครื่องพิมพ์ 1",
|
||||
"add.manufacturerPlaceholder": "เช่น Polymaker",
|
||||
"add.nameHint": "ระบุชื่อสีด้วย — เพื่อช่วยแยกความต่างของเส้นพลาสติก",
|
||||
"add.newFilament": "เส้นพลาสติกใหม่",
|
||||
"add.newFilamentTitle": "เส้นพลาสติกใหม่",
|
||||
"add.noCatalog": "ไม่มีเส้นพลาสติกในแค็ตตาล็อกของคุณ",
|
||||
"add.noManufacturer": "ไม่มีผู้ผลิต",
|
||||
"add.pickColor": "เลือกสี",
|
||||
"add.searchPlaceholder": "ค้นหาในแค็ตตาล็อกของคุณและ {{name}}...",
|
||||
"add.searching": "กำลังค้นหา...",
|
||||
"add.section.filament": "เส้นพลาสติก",
|
||||
"add.section.filamentNote": "ผลิตภัณฑ์บนม้วนพลาสติก — หนึ่งรายการต่อหนึ่งสี",
|
||||
"add.section.manufacturer": "ผู้ผลิต",
|
||||
"add.section.manufacturerNote": "ผู้ผลิตเส้นพลาสติก เพิ่มเพียงครั้งเดียวแล้วนำไปใช้ซ้ำกับเส้นพลาสติกทั้งหมดของแบรนด์นี้",
|
||||
"add.section.spool": "ม้วนพลาสติก",
|
||||
"add.section.spoolNote": "ม้วนพลาสติกจริงที่จะบันทึกลงในคลังของคุณ",
|
||||
"add.section.spoolSharedNote": "น้ำหนัก น้ำหนักม้วนเปล่า และราคา จะถูกบันทึกเป็นค่าเริ่มต้นของเส้นพลาสติกใหม่ด้วย",
|
||||
"add.spoolWeightPreset.cardboard": "กระดาษแข็ง {{weight}} ก.",
|
||||
"add.spoolWeightPreset.plastic": "พลาสติก {{weight}} ก.",
|
||||
"add.spoolWeightPresetsLead": "เริ่มต้นจากม้วนทั่วไป:",
|
||||
"add.step2": "ขั้นตอนที่ 2 · รายละเอียดม้วนพลาสติก",
|
||||
"add.step2New": "ขั้นตอนที่ 2 · รายละเอียดเส้นและม้วนพลาสติก",
|
||||
"add.summary_other": "{{count}} ม้วน",
|
||||
"add.typeToSearchAll": "พิมพ์เพื่อค้นหาเส้นพลาสติกนับพันรายการ",
|
||||
"add.typeToSearchMatches": "พิมพ์เพื่อค้นหา — ไม่พบรายการที่ตรงกัน",
|
||||
"add.useExisting": "ใช้รายการที่มีอยู่แล้ว",
|
||||
"add.vendorHint.existing": "ใช้ผู้ผลิตที่มีอยู่แล้ว “{{name}}”",
|
||||
"add.vendorHint.new": "จะสร้างผู้ผลิตใหม่ “{{name}}”",
|
||||
"add.vendorHint.optional": "ไม่บังคับ — เว้นว่างไว้หากไม่มีผู้ผลิต",
|
||||
"add.weightPresets": "ขนาดยอดนิยม",
|
||||
"add.yourCatalog": "แค็ตตาล็อกของคุณ",
|
||||
"buttons.apply": "นำไปใช้",
|
||||
"buttons.archive": "เก็บถาวร",
|
||||
"buttons.cancel": "ยกเลิก",
|
||||
"buttons.clear": "ล้าง",
|
||||
"buttons.close": "ปิด",
|
||||
"buttons.delete": "ลบ",
|
||||
"buttons.edit": "แก้ไข",
|
||||
"buttons.filter": "กรอง",
|
||||
"buttons.save": "บันทึก",
|
||||
"buttons.showArchived": "แสดงที่เก็บถาวร",
|
||||
"buttons.unArchive": "ยกเลิกเก็บถาวร",
|
||||
"changeFilament.action": "เปลี่ยน",
|
||||
"changeFilament.adoptWeight": "ตั้งค่าน้ำหนักเต็มม้วนนี้เป็น {{full}}",
|
||||
"changeFilament.adoptWeightHelp": "บันทึกเดิมคือ {{current}} จากเส้นพลาสติกเดิม น้ำหนักที่ใช้ไป ({{used}}) จะยังคงเดิม ทำให้เหลือ {{remaining}}",
|
||||
"changeFilament.apply": "เปลี่ยนเส้นพลาสติก",
|
||||
"changeFilament.applying": "กำลังเปลี่ยน...",
|
||||
"changeFilament.current": "ปัจจุบัน",
|
||||
"changeFilament.done": "เปลี่ยนเส้นพลาสติกเรียบร้อยแล้ว",
|
||||
"changeFilament.failed": "ไม่สามารถเปลี่ยนเส้นพลาสติกได้",
|
||||
"changeFilament.importNote": "เส้นพลาสติกนี้จะถูกเพิ่มลงในแค็ตตาล็อกของคุณเมื่อคุณบันทึกการเปลี่ยนแปลง",
|
||||
"changeFilament.intro": "ม้วนพลาสติก #{{id}} จะยังคงรักษาหมายเลข สถานที่จัดเก็บ วันที่ และประวัติการใช้งานเดิมไว้ — เปลี่ยนเฉพาะเส้นพลาสติกที่บรรจุอยู่เท่านั้น",
|
||||
"changeFilament.newTag": "ใหม่",
|
||||
"changeFilament.next": "เปลี่ยนเป็น",
|
||||
"changeFilament.now": "ปัจจุบัน",
|
||||
"changeFilament.pickBelow": "เลือกเส้นพลาสติกด้านล่าง",
|
||||
"changeFilament.title": "เปลี่ยนเส้นพลาสติก",
|
||||
"changeFilament.useExisting": "เลือกเส้นพลาสติกที่มีอยู่แล้ว",
|
||||
"changeFilament.weightFollows": "ม้วนพลาสติกนี้ไม่ได้ระบุน้ำหนักเต็มม้วนไว้ จึงใช้น้ำหนักของเส้นพลาสติกใหม่: {{full}} คงเหลือ {{remaining}} หลังจากหักลบ {{used}} ที่ใช้ไปแล้ว",
|
||||
"changeVendor.action": "เปลี่ยน",
|
||||
"changeVendor.apply": "เปลี่ยนผู้ผลิต",
|
||||
"changeVendor.applying": "กำลังเปลี่ยน...",
|
||||
"changeVendor.clearHint": "กำหนดให้เส้นพลาสติกนี้ไม่มีผู้ผลิต",
|
||||
"changeVendor.create": "สร้าง “{{name}}”",
|
||||
"changeVendor.createHint": "ยังไม่มีในรายชื่อผู้ผลิตของคุณ — ระบบจะเพิ่มให้อัตโนมัติ",
|
||||
"changeVendor.current": "ปัจจุบัน",
|
||||
"changeVendor.done": "เปลี่ยนผู้ผลิตเรียบร้อยแล้ว",
|
||||
"changeVendor.emptySpool": "ม้วนเปล่า {{value}}",
|
||||
"changeVendor.failed": "ไม่สามารถเปลี่ยนผู้ผลิตได้",
|
||||
"changeVendor.intro": "“{{name}}” จะยังคงรักษาม้วนพลาสติก สเปก และประวัติเดิมไว้ — เปลี่ยนเฉพาะผู้ผลิตที่จัดหมวดหมู่ไว้เท่านั้น",
|
||||
"changeVendor.next": "เปลี่ยนเป็น",
|
||||
"changeVendor.noEmptySpool": "ไม่มีน้ำหนักม้วนพลาสติกเปล่า",
|
||||
"changeVendor.noMatches": "ไม่พบผู้ผลิตที่ตรงกัน",
|
||||
"changeVendor.none": "ยังไม่มีผู้ผลิต",
|
||||
"changeVendor.noneNote": "ไม่ได้ระบุแบรนด์",
|
||||
"changeVendor.now": "ปัจจุบัน",
|
||||
"changeVendor.pickBelow": "เลือกผู้ผลิตด้านล่าง",
|
||||
"changeVendor.searchPlaceholder": "ค้นหาหรือพิมพ์ชื่อผู้ผลิต",
|
||||
"changeVendor.tareFollows": "เส้นพลาสติกนี้ไม่ได้ระบุน้ำหนักม้วนเปล่าไว้ จึงใช้น้ำหนักของผู้ผลิต หลังเปลี่ยนจะเป็น {{value}} ซึ่งเป็นน้ำหนักม้วนเปล่าเมื่อคุณนำไปชั่ง",
|
||||
"changeVendor.tareGone": "เส้นพลาสติกนี้ไม่ได้ระบุน้ำหนักม้วนเปล่าไว้และเดิมใช้ {{current}} ของผู้ผลิต หลังเปลี่ยนจะไม่มีค่าน้ำหนักม้วนเปล่า จนกว่าคุณจะกำหนดให้กับเส้นพลาสติกนี้",
|
||||
"changeVendor.title": "เปลี่ยนผู้ผลิต",
|
||||
"changeVendor.willBeCreated": "จะถูกสร้างใหม่",
|
||||
"common.decrement": "ลดลง",
|
||||
"common.increment": "เพิ่มขึ้น",
|
||||
"common.remove": "ลบออก",
|
||||
"common.search": "ค้นหา",
|
||||
"dashboard.addFieldHint": "เพิ่มฟิลด์ข้อความหรือตัวเลือกในม้วนพลาสติกที่หน้าการตั้งค่าเพื่อจัดกลุ่มตามฟิลด์นั้นได้ด้วย",
|
||||
"dashboard.dashboard": "แดชบอร์ด",
|
||||
"dashboard.deleteGroup": "ลบกลุ่ม",
|
||||
"dashboard.dragHint": "ลากม้วนพลาสติกไปยังการ์ดอื่นเพื่อเปลี่ยน {{field}} หรือลากภายในการ์ดเพื่อจัดเรียงลำดับ",
|
||||
"dashboard.dropHere": "วางม้วนพลาสติกที่นี่",
|
||||
"dashboard.emptyHelp": "หน้านี้จะจัดกลุ่มม้วนพลาสติกของคุณตามฟิลด์ที่คุณเลือก เพิ่มม้วนพลาสติกเพื่อเริ่มต้น!",
|
||||
"dashboard.errorEmptyName": "ชื่อต้องไม่ว่างเปล่า",
|
||||
"dashboard.errorExists": "มีกลุ่มที่ใช้ชื่อนี้อยู่แล้ว",
|
||||
"dashboard.errorRename": "ไม่สามารถเปลี่ยนชื่อกลุ่มได้",
|
||||
"dashboard.lastUsed": "ใช้งานล่าสุดเมื่อ {{time}}",
|
||||
"dashboard.newGroup": "กลุ่มใหม่",
|
||||
"dashboard.newGroupName": "กลุ่มใหม่ {{n}}",
|
||||
"dashboard.reorderGroup": "ลากเพื่อจัดเรียงกลุ่ม",
|
||||
"dashboard.spoolCount_other": "{{count}} ม้วน",
|
||||
"dashboard.unassigned": "ยังไม่ได้จัดกลุ่ม",
|
||||
"datetime.done": "เสร็จสิ้น",
|
||||
"datetime.hour": "ชั่วโมง",
|
||||
"datetime.minute": "นาที",
|
||||
"datetime.nextMonth": "เดือนถัดไป",
|
||||
"datetime.now": "ตอนนี้",
|
||||
"datetime.pick": "เลือกวันเวลา",
|
||||
"datetime.prevMonth": "เดือนก่อนหน้า",
|
||||
"datetime.time": "เวลา",
|
||||
"documentTitle.dashboard.list": "แดชบอร์ด | Spoolman",
|
||||
"documentTitle.labels.list": "ฉลาก | Spoolman",
|
||||
"documentTitle.library.list": "คลังข้อมูล | Spoolman",
|
||||
"documentTitle.locations.list": "สถานที่เก็บ | Spoolman",
|
||||
"filament.fields.articleNumber": "เลขบทความ",
|
||||
"filament.fields.coaxial": "เส้นหลายสี",
|
||||
"documentTitle.settings.list": "การตั้งค่า | Spoolman",
|
||||
"filament.fields.addColor": "เพิ่มสี",
|
||||
"filament.fields.articleNumber": "รหัสสินค้า",
|
||||
"filament.fields.coaxial": "เส้นประกบหลายสี",
|
||||
"filament.fields.colorHex": "สี",
|
||||
"filament.fields.colorType": "ประเภทสี",
|
||||
"filament.fields.comment": "หมายเหตุ",
|
||||
"filament.fields.density": "ความหนาแน่น",
|
||||
"filament.fields.diameter": "เส้นผ่านศูนย์กลาง",
|
||||
@@ -21,8 +147,10 @@
|
||||
"filament.fields.material": "วัสดุ",
|
||||
"filament.fields.multiColor": "หลายสี",
|
||||
"filament.fields.name": "ชื่อ",
|
||||
"filament.fields.opacity": "ความทึบแสง",
|
||||
"filament.fields.price": "ราคา",
|
||||
"filament.fields.registered": "ลงทะเบียน",
|
||||
"filament.fields.removeColor": "ลบสีออก",
|
||||
"filament.fields.settingsBedTemp": "อุณหภูมิฐานพิมพ์",
|
||||
"filament.fields.settingsExtruderTemp": "อุณหภูมิหัวพิมพ์",
|
||||
"filament.fields.singleColor": "สีเดียว",
|
||||
@@ -31,23 +159,242 @@
|
||||
"filament.fields.weight": "น้ำหนัก",
|
||||
"filament.fieldsHelp.articleNumber": "เช่น EAN, UPC, เป็นต้น",
|
||||
"filament.fieldsHelp.multiColorDirection": "เส้นพลาสติกหลายสีสามารถมีหลายสีได้ 2 รูปแบบ: แบบ coextrusion (เช่น เส้นพลาสติกสองสีพร้อมกัน) หรือแบบไล่สีตามความยาว (เช่น เส้นพลาสติกเปลี่ยนสีไปเรื่อยๆ)",
|
||||
"filament.fieldsHelp.spoolWeight": "น้ำหนักม้วนพลาสติกเปล่า ใช้เพื่อคำนวณน้ำหนักรวมของม้วนพลาสติก",
|
||||
"filament.fieldsHelp.spoolWeight": "น้ำหนักของม้วนพลาสติกเปล่า ใช้เพื่อคำนวณน้ำหนักที่วัดได้ของม้วนพลาสติก หากไม่แน่ใจ ม้วนกระดาษมักหนัก 130–150 ก. และม้วนพลาสติกหนัก 180–250 ก. — หากต้องการตัวเลขที่แม่นยำ ให้นำม้วนเปล่าไปชั่งเมื่อใช้หมด",
|
||||
"filament.fieldsHelp.weight": "น้ำหนักของเส้นพลาสติกในม้วนพลาสติก (สุทธิ) ไม่รวมม้วนพลาสติกเปล่า เป็นค่าน้ำหนักที่มักระบุบนบรรจุภัณฑ์",
|
||||
"filament.filament": "เส้นพลาสติก",
|
||||
"footer.documentation": "เอกสารคู่มือ",
|
||||
"footer.reportIssue": "รายงานปัญหา",
|
||||
"help.help": "วิธีใช้",
|
||||
"inspector.addSpoolsOfThis": "เพิ่มม้วนพลาสติกจากเส้นพลาสติกนี้",
|
||||
"inspector.adjustFailed": "ปรับค่าน้ำหนักไม่สำเร็จ",
|
||||
"inspector.adjustHelp": "ค่าบวกคือใช้เส้นพลาสติก ค่าลบคือเพิ่มเส้นพลาสติกกลับเข้าไป",
|
||||
"inspector.adjustWeight": "ปรับน้ำหนัก",
|
||||
"inspector.apply": "นำไปใช้",
|
||||
"inspector.applying": "กำลังนำไปใช้...",
|
||||
"inspector.colorHex": "รหัสสี (HEX)",
|
||||
"inspector.consumeAmount": "ปริมาณที่ใช้ไป:",
|
||||
"inspector.defaultFrom.filament": "{{value}} · ค่าเริ่มต้นของเส้นพลาสติก",
|
||||
"inspector.defaultFrom.manufacturer": "{{value}} · ค่าเริ่มต้นของผู้ผลิต",
|
||||
"inspector.delete.deleting": "กำลังลบ...",
|
||||
"inspector.delete.errorGone": "รายการนี้ถูกลบไปแล้ว",
|
||||
"inspector.delete.errorSpoolsExist": "ไม่สามารถลบเส้นพลาสติกนี้ได้ — ยังมีม้วนพลาสติกที่ใช้งานอยู่",
|
||||
"inspector.delete.errorUnknown": "การลบล้มเหลว ตรวจสอบรายละเอียดได้ที่ server logs",
|
||||
"inspector.delete.filament": "ลบเส้นพลาสติก",
|
||||
"inspector.delete.filamentBlockedHint": "ลบม้วนพลาสติกเหล่านั้นออกก่อน การเก็บถาวรยังไม่เพียงพอ",
|
||||
"inspector.delete.filamentBlockedTitle": "ไม่สามารถลบเส้นพลาสติกนี้ได้",
|
||||
"inspector.delete.filamentBlocked_other": "ยังมี {{count}} ม้วนพลาสติกที่ใช้ “{{name}}” อยู่ (รวมถึงที่เก็บถาวร)",
|
||||
"inspector.delete.filamentBody": "“{{name}}” จะถูกลบออกจากแค็ตตาล็อกของคุณ และไม่สามารถยกเลิกการกระทำนี้ได้",
|
||||
"inspector.delete.filamentDone": "ลบเส้นพลาสติกเรียบร้อยแล้ว",
|
||||
"inspector.delete.filamentTitle": "ลบเส้นพลาสติกนี้หรือไม่?",
|
||||
"inspector.delete.spool": "ลบม้วนพลาสติก",
|
||||
"inspector.delete.spoolBody": "ม้วนพลาสติก #{{id}} ของ “{{name}}” จะถูกลบออกพร้อมกับประวัติการใช้งาน และไม่สามารถยกเลิกการกระทำนี้ได้",
|
||||
"inspector.delete.spoolDone": "ลบม้วนพลาสติกเรียบร้อยแล้ว",
|
||||
"inspector.delete.spoolRemaining": "ยังมีเส้นพลาสติกเหลืออยู่ {{weight}} ให้เลือกเก็บถาวรแทนหากต้องการซ่อนรายการไว้",
|
||||
"inspector.delete.spoolTitle": "ลบม้วนพลาสติกนี้หรือไม่?",
|
||||
"inspector.delete.vendor": "ลบผู้ผลิต",
|
||||
"inspector.delete.vendorBody": "“{{name}}” จะถูกลบออก และไม่สามารถยกเลิกการกระทำนี้ได้",
|
||||
"inspector.delete.vendorDone": "ลบผู้ผลิตเรียบร้อยแล้ว",
|
||||
"inspector.delete.vendorOrphans_other": "เส้นพลาสติกทั้ง {{count}} รายการจะยังคงอยู่ แต่จะไม่มีผู้ผลิตระบุไว้",
|
||||
"inspector.delete.vendorTitle": "ลบผู้ผลิตนี้หรือไม่?",
|
||||
"inspector.duplicateFilament": "ทำซ้ำ",
|
||||
"inspector.empty": "เลือกม้วนพลาสติก เส้นพลาสติก หรือผู้ผลิตจากรายการเพื่อดูรายละเอียดที่นี่",
|
||||
"inspector.enterValidLength": "กรุณากรอกความยาวที่ถูกต้อง",
|
||||
"inspector.enterValidWeight": "กรุณากรอกน้ำหนักที่ถูกต้อง",
|
||||
"inspector.loading": "กำลังโหลด...",
|
||||
"inspector.manageExtraFields": "จัดการฟิลด์",
|
||||
"inspector.measuredHelp": "น้ำหนักรวมของม้วนพลาสติก + เส้นพลาสติกคงเหลือ ตามที่อ่านได้จากตาชั่ง",
|
||||
"inspector.multi": "หลายรายการ ×{{count}}",
|
||||
"inspector.newGross": "น้ำหนักรวมใหม่ (Gross Weight):",
|
||||
"inspector.noExtraFields": "ยังไม่มี — เพิ่มฟิลด์ที่คุณกำหนดเองเพื่อติดตามข้อมูลอื่นๆ นอกเหนือจากที่ Spoolman มีให้",
|
||||
"inspector.notFound": "ไม่พบรายการนี้ รายการอาจถูกลบไปแล้ว",
|
||||
"inspector.ofRemaining": "จากคงเหลือ {{weight}} · {{length}} ม.",
|
||||
"inspector.openFilament": "เปิดข้อมูลเส้นพลาสติก",
|
||||
"inspector.openLink": "เปิด {{url}} ในแท็บใหม่",
|
||||
"inspector.openManufacturer": "เปิดข้อมูลผู้ผลิต",
|
||||
"inspector.override.byFilament": "ถูกแทนที่โดยเส้นพลาสติกนี้ · {{value}}",
|
||||
"inspector.override.bySpool": "ถูกแทนที่โดยม้วนพลาสติกนี้ · {{value}}",
|
||||
"inspector.override.overridesFilament": "แทนที่เส้นพลาสติก · {{value}}",
|
||||
"inspector.override.overridesManufacturer": "แทนที่ผู้ผลิต · {{value}}",
|
||||
"inspector.specs": "สเปก — แก้ไขได้โดยตรง",
|
||||
"inspector.spoolsCount": "ม้วนพลาสติก · {{count}}",
|
||||
"inspector.spoolsTotalRemaining": "รวมทั้งหมด {{weight}}",
|
||||
"inspector.used": "ใช้ไปแล้ว",
|
||||
"inspector.vendorSub_other": "{{count}} เส้นพลาสติก",
|
||||
"kofi": "สนับสนุนเราได้ที่ Ko-fi",
|
||||
"labels.addHead": "เพิ่ม",
|
||||
"labels.addQr": "QR code",
|
||||
"labels.addRect": "สี่เหลี่ยม",
|
||||
"labels.addSwatch": "ตัวอย่างสี (Swatch)",
|
||||
"labels.addText": "ข้อความ / ฟิลด์",
|
||||
"labels.align": "จัดแนว",
|
||||
"labels.alignCenter": "กึ่งกลาง",
|
||||
"labels.alignLeft": "ชิดซ้าย",
|
||||
"labels.alignRight": "ชิดขวา",
|
||||
"labels.blank": "คุณยังไม่มีรูปแบบฉลากใดๆ",
|
||||
"labels.bold": "ตัวหนา",
|
||||
"labels.canvasHint": "ลากเพื่อย้าย · คลิกเพื่อเลือก · ดึงจุดจับเพื่อปรับขนาด",
|
||||
"labels.centerLogo": "จัดโลโก้ Spoolman กึ่งกลาง",
|
||||
"labels.chooseField": "เลือกฟิลด์...",
|
||||
"labels.clearFill": "ล้างสีพื้นหลัง (เส้นขอบเท่านั้น)",
|
||||
"labels.copies": "สำเนา",
|
||||
"labels.cornerRadiusMm": "รัศมีมุมโค้ง",
|
||||
"labels.createFirst": "สร้างฉลากแรกของคุณ",
|
||||
"labels.cutGuides": "เส้นนำการตัด",
|
||||
"labels.deleteConfirm": "ลบรูปแบบฉลากนี้หรือไม่?",
|
||||
"labels.deleteElement": "ลบองค์ประกอบ",
|
||||
"labels.designName": "ชื่อรูปแบบฉลาก",
|
||||
"labels.designerDesc": "ออกแบบฉลาก QR code พร้อมฟิลด์ของม้วนพลาสติก เส้นพลาสติก หรือผู้ผลิต แล้วพิมพ์ลงบนแผ่นสติกเกอร์หรือเครื่องพิมพ์ฉลาก รูปแบบจะถูกบันทึกไว้บนเซิร์ฟเวอร์",
|
||||
"labels.designerTitle": "ตัวออกแบบฉลาก",
|
||||
"labels.dpi": "ความละเอียด",
|
||||
"labels.dpiHint": "กำหนดให้ตรงกับเครื่องพิมพ์เพื่อให้ฉลากขนาดเล็กคมชัด: 203 dpi สำหรับเครื่องพิมพ์ฉลากความร้อนส่วนใหญ่, 300 ขึ้นไปสำหรับเลเซอร์และอิงค์เจ็ท",
|
||||
"labels.duplicate": "ทำซ้ำ",
|
||||
"labels.exportDescAml": "บันทึกไฟล์ฉลาก .aml หนึ่งไฟล์ต่อฉลากที่เลือก แต่ละฉลากขนาด {{w}}×{{h}} มม. เปิดใช้งานได้ในแอปที่ใช้ LPAPI ซึ่งมาพร้อมกับเครื่องพิมพ์ฉลากความร้อนส่วนใหญ่ โดยจะอ่านขนาดจริงจากไฟล์",
|
||||
"labels.exportDescPng": "บันทึกภาพ PNG หนึ่งไฟล์ต่อฉลากที่เลือก แต่ละฉลากขนาด {{w}}×{{h}} มม.",
|
||||
"labels.exportFormat": "รูปแบบไฟล์",
|
||||
"labels.exportFormatOptions.aml": "ไฟล์ฉลาก AML",
|
||||
"labels.exportFormatOptions.png": "รูปภาพ PNG",
|
||||
"labels.fields.bedTemp": "อุณหภูมิฐานพิมพ์",
|
||||
"labels.fields.diameterMm": "เส้นผ่านศูนย์กลาง (มม.)",
|
||||
"labels.fields.groupVendor": "ผู้ผลิต",
|
||||
"labels.fields.initialG": "เริ่มต้น (ก.)",
|
||||
"labels.fields.netWeightG": "น้ำหนักสุทธิ (ก.)",
|
||||
"labels.fields.remainingG": "คงเหลือ (ก.)",
|
||||
"labels.filamentsSelected_other": "เลือก {{count}} เส้นพลาสติก",
|
||||
"labels.fill": "สีพื้นหลัง",
|
||||
"labels.fitWidth": "ปรับความกว้างให้พอดีกับคอลัมน์",
|
||||
"labels.fitWidthHint": "ตั้งค่าความกว้างฉลากเพื่อให้จำนวนคอลัมน์ที่เลือกพอดีกับหน้ากระดาษ",
|
||||
"labels.fontMm": "ฟอนต์",
|
||||
"labels.gridInfo": "{{cols}} × {{rows}} = {{perPage}} ฉลาก / หน้า",
|
||||
"labels.hMm": "สูง",
|
||||
"labels.heightMm": "ความสูง",
|
||||
"labels.hintNowrap": "ข้อความจะอยู่บรรทัดเดียว ส่วนที่เกินความกว้างจะถูกตัดออก",
|
||||
"labels.hintSwatch": "จะเติมด้วยสีเส้นพลาสติกของม้วนนั้นในขณะพิมพ์",
|
||||
"labels.hintWrap": "ครอบฟิลด์เพื่อซ่อนเมื่อไม่มีข้อมูล:",
|
||||
"labels.imageDesc": "",
|
||||
"labels.imageZipNote": "ฉลากที่มากกว่า {{threshold}} รายการจะถูกส่งออกเป็นไฟล์ zipไฟล์เดียว",
|
||||
"labels.insertField": "แทรกฟิลด์",
|
||||
"labels.kind.qr": "QR code",
|
||||
"labels.kind.rect": "สี่เหลี่ยม",
|
||||
"labels.kind.swatch": "ตัวอย่างสี",
|
||||
"labels.kind.text": "ข้อความ",
|
||||
"labels.labelSize": "ขนาดฉลาก",
|
||||
"labels.labelType": "ประเภทฉลาก",
|
||||
"labels.layout": "เค้าโครง",
|
||||
"labels.modeImage": "ไฟล์",
|
||||
"labels.modeLabel": "เครื่องพิมพ์ฉลาก",
|
||||
"labels.modeSheet": "แผ่นสติกเกอร์ (เรียงแถว)",
|
||||
"labels.new": "ใหม่",
|
||||
"labels.newText": "ข้อความใหม่",
|
||||
"labels.noDesignsOption": "ยังไม่มีรูปแบบฉลาก",
|
||||
"labels.noFilaments": "ไม่มีเส้นพลาสติก",
|
||||
"labels.noSpools": "ไม่มีม้วนพลาสติก",
|
||||
"labels.onePerLabel": "หนึ่งหน้าขนาด {{w}}×{{h}} มม. ต่อหนึ่งฉลาก",
|
||||
"labels.preparing": "กำลังเตรียมพิมพ์...",
|
||||
"labels.preview": "ตัวอย่าง",
|
||||
"labels.previewWith": "ดูตัวอย่างด้วย",
|
||||
"labels.printN_other": "พิมพ์ {{count}} ฉลาก",
|
||||
"labels.radiusMm": "รัศมีมุม",
|
||||
"labels.sampleData": "ข้อมูลตัวอย่าง",
|
||||
"labels.saveAsFormat": "บันทึกเป็น {{format}}",
|
||||
"labels.saved": "บันทึกแล้ว",
|
||||
"labels.saving": "กำลังบันทึก...",
|
||||
"labels.searchFilaments": "ค้นหาเส้นพลาสติก...",
|
||||
"labels.searchSpools": "ค้นหาม้วนพลาสติก...",
|
||||
"labels.selectAllShort": "ทั้งหมด",
|
||||
"labels.selectAtLeastOne": "กรุณาเลือกม้วนพลาสติกอย่างน้อย 1 ม้วน",
|
||||
"labels.selectAtLeastOneFilament": "กรุณาเลือกเส้นพลาสติกอย่างน้อย 1 รายการ",
|
||||
"labels.selectDesign": "เลือกรูปแบบฉลาก",
|
||||
"labels.selectElement": "เลือกองค์ประกอบเพื่อแก้ไข หรือเพิ่มองค์ประกอบจากพาเล็ตต์",
|
||||
"labels.selectNoneShort": "ไม่เลือก",
|
||||
"labels.selectRecentHint": "เลือกม้วนพลาสติกที่เพิ่มเข้ามาในช่วง 24 ชั่วโมงที่ผ่านมา",
|
||||
"labels.selectRecentShort": "ล่าสุด ({{count}})",
|
||||
"labels.showingFilament": "กำลังแสดงเส้นพลาสติก #{{id}}",
|
||||
"labels.showingReal": "กำลังแสดงข้อมูลจริงของม้วนพลาสติก",
|
||||
"labels.showingSpool": "กำลังแสดงม้วนพลาสติก #{{id}}",
|
||||
"labels.showingTags": "ฟิลด์จะแสดงเป็นแท็กจนกว่าคุณจะเลือกม้วนพลาสติกด้านบน",
|
||||
"labels.sizeMm": "ขนาด",
|
||||
"labels.skipHint": "ข้ามรายการจะเว้นช่องว่างตามจำนวนนั้นไว้ก่อนฉลากแรก ช่วยให้คุณนำแผ่นสติกเกอร์ที่ใช้ไปบางส่วนกลับมาใช้ใหม่ได้: ให้นับฉลากที่ลอกออกไปแล้วจากซ้ายไปขวาจากบนลงล่าง",
|
||||
"labels.sortHint": "จัดเรียงม้วนพลาสติก",
|
||||
"labels.sortId": "#",
|
||||
"labels.sortNewest": "ใหม่สุด",
|
||||
"labels.stroke": "เส้นขอบ",
|
||||
"labels.strokeMm": "ความหนาเส้นขอบ",
|
||||
"labels.tabDesign": "ออกแบบ",
|
||||
"labels.tabPrint": "พิมพ์",
|
||||
"labels.textTemplate": "ข้อความ / เทมเพลต",
|
||||
"labels.typeFilament": "เส้นพลาสติก",
|
||||
"labels.typeHint": "ฉลากเส้นพลาสติกจะละเว้นฟิลด์เฉพาะของม้วนพลาสติก และ QR code จะลิงก์ไปยังเส้นพลาสติกแทนม้วนพลาสติก",
|
||||
"labels.typeSpool": "ม้วนพลาสติก",
|
||||
"labels.unknownFilament": "ไม่ทราบเส้นพลาสติก",
|
||||
"labels.wMm": "กว้าง",
|
||||
"labels.widthMm": "ความกว้าง",
|
||||
"labels.wrapText": "ตัดข้อความอัตโนมัติ",
|
||||
"labels.xMm": "X",
|
||||
"labels.yMm": "Y",
|
||||
"library.apiError": "ไม่สามารถเชื่อมต่อกับ Spoolman API ได้ Backend กำลังทำงานอยู่หรือไม่?",
|
||||
"library.collapseGroup": "ซ่อนม้วนพลาสติกเหล่านี้",
|
||||
"library.dateFilter.ago": "{{span}} ที่แล้ว",
|
||||
"library.dateFilter.between": "{{from}} – {{to}}",
|
||||
"library.dateFilter.customRange": "กำหนดช่วงเอง",
|
||||
"library.dateFilter.from": "จาก",
|
||||
"library.dateFilter.last": "{{span}} ล่าสุด",
|
||||
"library.dateFilter.never": "ไม่เคย",
|
||||
"library.dateFilter.olderThan": "เก่ากว่า {{span}}",
|
||||
"library.dateFilter.since": "ตั้งแต่ {{date}}",
|
||||
"library.dateFilter.to": "ถึง (ไม่บังคับ)",
|
||||
"library.dateFilter.until": "จนถึง {{date}}",
|
||||
"library.emptyBody": "เพิ่มม้วนพลาสติกแรกของคุณเพื่อเริ่มติดตามเส้นพลาสติก",
|
||||
"library.emptyFiltered": "ไม่พบ {{unit}} ที่ตรงกับตัวกรองปัจจุบัน",
|
||||
"library.emptyTitle": "ยังไม่มีม้วนพลาสติก",
|
||||
"library.expandGroup": "แสดงม้วนพลาสติกเหล่านี้",
|
||||
"library.filterBy": "กรองโดย",
|
||||
"library.groupBy": "จัดกลุ่ม",
|
||||
"library.groupNone": "ไม่จัดกลุ่ม (แบบเรียบ)",
|
||||
"library.groupSpools_other": "{{count}} ม้วน",
|
||||
"library.nUnused": "×{{count}} ยังไม่ได้ใช้",
|
||||
"library.noLocation": "ไม่มีสถานที่เก็บ",
|
||||
"library.noValues": "ไม่มีข้อมูล",
|
||||
"library.openGroup": "เปิด {{name}}",
|
||||
"library.openManufacturer": "เปิดผู้ผลิต {{name}}",
|
||||
"library.resizeList": "ปรับขนาดรายการ (ดับเบิลคลิกเพื่อรีเซ็ต)",
|
||||
"library.section.extra": "ฟิลด์เพิ่มเติม",
|
||||
"library.section.filament": "เส้นพลาสติก",
|
||||
"library.section.spool": "ม้วนพลาสติก",
|
||||
"library.section.vendor": "ผู้ผลิต",
|
||||
"library.showMore": "แสดงเพิ่มอีก {{count}} รายการ",
|
||||
"library.sort.nozzle": "อุณหภูมิหัวพิมพ์",
|
||||
"library.sortBy": "จัดเรียง",
|
||||
"library.unassigned": "ยังไม่ได้ระบุ",
|
||||
"library.unitGroups": "กลุ่ม",
|
||||
"library.unitSpools": "ม้วน",
|
||||
"library.unused": "ยังไม่ได้ใช้",
|
||||
"library.unusedGroup": "{{count}} ยังไม่ได้ใช้ · ม้วนละ {{weight}} ก.",
|
||||
"library.unusedGroupMixed": "{{count}} ยังไม่ได้ใช้",
|
||||
"library.unusedSub": "ม้วนละ {{weight}} ก. · {{location}}",
|
||||
"library.unusedSubMixed": "{{location}}",
|
||||
"library.used": "ใช้งานแล้ว",
|
||||
"library.usedAgo": "ใช้งานไปเมื่อ {{time}}",
|
||||
"loading": "กำลังโหลด",
|
||||
"locations.locations": "สถานที่เก็บ",
|
||||
"locations.newLocation": "สถานที่เก็บใหม่",
|
||||
"locations.noLocation": "ไม่มีสถานที่เก็บ",
|
||||
"locations.noLocationsHelp": "หน้านี้ให้คุณจัดการม้วนพลาสติกตามสถานที่เก็บ เพิ่มม้วนพลาสติกเพื่อเริ่มต้น!",
|
||||
"nav.labels": "ฉลาก",
|
||||
"nav.library": "คลังข้อมูล",
|
||||
"no": "ไม่",
|
||||
"notifications.error": "เกิดข้อผิดพลาด (รหัสสถานะ: {{statusCode}})",
|
||||
"notifications.saveSuccessful": "บันทึกสำเร็จ!",
|
||||
"pagination.empty": "ไม่มี {{unit}}",
|
||||
"pagination.next": "หน้าถัดไป",
|
||||
"pagination.pageSize": "ขนาดหน้า",
|
||||
"pagination.perPage": "{{size}} / หน้า",
|
||||
"pagination.prev": "หน้าก่อนหน้า",
|
||||
"pagination.range": "{{from}}–{{to}} จาก {{total}} {{unit}}",
|
||||
"printing.generic.columns": "คอลัมน์",
|
||||
"printing.generic.customSize": "กำหนดเอง",
|
||||
"printing.generic.description": "ปรับการตั้งค่าด้านล่างเพื่อให้ได้รูปแบบการพิมพ์ที่ต้องการ โปรดทราบว่าเครื่องพิมพ์และระบบปฏิบัติการของคุณอาจมีการตั้งค่าขอบกระดาษและการปรับขนาดของตัวเอง ดังนั้นคุณอาจต้องลองผิดลองถูกเล็กน้อยก่อนที่จะได้ผลลัพธ์ที่ถูกต้อง แนะนำให้ทดสอบบนกระดาษธรรมดาก่อนที่จะพิมพ์บนกระดาษสติกเกอร์จริง",
|
||||
"printing.generic.dimensions": "ขนาด",
|
||||
"printing.generic.gridTooWide": "ฉลากมีความกว้างเกินหน้ากระดาษ กรุณาลดจำนวนคอลัมน์ ระยะห่าง หรือระยะขอบ",
|
||||
"printing.generic.helpMargin": "การตั้งค่าขอบกระดาษควรกำหนดให้ตรงกับขนาดกระดาษและเครื่องพิมพ์ของคุณ การเปลี่ยนค่านี้จะมีผลต่อขนาดตารางทั้งหมด",
|
||||
"printing.generic.helpPrinterMargin": "Safe-Zone ควรกำหนดเป็นค่าระยะห่างจากขอบกระดาษที่เครื่องพิมพ์สามารถพิมพ์ได้ การเปลี่ยนค่านี้จะไม่กระทบต่อขนาดตารางทั้งหมด",
|
||||
"printing.generic.horizontalSpacing": "ระยะห่างแนวนอน",
|
||||
@@ -65,35 +412,73 @@
|
||||
"printing.generic.skipItems": "ข้ามรายการ",
|
||||
"printing.generic.verticalSpacing": "ระยะห่างแนวตั้ง",
|
||||
"printing.qrcode.button": "พิมพ์ฉลาก",
|
||||
"printing.qrcode.customUrl.caveat": "URL ที่กำหนดเองจะไม่สามารถสแกนกลับเข้ามาใน Spoolman ได้ — ใช้เพื่อชี้ QR code ไปยังแอปภายนอกหรือโฮสต์อื่น",
|
||||
"printing.qrcode.customUrl.hint": "แทรก spool id ตรงจุดใดก็ได้โดยใช้ตัวยึดตำแหน่ง",
|
||||
"printing.qrcode.customUrl.label": "เทมเพลต URL กำหนดเอง",
|
||||
"printing.qrcode.useHTTPUrl.label": "ลิงก์ QR code",
|
||||
"printing.qrcode.useHTTPUrl.options.custom": "URL กำหนดเอง",
|
||||
"printing.qrcode.useHTTPUrl.options.default": "ค่าเริ่มต้น",
|
||||
"printing.qrcode.useHTTPUrl.options.url": "URL",
|
||||
"printing.qrcode.useHTTPUrl.preview": "ตัวอย่าง:",
|
||||
"printing.qrcode.useHTTPUrl.tooltip": "จะใช้ลิงก์ภายในที่จะทำงานได้เฉพาะเมื่อสแกนจากฟีเจอร์สแกนของ Spoolman (ค่าเริ่มต้น) URL จะใช้จาก base URL ที่กำหนดไว้ใน settings หรือใช้ URL ของหน้าปัจจุบันหากไม่ได้ตั้งค่า",
|
||||
"printing.spoolSelect.selectedTotal_other": "เลือก {{count}} ม้วนพลาสติก",
|
||||
"scanner.description": "สแกน Spoolman QR code เพื่อดูข้อมูลเกี่ยวกับม้วนพลาสติก",
|
||||
"scanner.error.inUse": "กล้องกำลังถูกใช้งานโดยแอปพลิเคชันอื่น",
|
||||
"scanner.error.insecureContext": "หน้านี้ไม่ได้ถูกให้บริการผ่าน HTTPS",
|
||||
"scanner.error.notAllowed": "คุณไม่ได้อนุญาตให้เข้าถึงกล้อง",
|
||||
"scanner.error.notFound": "ไม่พบกล้อง",
|
||||
"scanner.error.streamApiNotSupported": "เบราว์เซอร์ไม่รองรับ MediaStream API",
|
||||
"scanner.error.unknown": "เกิดข้อผิดพลาดที่ไม่ทราบสาเหตุ ({{error}})",
|
||||
"scanner.starting": "กำลังเปิดใช้งานกล้อง...",
|
||||
"scanner.title": "เครื่องสแกน QR Code",
|
||||
"search.colorHint": "ชื่อสีต้องกรอกเป็นภาษาอังกฤษ",
|
||||
"search.moreSpools": "อีก +{{count}} ม้วน",
|
||||
"search.noResults": "ไม่พบรายการที่ตรงกัน",
|
||||
"search.searching": "กำลังค้นหา...",
|
||||
"search.section.filaments": "เส้นพลาสติก",
|
||||
"search.section.spools": "ม้วนพลาสติก",
|
||||
"search.section.vendors": "ผู้ผลิต",
|
||||
"search.threshold": "การจับคู่สี",
|
||||
"search.unknownFilament": "ไม่ทราบเส้นพลาสติก",
|
||||
"settings.appearance.tab": "รูปลักษณ์",
|
||||
"settings.appearance.theme.dark": "โหมดมืด",
|
||||
"settings.appearance.theme.desc": "ธีมสี (เฉพาะเบราว์เซอร์นี้)",
|
||||
"settings.appearance.theme.label": "ธีม",
|
||||
"settings.appearance.theme.light": "โหมดสว่าง",
|
||||
"settings.appearance.theme.system": "ตามระบบ",
|
||||
"settings.extraFields.addChoice": "เพิ่มตัวเลือก...",
|
||||
"settings.extraFields.addChoicesFirst": "กรุณาเพิ่มตัวเลือกก่อน",
|
||||
"settings.extraFields.addEntityField": "เพิ่มฟิลด์ {{entity}}",
|
||||
"settings.extraFields.booleanFalse": "ไม่",
|
||||
"settings.extraFields.booleanTrue": "ใช่",
|
||||
"settings.extraFields.deleteConfirm": "ลบฟิลด์ {{name}} หรือไม่?",
|
||||
"settings.extraFields.description.intro": "คุณสามารถเพิ่มฟิลด์ที่กำหนดเองเพิ่มเติมสำหรับเอนทิตีของคุณได้ที่นี่",
|
||||
"settings.extraFields.deleteConfirm": "ลบฟิลด์ {{name}} บน {{entity}} หรือไม่?",
|
||||
"settings.extraFields.description.constraints": "เมื่อเพิ่มฟิลด์แล้ว คุณจะไม่สามารถเปลี่ยนคีย์หรือประเภทของฟิลด์ได้ และสำหรับฟิลด์ประเภทตัวเลือกคุณจะไม่สามารถลบตัวเลือกหรือเปลี่ยนโหมด multi choice ได้ หากคุณลบฟิลด์ ข้อมูลของเอนทิตีทั้งหมดจะถูกลบด้วย",
|
||||
"settings.extraFields.description.intro": "คุณสามารถเพิ่มฟิลด์ที่กำหนดเองเพิ่มเติมสำหรับเอนทิตีของคุณได้ที่นี่",
|
||||
"settings.extraFields.description.keyUsage": "คีย์คือสิ่งที่โปรแกรมอื่นจะใช้เพื่ออ่าน/เขียนข้อมูล ดังนั้นหากฟิลด์ที่คุณสร้างเพื่อเชื่อมต่อกับโปรแกรมอื่น กรุณาตั้งค่าให้ถูกต้อง ค่าดีฟอลต์จะถูกนำไปใช้เฉพาะกับรายการใหม่เท่านั้น",
|
||||
"settings.extraFields.description.tableViews": "ฟิลด์เพิ่มเติมไม่สามารถเรียงหรือกรองได้ในตาราง",
|
||||
"settings.extraFields.fieldType.boolean": "บูลีน(ใส่เฉพาะ ใช่/ไม่)",
|
||||
"settings.extraFields.fieldType.choice": "ตัวเลือก",
|
||||
"settings.extraFields.fieldType.datetime": "วันเวลา",
|
||||
"settings.extraFields.fieldType.float": "ทศนิยม",
|
||||
"settings.extraFields.fieldType.floatRange": "ช่วงทศนิยม",
|
||||
"settings.extraFields.fieldType.integer": "จำนวนเต็ม",
|
||||
"settings.extraFields.fieldType.integerRange": "ช่วงจำนวนเต็ม",
|
||||
"settings.extraFields.fieldType.text": "ข้อความ",
|
||||
"settings.extraFields.description.tableViews": "ฟิลด์เพิ่มเติมสามารถแสดงและจัดเรียงในมุมมองตารางได้ ฟิลด์ประเภทตัวเลือกและบูลีนยังมีตัวเลือกการกรองที่นั่นด้วย และฟิลด์เพิ่มเติมทุกประเภทรองรับการกรองหาค่าว่าง",
|
||||
"settings.extraFields.editorEdit": "แก้ไขฟิลด์ {{entity}}",
|
||||
"settings.extraFields.editorNew": "เพิ่มฟิลด์ {{entity}} ใหม่",
|
||||
"settings.extraFields.errors.choiceNeeded": "ฟิลด์ประเภทตัวเลือกต้องมีตัวเลือกอย่างน้อย 1 รายการ",
|
||||
"settings.extraFields.errors.choicesRemoved": "ไม่สามารถลบตัวเลือกที่มีอยู่เดิมได้: {{choices}}",
|
||||
"settings.extraFields.errors.deleteFailed": "ลบฟิลด์ไม่สำเร็จ",
|
||||
"settings.extraFields.errors.keyFormat": "คีย์ต้องประกอบด้วยตัวพิมพ์เล็ก ตัวเลข และขีดล่างเท่านั้น",
|
||||
"settings.extraFields.errors.nameRequired": "จำเป็นต้องระบุชื่อ",
|
||||
"settings.extraFields.errors.saveFailed": "บันทึกฟิลด์ไม่สำเร็จ",
|
||||
"settings.extraFields.fieldType.boolean": "บูลีน (Boolean)",
|
||||
"settings.extraFields.fieldType.choice": "ตัวเลือก (Choice)",
|
||||
"settings.extraFields.fieldType.datetime": "วันเวลา (Datetime)",
|
||||
"settings.extraFields.fieldType.float": "ทศนิยม (Float)",
|
||||
"settings.extraFields.fieldType.floatRange": "ช่วงทศนิยม (Float Range)",
|
||||
"settings.extraFields.fieldType.integer": "จำนวนเต็ม (Integer)",
|
||||
"settings.extraFields.fieldType.integerRange": "ช่วงจำนวนเต็ม (Integer Range)",
|
||||
"settings.extraFields.fieldType.text": "ข้อความ (Text)",
|
||||
"settings.extraFields.max": "สูงสุด",
|
||||
"settings.extraFields.min": "ต่ำสุด",
|
||||
"settings.extraFields.multiSuffix": " · หลายรายการ",
|
||||
"settings.extraFields.multiple": "เลือกได้หลายรายการ",
|
||||
"settings.extraFields.namePlaceholder": "ชื่อที่แสดง",
|
||||
"settings.extraFields.nonUniqueKeyError": "คีย์ต้องไม่ซ้ำ",
|
||||
"settings.extraFields.none": "ยังไม่มีการกำหนดฟิลด์เพิ่มเติมของ {{entity}}",
|
||||
"settings.extraFields.params.choices": "ตัวเลือก",
|
||||
"settings.extraFields.params.defaultValue": "ค่าเริ่มต้น",
|
||||
"settings.extraFields.params.fieldType": "ประเภท",
|
||||
@@ -101,12 +486,22 @@
|
||||
"settings.extraFields.params.name": "ชื่อ",
|
||||
"settings.extraFields.params.order": "ลำดับ",
|
||||
"settings.extraFields.params.unit": "หน่วย",
|
||||
"settings.extraFields.reorderChoice": "ลาก หรือใช้ปุ่มลูกศร เพื่อจัดเรียงตัวเลือกนี้",
|
||||
"settings.extraFields.saveField": "บันทึกฟิลด์",
|
||||
"settings.extraFields.tab": "ฟิลด์เพิ่มเติม",
|
||||
"settings.general.baseUrl.label": "URLพื้นฐาน",
|
||||
"settings.general.baseUrl.tooltip": "URLพื้นฐาน ที่ใช้สำหรับสร้างฟีเจอร์ต่างๆ เช่น QR code",
|
||||
"settings.general.baseUrl.label": "URL พื้นฐาน",
|
||||
"settings.general.baseUrl.tooltip": "URL พื้นฐานที่ใช้สำหรับสร้างฟีเจอร์ต่างๆ เช่น QR code",
|
||||
"settings.general.currency.desc": "รหัส ISO 3 ตัวอักษร (เช่น THB, EUR, USD) สำหรับแสดงราคา",
|
||||
"settings.general.currency.label": "สกุลเงิน",
|
||||
"settings.general.roundPrices.label": "ปัดเศษราคา",
|
||||
"settings.general.roundPrices.tooltip": "ปัดเศษราคาเป็นจำนวนเต็มที่ใกล้ที่สุด",
|
||||
"settings.general.tab": "ทั่วไป",
|
||||
"settings.header": "การตั้งค่า",
|
||||
"settings.language.desc": "ภาษาของอินเทอร์เฟซ (เฉพาะเบราว์เซอร์นี้)",
|
||||
"settings.language.label": "ภาษา",
|
||||
"settings.library.lowThreshold.desc": "ม้วนพลาสติกที่มีน้ำหนักเท่ากับหรือต่ำกว่านี้จะถูกไฮไลต์สีแดง (เฉพาะเบราว์เซอร์นี้)",
|
||||
"settings.library.lowThreshold.label": "เกณฑ์เตือนพลาสติกใกล้หมด",
|
||||
"settings.library.tab": "พฤติกรรมคลังข้อมูล",
|
||||
"spool.fields.archived": "เก็บถาวร",
|
||||
"spool.fields.comment": "หมายเหตุ",
|
||||
"spool.fields.filament": "เส้นพลาสติก",
|
||||
@@ -120,17 +515,30 @@
|
||||
"spool.fields.price": "ราคา",
|
||||
"spool.fields.registered": "ลงทะเบียน",
|
||||
"spool.fields.remainingWeight": "น้ำหนักคงเหลือ",
|
||||
"spool.fields.spoolWeight": "น้ำหนักม้วนพลาสติกเปล่า",
|
||||
"spool.fields.usedWeight": "น้ำหนักที่ใช้ไป",
|
||||
"spool.fieldsHelp.location": "ตำแหน่งที่เก็บม้วนพลาสติก หากคุณมีหลายที่เก็บ นี่คือที่ที่คุณจัดเก็บม้วนพลาสติก",
|
||||
"spool.fields.weight": "น้ำหนัก",
|
||||
"spool.fieldsHelp.location": "ตำแหน่งที่คุณจัดเก็บม้วนพลาสติกจริง — เช่น ชั้นวาง ลิ้นชัก กล่องกันชื้น หรือเครื่องพิมพ์ที่กำลังใส่อยู่ ม้วนพลาสติกจะถูกจัดกลุ่มตามสถานที่ในคลัง เพื่อให้คุณค้นหากลับมาได้ง่าย",
|
||||
"spool.fieldsHelp.lotNr": "เลขล็อตของผู้ผลิต ใช้เพื่อให้มั่นใจว่า การพิมพ์จะมีสีสม่ำเสมอ หากต้องใช้พลาสติกหลายม้วน",
|
||||
"spool.fieldsHelp.measuredWeight": "น้ำหนักรวมของเส้นพลาสติกและม้วนพลาสติก",
|
||||
"spool.fieldsHelp.price": "ราคาของม้วนพลาสติกเต็ม หากไม่ได้ตั้งค่า จะใช้ราคาของเส้นพลาสติกแทน",
|
||||
"spool.fieldsHelp.remainingWeight": "ปริมาณเส้นพลาสติกที่เหลืออยู่ในม้วนพลาสติก สำหรับม้วนพลาสติกใหม่ควรมีค่าเท่ากับน้ำหนักของม้วนพลาสติกเต็ม",
|
||||
"spool.fieldsHelp.remainingWeight": "ปริมาณเส้นพลาสติกที่เหลืออยู่ในม้วน สำหรับม้วนพลาสติกใหม่ควรมีค่าเท่ากับน้ำหนักของม้วนพลาสติกเต็ม",
|
||||
"spool.fieldsHelp.spoolWeight": "น้ำหนักของม้วนพลาสติกนี้เมื่อไม่มีเส้นพลาสติก (ม้วนเปล่า) เว้นว่างไว้เพื่อใช้น้ำหนักม้วนเปล่าตามเส้นพลาสติก และระบุเมื่อม้วนนี้มีความแตกต่าง — เช่น ม้วนที่กรอใหม่ หรือเปลี่ยนแกนกระดาษเป็นพลาสติก ค่าน้ำหนักนี้จะถูกนำไปลบเมื่อคุณปรับค่าน้ำหนักที่วัดได้ หากระบุผิดจะทำให้การคำนวณเส้นพลาสติกคงเหลือคลาดเคลื่อน",
|
||||
"spool.fieldsHelp.usedWeight": "ปริมาณเส้นพลาสติกที่ถูกใช้ไปจากม้วนพลาสติก ม้วนพลาสติกใหม่ควรเริ่มต้นที่ 0 กรัม",
|
||||
"spool.fieldsHelp.weight": "ปริมาณเส้นพลาสติกที่ม้วนนี้บรรจุได้เมื่อเต็ม (น้ำหนักสุทธิ ไม่รวมม้วนเปล่า) เว้นว่างไว้เพื่อใช้น้ำหนักตามเส้นพลาสติก และระบุเมื่อม้วนนี้แตกต่างจากปกติ — เช่น ม้วนแบ่ง หรือเส้นพลาสติกเดียวกันแต่ซื้อแบบม้วนขนาดใหญ่กว่า",
|
||||
"spool.form.measurementType.length": "ความยาว",
|
||||
"spool.form.measurementType.weight": "น้ำหนัก",
|
||||
"spool.spool": "ม้วนพลาสติก",
|
||||
"topbar.addSpools": "เพิ่มม้วนพลาสติก",
|
||||
"topbar.searchPlaceholder": "ค้นหา — เช่น \"red\" หรือ \"pla\"",
|
||||
"unknown": "ไม่ทราบ",
|
||||
"validation.hexDigits": "ต้องเป็นรหัสสี Hex 6 หรือ 8 หลัก",
|
||||
"validation.maxChars": "ความยาวต้องไม่เกิน {{max}} ตัวอักษร",
|
||||
"validation.mustBeGt": "ค่าต้องมากกว่า {{value}}",
|
||||
"validation.mustBeMax": "ค่าต้องไม่เกิน {{value}}",
|
||||
"validation.mustBeMin": "ค่าต้องไม่น้อยกว่า {{value}}",
|
||||
"validation.mustBeNumber": "ต้องเป็นตัวเลขเท่านั้น",
|
||||
"validation.required": "จำเป็นต้องระบุ",
|
||||
"vendor.fields.comment": "หมายเหตุ",
|
||||
"vendor.fields.emptySpoolWeight": "น้ำหนักม้วนพลาสติกเปล่า",
|
||||
"vendor.fields.externalId": "รหัสภายนอก",
|
||||
|
||||
@@ -1,17 +1,92 @@
|
||||
{
|
||||
"add.addAndNew": "Ekle & yeni",
|
||||
"add.addN_one": "{{count}} makara ekle",
|
||||
"add.addN_other": "{{count}} makara ekle",
|
||||
"add.adding": "Ekleniyor...",
|
||||
"add.advanced": "Gelişmiş özellikler",
|
||||
"add.advancedNote": "yoğunluk, çap, sıcaklıklar (malzemeden otomatik olarak dolduruldu)",
|
||||
"add.change": "değiştir",
|
||||
"add.count": "Adet",
|
||||
"add.createNew": "Yeni bir filament oluştur",
|
||||
"add.createNewSub": "kataloğunuzda veya {{name}} içerisinde değil",
|
||||
"add.dbUnavailable": "{{name}} kullanılamıyor",
|
||||
"add.duplicate": "kopyala",
|
||||
"add.duplicateNote": "Teknik özellikler, üretici ve fiyat bilgileri kopyalandı. Yeni bir isim ve renk verin.",
|
||||
"add.duplicateRename": "Hâlâ orijinaliyle aynı adı taşıyor - ayırt etmek için adını değiştirin.",
|
||||
"add.duplicateTitle": "Yeni filament · \"{{name}}\" kopyası",
|
||||
"add.filamentNamePlaceholder": "örn. PolyTerra Matte Sage",
|
||||
"add.fill.full": "Dolu",
|
||||
"add.fillLevel": "Dolum seviyesi",
|
||||
"add.importNote": "Bu filament, makaraları eklediğinizde kataloğunuza eklenecektir.",
|
||||
"add.inCatalog": "katalogda",
|
||||
"add.locationHint": "",
|
||||
"add.locationPlaceholder": "",
|
||||
"add.manufacturerPlaceholder": "örn. Polymaker",
|
||||
"add.nameHint": "Renkleri ekleyin — filamentlerinizi birbirinden ayıran şey renktir.",
|
||||
"add.newFilament": "",
|
||||
"add.newFilamentTitle": "",
|
||||
"add.noCatalog": "",
|
||||
"add.noManufacturer": "",
|
||||
"add.pickColor": "",
|
||||
"add.searchPlaceholder": "",
|
||||
"add.searching": "",
|
||||
"add.spoolWeightPreset.cardboard": "",
|
||||
"add.spoolWeightPreset.plastic": "",
|
||||
"add.spoolWeightPresetsLead": "",
|
||||
"add.step2": "",
|
||||
"add.typeToSearchAll": "",
|
||||
"add.typeToSearchMatches": "",
|
||||
"add.useExisting": "",
|
||||
"add.vendorHint.existing": "",
|
||||
"add.vendorHint.new": "",
|
||||
"add.vendorHint.optional": "",
|
||||
"add.yourCatalog": "",
|
||||
"buttons.archive": "Arşivle",
|
||||
"buttons.cancel": "İptal et",
|
||||
"buttons.clear": "Temizle",
|
||||
"buttons.close": "",
|
||||
"buttons.delete": "Sil",
|
||||
"buttons.edit": "Düzenle",
|
||||
"buttons.filter": "Filtrele",
|
||||
"buttons.save": "Kaydet",
|
||||
"buttons.showArchived": "Arşivlenenleri göster",
|
||||
"buttons.unArchive": "Arşivden çıkar",
|
||||
"common.decrement": "",
|
||||
"common.increment": "",
|
||||
"common.remove": "",
|
||||
"common.search": "",
|
||||
"dashboard.addFieldHint": "",
|
||||
"dashboard.dashboard": "",
|
||||
"dashboard.deleteGroup": "",
|
||||
"dashboard.dragHint": "",
|
||||
"dashboard.dropHere": "",
|
||||
"dashboard.emptyHelp": "",
|
||||
"dashboard.errorEmptyName": "",
|
||||
"dashboard.errorExists": "",
|
||||
"dashboard.errorRename": "",
|
||||
"dashboard.lastUsed": "",
|
||||
"dashboard.newGroup": "",
|
||||
"dashboard.newGroupName": "",
|
||||
"dashboard.reorderGroup": "",
|
||||
"dashboard.unassigned": "",
|
||||
"datetime.done": "",
|
||||
"datetime.hour": "",
|
||||
"datetime.minute": "",
|
||||
"datetime.nextMonth": "",
|
||||
"datetime.now": "",
|
||||
"datetime.pick": "",
|
||||
"datetime.prevMonth": "",
|
||||
"datetime.time": "",
|
||||
"documentTitle.dashboard.list": "",
|
||||
"documentTitle.labels.list": "",
|
||||
"documentTitle.library.list": "",
|
||||
"documentTitle.locations.list": "Konumlar | Spoolman",
|
||||
"documentTitle.settings.list": "",
|
||||
"filament.fields.addColor": "",
|
||||
"filament.fields.articleNumber": "Artikel Numarası",
|
||||
"filament.fields.coaxial": "Koekstrüde edilmiş",
|
||||
"filament.fields.colorHex": "Renk",
|
||||
"filament.fields.colorType": "",
|
||||
"filament.fields.comment": "Yorum",
|
||||
"filament.fields.density": "Yoğunluk",
|
||||
"filament.fields.diameter": "Çap",
|
||||
@@ -23,6 +98,7 @@
|
||||
"filament.fields.name": "Ad",
|
||||
"filament.fields.price": "Fiyat",
|
||||
"filament.fields.registered": "Kayıtlı",
|
||||
"filament.fields.removeColor": "",
|
||||
"filament.fields.settingsBedTemp": "Tabla Sıcaklığı",
|
||||
"filament.fields.settingsExtruderTemp": "Extruder Sıcaklığı",
|
||||
"filament.fields.singleColor": "Tek Renk",
|
||||
@@ -34,20 +110,210 @@
|
||||
"filament.fieldsHelp.spoolWeight": "Boş bir makaranın ağırlığıdır. Makaradaki ölçülen ağırlığın hesaplanmasında kullanılır.",
|
||||
"filament.fieldsHelp.weight": "Dolu bir makaradaki filamentin ağırlığıdır (net ağırlık). Bu değer yalnızca filamentin ağırlığını içermelidir, makaranın kendisinin ağırlığı dahil edilmemelidir. Genellikle ambalaj üzerinde yazan değerdir.",
|
||||
"filament.filament": "Filamentler",
|
||||
"footer.documentation": "",
|
||||
"footer.reportIssue": "",
|
||||
"help.help": "Yardım",
|
||||
"inspector.addSpoolsOfThis": "",
|
||||
"inspector.adjustFailed": "",
|
||||
"inspector.adjustHelp": "",
|
||||
"inspector.adjustWeight": "",
|
||||
"inspector.apply": "",
|
||||
"inspector.applying": "",
|
||||
"inspector.colorHex": "",
|
||||
"inspector.consumeAmount": "",
|
||||
"inspector.delete.deleting": "",
|
||||
"inspector.delete.errorGone": "",
|
||||
"inspector.delete.errorSpoolsExist": "",
|
||||
"inspector.delete.errorUnknown": "",
|
||||
"inspector.delete.filament": "",
|
||||
"inspector.delete.filamentBlockedHint": "",
|
||||
"inspector.delete.filamentBlockedTitle": "",
|
||||
"inspector.delete.filamentBody": "",
|
||||
"inspector.delete.filamentDone": "",
|
||||
"inspector.delete.filamentTitle": "",
|
||||
"inspector.delete.spool": "",
|
||||
"inspector.delete.spoolBody": "",
|
||||
"inspector.delete.spoolDone": "",
|
||||
"inspector.delete.spoolRemaining": "",
|
||||
"inspector.delete.spoolTitle": "",
|
||||
"inspector.delete.vendor": "",
|
||||
"inspector.delete.vendorBody": "",
|
||||
"inspector.delete.vendorDone": "",
|
||||
"inspector.delete.vendorTitle": "",
|
||||
"inspector.duplicateFilament": "",
|
||||
"inspector.empty": "",
|
||||
"inspector.enterValidLength": "",
|
||||
"inspector.enterValidWeight": "",
|
||||
"inspector.loading": "",
|
||||
"inspector.manageExtraFields": "",
|
||||
"inspector.measuredHelp": "",
|
||||
"inspector.multi": "",
|
||||
"inspector.newGross": "",
|
||||
"inspector.noExtraFields": "",
|
||||
"inspector.notFound": "",
|
||||
"inspector.ofRemaining": "",
|
||||
"inspector.openFilament": "",
|
||||
"inspector.openLink": "",
|
||||
"inspector.openManufacturer": "",
|
||||
"inspector.specs": "",
|
||||
"inspector.spoolsCount": "",
|
||||
"inspector.spoolsTotalRemaining": "",
|
||||
"inspector.used": "",
|
||||
"kofi": "Ko-fi'den bana birşeyler ateşle",
|
||||
"labels.addHead": "",
|
||||
"labels.addQr": "",
|
||||
"labels.addRect": "",
|
||||
"labels.addSwatch": "",
|
||||
"labels.addText": "",
|
||||
"labels.align": "",
|
||||
"labels.alignCenter": "",
|
||||
"labels.alignLeft": "",
|
||||
"labels.alignRight": "",
|
||||
"labels.blank": "",
|
||||
"labels.bold": "",
|
||||
"labels.canvasHint": "",
|
||||
"labels.centerLogo": "",
|
||||
"labels.chooseField": "",
|
||||
"labels.clearFill": "",
|
||||
"labels.copies": "",
|
||||
"labels.cornerRadiusMm": "",
|
||||
"labels.createFirst": "",
|
||||
"labels.cutGuides": "",
|
||||
"labels.deleteConfirm": "",
|
||||
"labels.deleteElement": "",
|
||||
"labels.designName": "",
|
||||
"labels.designerDesc": "",
|
||||
"labels.designerTitle": "",
|
||||
"labels.dpi": "",
|
||||
"labels.dpiHint": "",
|
||||
"labels.duplicate": "",
|
||||
"labels.fields.bedTemp": "",
|
||||
"labels.fields.diameterMm": "",
|
||||
"labels.fields.groupVendor": "",
|
||||
"labels.fields.initialG": "",
|
||||
"labels.fields.netWeightG": "",
|
||||
"labels.fields.remainingG": "",
|
||||
"labels.fill": "",
|
||||
"labels.fitWidth": "",
|
||||
"labels.fitWidthHint": "",
|
||||
"labels.fontMm": "",
|
||||
"labels.gridInfo": "",
|
||||
"labels.hMm": "",
|
||||
"labels.heightMm": "",
|
||||
"labels.hintNowrap": "",
|
||||
"labels.hintSwatch": "",
|
||||
"labels.hintWrap": "",
|
||||
"labels.imageDesc": "",
|
||||
"labels.imageZipNote": "",
|
||||
"labels.insertField": "",
|
||||
"labels.kind.qr": "",
|
||||
"labels.kind.rect": "",
|
||||
"labels.kind.swatch": "",
|
||||
"labels.kind.text": "",
|
||||
"labels.labelSize": "",
|
||||
"labels.labelType": "",
|
||||
"labels.layout": "",
|
||||
"labels.modeImage": "",
|
||||
"labels.modeLabel": "",
|
||||
"labels.modeSheet": "",
|
||||
"labels.new": "",
|
||||
"labels.newText": "",
|
||||
"labels.noDesignsOption": "",
|
||||
"labels.noFilaments": "",
|
||||
"labels.noSpools": "",
|
||||
"labels.onePerLabel": "",
|
||||
"labels.preparing": "",
|
||||
"labels.preview": "",
|
||||
"labels.previewWith": "",
|
||||
"labels.radiusMm": "",
|
||||
"labels.sampleData": "",
|
||||
"labels.saved": "",
|
||||
"labels.saving": "",
|
||||
"labels.searchFilaments": "",
|
||||
"labels.searchSpools": "",
|
||||
"labels.selectAllShort": "",
|
||||
"labels.selectAtLeastOne": "",
|
||||
"labels.selectAtLeastOneFilament": "",
|
||||
"labels.selectDesign": "",
|
||||
"labels.selectElement": "",
|
||||
"labels.selectNoneShort": "",
|
||||
"labels.selectRecentHint": "",
|
||||
"labels.selectRecentShort": "",
|
||||
"labels.showingFilament": "",
|
||||
"labels.showingReal": "",
|
||||
"labels.showingSpool": "",
|
||||
"labels.showingTags": "",
|
||||
"labels.sizeMm": "",
|
||||
"labels.skipHint": "",
|
||||
"labels.sortHint": "",
|
||||
"labels.sortId": "",
|
||||
"labels.sortNewest": "",
|
||||
"labels.stroke": "",
|
||||
"labels.strokeMm": "",
|
||||
"labels.tabDesign": "",
|
||||
"labels.tabPrint": "",
|
||||
"labels.textTemplate": "",
|
||||
"labels.typeFilament": "",
|
||||
"labels.typeHint": "",
|
||||
"labels.typeSpool": "",
|
||||
"labels.unknownFilament": "",
|
||||
"labels.wMm": "",
|
||||
"labels.widthMm": "",
|
||||
"labels.wrapText": "",
|
||||
"labels.xMm": "",
|
||||
"labels.yMm": "",
|
||||
"library.apiError": "",
|
||||
"library.collapseGroup": "",
|
||||
"library.emptyBody": "",
|
||||
"library.emptyFiltered": "",
|
||||
"library.emptyTitle": "",
|
||||
"library.expandGroup": "",
|
||||
"library.filterBy": "",
|
||||
"library.groupBy": "",
|
||||
"library.groupNone": "",
|
||||
"library.nUnused": "",
|
||||
"library.noLocation": "",
|
||||
"library.noValues": "",
|
||||
"library.openGroup": "",
|
||||
"library.openManufacturer": "",
|
||||
"library.section.extra": "",
|
||||
"library.section.filament": "",
|
||||
"library.section.spool": "",
|
||||
"library.section.vendor": "",
|
||||
"library.showMore": "",
|
||||
"library.sort.nozzle": "",
|
||||
"library.sortBy": "",
|
||||
"library.unassigned": "",
|
||||
"library.unitGroups": "",
|
||||
"library.unitSpools": "",
|
||||
"library.unused": "",
|
||||
"library.unusedGroup": "",
|
||||
"library.unusedGroupMixed": "",
|
||||
"library.unusedSub": "",
|
||||
"library.unusedSubMixed": "",
|
||||
"library.used": "",
|
||||
"library.usedAgo": "",
|
||||
"loading": "Yükleniyor",
|
||||
"locations.locations": "Konumlar",
|
||||
"locations.newLocation": "Yeni Konum",
|
||||
"locations.noLocation": "Konum Yok",
|
||||
"locations.noLocationsHelp": "Bu sayfa, makaralarınızı konumlara göre düzenlemenizi sağlar. Başlamak için birkaç makara ekleyin!",
|
||||
"nav.labels": "",
|
||||
"nav.library": "",
|
||||
"no": "Hayır",
|
||||
"notifications.error": "Hata (durum kodu: {{statusCode}})",
|
||||
"notifications.saveSuccessful": "Kayıt başarılı!",
|
||||
"pagination.empty": "",
|
||||
"pagination.next": "",
|
||||
"pagination.pageSize": "",
|
||||
"pagination.perPage": "",
|
||||
"pagination.prev": "",
|
||||
"pagination.range": "",
|
||||
"printing.generic.columns": "Sütunlar",
|
||||
"printing.generic.customSize": "Özel",
|
||||
"printing.generic.description": "İstenilen yazıcı düzenine sahip olmak için aşağıdaki ayarları düzenleyiniz. İşletim sisteminizin ve yazıcınızın kendi boşluk ve boyutlandırma ayarlarını uygulayabileceği nedeniyle doğru sonuca ulaşana kadar birkaç kez deneme yanılma gerçekleştirmeniz gerekebilir. Gerçek etikete basmadan önce normal kağıtta deneyiniz.",
|
||||
"printing.generic.dimensions": "Boyutlar",
|
||||
"printing.generic.gridTooWide": "",
|
||||
"printing.generic.helpMargin": "Boşluklar seçtiğiniz etikete ve yazıcınıza bağlı olarak ayarlanmalıdır, bunlarda yapacağınız herhangi bir değişiklik tüm dizgeyi değiştirecektir.",
|
||||
"printing.generic.helpPrinterMargin": "Güvenli-Bölge yazıcınızın sayfa kenarına ne kadar yakınlıkta yazabileceğine göre ayarlanmalıdır, bunu değiştirmek dizge üstünden değişikliğe neden olmayacaktır.",
|
||||
"printing.generic.horizontalSpacing": "Yatay Boşluk",
|
||||
@@ -65,7 +331,11 @@
|
||||
"printing.generic.skipItems": "Öğeleri Atla",
|
||||
"printing.generic.verticalSpacing": "Dikey Boşluk",
|
||||
"printing.qrcode.button": "Etiketleri Yazdır",
|
||||
"printing.qrcode.customUrl.caveat": "",
|
||||
"printing.qrcode.customUrl.hint": "",
|
||||
"printing.qrcode.customUrl.label": "",
|
||||
"printing.qrcode.useHTTPUrl.label": "QR kod bağlantısı",
|
||||
"printing.qrcode.useHTTPUrl.options.custom": "",
|
||||
"printing.qrcode.useHTTPUrl.options.default": "Varsayılan",
|
||||
"printing.qrcode.useHTTPUrl.options.url": "URL",
|
||||
"printing.qrcode.useHTTPUrl.preview": "Öngörünüm:",
|
||||
@@ -73,19 +343,46 @@
|
||||
"printing.spoolSelect.selectedTotal_one": "{{count}} makara seçildi",
|
||||
"printing.spoolSelect.selectedTotal_other": "{{count}} makara seçildi",
|
||||
"scanner.description": "Makara hakkında bilgi almak için Spoolman QR kodunu taratınız.",
|
||||
"scanner.error.inUse": "",
|
||||
"scanner.error.insecureContext": "Bu sayfa HTTPS üstünden güvenli olarak gösterilmemektedir.",
|
||||
"scanner.error.notAllowed": "Kameraya erişim yetkisi vermediniz.",
|
||||
"scanner.error.notFound": "Kamera bulunamadı.",
|
||||
"scanner.error.streamApiNotSupported": "Bu tarayıcı MediaStream API'sini desteklememektedir.",
|
||||
"scanner.error.unknown": "Bilinmeyen hata oluştu.({{error}})",
|
||||
"scanner.starting": "",
|
||||
"scanner.title": "QR Kod Tarayıcı",
|
||||
"search.colorHint": "",
|
||||
"search.noResults": "",
|
||||
"search.searching": "",
|
||||
"search.section.filaments": "",
|
||||
"search.section.spools": "",
|
||||
"search.section.vendors": "",
|
||||
"search.threshold": "",
|
||||
"search.unknownFilament": "",
|
||||
"settings.appearance.tab": "",
|
||||
"settings.appearance.theme.dark": "",
|
||||
"settings.appearance.theme.desc": "",
|
||||
"settings.appearance.theme.label": "",
|
||||
"settings.appearance.theme.light": "",
|
||||
"settings.appearance.theme.system": "",
|
||||
"settings.extraFields.addChoice": "",
|
||||
"settings.extraFields.addChoicesFirst": "",
|
||||
"settings.extraFields.addEntityField": "",
|
||||
"settings.extraFields.booleanFalse": "Hayır",
|
||||
"settings.extraFields.booleanTrue": "Evet",
|
||||
"settings.extraFields.deleteConfirm": "{{name}} alanı silinsin mi?",
|
||||
"settings.extraFields.description.intro": "Burada varlıklarınıza ekstra özel alanlar ekleyebilirsiniz.",
|
||||
"settings.extraFields.description.constraints": "Bir alan eklendikten sonra, anahtarını (key) veya türünü değiştiremezsiniz; seçim türündeki alanlarda ise seçenekleri kaldıramaz veya çoklu seçim durumunu değiştiremezsiniz. Bir alanı silerseniz, o alana bağlı tüm varlıkların verileri silinir.",
|
||||
"settings.extraFields.description.intro": "Burada varlıklarınıza ekstra özel alanlar ekleyebilirsiniz.",
|
||||
"settings.extraFields.description.keyUsage": "Anahtar, diğer programların veriyi okuduğu/yazdığı isimdir; bu nedenle, özel alanınız üçüncü taraf bir programla entegrasyon için kullanılacaksa doğru şekilde ayarlandığından emin olun. Varsayılan değer yalnızca yeni öğelere uygulanır.",
|
||||
"settings.extraFields.description.tableViews": "Ekstra alanlar tablo görünümünde sıralanamaz veya filtrelenemez.",
|
||||
"settings.extraFields.editorEdit": "",
|
||||
"settings.extraFields.editorNew": "",
|
||||
"settings.extraFields.errors.choiceNeeded": "",
|
||||
"settings.extraFields.errors.choicesRemoved": "",
|
||||
"settings.extraFields.errors.deleteFailed": "",
|
||||
"settings.extraFields.errors.keyFormat": "",
|
||||
"settings.extraFields.errors.nameRequired": "",
|
||||
"settings.extraFields.errors.saveFailed": "",
|
||||
"settings.extraFields.fieldType.boolean": "İkili Değer",
|
||||
"settings.extraFields.fieldType.choice": "Seçim Listesi",
|
||||
"settings.extraFields.fieldType.datetime": "Tarih+Saat",
|
||||
@@ -94,7 +391,13 @@
|
||||
"settings.extraFields.fieldType.integer": "Tam Sayı",
|
||||
"settings.extraFields.fieldType.integerRange": "Tam Sayı Aralık",
|
||||
"settings.extraFields.fieldType.text": "Metin",
|
||||
"settings.extraFields.max": "",
|
||||
"settings.extraFields.min": "",
|
||||
"settings.extraFields.multiSuffix": "",
|
||||
"settings.extraFields.multiple": "",
|
||||
"settings.extraFields.namePlaceholder": "",
|
||||
"settings.extraFields.nonUniqueKeyError": "Anahtar benzersiz olmalıdır.",
|
||||
"settings.extraFields.none": "",
|
||||
"settings.extraFields.params.choices": "Seçenekler",
|
||||
"settings.extraFields.params.defaultValue": "Varsayılan Değer",
|
||||
"settings.extraFields.params.fieldType": "Tür",
|
||||
@@ -102,14 +405,21 @@
|
||||
"settings.extraFields.params.name": "İsim",
|
||||
"settings.extraFields.params.order": "Sipariş",
|
||||
"settings.extraFields.params.unit": "Birim",
|
||||
"settings.extraFields.saveField": "",
|
||||
"settings.extraFields.tab": "Ekstra Alanlar",
|
||||
"settings.general.baseUrl.label": "Temel URL",
|
||||
"settings.general.baseUrl.tooltip": "QR kodları gibi ek özellikler kullanılırken kullanılacak temel URL.",
|
||||
"settings.general.currency.desc": "",
|
||||
"settings.general.currency.label": "Para Birimi",
|
||||
"settings.general.roundPrices.label": "Fiyatları Yuvarla",
|
||||
"settings.general.roundPrices.tooltip": "Fiyatları en yakın tam sayıya yuvarla.",
|
||||
"settings.general.tab": "Genel",
|
||||
"settings.header": "Ayarlar",
|
||||
"settings.language.desc": "",
|
||||
"settings.language.label": "",
|
||||
"settings.library.lowThreshold.desc": "",
|
||||
"settings.library.lowThreshold.label": "",
|
||||
"settings.library.tab": "",
|
||||
"spool.fields.archived": "Arşivlendi",
|
||||
"spool.fields.comment": "Yorum",
|
||||
"spool.fields.filament": "Filament",
|
||||
@@ -133,7 +443,16 @@
|
||||
"spool.form.measurementType.length": "Uzunluk",
|
||||
"spool.form.measurementType.weight": "Ağırlık",
|
||||
"spool.spool": "Makaralar",
|
||||
"topbar.addSpools": "",
|
||||
"topbar.searchPlaceholder": "",
|
||||
"unknown": "Bilinmeyen",
|
||||
"validation.hexDigits": "",
|
||||
"validation.maxChars": "",
|
||||
"validation.mustBeGt": "",
|
||||
"validation.mustBeMax": "",
|
||||
"validation.mustBeMin": "",
|
||||
"validation.mustBeNumber": "",
|
||||
"validation.required": "",
|
||||
"vendor.fields.comment": "Yorum",
|
||||
"vendor.fields.emptySpoolWeight": "Boş Makara Ağırlığı",
|
||||
"vendor.fields.externalId": "Harici ID",
|
||||
|
||||
@@ -1,26 +1,101 @@
|
||||
{
|
||||
"add.addAndNew": "",
|
||||
"add.adding": "",
|
||||
"add.advanced": "",
|
||||
"add.advancedNote": "",
|
||||
"add.change": "змінити",
|
||||
"add.count": "",
|
||||
"add.createNew": "",
|
||||
"add.createNewSub": "",
|
||||
"add.dbUnavailable": "{{name}} недоступний",
|
||||
"add.duplicate": "клонувати",
|
||||
"add.duplicateNote": "Специфікації, виробник і ціна були скопійовані. Надайте нове ім'я та колір.",
|
||||
"add.duplicateRename": "Досі названо як оригінал — перейменуйте, щоб відрізняти їх.",
|
||||
"add.duplicateTitle": "Новий філамент · копія “{{name}}”",
|
||||
"add.filamentNamePlaceholder": "наприклад, PolyTerra Matte Sage",
|
||||
"add.fill.full": "",
|
||||
"add.fillLevel": "",
|
||||
"add.importNote": "",
|
||||
"add.inCatalog": "",
|
||||
"add.locationHint": "",
|
||||
"add.locationPlaceholder": "",
|
||||
"add.manufacturerPlaceholder": "наприклад, Polymaker",
|
||||
"add.nameHint": "Вкажіть колір — саме за ним відрізняються ваші філаменти.",
|
||||
"add.newFilament": "",
|
||||
"add.newFilamentTitle": "",
|
||||
"add.noCatalog": "",
|
||||
"add.noManufacturer": "",
|
||||
"add.pickColor": "",
|
||||
"add.searchPlaceholder": "",
|
||||
"add.searching": "",
|
||||
"add.spoolWeightPreset.cardboard": "",
|
||||
"add.spoolWeightPreset.plastic": "",
|
||||
"add.spoolWeightPresetsLead": "",
|
||||
"add.step2": "",
|
||||
"add.typeToSearchAll": "",
|
||||
"add.typeToSearchMatches": "",
|
||||
"add.useExisting": "",
|
||||
"add.vendorHint.existing": "",
|
||||
"add.vendorHint.new": "",
|
||||
"add.vendorHint.optional": "",
|
||||
"add.yourCatalog": "",
|
||||
"buttons.archive": "Архівувати",
|
||||
"buttons.cancel": "Скасувати",
|
||||
"buttons.clear": "Очистити",
|
||||
"buttons.close": "",
|
||||
"buttons.delete": "Видалити",
|
||||
"buttons.edit": "Редагувати",
|
||||
"buttons.filter": "Фільтр",
|
||||
"buttons.save": "Зберегти",
|
||||
"buttons.showArchived": "Показати Архівовані",
|
||||
"buttons.unArchive": "Розархівувати",
|
||||
"common.decrement": "",
|
||||
"common.increment": "",
|
||||
"common.remove": "",
|
||||
"common.search": "",
|
||||
"dashboard.addFieldHint": "",
|
||||
"dashboard.dashboard": "",
|
||||
"dashboard.deleteGroup": "",
|
||||
"dashboard.dragHint": "",
|
||||
"dashboard.dropHere": "",
|
||||
"dashboard.emptyHelp": "",
|
||||
"dashboard.errorEmptyName": "",
|
||||
"dashboard.errorExists": "",
|
||||
"dashboard.errorRename": "",
|
||||
"dashboard.lastUsed": "",
|
||||
"dashboard.newGroup": "",
|
||||
"dashboard.newGroupName": "",
|
||||
"dashboard.reorderGroup": "",
|
||||
"dashboard.unassigned": "",
|
||||
"datetime.done": "",
|
||||
"datetime.hour": "",
|
||||
"datetime.minute": "",
|
||||
"datetime.nextMonth": "",
|
||||
"datetime.now": "",
|
||||
"datetime.pick": "",
|
||||
"datetime.prevMonth": "",
|
||||
"datetime.time": "",
|
||||
"documentTitle.dashboard.list": "",
|
||||
"documentTitle.labels.list": "",
|
||||
"documentTitle.library.list": "",
|
||||
"documentTitle.settings.list": "",
|
||||
"filament.fields.addColor": "",
|
||||
"filament.fields.articleNumber": "Артикул",
|
||||
"filament.fields.coaxial": "Коекструдтваний",
|
||||
"filament.fields.colorHex": "Колір",
|
||||
"filament.fields.colorType": "",
|
||||
"filament.fields.comment": "Коментар",
|
||||
"filament.fields.density": "Щільність",
|
||||
"filament.fields.diameter": "Діаметр",
|
||||
"filament.fields.externalId": "Зовнішній ID",
|
||||
"filament.fields.id": "ІД",
|
||||
"filament.fields.longitudinal": "",
|
||||
"filament.fields.material": "Матеріал",
|
||||
"filament.fields.multiColor": "Багатокольоровий",
|
||||
"filament.fields.name": "Назва",
|
||||
"filament.fields.price": "Ціна",
|
||||
"filament.fields.registered": "Додано",
|
||||
"filament.fields.removeColor": "",
|
||||
"filament.fields.settingsBedTemp": "Температура Столу",
|
||||
"filament.fields.settingsExtruderTemp": "Температура Екструдера",
|
||||
"filament.fields.singleColor": "Одноколірний",
|
||||
@@ -28,19 +103,210 @@
|
||||
"filament.fields.vendor": "Виробник",
|
||||
"filament.fields.weight": "Вага",
|
||||
"filament.fieldsHelp.articleNumber": "Напр. EAN, UPC тощо.",
|
||||
"filament.fieldsHelp.multiColorDirection": "",
|
||||
"filament.fieldsHelp.spoolWeight": "Вага порожньої котушки. Використовується для визначення виміряної ваги котушки.",
|
||||
"filament.fieldsHelp.weight": "Вага повної котушки філаменту (нетто). Ця вага не повинна включати вагу самої котушки, а тільки філаменту. Зазвичай це вказується на упаковці.",
|
||||
"filament.filament": "Філаменти",
|
||||
"footer.documentation": "",
|
||||
"footer.reportIssue": "",
|
||||
"help.help": "Довідка",
|
||||
"inspector.addSpoolsOfThis": "",
|
||||
"inspector.adjustFailed": "",
|
||||
"inspector.adjustHelp": "",
|
||||
"inspector.adjustWeight": "",
|
||||
"inspector.apply": "",
|
||||
"inspector.applying": "",
|
||||
"inspector.colorHex": "",
|
||||
"inspector.consumeAmount": "",
|
||||
"inspector.delete.deleting": "",
|
||||
"inspector.delete.errorGone": "",
|
||||
"inspector.delete.errorSpoolsExist": "",
|
||||
"inspector.delete.errorUnknown": "",
|
||||
"inspector.delete.filament": "",
|
||||
"inspector.delete.filamentBlockedHint": "",
|
||||
"inspector.delete.filamentBlockedTitle": "",
|
||||
"inspector.delete.filamentBody": "",
|
||||
"inspector.delete.filamentDone": "",
|
||||
"inspector.delete.filamentTitle": "",
|
||||
"inspector.delete.spool": "",
|
||||
"inspector.delete.spoolBody": "",
|
||||
"inspector.delete.spoolDone": "",
|
||||
"inspector.delete.spoolRemaining": "",
|
||||
"inspector.delete.spoolTitle": "",
|
||||
"inspector.delete.vendor": "",
|
||||
"inspector.delete.vendorBody": "",
|
||||
"inspector.delete.vendorDone": "",
|
||||
"inspector.delete.vendorTitle": "",
|
||||
"inspector.duplicateFilament": "",
|
||||
"inspector.empty": "",
|
||||
"inspector.enterValidLength": "",
|
||||
"inspector.enterValidWeight": "",
|
||||
"inspector.loading": "",
|
||||
"inspector.manageExtraFields": "",
|
||||
"inspector.measuredHelp": "",
|
||||
"inspector.multi": "",
|
||||
"inspector.newGross": "",
|
||||
"inspector.noExtraFields": "",
|
||||
"inspector.notFound": "",
|
||||
"inspector.ofRemaining": "",
|
||||
"inspector.openFilament": "",
|
||||
"inspector.openLink": "",
|
||||
"inspector.openManufacturer": "",
|
||||
"inspector.specs": "",
|
||||
"inspector.spoolsCount": "",
|
||||
"inspector.spoolsTotalRemaining": "",
|
||||
"inspector.used": "",
|
||||
"kofi": "Задонатити на Ko-fi",
|
||||
"labels.addHead": "",
|
||||
"labels.addQr": "",
|
||||
"labels.addRect": "",
|
||||
"labels.addSwatch": "",
|
||||
"labels.addText": "",
|
||||
"labels.align": "",
|
||||
"labels.alignCenter": "",
|
||||
"labels.alignLeft": "",
|
||||
"labels.alignRight": "",
|
||||
"labels.blank": "",
|
||||
"labels.bold": "",
|
||||
"labels.canvasHint": "",
|
||||
"labels.centerLogo": "",
|
||||
"labels.chooseField": "",
|
||||
"labels.clearFill": "",
|
||||
"labels.copies": "",
|
||||
"labels.cornerRadiusMm": "",
|
||||
"labels.createFirst": "",
|
||||
"labels.cutGuides": "",
|
||||
"labels.deleteConfirm": "",
|
||||
"labels.deleteElement": "",
|
||||
"labels.designName": "",
|
||||
"labels.designerDesc": "",
|
||||
"labels.designerTitle": "",
|
||||
"labels.dpi": "",
|
||||
"labels.dpiHint": "",
|
||||
"labels.duplicate": "",
|
||||
"labels.fields.bedTemp": "",
|
||||
"labels.fields.diameterMm": "",
|
||||
"labels.fields.groupVendor": "",
|
||||
"labels.fields.initialG": "",
|
||||
"labels.fields.netWeightG": "",
|
||||
"labels.fields.remainingG": "",
|
||||
"labels.fill": "",
|
||||
"labels.fitWidth": "",
|
||||
"labels.fitWidthHint": "",
|
||||
"labels.fontMm": "",
|
||||
"labels.gridInfo": "",
|
||||
"labels.hMm": "",
|
||||
"labels.heightMm": "",
|
||||
"labels.hintNowrap": "",
|
||||
"labels.hintSwatch": "",
|
||||
"labels.hintWrap": "",
|
||||
"labels.imageDesc": "",
|
||||
"labels.imageZipNote": "",
|
||||
"labels.insertField": "",
|
||||
"labels.kind.qr": "",
|
||||
"labels.kind.rect": "",
|
||||
"labels.kind.swatch": "",
|
||||
"labels.kind.text": "",
|
||||
"labels.labelSize": "",
|
||||
"labels.labelType": "",
|
||||
"labels.layout": "",
|
||||
"labels.modeImage": "",
|
||||
"labels.modeLabel": "",
|
||||
"labels.modeSheet": "",
|
||||
"labels.new": "",
|
||||
"labels.newText": "",
|
||||
"labels.noDesignsOption": "",
|
||||
"labels.noFilaments": "",
|
||||
"labels.noSpools": "",
|
||||
"labels.onePerLabel": "",
|
||||
"labels.preparing": "",
|
||||
"labels.preview": "",
|
||||
"labels.previewWith": "",
|
||||
"labels.radiusMm": "",
|
||||
"labels.sampleData": "",
|
||||
"labels.saved": "",
|
||||
"labels.saving": "",
|
||||
"labels.searchFilaments": "",
|
||||
"labels.searchSpools": "",
|
||||
"labels.selectAllShort": "",
|
||||
"labels.selectAtLeastOne": "",
|
||||
"labels.selectAtLeastOneFilament": "",
|
||||
"labels.selectDesign": "",
|
||||
"labels.selectElement": "",
|
||||
"labels.selectNoneShort": "",
|
||||
"labels.selectRecentHint": "",
|
||||
"labels.selectRecentShort": "",
|
||||
"labels.showingFilament": "",
|
||||
"labels.showingReal": "",
|
||||
"labels.showingSpool": "",
|
||||
"labels.showingTags": "",
|
||||
"labels.sizeMm": "",
|
||||
"labels.skipHint": "",
|
||||
"labels.sortHint": "",
|
||||
"labels.sortId": "",
|
||||
"labels.sortNewest": "",
|
||||
"labels.stroke": "",
|
||||
"labels.strokeMm": "",
|
||||
"labels.tabDesign": "",
|
||||
"labels.tabPrint": "",
|
||||
"labels.textTemplate": "",
|
||||
"labels.typeFilament": "",
|
||||
"labels.typeHint": "",
|
||||
"labels.typeSpool": "",
|
||||
"labels.unknownFilament": "",
|
||||
"labels.wMm": "",
|
||||
"labels.widthMm": "",
|
||||
"labels.wrapText": "",
|
||||
"labels.xMm": "",
|
||||
"labels.yMm": "",
|
||||
"library.apiError": "",
|
||||
"library.collapseGroup": "",
|
||||
"library.emptyBody": "",
|
||||
"library.emptyFiltered": "",
|
||||
"library.emptyTitle": "",
|
||||
"library.expandGroup": "",
|
||||
"library.filterBy": "",
|
||||
"library.groupBy": "",
|
||||
"library.groupNone": "",
|
||||
"library.nUnused": "",
|
||||
"library.noLocation": "",
|
||||
"library.noValues": "",
|
||||
"library.openGroup": "",
|
||||
"library.openManufacturer": "",
|
||||
"library.section.extra": "",
|
||||
"library.section.filament": "",
|
||||
"library.section.spool": "",
|
||||
"library.section.vendor": "",
|
||||
"library.showMore": "",
|
||||
"library.sort.nozzle": "",
|
||||
"library.sortBy": "",
|
||||
"library.unassigned": "",
|
||||
"library.unitGroups": "",
|
||||
"library.unitSpools": "",
|
||||
"library.unused": "",
|
||||
"library.unusedGroup": "",
|
||||
"library.unusedGroupMixed": "",
|
||||
"library.unusedSub": "",
|
||||
"library.unusedSubMixed": "",
|
||||
"library.used": "",
|
||||
"library.usedAgo": "",
|
||||
"loading": "Завантаження",
|
||||
"nav.labels": "",
|
||||
"nav.library": "",
|
||||
"no": "Ні",
|
||||
"notifications.error": "Помилка (код: {{statusCode}})",
|
||||
"notifications.saveSuccessful": "Успішно збережено!",
|
||||
"pagination.empty": "",
|
||||
"pagination.next": "",
|
||||
"pagination.pageSize": "",
|
||||
"pagination.perPage": "",
|
||||
"pagination.prev": "",
|
||||
"pagination.range": "",
|
||||
"printing.generic.columns": "Колонки",
|
||||
"printing.generic.customSize": "Нестандартний",
|
||||
"printing.generic.description": "Використовуйте наведені нижче параметри, щоб отримати бажаний макет друку. Майте на увазі, що принтери та ваша операційна система можуть використовувати власні настроювані поля та масштабування, тому вам може знадобитися декілька спроб щоб отримати правильний результат. Спробуйте це на аркуші звичайного паперу, перш ніж друкувати на справжніх етикетках.",
|
||||
"printing.generic.dimensions": "Розміри",
|
||||
"printing.generic.gridTooWide": "",
|
||||
"printing.generic.helpMargin": "Поля повинні бути встановлені відповідно до етикеткового паперу та принтера, їхня зміна вплине на розмір усієї сітки.",
|
||||
"printing.generic.helpPrinterMargin": "Безпечну зону слід встановити якомога ближче до краю паперу, наскільки принтер може друкувати, зміна не вплине на всю сітку.",
|
||||
"printing.generic.horizontalSpacing": "Горизонтальний відступ",
|
||||
@@ -58,27 +324,59 @@
|
||||
"printing.generic.skipItems": "Пропустити елементи",
|
||||
"printing.generic.verticalSpacing": "Вертикальний відступ",
|
||||
"printing.qrcode.button": "Друкувати етикетки",
|
||||
"printing.qrcode.customUrl.caveat": "",
|
||||
"printing.qrcode.customUrl.hint": "",
|
||||
"printing.qrcode.customUrl.label": "",
|
||||
"printing.qrcode.useHTTPUrl.label": "Посилання на QR-код",
|
||||
"printing.qrcode.useHTTPUrl.options.custom": "",
|
||||
"printing.qrcode.useHTTPUrl.options.default": "За замовчуванням",
|
||||
"printing.qrcode.useHTTPUrl.options.url": "URL",
|
||||
"printing.qrcode.useHTTPUrl.preview": "Попередній перегляд:",
|
||||
"printing.qrcode.useHTTPUrl.tooltip": "",
|
||||
"printing.spoolSelect.selectedTotal_few": "{{count}} обрані котушки",
|
||||
"printing.spoolSelect.selectedTotal_many": "{{count}} обраних котушок",
|
||||
"printing.spoolSelect.selectedTotal_one": "{{count}} обрана котушка",
|
||||
"scanner.description": "Відскануй QR-код Spoolman щоб переглянути подробиці про котушку.",
|
||||
"scanner.error.inUse": "",
|
||||
"scanner.error.insecureContext": "Сторінка не відображається через HTTPS.",
|
||||
"scanner.error.notAllowed": "У вас недостатньо прав для доступу до камери.",
|
||||
"scanner.error.notFound": "Не знайдено жодної камери.",
|
||||
"scanner.error.streamApiNotSupported": "Браузер не підтримує MediaStream API.",
|
||||
"scanner.error.unknown": "Сталась невідома помилка. ({{error}})",
|
||||
"scanner.starting": "",
|
||||
"scanner.title": "Сканер QR-кодів",
|
||||
"search.colorHint": "",
|
||||
"search.noResults": "",
|
||||
"search.searching": "",
|
||||
"search.section.filaments": "",
|
||||
"search.section.spools": "",
|
||||
"search.section.vendors": "",
|
||||
"search.threshold": "",
|
||||
"search.unknownFilament": "",
|
||||
"settings.appearance.tab": "",
|
||||
"settings.appearance.theme.dark": "",
|
||||
"settings.appearance.theme.desc": "",
|
||||
"settings.appearance.theme.label": "",
|
||||
"settings.appearance.theme.light": "",
|
||||
"settings.appearance.theme.system": "",
|
||||
"settings.extraFields.addChoice": "",
|
||||
"settings.extraFields.addChoicesFirst": "",
|
||||
"settings.extraFields.addEntityField": "",
|
||||
"settings.extraFields.booleanFalse": "Ні",
|
||||
"settings.extraFields.booleanTrue": "Так",
|
||||
"settings.extraFields.deleteConfirm": "Видалити поле {{name}}?",
|
||||
"settings.extraFields.description.intro": "Тут ви можете додати додаткові користувацькі поля до своїх об’єктів.",
|
||||
"settings.extraFields.description.constraints": "Після додавання поля ви не можете змінити його ключ або тип, а для полів типу вибору ви не можете видалити варіанти або змінити стан кількох варіантів. Якщо ви вилучите поле, пов’язані дані для всіх об’єктів буде видалено.",
|
||||
"settings.extraFields.description.intro": "Тут ви можете додати додаткові користувацькі поля до своїх об’єктів.",
|
||||
"settings.extraFields.description.keyUsage": "Ключ – це те, як інші програми читають/записують дані, тож якщо ваше спеціальне поле має інтегруватися зі сторонніми програми, переконайтеся, що ви правильно її налаштували. Значення за замовчуванням застосовується лише до нових елементів.",
|
||||
"settings.extraFields.description.tableViews": "Додаткові поля не можна сортувати чи фільтрувати в режимі перегляду таблиці.",
|
||||
"settings.extraFields.editorEdit": "",
|
||||
"settings.extraFields.editorNew": "",
|
||||
"settings.extraFields.errors.choiceNeeded": "",
|
||||
"settings.extraFields.errors.choicesRemoved": "",
|
||||
"settings.extraFields.errors.deleteFailed": "",
|
||||
"settings.extraFields.errors.keyFormat": "",
|
||||
"settings.extraFields.errors.nameRequired": "",
|
||||
"settings.extraFields.errors.saveFailed": "",
|
||||
"settings.extraFields.fieldType.boolean": "Логічний тип даних",
|
||||
"settings.extraFields.fieldType.choice": "Можливісь вибору",
|
||||
"settings.extraFields.fieldType.datetime": "Дата та час",
|
||||
@@ -87,7 +385,13 @@
|
||||
"settings.extraFields.fieldType.integer": "Ціле число",
|
||||
"settings.extraFields.fieldType.integerRange": "Цілочисловий діапазон",
|
||||
"settings.extraFields.fieldType.text": "Текст",
|
||||
"settings.extraFields.max": "",
|
||||
"settings.extraFields.min": "",
|
||||
"settings.extraFields.multiSuffix": "",
|
||||
"settings.extraFields.multiple": "",
|
||||
"settings.extraFields.namePlaceholder": "",
|
||||
"settings.extraFields.nonUniqueKeyError": "Ключ має бути унікальним.",
|
||||
"settings.extraFields.none": "",
|
||||
"settings.extraFields.params.choices": "Вибір",
|
||||
"settings.extraFields.params.defaultValue": "Стандартне значення",
|
||||
"settings.extraFields.params.fieldType": "Тип",
|
||||
@@ -95,11 +399,21 @@
|
||||
"settings.extraFields.params.name": "Ім'я",
|
||||
"settings.extraFields.params.order": "Замовлення",
|
||||
"settings.extraFields.params.unit": "Одиниця",
|
||||
"settings.extraFields.saveField": "",
|
||||
"settings.extraFields.tab": "Додаткові поля",
|
||||
"settings.general.baseUrl.label": "Базова URL-адреса",
|
||||
"settings.general.baseUrl.tooltip": "",
|
||||
"settings.general.currency.desc": "",
|
||||
"settings.general.currency.label": "Валюта",
|
||||
"settings.general.roundPrices.label": "",
|
||||
"settings.general.roundPrices.tooltip": "",
|
||||
"settings.general.tab": "Загальне",
|
||||
"settings.header": "Налаштування",
|
||||
"settings.language.desc": "",
|
||||
"settings.language.label": "",
|
||||
"settings.library.lowThreshold.desc": "",
|
||||
"settings.library.lowThreshold.label": "",
|
||||
"settings.library.tab": "",
|
||||
"spool.fields.archived": "Архівовано",
|
||||
"spool.fields.comment": "Коментар",
|
||||
"spool.fields.filament": "Філамент",
|
||||
@@ -123,12 +437,22 @@
|
||||
"spool.form.measurementType.length": "Довжина",
|
||||
"spool.form.measurementType.weight": "Вага",
|
||||
"spool.spool": "Котушки",
|
||||
"topbar.addSpools": "",
|
||||
"topbar.searchPlaceholder": "",
|
||||
"unknown": "Невідомий",
|
||||
"validation.hexDigits": "",
|
||||
"validation.maxChars": "",
|
||||
"validation.mustBeGt": "",
|
||||
"validation.mustBeMax": "",
|
||||
"validation.mustBeMin": "",
|
||||
"validation.mustBeNumber": "",
|
||||
"validation.required": "",
|
||||
"vendor.fields.comment": "Коментар",
|
||||
"vendor.fields.emptySpoolWeight": "Вага пустої котушки",
|
||||
"vendor.fields.externalId": "Зовнішній ID",
|
||||
"vendor.fields.id": "ІД",
|
||||
"vendor.fields.name": "Назва",
|
||||
"vendor.fields.registered": "Додано",
|
||||
"vendor.fieldsHelp.emptySpoolWeight": "",
|
||||
"yes": "Так"
|
||||
}
|
||||
@@ -1,57 +1,408 @@
|
||||
{
|
||||
"add.addAndNew": "新增後再新增",
|
||||
"add.addN_other": "新增 {{count}} 個線軸",
|
||||
"add.adding": "正在新增...",
|
||||
"add.advanced": "高階參數",
|
||||
"add.advancedNote": "密度、直徑、溫度(依材料自動帶入)",
|
||||
"add.change": "更改",
|
||||
"add.count": "數量",
|
||||
"add.createNew": "建立新線材",
|
||||
"add.createNewSub": "不在您的目錄或 {{name}} 中",
|
||||
"add.dbUnavailable": "{{name}} 不可用",
|
||||
"add.duplicate": "建立副本",
|
||||
"add.duplicateNote": "規格、製造商和價格已複製。請為其指定新的名稱和顏色。",
|
||||
"add.duplicateRename": "名稱仍與原線材相同 — 請重新命名以便區分。",
|
||||
"add.duplicateTitle": "新線材 · {{name}} 的副本",
|
||||
"add.filamentNamePlaceholder": "例如:PolyTerra Matte Sage",
|
||||
"add.fill.full": "全滿",
|
||||
"add.fillLevel": "裝填程度",
|
||||
"add.importNote": "當您新增線軸時,此線材將被自動新增到您的目錄中。",
|
||||
"add.inCatalog": "已在目錄中",
|
||||
"add.locationHint": "線軸的實際存放位置 — 例如架子、乾燥箱或印表機。如果您將所有線材放在同一位置,可留空。",
|
||||
"add.locationPlaceholder": "例如:架子 A、乾燥箱 2、印表機 1",
|
||||
"add.manufacturerPlaceholder": "例如:Polymaker",
|
||||
"add.nameHint": "建議包含顏色資訊 — 這是區分不同線材的關鍵。",
|
||||
"add.newFilament": "新線材",
|
||||
"add.newFilamentTitle": "新增線材",
|
||||
"add.noCatalog": "目錄中沒有線材",
|
||||
"add.noManufacturer": "無製造商",
|
||||
"add.pickColor": "選擇顏色",
|
||||
"add.searchPlaceholder": "搜尋您的目錄和 {{name}}...",
|
||||
"add.searching": "正在搜尋...",
|
||||
"add.section.filament": "線材",
|
||||
"add.section.filamentNote": "線軸上的產品,每種顏色各建立一筆。",
|
||||
"add.section.manufacturer": "製造商",
|
||||
"add.section.manufacturerNote": "線材生產商。只需新增一次,即可重複用於其旗下的所有線材。",
|
||||
"add.section.spool": "線軸",
|
||||
"add.section.spoolNote": "要加入庫存的實體線軸。",
|
||||
"add.section.spoolSharedNote": "線材重量、線軸重量和價格也會儲存為新線材的預設值。",
|
||||
"add.spoolWeightPreset.cardboard": "紙軸 {{weight}} 克",
|
||||
"add.spoolWeightPreset.plastic": "塑膠軸 {{weight}} 克",
|
||||
"add.spoolWeightPresetsLead": "從常見線軸開始:",
|
||||
"add.step2": "步驟 2 · 線軸詳細資料",
|
||||
"add.step2New": "步驟 2 · 線材與線軸詳細資料",
|
||||
"add.summary_other": "{{count}} 個線軸",
|
||||
"add.typeToSearchAll": "輸入文字,搜尋數千種線材",
|
||||
"add.typeToSearchMatches": "輸入文字以搜尋(目前沒有相符結果)",
|
||||
"add.useExisting": "使用現有線材",
|
||||
"add.vendorHint.existing": "使用現有製造商「{{name}}」",
|
||||
"add.vendorHint.new": "將建立新製造商「{{name}}」",
|
||||
"add.vendorHint.optional": "選填 — 留空表示不指定製造商",
|
||||
"add.weightPresets": "常見線材重量",
|
||||
"add.yourCatalog": "您的線材目錄",
|
||||
"buttons.apply": "套用",
|
||||
"buttons.archive": "封存",
|
||||
"buttons.cancel": "取消",
|
||||
"buttons.clear": "清除",
|
||||
"buttons.close": "關閉",
|
||||
"buttons.delete": "刪除",
|
||||
"buttons.edit": "編輯",
|
||||
"buttons.filter": "過濾器",
|
||||
"buttons.filter": "篩選",
|
||||
"buttons.save": "儲存",
|
||||
"buttons.showArchived": "檢視已封存",
|
||||
"buttons.showNoSpools": "顯示沒有線軸的線材規格",
|
||||
"buttons.unArchive": "取消封存",
|
||||
"changeFilament.action": "更改",
|
||||
"changeFilament.adoptWeight": "將此線軸的滿載重量設為 {{full}}",
|
||||
"changeFilament.adoptWeightHelp": "先前記錄的滿載重量為 {{current}}(來自更改前的線材)。無論如何都會保留已使用重量({{used}}),剩餘重量為 {{remaining}}。",
|
||||
"changeFilament.apply": "更改線材",
|
||||
"changeFilament.applying": "正在更改...",
|
||||
"changeFilament.current": "目前",
|
||||
"changeFilament.done": "線材已更改。",
|
||||
"changeFilament.failed": "無法更改線材。",
|
||||
"changeFilament.importNote": "當您套用此更改時,此線材將被新增到您的目錄中。",
|
||||
"changeFilament.intro": "線軸 #{{id}} 會保留編號、位置、日期和使用記錄,只有所裝的線材會變更。",
|
||||
"changeFilament.newTag": "新",
|
||||
"changeFilament.next": "更改為",
|
||||
"changeFilament.now": "目前為",
|
||||
"changeFilament.pickBelow": "請在下方選擇線材",
|
||||
"changeFilament.title": "更改線材類型",
|
||||
"changeFilament.useExisting": "選擇現有線材",
|
||||
"changeFilament.weightFollows": "此線軸沒有自訂滿載重量,因此將使用新線材的設定:{{full}}。在扣除已使用的 {{used}} 後,剩餘 {{remaining}}。",
|
||||
"changeVendor.action": "更改",
|
||||
"changeVendor.apply": "更改製造商",
|
||||
"changeVendor.applying": "正在更改...",
|
||||
"changeVendor.clearHint": "保持此線材無製造商狀態",
|
||||
"changeVendor.create": "建立「{{name}}」",
|
||||
"changeVendor.createHint": "尚不在您的製造商清單中 — 將自動新增",
|
||||
"changeVendor.current": "目前",
|
||||
"changeVendor.done": "製造商已更改。",
|
||||
"changeVendor.emptySpool": "空線軸重量 {{value}}",
|
||||
"changeVendor.failed": "無法更改製造商。",
|
||||
"changeVendor.intro": "「{{name}}」的線軸、規格和歷史記錄都會保留,只有所屬製造商會變更。",
|
||||
"changeVendor.next": "更改為",
|
||||
"changeVendor.noEmptySpool": "未設定空線軸重量",
|
||||
"changeVendor.noMatches": "無相符的製造商",
|
||||
"changeVendor.none": "尚無製造商",
|
||||
"changeVendor.noneNote": "未歸類到任何品牌",
|
||||
"changeVendor.now": "目前為",
|
||||
"changeVendor.pickBelow": "請在下方選擇製造商",
|
||||
"changeVendor.searchPlaceholder": "搜尋或輸入製造商名稱",
|
||||
"changeVendor.tareFollows": "此線材沒有自訂空線軸重量,因此將繼承其製造商的空線軸重量。更改後空線軸重量為 {{value}},即空線軸實測的重量。",
|
||||
"changeVendor.tareGone": "此線材原本繼承了製造商的空線軸重量({{current}})。更改後將不再有可繼承的空線軸重量,直到您為此線材單獨指定一個。",
|
||||
"changeVendor.title": "更改製造商",
|
||||
"changeVendor.willBeCreated": "將被建立",
|
||||
"common.decrement": "減少",
|
||||
"common.increment": "增加",
|
||||
"common.remove": "移除",
|
||||
"common.search": "搜尋",
|
||||
"dashboard.addFieldHint": "在「設定」中為線軸新增文字或選項欄位,即可依該欄位分組",
|
||||
"dashboard.dashboard": "儀表板",
|
||||
"dashboard.deleteGroup": "刪除群組",
|
||||
"dashboard.dragHint": "將線軸拖到其他卡片以變更其 {{field}},或在卡片內拖曳以重新排序",
|
||||
"dashboard.dropHere": "將線軸拖放到此處",
|
||||
"dashboard.emptyHelp": "本頁會依您選擇的欄位將線軸分組。請先新增一些線軸!",
|
||||
"dashboard.errorEmptyName": "名稱不能為空",
|
||||
"dashboard.errorExists": "已存在同名群組",
|
||||
"dashboard.errorRename": "重新命名群組失敗",
|
||||
"dashboard.lastUsed": "{{time}} 前使用",
|
||||
"dashboard.newGroup": "新增群組",
|
||||
"dashboard.newGroupName": "新增群組 {{n}}",
|
||||
"dashboard.reorderGroup": "拖曳以調整群組順序",
|
||||
"dashboard.spoolCount_other": "{{count}} 個線軸",
|
||||
"dashboard.unassigned": "未分配",
|
||||
"datetime.done": "完成",
|
||||
"datetime.hour": "時",
|
||||
"datetime.minute": "分",
|
||||
"datetime.nextMonth": "下個月",
|
||||
"datetime.now": "現在",
|
||||
"datetime.pick": "選擇日期與時間",
|
||||
"datetime.prevMonth": "上個月",
|
||||
"datetime.time": "時間",
|
||||
"documentTitle.dashboard.list": "儀表板 | Spoolman",
|
||||
"documentTitle.labels.list": "標籤列印 | Spoolman",
|
||||
"documentTitle.library.list": "線材庫 | Spoolman",
|
||||
"documentTitle.locations.list": "位置| Spoolman",
|
||||
"documentTitle.settings.list": "設定 | Spoolman",
|
||||
"filament.fields.addColor": "新增顏色",
|
||||
"filament.fields.articleNumber": "產品編號",
|
||||
"filament.fields.coaxial": "混色",
|
||||
"filament.fields.colorHex": "顏色",
|
||||
"filament.fields.colorType": "顏色類型",
|
||||
"filament.fields.comment": "備註",
|
||||
"filament.fields.density": "密度",
|
||||
"filament.fields.diameter": "線徑",
|
||||
"filament.fields.externalId": "內部ID",
|
||||
"filament.fields.externalId": "外部 ID",
|
||||
"filament.fields.id": "ID",
|
||||
"filament.fields.longitudinal": "縱向",
|
||||
"filament.fields.material": "材料",
|
||||
"filament.fields.multiColor": "多色",
|
||||
"filament.fields.name": "名稱",
|
||||
"filament.fields.opacity": "透明度",
|
||||
"filament.fields.price": "價格",
|
||||
"filament.fields.registered": "已登記",
|
||||
"filament.fields.removeColor": "移除顏色",
|
||||
"filament.fields.settingsBedTemp": "床台溫度",
|
||||
"filament.fields.settingsExtruderTemp": "擠出機溫度",
|
||||
"filament.fields.singleColor": "單色",
|
||||
"filament.fields.spoolWeight": "料盤重量",
|
||||
"filament.fields.spoolWeight": "線軸重量",
|
||||
"filament.fields.vendor": "製造商",
|
||||
"filament.fields.weight": "重量",
|
||||
"filament.fieldsHelp.articleNumber": "例如EAN、UPC等。",
|
||||
"filament.fieldsHelp.multiColorDirection": "線材的顏色可通過兩種方式呈現多樣性:一種是共擠技術,例如雙色線材,具有穩定的多色效果;另一種是沿線材長度的顏色變化,例如漸變線材,顏色會隨著線材捲的長度逐漸轉變。",
|
||||
"filament.fieldsHelp.spoolWeight": "空線盤的重量,用於計算整捲線的實際重量。",
|
||||
"filament.fieldsHelp.weight": "整捲線材的重量(淨重)。此重量不應包含線盤本身的重量,僅限於線材的重量,通常會標示在包裝上。",
|
||||
"filament.fieldsHelp.multiColorDirection": "線材可透過兩種方式呈現多種顏色:共擠(如雙色線材,各色沿整段保持一致)或縱向漸層(顏色沿線材長度變化)。",
|
||||
"filament.fieldsHelp.spoolWeight": "空線軸的重量,用於計算整捲線的實際重量。",
|
||||
"filament.fieldsHelp.weight": "整捲線材的重量(淨重)。此重量不應包含線軸本身的重量,僅限於線材的重量,通常會標示在包裝上。",
|
||||
"filament.filament": "線材",
|
||||
"footer.documentation": "說明文件",
|
||||
"footer.reportIssue": "回報問題",
|
||||
"footer.updateAvailable": "可更新至 v{{version}}",
|
||||
"help.help": "說明",
|
||||
"inspector.addSpoolsOfThis": "新增此規格的線軸",
|
||||
"inspector.adjustFailed": "調整重量失敗。",
|
||||
"inspector.adjustHelp": "正數表示消耗線材,負數表示退回/增加線材。",
|
||||
"inspector.adjustWeight": "調整用量/重量",
|
||||
"inspector.apply": "套用",
|
||||
"inspector.applying": "正在套用...",
|
||||
"inspector.colorHex": "十六進位色碼",
|
||||
"inspector.consumeAmount": "消耗數量:",
|
||||
"inspector.defaultFrom.filament": "{{value}} · 線材預設值",
|
||||
"inspector.defaultFrom.manufacturer": "{{value}} · 製造商預設值",
|
||||
"inspector.delete.deleting": "正在刪除...",
|
||||
"inspector.delete.errorGone": "此項目已刪除。",
|
||||
"inspector.delete.errorSpoolsExist": "無法刪除此線材 — 仍有線軸在使用它。",
|
||||
"inspector.delete.errorUnknown": "刪除失敗。詳細資料請檢視伺服器日誌。",
|
||||
"inspector.delete.filament": "刪除線材規格",
|
||||
"inspector.delete.filamentBlockedHint": "請先刪除這些線軸;只有封存並不足夠。",
|
||||
"inspector.delete.filamentBlockedTitle": "無法刪除此線材規格",
|
||||
"inspector.delete.filamentBlocked_other": "仍有 {{count}} 個線軸正在使用「{{name}}」(包含已封存項)。",
|
||||
"inspector.delete.filamentBody": "「{{name}}」 將從您的目錄中完全移除。此操作不可撤銷。",
|
||||
"inspector.delete.filamentDone": "線材規格已刪除。",
|
||||
"inspector.delete.filamentTitle": "確認刪除此線材規格?",
|
||||
"inspector.delete.spool": "刪除線軸",
|
||||
"inspector.delete.spoolBody": "線軸 #{{id}}(「{{name}}」)及其歷史使用記錄將被完全移除。此操作不可撤銷。",
|
||||
"inspector.delete.spoolDone": "線軸已刪除。",
|
||||
"inspector.delete.spoolRemaining": "該捲仍剩餘 {{weight}} 線材。如果您只是想清理介面,可以將其封存。",
|
||||
"inspector.delete.spoolTitle": "確認刪除此線軸?",
|
||||
"inspector.delete.vendor": "刪除製造商",
|
||||
"inspector.delete.vendorBody": "製造商「{{name}}」將被移除。此操作不可撤銷。",
|
||||
"inspector.delete.vendorDone": "製造商已刪除。",
|
||||
"inspector.delete.vendorOrphans_other": "其下的 {{count}} 種線材將被保留,但會變為無製造商狀態。",
|
||||
"inspector.delete.vendorTitle": "確認刪除此製造商?",
|
||||
"inspector.duplicateFilament": "建立副本",
|
||||
"inspector.empty": "請從清單中選擇線軸、線材規格或製造商以在此檢視詳細資料。",
|
||||
"inspector.enterValidLength": "請輸入有效的長度。",
|
||||
"inspector.enterValidWeight": "請輸入有效的重量。",
|
||||
"inspector.loading": "正在載入...",
|
||||
"inspector.manageExtraFields": "管理自訂欄位",
|
||||
"inspector.measuredHelp": "線軸 + 剩餘線材的電子秤實測總毛重。",
|
||||
"inspector.multi": "多色 ×{{count}}",
|
||||
"inspector.newGross": "新的實測總毛重:",
|
||||
"inspector.noExtraFields": "尚無額外欄位。您可以新增自訂欄位,追蹤 Spoolman 尚未涵蓋的屬性。",
|
||||
"inspector.notFound": "找不到此項目,可能已被刪除。",
|
||||
"inspector.ofRemaining": "剩餘 {{weight}} · 約 {{length}} 公尺",
|
||||
"inspector.openFilament": "開啟線材規格",
|
||||
"inspector.openLink": "在新標籤頁中開啟 {{url}}",
|
||||
"inspector.openManufacturer": "開啟製造商",
|
||||
"inspector.override.byFilament": "已被此線材覆蓋 · {{value}}",
|
||||
"inspector.override.bySpool": "已被此線軸覆蓋 · {{value}}",
|
||||
"inspector.override.overridesFilament": "覆蓋了線材預設 · {{value}}",
|
||||
"inspector.override.overridesManufacturer": "覆蓋了製造商預設 · {{value}}",
|
||||
"inspector.specs": "規格 — 直接編輯",
|
||||
"inspector.spoolsCount": "線軸數 · {{count}}",
|
||||
"inspector.spoolsTotalRemaining": "總剩餘 {{weight}}",
|
||||
"inspector.used": "已使用",
|
||||
"inspector.vendorSub_other": "{{count}} 種線材",
|
||||
"kofi": "在Ko-fi上打賞我",
|
||||
"labels.addHead": "新增元素",
|
||||
"labels.addQr": "QR 碼",
|
||||
"labels.addRect": "矩形框",
|
||||
"labels.addSwatch": "顏色色塊",
|
||||
"labels.addText": "文字 / 欄位",
|
||||
"labels.align": "對齊方式",
|
||||
"labels.alignCenter": "置中",
|
||||
"labels.alignLeft": "左對齊",
|
||||
"labels.alignRight": "右對齊",
|
||||
"labels.blank": "您還沒有任何標籤設計樣式。",
|
||||
"labels.bold": "粗體",
|
||||
"labels.canvasHint": "拖曳以移動 · 點擊以選取 · 拖曳控制點以調整大小。",
|
||||
"labels.centerLogo": "將 Spoolman 標誌置中",
|
||||
"labels.chooseField": "選擇屬性欄位...",
|
||||
"labels.clearFill": "清除填色(僅保留外框)",
|
||||
"labels.copies": "列印份數",
|
||||
"labels.cornerRadiusMm": "圓角半徑",
|
||||
"labels.createFirst": "建立您的第一個標籤樣式",
|
||||
"labels.cutGuides": "剪裁參考線",
|
||||
"labels.deleteConfirm": "確認刪除此標籤設計?",
|
||||
"labels.deleteElement": "刪除元素",
|
||||
"labels.designName": "設計樣式名稱",
|
||||
"labels.designerDesc": "使用任意線軸、線材或製造商欄位設計 QR 碼標籤,再列印到標籤紙或標籤印表機。設計會儲存在伺服器上。",
|
||||
"labels.designerTitle": "標籤設計器",
|
||||
"labels.dpi": "列印解析度",
|
||||
"labels.dpiHint": "請配合印表機解析度,讓小型標籤保持清晰:多數熱感式標籤印表機為 203 dpi,雷射與噴墨印表機則為 300 dpi 以上。",
|
||||
"labels.duplicate": "建立副本",
|
||||
"labels.exportDescAml": "為選中的每個標籤產生一個 .aml 檔案(尺寸 {{w}}×{{h}} mm)。大多數熱敏印表機附帶的 LPAPI 軟體支援讀取此類檔案中的物理尺寸。",
|
||||
"labels.exportDescPng": "為選中的每個標籤產生一張 PNG 圖片(尺寸 {{w}}×{{h}} mm)。",
|
||||
"labels.exportFormat": "匯出檔案格式",
|
||||
"labels.exportFormatOptions.aml": "AML 標籤檔案",
|
||||
"labels.exportFormatOptions.png": "PNG 圖片",
|
||||
"labels.fields.bedTemp": "熱床溫度",
|
||||
"labels.fields.diameterMm": "線徑 (mm)",
|
||||
"labels.fields.groupVendor": "製造商",
|
||||
"labels.fields.initialG": "初始總重 (g)",
|
||||
"labels.fields.netWeightG": "線材淨重 (g)",
|
||||
"labels.fields.remainingG": "剩餘重量 (g)",
|
||||
"labels.filamentsSelected_other": "已選擇 {{count}} 種線材",
|
||||
"labels.fill": "填色",
|
||||
"labels.fitWidth": "依欄數調整寬度",
|
||||
"labels.fitWidthHint": "自動設定標籤寬度,使所選的列數正好填滿整張頁面。",
|
||||
"labels.fontMm": "字號",
|
||||
"labels.gridInfo": "{{cols}} 列 × {{rows}} 行 = 每頁 {{perPage}} 個標籤",
|
||||
"labels.hMm": "高",
|
||||
"labels.heightMm": "高度",
|
||||
"labels.hintNowrap": "文字保持單行顯示,超出寬度的部分將被截斷。",
|
||||
"labels.hintSwatch": "列印時會使用線軸所裝線材的顏色。",
|
||||
"labels.hintWrap": "將欄位包在條件式中,使其在空白時隱藏:",
|
||||
"labels.imageDesc": "",
|
||||
"labels.imageZipNote": "超過 {{threshold}} 個標籤時,所有標籤會合併成單一壓縮檔供下載。",
|
||||
"labels.insertField": "插入變數欄位",
|
||||
"labels.kind.qr": "QR 碼",
|
||||
"labels.kind.rect": "矩形框",
|
||||
"labels.kind.swatch": "色塊",
|
||||
"labels.kind.text": "文字",
|
||||
"labels.labelSize": "標籤尺寸",
|
||||
"labels.labelType": "標籤類型",
|
||||
"labels.layout": "版面配置",
|
||||
"labels.modeImage": "檔案",
|
||||
"labels.modeLabel": "標籤印表機",
|
||||
"labels.modeSheet": "標籤紙(平鋪)",
|
||||
"labels.new": "新增",
|
||||
"labels.newText": "新文字框",
|
||||
"labels.noDesignsOption": "尚無設計",
|
||||
"labels.noFilaments": "無線材規格。",
|
||||
"labels.noSpools": "無線軸。",
|
||||
"labels.onePerLabel": "每個標籤使用一張 {{w}}×{{h}} mm 的頁面。",
|
||||
"labels.preparing": "正在準備...",
|
||||
"labels.preview": "預覽",
|
||||
"labels.previewWith": "預覽資料來源",
|
||||
"labels.printN_other": "列印 {{count}} 張標籤",
|
||||
"labels.radiusMm": "圓角半徑",
|
||||
"labels.sampleData": "範例資料",
|
||||
"labels.saveAsFormat": "另存為 {{format}}",
|
||||
"labels.saved": "已儲存",
|
||||
"labels.saving": "正在儲存...",
|
||||
"labels.searchFilaments": "搜尋線材規格...",
|
||||
"labels.searchSpools": "搜尋線軸...",
|
||||
"labels.selectAllShort": "全選",
|
||||
"labels.selectAtLeastOne": "請至少選擇一個線軸。",
|
||||
"labels.selectAtLeastOneFilament": "請至少選擇一種線材。",
|
||||
"labels.selectDesign": "選擇標籤樣式",
|
||||
"labels.selectElement": "選擇要編輯的元素,或從工具欄新增新元素。",
|
||||
"labels.selectNoneShort": "取消全選",
|
||||
"labels.selectRecentHint": "選擇過去 24 小時內新增的線軸",
|
||||
"labels.selectRecentShort": "近期新增 ({{count}})",
|
||||
"labels.showingFilament": "正在顯示線材規格 #{{id}}",
|
||||
"labels.showingReal": "正在顯示真實線軸資料。",
|
||||
"labels.showingSpool": "正在顯示線軸 #{{id}}",
|
||||
"labels.showingTags": "選擇上方的線軸前,欄位會以佔位符顯示。",
|
||||
"labels.sizeMm": "尺寸",
|
||||
"labels.skipHint": "跳過格子可以在第一張標籤前保留空位,方便您繼續使用已打過一部分的標籤紙:從左到右、從上到下數出已被撕掉的標籤數量即可。",
|
||||
"labels.sortHint": "排序方式",
|
||||
"labels.sortId": "編號",
|
||||
"labels.sortNewest": "最新加入",
|
||||
"labels.stroke": "描邊顏色",
|
||||
"labels.strokeMm": "描邊粗細",
|
||||
"labels.tabDesign": "畫布設計",
|
||||
"labels.tabPrint": "列印設定",
|
||||
"labels.textTemplate": "文字 / 模板",
|
||||
"labels.typeFilament": "線材規格標籤",
|
||||
"labels.typeHint": "線材標籤不包含線軸專用欄位,其 QR 碼會連結到線材而非特定線軸。",
|
||||
"labels.typeSpool": "實體線軸標籤",
|
||||
"labels.unknownFilament": "未知線材",
|
||||
"labels.wMm": "寬",
|
||||
"labels.widthMm": "寬度",
|
||||
"labels.wrapText": "自動換行",
|
||||
"labels.xMm": "X 座標",
|
||||
"labels.yMm": "Y 座標",
|
||||
"library.apiError": "無法連線至 Spoolman API。後端服務是否正在執行?",
|
||||
"library.collapseGroup": "摺疊這些線軸",
|
||||
"library.dateFilter.ago": "{{span}} 前",
|
||||
"library.dateFilter.between": "{{from}} – {{to}}",
|
||||
"library.dateFilter.customRange": "自訂時間段",
|
||||
"library.dateFilter.from": "起始時間",
|
||||
"library.dateFilter.last": "最近 {{span}}",
|
||||
"library.dateFilter.never": "從未",
|
||||
"library.dateFilter.olderThan": "早於 {{span}}",
|
||||
"library.dateFilter.since": "自 {{date}} 起",
|
||||
"library.dateFilter.to": "截止時間(選填)",
|
||||
"library.dateFilter.until": "截至 {{date}}",
|
||||
"library.emptyBody": "新增第一個線軸,開始追蹤線材。",
|
||||
"library.emptyFiltered": "沒有符合目前篩選條件的 {{unit}}。",
|
||||
"library.emptyTitle": "暫無線軸",
|
||||
"library.expandGroup": "展開這些線軸",
|
||||
"library.filterBy": "篩選依據",
|
||||
"library.groupBy": "群組依據",
|
||||
"library.groupNone": "無(平面清單)",
|
||||
"library.groupSpools_other": "{{count}} 個線軸",
|
||||
"library.nUnused": "×{{count}} 捲未拆封",
|
||||
"library.noLocation": "未指定存放位置",
|
||||
"library.noSpools": "無線軸",
|
||||
"library.noValues": "無資料",
|
||||
"library.openGroup": "開啟 {{name}}",
|
||||
"library.openManufacturer": "開啟製造商 {{name}}",
|
||||
"library.resizeList": "調整清單寬度(雙擊以重設)",
|
||||
"library.reverseSort": "切換升序/降序排序",
|
||||
"library.section.extra": "額外欄位",
|
||||
"library.section.filament": "線材規格",
|
||||
"library.section.spool": "線軸",
|
||||
"library.section.vendor": "製造商",
|
||||
"library.showMore": "展開剩餘 {{count}} 項",
|
||||
"library.sort.nozzle": "噴頭溫度",
|
||||
"library.sortBy": "排序依據",
|
||||
"library.unassigned": "未指派",
|
||||
"library.unitGroups": "組",
|
||||
"library.unitSpools": "捲",
|
||||
"library.unused": "未拆封/未使用",
|
||||
"library.unusedGroup": "{{count}} 捲未拆封 · 每捲 {{weight}} 克",
|
||||
"library.unusedGroupMixed": "{{count}} 捲未拆封",
|
||||
"library.unusedSub": "每捲 {{weight}} 克 · 位於 {{location}}",
|
||||
"library.unusedSubMixed": "位於 {{location}}",
|
||||
"library.used": "已拆封/使用中",
|
||||
"library.usedAgo": "上次使用於 {{time}} 前",
|
||||
"loading": "讀取中",
|
||||
"locations.locations": "位置",
|
||||
"locations.newLocation": "新增位置",
|
||||
"locations.noLocation": "未設定位置",
|
||||
"locations.noLocationsHelp": "這個頁面讓您將料盤按位置進行整理,請從增加一些線盤來開始!",
|
||||
"nav.labels": "標籤列印",
|
||||
"nav.library": "線材庫存",
|
||||
"no": "否",
|
||||
"notifications.error": "錯誤 ( 狀態碼:{{statusCode}} )",
|
||||
"notifications.saveSuccessful": "儲存成功!",
|
||||
"pagination.empty": "沒有 {{unit}}",
|
||||
"pagination.next": "下一頁",
|
||||
"pagination.pageSize": "每頁顯示",
|
||||
"pagination.perPage": "每頁 {{size}} 筆",
|
||||
"pagination.prev": "上一頁",
|
||||
"pagination.range": "第 {{from}}–{{to}} 筆,共 {{total}} 筆 {{unit}}",
|
||||
"printing.generic.columns": "欄",
|
||||
"printing.generic.customSize": "自訂",
|
||||
"printing.generic.description": "調整以下設定以獲得所需的列印佈局。請注意,列表機和您的操作系統可能會套用自己的邊距和縮放比例,因此可能需要進行一些反覆測試才能達到理想效果。在實際標籤上列印之前,先在普通紙上測試。",
|
||||
"printing.generic.description": "調整以下設定以取得所需的列印版面。請注意,印表機與作業系統可能會套用自己的邊距和縮放比例,因此可能需要多次測試。列印實際標籤前,請先使用一般紙張測試。",
|
||||
"printing.generic.dimensions": "尺寸",
|
||||
"printing.generic.helpMargin": "邊距應配置為與您的標籤紙和列表機相符,調整這些將影響整個網格的大小。",
|
||||
"printing.generic.helpPrinterMargin": "安全區域應設定為列表機能列印的距離紙張的邊界,更改此選項不影響整個網格。",
|
||||
"printing.generic.gridTooWide": "標籤排版寬度已超出頁面總寬。請減少列數、縮小間距或調整頁邊距。",
|
||||
"printing.generic.helpMargin": "邊距應設定為與您的標籤紙和印表機相符,調整這些將影響整個網格的大小。",
|
||||
"printing.generic.helpPrinterMargin": "安全區域應設定為印表機能列印的距離紙張的邊界,更改此選項不影響整個網格。",
|
||||
"printing.generic.horizontalSpacing": "水平間距",
|
||||
"printing.generic.itemCopies": "項目複製",
|
||||
"printing.generic.itemCopies": "每項份數",
|
||||
"printing.generic.marginBottom": "下邊界",
|
||||
"printing.generic.marginLeft": "左邊界",
|
||||
"printing.generic.marginRight": "右邊界",
|
||||
@@ -65,26 +416,61 @@
|
||||
"printing.generic.skipItems": "跳過項目",
|
||||
"printing.generic.verticalSpacing": "垂直間距",
|
||||
"printing.qrcode.button": "列印標籤",
|
||||
"printing.qrcode.useHTTPUrl.label": "QR碼連結",
|
||||
"printing.qrcode.customUrl.caveat": "Spoolman 內建掃描器無法直接讀取使用自訂 URL 的 QR 碼;這通常用於連結外部軟體或第三方網頁。",
|
||||
"printing.qrcode.customUrl.fieldsHint": "也可使用標籤欄位,例如",
|
||||
"printing.qrcode.customUrl.hint": "可使用佔位符,將線軸識別碼插入連結中的任意位置",
|
||||
"printing.qrcode.customUrl.label": "自訂 URL 模板",
|
||||
"printing.qrcode.useHTTPUrl.label": "QR 碼連結",
|
||||
"printing.qrcode.useHTTPUrl.options.custom": "自訂網頁 URL",
|
||||
"printing.qrcode.useHTTPUrl.options.default": "預設",
|
||||
"printing.qrcode.useHTTPUrl.options.url": "URL",
|
||||
"printing.qrcode.useHTTPUrl.preview": "預覽:",
|
||||
"printing.qrcode.useHTTPUrl.tooltip": "將使用專屬連結,僅在使用 Spoolman 的掃描功能掃描時有效(預設)。URL 使用設定中指定的基礎 URL,若未設置則使用目前頁面的 URL。",
|
||||
"printing.spoolSelect.selectedTotal_other": "已選擇 {{count}} 個料盤",
|
||||
"scanner.description": "掃描Spoolman的QR碼以檢視關於料盤的詳細資料。",
|
||||
"printing.qrcode.useHTTPUrl.tooltip": "「預設」會產生只有 Spoolman 內建掃描器可讀取的專用代碼;「網址」則會產生任何掃描器都能開啟的一般網頁連結。連結會使用設定中的基礎網址;若未設定,則使用目前網站的網址。",
|
||||
"printing.spoolSelect.selectedTotal_other": "已選擇 {{count}} 個線軸",
|
||||
"scanner.camera": "相機",
|
||||
"scanner.cameraNumbered": "相機 {{number}}",
|
||||
"scanner.description": "掃描 Spoolman QR 碼以檢視線軸的詳細資料。",
|
||||
"scanner.error.inUse": "攝影機正由其他應用程式使用。",
|
||||
"scanner.error.insecureContext": "此頁面未通過 HTTPS 提供服務。",
|
||||
"scanner.error.notAllowed": "您未被允許存取攝影機。",
|
||||
"scanner.error.notFound": "未找到攝影機。",
|
||||
"scanner.error.streamApiNotSupported": "瀏覽器不支援MediaStream API。",
|
||||
"scanner.error.unknown": "發生未知的錯誤。({{error}})",
|
||||
"scanner.title": "掃描QR碼",
|
||||
"scanner.starting": "正在啟動攝影機...",
|
||||
"scanner.title": "QR 碼掃描器",
|
||||
"search.colorHint": "顏色名稱必須輸入英文(如 red、blue)。",
|
||||
"search.moreSpools": "+ 其餘 {{count}} 個線軸",
|
||||
"search.noResults": "找不到相符結果",
|
||||
"search.searching": "正在搜尋...",
|
||||
"search.section.filaments": "線材規格",
|
||||
"search.section.spools": "線軸",
|
||||
"search.section.vendors": "製造商",
|
||||
"search.threshold": "顏色相符容差",
|
||||
"search.unknownFilament": "未知線材",
|
||||
"settings.appearance.tab": "外觀",
|
||||
"settings.appearance.theme.dark": "深色模式",
|
||||
"settings.appearance.theme.desc": "介面配色主題(僅對目前瀏覽器生效)",
|
||||
"settings.appearance.theme.label": "主題設定",
|
||||
"settings.appearance.theme.light": "淺色模式",
|
||||
"settings.appearance.theme.system": "跟隨系統",
|
||||
"settings.extraFields.addChoice": "新增選項...",
|
||||
"settings.extraFields.addChoicesFirst": "請先新增預設選項",
|
||||
"settings.extraFields.addEntityField": "新增{{entity}}欄位",
|
||||
"settings.extraFields.booleanFalse": "否",
|
||||
"settings.extraFields.booleanTrue": "是",
|
||||
"settings.extraFields.deleteConfirm": "刪除欄位 {{name}}?",
|
||||
"settings.extraFields.description.intro": "在此,您可以為您的實體加入額外的自訂欄位。",
|
||||
"settings.extraFields.deleteConfirm": "要刪除 {{entity}} 的欄位「{{name}}」嗎?",
|
||||
"settings.extraFields.description.constraints": "一旦加入欄位,您將無法更改其鍵值或類型,對於選擇類型欄位,您也無法刪除選項或更改多選狀態。如果刪除欄位,所有實體的相關資料將被刪除。",
|
||||
"settings.extraFields.description.keyUsage": "鍵值是其他程式讀取/寫入資料的方式,因此如果您的自訂欄位需要與第三方程式整合,請確保正確設置。預設值僅適用於新品項。",
|
||||
"settings.extraFields.description.tableViews": "額外的欄位無法在表格視圖中排序或過濾。",
|
||||
"settings.extraFields.description.intro": "在此,您可以為您的實體加入額外的自訂欄位。",
|
||||
"settings.extraFields.description.keyUsage": "鍵值是其他程式讀取/寫入資料的方式,因此如果您的自訂欄位需要與第三方程式整合,請確保正確設定。預設值僅適用於新品項。",
|
||||
"settings.extraFields.description.tableViews": "額外欄位可顯示於表格中並用於排序。選項與布林欄位也會提供篩選選項,所有額外欄位類型都可篩選空值。",
|
||||
"settings.extraFields.editorEdit": "編輯{{entity}}欄位",
|
||||
"settings.extraFields.editorNew": "新增{{entity}}欄位",
|
||||
"settings.extraFields.errors.choiceNeeded": "選項類欄位必須至少包含一個預設選項。",
|
||||
"settings.extraFields.errors.choicesRemoved": "不能刪除已存在的選項:{{choices}}。",
|
||||
"settings.extraFields.errors.deleteFailed": "刪除欄位失敗。",
|
||||
"settings.extraFields.errors.keyFormat": "鍵值只能包含小寫字母、數字和底線。",
|
||||
"settings.extraFields.errors.nameRequired": "名稱為必填項。",
|
||||
"settings.extraFields.errors.saveFailed": "儲存欄位失敗。",
|
||||
"settings.extraFields.fieldType.boolean": "布林",
|
||||
"settings.extraFields.fieldType.choice": "選項",
|
||||
"settings.extraFields.fieldType.datetime": "日期時間",
|
||||
@@ -93,7 +479,13 @@
|
||||
"settings.extraFields.fieldType.integer": "整數",
|
||||
"settings.extraFields.fieldType.integerRange": "整數範圍",
|
||||
"settings.extraFields.fieldType.text": "文字",
|
||||
"settings.extraFields.max": "最大值",
|
||||
"settings.extraFields.min": "最小值",
|
||||
"settings.extraFields.multiSuffix": " · 多選",
|
||||
"settings.extraFields.multiple": "允許多選",
|
||||
"settings.extraFields.namePlaceholder": "介面顯示名稱",
|
||||
"settings.extraFields.nonUniqueKeyError": "鍵值必須為唯一。",
|
||||
"settings.extraFields.none": "尚未定義{{entity}}的額外欄位。",
|
||||
"settings.extraFields.params.choices": "選項",
|
||||
"settings.extraFields.params.defaultValue": "預設值",
|
||||
"settings.extraFields.params.fieldType": "類型",
|
||||
@@ -101,14 +493,37 @@
|
||||
"settings.extraFields.params.name": "名稱",
|
||||
"settings.extraFields.params.order": "順序",
|
||||
"settings.extraFields.params.unit": "單位",
|
||||
"settings.extraFields.reorderChoice": "拖曳或使用方向鍵調整此選項的順序。",
|
||||
"settings.extraFields.saveField": "儲存欄位",
|
||||
"settings.extraFields.tab": "額外欄位",
|
||||
"settings.general.baseUrl.label": "基本URL",
|
||||
"settings.general.baseUrl.tooltip": "生成 QR 碼等功能時使用的基本 URL。",
|
||||
"settings.general.currency.label": "貨幣設定標籤",
|
||||
"settings.general.baseUrl.label": "基礎 URL",
|
||||
"settings.general.baseUrl.tooltip": "產生 QR 碼等功能時使用的基本 URL。",
|
||||
"settings.general.currency.desc": "顯示價格時使用的三字母 ISO 代碼(例如 EUR、USD)",
|
||||
"settings.general.currency.label": "貨幣",
|
||||
"settings.general.roundPrices.label": "價格四捨五入",
|
||||
"settings.general.roundPrices.tooltip": "將價格四捨五入至最接近的整數。",
|
||||
"settings.general.tab": "一般",
|
||||
"settings.header": "設定",
|
||||
"settings.language.desc": "介面顯示語言(僅對目前瀏覽器生效)",
|
||||
"settings.language.label": "顯示語言",
|
||||
"settings.library.lowThreshold.desc": "當線材剩餘重量等於或低於此設定值時,將在介面標紅警示(僅對目前瀏覽器生效)",
|
||||
"settings.library.lowThreshold.label": "低庫存臨界值",
|
||||
"settings.library.tab": "線材庫偏好",
|
||||
"settings.scanner.autoNavigate.desc": "標籤讀取器讀到標籤時,自動在此瀏覽器開啟對應的線軸或線材。",
|
||||
"settings.scanner.autoNavigate.label": "讀卡自動跳轉",
|
||||
"settings.scanner.docs": "如何設定標籤讀取器",
|
||||
"settings.scanner.lastSeen": "{{when}} 前",
|
||||
"settings.scanner.pair": "感應標籤以配對",
|
||||
"settings.scanner.reader.anyDesc": "任何讀取器的掃描都可在此瀏覽器開啟線軸。若需要更精確的控制,可配對特定讀取器;新增線軸或線材標籤時也會使用這個讀取器。",
|
||||
"settings.scanner.reader.label": "標籤讀取器",
|
||||
"settings.scanner.reader.pairedDesc": "只有此讀取器的掃描會在本瀏覽器開啟線軸。",
|
||||
"settings.scanner.recent": "最近使用的讀取器",
|
||||
"settings.scanner.recentNone": "目前沒有已記錄的讀取器。設定標籤讀取器並讀取任意標籤後,它就會顯示在這裡。",
|
||||
"settings.scanner.tab": "標籤掃描",
|
||||
"settings.scanner.unpair": "使用任意讀取器",
|
||||
"settings.scanner.use": "使用這個讀取器",
|
||||
"settings.scanner.waiting": "請在要使用的讀取器上感應任意標籤...",
|
||||
"sponsor": "在 GitHub 上贊助專案",
|
||||
"spool.fields.archived": "封存",
|
||||
"spool.fields.comment": "備註",
|
||||
"spool.fields.filament": "線材",
|
||||
@@ -122,23 +537,87 @@
|
||||
"spool.fields.price": "價格",
|
||||
"spool.fields.registered": "登記於",
|
||||
"spool.fields.remainingWeight": "剩餘重量",
|
||||
"spool.fields.spoolWeight": "線軸重量",
|
||||
"spool.fields.usedWeight": "已用重量",
|
||||
"spool.fieldsHelp.location": "如果您的料盤存於多個位置,請填寫料盤所在位置。",
|
||||
"spool.fieldsHelp.lotNr": "製造商的批號。如果使用多個線盤,可用於確保列印的顏色一致。",
|
||||
"spool.fieldsHelp.measuredWeight": "線材和料盤的重量為多少。",
|
||||
"spool.fieldsHelp.price": "完整線盤的價格。如果未設定,則會假設為線材的價格。",
|
||||
"spool.fieldsHelp.remainingWeight": "料盤所剩餘的線材。對於新的料盤來說應等於料盤重量。",
|
||||
"spool.fieldsHelp.usedWeight": "料盤所使用的線材重量。一個新料盤應該為0克。",
|
||||
"spool.fields.weight": "初始線材淨重",
|
||||
"spool.fieldsHelp.location": "如果您的線軸存於多個位置,請填寫線軸所在位置。",
|
||||
"spool.fieldsHelp.lotNr": "製造商的批號。如果使用多個線軸,可用於確保列印的顏色一致。",
|
||||
"spool.fieldsHelp.measuredWeight": "線材和線軸的重量為多少。",
|
||||
"spool.fieldsHelp.price": "完整線軸的價格。如果未設定,則會假設為線材的價格。",
|
||||
"spool.fieldsHelp.remainingWeight": "線軸所剩餘的線材。對於新的線軸來說應等於線軸重量。",
|
||||
"spool.fieldsHelp.spoolWeight": "此線軸空載時的重量。留空會沿用線材的預設線軸重量;若此線軸不同,例如重新繞線或更換軸心材質,請在此單獨設定。依實測重量調整時會扣除此重量,數值不正確會影響剩餘線材的計算。",
|
||||
"spool.fieldsHelp.usedWeight": "此線軸已使用的線材重量。新線軸應為 0 g。",
|
||||
"spool.fieldsHelp.weight": "此線軸裝滿時的線材淨重,不含線軸本身。留空會沿用線材的預設重量;若此線軸不同,例如只有部分線材或容量較大,請在此單獨設定。",
|
||||
"spool.form.measurementType.length": "長度",
|
||||
"spool.form.measurementType.weight": "重量",
|
||||
"spool.spool": "料盤",
|
||||
"spool.spool": "線軸",
|
||||
"tags.add": "新增標籤",
|
||||
"tags.added": "標籤已連結。",
|
||||
"tags.addedOn": "連結於 {{date}}",
|
||||
"tags.modal.alreadyHere": "此標籤已識別這個線軸。",
|
||||
"tags.modal.alreadyHereFilament": "此標籤已識別這個線材。",
|
||||
"tags.modal.badUid": "標籤 UID 應為十六進位格式,如 04A2B3C4。",
|
||||
"tags.modal.checking": "正在檢查...",
|
||||
"tags.modal.failed": "無法連結標籤。",
|
||||
"tags.modal.filamentNamed": "線材 {{name}}",
|
||||
"tags.modal.free": "此標籤尚未連結任何項目。",
|
||||
"tags.modal.intro": "日後在讀取器上感應此標籤,即可找到線軸 #{{id}}。",
|
||||
"tags.modal.introFilament": "日後在讀取器上感應此標籤,即可找到這個線材。",
|
||||
"tags.modal.lastSeenOn": "{{reader}} 上次讀取了 {{uid}}。",
|
||||
"tags.modal.link": "連結標籤",
|
||||
"tags.modal.linking": "正在連結...",
|
||||
"tags.modal.move": "從 #{{id}} 移到這裡",
|
||||
"tags.modal.moveFailed": "無法移動標籤。標籤目前可能未連結任何線軸,請重新連結。",
|
||||
"tags.modal.moveFailedFilament": "無法移動標籤。標籤目前可能未連結任何項目,請重新連結。",
|
||||
"tags.modal.moveHere": "移到這裡",
|
||||
"tags.modal.moving": "正在移動...",
|
||||
"tags.modal.phoneReading": "請將標籤貼近手機感應區…",
|
||||
"tags.modal.phoneScan": "使用目前手機讀取標籤",
|
||||
"tags.modal.spoolNamed": "線軸 #{{id}}({{name}})",
|
||||
"tags.modal.spoolShort": "線軸 #{{id}}",
|
||||
"tags.modal.takenBy": "目前連結至 {{spool}}。",
|
||||
"tags.modal.title": "連結標籤",
|
||||
"tags.modal.uidHelp": "分隔符和大小寫不影響識別:04:a2:b3:c4、04-A2-B3-C4 與 04a2b3c4 代表同一張標籤。",
|
||||
"tags.modal.uidLabel": "標籤 UID",
|
||||
"tags.modal.uidPlaceholder": "例如:04A2B3C4",
|
||||
"tags.modal.useLastSeen": "使用它",
|
||||
"tags.modal.waitingAny": "等待任意讀取器感應標籤...",
|
||||
"tags.modal.waitingOn": "等待讀取器 {{reader}} 感應標籤...",
|
||||
"tags.moved": "標籤已從線軸 #{{id}} 轉移至此處。",
|
||||
"tags.movedFromFilament": "已將標籤從線材 {{name}} 移到這裡。",
|
||||
"tags.nfc.insecureContext": "讀取 NFC 標籤需要安全連線。請在 HTTPS 環境下開啟 Spoolman 以呼叫手機 NFC 功能。",
|
||||
"tags.nfc.notAllowed": "目前頁面未獲得 NFC 使用權限。請在瀏覽器網站設定中授予權限後重試。",
|
||||
"tags.nfc.notReadable": "NFC 模組不可用 — 可能有其他套用正在佔用。",
|
||||
"tags.nfc.notSupported": "此手機不支援 NFC,或系統設定中未開啟 NFC 功能。",
|
||||
"tags.nfc.unknown": "無法讀取標籤。",
|
||||
"tags.none": "尚未連結標籤。",
|
||||
"tags.scan.openedFilament": "已掃描標籤:已開啟線材 {{name}}。",
|
||||
"tags.scan.openedSpool": "已掃描標籤:已開啟線軸 #{{id}}({{name}})。",
|
||||
"tags.scan.unknown": "未知標籤 {{uid}}。請開啟其所屬線軸,使用「新增標籤」加以連結。",
|
||||
"tags.section": "電子標籤",
|
||||
"tags.unlink": "解除連結",
|
||||
"tags.unlinkBody": "解除後,標籤 {{uid}} 將不再識別這個線軸。標籤本身不會寫入任何資料,因此之後仍可將它重新連結到此線軸或其他線軸。",
|
||||
"tags.unlinkBodyFilament": "解除後,標籤 {{uid}} 將不再識別這個線材。標籤本身不會寫入任何資料,因此之後仍可將它重新連結到此線材或其他項目。",
|
||||
"tags.unlinkFailed": "無法解除標籤連結。",
|
||||
"tags.unlinkTitle": "要解除此標籤的連結嗎?",
|
||||
"tags.unlinked": "已解除標籤連結。",
|
||||
"tags.unlinking": "正在解除連結...",
|
||||
"topbar.addSpools": "新增線軸",
|
||||
"topbar.searchPlaceholder": "搜尋,例如「red」或「pla」",
|
||||
"unknown": "未知",
|
||||
"validation.hexDigits": "請使用 6 位或 8 位十六進位字元",
|
||||
"validation.maxChars": "最多允許 {{max}} 個字元",
|
||||
"validation.mustBeGt": "必須大於 {{value}}",
|
||||
"validation.mustBeMax": "必須小於或等於 {{value}}",
|
||||
"validation.mustBeMin": "必須大於或等於 {{value}}",
|
||||
"validation.mustBeNumber": "必須為數字",
|
||||
"validation.required": "此項為必填項",
|
||||
"vendor.fields.comment": "備註",
|
||||
"vendor.fields.emptySpoolWeight": "空料盤重量",
|
||||
"vendor.fields.externalId": "外部ID",
|
||||
"vendor.fields.emptySpoolWeight": "空線軸重量",
|
||||
"vendor.fields.externalId": "外部 ID",
|
||||
"vendor.fields.id": "ID",
|
||||
"vendor.fields.name": "名稱",
|
||||
"vendor.fields.registered": "已登記",
|
||||
"vendor.fieldsHelp.emptySpoolWeight": "此製造商空線盤的重量。",
|
||||
"vendor.fieldsHelp.emptySpoolWeight": "此製造商空線軸的重量。",
|
||||
"yes": "是"
|
||||
}
|
||||
+569
-103
@@ -1,144 +1,610 @@
|
||||
{
|
||||
"buttons.archive": "存档",
|
||||
"add.addAndNew": "添加并新建",
|
||||
"add.addN_other": "添加 {{count}} 卷耗材",
|
||||
"add.adding": "正在添加...",
|
||||
"add.advanced": "高级参数",
|
||||
"add.advancedNote": "密度、直径、温度(将根据材质自动填充)",
|
||||
"add.change": "更改",
|
||||
"add.count": "数量",
|
||||
"add.createNew": "创建新耗材",
|
||||
"add.createNewSub": "未在您的目录中或 {{name}}",
|
||||
"add.dbUnavailable": "{{name}} 不可用",
|
||||
"add.duplicate": "创建副本",
|
||||
"add.duplicateNote": "规格、厂商和价格已复制。请为其指定新的名称和颜色。",
|
||||
"add.duplicateRename": "名称仍与原耗材相同 — 请重新命名以便区分。",
|
||||
"add.duplicateTitle": "新耗材 · {{name}} 的副本",
|
||||
"add.filamentNamePlaceholder": "例如:PolyTerra Matte Sage",
|
||||
"add.fill.full": "满卷",
|
||||
"add.fillLevel": "余量",
|
||||
"add.importNote": "当您添加耗材卷时,此耗材将被自动添加到您的目录中。",
|
||||
"add.inCatalog": "已在目录中",
|
||||
"add.locationHint": "耗材卷的实际存放位置 — 例如架子、干燥箱或打印机。如果您将所有耗材放在同一位置,可留空。",
|
||||
"add.locationPlaceholder": "例如:架子 A、干燥箱 2、打印机 1",
|
||||
"add.manufacturerPlaceholder": "例如:Polymaker",
|
||||
"add.nameHint": "建议包含颜色信息 — 这是区分不同耗材的关键。",
|
||||
"add.newFilament": "新耗材",
|
||||
"add.newFilamentTitle": "新建耗材",
|
||||
"add.noCatalog": "目录中暂无耗材",
|
||||
"add.noManufacturer": "无厂商",
|
||||
"add.pickColor": "选择颜色",
|
||||
"add.searchPlaceholder": "搜索您的目录和 {{name}}...",
|
||||
"add.searching": "正在搜索...",
|
||||
"add.section.filament": "耗材规格",
|
||||
"add.section.filamentNote": "耗材的产品规格 — 区分每一种颜色或材质。",
|
||||
"add.section.manufacturer": "厂商",
|
||||
"add.section.manufacturerNote": "耗材生产商。只需添加一次,即可重复用于其旗下的所有耗材。",
|
||||
"add.section.spool": "耗材卷",
|
||||
"add.section.spoolNote": "即将录入库存的实体耗材卷/盘。",
|
||||
"add.section.spoolSharedNote": "重量、线盘重和价格也将保存为新耗材的默认设置。",
|
||||
"add.spoolWeightPreset.cardboard": "纸质盘 {{weight}} 克",
|
||||
"add.spoolWeightPreset.plastic": "塑料盘 {{weight}} 克",
|
||||
"add.spoolWeightPresetsLead": "从标准线盘重量开始:",
|
||||
"add.step2": "步骤 2 · 耗材卷详情",
|
||||
"add.step2New": "步骤 2 · 耗材与线盘详情",
|
||||
"add.summary_other": "{{count}} 卷耗材",
|
||||
"add.typeToSearchAll": "输入内容以搜索数千种预设耗材",
|
||||
"add.typeToSearchMatches": "输入内容以搜索 — 无匹配项",
|
||||
"add.useExisting": "使用现有耗材",
|
||||
"add.vendorHint.existing": "使用现有厂商“{{name}}”",
|
||||
"add.vendorHint.new": "将创建新厂商“{{name}}”",
|
||||
"add.vendorHint.optional": "选填 — 留空表示不指定厂商",
|
||||
"add.weightPresets": "常见规格净重",
|
||||
"add.yourCatalog": "您的耗材目录",
|
||||
"buttons.apply": "应用",
|
||||
"buttons.archive": "归档",
|
||||
"buttons.cancel": "取消",
|
||||
"buttons.clear": "清除",
|
||||
"buttons.close": "关闭",
|
||||
"buttons.delete": "删除",
|
||||
"buttons.edit": "编辑",
|
||||
"buttons.filter": "筛选",
|
||||
"buttons.save": "保存",
|
||||
"buttons.showArchived": "显示存档",
|
||||
"buttons.unArchive": "取消存档",
|
||||
"buttons.showArchived": "显示已归档项",
|
||||
"buttons.showNoSpools": "显示没有耗材卷的耗材规格",
|
||||
"buttons.unArchive": "解除归档",
|
||||
"changeFilament.action": "更改",
|
||||
"changeFilament.adoptWeight": "将此卷的满盘净重设置为 {{full}}",
|
||||
"changeFilament.adoptWeightHelp": "先前记录的满盘净重为 {{current}}(来自更改前的耗材)。无论如何都会保留已使用重量({{used}}),剩余重量为 {{remaining}}。",
|
||||
"changeFilament.apply": "更改耗材",
|
||||
"changeFilament.applying": "正在更改...",
|
||||
"changeFilament.current": "当前",
|
||||
"changeFilament.done": "耗材已更改。",
|
||||
"changeFilament.failed": "无法更改耗材。",
|
||||
"changeFilament.importNote": "当您应用此更改时,此耗材将被添加到您的目录中。",
|
||||
"changeFilament.intro": "耗材卷 #{{id}} 将保留其编号、位置、日期和使用历史记录 — 仅更改其绑定的耗材类型。",
|
||||
"changeFilament.newTag": "新",
|
||||
"changeFilament.next": "更改为",
|
||||
"changeFilament.now": "当前为",
|
||||
"changeFilament.pickBelow": "请在下方选择耗材",
|
||||
"changeFilament.title": "更改耗材类型",
|
||||
"changeFilament.useExisting": "选择现有耗材",
|
||||
"changeFilament.weightFollows": "此耗材卷没有自定义满盘净重,因此将使用新耗材的设置:{{full}}。在扣除已使用的 {{used}} 后,剩余 {{remaining}}。",
|
||||
"changeVendor.action": "更改",
|
||||
"changeVendor.apply": "更改厂商",
|
||||
"changeVendor.applying": "正在更改...",
|
||||
"changeVendor.clearHint": "保持此耗材无厂商状态",
|
||||
"changeVendor.create": "创建“{{name}}”",
|
||||
"changeVendor.createHint": "尚不在您的厂商列表中 — 将自动添加",
|
||||
"changeVendor.current": "当前",
|
||||
"changeVendor.done": "厂商已更改。",
|
||||
"changeVendor.emptySpool": "空盘重 {{value}}",
|
||||
"changeVendor.failed": "无法更改厂商。",
|
||||
"changeVendor.intro": "“{{name}}” 将保留其下属的耗材卷、参数和历史记录 — 仅更改其归属的厂商分类。",
|
||||
"changeVendor.next": "更改为",
|
||||
"changeVendor.noEmptySpool": "未设置空盘重",
|
||||
"changeVendor.noMatches": "无匹配的厂商",
|
||||
"changeVendor.none": "暂无厂商",
|
||||
"changeVendor.noneNote": "未归类到任何品牌",
|
||||
"changeVendor.now": "当前为",
|
||||
"changeVendor.pickBelow": "请在下方选择厂商",
|
||||
"changeVendor.searchPlaceholder": "搜索或输入厂商名称",
|
||||
"changeVendor.tareFollows": "此耗材没有自定义空盘重,因此将继承其厂商的空盘重。更改后空盘重为 {{value}},即空盘实测的重量。",
|
||||
"changeVendor.tareGone": "此耗材原本继承了厂商的空盘重({{current}})。更改后将不再有可继承的空盘重,直到您为此耗材单独指定一个。",
|
||||
"changeVendor.title": "更改厂商",
|
||||
"changeVendor.willBeCreated": "将被创建",
|
||||
"common.decrement": "减少",
|
||||
"common.increment": "增加",
|
||||
"common.remove": "移除",
|
||||
"common.search": "搜索",
|
||||
"dashboard.addFieldHint": "在设置中为耗材卷添加文本或选择框扩展字段,即可在此按该字段分组",
|
||||
"dashboard.dashboard": "仪表盘",
|
||||
"dashboard.deleteGroup": "删除分组",
|
||||
"dashboard.dragHint": "拖动耗材卷到另一个卡片以更改其 {{field}},或在卡片内拖动以重新排序",
|
||||
"dashboard.dropHere": "将耗材卷拖放到此处",
|
||||
"dashboard.emptyHelp": "此页面按您选择的字段对耗材卷进行分组,请添加一些耗材卷以开始使用!",
|
||||
"dashboard.errorEmptyName": "名称不能为空",
|
||||
"dashboard.errorExists": "已存在同名分组",
|
||||
"dashboard.errorRename": "重命名分组失败",
|
||||
"dashboard.lastUsed": "上次使用于 {{time}} 前",
|
||||
"dashboard.newGroup": "新建分组",
|
||||
"dashboard.newGroupName": "新建分组 {{n}}",
|
||||
"dashboard.reorderGroup": "拖动以调整分组顺序",
|
||||
"dashboard.spoolCount_other": "{{count}} 卷耗材",
|
||||
"dashboard.unassigned": "未分配",
|
||||
"datetime.done": "完成",
|
||||
"datetime.hour": "时",
|
||||
"datetime.minute": "分",
|
||||
"datetime.nextMonth": "下个月",
|
||||
"datetime.now": "现在",
|
||||
"datetime.pick": "选择日期与时间",
|
||||
"datetime.prevMonth": "上个月",
|
||||
"datetime.time": "时间",
|
||||
"documentTitle.dashboard.list": "仪表盘 | Spoolman",
|
||||
"documentTitle.labels.list": "标签打印 | Spoolman",
|
||||
"documentTitle.library.list": "耗材库 | Spoolman",
|
||||
"documentTitle.locations.list": "位置 | Spoolman",
|
||||
"filament.fields.articleNumber": "产品编号",
|
||||
"filament.fields.coaxial": "共挤出",
|
||||
"documentTitle.settings.list": "设置 | Spoolman",
|
||||
"filament.fields.addColor": "添加颜色",
|
||||
"filament.fields.articleNumber": "商品货号",
|
||||
"filament.fields.coaxial": "双色共挤",
|
||||
"filament.fields.colorHex": "颜色",
|
||||
"filament.fields.colorType": "颜色类型",
|
||||
"filament.fields.comment": "备注",
|
||||
"filament.fields.density": "密度",
|
||||
"filament.fields.diameter": "直径",
|
||||
"filament.fields.externalId": "外部ID",
|
||||
"filament.fields.id": "编号",
|
||||
"filament.fields.longitudinal": "纵向",
|
||||
"filament.fields.material": "材料",
|
||||
"filament.fields.diameter": "线径",
|
||||
"filament.fields.externalId": "外部 ID",
|
||||
"filament.fields.id": "ID",
|
||||
"filament.fields.longitudinal": "纵向渐变",
|
||||
"filament.fields.material": "材质",
|
||||
"filament.fields.multiColor": "多色",
|
||||
"filament.fields.name": "名称",
|
||||
"filament.fields.opacity": "透明度",
|
||||
"filament.fields.price": "价格",
|
||||
"filament.fields.registered": "登记时间",
|
||||
"filament.fields.registered": "录入时间",
|
||||
"filament.fields.removeColor": "移除颜色",
|
||||
"filament.fields.settingsBedTemp": "热床温度",
|
||||
"filament.fields.settingsExtruderTemp": "挤出头温度",
|
||||
"filament.fields.settingsExtruderTemp": "挤出机温度",
|
||||
"filament.fields.singleColor": "单色",
|
||||
"filament.fields.spoolWeight": "料盘重量",
|
||||
"filament.fields.vendor": "制造商",
|
||||
"filament.fields.weight": "重量",
|
||||
"filament.fieldsHelp.articleNumber": "例如EAN、UPC等。",
|
||||
"filament.fieldsHelp.multiColorDirection": "耗材可以通过两种方式实现多种颜色:共挤出:例如双色耗材,具有稳定的多色组合。纵向颜色变化:例如渐变色耗材,颜色沿着料盘逐渐变化。",
|
||||
"filament.fieldsHelp.spoolWeight": "空料盘的重量。使用它来计算耗材的重量。",
|
||||
"filament.fieldsHelp.weight": "一整卷耗材的重量(净重)。不应包括料盘本身的重量,仅计算耗材的重量。通常在包装上注明。",
|
||||
"filament.filament": "耗材",
|
||||
"filament.fields.spoolWeight": "线盘重量",
|
||||
"filament.fields.vendor": "厂商",
|
||||
"filament.fields.weight": "耗材净重",
|
||||
"filament.fieldsHelp.articleNumber": "例如:EAN 条码、UPC 码等。",
|
||||
"filament.fieldsHelp.multiColorDirection": "多色耗材有两种形式:双色共挤(如双色同向变化的耗材)或纵向渐变(如随着线卷拉长而渐变颜色的耗材)。",
|
||||
"filament.fieldsHelp.spoolWeight": "空线盘自身的重量。用于根据实测毛重推算耗材余量。不确定?纸质线盘通常重 130–150g,塑料盘重 180–250g — 如需精确数值,可在用完后将空盘放在电子秤上称重。",
|
||||
"filament.fieldsHelp.weight": "未拆封满盘时的纯耗材重量(净重,不含线盘本身重量)。通常标注在产品包装盒上。",
|
||||
"filament.filament": "耗材规格",
|
||||
"footer.documentation": "帮助文档",
|
||||
"footer.reportIssue": "反馈问题",
|
||||
"help.help": "帮助",
|
||||
"inspector.addSpoolsOfThis": "添加此规格的耗材卷",
|
||||
"inspector.adjustFailed": "调整重量失败。",
|
||||
"inspector.adjustHelp": "正数表示消耗耗材,负数表示退回/增加耗材。",
|
||||
"inspector.adjustWeight": "调整用量/重量",
|
||||
"inspector.apply": "应用",
|
||||
"inspector.applying": "正在应用...",
|
||||
"inspector.colorHex": "颜色 HEX 码",
|
||||
"inspector.consumeAmount": "消耗数量:",
|
||||
"inspector.defaultFrom.filament": "{{value}} · 耗材默认值",
|
||||
"inspector.defaultFrom.manufacturer": "{{value}} · 厂商默认值",
|
||||
"inspector.delete.deleting": "正在删除...",
|
||||
"inspector.delete.errorGone": "该项目已被删除。",
|
||||
"inspector.delete.errorSpoolsExist": "无法删除此耗材 — 仍有耗材卷在使用它。",
|
||||
"inspector.delete.errorUnknown": "删除失败。详情请查看服务器日志。",
|
||||
"inspector.delete.filament": "删除耗材规格",
|
||||
"inspector.delete.filamentBlockedHint": "请先删除这些耗材卷。仅归档它们是不够的。",
|
||||
"inspector.delete.filamentBlockedTitle": "无法删除此耗材规格",
|
||||
"inspector.delete.filamentBlocked_other": "仍有 {{count}} 卷耗材正在使用“{{name}}”(包含已归档项)。",
|
||||
"inspector.delete.filamentBody": "“{{name}}” 将从您的目录中完全移除。此操作不可撤销。",
|
||||
"inspector.delete.filamentDone": "耗材规格已删除。",
|
||||
"inspector.delete.filamentTitle": "确认删除此耗材规格?",
|
||||
"inspector.delete.spool": "删除耗材卷",
|
||||
"inspector.delete.spoolBody": "耗材卷 #{{id}}(“{{name}}”)及其历史使用记录将被完全移除。此操作不可撤销。",
|
||||
"inspector.delete.spoolDone": "耗材卷已删除。",
|
||||
"inspector.delete.spoolRemaining": "该卷仍剩余 {{weight}} 耗材。如果您只是想清理界面,可以将其归档。",
|
||||
"inspector.delete.spoolTitle": "确认删除此耗材卷?",
|
||||
"inspector.delete.vendor": "删除厂商",
|
||||
"inspector.delete.vendorBody": "厂商“{{name}}”将被移除。此操作不可撤销。",
|
||||
"inspector.delete.vendorDone": "厂商已删除。",
|
||||
"inspector.delete.vendorOrphans_other": "其下的 {{count}} 种耗材将被保留,但会变为无厂商状态。",
|
||||
"inspector.delete.vendorTitle": "确认删除此厂商?",
|
||||
"inspector.duplicateFilament": "创建副本",
|
||||
"inspector.empty": "请从列表中选择耗材卷、耗材规格或厂商以在此查看详情。",
|
||||
"inspector.enterValidLength": "请输入有效的长度。",
|
||||
"inspector.enterValidWeight": "请输入有效的重量。",
|
||||
"inspector.loading": "正在加载...",
|
||||
"inspector.manageExtraFields": "管理自定义字段",
|
||||
"inspector.measuredHelp": "线盘 + 剩余耗材的电子秤实测总毛重。",
|
||||
"inspector.multi": "多色 ×{{count}}",
|
||||
"inspector.newGross": "新的实测总毛重:",
|
||||
"inspector.noExtraFields": "暂无扩展字段 — 您可以添加自定义字段来跟踪 Spoolman 未涵盖的属性。",
|
||||
"inspector.notFound": "未找到该项目,可能已被删除。",
|
||||
"inspector.ofRemaining": "剩余 {{weight}} (约 {{length}} 米)",
|
||||
"inspector.openFilament": "打开耗材规格",
|
||||
"inspector.openLink": "在新标签页中打开 {{url}}",
|
||||
"inspector.openManufacturer": "打开厂商",
|
||||
"inspector.override.byFilament": "已被此耗材覆盖 · {{value}}",
|
||||
"inspector.override.bySpool": "已被此耗材卷覆盖 · {{value}}",
|
||||
"inspector.override.overridesFilament": "覆盖了耗材预设 · {{value}}",
|
||||
"inspector.override.overridesManufacturer": "覆盖了厂商预设 · {{value}}",
|
||||
"inspector.specs": "规格参数 — 单击直接编辑",
|
||||
"inspector.spoolsCount": "耗材卷数 · {{count}}",
|
||||
"inspector.spoolsTotalRemaining": "总剩余 {{weight}}",
|
||||
"inspector.used": "已使用",
|
||||
"inspector.vendorSub_other": "{{count}} 种耗材",
|
||||
"kofi": "在Ko-fi上给我打赏一点小费",
|
||||
"labels.addHead": "添加元素",
|
||||
"labels.addQr": "二维码",
|
||||
"labels.addRect": "矩形框",
|
||||
"labels.addSwatch": "颜色色块",
|
||||
"labels.addText": "文本 / 字段",
|
||||
"labels.align": "对齐方式",
|
||||
"labels.alignCenter": "居中",
|
||||
"labels.alignLeft": "左对齐",
|
||||
"labels.alignRight": "右对齐",
|
||||
"labels.blank": "您还没有任何标签设计样式。",
|
||||
"labels.bold": "加粗",
|
||||
"labels.canvasHint": "拖动以移动 · 点击以选择 · 拖拽边角以调整大小。",
|
||||
"labels.centerLogo": "居中显示 Spoolman 图标",
|
||||
"labels.chooseField": "选择属性字段...",
|
||||
"labels.clearFill": "无填充(仅保留外框)",
|
||||
"labels.copies": "打印份数",
|
||||
"labels.cornerRadiusMm": "圆角半径",
|
||||
"labels.createFirst": "创建您的第一个标签样式",
|
||||
"labels.cutGuides": "剪裁参考线",
|
||||
"labels.deleteConfirm": "确认删除此标签设计?",
|
||||
"labels.deleteElement": "删除元素",
|
||||
"labels.designName": "设计样式名称",
|
||||
"labels.designerDesc": "可使用任意耗材卷、耗材或厂商字段自定义二维码标签,并支持在整张标签纸或热敏标签打印机上打印。设计将保存在服务器端。",
|
||||
"labels.designerTitle": "标签设计器",
|
||||
"labels.dpi": "打印分辨率",
|
||||
"labels.dpiHint": "匹配您的打印机参数以保持微细标签清晰:大多数热敏标签打印机选择 203 dpi,激光和喷墨打印机选择 300 dpi 或更高。",
|
||||
"labels.duplicate": "创建副本",
|
||||
"labels.exportDescAml": "为选中的每个标签生成一个 .aml 文件(尺寸 {{w}}×{{h}} mm)。大多数热敏打印机附带的 LPAPI 软件支持读取此类文件中的物理尺寸。",
|
||||
"labels.exportDescPng": "为选中的每个标签生成一张 PNG 图片(尺寸 {{w}}×{{h}} mm)。",
|
||||
"labels.exportFormat": "导出文件格式",
|
||||
"labels.exportFormatOptions.aml": "AML 标签文件",
|
||||
"labels.exportFormatOptions.png": "PNG 图片",
|
||||
"labels.fields.bedTemp": "热床温度",
|
||||
"labels.fields.diameterMm": "线径 (mm)",
|
||||
"labels.fields.groupVendor": "厂商",
|
||||
"labels.fields.initialG": "初始总重 (g)",
|
||||
"labels.fields.netWeightG": "耗材净重 (g)",
|
||||
"labels.fields.remainingG": "剩余重量 (g)",
|
||||
"labels.filamentsSelected_other": "已选择 {{count}} 种耗材",
|
||||
"labels.fill": "填充颜色",
|
||||
"labels.fitWidth": "按列数自动适应宽度",
|
||||
"labels.fitWidthHint": "自动设置标签宽度,使所选的列数正好填满整张页面。",
|
||||
"labels.fontMm": "字号",
|
||||
"labels.gridInfo": "{{cols}} 列 × {{rows}} 行 = 每页 {{perPage}} 个标签",
|
||||
"labels.hMm": "高",
|
||||
"labels.heightMm": "高度",
|
||||
"labels.hintNowrap": "文本保持单行显示,超出宽度的部分将被截断。",
|
||||
"labels.hintSwatch": "打印时会自动填充为该耗材卷对应的颜色。",
|
||||
"labels.hintWrap": "将字段包裹在条件语句中,以便在为空时隐藏:",
|
||||
"labels.imageDesc": "",
|
||||
"labels.imageZipNote": "当标签数量超过 {{threshold}} 个时,将打包为 ZIP 压缩包下载。",
|
||||
"labels.insertField": "插入变量字段",
|
||||
"labels.kind.qr": "二维码",
|
||||
"labels.kind.rect": "矩形框",
|
||||
"labels.kind.swatch": "色块",
|
||||
"labels.kind.text": "文本",
|
||||
"labels.labelSize": "标签尺寸",
|
||||
"labels.labelType": "标签类型",
|
||||
"labels.layout": "版面布局",
|
||||
"labels.modeImage": "图像文件导出",
|
||||
"labels.modeLabel": "卷筒标签打印机",
|
||||
"labels.modeSheet": "平铺纸张 (拼版)",
|
||||
"labels.new": "新建",
|
||||
"labels.newText": "新文本框",
|
||||
"labels.noDesignsOption": "暂无设计",
|
||||
"labels.noFilaments": "无耗材规格。",
|
||||
"labels.noSpools": "无耗材卷。",
|
||||
"labels.onePerLabel": "每个标签占用一页({{w}}×{{h}} mm)。",
|
||||
"labels.preparing": "正在准备...",
|
||||
"labels.preview": "预览",
|
||||
"labels.previewWith": "预览数据源",
|
||||
"labels.printN_other": "打印 {{count}} 张标签",
|
||||
"labels.radiusMm": "弧度",
|
||||
"labels.sampleData": "示例数据",
|
||||
"labels.saveAsFormat": "另存为 {{format}}",
|
||||
"labels.saved": "已保存",
|
||||
"labels.saving": "正在保存...",
|
||||
"labels.searchFilaments": "搜索耗材规格...",
|
||||
"labels.searchSpools": "搜索耗材卷...",
|
||||
"labels.selectAllShort": "全选",
|
||||
"labels.selectAtLeastOne": "请至少选择一卷耗材。",
|
||||
"labels.selectAtLeastOneFilament": "请至少选择一种耗材。",
|
||||
"labels.selectDesign": "选择标签样式",
|
||||
"labels.selectElement": "选择要编辑的元素,或从工具栏添加新元素。",
|
||||
"labels.selectNoneShort": "取消全选",
|
||||
"labels.selectRecentHint": "选择在过去 24 小时内添加的耗材卷",
|
||||
"labels.selectRecentShort": "近期新增 ({{count}})",
|
||||
"labels.showingFilament": "正在显示耗材规格 #{{id}}",
|
||||
"labels.showingReal": "正在显示真实耗材卷数据。",
|
||||
"labels.showingSpool": "正在显示耗材卷 #{{id}}",
|
||||
"labels.showingTags": "在上方选择具体的耗材卷之前,字段将显示为占位标签。",
|
||||
"labels.sizeMm": "尺寸",
|
||||
"labels.skipHint": "跳过格子可以在第一张标签前保留空位,方便您继续使用已打过一部分的标签纸:从左到右、从上到下数出已被撕掉的标签数量即可。",
|
||||
"labels.sortHint": "排序方式",
|
||||
"labels.sortId": "编号",
|
||||
"labels.sortNewest": "最新录入",
|
||||
"labels.stroke": "描边颜色",
|
||||
"labels.strokeMm": "描边粗细",
|
||||
"labels.tabDesign": "画布设计",
|
||||
"labels.tabPrint": "打印设置",
|
||||
"labels.textTemplate": "文本 / 模板",
|
||||
"labels.typeFilament": "耗材规格标签",
|
||||
"labels.typeHint": "耗材规格标签不包含单卷专属字段,其二维码将直接链接到该耗材类型而非特定耗材卷。",
|
||||
"labels.typeSpool": "实体耗材卷标签",
|
||||
"labels.unknownFilament": "未知耗材",
|
||||
"labels.wMm": "宽",
|
||||
"labels.widthMm": "宽度",
|
||||
"labels.wrapText": "自动换行",
|
||||
"labels.xMm": "X 坐标",
|
||||
"labels.yMm": "Y 坐标",
|
||||
"library.apiError": "无法连接到 Spoolman API,请检查后端服务是否正常运行?",
|
||||
"library.collapseGroup": "折叠这些耗材卷",
|
||||
"library.dateFilter.ago": "{{span}} 前",
|
||||
"library.dateFilter.between": "{{from}} – {{to}}",
|
||||
"library.dateFilter.customRange": "自定义时间段",
|
||||
"library.dateFilter.from": "起始时间",
|
||||
"library.dateFilter.last": "最近 {{span}}",
|
||||
"library.dateFilter.never": "从未",
|
||||
"library.dateFilter.olderThan": "早于 {{span}}",
|
||||
"library.dateFilter.since": "自 {{date}} 起",
|
||||
"library.dateFilter.to": "截止时间(选填)",
|
||||
"library.dateFilter.until": "截至 {{date}}",
|
||||
"library.emptyBody": "添加您的第一卷耗材,开始管理您的打印库。",
|
||||
"library.emptyFiltered": "没有符合当前筛选条件的 {{unit}}。",
|
||||
"library.emptyTitle": "暂无耗材卷",
|
||||
"library.expandGroup": "展开这些耗材卷",
|
||||
"library.filterBy": "筛选依据",
|
||||
"library.groupBy": "分组依据",
|
||||
"library.groupNone": "不分组(平铺)",
|
||||
"library.groupSpools_other": "{{count}} 卷耗材",
|
||||
"library.nUnused": "×{{count}} 卷未拆封",
|
||||
"library.noLocation": "未指定存放位置",
|
||||
"library.noSpools": "无耗材卷",
|
||||
"library.noValues": "无数据",
|
||||
"library.openGroup": "打开 {{name}}",
|
||||
"library.openManufacturer": "打开厂商 {{name}}",
|
||||
"library.resizeList": "调整列表宽度(双击复位)",
|
||||
"library.reverseSort": "切换升序/降序排序",
|
||||
"library.section.extra": "扩展字段",
|
||||
"library.section.filament": "耗材规格",
|
||||
"library.section.spool": "耗材卷",
|
||||
"library.section.vendor": "厂商",
|
||||
"library.showMore": "展开剩余 {{count}} 项",
|
||||
"library.sort.nozzle": "喷头温度",
|
||||
"library.sortBy": "排序依据",
|
||||
"library.unassigned": "未分配",
|
||||
"library.unitGroups": "组",
|
||||
"library.unitSpools": "卷",
|
||||
"library.unused": "未拆封/未使用",
|
||||
"library.unusedGroup": "{{count}} 卷未拆封 · 每卷 {{weight}} 克",
|
||||
"library.unusedGroupMixed": "{{count}} 卷未拆封",
|
||||
"library.unusedSub": "每卷 {{weight}} 克 · 位于 {{location}}",
|
||||
"library.unusedSubMixed": "位于 {{location}}",
|
||||
"library.used": "已拆封/使用中",
|
||||
"library.usedAgo": "上次使用于 {{time}} 前",
|
||||
"loading": "加载中",
|
||||
"locations.locations": "位置",
|
||||
"locations.newLocation": "新位置",
|
||||
"locations.noLocation": "没有位置",
|
||||
"locations.noLocationsHelp": "此页面允许您在不同位置管理料盘,添加一些料盘即可开始!",
|
||||
"nav.labels": "标签打印",
|
||||
"nav.library": "耗材库存",
|
||||
"no": "否",
|
||||
"notifications.error": "出现错误 (状态码:{{statusCode}})",
|
||||
"notifications.error": "发生错误 (状态码:{{statusCode}})",
|
||||
"notifications.saveSuccessful": "保存成功!",
|
||||
"printing.generic.columns": "行",
|
||||
"printing.generic.customSize": "自定义",
|
||||
"printing.generic.description": "调整以下设置以获得所需的打印布局。请记住,打印机和您的操作系统可能会应用自己的边距和缩放,因此您可能需要多次尝试后才能正确打印。在实际标签上打印之前,请在一张普通纸上进行测试。",
|
||||
"printing.generic.dimensions": "尺寸标注",
|
||||
"printing.generic.helpMargin": "页边距应设置为与您的标签纸和打印机相匹配,更改这些将影响整个网格的大小。",
|
||||
"printing.generic.helpPrinterMargin": "安全区应设置为打印机可以打印的离纸张边缘距离,更改这些不会影响整个网格。",
|
||||
"printing.generic.horizontalSpacing": "水平间距",
|
||||
"printing.generic.itemCopies": "复制项目",
|
||||
"printing.generic.marginBottom": "下边界",
|
||||
"printing.generic.marginLeft": "左边界",
|
||||
"printing.generic.marginRight": "右边界",
|
||||
"printing.generic.marginTop": "上边界",
|
||||
"pagination.empty": "没有 {{unit}}",
|
||||
"pagination.next": "下一页",
|
||||
"pagination.pageSize": "每页显示",
|
||||
"pagination.perPage": "{{size}} 条/页",
|
||||
"pagination.prev": "上一页",
|
||||
"pagination.range": "第 {{from}}–{{to}} 条,共 {{total}} 条 {{unit}}",
|
||||
"printing.generic.columns": "列数",
|
||||
"printing.generic.customSize": "自定义尺寸",
|
||||
"printing.generic.description": "在下方微调设置以获取理想的打印布局。请注意,打印机驱动和操作系统可能会自动应用边距与缩放,因此您可能需要进行几次试打印。建议在正式打印前先用普通纸测试。",
|
||||
"printing.generic.dimensions": "尺寸规格",
|
||||
"printing.generic.gridTooWide": "标签排版宽度已超出页面总宽。请减少列数、缩小间距或调整页边距。",
|
||||
"printing.generic.helpMargin": "页边距应与您的标签纸和打印机相匹配,修改此项会影响整个标签网格的位置。",
|
||||
"printing.generic.helpPrinterMargin": "安全打印区域应设置为打印机允许贴近纸张边缘打印的极限距离,修改此项不会改变标签网格的位置。",
|
||||
"printing.generic.horizontalSpacing": "列间距 (水平)",
|
||||
"printing.generic.itemCopies": "单个标签打印份数",
|
||||
"printing.generic.marginBottom": "下边距",
|
||||
"printing.generic.marginLeft": "左边距",
|
||||
"printing.generic.marginRight": "右边距",
|
||||
"printing.generic.marginTop": "上边距",
|
||||
"printing.generic.paperSize": "纸张尺寸",
|
||||
"printing.generic.printerMarginBottom": "安全区底部",
|
||||
"printing.generic.printerMarginLeft": "安全区左侧",
|
||||
"printing.generic.printerMarginRight": "安全区右侧",
|
||||
"printing.generic.printerMarginTop": "安全区顶部",
|
||||
"printing.generic.printerMarginBottom": "底部安全区域",
|
||||
"printing.generic.printerMarginLeft": "左侧安全区域",
|
||||
"printing.generic.printerMarginRight": "右侧安全区域",
|
||||
"printing.generic.printerMarginTop": "顶部安全区域",
|
||||
"printing.generic.saveAsImage": "保存为图片",
|
||||
"printing.generic.skipItems": "跳过项目",
|
||||
"printing.generic.verticalSpacing": "垂直间距",
|
||||
"printing.generic.skipItems": "跳过初始格子数",
|
||||
"printing.generic.verticalSpacing": "行间距 (垂直)",
|
||||
"printing.qrcode.button": "打印标签",
|
||||
"printing.qrcode.useHTTPUrl.label": "二维码链接",
|
||||
"printing.qrcode.useHTTPUrl.options.default": "默认",
|
||||
"printing.qrcode.useHTTPUrl.options.url": "URL",
|
||||
"printing.qrcode.customUrl.caveat": "自定义 URL 编码的二维码将无法直接被 Spoolman 内置扫描器读取 — 常用于引导扫描跳转到外部软件或第三方网页。",
|
||||
"printing.qrcode.customUrl.hint": "可使用占位符将耗材卷 ID 插入到链接的任意位置",
|
||||
"printing.qrcode.customUrl.label": "自定义 URL 模板",
|
||||
"printing.qrcode.useHTTPUrl.label": "二维码编码内容",
|
||||
"printing.qrcode.useHTTPUrl.options.custom": "自定义网页 URL",
|
||||
"printing.qrcode.useHTTPUrl.options.default": "默认(Spoolman 专属格式)",
|
||||
"printing.qrcode.useHTTPUrl.options.url": "标准网页 URL",
|
||||
"printing.qrcode.useHTTPUrl.preview": "预览:",
|
||||
"printing.qrcode.useHTTPUrl.tooltip": "将使用专有链接(默认情况下,仅能通过 **Spoolman** 的扫描功能访问)。URL 将使用设置中指定的基础 URL;如果未设置基础 URL,则使用当前页面的 URL。",
|
||||
"printing.spoolSelect.selectedTotal_other": "已选择{{count}}个料盘",
|
||||
"scanner.description": "扫描Spoolman二维码,查看有关料盘的详细信息。",
|
||||
"scanner.error.insecureContext": "该页面不是通过HTTPS传输。",
|
||||
"scanner.error.notAllowed": "您不被允许访问相机。",
|
||||
"scanner.error.notFound": "没有找到相机。",
|
||||
"scanner.error.streamApiNotSupported": "浏览器不支持MediaStream API。",
|
||||
"scanner.error.unknown": "发生未知错误。({{error}})",
|
||||
"scanner.title": "扫码二维码",
|
||||
"printing.qrcode.useHTTPUrl.tooltip": "默认选项将生成仅供 Spoolman 内部扫描器识别的编码。网页 URL 选项将生成通用的网址链接,任何扫码设备均可打开,其基准网址取自系统设置(若未设置则取当前页面网址)。",
|
||||
"printing.spoolSelect.selectedTotal_other": "已选择 {{count}} 卷耗材",
|
||||
"scanner.description": "扫描 Spoolman 专属二维码以快速查看该耗材卷的详细信息。",
|
||||
"scanner.error.inUse": "摄像头正在被其他应用程序使用。",
|
||||
"scanner.error.insecureContext": "当前页面未通过安全的 HTTPS 协议提供服务。",
|
||||
"scanner.error.notAllowed": "您尚未授权允许使用摄像头。",
|
||||
"scanner.error.notFound": "未检测到可用摄像头。",
|
||||
"scanner.error.streamApiNotSupported": "当前浏览器不支持 MediaStream API 视频流。",
|
||||
"scanner.error.unknown": "发生未知错误。({{error}})",
|
||||
"scanner.starting": "正在启动摄像头...",
|
||||
"scanner.title": "二维码扫描器",
|
||||
"search.colorHint": "颜色名称必须输入英文(如 red、blue)。",
|
||||
"search.moreSpools": "+剩余 {{count}} 卷",
|
||||
"search.noResults": "未找到匹配项",
|
||||
"search.searching": "正在搜索...",
|
||||
"search.section.filaments": "耗材规格",
|
||||
"search.section.spools": "耗材卷",
|
||||
"search.section.vendors": "厂商",
|
||||
"search.threshold": "颜色匹配容差",
|
||||
"search.unknownFilament": "未知耗材",
|
||||
"settings.appearance.tab": "外观",
|
||||
"settings.appearance.theme.dark": "深色模式",
|
||||
"settings.appearance.theme.desc": "界面配色主题(仅对当前浏览器生效)",
|
||||
"settings.appearance.theme.label": "主题设置",
|
||||
"settings.appearance.theme.light": "浅色模式",
|
||||
"settings.appearance.theme.system": "跟随系统",
|
||||
"settings.extraFields.addChoice": "添加选项...",
|
||||
"settings.extraFields.addChoicesFirst": "请先添加预设选项",
|
||||
"settings.extraFields.addEntityField": "添加{{entity}}字段",
|
||||
"settings.extraFields.booleanFalse": "否",
|
||||
"settings.extraFields.booleanTrue": "是",
|
||||
"settings.extraFields.deleteConfirm": "删除字段 {{name}}?",
|
||||
"settings.extraFields.description.intro": "这里你可以为你的实体添加额外的自定义字段。",
|
||||
"settings.extraFields.description.constraints": "一旦添加了字段,就无法更改其键或类型;对于选择类型字段,无法删除选项或更改多选状态。如果删除字段,则所有实体的相关数据将被删除。",
|
||||
"settings.extraFields.description.keyUsage": "键是其他程序读取/写入数据的标识,因此,如果你的自定义字段需要与第三方程序集成,请确保设置正确。默认值仅适用于新项目。",
|
||||
"settings.extraFields.description.tableViews": "额外字段在表视图中无法进行排序或过滤。",
|
||||
"settings.extraFields.fieldType.boolean": "布尔类型",
|
||||
"settings.extraFields.fieldType.choice": "选项",
|
||||
"settings.extraFields.fieldType.datetime": "日期时间",
|
||||
"settings.extraFields.fieldType.float": "浮点数",
|
||||
"settings.extraFields.fieldType.floatRange": "浮点数范围",
|
||||
"settings.extraFields.fieldType.integer": "整数",
|
||||
"settings.extraFields.fieldType.integerRange": "整数范围",
|
||||
"settings.extraFields.fieldType.text": "文本",
|
||||
"settings.extraFields.nonUniqueKeyError": "键必须是唯一的。",
|
||||
"settings.extraFields.params.choices": "选择项",
|
||||
"settings.extraFields.deleteConfirm": "确认删除{{entity}}上的字段“{{name}}”?",
|
||||
"settings.extraFields.description.constraints": "字段一旦添加,其键名 (Key) 和数据类型将无法修改;对于单选/多选字段,已有的选项将无法删除或更改其多选状态。如果您删除某个字段,所有对应实体中存储的该字段数据都将被永久抹除。",
|
||||
"settings.extraFields.description.intro": "您可以在此处为不同的实体对象添加自定义扩展字段。",
|
||||
"settings.extraFields.description.keyUsage": "键名 (Key) 是第三方程序读取/写入数据时使用的唯一标识。如果您需要将自定义字段与第三方程序(如 Klipper 宏/Moonraker)集成,请务必设置正确的键名。默认值仅应用于新建的项目。",
|
||||
"settings.extraFields.description.tableViews": "扩展字段可以显示在表格视图中并支持排序。单选框与布尔值字段还提供相应的筛选选项,且所有扩展字段类型均支持筛选空值。",
|
||||
"settings.extraFields.editorEdit": "编辑{{entity}}字段",
|
||||
"settings.extraFields.editorNew": "新建{{entity}}字段",
|
||||
"settings.extraFields.errors.choiceNeeded": "选项类字段必须至少包含一个预设选项。",
|
||||
"settings.extraFields.errors.choicesRemoved": "不能删除已存在的选项:{{choices}}。",
|
||||
"settings.extraFields.errors.deleteFailed": "删除字段失败。",
|
||||
"settings.extraFields.errors.keyFormat": "键名只能包含小写字母、数字和下划线。",
|
||||
"settings.extraFields.errors.nameRequired": "名称为必填项。",
|
||||
"settings.extraFields.errors.saveFailed": "保存字段失败。",
|
||||
"settings.extraFields.fieldType.boolean": "布尔值 (Boolean)",
|
||||
"settings.extraFields.fieldType.choice": "下拉单选/多选 (Choice)",
|
||||
"settings.extraFields.fieldType.datetime": "日期时间 (Datetime)",
|
||||
"settings.extraFields.fieldType.float": "浮点数 (Float)",
|
||||
"settings.extraFields.fieldType.floatRange": "浮点数范围 (Float Range)",
|
||||
"settings.extraFields.fieldType.integer": "整数 (Integer)",
|
||||
"settings.extraFields.fieldType.integerRange": "整数范围 (Integer Range)",
|
||||
"settings.extraFields.fieldType.text": "单行文本 (Text)",
|
||||
"settings.extraFields.max": "最大值",
|
||||
"settings.extraFields.min": "最小值",
|
||||
"settings.extraFields.multiSuffix": " · 多选",
|
||||
"settings.extraFields.multiple": "允许多选",
|
||||
"settings.extraFields.namePlaceholder": "界面显示名称",
|
||||
"settings.extraFields.nonUniqueKeyError": "键名必须全局唯一。",
|
||||
"settings.extraFields.none": "尚未定义{{entity}}的扩展字段。",
|
||||
"settings.extraFields.params.choices": "选项列表",
|
||||
"settings.extraFields.params.defaultValue": "默认值",
|
||||
"settings.extraFields.params.fieldType": "类型",
|
||||
"settings.extraFields.params.key": "键",
|
||||
"settings.extraFields.params.name": "名称",
|
||||
"settings.extraFields.params.order": "顺序",
|
||||
"settings.extraFields.params.fieldType": "字段类型",
|
||||
"settings.extraFields.params.key": "键名 (Key)",
|
||||
"settings.extraFields.params.name": "显示名称",
|
||||
"settings.extraFields.params.order": "排序位置",
|
||||
"settings.extraFields.params.unit": "单位",
|
||||
"settings.extraFields.tab": "额外字段",
|
||||
"settings.general.baseUrl.label": "基础URL",
|
||||
"settings.general.baseUrl.tooltip": "生成功能(例如二维码)时使用的基础 URL。",
|
||||
"settings.general.currency.label": "货币",
|
||||
"settings.general.roundPrices.label": "取整",
|
||||
"settings.general.roundPrices.tooltip": "将价格四舍五入到最接近的整数。",
|
||||
"settings.general.tab": "常规",
|
||||
"settings.header": "设置",
|
||||
"spool.fields.archived": "存档",
|
||||
"settings.extraFields.reorderChoice": "拖动或使用方向键调整此选项的顺序。",
|
||||
"settings.extraFields.saveField": "保存字段",
|
||||
"settings.extraFields.tab": "扩展字段设置",
|
||||
"settings.general.baseUrl.label": "系统基准 URL",
|
||||
"settings.general.baseUrl.tooltip": "用于生成二维码等功能时的基准网址根路径。",
|
||||
"settings.general.currency.desc": "用于价格显示的 ISO 三位字母货币代码(例如:CNY、EUR、USD)",
|
||||
"settings.general.currency.label": "货币单位",
|
||||
"settings.general.roundPrices.label": "价格四舍五入",
|
||||
"settings.general.roundPrices.tooltip": "将价格自动取整显示。",
|
||||
"settings.general.tab": "常规设置",
|
||||
"settings.header": "系统设置",
|
||||
"settings.language.desc": "界面显示语言(仅对当前浏览器生效)",
|
||||
"settings.language.label": "显示语言",
|
||||
"settings.library.lowThreshold.desc": "当耗材剩余重量等于或低于此设定值时,将在界面标红警示(仅对当前浏览器生效)",
|
||||
"settings.library.lowThreshold.label": "低库存警告阈值",
|
||||
"settings.library.tab": "耗材库偏好",
|
||||
"settings.scanner.autoNavigate.desc": "当感应器读卡器读取到标签时,在此浏览器中自动跳转到对应的耗材卷页面。",
|
||||
"settings.scanner.autoNavigate.label": "读卡自动跳转",
|
||||
"settings.scanner.docs": "如何配置标签读卡器",
|
||||
"settings.scanner.lastSeen": "{{when}} 前激活",
|
||||
"settings.scanner.pair": "靠近感应以配对",
|
||||
"settings.scanner.reader.anyDesc": "在此浏览器中打开时,接受来自任意读卡器的扫描信号。如果您需要更精细的控制,可以配对指定的读卡器。此外该设备也将用于为耗材卷绑定新标签。",
|
||||
"settings.scanner.reader.label": "标签读卡器",
|
||||
"settings.scanner.reader.pairedDesc": "在此浏览器中,仅接受来自此指定读卡器的扫描信号。",
|
||||
"settings.scanner.recent": "近期活跃的读卡器",
|
||||
"settings.scanner.recentNone": "内存中无已记录的读卡器,请设置读卡器并刷任意标签以使其显示在此处。",
|
||||
"settings.scanner.tab": "标签扫描",
|
||||
"settings.scanner.unpair": "接受任意读卡器",
|
||||
"settings.scanner.use": "绑定此读卡器",
|
||||
"settings.scanner.waiting": "请将任意标签贴近您想要绑定的读卡器...",
|
||||
"sponsor": "在 GitHub 上赞助项目",
|
||||
"spool.fields.archived": "已归档",
|
||||
"spool.fields.comment": "备注",
|
||||
"spool.fields.filament": "耗材",
|
||||
"spool.fields.filament": "耗材规格",
|
||||
"spool.fields.firstUsed": "首次使用",
|
||||
"spool.fields.id": "编号",
|
||||
"spool.fields.lastUsed": "最后使用",
|
||||
"spool.fields.location": "位置",
|
||||
"spool.fields.lotNr": "批号",
|
||||
"spool.fields.material": "材料",
|
||||
"spool.fields.measuredWeight": "净重",
|
||||
"spool.fields.price": "价格",
|
||||
"spool.fields.registered": "登记时间",
|
||||
"spool.fields.id": "编号 (ID)",
|
||||
"spool.fields.lastUsed": "上次使用",
|
||||
"spool.fields.location": "存放位置",
|
||||
"spool.fields.lotNr": "生产批次号",
|
||||
"spool.fields.material": "材质",
|
||||
"spool.fields.measuredWeight": "实测毛重",
|
||||
"spool.fields.price": "采购价格",
|
||||
"spool.fields.registered": "录入时间",
|
||||
"spool.fields.remainingWeight": "剩余重量",
|
||||
"spool.fields.spoolWeight": "线盘重量",
|
||||
"spool.fields.usedWeight": "已用重量",
|
||||
"spool.fieldsHelp.location": "如果您有多个存放料盘的地方,请填写料盘所在的位置。",
|
||||
"spool.fieldsHelp.lotNr": "制造商的批号。如果使用多个料盘可以使用批号进行控制,以确保打印颜色一致。",
|
||||
"spool.fieldsHelp.measuredWeight": "耗材和料盘的重量分别是多少。",
|
||||
"spool.fieldsHelp.price": "整卷料盘的价格。如果未设置,则默认使用该耗材的价格。",
|
||||
"spool.fieldsHelp.remainingWeight": "料盘上剩余多少耗材。对于新的料盘,这个值应该与料盘重量相匹配。",
|
||||
"spool.fieldsHelp.usedWeight": "料盘已使用的耗材重量。一个新的料盘应该是0克。",
|
||||
"spool.form.measurementType.length": "长度",
|
||||
"spool.form.measurementType.weight": "重量",
|
||||
"spool.spool": "料盘",
|
||||
"spool.fields.weight": "初始耗材净重",
|
||||
"spool.fieldsHelp.location": "您实际存放此卷耗材的位置 — 例如搁架、抽屉、干燥箱或当前挂载的打印机。耗材库按位置分组,方便您快速取用。",
|
||||
"spool.fieldsHelp.lotNr": "厂商出厂批号。当打印大型模型需要消耗多卷耗材时,核对批号可确保颜色毫无色差。",
|
||||
"spool.fieldsHelp.measuredWeight": "耗材线材 + 线盘盘体放在电子秤上称出的整体总毛重。",
|
||||
"spool.fieldsHelp.price": "整卷耗材的购买价格。如果不填,系统将默认采用对应耗材规格预设的价格。",
|
||||
"spool.fieldsHelp.remainingWeight": "此卷耗材当前剩余的纯线材重量。对于全新未拆封的耗材,该值应等于初始净重。",
|
||||
"spool.fieldsHelp.spoolWeight": "空线盘本身的重量。留空则自动继承该耗材规格的默认盘重;仅当该特例线盘有差异时单独设置(例如重新倒线换了盘、或者把纸盘换成了塑料盘)。使用实测毛重校准余量时系统会自动扣除此重量,填写错误会导致计算出的剩余线量不准。",
|
||||
"spool.fieldsHelp.usedWeight": "此卷耗材已经被消耗掉的重量。全新的耗材卷已用重量应为 0g。",
|
||||
"spool.fieldsHelp.weight": "满盘时装载的纯线材净重(不含线盘本身)。留空则继承耗材规格的默认净重;仅当该卷属于特例(如非标分装卷、大容量卷)时单独填写。",
|
||||
"spool.form.measurementType.length": "按长度",
|
||||
"spool.form.measurementType.weight": "按重量",
|
||||
"spool.spool": "耗材卷",
|
||||
"tags.add": "绑定新标签",
|
||||
"tags.added": "标签已成功关联。",
|
||||
"tags.addedOn": "绑定于 {{date}}",
|
||||
"tags.modal.alreadyHere": "此标签已经与该耗材卷绑定。",
|
||||
"tags.modal.badUid": "标签 UID 应为十六进制格式,如 04A2B3C4。",
|
||||
"tags.modal.checking": "正在校验...",
|
||||
"tags.modal.failed": "无法关联标签。",
|
||||
"tags.modal.free": "此标签尚未绑定任何对象。",
|
||||
"tags.modal.intro": "在读卡器上刷此标签将直接定位到耗材卷 #{{id}}。",
|
||||
"tags.modal.lastSeenOn": "{{reader}} 上次阅读了 {{uid}}。",
|
||||
"tags.modal.link": "关联标签",
|
||||
"tags.modal.linking": "正在关联...",
|
||||
"tags.modal.move": "将其从 #{{id}} 转移绑定至当前卷",
|
||||
"tags.modal.moveFailed": "无法转移标签。该标签当前可能未与任何耗材卷绑定 — 请重试关联。",
|
||||
"tags.modal.moving": "正在转移...",
|
||||
"tags.modal.phoneReading": "请将标签贴近手机 NFC 区域...",
|
||||
"tags.modal.phoneScan": "使用当前手机读取标签",
|
||||
"tags.modal.spoolNamed": "耗材卷 #{{id}}({{name}})",
|
||||
"tags.modal.spoolShort": "耗材卷 #{{id}}",
|
||||
"tags.modal.takenBy": "当前已绑定至 {{spool}}。",
|
||||
"tags.modal.title": "绑定电子标签",
|
||||
"tags.modal.uidHelp": "分隔符和大小写不影响识别:04:a2:b3:c4、04-A2-B3-C4 与 04a2b3c4 代表同一张标签。",
|
||||
"tags.modal.uidLabel": "标签 UID",
|
||||
"tags.modal.uidPlaceholder": "例如:04A2B3C4",
|
||||
"tags.modal.useLastSeen": "使用它",
|
||||
"tags.modal.waitingAny": "等待在任意读卡器上刷卡...",
|
||||
"tags.modal.waitingOn": "等待在读卡器 {{reader}} 上刷卡...",
|
||||
"tags.moved": "标签已从耗材卷 #{{id}} 转移至此处。",
|
||||
"tags.nfc.insecureContext": "读取 NFC 标签需要安全连接。请在 HTTPS 环境下打开 Spoolman 以调用手机 NFC 功能。",
|
||||
"tags.nfc.notAllowed": "当前页面未获得 NFC 使用权限。请在浏览器网站设置中授予权限后重试。",
|
||||
"tags.nfc.notReadable": "NFC 模块不可用 — 可能有其他应用正在占用。",
|
||||
"tags.nfc.notSupported": "此手机不支持 NFC,或系统设置中未开启 NFC 功能。",
|
||||
"tags.nfc.unknown": "无法读取标签。",
|
||||
"tags.none": "未绑定电子标签。",
|
||||
"tags.scan.unknown": "未知标签 {{uid}}。请打开其对应的耗材卷页面,使用“绑定新标签”功能进行关联。",
|
||||
"tags.section": "电子标签",
|
||||
"tags.unlink": "解除绑定",
|
||||
"tags.unlinkBody": "标签 {{uid}} 将不再对应此耗材卷。解绑不会改写标签本身的数据,您可以随时将其重新绑定到此卷或其它耗材卷上。",
|
||||
"tags.unlinkFailed": "无法解除标签绑定。",
|
||||
"tags.unlinkTitle": "确认解绑此标签?",
|
||||
"tags.unlinked": "标签已解除绑定。",
|
||||
"tags.unlinking": "正在解绑...",
|
||||
"topbar.addSpools": "添加耗材",
|
||||
"topbar.searchPlaceholder": "搜索 — 尝试输入 \"红色\" 或 \"PLA\"",
|
||||
"unknown": "未知",
|
||||
"validation.hexDigits": "请使用 6 位或 8 位十六进制字符",
|
||||
"validation.maxChars": "最多允许 {{max}} 个字符",
|
||||
"validation.mustBeGt": "必须大于 {{value}}",
|
||||
"validation.mustBeMax": "必须小于或等于 {{value}}",
|
||||
"validation.mustBeMin": "必须大于或等于 {{value}}",
|
||||
"validation.mustBeNumber": "必须为数字",
|
||||
"validation.required": "此项为必填项",
|
||||
"vendor.fields.comment": "备注",
|
||||
"vendor.fields.emptySpoolWeight": "空料盘重量",
|
||||
"vendor.fields.externalId": "外部ID",
|
||||
"vendor.fields.id": "编号",
|
||||
"vendor.fields.name": "名称",
|
||||
"vendor.fields.registered": "登记时间",
|
||||
"vendor.fieldsHelp.emptySpoolWeight": "来自此制造商的空料盘重量。",
|
||||
"vendor.fields.emptySpoolWeight": "默认空盘重",
|
||||
"vendor.fields.externalId": "外部 ID",
|
||||
"vendor.fields.id": "ID",
|
||||
"vendor.fields.name": "厂商名称",
|
||||
"vendor.fields.registered": "录入时间",
|
||||
"vendor.fieldsHelp.emptySpoolWeight": "该厂商生产的耗材线盘的默认空盘重量。",
|
||||
"yes": "是"
|
||||
}
|
||||
Generated
+1433
-1363
File diff suppressed because it is too large.
Load diff
+23
-22
@@ -1,7 +1,7 @@
|
||||
{
|
||||
"name": "spoolman-client-v2",
|
||||
"private": true,
|
||||
"version": "0.0.1",
|
||||
"version": "0.27.0",
|
||||
"type": "module",
|
||||
"scripts": {
|
||||
"strip-empty-locales": "node scripts/strip-empty-locales.mjs",
|
||||
@@ -10,8 +10,11 @@
|
||||
"prebuild": "node scripts/strip-empty-locales.mjs",
|
||||
"build": "vite build",
|
||||
"preview": "vite preview",
|
||||
"check": "svelte-kit sync && svelte-check --tsconfig ./tsconfig.json",
|
||||
"check:watch": "svelte-kit sync && svelte-check --tsconfig ./tsconfig.json --watch",
|
||||
"test": "vitest run",
|
||||
"test:watch": "vitest",
|
||||
"paraglide": "paraglide-js compile --project ./project.inlang --outdir ./src/lib/paraglide --strategy localStorage preferredLanguage baseLocale",
|
||||
"check": "npm run paraglide && svelte-kit sync && svelte-check --tsconfig ./tsconfig.json",
|
||||
"check:watch": "npm run paraglide && svelte-kit sync && svelte-check --tsconfig ./tsconfig.json --watch",
|
||||
"format": "prettier --write .",
|
||||
"lint": "prettier --check . && eslint .",
|
||||
"lint:eslint": "eslint .",
|
||||
@@ -20,35 +23,33 @@
|
||||
},
|
||||
"devDependencies": {
|
||||
"@axe-core/playwright": "^4.12.1",
|
||||
"@eslint/js": "^9.39.5",
|
||||
"@inlang/paraglide-js": "^2.18.2",
|
||||
"@playwright/test": "^1.62.0",
|
||||
"@sveltejs/adapter-static": "^3.0.6",
|
||||
"@sveltejs/kit": "^2.8.1",
|
||||
"@sveltejs/vite-plugin-svelte": "^4.0.0",
|
||||
"@eslint/js": "^10.0.1",
|
||||
"@inlang/paraglide-js": "^2.23.0",
|
||||
"@playwright/test": "^1.62.1",
|
||||
"@sveltejs/adapter-static": "^3.0.10",
|
||||
"@sveltejs/kit": "^2.70.2",
|
||||
"@sveltejs/vite-plugin-svelte": "^7.2.0",
|
||||
"@types/qrcode": "^1.5.6",
|
||||
"eslint": "^9.39.5",
|
||||
"eslint": "^10.8.0",
|
||||
"eslint-config-prettier": "^10.1.8",
|
||||
"eslint-plugin-svelte": "^3.22.0",
|
||||
"globals": "^16.5.0",
|
||||
"prettier": "^3.3.3",
|
||||
"prettier-plugin-svelte": "^3.2.7",
|
||||
"svelte": "^5.1.9",
|
||||
"svelte-check": "^4.0.5",
|
||||
"typescript": "^5.6.3",
|
||||
"globals": "^17.8.0",
|
||||
"prettier": "^3.9.6",
|
||||
"prettier-plugin-svelte": "^4.1.1",
|
||||
"svelte": "^5.56.8",
|
||||
"svelte-check": "^4.7.4",
|
||||
"typescript": "^5.9.3",
|
||||
"typescript-eslint": "^8.65.0",
|
||||
"vite": "^5.4.10"
|
||||
"vite": "^8.2.0",
|
||||
"vitest": "^4.1.11"
|
||||
},
|
||||
"dependencies": {
|
||||
"@lucide/svelte": "^1.25.0",
|
||||
"@lucide/svelte": "^1.28.0",
|
||||
"fflate": "^0.8.3",
|
||||
"konva": "^10.3.0",
|
||||
"qr-scanner": "^1.4.2",
|
||||
"qrcode": "^1.5.4",
|
||||
"svelte-dnd-action": "^0.9.74",
|
||||
"svelte-dnd-action": "^0.9.76",
|
||||
"svelte-konva": "^1.0.1"
|
||||
},
|
||||
"allowScripts": {
|
||||
"esbuild@0.21.5": true
|
||||
}
|
||||
}
|
||||
@@ -35,6 +35,8 @@
|
||||
"ta",
|
||||
"th",
|
||||
"lt",
|
||||
"tr"
|
||||
"tr",
|
||||
"sl",
|
||||
"ko"
|
||||
]
|
||||
}
|
||||
+47
-16
@@ -24,19 +24,37 @@
|
||||
--border-input: #383838;
|
||||
--hairline: rgba(255, 255, 255, 0.05);
|
||||
|
||||
/* Text — muted/dim/faint are tuned to clear WCAG AA (4.5:1) on the dark
|
||||
* surfaces they sit on (down to the lightest, surface-raised #2e2e2e) while
|
||||
* staying monotonic (muted brightest, faint dimmest). See app.css light
|
||||
* theme for the mirrored values. */
|
||||
/* Text — muted/dim/faint clear WCAG AA (4.5:1) on the dark surfaces they sit on,
|
||||
* down to the lightest (surface-raised #2e2e2e). #959595 is the darkest gray that
|
||||
* still clears 4.5:1 there, so faint sits exactly on that floor and the other two
|
||||
* step up from it in even ~7-point L* increments — the same perceptual spacing the
|
||||
* pre-AA ramp had, so the muted -> dim -> faint hierarchy stays legible instead of
|
||||
* collapsing into three near-identical grays. Contrast on #2e2e2e: 7.0 / 5.6 / 4.5.
|
||||
* Don't darken faint to widen the ramp further; that breaks AA. See the light
|
||||
* theme below for the mirrored values. */
|
||||
--text: #ececec;
|
||||
--text-2: #c9c9c9;
|
||||
--text-muted: #a0a0a0;
|
||||
--text-dim: #979797;
|
||||
--text-faint: #909090;
|
||||
--text-muted: #bababa;
|
||||
--text-dim: #a7a7a7;
|
||||
--text-faint: #959595;
|
||||
|
||||
/* Accent (warm orange) */
|
||||
--accent: #be682f;
|
||||
--accent-hover: #d47a3b;
|
||||
/* Solid fill behind white text — primary buttons, the active segmented tab,
|
||||
* the selected calendar day. White on --accent is only 4.03:1, which fails
|
||||
* WCAG AA, and no foreground fixes it: on #be682f the best any color manages
|
||||
* is 5.21:1 (pure black), and every readable one is worse than white. So the
|
||||
* fill gets its own token, darkened just enough to clear 4.5:1 (4.53) at the
|
||||
* same hue and saturation — 3.3 L* below --accent, which is imperceptible
|
||||
* beside it. --accent itself is unchanged and still drives links, borders,
|
||||
* washes and focus rings, where it sits on a dark surface and passes easily.
|
||||
* Note neither is the Spoolman brand orange #dc7734 (see static/spoolman.svg);
|
||||
* both themes already ship a darkened adaptation of it, and white on the brand
|
||||
* orange itself would be 3.12:1. Unlike --accent, the fill DARKENS on hover —
|
||||
* lightening it would drop back below AA. The light theme already did this. */
|
||||
--accent-fill: #b2612c;
|
||||
--accent-fill-hover: #9b5526;
|
||||
--accent-link: #d0854a;
|
||||
--accent-link-hover: #e09a60;
|
||||
--accent-soft: #e0996a;
|
||||
@@ -49,6 +67,7 @@
|
||||
/* Status */
|
||||
--danger: #c4503a;
|
||||
--danger-soft: #d98a7a;
|
||||
--danger-wash: rgba(196, 80, 58, 0.14);
|
||||
--success: #6bb26b;
|
||||
--success-border: #3f6b3f;
|
||||
--unused-bg: #33302c;
|
||||
@@ -73,6 +92,9 @@
|
||||
|
||||
/* Layout */
|
||||
--topbar-h: 53px;
|
||||
/* Library list column. The Library page overrides this per-instance from the
|
||||
remembered width (stores/listWidth, LIST_DEFAULT must match this); the value
|
||||
here is what the pane is styled with until that lands. */
|
||||
--list-w: 470px;
|
||||
}
|
||||
|
||||
@@ -97,18 +119,26 @@
|
||||
--border-input: #ceccc6;
|
||||
--hairline: rgba(0, 0, 0, 0.06);
|
||||
|
||||
/* Text — muted/dim/faint darkened to clear WCAG AA (4.5:1) on the light
|
||||
* surfaces they sit on (down to the darkest, surface-sunken #e8e6e2) while
|
||||
* staying monotonic (muted darkest, faint lightest). */
|
||||
/* Text — mirror of the dark ramp: muted/dim/faint clear WCAG AA (4.5:1) on the
|
||||
* light surfaces they sit on, down to the darkest (surface-sunken #e8e6e2).
|
||||
* #676767 is the lightest gray that still clears 4.5:1 there, so faint sits on
|
||||
* that ceiling and the other two step down from it. The steps are tighter than
|
||||
* dark (~4.5 L*) because #444444 text-2 caps the range, but they stay clearly
|
||||
* distinguishable. Contrast on #e8e6e2: 6.3 / 5.4 / 4.5. */
|
||||
--text: #232323;
|
||||
--text-2: #444444;
|
||||
--text-muted: #5f5f5f;
|
||||
--text-dim: #666666;
|
||||
--text-faint: #6d6d6d;
|
||||
--text-muted: #525252;
|
||||
--text-dim: #5c5c5c;
|
||||
--text-faint: #676767;
|
||||
|
||||
/* Accent (warm orange, darkened for contrast on light) */
|
||||
--accent: #b25c26;
|
||||
--accent-hover: #9d4f1e;
|
||||
/* Light's accent was already dark enough for white text (4.72:1 / 5.88:1 on
|
||||
* hover), so the fill tokens just mirror the pair above. They exist here so
|
||||
* both themes resolve the same variables, not because light needed a change. */
|
||||
--accent-fill: #b25c26;
|
||||
--accent-fill-hover: #9d4f1e;
|
||||
--accent-link: #a9551f;
|
||||
--accent-link-hover: #8f4718;
|
||||
--accent-soft: #95501f;
|
||||
@@ -121,6 +151,7 @@
|
||||
/* Status */
|
||||
--danger: #b7402c;
|
||||
--danger-soft: #a8462f;
|
||||
--danger-wash: rgba(183, 64, 44, 0.1);
|
||||
--success: #3d7a3d;
|
||||
--success-border: #a9c9a9;
|
||||
--unused-bg: #f1e9df;
|
||||
@@ -242,7 +273,7 @@ input[type='number'] {
|
||||
.seg-btn,
|
||||
.tab,
|
||||
.logo,
|
||||
.kofi,
|
||||
.sponsor,
|
||||
.crumb,
|
||||
.arch-toggle,
|
||||
.spool-row,
|
||||
@@ -258,9 +289,9 @@ input[type='number'] {
|
||||
.grabber {
|
||||
align-items: center;
|
||||
}
|
||||
/* The Ko-fi button collapses to an icon-only square under 560px; keep it a
|
||||
/* The sponsor button collapses to an icon-only square under 560px; keep it a
|
||||
full tap target in both dimensions. */
|
||||
.kofi {
|
||||
.sponsor {
|
||||
min-width: 44px;
|
||||
}
|
||||
}
|
||||
@@ -4,10 +4,21 @@
|
||||
<head>
|
||||
<meta charset="utf-8" />
|
||||
<link rel="icon" href="%sveltekit.assets%/favicon.svg" />
|
||||
<link rel="apple-touch-icon" href="%sveltekit.assets%/apple-touch-icon-180x180.png" />
|
||||
|
||||
<!-- Installability. The manifest sits at the deploy root and states start_url,
|
||||
scope and its icon sources relative to itself, so an operator running under
|
||||
SPOOLMAN_BASE_PATH gets a correctly scoped app without a build-time rebuild.
|
||||
%sveltekit.assets% is relative on the prerendered documents; on the SPA
|
||||
fallback (200.html) it is absolute and gets rewritten server-side — see
|
||||
load_and_rewrite_fallback_base_path in spoolman/client.py. -->
|
||||
<link rel="manifest" href="%sveltekit.assets%/manifest.webmanifest" />
|
||||
|
||||
<meta name="viewport" content="width=device-width, initial-scale=1, viewport-fit=cover" />
|
||||
|
||||
<meta name="theme-color" content="#1f1f1f" />
|
||||
<meta name="apple-mobile-web-app-capable" content="yes" />
|
||||
<meta name="apple-mobile-web-app-status-bar-style" content="black-translucent" />
|
||||
<title>Spoolman</title>
|
||||
|
||||
<!-- Resolve the saved color theme before first paint to avoid a flash of the
|
||||
|
||||
@@ -0,0 +1,100 @@
|
||||
/**
|
||||
* Reveal text that has been cut off with an ellipsis (#1093).
|
||||
*
|
||||
* Truncated text is unreadable, and the value behind it — a filament name, a
|
||||
* location, a manufacturer — is usually the whole reason the row is on screen.
|
||||
* The fix is the one every platform uses: hover it and see the full string.
|
||||
*
|
||||
* The point of doing it here rather than with a plain `title={...}` is the word
|
||||
* *cut off*. A title on text that already fits is noise: it pops a redundant
|
||||
* tooltip over every row the pointer crosses. So the element is measured, and
|
||||
* the tooltip appears and disappears as the layout changes — which it does
|
||||
* constantly here, since the list pane is resizable (#1034) and the same row is
|
||||
* truncated at one width and complete at the next.
|
||||
*
|
||||
* Scope: this is the pointer story. Touch has no hover, and the answer there is
|
||||
* the one already in the app — tapping a row opens the inspector, which shows
|
||||
* every value in full and never truncates it.
|
||||
*/
|
||||
|
||||
/**
|
||||
* Fractional layout puts scrollWidth a hair over clientWidth on text that
|
||||
* visibly fits, so a bare `>` would tag half the rows in a list. A pixel of
|
||||
* slack is well under the width of the ellipsis it takes to truncate.
|
||||
*/
|
||||
function isCut(node: HTMLElement): boolean {
|
||||
return node.scrollWidth - node.clientWidth > 1;
|
||||
}
|
||||
|
||||
/**
|
||||
* Re-measure whenever either half of the question can have changed: the width of
|
||||
* the box, or the text asked to fit in it.
|
||||
*
|
||||
* Both are needed. Resizing is the obvious one — the splitter, the window, a
|
||||
* webfont arriving. But the box can also keep its size while its contents
|
||||
* change, which is the whole of what a live update does to a row: same column,
|
||||
* longer name. A ResizeObserver never hears about that.
|
||||
*/
|
||||
function watch(node: HTMLElement, measure: () => void) {
|
||||
// Fires once on observe, after the first layout: that is the initial reading.
|
||||
const ro = new ResizeObserver(measure);
|
||||
ro.observe(node);
|
||||
// Attributes are deliberately not observed — truncTitle writes one.
|
||||
const mo = new MutationObserver(measure);
|
||||
mo.observe(node, { subtree: true, childList: true, characterData: true });
|
||||
return () => {
|
||||
ro.disconnect();
|
||||
mo.disconnect();
|
||||
};
|
||||
}
|
||||
|
||||
/**
|
||||
* Give an element a `title` for as long as its own text is cut off.
|
||||
*
|
||||
* The element normally speaks for itself. Its `textContent` is put through the
|
||||
* same collapse the renderer applies, so an element built from several spans
|
||||
* reads back as the one line it draws rather than carrying the markup's
|
||||
* newlines and indentation into the tooltip. Pass the text explicitly only where
|
||||
* the visible string genuinely isn't the element's own text.
|
||||
*/
|
||||
export function truncTitle(node: HTMLElement, text?: string) {
|
||||
let full = text;
|
||||
const measure = () => {
|
||||
const value = (full ?? node.textContent ?? '').replace(/\s+/g, ' ').trim();
|
||||
if (value && isCut(node)) node.setAttribute('title', value);
|
||||
else node.removeAttribute('title');
|
||||
};
|
||||
const stop = watch(node, measure);
|
||||
return {
|
||||
update(next?: string) {
|
||||
full = next;
|
||||
measure();
|
||||
},
|
||||
destroy: stop
|
||||
};
|
||||
}
|
||||
|
||||
/**
|
||||
* Report whether an element's text is cut off, instead of titling it.
|
||||
*
|
||||
* For text the pointer can't reach: a group header stretches its link across the
|
||||
* whole row, so the element under the cursor is that overlay and never the title
|
||||
* beneath it, and a `title` there would never show. The caller takes the answer
|
||||
* and hangs the tooltip on an ancestor the hover does land on.
|
||||
*/
|
||||
export function onTruncated(node: HTMLElement, onchange: (cut: boolean) => void) {
|
||||
let cb = onchange;
|
||||
let last: boolean | null = null;
|
||||
const stop = watch(node, () => {
|
||||
const cut = isCut(node);
|
||||
if (cut === last) return;
|
||||
last = cut;
|
||||
cb(cut);
|
||||
});
|
||||
return {
|
||||
update(next: (cut: boolean) => void) {
|
||||
cb = next;
|
||||
},
|
||||
destroy: stop
|
||||
};
|
||||
}
|
||||
@@ -0,0 +1,104 @@
|
||||
import { afterEach, beforeEach, describe, expect, it, vi } from 'vitest';
|
||||
|
||||
// The cooldown is the whole safety story here: without it, a 401 that a reload
|
||||
// cannot fix turns the tab into a reload loop. These tests run the module fresh
|
||||
// each time (vi.resetModules) because it keeps an in-memory stamp that would
|
||||
// otherwise leak between cases.
|
||||
|
||||
function fakeStorage(): Storage {
|
||||
const data = new Map<string, string>();
|
||||
return {
|
||||
getItem: (k: string) => data.get(k) ?? null,
|
||||
setItem: (k: string, v: string) => void data.set(k, v),
|
||||
removeItem: (k: string) => void data.delete(k),
|
||||
clear: () => data.clear(),
|
||||
key: () => null,
|
||||
get length() {
|
||||
return data.size;
|
||||
}
|
||||
} as Storage;
|
||||
}
|
||||
|
||||
async function load() {
|
||||
vi.resetModules();
|
||||
return (await import('./auth')).recoverFromUnauthorized;
|
||||
}
|
||||
|
||||
let reload: ReturnType<typeof vi.fn>;
|
||||
|
||||
beforeEach(() => {
|
||||
reload = vi.fn();
|
||||
vi.stubGlobal('location', { reload });
|
||||
vi.stubGlobal('localStorage', fakeStorage());
|
||||
vi.useFakeTimers();
|
||||
});
|
||||
|
||||
afterEach(() => {
|
||||
vi.useRealTimers();
|
||||
vi.unstubAllGlobals();
|
||||
});
|
||||
|
||||
describe('recoverFromUnauthorized', () => {
|
||||
it('reloads the page on the first 401', async () => {
|
||||
const recover = await load();
|
||||
expect(recover()).toBe(true);
|
||||
expect(reload).toHaveBeenCalledTimes(1);
|
||||
});
|
||||
|
||||
it('reloads only once for a burst of 401s', async () => {
|
||||
const recover = await load();
|
||||
// A view firing several requests at once gets several 401s back, and
|
||||
// location.reload() does not stop the code that follows it.
|
||||
recover();
|
||||
expect(recover()).toBe(false);
|
||||
expect(recover()).toBe(false);
|
||||
expect(reload).toHaveBeenCalledTimes(1);
|
||||
});
|
||||
|
||||
it('does not reload again after coming back still unauthenticated', async () => {
|
||||
const recover = await load();
|
||||
recover();
|
||||
|
||||
// The reload re-runs the app: fresh module, empty in-memory stamp. Only
|
||||
// localStorage carries the cooldown across, which is why it is there.
|
||||
const afterReload = await load();
|
||||
vi.advanceTimersByTime(5_000);
|
||||
expect(afterReload()).toBe(false);
|
||||
expect(reload).toHaveBeenCalledTimes(1);
|
||||
});
|
||||
|
||||
it('allows another attempt once the cooldown has passed', async () => {
|
||||
const recover = await load();
|
||||
recover();
|
||||
vi.advanceTimersByTime(30_001);
|
||||
expect(recover()).toBe(true);
|
||||
expect(reload).toHaveBeenCalledTimes(2);
|
||||
});
|
||||
|
||||
it('still rate-limits when localStorage is unavailable', async () => {
|
||||
vi.stubGlobal('localStorage', {
|
||||
getItem: () => {
|
||||
throw new Error('storage disabled');
|
||||
},
|
||||
setItem: () => {
|
||||
throw new Error('storage disabled');
|
||||
}
|
||||
});
|
||||
const recover = await load();
|
||||
expect(recover()).toBe(true);
|
||||
expect(recover()).toBe(false);
|
||||
expect(reload).toHaveBeenCalledTimes(1);
|
||||
});
|
||||
|
||||
it('is not locked out by a future stamp from a clock change', async () => {
|
||||
localStorage.setItem('spoolman.auth-reload-at', String(Date.now() + 60 * 60_000));
|
||||
const recover = await load();
|
||||
expect(recover()).toBe(true);
|
||||
});
|
||||
|
||||
it('does nothing when there is no document to reload', async () => {
|
||||
vi.stubGlobal('location', undefined);
|
||||
const recover = await load();
|
||||
expect(recover()).toBe(false);
|
||||
});
|
||||
});
|
||||
@@ -0,0 +1,74 @@
|
||||
// Recovering the session when a forward-auth proxy expires it.
|
||||
//
|
||||
// Spoolman has no login of its own and never answers 401. But plenty of people
|
||||
// run it behind a forward-auth proxy (Authelia, Authentik, oauth2-proxy, Caddy
|
||||
// forward_auth), and those proxies treat the two kinds of request differently
|
||||
// once a session goes stale:
|
||||
//
|
||||
// - a top-level navigation asks for HTML, so the proxy answers 302 and sends
|
||||
// the user to its login portal with a note to return here afterwards;
|
||||
// - an in-page fetch asks for JSON, where an HTML login form would be
|
||||
// nonsense, so the proxy answers a flat 401 and leaves it to us.
|
||||
//
|
||||
// An already-loaded tab only ever makes the second kind. So it sits there
|
||||
// looking fine while every request fails, and the user has to work out for
|
||||
// themselves that a manual reload is what fixes it. Reloading on 401 does that
|
||||
// for them: the reload IS a navigation, so it earns the redirect, and the user
|
||||
// comes back to the page they were on.
|
||||
//
|
||||
// Dormant for everyone else — no proxy in front means no 401 to react to.
|
||||
|
||||
const COOLDOWN_KEY = 'spoolman.auth-reload-at';
|
||||
const COOLDOWN_MS = 30_000;
|
||||
|
||||
// The stamp is kept in two places on purpose, because each covers the other's
|
||||
// blind spot. localStorage is the one that matters: it survives the reload, so
|
||||
// a page that comes back still un-authenticated can tell it just tried. The
|
||||
// in-memory copy covers the burst *before* any reload happens — a view firing
|
||||
// several requests at once gets several 401s, and location.reload() does not
|
||||
// stop the code that follows it.
|
||||
let memoryStamp = 0;
|
||||
|
||||
function readStamp(): number {
|
||||
let stored = 0;
|
||||
try {
|
||||
const raw = globalThis.localStorage?.getItem(COOLDOWN_KEY);
|
||||
const n = raw == null ? NaN : Number(raw);
|
||||
if (Number.isFinite(n)) stored = n;
|
||||
} catch {
|
||||
// Storage disabled (private mode, blocked cookies). We lose the
|
||||
// across-reload half of the cooldown and keep the in-memory half.
|
||||
}
|
||||
return Math.max(memoryStamp, stored);
|
||||
}
|
||||
|
||||
function writeStamp(at: number): void {
|
||||
memoryStamp = at;
|
||||
try {
|
||||
globalThis.localStorage?.setItem(COOLDOWN_KEY, String(at));
|
||||
} catch {
|
||||
/* see readStamp */
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Reload the page so a forward-auth proxy can redirect us to its login portal.
|
||||
*
|
||||
* Rate-limited to once per 30s: if the reload doesn't recover the session —
|
||||
* misconfigured proxy, or a 401 that means something else entirely — we must
|
||||
* not put the tab in a reload loop. Returns whether a reload was started.
|
||||
*/
|
||||
export function recoverFromUnauthorized(): boolean {
|
||||
if (typeof globalThis.location === 'undefined') return false; // SSR / prerender
|
||||
|
||||
const now = Date.now();
|
||||
const last = readStamp();
|
||||
// `last > now` means the clock moved backwards or the stamp is junk; treat
|
||||
// that as "no recent reload" rather than locking recovery out until it
|
||||
// catches up.
|
||||
if (last <= now && now - last < COOLDOWN_MS) return false;
|
||||
|
||||
writeStamp(now);
|
||||
globalThis.location.reload();
|
||||
return true;
|
||||
}
|
||||
@@ -0,0 +1,94 @@
|
||||
import { spoolSource } from './spoolSource';
|
||||
import type { ExternalFilament } from './external';
|
||||
|
||||
/** Rows per request. Enough to overflow a picker's result list, so there is something to scroll. */
|
||||
const PAGE = 20;
|
||||
/** Distance from the bottom of the result list at which the next page is fetched. */
|
||||
const SCROLL_MARGIN = 120;
|
||||
|
||||
/**
|
||||
* The external-catalog half of a filament picker's search (#1136): `search` loads the
|
||||
* first page of matches, and scrolling the result list towards its end appends the next.
|
||||
* Shared by the add-spools and change-filament dialogs.
|
||||
*/
|
||||
export class ExternalSearch {
|
||||
items = $state<ExternalFilament[]>([]);
|
||||
error = $state(false);
|
||||
loadingMore = $state(false);
|
||||
#total = 0;
|
||||
#query = '';
|
||||
#loading = false;
|
||||
// Bumped by every new search, so a page that lands after the query changed is dropped.
|
||||
#req = 0;
|
||||
#ctrl: AbortController | undefined;
|
||||
// The result list, remembered from its first scroll event.
|
||||
#list: HTMLElement | undefined;
|
||||
|
||||
async search(query: string): Promise<void> {
|
||||
const req = this.#restart();
|
||||
this.#query = query.trim();
|
||||
this.#loading = true;
|
||||
this.error = false;
|
||||
try {
|
||||
const page = await spoolSource.searchExternalFilaments(this.#query, PAGE, 0, this.#ctrl!.signal);
|
||||
if (req !== this.#req) return;
|
||||
this.items = page.items;
|
||||
this.#total = page.total;
|
||||
// A new query starts at the top: left scrolled down, the list would fetch
|
||||
// its second page straight away.
|
||||
this.#list?.scrollTo(0, 0);
|
||||
} catch {
|
||||
if (req !== this.#req) return;
|
||||
this.items = [];
|
||||
this.#total = 0;
|
||||
this.error = true;
|
||||
} finally {
|
||||
if (req === this.#req) this.#loading = false;
|
||||
}
|
||||
}
|
||||
|
||||
async more(): Promise<void> {
|
||||
if (this.#loading || this.loadingMore || this.error || this.items.length >= this.#total) return;
|
||||
const req = this.#req;
|
||||
this.loadingMore = true;
|
||||
try {
|
||||
const page = await spoolSource.searchExternalFilaments(
|
||||
this.#query,
|
||||
PAGE,
|
||||
this.items.length,
|
||||
this.#ctrl!.signal
|
||||
);
|
||||
if (req !== this.#req) return;
|
||||
// A catalog sync between two pages shifts the offsets and can hand back a row
|
||||
// that is already listed; a repeated id would break the keyed list.
|
||||
const fresh = page.items.filter((f) => !this.items.some((e) => e.id === f.id));
|
||||
this.items = [...this.items, ...fresh];
|
||||
this.#total = page.total;
|
||||
} catch (e) {
|
||||
if (req === this.#req) console.error('Failed to load more external filaments', e);
|
||||
} finally {
|
||||
if (req === this.#req) this.loadingMore = false;
|
||||
}
|
||||
}
|
||||
|
||||
/** Forget the results, dropping any request still in flight. */
|
||||
clear(): void {
|
||||
this.#restart();
|
||||
this.items = [];
|
||||
this.#total = 0;
|
||||
}
|
||||
|
||||
/** Scroll handler for the result list. An arrow function so it can be passed as-is. */
|
||||
onscroll = (e: Event) => {
|
||||
const el = (this.#list = e.currentTarget as HTMLElement);
|
||||
if (el.scrollTop + el.clientHeight >= el.scrollHeight - SCROLL_MARGIN) void this.more();
|
||||
};
|
||||
|
||||
#restart(): number {
|
||||
this.#ctrl?.abort();
|
||||
this.#ctrl = new AbortController();
|
||||
this.#loading = false;
|
||||
this.loadingMore = false;
|
||||
return ++this.#req;
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,65 @@
|
||||
import { afterEach, beforeEach, describe, expect, it, vi } from 'vitest';
|
||||
|
||||
// Covers which failures reach for the page-reload recovery in ./auth.ts. The
|
||||
// split between reads and writes is the part worth pinning down: getting it
|
||||
// wrong means a user loses a half-typed form to a login redirect.
|
||||
|
||||
const { recover } = vi.hoisted(() => ({ recover: vi.fn() }));
|
||||
vi.mock('./auth', () => ({ recoverFromUnauthorized: recover }));
|
||||
vi.mock('./config', () => ({ API_BASE: 'http://spoolman.test/api/v1' }));
|
||||
|
||||
import { getJson, getList, HttpError, patchJson, postJson, deleteResource } from './http';
|
||||
|
||||
function respond(status: number): Response {
|
||||
const body = status === 200 ? '[]' : JSON.stringify({ message: 'Unauthorized' });
|
||||
return new Response(body, { status, headers: { 'content-type': 'application/json' } });
|
||||
}
|
||||
|
||||
let fetchMock: ReturnType<typeof vi.fn>;
|
||||
|
||||
function serving(status: number) {
|
||||
fetchMock = vi.fn(async () => respond(status));
|
||||
vi.stubGlobal('fetch', fetchMock);
|
||||
}
|
||||
|
||||
beforeEach(() => recover.mockClear());
|
||||
afterEach(() => vi.unstubAllGlobals());
|
||||
|
||||
describe('401 handling', () => {
|
||||
it('tries to recover when a read is rejected', async () => {
|
||||
serving(401);
|
||||
await expect(getJson('/spool/1')).rejects.toThrow(HttpError);
|
||||
expect(recover).toHaveBeenCalledTimes(1);
|
||||
});
|
||||
|
||||
it('tries to recover when a list read is rejected', async () => {
|
||||
serving(401);
|
||||
await expect(getList('/spool')).rejects.toThrow(HttpError);
|
||||
expect(recover).toHaveBeenCalledTimes(1);
|
||||
});
|
||||
|
||||
it('leaves a rejected write alone so the user keeps their input', async () => {
|
||||
serving(401);
|
||||
await expect(patchJson('/spool/1', { comment: 'half typed' })).rejects.toThrow(HttpError);
|
||||
await expect(postJson('/spool', {})).rejects.toThrow(HttpError);
|
||||
await expect(deleteResource('/spool/1')).rejects.toThrow(HttpError);
|
||||
expect(recover).not.toHaveBeenCalled();
|
||||
});
|
||||
|
||||
it('ignores failures that are not about authentication', async () => {
|
||||
serving(500);
|
||||
await expect(getJson('/spool/1')).rejects.toThrow(HttpError);
|
||||
expect(recover).not.toHaveBeenCalled();
|
||||
});
|
||||
|
||||
it('carries the status on the error either way', async () => {
|
||||
serving(401);
|
||||
await expect(getJson('/spool/1')).rejects.toMatchObject({ status: 401 });
|
||||
});
|
||||
|
||||
it('does nothing on a successful read', async () => {
|
||||
serving(200);
|
||||
await expect(getList('/spool')).resolves.toEqual({ items: [], total: 0 });
|
||||
expect(recover).not.toHaveBeenCalled();
|
||||
});
|
||||
});
|
||||
@@ -1,4 +1,5 @@
|
||||
import { API_BASE } from './config';
|
||||
import { recoverFromUnauthorized } from './auth';
|
||||
|
||||
// Thin fetch wrappers around the Spoolman REST API.
|
||||
|
||||
@@ -35,22 +36,39 @@ export function isAbortError(e: unknown, signal?: AbortSignal): boolean {
|
||||
export class HttpError extends Error {
|
||||
constructor(
|
||||
message: string,
|
||||
readonly status: number
|
||||
readonly status: number,
|
||||
/**
|
||||
* The parsed error body, when there was one. Most failures need nothing
|
||||
* beyond the status, but a few carry a field the UI can act on rather than
|
||||
* merely report — linking a tag another spool already holds answers 409
|
||||
* with the `spool_id` that holds it, which is what lets the client offer to
|
||||
* move it without first going and looking the tag up.
|
||||
*/
|
||||
readonly body?: Record<string, unknown>
|
||||
) {
|
||||
super(message);
|
||||
this.name = 'HttpError';
|
||||
}
|
||||
}
|
||||
|
||||
// Methods we're willing to answer a 401 with a page reload. A reload throws away
|
||||
// whatever is on screen, which is a fine trade for a list that failed to load and
|
||||
// a bad one for a half-filled form: the user would lose what they typed to a
|
||||
// login redirect. Mutations therefore surface their 401 as an ordinary error and
|
||||
// let the user copy their work out before dealing with it. See ./auth.ts.
|
||||
const RELOAD_ON_401 = new Set(['GET', 'HEAD']);
|
||||
|
||||
async function ensureOk(res: Response, method: string, path: string): Promise<Response> {
|
||||
if (!res.ok) {
|
||||
let detail = '';
|
||||
if (res.status === 401 && RELOAD_ON_401.has(method)) recoverFromUnauthorized();
|
||||
let body: Record<string, unknown> | undefined;
|
||||
try {
|
||||
detail = (await res.json())?.message ?? '';
|
||||
body = (await res.json()) as Record<string, unknown>;
|
||||
} catch {
|
||||
/* ignore */
|
||||
/* no body, or not JSON */
|
||||
}
|
||||
throw new HttpError(`${method} ${path} → ${res.status}${detail ? `: ${detail}` : ''}`, res.status);
|
||||
const detail = typeof body?.message === 'string' ? body.message : '';
|
||||
throw new HttpError(`${method} ${path} → ${res.status}${detail ? `: ${detail}` : ''}`, res.status, body);
|
||||
}
|
||||
return res;
|
||||
}
|
||||
@@ -58,6 +76,15 @@ async function ensureOk(res: Response, method: string, path: string): Promise<Re
|
||||
export interface RawPage {
|
||||
items: unknown[];
|
||||
total: number;
|
||||
/** The group endpoint's totals across every page, when it sends them. */
|
||||
totalSpools?: number;
|
||||
totalRemaining?: number;
|
||||
}
|
||||
|
||||
function numberHeader(res: Response, name: string): number | undefined {
|
||||
const header = res.headers.get(name);
|
||||
const n = header != null && header !== '' ? Number(header) : NaN;
|
||||
return Number.isNaN(n) ? undefined : n;
|
||||
}
|
||||
|
||||
// Reads take an optional AbortSignal so a view can cancel what it no longer needs
|
||||
@@ -73,9 +100,12 @@ export async function getList(
|
||||
): Promise<RawPage> {
|
||||
const res = await ensureOk(await fetch(API_BASE + path + queryString(params), { signal }), 'GET', path);
|
||||
const items = (await res.json()) as unknown[];
|
||||
const header = res.headers.get('x-total-count');
|
||||
const total = header != null && header !== '' ? Number(header) : items.length;
|
||||
return { items, total: Number.isNaN(total) ? items.length : total };
|
||||
return {
|
||||
items,
|
||||
total: numberHeader(res, 'x-total-count') ?? items.length,
|
||||
totalSpools: numberHeader(res, 'x-total-spools'),
|
||||
totalRemaining: numberHeader(res, 'x-total-remaining-weight')
|
||||
};
|
||||
}
|
||||
|
||||
export async function getJson<T = unknown>(
|
||||
|
||||
@@ -11,6 +11,8 @@ export interface Info {
|
||||
external_db_name: string;
|
||||
git_commit?: string;
|
||||
build_date?: string;
|
||||
latest_version?: string | null;
|
||||
update_available?: boolean;
|
||||
}
|
||||
|
||||
export function getInfo(): Promise<Info> {
|
||||
|
||||
@@ -1,4 +1,5 @@
|
||||
import { wsUrl } from './config';
|
||||
import { getJson } from './http';
|
||||
|
||||
// Live-update connection backed by the Spoolman WebSocket API. One socket per
|
||||
// resource (`/api/v1/spool`, `/filament`, `/vendor`) is shared by every
|
||||
@@ -52,6 +53,27 @@ interface ResourceSocket {
|
||||
const RECONNECT_BASE_MS = 1000;
|
||||
const RECONNECT_MAX_MS = 30000;
|
||||
|
||||
// A handshake refused by a forward-auth proxy looks exactly like a backend that
|
||||
// is down: the browser's WebSocket API gives us no HTTP status for a failed
|
||||
// upgrade, just a close event. So when a socket dies without ever having opened,
|
||||
// we ask the same question over HTTP, where the answer is legible — and if that
|
||||
// answer is 401, http.ts reloads the page (see ./auth.ts). Any other outcome,
|
||||
// including the backend being genuinely down, is ignored here and left to the
|
||||
// reconnect backoff.
|
||||
const AUTH_PROBE_MIN_INTERVAL_MS = 10000;
|
||||
let lastAuthProbeAt = 0;
|
||||
|
||||
function probeAuth(): void {
|
||||
const now = Date.now();
|
||||
// The three resource sockets go down together and back off independently;
|
||||
// one probe answers for all of them.
|
||||
if (now - lastAuthProbeAt < AUTH_PROBE_MIN_INTERVAL_MS) return;
|
||||
lastAuthProbeAt = now;
|
||||
getJson('/info').catch(() => {
|
||||
/* backend down, or a 401 that has already triggered the reload */
|
||||
});
|
||||
}
|
||||
|
||||
class WebSocketLive implements LiveConnection {
|
||||
private sockets = new Map<Resource, ResourceSocket>();
|
||||
|
||||
@@ -102,6 +124,13 @@ class WebSocketLive implements LiveConnection {
|
||||
return;
|
||||
}
|
||||
sock.ws = ws;
|
||||
// This socket's own keepalive handle. Kept local (not just on `sock`) so a
|
||||
// superseded socket can clean up after itself without touching the shared
|
||||
// `sock` state — see the identity guards below.
|
||||
let pingTimer: ReturnType<typeof setInterval> | null = null;
|
||||
// Whether this socket ever completed its handshake, which is what tells a
|
||||
// refused connection apart from a dropped one.
|
||||
let opened = false;
|
||||
|
||||
ws.onmessage = (ev) => {
|
||||
let msg: Record<string, unknown>;
|
||||
@@ -127,19 +156,40 @@ class WebSocketLive implements LiveConnection {
|
||||
}
|
||||
};
|
||||
|
||||
// A socket can be superseded before its own events land: reconnectAllNow()
|
||||
// opens a replacement while this one is still CLOSING, and the late
|
||||
// onopen/onclose would then clobber the replacement's state (killing its
|
||||
// keepalive, or nulling sock.ws under it). Every handler that touches the
|
||||
// shared `sock` first checks it is still the current socket.
|
||||
ws.onopen = () => {
|
||||
opened = true;
|
||||
if (sock.ws !== ws) {
|
||||
ws.close(); // superseded while connecting — drop it
|
||||
return;
|
||||
}
|
||||
sock.attempts = 0; // connected — reset backoff
|
||||
// Light keepalive; the server replies {status:"healthy"} which we ignore.
|
||||
sock.pingTimer = setInterval(() => {
|
||||
pingTimer = setInterval(() => {
|
||||
if (ws.readyState === WebSocket.OPEN) ws.send('ping');
|
||||
}, 25000);
|
||||
sock.pingTimer = pingTimer;
|
||||
};
|
||||
|
||||
ws.onclose = () => {
|
||||
if (sock.pingTimer) clearInterval(sock.pingTimer);
|
||||
// Always stop our own keepalive, current socket or not, so a superseded
|
||||
// socket doesn't leak its interval.
|
||||
if (pingTimer) clearInterval(pingTimer);
|
||||
pingTimer = null;
|
||||
if (sock.ws !== ws) return; // a replacement is live — leave it alone
|
||||
sock.pingTimer = null;
|
||||
sock.ws = null;
|
||||
if (!sock.closed && sock.subs.size > 0) this.scheduleReconnect(resource, sock);
|
||||
if (!sock.closed && sock.subs.size > 0) {
|
||||
// Refused rather than dropped — ask HTTP whether it's an auth problem.
|
||||
// A socket that had been open and then died gets checked on its next
|
||||
// failed reconnect instead, which is one backoff step away.
|
||||
if (!opened) probeAuth();
|
||||
this.scheduleReconnect(resource, sock);
|
||||
}
|
||||
};
|
||||
|
||||
ws.onerror = () => ws.close();
|
||||
|
||||
@@ -0,0 +1,153 @@
|
||||
import { describe, expect, it } from 'vitest';
|
||||
import { filamentPatchToApi, mapSpool, spoolPatchToApi } from './map';
|
||||
|
||||
// The client models a spool's filament as a string id (ids are strings across the
|
||||
// reactive cache), but PATCH /spool/{id} takes a number and rejects an explicit
|
||||
// null — see SpoolUpdateParameters.prevent_none in spoolman/api/v1/spool.py. This
|
||||
// is the seam where reassigning a spool's filament (#1010) is either a valid
|
||||
// request or a 422, so it gets its own coverage.
|
||||
describe('spoolPatchToApi — filament', () => {
|
||||
it('sends the filament as a numeric filament_id', () => {
|
||||
expect(spoolPatchToApi({ filamentId: '42' })).toEqual({ filament_id: 42 });
|
||||
});
|
||||
|
||||
it('leaves filament_id out of patches that do not touch the filament', () => {
|
||||
expect(spoolPatchToApi({ location: 'Shelf A' })).toEqual({ location: 'Shelf A' });
|
||||
});
|
||||
|
||||
it('omits filament_id rather than sending a null the API would reject', () => {
|
||||
expect(spoolPatchToApi({ filamentId: undefined })).toEqual({});
|
||||
expect(spoolPatchToApi({ filamentId: '' })).toEqual({});
|
||||
});
|
||||
|
||||
it('carries the filament alongside other edited fields', () => {
|
||||
expect(spoolPatchToApi({ filamentId: '7', comment: 'refilled' })).toEqual({
|
||||
filament_id: 7,
|
||||
comment: 'refilled'
|
||||
});
|
||||
});
|
||||
|
||||
// Changing the filament of a spool that recorded its own full weight would
|
||||
// otherwise leave it on the old filament's figure, so the dialog offers to send
|
||||
// the new one in the same request.
|
||||
it('sends an adopted full weight as initial_weight', () => {
|
||||
expect(spoolPatchToApi({ filamentId: '7', initial: 750 })).toEqual({
|
||||
filament_id: 7,
|
||||
initial_weight: 750
|
||||
});
|
||||
});
|
||||
});
|
||||
|
||||
// A filament's manufacturer is the same kind of link one level up, but with the
|
||||
// opposite null rule: PATCH /filament/{id} clears the link on an explicit null
|
||||
// (spoolman/database/filament.py `update`), and that is the only way to put a
|
||||
// filament back to having no manufacturer. Dropping the key instead would make
|
||||
// "no manufacturer" silently do nothing.
|
||||
describe('filamentPatchToApi — manufacturer', () => {
|
||||
it('sends the manufacturer as a numeric vendor_id', () => {
|
||||
expect(filamentPatchToApi({ vendorId: '42' })).toEqual({ vendor_id: 42 });
|
||||
});
|
||||
|
||||
it('leaves vendor_id out of patches that do not touch the manufacturer', () => {
|
||||
expect(filamentPatchToApi({ name: 'PolyTerra Sage' })).toEqual({ name: 'PolyTerra Sage' });
|
||||
});
|
||||
|
||||
it('clears the manufacturer with an explicit null', () => {
|
||||
expect(filamentPatchToApi({ vendorId: '' })).toEqual({ vendor_id: null });
|
||||
expect(filamentPatchToApi({ vendorId: undefined })).toEqual({ vendor_id: null });
|
||||
});
|
||||
|
||||
it('carries the manufacturer alongside other edited fields', () => {
|
||||
expect(filamentPatchToApi({ vendorId: '7', comment: 'rebranded' })).toEqual({
|
||||
vendor_id: 7,
|
||||
comment: 'rebranded'
|
||||
});
|
||||
});
|
||||
});
|
||||
|
||||
// Full weight, tare weight and price live on both a spool and its filament, and
|
||||
// the spool's own value wins. #1013: a spool kept the tare weight it was created
|
||||
// with while the panel showed the filament's newer one, and neither the value nor
|
||||
// a way to correct it survived the trip through this layer.
|
||||
describe('spoolPatchToApi — values a spool can override', () => {
|
||||
it('sends a per-spool tare weight as spool_weight', () => {
|
||||
expect(spoolPatchToApi({ spoolWeight: 261 })).toEqual({ spool_weight: 261 });
|
||||
});
|
||||
|
||||
it('leaves the overridable fields out of patches that do not touch them', () => {
|
||||
expect(spoolPatchToApi({ location: 'Shelf A' })).toEqual({ location: 'Shelf A' });
|
||||
});
|
||||
|
||||
// A blank field means "go back to following the filament". `undefined` would be
|
||||
// dropped by JSON.stringify, leaving the stale value in place — exactly the bug.
|
||||
it.each([
|
||||
['spoolWeight', 'spool_weight'],
|
||||
['initial', 'initial_weight'],
|
||||
['price', 'price']
|
||||
])('clears %s with an explicit null', (domain, api) => {
|
||||
expect(spoolPatchToApi({ [domain]: undefined })).toEqual({ [api]: null });
|
||||
});
|
||||
|
||||
it('carries several overrides in one request', () => {
|
||||
expect(spoolPatchToApi({ initial: 1000, spoolWeight: 261, price: 24.5 })).toEqual({
|
||||
initial_weight: 1000,
|
||||
spool_weight: 261,
|
||||
price: 24.5
|
||||
});
|
||||
});
|
||||
});
|
||||
|
||||
describe('mapSpool — inherited vs. own values', () => {
|
||||
const api = (spool: Record<string, unknown>) => ({
|
||||
id: 1,
|
||||
used_weight: 100,
|
||||
filament: { id: 9, weight: 1000, spool_weight: 261, price: 20 },
|
||||
...spool
|
||||
});
|
||||
|
||||
it("keeps the spool's own values distinct from the filament's", () => {
|
||||
const s = mapSpool(api({ initial_weight: 750, spool_weight: 132, price: 18 }));
|
||||
expect(s.initialOverride).toBe(750);
|
||||
expect(s.spoolWeight).toBe(132);
|
||||
expect(s.price).toBe(18);
|
||||
});
|
||||
|
||||
// The panel has to be able to tell "no value of its own" from "a value that
|
||||
// happens to equal the filament's": only the first follows a filament edit.
|
||||
it('leaves them undefined when the spool has none, without borrowing the filament’s', () => {
|
||||
const s = mapSpool(api({ initial_weight: null, spool_weight: null, price: null }));
|
||||
expect(s.initialOverride).toBeUndefined();
|
||||
expect(s.spoolWeight).toBeUndefined();
|
||||
expect(s.price).toBeUndefined();
|
||||
// The effective full weight still falls back, since that is what the gauge shows.
|
||||
expect(s.initial).toBe(1000);
|
||||
});
|
||||
});
|
||||
|
||||
// `tags` is always on the wire, but `format` is omitted rather than nulled when
|
||||
// unset (the API excludes nulls), so the mapping has to read absence — not null —
|
||||
// as "no format". Getting this backwards would render the string "null" as a
|
||||
// badge on every tag a reader didn't name.
|
||||
describe('mapSpool — tags', () => {
|
||||
const api = (tags: unknown) => ({ id: 1, used_weight: 0, filament: { id: 9 }, tags });
|
||||
|
||||
it('maps a linked tag, keeping the canonical UID the server returned', () => {
|
||||
const s = mapSpool(api([{ uid: '04A2B3C4', format: 'ntag', added: '2026-08-13T10:00:00Z' }]));
|
||||
expect(s.tags).toEqual([{ uid: '04A2B3C4', format: 'ntag', added: '2026-08-13T10:00:00Z' }]);
|
||||
});
|
||||
|
||||
it('reads an omitted format as no format rather than as a value', () => {
|
||||
const s = mapSpool(api([{ uid: '04A2B3C4', added: '2026-08-13T10:00:00Z' }]));
|
||||
expect(s.tags[0].format).toBeUndefined();
|
||||
});
|
||||
|
||||
it('gives an untagged spool an empty list', () => {
|
||||
expect(mapSpool(api([])).tags).toEqual([]);
|
||||
});
|
||||
|
||||
// Fixtures and a server upgraded under a long-lived tab can both produce a
|
||||
// spool with no `tags` key at all; every consumer indexes into it.
|
||||
it('gives a spool without the key an empty list rather than undefined', () => {
|
||||
expect(mapSpool({ id: 1, used_weight: 0, filament: { id: 9 } }).tags).toEqual([]);
|
||||
});
|
||||
});
|
||||
@@ -1,4 +1,13 @@
|
||||
import type { Filament, MultiColorDirection, Spool, Vendor } from '$lib/types';
|
||||
import type {
|
||||
Filament,
|
||||
FilamentPatch,
|
||||
Tag,
|
||||
MultiColorDirection,
|
||||
Spool,
|
||||
SpoolPatch,
|
||||
Vendor,
|
||||
VendorPatch
|
||||
} from '$lib/types';
|
||||
import type { GroupSummary } from './types';
|
||||
import { formatDurationShort, formatShortDate } from '$lib/utils/datetime';
|
||||
|
||||
@@ -33,6 +42,20 @@ export function mapVendor(v: Json): Vendor {
|
||||
};
|
||||
}
|
||||
|
||||
/**
|
||||
* A spool's or filament's tags. The API always sends `tags`, but an entity that
|
||||
* predates a server upgrade mid-session (or a fixture) may not, so an absent one
|
||||
* reads as none. `format` is omitted rather than nulled when unset — the API
|
||||
* excludes nulls — which is why it maps to undefined instead of being tested for null.
|
||||
*/
|
||||
function mapTags(tags: unknown): Tag[] {
|
||||
return ((tags ?? []) as Json[]).map((t) => ({
|
||||
uid: t.uid,
|
||||
format: t.format ?? undefined,
|
||||
added: t.added
|
||||
}));
|
||||
}
|
||||
|
||||
export function mapFilament(f: Json): Filament {
|
||||
return {
|
||||
id: String(f.id),
|
||||
@@ -52,21 +75,35 @@ export function mapFilament(f: Json): Filament {
|
||||
comment: f.comment ?? '',
|
||||
externalId: f.external_id ?? undefined,
|
||||
registeredLabel: formatShortDate(f.registered),
|
||||
tags: mapTags(f.tags),
|
||||
extra: f.extra ?? {}
|
||||
};
|
||||
}
|
||||
|
||||
/**
|
||||
* Below this much used, a spool counts as untouched. `used_weight === 0` was too literal a
|
||||
* test: registering a spool by its measured weight computes `net + spool − measured`, and in
|
||||
* floating point a full 1 kg spool on a 128.11 g core lands on 2.3e-13 instead of 0. Such a
|
||||
* spool claimed to be in use the moment it was added (#986). A hundredth of a gram is under
|
||||
* any scale's resolution and under the display's, so nothing real is rounded away here — and
|
||||
* a negative used_weight (filament added back) falls on the unused side too, as it should.
|
||||
*/
|
||||
const USED_EPSILON_GRAMS = 0.01;
|
||||
|
||||
export function mapSpool(s: Json): Spool {
|
||||
const f: Json = s.filament ?? {};
|
||||
return {
|
||||
id: s.id,
|
||||
filamentId: String(f.id ?? ''),
|
||||
unused: (s.used_weight ?? 0) === 0,
|
||||
unused: (s.used_weight ?? 0) < USED_EPSILON_GRAMS,
|
||||
remaining: s.remaining_weight ?? 0,
|
||||
initial: s.initial_weight ?? f.weight ?? 0,
|
||||
initialOverride: s.initial_weight ?? undefined,
|
||||
usedWeight: s.used_weight ?? 0,
|
||||
location: s.location ?? '',
|
||||
lot: s.lot_nr ?? '',
|
||||
price: s.price ?? undefined,
|
||||
spoolWeight: s.spool_weight ?? undefined,
|
||||
firstUsed: s.first_used ?? undefined,
|
||||
lastUsed: s.last_used ?? undefined,
|
||||
firstUsedLabel: formatShortDate(s.first_used),
|
||||
@@ -75,22 +112,31 @@ export function mapSpool(s: Json): Spool {
|
||||
registeredLabel: formatShortDate(s.registered),
|
||||
archived: s.archived ?? false,
|
||||
comment: s.comment ?? '',
|
||||
tags: mapTags(s.tags),
|
||||
extra: s.extra ?? {}
|
||||
};
|
||||
}
|
||||
|
||||
export function mapGroup(g: Json): GroupSummary {
|
||||
const field = g.group_by as GroupSummary['field'];
|
||||
let title = '';
|
||||
let subtitle = '';
|
||||
let title: string;
|
||||
let subtitle: string;
|
||||
let badge = '';
|
||||
let colors: string[] = [];
|
||||
let direction: MultiColorDirection | undefined;
|
||||
// Filament groups carry their manufacturer separately from the subtitle text
|
||||
// so the header can render it as a link to the vendor (see GroupHeader).
|
||||
let vendorId: string | undefined;
|
||||
let vendorName: string | undefined;
|
||||
|
||||
if (field === 'filament' && g.filament) {
|
||||
const f: Json = g.filament;
|
||||
title = f.name ?? '(unnamed filament)';
|
||||
subtitle = `${f.vendor?.name ?? 'No manufacturer'} · ${f.diameter} mm`;
|
||||
subtitle = `${f.diameter} mm`;
|
||||
if (f.vendor) {
|
||||
vendorId = String(f.vendor.id);
|
||||
vendorName = f.vendor.name ?? '(unnamed manufacturer)';
|
||||
}
|
||||
badge = f.material ?? '';
|
||||
colors = colorsFromApi(f);
|
||||
direction = f.multi_color_direction ?? undefined;
|
||||
@@ -104,7 +150,10 @@ export function mapGroup(g: Json): GroupSummary {
|
||||
title = g.key ?? 'No location';
|
||||
subtitle = `${g.in_use_count} in use`;
|
||||
} else {
|
||||
// extra.<key>: the key IS the value, and there is no entity to name the group.
|
||||
// The dashboard, which is what groups on these, titles them itself.
|
||||
title = g.key ?? '';
|
||||
subtitle = `${g.spool_count} spool${g.spool_count === 1 ? '' : 's'}`;
|
||||
}
|
||||
|
||||
return {
|
||||
@@ -113,6 +162,8 @@ export function mapGroup(g: Json): GroupSummary {
|
||||
title,
|
||||
subtitle,
|
||||
badge,
|
||||
vendorId,
|
||||
vendorName,
|
||||
colors,
|
||||
direction,
|
||||
spoolCount: g.spool_count ?? 0,
|
||||
@@ -121,7 +172,18 @@ export function mapGroup(g: Json): GroupSummary {
|
||||
totalRemaining: g.total_remaining_weight ?? 0,
|
||||
hasStock: (g.spool_count ?? 0) > 0,
|
||||
lastUsedLabel: formatDurationShort(g.last_used),
|
||||
lastUsedSort: 0
|
||||
lastUsedSort: 0,
|
||||
filamentCount: g.filament_count ?? undefined,
|
||||
previewSpools: (g.spools as Json[] | undefined)?.map((s) => ({
|
||||
id: String(s.id),
|
||||
remaining: s.remaining_weight ?? null,
|
||||
initial: s.initial_weight ?? null
|
||||
})),
|
||||
previewFilaments: (g.filaments as Json[] | undefined)?.map((f) => ({
|
||||
id: String(f.id),
|
||||
colors: colorsFromApi(f),
|
||||
direction: f.multi_color_direction ?? undefined
|
||||
}))
|
||||
};
|
||||
}
|
||||
|
||||
@@ -148,8 +210,12 @@ export function colorFieldsToApi(
|
||||
return { color_hex: hexes[0] ?? null, multi_color_hexes: null, multi_color_direction: null };
|
||||
}
|
||||
|
||||
export function spoolPatchToApi(patch: Partial<Spool>): Json {
|
||||
export function spoolPatchToApi(patch: SpoolPatch): Json {
|
||||
const out: Json = {};
|
||||
// Re-pointing a spool at another filament. The API takes a numeric id and
|
||||
// rejects a null one, so an empty/absent value is left out of the request
|
||||
// entirely rather than sent as a clear.
|
||||
if ('filamentId' in patch && patch.filamentId) out.filament_id = Number(patch.filamentId);
|
||||
if ('location' in patch) out.location = patch.location ?? '';
|
||||
if ('lot' in patch) out.lot_nr = patch.lot ?? '';
|
||||
if ('price' in patch) out.price = patch.price ?? null;
|
||||
@@ -158,13 +224,27 @@ export function spoolPatchToApi(patch: Partial<Spool>): Json {
|
||||
if ('comment' in patch) out.comment = patch.comment ?? '';
|
||||
if ('archived' in patch) out.archived = patch.archived;
|
||||
if ('remaining' in patch) out.remaining_weight = patch.remaining;
|
||||
// The spool's own full weight. `initial` is the effective one (the filament's
|
||||
// when the spool has none), so writing it is what turns the fallback into a
|
||||
// value the spool keeps for itself — which is the point when its filament changes.
|
||||
// A blank one travels as an explicit null: that is what hands the field back to
|
||||
// the filament, and `undefined` would be dropped by JSON.stringify instead.
|
||||
if ('initial' in patch) out.initial_weight = patch.initial ?? null;
|
||||
// Likewise the tare weight — blank means "use the filament's".
|
||||
if ('spoolWeight' in patch) out.spool_weight = patch.spoolWeight ?? null;
|
||||
if ('extra' in patch) out.extra = patch.extra;
|
||||
return out;
|
||||
}
|
||||
|
||||
export function filamentPatchToApi(patch: Partial<Filament>): Json {
|
||||
export function filamentPatchToApi(patch: FilamentPatch): Json {
|
||||
const out: Json = {};
|
||||
if ('name' in patch) out.name = patch.name;
|
||||
// Re-filing a filament under another manufacturer. Unlike a spool's filament,
|
||||
// this link is genuinely optional: the API clears it on an explicit null (see
|
||||
// spoolman/database/filament.py `update`), so a blank value is sent as null
|
||||
// rather than dropped — that is how a filament goes back to having no
|
||||
// manufacturer at all.
|
||||
if ('vendorId' in patch) out.vendor_id = patch.vendorId ? Number(patch.vendorId) : null;
|
||||
if ('material' in patch) out.material = patch.material;
|
||||
// Colours and direction always travel together (the inspector pushes both), so
|
||||
// keying off `colors` keeps the single/multi request self-consistent.
|
||||
@@ -183,7 +263,7 @@ export function filamentPatchToApi(patch: Partial<Filament>): Json {
|
||||
return out;
|
||||
}
|
||||
|
||||
export function vendorPatchToApi(patch: Partial<Vendor>): Json {
|
||||
export function vendorPatchToApi(patch: VendorPatch): Json {
|
||||
const out: Json = {};
|
||||
if ('name' in patch) out.name = patch.name;
|
||||
if ('emptyWeight' in patch) out.empty_spool_weight = patch.emptyWeight;
|
||||
|
||||
@@ -0,0 +1,206 @@
|
||||
import { describe, expect, it } from 'vitest';
|
||||
import { allPages, buildCatalogQuery, buildGroupQuery, buildVendorTotalsQuery } from './query';
|
||||
import type { LibraryState } from '$lib/library/params';
|
||||
|
||||
// A filament with no spools is the one you need to re-order, and grouping by
|
||||
// filament used to drop it entirely — the library then looked fully stocked
|
||||
// (#1092). Listing them is opt-in (showEmpty), and on top of that the query
|
||||
// builder has a rule worth pinning down: a filter about SPOOLS (where they are,
|
||||
// when they were used) is a question an empty filament cannot answer, so the API
|
||||
// refuses that combination and the client must not send it.
|
||||
//
|
||||
// These cases run with showEmpty on unless they say otherwise; the default-off
|
||||
// behaviour is its own case below.
|
||||
|
||||
function state(over: Partial<LibraryState> = {}): LibraryState {
|
||||
return {
|
||||
view: 'spools',
|
||||
selection: null,
|
||||
group: 'filament',
|
||||
sortKey: 'last_used',
|
||||
sortAsc: false,
|
||||
filters: [],
|
||||
showArchived: false,
|
||||
showEmpty: true,
|
||||
showLotNumbers: false,
|
||||
page: 1,
|
||||
pageSize: 20,
|
||||
...over
|
||||
};
|
||||
}
|
||||
|
||||
describe('buildGroupQuery — includeEmpty', () => {
|
||||
it('asks for empty groups when grouping by filament with no filters', () => {
|
||||
expect(buildGroupQuery(state()).includeEmpty).toBe(true);
|
||||
});
|
||||
|
||||
it('does not ask unless the user turned it on', () => {
|
||||
// Off by default: a filament you own none of cannot serve the daily job of
|
||||
// finding something to print with, and how many of them there are depends
|
||||
// on how big a catalogue the user keeps.
|
||||
expect(buildGroupQuery(state({ showEmpty: false })).includeEmpty).toBe(false);
|
||||
});
|
||||
|
||||
it('does not ask on any other grouping, which has no empty groups to list', () => {
|
||||
for (const group of ['vendor', 'material', 'location'] as const) {
|
||||
expect(buildGroupQuery(state({ group })).includeEmpty).toBe(false);
|
||||
}
|
||||
});
|
||||
|
||||
it('keeps asking under filters the filament itself answers', () => {
|
||||
const filters = [
|
||||
{ prop: 'filament', value: '4' },
|
||||
{ prop: 'material', value: 'PLA' },
|
||||
{ prop: 'vendor', value: 'Acme' },
|
||||
{ prop: 'direction', value: 'coaxial' },
|
||||
{ prop: 'filament.extra.shelf', value: '"A"' },
|
||||
{ prop: 'filament.vendor.extra.tier', value: '"gold"' }
|
||||
];
|
||||
for (const f of filters) {
|
||||
expect(buildGroupQuery(state({ filters: [f] })).includeEmpty).toBe(true);
|
||||
}
|
||||
});
|
||||
|
||||
it('stops asking under a filter about the spools themselves', () => {
|
||||
const filters = [
|
||||
{ prop: 'location', value: 'Shelf A' },
|
||||
{ prop: 'lot', value: 'B12' },
|
||||
{ prop: 'last_used', value: '7d' },
|
||||
{ prop: 'first_used', value: '7d' },
|
||||
{ prop: 'registered', value: '7d' },
|
||||
{ prop: 'extra.opened', value: 'true' }
|
||||
];
|
||||
for (const f of filters) {
|
||||
expect(buildGroupQuery(state({ filters: [f] })).includeEmpty).toBe(false);
|
||||
}
|
||||
});
|
||||
|
||||
it('lets one spool-scoped filter veto a set of filament-scoped ones', () => {
|
||||
const filters = [
|
||||
{ prop: 'material', value: 'PLA' },
|
||||
{ prop: 'location', value: 'Shelf A' }
|
||||
];
|
||||
expect(buildGroupQuery(state({ filters })).includeEmpty).toBe(false);
|
||||
});
|
||||
|
||||
it('still asks when only archived spools are hidden, which is the default view', () => {
|
||||
// A filament whose every spool is archived has none to print with, so it
|
||||
// belongs in the list for the same reason a filament with no spools does.
|
||||
expect(buildGroupQuery(state({ showArchived: false })).includeEmpty).toBe(true);
|
||||
});
|
||||
});
|
||||
|
||||
// The catalog sub-views page the group endpoint too, always including the empty
|
||||
// groups. The order is what holds the filament list's manufacturer sections
|
||||
// together across pages, so it is pinned down here.
|
||||
describe('buildCatalogQuery', () => {
|
||||
const catalog = (over: Partial<LibraryState> = {}) =>
|
||||
state({ view: 'filaments', group: 'vendor', sortKey: 'name', sortAsc: true, showEmpty: false, ...over });
|
||||
|
||||
it('lists every filament, manufacturer first, then by name', () => {
|
||||
const q = buildCatalogQuery(catalog({ page: 3, pageSize: 50 }));
|
||||
expect(q).toMatchObject({ field: 'filament', includeEmpty: true, preview: true, limit: 50, offset: 100 });
|
||||
expect(q.sort).toEqual([
|
||||
{ field: 'group.vendor_name', dir: 'asc' },
|
||||
{ field: 'group.title', dir: 'asc' }
|
||||
]);
|
||||
});
|
||||
|
||||
it('drops the manufacturer lead when the list is flat', () => {
|
||||
expect(buildCatalogQuery(catalog({ group: 'none', sortAsc: false })).sort).toEqual([
|
||||
{ field: 'group.title', dir: 'desc' }
|
||||
]);
|
||||
});
|
||||
|
||||
it('breaks weight and recency ties by name', () => {
|
||||
expect(buildCatalogQuery(catalog({ sortKey: 'remaining_weight', sortAsc: false })).sort).toEqual([
|
||||
{ field: 'group.vendor_name', dir: 'asc' },
|
||||
{ field: 'group.total_remaining', dir: 'desc' },
|
||||
{ field: 'group.title', dir: 'asc' }
|
||||
]);
|
||||
expect(buildCatalogQuery(catalog({ group: 'none', sortKey: 'last_used' })).sort).toEqual([
|
||||
{ field: 'group.last_used', dir: 'asc' },
|
||||
{ field: 'group.title', dir: 'asc' }
|
||||
]);
|
||||
});
|
||||
|
||||
it('pages manufacturers in the manufacturer view', () => {
|
||||
const q = buildCatalogQuery(catalog({ view: 'manufacturers', group: 'none' }));
|
||||
expect(q).toMatchObject({ field: 'vendor', includeEmpty: true, preview: true });
|
||||
expect(q.sort).toEqual([{ field: 'group.title', dir: 'asc' }]);
|
||||
});
|
||||
|
||||
it('orders by the fields of the filament and manufacturer, custom ones too', () => {
|
||||
const sortOf = (sortKey: string, view: LibraryState['view'] = 'filaments') =>
|
||||
buildCatalogQuery(catalog({ view, group: 'none', sortKey, sortAsc: false })).sort[0];
|
||||
expect(sortOf('filament.settings_extruder_temp')).toEqual({
|
||||
field: 'filament.settings_extruder_temp',
|
||||
dir: 'desc'
|
||||
});
|
||||
expect(sortOf('filament.extra.shelf')).toEqual({ field: 'filament.extra.shelf', dir: 'desc' });
|
||||
expect(sortOf('filament.vendor.extra.country', 'manufacturers')).toEqual({
|
||||
field: 'filament.vendor.extra.country',
|
||||
dir: 'desc'
|
||||
});
|
||||
expect(sortOf('filament_count', 'manufacturers')).toEqual({ field: 'group.filament_count', dir: 'desc' });
|
||||
// A filament's custom field means nothing to a manufacturer, nor a spool's to either.
|
||||
expect(sortOf('filament.extra.shelf', 'manufacturers').field).toBe('group.title');
|
||||
expect(sortOf('location').field).toBe('group.title');
|
||||
});
|
||||
|
||||
it('takes any filter, leaving out the empty ones under a filter about spools', () => {
|
||||
// "Which filaments do I have on Shelf A" is a fair question of the catalog,
|
||||
// but a filament with no spools isn't anywhere, and the API refuses to say.
|
||||
const filters = [{ prop: 'location', value: 'Shelf A' }];
|
||||
expect(buildCatalogQuery(catalog({ filters }))).toMatchObject({ includeEmpty: false });
|
||||
expect(buildVendorTotalsQuery(catalog({ filters }), ['1'])).toMatchObject({ includeEmpty: false });
|
||||
expect(buildCatalogQuery(catalog({ filters: [{ prop: 'material', value: 'PLA' }] }))).toMatchObject({
|
||||
includeEmpty: true
|
||||
});
|
||||
});
|
||||
|
||||
it('narrows the section totals to the manufacturers on the page', () => {
|
||||
const filters = [{ prop: 'material', value: 'PLA' }];
|
||||
const q = buildVendorTotalsQuery(catalog({ filters, showArchived: true }), ['1', '4']);
|
||||
expect(q).toMatchObject({
|
||||
field: 'vendor',
|
||||
includeEmpty: true,
|
||||
allowArchived: true,
|
||||
limit: 2,
|
||||
offset: 0
|
||||
});
|
||||
expect(q.filters).toEqual({ material: ['PLA'], vendorId: ['1', '4'] });
|
||||
});
|
||||
});
|
||||
|
||||
// The dashboard and the filament inspector used to stop at their first page
|
||||
// (1000 groups, 100 spools) and show the rest as if it didn't exist.
|
||||
describe('allPages', () => {
|
||||
const rows = Array.from({ length: 25 }, (_, i) => i);
|
||||
const pager = (size: number) => {
|
||||
const offsets: number[] = [];
|
||||
const fetchPage = async (offset: number) => {
|
||||
offsets.push(offset);
|
||||
return { items: rows.slice(offset, offset + size), total: rows.length };
|
||||
};
|
||||
return { offsets, fetchPage };
|
||||
};
|
||||
|
||||
it('keeps fetching until it has every row', async () => {
|
||||
const { offsets, fetchPage } = pager(10);
|
||||
expect(await allPages(10, fetchPage)).toEqual(rows);
|
||||
expect(offsets).toEqual([0, 10, 20]);
|
||||
});
|
||||
|
||||
it('stops after one request when the first page holds everything', async () => {
|
||||
const { offsets, fetchPage } = pager(100);
|
||||
expect(await allPages(100, fetchPage)).toEqual(rows);
|
||||
expect(offsets).toEqual([0]);
|
||||
});
|
||||
|
||||
it('stops on an exact multiple without asking for an empty page', async () => {
|
||||
const { offsets, fetchPage } = pager(5);
|
||||
expect(await allPages(5, fetchPage)).toHaveLength(25);
|
||||
expect(offsets).toEqual([0, 5, 10, 15, 20]);
|
||||
});
|
||||
});
|
||||
Loaded 100 of 354 files, more files were not shown because too many files have changed in this diff.
Show more
Reference in new issue
Block a user