mirror of
https://github.com/sysadminsmedia/homebox.git
synced 2025-12-27 15:41:42 +01:00
Compare commits
19 Commits
copilot/im
...
v0.22.3
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
473027c1ae | ||
|
|
3a77440996 | ||
|
|
731765c36c | ||
|
|
a86b1bd17b | ||
|
|
064b298968 | ||
|
|
2638f218f3 | ||
|
|
0f4f398b5a | ||
|
|
545993a8aa | ||
|
|
a1947dd09e | ||
|
|
018f1f5977 | ||
|
|
9a9e3d462e | ||
|
|
fc8b6f0dcf | ||
|
|
37890c2a22 | ||
|
|
096b682f0a | ||
|
|
e4d8bb2ada | ||
|
|
3becf046e6 | ||
|
|
a21b3257d4 | ||
|
|
5f9ab577bb | ||
|
|
0a969bb64d |
14
.scaffold/go.sum
Normal file
14
.scaffold/go.sum
Normal file
@@ -0,0 +1,14 @@
|
||||
entgo.io/ent v0.14.5 h1:Rj2WOYJtCkWyFo6a+5wB3EfBRP0rnx1fMk6gGA0UUe4=
|
||||
entgo.io/ent v0.14.5/go.mod h1:zTzLmWtPvGpmSwtkaayM2cm5m819NdM7z7tYPq3vN0U=
|
||||
github.com/davecgh/go-spew v1.1.2-0.20180830191138-d8f796af33cc h1:U9qPSI2PIWSS1VwoXQT9A3Wy9MM3WgvqSxFWenqJduM=
|
||||
github.com/davecgh/go-spew v1.1.2-0.20180830191138-d8f796af33cc/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38=
|
||||
github.com/google/uuid v1.6.0 h1:NIvaJDMOsjHA8n1jAhLSgzrAzy1Hgr+hNrb57e+94F0=
|
||||
github.com/google/uuid v1.6.0/go.mod h1:TIyPZe4MgqvfeYDBFedMoGGpEw/LqOeaOT+nhxU+yHo=
|
||||
github.com/pmezard/go-difflib v1.0.1-0.20181226105442-5d4384ee4fb2 h1:Jamvg5psRIccs7FGNTlIRMkT8wgtp5eCXdBlqhYGL6U=
|
||||
github.com/pmezard/go-difflib v1.0.1-0.20181226105442-5d4384ee4fb2/go.mod h1:iKH77koFhYxTK1pcRnkKkqfTogsbg7gZNVY4sRDYZ/4=
|
||||
github.com/stretchr/testify v1.11.1 h1:7s2iGBzp5EwR7/aIZr8ao5+dra3wiQyKjjFuvgVKu7U=
|
||||
github.com/stretchr/testify v1.11.1/go.mod h1:wZwfW3scLgRK+23gO65QZefKpKQRnfz6sD981Nm4B6U=
|
||||
github.com/sysadminsmedia/homebox/backend v0.0.0-20251212183312-2d1d3d927bfd h1:QULUJSgHc4rSlTjb2qYT6FIgwDWFCqEpnYqc/ltsrkk=
|
||||
github.com/sysadminsmedia/homebox/backend v0.0.0-20251212183312-2d1d3d927bfd/go.mod h1:jB+tPmHtPDM1VnAjah0gvcRfP/s7c+rtQwpA8cvZD/U=
|
||||
gopkg.in/yaml.v3 v3.0.1 h1:fxVm/GzAzEWqLHuvctI91KS9hhNmmWOoWu0XTYJS7CA=
|
||||
gopkg.in/yaml.v3 v3.0.1/go.mod h1:K4uyk7z7BCEPqu6E+C64Yfv1cQ7kz7rIZviUmN+EgEM=
|
||||
@@ -124,7 +124,7 @@ func (ctrl *V1Controller) HandleAuthLogin(ps ...AuthProvider) errchain.HandlerFu
|
||||
return validate.NewUnauthorizedError()
|
||||
}
|
||||
|
||||
ctrl.setCookies(w, noPort(r.Host), newToken.Raw, newToken.ExpiresAt, true)
|
||||
ctrl.setCookies(w, noPort(r.Host), newToken.Raw, newToken.ExpiresAt, true, newToken.AttachmentToken)
|
||||
return server.JSON(w, http.StatusOK, TokenResponse{
|
||||
Token: "Bearer " + newToken.Raw,
|
||||
ExpiresAt: newToken.ExpiresAt,
|
||||
@@ -178,7 +178,7 @@ func (ctrl *V1Controller) HandleAuthRefresh() errchain.HandlerFunc {
|
||||
return validate.NewUnauthorizedError()
|
||||
}
|
||||
|
||||
ctrl.setCookies(w, noPort(r.Host), newToken.Raw, newToken.ExpiresAt, false)
|
||||
ctrl.setCookies(w, noPort(r.Host), newToken.Raw, newToken.ExpiresAt, false, newToken.AttachmentToken)
|
||||
return server.JSON(w, http.StatusOK, newToken)
|
||||
}
|
||||
}
|
||||
@@ -187,7 +187,7 @@ func noPort(host string) string {
|
||||
return strings.Split(host, ":")[0]
|
||||
}
|
||||
|
||||
func (ctrl *V1Controller) setCookies(w http.ResponseWriter, domain, token string, expires time.Time, remember bool) {
|
||||
func (ctrl *V1Controller) setCookies(w http.ResponseWriter, domain, token string, expires time.Time, remember bool, attachmentToken string) {
|
||||
http.SetCookie(w, &http.Cookie{
|
||||
Name: cookieNameRemember,
|
||||
Value: strconv.FormatBool(remember),
|
||||
@@ -219,6 +219,19 @@ func (ctrl *V1Controller) setCookies(w http.ResponseWriter, domain, token string
|
||||
HttpOnly: false,
|
||||
Path: "/",
|
||||
})
|
||||
|
||||
// Set attachment token cookie (accessible to frontend, not HttpOnly)
|
||||
if attachmentToken != "" {
|
||||
http.SetCookie(w, &http.Cookie{
|
||||
Name: "hb.auth.attachment_token",
|
||||
Value: attachmentToken,
|
||||
Expires: expires,
|
||||
Domain: domain,
|
||||
Secure: ctrl.cookieSecure,
|
||||
HttpOnly: false,
|
||||
Path: "/",
|
||||
})
|
||||
}
|
||||
}
|
||||
|
||||
func (ctrl *V1Controller) unsetCookies(w http.ResponseWriter, domain string) {
|
||||
@@ -252,6 +265,17 @@ func (ctrl *V1Controller) unsetCookies(w http.ResponseWriter, domain string) {
|
||||
HttpOnly: false,
|
||||
Path: "/",
|
||||
})
|
||||
|
||||
// Unset attachment token cookie
|
||||
http.SetCookie(w, &http.Cookie{
|
||||
Name: "hb.auth.attachment_token",
|
||||
Value: "",
|
||||
Expires: time.Unix(0, 0),
|
||||
Domain: domain,
|
||||
Secure: ctrl.cookieSecure,
|
||||
HttpOnly: false,
|
||||
Path: "/",
|
||||
})
|
||||
}
|
||||
|
||||
// HandleOIDCLogin godoc
|
||||
@@ -310,7 +334,7 @@ func (ctrl *V1Controller) HandleOIDCCallback() errchain.HandlerFunc {
|
||||
}
|
||||
|
||||
// Set cookies and redirect to home
|
||||
ctrl.setCookies(w, noPort(r.Host), newToken.Raw, newToken.ExpiresAt, true)
|
||||
ctrl.setCookies(w, noPort(r.Host), newToken.Raw, newToken.ExpiresAt, true, newToken.AttachmentToken)
|
||||
http.Redirect(w, r, "/home", http.StatusFound)
|
||||
return nil
|
||||
}
|
||||
|
||||
@@ -6,16 +6,16 @@ toolchain go1.24.3
|
||||
|
||||
require (
|
||||
entgo.io/ent v0.14.5
|
||||
github.com/ardanlabs/conf/v3 v3.9.0
|
||||
github.com/ardanlabs/conf/v3 v3.10.0
|
||||
github.com/containrrr/shoutrrr v0.8.0
|
||||
github.com/coreos/go-oidc/v3 v3.17.0
|
||||
github.com/evanoberholster/imagemeta v0.3.1
|
||||
github.com/gen2brain/avif v0.4.4
|
||||
github.com/gen2brain/heic v0.4.6
|
||||
github.com/gen2brain/heic v0.4.7
|
||||
github.com/gen2brain/jpegxl v0.4.5
|
||||
github.com/gen2brain/webp v0.5.5
|
||||
github.com/go-chi/chi/v5 v5.2.3
|
||||
github.com/go-playground/validator/v10 v10.28.0
|
||||
github.com/go-playground/validator/v10 v10.30.1
|
||||
github.com/gocarina/gocsv v0.0.0-20240520201108-78e41c74b4b1
|
||||
github.com/golang/freetype v0.0.0-20170609003504-e2365dfdc4a0
|
||||
github.com/google/uuid v1.6.0
|
||||
@@ -40,11 +40,11 @@ require (
|
||||
gocloud.dev/pubsub/kafkapubsub v0.44.0
|
||||
gocloud.dev/pubsub/natspubsub v0.44.0
|
||||
gocloud.dev/pubsub/rabbitpubsub v0.44.0
|
||||
golang.org/x/crypto v0.45.0
|
||||
golang.org/x/image v0.33.0
|
||||
golang.org/x/oauth2 v0.33.0
|
||||
golang.org/x/text v0.31.0
|
||||
modernc.org/sqlite v1.40.1
|
||||
golang.org/x/crypto v0.46.0
|
||||
golang.org/x/image v0.34.0
|
||||
golang.org/x/oauth2 v0.34.0
|
||||
golang.org/x/text v0.32.0
|
||||
modernc.org/sqlite v1.41.0
|
||||
)
|
||||
|
||||
require (
|
||||
@@ -54,9 +54,9 @@ require (
|
||||
cloud.google.com/go/auth v0.17.0 // indirect
|
||||
cloud.google.com/go/auth/oauth2adapt v0.2.8 // indirect
|
||||
cloud.google.com/go/compute/metadata v0.9.0 // indirect
|
||||
cloud.google.com/go/iam v1.5.2 // indirect
|
||||
cloud.google.com/go/monitoring v1.24.2 // indirect
|
||||
cloud.google.com/go/pubsub v1.50.0 // indirect
|
||||
cloud.google.com/go/iam v1.5.3 // indirect
|
||||
cloud.google.com/go/monitoring v1.24.3 // indirect
|
||||
cloud.google.com/go/pubsub v1.50.1 // indirect
|
||||
cloud.google.com/go/pubsub/v2 v2.2.1 // indirect
|
||||
cloud.google.com/go/storage v1.56.0 // indirect
|
||||
github.com/Azure/azure-amqp-common-go/v3 v3.2.3 // indirect
|
||||
@@ -111,15 +111,15 @@ require (
|
||||
github.com/fatih/color v1.18.0 // indirect
|
||||
github.com/felixge/httpsnoop v1.0.4 // indirect
|
||||
github.com/fogleman/gg v1.3.0 // indirect
|
||||
github.com/gabriel-vasile/mimetype v1.4.11 // indirect
|
||||
github.com/gabriel-vasile/mimetype v1.4.12 // indirect
|
||||
github.com/go-jose/go-jose/v4 v4.1.3 // indirect
|
||||
github.com/go-logr/logr v1.4.3 // indirect
|
||||
github.com/go-logr/stdr v1.2.2 // indirect
|
||||
github.com/go-ole/go-ole v1.2.6 // indirect
|
||||
github.com/go-openapi/inflect v0.19.0 // indirect
|
||||
github.com/go-openapi/jsonpointer v0.22.3 // indirect
|
||||
github.com/go-openapi/jsonreference v0.21.3 // indirect
|
||||
github.com/go-openapi/spec v0.22.1 // indirect
|
||||
github.com/go-openapi/jsonpointer v0.22.4 // indirect
|
||||
github.com/go-openapi/jsonreference v0.21.4 // indirect
|
||||
github.com/go-openapi/spec v0.22.3 // indirect
|
||||
github.com/go-openapi/swag/conv v0.25.4 // indirect
|
||||
github.com/go-openapi/swag/jsonname v0.25.4 // indirect
|
||||
github.com/go-openapi/swag/jsonutils v0.25.4 // indirect
|
||||
@@ -135,7 +135,7 @@ require (
|
||||
github.com/google/s2a-go v0.1.9 // indirect
|
||||
github.com/google/wire v0.7.0 // indirect
|
||||
github.com/googleapis/enterprise-certificate-proxy v0.3.7 // indirect
|
||||
github.com/googleapis/gax-go/v2 v2.15.0 // indirect
|
||||
github.com/googleapis/gax-go/v2 v2.16.0 // indirect
|
||||
github.com/gorilla/websocket v1.5.3 // indirect
|
||||
github.com/hashicorp/go-uuid v1.0.3 // indirect
|
||||
github.com/hashicorp/hcl/v2 v2.18.1 // indirect
|
||||
@@ -153,12 +153,12 @@ require (
|
||||
github.com/mattn/go-isatty v0.0.20 // indirect
|
||||
github.com/mfridman/interpolate v0.0.2 // indirect
|
||||
github.com/mitchellh/go-wordwrap v1.0.1 // indirect
|
||||
github.com/nats-io/nats.go v1.47.0 // indirect
|
||||
github.com/nats-io/nats.go v1.48.0 // indirect
|
||||
github.com/nats-io/nkeys v0.4.12 // indirect
|
||||
github.com/nats-io/nuid v1.0.1 // indirect
|
||||
github.com/ncruces/go-strftime v1.0.0 // indirect
|
||||
github.com/philhofer/fwd v1.2.0 // indirect
|
||||
github.com/pierrec/lz4/v4 v4.1.22 // indirect
|
||||
github.com/pierrec/lz4/v4 v4.1.23 // indirect
|
||||
github.com/pkg/browser v0.0.0-20240102092130-5ac0b6a4141c // indirect
|
||||
github.com/planetscale/vtprotobuf v0.6.1-0.20240319094008-0393e58bdf10 // indirect
|
||||
github.com/pmezard/go-difflib v1.0.1-0.20181226105442-5d4384ee4fb2 // indirect
|
||||
@@ -169,7 +169,7 @@ require (
|
||||
github.com/sethvargo/go-retry v0.3.0 // indirect
|
||||
github.com/spiffe/go-spiffe/v2 v2.6.0 // indirect
|
||||
github.com/swaggo/files/v2 v2.0.2 // indirect
|
||||
github.com/tetratelabs/wazero v1.10.1 // indirect
|
||||
github.com/tetratelabs/wazero v1.11.0 // indirect
|
||||
github.com/tinylib/msgp v1.6.1 // indirect
|
||||
github.com/tklauser/go-sysconf v0.3.16 // indirect
|
||||
github.com/tklauser/numcpus v0.11.0 // indirect
|
||||
@@ -181,29 +181,29 @@ require (
|
||||
go.opentelemetry.io/contrib/detectors/gcp v1.38.0 // indirect
|
||||
go.opentelemetry.io/contrib/instrumentation/google.golang.org/grpc/otelgrpc v0.62.0 // indirect
|
||||
go.opentelemetry.io/contrib/instrumentation/net/http/otelhttp v0.62.0 // indirect
|
||||
go.opentelemetry.io/otel v1.38.0 // indirect
|
||||
go.opentelemetry.io/otel/metric v1.38.0 // indirect
|
||||
go.opentelemetry.io/otel/sdk v1.38.0 // indirect
|
||||
go.opentelemetry.io/otel/sdk/metric v1.38.0 // indirect
|
||||
go.opentelemetry.io/otel/trace v1.38.0 // indirect
|
||||
go.opentelemetry.io/otel v1.39.0 // indirect
|
||||
go.opentelemetry.io/otel/metric v1.39.0 // indirect
|
||||
go.opentelemetry.io/otel/sdk v1.39.0 // indirect
|
||||
go.opentelemetry.io/otel/sdk/metric v1.39.0 // indirect
|
||||
go.opentelemetry.io/otel/trace v1.39.0 // indirect
|
||||
go.uber.org/multierr v1.11.0 // indirect
|
||||
go.yaml.in/yaml/v3 v3.0.4 // indirect
|
||||
golang.org/x/exp v0.0.0-20251125195548-87e1e737ad39 // indirect
|
||||
golang.org/x/mod v0.30.0 // indirect
|
||||
golang.org/x/net v0.47.0 // indirect
|
||||
golang.org/x/sync v0.18.0 // indirect
|
||||
golang.org/x/sys v0.38.0 // indirect
|
||||
golang.org/x/exp v0.0.0-20251219203646-944ab1f22d93 // indirect
|
||||
golang.org/x/mod v0.31.0 // indirect
|
||||
golang.org/x/net v0.48.0 // indirect
|
||||
golang.org/x/sync v0.19.0 // indirect
|
||||
golang.org/x/sys v0.39.0 // indirect
|
||||
golang.org/x/time v0.14.0 // indirect
|
||||
golang.org/x/tools v0.39.0 // indirect
|
||||
golang.org/x/tools v0.40.0 // indirect
|
||||
golang.org/x/xerrors v0.0.0-20240903120638-7835f813f4da // indirect
|
||||
google.golang.org/api v0.257.0 // indirect
|
||||
google.golang.org/genproto v0.0.0-20250715232539-7130f93afb79 // indirect
|
||||
google.golang.org/genproto/googleapis/api v0.0.0-20251022142026-3a174f9686a8 // indirect
|
||||
google.golang.org/genproto/googleapis/rpc v0.0.0-20251202230838-ff82c1b0f217 // indirect
|
||||
google.golang.org/grpc v1.77.0 // indirect
|
||||
google.golang.org/protobuf v1.36.10 // indirect
|
||||
google.golang.org/api v0.258.0 // indirect
|
||||
google.golang.org/genproto v0.0.0-20251202230838-ff82c1b0f217 // indirect
|
||||
google.golang.org/genproto/googleapis/api v0.0.0-20251202230838-ff82c1b0f217 // indirect
|
||||
google.golang.org/genproto/googleapis/rpc v0.0.0-20251222181119-0a764e51fe1b // indirect
|
||||
google.golang.org/grpc v1.78.0 // indirect
|
||||
google.golang.org/protobuf v1.36.11 // indirect
|
||||
gopkg.in/yaml.v3 v3.0.1 // indirect
|
||||
modernc.org/libc v1.67.1 // indirect
|
||||
modernc.org/libc v1.67.2 // indirect
|
||||
modernc.org/mathutil v1.7.1 // indirect
|
||||
modernc.org/memory v1.11.0 // indirect
|
||||
)
|
||||
|
||||
@@ -12,20 +12,29 @@ cloud.google.com/go/compute/metadata v0.9.0 h1:pDUj4QMoPejqq20dK0Pg2N4yG9zIkYGdB
|
||||
cloud.google.com/go/compute/metadata v0.9.0/go.mod h1:E0bWwX5wTnLPedCKqk3pJmVgCBSM6qQI1yTBdEb3C10=
|
||||
cloud.google.com/go/iam v1.5.2 h1:qgFRAGEmd8z6dJ/qyEchAuL9jpswyODjA2lS+w234g8=
|
||||
cloud.google.com/go/iam v1.5.2/go.mod h1:SE1vg0N81zQqLzQEwxL2WI6yhetBdbNQuTvIKCSkUHE=
|
||||
cloud.google.com/go/iam v1.5.3 h1:+vMINPiDF2ognBJ97ABAYYwRgsaqxPbQDlMnbHMjolc=
|
||||
cloud.google.com/go/iam v1.5.3/go.mod h1:MR3v9oLkZCTlaqljW6Eb2d3HGDGK5/bDv93jhfISFvU=
|
||||
cloud.google.com/go/logging v1.13.0 h1:7j0HgAp0B94o1YRDqiqm26w4q1rDMH7XNRU34lJXHYc=
|
||||
cloud.google.com/go/logging v1.13.0/go.mod h1:36CoKh6KA/M0PbhPKMq6/qety2DCAErbhXT62TuXALA=
|
||||
cloud.google.com/go/logging v1.13.1 h1:O7LvmO0kGLaHY/gq8cV7T0dyp6zJhYAOtZPX4TF3QtY=
|
||||
cloud.google.com/go/longrunning v0.6.7 h1:IGtfDWHhQCgCjwQjV9iiLnUta9LBCo8R9QmAFsS/PrE=
|
||||
cloud.google.com/go/longrunning v0.6.7/go.mod h1:EAFV3IZAKmM56TyiE6VAP3VoTzhZzySwI/YI1s/nRsY=
|
||||
cloud.google.com/go/longrunning v0.7.0 h1:FV0+SYF1RIj59gyoWDRi45GiYUMM3K1qO51qoboQT1E=
|
||||
cloud.google.com/go/monitoring v1.24.2 h1:5OTsoJ1dXYIiMiuL+sYscLc9BumrL3CarVLL7dd7lHM=
|
||||
cloud.google.com/go/monitoring v1.24.2/go.mod h1:x7yzPWcgDRnPEv3sI+jJGBkwl5qINf+6qY4eq0I9B4U=
|
||||
cloud.google.com/go/monitoring v1.24.3 h1:dde+gMNc0UhPZD1Azu6at2e79bfdztVDS5lvhOdsgaE=
|
||||
cloud.google.com/go/monitoring v1.24.3/go.mod h1:nYP6W0tm3N9H/bOw8am7t62YTzZY+zUeQ+Bi6+2eonI=
|
||||
cloud.google.com/go/pubsub v1.50.0 h1:hnYpOIxVlgVD1Z8LN7est4DQZK3K6tvZNurZjIVjUe0=
|
||||
cloud.google.com/go/pubsub v1.50.0/go.mod h1:Di2Y+nqXBpIS+dXUEJPQzLh8PbIQZMLE9IVUFhf2zmM=
|
||||
cloud.google.com/go/pubsub v1.50.1 h1:fzbXpPyJnSGvWXF1jabhQeXyxdbCIkXTpjXHy7xviBM=
|
||||
cloud.google.com/go/pubsub v1.50.1/go.mod h1:6YVJv3MzWJUVdvQXG081sFvS0dWQOdnV+oTo++q/xFk=
|
||||
cloud.google.com/go/pubsub/v2 v2.2.1 h1:3brZcshL3fIiD1qOxAE2QW9wxsfjioy014x4yC9XuYI=
|
||||
cloud.google.com/go/pubsub/v2 v2.2.1/go.mod h1:O5f0KHG9zDheZAd3z5rlCRhxt2JQtB+t/IYLKK3Bpvw=
|
||||
cloud.google.com/go/storage v1.56.0 h1:iixmq2Fse2tqxMbWhLWC9HfBj1qdxqAmiK8/eqtsLxI=
|
||||
cloud.google.com/go/storage v1.56.0/go.mod h1:Tpuj6t4NweCLzlNbw9Z9iwxEkrSem20AetIeH/shgVU=
|
||||
cloud.google.com/go/trace v1.11.6 h1:2O2zjPzqPYAHrn3OKl029qlqG6W8ZdYaOWRyr8NgMT4=
|
||||
cloud.google.com/go/trace v1.11.6/go.mod h1:GA855OeDEBiBMzcckLPE2kDunIpC72N+Pq8WFieFjnI=
|
||||
cloud.google.com/go/trace v1.11.7 h1:kDNDX8JkaAG3R2nq1lIdkb7FCSi1rCmsEtKVsty7p+U=
|
||||
entgo.io/ent v0.14.5 h1:Rj2WOYJtCkWyFo6a+5wB3EfBRP0rnx1fMk6gGA0UUe4=
|
||||
entgo.io/ent v0.14.5/go.mod h1:zTzLmWtPvGpmSwtkaayM2cm5m819NdM7z7tYPq3vN0U=
|
||||
github.com/Azure/azure-amqp-common-go/v3 v3.2.3 h1:uDF62mbd9bypXWi19V1bN5NZEO84JqgmI5G73ibAmrk=
|
||||
@@ -81,6 +90,8 @@ github.com/apparentlymart/go-textseg/v15 v15.0.0 h1:uYvfpb3DyLSCGWnctWKGj857c6ew
|
||||
github.com/apparentlymart/go-textseg/v15 v15.0.0/go.mod h1:K8XmNZdhEBkdlyDdvbmmsvpAG721bKi0joRfFdHIWJ4=
|
||||
github.com/ardanlabs/conf/v3 v3.9.0 h1:aRBYHeD39/OkuaEXYIEoi4wvF3OnS7jUAPxXyLfEu20=
|
||||
github.com/ardanlabs/conf/v3 v3.9.0/go.mod h1:XlL9P0quWP4m1weOVFmlezabinbZLI05niDof/+Ochk=
|
||||
github.com/ardanlabs/conf/v3 v3.10.0 h1:qIrJ/WBmH/hFQ/IX4xH9LX9LzwK44T9aEOy78M+4S+0=
|
||||
github.com/ardanlabs/conf/v3 v3.10.0/go.mod h1:XlL9P0quWP4m1weOVFmlezabinbZLI05niDof/+Ochk=
|
||||
github.com/aws/aws-sdk-go-v2 v1.39.6 h1:2JrPCVgWJm7bm83BDwY5z8ietmeJUbh3O2ACnn+Xsqk=
|
||||
github.com/aws/aws-sdk-go-v2 v1.39.6/go.mod h1:c9pm7VwuW0UPxAEYGyTmyurVcNrbF6Rt/wixFqDhcjE=
|
||||
github.com/aws/aws-sdk-go-v2/aws/protocol/eventstream v1.7.3 h1:DHctwEM8P8iTXFxC/QK0MRjwEpWQeM9yzidCRjldUz0=
|
||||
@@ -174,10 +185,14 @@ github.com/fortytw2/leaktest v1.3.0 h1:u8491cBMTQ8ft8aeV+adlcytMZylmA5nnwwkRZjI8
|
||||
github.com/fortytw2/leaktest v1.3.0/go.mod h1:jDsjWgpAGjm2CA7WthBh/CdZYEPF31XHquHwclZch5g=
|
||||
github.com/gabriel-vasile/mimetype v1.4.11 h1:AQvxbp830wPhHTqc1u7nzoLT+ZFxGY7emj5DR5DYFik=
|
||||
github.com/gabriel-vasile/mimetype v1.4.11/go.mod h1:d+9Oxyo1wTzWdyVUPMmXFvp4F9tea18J8ufA774AB3s=
|
||||
github.com/gabriel-vasile/mimetype v1.4.12 h1:e9hWvmLYvtp846tLHam2o++qitpguFiYCKbn0w9jyqw=
|
||||
github.com/gabriel-vasile/mimetype v1.4.12/go.mod h1:d+9Oxyo1wTzWdyVUPMmXFvp4F9tea18J8ufA774AB3s=
|
||||
github.com/gen2brain/avif v0.4.4 h1:Ga/ss7qcWWQm2bxFpnjYjhJsNfZrWs5RsyklgFjKRSE=
|
||||
github.com/gen2brain/avif v0.4.4/go.mod h1:/XCaJcjZraQwKVhpu9aEd9aLOssYOawLvhMBtmHVGqk=
|
||||
github.com/gen2brain/heic v0.4.6 h1:sNh3mfaEZLmDJnFc5WoLxCzh/wj5GwfJScPfvF5CNJE=
|
||||
github.com/gen2brain/heic v0.4.6/go.mod h1:ECnpqbqLu0qSje4KSNWUUDK47UPXPzl80T27GWGEL5I=
|
||||
github.com/gen2brain/heic v0.4.7 h1:xw/e9R3HdIvb+uEhRDMRJdviYnB3ODe/VwL8SYLaMGc=
|
||||
github.com/gen2brain/heic v0.4.7/go.mod h1:ECnpqbqLu0qSje4KSNWUUDK47UPXPzl80T27GWGEL5I=
|
||||
github.com/gen2brain/jpegxl v0.4.5 h1:TWpVEn5xkIfsswzkjHBArd0Cc9AE0tbjBSoa0jDsrbo=
|
||||
github.com/gen2brain/jpegxl v0.4.5/go.mod h1:4kWYJ18xCEuO2vzocYdGpeqNJ990/Gjy3uLMg5TBN6I=
|
||||
github.com/gen2brain/webp v0.5.5 h1:MvQR75yIPU/9nSqYT5h13k4URaJK3gf9tgz/ksRbyEg=
|
||||
@@ -197,10 +212,16 @@ github.com/go-openapi/inflect v0.19.0 h1:9jCH9scKIbHeV9m12SmPilScz6krDxKRasNNSNP
|
||||
github.com/go-openapi/inflect v0.19.0/go.mod h1:lHpZVlpIQqLyKwJ4N+YSc9hchQy/i12fJykb83CRBH4=
|
||||
github.com/go-openapi/jsonpointer v0.22.3 h1:dKMwfV4fmt6Ah90zloTbUKWMD+0he+12XYAsPotrkn8=
|
||||
github.com/go-openapi/jsonpointer v0.22.3/go.mod h1:0lBbqeRsQ5lIanv3LHZBrmRGHLHcQoOXQnf88fHlGWo=
|
||||
github.com/go-openapi/jsonpointer v0.22.4 h1:dZtK82WlNpVLDW2jlA1YCiVJFVqkED1MegOUy9kR5T4=
|
||||
github.com/go-openapi/jsonpointer v0.22.4/go.mod h1:elX9+UgznpFhgBuaMQ7iu4lvvX1nvNsesQ3oxmYTw80=
|
||||
github.com/go-openapi/jsonreference v0.21.3 h1:96Dn+MRPa0nYAR8DR1E03SblB5FJvh7W6krPI0Z7qMc=
|
||||
github.com/go-openapi/jsonreference v0.21.3/go.mod h1:RqkUP0MrLf37HqxZxrIAtTWW4ZJIK1VzduhXYBEeGc4=
|
||||
github.com/go-openapi/jsonreference v0.21.4 h1:24qaE2y9bx/q3uRK/qN+TDwbok1NhbSmGjjySRCHtC8=
|
||||
github.com/go-openapi/jsonreference v0.21.4/go.mod h1:rIENPTjDbLpzQmQWCj5kKj3ZlmEh+EFVbz3RTUh30/4=
|
||||
github.com/go-openapi/spec v0.22.1 h1:beZMa5AVQzRspNjvhe5aG1/XyBSMeX1eEOs7dMoXh/k=
|
||||
github.com/go-openapi/spec v0.22.1/go.mod h1:c7aeIQT175dVowfp7FeCvXXnjN/MrpaONStibD2WtDA=
|
||||
github.com/go-openapi/spec v0.22.3 h1:qRSmj6Smz2rEBxMnLRBMeBWxbbOvuOoElvSvObIgwQc=
|
||||
github.com/go-openapi/spec v0.22.3/go.mod h1:iIImLODL2loCh3Vnox8TY2YWYJZjMAKYyLH2Mu8lOZs=
|
||||
github.com/go-openapi/swag v0.19.15 h1:D2NRCBzS9/pEY3gP9Nl8aDqGUcPFrwG2p+CNFrLyrCM=
|
||||
github.com/go-openapi/swag/conv v0.25.4 h1:/Dd7p0LZXczgUcC/Ikm1+YqVzkEeCc9LnOWjfkpkfe4=
|
||||
github.com/go-openapi/swag/conv v0.25.4/go.mod h1:3LXfie/lwoAv0NHoEuY1hjoFAYkvlqI/Bn5EQDD3PPU=
|
||||
@@ -230,6 +251,8 @@ github.com/go-playground/universal-translator v0.18.1 h1:Bcnm0ZwsGyWbCzImXv+pAJn
|
||||
github.com/go-playground/universal-translator v0.18.1/go.mod h1:xekY+UJKNuX9WP91TpwSH2VMlDf28Uj24BCp08ZFTUY=
|
||||
github.com/go-playground/validator/v10 v10.28.0 h1:Q7ibns33JjyW48gHkuFT91qX48KG0ktULL6FgHdG688=
|
||||
github.com/go-playground/validator/v10 v10.28.0/go.mod h1:GoI6I1SjPBh9p7ykNE/yj3fFYbyDOpwMn5KXd+m2hUU=
|
||||
github.com/go-playground/validator/v10 v10.30.1 h1:f3zDSN/zOma+w6+1Wswgd9fLkdwy06ntQJp0BBvFG0w=
|
||||
github.com/go-playground/validator/v10 v10.30.1/go.mod h1:oSuBIQzuJxL//3MelwSLD5hc2Tu889bF0Idm9Dg26cM=
|
||||
github.com/go-task/slim-sprig v0.0.0-20230315185526-52ccab3ef572 h1:tfuBGBXKqDEevZMzYi5KSi8KkcZtzBcTgAUUtapy0OI=
|
||||
github.com/go-task/slim-sprig v0.0.0-20230315185526-52ccab3ef572/go.mod h1:9Pwr4B2jHnOSGXyyzV8ROjYa2ojvAY6HCGYYfMoC3Ls=
|
||||
github.com/go-test/deep v1.0.3 h1:ZrJSEWsXzPOxaZnFteGEfooLba+ju3FYIbOrS+rQd68=
|
||||
@@ -269,6 +292,8 @@ github.com/googleapis/enterprise-certificate-proxy v0.3.7 h1:zrn2Ee/nWmHulBx5sAV
|
||||
github.com/googleapis/enterprise-certificate-proxy v0.3.7/go.mod h1:MkHOF77EYAE7qfSuSS9PU6g4Nt4e11cnsDUowfwewLA=
|
||||
github.com/googleapis/gax-go/v2 v2.15.0 h1:SyjDc1mGgZU5LncH8gimWo9lW1DtIfPibOG81vgd/bo=
|
||||
github.com/googleapis/gax-go/v2 v2.15.0/go.mod h1:zVVkkxAQHa1RQpg9z2AUCMnKhi0Qld9rcmyfL1OZhoc=
|
||||
github.com/googleapis/gax-go/v2 v2.16.0 h1:iHbQmKLLZrexmb0OSsNGTeSTS0HO4YvFOG8g5E4Zd0Y=
|
||||
github.com/googleapis/gax-go/v2 v2.16.0/go.mod h1:o1vfQjjNZn4+dPnRdl/4ZD7S9414Y4xA+a/6Icj6l14=
|
||||
github.com/gorilla/schema v1.4.1 h1:jUg5hUjCSDZpNGLuXQOgIWGdlgrIdYvgQ0wZtdK1M3E=
|
||||
github.com/gorilla/schema v1.4.1/go.mod h1:Dg5SSm5PV60mhF2NFaTV1xuYYj8tV8NOPRo4FggUMnM=
|
||||
github.com/gorilla/securecookie v1.1.1/go.mod h1:ra0sb63/xPlUeL+yeDciTfxMRAA+MP+HVt/4epWDjd4=
|
||||
@@ -325,8 +350,6 @@ github.com/mattn/go-isatty v0.0.16/go.mod h1:kYGgaQfpe5nmfYZH+SKPsOc2e4SrIfOl2e/
|
||||
github.com/mattn/go-isatty v0.0.19/go.mod h1:W+V8PltTTMOvKvAeJH7IuucS94S2C6jfK/D7dTCTo3Y=
|
||||
github.com/mattn/go-isatty v0.0.20 h1:xfD0iDuEKnDkl03q4limB+vH+GxLEtL/jb4xVJSWWEY=
|
||||
github.com/mattn/go-isatty v0.0.20/go.mod h1:W+V8PltTTMOvKvAeJH7IuucS94S2C6jfK/D7dTCTo3Y=
|
||||
github.com/mattn/go-runewidth v0.0.9 h1:Lm995f3rfxdpd6TSmuVCHVb/QhupuXlYr8sCI/QdE+0=
|
||||
github.com/mattn/go-runewidth v0.0.9/go.mod h1:H031xJmbD/WCDINGzjvQ9THkh0rPKHF+m2gUSrubnMI=
|
||||
github.com/mattn/go-sqlite3 v1.14.32 h1:JD12Ag3oLy1zQA+BNn74xRgaBbdhbNIDYvQUEuuErjs=
|
||||
github.com/mattn/go-sqlite3 v1.14.32/go.mod h1:Uh1q+B4BYcTPb+yiD3kU8Ct7aC0hY9fxUwlHK0RXw+Y=
|
||||
github.com/mfridman/interpolate v0.0.2 h1:pnuTK7MQIxxFz1Gr+rjSIx9u7qVjf5VOoM/u6BbAxPY=
|
||||
@@ -341,6 +364,8 @@ github.com/nats-io/nats-server/v2 v2.9.23 h1:6Wj6H6QpP9FMlpCyWUaNu2yeZ/qGj+mdRkZ
|
||||
github.com/nats-io/nats-server/v2 v2.9.23/go.mod h1:wEjrEy9vnqIGE4Pqz4/c75v9Pmaq7My2IgFmnykc4C0=
|
||||
github.com/nats-io/nats.go v1.47.0 h1:YQdADw6J/UfGUd2Oy6tn4Hq6YHxCaJrVKayxxFqYrgM=
|
||||
github.com/nats-io/nats.go v1.47.0/go.mod h1:iRWIPokVIFbVijxuMQq4y9ttaBTMe0SFdlZfMDd+33g=
|
||||
github.com/nats-io/nats.go v1.48.0 h1:pSFyXApG+yWU/TgbKCjmm5K4wrHu86231/w84qRVR+U=
|
||||
github.com/nats-io/nats.go v1.48.0/go.mod h1:iRWIPokVIFbVijxuMQq4y9ttaBTMe0SFdlZfMDd+33g=
|
||||
github.com/nats-io/nkeys v0.4.12 h1:nssm7JKOG9/x4J8II47VWCL1Ds29avyiQDRn0ckMvDc=
|
||||
github.com/nats-io/nkeys v0.4.12/go.mod h1:MT59A1HYcjIcyQDJStTfaOY6vhy9XTUjOFo+SVsvpBg=
|
||||
github.com/nats-io/nuid v1.0.1 h1:5iA8DT8V7q8WK2EScv2padNa/rTESc1KdnPw4TC2paw=
|
||||
@@ -349,8 +374,6 @@ github.com/ncruces/go-strftime v1.0.0 h1:HMFp8mLCTPp341M/ZnA4qaf7ZlsbTc+miZjCLOF
|
||||
github.com/ncruces/go-strftime v1.0.0/go.mod h1:Fwc5htZGVVkseilnfgOVb9mKy6w1naJmn9CehxcKcls=
|
||||
github.com/olahol/melody v1.4.0 h1:Pa5SdeZL/zXPi1tJuMAPDbl4n3gQOThSL6G1p4qZ4SI=
|
||||
github.com/olahol/melody v1.4.0/go.mod h1:GgkTl6Y7yWj/HtfD48Q5vLKPVoZOH+Qqgfa7CvJgJM4=
|
||||
github.com/olekukonko/tablewriter v0.0.5 h1:P2Ga83D34wi1o9J6Wh1mRuqd4mF/x/lgBS7N7AbDhec=
|
||||
github.com/olekukonko/tablewriter v0.0.5/go.mod h1:hPp6KlRPjbx+hW8ykQs1w3UBbZlj6HuIJcUGPhkA7kY=
|
||||
github.com/onsi/ginkgo/v2 v2.9.2 h1:BA2GMJOtfGAfagzYtrAlufIP0lq6QERkFmHLMLPwFSU=
|
||||
github.com/onsi/ginkgo/v2 v2.9.2/go.mod h1:WHcJJG2dIlcCqVfBAwUCrJxSPFb6v4azBwgxeMeDuts=
|
||||
github.com/onsi/gomega v1.27.6 h1:ENqfyGeS5AX/rlXDd/ETokDz93u0YufY1Pgxuy/PvWE=
|
||||
@@ -359,6 +382,8 @@ github.com/philhofer/fwd v1.2.0 h1:e6DnBTl7vGY+Gz322/ASL4Gyp1FspeMvx1RNDoToZuM=
|
||||
github.com/philhofer/fwd v1.2.0/go.mod h1:RqIHx9QI14HlwKwm98g9Re5prTQ6LdeRQn+gXJFxsJM=
|
||||
github.com/pierrec/lz4/v4 v4.1.22 h1:cKFw6uJDK+/gfw5BcDL0JL5aBsAFdsIT18eRtLj7VIU=
|
||||
github.com/pierrec/lz4/v4 v4.1.22/go.mod h1:gZWDp/Ze/IJXGXf23ltt2EXimqmTUXEy0GFuRQyBid4=
|
||||
github.com/pierrec/lz4/v4 v4.1.23 h1:oJE7T90aYBGtFNrI8+KbETnPymobAhzRrR8Mu8n1yfU=
|
||||
github.com/pierrec/lz4/v4 v4.1.23/go.mod h1:EoQMVJgeeEOMsCqCzqFm2O0cJvljX2nGZjcRIPL34O4=
|
||||
github.com/pkg/browser v0.0.0-20240102092130-5ac0b6a4141c h1:+mdjkGKdHQG3305AYmdv1U2eRNDiU2ErMBj1gwrq8eQ=
|
||||
github.com/pkg/browser v0.0.0-20240102092130-5ac0b6a4141c/go.mod h1:7rwL4CYBLnjLxUqIJNnCWiEdr3bn6IUYi15bNlnbCCU=
|
||||
github.com/pkg/errors v0.9.1 h1:FEBLx1zS214owpjy7qsBeixbURkuhQAwrK5UwLGTwt4=
|
||||
@@ -393,10 +418,6 @@ github.com/shirou/gopsutil/v4 v4.25.11 h1:X53gB7muL9Gnwwo2evPSE+SfOrltMoR6V3xJAX
|
||||
github.com/shirou/gopsutil/v4 v4.25.11/go.mod h1:EivAfP5x2EhLp2ovdpKSozecVXn1TmuG7SMzs/Wh4PU=
|
||||
github.com/skip2/go-qrcode v0.0.0-20200617195104-da1b6568686e h1:MRM5ITcdelLK2j1vwZ3Je0FKVCfqOLp5zO6trqMLYs0=
|
||||
github.com/skip2/go-qrcode v0.0.0-20200617195104-da1b6568686e/go.mod h1:XV66xRDqSt+GTGFMVlhk3ULuV0y9ZmzeVGR4mloJI3M=
|
||||
github.com/spf13/cobra v1.7.0 h1:hyqWnYt1ZQShIddO5kBpj3vu05/++x6tJ6dg8EC572I=
|
||||
github.com/spf13/cobra v1.7.0/go.mod h1:uLxZILRyS/50WlhOIKD7W6V5bgeIt+4sICxh6uRMrb0=
|
||||
github.com/spf13/pflag v1.0.5 h1:iy+VFUOCP1a+8yFto/drg2CJ5u0yRoB7fZw3DKv/JXA=
|
||||
github.com/spf13/pflag v1.0.5/go.mod h1:McXfInJRrz4CZXVZOBLb0bTZqETkiAhM9Iw0y3An2Bg=
|
||||
github.com/spiffe/go-spiffe/v2 v2.6.0 h1:l+DolpxNWYgruGQVV0xsfeya3CsC7m8iBzDnMpsbLuo=
|
||||
github.com/spiffe/go-spiffe/v2 v2.6.0/go.mod h1:gm2SeUoMZEtpnzPNs2Csc0D/gX33k1xIx7lEzqblHEs=
|
||||
github.com/stretchr/objx v0.1.0/go.mod h1:HFkY916IF+rwdDfMAkV7OtwuqBVzrE8GR6GFx+wExME=
|
||||
@@ -418,6 +439,8 @@ github.com/swaggo/swag v1.16.6 h1:qBNcx53ZaX+M5dxVyTrgQ0PJ/ACK+NzhwcbieTt+9yI=
|
||||
github.com/swaggo/swag v1.16.6/go.mod h1:ngP2etMK5a0P3QBizic5MEwpRmluJZPHjXcMoj4Xesg=
|
||||
github.com/tetratelabs/wazero v1.10.1 h1:2DugeJf6VVk58KTPszlNfeeN8AhhpwcZqkJj2wwFuH8=
|
||||
github.com/tetratelabs/wazero v1.10.1/go.mod h1:DRm5twOQ5Gr1AoEdSi0CLjDQF1J9ZAuyqFIjl1KKfQU=
|
||||
github.com/tetratelabs/wazero v1.11.0 h1:+gKemEuKCTevU4d7ZTzlsvgd1uaToIDtlQlmNbwqYhA=
|
||||
github.com/tetratelabs/wazero v1.11.0/go.mod h1:eV28rsN8Q+xwjogd7f4/Pp4xFxO7uOGbLcD/LzB1wiU=
|
||||
github.com/tinylib/msgp v1.6.1 h1:ESRv8eL3u+DNHUoSAAQRE50Hm162zqAnBoGv9PzScPY=
|
||||
github.com/tinylib/msgp v1.6.1/go.mod h1:RSp0LW9oSxFut3KzESt5Voq4GVWyS+PSulT77roAqEA=
|
||||
github.com/tklauser/go-sysconf v0.3.16 h1:frioLaCQSsF5Cy1jgRBrzr6t502KIIwQ0MArYICU0nA=
|
||||
@@ -455,16 +478,26 @@ go.opentelemetry.io/contrib/instrumentation/net/http/otelhttp v0.62.0 h1:Hf9xI/X
|
||||
go.opentelemetry.io/contrib/instrumentation/net/http/otelhttp v0.62.0/go.mod h1:NfchwuyNoMcZ5MLHwPrODwUF1HWCXWrL31s8gSAdIKY=
|
||||
go.opentelemetry.io/otel v1.38.0 h1:RkfdswUDRimDg0m2Az18RKOsnI8UDzppJAtj01/Ymk8=
|
||||
go.opentelemetry.io/otel v1.38.0/go.mod h1:zcmtmQ1+YmQM9wrNsTGV/q/uyusom3P8RxwExxkZhjM=
|
||||
go.opentelemetry.io/otel v1.39.0 h1:8yPrr/S0ND9QEfTfdP9V+SiwT4E0G7Y5MO7p85nis48=
|
||||
go.opentelemetry.io/otel v1.39.0/go.mod h1:kLlFTywNWrFyEdH0oj2xK0bFYZtHRYUdv1NklR/tgc8=
|
||||
go.opentelemetry.io/otel/exporters/stdout/stdoutmetric v1.37.0 h1:6VjV6Et+1Hd2iLZEPtdV7vie80Yyqf7oikJLjQ/myi0=
|
||||
go.opentelemetry.io/otel/exporters/stdout/stdoutmetric v1.37.0/go.mod h1:u8hcp8ji5gaM/RfcOo8z9NMnf1pVLfVY7lBY2VOGuUU=
|
||||
go.opentelemetry.io/otel/metric v1.38.0 h1:Kl6lzIYGAh5M159u9NgiRkmoMKjvbsKtYRwgfrA6WpA=
|
||||
go.opentelemetry.io/otel/metric v1.38.0/go.mod h1:kB5n/QoRM8YwmUahxvI3bO34eVtQf2i4utNVLr9gEmI=
|
||||
go.opentelemetry.io/otel/metric v1.39.0 h1:d1UzonvEZriVfpNKEVmHXbdf909uGTOQjA0HF0Ls5Q0=
|
||||
go.opentelemetry.io/otel/metric v1.39.0/go.mod h1:jrZSWL33sD7bBxg1xjrqyDjnuzTUB0x1nBERXd7Ftcs=
|
||||
go.opentelemetry.io/otel/sdk v1.38.0 h1:l48sr5YbNf2hpCUj/FoGhW9yDkl+Ma+LrVl8qaM5b+E=
|
||||
go.opentelemetry.io/otel/sdk v1.38.0/go.mod h1:ghmNdGlVemJI3+ZB5iDEuk4bWA3GkTpW+DOoZMYBVVg=
|
||||
go.opentelemetry.io/otel/sdk v1.39.0 h1:nMLYcjVsvdui1B/4FRkwjzoRVsMK8uL/cj0OyhKzt18=
|
||||
go.opentelemetry.io/otel/sdk v1.39.0/go.mod h1:vDojkC4/jsTJsE+kh+LXYQlbL8CgrEcwmt1ENZszdJE=
|
||||
go.opentelemetry.io/otel/sdk/metric v1.38.0 h1:aSH66iL0aZqo//xXzQLYozmWrXxyFkBJ6qT5wthqPoM=
|
||||
go.opentelemetry.io/otel/sdk/metric v1.38.0/go.mod h1:dg9PBnW9XdQ1Hd6ZnRz689CbtrUp0wMMs9iPcgT9EZA=
|
||||
go.opentelemetry.io/otel/sdk/metric v1.39.0 h1:cXMVVFVgsIf2YL6QkRF4Urbr/aMInf+2WKg+sEJTtB8=
|
||||
go.opentelemetry.io/otel/sdk/metric v1.39.0/go.mod h1:xq9HEVH7qeX69/JnwEfp6fVq5wosJsY1mt4lLfYdVew=
|
||||
go.opentelemetry.io/otel/trace v1.38.0 h1:Fxk5bKrDZJUH+AMyyIXGcFAPah0oRcT+LuNtJrmcNLE=
|
||||
go.opentelemetry.io/otel/trace v1.38.0/go.mod h1:j1P9ivuFsTceSWe1oY+EeW3sc+Pp42sO++GHkg4wwhs=
|
||||
go.opentelemetry.io/otel/trace v1.39.0 h1:2d2vfpEDmCJ5zVYz7ijaJdOF59xLomrvj7bjt6/qCJI=
|
||||
go.opentelemetry.io/otel/trace v1.39.0/go.mod h1:88w4/PnZSazkGzz/w84VHpQafiU4EtqqlVdxWy+rNOA=
|
||||
go.uber.org/goleak v1.3.0 h1:2K3zAYmnTNqV73imy9J1T3WC+gmCePx2hEGkimedGto=
|
||||
go.uber.org/goleak v1.3.0/go.mod h1:CoHD4mav9JJNrW/WLlf7HGZPjdw8EucARQHekz1X6bE=
|
||||
go.uber.org/multierr v1.11.0 h1:blXXJkSxSSfBVBlC76pxqeO+LN3aDfLQo+309xJstO0=
|
||||
@@ -485,13 +518,21 @@ golang.org/x/crypto v0.0.0-20210921155107-089bfa567519/go.mod h1:GvvjBRRGRdwPK5y
|
||||
golang.org/x/crypto v0.6.0/go.mod h1:OFC/31mSvZgRz0V1QTNCzfAI1aIRzbiufJtkMIlEp58=
|
||||
golang.org/x/crypto v0.45.0 h1:jMBrvKuj23MTlT0bQEOBcAE0mjg8mK9RXFhRH6nyF3Q=
|
||||
golang.org/x/crypto v0.45.0/go.mod h1:XTGrrkGJve7CYK7J8PEww4aY7gM3qMCElcJQ8n8JdX4=
|
||||
golang.org/x/crypto v0.46.0 h1:cKRW/pmt1pKAfetfu+RCEvjvZkA9RimPbh7bhFjGVBU=
|
||||
golang.org/x/crypto v0.46.0/go.mod h1:Evb/oLKmMraqjZ2iQTwDwvCtJkczlDuTmdJXoZVzqU0=
|
||||
golang.org/x/exp v0.0.0-20251125195548-87e1e737ad39 h1:DHNhtq3sNNzrvduZZIiFyXWOL9IWaDPHqTnLJp+rCBY=
|
||||
golang.org/x/exp v0.0.0-20251125195548-87e1e737ad39/go.mod h1:46edojNIoXTNOhySWIWdix628clX9ODXwPsQuG6hsK0=
|
||||
golang.org/x/exp v0.0.0-20251219203646-944ab1f22d93 h1:fQsdNF2N+/YewlRZiricy4P1iimyPKZ/xwniHj8Q2a0=
|
||||
golang.org/x/exp v0.0.0-20251219203646-944ab1f22d93/go.mod h1:EPRbTFwzwjXj9NpYyyrvenVh9Y+GFeEvMNh7Xuz7xgU=
|
||||
golang.org/x/image v0.33.0 h1:LXRZRnv1+zGd5XBUVRFmYEphyyKJjQjCRiOuAP3sZfQ=
|
||||
golang.org/x/image v0.33.0/go.mod h1:DD3OsTYT9chzuzTQt+zMcOlBHgfoKQb1gry8p76Y1sc=
|
||||
golang.org/x/image v0.34.0 h1:33gCkyw9hmwbZJeZkct8XyR11yH889EQt/QH4VmXMn8=
|
||||
golang.org/x/image v0.34.0/go.mod h1:2RNFBZRB+vnwwFil8GkMdRvrJOFd1AzdZI6vOY+eJVU=
|
||||
golang.org/x/mod v0.6.0-dev.0.20220419223038-86c51ed26bb4/go.mod h1:jJ57K6gSWd91VN4djpZkiMVwK6gcyfeH4XE8wZrZaV4=
|
||||
golang.org/x/mod v0.30.0 h1:fDEXFVZ/fmCKProc/yAXXUijritrDzahmwwefnjoPFk=
|
||||
golang.org/x/mod v0.30.0/go.mod h1:lAsf5O2EvJeSFMiBxXDki7sCgAxEUcZHXoXMKT4GJKc=
|
||||
golang.org/x/mod v0.31.0 h1:HaW9xtz0+kOcWKwli0ZXy79Ix+UW/vOfmWI5QVd2tgI=
|
||||
golang.org/x/mod v0.31.0/go.mod h1:43JraMp9cGx1Rx3AqioxrbrhNsLl2l/iNAvuBkrezpg=
|
||||
golang.org/x/net v0.0.0-20190404232315-eb5bcb51f2a3/go.mod h1:t9HGtf8HONx5eT2rtn7q6eTqICYqUVnKs3thJo3Qplg=
|
||||
golang.org/x/net v0.0.0-20190620200207-3b0461eec859/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s=
|
||||
golang.org/x/net v0.0.0-20200114155413-6afb5195e5aa/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s=
|
||||
@@ -501,12 +542,18 @@ golang.org/x/net v0.6.0/go.mod h1:2Tu9+aMcznHK/AK1HMvgo6xiTLG5rD5rZLDS+rp2Bjs=
|
||||
golang.org/x/net v0.7.0/go.mod h1:2Tu9+aMcznHK/AK1HMvgo6xiTLG5rD5rZLDS+rp2Bjs=
|
||||
golang.org/x/net v0.47.0 h1:Mx+4dIFzqraBXUugkia1OOvlD6LemFo1ALMHjrXDOhY=
|
||||
golang.org/x/net v0.47.0/go.mod h1:/jNxtkgq5yWUGYkaZGqo27cfGZ1c5Nen03aYrrKpVRU=
|
||||
golang.org/x/net v0.48.0 h1:zyQRTTrjc33Lhh0fBgT/H3oZq9WuvRR5gPC70xpDiQU=
|
||||
golang.org/x/net v0.48.0/go.mod h1:+ndRgGjkh8FGtu1w1FGbEC31if4VrNVMuKTgcAAnQRY=
|
||||
golang.org/x/oauth2 v0.33.0 h1:4Q+qn+E5z8gPRJfmRy7C2gGG3T4jIprK6aSYgTXGRpo=
|
||||
golang.org/x/oauth2 v0.33.0/go.mod h1:lzm5WQJQwKZ3nwavOZ3IS5Aulzxi68dUSgRHujetwEA=
|
||||
golang.org/x/oauth2 v0.34.0 h1:hqK/t4AKgbqWkdkcAeI8XLmbK+4m4G5YeQRrmiotGlw=
|
||||
golang.org/x/oauth2 v0.34.0/go.mod h1:lzm5WQJQwKZ3nwavOZ3IS5Aulzxi68dUSgRHujetwEA=
|
||||
golang.org/x/sync v0.0.0-20190423024810-112230192c58/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM=
|
||||
golang.org/x/sync v0.0.0-20220722155255-886fb9371eb4/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM=
|
||||
golang.org/x/sync v0.18.0 h1:kr88TuHDroi+UVf+0hZnirlk8o8T+4MrK6mr60WkH/I=
|
||||
golang.org/x/sync v0.18.0/go.mod h1:9KTHXmSnoGruLpwFjVSX0lNNA75CykiMECbovNTZqGI=
|
||||
golang.org/x/sync v0.19.0 h1:vV+1eWNmZ5geRlYjzm2adRgW2/mcpevXNg50YZtPCE4=
|
||||
golang.org/x/sync v0.19.0/go.mod h1:9KTHXmSnoGruLpwFjVSX0lNNA75CykiMECbovNTZqGI=
|
||||
golang.org/x/sys v0.0.0-20190215142949-d0b11bdaac8a/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY=
|
||||
golang.org/x/sys v0.0.0-20190412213103-97732733099d/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
|
||||
golang.org/x/sys v0.0.0-20190916202348-b4ddaad3f8a3/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
|
||||
@@ -522,6 +569,8 @@ golang.org/x/sys v0.6.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
|
||||
golang.org/x/sys v0.12.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
|
||||
golang.org/x/sys v0.38.0 h1:3yZWxaJjBmCWXqhN1qh02AkOnCQ1poK6oF+a7xWL6Gc=
|
||||
golang.org/x/sys v0.38.0/go.mod h1:OgkHotnGiDImocRcuBABYBEXf8A9a87e/uXjp9XT3ks=
|
||||
golang.org/x/sys v0.39.0 h1:CvCKL8MeisomCi6qNZ+wbb0DN9E5AATixKsvNtMoMFk=
|
||||
golang.org/x/sys v0.39.0/go.mod h1:OgkHotnGiDImocRcuBABYBEXf8A9a87e/uXjp9XT3ks=
|
||||
golang.org/x/term v0.0.0-20201126162022-7de9c90e9dd1/go.mod h1:bj7SfCRtBDWHUb9snDiAeCFNEtKQo2Wmx5Cou7ajbmo=
|
||||
golang.org/x/term v0.0.0-20210927222741-03fcf44c2211/go.mod h1:jbD1KX2456YbFQfuXm/mYQcufACuNUgVhRMnK/tPxf8=
|
||||
golang.org/x/term v0.5.0/go.mod h1:jMB1sMXY+tzblOD4FWmEbocvup2/aLOaQEp7JmGp78k=
|
||||
@@ -531,6 +580,8 @@ golang.org/x/text v0.3.7/go.mod h1:u+2+/6zg+i71rQMx5EYifcz6MCKuco9NR6JIITiCfzQ=
|
||||
golang.org/x/text v0.7.0/go.mod h1:mrYo+phRRbMaCq/xk9113O4dZlRixOauAjOtrjsXDZ8=
|
||||
golang.org/x/text v0.31.0 h1:aC8ghyu4JhP8VojJ2lEHBnochRno1sgL6nEi9WGFGMM=
|
||||
golang.org/x/text v0.31.0/go.mod h1:tKRAlv61yKIjGGHX/4tP1LTbc13YSec1pxVEWXzfoeM=
|
||||
golang.org/x/text v0.32.0 h1:ZD01bjUt1FQ9WJ0ClOL5vxgxOI/sVCNgX1YtKwcY0mU=
|
||||
golang.org/x/text v0.32.0/go.mod h1:o/rUWzghvpD5TXrTIBuJU77MTaN0ljMWE47kxGJQ7jY=
|
||||
golang.org/x/time v0.14.0 h1:MRx4UaLrDotUKUdCIqzPC48t1Y9hANFKIRpNx+Te8PI=
|
||||
golang.org/x/time v0.14.0/go.mod h1:eL/Oa2bBBK0TkX57Fyni+NgnyQQN4LitPmob2Hjnqw4=
|
||||
golang.org/x/tools v0.0.0-20180917221912-90fa682c2a6e/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ=
|
||||
@@ -538,6 +589,8 @@ golang.org/x/tools v0.0.0-20191119224855-298f0cb1881e/go.mod h1:b+2E5dAYhXwXZwtn
|
||||
golang.org/x/tools v0.1.12/go.mod h1:hNGJHUnrk76NpqgfD5Aqm5Crs+Hm0VOH/i9J2+nxYbc=
|
||||
golang.org/x/tools v0.39.0 h1:ik4ho21kwuQln40uelmciQPp9SipgNDdrafrYA4TmQQ=
|
||||
golang.org/x/tools v0.39.0/go.mod h1:JnefbkDPyD8UU2kI5fuf8ZX4/yUeh9W877ZeBONxUqQ=
|
||||
golang.org/x/tools v0.40.0 h1:yLkxfA+Qnul4cs9QA3KnlFu0lVmd8JJfoq+E41uSutA=
|
||||
golang.org/x/tools v0.40.0/go.mod h1:Ik/tzLRlbscWpqqMRjyWYDisX8bG13FrdXp3o4Sr9lc=
|
||||
golang.org/x/xerrors v0.0.0-20190717185122-a985d3407aa7/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0=
|
||||
golang.org/x/xerrors v0.0.0-20191204190536-9bdfabe68543/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0=
|
||||
golang.org/x/xerrors v0.0.0-20240903120638-7835f813f4da h1:noIWHXmPHxILtqtCOPIhSt0ABwskkZKjD3bXGnZGpNY=
|
||||
@@ -546,16 +599,28 @@ gonum.org/v1/gonum v0.16.0 h1:5+ul4Swaf3ESvrOnidPp4GZbzf0mxVQpDCYUQE7OJfk=
|
||||
gonum.org/v1/gonum v0.16.0/go.mod h1:fef3am4MQ93R2HHpKnLk4/Tbh/s0+wqD5nfa6Pnwy4E=
|
||||
google.golang.org/api v0.257.0 h1:8Y0lzvHlZps53PEaw+G29SsQIkuKrumGWs9puiexNAA=
|
||||
google.golang.org/api v0.257.0/go.mod h1:4eJrr+vbVaZSqs7vovFd1Jb/A6ml6iw2e6FBYf3GAO4=
|
||||
google.golang.org/api v0.258.0 h1:IKo1j5FBlN74fe5isA2PVozN3Y5pwNKriEgAXPOkDAc=
|
||||
google.golang.org/api v0.258.0/go.mod h1:qhOMTQEZ6lUps63ZNq9jhODswwjkjYYguA7fA3TBFww=
|
||||
google.golang.org/genproto v0.0.0-20250715232539-7130f93afb79 h1:Nt6z9UHqSlIdIGJdz6KhTIs2VRx/iOsA5iE8bmQNcxs=
|
||||
google.golang.org/genproto v0.0.0-20250715232539-7130f93afb79/go.mod h1:kTmlBHMPqR5uCZPBvwa2B18mvubkjyY3CRLI0c6fj0s=
|
||||
google.golang.org/genproto v0.0.0-20251202230838-ff82c1b0f217 h1:GvESR9BIyHUahIb0NcTum6itIWtdoglGX+rnGxm2934=
|
||||
google.golang.org/genproto v0.0.0-20251202230838-ff82c1b0f217/go.mod h1:yJ2HH4EHEDTd3JiLmhds6NkJ17ITVYOdV3m3VKOnws0=
|
||||
google.golang.org/genproto/googleapis/api v0.0.0-20251022142026-3a174f9686a8 h1:mepRgnBZa07I4TRuomDE4sTIYieg/osKmzIf4USdWS4=
|
||||
google.golang.org/genproto/googleapis/api v0.0.0-20251022142026-3a174f9686a8/go.mod h1:fDMmzKV90WSg1NbozdqrE64fkuTv6mlq2zxo9ad+3yo=
|
||||
google.golang.org/genproto/googleapis/api v0.0.0-20251202230838-ff82c1b0f217 h1:fCvbg86sFXwdrl5LgVcTEvNC+2txB5mgROGmRL5mrls=
|
||||
google.golang.org/genproto/googleapis/api v0.0.0-20251202230838-ff82c1b0f217/go.mod h1:+rXWjjaukWZun3mLfjmVnQi18E1AsFbDN9QdJ5YXLto=
|
||||
google.golang.org/genproto/googleapis/rpc v0.0.0-20251202230838-ff82c1b0f217 h1:gRkg/vSppuSQoDjxyiGfN4Upv/h/DQmIR10ZU8dh4Ww=
|
||||
google.golang.org/genproto/googleapis/rpc v0.0.0-20251202230838-ff82c1b0f217/go.mod h1:7i2o+ce6H/6BluujYR+kqX3GKH+dChPTQU19wjRPiGk=
|
||||
google.golang.org/genproto/googleapis/rpc v0.0.0-20251222181119-0a764e51fe1b h1:Mv8VFug0MP9e5vUxfBcE3vUkV6CImK3cMNMIDFjmzxU=
|
||||
google.golang.org/genproto/googleapis/rpc v0.0.0-20251222181119-0a764e51fe1b/go.mod h1:j9x/tPzZkyxcgEFkiKEEGxfvyumM01BEtsW8xzOahRQ=
|
||||
google.golang.org/grpc v1.77.0 h1:wVVY6/8cGA6vvffn+wWK5ToddbgdU3d8MNENr4evgXM=
|
||||
google.golang.org/grpc v1.77.0/go.mod h1:z0BY1iVj0q8E1uSQCjL9cppRj+gnZjzDnzV0dHhrNig=
|
||||
google.golang.org/grpc v1.78.0 h1:K1XZG/yGDJnzMdd/uZHAkVqJE+xIDOcmdSFZkBUicNc=
|
||||
google.golang.org/grpc v1.78.0/go.mod h1:I47qjTo4OKbMkjA/aOOwxDIiPSBofUtQUI5EfpWvW7U=
|
||||
google.golang.org/protobuf v1.36.10 h1:AYd7cD/uASjIL6Q9LiTjz8JLcrh/88q5UObnmY3aOOE=
|
||||
google.golang.org/protobuf v1.36.10/go.mod h1:HTf+CrKn2C3g5S8VImy6tdcUvCska2kB7j23XfzDpco=
|
||||
google.golang.org/protobuf v1.36.11 h1:fV6ZwhNocDyBLK0dj+fg8ektcVegBBuEolpbTQyBNVE=
|
||||
google.golang.org/protobuf v1.36.11/go.mod h1:HTf+CrKn2C3g5S8VImy6tdcUvCska2kB7j23XfzDpco=
|
||||
gopkg.in/check.v1 v0.0.0-20161208181325-20d25e280405/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0=
|
||||
gopkg.in/check.v1 v1.0.0-20201130134442-10cb98267c6c h1:Hei/4ADfdWqJk1ZMxUNpqntNwaWcugrBjAiHlqqRiVk=
|
||||
gopkg.in/check.v1 v1.0.0-20201130134442-10cb98267c6c/go.mod h1:JHkPIbrfpd72SG/EVd6muEfDQjcINNoR0C8j2r3qZ4Q=
|
||||
@@ -577,6 +642,8 @@ modernc.org/goabi0 v0.2.0 h1:HvEowk7LxcPd0eq6mVOAEMai46V+i7Jrj13t4AzuNks=
|
||||
modernc.org/goabi0 v0.2.0/go.mod h1:CEFRnnJhKvWT1c1JTI3Avm+tgOWbkOu5oPA8eH8LnMI=
|
||||
modernc.org/libc v1.67.1 h1:bFaqOaa5/zbWYJo8aW0tXPX21hXsngG2M7mckCnFSVk=
|
||||
modernc.org/libc v1.67.1/go.mod h1:QvvnnJ5P7aitu0ReNpVIEyesuhmDLQ8kaEoyMjIFZJA=
|
||||
modernc.org/libc v1.67.2 h1:ZbNmly1rcbjhot5jlOZG0q4p5VwFfjwWqZ5rY2xxOXo=
|
||||
modernc.org/libc v1.67.2/go.mod h1:QvvnnJ5P7aitu0ReNpVIEyesuhmDLQ8kaEoyMjIFZJA=
|
||||
modernc.org/mathutil v1.7.1 h1:GCZVGXdaN8gTqB1Mf/usp1Y/hSqgI2vAGGP4jZMCxOU=
|
||||
modernc.org/mathutil v1.7.1/go.mod h1:4p5IwJITfppl0G4sUEDtCr4DthTaT47/N3aT6MhfgJg=
|
||||
modernc.org/memory v1.11.0 h1:o4QC8aMQzmcwCK3t3Ux/ZHmwFPzE6hf2Y5LbkRs+hbI=
|
||||
@@ -587,6 +654,8 @@ modernc.org/sortutil v1.2.1 h1:+xyoGf15mM3NMlPDnFqrteY07klSFxLElE2PVuWIJ7w=
|
||||
modernc.org/sortutil v1.2.1/go.mod h1:7ZI3a3REbai7gzCLcotuw9AC4VZVpYMjDzETGsSMqJE=
|
||||
modernc.org/sqlite v1.40.1 h1:VfuXcxcUWWKRBuP8+BR9L7VnmusMgBNNnBYGEe9w/iY=
|
||||
modernc.org/sqlite v1.40.1/go.mod h1:9fjQZ0mB1LLP0GYrp39oOJXx/I2sxEnZtzCmEQIKvGE=
|
||||
modernc.org/sqlite v1.41.0 h1:bJXddp4ZpsqMsNN1vS0jWo4IJTZzb8nWpcgvyCFG9Ck=
|
||||
modernc.org/sqlite v1.41.0/go.mod h1:9fjQZ0mB1LLP0GYrp39oOJXx/I2sxEnZtzCmEQIKvGE=
|
||||
modernc.org/strutil v1.2.1 h1:UneZBkQA+DX2Rp35KcM69cSsNES9ly8mQWD71HKlOA0=
|
||||
modernc.org/strutil v1.2.1/go.mod h1:EHkiggD70koQxjVdSBM3JKM7k6L0FbGE5eymy9i3B9A=
|
||||
modernc.org/token v1.1.0 h1:Xl7Ap9dKaEs5kLoOQeQmPWevfnk/DM5qcLcYlA8ys6Y=
|
||||
|
||||
@@ -1,5 +1,6 @@
|
||||
-- +goose Up
|
||||
-- +goose StatementBegin
|
||||
-- +goose no transaction
|
||||
PRAGMA foreign_keys=OFF;
|
||||
-- SQLite doesn't support ALTER COLUMN directly, so we need to recreate the table
|
||||
-- Create a temporary table with the new schema
|
||||
CREATE TABLE users_temp (
|
||||
@@ -21,7 +22,7 @@ CREATE TABLE users_temp (
|
||||
);
|
||||
|
||||
-- Copy data from the original table
|
||||
INSERT INTO users_temp SELECT * FROM users;
|
||||
INSERT INTO users_temp SELECT id, created_at, updated_at, name, email, password, is_superuser, superuser, role, activated_on, group_users FROM users;
|
||||
|
||||
-- Drop the original table
|
||||
DROP TABLE users;
|
||||
@@ -31,38 +32,4 @@ ALTER TABLE users_temp RENAME TO users;
|
||||
|
||||
-- Recreate the unique index
|
||||
CREATE UNIQUE INDEX users_email_key on users (email);
|
||||
-- +goose StatementEnd
|
||||
|
||||
-- +goose Down
|
||||
-- +goose StatementBegin
|
||||
-- Create the original table structure
|
||||
CREATE TABLE users_temp (
|
||||
id uuid not null
|
||||
primary key,
|
||||
created_at datetime not null,
|
||||
updated_at datetime not null,
|
||||
name text not null,
|
||||
email text not null,
|
||||
password text not null,
|
||||
is_superuser bool default false not null,
|
||||
superuser bool default false not null,
|
||||
role text default 'user' not null,
|
||||
activated_on datetime,
|
||||
group_users uuid not null
|
||||
constraint users_groups_users
|
||||
references groups
|
||||
on delete cascade
|
||||
);
|
||||
|
||||
-- Copy data from the current table (this will fail if there are NULL passwords)
|
||||
INSERT INTO users_temp SELECT * FROM users;
|
||||
|
||||
-- Drop the current table
|
||||
DROP TABLE users;
|
||||
|
||||
-- Rename the temporary table
|
||||
ALTER TABLE users_temp RENAME TO users;
|
||||
|
||||
-- Recreate the unique index
|
||||
CREATE UNIQUE INDEX users_email_key on users (email);
|
||||
-- +goose StatementEnd
|
||||
PRAGMA foreign_keys=ON;
|
||||
|
||||
@@ -0,0 +1,4 @@
|
||||
-- +goose Up
|
||||
-- Force the role and superuser flags, previous nullable password migration (prior to v0.22.2)
|
||||
-- caused them to flip-flop during migration for some users.
|
||||
UPDATE users SET role = 'owner', is_superuser = 0, superuser = 0;
|
||||
@@ -97,12 +97,35 @@ func ToItemAttachment(attachment *ent.Attachment) ItemAttachment {
|
||||
}
|
||||
}
|
||||
|
||||
// normalizePath converts backslashes to forward slashes and trims slashes from both ends
|
||||
// This ensures consistent path separators for blob storage which expects forward slashes
|
||||
func normalizePath(path string) string {
|
||||
path = strings.ReplaceAll(path, "\\", "/")
|
||||
return strings.Trim(path, "/")
|
||||
}
|
||||
|
||||
func (r *AttachmentRepo) path(gid uuid.UUID, hash string) string {
|
||||
return filepath.Join(gid.String(), "documents", hash)
|
||||
// Always use forward slashes for consistency across platforms
|
||||
// This ensures paths are stored in the database with forward slashes
|
||||
return fmt.Sprintf("%s/documents/%s", gid.String(), hash)
|
||||
}
|
||||
|
||||
func (r *AttachmentRepo) fullPath(relativePath string) string {
|
||||
return filepath.Join(r.storage.PrefixPath, relativePath)
|
||||
// Normalize path separators to forward slashes for blob storage
|
||||
// The blob library expects forward slashes in keys regardless of OS
|
||||
normalizedRelativePath := normalizePath(relativePath)
|
||||
|
||||
// Always use forward slashes when joining paths for blob storage
|
||||
if r.storage.PrefixPath == "" {
|
||||
return normalizedRelativePath
|
||||
}
|
||||
normalizedPrefix := normalizePath(r.storage.PrefixPath)
|
||||
|
||||
if normalizedPrefix == "" {
|
||||
return normalizedRelativePath
|
||||
}
|
||||
|
||||
return fmt.Sprintf("%s/%s", normalizedPrefix, normalizedRelativePath)
|
||||
}
|
||||
|
||||
func (r *AttachmentRepo) GetFullPath(relativePath string) string {
|
||||
|
||||
@@ -10,6 +10,7 @@ import (
|
||||
"github.com/stretchr/testify/require"
|
||||
"github.com/sysadminsmedia/homebox/backend/internal/data/ent"
|
||||
"github.com/sysadminsmedia/homebox/backend/internal/data/ent/attachment"
|
||||
"github.com/sysadminsmedia/homebox/backend/internal/sys/config"
|
||||
)
|
||||
|
||||
func TestAttachmentRepo_Create(t *testing.T) {
|
||||
@@ -281,3 +282,58 @@ func TestAttachmentRepo_SettingPhotoPrimaryStillWorks(t *testing.T) {
|
||||
require.NoError(t, err)
|
||||
assert.False(t, photo1.Primary, "Photo 1 should no longer be primary after setting Photo 2 as primary")
|
||||
}
|
||||
|
||||
func TestAttachmentRepo_PathNormalization(t *testing.T) {
|
||||
// Test that paths always use forward slashes
|
||||
repo := &AttachmentRepo{
|
||||
storage: config.Storage{
|
||||
PrefixPath: ".data",
|
||||
},
|
||||
}
|
||||
|
||||
testGUID := uuid.MustParse("eb6bf410-a1a8-478d-a803-ca3948368a0c")
|
||||
testHash := "f295eb01-18a9-4631-a797-70bd9623edd4.png"
|
||||
|
||||
// Test path() method - should always return forward slashes
|
||||
relativePath := repo.path(testGUID, testHash)
|
||||
assert.Equal(t, "eb6bf410-a1a8-478d-a803-ca3948368a0c/documents/f295eb01-18a9-4631-a797-70bd9623edd4.png", relativePath)
|
||||
assert.NotContains(t, relativePath, "\\", "path() should not contain backslashes")
|
||||
|
||||
// Test fullPath() with forward slash input (from database)
|
||||
fullPath := repo.fullPath("eb6bf410-a1a8-478d-a803-ca3948368a0c/documents/f295eb01-18a9-4631-a797-70bd9623edd4.png")
|
||||
assert.Equal(t, ".data/eb6bf410-a1a8-478d-a803-ca3948368a0c/documents/f295eb01-18a9-4631-a797-70bd9623edd4.png", fullPath)
|
||||
assert.NotContains(t, fullPath, "\\", "fullPath() should not contain backslashes")
|
||||
|
||||
// Test fullPath() with backslash input (legacy Windows paths from old database)
|
||||
fullPathWithBackslash := repo.fullPath("eb6bf410-a1a8-478d-a803-ca3948368a0c\\documents\\f295eb01-18a9-4631-a797-70bd9623edd4.png")
|
||||
assert.Equal(t, ".data/eb6bf410-a1a8-478d-a803-ca3948368a0c/documents/f295eb01-18a9-4631-a797-70bd9623edd4.png", fullPathWithBackslash)
|
||||
assert.NotContains(t, fullPathWithBackslash, "\\", "fullPath() should normalize backslashes to forward slashes")
|
||||
|
||||
// Test with Windows-style prefix path
|
||||
repoWindows := &AttachmentRepo{
|
||||
storage: config.Storage{
|
||||
PrefixPath: ".data",
|
||||
},
|
||||
}
|
||||
fullPathWindows := repoWindows.fullPath("eb6bf410-a1a8-478d-a803-ca3948368a0c/documents/f295eb01-18a9-4631-a797-70bd9623edd4.png")
|
||||
assert.NotContains(t, fullPathWindows, "\\", "fullPath() should normalize Windows paths")
|
||||
|
||||
// Test empty prefix
|
||||
repoNoPrefix := &AttachmentRepo{
|
||||
storage: config.Storage{
|
||||
PrefixPath: "",
|
||||
},
|
||||
}
|
||||
fullPathNoPrefix := repoNoPrefix.fullPath("eb6bf410-a1a8-478d-a803-ca3948368a0c/documents/f295eb01-18a9-4631-a797-70bd9623edd4.png")
|
||||
assert.Equal(t, "eb6bf410-a1a8-478d-a803-ca3948368a0c/documents/f295eb01-18a9-4631-a797-70bd9623edd4.png", fullPathNoPrefix)
|
||||
|
||||
// Test with single slash prefix (like in tests)
|
||||
repoSlashPrefix := &AttachmentRepo{
|
||||
storage: config.Storage{
|
||||
PrefixPath: "/",
|
||||
},
|
||||
}
|
||||
fullPathSlashPrefix := repoSlashPrefix.fullPath("eb6bf410-a1a8-478d-a803-ca3948368a0c/documents/f295eb01-18a9-4631-a797-70bd9623edd4.png")
|
||||
assert.Equal(t, "eb6bf410-a1a8-478d-a803-ca3948368a0c/documents/f295eb01-18a9-4631-a797-70bd9623edd4.png", fullPathSlashPrefix)
|
||||
assert.NotContains(t, fullPathSlashPrefix, "//", "fullPath() should not have double slashes")
|
||||
}
|
||||
|
||||
@@ -53,7 +53,7 @@ type (
|
||||
DefaultWarrantyDetails *string `json:"defaultWarrantyDetails,omitempty" extensions:"x-nullable" validate:"omitempty,max=1000"`
|
||||
|
||||
// Default location and labels
|
||||
DefaultLocationID *uuid.UUID `json:"defaultLocationId,omitempty" extensions:"x-nullable"`
|
||||
DefaultLocationID uuid.UUID `json:"defaultLocationId,omitempty" extensions:"x-nullable"`
|
||||
DefaultLabelIDs *[]uuid.UUID `json:"defaultLabelIds,omitempty" extensions:"x-nullable"`
|
||||
|
||||
// Metadata flags
|
||||
@@ -82,7 +82,7 @@ type (
|
||||
DefaultWarrantyDetails *string `json:"defaultWarrantyDetails,omitempty" extensions:"x-nullable" validate:"omitempty,max=1000"`
|
||||
|
||||
// Default location and labels
|
||||
DefaultLocationID *uuid.UUID `json:"defaultLocationId,omitempty" extensions:"x-nullable"`
|
||||
DefaultLocationID uuid.UUID `json:"defaultLocationId,omitempty" extensions:"x-nullable"`
|
||||
DefaultLabelIDs *[]uuid.UUID `json:"defaultLabelIds,omitempty" extensions:"x-nullable"`
|
||||
|
||||
// Metadata flags
|
||||
@@ -262,6 +262,7 @@ func (r *ItemTemplatesRepository) GetOne(ctx context.Context, gid uuid.UUID, id
|
||||
|
||||
// Create creates a new template
|
||||
func (r *ItemTemplatesRepository) Create(ctx context.Context, gid uuid.UUID, data ItemTemplateCreate) (ItemTemplateOut, error) {
|
||||
// Set up create builder
|
||||
q := r.db.ItemTemplate.Create().
|
||||
SetName(data.Name).
|
||||
SetDescription(data.Description).
|
||||
@@ -277,9 +278,12 @@ func (r *ItemTemplatesRepository) Create(ctx context.Context, gid uuid.UUID, dat
|
||||
SetIncludeWarrantyFields(data.IncludeWarrantyFields).
|
||||
SetIncludePurchaseFields(data.IncludePurchaseFields).
|
||||
SetIncludeSoldFields(data.IncludeSoldFields).
|
||||
SetGroupID(gid).
|
||||
SetNillableLocationID(data.DefaultLocationID)
|
||||
SetGroupID(gid)
|
||||
|
||||
// If a default location was provided (uuid != Nil) set it, otherwise leave empty
|
||||
if data.DefaultLocationID != uuid.Nil {
|
||||
q.SetLocationID(data.DefaultLocationID)
|
||||
}
|
||||
// Set default label IDs (stored as JSON)
|
||||
if data.DefaultLabelIDs != nil && len(*data.DefaultLabelIDs) > 0 {
|
||||
q.SetDefaultLabelIds(*data.DefaultLabelIDs)
|
||||
@@ -340,9 +344,9 @@ func (r *ItemTemplatesRepository) Update(ctx context.Context, gid uuid.UUID, dat
|
||||
SetIncludePurchaseFields(data.IncludePurchaseFields).
|
||||
SetIncludeSoldFields(data.IncludeSoldFields)
|
||||
|
||||
// Update location
|
||||
if data.DefaultLocationID != nil {
|
||||
updateQ.SetLocationID(*data.DefaultLocationID)
|
||||
// Update location: set when provided (not uuid.Nil), otherwise clear
|
||||
if data.DefaultLocationID != uuid.Nil {
|
||||
updateQ.SetLocationID(data.DefaultLocationID)
|
||||
} else {
|
||||
updateQ.ClearLocation()
|
||||
}
|
||||
|
||||
@@ -249,7 +249,7 @@ func TestItemTemplatesRepository_CreateWithLocation(t *testing.T) {
|
||||
|
||||
// Create template with location
|
||||
data := templateFactory()
|
||||
data.DefaultLocationID = &loc.ID
|
||||
data.DefaultLocationID = loc.ID
|
||||
|
||||
template, err := tRepos.ItemTemplates.Create(context.Background(), tGroup.ID, data)
|
||||
require.NoError(t, err)
|
||||
@@ -311,7 +311,7 @@ func TestItemTemplatesRepository_UpdateRemoveLocation(t *testing.T) {
|
||||
|
||||
// Create template with location
|
||||
data := templateFactory()
|
||||
data.DefaultLocationID = &loc.ID
|
||||
data.DefaultLocationID = loc.ID
|
||||
|
||||
template, err := tRepos.ItemTemplates.Create(context.Background(), tGroup.ID, data)
|
||||
require.NoError(t, err)
|
||||
@@ -323,7 +323,7 @@ func TestItemTemplatesRepository_UpdateRemoveLocation(t *testing.T) {
|
||||
ID: template.ID,
|
||||
Name: template.Name,
|
||||
DefaultQuantity: &qty,
|
||||
DefaultLocationID: nil, // Remove location
|
||||
DefaultLocationID: uuid.Nil, // Remove location
|
||||
}
|
||||
|
||||
updated, err := tRepos.ItemTemplates.Update(context.Background(), tGroup.ID, updateData)
|
||||
|
||||
@@ -6,6 +6,7 @@ export default [
|
||||
{text: 'Installation', link: '/en/installation'},
|
||||
{text: 'Configure', link: '/en/configure'},
|
||||
{text: 'Storage', link: '/en/configure/storage'},
|
||||
{text: 'OIDC', link: '/en/configure/oidc'},
|
||||
{text: 'Upgrade Guide', link: '/en/upgrade'},
|
||||
{text: 'Migration Guide', link: '/en/migration'},
|
||||
]
|
||||
@@ -20,7 +21,8 @@ export default [
|
||||
{
|
||||
text: 'Advanced',
|
||||
items: [
|
||||
{text: 'Import CSV', link: '/en/import-csv'},
|
||||
{text: 'Import CSV', link: '/en/advanced/import-csv'},
|
||||
{text: 'External Label Service', link: '/en/advanced/external-label-service'},
|
||||
]
|
||||
},
|
||||
{
|
||||
|
||||
53
docs/en/advanced/external-label-service.md
Normal file
53
docs/en/advanced/external-label-service.md
Normal file
@@ -0,0 +1,53 @@
|
||||
# External Label Service
|
||||
|
||||
You can use an external web service to generate asset and location labels in homebox. This is useful if you have custom requirements for your labels and are happy to spin up a web service that can accept incoming requests and return an image file for homebox to use.
|
||||
|
||||
::: info "Note"
|
||||
|
||||
This service is not called to generate sheets of labels accessed via the label generator function. It is used when creating labels from an item or location.
|
||||
|
||||
:::
|
||||
|
||||
## Configuration
|
||||
|
||||
The extenal service is configured using the `HBOX_LABEL_MAKER_LABEL_SERVICE_URL` enviroment variable.
|
||||
|
||||
## Request
|
||||
|
||||
The service is called using an **HTTP `GET` request**. All parameters are passed as part of the **query string**.
|
||||
|
||||
#### Headers
|
||||
|
||||
- **User-Agent**: Homebox-LabelMaker/1.0
|
||||
|
||||
- **Accept**: image/*
|
||||
|
||||
#### Parameters
|
||||
|
||||
| Parameter | Type | Description | Value |
|
||||
| --------------------- | ------ | -------------------------------------------- | --------------------------------------------------------------------- |
|
||||
| AdditionalInformation | string | Extra free text to include on the label. | `HBOX_LABEL_MAKER_ADDITIONAL_INFORMATION` |
|
||||
| ComponentPadding | int | Padding around label components (pixels). | `HBOX_LABEL_MAKER_PADDING` |
|
||||
| DescriptionFontSize | float | Font size for the description text. | |
|
||||
| DescriptionText | string | Descriptive text, can be multi-line. | Item name or "Homebox Location" |
|
||||
| Dpi | float | Rendering resolution (dots per inch). | |
|
||||
| DynamicLength | bool | Whether the label length should auto-adjust. | `HBOX_LABEL_MAKER_DYNAMIC_LENGTH` |
|
||||
| Height | int | Label height in pixels. | `HBOX_LABEL_MAKER_HEIGHT` |
|
||||
| Margin | int | Margin around the label in pixels. | `HBOX_LABEL_MAKER_MARGIN` |
|
||||
| QrSize | int | Size of the QR code element in pixels. | |
|
||||
| TitleFontSize | float | Font size for the title text. | |
|
||||
| TitleText | string | Main label title (e.g. product code). | Asset ID or Location Name |
|
||||
| URL | string | URL to be encoded into the QR code. | Generated based on the configured homebox URL and Asset / Location ID |
|
||||
| Width | int | Label width in pixels. | `HBOX_LABEL_MAKER_WIDTH` |
|
||||
|
||||
## Response
|
||||
|
||||
The external service should respond with the following specifications;
|
||||
|
||||
- **Size:** Less than or equal to `HBOX_WEB_MAX_UPLOAD_SIZE` (Default: 10Mb)
|
||||
|
||||
- **Content-Type**: Specified in the response header should be of the type image/*
|
||||
|
||||
- **Time**: Within the time specified in `HBOX_LABEL_MAKER_LABEL_SERVICE_TIMEOUT` (Default 30s)
|
||||
|
||||
|
||||
@@ -73,137 +73,6 @@ aside: false
|
||||
| HBOX_THUMBNAIL_HEIGHT | 500 | height for generated thumbnails in pixels |
|
||||
| HBOX_BARCODE_TOKEN_BARCODESPIDER | | API token for BarcodeSpider.com service used for barcode product lookups. If not set, barcode product lookups will not be performed. |
|
||||
|
||||
### HBOX_WEB_HOST examples
|
||||
|
||||
| Value | Notes |
|
||||
|-----------------------------|------------------------------------------------------------|
|
||||
| 0.0.0.0 | Visible all interfaces (default behaviour) |
|
||||
| 127.0.0.1 | Only visible on same host |
|
||||
| 100.64.0.1 | Only visible on a specific interface (e.g., VPN in a VPS). |
|
||||
| unix?path=/run/homebox.sock | Listen on unix socket at specified path |
|
||||
| sysd?name=homebox.socket | Listen on systemd socket |
|
||||
|
||||
For unix and systemd socket address syntax and available options, see the [anyhttp address-syntax documentation](https://pkg.go.dev/go.balki.me/anyhttp#readme-address-syntax).
|
||||
|
||||
#### Private network example
|
||||
|
||||
Below example starts homebox in an isolated network. The process cannot make
|
||||
any external requests (including check for newer release) and thus more secure.
|
||||
|
||||
```bash
|
||||
❯ sudo systemd-run --property=PrivateNetwork=yes --uid $UID --pty --same-dir --wait --collect homebox --web-host "unix?path=/run/user/$UID/homebox.sock"
|
||||
Running as unit: run-p74482-i74483.service
|
||||
Press ^] three times within 1s to disconnect TTY.
|
||||
2025/07/11 22:33:29 goose: no migrations to run. current version: 20250706190000
|
||||
10:33PM INF ../../../go/src/app/app/api/handlers/v1/v1_ctrl_auth.go:98 > registering auth provider name=local
|
||||
10:33PM INF ../../../go/src/app/app/api/main.go:275 > Server is running on unix?path=/run/user/1000/homebox.sock
|
||||
10:33PM ERR ../../../go/src/app/app/api/main.go:403 > failed to get latest github release error="failed to make latest version request: Get \"https://api.github.com/repos/sysadminsmedia/homebox/releases/l
|
||||
atest\": dial tcp: lookup api.github.com on [::1]:53: read udp [::1]:50951->[::1]:53: read: connection refused"
|
||||
10:33PM INF ../../../go/src/app/internal/web/mid/logger.go:36 > request received method=GET path=/ rid=hname/PoXyRgt6ol-000001
|
||||
10:33PM INF ../../../go/src/app/internal/web/mid/logger.go:41 > request finished method=GET path=/ rid=hname/PoXyRgt6ol-000001 status=0
|
||||
```
|
||||
|
||||
#### Systemd socket example
|
||||
|
||||
In the example below, Homebox listens on a systemd socket securely so that only
|
||||
the webserver (Caddy) can access it. Other processes/containers on the host
|
||||
cannot connect to Homebox directly, bypassing the webserver.
|
||||
|
||||
File: homebox.socket
|
||||
```systemd
|
||||
# /usr/local/lib/systemd/system/homebox.socket
|
||||
[Unit]
|
||||
Description=Homebox socket
|
||||
|
||||
[Socket]
|
||||
ListenStream=/run/homebox.sock
|
||||
SocketGroup=caddy
|
||||
SocketMode=0660
|
||||
|
||||
[Install]
|
||||
WantedBy=sockets.target
|
||||
```
|
||||
|
||||
File: homebox.service
|
||||
```systemd
|
||||
# /usr/local/lib/systemd/system/homebox.service
|
||||
[Unit]
|
||||
Description=Homebox
|
||||
After=network.target
|
||||
Documentation=https://homebox.software
|
||||
|
||||
[Service]
|
||||
DynamicUser=yes
|
||||
StateDirectory=homebox
|
||||
Environment=HBOX_WEB_HOST=sysd?name=homebox.socket
|
||||
WorkingDirectory=/var/lib/homebox
|
||||
|
||||
ExecStart=/usr/local/bin/homebox
|
||||
|
||||
NoNewPrivileges=yes
|
||||
CapabilityBoundingSet=
|
||||
RestrictNamespaces=true
|
||||
SystemCallFilter=@system-service
|
||||
```
|
||||
Usage:
|
||||
|
||||
```bash
|
||||
systemctl start homebox.socket
|
||||
```
|
||||
|
||||
::: warning Security Considerations
|
||||
For postgreSQL in production:
|
||||
|
||||
- Do not use the default `postgres` user
|
||||
- Do not use the default `postgres` database
|
||||
- Always use a strong unique password
|
||||
- Always use SSL (`sslmode=require` or `sslmode=verify-full`)
|
||||
- Consider using a connection pooler like `pgbouncer`
|
||||
|
||||
For SQLite in production:
|
||||
|
||||
- Secure file permissions for the database file (e.g. `chmod 600`)
|
||||
- Use a secure directory for the database file
|
||||
- Use a secure backup strategy
|
||||
- Monitor the file size and consider using a different database for large installations
|
||||
:::
|
||||
|
||||
## OIDC Configuration
|
||||
|
||||
HomeBox supports OpenID Connect (OIDC) authentication, allowing users to login using external identity providers like Keycloak, Authentik, Google, Microsoft, etc.
|
||||
|
||||
### Basic OIDC Setup
|
||||
|
||||
1. **Enable OIDC**: Set `HBOX_OIDC_ENABLED=true`
|
||||
2. **Provider Configuration**: Set the required provider details:
|
||||
- `HBOX_OIDC_ISSUER_URL`: Your OIDC provider's issuer URL
|
||||
- `HBOX_OIDC_CLIENT_ID`: Client ID from your OIDC provider
|
||||
- `HBOX_OIDC_CLIENT_SECRET`: Client secret from your OIDC provider
|
||||
|
||||
3. **Configure Redirect URI**: In your OIDC provider, set the redirect URI to:
|
||||
`https://your-homebox-domain.com/api/v1/users/login/oidc/callback`
|
||||
|
||||
### Advanced OIDC Configuration
|
||||
|
||||
- **Group Authorization**: Use `HBOX_OIDC_ALLOWED_GROUPS` to restrict access to specific groups
|
||||
- **Custom Claims**: Configure `HBOX_OIDC_GROUP_CLAIM`, `HBOX_OIDC_EMAIL_CLAIM`, and `HBOX_OIDC_NAME_CLAIM` if your provider uses different claim names
|
||||
- **Auto Redirect to OIDC**: Set `HBOX_OIDC_AUTO_REDIRECT=true` to automatically redirect users directly to OIDC
|
||||
- **Local Login**: Set `HBOX_OPTIONS_ALLOW_LOCAL_LOGIN=false` to completely disable username/password login
|
||||
- **Email Verification**: Set `HBOX_OIDC_VERIFY_EMAIL=true` to require email verification from the OIDC provider
|
||||
|
||||
### Security Considerations
|
||||
|
||||
::: warning OIDC Security
|
||||
- Store `HBOX_OIDC_CLIENT_SECRET` securely (use environment variables, not config files)
|
||||
- Use HTTPS for production deployments
|
||||
- Configure proper redirect URIs in your OIDC provider
|
||||
- Consider setting `HBOX_OIDC_ALLOWED_GROUPS` for group-based access control
|
||||
:::
|
||||
|
||||
::: tip CLI Arguments
|
||||
If you're deploying without docker you can use command line arguments to configure the application. Run `homebox --help`
|
||||
for more information.
|
||||
|
||||
```sh
|
||||
Options:
|
||||
--barcode-token-barcodespider <string>
|
||||
@@ -279,5 +148,106 @@ Options:
|
||||
--web-read-timeout <duration> (default: 10s)
|
||||
--web-write-timeout <duration> (default: 10s)
|
||||
```
|
||||
|
||||
:::
|
||||
|
||||
### HBOX_WEB_HOST examples
|
||||
|
||||
| Value | Notes |
|
||||
| --------------------------- | ---------------------------------------------------------- |
|
||||
| 0.0.0.0 | Visible all interfaces (default behaviour) |
|
||||
| 127.0.0.1 | Only visible on same host |
|
||||
| 100.64.0.1 | Only visible on a specific interface (e.g., VPN in a VPS). |
|
||||
| unix?path=/run/homebox.sock | Listen on unix socket at specified path |
|
||||
| sysd?name=homebox.socket | Listen on systemd socket |
|
||||
|
||||
For unix and systemd socket address syntax and available options, see the [anyhttp address-syntax documentation](https://pkg.go.dev/go.balki.me/anyhttp#readme-address-syntax).
|
||||
|
||||
#### Private network example
|
||||
|
||||
Below example starts homebox in an isolated network. The process cannot make
|
||||
any external requests (including check for newer release) and thus more secure.
|
||||
|
||||
```bash
|
||||
❯ sudo systemd-run --property=PrivateNetwork=yes --uid $UID --pty --same-dir --wait --collect homebox --web-host "unix?path=/run/user/$UID/homebox.sock"
|
||||
Running as unit: run-p74482-i74483.service
|
||||
Press ^] three times within 1s to disconnect TTY.
|
||||
2025/07/11 22:33:29 goose: no migrations to run. current version: 20250706190000
|
||||
10:33PM INF ../../../go/src/app/app/api/handlers/v1/v1_ctrl_auth.go:98 > registering auth provider name=local
|
||||
10:33PM INF ../../../go/src/app/app/api/main.go:275 > Server is running on unix?path=/run/user/1000/homebox.sock
|
||||
10:33PM ERR ../../../go/src/app/app/api/main.go:403 > failed to get latest github release error="failed to make latest version request: Get \"https://api.github.com/repos/sysadminsmedia/homebox/releases/l
|
||||
atest\": dial tcp: lookup api.github.com on [::1]:53: read udp [::1]:50951->[::1]:53: read: connection refused"
|
||||
10:33PM INF ../../../go/src/app/internal/web/mid/logger.go:36 > request received method=GET path=/ rid=hname/PoXyRgt6ol-000001
|
||||
10:33PM INF ../../../go/src/app/internal/web/mid/logger.go:41 > request finished method=GET path=/ rid=hname/PoXyRgt6ol-000001 status=0
|
||||
```
|
||||
|
||||
#### Systemd socket example
|
||||
|
||||
In the example below, Homebox listens on a systemd socket securely so that only
|
||||
the webserver (Caddy) can access it. Other processes/containers on the host
|
||||
cannot connect to Homebox directly, bypassing the webserver.
|
||||
|
||||
File: homebox.socket
|
||||
|
||||
```systemd
|
||||
# /usr/local/lib/systemd/system/homebox.socket
|
||||
[Unit]
|
||||
Description=Homebox socket
|
||||
|
||||
[Socket]
|
||||
ListenStream=/run/homebox.sock
|
||||
SocketGroup=caddy
|
||||
SocketMode=0660
|
||||
|
||||
[Install]
|
||||
WantedBy=sockets.target
|
||||
```
|
||||
|
||||
File: homebox.service
|
||||
|
||||
```systemd
|
||||
# /usr/local/lib/systemd/system/homebox.service
|
||||
[Unit]
|
||||
Description=Homebox
|
||||
After=network.target
|
||||
Documentation=https://homebox.software
|
||||
|
||||
[Service]
|
||||
DynamicUser=yes
|
||||
StateDirectory=homebox
|
||||
Environment=HBOX_WEB_HOST=sysd?name=homebox.socket
|
||||
WorkingDirectory=/var/lib/homebox
|
||||
|
||||
ExecStart=/usr/local/bin/homebox
|
||||
|
||||
NoNewPrivileges=yes
|
||||
CapabilityBoundingSet=
|
||||
RestrictNamespaces=true
|
||||
SystemCallFilter=@system-service
|
||||
```
|
||||
|
||||
Usage:
|
||||
|
||||
```bash
|
||||
systemctl start homebox.socket
|
||||
```
|
||||
|
||||
::: warning Security Considerations
|
||||
For postgreSQL in production:
|
||||
|
||||
- Do not use the default `postgres` user
|
||||
- Do not use the default `postgres` database
|
||||
- Always use a strong unique password
|
||||
- Always use SSL (`sslmode=require` or `sslmode=verify-full`)
|
||||
- Consider using a connection pooler like `pgbouncer`
|
||||
|
||||
For SQLite in production:
|
||||
|
||||
- Secure file permissions for the database file (e.g. `chmod 600`)
|
||||
- Use a secure directory for the database file
|
||||
- Use a secure backup strategy
|
||||
- Monitor the file size and consider using a different database for large installations
|
||||
:::
|
||||
|
||||
## OIDC Configuration
|
||||
|
||||
For configuring OpenID Connect (OIDC) authentication, refer to the [OIDC Configuration Guide](/en/configure/oidc).
|
||||
|
||||
44
docs/en/configure/oidc.md
Normal file
44
docs/en/configure/oidc.md
Normal file
@@ -0,0 +1,44 @@
|
||||
# Configure OIDC
|
||||
|
||||
HomeBox supports OpenID Connect (OIDC) authentication, allowing users to login using external identity providers like Keycloak, Authentik, Authelia, Google, Microsoft, etc.
|
||||
|
||||
::: tip OIDC Provider Documentation
|
||||
When configuring OIDC, always refer to the documentation provided by your identity provider for specific details and requirements.
|
||||
:::
|
||||
|
||||
## Basic OIDC Setup
|
||||
|
||||
1. **Enable OIDC**: Set `HBOX_OIDC_ENABLED=true`.
|
||||
2. **Provider Configuration**: Set the required provider details:
|
||||
- `HBOX_OIDC_ISSUER_URL`: Your OIDC provider's issuer URL.
|
||||
- Generally this URL should not have a trailing slash, though it may be required for some providers.
|
||||
- `HBOX_OIDC_CLIENT_ID`: Client ID from your OIDC provider.
|
||||
- `HBOX_OIDC_CLIENT_SECRET`: Client secret from your OIDC provider.
|
||||
- If you are using a reverse proxy, it may be necessary to set `HBOX_OPTIONS_TRUST_PROXY=true` to ensure `https` is correctly detected.
|
||||
- If you have set `HBOX_OPTIONS_HOSTNAME` make sure it is just the hostname and does not include `https://` or `http://`.
|
||||
|
||||
3. **Configure Redirect URI**: In your OIDC provider, set the redirect URI to:
|
||||
`https://your-homebox-domain.example.com/api/v1/users/login/oidc/callback`.
|
||||
|
||||
## Advanced OIDC Configuration
|
||||
|
||||
- **Group Authorization**: Use `HBOX_OIDC_ALLOWED_GROUPS` to restrict access to specific groups, e.g. `HBOX_OIDC_ALLOWED_GROUPS=admin,homebox`.
|
||||
- Some providers require the `groups` scope to return group claims, include it in `HBOX_OIDC_SCOPE` (e.g. `openid profile email groups`) or configure the provider to release the claim.
|
||||
- **Custom Claims**: Configure `HBOX_OIDC_GROUP_CLAIM`, `HBOX_OIDC_EMAIL_CLAIM`, and `HBOX_OIDC_NAME_CLAIM` if your provider uses different claim names.
|
||||
- These default to `HBOX_OIDC_GROUP_CLAIM=groups`, `HBOX_OIDC_EMAIL_CLAIM=email` and `HBOX_OIDC_NAME_CLAIM=name`.
|
||||
- **Auto Redirect to OIDC**: Set `HBOX_OIDC_AUTO_REDIRECT=true` to automatically redirect users directly to OIDC.
|
||||
- **Local Login**: Set `HBOX_OPTIONS_ALLOW_LOCAL_LOGIN=false` to completely disable username/password login.
|
||||
- **Email Verification**: Set `HBOX_OIDC_VERIFY_EMAIL=true` to require email verification from the OIDC provider.
|
||||
|
||||
## Security Considerations
|
||||
|
||||
::: warning OIDC Security
|
||||
- Store `HBOX_OIDC_CLIENT_SECRET` securely (use environment variables, not config files).
|
||||
- Use HTTPS for production deployments.
|
||||
- Configure proper redirect URIs in your OIDC provider.
|
||||
- Consider setting `HBOX_OIDC_ALLOWED_GROUPS` for group-based access control.
|
||||
:::
|
||||
|
||||
::: tip CLI Arguments
|
||||
If you're deploying without docker you can use command line arguments to configure the application. Run `homebox --help` for more information.
|
||||
:::
|
||||
@@ -52,7 +52,7 @@ services:
|
||||
environment:
|
||||
- HBOX_LOG_LEVEL=info
|
||||
- HBOX_LOG_FORMAT=text
|
||||
- HBOX_WEB_MAX_FILE_UPLOAD=10
|
||||
- HBOX_WEB_MAX_UPLOAD_SIZE=10
|
||||
# Please consider allowing analytics to help us improve Homebox (basic computer information, no personal data)
|
||||
- HBOX_OPTIONS_ALLOW_ANALYTICS=false
|
||||
volumes:
|
||||
|
||||
@@ -81,17 +81,6 @@
|
||||
errorMessage.value = t("scanner.error");
|
||||
};
|
||||
|
||||
const checkPermissionsError = async () => {
|
||||
if (navigator.permissions) {
|
||||
const permissionStatus = await navigator.permissions.query({ name: "camera" as PermissionName });
|
||||
if (permissionStatus.state === "denied") {
|
||||
errorMessage.value = t("scanner.permission_denied");
|
||||
console.error("Camera permission denied");
|
||||
return true;
|
||||
}
|
||||
}
|
||||
};
|
||||
|
||||
const handleButtonClick = () => {
|
||||
openDialog(DialogID.ProductImport, { params: { barcode: detectedBarcode.value } });
|
||||
};
|
||||
@@ -103,11 +92,19 @@
|
||||
return;
|
||||
}
|
||||
|
||||
if (await checkPermissionsError()) {
|
||||
return;
|
||||
}
|
||||
|
||||
try {
|
||||
// Request camera permission first
|
||||
try {
|
||||
const stream = await navigator.mediaDevices.getUserMedia({ video: true });
|
||||
stream.getTracks().forEach(track => track.stop());
|
||||
} catch (err: unknown) {
|
||||
if (err instanceof Error && err.name === "NotAllowedError") {
|
||||
errorMessage.value = t("scanner.permission_denied");
|
||||
return;
|
||||
}
|
||||
throw err;
|
||||
}
|
||||
|
||||
const devices = await codeReader.listVideoInputDevices();
|
||||
sources.value = devices;
|
||||
|
||||
|
||||
@@ -39,7 +39,7 @@
|
||||
</div>
|
||||
</template>
|
||||
|
||||
<form class="flex flex-col gap-2" @submit.prevent="create()">
|
||||
<form class="flex min-w-0 flex-col gap-2" @submit.prevent="create()">
|
||||
<LocationSelector v-model="form.location" />
|
||||
|
||||
<!-- Template Info Display - Collapsible banner with distinct styling -->
|
||||
|
||||
@@ -6,12 +6,25 @@
|
||||
<Popover v-model:open="open">
|
||||
<PopoverTrigger as-child>
|
||||
<Button :id="id" variant="outline" role="combobox" :aria-expanded="open" class="w-full justify-between">
|
||||
<span>
|
||||
<span class="truncate text-left">
|
||||
<slot name="display" v-bind="{ item: value }">
|
||||
{{ displayValue(value) || localizedPlaceholder }}
|
||||
</slot>
|
||||
</span>
|
||||
<ChevronsUpDown class="ml-2 size-4 shrink-0 opacity-50" />
|
||||
|
||||
<span class="ml-2 flex items-center">
|
||||
<button
|
||||
v-if="value"
|
||||
type="button"
|
||||
class="shrink-0 rounded p-1 hover:bg-primary/20"
|
||||
:aria-label="t('components.item.selector.clear')"
|
||||
@click.stop.prevent="clearSelection"
|
||||
>
|
||||
<X class="size-4" />
|
||||
</button>
|
||||
|
||||
<ChevronsUpDown class="ml-2 size-4 shrink-0 opacity-50" />
|
||||
</span>
|
||||
</Button>
|
||||
</PopoverTrigger>
|
||||
<PopoverContent class="w-[--reka-popper-anchor-width] p-0">
|
||||
@@ -44,7 +57,7 @@
|
||||
|
||||
<script setup lang="ts">
|
||||
import { computed, ref, watch } from "vue";
|
||||
import { Check, ChevronsUpDown } from "lucide-vue-next";
|
||||
import { Check, ChevronsUpDown, X } from "lucide-vue-next";
|
||||
import fuzzysort from "fuzzysort";
|
||||
import { useVModel } from "@vueuse/core";
|
||||
import { useI18n } from "vue-i18n";
|
||||
@@ -174,6 +187,12 @@
|
||||
open.value = false;
|
||||
}
|
||||
|
||||
function clearSelection() {
|
||||
value.value = null;
|
||||
search.value = "";
|
||||
open.value = false;
|
||||
}
|
||||
|
||||
const filtered = computed(() => {
|
||||
let baseItems = props.items;
|
||||
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
<template>
|
||||
<BaseModal :dialog-id="DialogID.CreateLabel" :title="$t('components.label.create_modal.title')">
|
||||
<form class="flex flex-col gap-2" @submit.prevent="create()">
|
||||
<form class="flex min-w-0 flex-col gap-2" @submit.prevent="create()">
|
||||
<FormTextField
|
||||
v-model="form.name"
|
||||
:trigger-focus="focused"
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
<template>
|
||||
<BaseModal :dialog-id="DialogID.CreateLocation" :title="$t('components.location.create_modal.title')">
|
||||
<form class="flex flex-col gap-2" @submit.prevent="create()">
|
||||
<form class="flex min-w-0 flex-col gap-2" @submit.prevent="create()">
|
||||
<LocationSelector v-model="form.parent" />
|
||||
<FormTextField
|
||||
ref="locationNameRef"
|
||||
|
||||
@@ -7,8 +7,23 @@
|
||||
<Popover v-model:open="open">
|
||||
<PopoverTrigger as-child>
|
||||
<Button :id="id" variant="outline" role="combobox" :aria-expanded="open" class="w-full justify-between">
|
||||
{{ value && value.name ? value.name : $t("components.location.selector.select_location") }}
|
||||
<ChevronsUpDown class="ml-2 size-4 shrink-0 opacity-50" />
|
||||
<span class="min-w-0 flex-auto truncate text-left">
|
||||
{{ value && value.name ? value.name : $t("components.location.selector.select_location") }}
|
||||
</span>
|
||||
|
||||
<span class="ml-2 flex items-center">
|
||||
<button
|
||||
v-if="value"
|
||||
type="button"
|
||||
class="shrink-0 rounded p-1 hover:bg-primary/20"
|
||||
:aria-label="$t('components.location.selector.clear')"
|
||||
@click.stop.prevent="clearSelection"
|
||||
>
|
||||
<X class="size-4" />
|
||||
</button>
|
||||
|
||||
<ChevronsUpDown class="ml-2 size-4 shrink-0 opacity-50" />
|
||||
</span>
|
||||
</Button>
|
||||
</PopoverTrigger>
|
||||
<PopoverContent class="w-[--reka-popper-anchor-width] p-0">
|
||||
@@ -46,7 +61,7 @@
|
||||
</template>
|
||||
|
||||
<script setup lang="ts">
|
||||
import { Check, ChevronsUpDown } from "lucide-vue-next";
|
||||
import { Check, ChevronsUpDown, X } from "lucide-vue-next";
|
||||
import fuzzysort from "fuzzysort";
|
||||
import { Button } from "~/components/ui/button";
|
||||
import { Command, CommandEmpty, CommandGroup, CommandInput, CommandItem, CommandList } from "~/components/ui/command";
|
||||
@@ -79,6 +94,12 @@
|
||||
open.value = false;
|
||||
}
|
||||
|
||||
function clearSelection() {
|
||||
value.value = null;
|
||||
search.value = "";
|
||||
open.value = false;
|
||||
}
|
||||
|
||||
const filteredLocations = computed(() => {
|
||||
const filtered = fuzzysort.go(search.value, locations.value, { key: "name", all: true }).map(i => i.obj);
|
||||
|
||||
|
||||
@@ -22,6 +22,13 @@
|
||||
|
||||
const state = useTreeState(props.treeId);
|
||||
|
||||
const collator = new Intl.Collator(undefined, { numeric: true, sensitivity: "base" });
|
||||
|
||||
const sortedChildren = computed(() => {
|
||||
const children = props.item.children ?? [];
|
||||
return [...children].sort((a, b) => collator.compare(a.name, b.name));
|
||||
});
|
||||
|
||||
const openRef = computed({
|
||||
get() {
|
||||
return state.value[nodeHash.value] ?? false;
|
||||
@@ -66,7 +73,7 @@
|
||||
<NuxtLink class="text-lg hover:underline" :to="link" @click.stop>{{ item.name }} </NuxtLink>
|
||||
</div>
|
||||
<div v-if="openRef" class="ml-4">
|
||||
<LocationTreeNode v-for="child in item.children" :key="child.id" :item="child" :tree-id="treeId" />
|
||||
<LocationTreeNode v-for="child in sortedChildren" :key="child.id" :item="child" :tree-id="treeId" />
|
||||
</div>
|
||||
</div>
|
||||
</template>
|
||||
|
||||
@@ -7,14 +7,21 @@
|
||||
treeId: string;
|
||||
};
|
||||
|
||||
defineProps<Props>();
|
||||
const props = defineProps<Props>();
|
||||
|
||||
const collator = new Intl.Collator(undefined, { numeric: true, sensitivity: "base" });
|
||||
|
||||
const sortedLocs = computed(() => {
|
||||
const list = props.locs ?? [];
|
||||
return [...list].sort((a, b) => collator.compare(a.name, b.name));
|
||||
});
|
||||
</script>
|
||||
|
||||
<template>
|
||||
<div>
|
||||
<p v-if="locs.length === 0" class="text-center text-sm">
|
||||
<p v-if="sortedLocs.length === 0" class="text-center text-sm">
|
||||
{{ $t("location.tree.no_locations") }}
|
||||
</p>
|
||||
<LocationTreeNode v-for="item in locs" :key="item.id" :item="item" :tree-id="treeId" />
|
||||
<LocationTreeNode v-for="item in sortedLocs" :key="item.id" :item="item" :tree-id="treeId" />
|
||||
</div>
|
||||
</template>
|
||||
|
||||
@@ -58,7 +58,7 @@
|
||||
defaultModelNumber: fullTemplate.defaultModelNumber,
|
||||
defaultLifetimeWarranty: fullTemplate.defaultLifetimeWarranty,
|
||||
defaultWarrantyDetails: fullTemplate.defaultWarrantyDetails,
|
||||
defaultLocationId: fullTemplate.defaultLocation?.id ?? "",
|
||||
defaultLocationId: fullTemplate.defaultLocation?.id ?? null,
|
||||
defaultLabelIds: fullTemplate.defaultLabels?.map(l => l.id) || [],
|
||||
includeWarrantyFields: fullTemplate.includeWarrantyFields,
|
||||
includePurchaseFields: fullTemplate.includePurchaseFields,
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
<template>
|
||||
<BaseModal :dialog-id="DialogID.CreateTemplate" :title="$t('components.template.create_modal.title')">
|
||||
<form class="flex flex-col gap-2" @submit.prevent="create()">
|
||||
<form class="flex min-w-0 flex-col gap-2" @submit.prevent="create()">
|
||||
<FormTextField
|
||||
v-model="form.name"
|
||||
:autofocus="true"
|
||||
@@ -16,7 +16,7 @@
|
||||
|
||||
<Separator class="my-2" />
|
||||
<h3 class="text-sm font-medium">{{ $t("components.template.form.default_item_values") }}</h3>
|
||||
<div class="grid gap-2">
|
||||
<div class="flex min-w-0 flex-col gap-2">
|
||||
<FormTextField v-model="form.defaultName" :label="$t('components.template.form.item_name')" :max-length="255" />
|
||||
<FormTextArea
|
||||
v-model="form.defaultDescription"
|
||||
|
||||
@@ -38,6 +38,14 @@
|
||||
</div>
|
||||
</CommandItem>
|
||||
</CommandGroup>
|
||||
<CommandSeparator v-if="value" />
|
||||
<CommandGroup v-if="value">
|
||||
<CommandItem v-if="value" value="clear-selection" @select="clearSelection">
|
||||
<div class="flex w-full">
|
||||
{{ $t("components.template.selector.clear") }}
|
||||
</div>
|
||||
</CommandItem>
|
||||
</CommandGroup>
|
||||
</CommandList>
|
||||
</Command>
|
||||
</PopoverContent>
|
||||
@@ -79,6 +87,13 @@
|
||||
</div>
|
||||
</CommandItem>
|
||||
</CommandGroup>
|
||||
<CommandSeparator />
|
||||
<CommandItem v-if="value" value="clear-selection" @select="clearSelection">
|
||||
<X :class="cn('mr-2 h-4 w-4')" />
|
||||
<div class="flex w-full">
|
||||
<span class="text-destructive">{{ $t("components.template.selector.clear") }}</span>
|
||||
</div>
|
||||
</CommandItem>
|
||||
</CommandList>
|
||||
</Command>
|
||||
</PopoverContent>
|
||||
@@ -87,10 +102,18 @@
|
||||
</template>
|
||||
|
||||
<script setup lang="ts">
|
||||
import { Check, ChevronsUpDown } from "lucide-vue-next";
|
||||
import { Check, ChevronsUpDown, X } from "lucide-vue-next";
|
||||
import fuzzysort from "fuzzysort";
|
||||
import { Button } from "~/components/ui/button";
|
||||
import { Command, CommandEmpty, CommandGroup, CommandInput, CommandItem, CommandList } from "~/components/ui/command";
|
||||
import {
|
||||
Command,
|
||||
CommandEmpty,
|
||||
CommandGroup,
|
||||
CommandInput,
|
||||
CommandItem,
|
||||
CommandList,
|
||||
CommandSeparator,
|
||||
} from "~/components/ui/command";
|
||||
import { Label } from "~/components/ui/label";
|
||||
import { Popover, PopoverContent, PopoverTrigger } from "~/components/ui/popover";
|
||||
import { cn } from "~/lib/utils";
|
||||
@@ -132,6 +155,13 @@
|
||||
open.value = false;
|
||||
}
|
||||
|
||||
function clearSelection() {
|
||||
value.value = null;
|
||||
emit("template-selected", null);
|
||||
search.value = "";
|
||||
open.value = false;
|
||||
}
|
||||
|
||||
const filteredTemplates = computed(() => {
|
||||
if (!templates.value) return [];
|
||||
const filtered = fuzzysort.go(search.value, templates.value, { key: "name", all: true }).map(i => i.obj);
|
||||
|
||||
@@ -47,7 +47,7 @@
|
||||
{{ btn.name.value }}
|
||||
<Shortcut
|
||||
v-if="btn.shortcut"
|
||||
class="ml-auto hidden group-hover:inline"
|
||||
class="invisible ml-auto group-hover:visible"
|
||||
:keys="btn.shortcut.replace('Shift', '⇧').split('+')"
|
||||
/>
|
||||
</DropdownMenuItem>
|
||||
|
||||
14
frontend/locales/ar-AA.json
Normal file
14
frontend/locales/ar-AA.json
Normal file
@@ -0,0 +1,14 @@
|
||||
{
|
||||
"components": {
|
||||
"app": {
|
||||
"create_modal": {
|
||||
"createAndAddAnother": "استخدم المفتاحين {shiftKey} + {enterKey} للحفظ و إضافة عنصر جديد.",
|
||||
"enter": "إدخال",
|
||||
"shift": "عالي"
|
||||
},
|
||||
"import_dialog": {
|
||||
"change_warning": "تم تغيير آلية الإستيراد بتواجد العمود import_refs. عند تواجد العمود import_refs في ملف الـCSV،\nسيتم تحديث محتوى العناصر عن طريق القيم المتوفرة في ملف الـCSV."
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -1,9 +1,19 @@
|
||||
{
|
||||
"components": {
|
||||
"app": {
|
||||
"create_modal": {
|
||||
"createAndAddAnother": "Koristite {shiftKey} + {enterKey} da kreirate i dodate novu stavku.",
|
||||
"enter": "Enter",
|
||||
"shift": "Shift"
|
||||
},
|
||||
"import_dialog": {
|
||||
"change_warning": "Način unosa podataka s postojećim import_refs se promjenio. Ako je import_ref prisutan u CSV fajlu,\npredmet će se ažurirati s vrijednostima iz CSV fajla.",
|
||||
"title": "Importuj CSV fajl"
|
||||
"change_warning": "Način unosa podataka s postojećim import_refs se promijenio. Ako je import_ref prisutan u CSV fajlu,\npredmet će se ažurirati s vrijednostima iz CSV fajla.",
|
||||
"title": "Importuj CSV fajl",
|
||||
"toast": {
|
||||
"import_failed": "Import neuspješan. Molim vas pokušajte ponovo kasnije.",
|
||||
"import_success": "Import uspješan!",
|
||||
"please_select_file": "Molim odaberite fajl za import."
|
||||
}
|
||||
},
|
||||
"outdated": {
|
||||
"current_version": "Trenutna verzija",
|
||||
@@ -13,6 +23,18 @@
|
||||
"new_version_available_link": "Klikni ovdje za pregled bilješke o izdanju"
|
||||
}
|
||||
},
|
||||
"color_selector": {
|
||||
"clear": "Poništi izbor boje",
|
||||
"color": "Boja",
|
||||
"no_color": "Bez boje",
|
||||
"no_color_selected": "Nije odabrana boja",
|
||||
"randomize": "Slučajni izbor boje"
|
||||
},
|
||||
"form": {
|
||||
"password": {
|
||||
"toggle_show": "Prikaži/sakrij šifru"
|
||||
}
|
||||
},
|
||||
"global": {
|
||||
"copy_text": {
|
||||
"documentation": "dokumentacija",
|
||||
@@ -33,6 +55,9 @@
|
||||
"minute": "minuta",
|
||||
"minutes": "minuta",
|
||||
"months": "mjeseci",
|
||||
"next-month": "idući mjesec",
|
||||
"next-week": "iduća hefta",
|
||||
"next-year": "iduća godina",
|
||||
"second": "sekunda",
|
||||
"seconds": "sekundi",
|
||||
"tomorrow": "sutra",
|
||||
@@ -40,9 +65,62 @@
|
||||
"weeks": "sedmica/e",
|
||||
"years": "godine/a",
|
||||
"yesterday": "jučer"
|
||||
},
|
||||
"label_maker": {
|
||||
"browser_print": "Štampaj iz browsera",
|
||||
"confirm_description": "Da li ste sigurni da želite štampati ovu oznaku?",
|
||||
"download": "Preuzmi oznaku",
|
||||
"print": "Štampaj oznaku",
|
||||
"server_print": "Štampaj na server",
|
||||
"titles": "Oznake",
|
||||
"toast": {
|
||||
"load_status_failed": "Ne mogu da učitam status",
|
||||
"print_failed": "Ne mogu da štampam oznaku",
|
||||
"print_success": "Oznaka otštampana"
|
||||
}
|
||||
},
|
||||
"page_qr_code": {
|
||||
"page_url": "Link stranice",
|
||||
"qr_tooltip": "Prikaži QR kod"
|
||||
},
|
||||
"password_score": {
|
||||
"password_strength": "Kompleksnost šifre"
|
||||
}
|
||||
},
|
||||
"item": {
|
||||
"attachments_list": {
|
||||
"download": "Preuzimanje",
|
||||
"open_new_tab": "Otvori u novom tabu"
|
||||
},
|
||||
"create_modal": {
|
||||
"delete_photo": "Obriši fotografiju",
|
||||
"item_description": "Opis stavke",
|
||||
"item_name": "Naziv stavke",
|
||||
"item_photo": "Fotografija stavke 📷",
|
||||
"item_quantity": "Količina stavke",
|
||||
"product_tooltip_input_barcode": "Automatski popuni s ručno unesenim barkodom",
|
||||
"product_tooltip_scan_barcode": "Automatski popuni s barkodom sa 📷",
|
||||
"rotate_photo": "Okreni fotografiju",
|
||||
"title": "Kreiraj stavku",
|
||||
"toast": {
|
||||
"already_creating": "Već kreiram stavku",
|
||||
"create_failed": "Ne mogu kreirati stavku",
|
||||
"create_success": "Stavka kreirana",
|
||||
"no_canvas_support": "Vaš browser ne podržava canvas operacije",
|
||||
"please_select_location": "Molim odaberite lokaciju.",
|
||||
"rotate_failed": "Ne mogu rotirati fotografiju: { error }",
|
||||
"rotate_process_failed": "Ne mogu obraditi rotiranu fotografiju",
|
||||
"some_photos_failed": "{count, plural, =0 {Nema fotografija za upload.} =1 {1 fotografiju nije moguće uplodovati.} other {Neke fotografije nije moguće uploadovati.}}",
|
||||
"upload_failed": "Ne mogu uploadovati fotografiju: { photoName }",
|
||||
"upload_success": "{count, plural, =0 {Nema fotografija za upload.} =1 {Fotografija uspješno uploadovana.} other {Sve fotografije uspješno uploadovane.}}",
|
||||
"uploading_photos": "{count, plural, =0 {Nema fotografija za upload.} =1 {Uploadujem 1 fotografiju…} other {Uploadujem {count} fotografija…}}"
|
||||
},
|
||||
"upload_photos": "Uploaduj fotografije",
|
||||
"uploaded": "Uploadovane fotografije"
|
||||
},
|
||||
"product_import": {
|
||||
"barcode": "Barkod proizvoda"
|
||||
},
|
||||
"view": {
|
||||
"selectable": {
|
||||
"card": "Karta",
|
||||
|
||||
@@ -94,6 +94,7 @@
|
||||
"open_new_tab": "Otevřít na nové kartě"
|
||||
},
|
||||
"create_modal": {
|
||||
"clear_template": "Vymazat šablonu",
|
||||
"delete_photo": "Smazat fotku",
|
||||
"item_description": "Popis položky",
|
||||
"item_name": "Jméno položky",
|
||||
@@ -134,19 +135,55 @@
|
||||
"selector": {
|
||||
"no_results": "Nebyly nalezeny žádné výsledky",
|
||||
"placeholder": "Vyberte…",
|
||||
"search_placeholder": "Pište pro vyhledávání…"
|
||||
"search_placeholder": "Pište pro vyhledávání…",
|
||||
"searching": "Hledám…"
|
||||
},
|
||||
"view": {
|
||||
"change_details": {
|
||||
"add_labels": "Přidat štítky",
|
||||
"failed_to_update_item": "Aktualizace položky se nezdařila",
|
||||
"remove_labels": "Odebrat štítky",
|
||||
"title": "Změnit podrobnosti o položce"
|
||||
},
|
||||
"selectable": {
|
||||
"card": "Karta",
|
||||
"items": "Položky",
|
||||
"no_items": "Žádné položky k zobrazení",
|
||||
"select_all": "Vybrat vše",
|
||||
"select_card": "Vybrat kartu",
|
||||
"select_row": "Vyberte řádek",
|
||||
"table": "Tabulka"
|
||||
},
|
||||
"table": {
|
||||
"dropdown": {
|
||||
"actions": "Akce",
|
||||
"change_labels": "Změnit štítky",
|
||||
"change_labels_success": "Štítky změněny",
|
||||
"change_location": "Změnit umístění",
|
||||
"change_location_success": "Umístění bylo změněno",
|
||||
"create_maintenance_item": "Vytvořit záznam údržby pro položku",
|
||||
"create_maintenance_selected": "Vytvořit záznam údržby pro vybrané položky",
|
||||
"create_maintenance_success": "Vytvořené záznamy údržby",
|
||||
"delete_confirmation": "Opravdu chcete smazat vybrané položky? Tuto akci nelze vrátit zpět.",
|
||||
"delete_item": "Odstranit položku",
|
||||
"delete_selected": "Smazat vybrané položky",
|
||||
"download_csv": "Stáhnout tabulku jako CSV",
|
||||
"download_json": "Stáhnout tabulku jako JSON",
|
||||
"duplicate_item": "Duplikovat tuto položku",
|
||||
"duplicate_selected": "Duplikovat vybrané položky",
|
||||
"error_deleting": "Chyba při mazání položky",
|
||||
"error_duplicating": "Chyba při duplikování položky",
|
||||
"open_menu": "Otevřít menu",
|
||||
"open_multi_tab_warning": "Z bezpečnostních důvodů prohlížeče ve výchozím nastavení neumožňují otevření více karet najednou. Chcete-li to změnit, postupujte podle dokumentace:",
|
||||
"toggle_expand": "Přepnout rozbalit",
|
||||
"view_item": "Zobrazit položku",
|
||||
"view_items": "Zobrazit položky"
|
||||
},
|
||||
"headers": "Záhlaví",
|
||||
"page": "Stránka",
|
||||
"quick_actions": "Povolit rychlé akce a výběr",
|
||||
"rows_per_page": "Řádků na stránku",
|
||||
"selected_rows": "{selected} z {total} řádků vybráno.",
|
||||
"table_settings": "Nastavení tabulky",
|
||||
"view_item": "Zobrazit položku"
|
||||
}
|
||||
@@ -193,6 +230,65 @@
|
||||
"quick_menu": {
|
||||
"no_results": "Nebyly nalezeny žádné výsledky.",
|
||||
"shortcut_hint": "Pomocí číselných tlačítek rychle vyberte akci."
|
||||
},
|
||||
"template": {
|
||||
"apply_template": "Použít šablonu",
|
||||
"card": {
|
||||
"delete": "Smazat šablonu",
|
||||
"duplicate": "Duplikovat šablonu",
|
||||
"edit": "Upravit šablonu"
|
||||
},
|
||||
"confirm_delete": "Smazat tuto šablonu?",
|
||||
"create_modal": {
|
||||
"title": "Vytvořit šablonu"
|
||||
},
|
||||
"detail": {
|
||||
"default_values": "Výchozí hodnoty",
|
||||
"updated": "Aktualizováno"
|
||||
},
|
||||
"edit_modal": {
|
||||
"title": "Upravit šablonu"
|
||||
},
|
||||
"empty_value": "(prázdné)",
|
||||
"form": {
|
||||
"custom_fields": "Vlastní pole",
|
||||
"default_item_values": "Výchozí hodnoty položek",
|
||||
"default_location": "Výchozí umístění",
|
||||
"default_value": "Výchozí hodnota",
|
||||
"field_name": "Název pole",
|
||||
"item_description": "Popis položky",
|
||||
"item_name": "Název položky",
|
||||
"lifetime_warranty": "Doživotní záruka",
|
||||
"location": "Umístění",
|
||||
"manufacturer": "Výrobce",
|
||||
"model_number": "Číslo modelu",
|
||||
"no_custom_fields": "Žádná vlastní pole.",
|
||||
"template_description": "Popis šablony",
|
||||
"template_name": "Název šablony"
|
||||
},
|
||||
"hide_defaults": "Skrýt výchozí hodnoty",
|
||||
"save_as_template": "Uložit jako šablonu",
|
||||
"selector": {
|
||||
"label": "Šablona (volitelné)",
|
||||
"not_found": "Nenalezena žádná šablona",
|
||||
"search": "Vyhledávání šablon…",
|
||||
"select": "Vyberte šablonu…"
|
||||
},
|
||||
"show_defaults": "Zobrazit výchozí hodnoty",
|
||||
"toast": {
|
||||
"applied": "Šablona „{name}“ použita",
|
||||
"create_failed": "Nepodařilo se vytvořit šablonu",
|
||||
"created": "Šablona vytvořena",
|
||||
"delete_failed": "Nepodařilo se odstranit šablonu",
|
||||
"deleted": "Šablona smazána",
|
||||
"duplicate_failed": "Nepodařilo se duplikovat šablonu",
|
||||
"duplicated": "Šablona duplikována jako „{name}“",
|
||||
"load_failed": "Nepodařilo se načíst podrobnosti šablony",
|
||||
"saved_as_template": "Položka uložena jako šablona „{name}“",
|
||||
"update_failed": "Nepodařilo se aktualizovat šablonu",
|
||||
"updated": "Šablona aktualizována"
|
||||
},
|
||||
"using_template": "Používání šablony: {name}"
|
||||
}
|
||||
},
|
||||
"errors": {
|
||||
@@ -230,7 +326,9 @@
|
||||
"maintenance": "Údržba",
|
||||
"name": "Jméno",
|
||||
"navigate": "Navigovat",
|
||||
"no": "Ne",
|
||||
"password": "Heslo",
|
||||
"preview": "Náhled",
|
||||
"quantity": "Množství",
|
||||
"read_docs": "Přečtěte si dokumentaci",
|
||||
"return_home": "Zpět domů",
|
||||
@@ -243,7 +341,8 @@
|
||||
"updating": "Aktualizuji",
|
||||
"value": "Hodnota",
|
||||
"version": "Verze: { version }",
|
||||
"welcome": "Vítejte, { username }"
|
||||
"welcome": "Vítejte, { username }",
|
||||
"yes": "Ano"
|
||||
},
|
||||
"home": {
|
||||
"labels": "Štítky",
|
||||
@@ -260,6 +359,7 @@
|
||||
"dont_join_group": "Nechcete se přidat do skupiny?",
|
||||
"joining_group": "Přidáváte se do existující skupiny!",
|
||||
"login": "Přihlásit se",
|
||||
"or": "nebo",
|
||||
"register": "Registrovat se",
|
||||
"remember_me": "Zapamatovat si mě",
|
||||
"set_email": "Jaký je váš email?",
|
||||
@@ -271,6 +371,14 @@
|
||||
"invalid_email": "Neplatná e-mailová adresa",
|
||||
"invalid_email_password": "Neplatný e-mail nebo heslo",
|
||||
"login_success": "Úspěšně přihlášen",
|
||||
"oidc_access_denied": "Přístup odepřen: Váš účet nemá požadovanou roli/členství ve skupině",
|
||||
"oidc_auth_failed": "OIDC ověření selhalo",
|
||||
"oidc_invalid_response": "Byla přijata neplatná odpověď OIDC",
|
||||
"oidc_provider_error": "Poskytovatel OIDC vrátil chybu",
|
||||
"oidc_security_error": "Chyba zabezpečení OIDC – možný útok CSRF",
|
||||
"oidc_session_expired": "OIDC relace vypršela",
|
||||
"oidc_token_expired": "Token OIDC vypršel",
|
||||
"oidc_token_invalid": "Podpis tokenu OIDC je neplatný",
|
||||
"problem_registering": "Problém s registrací uživatele",
|
||||
"user_registered": "Uživatel registrován"
|
||||
}
|
||||
@@ -507,8 +615,15 @@
|
||||
"profile": "Profil",
|
||||
"scanner": "Skener",
|
||||
"search": "Vyhledávání",
|
||||
"templates": "Šablony",
|
||||
"tools": "Nástroje"
|
||||
},
|
||||
"pages": {
|
||||
"templates": {
|
||||
"no_templates": "Zatím žádné šablony.",
|
||||
"title": "Šablony"
|
||||
}
|
||||
},
|
||||
"profile": {
|
||||
"active": "Aktivní",
|
||||
"change_password": "Změnit heslo",
|
||||
@@ -526,6 +641,7 @@
|
||||
"group_settings_sub": "Nastavení sdílené skupiny. Je možné, že bude nutné obnovit prohlížeč, aby se některá nastavení použila.",
|
||||
"inactive": "Neaktivní",
|
||||
"language": "Jazyk",
|
||||
"legacy_image_fit": "{ currentValue, select, true {Zakázat starší přizpůsobení: přizpůsobit obrázek s pruhy} false {Povolit starší přizpůsobení: vyplnit obrázek oříznutím} other {Not Hit}}",
|
||||
"new_password": "Nové heslo",
|
||||
"no_notifiers": "Nejsou nakonfigurováni žádní oznamovatelé",
|
||||
"no_override": "Žádné přepsání",
|
||||
|
||||
@@ -100,6 +100,7 @@
|
||||
"item_photo": "Vare Foto 📷",
|
||||
"item_quantity": "Vare Antal",
|
||||
"parent_item": "Overordnet element",
|
||||
"product_tooltip_input_barcode": "Autoudfyld med en manuelt angivet stregkode",
|
||||
"product_tooltip_scan_barcode": "Fyld automatisk med stregkode fra 📷",
|
||||
"rotate_photo": "Roter foto",
|
||||
"set_as_primary_photo": "Sæt som { isPrimary, select, true {non-} false {} other {}}primært foto",
|
||||
@@ -124,27 +125,64 @@
|
||||
"product_import": {
|
||||
"barcode": "Produkts stregkode",
|
||||
"db_source": "DB kilde",
|
||||
"error_exception": "Der opstod en undtagelse under hentning af varens stregkode: ",
|
||||
"error_invalid_barcode": "Ugyldig stregkode angivet",
|
||||
"error_not_found": "Intet produkt fundet med angivet stregkode.",
|
||||
"error_not_found": "Intet produkt fundet med den angivne stregkode.",
|
||||
"search_item": "Søg produkt",
|
||||
"title": "Importér produkt"
|
||||
},
|
||||
"selector": {
|
||||
"no_results": "Ingen resultater fundet",
|
||||
"placeholder": "Vælg…",
|
||||
"search_placeholder": "Skriv for at søge…"
|
||||
"search_placeholder": "Skriv for at søge…",
|
||||
"searching": "Søger…"
|
||||
},
|
||||
"view": {
|
||||
"change_details": {
|
||||
"add_labels": "Tilføj etiketter",
|
||||
"failed_to_update_item": "Kunne ikke opdatere elementet",
|
||||
"remove_labels": "Fjern Etiketter",
|
||||
"title": "Skift elementoplysninger"
|
||||
},
|
||||
"selectable": {
|
||||
"card": "Kort",
|
||||
"items": "Genstande",
|
||||
"no_items": "Ingen genstande at vise",
|
||||
"select_all": "Vælg alle",
|
||||
"select_card": "Vælg kort",
|
||||
"select_row": "Vælg række",
|
||||
"table": "Tabel"
|
||||
},
|
||||
"table": {
|
||||
"dropdown": {
|
||||
"actions": "Handlinger",
|
||||
"change_labels": "Skift etiketter",
|
||||
"change_labels_success": "Etiketter ændret",
|
||||
"change_location": "Skift placering",
|
||||
"change_location_success": "Placering ændret",
|
||||
"create_maintenance_item": "Opret vedligeholdelsespost for vare",
|
||||
"create_maintenance_selected": "Opret vedligeholdelsespost for valgte varer",
|
||||
"create_maintenance_success": "Vedligeholdelsespost(er) oprettet",
|
||||
"delete_confirmation": "Er du sikker på, at du vil slette det/de valgte element(er)? Denne handling kan ikke fortrydes.",
|
||||
"delete_item": "Slet element",
|
||||
"delete_selected": "Slet valgte elementer",
|
||||
"download_csv": "Download tabel som CSV",
|
||||
"download_json": "Download tabel som JSON",
|
||||
"duplicate_item": "Dupliker element",
|
||||
"duplicate_selected": "Dupliker valgte elementer",
|
||||
"error_deleting": "Fejl ved sletning af element",
|
||||
"error_duplicating": "Fejl ved duplikering af element",
|
||||
"open_menu": "Åbn menu",
|
||||
"open_multi_tab_warning": "Af sikkerhedsmæssige årsager tillader browsere som standard ikke, at flere faner åbnes på én gang. For at ændre dette skal du følge dokumentationen:",
|
||||
"toggle_expand": "Udvid til/fra",
|
||||
"view_item": "Vis element",
|
||||
"view_items": "Vis elementer"
|
||||
},
|
||||
"headers": "Overskrifter",
|
||||
"page": "Side",
|
||||
"quick_actions": "Aktivér hurtige handlinger og valg",
|
||||
"rows_per_page": "Rækker per side",
|
||||
"selected_rows": "{selected} af {total} række(r) valgt.",
|
||||
"table_settings": "Tabel Indstillinger",
|
||||
"view_item": "Se vare"
|
||||
}
|
||||
@@ -229,6 +267,7 @@
|
||||
"name": "Navn",
|
||||
"navigate": "Naviger",
|
||||
"password": "Adgangskode",
|
||||
"preview": "Forhåndsvisning",
|
||||
"quantity": "Mængde",
|
||||
"read_docs": "Læs Docs",
|
||||
"return_home": "Vend hjem",
|
||||
@@ -289,6 +328,18 @@
|
||||
"description": "Beskrivelse",
|
||||
"details": "Detaljer",
|
||||
"drag_and_drop": "Træk og slip filer her, eller klik for at vælge filer",
|
||||
"duplicate": {
|
||||
"copy_attachments": "Kopiér vedhæftede filer",
|
||||
"copy_custom_fields": "Kopiér brugerdefinerede felter",
|
||||
"copy_maintenance": "Kopier vedligeholdelse",
|
||||
"custom_prefix": "Kopiér præfiks",
|
||||
"enable_custom_prefix": "Aktivér brugerdefineret præfiks",
|
||||
"override_instructions": "Hold Shift nede, når du klikker på duplikatknappen for at tilsidesætte disse indstillinger.",
|
||||
"prefix": "Kopi af ",
|
||||
"prefix_instructions": "Dette præfiks vil blive tilføjet i begyndelsen af det duplikerede elements navn. Medtag et mellemrum i slutningen af præfikset for at tilføje et mellemrum mellem præfikset og elementnavnet.",
|
||||
"temporary_title": "Midlertidige indstillinger",
|
||||
"title": "Dupliker indstillinger"
|
||||
},
|
||||
"edit": {
|
||||
"edit_attachment_dialog": {
|
||||
"attachment_title": "Titel på vedhæftet fil",
|
||||
@@ -297,7 +348,8 @@
|
||||
"primary_photo_sub": "Denne mulighed er kun tilgængelig for fotos. Kun ét foto kan være primært. Hvis du vælger denne mulighed, vil det aktuelle primære foto, hvis der er et, blive fravalgt.",
|
||||
"select_type": "Vælg en type",
|
||||
"title": "Rediger vedhæftet fil"
|
||||
}
|
||||
},
|
||||
"view_image": "Vis billede"
|
||||
},
|
||||
"edit_details": "Rediger detaljer",
|
||||
"field_selector": "Feltvælger",
|
||||
@@ -395,6 +447,7 @@
|
||||
"update_label": "Opdater etiket"
|
||||
},
|
||||
"languages": {
|
||||
"bs-BA": "Bosnisk (Bosnien-Hercegovina)",
|
||||
"ca": "Catalansk",
|
||||
"cs-CZ": "Tjekkisk",
|
||||
"de": "Tysk",
|
||||
@@ -422,6 +475,7 @@
|
||||
"th-TH": "Thailandsk",
|
||||
"tr": "Tyrkisk",
|
||||
"uk-UA": "Ukrainsk",
|
||||
"vi-VN": "Vietnamesisk",
|
||||
"zh-CN": "Kinesisk (simplificeret)",
|
||||
"zh-HK": "Kinesisk (Hong Kong)",
|
||||
"zh-MO": "Kinesisk (Macao)",
|
||||
@@ -509,6 +563,7 @@
|
||||
"group_settings_sub": "Indstillinger for delt gruppe. Det kan være nødvendigt at genindlæse din browser før nogle indstillinger træder i kraft.",
|
||||
"inactive": "Inaktiv",
|
||||
"language": "Sprog",
|
||||
"legacy_image_fit": "{ currentValue, select, true {Deaktiver Legacy Fit: Tilpas billede med bjælker} false {Aktiver Legacy Fit: Fyld billede med beskæring} other {Ikke ramt}}",
|
||||
"new_password": "Ny Adgangskode",
|
||||
"no_notifiers": "Ingen notifikationer konfiguret",
|
||||
"no_override": "Ingen tilsidesættelse",
|
||||
|
||||
@@ -94,6 +94,7 @@
|
||||
"open_new_tab": "In einem neuen Tab öffnen"
|
||||
},
|
||||
"create_modal": {
|
||||
"clear_template": "Vorlage leeren",
|
||||
"delete_photo": "Photo löschen",
|
||||
"item_description": "Gegenstandsbezeichnung",
|
||||
"item_name": "Gegenstandsname",
|
||||
@@ -115,7 +116,7 @@
|
||||
"rotate_failed": "Drehen des Bildes fehlgeschlagen: {error}",
|
||||
"rotate_process_failed": "Das gedrehte Bild konnte nicht verarbeitet werden",
|
||||
"some_photos_failed": "{count, plural, =0 {Keine Fotos zum Hochladen.} =1 {1 Foto konnte nicht hochgeladen werden.} other {Einige Fotos konnten nicht hochgeladen werden.}}",
|
||||
"upload_failed": "Hochladen des Bildes Fehlgeschlagen: { photoName }",
|
||||
"upload_failed": "Hochladen des Bildes fehlgeschlagen: { photoName }",
|
||||
"upload_success": "{count, plural, =0 {Keine Fotos hochgeladen.} =1 {Foto erfolgreich hochgeladen.} other {Alle Fotos erfolgreich hochgeladen.}}",
|
||||
"uploading_photos": "{count, plural, =0 {Keine Fotos zum Hochladen} =1 {1 Foto wird hochgeladen...} other {{count} Fotos werden hochgeladen...}}"
|
||||
},
|
||||
@@ -134,19 +135,55 @@
|
||||
"selector": {
|
||||
"no_results": "Keine Ergebnisse gefunden",
|
||||
"placeholder": "Auswählen…",
|
||||
"search_placeholder": "Für Suche tippen…"
|
||||
"search_placeholder": "Für Suche tippen…",
|
||||
"searching": "Suche…"
|
||||
},
|
||||
"view": {
|
||||
"change_details": {
|
||||
"add_labels": "Labels hinzufügen",
|
||||
"failed_to_update_item": "Artikel konnte nicht aktualisiert werden",
|
||||
"remove_labels": "Labels entfernen",
|
||||
"title": "Artikeldetails ändern"
|
||||
},
|
||||
"selectable": {
|
||||
"card": "Karte",
|
||||
"items": "Gegenstände",
|
||||
"no_items": "Keine Gegenstände anzuzeigen",
|
||||
"select_all": "Alles auswählen",
|
||||
"select_card": "Karte auswählen",
|
||||
"select_row": "Zeile auswählen",
|
||||
"table": "Tabelle"
|
||||
},
|
||||
"table": {
|
||||
"dropdown": {
|
||||
"actions": "Aktionen",
|
||||
"change_labels": "Labels ändern",
|
||||
"change_labels_success": "Etiketten geändert",
|
||||
"change_location": "Standort ändern",
|
||||
"change_location_success": "Standort geändert",
|
||||
"create_maintenance_item": "Wartungsposten für Artikel erstellen",
|
||||
"create_maintenance_selected": "Wartungsposten für ausgewählte Artikel erstellen",
|
||||
"create_maintenance_success": "Wartungseinträge erstellt",
|
||||
"delete_confirmation": "Möchten Sie die ausgewählten Elemente wirklich löschen? Diese Aktion kann nicht rückgängig gemacht werden.",
|
||||
"delete_item": "Löschen",
|
||||
"delete_selected": "Ausgewählte Elemente löschen",
|
||||
"download_csv": "Tabelle als CSV herunterladen",
|
||||
"download_json": "Tabelle als json herunterladen",
|
||||
"duplicate_item": "Duplizieren",
|
||||
"duplicate_selected": "Ausgewählte Elemente duplizieren",
|
||||
"error_deleting": "Fehler beim Löschen",
|
||||
"error_duplicating": "Fehler beim Duplizieren des Elements",
|
||||
"open_menu": "Menü öffnen",
|
||||
"open_multi_tab_warning": "Aus Sicherheitsgründen erlauben Browser standardmäßig nicht, dass mehrere Registerkarten gleichzeitig geöffnet werden. Um dies zu ändern, folgen Sie bitte der Dokumentation:",
|
||||
"toggle_expand": "Ausklappen",
|
||||
"view_item": "Artikel anzeigen",
|
||||
"view_items": "Einträge anzeigen"
|
||||
},
|
||||
"headers": "Kopfzeilen",
|
||||
"page": "Seite",
|
||||
"quick_actions": "Schnellaktionen und Auswahl aktivieren",
|
||||
"rows_per_page": "Zeilen pro Seite",
|
||||
"selected_rows": "{selected} von {total} Zeilen ausgewählt.",
|
||||
"table_settings": "Tabellen Einstellungen",
|
||||
"view_item": "Artikel anzeigen"
|
||||
}
|
||||
@@ -193,6 +230,65 @@
|
||||
"quick_menu": {
|
||||
"no_results": "Keine Ergebnisse gefunden.",
|
||||
"shortcut_hint": "Verwenden Sie die Zifferntasten, um schnell eine Aktion auszuwählen."
|
||||
},
|
||||
"template": {
|
||||
"apply_template": "Eine Vorlage anwenden",
|
||||
"card": {
|
||||
"delete": "Vorlage löschen",
|
||||
"duplicate": "Vorlage duplizieren",
|
||||
"edit": "Vorlage bearbeiten"
|
||||
},
|
||||
"confirm_delete": "Diese Vorlage löschen?",
|
||||
"create_modal": {
|
||||
"title": "Vorlage erstellen"
|
||||
},
|
||||
"detail": {
|
||||
"default_values": "Standardwerte",
|
||||
"updated": "Aktualisiert"
|
||||
},
|
||||
"edit_modal": {
|
||||
"title": "Vorlage bearbeiten"
|
||||
},
|
||||
"empty_value": "(leer)",
|
||||
"form": {
|
||||
"custom_fields": "Eigene Felder",
|
||||
"default_item_values": "Standard Gegenstandswerte",
|
||||
"default_location": "Standard Lagerort",
|
||||
"default_value": "Standardwert",
|
||||
"field_name": "Feldname",
|
||||
"item_description": "Gegenstandsbeschreibung",
|
||||
"item_name": "Gegenstandsname",
|
||||
"lifetime_warranty": "Lebenslange Garantie",
|
||||
"location": "Lagerort",
|
||||
"manufacturer": "Hersteller",
|
||||
"model_number": "Modellnummer",
|
||||
"no_custom_fields": "Keine eigenen Felder.",
|
||||
"template_description": "Vorlagen Beschreibung",
|
||||
"template_name": "Vorlagen Name"
|
||||
},
|
||||
"hide_defaults": "Standardwerte ausblenden",
|
||||
"save_as_template": "Als Vorlage speichern",
|
||||
"selector": {
|
||||
"label": "Vorlage (optional)",
|
||||
"not_found": "Keine Vorlage gefunden",
|
||||
"search": "Vorlagen suchen…",
|
||||
"select": "Vorlage auswählen…"
|
||||
},
|
||||
"show_defaults": "Standardwerte anzeigen",
|
||||
"toast": {
|
||||
"applied": "Vorlage \"{name}\" angewendet",
|
||||
"create_failed": "Erstellen der Vorlage fehlgeschlagen",
|
||||
"created": "Vorlage erstellt",
|
||||
"delete_failed": "Löschen der Vorlage fehlgeschlagen",
|
||||
"deleted": "Vorlage gelöscht",
|
||||
"duplicate_failed": "Duplizieren der Vorlage fehlgeschlagen",
|
||||
"duplicated": "Vorlage dupliziert als \"{name}\"",
|
||||
"load_failed": "Laden der Vorlagen Details fehlgeschlagen",
|
||||
"saved_as_template": "Objekt als Vorlage \"{name}\" gespeichert",
|
||||
"update_failed": "Aktualisieren der Vorlage fehlgeschlagen",
|
||||
"updated": "Vorlage aktualisiert"
|
||||
},
|
||||
"using_template": "Verwendet Vorlage: {name}"
|
||||
}
|
||||
},
|
||||
"errors": {
|
||||
@@ -230,7 +326,9 @@
|
||||
"maintenance": "Wartung",
|
||||
"name": "Name",
|
||||
"navigate": "Navigieren",
|
||||
"no": "Nein",
|
||||
"password": "Passwort",
|
||||
"preview": "Vorschau",
|
||||
"quantity": "Menge",
|
||||
"read_docs": "Dokumentation lesen",
|
||||
"return_home": "Startbildschirm",
|
||||
@@ -243,7 +341,8 @@
|
||||
"updating": "Aktualisiere",
|
||||
"value": "Wert",
|
||||
"version": "Version: { version }",
|
||||
"welcome": "Willkommen, { username }"
|
||||
"welcome": "Willkommen, { username }",
|
||||
"yes": "Ja"
|
||||
},
|
||||
"home": {
|
||||
"labels": "Labels",
|
||||
@@ -260,6 +359,7 @@
|
||||
"dont_join_group": "Möchtest du nicht einer Gruppe beitreten?",
|
||||
"joining_group": "Du trittst einer bereits bestehenden Gruppe bei!",
|
||||
"login": "Anmelden",
|
||||
"or": "oder",
|
||||
"register": "Registrieren",
|
||||
"remember_me": "Angemeldet bleiben",
|
||||
"set_email": "Was ist deine E-Mail?",
|
||||
@@ -271,6 +371,14 @@
|
||||
"invalid_email": "Ungültige Email-Adresse",
|
||||
"invalid_email_password": "Ungültige Email oder Passwort",
|
||||
"login_success": "Erfolgreich eingeloggt",
|
||||
"oidc_access_denied": "Zugriff verweigert: Dein Konto hat nicht die erforderliche Rollen-/Gruppenmitgliedschaft",
|
||||
"oidc_auth_failed": "OIDC authentifizierung fehlgeschlagen",
|
||||
"oidc_invalid_response": "Ungültige OIDC-Antwort erhalten",
|
||||
"oidc_provider_error": "OIDC-Anbieter hat einen Fehler zurückgegeben",
|
||||
"oidc_security_error": "OIDC-Sicherheitsfehler - möglicher CSRF-Angriff",
|
||||
"oidc_session_expired": "OIDC-Sitzung ist abgelaufen",
|
||||
"oidc_token_expired": "OIDC-Token ist abgelaufen",
|
||||
"oidc_token_invalid": "OIDC-Token-Signatur ist ungültig",
|
||||
"problem_registering": "Problem bei der Benutzerregistrierung",
|
||||
"user_registered": "Benutzer registriert"
|
||||
}
|
||||
@@ -498,7 +606,7 @@
|
||||
"total_entries": "Gesamteinträge"
|
||||
},
|
||||
"menu": {
|
||||
"create_item": "Artikel / Vermögenswert",
|
||||
"create_item": "Artikel / Objekt",
|
||||
"create_label": "Label",
|
||||
"create_location": "Standort",
|
||||
"home": "Home",
|
||||
@@ -507,8 +615,15 @@
|
||||
"profile": "Profil",
|
||||
"scanner": "Der Scanner",
|
||||
"search": "Suche",
|
||||
"templates": "Vorlagen",
|
||||
"tools": "Extras"
|
||||
},
|
||||
"pages": {
|
||||
"templates": {
|
||||
"no_templates": "Noch keine Vorlagen.",
|
||||
"title": "Vorlagen"
|
||||
}
|
||||
},
|
||||
"profile": {
|
||||
"active": "Aktiv",
|
||||
"change_password": "Passwort ändern",
|
||||
@@ -526,6 +641,7 @@
|
||||
"group_settings_sub": "Gemeinsame Gruppeneinstellungen. Möglicherweise müssen Sie Ihren Browser aktualisieren, damit die Einstellungen wirksam werden.",
|
||||
"inactive": "Inaktiv",
|
||||
"language": "Sprache",
|
||||
"legacy_image_fit": "{ currentValue, select, true {Legacy-Anpassung deaktivieren: Bild mit Balken anpassen} false {Legacy-Anpassung aktivieren: Bild mit Zuschneiden füllen} other {Nicht getroffen}}",
|
||||
"new_password": "Neues Passwort",
|
||||
"no_notifiers": "Keine Benachrichtigungen konfiguriert",
|
||||
"no_override": "Kein Überschreiben",
|
||||
|
||||
12
frontend/locales/el-GR.json
Normal file
12
frontend/locales/el-GR.json
Normal file
@@ -0,0 +1,12 @@
|
||||
{
|
||||
"components": {
|
||||
"app": {
|
||||
"create_modal": {
|
||||
"createAndAddAnother": "Χρησιμοποιήστε τα πλήκτρα {shiftKey} + {enterKey} για να δημιουργήσετε και να προσθέσετε ένα άλλο."
|
||||
},
|
||||
"import_dialog": {
|
||||
"change_warning": "Η συμπεριφορά για τις εισαγωγές με υπάρχοντα import_refs έχει αλλάξει. Εάν υπάρχει ένα import_ref στο αρχείο CSV, \nτο στοιχείο θα ενημερωθεί με τις τιμές στο αρχείο CSV."
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -94,6 +94,7 @@
|
||||
"open_new_tab": "Open in new tab"
|
||||
},
|
||||
"create_modal": {
|
||||
"clear_template": "Clear Template",
|
||||
"delete_photo": "Delete photo",
|
||||
"item_description": "Item Description",
|
||||
"item_name": "Item Name",
|
||||
@@ -105,7 +106,6 @@
|
||||
"rotate_photo": "Rotate photo",
|
||||
"set_as_primary_photo": "Set as { isPrimary, select, true {non-} false {} other {}}primary photo",
|
||||
"title": "Create Item",
|
||||
"clear_template": "Clear Template",
|
||||
"toast": {
|
||||
"already_creating": "Already creating an item",
|
||||
"create_failed": "Couldn't create item",
|
||||
@@ -136,56 +136,57 @@
|
||||
"no_results": "No Results Found",
|
||||
"placeholder": "Select…",
|
||||
"search_placeholder": "Type to search…",
|
||||
"searching": "Searching…"
|
||||
"searching": "Searching…",
|
||||
"clear": "Clear Item Selection"
|
||||
},
|
||||
"view": {
|
||||
"change_details": {
|
||||
"title": "Change Item Details",
|
||||
"failed_to_update_item": "Failed to update item",
|
||||
"add_labels": "Add Labels",
|
||||
"remove_labels": "Remove Labels"
|
||||
"failed_to_update_item": "Failed to update item",
|
||||
"remove_labels": "Remove Labels",
|
||||
"title": "Change Item Details"
|
||||
},
|
||||
"selectable": {
|
||||
"card": "Card",
|
||||
"items": "Items",
|
||||
"no_items": "No Items to Display",
|
||||
"table": "Table",
|
||||
"select_all": "Select All",
|
||||
"select_card": "Select Card",
|
||||
"select_row": "Select Row",
|
||||
"select_card": "Select Card"
|
||||
"table": "Table"
|
||||
},
|
||||
"table": {
|
||||
"headers": "Headers",
|
||||
"page": "Page",
|
||||
"rows_per_page": "Rows per page",
|
||||
"quick_actions": "Enable Quick Actions & Selection",
|
||||
"table_settings": "Table Settings",
|
||||
"view_item": "View Item",
|
||||
"selected_rows": "{selected} of {total} row(s) selected.",
|
||||
"dropdown": {
|
||||
"open_menu": "Open menu",
|
||||
"actions": "Actions",
|
||||
"view_item": "View item",
|
||||
"view_items": "View items",
|
||||
"toggle_expand": "Toggle Expand",
|
||||
"download_csv": "Download Table as CSV",
|
||||
"download_json": "Download Table as JSON",
|
||||
"delete_selected": "Delete Selected Items",
|
||||
"delete_item": "Delete Item",
|
||||
"error_deleting": "Error Deleting Item",
|
||||
"delete_confirmation": "Are you sure you want to delete the selected item(s)? This action cannot be undone.",
|
||||
"duplicate_selected": "Duplicate Selected Items",
|
||||
"duplicate_item": "Duplicate Item",
|
||||
"error_duplicating": "Error Duplicating Item",
|
||||
"open_multi_tab_warning": "For security reasons browsers do not allow multiple tabs to be opened at once by default, to change this please follow the documentation:",
|
||||
"create_maintenance_selected": "Create Maintenance Entry for Selected Items",
|
||||
"create_maintenance_item": "Create Maintenance Entry for Item",
|
||||
"create_maintenance_success": "Maintenance Entry(s) Created",
|
||||
"change_labels": "Change Labels",
|
||||
"change_labels_success": "Labels Changed",
|
||||
"change_location": "Change Location",
|
||||
"change_location_success": "Location Changed",
|
||||
"change_labels": "Change Labels",
|
||||
"change_labels_success": "Labels Changed"
|
||||
}
|
||||
"create_maintenance_item": "Create Maintenance Entry for Item",
|
||||
"create_maintenance_selected": "Create Maintenance Entry for Selected Items",
|
||||
"create_maintenance_success": "Maintenance Entrys Created",
|
||||
"delete_confirmation": "Are you sure you want to delete the selected items? This action cannot be undone.",
|
||||
"delete_item": "Delete Item",
|
||||
"delete_selected": "Delete Selected Items",
|
||||
"download_csv": "Download Table as CSV",
|
||||
"download_json": "Download Table as JSON",
|
||||
"duplicate_item": "Duplicate Item",
|
||||
"duplicate_selected": "Duplicate Selected Items",
|
||||
"error_deleting": "Error Deleting Item",
|
||||
"error_duplicating": "Error Duplicating Item",
|
||||
"open_menu": "Open menu",
|
||||
"open_multi_tab_warning": "For security reasons browsers do not allow multiple tabs to be opened at once by default, to change this please follow the documentation:",
|
||||
"toggle_expand": "Toggle Expand",
|
||||
"view_item": "View item",
|
||||
"view_items": "View items"
|
||||
},
|
||||
"headers": "Headers",
|
||||
"page": "Page",
|
||||
"quick_actions": "Enable Quick Actions & Selection",
|
||||
"rows_per_page": "Rows per page",
|
||||
"selected_rows": "{selected} of {total} rows selected.",
|
||||
"table_settings": "Table Settings",
|
||||
"view_item": "View Item"
|
||||
}
|
||||
}
|
||||
},
|
||||
@@ -221,7 +222,8 @@
|
||||
"no_location_found": "No location found",
|
||||
"parent_location": "Parent Location",
|
||||
"search_location": "Search Locations",
|
||||
"select_location": "Select a Location"
|
||||
"select_location": "Select a Location",
|
||||
"clear": "Clear Location Selection"
|
||||
},
|
||||
"tree": {
|
||||
"no_locations": "No locations available. Add new locations through the\n '<span class=\"link-primary\">'Create'</span>' button on the navigation bar."
|
||||
@@ -232,6 +234,7 @@
|
||||
"shortcut_hint": "Use the number keys to quickly select an action."
|
||||
},
|
||||
"template": {
|
||||
"apply_template": "Apply a template",
|
||||
"card": {
|
||||
"delete": "Delete template",
|
||||
"duplicate": "Duplicate template",
|
||||
@@ -248,6 +251,7 @@
|
||||
"edit_modal": {
|
||||
"title": "Edit Template"
|
||||
},
|
||||
"empty_value": "(empty)",
|
||||
"form": {
|
||||
"custom_fields": "Custom Fields",
|
||||
"default_item_values": "Default Item Values",
|
||||
@@ -264,12 +268,16 @@
|
||||
"template_description": "Template Description",
|
||||
"template_name": "Template Name"
|
||||
},
|
||||
"hide_defaults": "Hide defaults",
|
||||
"save_as_template": "Save as Template",
|
||||
"selector": {
|
||||
"label": "Template (Optional)",
|
||||
"not_found": "No template found",
|
||||
"search": "Search templates...",
|
||||
"select": "Select template..."
|
||||
"select": "Select template...",
|
||||
"clear": "Clear Template Selection"
|
||||
},
|
||||
"show_defaults": "Show defaults",
|
||||
"toast": {
|
||||
"applied": "Template \"{name}\" applied",
|
||||
"create_failed": "Failed to create template",
|
||||
@@ -283,12 +291,7 @@
|
||||
"update_failed": "Failed to update template",
|
||||
"updated": "Template updated"
|
||||
},
|
||||
"apply_template": "Apply a template",
|
||||
"using_template": "Using template: {name}",
|
||||
"show_defaults": "Show defaults",
|
||||
"hide_defaults": "Hide defaults",
|
||||
"empty_value": "(empty)",
|
||||
"save_as_template": "Save as Template"
|
||||
"using_template": "Using template: {name}"
|
||||
}
|
||||
},
|
||||
"errors": {
|
||||
@@ -326,7 +329,9 @@
|
||||
"maintenance": "Maintenance",
|
||||
"name": "Name",
|
||||
"navigate": "Navigate",
|
||||
"no": "No",
|
||||
"password": "Password",
|
||||
"preview": "Preview",
|
||||
"quantity": "Quantity",
|
||||
"read_docs": "Read the Docs",
|
||||
"return_home": "Return Home",
|
||||
@@ -340,9 +345,7 @@
|
||||
"value": "Value",
|
||||
"version": "Version: { version }",
|
||||
"welcome": "Welcome, { username }",
|
||||
"preview": "Preview",
|
||||
"yes": "Yes",
|
||||
"no": "No"
|
||||
"yes": "Yes"
|
||||
},
|
||||
"home": {
|
||||
"labels": "Labels",
|
||||
@@ -397,20 +400,20 @@
|
||||
"delete_attachment_confirm": "Are you sure you want to delete this attachment?",
|
||||
"delete_item_confirm": "Are you sure you want to delete this item?",
|
||||
"description": "Description",
|
||||
"duplicate": {
|
||||
"prefix": "Copy of ",
|
||||
"copy_maintenance": "Copy Maintenance",
|
||||
"copy_attachments": "Copy Attachments",
|
||||
"copy_custom_fields": "Copy Custom Fields",
|
||||
"custom_prefix": "Copy Prefix",
|
||||
"enable_custom_prefix": "Enable Custom Prefix",
|
||||
"prefix_instructions": "This prefix will be added to the beginning of the duplicated item's name. Include a space at the end of the prefix to add a space between the prefix and the item name.",
|
||||
"temporary_title": "Temporary Settings",
|
||||
"title": "Duplicate Settings",
|
||||
"override_instructions": "Hold shift when clicking the duplicate button to override these settings."
|
||||
},
|
||||
"details": "Details",
|
||||
"drag_and_drop": "Drag and drop files here or click to select files",
|
||||
"duplicate": {
|
||||
"copy_attachments": "Copy Attachments",
|
||||
"copy_custom_fields": "Copy Custom Fields",
|
||||
"copy_maintenance": "Copy Maintenance",
|
||||
"custom_prefix": "Copy Prefix",
|
||||
"enable_custom_prefix": "Enable Custom Prefix",
|
||||
"override_instructions": "Hold shift when clicking the duplicate button to override these settings.",
|
||||
"prefix": "Copy of ",
|
||||
"prefix_instructions": "This prefix will be added to the beginning of the duplicated item's name. Include a space at the end of the prefix to add a space between the prefix and the item name.",
|
||||
"temporary_title": "Temporary Settings",
|
||||
"title": "Duplicate Settings"
|
||||
},
|
||||
"edit": {
|
||||
"edit_attachment_dialog": {
|
||||
"attachment_title": "Attachment Title",
|
||||
@@ -620,8 +623,8 @@
|
||||
},
|
||||
"pages": {
|
||||
"templates": {
|
||||
"title": "Templates",
|
||||
"no_templates": "No templates yet."
|
||||
"no_templates": "No templates yet.",
|
||||
"title": "Templates"
|
||||
}
|
||||
},
|
||||
"profile": {
|
||||
@@ -634,7 +637,6 @@
|
||||
"delete_account_sub": "Delete your account and all its associated data. This can not be undone.",
|
||||
"delete_notifier_confirm": "Are you sure you want to delete this notifier?",
|
||||
"display_legacy_header": "{ currentValue, select, true {Disable Legacy Header} false {Enable Legacy Header} other {Not Hit}}",
|
||||
"legacy_image_fit": "{ currentValue, select, true {Disable Legacy Fit: Fit Image with Bars} false {Enable Legacy Fit: Fill Image with Crop} other {Not Hit}}",
|
||||
"enabled": "Enabled",
|
||||
"example": "Example",
|
||||
"gen_invite": "Generate Invite Link",
|
||||
@@ -642,6 +644,7 @@
|
||||
"group_settings_sub": "Shared Group Settings. You may need to refresh your browser for some settings to apply.",
|
||||
"inactive": "Inactive",
|
||||
"language": "Language",
|
||||
"legacy_image_fit": "{ currentValue, select, true {Disable Legacy Fit: Fit Image with Bars} false {Enable Legacy Fit: Fill Image with Crop} other {Not Hit}}",
|
||||
"new_password": "New Password",
|
||||
"no_notifiers": "No notifiers configured",
|
||||
"no_override": "No override",
|
||||
|
||||
@@ -94,6 +94,7 @@
|
||||
"open_new_tab": "Abrir en nueva pestaña"
|
||||
},
|
||||
"create_modal": {
|
||||
"clear_template": "Vaciar Plantilla",
|
||||
"delete_photo": "Eliminar foto",
|
||||
"item_description": "Descripción del artículo",
|
||||
"item_name": "Nombre del artículo",
|
||||
@@ -127,26 +128,62 @@
|
||||
"db_source": "Fuente de la base de datos",
|
||||
"error_exception": "Se ha producido una excepción al recuperar el código de barras del artículo: ",
|
||||
"error_invalid_barcode": "Código de barras proporcionado no válido",
|
||||
"error_not_found": "No se ha encontrado ningún producto con código de barras.",
|
||||
"error_not_found": "No se ha encontrado ningún producto con el código de barras proporcionado.",
|
||||
"search_item": "Buscar producto",
|
||||
"title": "Importar producto"
|
||||
},
|
||||
"selector": {
|
||||
"no_results": "Resultados No Encontrados",
|
||||
"placeholder": "Seleccionar…",
|
||||
"search_placeholder": "Escribe para buscar…"
|
||||
"search_placeholder": "Escribe para buscar…",
|
||||
"searching": "Buscando…"
|
||||
},
|
||||
"view": {
|
||||
"change_details": {
|
||||
"add_labels": "Añadir etiquetas",
|
||||
"failed_to_update_item": "No se pudo actualizar el artículo",
|
||||
"remove_labels": "Eliminar etiquetas",
|
||||
"title": "Cambiar detalles del artículo"
|
||||
},
|
||||
"selectable": {
|
||||
"card": "Tarjeta",
|
||||
"items": "Elementos",
|
||||
"no_items": "No hay elementos para mostrar",
|
||||
"select_all": "Seleccionar todo",
|
||||
"select_card": "Seleccionar tarjeta",
|
||||
"select_row": "Seleccionar fila",
|
||||
"table": "Tabla"
|
||||
},
|
||||
"table": {
|
||||
"dropdown": {
|
||||
"actions": "Acciones",
|
||||
"change_labels": "Cambiar etiquetas",
|
||||
"change_labels_success": "Etiquetas cambiadas",
|
||||
"change_location": "Cambiar ubicación",
|
||||
"change_location_success": "Ubicación cambiada",
|
||||
"create_maintenance_item": "Crear entrada de mantenimiento para el elemento",
|
||||
"create_maintenance_selected": "Crear entrada de mantenimiento para los elementos seleccionados",
|
||||
"create_maintenance_success": "Entradas de mantenimiento creadas",
|
||||
"delete_confirmation": "¿Está seguro de que desea eliminar los elementos seleccionados? Esta acción no se puede deshacer.",
|
||||
"delete_item": "Borrar elemento",
|
||||
"delete_selected": "Borrar los elementos seleccionados",
|
||||
"download_csv": "Descargar tabla como CSV",
|
||||
"download_json": "Descargar tabla como JSON",
|
||||
"duplicate_item": "Duplicar Elemento",
|
||||
"duplicate_selected": "Duplicar Elementos Seleccionados",
|
||||
"error_deleting": "Error al borrar el elemento",
|
||||
"error_duplicating": "Error al duplicar el elemento",
|
||||
"open_menu": "Abrir menú",
|
||||
"open_multi_tab_warning": "Por razones de seguridad, los navegadores no permiten abrir varias pestañas a la vez de forma predeterminada. Para cambiar esto, siga la documentación:",
|
||||
"toggle_expand": "Alternar Expandir",
|
||||
"view_item": "Ver elemento",
|
||||
"view_items": "Ver elementos"
|
||||
},
|
||||
"headers": "Encabezados",
|
||||
"page": "Página",
|
||||
"quick_actions": "Habilitar \"Acciones Rápidas y Selección\"",
|
||||
"rows_per_page": "Filas por página",
|
||||
"selected_rows": "{selected} de {total} filas seleccionadas.",
|
||||
"table_settings": "Configuración de Tabla",
|
||||
"view_item": "Ver Elemento"
|
||||
}
|
||||
@@ -193,6 +230,65 @@
|
||||
"quick_menu": {
|
||||
"no_results": "Sin resultados.",
|
||||
"shortcut_hint": "Usa las teclas numéricas para seleccionar rápidamente una acción."
|
||||
},
|
||||
"template": {
|
||||
"apply_template": "Aplicar una plantilla",
|
||||
"card": {
|
||||
"delete": "Eliminar Plantilla",
|
||||
"duplicate": "Duplicar plantilla",
|
||||
"edit": "Editar plantilla"
|
||||
},
|
||||
"confirm_delete": "¿Eliminar esta plantilla?",
|
||||
"create_modal": {
|
||||
"title": "Crear Plantilla"
|
||||
},
|
||||
"detail": {
|
||||
"default_values": "Valores Predeterminados",
|
||||
"updated": "Actualizado"
|
||||
},
|
||||
"edit_modal": {
|
||||
"title": "Editar Plantilla"
|
||||
},
|
||||
"empty_value": "(vacío)",
|
||||
"form": {
|
||||
"custom_fields": "Campos Personalizados",
|
||||
"default_item_values": "Valores Predeterminados de Elementos",
|
||||
"default_location": "Ubicación Predeterminada",
|
||||
"default_value": "Valor Predeterminado",
|
||||
"field_name": "Nombre del Campo",
|
||||
"item_description": "Descripción del Elemento",
|
||||
"item_name": "Nombre del Elemento",
|
||||
"lifetime_warranty": "Garantía de por vida",
|
||||
"location": "Ubicación",
|
||||
"manufacturer": "Fabricante",
|
||||
"model_number": "Número de Modelo",
|
||||
"no_custom_fields": "Sin campos personalizados.",
|
||||
"template_description": "Descripción de la Plantilla",
|
||||
"template_name": "Nombre de la Plantilla"
|
||||
},
|
||||
"hide_defaults": "Ocultar valores predeterminados",
|
||||
"save_as_template": "Guardar como Plantilla",
|
||||
"selector": {
|
||||
"label": "Plantilla (Opcional)",
|
||||
"not_found": "No se ha encontrado ninguna plantilla",
|
||||
"search": "Buscar plantillas…",
|
||||
"select": "Seleccionar plantilla…"
|
||||
},
|
||||
"show_defaults": "Mostrar valores predeterminados",
|
||||
"toast": {
|
||||
"applied": "Plantilla \"{name}\" aplicada",
|
||||
"create_failed": "No se pudo crear la plantilla",
|
||||
"created": "Plantilla creada",
|
||||
"delete_failed": "No se ha podido eliminar la plantilla",
|
||||
"deleted": "Plantilla eliminada",
|
||||
"duplicate_failed": "No se pudo duplicar la plantilla",
|
||||
"duplicated": "Plantilla duplicada como \"{name}\"",
|
||||
"load_failed": "No se han podido cargar los detalles de la plantilla",
|
||||
"saved_as_template": "Elemento guardado como plantilla \"{name}\"",
|
||||
"update_failed": "No se ha podido actualizar la plantilla",
|
||||
"updated": "Plantilla actualizada"
|
||||
},
|
||||
"using_template": "Usando plantilla: {name}"
|
||||
}
|
||||
},
|
||||
"errors": {
|
||||
@@ -230,7 +326,9 @@
|
||||
"maintenance": "Mantenimiento",
|
||||
"name": "Nombre",
|
||||
"navigate": "Navegar",
|
||||
"no": "No",
|
||||
"password": "Contraseña",
|
||||
"preview": "Vista previa",
|
||||
"quantity": "Cantidad",
|
||||
"read_docs": "Lee la Documentación",
|
||||
"return_home": "Regresar a Inicio",
|
||||
@@ -243,7 +341,8 @@
|
||||
"updating": "Actualizando",
|
||||
"value": "Valor",
|
||||
"version": "Versión: { version }",
|
||||
"welcome": "Bienvenido/a, { username }"
|
||||
"welcome": "Bienvenido/a, { username }",
|
||||
"yes": "Sí"
|
||||
},
|
||||
"home": {
|
||||
"labels": "Etiquetas",
|
||||
@@ -260,6 +359,7 @@
|
||||
"dont_join_group": "¿No quieres unirte a un grupo?",
|
||||
"joining_group": "¡Te estás uniendo a un grupo existente!",
|
||||
"login": "Iniciar sesión",
|
||||
"or": "o",
|
||||
"register": "Registrarse",
|
||||
"remember_me": "Recuérdame",
|
||||
"set_email": "¿Cuál es tu email?",
|
||||
@@ -271,6 +371,14 @@
|
||||
"invalid_email": "Dirección de correo electrónico no válida",
|
||||
"invalid_email_password": "E-mail y/o contraseña no válido",
|
||||
"login_success": "Sesión iniciada correctamente",
|
||||
"oidc_access_denied": "Acceso denegado: Tu cuenta no tiene el rol/pertenencia al grupo requerido",
|
||||
"oidc_auth_failed": "Autenticación OIDC fallida",
|
||||
"oidc_invalid_response": "Se recibió una respuesta OIDC no válida",
|
||||
"oidc_provider_error": "El proveedor OIDC devolvió un error",
|
||||
"oidc_security_error": "Error de seguridad OIDC - posible ataque CSRF",
|
||||
"oidc_session_expired": "La sesión OIDC ha caducado",
|
||||
"oidc_token_expired": "El token OIDC ha caducado",
|
||||
"oidc_token_invalid": "La firma del token OIDC no es válida",
|
||||
"problem_registering": "Problema al registrar al usuario",
|
||||
"user_registered": "Usuario registrado"
|
||||
}
|
||||
@@ -291,6 +399,18 @@
|
||||
"description": "Descripción",
|
||||
"details": "Detalles",
|
||||
"drag_and_drop": "Arrastra y suelta los archivos aquí o selecciona los archivos",
|
||||
"duplicate": {
|
||||
"copy_attachments": "Copiar Adjuntos",
|
||||
"copy_custom_fields": "Copiar Campos Personalizados",
|
||||
"copy_maintenance": "Copiar Mantenimiento",
|
||||
"custom_prefix": "Copiar Prefijo",
|
||||
"enable_custom_prefix": "Habilitar Prefijo Personalizado",
|
||||
"override_instructions": "Mantén pulsada la tecla Mayús mientras haces clic en el botón Duplicar para anular estos ajustes.",
|
||||
"prefix": "Copia de ",
|
||||
"prefix_instructions": "Este prefijo se añadirá al principio del nombre del elemento duplicado. Incluye un espacio al final del prefijo para añadir un espacio entre el prefijo y el nombre del elemento.",
|
||||
"temporary_title": "Configuración temporal",
|
||||
"title": "Configuración Duplicados"
|
||||
},
|
||||
"edit": {
|
||||
"edit_attachment_dialog": {
|
||||
"attachment_title": "Título del Adjunto",
|
||||
@@ -299,7 +419,8 @@
|
||||
"primary_photo_sub": "Esta opción sólo está disponible para las fotos. Sólo puede haber una foto principal. Si seleccionas esta opción, la foto principal actual, si existe, se deseleccionará.",
|
||||
"select_type": "Seleccionar un tipo",
|
||||
"title": "Editar Adjunto"
|
||||
}
|
||||
},
|
||||
"view_image": "Ver imagen"
|
||||
},
|
||||
"edit_details": "Editar detalles",
|
||||
"field_selector": "Selector de Campo",
|
||||
@@ -397,6 +518,7 @@
|
||||
"update_label": "Actualizar Etiqueta"
|
||||
},
|
||||
"languages": {
|
||||
"bs-BA": "Bosnio (Bosnia y Herzegovina)",
|
||||
"ca": "Catalán",
|
||||
"cs-CZ": "Checo",
|
||||
"de": "Alemán",
|
||||
@@ -423,6 +545,7 @@
|
||||
"th-TH": "Tailandés",
|
||||
"tr": "Turco",
|
||||
"uk-UA": "Ucraniano",
|
||||
"vi-VN": "Vietnamita",
|
||||
"zh-CN": "Chino (Simplificado)",
|
||||
"zh-HK": "Chino (Hong Kong)",
|
||||
"zh-MO": "Chino (Macao)",
|
||||
@@ -492,8 +615,15 @@
|
||||
"profile": "Perfil",
|
||||
"scanner": "Escáner",
|
||||
"search": "Buscar",
|
||||
"templates": "Plantillas",
|
||||
"tools": "Herramientas"
|
||||
},
|
||||
"pages": {
|
||||
"templates": {
|
||||
"no_templates": "Aún no hay plantillas.",
|
||||
"title": "Plantillas"
|
||||
}
|
||||
},
|
||||
"profile": {
|
||||
"active": "Activo",
|
||||
"change_password": "Cambiar Contraseña",
|
||||
@@ -511,6 +641,7 @@
|
||||
"group_settings_sub": "Configuración de Grupo Compartido. Es posible que tengas que actualizar tu navegador para que se apliquen algunos ajustes.",
|
||||
"inactive": "Inactivo",
|
||||
"language": "Idioma",
|
||||
"legacy_image_fit": "{ currentValue, select, true {Disable Legacy Fit: Fit Image with Bars} false {Enable Legacy Fit: Fill Image with Crop} other {Not Hit}}",
|
||||
"new_password": "Nueva Contraseña",
|
||||
"no_notifiers": "No hay notificadores configurados",
|
||||
"no_override": "No reemplazar",
|
||||
@@ -550,7 +681,7 @@
|
||||
"generate_page": "Generar Página",
|
||||
"input_placeholder": "Escribe aquí",
|
||||
"instruction_1": "El Generador de Etiquetas Homebox es una herramienta que para ayudarte a imprimir etiquetas para tu inventario Homebox. Están pensadas para\n ser etiquetas de impresión anticipada para que puedas imprimir muchas etiquetas y tenerlas listas para usarlas",
|
||||
"instruction_2": "Como tal, estas etiquetas funcionan imprimiendo un código QR de URL e información ID de Activo en una etiqueta. Si has desactivadod\n ID de Activo en la configuración de tu Homebox, puedes seguir utilizando esta herramienta, pero los IDs de Activo no harán referencia a ningún elemento",
|
||||
"instruction_2": "Como tal, estas etiquetas funcionan imprimiendo un código QR de URL e información ID de Activo en una etiqueta. Si has desactivado\n ID de Activo en la configuración de tu Homebox, puedes seguir utilizando esta herramienta, pero los IDs de Activo no harán referencia a ningún elemento",
|
||||
"instruction_3": "Esta función se encuentra en las primeras etapas de desarrollo y puede cambiar en futuras versiones. Si tienes algún comentario, indícalo\n en la '<a href=\"https://github.com/sysadminsmedia/homebox/discussions/53\">'Discusión de GitHub'</a>'",
|
||||
"label_height": "Altura de la Etiqueta",
|
||||
"label_width": "Ancho de la Etiqueta",
|
||||
|
||||
@@ -108,7 +108,7 @@
|
||||
"select_location": "Valitse sijainti"
|
||||
},
|
||||
"tree": {
|
||||
"no_locations": "Sijainteja ei ole saatavilla. Lisää uusia sijainteja\n '<'span class=\" link-primary \"`>`Luo`<`/span`> ' - painike navigointipalkissa."
|
||||
"no_locations": "Sijainteja ei ole saatavilla. Lisää uusia sijainteja\n '<span class=\"link-primary\">'Luo'</span>' - painike navigointipalkissa."
|
||||
}
|
||||
},
|
||||
"quick_menu": {
|
||||
|
||||
@@ -232,6 +232,7 @@
|
||||
"name": "Nom",
|
||||
"navigate": "Naviguer",
|
||||
"password": "Mot de passe",
|
||||
"preview": "Aperçu",
|
||||
"quantity": "Quantité",
|
||||
"read_docs": "Lire la documentation",
|
||||
"return_home": "Retour à l'accueil",
|
||||
|
||||
@@ -1,10 +1,20 @@
|
||||
{
|
||||
"components": {
|
||||
"app": {
|
||||
"create_modal": {
|
||||
"createAndAddAnother": "Gunakan {shiftKey} + {enterKey} untuk membuat dan menambahkan data.",
|
||||
"enter": "Enter",
|
||||
"shift": "Shift"
|
||||
},
|
||||
"import_dialog": {
|
||||
"change_warning": "Ada perubahan pada logika impor untuk data dengan import_ref yang sudah ada. Jika sebuah import_ref ditemukan di file CSV,\ndata tersebut akan diperbarui menggunakan nilai-nilai yang ada di file CSV.",
|
||||
"description": "Impor file CSV yang berisi item, label, dan lokasi Anda. Lihat dokumentasi untuk informasi lebih lanjut mengenai\nformat yang diperlukan.",
|
||||
"title": "Impor CSV"
|
||||
"title": "Impor CSV",
|
||||
"toast": {
|
||||
"import_failed": "Impor gagal. Silahkan coba kembali beberapa saat lagi.",
|
||||
"import_success": "Import berhasil!",
|
||||
"please_select_file": "Silakan pilih file untuk diimpor."
|
||||
}
|
||||
},
|
||||
"outdated": {
|
||||
"current_version": "Versi Terkini",
|
||||
@@ -14,6 +24,18 @@
|
||||
"new_version_available_link": "Klik di sini untuk melihat informasi rilis"
|
||||
}
|
||||
},
|
||||
"color_selector": {
|
||||
"clear": "Reset warna",
|
||||
"color": "Warna",
|
||||
"no_color": "Tanpa warna",
|
||||
"no_color_selected": "Tidak ada warna yang dipilih",
|
||||
"randomize": "Acak warna"
|
||||
},
|
||||
"form": {
|
||||
"password": {
|
||||
"toggle_show": "Tampilkan kata sandi"
|
||||
}
|
||||
},
|
||||
"global": {
|
||||
"copy_text": {
|
||||
"documentation": "dokumentasi",
|
||||
@@ -46,20 +68,51 @@
|
||||
"yesterday": "kemaren"
|
||||
},
|
||||
"label_maker": {
|
||||
"download": "Unduh Label"
|
||||
"browser_print": "Cetak dari Browser",
|
||||
"confirm_description": "Anda yakin ingin mencetak label ini?",
|
||||
"download": "Unduh Label",
|
||||
"print": "Cetak Label",
|
||||
"server_print": "Cetak di Server",
|
||||
"titles": "Label",
|
||||
"toast": {
|
||||
"load_status_failed": "Gagal memuat status",
|
||||
"print_failed": "Gagal mencetak label",
|
||||
"print_success": "Label telah dicetak"
|
||||
}
|
||||
},
|
||||
"page_qr_code": {
|
||||
"page_url": "Halaman URL"
|
||||
"page_url": "Halaman URL",
|
||||
"qr_tooltip": "Tampilkan kode QR"
|
||||
},
|
||||
"password_score": {
|
||||
"password_strength": "Kompleksitas kata sandi"
|
||||
}
|
||||
},
|
||||
"item": {
|
||||
"attachments_list": {
|
||||
"download": "Unduh",
|
||||
"open_new_tab": "Buka di tab baru"
|
||||
},
|
||||
"create_modal": {
|
||||
"delete_photo": "Hapus foto",
|
||||
"item_description": "Deskripsi item",
|
||||
"item_name": "Nama item",
|
||||
"title": "Buat item"
|
||||
"item_photo": "Foto Item 📷",
|
||||
"item_quantity": "Jumlah Item",
|
||||
"parent_item": "Item Induk",
|
||||
"product_tooltip_input_barcode": "Isi otomatis dengan barcode yang disediakan secara manual",
|
||||
"product_tooltip_scan_barcode": "Isi otomatis dengan barcode dari 📷",
|
||||
"rotate_photo": "Putar foto",
|
||||
"set_as_primary_photo": "Atur sebagai { isPrimary, select, true {non} false {} other {}} foto utama",
|
||||
"title": "Buat item",
|
||||
"toast": {
|
||||
"already_creating": "Sudah membuat item",
|
||||
"create_failed": "Tidak dapat membuat item",
|
||||
"create_success": "Item dibuat",
|
||||
"failed_load_parent": "Gagal memuat item induk - silakan pilih secara manual",
|
||||
"no_canvas_support": "Browser Anda tidak mendukung operasi kanvas",
|
||||
"please_select_location": "Silakan pilih Lokasi."
|
||||
}
|
||||
},
|
||||
"view": {
|
||||
"selectable": {
|
||||
@@ -69,6 +122,9 @@
|
||||
"table": "Tabel"
|
||||
},
|
||||
"table": {
|
||||
"dropdown": {
|
||||
"change_labels_success": "Label Diubah"
|
||||
},
|
||||
"page": "Halaman",
|
||||
"rows_per_page": "Baris per halaman"
|
||||
}
|
||||
@@ -76,59 +132,96 @@
|
||||
},
|
||||
"label": {
|
||||
"create_modal": {
|
||||
"label_description": "Keterangan/Deskripsi",
|
||||
"label_name": "Nama",
|
||||
"title": "Buat label"
|
||||
"label_color": "Warna label",
|
||||
"label_description": "Deskripsi label",
|
||||
"label_name": "Nama Label",
|
||||
"title": "Buat label",
|
||||
"toast": {
|
||||
"already_creating": "Sudah membuat label",
|
||||
"create_failed": "Tidak dapat membuat label",
|
||||
"create_success": "Label telah dibuat",
|
||||
"label_name_too_long": "Nama label tidak boleh lebih dari 50 karakter"
|
||||
}
|
||||
},
|
||||
"selector": {
|
||||
"select_labels": "Pilih Label"
|
||||
}
|
||||
},
|
||||
"location": {
|
||||
"create_modal": {
|
||||
"location_description": "Deskripsi lokasi",
|
||||
"location_name": "Nama lokasi",
|
||||
"title": "Tambah Lokasi"
|
||||
"title": "Tambah Lokasi",
|
||||
"toast": {
|
||||
"already_creating": "Lokasi telah dibuat",
|
||||
"create_failed": "Tidak dapat membuat lokasi",
|
||||
"create_success": "Lokasi telah dibuat"
|
||||
}
|
||||
},
|
||||
"selector": {
|
||||
"parent_location": "Lokasi Induk"
|
||||
"no_location_found": "Lokasi tidak ditemukan",
|
||||
"parent_location": "Lokasi Induk",
|
||||
"search_location": "Mencari Lokasi",
|
||||
"select_location": "Pilih lokasi"
|
||||
},
|
||||
"tree": {
|
||||
"no_locations": "Tidak ada lokasi yang tersedia. Tambahkan lokasi melalui tombol\n`<`span class=\"link-primary\"`>`Buat`<`/span`>` menu navigasi."
|
||||
"no_locations": "Tidak ada lokasi yang tersedia. Tambahkan lokasi melalui tombol\n'<span class=\"link-primary\">'Buat'</span>' menu navigasi."
|
||||
}
|
||||
},
|
||||
"quick_menu": {
|
||||
"no_results": "Tidak ada hasil yang ditemukan.",
|
||||
"shortcut_hint": "Gunakan tombol angka untuk memilih."
|
||||
}
|
||||
},
|
||||
"errors": {
|
||||
"api_failure": "Gagal melakukan panggilan pada API: "
|
||||
},
|
||||
"global": {
|
||||
"add": "Tambah",
|
||||
"build": "Kompilasi: { build }",
|
||||
"archived": "Diarsipkan",
|
||||
"build": "Build: { build }",
|
||||
"cancel": "Batal",
|
||||
"confirm": "Konfirmasi",
|
||||
"create": "Buat",
|
||||
"create_and_add": "Buat dan Tambah Baru",
|
||||
"create_subitem": "Buat Subitem",
|
||||
"created": "Behasil dibuat",
|
||||
"delete": "Hapus",
|
||||
"delete_confirm": "Anda yakin akan menghapus butir ini? ",
|
||||
"demo_instance": "Ini adalah aplikasi demo",
|
||||
"details": "Detail",
|
||||
"duplicate": "Duplikat",
|
||||
"edit": "Sunting",
|
||||
"email": "Email",
|
||||
"follow_dev": "Ikuti Pengembang",
|
||||
"github": "Github project",
|
||||
"footer": {
|
||||
"api_link": "'<a href=\"https://homebox.software/en/api/\" target=\"_blank\">'API'</a>'",
|
||||
"version_link": "'<'a href=\"https://github.com/sysadminsmedia/homebox/releases/tag/{ version }\" target=\"_blank\"'>' Versi: { version } Build: { build } '</a>'"
|
||||
},
|
||||
"github": "Proyek GitHub",
|
||||
"insured": "Diasuransikan",
|
||||
"items": "Barang",
|
||||
"join_discord": "Bergabunglah dengan Discord",
|
||||
"labels": "Label",
|
||||
"loading": "Memuat…",
|
||||
"locations": "Lokasi",
|
||||
"maintenance": "Perbaikan",
|
||||
"name": "Nama",
|
||||
"navigate": "Navigasi",
|
||||
"password": "Kata Sandi",
|
||||
"quantity": "Jumlah",
|
||||
"read_docs": "Baca Dokumen",
|
||||
"return_home": "Kembali ke halaman depan",
|
||||
"save": "Simpan",
|
||||
"search": "Cari",
|
||||
"sign_out": "Keluar",
|
||||
"submit": "Kirim",
|
||||
"unknown": "Tidak Diketahui",
|
||||
"update": "Perbaharui",
|
||||
"updating": "Memperbaharui",
|
||||
"value": "Nilai",
|
||||
"version": "Versi:{ version }",
|
||||
"welcome": "Selamay datang, { username }"
|
||||
"welcome": "Selamat datang, { username }"
|
||||
},
|
||||
"home": {
|
||||
"labels": "Label",
|
||||
@@ -149,22 +242,45 @@
|
||||
"remember_me": "Ingat Saya",
|
||||
"set_email": "Apa email Anda?",
|
||||
"set_name": "Apa nama anda?",
|
||||
"set_password": "Password Anda",
|
||||
"tagline": "Lacak, Atur, dan Kelola Barang-barangmu."
|
||||
"set_password": "Tentukan kata sandi",
|
||||
"tagline": "Lacak, Atur, dan Kelola Barang-barangmu.",
|
||||
"title": "Atur dan Tandai Barang Anda",
|
||||
"toast": {
|
||||
"invalid_email": "Alamat email tidak valid",
|
||||
"invalid_email_password": "Email atau kata sandi salah",
|
||||
"login_success": "Anda berhasil login",
|
||||
"problem_registering": "Masalah saat mendaftarkan pengguna",
|
||||
"user_registered": "Terdaftar"
|
||||
}
|
||||
},
|
||||
"items": {
|
||||
"add": "Tambah",
|
||||
"advanced": "Tingkat Lanjut",
|
||||
"archived": "Diarsipkan",
|
||||
"asset_id": "ID Aset",
|
||||
"associated_with_multiple": "Id Aset ini terhubung dengan beberapa item",
|
||||
"attachment": "Lampiran",
|
||||
"attachments": "Lampiran",
|
||||
"changes_persisted_immediately": "Perubahan lampiran akan segera disimpan",
|
||||
"created_at": "Dibuat Pada",
|
||||
"custom_fields": "Informasi Tambahan",
|
||||
"delete_attachment_confirm": "Apa Anda yakin ingin menghapus ini?",
|
||||
"delete_item_confirm": "Anda yakin akan menghapus butir ini?",
|
||||
"description": "Deskripsi",
|
||||
"details": "Detail",
|
||||
"drag_and_drop": "Seret dan lepas file di sini atau klik untuk memilih file",
|
||||
"duplicate": {
|
||||
"copy_attachments": "Salin Lampiran",
|
||||
"copy_custom_fields": "Salin info tambahan",
|
||||
"copy_maintenance": "Salin Pemeliharaan",
|
||||
"custom_prefix": "Salin awalan",
|
||||
"enable_custom_prefix": "Aktifkan Prefiks Kustom",
|
||||
"override_instructions": "Tahan shift saat mengklik tombol duplikat untuk menimpa pengaturan ini.",
|
||||
"prefix": "Salinan dari ",
|
||||
"prefix_instructions": "Awalan ini akan ditambahkan pada awal penamaan item yang diduplikat. Termasuk spasi pada akhir awalan untuk menambahn pemisah antara awalan dan nama item.",
|
||||
"temporary_title": "Pengaturan Sementara",
|
||||
"title": "Duplikasi Pengaturan"
|
||||
},
|
||||
"edit_details": "Edit Detail",
|
||||
"field_selector": "Selektor",
|
||||
"field_value": "Nilai",
|
||||
|
||||
@@ -124,6 +124,7 @@
|
||||
},
|
||||
"product_import": {
|
||||
"barcode": "Codice a barre del prodotto",
|
||||
"db_source": "DB sorgente",
|
||||
"error_exception": "Si è verificato un errore durante il recupero del codice a barre dell'articolo: ",
|
||||
"error_invalid_barcode": "Il codice a barre fornito non è valido",
|
||||
"error_not_found": "Nessun prodotto trovato con il codice a barre fornito.",
|
||||
@@ -133,19 +134,55 @@
|
||||
"selector": {
|
||||
"no_results": "Nessun risultato trovato",
|
||||
"placeholder": "Seleziona…",
|
||||
"search_placeholder": "Scrivi per cercare…"
|
||||
"search_placeholder": "Scrivi per cercare…",
|
||||
"searching": "Ricerca in corso…"
|
||||
},
|
||||
"view": {
|
||||
"change_details": {
|
||||
"add_labels": "Aggiungi Etichette",
|
||||
"failed_to_update_item": "Aggiornamento oggetto fallito",
|
||||
"remove_labels": "Rimuovi Etichette",
|
||||
"title": "Modifica Dettaglio Oggetto"
|
||||
},
|
||||
"selectable": {
|
||||
"card": "Scheda",
|
||||
"items": "Articoli",
|
||||
"no_items": "Nessun Articolo da Visualizzare",
|
||||
"select_all": "Seleziona tutto",
|
||||
"select_card": "Seleziona Card",
|
||||
"select_row": "Seleziona Riga",
|
||||
"table": "Tabella"
|
||||
},
|
||||
"table": {
|
||||
"dropdown": {
|
||||
"actions": "Azioni",
|
||||
"change_labels": "Cambia etichette",
|
||||
"change_labels_success": "Etichette cambiate",
|
||||
"change_location": "Cambia posizione",
|
||||
"change_location_success": "Posizione cambiata",
|
||||
"create_maintenance_item": "Inserisci Manutenzione per l'elemento",
|
||||
"create_maintenance_selected": "Inserisci in Manutenzione gli elementi selezionati",
|
||||
"create_maintenance_success": "Record di Manutenzione creato",
|
||||
"delete_confirmation": "Sei sicuro di voler eliminare gli elementi selezionati? Questa operazione è irreversibile.",
|
||||
"delete_item": "Elimina Oggetto",
|
||||
"delete_selected": "Elimina Oggetti Selezionati",
|
||||
"download_csv": "Scarica Tabella come CSV",
|
||||
"download_json": "Scarica Tabella come JSON",
|
||||
"duplicate_item": "Duplica Oggetto",
|
||||
"duplicate_selected": "Duplica Oggetti Selezionati",
|
||||
"error_deleting": "Errore durante l'eliminazione dell'Oggetto",
|
||||
"error_duplicating": "Errore durante la duplicazione dell'oggetto",
|
||||
"open_menu": "Apri menu",
|
||||
"open_multi_tab_warning": "Per ragioni di sicurezza, i browsers non permettono di aprire schede multiple in un colpo solo, per modificare questa configurazione utilizza la seguente documentazione",
|
||||
"toggle_expand": "Apri/Chiudi Espandi",
|
||||
"view_item": "Visualizza Oggetto",
|
||||
"view_items": "Visualizza Oggetti"
|
||||
},
|
||||
"headers": "Intestazioni",
|
||||
"page": "Pagina",
|
||||
"quick_actions": "Abilita Selezione & Azioni Rapide",
|
||||
"rows_per_page": "Righe per pagina",
|
||||
"selected_rows": "{selected} di {total} riga/righe selezionate.",
|
||||
"table_settings": "Impostazioni Tabella",
|
||||
"view_item": "Visualizzare articolo"
|
||||
}
|
||||
@@ -230,6 +267,7 @@
|
||||
"name": "Nome",
|
||||
"navigate": "Naviga",
|
||||
"password": "Password",
|
||||
"preview": "Anteprima",
|
||||
"quantity": "Quantità",
|
||||
"read_docs": "Leggi la Documentazione",
|
||||
"return_home": "Ritorna alla Home",
|
||||
@@ -293,10 +331,14 @@
|
||||
"duplicate": {
|
||||
"copy_attachments": "Copia allegati",
|
||||
"copy_custom_fields": "Copia Campi Personalizzati",
|
||||
"copy_maintenance": "Copia Manutenzione",
|
||||
"custom_prefix": "Copia Prefisso",
|
||||
"enable_custom_prefix": "Abilita prefisso personalizzato",
|
||||
"override_instructions": "Tieni premuto il tasto \"shift\" quando effettui un click sul pulsante \"duplica\" per sovrascrivere le impostazioni.",
|
||||
"prefix": "Copia di ",
|
||||
"temporary_title": "Impostazioni temporanee"
|
||||
"prefix_instructions": "Questo prefisso verrà aggiunto all'inizio del nome dell'elemento duplicato. Includi uno spazio alla fine del prefisso per aggiungere uno spazio tra il prefisso e il nome dell'elemento.",
|
||||
"temporary_title": "Impostazioni temporanee",
|
||||
"title": "Duplica Impostazioni"
|
||||
},
|
||||
"edit": {
|
||||
"edit_attachment_dialog": {
|
||||
@@ -306,7 +348,8 @@
|
||||
"primary_photo_sub": "Questa opzione è disponibile solo per le foto. Solo una foto può essere principale. Se selezioni questa opzione, l'attuale foto principale, se presente, sarà deselezionata.",
|
||||
"select_type": "Seleziona un tipo",
|
||||
"title": "Modifica allegato"
|
||||
}
|
||||
},
|
||||
"view_image": "Visualizza Immagine"
|
||||
},
|
||||
"edit_details": "Modifica dettagli",
|
||||
"field_selector": "Selezione in base ai campi",
|
||||
@@ -361,7 +404,30 @@
|
||||
"tips": "Suggerimenti",
|
||||
"tips_sub": "Suggerimenti per la Ricerca",
|
||||
"toast": {
|
||||
"quantity_cannot_negative": "La quantità non può essere negativa"
|
||||
"asset_not_found": "Asset non trovato",
|
||||
"attachment_deleted": "Allegato cancellato",
|
||||
"attachment_updated": "Allegato aggiornato",
|
||||
"attachment_uploaded": "Allegato caricato",
|
||||
"child_items_location_no_longer_synced": "Le posizioni degli elementi contenuti non saranno più sincronizzate con questo elemento.",
|
||||
"child_items_location_synced": "Le posizioni degli elementi contenuti sono sincronizzate con questo elemento.",
|
||||
"child_location_desync": "La modifica della posizione lo desincronizzerà dalla posizione dell'elemento che lo contiene.",
|
||||
"error_loading_parent_data": "Qualcosa e' andato storto durantre il caricamento dei dati dell'elemento padre",
|
||||
"failed_adjust_quantity": "Impossibile modificare la quantita'",
|
||||
"failed_delete_attachment": "Impossibile cancellare l'allegato",
|
||||
"failed_delete_item": "Impossibile cancellare l'elemento",
|
||||
"failed_duplicate_item": "Impossibile duplicare l'elemento",
|
||||
"failed_load_asset": "Impossibile caricare l'asset",
|
||||
"failed_load_item": "Impossibile caricare l'elemento",
|
||||
"failed_load_items": "Impossibile caricare gli elementi",
|
||||
"failed_save": "Impossibile salvare l'elemento",
|
||||
"failed_save_no_location": "Impossibile salvare l'elemento: non e' stata selezionata alcuna posizione",
|
||||
"failed_search_items": "Impossibile cercare gli elementi",
|
||||
"failed_update_attachment": "Impossibile aggiornare l'allegato",
|
||||
"failed_upload_attachment": "Impossibile caricare l'allegato",
|
||||
"item_deleted": "Elemento cancellato",
|
||||
"item_saved": "Elemento salvato",
|
||||
"quantity_cannot_negative": "La quantità non può essere negativa",
|
||||
"sync_child_location": "Il contenitore selezionato ha sincronizzato le posizioni dei suoi elementi interni. La posizione è stata aggiornata."
|
||||
},
|
||||
"updated_at": "Aggiornato Il",
|
||||
"warranty": "Garanzia",
|
||||
@@ -369,7 +435,15 @@
|
||||
"warranty_expires": "La garanzia scade il"
|
||||
},
|
||||
"labels": {
|
||||
"label_delete_confirm": "Sei sicuro di voler eliminare questa etichetta? Questa azione non può essere annullata.",
|
||||
"no_results": "Nessuna etichetta trovata",
|
||||
"toast": {
|
||||
"failed_delete_label": "Impossibile cancellare l'etichetta",
|
||||
"failed_load_label": "Impossibile caricare l'etichetta",
|
||||
"failed_update_label": "Impossibile aggiornare l'etichetta",
|
||||
"label_deleted": "Etichetta cancellata",
|
||||
"label_updated": "Etichetta aggiornata"
|
||||
},
|
||||
"update_label": "Aggiorna etichetta"
|
||||
},
|
||||
"languages": {
|
||||
@@ -414,7 +488,15 @@
|
||||
"child_locations": "Ubicazione figlia",
|
||||
"collapse_tree": "Contrai albero",
|
||||
"expand_tree": "Espandi albero",
|
||||
"location_items_delete_confirm": "Sei sicuro di voler eliminare questa posizione e tutti i relativi elementi? Questa azione non può essere annullata.",
|
||||
"no_results": "Nessuna posizione trovata",
|
||||
"toast": {
|
||||
"failed_delete_location": "Impossibile cancellare la posizione",
|
||||
"failed_load_location": "Impossibile caricare la posizione",
|
||||
"failed_update_location": "Impossibile aggiornare la posizione",
|
||||
"location_deleted": "Posizione cancellata",
|
||||
"location_updated": "Posizione aggiornata"
|
||||
},
|
||||
"update_location": "Aggiorna ubicazione"
|
||||
},
|
||||
"maintenance": {
|
||||
@@ -470,7 +552,9 @@
|
||||
"currency_format": "Formato Valuta",
|
||||
"current_password": "Password Corrente",
|
||||
"delete_account": "Elimina Account",
|
||||
"delete_account_confirm": "Sei sicuro di voler eliminare il tuo account? Se sei l’ultimo membro del tuo gruppo, tutti i tuoi dati verranno cancellati. Questa azione non può essere annullata.",
|
||||
"delete_account_sub": "Elimina il tuo account e tutti i dati associati. Questa operazione non può essere annullata.",
|
||||
"delete_notifier_confirm": "Sei sicuro di voler eliminare questo promemoria?",
|
||||
"display_legacy_header": "{ currentValue, select, true {Disable Legacy Header} false {Enable Legacy Header} other {Not Hit}}",
|
||||
"enabled": "Abilitato",
|
||||
"example": "Esempio",
|
||||
@@ -489,6 +573,20 @@
|
||||
"test": "Test",
|
||||
"theme_settings": "Impostazioni Tema",
|
||||
"theme_settings_sub": "Le impostazioni del tema sono memorizzate nella memoria locale del tuo browser. Puoi cambiare il tema \nin qualsiasi momento. Se hai problemi a impostare il tuo tema, prova a ricaricare la pagina.",
|
||||
"toast": {
|
||||
"account_deleted": "Il tuo account e' stato cancellato.",
|
||||
"failed_change_password": "Impossibile cambiare password.",
|
||||
"failed_create_notifier": "Impossibile creare il promemoria.",
|
||||
"failed_delete_account": "Impossibile cancellare l'account.",
|
||||
"failed_delete_notifier": "Impossibile cancellare il promemoria.",
|
||||
"failed_get_currencies": "Impossibile ottenere le valute",
|
||||
"failed_test_notifier": "Impossibile testare il promemoria.",
|
||||
"failed_update_group": "Impossibile aggiornare il gruppo",
|
||||
"failed_update_notifier": "Impossibile aggiornare il promemoria.",
|
||||
"group_updated": "Gruppo aggiornato",
|
||||
"notifier_test_success": "Promemoria testato con successo.",
|
||||
"password_changed": "Password cambiata con successo."
|
||||
},
|
||||
"update_group": "Aggiorna Gruppo",
|
||||
"update_language": "Aggiorna Lingua",
|
||||
"url": "URL",
|
||||
@@ -497,16 +595,38 @@
|
||||
},
|
||||
"reports": {
|
||||
"label_generator": {
|
||||
"asset_end": "Fine Asset",
|
||||
"asset_start": "Inizio Asset",
|
||||
"base_url": "URL base",
|
||||
"bordered_labels": "Etichette con bordo",
|
||||
"generate_page": "Genera Pagina",
|
||||
"input_placeholder": "Scrivi qui",
|
||||
"instruction_1": "Il Generatore di Etichette di Homebox è uno strumento che ti aiuta a stampare le etichette per il tuo inventario Homebox. Sono pensate come etichette da\nstampare in anticipo, così potrai stamparne molte e averle pronte da applicare",
|
||||
"instruction_2": "Queste etichette funzionano stampando un codice QR con un URL e le informazioni dell’AssetID sull’etichetta. Se hai disabilitato\n gli AssetID nelle impostazioni di Homebox, puoi comunque usare questo strumento, ma gli AssetID non faranno riferimento a nessun elemento",
|
||||
"instruction_3": "Questa funzione è nelle fasi iniziali di sviluppo e potrebbe cambiare nelle versioni future. Se hai suggerimenti,\n ti invitiamo a condividerli nella '<a href=\"https://github.com/sysadminsmedia/homebox/discussions/53\">Discussione GitHub</a>'",
|
||||
"label_height": "Altezza dell'etichetta",
|
||||
"label_width": "Larghezza dell'etichetta",
|
||||
"measure_type": "Tipo di misurazione",
|
||||
"page_bottom_padding": "Margine inferiore della pagina",
|
||||
"page_height": "Altezza della pagina",
|
||||
"page_left_padding": "Spaziatura Sinistra",
|
||||
"page_right_padding": "Spaziatura Destra",
|
||||
"page_top_padding": "Spaziatura in alto",
|
||||
"page_width": "Larghezza pagina",
|
||||
"qr_code_example": "Esempio di codice QR",
|
||||
"tip_1": "Le impostazioni predefinite qui sono configurate per i\n'<a href=\"https://www.avery.com/templates/5260\">'fogli di etichette ''Avery 5260 '</a>'. Se stai utilizzando un foglio differente,\n devi modificare le impostazioni affinchè corrispondano al tuo foglio."
|
||||
"tip_1": "Le impostazioni predefinite qui sono configurate per i\n'<a href=\"https://www.avery.com/templates/5260\">'fogli di etichette ''Avery 5260 '</a>'. Se stai utilizzando un foglio differente,\n devi modificare le impostazioni affinchè corrispondano al tuo foglio.",
|
||||
"tip_2": "Se stai personalizzando il tuo foglio, le dimensioni sono espresse in pollici. Quando ho creato il foglio 5260, ho notato che le\n dimensioni indicate nel loro modello non corrispondevano a quelle necessarie per stampare correttamente all’interno dei riquadri.\n '<b>'Preparati a qualche tentativo ed errore.'</b>'",
|
||||
"tip_3": "Quando stampi, assicurati di:\n<ol><li>Impostare i margini su 0 o Nessuno</li><li>Impostare la scala al 100%</li><li>Disattivare la stampa fronte/retro</li><li>Stampare una pagina di prova prima di stampare più pagine</li></ol>",
|
||||
"tips": "Suggerimenti",
|
||||
"title": "Generatore di etichette",
|
||||
"toast": {
|
||||
"page_too_small_card": "La dimensione della pagina è troppo piccola per il formato della scheda"
|
||||
}
|
||||
}
|
||||
},
|
||||
"scanner": {
|
||||
"barcode_detected_message": "Codice a barre del prodotto rilevato",
|
||||
"barcode_fetch_data": "Recupera dati del prodotto",
|
||||
"error": "Si è verificato un errore durante la scansione",
|
||||
"invalid_url": "URL del codice a barre non valido",
|
||||
"no_sources": "Nessuna sorgente video disponibile",
|
||||
@@ -518,17 +638,24 @@
|
||||
"tools": {
|
||||
"actions": "Azioni Inventario",
|
||||
"actions_set": {
|
||||
"create_missing_thumbnails": "Crea miniature mancanti",
|
||||
"create_missing_thumbnails_button": "Crea miniature",
|
||||
"create_missing_thumbnails_confirm": "Sei sicuro di voler creare le miniature mancanti? Questa operazione potrebbe richiedere un po' di tempo e non può essere messa in pausa.",
|
||||
"create_missing_thumbnails_sub": "Crea miniature per tutti gli allegati supportati dalla configurazione corrente. Questo è utile per gli allegati caricati prima del rilascio della versione v0.20.0 di Homebox. Non sovrascriverà le miniature esistenti, ma creerà nuove miniature solo per gli allegati che non ne hanno una. Tieni presente che le miniature vengono generate in background e l’operazione potrebbe richiedere del tempo.",
|
||||
"ensure_ids": "Verifica ID delle risorse",
|
||||
"ensure_ids_button": "Verifica ID delle risorse",
|
||||
"ensure_ids_confirm": "Sei sicuro di voler assegnare un ID a tutti gli asset? Questa operazione potrebbe richiedere tempo e non può essere annullata.",
|
||||
"ensure_ids_sub": "Garantisce che tutti gli articoli nel tuo inventario abbiano un campo asset_id valido. Questo viene fatto trovando il campo asset_id corrente più alto nel database e applicando il valore successivo a ogni articolo che ha un campo asset_id non impostato. Questo viene fatto per il campo created_at.",
|
||||
"ensure_import_refs": "Verifica riferimenti di importazione",
|
||||
"ensure_import_refs_button": "Verifica riferimenti di importazione",
|
||||
"ensure_import_refs_sub": "Verifica che tutti gli articoli nel tuo inventario abbiano un campo import_ref valido. Questo viene fatto generando in modo casuale una stringa di 8 caratteri per ogni articolo che ha un campo import_ref non impostato.",
|
||||
"set_primary_photo": "Imposta foto principale",
|
||||
"set_primary_photo_button": "Imposta immagine principale",
|
||||
"set_primary_photo_confirm": "Sei sicuro di voler impostare le foto principali? Questa operazione potrebbe richiedere tempo e non può essere annullata.",
|
||||
"set_primary_photo_sub": "Nella versione v0.10.0 di Homebox, il campo immagine principale è stato aggiunto agli allegati di tipo foto. Questa azione imposterà il campo immagine principale alla prima immagine nella matrice allegati nel database, se non è già impostato. '<a class=\"link\" href=\"https://github.com/hay-kot/homebox/pull/576\">'Vedi GitHub PR #576'</a>'",
|
||||
"zero_datetimes": "Azzera Data e Orario articolo",
|
||||
"zero_datetimes_button": "Azzera Date e Ora articolo",
|
||||
"zero_datetimes_confirm": "Sei sicuro di voler reimpostare tutti i valori di data e ora? Questa operazione potrebbe richiedere tempo e non può essere annullata.",
|
||||
"zero_datetimes_sub": "Reimposta il valore dell'ora per tutti i campi data e ora dell'inventario all'inizio della data. Questo è per correggere un bug che è stato introdotto all'inizio dello sviluppo del sito che ha causato il valore di orario memorizzato con il tempo che ha causato problemi con i campi data visualizzazione dei valori esatti. '<a class=\"link\" href=\"https://github.com/hay-kot/homebox/issues/236\" target=\"_blank\">'Vedi Github Issue #236 per maggiori dettagli.'</a>'"
|
||||
},
|
||||
"actions_sub": "Applica Azioni massive al tuo inventario. Questo sono azioni irreversibili. '<b>'Presta attenzione.'</b>'",
|
||||
@@ -539,6 +666,7 @@
|
||||
"export_sub": "Esporta il formato CSV standard per Homebox. Questo esporterà tutti gli articoli del tuo inventario.",
|
||||
"import": "Importa Inventario",
|
||||
"import_button": "Importa Inventario",
|
||||
"import_ref_confirm": "Sei sicuro di voler garantire che tutti gli asset abbiano un import_ref? Questa operazione potrebbe richiedere tempo e non può essere annullata.",
|
||||
"import_sub": "Importa il formato CSV standard per Homebox. Senza una colonna '<code>'HB.import_ref'</code>' questo '<b>'non'</b>' sovrascriverà gli articoli esistenti nel tuo inventario, aggiungerà solamente nuovi articoli. Le righe con una colonna '<code>'HB.import_ref'</code>' saranno unite agli articoli esistenti con lo stesso import_ref, se presente."
|
||||
},
|
||||
"import_export_sub": "Importa ed esporta il tuo inventario da e verso un file CSV. Questo è utile per migrare il tuo inventario verso una nuova istanza di Homebox.",
|
||||
@@ -551,6 +679,14 @@
|
||||
"bill_of_materials_button": "Genera BOM",
|
||||
"bill_of_materials_sub": "Genera un file CSV (Valori Separati dalla Virgola) che può essere importato in un foglio di calcolo. Questo è un sommario del tuo inventario con informazioni di base su articoli e prezzi."
|
||||
},
|
||||
"reports_sub": "Genera diversi report per il tuo inventario."
|
||||
"reports_sub": "Genera diversi report per il tuo inventario.",
|
||||
"toast": {
|
||||
"asset_success": "{ results } assets sono stati aggiornati.",
|
||||
"failed_create_missing_thumbnails": "Impossibile creare le miniature mancanti.",
|
||||
"failed_ensure_ids": "Impossibile garantire gli ID degli asset.",
|
||||
"failed_ensure_import_refs": "Impossibile garantire i riferimenti di importazione.",
|
||||
"failed_set_primary_photos": "Impossibile configurare le foto pricipali.",
|
||||
"failed_zero_datetimes": "Impossibile reimpostare i valori di data e ora."
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -176,7 +176,7 @@
|
||||
"select_location": "Velg en lokasjon"
|
||||
},
|
||||
"tree": {
|
||||
"no_locations": "Ingen tilgjengelige lokasjoner. Legg til en ny lokasjon via\n `<`span class=\"link-primary\"`>`Opprett`<`/span`>`-knappen på navigasjonslinjen."
|
||||
"no_locations": "Ingen tilgjengelige lokasjoner. Legg til en ny lokasjon via\n '<span class=\"link-primary\">'Opprett'</span>'-knappen på navigasjonslinjen."
|
||||
}
|
||||
},
|
||||
"quick_menu": {
|
||||
|
||||
@@ -94,6 +94,7 @@
|
||||
"open_new_tab": "Openen in een nieuw tabblad"
|
||||
},
|
||||
"create_modal": {
|
||||
"clear_template": "Template wissen",
|
||||
"delete_photo": "Foto verwijderen",
|
||||
"item_description": "Artikelomschrijving",
|
||||
"item_name": "Artikelnaam",
|
||||
@@ -138,16 +139,51 @@
|
||||
"searching": "Zoeken…"
|
||||
},
|
||||
"view": {
|
||||
"change_details": {
|
||||
"add_labels": "Voeg labels toe",
|
||||
"failed_to_update_item": "Bijwerken van item mislukt",
|
||||
"remove_labels": "Verwijder labels",
|
||||
"title": "Itemgegevens wijzigen"
|
||||
},
|
||||
"selectable": {
|
||||
"card": "Kaart",
|
||||
"items": "Objecten",
|
||||
"no_items": "Geen objecten om te tonen",
|
||||
"select_all": "Alles selecteren",
|
||||
"select_card": "Selecteer kaart",
|
||||
"select_row": "Rij selecteren",
|
||||
"table": "Tabel"
|
||||
},
|
||||
"table": {
|
||||
"dropdown": {
|
||||
"actions": "Acties",
|
||||
"change_labels": "Labels wijzigen",
|
||||
"change_labels_success": "Labels gewijzigd",
|
||||
"change_location": "Locatie wijzigen",
|
||||
"change_location_success": "Locatie gewijzigd",
|
||||
"create_maintenance_item": "Onderhoudsinvoer aanmaken voor item",
|
||||
"create_maintenance_selected": "Onderhoudsinvoer aanmaken voor geselecteerde items",
|
||||
"create_maintenance_success": "Onderhoudsinvoeren aangemaakt",
|
||||
"delete_confirmation": "Weet u zeker dat u de geselecteerde items wilt verwijderen? Deze actie kan niet ongedaan worden gemaakt.",
|
||||
"delete_item": "Item verwijderen",
|
||||
"delete_selected": "Geselecteerde items verwijderen",
|
||||
"download_csv": "Download tabel als CSV",
|
||||
"download_json": "Download tabel als JSON",
|
||||
"duplicate_item": "Dupliceer item",
|
||||
"duplicate_selected": "Geselecteerde items dupliceren",
|
||||
"error_deleting": "Fout bij verwijderen item",
|
||||
"error_duplicating": "Fout bij dupliceren van item",
|
||||
"open_menu": "Open menu",
|
||||
"open_multi_tab_warning": "Om veiligheidsredenen staan browsers standaard niet toe dat meerdere tabbladen tegelijk worden geopend. Volg de documentatie om dit te wijzigen:",
|
||||
"toggle_expand": "Uitvouwen in-/uitschakelen",
|
||||
"view_item": "Bekijk item",
|
||||
"view_items": "Bekijk items"
|
||||
},
|
||||
"headers": "Kopteksten",
|
||||
"page": "Pagina",
|
||||
"quick_actions": "Snelle acties en selectie inschakelen",
|
||||
"rows_per_page": "Rijen per pagina",
|
||||
"selected_rows": "{selected} van {total} rijen geselecteerd.",
|
||||
"table_settings": "Tabel instellingen",
|
||||
"view_item": "Toon Item"
|
||||
}
|
||||
@@ -194,6 +230,65 @@
|
||||
"quick_menu": {
|
||||
"no_results": "Geen resultaten gevonden.",
|
||||
"shortcut_hint": "Gebruik de numerieke toetsen om snel een actie te selecteren."
|
||||
},
|
||||
"template": {
|
||||
"apply_template": "Template toepassen",
|
||||
"card": {
|
||||
"delete": "Template verwijderen",
|
||||
"duplicate": "Template dupliceren",
|
||||
"edit": "Template bewerken"
|
||||
},
|
||||
"confirm_delete": "Deze template verwijderen?",
|
||||
"create_modal": {
|
||||
"title": "Template maken"
|
||||
},
|
||||
"detail": {
|
||||
"default_values": "Standaardinstellingen",
|
||||
"updated": "Bijgewerkt"
|
||||
},
|
||||
"edit_modal": {
|
||||
"title": "Template bewerken"
|
||||
},
|
||||
"empty_value": "(leeg)",
|
||||
"form": {
|
||||
"custom_fields": "Aangepaste velden",
|
||||
"default_item_values": "Standaardwaarden item",
|
||||
"default_location": "Standaard locatie",
|
||||
"default_value": "Standaard waarde",
|
||||
"field_name": "Veldnaam",
|
||||
"item_description": "Artikelomschrijving",
|
||||
"item_name": "Artikelnaam",
|
||||
"lifetime_warranty": "Levenslange garantie",
|
||||
"location": "Locatie",
|
||||
"manufacturer": "Fabrikant",
|
||||
"model_number": "Modelnummer",
|
||||
"no_custom_fields": "Geen aangepaste velden.",
|
||||
"template_description": "Template beschrijving",
|
||||
"template_name": "Template naam"
|
||||
},
|
||||
"hide_defaults": "Standaard verbergen",
|
||||
"save_as_template": "Opslaan als Template",
|
||||
"selector": {
|
||||
"label": "Template (Optioneel)",
|
||||
"not_found": "Geen template gevonden",
|
||||
"search": "Templates zoeken…",
|
||||
"select": "Template selecteren…"
|
||||
},
|
||||
"show_defaults": "Standaard weergeven",
|
||||
"toast": {
|
||||
"applied": "Template \"{name}\" toegepast",
|
||||
"create_failed": "Template aanmaken mislukt",
|
||||
"created": "Template aangemaakt",
|
||||
"delete_failed": "Template verwijderen mislukt",
|
||||
"deleted": "Template verwijderd",
|
||||
"duplicate_failed": "Template dupliceren mislukt",
|
||||
"duplicated": "Template gedupliceerd als \"{name}\"",
|
||||
"load_failed": "Template details laden mislukt",
|
||||
"saved_as_template": "Item opgeslagen als template \"{name}\"",
|
||||
"update_failed": "Template bijwerken mislukt",
|
||||
"updated": "Template bijgewerkt"
|
||||
},
|
||||
"using_template": "Gebruik template: {name}"
|
||||
}
|
||||
},
|
||||
"errors": {
|
||||
@@ -231,7 +326,9 @@
|
||||
"maintenance": "Onderhoud",
|
||||
"name": "Naam",
|
||||
"navigate": "Navigeer",
|
||||
"no": "Nee",
|
||||
"password": "Wachtwoord",
|
||||
"preview": "Preview",
|
||||
"quantity": "Aantal",
|
||||
"read_docs": "Lees de documentatie",
|
||||
"return_home": "Terug naar startpagina",
|
||||
@@ -244,7 +341,8 @@
|
||||
"updating": "Aan het updaten",
|
||||
"value": "Waarde",
|
||||
"version": "Versie: { version }",
|
||||
"welcome": "Welkom, { username }"
|
||||
"welcome": "Welkom, { username }",
|
||||
"yes": "Ja"
|
||||
},
|
||||
"home": {
|
||||
"labels": "Labels",
|
||||
@@ -261,6 +359,7 @@
|
||||
"dont_join_group": "Wil je je niet bij een groep aansluiten?",
|
||||
"joining_group": "Je sluit je aan bij een bestaande groep!",
|
||||
"login": "Log in",
|
||||
"or": "of",
|
||||
"register": "Registreer",
|
||||
"remember_me": "Onthoud mij",
|
||||
"set_email": "Wat is je mailadres?",
|
||||
@@ -272,6 +371,14 @@
|
||||
"invalid_email": "Ongeldig e-mailadres",
|
||||
"invalid_email_password": "Ongeldig e-mailadres of wachtwoord",
|
||||
"login_success": "Aangemeld",
|
||||
"oidc_access_denied": "Toegang geweigerd: uw account heeft niet de vereiste rol/groepslidmaatschap",
|
||||
"oidc_auth_failed": "OIDC authenticatie mislukt",
|
||||
"oidc_invalid_response": "Ongeldig OIDC-antwoord ontvangen",
|
||||
"oidc_provider_error": "OIDC-provider heeft een fout geretourneerd",
|
||||
"oidc_security_error": "OIDC-beveiligingsfout - mogelijke CSRF-aanval",
|
||||
"oidc_session_expired": "OIDC sessie is verlopen",
|
||||
"oidc_token_expired": "OIDC token is verlopen",
|
||||
"oidc_token_invalid": "OIDC token signature is ongeldig",
|
||||
"problem_registering": "Probleem bij het registreren van de gebruiker",
|
||||
"user_registered": "Gebruiker geregistreerd"
|
||||
}
|
||||
@@ -508,8 +615,15 @@
|
||||
"profile": "Profiel",
|
||||
"scanner": "Scanner",
|
||||
"search": "Zoeken",
|
||||
"templates": "Templates",
|
||||
"tools": "Hulpmiddelen"
|
||||
},
|
||||
"pages": {
|
||||
"templates": {
|
||||
"no_templates": "Nog geen templates.",
|
||||
"title": "Templates"
|
||||
}
|
||||
},
|
||||
"profile": {
|
||||
"active": "Actief",
|
||||
"change_password": "Verander Wachtwoord",
|
||||
@@ -527,6 +641,7 @@
|
||||
"group_settings_sub": "Gedeelde groepsinstellingen. Mogelijk moet u uw browser vernieuwen om sommige instellingen toe te passen.",
|
||||
"inactive": "Inactief",
|
||||
"language": "Taal",
|
||||
"legacy_image_fit": "{ currentValue, select, true {Legacy fit uitschakelen: afbeelding aanpassen met balken} false {Legacy fit inschakelen: afbeelding vullen met bijsnijden} other {Overig}}",
|
||||
"new_password": "Nieuw Wachtwoord",
|
||||
"no_notifiers": "Geen melders geconfigureerd",
|
||||
"no_override": "Niet overschrijven",
|
||||
|
||||
@@ -134,19 +134,55 @@
|
||||
"selector": {
|
||||
"no_results": "Brak rezultatów",
|
||||
"placeholder": "Wybierz…",
|
||||
"search_placeholder": "Wpisz, aby wyszukać…"
|
||||
"search_placeholder": "Wpisz, aby wyszukać…",
|
||||
"searching": "Szukam…"
|
||||
},
|
||||
"view": {
|
||||
"change_details": {
|
||||
"add_labels": "Dodaj etykiety",
|
||||
"failed_to_update_item": "Nie udało się zaktualizować danych przedmiotu",
|
||||
"remove_labels": "Usuń etykiety",
|
||||
"title": "Zmień dane przedmiotu"
|
||||
},
|
||||
"selectable": {
|
||||
"card": "Karta",
|
||||
"items": "Przedmioty",
|
||||
"no_items": "Brak przedmiotów do wyświetlenia",
|
||||
"select_all": "Zaznacz wszystko",
|
||||
"select_card": "Zaznacz kartę",
|
||||
"select_row": "Zaznacz wiersz",
|
||||
"table": "Tabela"
|
||||
},
|
||||
"table": {
|
||||
"dropdown": {
|
||||
"actions": "Akcje",
|
||||
"change_labels": "Zmień etykiety tekstowe:",
|
||||
"change_labels_success": "Zmieniono etykiety",
|
||||
"change_location": "Zmień lokalizację",
|
||||
"change_location_success": "Oznaczenie lokalizacji zmienione",
|
||||
"create_maintenance_item": "Utwórz wpis konserwacyjny dla pozycji",
|
||||
"create_maintenance_selected": "Utwórz wpis konserwacyjny dla wybranych elementów",
|
||||
"create_maintenance_success": "Utworzono wpis(y) dot. konserwacji",
|
||||
"delete_confirmation": "Czy na pewno chcesz usunąć wybrane przedmioty? Tej czynności nie można cofnąć.",
|
||||
"delete_item": "Usuń przedmiot",
|
||||
"delete_selected": "Usuń zaznaczone przedmioty",
|
||||
"download_csv": "Pobierz tabelę jako CSV",
|
||||
"download_json": "Pobierz tabelę jako JSON",
|
||||
"duplicate_item": "Duplikuj pozycję",
|
||||
"duplicate_selected": "Powiel wybrane przedmioty",
|
||||
"error_deleting": "Bląd usuwania przedmiotu",
|
||||
"error_duplicating": "Problem podczas duplikowania pozycji",
|
||||
"open_menu": "Otwórz menu",
|
||||
"open_multi_tab_warning": "Ze względów bezpieczeństwa przeglądarki domyślnie nie zezwalają na jednoczesne otwieranie wielu kart. Aby to zmienić, postępuj zgodnie z dokumentacją:",
|
||||
"toggle_expand": "Włącz/wyłącz rozwiń",
|
||||
"view_item": "Pokaż przedmiot",
|
||||
"view_items": "Pokaż przedmioty"
|
||||
},
|
||||
"headers": "Nagłówki",
|
||||
"page": "Strona",
|
||||
"quick_actions": "Aktywuj Szybkie Akcje i Zaznaczenie",
|
||||
"rows_per_page": "Ilość wierszy na stronę",
|
||||
"selected_rows": "Zaznaczono {selected} z {total} wierszy.",
|
||||
"table_settings": "Ustawienia Tabeli",
|
||||
"view_item": "Zobacz przedmiot"
|
||||
}
|
||||
@@ -231,6 +267,7 @@
|
||||
"name": "Nazwa",
|
||||
"navigate": "Nawiguj",
|
||||
"password": "Hasło",
|
||||
"preview": "Podgląd",
|
||||
"quantity": "Ilość",
|
||||
"read_docs": "Przeczytaj dokumentację",
|
||||
"return_home": "Powrót do strony głównej",
|
||||
@@ -292,7 +329,16 @@
|
||||
"details": "Szczegóły",
|
||||
"drag_and_drop": "Przeciągnij i upuść pliki tutaj lub kliknij, aby wybrać pliki",
|
||||
"duplicate": {
|
||||
"prefix": "Kopia z "
|
||||
"copy_attachments": "Kopiuj załączniki",
|
||||
"copy_custom_fields": "Kopiuj pola niestandardowe",
|
||||
"copy_maintenance": "Kopiuj konserwację",
|
||||
"custom_prefix": "Kopiuj prefiks",
|
||||
"enable_custom_prefix": "Włącz niestandardowy prefiks",
|
||||
"override_instructions": "Aby zastąpić te ustawienia, przytrzymaj klawisz Shift podczas klikania przycisku duplikowania.",
|
||||
"prefix": "Kopia z ",
|
||||
"prefix_instructions": "Ten prefiks zostanie dodany na początku nazwy duplikatu. Dodaj spację na końcu prefiksu, aby dodać spację między prefiksem a nazwą elementu.",
|
||||
"temporary_title": "Ustawienia tymczasowe",
|
||||
"title": "Duplikuj ustawienia"
|
||||
},
|
||||
"edit": {
|
||||
"edit_attachment_dialog": {
|
||||
@@ -302,7 +348,8 @@
|
||||
"primary_photo_sub": "Ta opcja jest dostępna tylko dla zdjęć. Tylko jedno zdjęcie może być zdjęciem głównym. Po wybraniu tej opcji, bieżące zdjęcie główne (jeśli takie istnieje) zostanie odznaczone.",
|
||||
"select_type": "Wybierz typ",
|
||||
"title": "Edycja załącznika"
|
||||
}
|
||||
},
|
||||
"view_image": "Zobacz obraz"
|
||||
},
|
||||
"edit_details": "Edytuj szczegóły",
|
||||
"field_selector": "Selektor pól",
|
||||
|
||||
@@ -7,8 +7,8 @@
|
||||
"shift": "Continuar"
|
||||
},
|
||||
"import_dialog": {
|
||||
"change_warning": "O comportamento das importações com import_refs existentes foi alterado. Se houver um import_ref presente no arquivo CSV, o \nitem será atualizado com os valores presentes no arquivo CSV.",
|
||||
"description": "Importe um arquivo CSV contendo seus itens, etiquetas e locais. Consulte a documentação para mais informações \nsobre a formatação necessária.",
|
||||
"change_warning": "O comportamento das importações com import_refs existentes foi alterado. Se houver um import_ref presente no arquivo CSV, o\nitem será atualizado com os valores presentes no arquivo CSV.",
|
||||
"description": "Importe um arquivo CSV contendo seus itens, etiquetas e locais. Consulte a documentação para mais informações\nsobre a formatação necessária.",
|
||||
"title": "Importar arquivo CSV",
|
||||
"toast": {
|
||||
"import_failed": "Importação falhou. Tente novamente mais tarde.",
|
||||
@@ -94,12 +94,15 @@
|
||||
"open_new_tab": "Abrir em uma nova aba"
|
||||
},
|
||||
"create_modal": {
|
||||
"clear_template": "Template limpo",
|
||||
"delete_photo": "Apagar foto",
|
||||
"item_description": "Descrição do Item",
|
||||
"item_name": "Nome do Item",
|
||||
"item_photo": "Foto do Item 📷",
|
||||
"item_quantity": "Quantidade de Itens",
|
||||
"parent_item": "Item Pai",
|
||||
"product_tooltip_input_barcode": "Preenchimento automático com um código de barras fornecido manualmente",
|
||||
"product_tooltip_scan_barcode": "Preenchimento automático com um código de barras da 📷",
|
||||
"rotate_photo": "Girar imagem",
|
||||
"set_as_primary_photo": "Definir como { isPrimary, select, true {non-} false {} other {}} foto primária",
|
||||
"title": "Criar Item",
|
||||
@@ -109,7 +112,7 @@
|
||||
"create_success": "Item criado",
|
||||
"failed_load_parent": "Falhou ao carregar item pai - por favor selecione manualmente",
|
||||
"no_canvas_support": "Seu navegador não suporta operações de tela",
|
||||
"please_select_location": "Por favor seleciona a localização",
|
||||
"please_select_location": "Por favor, selecione uma localização",
|
||||
"rotate_failed": "Falha ao rotacionar imagem: { error }",
|
||||
"rotate_process_failed": "Falhou ao processar imagem rotacionada",
|
||||
"some_photos_failed": "{count, plural, =0 {Nenhuma foto para upload.} =1 {1 imagem falhou no upload.} other {Algumas fotos falharam durante upload.}}",
|
||||
@@ -120,22 +123,67 @@
|
||||
"upload_photos": "Carregar Fotos",
|
||||
"uploaded": "Fotos enviadas"
|
||||
},
|
||||
"product_import": {
|
||||
"barcode": "Código de barras do produto",
|
||||
"db_source": "Fonte DB",
|
||||
"error_exception": "Ocorreu uma exceção ao recuperar o código de barras do item: ",
|
||||
"error_invalid_barcode": "Código de barras fornecido inválido",
|
||||
"error_not_found": "Nenhum produto encontrado com o código de barras fornecido.",
|
||||
"search_item": "Pesquisar produto",
|
||||
"title": "Importar Produto"
|
||||
},
|
||||
"selector": {
|
||||
"no_results": "Nenhum Resultado Encontrado",
|
||||
"placeholder": "Selecione…",
|
||||
"search_placeholder": "Digite para pesquisar…"
|
||||
"search_placeholder": "Digite para pesquisar…",
|
||||
"searching": "Pesquisando…"
|
||||
},
|
||||
"view": {
|
||||
"change_details": {
|
||||
"add_labels": "Adicionar Etiquetas",
|
||||
"failed_to_update_item": "Falha ao atualizar item",
|
||||
"remove_labels": "Remover Etiquetas",
|
||||
"title": "Alterar detalhes do item"
|
||||
},
|
||||
"selectable": {
|
||||
"card": "Cartão",
|
||||
"items": "Items",
|
||||
"no_items": "Nenhum Item para Exibir",
|
||||
"select_all": "Selecionar tudo",
|
||||
"select_card": "Selecionar cartão",
|
||||
"select_row": "Selecionar a linha",
|
||||
"table": "Tabela"
|
||||
},
|
||||
"table": {
|
||||
"dropdown": {
|
||||
"actions": "Ações",
|
||||
"change_labels": "Trocar etiquetas",
|
||||
"change_labels_success": "Etiquetas alteradas",
|
||||
"change_location": "Trocar localização",
|
||||
"change_location_success": "Localização alterada",
|
||||
"create_maintenance_item": "Criar entrada de manutenção para o item",
|
||||
"create_maintenance_selected": "Criar entrada de manutenção para itens selecionados",
|
||||
"create_maintenance_success": "Entrada(s) de manutenção criada(s)",
|
||||
"delete_confirmation": "Tem certeza de que deseja excluir o (s) item(ns) selecionado (s)? Esta ação não pode ser desfeita.",
|
||||
"delete_item": "Deletar item",
|
||||
"delete_selected": "Excluir itens selecionados",
|
||||
"download_csv": "Baixar a tabela como CSV",
|
||||
"download_json": "Baixar tabela como JSON",
|
||||
"duplicate_item": "Duplicar Item",
|
||||
"duplicate_selected": "Duplicar itens selecionados",
|
||||
"error_deleting": "Erro ao deletar item",
|
||||
"error_duplicating": "Erro ao duplicar item",
|
||||
"open_menu": "Abrir menu",
|
||||
"open_multi_tab_warning": "Por razões de segurança, os navegadores não permitem que várias guias sejam abertas de uma só vez por padrão. Para alterar isso, siga a documentação:",
|
||||
"toggle_expand": "Expandir",
|
||||
"view_item": "Ver item",
|
||||
"view_items": "Ver Items"
|
||||
},
|
||||
"headers": "Cabeçalhos",
|
||||
"page": "Página",
|
||||
"quick_actions": "Ativar ações e seleção rápidas",
|
||||
"rows_per_page": "Linhas por página",
|
||||
"selected_rows": "{selected} de {total} linha(s) selecionada (s).",
|
||||
"table_settings": "Configurações da Tabela",
|
||||
"view_item": "Visualizar item"
|
||||
}
|
||||
@@ -182,8 +230,59 @@
|
||||
"quick_menu": {
|
||||
"no_results": "Nenhum resultado encontrado.",
|
||||
"shortcut_hint": "Use as teclas numéricas para selecionar uma ação rapidamente."
|
||||
},
|
||||
"template": {
|
||||
"card": {
|
||||
"delete": "Deletar template",
|
||||
"duplicate": "Clonar template",
|
||||
"edit": "Editar template"
|
||||
},
|
||||
"confirm_delete": "Deletar este template?",
|
||||
"create_modal": {
|
||||
"title": "Criar Template"
|
||||
},
|
||||
"detail": {
|
||||
"default_values": "Valores padrão",
|
||||
"updated": "Atualizado"
|
||||
},
|
||||
"edit_modal": {
|
||||
"title": "Editar Template"
|
||||
},
|
||||
"form": {
|
||||
"custom_fields": "Campos personalizados",
|
||||
"default_item_values": "Valores padrão de itens",
|
||||
"default_location": "Local padrão",
|
||||
"default_value": "Valor padrão",
|
||||
"field_name": "Nome do campo",
|
||||
"item_description": "Descrição do item",
|
||||
"item_name": "Nome do item",
|
||||
"lifetime_warranty": "Garantia vitalícia",
|
||||
"location": "Local",
|
||||
"manufacturer": "Fabricante",
|
||||
"model_number": "Número de modelo",
|
||||
"no_custom_fields": "Sem campos personalizados",
|
||||
"template_description": "Descrição do template",
|
||||
"template_name": "Nome do template"
|
||||
},
|
||||
"selector": {
|
||||
"label": "Template (opcional)",
|
||||
"not_found": "Nenhum template encontrado",
|
||||
"search": "Procurando templates…",
|
||||
"select": "Selecionar template…"
|
||||
},
|
||||
"toast": {
|
||||
"applied": "Template \"{name}\" aplicado",
|
||||
"create_failed": "Falha ao criar template",
|
||||
"created": "Template criado",
|
||||
"delete_failed": "Falha ao deletar template",
|
||||
"deleted": "Template deletado",
|
||||
"duplicate_failed": "Falha ao clonar template"
|
||||
}
|
||||
}
|
||||
},
|
||||
"errors": {
|
||||
"api_failure": "Falha na chamada da API de back-end: "
|
||||
},
|
||||
"global": {
|
||||
"add": "Adicionar",
|
||||
"archived": "Arquivado",
|
||||
@@ -217,6 +316,7 @@
|
||||
"name": "Nome",
|
||||
"navigate": "Navegar",
|
||||
"password": "Senha",
|
||||
"preview": "Pré-visualização",
|
||||
"quantity": "Quantidade",
|
||||
"read_docs": "Leia a Documentação",
|
||||
"return_home": "Retornar para Home",
|
||||
@@ -277,6 +377,18 @@
|
||||
"description": "Descrição",
|
||||
"details": "Detalhes",
|
||||
"drag_and_drop": "Arraste e solte os arquivos aqui ou clique para selecionar os arquivos",
|
||||
"duplicate": {
|
||||
"copy_attachments": "Copiar Anexos",
|
||||
"copy_custom_fields": "Copiar campos personalizados",
|
||||
"copy_maintenance": "Manutenção de cópias",
|
||||
"custom_prefix": "Copiar prefixo",
|
||||
"enable_custom_prefix": "Ativar prefixo personalizado",
|
||||
"override_instructions": "Segure shift ao clicar no botão de duplicação para sobrescrever essas configurações.",
|
||||
"prefix": "Cópia de ",
|
||||
"prefix_instructions": "Este prefixo será adicionado ao início do nome do item duplicado. Inclua um espaço no final do prefixo para adicionar um espaço entre o prefixo e o nome do item.",
|
||||
"temporary_title": "Configurações temporárias",
|
||||
"title": "Duplicar Configurações"
|
||||
},
|
||||
"edit": {
|
||||
"edit_attachment_dialog": {
|
||||
"attachment_title": "Título do Anexo",
|
||||
@@ -285,7 +397,8 @@
|
||||
"primary_photo_sub": "Esta opção está disponível apenas para fotos. Apenas uma foto pode ser a principal. Se você selecionar esta opção, a foto principal atual, se houver, será desmarcada.",
|
||||
"select_type": "Selecione um tipo",
|
||||
"title": "Editar Anexo"
|
||||
}
|
||||
},
|
||||
"view_image": "Ver imagem"
|
||||
},
|
||||
"edit_details": "Detalhes da Edição",
|
||||
"field_selector": "Seletor de Campo",
|
||||
@@ -383,6 +496,7 @@
|
||||
"update_label": "Atualizar Etiqueta"
|
||||
},
|
||||
"languages": {
|
||||
"bs-BA": "Bósnio (Bósnia e Herzegovina)",
|
||||
"ca": "Catalão",
|
||||
"cs-CZ": "Tcheco",
|
||||
"de": "Alemão",
|
||||
@@ -410,6 +524,7 @@
|
||||
"th-TH": "Tailandês",
|
||||
"tr": "Turco",
|
||||
"uk-UA": "Ucraniano",
|
||||
"vi-VN": "Vietnamese",
|
||||
"zh-CN": "Chinês (Simplificado)",
|
||||
"zh-HK": "Chinês (Hong Kong)",
|
||||
"zh-MO": "Chinês (Macau)",
|
||||
@@ -497,6 +612,7 @@
|
||||
"group_settings_sub": "Configurações de Grupo Compartilhado. É possível que tenha que recarregar a página para que alguns ajustes sejam aplicados.",
|
||||
"inactive": "Inativo",
|
||||
"language": "Idioma",
|
||||
"legacy_image_fit": "{ currentValue, select, true {Desabilitar Ajuste legado: Ajuste a imagem com barras} false {Habilitar ajuste legado: Preencher imagem com recorte} other {Not Hit}}",
|
||||
"new_password": "Nova Senha",
|
||||
"no_notifiers": "Nenhum notificador configurado",
|
||||
"no_override": "Não sobrepor",
|
||||
@@ -559,6 +675,8 @@
|
||||
}
|
||||
},
|
||||
"scanner": {
|
||||
"barcode_detected_message": "código de barras do produto detectado",
|
||||
"barcode_fetch_data": "Buscar dados do produto",
|
||||
"error": "Ocorreu um erro durante a digitalização",
|
||||
"invalid_url": "Código de barras inválido",
|
||||
"no_sources": "Nenhuma fonte de vídeo disponível",
|
||||
|
||||
@@ -7,7 +7,7 @@
|
||||
"shift": "Shift"
|
||||
},
|
||||
"import_dialog": {
|
||||
"change_warning": "O comportamento para importações com import_refs existente foi alterado. Se um import_ref estiver presente \nno ficheiro CSV, o item será atualizado com os valores do ficheiro CSV.",
|
||||
"change_warning": "O comportamento para importações com import_refs existente foi alterado. Se um import_ref estiver presente no ficheiro CSV, \no item será atualizado com os valores do ficheiro CSV.",
|
||||
"description": "Importe um ficheiro CSV contendo os seus itens, etiquetas e localizações. Consulte a documentação para mais \ninformações sobre o formato necessário.",
|
||||
"title": "Importar Ficheiro CSV",
|
||||
"toast": {
|
||||
@@ -24,6 +24,13 @@
|
||||
"new_version_available_link": "Clique aqui para ver as notas da versão"
|
||||
}
|
||||
},
|
||||
"color_selector": {
|
||||
"clear": "Limpar cor",
|
||||
"color": "Cor",
|
||||
"no_color": "Sem cor",
|
||||
"no_color_selected": "Nenhuma cor selecionada",
|
||||
"randomize": "Cor aleatória"
|
||||
},
|
||||
"form": {
|
||||
"password": {
|
||||
"toggle_show": "Alternar Visibilidade da Palavra-passe"
|
||||
@@ -93,6 +100,8 @@
|
||||
"item_photo": "Foto do Item 📷",
|
||||
"item_quantity": "Quantidade do Item",
|
||||
"parent_item": "Item Principal",
|
||||
"product_tooltip_input_barcode": "Preenchimento automático com um código de barras fornecido manualmente",
|
||||
"product_tooltip_scan_barcode": "Preenchimento automático com um código de barras da 📷",
|
||||
"rotate_photo": "Rodar foto",
|
||||
"set_as_primary_photo": "Definir como foto { isPrimary, select, true {não-} false {} other {}}principal",
|
||||
"title": "Criar Item",
|
||||
@@ -108,33 +117,72 @@
|
||||
"some_photos_failed": "{count, plural, =0 {Sem fotos para carregar.} =1 {1 foto falhou ao carregar.} other {Algumas fotos falharam ao carregar.}}",
|
||||
"upload_failed": "Falha ao carregar foto: { photoName }",
|
||||
"upload_success": "{count, plural, =0 {Sem fotos carregadas.} =1 {Foto carregada com sucesso.} other {Todas as fotos foram carregadas com sucesso.}}",
|
||||
"uploading_photos": "{count, plural, =0 {Sem fotos para carregar} =1 {A carregar 1 foto...} other {A carregar {count} fotos...}}"
|
||||
"uploading_photos": "{count, plural, =0 {Sem fotos para carregar} =1 {A carregar 1 foto…} other {A carregar {count} fotos…}}"
|
||||
},
|
||||
"upload_photos": "Carregar Fotos",
|
||||
"uploaded": "Foto Carregada"
|
||||
},
|
||||
"product_import": {
|
||||
"barcode": "Código de Barras do Produto",
|
||||
"error_not_found": "Nenhum produto encontrado com código de barras.",
|
||||
"db_source": "Fonte DB",
|
||||
"error_exception": "Ocorreu uma exceção ao recuperar o código de barras do item: ",
|
||||
"error_invalid_barcode": "Código de barras fornecido inválido",
|
||||
"error_not_found": "Nenhum produto encontrado com código de barras fornecido.",
|
||||
"search_item": "Pesquisar produto",
|
||||
"title": "Importar produto"
|
||||
},
|
||||
"selector": {
|
||||
"no_results": "Nenhum Resultado Encontrado",
|
||||
"placeholder": "Selecionar…",
|
||||
"search_placeholder": "Escreva para pesquisar…"
|
||||
"search_placeholder": "Escreva para pesquisar…",
|
||||
"searching": "A procurar…"
|
||||
},
|
||||
"view": {
|
||||
"change_details": {
|
||||
"add_labels": "Adicionar Labels",
|
||||
"failed_to_update_item": "Falha ao atualizar o artigo",
|
||||
"remove_labels": "Remover Rótulos",
|
||||
"title": "Alterar Detalhes do Item"
|
||||
},
|
||||
"selectable": {
|
||||
"card": "Cartão",
|
||||
"items": "Itens",
|
||||
"no_items": "Sem Itens para Exibir",
|
||||
"select_all": "Selecionar Tudo",
|
||||
"select_card": "Selecionar Cartão",
|
||||
"select_row": "Selecionar Linha",
|
||||
"table": "Tabela"
|
||||
},
|
||||
"table": {
|
||||
"dropdown": {
|
||||
"actions": "Ações",
|
||||
"change_labels": "Alterar etiquetas",
|
||||
"change_labels_success": "Etiquetas alteradas",
|
||||
"change_location": "Alterar Localização",
|
||||
"change_location_success": "Localização alterada",
|
||||
"create_maintenance_item": "Criar entrada de manutenção para o item",
|
||||
"create_maintenance_selected": "Criar entrada de manutenção para itens selecionados",
|
||||
"create_maintenance_success": "Entrada(s) de Manutenção Criada(s)",
|
||||
"delete_confirmation": "Tem a certeza de que pretende eliminar o(s) item(s) selecionado(s)? Esta ação não pode ser desfeita.",
|
||||
"delete_item": "Eliminar Item",
|
||||
"delete_selected": "Eliminar Items Selecionados",
|
||||
"download_csv": "Transferir Tabela como CSV",
|
||||
"download_json": "Transferir Tabela como JSON",
|
||||
"duplicate_item": "Duplicar item",
|
||||
"duplicate_selected": "Duplicar Itens Selecionados",
|
||||
"error_deleting": "Erro ao eliminar item",
|
||||
"error_duplicating": "Erro ao duplicar item",
|
||||
"open_menu": "Abrir menu",
|
||||
"open_multi_tab_warning": "Por razões de segurança, os navegadores não permitem que vários separadores sejam abertos de uma só vez por padrão. Para alterar isso, siga a documentação:",
|
||||
"toggle_expand": "Alternar Expandir",
|
||||
"view_item": "Ver item",
|
||||
"view_items": "Ver items"
|
||||
},
|
||||
"headers": "Cabeçalhos",
|
||||
"page": "Página",
|
||||
"quick_actions": "Ativar Ações Rápidas e Seleção",
|
||||
"rows_per_page": "Linhas por página",
|
||||
"selected_rows": "{selected} de {total} linha(s) selecionada(s).",
|
||||
"table_settings": "Definições da Tabela",
|
||||
"view_item": "Ver item"
|
||||
}
|
||||
@@ -142,6 +190,7 @@
|
||||
},
|
||||
"label": {
|
||||
"create_modal": {
|
||||
"label_color": "Cor da Etiqueta",
|
||||
"label_description": "Descrição da Etiqueta",
|
||||
"label_name": "Nome da Etiqueta",
|
||||
"title": "Criar Etiqueta",
|
||||
@@ -182,6 +231,9 @@
|
||||
"shortcut_hint": "Use as teclas numéricas para selecionar rapidamente uma ação."
|
||||
}
|
||||
},
|
||||
"errors": {
|
||||
"api_failure": "Falha na chamada da API de back-end: "
|
||||
},
|
||||
"global": {
|
||||
"add": "Adicionar",
|
||||
"archived": "Arquivado",
|
||||
@@ -215,6 +267,7 @@
|
||||
"name": "Nome",
|
||||
"navigate": "Navegar",
|
||||
"password": "Palavra-passe",
|
||||
"preview": "Pré-visualização",
|
||||
"quantity": "Quantidade",
|
||||
"read_docs": "Ler a Documentação",
|
||||
"return_home": "Voltar à Página Inicial",
|
||||
@@ -275,6 +328,18 @@
|
||||
"description": "Descrição",
|
||||
"details": "Detalhes",
|
||||
"drag_and_drop": "Arraste e largue ficheiros aqui ou clique para selecionar ficheiros",
|
||||
"duplicate": {
|
||||
"copy_attachments": "Copiar Anexos",
|
||||
"copy_custom_fields": "Copiar Campos Personalizados",
|
||||
"copy_maintenance": "Copiar Manutenção",
|
||||
"custom_prefix": "Copiar Prefixo",
|
||||
"enable_custom_prefix": "Ativar Prefixo Personalizado",
|
||||
"override_instructions": "Segure shift ao clicar no botão duplicar para substituir estas configurações.",
|
||||
"prefix": "Cópia de ",
|
||||
"prefix_instructions": "Este prefixo será adicionado ao início do nome do item duplicado. Inclua um espaço no fim do prefixo para adicionar um espaço entre o prefixo e o nome do item.",
|
||||
"temporary_title": "Definições Temporárias",
|
||||
"title": "Duplicar Definições"
|
||||
},
|
||||
"edit": {
|
||||
"edit_attachment_dialog": {
|
||||
"attachment_title": "Título do Anexo",
|
||||
@@ -283,7 +348,8 @@
|
||||
"primary_photo_sub": "Esta opção só está disponível para fotos. Apenas uma foto pode ser principal. Ao selecionar esta, a atual será desmarcada.",
|
||||
"select_type": "Selecionar um tipo",
|
||||
"title": "Editar Anexo"
|
||||
}
|
||||
},
|
||||
"view_image": "Ver Imagem"
|
||||
},
|
||||
"edit_details": "Editar Detalhes",
|
||||
"field_selector": "Seletor de Campo",
|
||||
@@ -381,6 +447,7 @@
|
||||
"update_label": "Atualizar Etiqueta"
|
||||
},
|
||||
"languages": {
|
||||
"bs-BA": "Bósnio (Bósnia e Herzegovina)",
|
||||
"ca": "Catalão",
|
||||
"cs-CZ": "Checo",
|
||||
"da-DK": "Dinamarquês",
|
||||
@@ -411,6 +478,7 @@
|
||||
"th-TH": "Tailandês",
|
||||
"tr": "Turco",
|
||||
"uk-UA": "Ucraniano",
|
||||
"vi-VN": "Vietnamita",
|
||||
"zh-CN": "Chinês (Simplificado)",
|
||||
"zh-HK": "Chinês (Hong Kong)",
|
||||
"zh-MO": "Chinês (Macau)",
|
||||
@@ -495,6 +563,7 @@
|
||||
"group_settings_sub": "Definições Partilhadas do Grupo. Pode ser necessário atualizar a página para aplicar algumas definições.",
|
||||
"inactive": "Inativo",
|
||||
"language": "Idioma",
|
||||
"legacy_image_fit": "{ currentValue, select, true {Desativar ajuste herdado: ajustar imagem com barras} false {Ativar ajuste herdado: preencher imagem com recorte} other {Not Hit}}",
|
||||
"new_password": "Nova Palavra-passe",
|
||||
"no_notifiers": "Nenhum notificador configurado",
|
||||
"no_override": "Sem substituição",
|
||||
@@ -557,6 +626,8 @@
|
||||
}
|
||||
},
|
||||
"scanner": {
|
||||
"barcode_detected_message": "código de barras do produto detectado",
|
||||
"barcode_fetch_data": "Buscar dados do produto",
|
||||
"error": "Ocorreu um erro ao digitalizar",
|
||||
"invalid_url": "URL de código de barras inválido",
|
||||
"no_sources": "Sem fontes de vídeo disponíveis",
|
||||
@@ -568,6 +639,10 @@
|
||||
"tools": {
|
||||
"actions": "Ações de Inventário",
|
||||
"actions_set": {
|
||||
"create_missing_thumbnails": "Criar miniaturas em falta",
|
||||
"create_missing_thumbnails_button": "Criar miniaturas",
|
||||
"create_missing_thumbnails_confirm": "Tem a certeza que pretende criar miniaturas em falta? Esta ação poderá demorar e não pode ser colocada em pausa.",
|
||||
"create_missing_thumbnails_sub": "Cria miniaturas para todos os anexos que são suportados pela configuração atual. Isto é útil para anexos que foram enviados antes do lançamento da v0.20.0 de Homebox. Isto não irá substituir as miniaturas existentes, apenas irá criar umas novas para anexos que não têm miniatura. Por favor note que as miniaturas são criadas em segundo plano e podem demorar a finalizar.",
|
||||
"ensure_ids": "Garantir IDs dos Ativos",
|
||||
"ensure_ids_button": "Garantir IDs dos Ativos",
|
||||
"ensure_ids_confirm": "Tem a certeza de que deseja garantir que todos os ativos têm um ID? Isto pode demorar e não pode ser desfeito.",
|
||||
@@ -608,6 +683,7 @@
|
||||
"reports_sub": "Gerar diferentes relatórios para o seu inventário.",
|
||||
"toast": {
|
||||
"asset_success": "{ results } ativos foram atualizados.",
|
||||
"failed_create_missing_thumbnails": "Falha ao criar miniaturas em falta.",
|
||||
"failed_ensure_ids": "Falha ao garantir IDs dos ativos.",
|
||||
"failed_ensure_import_refs": "Falha ao garantir referências de importação.",
|
||||
"failed_set_primary_photos": "Falha ao definir fotos principais.",
|
||||
|
||||
@@ -94,6 +94,7 @@
|
||||
"open_new_tab": "Открыть в новой вкладке"
|
||||
},
|
||||
"create_modal": {
|
||||
"clear_template": "Очистить шаблон",
|
||||
"delete_photo": "Удалить фото",
|
||||
"item_description": "Описание элемента",
|
||||
"item_name": "Имя элемента",
|
||||
@@ -134,19 +135,55 @@
|
||||
"selector": {
|
||||
"no_results": "Результаты не найдены",
|
||||
"placeholder": "Выберите…",
|
||||
"search_placeholder": "Введите для поиска…"
|
||||
"search_placeholder": "Введите для поиска…",
|
||||
"searching": "Поиск…"
|
||||
},
|
||||
"view": {
|
||||
"change_details": {
|
||||
"add_labels": "Добавить метки",
|
||||
"failed_to_update_item": "Не удалось обновить элемент",
|
||||
"remove_labels": "Удалить метки",
|
||||
"title": "Изменить данные элемента"
|
||||
},
|
||||
"selectable": {
|
||||
"card": "Карточка",
|
||||
"items": "Элементы",
|
||||
"no_items": "Нет элементов для отображения",
|
||||
"select_all": "Выбрать всё",
|
||||
"select_card": "Выбрать карточку",
|
||||
"select_row": "Выбрать строку",
|
||||
"table": "Таблица"
|
||||
},
|
||||
"table": {
|
||||
"dropdown": {
|
||||
"actions": "Действия",
|
||||
"change_labels": "Изменить метки",
|
||||
"change_labels_success": "Метки изменены",
|
||||
"change_location": "Изменить расположение",
|
||||
"change_location_success": "Расположение изменено",
|
||||
"create_maintenance_item": "Создать запись об обслуживании для элемента",
|
||||
"create_maintenance_selected": "Создать запись об обслуживании для выбранных элементов",
|
||||
"create_maintenance_success": "Записи об обслуживании созданы",
|
||||
"delete_confirmation": "Вы уверены, что хотите удалить выбранные элементы? Это действие нельзя отменить.",
|
||||
"delete_item": "Удалить элемент",
|
||||
"delete_selected": "Удалить выбранные элементы",
|
||||
"download_csv": "Скачать таблицу в формате CSV",
|
||||
"download_json": "Скачать таблицу в формате JSON",
|
||||
"duplicate_item": "Дублировать элемент",
|
||||
"duplicate_selected": "Дублировать выбранные элементы",
|
||||
"error_deleting": "Ошибка при удалении элемента",
|
||||
"error_duplicating": "Ошибка при дублировании элемента",
|
||||
"open_menu": "Открыть меню",
|
||||
"open_multi_tab_warning": "В целях безопасности браузеры по умолчанию не разрешают одновременное открытие нескольких вкладок. Чтобы изменить это, следуйте документации:",
|
||||
"toggle_expand": "Развернуть/Свернуть",
|
||||
"view_item": "Просмотреть элемент",
|
||||
"view_items": "Просмотреть элементы"
|
||||
},
|
||||
"headers": "Заголовки",
|
||||
"page": "Страница",
|
||||
"quick_actions": "Включить быстрые действия и выбор",
|
||||
"rows_per_page": "Строк на странице",
|
||||
"selected_rows": "{selected} из {total} строк выбрано.",
|
||||
"table_settings": "Настройки таблицы",
|
||||
"view_item": "Просмотр элемента"
|
||||
}
|
||||
@@ -193,6 +230,65 @@
|
||||
"quick_menu": {
|
||||
"no_results": "Результаты не найдены.",
|
||||
"shortcut_hint": "Используйте цифровые клавиши, чтобы быстро выбрать действие."
|
||||
},
|
||||
"template": {
|
||||
"apply_template": "Применить шаблон",
|
||||
"card": {
|
||||
"delete": "Удалить шаблон",
|
||||
"duplicate": "Дублировать шаблон",
|
||||
"edit": "Редактировать шаблон"
|
||||
},
|
||||
"confirm_delete": "Удалить этот шаблон?",
|
||||
"create_modal": {
|
||||
"title": "Создать шаблон"
|
||||
},
|
||||
"detail": {
|
||||
"default_values": "Стандартное значение",
|
||||
"updated": "Обновлено"
|
||||
},
|
||||
"edit_modal": {
|
||||
"title": "Редактировать Шаблон"
|
||||
},
|
||||
"empty_value": "(пусто)",
|
||||
"form": {
|
||||
"custom_fields": "Пользовательские Поля",
|
||||
"default_item_values": "Значения элементов по умолчанию",
|
||||
"default_location": "Местоположение по умолчанию",
|
||||
"default_value": "Значение по умолчанию",
|
||||
"field_name": "Название поля",
|
||||
"item_description": "Описание элемента",
|
||||
"item_name": "Название Элемента",
|
||||
"lifetime_warranty": "Пожизненная гарантия",
|
||||
"location": "Местоположение",
|
||||
"manufacturer": "Производитель",
|
||||
"model_number": "Номер модели",
|
||||
"no_custom_fields": "Пользовательские поля отсутствуют.",
|
||||
"template_description": "Описание шаблона",
|
||||
"template_name": "Название шаблона"
|
||||
},
|
||||
"hide_defaults": "Скрыть значения по умолчанию",
|
||||
"save_as_template": "Сохранить как Шаблон",
|
||||
"selector": {
|
||||
"label": "Шаблон (необязательно)",
|
||||
"not_found": "Шаблон не найден",
|
||||
"search": "Поиск шаблонов…",
|
||||
"select": "Выбрать шаблон…"
|
||||
},
|
||||
"show_defaults": "Показать значения по умолчанию",
|
||||
"toast": {
|
||||
"applied": "Шаблон \"{name}\" применён",
|
||||
"create_failed": "Ошибка создания шаблона",
|
||||
"created": "Шаблон создан",
|
||||
"delete_failed": "Ошибка при удалении шаблона",
|
||||
"deleted": "Шаблон удалён",
|
||||
"duplicate_failed": "Не удалось дублировать шаблон",
|
||||
"duplicated": "Шаблон продублирован как \"{name}\"",
|
||||
"load_failed": "Не удалось загрузить детали шаблона",
|
||||
"saved_as_template": "Предмет сохранен как шаблон \"{name}\"",
|
||||
"update_failed": "Ошибка обновления шаблона",
|
||||
"updated": "Шаблон обновлен"
|
||||
},
|
||||
"using_template": "Используется шаблон: {name}"
|
||||
}
|
||||
},
|
||||
"errors": {
|
||||
@@ -230,7 +326,9 @@
|
||||
"maintenance": "Техническое обслуживание и ремонт",
|
||||
"name": "Имя",
|
||||
"navigate": "Навигация",
|
||||
"no": "Нет",
|
||||
"password": "Пароль",
|
||||
"preview": "Предпросмотр",
|
||||
"quantity": "Количество",
|
||||
"read_docs": "Прочитать документацию",
|
||||
"return_home": "Вернуться домой",
|
||||
@@ -243,7 +341,8 @@
|
||||
"updating": "Обновление",
|
||||
"value": "Значение",
|
||||
"version": "Версия: { version }",
|
||||
"welcome": "Добро пожаловать, { username }"
|
||||
"welcome": "Добро пожаловать, { username }",
|
||||
"yes": "Да"
|
||||
},
|
||||
"home": {
|
||||
"labels": "Метки",
|
||||
@@ -260,6 +359,7 @@
|
||||
"dont_join_group": "Не хотите ли вступить в группу?",
|
||||
"joining_group": "Вы присоединяетесь к уже существующей группе!",
|
||||
"login": "Войти",
|
||||
"or": "или",
|
||||
"register": "Зарегистрироваться",
|
||||
"remember_me": "Запомнить меня",
|
||||
"set_email": "Какой у вас адрес электронной почты?",
|
||||
@@ -271,6 +371,14 @@
|
||||
"invalid_email": "Неверный адрес электронной почты",
|
||||
"invalid_email_password": "Неверный email или пароль",
|
||||
"login_success": "Вход выполнен успешно",
|
||||
"oidc_access_denied": "Доступ запрещен: ваша учетная запись не имеет необходимой роли/членства в группе",
|
||||
"oidc_auth_failed": "Ошибка OIDC аутентификации",
|
||||
"oidc_invalid_response": "Получен недопустимый ответ OIDC",
|
||||
"oidc_provider_error": "Поставщик OIDC вернул ошибку",
|
||||
"oidc_security_error": "Ошибка безопасности OIDC - возможная атака CSRF",
|
||||
"oidc_session_expired": "OIDC сессия истекла",
|
||||
"oidc_token_expired": "OIDC токен истек",
|
||||
"oidc_token_invalid": "Недействительная подпись токена OIDC",
|
||||
"problem_registering": "Проблема при регистрации пользователя",
|
||||
"user_registered": "Пользователь зарегистрирован"
|
||||
}
|
||||
@@ -291,6 +399,18 @@
|
||||
"description": "Описание",
|
||||
"details": "Подробнее",
|
||||
"drag_and_drop": "Перетащите файлы сюда или нажмите, чтобы выбрать файлы",
|
||||
"duplicate": {
|
||||
"copy_attachments": "Копировать вложения",
|
||||
"copy_custom_fields": "Копировать настраиваемые поля",
|
||||
"copy_maintenance": "Копировать данные об обслуживании",
|
||||
"custom_prefix": "Копировать префикс",
|
||||
"enable_custom_prefix": "Включить пользовательский префикс",
|
||||
"override_instructions": "Чтобы переопределить эти настройки, удерживайте Shift при нажатии кнопки дублирования.",
|
||||
"prefix": "Копия ",
|
||||
"prefix_instructions": "Этот префикс будет добавлен в начало имени дублирующегося элемента.",
|
||||
"temporary_title": "Временные настройки",
|
||||
"title": "Настройки дублирования"
|
||||
},
|
||||
"edit": {
|
||||
"edit_attachment_dialog": {
|
||||
"attachment_title": "Название вложения",
|
||||
@@ -299,7 +419,8 @@
|
||||
"primary_photo_sub": "Эта функция доступна только для фотографий. Только одно фото может быть основным. Если вы выберете эту опцию, текущее основное фото, если таковое имеется, будет отменено.",
|
||||
"select_type": "Выберите тип",
|
||||
"title": "Редактирование вложения"
|
||||
}
|
||||
},
|
||||
"view_image": "Просмотреть изображение"
|
||||
},
|
||||
"edit_details": "Редактирование деталей",
|
||||
"field_selector": "Поле выбора",
|
||||
@@ -343,7 +464,7 @@
|
||||
"select_field": "Выберите поле",
|
||||
"serial_number": "Серийный номер",
|
||||
"show_advanced_view_options": "Показать дополнительные параметры",
|
||||
"sold_at": "Место продажи",
|
||||
"sold_at": "Дата продажи",
|
||||
"sold_details": "Детали продажи",
|
||||
"sold_price": "Цена продажи",
|
||||
"sold_to": "Покупатель",
|
||||
@@ -397,6 +518,7 @@
|
||||
"update_label": "Обновить метку"
|
||||
},
|
||||
"languages": {
|
||||
"bs-BA": "Боснийский (Босния и Герцеговина)",
|
||||
"ca": "Каталанский",
|
||||
"cs-CZ": "Чешский",
|
||||
"de": "Немецкий",
|
||||
@@ -423,6 +545,7 @@
|
||||
"th-TH": "Тайский",
|
||||
"tr": "Турецкий",
|
||||
"uk-UA": "Украинский",
|
||||
"vi-VN": "Вьетнамский",
|
||||
"zh-CN": "Китайский (упрощенный)",
|
||||
"zh-HK": "Китайский (Гонконг)",
|
||||
"zh-MO": "Китайский (Макао)",
|
||||
@@ -492,8 +615,15 @@
|
||||
"profile": "Профиль",
|
||||
"scanner": "Сканер",
|
||||
"search": "Поиск",
|
||||
"templates": "Шаблоны",
|
||||
"tools": "Инструменты"
|
||||
},
|
||||
"pages": {
|
||||
"templates": {
|
||||
"no_templates": "Шаблонов пока нет.",
|
||||
"title": "Шаблоны"
|
||||
}
|
||||
},
|
||||
"profile": {
|
||||
"active": "Активный",
|
||||
"change_password": "Изменить пароль",
|
||||
@@ -511,6 +641,7 @@
|
||||
"group_settings_sub": "Настройки общей группы. Для применения изменений возможно потребуется перезагрузить страницу.",
|
||||
"inactive": "Неактивный",
|
||||
"language": "Язык",
|
||||
"legacy_image_fit": "{ currentValue, select, true {Отключить старый режим: Вписать с полями} false {Включить старый режим: Заполнить с обрезкой} other {Ошибка}}",
|
||||
"new_password": "Новый пароль",
|
||||
"no_notifiers": "Нет настроенных уведомлений",
|
||||
"no_override": "Без переопределения",
|
||||
@@ -620,7 +751,7 @@
|
||||
"import_export_sub": "Импортировать или экспортировать ваш инвентарь в или из CSV файла. Это полезно при миграции вашего инвентаря в новый экземпляр Homebox.",
|
||||
"reports": "Отчеты",
|
||||
"reports_set": {
|
||||
"asset_labels": "Метки с ID активов",
|
||||
"asset_labels": "Метки инвентарных объектов",
|
||||
"asset_labels_button": "Генератор меток",
|
||||
"asset_labels_sub": "Генерирует PDF с метками для диапазона ID активов. Отсутствует привязка к Вашему инвентарю, так что вы можете напечатать метки заранее и применить их к вашему инвентарю позже.",
|
||||
"bill_of_materials": "Ведомость материалов",
|
||||
|
||||
@@ -187,7 +187,7 @@
|
||||
"select_location": "Vyberte miesto"
|
||||
},
|
||||
"tree": {
|
||||
"no_locations": "Nie sú k dispozícii žiadne miesta. Pridajte nové miesta kliknutím na\n `<`span class=\"link-primary\"`>`Vytvoriť`<`/span`>` na navigačnej lište."
|
||||
"no_locations": "Nie sú k dispozícii žiadne miesta. Pridajte nové miesta kliknutím na\n '<span class=\"link-primary\">'Vytvoriť'</span>' na navigačnej lište."
|
||||
}
|
||||
},
|
||||
"quick_menu": {
|
||||
|
||||
@@ -8,7 +8,7 @@
|
||||
},
|
||||
"import_dialog": {
|
||||
"change_warning": "Beteendet för importer med befintliga import_refs har ändrats. Om en import_ref finns i CSV-filen, kommer\nobjektet att uppdateras med värdena i CSV-filen.",
|
||||
"description": "Importera en CSV-fil som innehåller dina föremål, etiketter och platser. Se dokumentationen för mer information om förväntat format.",
|
||||
"description": "Importera en CSV-fil som innehåller dina föremål, etiketter och platser. Se dokumentationen för mer information \nom förväntat format.",
|
||||
"title": "Importera CSV-fil",
|
||||
"toast": {
|
||||
"import_failed": "Import misslyckades. Försök igen senare.",
|
||||
@@ -24,6 +24,13 @@
|
||||
"new_version_available_link": "Klicka här för att visa versionsanteckningarna"
|
||||
}
|
||||
},
|
||||
"color_selector": {
|
||||
"clear": "Rensa färg",
|
||||
"color": "Färg",
|
||||
"no_color": "Färglös",
|
||||
"no_color_selected": "Ingen färg vald",
|
||||
"randomize": "Slumpad färg"
|
||||
},
|
||||
"form": {
|
||||
"password": {
|
||||
"toggle_show": "Visa/dölj lösenord"
|
||||
@@ -66,7 +73,12 @@
|
||||
"download": "Ladda ner etikett",
|
||||
"print": "Skriv ut etikett",
|
||||
"server_print": "Skriv ut på server",
|
||||
"titles": "Etiketter"
|
||||
"titles": "Etiketter",
|
||||
"toast": {
|
||||
"load_status_failed": "Misslyckades att ladda status",
|
||||
"print_failed": "Misslyckades att skriva etikett",
|
||||
"print_success": "Etikett utskriven"
|
||||
}
|
||||
},
|
||||
"page_qr_code": {
|
||||
"page_url": "Sidans URL",
|
||||
@@ -77,25 +89,102 @@
|
||||
}
|
||||
},
|
||||
"item": {
|
||||
"attachments_list": {
|
||||
"download": "Ladda ner",
|
||||
"open_new_tab": "Öppna i ny flik"
|
||||
},
|
||||
"create_modal": {
|
||||
"delete_photo": "Radera foto",
|
||||
"item_description": "Objektbeskrivning",
|
||||
"item_name": "Objektnamn",
|
||||
"item_photo": "Artikelfoto 📷",
|
||||
"title": "Skapa föremål",
|
||||
"upload_photos": "Ladda upp bilder"
|
||||
"item_quantity": "Artikel mängd",
|
||||
"parent_item": "Föräldrar artikel",
|
||||
"product_tooltip_input_barcode": "Fyll automatisk med manuellt inmatad streckkod",
|
||||
"product_tooltip_scan_barcode": "Auto fyll med streckkod från 📷",
|
||||
"rotate_photo": "Rotera foto",
|
||||
"set_as_primary_photo": "Sätt som { isPrimary, select, true {non-} false {} other {}} primärt foto",
|
||||
"title": "Skapa artikel",
|
||||
"toast": {
|
||||
"already_creating": "Skapar redan en artikel",
|
||||
"create_failed": "Kunde inte skapa artikel",
|
||||
"create_success": "Artikel skapad",
|
||||
"failed_load_parent": "Det gick inte att ladda det överordnade objektet - välj manuellt",
|
||||
"no_canvas_support": "Din webbläsare stödjer inte canvas",
|
||||
"please_select_location": "Välj en plats.",
|
||||
"rotate_failed": "Misslyckades rotera bild: { error }",
|
||||
"rotate_process_failed": "Misslyckades hantera roterad bild",
|
||||
"some_photos_failed": "{count, plural, =0 {Inga foton att ladda upp.} =1 {1 foto kunde inte laddas upp.} other {Vissa foton kunde inte laddas upp.}}",
|
||||
"upload_failed": "Uppladdning av foto misslyckades : { photoName }",
|
||||
"upload_success": "{count, plural, =0 {Inga foton uppladdade.} =1 {Foto uppladdat framgångsrikt.} other {Alla foton uppladdade framgångsrikt.}}",
|
||||
"uploading_photos": "{count, plural, =0 {Inga foton att ladda upp} =1 {Laddar upp 1 foto...} other {Laddar upp {count} foton...}}"
|
||||
},
|
||||
"upload_photos": "Ladda upp bilder",
|
||||
"uploaded": "Uppladdade Foton"
|
||||
},
|
||||
"product_import": {
|
||||
"barcode": "Produktens streckkod",
|
||||
"db_source": "DB källa",
|
||||
"error_exception": "Undantag inträffade vid hämtning av artikelstreckkod: ",
|
||||
"error_invalid_barcode": "Ogiltig streckkod",
|
||||
"error_not_found": "Ingen produkt hittad med angiven streckkod.",
|
||||
"search_item": "Sök produkt",
|
||||
"title": "Importera produkt"
|
||||
},
|
||||
"selector": {
|
||||
"no_results": "Inga resultat hittades",
|
||||
"placeholder": "Välj…",
|
||||
"search_placeholder": "Skriv för att söka…",
|
||||
"searching": "Söker…"
|
||||
},
|
||||
"view": {
|
||||
"change_details": {
|
||||
"add_labels": "Lägg till etiketter",
|
||||
"failed_to_update_item": "Det gick inte att uppdatera",
|
||||
"remove_labels": "Ta bort etiketter",
|
||||
"title": "Ändra artikeldetaljer"
|
||||
},
|
||||
"selectable": {
|
||||
"card": "Kort",
|
||||
"items": "Föremål",
|
||||
"no_items": "Inga föremål att visa",
|
||||
"select_all": "Välj alla",
|
||||
"select_card": "Välj kort",
|
||||
"select_row": "Välj rad",
|
||||
"table": "Tabell"
|
||||
},
|
||||
"table": {
|
||||
"dropdown": {
|
||||
"actions": "Funktioner",
|
||||
"change_labels": "Ändra etiketter",
|
||||
"change_labels_success": "Etiketter ändrade",
|
||||
"change_location": "Ändra plats",
|
||||
"change_location_success": "Plats ändrad",
|
||||
"create_maintenance_item": "Skapa underhållspost för objekt",
|
||||
"create_maintenance_selected": "Skapa underhållspost för valda objekt",
|
||||
"create_maintenance_success": "Underhållspost (er) skapade",
|
||||
"delete_confirmation": "Är du säker på att du vill ta bort de valda objekten? Denna åtgärd kan inte ångras.",
|
||||
"delete_item": "Radera objekt",
|
||||
"delete_selected": "Radera markerade objekt",
|
||||
"download_csv": "Ladda ner tabell som CSV",
|
||||
"download_json": "Ladda ner tabell som JSON",
|
||||
"duplicate_item": "Duplicera objekt",
|
||||
"duplicate_selected": "Duplicera markerade objekt",
|
||||
"error_deleting": "Fel vid radering av objekt",
|
||||
"error_duplicating": "Fel vid duplicering av objekt",
|
||||
"open_menu": "Öppna meny",
|
||||
"open_multi_tab_warning": "Av säkerhetsskäl tillåter webbläsare inte att flera flikar öppnas samtidigt som standard, följ dokumentationen för att ändra detta:",
|
||||
"toggle_expand": "Växla Expandera",
|
||||
"view_item": "Visa objekt",
|
||||
"view_items": "Visa objekt"
|
||||
},
|
||||
"headers": "Rubriker",
|
||||
"page": "Sida",
|
||||
"quick_actions": "Aktivera snabbåtgärder och val",
|
||||
"rows_per_page": "Rader per sida",
|
||||
"table_settings": "Bordsinställningar"
|
||||
"selected_rows": "{selected} av {total} rad(er) valda.",
|
||||
"table_settings": "Bordsinställningar",
|
||||
"view_item": "Visa objekt"
|
||||
}
|
||||
}
|
||||
},
|
||||
@@ -120,7 +209,12 @@
|
||||
"create_modal": {
|
||||
"location_description": "Platsbeskrivning",
|
||||
"location_name": "Platsnamn",
|
||||
"title": "Skapa plats"
|
||||
"title": "Skapa plats",
|
||||
"toast": {
|
||||
"already_creating": "Skapar redan en plats",
|
||||
"create_failed": "Det gick inte att skapa plats",
|
||||
"create_success": "Plats skapad"
|
||||
}
|
||||
},
|
||||
"selector": {
|
||||
"no_location_found": "Ingen plats hittades",
|
||||
@@ -137,6 +231,9 @@
|
||||
"shortcut_hint": "Använd siffertangenterna för att snabbt välja en åtgärd."
|
||||
}
|
||||
},
|
||||
"errors": {
|
||||
"api_failure": "Backend API-anrop misslyckades: "
|
||||
},
|
||||
"global": {
|
||||
"add": "Lägg till",
|
||||
"archived": "Arkiverad",
|
||||
@@ -145,8 +242,11 @@
|
||||
"confirm": "Godkänn",
|
||||
"create": "Skapa",
|
||||
"create_and_add": "Skapa och lägg till en till",
|
||||
"create_subitem": "Skapa underobjekt",
|
||||
"created": "Skapad",
|
||||
"delete": "Ta bort",
|
||||
"delete_confirm": "Är du säker på att du vill radera detta objekt? ",
|
||||
"demo_instance": "Detta är en demoinstans",
|
||||
"details": "Detaljer",
|
||||
"duplicate": "Duplicera",
|
||||
"edit": "Ändra",
|
||||
@@ -154,25 +254,30 @@
|
||||
"follow_dev": "Följ utvecklaren",
|
||||
"footer": {
|
||||
"api_link": "'<a href=\"https://homebox.software/en/api/\" target=\"_blank\">'API'</a>'",
|
||||
"version_link": "'<'a href=\"https://github.com/sysadminsmedia/homebox/releases/tag/{ version }\" target=\"_blank\"'>' Version: { version } Build: { build } '</a>'"
|
||||
"version_link": "'<'a href=\"https://github.com/sysadminsmedia/homebox/releases/tag/{ version }\" target=\"_blank\"'>' Version: { version } Bygge: { build } '</a>'"
|
||||
},
|
||||
"github": "GitHub-projekt",
|
||||
"insured": "Försäkrad",
|
||||
"items": "Föremål",
|
||||
"join_discord": "Gå med i Discord",
|
||||
"labels": "Etiketter",
|
||||
"loading": "Laddar…",
|
||||
"locations": "Platser",
|
||||
"maintenance": "Underhåll",
|
||||
"name": "Namn",
|
||||
"navigate": "Navigera",
|
||||
"password": "Lösenord",
|
||||
"preview": "Förhandsvisning",
|
||||
"quantity": "Kvantitet",
|
||||
"read_docs": "Läs dokumentationen",
|
||||
"return_home": "Till startsidan",
|
||||
"save": "Spara",
|
||||
"search": "Sök",
|
||||
"sign_out": "Logga ut",
|
||||
"submit": "Skicka",
|
||||
"unknown": "Okänd",
|
||||
"update": "Uppdatera",
|
||||
"updating": "Uppdaterar",
|
||||
"value": "Värde",
|
||||
"version": "Version: { version }",
|
||||
"welcome": "Välkommen, { username }"
|
||||
@@ -197,27 +302,62 @@
|
||||
"set_email": "Vad är din e-post?",
|
||||
"set_name": "Vad heter du?",
|
||||
"set_password": "Ställ in ditt lösenord",
|
||||
"tagline": "Spåra, organisera och hantera dina saker."
|
||||
"tagline": "Spåra, organisera och hantera dina saker.",
|
||||
"title": "Organisera och tagga dina saker",
|
||||
"toast": {
|
||||
"invalid_email": "Ogiltig e-postadress",
|
||||
"invalid_email_password": "Ogiltig e-post eller lösenord",
|
||||
"login_success": "Du har loggat in",
|
||||
"problem_registering": "Problem med att registrera användare",
|
||||
"user_registered": "Användare registrerad"
|
||||
}
|
||||
},
|
||||
"items": {
|
||||
"add": "Lägg till",
|
||||
"advanced": "Avancerat",
|
||||
"archived": "Arkiverad",
|
||||
"asset_id": "Tillgångs-ID",
|
||||
"associated_with_multiple": "Detta tillgångs-ID är associerat med flera objekt",
|
||||
"attachment": "Bilaga",
|
||||
"attachments": "Bilagor",
|
||||
"changes_persisted_immediately": "Ändringar av bilagor sparas omedelbart",
|
||||
"created_at": "Skapat",
|
||||
"custom_fields": "Egna fält",
|
||||
"delete_attachment_confirm": "Är du säker på att du vill radera bilagan?",
|
||||
"delete_item_confirm": "Är du säker på att du vill radera detta objekt?",
|
||||
"description": "Beskrivning",
|
||||
"details": "Detaljer",
|
||||
"drag_and_drop": "Dra och släpp här eller klicka för att välja filer",
|
||||
"duplicate": {
|
||||
"copy_attachments": "Kopiera bilagor",
|
||||
"copy_custom_fields": "Kopiera Anpassade fält",
|
||||
"copy_maintenance": "Kopiera underhåll",
|
||||
"custom_prefix": "Kopiera prefix",
|
||||
"enable_custom_prefix": "Aktivera anpassat prefix",
|
||||
"override_instructions": "Håll ned skift när du klickar på dupliceringsknappen för att åsidosätta dessa inställningar.",
|
||||
"prefix": "Kopia av ",
|
||||
"prefix_instructions": "Detta prefix kommer att läggas till i början av det duplicerade objektets namn. Inkludera ett mellanslag i slutet av prefixet för att skapa mellanrum mellan prefix och objektets namn.",
|
||||
"temporary_title": "Tillfälliga inställningar",
|
||||
"title": "Duplicera inställningar"
|
||||
},
|
||||
"edit": {
|
||||
"edit_attachment_dialog": {
|
||||
"attachment_title": "Titel på bilaga",
|
||||
"attachment_type": "Typ av bilaga",
|
||||
"primary_photo": "Primärt foto",
|
||||
"primary_photo_sub": "Detta alternativ är endast tillgängligt för foton. Endast ett foto kan vara primärt. Om du väljer detta alternativ kommer det nuvarande fotot att väljas bort.",
|
||||
"select_type": "Välj en typ",
|
||||
"title": "Redigera bilaga"
|
||||
},
|
||||
"view_image": "Visa bild"
|
||||
},
|
||||
"edit_details": "Ändra detaljer",
|
||||
"field_selector": "Fält alternativ",
|
||||
"field_value": "Fält värde",
|
||||
"first": "Första",
|
||||
"include_archive": "Inkludera arkiverade föremål",
|
||||
"insured": "Försäkrad",
|
||||
"invalid_asset_id": "Ogiltigt resurs-ID",
|
||||
"last": "Sista",
|
||||
"lifetime_warranty": "Livstidsgaranti",
|
||||
"location": "Plats",
|
||||
@@ -228,6 +368,7 @@
|
||||
"name": "Namn",
|
||||
"negate_labels": "Negera valda etiketter",
|
||||
"next_page": "Nästa sida",
|
||||
"no_attachments": "Inga bilagor hittades",
|
||||
"no_results": "Inga föremål hittades",
|
||||
"notes": "Anteckningar",
|
||||
"only_with_photo": "Endast artiklar med foto",
|
||||
@@ -249,27 +390,64 @@
|
||||
"receipts": "Kvitton",
|
||||
"reset_search": "Återställ sökning",
|
||||
"results": "{ total } Resultat",
|
||||
"select_field": "Välj ett fält",
|
||||
"serial_number": "Serienummer",
|
||||
"show_advanced_view_options": "Visa avancerade vyalternativ",
|
||||
"sold_at": "Såld den",
|
||||
"sold_details": "Försäljningsdetaljer",
|
||||
"sold_price": "Försäljningspris",
|
||||
"sold_to": "Såld till",
|
||||
"sync_child_locations": "Synkronisera underordnade objekts platser",
|
||||
"tip_1": "Platser och etiketter filter använder 'OR' funktionen. Om fler än en är valda, endast en kommer\nkrävas för en träff.",
|
||||
"tip_2": "Sökningar med prefixet '#'' kommer att fråga efter ett tillgångs-ID (exempel '#000-001')",
|
||||
"tip_3": "Fältfilter använder 'OR' funktion. Om fler än en är valda endast en kommer att bli krävande för en\nträff.",
|
||||
"tips": "Tips",
|
||||
"tips_sub": "Sök Tips",
|
||||
"toast": {
|
||||
"asset_not_found": "Tillgång hittades inte",
|
||||
"attachment_deleted": "Bilaga borttagen",
|
||||
"attachment_updated": "Bilaga uppdaterad",
|
||||
"attachment_uploaded": "Bilaga uppladdad",
|
||||
"child_items_location_no_longer_synced": "Platser för underordnade objekt synkroniseras inte längre med det här objektet.",
|
||||
"child_items_location_synced": "Platser för underordnade artiklar har synkroniserats med detta objekt",
|
||||
"child_location_desync": "Att ändra plats kommer koppla loss den från överordnad plats",
|
||||
"error_loading_parent_data": "Något gick fel när överordnade data skulle laddas",
|
||||
"failed_adjust_quantity": "Det gick inte att justera antalet",
|
||||
"failed_delete_attachment": "Det gick inte att ta bort bilagan",
|
||||
"failed_delete_item": "Det gick inte att ta bort objekt",
|
||||
"failed_duplicate_item": "Det gick inte att duplicera objektet",
|
||||
"failed_load_asset": "Det gick inte att ladda tillgången",
|
||||
"failed_load_item": "Det gick inte att ladda objektet",
|
||||
"failed_load_items": "Det gick inte att ladda objekt",
|
||||
"failed_save": "Det gick inte att spara objekt",
|
||||
"failed_save_no_location": "Det gick inte att spara objektet: ingen plats vald",
|
||||
"failed_search_items": "Det gick inte att söka objekt",
|
||||
"failed_update_attachment": "Det gick inte att uppdatera bilagan",
|
||||
"failed_upload_attachment": "Det gick inte att ladda upp bilagan",
|
||||
"item_deleted": "Objekt raderat",
|
||||
"item_saved": "Objekt spatat",
|
||||
"quantity_cannot_negative": "Antal kan inte vara negativt",
|
||||
"sync_child_location": "Valt överordnat objekt synkroniserar platsen med sitt eget. Platsen har uppdaterats."
|
||||
},
|
||||
"updated_at": "Uppdaterad",
|
||||
"warranty": "Garanti",
|
||||
"warranty_details": "Garantidetaljer",
|
||||
"warranty_expires": "Garantin upphör"
|
||||
},
|
||||
"labels": {
|
||||
"label_delete_confirm": "Är du säker på att du vill ta bort den här etiketten? Det går inte att ångra den här åtgärden.",
|
||||
"no_results": "Inga etiketter hittades",
|
||||
"toast": {
|
||||
"failed_delete_label": "Det gick inte att ta bort etiketten",
|
||||
"failed_load_label": "Det gick inte att ladda etiketten",
|
||||
"failed_update_label": "Det gick inte att uppdatera etiketten",
|
||||
"label_deleted": "Etikett raderad",
|
||||
"label_updated": "Etikett uppdaterad"
|
||||
},
|
||||
"update_label": "Uppdatera etikett"
|
||||
},
|
||||
"languages": {
|
||||
"bs-BA": "Bosniska (Bosnien och Hercegovina)",
|
||||
"ca": "Katalanska",
|
||||
"cs-CZ": "Tjeckiska",
|
||||
"de": "Tyska",
|
||||
@@ -282,6 +460,8 @@
|
||||
"it": "Italienska",
|
||||
"ja-JP": "Japanska",
|
||||
"ko-KR": "Koreanska",
|
||||
"lb-LU": "Luxemburgiska (Luxemburg)",
|
||||
"lt-LT": "Litauiska (Litauen)",
|
||||
"nb-NO": "Norska bokmål",
|
||||
"nl": "Nederländska",
|
||||
"pl": "Polska",
|
||||
@@ -294,6 +474,7 @@
|
||||
"th-TH": "Thai",
|
||||
"tr": "Turkiska",
|
||||
"uk-UA": "Ukrainska",
|
||||
"vi-VN": "Vietnamesiska",
|
||||
"zh-CN": "Kinesiska (förenklad)",
|
||||
"zh-HK": "kinesiska (Hongkong)",
|
||||
"zh-MO": "Kinesiska (Macao)",
|
||||
@@ -307,7 +488,15 @@
|
||||
"child_locations": "Underordnade platser",
|
||||
"collapse_tree": "Dra ihop träd",
|
||||
"expand_tree": "Expandera Träd",
|
||||
"location_items_delete_confirm": "Är du säker på att du vill ta bort den här platsen och alla dess objekt? Denna åtgärd kan inte ångras.",
|
||||
"no_results": "Inga platser hittades",
|
||||
"toast": {
|
||||
"failed_delete_location": "Det gick inte att ta bort platsen",
|
||||
"failed_load_location": "Det gick inte att ladda platsen",
|
||||
"failed_update_location": "Det gick inte att uppdatera platsen",
|
||||
"location_deleted": "Platsen borttagen",
|
||||
"location_updated": "Platsen uppdaterad"
|
||||
},
|
||||
"update_location": "Uppdatera plats"
|
||||
},
|
||||
"maintenance": {
|
||||
@@ -363,7 +552,10 @@
|
||||
"currency_format": "Valuta format",
|
||||
"current_password": "Nuvarande lösenord",
|
||||
"delete_account": "Radera konto",
|
||||
"delete_account_confirm": "Är du säker på att du vill radera ditt konto? Om du är den sista medlemmen i din grupp kommer all dina data att raderas. Detta kan inte ångras.",
|
||||
"delete_account_sub": "Ta bort ditt konto och alla tillhörande data. Detta kan inte ångras.",
|
||||
"delete_notifier_confirm": "Är du säker på att du vill ta bort denna notifiering?",
|
||||
"display_legacy_header": "{ currentValue, select, true {Inaktivera äldre sidhuvud} false {Aktivera äldre sidhuvud} other {Inte träff}}",
|
||||
"enabled": "Aktiverad",
|
||||
"example": "Exempel",
|
||||
"gen_invite": "Skapa inbjudningslänk",
|
||||
@@ -371,24 +563,75 @@
|
||||
"group_settings_sub": "Inställningar för delad grupp. Du kan behöva uppdatera din webbläsare för att vissa inställningar ska gälla.",
|
||||
"inactive": "Inaktiv",
|
||||
"language": "Språk",
|
||||
"legacy_image_fit": "{ currentValue, select, true {Inaktivera äldre passform: Anpassa bild med staplar} false {Aktivera äldre passform: Fyll bild med beskärning} other {Inte träff}}",
|
||||
"new_password": "Nytt lösenord",
|
||||
"no_notifiers": "Inga notifierare konfigurerade",
|
||||
"no_override": "Ingen åsidosättning",
|
||||
"notifier_modal": "{ type, select, true {Edit} false {Create} other {Other}} Anmälare",
|
||||
"notifiers": "Notiser",
|
||||
"notifiers_sub": "Få aviseringar om kommande underhållspåminnelser",
|
||||
"override_locale": "Åsidosätt datum och valutaspråk",
|
||||
"test": "Test",
|
||||
"theme_settings": "Temainställningar",
|
||||
"theme_settings_sub": "Temainställningar sparas i din webbläsares lokala lagring. Du kan ändra tema när du vill. Om du\nhar problem att ställa in tema, pröva att ladda om din webbläsare.",
|
||||
"toast": {
|
||||
"account_deleted": "Ditt konto har raderats.",
|
||||
"failed_change_password": "Misslyckades ändra lösenord.",
|
||||
"failed_create_notifier": "Det gick inte att skapa avisering.",
|
||||
"failed_delete_account": "Det gick inte att ta bort ditt konto.",
|
||||
"failed_delete_notifier": "Det gick inte att ta bort notifiering.",
|
||||
"failed_get_currencies": "Kunde inte hämta valutor",
|
||||
"failed_test_notifier": "Det gick inte att testa notifieringen.",
|
||||
"failed_update_group": "Misslyckades med att uppdatera grupp",
|
||||
"failed_update_notifier": "Det gick inte att uppdatera notifieringen.",
|
||||
"group_updated": "Grupp uppdaterad",
|
||||
"notifier_test_success": "Aviseringstestet lyckades.",
|
||||
"password_changed": "Lösenordsbytet genomfört."
|
||||
},
|
||||
"update_group": "Uppdatera grupp",
|
||||
"update_language": "Uppdatera språk",
|
||||
"url": "URL",
|
||||
"user_profile": "Användarprofil",
|
||||
"user_profile_sub": "Bjud in användare och hantera ditt konto."
|
||||
},
|
||||
"reports": {
|
||||
"label_generator": {
|
||||
"asset_end": "Tillgångens slutdatum",
|
||||
"asset_start": "Tillgångens start",
|
||||
"base_url": "Bas-URL",
|
||||
"bordered_labels": "Inramade etiketter",
|
||||
"generate_page": "Generera sida",
|
||||
"input_placeholder": "Skriv här",
|
||||
"instruction_1": "Homebox Label Generator är ett verktyg som hjälper dig att skriva ut etiketter för ditt Homebox-inventering. Dessa är skapade\nför att skrivas ut i förväg så att de är redo att användas",
|
||||
"instruction_2": "Dessa etiketter fungerar då så att en QR-kod med en URL och ett objekt-ID skrivs ut på etiketten. Om du har stängt av\nObjekt-ID i dina Homebox.inställningar kan du fortfarande använda verktyget men då kommer Objekt-ID:t inte att hänvisa till något objekt",
|
||||
"instruction_3": "Den här funktionen befinner sig i ett tidigt utvecklingsstadium och kan komma att ändras i framtida versioner. Om du har feedback, vänligen\n ange den i<a href=\"https://github.com/sysadminsmedia/homebox/discussions/53\">'GitHub-diskussionen'</a>\"",
|
||||
"label_height": "Etiketthöjd",
|
||||
"label_width": "Etikettbredd",
|
||||
"measure_type": "Måttyp",
|
||||
"page_bottom_padding": "Utfyllnad i sidans botten",
|
||||
"page_height": "Sidhöjd",
|
||||
"page_left_padding": "Sidans vänstra utfyllnad",
|
||||
"page_right_padding": "Sidans högra utfyllnad",
|
||||
"page_top_padding": "Sidans övre utfyllnad",
|
||||
"page_width": "Sidbredd",
|
||||
"qr_code_example": "QR-kod exempel",
|
||||
"tip_1": "Standardvärdena här är inställda för\n'<a href=\"https://www.avery.com/templates/5260\">'Avery 5260-etikettark'</a>'. Om du använder andra ark\nbehöver du ändra inställningarna för att matcha ditt ark.",
|
||||
"tip_2": "Om du anpassar ditt ark är dimensionerna i tum. När vi skapade 5260-arket upptäckte vi\natt dimensionerna i deras dokument inte stämde överens med vad som krävdes för att skriva ut innanför boxen.\n'<b>'Var beredd på att försöka flera gånger.'</b>'",
|
||||
"tip_3": "När du skriver ut, se till att:\n '<ol><li>'Ställa in marginalerna till 0 eller Ingen'</li><li>'Ställ in skalningen på 100%'</li><li>'Inaktivera dubbelsidig utskrift'</li><li>'Skriv ut en testsida innan du skriver ut flera sidor'</li></ol>'",
|
||||
"tips": "Tips",
|
||||
"title": "Etikett Generator",
|
||||
"toast": {
|
||||
"page_too_small_card": "Sidstorleken är för liten för kortstorleken"
|
||||
}
|
||||
}
|
||||
},
|
||||
"scanner": {
|
||||
"barcode_detected_message": "produktstreckkod upptäckt",
|
||||
"barcode_fetch_data": "Hämta produktdata",
|
||||
"error": "Ett fel uppstod vid skanning",
|
||||
"invalid_url": "Ogiltig streckkods-URL",
|
||||
"no_sources": "Inga videokällor tillgängliga",
|
||||
"permission_denied": "Kameratillstånd nekas, vänligen tillåt åtkomst till kameran i din webbläsares inställningar",
|
||||
"select_video_source": "Välj en videokälla",
|
||||
"title": "Skanner",
|
||||
"unsupported": "Media Stream API stöds inte utan HTTPS"
|
||||
@@ -396,17 +639,24 @@
|
||||
"tools": {
|
||||
"actions": "Lageråtgärder",
|
||||
"actions_set": {
|
||||
"create_missing_thumbnails": "Skapa saknade miniatyrer",
|
||||
"create_missing_thumbnails_button": "Skapa miniatyrer",
|
||||
"create_missing_thumbnails_confirm": "Är du säker på att du vill skapa saknade miniatyrer? Detta kan ta en stund och kan inte pausas.",
|
||||
"create_missing_thumbnails_sub": "Skapar miniatyrer för alla bilagor som stöds av den aktuella konfigurationen. Detta är användbart för bilagor som laddades upp före version v0.20.0 av Homebox. Detta kommer ej skriva över existerande miniatyrer utan bara skapa nya för bilagor som saknar miniatyr. Notera att bilagor skapas i bakgrunden och att det kan ta en stund att göra klart.",
|
||||
"ensure_ids": "Säkerställ tillgångs-ID",
|
||||
"ensure_ids_button": "Säkerställ tillgångs-ID",
|
||||
"ensure_ids_confirm": "Är du säker på att du vill se till att alla tillgångar har ett ID? Detta kan ta en stund och kan inte ångras.",
|
||||
"ensure_ids_sub": "Säkerställer att alla saker i din inventering har giltiga asset_id fält. Detta är gjort genom att hitta högsta nuvarande asset_id fält i databasen och tilldela nästa värde till varje sak som inte har ett asset_id värde. Detta görs i ordning av created_at fältet.",
|
||||
"ensure_import_refs": "Se till att importera referenser",
|
||||
"ensure_import_refs_button": "Se till att importera referenser",
|
||||
"ensure_import_refs_sub": "Säkerställer att alla saker i din inventering har ett korrekt import_ref fält. Detta görs genom att slumpmässigt skapa en 8 tecken sträng för varje sak som ej har import_ref fältet tilldelat.",
|
||||
"set_primary_photo": "Ställ in primärt foto",
|
||||
"set_primary_photo_button": "Ställ in primärt foto",
|
||||
"set_primary_photo_confirm": "Är du säker på att du vill ställa in primära foton? Detta kan ta en stund och kan inte ångras.",
|
||||
"set_primary_photo_sub": "I version v0.10.0 av Homebox lades det primära bildfältet till i bilagor av typen foto. Denna åtgärd kommer att sätta primära bild fältet till den första bilden i bifigade filer listan i databasen, om inte det redan är åtgärdat. '<a class=\"link\" href=\"https://github.com/hay-kot/homebox/pull/576\">'Se GitHub PR #576'</a>'",
|
||||
"zero_datetimes": "Noll objekt datumtider",
|
||||
"zero_datetimes_button": "Noll objekt datumtider",
|
||||
"zero_datetimes_confirm": "Är du säker på att du vill återställa alla datum- och tidsvärden? Detta kan ta en stund och kan inte ångras.",
|
||||
"zero_datetimes_sub": "Återstället tidsvärdet för alla datumtidsfält i ditt lager till början av datumet. Detta är för att fixa en bugg som upptäcktes tidigare i utvecklingen på sidan som orsakade tidsvärden att bli sparade med tid, vilket orsakade problem med datum fält att visa korrekta värden. '<a class=\"link\" href=\"https://github.com/hay-kot/homebox/issues/236\" target=\"_blank\">'Se Github Issue #236 för mer information.'</a>'"
|
||||
},
|
||||
"actions_sub": "Utför åtgärder på dina objekt i bulk. Dessa är oåterkalleliga. '<b>'Var försiktig.'</b>'",
|
||||
@@ -417,6 +667,7 @@
|
||||
"export_sub": "Exporterar standard CSV format för Homebox. Detta kommer exportera alla saker i ditt lager.",
|
||||
"import": "Importera lager",
|
||||
"import_button": "Importera Lager",
|
||||
"import_ref_confirm": "Är du säker på att du vill se till att alla tillgångar har en import_ref? Detta kan ta en stund och kan inte ångras.",
|
||||
"import_sub": "Importerar standard CSV format för Homebox. Utan en '<code>'HB.import_ref'</code>' kolumn, detta kommer '<b>'inte'</b>' att skriva över existerande saker i ditt lager, endast lägga till nya. Rader med en '<code>'HB.import_ref'</code>' kolumn blir sammanfogade i existerande saker med samma import_ref, om det existerar."
|
||||
},
|
||||
"import_export_sub": "Importera och exportera ditt lager till och från en CSV-fil. Detta är användbart för att migrera din inventering till en ny instans av Homebox.",
|
||||
@@ -424,11 +675,19 @@
|
||||
"reports_set": {
|
||||
"asset_labels": "Tillgångs-ID-etiketter",
|
||||
"asset_labels_button": "Etikett Generator",
|
||||
"asset_labels_sub": "Genererar en utskrivbar PDF med etiketter för en rad tillgångs-ID. Dessa är inte specifik till ditt lager så du kan skriva ut dessa i förväg och lägga till dom till ditt lager när du får dom.",
|
||||
"asset_labels_sub": "Skapar en utskrivbar PDF med etiketter för en rad tillgångs-ID. Dessa är inte specifikt bundna till ditt lager, varför du kan skriva ut etiketterna i förväg och använda dem i ditt lager i ett senare skede.",
|
||||
"bill_of_materials": "Materialförteckning",
|
||||
"bill_of_materials_button": "Skapa materialförteckning",
|
||||
"bill_of_materials_sub": "Genererar en CSV-fil (kommaseparerade värden) som kan importeras till ett kalkylprogram. Detta är en summering av ditt lager med grund saker och pris information."
|
||||
},
|
||||
"reports_sub": "Generera olika rapporter för ditt lager."
|
||||
"reports_sub": "Generera olika rapporter för ditt lager.",
|
||||
"toast": {
|
||||
"asset_success": "{ results } objekt har uppdaterats.",
|
||||
"failed_create_missing_thumbnails": "Det gick inte att skapa saknade miniatyrer.",
|
||||
"failed_ensure_ids": "Det gick inte att säkerställa tillgångs-ID.",
|
||||
"failed_ensure_import_refs": "Det gick inte att säkerställa importreferenser.",
|
||||
"failed_set_primary_photos": "Det gick inte att ställa in primära foton.",
|
||||
"failed_zero_datetimes": "Det gick inte att återställa datum- och tidsvärden."
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
15
frontend/locales/te-IN.json
Normal file
15
frontend/locales/te-IN.json
Normal file
@@ -0,0 +1,15 @@
|
||||
{
|
||||
"components": {
|
||||
"color_selector": {
|
||||
"color": "రంగు",
|
||||
"no_color_selected": "ఏ రంగునూ ఎంచుకోలేదు"
|
||||
},
|
||||
"global": {
|
||||
"copy_text": {
|
||||
"documentation": "విషయ వ్యక్తీకరణ",
|
||||
"failed_to_copy": "వచనాన్ని క్లిప్ బోర్డ్ కు కాపీ చేయడంలో విఫలమైంది",
|
||||
"https_required": "ఎందుకంటే HTTPS అవసరం"
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -1,19 +1,41 @@
|
||||
{
|
||||
"components": {
|
||||
"app": {
|
||||
"create_modal": {
|
||||
"createAndAddAnother": "กด {shiftKey} + {enterKey} เพื่อบันทึกและสร้างรายการใหม่",
|
||||
"enter": "Enter",
|
||||
"shift": "Shift"
|
||||
},
|
||||
"import_dialog": {
|
||||
"change_warning": "พฤติกรรมการนำเข้าสำหรับรายการที่มี import_ref อยู่แล้วมีการเปลี่ยนแปลง หากมี import_ref ในไฟล์ CSV\nรายการนั้นจะได้รับการอัปเดตด้วยค่าต่างๆ ที่อยู่ในไฟล์ CSV",
|
||||
"description": "นำเข้าไฟล์ CSV ที่มีรายการ ป้ายกำกับ และตำแหน่งที่ตั้งของคุณ โปรดดูเอกสารสำหรับข้อมูลเพิ่มเติม\nเกี่ยวกับรูปแบบที่จำเป็น",
|
||||
"title": "นำเข้า CSV"
|
||||
"title": "นำเข้า CSV",
|
||||
"toast": {
|
||||
"import_failed": "มีข้อผิดพลาดระหว่างนำเข้า โปรดลองอีกครั้ง",
|
||||
"import_success": "นำเข้าเสร็จสมบูรณ์",
|
||||
"please_select_file": "เลือกไฟล์ที่ต้องการนำเข้า"
|
||||
}
|
||||
},
|
||||
"outdated": {
|
||||
"current_version": "เวอร์ชั่นปัจจุบัน",
|
||||
"dismiss": "ยกเลิก",
|
||||
"latest_version": "เวอร์ชั่นล่าสุด",
|
||||
"new_version_available": "มีเวอร์ชั่นพร้อมใช้งาน",
|
||||
"new_version_available": "มีเวอร์ชั่นใหม่พร้อมใช้งาน",
|
||||
"new_version_available_link": "กดที่นี่เพื่อดู Release notes"
|
||||
}
|
||||
},
|
||||
"color_selector": {
|
||||
"clear": "ล้างสีออก",
|
||||
"color": "สี",
|
||||
"no_color": "ไม่มีสี",
|
||||
"no_color_selected": "ไม่มีการเลือกสี",
|
||||
"randomize": "สุ่มสี"
|
||||
},
|
||||
"form": {
|
||||
"password": {
|
||||
"toggle_show": "เปิด/ปิดการแสดงรหัสผ่าน"
|
||||
}
|
||||
},
|
||||
"global": {
|
||||
"copy_text": {
|
||||
"documentation": "คู่มือการใช้งาน",
|
||||
@@ -47,16 +69,36 @@
|
||||
},
|
||||
"label_maker": {
|
||||
"browser_print": "พิมพ์จากเบราว์เซอร์",
|
||||
"confirm_description": "คุณแน่ใจหรือไม่ว่าต้องการพิมพ์ป้ายกำกับนี้?"
|
||||
"confirm_description": "คุณแน่ใจหรือไม่ว่าต้องการพิมพ์ป้ายกำกับนี้?",
|
||||
"download": "ดาวน์โหลดฉลาก",
|
||||
"print": "พิมพ์ฉลาก",
|
||||
"server_print": "พิมพ์บนเซิร์ฟเวอร์",
|
||||
"titles": "ฉลาก",
|
||||
"toast": {
|
||||
"load_status_failed": "โหลดสถานะไม่สำเร็จ",
|
||||
"print_failed": "พิมพ์ฉลากไม่สำเร็จ",
|
||||
"print_success": "พิมพ์ฉลากแล้ว"
|
||||
}
|
||||
},
|
||||
"page_qr_code": {
|
||||
"page_url": "ลิงก์ของหน้า",
|
||||
"qr_tooltip": "แสดงคิวอาร์โค้ด"
|
||||
},
|
||||
"password_score": {
|
||||
"password_strength": "ความแข็งแกร่งของรหัสผ่าน"
|
||||
}
|
||||
},
|
||||
"item": {
|
||||
"attachments_list": {
|
||||
"download": "ดาวน์โหลด",
|
||||
"open_new_tab": "เปิดในแท็บใหม่"
|
||||
},
|
||||
"create_modal": {
|
||||
"delete_photo": "ลบรูปภาพ",
|
||||
"item_description": "รายละเอียดรายการ",
|
||||
"item_name": "ชื่อรายการ"
|
||||
"item_name": "ชื่อรายการ",
|
||||
"item_photo": "ภาพถ่ายสิ่งของ 📷",
|
||||
"item_quantity": "จำนวนสิ่งของ"
|
||||
},
|
||||
"view": {
|
||||
"table": {
|
||||
@@ -66,7 +108,7 @@
|
||||
},
|
||||
"location": {
|
||||
"tree": {
|
||||
"no_locations": "ไม่มีตำแหน่งที่ตั้ง โปรดเพิ่มตำแหน่งที่ตั้งใหม่โดยคลิกปุ่ม\n`<`span class=\"link-primary\"`>`สร้าง`<`/span`>`บนแถบนำทาง"
|
||||
"no_locations": "ไม่มีตำแหน่งที่ตั้ง โปรดเพิ่มตำแหน่งที่ตั้งใหม่โดยคลิกปุ่ม\n'<span class=\"link-primary\">'สร้าง'</span>'บนแถบนำทาง"
|
||||
}
|
||||
},
|
||||
"quick_menu": {
|
||||
|
||||
@@ -100,13 +100,15 @@
|
||||
"item_photo": "Öğe Fotoğrafı 📷",
|
||||
"item_quantity": "Öğe Miktarı",
|
||||
"parent_item": "Ana Öğe",
|
||||
"product_tooltip_input_barcode": "Elle girilen barkod ile otomatik doldur",
|
||||
"product_tooltip_scan_barcode": "Fotoğrafdaki barkod ile doldur",
|
||||
"rotate_photo": "Fotoğrafı döndür",
|
||||
"set_as_primary_photo": "{isPrimary, select, true {non} false {} other {}}ana fotoğraf olarak ayarla",
|
||||
"title": "Eşya Oluştur",
|
||||
"toast": {
|
||||
"already_creating": "Zaten bir öğe oluşturuluyor",
|
||||
"create_failed": "Öğe oluşturulamadı",
|
||||
"create_success": "Öğe yaratıldı",
|
||||
"already_creating": "Zaten bir ürün oluşturuluyor",
|
||||
"create_failed": "Üürn oluşturulamadı",
|
||||
"create_success": "Ürün yaratıldı",
|
||||
"failed_load_parent": "Ana öğe yüklenemedi - lütfen elle seçin",
|
||||
"no_canvas_support": "Tarayıcınız canvas işlemlerini desteklemiyor",
|
||||
"please_select_location": "Lütfen bir konum seçin.",
|
||||
@@ -123,6 +125,7 @@
|
||||
"product_import": {
|
||||
"barcode": "Ürün barkodu",
|
||||
"db_source": "Veritabanı kaynağı",
|
||||
"error_exception": "Barkoddaki ürün bulunurken bir hata meydana geldi: ",
|
||||
"error_invalid_barcode": "Geçersiz barkod girildi",
|
||||
"error_not_found": "Girilen barkoda ait ürün bulunamadı.",
|
||||
"search_item": "Ürün ara",
|
||||
@@ -131,20 +134,57 @@
|
||||
"selector": {
|
||||
"no_results": "Sonuç Bulunamadı",
|
||||
"placeholder": "Seç…",
|
||||
"search_placeholder": "Aramak için yazın…"
|
||||
"search_placeholder": "Aramak için yazın…",
|
||||
"searching": "Aranıyor…"
|
||||
},
|
||||
"view": {
|
||||
"change_details": {
|
||||
"add_labels": "Etiket Ekle",
|
||||
"failed_to_update_item": "Ürün güncellemesi başarısız oldu",
|
||||
"remove_labels": "Etiket Sil",
|
||||
"title": "Ürün detaylarını değiştir"
|
||||
},
|
||||
"selectable": {
|
||||
"card": "Kart",
|
||||
"items": "Öğeler",
|
||||
"no_items": "Görüntülenecek Öge Yok",
|
||||
"select_all": "Hepsini Seç",
|
||||
"select_card": "Kart Seç",
|
||||
"select_row": "Satır Seç",
|
||||
"table": "Tablo"
|
||||
},
|
||||
"table": {
|
||||
"dropdown": {
|
||||
"actions": "Eylemler",
|
||||
"change_labels": "Etiket Değiştir",
|
||||
"change_labels_success": "Etiket Değişti",
|
||||
"change_location": "Bölge Değiştir",
|
||||
"change_location_success": "Bölge Değişti",
|
||||
"create_maintenance_item": "Ürün için Bakım Girişi Oluştur",
|
||||
"create_maintenance_selected": "Seçili Ürünler için Bakım Girişi Oluştur",
|
||||
"create_maintenance_success": "Bakım Girişi Oluşturuldu",
|
||||
"delete_confirmation": "Seçili ürünleri silmek istediğine emin misin? Bu işlem geri alınamaz.",
|
||||
"delete_item": "Ürünü Sil",
|
||||
"delete_selected": "Seçili Ürünleri Sil",
|
||||
"download_csv": "Tabloyu CSV Olarak İndir",
|
||||
"download_json": "Tabloyu JSON Olarak İndir",
|
||||
"duplicate_item": "Ürünü Çoğalt",
|
||||
"duplicate_selected": "Seçilen Ürünleri Çoğalt",
|
||||
"error_deleting": "Ürün Silinirken Hata Oldu",
|
||||
"error_duplicating": "Ürün Çoğaltılırken Hata Oldu",
|
||||
"open_menu": "Menüyü aç",
|
||||
"open_multi_tab_warning": "Güvenlik sebepleri nedeniyle bir browserda birden fazla sekme açılması yasak. Bunu değiştirmek için dokümantasyona bakın:",
|
||||
"toggle_expand": "Genişletmeyi Aç/Kapat",
|
||||
"view_item": "Ürünü göster",
|
||||
"view_items": "Ürünleri göster"
|
||||
},
|
||||
"headers": "Başlıklar",
|
||||
"page": "Sayfa",
|
||||
"quick_actions": "Hızlı İşlemleri ve Seçimi Etkinleştir",
|
||||
"rows_per_page": "Sayfa başına satır sayısı",
|
||||
"table_settings": "Tablo Ayarları"
|
||||
"selected_rows": "{total} satırda {selected} tanesi seçildi.",
|
||||
"table_settings": "Tablo Ayarları",
|
||||
"view_item": "Ürünü Göster"
|
||||
}
|
||||
}
|
||||
},
|
||||
@@ -227,6 +267,7 @@
|
||||
"name": "İsim",
|
||||
"navigate": "Gezin",
|
||||
"password": "Şifre",
|
||||
"preview": "Önizleme",
|
||||
"quantity": "Miktar",
|
||||
"read_docs": "Dokümanları okuyun",
|
||||
"return_home": "Anasayfaya Dön",
|
||||
@@ -287,6 +328,18 @@
|
||||
"description": "Açıklama",
|
||||
"details": "Detaylar",
|
||||
"drag_and_drop": "Dosyaları buraya sürükleyip bırakın veya dosyaları seçmek için tıklayın",
|
||||
"duplicate": {
|
||||
"copy_attachments": "Eklentileri Kopyala",
|
||||
"copy_custom_fields": "Özel Alanları Kopyala",
|
||||
"copy_maintenance": "Kopyalama Bakımı",
|
||||
"custom_prefix": "Öneki Kopyala",
|
||||
"enable_custom_prefix": "Öneki etkinleştir",
|
||||
"override_instructions": "Bu ayarları görmezden gelmek için kopyasını oluştur düğmesine basarken Shifte basılı tutun.",
|
||||
"prefix": "Kopyası ",
|
||||
"prefix_instructions": "Bu ön ek kopyalanan kalemin ismine eklenecek. Ön ekin sonuna boşluk ekleyerek ön ek ile kalem ismi arasına bir boşluk ekleyebilirsin.",
|
||||
"temporary_title": "Geçici Ayarlar",
|
||||
"title": "Ayarların Kopyasını Oluştur"
|
||||
},
|
||||
"edit": {
|
||||
"edit_attachment_dialog": {
|
||||
"attachment_title": "Ek Başlığı",
|
||||
@@ -295,7 +348,8 @@
|
||||
"primary_photo_sub": "Bu seçenek yalnızca fotoğraflar için kullanılabilir. Yalnızca bir fotoğraf birincil olarak seçilebilir. Bu seçeneği seçerseniz, varsa mevcut ana fotoğraf seçili durumdan kaldırılır.",
|
||||
"select_type": "Tür seçin",
|
||||
"title": "Eki Düzenle"
|
||||
}
|
||||
},
|
||||
"view_image": "Görseli göster"
|
||||
},
|
||||
"edit_details": "Detayları Düzenle",
|
||||
"field_selector": "Alan Seçici",
|
||||
@@ -367,6 +421,7 @@
|
||||
"failed_load_items": "Öğeler yüklenemedi",
|
||||
"failed_save": "Öğe kaydedilemedi",
|
||||
"failed_save_no_location": "Öğe kaydedilemedi: konum seçilmedi",
|
||||
"failed_search_items": "Öğe aratılamadı",
|
||||
"failed_update_attachment": "Ek güncellenemedi",
|
||||
"failed_upload_attachment": "Ek yüklenemedi",
|
||||
"item_deleted": "Öğe silindi",
|
||||
@@ -391,6 +446,7 @@
|
||||
"update_label": "Etiket Güncelle"
|
||||
},
|
||||
"languages": {
|
||||
"bs-BA": "Boşnakça",
|
||||
"ca": "Katalanca",
|
||||
"cs-CZ": "Çekçe",
|
||||
"de": "Almanca",
|
||||
@@ -418,6 +474,7 @@
|
||||
"th-TH": "Tayca",
|
||||
"tr": "Türkçe",
|
||||
"uk-UA": "Ukraynaca",
|
||||
"vi-VN": "Vietnamca",
|
||||
"zh-CN": "Basitleştirilmiş Çince",
|
||||
"zh-HK": "Çince (Hong Kong)",
|
||||
"zh-MO": "Çince (Macau)",
|
||||
@@ -496,6 +553,7 @@
|
||||
"delete_account": "Hesabı Sil",
|
||||
"delete_account_confirm": "Hesabınızı silmek istediğinizden emin misiniz? Grubunuzun son üyesiyseniz tüm verileriniz silinir. Bu işlem geri alınamaz.",
|
||||
"delete_account_sub": "Hesabınızı ve ona bağlı tüm verileri silin. Bu işlem geri alınamaz.",
|
||||
"delete_notifier_confirm": "Bu uyarıcıyı silmek istediğinizden emin misiniz?",
|
||||
"display_legacy_header": "{ currentValue, select, true {Eski Başlığı Devre Dışı Bırak} false {Eski Başlığı Etkinleştir} other {Vurulmadı}}",
|
||||
"enabled": "Etkinleştirildi",
|
||||
"example": "Örnek",
|
||||
@@ -504,6 +562,7 @@
|
||||
"group_settings_sub": "Paylaşılan Grup Ayarları. Bazı ayarların uygulanabilmesi için tarayıcınızı yenilemeniz gerekebilir.",
|
||||
"inactive": "Etkin Değil",
|
||||
"language": "Dil",
|
||||
"legacy_image_fit": "{ currentValue, select, true {Eski Sığmayı Kapat: Çubuklar ile Sığdır} false {Eski Sığmayı Aç: Resmi Keserek Doldur} other {Vurulmadı}}",
|
||||
"new_password": "Yeni Şifre",
|
||||
"no_notifiers": "Yapılandırılmış bildirimci yok",
|
||||
"no_override": "Geçersiz kılma yok",
|
||||
|
||||
@@ -1,10 +1,20 @@
|
||||
{
|
||||
"components": {
|
||||
"app": {
|
||||
"create_modal": {
|
||||
"createAndAddAnother": "Використовуйте {shiftKey} + {enterKey}, щоб створити та додати ще один.",
|
||||
"enter": "Enter",
|
||||
"shift": "Shift"
|
||||
},
|
||||
"import_dialog": {
|
||||
"change_warning": "Поведінка для імпорту з існуючим параметром import_refs змінилася. Якщо цей параметр присутній у CSV файлі, \nпредмет буде оновлений значеннями з CSV.",
|
||||
"description": "Імпортувати CSV файл з предметами, мітками і локаціями. Зверніться до документації за\nдодатковою інформацією по формату.",
|
||||
"title": "Імпортувати .CSV"
|
||||
"title": "Імпортувати .CSV",
|
||||
"toast": {
|
||||
"import_failed": "Помилка імпорту. Будь ласка, спробуйте пізніше.",
|
||||
"import_success": "Імпортовано успішно!",
|
||||
"please_select_file": "Будь ласка, виберіть файл для імпорту."
|
||||
}
|
||||
},
|
||||
"outdated": {
|
||||
"current_version": "Поточна версія",
|
||||
@@ -14,6 +24,18 @@
|
||||
"new_version_available_link": "Натисніть тут, щоб переглянути примітки до випуску"
|
||||
}
|
||||
},
|
||||
"color_selector": {
|
||||
"clear": "Очистити колір",
|
||||
"color": "Колір",
|
||||
"no_color": "Без коліру",
|
||||
"no_color_selected": "Колір не вибрано",
|
||||
"randomize": "Випадковий колір"
|
||||
},
|
||||
"form": {
|
||||
"password": {
|
||||
"toggle_show": "Показати/приховати пароль"
|
||||
}
|
||||
},
|
||||
"global": {
|
||||
"copy_text": {
|
||||
"documentation": "документація",
|
||||
@@ -51,7 +73,12 @@
|
||||
"download": "Завантажити ярлик",
|
||||
"print": "Друкована етикетка",
|
||||
"server_print": "Друк на сервері",
|
||||
"titles": "Етикетка"
|
||||
"titles": "Етикетка",
|
||||
"toast": {
|
||||
"load_status_failed": "Не вдалося завантажити статус",
|
||||
"print_failed": "Не вдалося роздрукувати етикетку",
|
||||
"print_success": "Етикетку роздруковано"
|
||||
}
|
||||
},
|
||||
"page_qr_code": {
|
||||
"page_url": "URL сторінки",
|
||||
@@ -62,13 +89,45 @@
|
||||
}
|
||||
},
|
||||
"item": {
|
||||
"attachments_list": {
|
||||
"download": "Завантажити",
|
||||
"open_new_tab": "Відкрити у новій вкладці"
|
||||
},
|
||||
"create_modal": {
|
||||
"delete_photo": "Видалити фото",
|
||||
"item_description": "Опис елемента",
|
||||
"item_name": "Назва елемента",
|
||||
"item_photo": "Фотографія товару 📷",
|
||||
"item_quantity": "Кількість товару",
|
||||
"parent_item": "Батьківський елемент",
|
||||
"product_tooltip_input_barcode": "Автозаповнення за введеним штрих-кодом",
|
||||
"product_tooltip_scan_barcode": "Автозаповнити за штрих-кодом з 📷",
|
||||
"rotate_photo": "Повернути фото",
|
||||
"set_as_primary_photo": "Встановити { isPrimary, select, true {non-} false {} other {}}основним фотом",
|
||||
"title": "Додати предмет",
|
||||
"upload_photos": "Завантажувати фотографії"
|
||||
"toast": {
|
||||
"already_creating": "Елемент вже створюється",
|
||||
"create_failed": "Не вдалося створили елемент",
|
||||
"create_success": "Елемент створено",
|
||||
"failed_load_parent": "Не вдалося завантажити батьківський елемент - будь ласка, виберіть вручну",
|
||||
"no_canvas_support": "Ваш браузер не підтримує операції з canvas",
|
||||
"please_select_location": "Виберіть місцезнаходження.",
|
||||
"rotate_failed": "Не вдалося повернути зображення: { error }",
|
||||
"rotate_process_failed": "Не вдалося обробити повернуте зображення",
|
||||
"upload_failed": "Не вдалося завантажити фото: { photoName }",
|
||||
"uploading_photos": "{count, plural, =0 {Фото не завантажене} =1 {Завантажене 1 фото…} other {Завантажено {count} фото…}}"
|
||||
},
|
||||
"upload_photos": "Завантажувати фотографії",
|
||||
"uploaded": "Фотографію завантажено"
|
||||
},
|
||||
"product_import": {
|
||||
"barcode": "Штрихкод продукту",
|
||||
"db_source": "Джерело БД",
|
||||
"error_exception": "Виникла помилка під час отримання штрихкоду товару: ",
|
||||
"error_invalid_barcode": "Надано недійсний штрихкод",
|
||||
"error_not_found": "Не знайдено продукту з наданим штрихкодом.",
|
||||
"search_item": "Пошук продукту",
|
||||
"title": "Імпорт продукту"
|
||||
},
|
||||
"view": {
|
||||
"selectable": {
|
||||
@@ -108,7 +167,7 @@
|
||||
"select_location": "Виберіть місце розташування"
|
||||
},
|
||||
"tree": {
|
||||
"no_locations": "Локації відсутні. Додайте нову за допомогою \n<`span class=\"link-primary\"`>`Створити`<`/span`>` клавіші ліворуч."
|
||||
"no_locations": "Локації відсутні. Додайте нову за допомогою \n'<span class=\"link-primary\">'Створити'</span>' клавіші ліворуч."
|
||||
}
|
||||
},
|
||||
"quick_menu": {
|
||||
|
||||
@@ -138,16 +138,51 @@
|
||||
"searching": "搜索中…"
|
||||
},
|
||||
"view": {
|
||||
"change_details": {
|
||||
"add_labels": "添加标签",
|
||||
"failed_to_update_item": "更新项目失败",
|
||||
"remove_labels": "删除标签",
|
||||
"title": "更改项目详细信息"
|
||||
},
|
||||
"selectable": {
|
||||
"card": "卡片模式",
|
||||
"items": "物品",
|
||||
"no_items": "没有可展示的物品",
|
||||
"select_all": "全选",
|
||||
"select_card": "选定卡片",
|
||||
"select_row": "选定行",
|
||||
"table": "表格模式"
|
||||
},
|
||||
"table": {
|
||||
"dropdown": {
|
||||
"actions": "动作",
|
||||
"change_labels": "更改标签",
|
||||
"change_labels_success": "标签已更改",
|
||||
"change_location": "更改位置",
|
||||
"change_location_success": "位置已更改",
|
||||
"create_maintenance_item": "为物品创建维护项目",
|
||||
"create_maintenance_selected": "为所选物品创建维护项目",
|
||||
"create_maintenance_success": "已创建维护项目",
|
||||
"delete_confirmation": "您确定要删除所选物品吗?此操作无法撤消。",
|
||||
"delete_item": "删除物品",
|
||||
"delete_selected": "删除选中的物品",
|
||||
"download_csv": "下载表格(CSV格式)",
|
||||
"download_json": "下载表格(JSON格式)",
|
||||
"duplicate_item": "复制物品",
|
||||
"duplicate_selected": "复制所选物品",
|
||||
"error_deleting": "删除物品出错",
|
||||
"error_duplicating": "复制物品出错",
|
||||
"open_menu": "打开菜单",
|
||||
"open_multi_tab_warning": "出于安全原因,默认情况下浏览器不允许一次打开多个选项卡,要更改此设置,请按照文档进行操作:",
|
||||
"toggle_expand": "展开/折叠",
|
||||
"view_item": "查看物品",
|
||||
"view_items": "查看物品"
|
||||
},
|
||||
"headers": "页眉",
|
||||
"page": "页",
|
||||
"quick_actions": "启用 快速操作&选择",
|
||||
"rows_per_page": "每页行数",
|
||||
"selected_rows": "{selected} / {total} 行被选中。",
|
||||
"table_settings": "表格设置",
|
||||
"view_item": "查看项目"
|
||||
}
|
||||
@@ -232,6 +267,7 @@
|
||||
"name": "名称",
|
||||
"navigate": "导航",
|
||||
"password": "密码",
|
||||
"preview": "预览",
|
||||
"quantity": "数量",
|
||||
"read_docs": "查阅文档",
|
||||
"return_home": "回到主页",
|
||||
@@ -292,6 +328,18 @@
|
||||
"description": "说明",
|
||||
"details": "详情",
|
||||
"drag_and_drop": "将文件拖拽到此或点击添加文件",
|
||||
"duplicate": {
|
||||
"copy_attachments": "复制附件",
|
||||
"copy_custom_fields": "复制自定义字段",
|
||||
"copy_maintenance": "复制维护项目",
|
||||
"custom_prefix": "复制前缀",
|
||||
"enable_custom_prefix": "启用自定义前缀",
|
||||
"override_instructions": "单击复制按钮时按住shift键以覆盖这些设置。",
|
||||
"prefix": "复制于 ",
|
||||
"prefix_instructions": "该前缀将被添加到重复物品名称的开头。前缀末尾将会加上一个空格,以便在前缀和项名称之间有空格分隔。",
|
||||
"temporary_title": "临时设置",
|
||||
"title": "复制设置"
|
||||
},
|
||||
"edit": {
|
||||
"edit_attachment_dialog": {
|
||||
"attachment_title": "附件标题",
|
||||
@@ -300,7 +348,8 @@
|
||||
"primary_photo_sub": "此项仅适用于照片。只有一张可以设为封面。如果选择此选项,若有,则当前封面将被替换。",
|
||||
"select_type": "选择类型",
|
||||
"title": "附件编辑"
|
||||
}
|
||||
},
|
||||
"view_image": "查看图片"
|
||||
},
|
||||
"edit_details": "编辑详情",
|
||||
"field_selector": "字段选择",
|
||||
@@ -398,6 +447,7 @@
|
||||
"update_label": "更新标签"
|
||||
},
|
||||
"languages": {
|
||||
"bs-BA": "波斯尼亚语(波斯尼亚和黑塞哥维那)",
|
||||
"ca": "加泰罗尼亚语",
|
||||
"cs-CZ": "捷克语",
|
||||
"de": "德语",
|
||||
@@ -425,6 +475,7 @@
|
||||
"th-TH": "泰语",
|
||||
"tr": "土耳其语",
|
||||
"uk-UA": "乌克兰语",
|
||||
"vi-VN": "越南语",
|
||||
"zh-CN": "中文(简体)",
|
||||
"zh-HK": "中文(香港)",
|
||||
"zh-MO": "中文(澳门)",
|
||||
@@ -512,6 +563,7 @@
|
||||
"group_settings_sub": "共享组设置。您可能需要刷新浏览器来让某些设置生效。",
|
||||
"inactive": "未启用",
|
||||
"language": "语言",
|
||||
"legacy_image_fit": "{currentValue, select, true {禁用旧版适合:适合条形码的图像} false {启用旧版适合:裁剪以图像} other {未命中}}",
|
||||
"new_password": "新密码",
|
||||
"no_notifiers": "尚未配置通知器",
|
||||
"no_override": "没有预算",
|
||||
|
||||
@@ -19,13 +19,13 @@
|
||||
"@faker-js/faker": "^10.1.0",
|
||||
"@iconify-json/mdi": "^1.2.3",
|
||||
"@intlify/unplugin-vue-i18n": "^6.0.8",
|
||||
"@nuxt/eslint": "^1.11.0",
|
||||
"@nuxt/eslint": "^1.12.1",
|
||||
"@playwright/test": "^1.57.0",
|
||||
"@types/markdown-it": "^14.1.2",
|
||||
"@types/semver": "^7.7.1",
|
||||
"@vite-pwa/nuxt": "^1.1.0",
|
||||
"@vue/runtime-core": "^3.5.25",
|
||||
"eslint": "^9.39.1",
|
||||
"@vue/runtime-core": "^3.5.26",
|
||||
"eslint": "^9.39.2",
|
||||
"eslint-config-prettier": "^10.1.8",
|
||||
"eslint-plugin-prettier": "^5.5.4",
|
||||
"eslint-plugin-tailwindcss": "^3.18.2",
|
||||
@@ -40,7 +40,7 @@
|
||||
"unplugin-icons": "^22.5.0",
|
||||
"vite-plugin-eslint": "^1.8.1",
|
||||
"vitest": "^3.2.4",
|
||||
"vue-i18n": "^11.2.2",
|
||||
"vue-i18n": "^11.2.7",
|
||||
"vue-tsc": "3.0.6"
|
||||
},
|
||||
"dependencies": {
|
||||
@@ -49,7 +49,7 @@
|
||||
"@nuxtjs/tailwindcss": "^6.14.0",
|
||||
"@pinia/nuxt": "^0.11.3",
|
||||
"@tailwindcss/aspect-ratio": "^0.4.2",
|
||||
"@tailwindcss/forms": "^0.5.10",
|
||||
"@tailwindcss/forms": "^0.5.11",
|
||||
"@tailwindcss/typography": "^0.5.19",
|
||||
"@tanstack/vue-table": "^8.21.3",
|
||||
"@vuepic/vue-datepicker": "^11.0.3",
|
||||
@@ -57,11 +57,11 @@
|
||||
"@vueuse/nuxt": "^13.9.0",
|
||||
"@vueuse/router": "^13.9.0",
|
||||
"@zxing/library": "^0.21.3",
|
||||
"autoprefixer": "^10.4.22",
|
||||
"autoprefixer": "^10.4.23",
|
||||
"class-variance-authority": "^0.7.1",
|
||||
"clsx": "^2.1.1",
|
||||
"date-fns": "^4.1.0",
|
||||
"dompurify": "^3.3.0",
|
||||
"dompurify": "^3.3.1",
|
||||
"fuzzysort": "^3.1.0",
|
||||
"h3": "^1.15.4",
|
||||
"http-proxy": "^1.18.1",
|
||||
@@ -69,15 +69,15 @@
|
||||
"markdown-it": "^14.1.0",
|
||||
"pinia": "^3.0.4",
|
||||
"postcss": "^8.5.6",
|
||||
"reka-ui": "^2.6.1",
|
||||
"reka-ui": "^2.7.0",
|
||||
"semver": "^7.7.3",
|
||||
"tailwind-merge": "^3.4.0",
|
||||
"tailwindcss": "^3.4.18",
|
||||
"tailwindcss": "^3.4.19",
|
||||
"tailwindcss-animate": "^1.0.7",
|
||||
"vaul-vue": "^0.4.1",
|
||||
"vite": "^7.2.6",
|
||||
"vite": "^7.3.0",
|
||||
"vue": "3.5.20",
|
||||
"vue-router": "^4.6.3",
|
||||
"vue-router": "^4.6.4",
|
||||
"vue-sonner": "^2.0.9"
|
||||
}
|
||||
}
|
||||
|
||||
@@ -98,7 +98,7 @@
|
||||
|
||||
const saving = ref(false);
|
||||
|
||||
async function saveItem() {
|
||||
async function saveItem(redirect: boolean) {
|
||||
if (!item.value.location?.id) {
|
||||
toast.error(t("items.toast.failed_save_no_location"));
|
||||
return;
|
||||
@@ -139,7 +139,9 @@
|
||||
}
|
||||
|
||||
toast.success(t("items.toast.item_saved"));
|
||||
navigateTo("/item/" + itemId.value);
|
||||
if (redirect) {
|
||||
navigateTo("/item/" + itemId.value);
|
||||
}
|
||||
}
|
||||
|
||||
type NonNullableStringKeys<T> = Extract<keyof T, keyof { [K in keyof T as T[K] extends string ? K : never]: any }>;
|
||||
@@ -339,6 +341,8 @@
|
||||
|
||||
toast.success(t("items.toast.attachment_uploaded"));
|
||||
|
||||
await saveItem(false);
|
||||
|
||||
item.value.attachments = data.attachments;
|
||||
}
|
||||
|
||||
@@ -432,13 +436,13 @@
|
||||
// Cmd + S
|
||||
if (e.metaKey && e.key === "s") {
|
||||
e.preventDefault();
|
||||
await saveItem();
|
||||
await saveItem(false);
|
||||
}
|
||||
|
||||
// Ctrl + S
|
||||
if (e.ctrlKey && e.key === "s") {
|
||||
e.preventDefault();
|
||||
await saveItem();
|
||||
await saveItem(false);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -573,7 +577,7 @@
|
||||
<TooltipContent>{{ $t("items.show_advanced_view_options") }}</TooltipContent>
|
||||
</Tooltip>
|
||||
</TooltipProvider>
|
||||
<Button size="sm" :disabled="saving" @click="saveItem">
|
||||
<Button size="sm" :disabled="saving" @click="saveItem(true)">
|
||||
<MdiLoading v-if="saving" class="animate-spin" />
|
||||
<MdiContentSaveOutline v-else />
|
||||
{{ $t("global.save") }}
|
||||
|
||||
@@ -119,7 +119,7 @@
|
||||
// Prepare the data with proper format for API
|
||||
const payload = {
|
||||
...updateData,
|
||||
defaultLocationId: updateData.defaultLocation?.id ?? "",
|
||||
defaultLocationId: updateData.defaultLocation?.id ?? null,
|
||||
};
|
||||
|
||||
const { error, data } = await api.templates.update(templateId.value, payload);
|
||||
|
||||
1629
frontend/pnpm-lock.yaml
generated
1629
frontend/pnpm-lock.yaml
generated
File diff suppressed because it is too large
Load Diff
@@ -17,6 +17,6 @@
|
||||
},
|
||||
"packageManager": "pnpm@9.1.4+sha512.9df9cf27c91715646c7d675d1c9c8e41f6fce88246f1318c1aa6a1ed1aeb3c4f032fcdf4ba63cc69c4fe6d634279176b5358727d8f2cc1e65b65f43ce2f8bfb0",
|
||||
"dependencies": {
|
||||
"nuxt": "^4.2.1"
|
||||
"nuxt": "^4.2.2"
|
||||
}
|
||||
}
|
||||
|
||||
1903
pnpm-lock.yaml
generated
1903
pnpm-lock.yaml
generated
File diff suppressed because it is too large
Load Diff
Reference in New Issue
Block a user