Compare commits

...

25 Commits

Author SHA1 Message Date
Matthew Kilgore
2b5d4074d3 Update to add new blob storage options 2025-07-06 14:44:16 -04:00
Matthew Kilgore
4749ce791d Merge branch 'main' into homebox-config-generator 2025-07-06 14:06:41 -04:00
Matt
d74508e214 Create .README FIRST.md 2025-07-06 08:26:40 -04:00
Weblate
178e676521 Update translation files
Updated by "Remove blank strings" add-on in Weblate.

Co-authored-by: Weblate <noreply@weblate.org>
Translate-URL: https://translate.sysadminsmedia.com/projects/homebox/frontend/
Translation: Homebox/Frontend
2025-07-06 12:14:50 +00:00
Weblate
c215373458 Translated using Weblate (Vietnamese)
Currently translated at 6.0% (30 of 492 strings)

Translated using Weblate (Slovak)

Currently translated at 100.0% (492 of 492 strings)

Co-authored-by: Ng. H. Duyên <huongduyen.work@gmail.com>
Co-authored-by: euforik <euforik22@gmail.com>
Translate-URL: https://translate.sysadminsmedia.com/projects/homebox/frontend/sk/
Translate-URL: https://translate.sysadminsmedia.com/projects/homebox/frontend/vi/
Translation: Homebox/Frontend
2025-07-05 15:00:40 +00:00
Copilot
82bceb2185 Fix HBOX_LOG_LEVEL environment variable being ignored due to backwards logic (#862)
Co-authored-by: tankerkiller125 <3457368+tankerkiller125@users.noreply.github.com>
Co-authored-by: copilot-swe-agent[bot] <198982749+Copilot@users.noreply.github.com>
2025-07-04 23:44:20 -04:00
Matt
be1f3c0ad3 Use aspect ratio when making thumbnails and fix rotation (#857) 2025-07-04 11:44:08 -04:00
Weblate
518d13ccbb Added translation using Weblate (Vietnamese)
Co-authored-by: Ng. H. Duyên <huongduyen.work@gmail.com>
2025-07-04 14:30:49 +00:00
Weblate
8bef7b236b Translated using Weblate (Czech)
Currently translated at 100.0% (492 of 492 strings)

Co-authored-by: Adam Havránek <adamhavra@seznam.cz>
Translate-URL: https://translate.sysadminsmedia.com/projects/homebox/frontend/cs/
Translation: Homebox/Frontend
2025-07-04 03:20:53 +00:00
Weblate
e774e57bee Translated using Weblate (Chinese (Simplified Han script))
Currently translated at 100.0% (492 of 492 strings)

Translated using Weblate (Chinese (Simplified Han script))

Currently translated at 100.0% (492 of 492 strings)

Translated using Weblate (Chinese (Simplified Han script))

Currently translated at 100.0% (492 of 492 strings)

Co-authored-by: MyMemory <noreply-mt-mymemory@weblate.org>
Co-authored-by: Weblate Translation Memory <noreply-mt-weblate-translation-memory@weblate.org>
Co-authored-by: xdjohn99 <jh24cd@gmail.com>
Translate-URL: https://translate.sysadminsmedia.com/projects/homebox/frontend/zh_Hans/
Translation: Homebox/Frontend
2025-07-03 01:16:22 +00:00
Weblate
d6d0d6dc56 Translated using Weblate (Chinese (Simplified Han script))
Currently translated at 94.7% (466 of 492 strings)

Translated using Weblate (Chinese (Simplified Han script))

Currently translated at 94.7% (466 of 492 strings)

Co-authored-by: MyMemory <noreply-mt-mymemory@weblate.org>
Co-authored-by: xdjohn99 <jh24cd@gmail.com>
Translate-URL: https://translate.sysadminsmedia.com/projects/homebox/frontend/zh_Hans/
Translation: Homebox/Frontend
2025-07-02 23:53:49 +00:00
Weblate
7e0ea5fee5 Translated using Weblate (Chinese (Simplified Han script))
Currently translated at 94.3% (464 of 492 strings)

Translated using Weblate (Chinese (Simplified Han script))

Currently translated at 94.3% (464 of 492 strings)

Co-authored-by: MyMemory <noreply-mt-mymemory@weblate.org>
Co-authored-by: xdjohn99 <jh24cd@gmail.com>
Translate-URL: https://translate.sysadminsmedia.com/projects/homebox/frontend/zh_Hans/
Translation: Homebox/Frontend
2025-07-02 23:50:20 +00:00
Weblate
10dcc1c01d Translated using Weblate (Chinese (Simplified Han script))
Currently translated at 92.0% (453 of 492 strings)

Translated using Weblate (Chinese (Simplified Han script))

Currently translated at 92.0% (453 of 492 strings)

Co-authored-by: MyMemory <noreply-mt-mymemory@weblate.org>
Co-authored-by: xdjohn99 <jh24cd@gmail.com>
Translate-URL: https://translate.sysadminsmedia.com/projects/homebox/frontend/zh_Hans/
Translation: Homebox/Frontend
2025-07-02 23:42:07 +00:00
Weblate
38c37111cf Translated using Weblate (Chinese (Simplified Han script))
Currently translated at 86.5% (426 of 492 strings)

Translated using Weblate (Chinese (Simplified Han script))

Currently translated at 86.5% (426 of 492 strings)

Co-authored-by: MyMemory <noreply-mt-mymemory@weblate.org>
Co-authored-by: xdjohn99 <jh24cd@gmail.com>
Translate-URL: https://translate.sysadminsmedia.com/projects/homebox/frontend/zh_Hans/
Translation: Homebox/Frontend
2025-07-02 23:21:29 +00:00
Weblate
bf27d147dd Translated using Weblate (Chinese (Simplified Han script))
Currently translated at 77.8% (383 of 492 strings)

Translated using Weblate (Chinese (Simplified Han script))

Currently translated at 77.8% (383 of 492 strings)

Co-authored-by: MyMemory <noreply-mt-mymemory@weblate.org>
Co-authored-by: xdjohn99 <jh24cd@gmail.com>
Translate-URL: https://translate.sysadminsmedia.com/projects/homebox/frontend/zh_Hans/
Translation: Homebox/Frontend
2025-07-02 23:01:12 +00:00
Weblate
000ccd6d38 Translated using Weblate (Chinese (Simplified Han script))
Currently translated at 76.4% (376 of 492 strings)

Translated using Weblate (Chinese (Simplified Han script))

Currently translated at 76.4% (376 of 492 strings)

Co-authored-by: MyMemory <noreply-mt-mymemory@weblate.org>
Co-authored-by: xdjohn99 <jh24cd@gmail.com>
Translate-URL: https://translate.sysadminsmedia.com/projects/homebox/frontend/zh_Hans/
Translation: Homebox/Frontend
2025-07-02 22:58:12 +00:00
Weblate
f6fc30e218 Translated using Weblate (Chinese (Simplified Han script))
Currently translated at 76.0% (374 of 492 strings)

Translated using Weblate (Chinese (Simplified Han script))

Currently translated at 76.0% (374 of 492 strings)

Co-authored-by: MyMemory <noreply-mt-mymemory@weblate.org>
Co-authored-by: xdjohn99 <jh24cd@gmail.com>
Translate-URL: https://translate.sysadminsmedia.com/projects/homebox/frontend/zh_Hans/
Translation: Homebox/Frontend
2025-07-02 22:57:51 +00:00
Weblate
b444774f9b Translated using Weblate (Chinese (Simplified Han script))
Currently translated at 75.8% (373 of 492 strings)

Co-authored-by: MyMemory <noreply-mt-mymemory@weblate.org>
Translate-URL: https://translate.sysadminsmedia.com/projects/homebox/frontend/zh_Hans/
Translation: Homebox/Frontend
2025-07-02 22:57:31 +00:00
Weblate
91373dceb8 Translated using Weblate (Chinese (Simplified Han script))
Currently translated at 75.6% (372 of 492 strings)

Translated using Weblate (Chinese (Simplified Han script))

Currently translated at 75.6% (372 of 492 strings)

Translated using Weblate (Spanish)

Currently translated at 100.0% (492 of 492 strings)

Translated using Weblate (Spanish)

Currently translated at 100.0% (492 of 492 strings)

Co-authored-by: MyMemory <noreply-mt-mymemory@weblate.org>
Co-authored-by: Slydite4 <39199098+Slydite4@users.noreply.github.com>
Co-authored-by: xdjohn99 <jh24cd@gmail.com>
Translate-URL: https://translate.sysadminsmedia.com/projects/homebox/frontend/es/
Translate-URL: https://translate.sysadminsmedia.com/projects/homebox/frontend/zh_Hans/
Translation: Homebox/Frontend
2025-07-02 22:56:25 +00:00
Weblate
ceb1bf89a1 Translated using Weblate (Spanish)
Currently translated at 98.5% (485 of 492 strings)

Translated using Weblate (Spanish)

Currently translated at 98.5% (485 of 492 strings)

Co-authored-by: MyMemory <noreply-mt-mymemory@weblate.org>
Co-authored-by: Slydite4 <39199098+Slydite4@users.noreply.github.com>
Translate-URL: https://translate.sysadminsmedia.com/projects/homebox/frontend/es/
Translation: Homebox/Frontend
2025-07-02 20:12:09 +00:00
Weblate
eb1428d3ac Translated using Weblate (Spanish)
Currently translated at 98.3% (484 of 492 strings)

Translated using Weblate (Spanish)

Currently translated at 98.3% (484 of 492 strings)

Co-authored-by: MyMemory <noreply-mt-mymemory@weblate.org>
Co-authored-by: Slydite4 <39199098+Slydite4@users.noreply.github.com>
Translate-URL: https://translate.sysadminsmedia.com/projects/homebox/frontend/es/
Translation: Homebox/Frontend
2025-07-02 20:11:48 +00:00
Weblate
e4ac7633a5 Translated using Weblate (Norwegian Bokmål)
Currently translated at 98.9% (487 of 492 strings)

Translated using Weblate (Spanish)

Currently translated at 97.9% (482 of 492 strings)

Translated using Weblate (Spanish)

Currently translated at 97.9% (482 of 492 strings)

Translated using Weblate (Swedish)

Currently translated at 68.0% (335 of 492 strings)

Translated using Weblate (Swedish)

Currently translated at 68.0% (335 of 492 strings)

Translated using Weblate (Dutch)

Currently translated at 100.0% (492 of 492 strings)

Translated using Weblate (Dutch)

Currently translated at 100.0% (492 of 492 strings)

Co-authored-by: Hannes Salen <hannes.salen@gmail.com>
Co-authored-by: MyMemory <noreply-mt-mymemory@weblate.org>
Co-authored-by: Slydite4 <39199098+Slydite4@users.noreply.github.com>
Co-authored-by: networked47 <nic.walsh@gmail.com>
Co-authored-by: terhoy <terjeho@hotmail.com>
Translate-URL: https://translate.sysadminsmedia.com/projects/homebox/frontend/es/
Translate-URL: https://translate.sysadminsmedia.com/projects/homebox/frontend/nb_NO/
Translate-URL: https://translate.sysadminsmedia.com/projects/homebox/frontend/nl/
Translate-URL: https://translate.sysadminsmedia.com/projects/homebox/frontend/sv/
Translation: Homebox/Frontend
2025-07-02 20:10:53 +00:00
tonyaellie
1d941b148c feat: split into separate files 2025-04-11 15:25:44 +00:00
tonyaellie
c980ce679c feat: actually do it properly 2025-04-10 13:40:40 +00:00
tonyaellie
84dc54be07 feat: dumb solution 2025-04-09 21:50:53 +00:00
53 changed files with 3120 additions and 8756 deletions

View File

@@ -19,6 +19,9 @@ func (a *app) setupLogger() {
level, err := zerolog.ParseLevel(a.conf.Log.Level)
if err != nil {
log.Error().Err(err).Str("level", a.conf.Log.Level).Msg("invalid log level, falling back to info")
zerolog.SetGlobalLevel(zerolog.InfoLevel)
} else {
zerolog.SetGlobalLevel(level)
}
}

View File

@@ -123,7 +123,9 @@ func run(cfg *config.Config) error {
}
// Construct and validate the full storage path
storageDir := filepath.Join(absBase, cfg.Storage.PrefixPath)
if !strings.HasPrefix(storageDir, absBase+string(os.PathSeparator)) && storageDir != absBase {
// Set windows paths to use forward slashes required by go-cloud
storageDir = strings.ReplaceAll(storageDir, "\\", "/")
if !strings.HasPrefix(storageDir, absBase+"/") && storageDir != absBase {
log.Fatal().
Str("path", storageDir).
Msg("invalid storage path: you tried to use a prefix that is not a subdirectory of the base path")

View File

@@ -8,6 +8,7 @@ require (
entgo.io/ent v0.14.4
github.com/ardanlabs/conf/v3 v3.8.0
github.com/containrrr/shoutrrr v0.8.0
github.com/evanoberholster/imagemeta v0.3.1
github.com/gen2brain/avif v0.4.4
github.com/gen2brain/heic v0.4.5
github.com/gen2brain/jpegxl v0.4.5
@@ -139,7 +140,7 @@ require (
github.com/jmespath/go-jmespath v0.4.0 // indirect
github.com/josharian/intern v1.0.0 // indirect
github.com/klauspost/compress v1.18.0 // indirect
github.com/klauspost/cpuid/v2 v2.0.12 // indirect
github.com/klauspost/cpuid/v2 v2.2.4 // indirect
github.com/kylelemons/godebug v1.1.0 // indirect
github.com/leodido/go-urn v1.4.0 // indirect
github.com/lufia/plan9stats v0.0.0-20211012122336-39d0f177ccd0 // indirect
@@ -152,6 +153,7 @@ require (
github.com/nats-io/nkeys v0.4.10 // indirect
github.com/nats-io/nuid v1.0.1 // indirect
github.com/ncruces/go-strftime v0.1.9 // indirect
github.com/philhofer/fwd v1.1.2 // indirect
github.com/pierrec/lz4/v4 v4.1.22 // indirect
github.com/pkg/browser v0.0.0-20240102092130-5ac0b6a4141c // indirect
github.com/planetscale/vtprotobuf v0.6.1-0.20240319094008-0393e58bdf10 // indirect
@@ -163,6 +165,7 @@ require (
github.com/sethvargo/go-retry v0.3.0 // indirect
github.com/swaggo/files/v2 v2.0.0 // indirect
github.com/tetratelabs/wazero v1.9.0 // indirect
github.com/tinylib/msgp v1.1.8 // indirect
github.com/tklauser/go-sysconf v0.3.12 // indirect
github.com/tklauser/numcpus v0.6.1 // indirect
github.com/yeqown/reedsolomon v1.0.0 // indirect

View File

@@ -170,6 +170,8 @@ github.com/envoyproxy/go-control-plane/ratelimit v0.1.0/go.mod h1:Wk+tMFAFbCXaJP
github.com/envoyproxy/protoc-gen-validate v0.1.0/go.mod h1:iSmxcyjqTsJpI2R4NaDN7+kN2VEUnK/pcBlmesArF7c=
github.com/envoyproxy/protoc-gen-validate v1.2.1 h1:DEo3O99U8j4hBFwbJfrz9VtgcDfUKS7KJ7spH3d86P8=
github.com/envoyproxy/protoc-gen-validate v1.2.1/go.mod h1:d/C80l/jxXLdfEIhX1W2TmLfsJ31lvEjwamM4DxlWXU=
github.com/evanoberholster/imagemeta v0.3.1 h1:E4GUjXcvlVMjP9joN25+bBNf3Al3MTTfMqCrDOCW+LE=
github.com/evanoberholster/imagemeta v0.3.1/go.mod h1:V0vtDJmjTqvwAYO8r+u33NRVIMXQb0qSqEfImoKEiXM=
github.com/fatih/color v1.15.0 h1:kOqh6YHBtK8aywxGerMG2Eq3H6Qgoqeo13Bk2Mv/nBs=
github.com/fatih/color v1.15.0/go.mod h1:0h5ZqXfHYED7Bhv2ZJamyIOUej9KtShiJESRwBDUSsw=
github.com/felixge/httpsnoop v1.0.4 h1:NFTV2Zj1bL4mc9sqWACXbQFVBBg2W3GPvqp8/ESS2Wg=
@@ -323,8 +325,8 @@ github.com/keybase/go-keychain v0.0.0-20231219164618-57a3676c3af6 h1:IsMZxCuZqKu
github.com/keybase/go-keychain v0.0.0-20231219164618-57a3676c3af6/go.mod h1:3VeWNIJaW+O5xpRQbPp0Ybqu1vJd/pm7s2F473HRrkw=
github.com/klauspost/compress v1.18.0 h1:c/Cqfb0r+Yi+JtIEq73FWXVkRonBlf0CRNYc8Zttxdo=
github.com/klauspost/compress v1.18.0/go.mod h1:2Pp+KzxcywXVXMr50+X0Q/Lsb43OQHYWRCY2AiWywWQ=
github.com/klauspost/cpuid/v2 v2.0.12 h1:p9dKCg8i4gmOxtv35DvrYoWqYzQrvEVdjQ762Y0OqZE=
github.com/klauspost/cpuid/v2 v2.0.12/go.mod h1:g2LTdtYhdyuGPqyWyv7qRAmj1WBqxuObKfj5c0PQa7c=
github.com/klauspost/cpuid/v2 v2.2.4 h1:acbojRNwl3o09bUq+yDCtZFc1aiwaAAxtcn8YkZXnvk=
github.com/klauspost/cpuid/v2 v2.2.4/go.mod h1:RVVoqg1df56z8g3pUjL/3lE5UfnlrJX8tyFgg4nqhuY=
github.com/kr/pretty v0.1.0/go.mod h1:dAy3ld7l9f0ibDNOQOHHMYYIIbhfbHSm3C4ZsoJORNo=
github.com/kr/pretty v0.3.1 h1:flRD4NNwYAUpkphVc1HcthR4KEIFJ65n8Mw5qdRn3LE=
github.com/kr/pretty v0.3.1/go.mod h1:hoEshYVHaxMs3cyo3Yncou5ZscifuDolrwPKZanG3xk=
@@ -350,8 +352,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.28 h1:ThEiQrnbtumT+QMknw63Befp/ce/nUPgBPMlRFEum7A=
github.com/mattn/go-sqlite3 v1.14.28/go.mod h1:Uh1q+B4BYcTPb+yiD3kU8Ct7aC0hY9fxUwlHK0RXw+Y=
github.com/mfridman/interpolate v0.0.2 h1:pnuTK7MQIxxFz1Gr+rjSIx9u7qVjf5VOoM/u6BbAxPY=
@@ -375,12 +375,12 @@ github.com/ncruces/go-strftime v0.1.9/go.mod h1:Fwc5htZGVVkseilnfgOVb9mKy6w1naJm
github.com/niemeyer/pretty v0.0.0-20200227124842-a10e7caefd8e/go.mod h1:zD1mROLANZcx1PVRCS0qkT7pwLkGfwJo4zjcN/Tysno=
github.com/olahol/melody v1.2.1 h1:xdwRkzHxf+B0w4TKbGpUSSkV516ZucQZJIWLztOWICQ=
github.com/olahol/melody v1.2.1/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=
github.com/onsi/gomega v1.27.6/go.mod h1:PIQNjfQwkP3aQAH7lf7j87O/5FiNr+ZR8+ipb+qQlhg=
github.com/philhofer/fwd v1.1.2 h1:bnDivRJ1EWPjUIRXV5KfORO897HTbpFAQddBdE8t7Gw=
github.com/philhofer/fwd v1.1.2/go.mod h1:qkPdfjR2SIEbspLqpe1tO4n5yICnr2DY7mqEx2tUTP0=
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/pkg/browser v0.0.0-20240102092130-5ac0b6a4141c h1:+mdjkGKdHQG3305AYmdv1U2eRNDiU2ErMBj1gwrq8eQ=
@@ -417,10 +417,6 @@ github.com/shirou/gopsutil/v4 v4.25.5 h1:rtd9piuSMGeU8g1RMXjZs9y9luK5BwtnG7dZaQU
github.com/shirou/gopsutil/v4 v4.25.5/go.mod h1:PfybzyydfZcN+JMMjkF6Zb8Mq1A/VcogFFg7hj50W9c=
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/stretchr/objx v0.1.0/go.mod h1:HFkY916IF+rwdDfMAkV7OtwuqBVzrE8GR6GFx+wExME=
github.com/stretchr/objx v0.4.0/go.mod h1:YvHI0jy2hoMjB+UWwv71VJQ9isScKT/TqJzVSSt89Yw=
github.com/stretchr/objx v0.5.0/go.mod h1:Yh+to48EsGEfYuaHDzXPcE3xhTkx73EhmCGUpEOglKo=
@@ -440,6 +436,8 @@ github.com/swaggo/swag v1.16.4 h1:clWJtd9LStiG3VeijiCfOVODP6VpHtKdQy9ELFG3s1A=
github.com/swaggo/swag v1.16.4/go.mod h1:VBsHJRsDvfYvqoiMKnsdwhNV9LEMHgEDZcyVYX0sxPg=
github.com/tetratelabs/wazero v1.9.0 h1:IcZ56OuxrtaEz8UYNRHBrUa9bYeX9oVY93KspZZBf/I=
github.com/tetratelabs/wazero v1.9.0/go.mod h1:TSbcXCfFP0L2FGkRPxHphadXPjo1T6W+CseNNY7EkjM=
github.com/tinylib/msgp v1.1.8 h1:FCXC1xanKO4I8plpHGH2P7koL/RzZs12l/+r7vakfm0=
github.com/tinylib/msgp v1.1.8/go.mod h1:qkpG+2ldGg4xRFmx+jfTvZPxfGFhi64BcnL9vkCm/Tw=
github.com/tklauser/go-sysconf v0.3.12 h1:0QaGUFOdQaIVdPgfITYzaTegZvdCjmYO52cSFAEVmqU=
github.com/tklauser/go-sysconf v0.3.12/go.mod h1:Ho14jnntGE1fpdOqQEEaiKRpvIavV0hSfmBq8nJbHYI=
github.com/tklauser/numcpus v0.6.1 h1:ng9scYS7az0Bk4OZLvrNXNSAO2Pxr1XXRAPyjhIx+Fk=
@@ -515,6 +513,7 @@ golang.org/x/lint v0.0.0-20181026193005-c67002cb31c3/go.mod h1:UVdnD1Gm6xHRNCYTk
golang.org/x/lint v0.0.0-20190227174305-5b3e6a55c961/go.mod h1:wehouNa3lNwaWXcvxsM5YxQ5yQlVC4a0KAMCusXpPoU=
golang.org/x/lint v0.0.0-20190313153728-d0100b6bd8b3/go.mod h1:6SW0HCj/g11FgYtHlgUYUwCkIfeOF89ocIRzGO/8vkc=
golang.org/x/mod v0.6.0-dev.0.20220419223038-86c51ed26bb4/go.mod h1:jJ57K6gSWd91VN4djpZkiMVwK6gcyfeH4XE8wZrZaV4=
golang.org/x/mod v0.7.0/go.mod h1:iBbtSCu2XBx23ZKBPSOrRkjjQPZFPuis4dIYUhu/chs=
golang.org/x/mod v0.8.0/go.mod h1:iBbtSCu2XBx23ZKBPSOrRkjjQPZFPuis4dIYUhu/chs=
golang.org/x/mod v0.12.0/go.mod h1:iBbtSCu2XBx23ZKBPSOrRkjjQPZFPuis4dIYUhu/chs=
golang.org/x/mod v0.14.0/go.mod h1:hTbmBsO62+eylJbnUtE2MGJUyE7QWk4xUqPFrRgJ+7c=
@@ -530,6 +529,7 @@ golang.org/x/net v0.0.0-20200114155413-6afb5195e5aa/go.mod h1:z5CRVTTTmAJ677TzLL
golang.org/x/net v0.0.0-20201110031124-69a78807bb2b/go.mod h1:sp8m0HH+o8qH0wwXwYZr8TS3Oi6o0r6Gce1SSxlDquU=
golang.org/x/net v0.0.0-20210226172049-e18ecbb05110/go.mod h1:m0MpNAwzfU5UDzcl9v0D8zg8gWTRqZa9RBIspLL5mdg=
golang.org/x/net v0.0.0-20220722155237-a158d28d115b/go.mod h1:XRhObCWvk6IyKnWLug+ECip1KBveYUHfp+8e9klMJ9c=
golang.org/x/net v0.3.0/go.mod h1:MBQ8lrhLObU/6UmLb4fmbmk5OcyYmqtbGd/9yIeKjEE=
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.10.0/go.mod h1:0qNGK6F8kojg2nk9dLZ2mShWaEBan6FAoqfSigmmuDg=
@@ -558,9 +558,11 @@ golang.org/x/sys v0.0.0-20201119102817-f84b799fce68/go.mod h1:h1NjWce9XRLGQEsW7w
golang.org/x/sys v0.0.0-20201204225414-ed752295db88/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
golang.org/x/sys v0.0.0-20210615035016-665e8c7367d1/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
golang.org/x/sys v0.0.0-20220520151302-bc2c85ada10a/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
golang.org/x/sys v0.0.0-20220704084225-05e143d24a9e/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
golang.org/x/sys v0.0.0-20220722155257-8c9f86f7a55f/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
golang.org/x/sys v0.0.0-20220811171246-fbc7d0a398ab/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
golang.org/x/sys v0.1.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
golang.org/x/sys v0.3.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
golang.org/x/sys v0.5.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
golang.org/x/sys v0.6.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
golang.org/x/sys v0.8.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
@@ -571,6 +573,7 @@ golang.org/x/sys v0.33.0 h1:q3i8TbbEz+JRD9ywIRlyRAQbM0qF7hu24q3teo2hbuw=
golang.org/x/sys v0.33.0/go.mod h1:BJP2sWEmIv4KK5OTEluFJCKSidICx8ciO85XgH3Ak8k=
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.3.0/go.mod h1:q750SLmJuPmVoN1blW3UFBPREJfb1KmY3vwxfr+nFDA=
golang.org/x/term v0.5.0/go.mod h1:jMB1sMXY+tzblOD4FWmEbocvup2/aLOaQEp7JmGp78k=
golang.org/x/term v0.8.0/go.mod h1:xPskH00ivmX89bAKVGSKKtLOWNx2+17Eiy94tnKShWo=
golang.org/x/term v0.12.0/go.mod h1:owVbMEjm3cBLCHdkQu9b1opXd4ETQWc3BhuQGKgXgvU=
@@ -578,6 +581,7 @@ golang.org/x/term v0.16.0/go.mod h1:yn7UURbUtPyrVJPGPq404EukNFxcm/foM+bV/bfcDsY=
golang.org/x/text v0.3.0/go.mod h1:NqM8EUOU14njkJ3fqMW+pc6Ldnwhi/IjpwHt7yyuwOQ=
golang.org/x/text v0.3.3/go.mod h1:5Zoc/QRtKVWzQhOtBMvqHzDpF6irO9z98xDceosuGiQ=
golang.org/x/text v0.3.7/go.mod h1:u+2+/6zg+i71rQMx5EYifcz6MCKuco9NR6JIITiCfzQ=
golang.org/x/text v0.5.0/go.mod h1:mrYo+phRRbMaCq/xk9113O4dZlRixOauAjOtrjsXDZ8=
golang.org/x/text v0.7.0/go.mod h1:mrYo+phRRbMaCq/xk9113O4dZlRixOauAjOtrjsXDZ8=
golang.org/x/text v0.9.0/go.mod h1:e1OnstbJyHTd6l/uOt8jFFHp6TRDWZR/bV3emEE/zU8=
golang.org/x/text v0.13.0/go.mod h1:TvPlkZtksWOMsz7fbANvkp4WM8x/WCo/om8BMLbz+aE=
@@ -593,6 +597,7 @@ golang.org/x/tools v0.0.0-20190311212946-11955173bddd/go.mod h1:LCzVGOaR6xXOjkQ3
golang.org/x/tools v0.0.0-20190524140312-2c0ae7006135/go.mod h1:RgjU9mgBXZiqYHBnxXauZ1Gv1EHHAz9KjViQ78xBX0Q=
golang.org/x/tools v0.0.0-20191119224855-298f0cb1881e/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo=
golang.org/x/tools v0.1.12/go.mod h1:hNGJHUnrk76NpqgfD5Aqm5Crs+Hm0VOH/i9J2+nxYbc=
golang.org/x/tools v0.4.0/go.mod h1:UE5sM2OK9E/d67R0ANs2xJizIymRP5gJU295PvKXxjQ=
golang.org/x/tools v0.6.0/go.mod h1:Xwgl3UAJ/d3gWutnCtw505GrjyAbvKui8lOU390QaIU=
golang.org/x/tools v0.13.0/go.mod h1:HvlwmtVNQAhOuCjW7xxvovg8wbNq7LwfXh/k7wXUl58=
golang.org/x/tools v0.17.0/go.mod h1:xsh6VxdV005rRVaS6SSAf9oiAqljS7UZUacMZ8Bnsps=

View File

@@ -5,16 +5,16 @@ import (
"context"
"crypto/md5"
"fmt"
"github.com/evanoberholster/imagemeta"
"github.com/gen2brain/avif"
"github.com/gen2brain/heic"
"github.com/gen2brain/jpegxl"
"github.com/gen2brain/webp"
"github.com/rs/zerolog/log"
"github.com/sysadminsmedia/homebox/backend/internal/data/ent/group"
"github.com/sysadminsmedia/homebox/backend/internal/sys/config"
"github.com/sysadminsmedia/homebox/backend/pkgs/utils"
"github.com/zeebo/blake3"
"github.com/gen2brain/avif"
"github.com/gen2brain/heic"
"github.com/gen2brain/jpegxl"
"github.com/gen2brain/webp"
"golang.org/x/image/draw"
"image"
"io"
@@ -502,10 +502,13 @@ func (r *AttachmentRepo) CreateThumbnail(ctx context.Context, groupId, attachmen
contentType := http.DetectContentType(contentBytes[:min(512, len(contentBytes))])
if contentType == "application/octet-stream" {
if strings.HasSuffix(title, ".heic") || strings.HasSuffix(title, ".heif") {
switch {
case strings.HasSuffix(title, ".heic") || strings.HasSuffix(title, ".heif"):
contentType = "image/heic"
} else if strings.HasSuffix(title, ".avif") {
case strings.HasSuffix(title, ".avif"):
contentType = "image/avif"
case strings.HasSuffix(title, ".jxl"):
contentType = "image/jxl"
}
}
@@ -522,10 +525,18 @@ func (r *AttachmentRepo) CreateThumbnail(ctx context.Context, groupId, attachmen
}
return err
}
dst := image.NewRGBA(image.Rect(0, 0, r.thumbnail.Width, r.thumbnail.Height))
draw.ApproxBiLinear.Scale(dst, dst.Rect, img, img.Bounds(), draw.Over, nil)
buf := new(bytes.Buffer)
err = webp.Encode(buf, dst, webp.Options{Quality: 80, Lossless: false})
log.Debug().Msg("reading original file orientation")
imageMeta, err := imagemeta.Decode(bytes.NewReader(contentBytes))
if err != nil {
log.Err(err).Msg("failed to decode original file content")
err := tx.Rollback()
if err != nil {
return err
}
return err
}
orientation := uint16(imageMeta.Orientation)
thumbnailPath, err := r.processThumbnailFromImage(ctx, groupId, img, title, orientation)
if err != nil {
err := tx.Rollback()
if err != nil {
@@ -533,22 +544,7 @@ func (r *AttachmentRepo) CreateThumbnail(ctx context.Context, groupId, attachmen
}
return err
}
contentBytes := buf.Bytes()
log.Debug().Msg("uploading thumbnail file")
thumbnailFile, err := r.UploadFile(ctx, tx.Group.GetX(ctx, groupId), ItemCreateAttachment{
Title: fmt.Sprintf("%s-thumb", title),
Content: bytes.NewReader(contentBytes),
})
if err != nil {
log.Err(err).Msg("failed to upload thumbnail file")
err := tx.Rollback()
if err != nil {
return err
}
return err
}
log.Debug().Msg("setting thumbnail file path in attachment")
att.SetPath(thumbnailFile)
att.SetPath(thumbnailPath)
case contentType == "image/webp":
log.Debug().Msg("creating thumbnail for webp file")
img, err := webp.Decode(bytes.NewReader(contentBytes))
@@ -560,10 +556,18 @@ func (r *AttachmentRepo) CreateThumbnail(ctx context.Context, groupId, attachmen
}
return err
}
dst := image.NewRGBA(image.Rect(0, 0, r.thumbnail.Width, r.thumbnail.Height))
draw.ApproxBiLinear.Scale(dst, dst.Rect, img, img.Bounds(), draw.Over, nil)
buf := new(bytes.Buffer)
err = webp.Encode(buf, dst, webp.Options{Quality: 80, Lossless: false})
log.Debug().Msg("reading original file orientation")
imageMeta, err := imagemeta.Decode(bytes.NewReader(contentBytes))
if err != nil {
log.Err(err).Msg("failed to decode original file content")
err := tx.Rollback()
if err != nil {
return err
}
return err
}
orientation := uint16(imageMeta.Orientation)
thumbnailPath, err := r.processThumbnailFromImage(ctx, groupId, img, title, orientation)
if err != nil {
err := tx.Rollback()
if err != nil {
@@ -571,22 +575,7 @@ func (r *AttachmentRepo) CreateThumbnail(ctx context.Context, groupId, attachmen
}
return err
}
contentBytes := buf.Bytes()
log.Debug().Msg("uploading thumbnail file")
thumbnailFile, err := r.UploadFile(ctx, tx.Group.GetX(ctx, groupId), ItemCreateAttachment{
Title: fmt.Sprintf("%s-thumb", title),
Content: bytes.NewReader(contentBytes),
})
if err != nil {
log.Err(err).Msg("failed to upload thumbnail file")
err := tx.Rollback()
if err != nil {
return err
}
return err
}
log.Debug().Msg("setting thumbnail file path in attachment")
att.SetPath(thumbnailFile)
att.SetPath(thumbnailPath)
case contentType == "image/avif":
log.Debug().Msg("creating thumbnail for avif file")
img, err := avif.Decode(bytes.NewReader(contentBytes))
@@ -598,10 +587,7 @@ func (r *AttachmentRepo) CreateThumbnail(ctx context.Context, groupId, attachmen
}
return err
}
dst := image.NewRGBA(image.Rect(0, 0, r.thumbnail.Width, r.thumbnail.Height))
draw.ApproxBiLinear.Scale(dst, dst.Rect, img, img.Bounds(), draw.Over, nil)
buf := new(bytes.Buffer)
err = webp.Encode(buf, dst, webp.Options{Quality: 80, Lossless: false})
thumbnailPath, err := r.processThumbnailFromImage(ctx, groupId, img, title, uint16(1))
if err != nil {
err := tx.Rollback()
if err != nil {
@@ -609,22 +595,7 @@ func (r *AttachmentRepo) CreateThumbnail(ctx context.Context, groupId, attachmen
}
return err
}
contentBytes := buf.Bytes()
log.Debug().Msg("uploading thumbnail file")
thumbnailFile, err := r.UploadFile(ctx, tx.Group.GetX(ctx, groupId), ItemCreateAttachment{
Title: fmt.Sprintf("%s-thumb", title),
Content: bytes.NewReader(contentBytes),
})
if err != nil {
log.Err(err).Msg("failed to upload thumbnail file")
err := tx.Rollback()
if err != nil {
return err
}
return err
}
log.Debug().Msg("setting thumbnail file path in attachment")
att.SetPath(thumbnailFile)
att.SetPath(thumbnailPath)
case contentType == "image/heic" || contentType == "image/heif":
log.Debug().Msg("creating thumbnail for heic file")
img, err := heic.Decode(bytes.NewReader(contentBytes))
@@ -636,10 +607,18 @@ func (r *AttachmentRepo) CreateThumbnail(ctx context.Context, groupId, attachmen
}
return err
}
dst := image.NewRGBA(image.Rect(0, 0, r.thumbnail.Width, r.thumbnail.Height))
draw.ApproxBiLinear.Scale(dst, dst.Rect, img, img.Bounds(), draw.Over, nil)
buf := new(bytes.Buffer)
err = webp.Encode(buf, dst, webp.Options{Quality: 80, Lossless: false})
log.Debug().Msg("reading original file orientation")
imageMeta, err := imagemeta.Decode(bytes.NewReader(contentBytes))
if err != nil {
log.Err(err).Msg("failed to decode original file content")
err := tx.Rollback()
if err != nil {
return err
}
return err
}
orientation := uint16(imageMeta.Orientation)
thumbnailPath, err := r.processThumbnailFromImage(ctx, groupId, img, title, orientation)
if err != nil {
err := tx.Rollback()
if err != nil {
@@ -647,22 +626,7 @@ func (r *AttachmentRepo) CreateThumbnail(ctx context.Context, groupId, attachmen
}
return err
}
contentBytes := buf.Bytes()
log.Debug().Msg("uploading thumbnail file")
thumbnailFile, err := r.UploadFile(ctx, tx.Group.GetX(ctx, groupId), ItemCreateAttachment{
Title: fmt.Sprintf("%s-thumb", title),
Content: bytes.NewReader(contentBytes),
})
if err != nil {
log.Err(err).Msg("failed to upload thumbnail file")
err := tx.Rollback()
if err != nil {
return err
}
return err
}
log.Debug().Msg("setting thumbnail file path in attachment")
att.SetPath(thumbnailFile)
att.SetPath(thumbnailPath)
case contentType == "image/jxl":
log.Debug().Msg("creating thumbnail for jpegxl file")
img, err := jpegxl.Decode(bytes.NewReader(contentBytes))
@@ -674,10 +638,7 @@ func (r *AttachmentRepo) CreateThumbnail(ctx context.Context, groupId, attachmen
}
return err
}
dst := image.NewRGBA(image.Rect(0, 0, r.thumbnail.Width, r.thumbnail.Height))
draw.ApproxBiLinear.Scale(dst, dst.Rect, img, img.Bounds(), draw.Over, nil)
buf := new(bytes.Buffer)
err = webp.Encode(buf, dst, webp.Options{Quality: 80, Lossless: false})
thumbnailPath, err := r.processThumbnailFromImage(ctx, groupId, img, title, uint16(1))
if err != nil {
err := tx.Rollback()
if err != nil {
@@ -685,22 +646,7 @@ func (r *AttachmentRepo) CreateThumbnail(ctx context.Context, groupId, attachmen
}
return err
}
contentBytes := buf.Bytes()
log.Debug().Msg("uploading thumbnail file")
thumbnailFile, err := r.UploadFile(ctx, tx.Group.GetX(ctx, groupId), ItemCreateAttachment{
Title: fmt.Sprintf("%s-thumb", title),
Content: bytes.NewReader(contentBytes),
})
if err != nil {
log.Err(err).Msg("failed to upload thumbnail file")
err := tx.Rollback()
if err != nil {
return err
}
return err
}
log.Debug().Msg("setting thumbnail file path in attachment")
att.SetPath(thumbnailFile)
att.SetPath(thumbnailPath)
default:
return fmt.Errorf("file type %s is not supported for thumbnail creation or document thumnails disabled", title)
}
@@ -831,3 +777,73 @@ func isImageFile(mimetype string) bool {
// Check file extension for image types
return strings.Contains(mimetype, "image/jpeg") || strings.Contains(mimetype, "image/png") || strings.Contains(mimetype, "image/gif")
}
// calculateThumbnailDimensions calculates new dimensions that preserve aspect ratio
// while fitting within the configured maximum width and height
func calculateThumbnailDimensions(origWidth, origHeight, maxWidth, maxHeight int) (int, int) {
if origWidth <= maxWidth && origHeight <= maxHeight {
return origWidth, origHeight
}
// Calculate scaling factors for both dimensions
scaleX := float64(maxWidth) / float64(origWidth)
scaleY := float64(maxHeight) / float64(origHeight)
// Use the smaller scaling factor to ensure both dimensions fit
scale := scaleX
if scaleY < scaleX {
scale = scaleY
}
newWidth := int(float64(origWidth) * scale)
newHeight := int(float64(origHeight) * scale)
// Ensure we don't get zero dimensions
if newWidth < 1 {
newWidth = 1
}
if newHeight < 1 {
newHeight = 1
}
return newWidth, newHeight
}
// processThumbnailFromImage handles the common thumbnail processing logic after image decoding
// Returns the thumbnail file path or an error
func (r *AttachmentRepo) processThumbnailFromImage(ctx context.Context, groupId uuid.UUID, img image.Image, title string, orientation uint16) (string, error) {
bounds := img.Bounds()
// Apply EXIF orientation if needed
if orientation > 1 {
img = utils.ApplyOrientation(img, orientation)
bounds = img.Bounds()
}
newWidth, newHeight := calculateThumbnailDimensions(bounds.Dx(), bounds.Dy(), r.thumbnail.Width, r.thumbnail.Height)
dst := image.NewRGBA(image.Rect(0, 0, newWidth, newHeight))
draw.ApproxBiLinear.Scale(dst, dst.Rect, img, img.Bounds(), draw.Over, nil)
buf := new(bytes.Buffer)
err := webp.Encode(buf, dst, webp.Options{Quality: 80, Lossless: false})
if err != nil {
return "", err
}
contentBytes := buf.Bytes()
log.Debug().Msg("uploading thumbnail file")
// Get the group for uploading the thumbnail
group, err := r.db.Group.Get(ctx, groupId)
if err != nil {
return "", err
}
thumbnailFile, err := r.UploadFile(ctx, group, ItemCreateAttachment{
Title: fmt.Sprintf("%s-thumb", title),
Content: bytes.NewReader(contentBytes),
})
if err != nil {
log.Err(err).Msg("failed to upload thumbnail file")
return "", err
}
return thumbnailFile, nil
}

View File

@@ -18,7 +18,7 @@ func TestAttachmentRepo_Create(t *testing.T) {
ids := []uuid.UUID{item.ID}
t.Cleanup(func() {
for _, id := range ids {
_ = tRepos.Attachments.Delete(context.Background(), id)
_ = tRepos.Attachments.Delete(context.Background(), tGroup.ID, item.ID, id)
}
})
@@ -69,7 +69,7 @@ func TestAttachmentRepo_Create(t *testing.T) {
assert.Equal(t, tt.want.Type, got.Type)
withItems, err := tRepos.Attachments.Get(tt.args.ctx, got.ID)
withItems, err := tRepos.Attachments.Get(tt.args.ctx, tGroup.ID, got.ID)
require.NoError(t, err)
assert.Equal(t, tt.args.itemID, withItems.Edges.Item.ID)
@@ -86,17 +86,17 @@ func useAttachments(t *testing.T, n int) []*ent.Attachment {
ids := make([]uuid.UUID, 0, n)
t.Cleanup(func() {
for _, id := range ids {
_ = tRepos.Attachments.Delete(context.Background(), id)
_ = tRepos.Attachments.Delete(context.Background(), tGroup.ID, item.ID, id)
}
})
attachments := make([]*ent.Attachment, n)
for i := 0; i < n; i++ {
attachment, err := tRepos.Attachments.Create(context.Background(), item.ID, ItemCreateAttachment{Title: "Test", Content: strings.NewReader("Test String")}, attachment.TypePhoto, true)
attach, err := tRepos.Attachments.Create(context.Background(), item.ID, ItemCreateAttachment{Title: "Test", Content: strings.NewReader("Test String")}, attachment.TypePhoto, true)
require.NoError(t, err)
attachments[i] = attachment
attachments[i] = attach
ids = append(ids, attachment.ID)
ids = append(ids, attach.ID)
}
return attachments
@@ -107,13 +107,13 @@ func TestAttachmentRepo_Update(t *testing.T) {
for _, typ := range []attachment.Type{"photo", "manual", "warranty", "attachment"} {
t.Run(string(typ), func(t *testing.T) {
_, err := tRepos.Attachments.Update(context.Background(), entity.ID, &ItemAttachmentUpdate{
_, err := tRepos.Attachments.Update(context.Background(), tGroup.ID, entity.ID, &ItemAttachmentUpdate{
Type: string(typ),
})
require.NoError(t, err)
updated, err := tRepos.Attachments.Get(context.Background(), entity.ID)
updated, err := tRepos.Attachments.Get(context.Background(), tGroup.ID, entity.ID)
require.NoError(t, err)
assert.Equal(t, typ, updated.Type)
})
@@ -122,11 +122,12 @@ func TestAttachmentRepo_Update(t *testing.T) {
func TestAttachmentRepo_Delete(t *testing.T) {
entity := useAttachments(t, 1)[0]
item := useItems(t, 1)[0]
err := tRepos.Attachments.Delete(context.Background(), entity.ID)
err := tRepos.Attachments.Delete(context.Background(), tGroup.ID, item.ID, entity.ID)
require.NoError(t, err)
_, err = tRepos.Attachments.Get(context.Background(), entity.ID)
_, err = tRepos.Attachments.Get(context.Background(), tGroup.ID, entity.ID)
require.Error(t, err)
}
@@ -135,13 +136,13 @@ func TestAttachmentRepo_EnsureSinglePrimaryAttachment(t *testing.T) {
attachments := useAttachments(t, 2)
setAndVerifyPrimary := func(primaryAttachmentID, nonPrimaryAttachmentID uuid.UUID) {
primaryAttachment, err := tRepos.Attachments.Update(ctx, primaryAttachmentID, &ItemAttachmentUpdate{
primaryAttachment, err := tRepos.Attachments.Update(ctx, tGroup.ID, primaryAttachmentID, &ItemAttachmentUpdate{
Type: attachment.TypePhoto.String(),
Primary: true,
})
require.NoError(t, err)
nonPrimaryAttachment, err := tRepos.Attachments.Get(ctx, nonPrimaryAttachmentID)
nonPrimaryAttachment, err := tRepos.Attachments.Get(ctx, tGroup.ID, nonPrimaryAttachmentID)
require.NoError(t, err)
assert.True(t, primaryAttachment.Primary)

View File

@@ -0,0 +1,86 @@
package utils
import "image"
// flipHorizontal will flip the image horizontally. There is a limit of 10000 pixels in either dimension to prevent excessive memory usage.
func flipHorizontal(img image.Image) image.Image {
b := img.Bounds()
if b.Dx() > 10000 || b.Dy() > 10000 {
return img
}
dst := image.NewRGBA(b)
for y := b.Min.Y; y < b.Max.Y; y++ {
for x := b.Min.X; x < b.Max.X; x++ {
dst.Set(b.Max.X-1-(x-b.Min.X), y, img.At(x, y))
}
}
return dst
}
// flipVertical will flip the image vertically. There is a limit of 10000 pixels in either dimension to prevent excessive memory usage.
func flipVertical(img image.Image) image.Image {
b := img.Bounds()
if b.Dx() > 10000 || b.Dy() > 10000 {
return img
}
dst := image.NewRGBA(b)
for y := b.Min.Y; y < b.Max.Y; y++ {
for x := b.Min.X; x < b.Max.X; x++ {
dst.Set(x, b.Max.Y-1-(y-b.Min.Y), img.At(x, y))
}
}
return dst
}
// rotate90 will rotate the image 90 degrees clockwise. There is a limit of 10000 pixels in either dimension to prevent excessive memory usage.
func rotate90(img image.Image) image.Image {
b := img.Bounds()
if b.Dx() > 10000 || b.Dy() > 10000 {
return img
}
dst := image.NewRGBA(image.Rect(0, 0, b.Dy(), b.Dx()))
for y := b.Min.Y; y < b.Max.Y; y++ {
for x := b.Min.X; x < b.Max.X; x++ {
dst.Set(b.Max.Y-1-y, x, img.At(x, y))
}
}
return dst
}
func rotate180(img image.Image) image.Image {
return rotate90(rotate90(img))
}
func rotate270(img image.Image) image.Image {
return rotate90(rotate180(img))
}
// Applies EXIF orientation using only stdlib
func ApplyOrientation(img image.Image, orientation uint16) image.Image {
if img == nil {
return nil
}
if orientation < 1 || orientation > 8 {
return img // No orientation or invalid orientation
}
switch orientation {
case 1:
return img // No rotation needed
case 2:
return flipHorizontal(img)
case 3:
return rotate180(img)
case 4:
return flipVertical(img)
case 5:
return rotate90(flipHorizontal(img))
case 6:
return rotate90(img)
case 7:
return rotate270(flipHorizontal(img))
case 8:
return rotate270(img)
default:
return img
}
}

View File

@@ -0,0 +1,105 @@
<template>
<div class="tab-content">
<div class="card">
<div class="card-header">
<h2 class="card-title">Basic Configuration</h2>
<p class="card-description">Configure the basic settings for your Homebox instance.</p>
</div>
<div class="card-content">
<div class="form-row">
<label for="rootless">Use Rootless Image</label>
<div class="toggle-switch">
<input
type="checkbox"
id="rootless"
v-model="config.rootless"
/>
<label for="rootless"></label>
</div>
</div>
<div class="form-group">
<label for="port">External Port</label>
<input
type="text"
id="port"
v-model="config.port"
/>
<p class="help-text">Only used if HTTPS is not enabled</p>
</div>
<div class="form-group">
<label for="maxFileUpload">Max File Upload (MB)</label>
<input
type="text"
id="maxFileUpload"
v-model="config.maxFileUpload"
/>
</div>
<div class="form-row">
<label for="allowAnalytics">Allow Analytics</label>
<div class="toggle-switch">
<input
type="checkbox"
id="allowAnalytics"
v-model="config.allowAnalytics"
/>
<label for="allowAnalytics"></label>
</div>
</div>
<div class="separator"></div>
<div class="form-row">
<label for="allowRegistration">Allow Registration</label>
<div class="toggle-switch">
<input
type="checkbox"
id="allowRegistration"
v-model="config.allowRegistration"
/>
<label for="allowRegistration"></label>
</div>
</div>
<div class="form-row">
<label for="autoIncrementAssetId">Auto Increment Asset ID</label>
<div class="toggle-switch">
<input
type="checkbox"
id="autoIncrementAssetId"
v-model="config.autoIncrementAssetId"
/>
<label for="autoIncrementAssetId"></label>
</div>
</div>
<div class="form-row">
<label for="checkGithubRelease">Check GitHub Release</label>
<div class="toggle-switch">
<input
type="checkbox"
id="checkGithubRelease"
v-model="config.checkGithubRelease"
/>
<label for="checkGithubRelease"></label>
</div>
</div>
</div>
</div>
</div>
</template>
<script setup>
defineProps({
config: {
type: Object,
required: true
}
})
</script>
<style scoped>
@import 'common.css';
</style>

View File

@@ -0,0 +1,288 @@
<template>
<div class="config-generator">
<div class="config-layout">
<div class="config-form">
<div class="tabs">
<div class="tab-list">
<button
v-for="tab in tabs"
:key="tab.value"
class="tab-button"
:class="{ active: activeTab === tab.value }"
@click="activeTab = tab.value"
>
{{ tab.label }}
</button>
</div>
<BasicConfig
v-show="activeTab === 'basic'"
:config="config"
/>
<DatabaseConfig
v-show="activeTab === 'database'"
:config="config"
:show-password="showPassword"
@toggle-password="showPassword = !showPassword"
@regenerate-password="regeneratePassword"
/>
<HttpsConfig
v-show="activeTab === 'https'"
:config="config"
/>
<StorageConfig
v-show="activeTab === 'storage'"
:config="config"
/>
</div>
</div>
<ConfigPreview
:config="generateDockerCompose(config)"
@copy="copyToClipboard"
@download="downloadConfig"
/>
</div>
</div>
</template>
<script setup>
import { ref, reactive } from 'vue'
import BasicConfig from './BasicConfig.vue'
import DatabaseConfig from './DatabaseConfig.vue'
import HttpsConfig from './HttpsConfig.vue'
import StorageConfig from './StorageConfig.vue'
import ConfigPreview from './ConfigPreview.vue'
import { generateDockerCompose } from './dockerComposeGenerator'
const showPassword = ref(false)
const activeTab = ref('basic')
const tabs = [
{ label: 'Basic', value: 'basic' },
{ label: 'Database', value: 'database' },
{ label: 'HTTPS', value: 'https' },
{ label: 'Storage', value: 'storage' }
]
function generateRandomPassword(length = 16) {
const charset = "abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789!@#$%^&*()-_=+"
let password = ""
for (let i = 0; i < length; i++) {
const randomIndex = Math.floor(Math.random() * charset.length)
password += charset[randomIndex]
}
return password
}
const config = reactive({
image: "ghcr.io/sysadminsmedia/homebox:latest",
rootless: false,
port: "3100",
logLevel: "info",
logFormat: "text",
maxFileUpload: "10",
allowAnalytics: false,
// HTTPS options
httpsOption: "none", // none, traefik, nginx, caddy, cloudflared
// Traefik config
traefikConfig: {
domain: "homebox.example.com",
email: "",
},
// Nginx config
nginxConfig: {
domain: "homebox.example.com",
port: "443",
sslCertPath: "/etc/nginx/ssl/cert.pem",
sslKeyPath: "/etc/nginx/ssl/key.pem",
},
// Caddy config
caddyConfig: {
domain: "homebox.example.com",
email: "",
},
// Cloudflared config
cloudflaredConfig: {
tunnel: "homebox-tunnel",
domain: "homebox.example.com",
token: "",
},
databaseType: "sqlite",
postgresConfig: {
host: "postgres",
port: "5432",
username: "homebox",
password: generateRandomPassword(),
database: "homebox",
},
allowRegistration: true,
autoIncrementAssetId: true,
checkGithubRelease: true,
// Storage Configuration
storageType: "local", // local, s3, gcs, azure
storageConfig: {
// Local storage settings
local: {
type: "volume", // "volume" or "directory"
directory: "./homebox-data",
volumeName: "homebox-data",
path: "/data", // Custom path for local storage
},
// S3 storage settings
s3: {
bucket: "",
region: "",
endpoint: "", // For S3-compatible storage
awsAccessKeyId: "",
awsSecretAccessKey: "",
awsSessionToken: "", // Optional for temporary credentials
prefixPath: "", // Storage prefix path
awsSdk: "v2", // AWS SDK version
disableSSL: false,
s3ForcePathStyle: false,
sseType: "", // Server-side encryption type
kmsKeyId: "", // KMS key ID for encryption
fips: false,
dualstack: false,
accelerate: false,
isCompatible: false, // Whether using S3-compatible storage
compatibleService: "", // minio, cloudflare-r2, backblaze-b2, custom
},
// Google Cloud Storage settings
gcs: {
bucket: "",
projectId: "",
credentialsPath: "/app/gcs-credentials.json", // Path to service account key
prefixPath: "", // Storage prefix path
},
// Azure Blob Storage settings
azure: {
container: "",
storageAccount: "",
storageKey: "",
sasToken: "", // Optional SAS token
useEmulator: false,
emulatorEndpoint: "localhost:10001", // For local emulator
prefixPath: "", // Storage prefix path
},
// Container storage volumes (for non-local storage types)
containerStorage: {
postgresStorage: {
type: "volume",
directory: "./postgres-data",
volumeName: "postgres-data",
},
traefikStorage: {
type: "volume",
directory: "./traefik-data",
volumeName: "traefik-data",
},
nginxStorage: {
type: "volume",
directory: "./nginx-data",
volumeName: "nginx-data",
},
caddyStorage: {
type: "volume",
directory: "./caddy-data",
volumeName: "caddy-data",
},
cloudflaredStorage: {
type: "volume",
directory: "./cloudflared-data",
volumeName: "cloudflared-data",
},
},
},
})
function regeneratePassword() {
config.postgresConfig.password = generateRandomPassword()
alert('A new random password has been generated for the database.')
}
function copyToClipboard() {
navigator.clipboard.writeText(generateDockerCompose(config))
alert('Docker Compose configuration has been copied to your clipboard.')
}
function downloadConfig() {
const element = document.createElement("a")
const file = new Blob([generateDockerCompose(config)], { type: "text/plain" })
element.href = URL.createObjectURL(file)
element.download = "docker-compose.yml"
document.body.appendChild(element)
element.click()
document.body.removeChild(element)
}
</script>
<style>
.config-generator {
font-family: var(--vp-font-family-base);
color: var(--vp-c-text-1);
max-width: 1200px;
margin: 0 auto;
padding: 2rem 1rem;
}
.title {
font-size: 2rem;
font-weight: 600;
margin-bottom: 2rem;
color: var(--vp-c-brand);
}
.config-layout {
display: grid;
grid-template-columns: 1fr;
gap: 2rem;
}
.tabs {
width: 100%;
}
.tab-list {
display: grid;
grid-template-columns: repeat(4, 1fr);
gap: 0.5rem;
margin-bottom: 1rem;
}
.tab-button {
padding: 0.5rem;
background-color: var(--vp-c-bg-mute);
border: 1px solid var(--vp-c-divider);
border-radius: 4px;
font-size: 0.875rem;
font-weight: 500;
cursor: pointer;
transition: all 0.2s ease;
}
.tab-button.active {
background-color: var(--vp-c-brand);
color: white;
border-color: var(--vp-c-brand);
}
.tab-button:hover:not(.active) {
background-color: var(--vp-c-bg-alt);
}
</style>

View File

@@ -0,0 +1,81 @@
<template>
<div class="config-preview">
<div class="card">
<div class="card-header">
<div class="card-title-with-actions">
<h2 class="card-title">Docker Compose Configuration</h2>
<div class="card-actions">
<button class="icon-button" @click="$emit('copy')" title="Copy to clipboard">
Copy
</button>
<button class="icon-button" @click="$emit('download')" title="Download as file">
Download
</button>
</div>
</div>
<p class="card-description">This configuration will be saved as docker-compose.yml</p>
</div>
<div class="card-content">
<textarea
class="code-preview"
readonly
:value="config"
></textarea>
</div>
</div>
</div>
</template>
<script setup>
defineProps({
config: {
type: String,
required: true
},
})
defineEmits(['copy', 'download'])
</script>
<style scoped>
@import './common.css';
.config-preview {
height: 100%;
}
.card {
height: 100%;
display: flex;
flex-direction: column;
}
.card-content {
flex: 1;
}
.card-title-with-actions {
display: flex;
justify-content: space-between;
align-items: center;
}
.card-actions {
display: flex;
gap: 0.5rem;
}
.code-preview {
width: 100%;
height: 600px;
font-family: monospace;
padding: 1rem;
border: 1px solid var(--vp-c-divider);
border-radius: 4px;
background-color: var(--vp-c-bg);
color: var(--vp-c-text-1);
resize: none;
white-space: pre;
overflow: auto;
}
</style>

View File

@@ -0,0 +1,112 @@
<template>
<div class="tab-content">
<div class="card">
<div class="card-header">
<h2 class="card-title">Database Configuration</h2>
<p class="card-description">Configure the database for your Homebox instance.</p>
</div>
<div class="card-content">
<div class="form-group">
<label for="databaseType">Database Type</label>
<select id="databaseType" v-model="config.databaseType">
<option value="sqlite">SQLite (Default)</option>
<option value="postgres">PostgreSQL</option>
</select>
</div>
<div v-if="config.databaseType === 'postgres'" class="nested-form">
<div class="form-group">
<label for="postgresHost">PostgreSQL Host</label>
<input
type="text"
id="postgresHost"
v-model="config.postgresConfig.host"
/>
</div>
<div class="form-group">
<label for="postgresPort">PostgreSQL Port</label>
<input
type="text"
id="postgresPort"
v-model="config.postgresConfig.port"
/>
</div>
<div class="form-group">
<label for="postgresUsername">PostgreSQL Username</label>
<input
type="text"
id="postgresUsername"
v-model="config.postgresConfig.username"
/>
</div>
<div class="form-group">
<label for="postgresPassword">PostgreSQL Password</label>
<div class="password-input">
<input
:type="showPassword ? 'text' : 'password'"
id="postgresPassword"
v-model="config.postgresConfig.password"
/>
<button
class="icon-button"
@click="$emit('togglePassword')"
type="button"
>
<span v-if="showPassword">Hide</span>
<span v-else>Show</span>
</button>
<button
class="icon-button"
@click="$emit('regeneratePassword')"
type="button"
title="Generate new random password"
>
Regenerate
</button>
</div>
</div>
<div class="form-group">
<label for="postgresDatabase">PostgreSQL Database</label>
<input
type="text"
id="postgresDatabase"
v-model="config.postgresConfig.database"
/>
</div>
</div>
</div>
</div>
</div>
</template>
<script setup>
defineProps({
config: {
type: Object,
required: true
},
showPassword: {
type: Boolean,
default: false
}
})
defineEmits(['togglePassword', 'regeneratePassword'])
</script>
<style scoped>
@import './common.css';
.password-input {
display: flex;
gap: 0.5rem;
}
.password-input input {
flex: 1;
}
</style>

View File

@@ -0,0 +1,179 @@
<template>
<div class="tab-content">
<div class="card">
<div class="card-header">
<h2 class="card-title">HTTPS Configuration</h2>
<p class="card-description">Configure HTTPS for your Homebox instance.</p>
</div>
<div class="card-content">
<div class="form-group">
<label for="httpsOption">HTTPS Option</label>
<select id="httpsOption" v-model="config.httpsOption">
<option value="none">None (HTTP only)</option>
<option value="traefik">Traefik (Automatic HTTPS with Let's Encrypt)</option>
<option value="nginx">Nginx (Custom SSL certificates)</option>
<option value="caddy">Caddy (Automatic HTTPS with Let's Encrypt)</option>
<option value="cloudflared">Cloudflare Tunnel</option>
</select>
</div>
<!-- Traefik Configuration -->
<div v-if="config.httpsOption === 'traefik'" class="nested-form">
<h3>Traefik Configuration</h3>
<p class="help-text">Traefik automatically handles HTTPS certificates via Let's Encrypt</p>
<div class="form-group">
<label for="traefikDomain">Domain Name</label>
<input
type="text"
id="traefikDomain"
v-model="config.traefikConfig.domain"
placeholder="homebox.example.com"
/>
<p class="help-text">The domain name must be pointed to your server's IP address</p>
</div>
<div class="form-group">
<label for="traefikEmail">Email Address (for Let's Encrypt)</label>
<input
type="email"
id="traefikEmail"
v-model="config.traefikConfig.email"
placeholder="your-email@example.com"
/>
<p class="help-text">Required for Let's Encrypt certificate notifications</p>
</div>
</div>
<!-- Nginx Configuration -->
<div v-if="config.httpsOption === 'nginx'" class="nested-form">
<h3>Nginx Configuration</h3>
<p class="help-text">Nginx requires you to provide SSL certificates</p>
<div class="form-group">
<label for="nginxDomain">Domain Name</label>
<input
type="text"
id="nginxDomain"
v-model="config.nginxConfig.domain"
placeholder="homebox.example.com"
/>
</div>
<div class="form-group">
<label for="nginxPort">HTTPS Port</label>
<input
type="text"
id="nginxPort"
v-model="config.nginxConfig.port"
/>
</div>
<div class="form-group">
<label for="nginxSslCert">SSL Certificate Path</label>
<input
type="text"
id="nginxSslCert"
v-model="config.nginxConfig.sslCertPath"
/>
<p class="help-text">Path to SSL certificate file inside the Nginx container</p>
</div>
<div class="form-group">
<label for="nginxSslKey">SSL Key Path</label>
<input
type="text"
id="nginxSslKey"
v-model="config.nginxConfig.sslKeyPath"
/>
<p class="help-text">Path to SSL key file inside the Nginx container</p>
</div>
</div>
<!-- Caddy Configuration -->
<div v-if="config.httpsOption === 'caddy'" class="nested-form">
<h3>Caddy Configuration</h3>
<p class="help-text">Caddy automatically handles HTTPS certificates via Let's Encrypt</p>
<div class="form-group">
<label for="caddyDomain">Domain Name</label>
<input
type="text"
id="caddyDomain"
v-model="config.caddyConfig.domain"
placeholder="homebox.example.com"
/>
<p class="help-text">The domain name must be pointed to your server's IP address</p>
</div>
<div class="form-group">
<label for="caddyEmail">Email Address (for Let's Encrypt)</label>
<input
type="email"
id="caddyEmail"
v-model="config.caddyConfig.email"
placeholder="your-email@example.com"
/>
<p class="help-text">Optional: Used for Let's Encrypt certificate notifications</p>
</div>
</div>
<!-- Cloudflared Configuration -->
<div v-if="config.httpsOption === 'cloudflared'" class="nested-form">
<h3>Cloudflare Tunnel Configuration</h3>
<p class="help-text">Cloudflare Tunnel provides secure access without exposing ports</p>
<div class="form-group">
<label for="cloudflaredTunnel">Tunnel Name</label>
<input
type="text"
id="cloudflaredTunnel"
v-model="config.cloudflaredConfig.tunnel"
/>
</div>
<div class="form-group">
<label for="cloudflaredDomain">Domain Name</label>
<input
type="text"
id="cloudflaredDomain"
v-model="config.cloudflaredConfig.domain"
placeholder="homebox.example.com"
/>
<p class="help-text">The domain must be managed by Cloudflare</p>
</div>
<div class="form-group">
<label for="cloudflaredToken">Tunnel Token</label>
<input
type="password"
id="cloudflaredToken"
v-model="config.cloudflaredConfig.token"
placeholder="Your Cloudflare Tunnel token"
/>
<p class="help-text">Create a tunnel in the Cloudflare Zero Trust dashboard to get a token</p>
</div>
</div>
</div>
</div>
</div>
</template>
<script setup>
defineProps({
config: {
type: Object,
required: true
}
})
</script>
<style scoped>
@import './common.css';
h3 {
font-size: 1rem;
font-weight: 600;
margin: 0 0 0.5rem;
}
</style>

View File

@@ -0,0 +1,552 @@
<template>
<div class="storage-config">
<h3>Storage Configuration</h3>
<!-- Storage Type Selector -->
<div class="form-group">
<label for="storageType">Storage Type</label>
<select id="storageType" v-model="config.storageType" class="form-input">
<option value="local">Local Storage</option>
<option value="s3">Amazon S3 / S3-Compatible</option>
<option value="gcs">Google Cloud Storage</option>
<option value="azure">Azure Blob Storage</option>
</select>
<p class="form-help">Choose where Homebox will store your data</p>
</div>
<!-- Local Storage Configuration -->
<div v-if="config.storageType === 'local'" class="storage-section">
<h4>Local Storage Settings</h4>
<div class="form-group">
<label for="localType">Storage Type</label>
<select id="localType" v-model="config.storageConfig.local.type" class="form-input">
<option value="volume">Docker Volume</option>
<option value="directory">Host Directory</option>
</select>
</div>
<div v-if="config.storageConfig.local.type === 'directory'" class="form-group">
<label for="localDirectory">Host Directory Path</label>
<input
id="localDirectory"
v-model="config.storageConfig.local.directory"
type="text"
class="form-input"
placeholder="./homebox-data"
/>
<p class="form-help">Path on the host system where data will be stored</p>
</div>
<div v-if="config.storageConfig.local.type === 'volume'" class="form-group">
<label for="localVolume">Volume Name</label>
<input
id="localVolume"
v-model="config.storageConfig.local.volumeName"
type="text"
class="form-input"
placeholder="homebox-data"
/>
</div>
<div class="form-group">
<label for="localPath">Custom Storage Path (Optional)</label>
<input
id="localPath"
v-model="config.storageConfig.local.path"
type="text"
class="form-input"
placeholder="/data"
/>
<p class="form-help">Custom path inside the container. Leave as /data for default.</p>
</div>
</div>
<!-- S3 Storage Configuration -->
<div v-if="config.storageType === 's3'" class="storage-section">
<h4>S3 Storage Settings</h4>
<div class="form-group">
<label>
<input
type="checkbox"
v-model="config.storageConfig.s3.isCompatible"
class="form-checkbox"
/>
Use S3-Compatible Storage (MinIO, Cloudflare R2, Backblaze B2, etc.)
</label>
</div>
<div v-if="config.storageConfig.s3.isCompatible" class="form-group">
<label for="s3Service">S3-Compatible Service</label>
<select id="s3Service" v-model="config.storageConfig.s3.compatibleService" class="form-input">
<option value="">Custom/Other</option>
<option value="minio">MinIO</option>
<option value="cloudflare-r2">Cloudflare R2</option>
<option value="backblaze-b2">Backblaze B2</option>
</select>
</div>
<div class="form-group">
<label for="s3Bucket">Bucket Name</label>
<input
id="s3Bucket"
v-model="config.storageConfig.s3.bucket"
type="text"
class="form-input"
placeholder="my-homebox-bucket"
required
/>
</div>
<div v-if="!config.storageConfig.s3.isCompatible" class="form-group">
<label for="s3Region">AWS Region</label>
<input
id="s3Region"
v-model="config.storageConfig.s3.region"
type="text"
class="form-input"
placeholder="us-east-1"
required
/>
</div>
<div v-if="config.storageConfig.s3.isCompatible" class="form-group">
<label for="s3Endpoint">Endpoint URL</label>
<input
id="s3Endpoint"
v-model="config.storageConfig.s3.endpoint"
type="text"
class="form-input"
:placeholder="getS3EndpointPlaceholder()"
/>
<p class="form-help">The endpoint URL for your S3-compatible service</p>
</div>
<div class="form-group">
<label for="s3AccessKey">AWS Access Key ID</label>
<input
id="s3AccessKey"
v-model="config.storageConfig.s3.awsAccessKeyId"
type="text"
class="form-input"
placeholder="AKIAIOSFODNN7EXAMPLE"
required
/>
</div>
<div class="form-group">
<label for="s3SecretKey">AWS Secret Access Key</label>
<input
id="s3SecretKey"
v-model="config.storageConfig.s3.awsSecretAccessKey"
type="password"
class="form-input"
placeholder="wJalrXUtnFEMI/K7MDENG/bPxRfiCYEXAMPLEKEY"
required
/>
</div>
<div class="form-group">
<label for="s3SessionToken">AWS Session Token (Optional)</label>
<input
id="s3SessionToken"
v-model="config.storageConfig.s3.awsSessionToken"
type="password"
class="form-input"
placeholder="For temporary credentials"
/>
<p class="form-help">Only needed for temporary AWS credentials</p>
</div>
<div class="form-group">
<label for="s3PrefixPath">Storage Prefix Path (Optional)</label>
<input
id="s3PrefixPath"
v-model="config.storageConfig.s3.prefixPath"
type="text"
class="form-input"
placeholder="homebox/"
/>
<p class="form-help">Prefix for all stored objects in the bucket</p>
</div>
<!-- Advanced S3 Settings -->
<details class="advanced-settings">
<summary>Advanced S3 Settings</summary>
<div class="form-group">
<label for="s3AwsSdk">AWS SDK Version</label>
<select id="s3AwsSdk" v-model="config.storageConfig.s3.awsSdk" class="form-input">
<option value="v2">v2 (Recommended)</option>
<option value="v1">v1</option>
</select>
</div>
<div class="form-group">
<label>
<input
type="checkbox"
v-model="config.storageConfig.s3.disableSSL"
class="form-checkbox"
/>
Disable SSL
</label>
</div>
<div class="form-group">
<label>
<input
type="checkbox"
v-model="config.storageConfig.s3.s3ForcePathStyle"
class="form-checkbox"
/>
Force Path Style Access
</label>
</div>
<div class="form-group">
<label for="s3SseType">Server-Side Encryption</label>
<select id="s3SseType" v-model="config.storageConfig.s3.sseType" class="form-input">
<option value="">None</option>
<option value="AES256">AES256</option>
<option value="aws:kms">AWS KMS</option>
<option value="aws:kms:dsse">AWS KMS DSSE</option>
</select>
</div>
<div v-if="config.storageConfig.s3.sseType.includes('kms')" class="form-group">
<label for="s3KmsKey">KMS Key ID</label>
<input
id="s3KmsKey"
v-model="config.storageConfig.s3.kmsKeyId"
type="text"
class="form-input"
placeholder="arn:aws:kms:us-east-1:123456789012:key/12345678-1234-1234-1234-123456789012"
/>
</div>
<div class="form-group">
<label>
<input
type="checkbox"
v-model="config.storageConfig.s3.fips"
class="form-checkbox"
/>
Use FIPS Endpoints
</label>
</div>
<div class="form-group">
<label>
<input
type="checkbox"
v-model="config.storageConfig.s3.dualstack"
class="form-checkbox"
/>
Use Dual-Stack Endpoints
</label>
</div>
<div class="form-group">
<label>
<input
type="checkbox"
v-model="config.storageConfig.s3.accelerate"
class="form-checkbox"
/>
Use S3 Transfer Acceleration
</label>
</div>
</details>
</div>
<!-- Google Cloud Storage Configuration -->
<div v-if="config.storageType === 'gcs'" class="storage-section">
<h4>Google Cloud Storage Settings</h4>
<div class="form-group">
<label for="gcsBucket">Bucket Name</label>
<input
id="gcsBucket"
v-model="config.storageConfig.gcs.bucket"
type="text"
class="form-input"
placeholder="my-homebox-bucket"
required
/>
</div>
<div class="form-group">
<label for="gcsProject">Project ID</label>
<input
id="gcsProject"
v-model="config.storageConfig.gcs.projectId"
type="text"
class="form-input"
placeholder="my-gcp-project"
/>
</div>
<div class="form-group">
<label for="gcsCredentialsPath">Service Account Key Path</label>
<input
id="gcsCredentialsPath"
v-model="config.storageConfig.gcs.credentialsPath"
type="text"
class="form-input"
placeholder="/app/gcs-credentials.json"
/>
<p class="form-help">Path to the service account JSON key file inside the container</p>
</div>
<div class="form-group">
<label for="gcsPrefixPath">Storage Prefix Path (Optional)</label>
<input
id="gcsPrefixPath"
v-model="config.storageConfig.gcs.prefixPath"
type="text"
class="form-input"
placeholder="homebox/"
/>
<p class="form-help">Prefix for all stored objects in the bucket</p>
</div>
<div class="info-box">
<h5>📋 Setup Instructions:</h5>
<ol>
<li>Create a service account in your GCP project</li>
<li>Grant Storage Admin permissions to the service account</li>
<li>Download the JSON key file</li>
<li>Mount the key file as a read-only volume in your container</li>
<li>Set GOOGLE_APPLICATION_CREDENTIALS environment variable</li>
</ol>
</div>
</div>
<!-- Azure Blob Storage Configuration -->
<div v-if="config.storageType === 'azure'" class="storage-section">
<h4>Azure Blob Storage Settings</h4>
<div class="form-group">
<label>
<input
type="checkbox"
v-model="config.storageConfig.azure.useEmulator"
class="form-checkbox"
/>
Use Azure Storage Emulator (for development)
</label>
</div>
<div class="form-group">
<label for="azureContainer">Container Name</label>
<input
id="azureContainer"
v-model="config.storageConfig.azure.container"
type="text"
class="form-input"
placeholder="homebox-container"
required
/>
</div>
<div v-if="!config.storageConfig.azure.useEmulator" class="form-group">
<label for="azureAccount">Storage Account Name</label>
<input
id="azureAccount"
v-model="config.storageConfig.azure.storageAccount"
type="text"
class="form-input"
placeholder="mystorageaccount"
required
/>
</div>
<div v-if="!config.storageConfig.azure.useEmulator" class="form-group">
<label for="azureKey">Storage Account Key</label>
<input
id="azureKey"
v-model="config.storageConfig.azure.storageKey"
type="password"
class="form-input"
placeholder="Your Azure storage account key"
required
/>
</div>
<div v-if="!config.storageConfig.azure.useEmulator" class="form-group">
<label for="azureSas">SAS Token (Optional)</label>
<input
id="azureSas"
v-model="config.storageConfig.azure.sasToken"
type="password"
class="form-input"
placeholder="?sv=2021-06-08&ss=b&srt=sco&sp=rwdlacupx&se=..."
/>
<p class="form-help">Use SAS token instead of storage account key</p>
</div>
<div v-if="config.storageConfig.azure.useEmulator" class="form-group">
<label for="azureEmulatorEndpoint">Emulator Endpoint</label>
<input
id="azureEmulatorEndpoint"
v-model="config.storageConfig.azure.emulatorEndpoint"
type="text"
class="form-input"
placeholder="localhost:10001"
/>
</div>
<div class="form-group">
<label for="azurePrefixPath">Storage Prefix Path (Optional)</label>
<input
id="azurePrefixPath"
v-model="config.storageConfig.azure.prefixPath"
type="text"
class="form-input"
placeholder="homebox/"
/>
<p class="form-help">Prefix for all stored objects in the container</p>
</div>
</div>
</div>
</template>
<script setup>
import { defineProps } from 'vue'
const props = defineProps({
config: {
type: Object,
required: true
}
})
function getS3EndpointPlaceholder() {
const service = props.config.storageConfig.s3.compatibleService
switch (service) {
case 'minio':
return 'http://minio:9000'
case 'cloudflare-r2':
return 'https://<account-id>.r2.cloudflarestorage.com'
case 'backblaze-b2':
return 'https://s3.us-west-004.backblazeb2.com'
default:
return 'https://your-s3-compatible-endpoint.com'
}
}
</script>
<style scoped>
.storage-config {
padding: 1.5rem;
background-color: var(--vp-c-bg-soft);
border-radius: 8px;
}
.storage-section {
margin-top: 1.5rem;
padding: 1rem;
background-color: var(--vp-c-bg);
border-radius: 6px;
border: 1px solid var(--vp-c-divider);
}
.form-group {
margin-bottom: 1rem;
}
.form-group label {
display: block;
margin-bottom: 0.25rem;
font-weight: 500;
color: var(--vp-c-text-1);
}
.form-input {
width: 100%;
padding: 0.5rem;
border: 1px solid var(--vp-c-divider);
border-radius: 4px;
background-color: var(--vp-c-bg);
color: var(--vp-c-text-1);
font-size: 0.875rem;
}
.form-input:focus {
outline: none;
border-color: var(--vp-c-brand);
box-shadow: 0 0 0 2px var(--vp-c-brand-light);
}
.form-checkbox {
width: auto;
margin-right: 0.5rem;
}
.form-help {
margin-top: 0.25rem;
font-size: 0.75rem;
color: var(--vp-c-text-2);
}
.advanced-settings {
margin-top: 1rem;
border: 1px solid var(--vp-c-divider);
border-radius: 4px;
}
.advanced-settings summary {
padding: 0.75rem;
background-color: var(--vp-c-bg-mute);
cursor: pointer;
font-weight: 500;
}
.advanced-settings[open] summary {
border-bottom: 1px solid var(--vp-c-divider);
}
.advanced-settings .form-group {
margin: 1rem;
}
.info-box {
margin-top: 1rem;
padding: 1rem;
background-color: var(--vp-c-bg-alt);
border-left: 4px solid var(--vp-c-brand);
border-radius: 4px;
}
.info-box h5 {
margin: 0 0 0.5rem 0;
color: var(--vp-c-text-1);
}
.info-box ol {
margin: 0;
padding-left: 1.25rem;
}
.info-box li {
margin-bottom: 0.25rem;
font-size: 0.875rem;
color: var(--vp-c-text-2);
}
h3 {
margin: 0 0 1.5rem 0;
color: var(--vp-c-text-1);
font-size: 1.25rem;
font-weight: 600;
}
h4 {
margin: 0 0 1rem 0;
color: var(--vp-c-text-1);
font-size: 1.1rem;
font-weight: 600;
}
</style>

View File

@@ -0,0 +1,95 @@
<template>
<div class="storage-selector">
<h3>{{ label }}</h3>
<p class="help-text">{{ description }}</p>
<div class="radio-group">
<div class="radio-option">
<input
type="radio"
:id="`${storageKey}-volume`"
value="volume"
v-model="config.storageConfig[storageKey].type"
/>
<label :for="`${storageKey}-volume`">Docker Volume</label>
</div>
<div class="radio-option">
<input
type="radio"
:id="`${storageKey}-directory`"
value="directory"
v-model="config.storageConfig[storageKey].type"
/>
<label :for="`${storageKey}-directory`">Host Directory</label>
</div>
</div>
<div v-if="config.storageConfig[storageKey].type === 'volume'" class="form-group">
<label :for="`${storageKey}-volume-name`">Volume Name</label>
<input
type="text"
:id="`${storageKey}-volume-name`"
v-model="config.storageConfig[storageKey].volumeName"
/>
</div>
<div v-else class="form-group">
<label :for="`${storageKey}-directory-path`">Directory Path</label>
<input
type="text"
:id="`${storageKey}-directory-path`"
v-model="config.storageConfig[storageKey].directory"
/>
<p class="help-text">Absolute path recommended (e.g., /home/user/data)</p>
</div>
</div>
</template>
<script setup>
defineProps({
storageKey: {
type: String,
required: true
},
label: {
type: String,
required: true
},
description: {
type: String,
required: true
},
config: {
type: Object,
required: true
}
})
</script>
<style scoped>
@import './common.css';
.storage-selector {
margin-bottom: 2rem;
padding: 1rem;
border: 1px solid var(--vp-c-divider);
border-radius: 4px;
}
.storage-selector h3 {
font-size: 1rem;
font-weight: 600;
margin: 0 0 0.5rem;
}
.radio-group {
display: flex;
gap: 1.5rem;
margin: 1rem 0;
}
.radio-option {
display: flex;
align-items: center;
gap: 0.5rem;
}
</style>

View File

@@ -0,0 +1,150 @@
.card {
background-color: var(--vp-c-bg-soft);
border-radius: 8px;
overflow: hidden;
box-shadow: 0 2px 8px rgba(0, 0, 0, 0.05);
margin-bottom: 1.5rem;
}
.card-header {
padding: 1.5rem;
border-bottom: 1px solid var(--vp-c-divider);
}
.card-title {
font-size: 1.25rem;
font-weight: 600;
margin: 0 0 0.5rem;
border-top: 0px;
padding-top: 0px;
}
.card-description {
color: var(--vp-c-text-2);
font-size: 0.875rem;
margin: 0;
}
.card-content {
padding: 1.5rem;
}
.tab-content {
width: 100%;
}
.form-group {
margin-bottom: 1.25rem;
}
.form-group label {
display: block;
font-weight: 500;
margin-bottom: 0.5rem;
}
.form-group input,
.form-group select,
.form-group textarea {
width: 100%;
padding: 0.5rem;
border: 1px soli var(--vp-c-divider);
border-radius: 4px;
background-color: var(--vp-c-bg);
color: var(--vp-c-text-1);
font-size: 0.875rem;
}
.form-group input:focus,
.form-group select:focus,
.form-group textarea:focus {
outline: none;
border-color: var(--vp-c-brand);
box-shadow: 0 0 0 2px rgba(var(--vp-c-brand-rgb), 0.1);
}
.form-row {
display: flex;
justify-content: space-between;
align-items: center;
margin-bottom: 1.25rem;
}
.toggle-switch {
position: relative;
display: inline-block;
width: 40px;
height: 20px;
}
.toggle-switch input {
opacity: 0;
width: 0;
height: 0;
}
.toggle-switch label {
position: absolute;
cursor: pointer;
top: 0;
left: 0;
right: 0;
bottom: 0;
background-color: var(--vp-c-divider);
transition: .4s;
border-radius: 20px;
}
.toggle-switch label:before {
position: absolute;
content: "";
height: 16px;
width: 16px;
left: 2px;
bottom: 2px;
background-color: white;
transition: .4s;
border-radius: 50%;
}
.toggle-switch input:checked + label {
background-color: var(--vp-c-brand);
}
.toggle-switch input:checked + label:before {
transform: translateX(20px);
}
.help-text {
font-size: 0.75rem;
color: var(--vp-c-text-2);
margin-top: 0.25rem;
}
.separator {
height: 1px;
background-color: var(--vp-c-divider);
margin: 1.5rem 0;
}
.nested-form {
margin-top: 1rem;
padding: 1rem;
border: 1px solid var(--vp-c-divider);
border-radius: 4px;
}
.icon-button {
padding: 0.5rem;
background-color: var(--vp-c-bg-mute);
border: 1px solid var(--vp-c-divider);
border-radius: 4px;
font-size: 0.75rem;
cursor: pointer;
transition: all 0.2s ease;
}
.icon-button:hover {
background-color: var(--vp-c-bg-alt);
}

View File

@@ -0,0 +1,440 @@
export function generateDockerCompose(config: any): string {
const services: any = {}
const volumes: any = {}
const networks: any = {
homebox: {
driver: 'bridge'
}
}
// Generate Homebox service
services.homebox = generateHomeboxService(config)
// Add database service if PostgreSQL is selected
if (config.databaseType === 'postgres') {
services.postgres = generatePostgresService(config)
if (config.storageConfig.containerStorage.postgresStorage.type === 'volume') {
volumes[config.storageConfig.containerStorage.postgresStorage.volumeName] = null
}
}
// Ensure homebox-data volume exists if SQLite is selected
if (config.databaseType === 'sqlite') {
volumes['homebox-data'] = null
}
// Add reverse proxy services based on HTTPS option
switch (config.httpsOption) {
case 'traefik':
services.traefik = generateTraefikService(config)
if (config.storageConfig.containerStorage.traefikStorage.type === 'volume') {
volumes[config.storageConfig.containerStorage.traefikStorage.volumeName] = null
}
break
case 'nginx':
services.nginx = generateNginxService(config)
if (config.storageConfig.containerStorage.nginxStorage.type === 'volume') {
volumes[config.storageConfig.containerStorage.nginxStorage.volumeName] = null
}
break
case 'caddy':
services.caddy = generateCaddyService(config)
if (config.storageConfig.containerStorage.caddyStorage.type === 'volume') {
volumes[config.storageConfig.containerStorage.caddyStorage.volumeName] = null
}
break
case 'cloudflared':
services.cloudflared = generateCloudflaredService(config)
if (config.storageConfig.containerStorage.cloudflaredStorage.type === 'volume') {
volumes[config.storageConfig.containerStorage.cloudflaredStorage.volumeName] = null
}
break
}
// Add Homebox storage volume only for local storage
if (config.storageType === 'local' && config.storageConfig.local.type === 'volume') {
volumes[config.storageConfig.local.volumeName] = null
}
const compose = {
version: '3.8',
services,
...(Object.keys(volumes).length > 0 && {volumes}),
networks
}
return `# Generated Homebox Docker Compose Config Generator 1.0 Beta
# Storage Type: ${config.storageType.toUpperCase()}
# Generated on: ${new Date().toISOString()}
${yaml.stringify(compose)}`
}
function generateHomeboxService(config: any): any {
const service: any = {
image: config.rootless ? config.image.replace(':latest', ':latest-rootless') : config.image,
container_name: 'homebox',
restart: 'unless-stopped',
environment: generateEnvironmentVariables(config),
networks: ['homebox']
}
// Add ports for direct access (when no reverse proxy is used)
if (config.httpsOption === 'none') {
service.ports = [`${config.port}:7745`]
}
// Configure storage based on storage type
if (config.storageType === 'local') {
service.volumes = generateLocalStorageVolumes(config)
} else {
// For cloud storage, we might still need some local volumes for certain files
service.volumes = generateCloudStorageVolumes(config)
}
// Always mount homebox-data at /data if SQLite is used
if (config.databaseType === 'sqlite') {
if (!service.volumes) service.volumes = []
// Only add if not already present
if (!service.volumes.some(v => v.startsWith('homebox-data:'))) {
service.volumes.push('homebox-data:/data')
}
}
return service
}
function generateEnvironmentVariables(config: any): string[] {
const env: string[] = [
`HBOX_LOG_LEVEL=${config.logLevel}`,
`HBOX_LOG_FORMAT=${config.logFormat}`,
`HBOX_MAX_UPLOAD_SIZE=${config.maxFileUpload}`,
`HBOX_AUTO_INCREMENT_ASSET_ID=${config.autoIncrementAssetId}`,
`HBOX_WEB_PORT=7745`
]
// Database configuration
if (config.databaseType === 'postgres') {
env.push(
`HBOX_DATABASE_DRIVER=postgres`,
`HBOX_DATABASE_HOST=${config.postgresConfig.host}`,
`HBOX_DATABASE_PORT=${config.postgresConfig.port}`,
`HBOX_DATABASE_NAME=${config.postgresConfig.database}`,
`HBOX_DATABASE_USER=${config.postgresConfig.username}`,
`HBOX_DATABASE_PASS=${config.postgresConfig.password}`
)
}
// Registration settings
if (!config.allowRegistration) {
env.push('HBOX_OPTIONS_ALLOW_REGISTRATION=false')
}
// Analytics settings
if (!config.allowAnalytics) {
env.push('HBOX_OPTIONS_ALLOW_ANALYTICS=false')
}
// GitHub release check
if (!config.checkGithubRelease) {
env.push('HBOX_OPTIONS_CHECK_GITHUB_RELEASE=false')
}
// Storage configuration
env.push(...generateStorageEnvironmentVariables(config))
return env
}
function generateStorageEnvironmentVariables(config: any): string[] {
const env: string[] = []
switch (config.storageType) {
case 'local':
const storagePath = config.storageConfig.local.path || '/data'
env.push(`HBOX_STORAGE_CONN_STRING=file://${storagePath}`)
if (config.storageConfig.local.prefixPath) {
env.push(`HBOX_STORAGE_PREFIX_PATH=${config.storageConfig.local.prefixPath}`)
}
break
case 's3':
const s3Config = config.storageConfig.s3
let connectionString = `s3://${s3Config.bucket}?awssdk=${s3Config.awsSdk}`
if (s3Config.region && !s3Config.isCompatible) {
connectionString += `&region=${s3Config.region}`
}
if (s3Config.endpoint) {
connectionString += `&endpoint=${s3Config.endpoint}`
}
if (s3Config.disableSSL) {
connectionString += '&disableSSL=true'
}
if (s3Config.s3ForcePathStyle) {
connectionString += '&s3ForcePathStyle=true'
}
if (s3Config.sseType) {
connectionString += `&sseType=${s3Config.sseType}`
}
if (s3Config.kmsKeyId) {
connectionString += `&kmskeyid=${s3Config.kmsKeyId}`
}
if (s3Config.fips) {
connectionString += '&fips=true'
}
if (s3Config.dualstack) {
connectionString += '&dualstack=true'
}
if (s3Config.accelerate) {
connectionString += '&accelerate=true'
}
env.push(`HBOX_STORAGE_CONN_STRING=${connectionString}`)
if (s3Config.prefixPath) {
env.push(`HBOX_STORAGE_PREFIX_PATH=${s3Config.prefixPath}`)
}
// AWS credentials
env.push(`AWS_ACCESS_KEY_ID=${s3Config.awsAccessKeyId}`)
env.push(`AWS_SECRET_ACCESS_KEY=${s3Config.awsSecretAccessKey}`)
if (s3Config.awsSessionToken) {
env.push(`AWS_SESSION_TOKEN=${s3Config.awsSessionToken}`)
}
break
case 'gcs':
const gcsConfig = config.storageConfig.gcs
env.push(`HBOX_STORAGE_CONN_STRING=gcs://${gcsConfig.bucket}`)
if (gcsConfig.prefixPath) {
env.push(`HBOX_STORAGE_PREFIX_PATH=${gcsConfig.prefixPath}`)
}
env.push(`GOOGLE_APPLICATION_CREDENTIALS=${gcsConfig.credentialsPath}`)
break
case 'azure':
const azureConfig = config.storageConfig.azure
let azureConnectionString = `azblob://${azureConfig.container}`
if (azureConfig.useEmulator) {
azureConnectionString += `?protocol=http&domain=${azureConfig.emulatorEndpoint}`
}
env.push(`HBOX_STORAGE_CONN_STRING=${azureConnectionString}`)
if (azureConfig.prefixPath) {
env.push(`HBOX_STORAGE_PREFIX_PATH=${azureConfig.prefixPath}`)
}
if (!azureConfig.useEmulator) {
env.push(`AZURE_STORAGE_ACCOUNT=${azureConfig.storageAccount}`)
if (azureConfig.sasToken) {
env.push(`AZURE_STORAGE_SAS_TOKEN=${azureConfig.sasToken}`)
} else {
env.push(`AZURE_STORAGE_KEY=${azureConfig.storageKey}`)
}
}
break
}
return env
}
function generateLocalStorageVolumes(config: any): string[] {
const volumes: string[] = []
if (config.storageConfig.local.type === 'volume') {
const mountPath = config.storageConfig.local.path || '/data'
volumes.push(`${config.storageConfig.local.volumeName}:${mountPath}`)
} else {
const mountPath = config.storageConfig.local.path || '/data'
volumes.push(`${config.storageConfig.local.directory}:${mountPath}`)
}
return volumes
}
function generateCloudStorageVolumes(config: any): string[] {
const volumes: string[] = []
// For cloud storage, we might still need local volumes for certain files like GCS credentials
if (config.storageType === 'gcs') {
volumes.push('/path/to/gcs-credentials.json:/app/gcs-credentials.json:ro')
}
return volumes
}
function generatePostgresService(config: any): any {
const service: any = {
image: 'postgres:17-alpine',
container_name: 'homebox_postgres',
restart: 'unless-stopped',
environment: [
`POSTGRES_USER=${config.postgresConfig.username}`,
`POSTGRES_PASSWORD=${config.postgresConfig.password}`,
`POSTGRES_DB=${config.postgresConfig.database}`
],
networks: ['homebox']
}
if (config.storageConfig.containerStorage.postgresStorage.type === 'volume') {
service.volumes = [`${config.storageConfig.containerStorage.postgresStorage.volumeName}:/var/lib/postgresql/data`]
} else {
service.volumes = [`${config.storageConfig.containerStorage.postgresStorage.directory}:/var/lib/postgresql/data`]
}
return service
}
function generateTraefikService(config: any): any {
const service: any = {
image: 'traefik:v3.0',
container_name: 'traefik',
restart: 'unless-stopped',
command: [
'--api.dashboard=true',
'--providers.docker=true',
'--providers.docker.exposedbydefault=false',
'--entrypoints.web.address=:80',
'--entrypoints.websecure.address=:443',
'--certificatesresolvers.letsencrypt.acme.tlschallenge=true',
`--certificatesresolvers.letsencrypt.acme.email=${config.traefikConfig.email}`,
'--certificatesresolvers.letsencrypt.acme.storage=/letsencrypt/acme.json'
],
ports: ['80:80', '443:443'],
networks: ['homebox'],
labels: [
'traefik.enable=true',
'traefik.http.routers.traefik.rule=Host(`traefik.${config.traefikConfig.domain}`)',
'traefik.http.routers.traefik.entrypoints=websecure',
'traefik.http.routers.traefik.tls.certresolver=letsencrypt',
'traefik.http.routers.traefik.service=api@internal'
]
}
if (config.storageConfig.containerStorage.traefikStorage.type === 'volume') {
service.volumes = [
'/var/run/docker.sock:/var/run/docker.sock:ro',
`${config.storageConfig.containerStorage.traefikStorage.volumeName}:/letsencrypt`
]
} else {
service.volumes = [
'/var/run/docker.sock:/var/run/docker.sock:ro',
`${config.storageConfig.containerStorage.traefikStorage.directory}:/letsencrypt`
]
}
return service
}
function generateNginxService(config: any): any {
// This would generate an Nginx service with SSL configuration
// Implementation would depend on specific Nginx configuration needs
return {
image: 'nginx:alpine',
container_name: 'nginx',
restart: 'unless-stopped',
ports: [`${config.nginxConfig.port}:443`, '80:80'],
networks: ['homebox']
}
}
function generateCaddyService(config: any): any {
return {
image: 'caddy:alpine',
container_name: 'caddy',
restart: 'unless-stopped',
ports: ['80:80', '443:443'],
networks: ['homebox']
}
}
function generateCloudflaredService(config: any): any {
return {
image: 'cloudflare/cloudflared:latest',
container_name: 'cloudflared',
restart: 'unless-stopped',
command: `tunnel --no-autoupdate run --token ${config.cloudflaredConfig.token}`,
networks: ['homebox']
}
}
// Simple YAML stringifier (basic implementation
const yaml = {
stringify(obj: any, indent = 0, parentKey = "", isTopLevel = true): string {
const spaces = ' '.repeat(indent)
const nextSpaces = ' '.repeat(indent + 1)
if (obj === null || obj === undefined) {
return 'null'
}
if (typeof obj === 'string') {
if (parentKey === 'environment') {
// Should not be used, handled by stringifyEnv
return obj
}
if (obj.includes(':') || obj.includes('#') || obj.includes('\n') || /^[0-9]/.test(obj) || obj.includes('${')) {
return `"${obj.replace(/"/g, '\\"')}"`
}
return obj
}
if (typeof obj === 'number' || typeof obj === 'boolean') {
return String(obj)
}
if (Array.isArray(obj)) {
if (obj.length === 0) return '[]'
if (parentKey === 'environment') {
return yaml.stringifyEnv(obj, indent)
}
// For arrays under object keys, indent dashes at the same level as the parent key's value (spaces)
return '\n' + obj.map(item => `${spaces}- ${this.stringify(item, indent + 1, '', false).replace(/^\s+/, '')}`).join('\n')
}
if (typeof obj === 'object') {
const keys = Object.keys(obj)
if (keys.length === 0) return '{}'
return (isTopLevel ? '' : '\n') + keys.map(key => {
const value = this.stringify(obj[key], indent + 1, key, false)
// If value is an array, ensure correct indentation
if (Array.isArray(obj[key])) {
// Place key at current indent, then array items at next indent
return `${isTopLevel ? '' : spaces}${key}:${value}`
}
if (value.startsWith('\n')) {
return `${isTopLevel ? '' : spaces}${key}:${value}`
}
return `${isTopLevel ? '' : spaces}${key}: ${value}`
}).join('\n')
}
return String(obj)
},
stringifyEnv(envArr: string[], indent = 0): string {
const spaces = ' '.repeat(indent)
return '\n' + envArr.map(env => {
const eqIdx = env.indexOf('=')
if (eqIdx !== -1) {
const key = env.slice(0, eqIdx + 1)
let value = env.slice(eqIdx + 1)
// Only quote the value if it contains special YAML characters
if (value.match(/[:#\n]|^\d|\${/)) {
value = `"${value.replace(/"/g, '\\"')}"`
}
return `${spaces}- ${key}${value}`
}
return `${spaces}- ${env}`
}).join('\n')
}
}

View File

@@ -0,0 +1,90 @@
// types.ts
export type StorageType = "volume" | "directory"
export type HttpsOption = "none" | "traefik" | "nginx" | "caddy" | "cloudflared"
export type DatabaseType = "sqlite" | "postgres"
export interface StorageDetail {
type: StorageType
directory: string
volumeName: string
}
export interface StorageConfig {
homeboxStorage: StorageDetail
postgresStorage: StorageDetail
traefikStorage: StorageDetail
nginxStorage: StorageDetail
caddyStorage: StorageDetail
cloudflaredStorage: StorageDetail
}
export interface PostgresConfig {
host: string
port: string
username: string
password: string
database: string
}
export interface TraefikConfig {
domain: string
email: string
}
export interface NginxConfig {
domain: string
port: string
sslCertPath: string
sslKeyPath: string
}
export interface CaddyConfig {
domain: string
email: string
}
export interface CloudflaredConfig {
tunnel: string // Note: This wasn't used in the generator function, but kept for completeness
domain: string
token: string
}
export interface AppConfig {
image: string // Not directly used in generator, but part of the config
rootless: boolean
port: string
logLevel: string
logFormat: string
maxFileUpload: string
allowAnalytics: boolean
httpsOption: HttpsOption
traefikConfig: TraefikConfig
nginxConfig: NginxConfig
caddyConfig: CaddyConfig
cloudflaredConfig: CloudflaredConfig
databaseType: DatabaseType
postgresConfig: PostgresConfig
allowRegistration: boolean
autoIncrementAssetId: boolean
checkGithubRelease: boolean
storageConfig: StorageConfig
}
// Types for the generated Docker Compose structure
export interface DockerService {
image: string
container_name: string
restart: string
environment?: string[]
volumes: string[]
ports?: string[]
expose?: string[]
labels?: string[]
command?: string[]
depends_on?: string[]
}
export interface DockerServices {
[key: string]: DockerService
}

View File

@@ -42,28 +42,7 @@ $ docker run -d \
1. Create a `docker-compose.yml` file.
```yaml
services:
homebox:
image: ghcr.io/sysadminsmedia/homebox:latest
# image: ghcr.io/sysadminsmedia/homebox:latest-rootless
container_name: homebox
restart: always
environment:
- HBOX_LOG_LEVEL=info
- HBOX_LOG_FORMAT=text
- HBOX_WEB_MAX_FILE_UPLOAD=10
# Please consider allowing analytics to help us improve Homebox (basic computer information, no personal data)
- HBOX_OPTIONS_ALLOW_ANALYTICS=false
volumes:
- homebox-data:/data/
ports:
- 3100:7745
volumes:
homebox-data:
driver: local
```
<ConfigEditor />
::: info
If you use the `rootless` image, and instead of using named volumes you would prefer using a hostMount directly (e.g., `volumes: [ /path/to/data/folder:/data ]`) you need to `chown` the chosen directory in advance to the `65532` user (as shown in the Docker example above).
@@ -103,3 +82,7 @@ You can learn more about Docker by [reading the official Docker documentation.](
2. Extract the archive.
3. Run the `homebox` executable.
4. The web interface will be accessible on port 7745 by default. Access the page by navigating to `http://local.ip.address:7745/` (replace with the right ip address)
<script setup>
import ConfigEditor from '../.vitepress/components/ConfigEditor.vue'
</script>

View File

@@ -0,0 +1,8 @@
# DO NOT EDIT FILES HERE DIRECTLY UNLESS ADDING KEYS!
Please do not edit the files here directly unless your adding new translation keys to the en.json file.
All translations should be added according to [our documentation](https://homebox.software/en/contribute/get-started.html#translations) through our [weblate instance](https://translate.sysadminsmedia.com).
This helps ensure that our translations are consistent and effective.
PRs that modify these files directly will be closed without merge.

View File

@@ -1,20 +1,9 @@
{
"components": {
"app": {
"create_modal": {
"createAndAddAnother": "",
"enter": "",
"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.",
"description": "",
"title": "Importuj CSV fajl",
"toast": {
"import_failed": "",
"import_success": "",
"please_select_file": ""
}
"title": "Importuj CSV fajl"
},
"outdated": {
"current_version": "Trenutna verzija",
@@ -24,11 +13,6 @@
"new_version_available_link": "Klikni ovdje za pregled bilješke o izdanju"
}
},
"form": {
"password": {
"toggle_show": ""
}
},
"global": {
"copy_text": {
"documentation": "dokumentacija",
@@ -49,9 +33,6 @@
"minute": "minuta",
"minutes": "minuta",
"months": "mjeseci",
"next-month": "",
"next-week": "",
"next-year": "",
"second": "sekunda",
"seconds": "sekundi",
"tomorrow": "sutra",
@@ -59,553 +40,79 @@
"weeks": "sedmica/e",
"years": "godine/a",
"yesterday": "jučer"
},
"label_maker": {
"browser_print": "",
"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_photo": "",
"item_quantity": "",
"parent_item": "",
"rotate_photo": "",
"set_as_primary_photo": "",
"title": "",
"toast": {
"already_creating": "",
"create_failed": "",
"create_success": "",
"failed_load_parent": "",
"no_canvas_support": "",
"please_select_location": "",
"rotate_failed": "",
"rotate_process_failed": "",
"some_photos_failed": "",
"upload_failed": "",
"upload_success": "",
"uploading_photos": ""
},
"upload_photos": "",
"uploaded": ""
},
"selector": {
"no_results": "",
"placeholder": "",
"search_placeholder": ""
},
"view": {
"selectable": {
"card": "Karta",
"items": "Predmeti",
"no_items": "",
"table": "Tabela"
},
"table": {
"headers": "Zaglavlje",
"page": "Stranica",
"rows_per_page": "",
"table_settings": "",
"view_item": ""
"page": "Stranica"
}
}
},
"label": {
"create_modal": {
"label_description": "",
"label_name": "",
"title": "",
"toast": {
"already_creating": "",
"create_failed": "",
"create_success": "",
"label_name_too_long": ""
}
},
"selector": {
"select_labels": ""
}
},
"location": {
"create_modal": {
"location_description": "",
"location_name": "",
"title": "",
"toast": {
"already_creating": "",
"create_failed": "",
"create_success": ""
}
},
"selector": {
"no_location_found": "",
"parent_location": "",
"search_location": "",
"select_location": ""
},
"tree": {
"no_locations": ""
}
},
"quick_menu": {
"no_results": "",
"shortcut_hint": ""
}
},
"global": {
"add": "Dodaj",
"archived": "Arhivirano",
"build": "",
"cancel": "Poništi",
"confirm": "Potvrdi",
"create": "Kreiraj",
"create_and_add": "",
"create_subitem": "",
"created": "Kreirano",
"delete": "Obriši",
"delete_confirm": "",
"demo_instance": "",
"details": "Detalji",
"duplicate": "Dupliciraj",
"edit": "Izmjeni",
"email": "Email",
"follow_dev": "",
"footer": {
"api_link": "",
"version_link": ""
},
"github": "",
"insured": "Osigurano",
"items": "Predmeti",
"join_discord": "",
"labels": "Etikete",
"loading": "",
"locations": "Lokacije",
"maintenance": "Održavanje",
"name": "Ime",
"navigate": "Navigiraj",
"password": "Šifra",
"quantity": "Količina",
"read_docs": "",
"return_home": "",
"save": "Sačuvaj",
"search": "Pretraži",
"sign_out": "",
"submit": "",
"unknown": "",
"update": "",
"updating": "",
"value": "",
"version": "",
"welcome": ""
},
"home": {
"labels": "",
"quick_statistics": "",
"recently_added": "",
"storage_locations": "",
"total_items": "",
"total_labels": "",
"total_locations": "",
"total_value": ""
},
"index": {
"disabled_registration": "",
"dont_join_group": "",
"joining_group": "",
"login": "",
"register": "",
"remember_me": "",
"set_email": "",
"set_name": "",
"set_password": "",
"tagline": "",
"title": "",
"toast": {
"invalid_email": "",
"invalid_email_password": "",
"login_success": "",
"problem_registering": "",
"user_registered": ""
}
},
"items": {
"add": "",
"advanced": "",
"archived": "",
"asset_id": "",
"associated_with_multiple": "",
"attachment": "",
"attachments": "",
"changes_persisted_immediately": "",
"created_at": "",
"custom_fields": "",
"delete_attachment_confirm": "",
"delete_item_confirm": "",
"description": "",
"details": "",
"drag_and_drop": "",
"edit": {
"edit_attachment_dialog": {
"attachment_title": "",
"attachment_type": "",
"primary_photo": "",
"primary_photo_sub": "",
"select_type": "",
"title": ""
}
},
"edit_details": "",
"field_selector": "",
"field_value": "",
"first": "",
"include_archive": "",
"insured": "",
"invalid_asset_id": "",
"last": "",
"lifetime_warranty": "",
"location": "",
"manual": "",
"manuals": "",
"manufacturer": "",
"model_number": "",
"name": "",
"negate_labels": "",
"next_page": "",
"no_attachments": "",
"no_results": "",
"notes": "",
"only_with_photo": "",
"only_without_photo": "",
"options": "",
"order_by": "",
"pages": "",
"parent_item": "",
"photo": "",
"photos": "",
"prev_page": "",
"purchase_date": "",
"purchase_details": "",
"purchase_price": "",
"purchased_from": "",
"quantity": "",
"query_id": "",
"receipt": "",
"receipts": "",
"reset_search": "",
"results": "",
"select_field": "",
"serial_number": "",
"show_advanced_view_options": "",
"sold_at": "",
"sold_details": "",
"sold_price": "",
"sold_to": "",
"sync_child_locations": "",
"tip_1": "",
"tip_2": "",
"tip_3": "",
"tips": "",
"tips_sub": "",
"toast": {
"asset_not_found": "",
"attachment_deleted": "",
"attachment_updated": "",
"attachment_uploaded": "",
"child_items_location_no_longer_synced": "",
"child_items_location_synced": "",
"child_location_desync": "",
"error_loading_parent_data": "",
"failed_adjust_quantity": "",
"failed_delete_attachment": "",
"failed_delete_item": "",
"failed_duplicate_item": "",
"failed_load_asset": "",
"failed_load_item": "",
"failed_load_items": "",
"failed_save": "",
"failed_save_no_location": "",
"failed_search_items": "",
"failed_update_attachment": "",
"failed_upload_attachment": "",
"item_deleted": "",
"item_saved": "",
"quantity_cannot_negative": "",
"sync_child_location": ""
},
"updated_at": "",
"warranty": "",
"warranty_details": "",
"warranty_expires": ""
},
"labels": {
"label_delete_confirm": "",
"no_results": "",
"toast": {
"failed_delete_label": "",
"failed_load_label": "",
"failed_update_label": "",
"label_deleted": "",
"label_updated": ""
},
"update_label": ""
},
"languages": {
"ca": "",
"cs-CZ": "",
"da-DK": "",
"de": "",
"en": "",
"es": "",
"fi-FI": "",
"fr": "",
"hu": "",
"id-ID": "",
"it": "",
"ja-JP": "",
"ko-KR": "",
"lb-LU": "",
"lt-LT": "",
"nb-NO": "",
"nl": "",
"pl": "",
"pt-BR": "",
"pt-PT": "",
"ro-RO": "",
"ru": "",
"sk-SK": "",
"sl": "",
"sq-AL": "",
"sv": "",
"ta-IN": "",
"th-TH": "",
"tr": "",
"uk-UA": "",
"zh-CN": "",
"zh-HK": "",
"zh-MO": "",
"zh-TW": ""
},
"locations": {
"child_locations": "",
"collapse_tree": "",
"expand_tree": "",
"location_items_delete_confirm": "",
"no_results": "",
"toast": {
"failed_delete_location": "",
"failed_load_location": "",
"failed_update_location": "",
"location_deleted": "",
"location_updated": ""
},
"update_location": ""
"search": "Pretraži"
},
"maintenance": {
"filter": {
"both": "",
"completed": "",
"scheduled": ""
},
"list": {
"complete": "",
"create_first": "",
"delete": "Obriši",
"duplicate": "Dupliciraj",
"edit": "Izmjeni",
"new": ""
"edit": "Izmjeni"
},
"modal": {
"completed_date": "",
"cost": "",
"delete_confirmation": "",
"edit_action": "",
"edit_title": "",
"entry_name": "",
"new_action": "",
"new_title": "",
"notes": "Bilješke",
"scheduled_date": ""
},
"monthly_average": "",
"toast": {
"failed_to_create": "",
"failed_to_delete": "",
"failed_to_update": ""
},
"total_cost": "",
"total_entries": ""
"notes": "Bilješke"
}
},
"menu": {
"create_item": "",
"create_label": "",
"create_location": "",
"home": "",
"locations": "",
"maintenance": "",
"profile": "Profil",
"scanner": "",
"search": "",
"tools": ""
"profile": "Profil"
},
"profile": {
"active": "",
"change_password": "",
"currency_format": "",
"current_password": "",
"delete_account": "",
"delete_account_confirm": "",
"delete_account_sub": "",
"delete_notifier_confirm": "",
"display_legacy_header": "",
"enabled": "Uključeno",
"example": "Primjer",
"gen_invite": "Generiši link pozivnicu",
"group_settings": "Postavke grupe",
"group_settings_sub": "",
"inactive": "",
"language": "",
"new_password": "",
"no_notifiers": "",
"no_override": "",
"notifier_modal": "",
"notifiers": "",
"notifiers_sub": "",
"override_locale": "",
"test": "Test",
"theme_settings": "",
"theme_settings_sub": "",
"toast": {
"account_deleted": "",
"failed_change_password": "",
"failed_create_notifier": "",
"failed_delete_account": "",
"failed_delete_notifier": "",
"failed_get_currencies": "",
"failed_test_notifier": "",
"failed_update_group": "",
"failed_update_notifier": "",
"group_updated": "",
"notifier_test_success": "",
"password_changed": ""
},
"update_group": "",
"update_language": "",
"url": "",
"user_profile": "",
"user_profile_sub": ""
},
"reports": {
"label_generator": {
"asset_end": "",
"asset_start": "",
"base_url": "",
"bordered_labels": "",
"generate_page": "",
"input_placeholder": "",
"instruction_1": "",
"instruction_2": "",
"instruction_3": "",
"label_height": "",
"label_width": "",
"measure_type": "",
"page_bottom_padding": "",
"page_height": "",
"page_left_padding": "",
"page_right_padding": "",
"page_top_padding": "",
"page_width": "",
"qr_code_example": "",
"tip_1": "",
"tip_2": "",
"tip_3": "",
"tips": "",
"title": "",
"toast": {
"page_too_small_card": ""
}
}
"test": "Test"
},
"scanner": {
"error": "",
"invalid_url": "",
"no_sources": "",
"permission_denied": "",
"select_video_source": "",
"title": "Skener",
"unsupported": ""
"title": "Skener"
},
"tools": {
"actions": "",
"actions_set": {
"ensure_ids": "",
"ensure_ids_button": "",
"ensure_ids_confirm": "",
"ensure_ids_sub": "",
"ensure_import_refs": "",
"ensure_import_refs_button": "",
"ensure_import_refs_sub": "",
"set_primary_photo": "",
"set_primary_photo_button": "",
"set_primary_photo_confirm": "",
"set_primary_photo_sub": "",
"zero_datetimes": "",
"zero_datetimes_button": "",
"zero_datetimes_confirm": "",
"zero_datetimes_sub": ""
},
"actions_sub": "",
"import_export": "Imortovanje/Eksportovanje",
"import_export_set": {
"export": "Izvoz inventara",
"export_button": "Izvoz inventara",
"export_sub": "",
"import": "",
"import_button": "",
"import_ref_confirm": "",
"import_sub": ""
"export_button": "Izvoz inventara"
},
"import_export_sub": "",
"reports": "Izvještaji",
"reports_set": {
"asset_labels": "",
"asset_labels_button": "",
"asset_labels_sub": "",
"bill_of_materials": "Popis materijala",
"bill_of_materials_button": "Generiši popis materijala",
"bill_of_materials_sub": ""
},
"reports_sub": "",
"toast": {
"asset_success": "",
"failed_ensure_ids": "",
"failed_ensure_import_refs": "",
"failed_set_primary_photos": "",
"failed_zero_datetimes": ""
"bill_of_materials_button": "Generiši popis materijala"
}
}
}

View File

@@ -3,8 +3,7 @@
"app": {
"create_modal": {
"createAndAddAnother": "Utilitza {shiftKey} + {enterKey} per crear i afegir-ne un altre.",
"enter": "Entrar",
"shift": ""
"enter": "Entrar"
},
"import_dialog": {
"change_warning": "El comportament de les importacions amb import_refs existents ha canviat. Si hi ha un import_refs al fitxer CSV, \nl'article s'actualitzarà amb els valors del fitxer CSV.",
@@ -24,18 +23,7 @@
"new_version_available_link": "Fes clic aquí per veure les notes de la versió"
}
},
"form": {
"password": {
"toggle_show": ""
}
},
"global": {
"copy_text": {
"documentation": "",
"failed_to_copy": "",
"https_required": "",
"learn_more": ""
},
"date_time": {
"ago": "fa {0}",
"days": "dies",
@@ -61,62 +49,24 @@
"yesterday": "ahir"
},
"label_maker": {
"browser_print": "",
"confirm_description": "",
"download": "",
"print": "",
"server_print": "Imprimeix al servidor",
"titles": "Etiquetes",
"toast": {
"load_status_failed": "Fallat en carregar l'estat",
"print_failed": "",
"print_success": ""
"load_status_failed": "Fallat en carregar l'estat"
}
},
"page_qr_code": {
"page_url": "URL de la pàgina",
"qr_tooltip": ""
"page_url": "URL de la pàgina"
},
"password_score": {
"password_strength": "Força de la contrasenya"
}
},
"item": {
"attachments_list": {
"download": "",
"open_new_tab": ""
},
"create_modal": {
"delete_photo": "",
"item_description": "Descripció de l'article",
"item_name": "Nom de l'article",
"item_photo": "",
"item_quantity": "",
"parent_item": "",
"rotate_photo": "",
"set_as_primary_photo": "",
"title": "Crea un article",
"toast": {
"already_creating": "",
"create_failed": "",
"create_success": "",
"failed_load_parent": "",
"no_canvas_support": "",
"please_select_location": "",
"rotate_failed": "",
"rotate_process_failed": "",
"some_photos_failed": "",
"upload_failed": "",
"upload_success": "",
"uploading_photos": ""
},
"upload_photos": "",
"uploaded": ""
},
"selector": {
"no_results": "",
"placeholder": "",
"search_placeholder": ""
"title": "Crea un article"
},
"view": {
"selectable": {
@@ -126,11 +76,8 @@
"table": "Taula"
},
"table": {
"headers": "",
"page": "Pàgina",
"rows_per_page": "Files per pàgina",
"table_settings": "",
"view_item": ""
"rows_per_page": "Files per pàgina"
}
}
},
@@ -138,87 +85,50 @@
"create_modal": {
"label_description": "Descripció de l'etiqueta",
"label_name": "Nom de l'etiqueta",
"title": "Crea una etiqueta",
"toast": {
"already_creating": "",
"create_failed": "",
"create_success": "",
"label_name_too_long": ""
}
},
"selector": {
"select_labels": ""
"title": "Crea una etiqueta"
}
},
"location": {
"create_modal": {
"location_description": "Descripció de la ubicació",
"location_name": "Nom de la ubicació",
"title": "Crea una ubicació",
"toast": {
"already_creating": "",
"create_failed": "",
"create_success": ""
}
"title": "Crea una ubicació"
},
"selector": {
"no_location_found": "",
"parent_location": "Ubicació pare",
"search_location": "",
"select_location": ""
"parent_location": "Ubicació pare"
},
"tree": {
"no_locations": "No hi ha ubicacions disponibles. Afegiu ubicacions amb el botó\n `<`span class=\"link-primary\"`>`Crea`<`/span`>` a la barra de navegació."
}
},
"quick_menu": {
"no_results": "",
"shortcut_hint": ""
}
},
"global": {
"add": "Afegeix",
"archived": "",
"build": "Construcció: { build }",
"cancel": "",
"confirm": "Confirma",
"create": "Crea",
"create_and_add": "Crea i afegeix-ne un altre",
"create_subitem": "",
"created": "Creat",
"delete": "Esborra",
"delete_confirm": "",
"demo_instance": "",
"details": "Detalls",
"duplicate": "Duplica",
"edit": "Edita",
"email": "Correu electrònic",
"follow_dev": "Segueix al desenvolupador",
"footer": {
"api_link": "",
"version_link": ""
},
"github": "Projecte de GitHub",
"insured": "",
"items": "Articles",
"join_discord": "Uniu-vos a Discord",
"labels": "Etiquetes",
"loading": "",
"locations": "Ubicacions",
"maintenance": "Manteniment",
"name": "Nom",
"navigate": "",
"password": "Contrasenya",
"quantity": "",
"read_docs": "Llegiu la documentació",
"return_home": "",
"save": "Desa",
"search": "Cerca",
"sign_out": "Tanca la sessió",
"submit": "Envia",
"unknown": "",
"update": "Actualitza",
"updating": "",
"value": "Valor",
"version": "Versió {version}",
"welcome": "Us donem la benvinguda, { username }"
@@ -243,49 +153,27 @@
"set_email": "Quin és el seu correu electrònic?",
"set_name": "Com us dieu?",
"set_password": "Definiu la contrasenya",
"tagline": "Feu el seguiment, organitzeu i gestioneu les vostres coses.",
"title": "",
"toast": {
"invalid_email": "",
"invalid_email_password": "",
"login_success": "",
"problem_registering": "",
"user_registered": ""
}
"tagline": "Feu el seguiment, organitzeu i gestioneu les vostres coses."
},
"items": {
"add": "Afegeix",
"advanced": "Mode avançat",
"archived": "Arxivat",
"asset_id": "ID de l'actiu",
"associated_with_multiple": "",
"attachment": "Adjunt",
"attachments": "Documents adjunts",
"changes_persisted_immediately": "Els canvis als fitxers adjunts es desaran immediatament",
"created_at": "Creat a",
"custom_fields": "Camps personalitzats",
"delete_attachment_confirm": "",
"delete_item_confirm": "",
"description": "Descripció",
"details": "Detalls",
"drag_and_drop": "Arrossegueu i deixeu anar fitxers aquí o feu clic per seleccionar fitxers",
"edit": {
"edit_attachment_dialog": {
"attachment_title": "",
"attachment_type": "",
"primary_photo": "",
"primary_photo_sub": "",
"select_type": "",
"title": ""
}
},
"edit_details": "Edita els detalls",
"field_selector": "Selector del camp",
"field_value": "Valor del camp",
"first": "Primer",
"include_archive": "Inclou els articles arxivats",
"insured": "Assegurat",
"invalid_asset_id": "",
"last": "Últim",
"lifetime_warranty": "Garantia de per vida",
"location": "Ubicació",
@@ -296,11 +184,8 @@
"name": "Nom",
"negate_labels": "Nega les etiquetes seleccionades",
"next_page": "Pàgina següent",
"no_attachments": "",
"no_results": "No s'ha trobat cap element",
"notes": "Notes",
"only_with_photo": "",
"only_without_photo": "",
"options": "Opcions",
"order_by": "Ordena per",
"pages": "Pàgina { page } de { totalPages }",
@@ -318,88 +203,42 @@
"receipts": "Factures",
"reset_search": "Reinicia la cerca",
"results": "{ total } resultats",
"select_field": "",
"serial_number": "Número de sèrie",
"show_advanced_view_options": "Mostra les opcions avançades de visualització",
"sold_at": "Venut a (lloc)",
"sold_details": "Detalls de la venda",
"sold_price": "Preu de venda",
"sold_to": "Venut a",
"sync_child_locations": "",
"tip_1": "Els filtres d'ubicació i etiquetes utilitzen l'operació «O». Si se'n selecciona més d'un, \nnomés se'n requerirà un per a coincidència.",
"tip_2": "Les cerques amb el prefix «#» sol·licitaran un ID d'un actiu (per exemple, «#000-001»)",
"tip_3": "Els filtres de camp utilitzen l'operació «O». Si se'n selecciona més d'un, \nnomés se'n requerirà un per a coincidència.",
"tips": "Consells",
"tips_sub": "Consells de cerca",
"toast": {
"asset_not_found": "",
"attachment_deleted": "",
"attachment_updated": "",
"attachment_uploaded": "",
"child_items_location_no_longer_synced": "",
"child_items_location_synced": "",
"child_location_desync": "",
"error_loading_parent_data": "",
"failed_adjust_quantity": "",
"failed_delete_attachment": "",
"failed_delete_item": "",
"failed_duplicate_item": "",
"failed_load_asset": "",
"failed_load_item": "",
"failed_load_items": "",
"failed_save": "",
"failed_save_no_location": "",
"failed_search_items": "",
"failed_update_attachment": "",
"failed_upload_attachment": "",
"item_deleted": "",
"item_saved": "",
"quantity_cannot_negative": "",
"sync_child_location": ""
},
"updated_at": "Actualitzat a",
"warranty": "Garantia",
"warranty_details": "Detalls de la garantia",
"warranty_expires": "La garantia caduca"
},
"labels": {
"label_delete_confirm": "",
"no_results": "No s'han trobat etiquetes",
"toast": {
"failed_delete_label": "",
"failed_load_label": "",
"failed_update_label": "",
"label_deleted": "",
"label_updated": ""
},
"update_label": "Actualitza l'etiqueta"
},
"languages": {
"ca": "Català",
"cs-CZ": "",
"de": "Alemany",
"en": "Anglès",
"es": "Castellà",
"fi-FI": "",
"fr": "Francès",
"hu": "Hongarès",
"id-ID": "",
"it": "Italià",
"ja-JP": "Japonès",
"ko-KR": "",
"lb-LU": "",
"lt-LT": "",
"nb-NO": "",
"nl": "Neerlandès",
"pl": "Polonès",
"pt-BR": "Portuguès (Brasil)",
"pt-PT": "Portuguès (Portugal)",
"ru": "Rus",
"sl": "Eslovè",
"sq-AL": "",
"sv": "Suec",
"ta-IN": "",
"th-TH": "",
"tr": "Turc",
"uk-UA": "Ucraïnès",
"zh-CN": "Xinès (simplificat)",
@@ -413,16 +252,7 @@
"locations": {
"child_locations": "Ubicacions filles",
"collapse_tree": "Col·lapsa l'arbre",
"expand_tree": "",
"location_items_delete_confirm": "",
"no_results": "No s'han trobat ubicacions",
"toast": {
"failed_delete_location": "",
"failed_load_location": "",
"failed_update_location": "",
"location_deleted": "",
"location_updated": ""
},
"update_location": "Actualitza ubicació"
},
"maintenance": {
@@ -468,7 +298,6 @@
"locations": "Ubicacions",
"maintenance": "Manteniment",
"profile": "Perfil",
"scanner": "",
"search": "Cerca",
"tools": "Eines"
},
@@ -478,10 +307,7 @@
"currency_format": "Format de moneda",
"current_password": "Contrasenya actual",
"delete_account": "Suprimeix el compte",
"delete_account_confirm": "",
"delete_account_sub": "Elimina el compte i totes les dades associades. Aquesta acció no es pot desfer.",
"delete_notifier_confirm": "",
"display_legacy_header": "",
"enabled": "Habilitat",
"example": "Exemple",
"gen_invite": "Genera un enllaç d'invitació",
@@ -491,121 +317,44 @@
"language": "Idioma",
"new_password": "Contrasenya nova",
"no_notifiers": "No hi ha notificadors configurats",
"no_override": "",
"notifier_modal": "{ type, select, true {Edita} false {Crea} other {Altres}} Notificació",
"notifiers": "Notificadors",
"notifiers_sub": "Rebeu notificacions per als pròxims recordatoris de manteniment",
"override_locale": "",
"test": "Prova",
"theme_settings": "Configuracions del tema",
"theme_settings_sub": "La configuració del tema s'emmagatzema a l'emmagatzematge local del navegador. Podeu canviar el tema en qualsevol moment. \nSi teniu problemes per definir el tema, proveu d'actualitzar el navegador.",
"toast": {
"account_deleted": "",
"failed_change_password": "",
"failed_create_notifier": "",
"failed_delete_account": "",
"failed_delete_notifier": "",
"failed_get_currencies": "",
"failed_test_notifier": "",
"failed_update_group": "",
"failed_update_notifier": "",
"group_updated": "",
"notifier_test_success": "",
"password_changed": ""
},
"update_group": "Actualitza el grup",
"update_language": "Actualitza l'idioma",
"url": "URL",
"user_profile": "Perfil d'usuari",
"user_profile_sub": "Convida usuaris i gestiona el compte."
},
"reports": {
"label_generator": {
"asset_end": "",
"asset_start": "",
"base_url": "",
"bordered_labels": "",
"generate_page": "",
"input_placeholder": "",
"instruction_1": "",
"instruction_2": "",
"instruction_3": "",
"label_height": "",
"label_width": "",
"measure_type": "",
"page_bottom_padding": "",
"page_height": "",
"page_left_padding": "",
"page_right_padding": "",
"page_top_padding": "",
"page_width": "",
"qr_code_example": "",
"tip_1": "",
"tip_2": "",
"tip_3": "",
"tips": "",
"title": "",
"toast": {
"page_too_small_card": ""
}
}
},
"scanner": {
"error": "",
"invalid_url": "",
"no_sources": "",
"permission_denied": "",
"select_video_source": "",
"title": "",
"unsupported": ""
},
"tools": {
"actions": "Accions d'inventari",
"actions_set": {
"ensure_ids": "Assegura els identificadors de recursos",
"ensure_ids_button": "Assegura els identificadors de recursos",
"ensure_ids_confirm": "",
"ensure_ids_sub": "",
"ensure_import_refs": "Assegureu-vos d'importar les referències",
"ensure_import_refs_button": "Assegureu-vos d'importar les referències",
"ensure_import_refs_sub": "",
"set_primary_photo": "Defineix la foto principal",
"set_primary_photo_button": "Defineix la foto principal",
"set_primary_photo_confirm": "",
"set_primary_photo_sub": "",
"zero_datetimes": "",
"zero_datetimes_button": "",
"zero_datetimes_confirm": "",
"zero_datetimes_sub": ""
"set_primary_photo_button": "Defineix la foto principal"
},
"actions_sub": "",
"import_export": "Importa / Exporta",
"import_export_set": {
"export": "Exporta inventari",
"export_button": "Exporta inventari",
"export_sub": "Exporta el format CSV estàndard per a Homebox. S'exportaran tots els articles de l'inventari.",
"import": "Importa inventari",
"import_button": "Importa inventari",
"import_ref_confirm": "",
"import_sub": ""
"import_button": "Importa inventari"
},
"import_export_sub": "Importa i exporta l'inventari amb un fitxer CSV. És útil per a migracions d'inventari a una nova instància de Homebox.",
"reports": "Informes",
"reports_set": {
"asset_labels": "Etiquetes d'identificador de recurs",
"asset_labels_button": "Generador d'etiquetes",
"asset_labels_sub": "",
"bill_of_materials": "Llista de materials",
"bill_of_materials_button": "Genera llista de materials",
"bill_of_materials_sub": ""
"bill_of_materials_button": "Genera llista de materials"
},
"reports_sub": "Genera informes per a l'inventari",
"toast": {
"asset_success": "",
"failed_ensure_ids": "",
"failed_ensure_import_refs": "",
"failed_set_primary_photos": "",
"failed_zero_datetimes": ""
}
"reports_sub": "Genera informes per a l'inventari"
}
}

View File

@@ -115,15 +115,15 @@
"some_photos_failed": "{count, plural, =0 {Žádná fotka k nahrání.} =1 {Nepodařilo se nahrát 1 fotografii.} other {Některé fotografie se nepodařilo nahrát.}}",
"upload_failed": "Nepodařilo se nahrát fotku: { photoName }",
"upload_success": "{count, plural, =0 {Nejsou nahrané žádné fotky.} =1 {Fotka byla úspěšně nahrána.} other {Všechny fotky byly úspěšně nahrány.}}",
"uploading_photos": "{count, plural, =0 {Žádné fotky k nahrání} =1 {Nahrávání 1 fotky...} other {Nahrávání {count} fotek...}}"
"uploading_photos": "{count, plural, =0 {Žádné fotky k nahrání} =1 {Nahrávání 1 fotky} other {Nahrávání {count} fotek}}"
},
"upload_photos": "Nahrát fotografie",
"uploaded": "Fotka byla nahrána"
},
"selector": {
"no_results": "Nebyly nalezeny žádné výsledky",
"placeholder": "Vyberte...",
"search_placeholder": "Pište pro vyhledávání..."
"placeholder": "Vyberte",
"search_placeholder": "Pište pro vyhledávání"
},
"view": {
"selectable": {
@@ -176,7 +176,7 @@
"select_location": "Vybrat lokaci"
},
"tree": {
"no_locations": "Nejsou dostupné žádné lokace. Přidejte nové lokace\npomocí tlačítka `<`span class=\"link-primary\"`>`Vytvořit`<`/span`>` na navigační liště."
"no_locations": "Nejsou dostupné žádné lokace. Přidejte nové lokace\npomocí tlačítka <span class=\"link-primary\">Vytvořit</span> na navigační liště."
}
},
"quick_menu": {
@@ -211,7 +211,7 @@
"items": "Položky",
"join_discord": "Připojte se na Discord",
"labels": "Štítky",
"loading": "Načítání...",
"loading": "Načítání",
"locations": "Lokality",
"maintenance": "Údržba",
"name": "Jméno",

View File

@@ -1,20 +1,10 @@
{
"components": {
"app": {
"create_modal": {
"createAndAddAnother": "",
"enter": "",
"shift": ""
},
"import_dialog": {
"change_warning": "Adfærd for imports med eksisterende import_refs har ændret sig. Hvis en import_ref er tilstede i CSV filen,\nvil genstanden blive opdateret med værdierne fra CSV filen.",
"description": "Importer en CSV fil som indeholder dine genstande, etiketter, og lokationer. Se dokumentation for mere information vedrørende\nden korrekte format.",
"title": "Importer CSV Fil",
"toast": {
"import_failed": "",
"import_success": "",
"please_select_file": ""
}
"title": "Importer CSV Fil"
},
"outdated": {
"current_version": "Nuværende version",
@@ -24,11 +14,6 @@
"new_version_available_link": "Klik her for at læse udgivelsesnoterne"
}
},
"form": {
"password": {
"toggle_show": ""
}
},
"global": {
"copy_text": {
"documentation": "Dokumentation",
@@ -66,12 +51,7 @@
"download": "Hent label",
"print": "Print label",
"server_print": "Print på Server",
"titles": "Labels",
"toast": {
"load_status_failed": "",
"print_failed": "",
"print_success": ""
}
"titles": "Labels"
},
"page_qr_code": {
"page_url": "Side URL",
@@ -82,41 +62,12 @@
}
},
"item": {
"attachments_list": {
"download": "",
"open_new_tab": ""
},
"create_modal": {
"delete_photo": "",
"item_description": "Genstandsbeskrivelse",
"item_name": "Genstandsnavn",
"item_photo": "Vare Foto 📷",
"item_quantity": "",
"parent_item": "",
"rotate_photo": "",
"set_as_primary_photo": "",
"title": "Opret genstand",
"toast": {
"already_creating": "",
"create_failed": "",
"create_success": "",
"failed_load_parent": "",
"no_canvas_support": "",
"please_select_location": "",
"rotate_failed": "",
"rotate_process_failed": "",
"some_photos_failed": "",
"upload_failed": "",
"upload_success": "",
"uploading_photos": ""
},
"upload_photos": "Upload Billeder",
"uploaded": ""
},
"selector": {
"no_results": "",
"placeholder": "",
"search_placeholder": ""
"upload_photos": "Upload Billeder"
},
"view": {
"selectable": {
@@ -126,11 +77,9 @@
"table": "Tabel"
},
"table": {
"headers": "",
"page": "Side",
"rows_per_page": "Rækker per side",
"table_settings": "Tabel Indstillinger",
"view_item": ""
"table_settings": "Tabel Indstillinger"
}
}
},
@@ -138,13 +87,7 @@
"create_modal": {
"label_description": "Etiketbeskrivelse",
"label_name": "Etiketnavn",
"title": "Opret label",
"toast": {
"already_creating": "",
"create_failed": "",
"create_success": "",
"label_name_too_long": ""
}
"title": "Opret label"
},
"selector": {
"select_labels": "Vælg Etiketter"
@@ -154,71 +97,47 @@
"create_modal": {
"location_description": "Lokationsbeskrivelse",
"location_name": "Lokationsnavn",
"title": "Opret lokation",
"toast": {
"already_creating": "",
"create_failed": "",
"create_success": ""
}
"title": "Opret lokation"
},
"selector": {
"no_location_found": "",
"parent_location": "Forældrelokation",
"search_location": "",
"select_location": ""
"parent_location": "Forældrelokation"
},
"tree": {
"no_locations": "Ingen tilgængelige lokationer. Opret nye lokationer gennem\n`<`span class=\"link-primary\">`Opret`<`/span`>` knappen i navigationslinjen."
}
},
"quick_menu": {
"no_results": "",
"shortcut_hint": "Brug de numeriske taster til hurtigt at vælge en handling."
}
},
"global": {
"add": "Tilføj",
"archived": "",
"build": "Build: { build }",
"cancel": "",
"confirm": "Bekræft",
"create": "Opret",
"create_and_add": "Opret og tilføj ny",
"create_subitem": "",
"created": "Oprettet",
"delete": "Slet",
"delete_confirm": "",
"demo_instance": "",
"details": "Detaljer",
"duplicate": "Dupliker",
"edit": "Rediger",
"email": "Email",
"follow_dev": "Følg udvikleren",
"footer": {
"api_link": "",
"version_link": ""
},
"github": "GitHub projekt",
"insured": "",
"items": "Genstande",
"join_discord": "Deltag i vores Discord",
"labels": "Etiketter",
"loading": "",
"locations": "Lokationer",
"maintenance": "Opretholdelse",
"name": "Navn",
"navigate": "Naviger",
"password": "Adgangskode",
"quantity": "",
"read_docs": "Læs Docs",
"return_home": "",
"save": "Gem",
"search": "Søg",
"sign_out": "Log ud",
"submit": "Indsend",
"unknown": "",
"update": "Opdater",
"updating": "",
"value": "Værdi",
"version": "Version: { version }",
"welcome": "Velkommen, { username }"
@@ -243,49 +162,27 @@
"set_email": "Hvad er din E-Mail?",
"set_name": "Hvad hedder du?",
"set_password": "Opret din adgangskode",
"tagline": "Følg, Organiser, og Håndter dine Ting.",
"title": "",
"toast": {
"invalid_email": "",
"invalid_email_password": "",
"login_success": "",
"problem_registering": "",
"user_registered": ""
}
"tagline": "Følg, Organiser, og Håndter dine Ting."
},
"items": {
"add": "Tilføj",
"advanced": "Avanceret",
"archived": "Arkiveret",
"asset_id": "Aktiv-id",
"associated_with_multiple": "",
"attachment": "Vedhæftning",
"attachments": "Vedhæftninger",
"changes_persisted_immediately": "Ændringer af vedhæftede filer gemmes med det samme",
"created_at": "Oprettet den",
"custom_fields": "Brugerdefinerede felter",
"delete_attachment_confirm": "",
"delete_item_confirm": "",
"description": "Beskrivelse",
"details": "Detaljer",
"drag_and_drop": "Træk og slip filer her, eller klik for at vælge filer",
"edit": {
"edit_attachment_dialog": {
"attachment_title": "",
"attachment_type": "",
"primary_photo": "",
"primary_photo_sub": "",
"select_type": "",
"title": ""
}
},
"edit_details": "Rediger detaljer",
"field_selector": "Feltvælger",
"field_value": "Feltværdi",
"first": "Første",
"include_archive": "Medtag arkiverede elementer",
"insured": "Forsikret",
"invalid_asset_id": "",
"last": "Sidst",
"lifetime_warranty": "livstidsgaranti",
"location": "Lokalitet",
@@ -296,7 +193,6 @@
"name": "Navn",
"negate_labels": "Ophæv valgte etiketter",
"next_page": "Næste side",
"no_attachments": "",
"no_results": "Ingen elementer fundet",
"notes": "Noter",
"only_with_photo": "Kun elementer med foto",
@@ -318,77 +214,35 @@
"receipts": "Kvitteringer",
"reset_search": "Nulstil Søgning",
"results": "{ total } Wyniki",
"select_field": "",
"serial_number": "Serienummer",
"show_advanced_view_options": "vis avancerede indstillinger",
"sold_at": "Solgt D.",
"sold_details": "Salgs detaljer",
"sold_price": "Solgt pris",
"sold_to": "Sold til",
"sync_child_locations": "",
"tip_1": "Placerings- og etiketfiltre bruger betjeningen 'ELLER'. Hvis mere end én er valgt, kræves der kun én\n til et match.",
"tip_2": "Søgninger med præfikset '#'' vil forespørge efter et aktiv-id (eksempel '#000-001')",
"tip_3": "Feltfiltre bruger handlingen 'ELLER'. Hvis mere end én er valgt, kræves der kun én til en\n kamp.",
"tips": "Tips",
"tips_sub": "Søgetips",
"toast": {
"asset_not_found": "",
"attachment_deleted": "",
"attachment_updated": "",
"attachment_uploaded": "",
"child_items_location_no_longer_synced": "",
"child_items_location_synced": "",
"child_location_desync": "",
"error_loading_parent_data": "",
"failed_adjust_quantity": "",
"failed_delete_attachment": "",
"failed_delete_item": "",
"failed_duplicate_item": "",
"failed_load_asset": "",
"failed_load_item": "",
"failed_load_items": "",
"failed_save": "",
"failed_save_no_location": "",
"failed_search_items": "",
"failed_update_attachment": "",
"failed_upload_attachment": "",
"item_deleted": "",
"item_saved": "",
"quantity_cannot_negative": "",
"sync_child_location": ""
},
"updated_at": "Opdateret d.",
"warranty": "Garanti",
"warranty_details": "Oplysninger om garanti",
"warranty_expires": "Garantien udløber"
},
"labels": {
"label_delete_confirm": "",
"no_results": "Ingen etiketter fundet",
"toast": {
"failed_delete_label": "",
"failed_load_label": "",
"failed_update_label": "",
"label_deleted": "",
"label_updated": ""
},
"update_label": "Opdater etiket"
},
"languages": {
"ca": "Catalansk",
"cs-CZ": "",
"de": "Tysk",
"en": "Engelsk",
"es": "Spansk",
"fi-FI": "",
"fr": "Fransk",
"hu": "Ungarsk",
"id-ID": "",
"it": "Italiensk",
"ja-JP": "Japansk",
"ko-KR": "",
"lb-LU": "",
"lt-LT": "",
"nb-NO": "Norsk",
"nl": "Hollandsk",
"pl": "Polsk",
@@ -396,7 +250,6 @@
"pt-PT": "Portugisisk (Portugal)",
"ru": "Russisk",
"sl": "Slovensk",
"sq-AL": "",
"sv": "Svensk",
"ta-IN": "Tamilsk",
"th-TH": "Thailandsk",
@@ -413,16 +266,7 @@
"locations": {
"child_locations": "Underordnede placeringer",
"collapse_tree": "Kollaps træ",
"expand_tree": "",
"location_items_delete_confirm": "",
"no_results": "Ingen placeringer fundet",
"toast": {
"failed_delete_location": "",
"failed_load_location": "",
"failed_update_location": "",
"location_deleted": "",
"location_updated": ""
},
"update_location": "Opdatér sted"
},
"maintenance": {
@@ -478,10 +322,7 @@
"currency_format": "Valuta format",
"current_password": "Aktuel adgangskode",
"delete_account": "Slet Konto",
"delete_account_confirm": "",
"delete_account_sub": "Slet din konto og alle dens tilknyttede data. Dette kan ikke laves om.",
"delete_notifier_confirm": "",
"display_legacy_header": "",
"enabled": "Aktiveret",
"example": "Eksempel",
"gen_invite": "Generer invitationslink",
@@ -491,72 +332,23 @@
"language": "Sprog",
"new_password": "Ny Adgangskode",
"no_notifiers": "Ingen notifikationer konfiguret",
"no_override": "",
"notifier_modal": "{ type, select, true {Rediger} false {Opret} other {Andet}} Meddeler",
"notifiers": "Meddelere",
"notifiers_sub": "Få notifikationer om kommende vedligeholdelsespåmindelser",
"override_locale": "",
"test": "Test",
"theme_settings": "Temaindstillinger",
"theme_settings_sub": "Temaindstillinger gemmes i din browsers lokale lager. Du kan til enhver tid ændre temaet. Hvis du har\n problemer med at indstille dit tema, kan du prøve at opdatere din browser.",
"toast": {
"account_deleted": "",
"failed_change_password": "",
"failed_create_notifier": "",
"failed_delete_account": "",
"failed_delete_notifier": "",
"failed_get_currencies": "",
"failed_test_notifier": "",
"failed_update_group": "",
"failed_update_notifier": "",
"group_updated": "",
"notifier_test_success": "",
"password_changed": ""
},
"update_group": "Opdatér Gruppe",
"update_language": "Opdater sprogfil",
"url": "URL",
"user_profile": "Brugerprofil",
"user_profile_sub": "Inviter brugere, og administrer din konto."
},
"reports": {
"label_generator": {
"asset_end": "",
"asset_start": "",
"base_url": "",
"bordered_labels": "",
"generate_page": "",
"input_placeholder": "",
"instruction_1": "",
"instruction_2": "",
"instruction_3": "",
"label_height": "",
"label_width": "",
"measure_type": "",
"page_bottom_padding": "",
"page_height": "",
"page_left_padding": "",
"page_right_padding": "",
"page_top_padding": "",
"page_width": "",
"qr_code_example": "",
"tip_1": "",
"tip_2": "",
"tip_3": "",
"tips": "",
"title": "",
"toast": {
"page_too_small_card": ""
}
}
},
"scanner": {
"error": "Der skete en fejl under skanningen",
"invalid_url": "Ugyldig stregkode-URL",
"no_sources": "Ingen videokilder er tilgængelig",
"permission_denied": "",
"select_video_source": "Vælg en videokilde",
"title": "",
"unsupported": "Media Stream API understøttes ikke uden HTTPS"
},
"tools": {
@@ -564,18 +356,15 @@
"actions_set": {
"ensure_ids": "Sørg for aktiv-id'er",
"ensure_ids_button": "Sørg for aktiv-id'er",
"ensure_ids_confirm": "",
"ensure_ids_sub": "Sikrer, at alle varer på lageret har et gyldigt asset_id felt. Dette gøres ved at finde det højeste aktuelle aktiv_id felt i databasen og anvende den næste værdi på hvert element, der har et ikke sat aktiv_id felt. Dette gøres i rækkefølge efter feltet opret_den.",
"ensure_import_refs": "Sørg for importreferencer",
"ensure_import_refs_button": "Sørg for importreferencer",
"ensure_import_refs_sub": "Sikrer, at alle varer på lageret har et gyldigt import_ref felt. Dette gøres ved tilfældigt at generere en streng på 8 tegn for hvert element, der har et uindstillet import_ref felt.",
"set_primary_photo": "Indstil primært foto",
"set_primary_photo_button": "Indstil primært foto",
"set_primary_photo_confirm": "",
"set_primary_photo_sub": "I version v0.10.0 af Homebox blev det primære billedfelt tilføjet til vedhæftede filer af typen foto. Denne handling indstiller det primære billedfelt til det første billede i matrixen for vedhæftede filer i databasen, hvis det ikke allerede er angivet. '<a class=\"link\" href=\"https://github.com/hay-kot/homebox/pull/576\">'Se GitHub PR #576'</a>'",
"zero_datetimes": "Nul Vare Dato Tider",
"zero_datetimes_button": "Nul Varedato Tider",
"zero_datetimes_confirm": "",
"zero_datetimes_sub": "Nulstiller klokkeslætsværdien for alle dato- og klokkeslætsfelter i lageret til begyndelsen af datoen. Dette er for at rette en fejl, der blev introduceret tidligt i udviklingen af webstedet, der forårsagede, at tidsværdien blev gemt med tiden, hvilket forårsagede problemer med datofelter, der viste nøjagtige værdier. '<a class=\"link\" href=\"https://github.com/hay-kot/homebox/issues/236\" target=\"_blank\">'Se Github-udgave #236 for flere detaljer.'</a>'"
},
"actions_sub": "Anvend flere handlinger på din beholdning på én gang. Det er uigenkaldelige handlinger. '<b>'Vær forsigtig.'</b>'",
@@ -586,7 +375,6 @@
"export_sub": "Eksporterer standard CSV-formatet til Homebox. Dette vil eksportere alle varer i dit lager.",
"import": "Importeret beholdning",
"import_button": "Importer beholdning",
"import_ref_confirm": "",
"import_sub": "Importerer standard CSV-formatet til Homebox. Uden en '<code>'HB.import_ref'</code>'-kolonne vil dette '<b>'ikke'</b>' overskrive eksisterende genstande i dit lager, kun tilføje nye genstande. Rækker med kolonnen \"<code>HB.import_ref\"</code> flettes ind i eksisterende elementer med samme import_ref, hvis der findes en."
},
"import_export_sub": "Importér og eksporter din lagerbeholdning til og fra en CSV-fil. Dette er nyttigt til at migrere dit lager til en ny forekomst af Homebox.",
@@ -599,13 +387,6 @@
"bill_of_materials_button": "Generer stykliste",
"bill_of_materials_sub": "Genererer en CSV-fil (kommaseparerede værdier), der kan importeres til et regnearksprogram. Dette er en oversigt over din beholdning med grundlæggende vare- og prisoplysninger."
},
"reports_sub": "Generer forskellige rapporter for dit lager.",
"toast": {
"asset_success": "",
"failed_ensure_ids": "",
"failed_ensure_import_refs": "",
"failed_set_primary_photos": "",
"failed_zero_datetimes": ""
}
"reports_sub": "Generer forskellige rapporter for dit lager."
}
}

View File

@@ -24,6 +24,13 @@
"new_version_available_link": "Haz click aquí para ver las notas de la versión"
}
},
"color_selector": {
"clear": "Borrar color",
"color": "Color",
"no_color": "Sin color",
"no_color_selected": "Ningún color seleccionado",
"randomize": "Aleatorizar color"
},
"form": {
"password": {
"toggle_show": "Alternar Visibilidad de la Contraseña"
@@ -108,15 +115,15 @@
"some_photos_failed": "{count, plural, =0 {No hay fotos para subir.} =1 {1 foto no se ha podido subir.} other {Algunas fotos no se han podido subir.}}",
"upload_failed": "Error al subir la foto: { photoName }",
"upload_success": "{count, plural, =0 {No hay fotos subidas.} =1 {Foto subida con éxito.} other {Todas las fotos subidas con éxito.}}",
"uploading_photos": "{count, plural, =0 {No hay fotos para subir} =1 {Subiendo 1 foto...} other {Subiendo {count} fotos...}}"
"uploading_photos": "{count, plural, =0 {No hay fotos para subir} =1 {Subiendo 1 foto} other {Subiendo {count} fotos}}"
},
"upload_photos": "Fotos Subidas",
"uploaded": "Foto Subida"
},
"selector": {
"no_results": "Resultados No Encontrados",
"placeholder": "Seleccionar...",
"search_placeholder": "Escribe para buscar..."
"placeholder": "Seleccionar",
"search_placeholder": "Escribe para buscar"
},
"view": {
"selectable": {
@@ -136,6 +143,7 @@
},
"label": {
"create_modal": {
"label_color": "Color de Etiqueta",
"label_description": "Descripción de la etiqueta",
"label_name": "Nombre de la Etiqueta",
"title": "Crear Etiqueta",
@@ -168,7 +176,7 @@
"select_location": "Elegir una Ubicación"
},
"tree": {
"no_locations": "No hay ubicaciones disponibles. Añade nuevas ubicaciones mediante el botón de\n`<`span class=\"link-primary\"`>`Crear`<`/span`>` en la barra de navegación."
"no_locations": "No hay ubicaciones disponibles. Añade nuevas ubicaciones mediante el botón de\n'<span class=\"link-primary\">'Crear'</span>' en la barra de navegación."
}
},
"quick_menu": {
@@ -203,7 +211,7 @@
"items": "Elementos",
"join_discord": "Únete al Discord",
"labels": "Etiquetas",
"loading": "Cargando...",
"loading": "Cargando",
"locations": "Ubicaciones",
"maintenance": "Mantenimiento",
"name": "Nombre",
@@ -562,6 +570,10 @@
"tools": {
"actions": "Acciones de Inventario",
"actions_set": {
"create_missing_thumbnails": "Crear Miniaturas que Faltan",
"create_missing_thumbnails_button": "Crear Miniaturas",
"create_missing_thumbnails_confirm": "¿Estás seguro de que deseas crear las miniaturas que faltan? Esto puede tardar un poco y no se puede pausar.",
"create_missing_thumbnails_sub": "Crea miniaturas para todos los archivos adjuntos compatibles con la configuración actual. Esto es útil para los adjuntos que se subieron antes de la versión v0.20.0 de Homebox. Esto no sobreescribirá las miniaturas existentes, sólo creará nuevas para los adjuntos que no tienen una miniatura. Ten en cuenta que las miniaturas se crean en segundo plano y pueden tardar un poco en completarse.",
"ensure_ids": "Asegurar IDs de Activos",
"ensure_ids_button": "Asignar ID a los artículos",
"ensure_ids_confirm": "¿Estás seguro de que quieres asegurarte de que todos los activos tengan un ID? Esto puede tardar un tiempo y no puede deshacerse.",
@@ -602,6 +614,7 @@
"reports_sub": "Genera diferentes informes para tu inventario.",
"toast": {
"asset_success": "Se han actualizado { results } activos.",
"failed_create_missing_thumbnails": "No se han podido crear las miniaturas que faltaban.",
"failed_ensure_ids": "Error al asegurar los ID de los activos.",
"failed_ensure_import_refs": "Error al asegurar las ref. de importación.",
"failed_set_primary_photos": "No se han podido establecer las fotos principales.",

View File

@@ -1,20 +1,10 @@
{
"components": {
"app": {
"create_modal": {
"createAndAddAnother": "",
"enter": "",
"shift": ""
},
"import_dialog": {
"change_warning": "Olemassa olevien import_refs-tiedostojen tuonnin käyttäytyminen on muuttunut. Jos CSV-tiedostossa on import_ref, \nkohde päivitetään CSV-tiedoston arvoilla.",
"description": "Tuo CSV-tiedosto, joka sisältää kohteesi, tarrasi ja sijaintisi. Katso lisätietoja dokumentaatiosta \nvaadittu muoto.",
"title": "Tuo CSV-tiedosto",
"toast": {
"import_failed": "",
"import_success": "",
"please_select_file": ""
}
"title": "Tuo CSV-tiedosto"
},
"outdated": {
"current_version": "Nykyinen versio",
@@ -24,11 +14,6 @@
"new_version_available_link": "Klikkaa tästä nähdäksesi julkaisutiedot"
}
},
"form": {
"password": {
"toggle_show": ""
}
},
"global": {
"copy_text": {
"documentation": "dokumentointi",
@@ -66,12 +51,7 @@
"download": "Lataa Tarra",
"print": "Tulosta tarra",
"server_print": "Tulosta palvelimella",
"titles": "Tarra",
"toast": {
"load_status_failed": "",
"print_failed": "",
"print_success": ""
}
"titles": "Tarra"
},
"page_qr_code": {
"page_url": "Sivun URL",
@@ -82,41 +62,13 @@
}
},
"item": {
"attachments_list": {
"download": "",
"open_new_tab": ""
},
"create_modal": {
"delete_photo": "",
"item_description": "Kohteen Kuvaus",
"item_name": "Tuotteen Nimi",
"item_photo": "Kohteen Kuva 📷",
"item_quantity": "Tuotteen Määrä",
"parent_item": "",
"rotate_photo": "",
"set_as_primary_photo": "",
"title": "Luo Kohde",
"toast": {
"already_creating": "",
"create_failed": "",
"create_success": "",
"failed_load_parent": "",
"no_canvas_support": "",
"please_select_location": "",
"rotate_failed": "",
"rotate_process_failed": "",
"some_photos_failed": "",
"upload_failed": "",
"upload_success": "",
"uploading_photos": ""
},
"upload_photos": "Lataa Valokuvia",
"uploaded": ""
},
"selector": {
"no_results": "",
"placeholder": "",
"search_placeholder": ""
"upload_photos": "Lataa Valokuvia"
},
"view": {
"selectable": {
@@ -129,8 +81,7 @@
"headers": "Otsikko",
"page": "Sivu",
"rows_per_page": "Rivejä sivua kohti",
"table_settings": "Taulukon Asetukset",
"view_item": ""
"table_settings": "Taulukon Asetukset"
}
}
},
@@ -138,13 +89,7 @@
"create_modal": {
"label_description": "Etiketin Kuvaus",
"label_name": "Etiketin Nimi",
"title": "Luo Tarra",
"toast": {
"already_creating": "",
"create_failed": "",
"create_success": "",
"label_name_too_long": ""
}
"title": "Luo Tarra"
},
"selector": {
"select_labels": "Valitse Tarrat"
@@ -154,12 +99,7 @@
"create_modal": {
"location_description": "Sijainnin Kuvaus",
"location_name": "Sijainnin Nimi",
"title": "Luo Sijainti",
"toast": {
"already_creating": "",
"create_failed": "",
"create_success": ""
}
"title": "Luo Sijainti"
},
"selector": {
"no_location_found": "Sijaintia ei löytynyt",
@@ -184,11 +124,8 @@
"confirm": "Vahvistaa",
"create": "Luoda",
"create_and_add": "Luo ja lisää toinen",
"create_subitem": "",
"created": "Luotu",
"delete": "Poistaa",
"delete_confirm": "",
"demo_instance": "",
"details": "Tiedot",
"duplicate": "Kaksoiskappale",
"edit": "Muokkaa",
@@ -203,7 +140,6 @@
"items": "Erä",
"join_discord": "Liity Discord",
"labels": "Tarra",
"loading": "",
"locations": "Sijainti",
"maintenance": "Huolto",
"name": "Nimi",
@@ -211,14 +147,11 @@
"password": "Salasana",
"quantity": "Määrä",
"read_docs": "Lue dokumentit",
"return_home": "",
"save": "Tallentaa",
"search": "Etsiä",
"sign_out": "Kirjaudu Ulos",
"submit": "Lähettää",
"unknown": "",
"update": "Päivitys",
"updating": "",
"value": "Arvo",
"version": "Versio: { version }",
"welcome": "Tervetuloa, { username }"
@@ -243,49 +176,27 @@
"set_email": "Mikä on sähköpostisi?",
"set_name": "Mikä sinun nimesi on?",
"set_password": "Aseta salasana",
"tagline": "Seuraa, Järjestä ja hallitse asioitasi.",
"title": "",
"toast": {
"invalid_email": "",
"invalid_email_password": "",
"login_success": "",
"problem_registering": "",
"user_registered": ""
}
"tagline": "Seuraa, Järjestä ja hallitse asioitasi."
},
"items": {
"add": "Lisätä",
"advanced": "Edistyksellinen",
"archived": "Arkistoitu",
"asset_id": "Omaisuuserän ID",
"associated_with_multiple": "",
"attachment": "Liite",
"attachments": "Liitteet",
"changes_persisted_immediately": "Liitteiden muutokset tallennetaan välittömästi",
"created_at": "Luotu Osoitteessa",
"custom_fields": "Mukautetut Kentät",
"delete_attachment_confirm": "",
"delete_item_confirm": "",
"description": "Kuvaus",
"details": "Tiedot",
"drag_and_drop": "Vedä ja pudota tiedostoja tähän tai valitse tiedostot napsauttamalla",
"edit": {
"edit_attachment_dialog": {
"attachment_title": "",
"attachment_type": "",
"primary_photo": "",
"primary_photo_sub": "",
"select_type": "",
"title": ""
}
},
"edit_details": "Muokkaa Tietoja",
"field_selector": "Kentän Valitsin",
"field_value": "Kentän Arvo",
"first": "Ensimmäinen",
"include_archive": "Sisällytä Arkistoidut Kohteet",
"insured": "Vakuuttaa",
"invalid_asset_id": "",
"last": "Viimeinen",
"lifetime_warranty": "Elinikäinen Takuu",
"location": "Paikka",
@@ -296,7 +207,6 @@
"name": "Nimi",
"negate_labels": "Poista Valitut Nimilaput",
"next_page": "Seuraava Sivu",
"no_attachments": "",
"no_results": "Kohteita Ei Löytynyt",
"notes": "Huomautus",
"only_with_photo": "Vain tuotteet, joissa on valokuva",
@@ -318,60 +228,24 @@
"receipts": "Kuitin",
"reset_search": "Haku nollataan",
"results": "{ total } Tulokset",
"select_field": "",
"serial_number": "Sarjanumero",
"show_advanced_view_options": "Näytä näkymän lisäasetukset",
"sold_at": "Myyty klo",
"sold_details": "Myydyt Tiedot",
"sold_price": "Myyty Hinta",
"sold_to": "Myyty",
"sync_child_locations": "",
"tip_1": "Sijainti-ja etikettisuodattimet käyttävät \" tai \" - toimintoa. Jos valitaan useampi kuin yksi, vain yksi on\n tarvitaan ottelu.",
"tip_2": "\"#\"- Etuliitteellä tehdyt haut kyselevät omaisuuserän tunnusta (esimerkki \"#000-001\")",
"tip_3": "Kenttäsuodattimet käyttävät \" tai \" - toimintoa. Jos valitaan useampi kuin yksi, tarvitaan vain yksi\n ottelu.",
"tips": "Vihje",
"tips_sub": "Etsi Vinkkejä",
"toast": {
"asset_not_found": "",
"attachment_deleted": "",
"attachment_updated": "",
"attachment_uploaded": "",
"child_items_location_no_longer_synced": "",
"child_items_location_synced": "",
"child_location_desync": "",
"error_loading_parent_data": "",
"failed_adjust_quantity": "",
"failed_delete_attachment": "",
"failed_delete_item": "",
"failed_duplicate_item": "",
"failed_load_asset": "",
"failed_load_item": "",
"failed_load_items": "",
"failed_save": "",
"failed_save_no_location": "",
"failed_search_items": "",
"failed_update_attachment": "",
"failed_upload_attachment": "",
"item_deleted": "",
"item_saved": "",
"quantity_cannot_negative": "",
"sync_child_location": ""
},
"updated_at": "Päivitetty Osoitteessa",
"warranty": "Takuu",
"warranty_details": "Takuun Tiedot",
"warranty_expires": "Takuu Päättyy"
},
"labels": {
"label_delete_confirm": "",
"no_results": "Tarroja Ei Löytynyt",
"toast": {
"failed_delete_label": "",
"failed_load_label": "",
"failed_update_label": "",
"label_deleted": "",
"label_updated": ""
},
"update_label": "Päivitä Nimiö"
},
"languages": {
@@ -388,8 +262,6 @@
"it": "Italia",
"ja-JP": "Japani",
"ko-KR": "Korea",
"lb-LU": "",
"lt-LT": "",
"nb-NO": "Norjalainen Bokmål",
"nl": "Hollanti",
"pl": "Puola",
@@ -414,15 +286,7 @@
"child_locations": "Lasten Sijainnit",
"collapse_tree": "Romahdus Puu",
"expand_tree": "Laajenna Puu",
"location_items_delete_confirm": "",
"no_results": "Sijainteja Ei Löytynyt",
"toast": {
"failed_delete_location": "",
"failed_load_location": "",
"failed_update_location": "",
"location_deleted": "",
"location_updated": ""
},
"update_location": "Päivitä Sijainti"
},
"maintenance": {
@@ -478,10 +342,7 @@
"currency_format": "Valuutan Muoto",
"current_password": "Nykyinen Salasana",
"delete_account": "Poista tili",
"delete_account_confirm": "",
"delete_account_sub": "Poista tilisi ja kaikki siihen liittyvät tiedot. Tätä ei voi perua.",
"delete_notifier_confirm": "",
"display_legacy_header": "",
"enabled": "Käyttöön",
"example": "Esimerkiksi",
"gen_invite": "Luo Kutsulinkki",
@@ -491,70 +352,22 @@
"language": "Kieli",
"new_password": "Uusi Salasana",
"no_notifiers": "Ilmoittajia ei ole määritetty",
"no_override": "",
"notifier_modal": "{ type, select, true {Edit} false {Create} other {Other}} Ilmoittaja",
"notifiers": "Ilmoittaja",
"notifiers_sub": "Saat ilmoituksia tulevista huoltomuistutuksista",
"override_locale": "",
"test": "Testi",
"theme_settings": "Teeman Asetukset",
"theme_settings_sub": "Teeman asetukset tallennetaan selaimesi paikalliseen tallennustilaan. Voit vaihtaa teemaa milloin tahansa. Jos olet\n jos sinulla on ongelmia teeman asettamisessa, yritä päivittää selaimesi.",
"toast": {
"account_deleted": "",
"failed_change_password": "",
"failed_create_notifier": "",
"failed_delete_account": "",
"failed_delete_notifier": "",
"failed_get_currencies": "",
"failed_test_notifier": "",
"failed_update_group": "",
"failed_update_notifier": "",
"group_updated": "",
"notifier_test_success": "",
"password_changed": ""
},
"update_group": "Päivitä Ryhmä",
"update_language": "Päivitä Kieli",
"url": "URL",
"user_profile": "käyttäjäprofiili",
"user_profile_sub": "Kutsu käyttäjiä ja Hallitse tiliäsi."
},
"reports": {
"label_generator": {
"asset_end": "",
"asset_start": "",
"base_url": "",
"bordered_labels": "",
"generate_page": "",
"input_placeholder": "",
"instruction_1": "",
"instruction_2": "",
"instruction_3": "",
"label_height": "",
"label_width": "",
"measure_type": "",
"page_bottom_padding": "",
"page_height": "",
"page_left_padding": "",
"page_right_padding": "",
"page_top_padding": "",
"page_width": "",
"qr_code_example": "",
"tip_1": "",
"tip_2": "",
"tip_3": "",
"tips": "",
"title": "",
"toast": {
"page_too_small_card": ""
}
}
},
"scanner": {
"error": "Skannattaessa tapahtui virhe",
"invalid_url": "Virheellinen viivakoodin URL",
"no_sources": "Videolähteitä ei ole saatavilla",
"permission_denied": "",
"select_video_source": "Valitse videolähde",
"title": "Skanneri",
"unsupported": "Media Stream API ei ole tuettu ilman HTTPS"
@@ -564,18 +377,15 @@
"actions_set": {
"ensure_ids": "Varmistetaan, että omaisuuserät ID:t",
"ensure_ids_button": "Varmistetaan omaisuuserät ID:t",
"ensure_ids_confirm": "",
"ensure_ids_sub": "Varmistaa, että kaikilla varastossasi olevilla kohteilla on voimassa oleva asset_id-kenttä. Tämä tehdään etsimällä tietokannan korkein nykyinen asset_id-kenttä ja soveltamalla seuraavaa arvoa jokaiselle kohteelle, jolla on unset asset_id-kenttä. Tämä tehdään created_at-kentän järjestyksessä.",
"ensure_import_refs": "Varmista Tuonnin Viitteet",
"ensure_import_refs_button": "Varmista Tuonnin Viitteet",
"ensure_import_refs_sub": "Varmistaa, että kaikilla varastossasi olevilla kohteilla on voimassa oleva import_ref-kenttä. Tämä tehdään luomalla satunnaisesti 8 merkin merkkijono jokaiselle kohteelle, jolla on unset import_ref-kenttä.",
"set_primary_photo": "Aseta oletuskuva",
"set_primary_photo_button": "Aseta Ensisijainen Kuva",
"set_primary_photo_confirm": "",
"set_primary_photo_sub": "Homebox versiossa v0.10.0 ensisijainen kuvakenttä lisättiin tyypin kuva liitteisiin. Tämä toiminto asettaa ensisijaiseksi kuvakentäksi tietokannan liitteet-taulukon ensimmäisen kuvan, jos sitä ei ole jo asetettu. '<a class=\"link\" href=\"https://github.com/hay-kot/homebox/pull/576\">'Katso GitHub PR #576\" </a>\"",
"zero_datetimes": "Nolla Kohteen Päivämääräajat",
"zero_datetimes_button": "Nolla Kohteen Päivämääräajat",
"zero_datetimes_confirm": "",
"zero_datetimes_sub": "Palauttaa varastosi kaikkien päivämääräkenttien aika-arvon päivämäärän alkuun. Tämän tarkoituksena on korjata virhe, joka otettiin käyttöön varhaisessa vaiheessa sivuston kehitystä, joka aiheutti aika-arvon tallentamisen ajan kanssa, joka aiheutti ongelmia päivämääräkentissä, jotka näyttävät tarkkoja arvoja. '<a class=\"link\" href=\"https://github.com/hay-kot/homebox/issues/236\" target=\"_blank\">'Katso Github Ongelma #236 lisää yksityiskohtia.'</a>'"
},
"actions_sub": "Käytä toimintoja varastoon irtotavarana. Nämä ovat peruuttamattomia toimia. '<b>'Ole varovainen.</b>'",
@@ -586,7 +396,6 @@
"export_sub": "Vie Homebox CSV-standardin. Tämä vie kaikki varastossasi olevat tuotteet.",
"import": "Tuo Varasto",
"import_button": "Tuo varasto",
"import_ref_confirm": "",
"import_sub": "Tuo CSV-standardimuodon Homebox. Ilman <code>'HB.import_ref</code> kolumni, tämä tulee <b>not</b>' korvaa inventaariossasi olevia esineitä, vaan lisää vain uusia esineitä. Rivit, joissa on <code>'HB.import_ref</code>' sarakkeen tiedot yhdistetään olemassa oleviin kohteisiin, joilla on sama import_ref, jos sellainen on olemassa."
},
"import_export_sub": "Tuo ja vie varastosi CSV-tiedostoon ja siitä. Tämä on hyödyllistä siirrettäessä varastosi uuteen Homebox ilmentymään.",
@@ -599,13 +408,6 @@
"bill_of_materials_button": "Luo BOM",
"bill_of_materials_sub": "Luo CSV-tiedoston (pilkulla erotetut arvot), joka voidaan tuoda taulukkolaskentaohjelmaan. Tämä on yhteenveto varastostasi, jossa on perustuotteet ja hintatiedot."
},
"reports_sub": "Luo erilaisia raportteja varastollesi.",
"toast": {
"asset_success": "",
"failed_ensure_ids": "",
"failed_ensure_import_refs": "",
"failed_set_primary_photos": "",
"failed_zero_datetimes": ""
}
"reports_sub": "Luo erilaisia raportteja varastollesi."
}
}

View File

@@ -129,8 +129,7 @@
"headers": "En-têtes",
"page": "Page",
"rows_per_page": "Lignes par page",
"table_settings": "Paramètres du Tableau",
"view_item": ""
"table_settings": "Paramètres du Tableau"
}
}
},

View File

@@ -1,20 +1,10 @@
{
"components": {
"app": {
"create_modal": {
"createAndAddAnother": "",
"enter": "",
"shift": ""
},
"import_dialog": {
"change_warning": "A meglévő import_ref-fel rendelkező tételek importálásának menete megváltozott. Ha a CSV fájlban van import_ref, \nakkor a tételt felülírják a CSV fájlban található értékek.",
"description": "Importálj egy CSV fájlt, amely tartalmazza a tételeidet, címkéidet és helyeidet. A szükséges formátumról bővebben \na dokumentációban olvashatsz.",
"title": "Importálás CSV-fájlból",
"toast": {
"import_failed": "",
"import_success": "",
"please_select_file": ""
}
"title": "Importálás CSV-fájlból"
},
"outdated": {
"current_version": "Jelenlegi verzió",
@@ -24,11 +14,6 @@
"new_version_available_link": "Kattints ide az újdonságok megtekintéséhez"
}
},
"form": {
"password": {
"toggle_show": ""
}
},
"global": {
"copy_text": {
"documentation": "dokumentáció",
@@ -66,12 +51,7 @@
"download": "Címke letöltése",
"print": "Címke nyomtatása",
"server_print": "Nyomtatás a szerveren",
"titles": "Címkék",
"toast": {
"load_status_failed": "",
"print_failed": "",
"print_success": ""
}
"titles": "Címkék"
},
"page_qr_code": {
"page_url": "Oldal URL-je",
@@ -82,41 +62,14 @@
}
},
"item": {
"attachments_list": {
"download": "",
"open_new_tab": ""
},
"create_modal": {
"delete_photo": "",
"item_description": "Tétel leírása",
"item_name": "Tétel neve",
"item_photo": "Tétel fényképe 📷",
"item_quantity": "Tételek mennyisége",
"parent_item": "Szülő tétel",
"rotate_photo": "",
"set_as_primary_photo": "",
"title": "Új elem létrehozása",
"toast": {
"already_creating": "",
"create_failed": "",
"create_success": "",
"failed_load_parent": "",
"no_canvas_support": "",
"please_select_location": "",
"rotate_failed": "",
"rotate_process_failed": "",
"some_photos_failed": "",
"upload_failed": "",
"upload_success": "",
"uploading_photos": ""
},
"upload_photos": "Fotók feltöltése",
"uploaded": ""
},
"selector": {
"no_results": "",
"placeholder": "",
"search_placeholder": ""
"upload_photos": "Fotók feltöltése"
},
"view": {
"selectable": {
@@ -129,8 +82,7 @@
"headers": "Fejlécek",
"page": "Oldal",
"rows_per_page": "Sorok oldalanként",
"table_settings": "Táblázatbeállítások",
"view_item": ""
"table_settings": "Táblázatbeállítások"
}
}
},
@@ -138,13 +90,7 @@
"create_modal": {
"label_description": "Címke leírása",
"label_name": "Címke neve",
"title": "Címke létrehozása",
"toast": {
"already_creating": "",
"create_failed": "",
"create_success": "",
"label_name_too_long": ""
}
"title": "Címke létrehozása"
},
"selector": {
"select_labels": "Címkék kiválasztása"
@@ -154,12 +100,7 @@
"create_modal": {
"location_description": "Hely leírása",
"location_name": "Hely neve",
"title": "Új hely létrehozása",
"toast": {
"already_creating": "",
"create_failed": "",
"create_success": ""
}
"title": "Új hely létrehozása"
},
"selector": {
"no_location_found": "Nem található hely",
@@ -187,8 +128,6 @@
"create_subitem": "Alelem létrehozása",
"created": "Létrehozva",
"delete": "Törlés",
"delete_confirm": "",
"demo_instance": "",
"details": "Részletek",
"duplicate": "Másolás",
"edit": "Szerkesztés",
@@ -203,7 +142,6 @@
"items": "Tételek",
"join_discord": "Csatlakozz a Discordhoz",
"labels": "Címkék",
"loading": "",
"locations": "Helyek",
"maintenance": "Karbantartás",
"name": "Név",
@@ -211,14 +149,11 @@
"password": "Jelszó",
"quantity": "Mennyiség",
"read_docs": "Olvasd el a dokumentációt",
"return_home": "",
"save": "Mentés",
"search": "Keresés",
"sign_out": "Kijelentkezés",
"submit": "Elküldés",
"unknown": "",
"update": "Módosítás",
"updating": "",
"value": "Érték",
"version": "Verzió: { version }",
"welcome": "Üdv, { username }"
@@ -243,49 +178,27 @@
"set_email": "Mi az email címed?",
"set_name": "Mi a neved?",
"set_password": "Állíts be egy jelszót!",
"tagline": "Kövesd nyomon, rendszerezd és kezeld a dolgaidat.",
"title": "",
"toast": {
"invalid_email": "",
"invalid_email_password": "",
"login_success": "",
"problem_registering": "",
"user_registered": ""
}
"tagline": "Kövesd nyomon, rendszerezd és kezeld a dolgaidat."
},
"items": {
"add": "Hozzáadás",
"advanced": "Haladó",
"archived": "Archivált",
"asset_id": "Eszközazonosító",
"associated_with_multiple": "",
"attachment": "Melléklet",
"attachments": "Mellékletek",
"changes_persisted_immediately": "A mellékletek módosításai azonnal mentésre kerülnek",
"created_at": "Létrehozás dátuma",
"custom_fields": "Egyedi mezők",
"delete_attachment_confirm": "",
"delete_item_confirm": "",
"description": "Leírás",
"details": "Részletek",
"drag_and_drop": "Húzd ide a fájlokat, vagy kattints a fájlok kiválasztásához",
"edit": {
"edit_attachment_dialog": {
"attachment_title": "",
"attachment_type": "",
"primary_photo": "",
"primary_photo_sub": "",
"select_type": "",
"title": ""
}
},
"edit_details": "Részletek szerkesztése",
"field_selector": "Mezőválasztó",
"field_value": "Mező értéke",
"first": "Első",
"include_archive": "Archivált elemek belefoglalása",
"insured": "Biztosítva",
"invalid_asset_id": "",
"last": "Utolsó",
"lifetime_warranty": "Élettartam garancia",
"location": "Hely",
@@ -296,7 +209,6 @@
"name": "Név",
"negate_labels": "Címkeválasztás negálása",
"next_page": "Következő oldal",
"no_attachments": "",
"no_results": "Egy elem sem található",
"notes": "Megjegyzések",
"only_with_photo": "Csak fényképes tételek",
@@ -318,60 +230,24 @@
"receipts": "Számlák",
"reset_search": "Alaphelyzet",
"results": "{total} találat",
"select_field": "",
"serial_number": "Sorozatszám",
"show_advanced_view_options": "További beállítások megjelenítése",
"sold_at": "Eladás dátuma",
"sold_details": "Eladás részletei",
"sold_price": "Eladási ár",
"sold_to": "Vevő",
"sync_child_locations": "",
"tip_1": "A hely- és címkeszűrők a „vagy” műveletet használják. Ha egynél többet választasz ki,\n bármelyik egyezése esetén megjelenik a tétel.",
"tip_2": "A '#' előtaggal ellátott keresések egy eszközazonosítót fognak lekérdezni (például '#000-001')",
"tip_3": "A mezőszűrők a „vagy” műveletet használják. Ha egynél többet választasz ki,\n bármelyik egyezése esetén megjelenik a tétel.",
"tips": "Tippek",
"tips_sub": "Tippek a kereséshez",
"toast": {
"asset_not_found": "",
"attachment_deleted": "",
"attachment_updated": "",
"attachment_uploaded": "",
"child_items_location_no_longer_synced": "",
"child_items_location_synced": "",
"child_location_desync": "",
"error_loading_parent_data": "",
"failed_adjust_quantity": "",
"failed_delete_attachment": "",
"failed_delete_item": "",
"failed_duplicate_item": "",
"failed_load_asset": "",
"failed_load_item": "",
"failed_load_items": "",
"failed_save": "",
"failed_save_no_location": "",
"failed_search_items": "",
"failed_update_attachment": "",
"failed_upload_attachment": "",
"item_deleted": "",
"item_saved": "",
"quantity_cannot_negative": "",
"sync_child_location": ""
},
"updated_at": "Változtatás dátuma",
"warranty": "Garancia",
"warranty_details": "Garancia részletei",
"warranty_expires": "Garancia vége"
},
"labels": {
"label_delete_confirm": "",
"no_results": "Nem található címke",
"toast": {
"failed_delete_label": "",
"failed_load_label": "",
"failed_update_label": "",
"label_deleted": "",
"label_updated": ""
},
"update_label": "Címke módosítása"
},
"languages": {
@@ -414,15 +290,7 @@
"child_locations": "Tartalmazott helyek",
"collapse_tree": "Fanézet becsukása",
"expand_tree": "Fa kibontása",
"location_items_delete_confirm": "",
"no_results": "Nem található hely",
"toast": {
"failed_delete_location": "",
"failed_load_location": "",
"failed_update_location": "",
"location_deleted": "",
"location_updated": ""
},
"update_location": "Hely módosítása"
},
"maintenance": {
@@ -478,10 +346,7 @@
"currency_format": "Pénz formátum",
"current_password": "Jelenlegi jelszó",
"delete_account": "Fiók törlése",
"delete_account_confirm": "",
"delete_account_sub": "Törlöd a fiókodat és az összes kapcsolódó adatot. Ezt a műveletet nem lehet visszavonni.",
"delete_notifier_confirm": "",
"display_legacy_header": "",
"enabled": "Engedélyezve",
"example": "Példa",
"gen_invite": "Meghívó link létrehozása",
@@ -499,62 +364,16 @@
"test": "Teszt",
"theme_settings": "Téma Beállítások",
"theme_settings_sub": "A témabeállítások a böngésző helyi tárhelyén tárolódnak. Bármikor megváltoztathatod a témát. Ha problémába\n ütközöl a téma beállításakor, próbáld meg frissíteni az oldalt a böngésződben.",
"toast": {
"account_deleted": "",
"failed_change_password": "",
"failed_create_notifier": "",
"failed_delete_account": "",
"failed_delete_notifier": "",
"failed_get_currencies": "",
"failed_test_notifier": "",
"failed_update_group": "",
"failed_update_notifier": "",
"group_updated": "",
"notifier_test_success": "",
"password_changed": ""
},
"update_group": "Csoport módosítása",
"update_language": "Nyelv átállítása",
"url": "URL",
"user_profile": "Felhasználói profil",
"user_profile_sub": "Hívj meg felhasználókat, és kezeld a fiókodat."
},
"reports": {
"label_generator": {
"asset_end": "",
"asset_start": "",
"base_url": "",
"bordered_labels": "",
"generate_page": "",
"input_placeholder": "",
"instruction_1": "",
"instruction_2": "",
"instruction_3": "",
"label_height": "",
"label_width": "",
"measure_type": "",
"page_bottom_padding": "",
"page_height": "",
"page_left_padding": "",
"page_right_padding": "",
"page_top_padding": "",
"page_width": "",
"qr_code_example": "",
"tip_1": "",
"tip_2": "",
"tip_3": "",
"tips": "",
"title": "",
"toast": {
"page_too_small_card": ""
}
}
},
"scanner": {
"error": "Hiba történt a szkennelés közben",
"invalid_url": "Érvénytelen vonalkód URL",
"no_sources": "Nincs elérhető videóforrás",
"permission_denied": "",
"select_video_source": "Videóforrás kiválasztása",
"title": "Szkenner",
"unsupported": "A Media Stream API nem támogatott HTTPS nélkül"
@@ -564,18 +383,15 @@
"actions_set": {
"ensure_ids": "Eszközazonosítók meglétének biztosítása",
"ensure_ids_button": "Eszközazonosítók generálása",
"ensure_ids_confirm": "",
"ensure_ids_sub": "Biztosítja, hogy a készletben lévő összes tétel rendelkezzen érvényes asset_id (eszközazonosító) mezővel. Ehhez megkeresi a legmagasabb asset_id mezőértéket az adatbázisban és minden olyan tételhez, amelynek nem beállított az asset_id mezője, rendre eggyel növelt értéket állít be. Ezt a created_at mezők értékének (a tétel létrehozásának dátuma) sorrendjében teszi.",
"ensure_import_refs": "Importálási hivatkozások meglétének biztosítása",
"ensure_import_refs_button": "Hivatkozások generálása",
"ensure_import_refs_sub": "Biztosítja, hogy a készletben lévő összes tétel rendelkezzen érvényes import_ref mezővel. Véletlenszerűen generál egy 8 hosszúságú karakterláncot minden olyan tételhez, amelynél az import_ref mező üres.",
"set_primary_photo": "Elsődleges fénykép hozzárendelése",
"set_primary_photo_button": "Hozzárendelés",
"set_primary_photo_confirm": "",
"set_primary_photo_sub": "A Homebox v0.10.0 verziójában hozzáadtuk a fénykép típusú mellékletekhez az elsődleges fényképként történő megjelölés lehetőségét. Ezzel a művelettel a mellékletekben található első fényképet állítod be elsődleges fényképnek, ha ilyen a tételhez még nincs kiválasztva. '<a class=\"link\" href=\"https://github.com/hay-kot/homebox/pull/576\">'Lásd az #576 GitHub PR-t'</a>'",
"zero_datetimes": "Idő törlése a tételek dátummezőiből",
"zero_datetimes_button": "Dátummezők javítása",
"zero_datetimes_confirm": "",
"zero_datetimes_sub": "Visszaállítja a dátumot és időt tartalmazó mezők értékét a dátum kezdetére a teljes készletben. Ezzel javíthatsz egy olyan bugot, mely során az oldal fejlesztésének korai szakaszában az időértékek mentése a dátumok pontos megjelenítésében hibát okozott. '<a class=\"link\" href=\"https://github.com/hay-kot/homebox/issues/236\" target=\"_blank\">'Lásd a #236 Github Issue-t további részletekért.'</a>'"
},
"actions_sub": "Műveletek tömeges alkalmazása a készletre. Ezeket a vissza nem vonható műveleteket csak '<b>'kellő körültekintés mellett használd'</b>'.",
@@ -586,7 +402,6 @@
"export_sub": "Exportálja a Homebox szabványos CSV formátumát. Ez minden készletedben található tételt exportál.",
"import": "Készlet importálása",
"import_button": "Készlet importálása",
"import_ref_confirm": "",
"import_sub": "Importálja a Homebox szabványos CSV formátumát. Amennyiben nem található '<code>'HB.import_ref'</code>' oszlop a fájlban, ez '<b>'nem'</b>' ír felül létező tételeket a készletedben, csak újakat ad hozzá. Azon sorok, melyeknél a '<code>'HB.import_ref'</code>' oszlop értéke megegyezik egy létező tétel import_ref mezőjének értékével, a sor tartalma beolvad a létező tételbe."
},
"import_export_sub": "Készlet importálása és exportálása CSV-fájlba és CSV-fájlból. Ez hasznos lehet a készleted átmozgatásához a Homebox egy új példányába.",
@@ -599,13 +414,6 @@
"bill_of_materials_button": "Jegyzék létrehozása",
"bill_of_materials_sub": "Létrehoz egy CSV (vesszővel elválasztott értékek) fájlt, amely importálható egy táblázatkezelő programba. Ez a készleted összesítése a tételek alap és árra vonatkozó információival."
},
"reports_sub": "Hozz létre különböző jelentéseket a készletedhez.",
"toast": {
"asset_success": "",
"failed_ensure_ids": "",
"failed_ensure_import_refs": "",
"failed_set_primary_photos": "",
"failed_zero_datetimes": ""
}
"reports_sub": "Hozz létre különböző jelentéseket a készletedhez."
}
}

View File

@@ -1,20 +1,10 @@
{
"components": {
"app": {
"create_modal": {
"createAndAddAnother": "",
"enter": "",
"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",
"toast": {
"import_failed": "",
"import_success": "",
"please_select_file": ""
}
"title": "Impor CSV"
},
"outdated": {
"current_version": "Versi Terkini",
@@ -24,11 +14,6 @@
"new_version_available_link": "Klik di sini untuk melihat informasi rilis"
}
},
"form": {
"password": {
"toggle_show": ""
}
},
"global": {
"copy_text": {
"documentation": "dokumentasi",
@@ -61,62 +46,20 @@
"yesterday": "kemaren"
},
"label_maker": {
"browser_print": "",
"confirm_description": "",
"download": "Unduh Label",
"print": "",
"server_print": "",
"titles": "",
"toast": {
"load_status_failed": "",
"print_failed": "",
"print_success": ""
}
"download": "Unduh Label"
},
"page_qr_code": {
"page_url": "Halaman URL",
"qr_tooltip": ""
"page_url": "Halaman URL"
},
"password_score": {
"password_strength": "Kompleksitas kata sandi"
}
},
"item": {
"attachments_list": {
"download": "",
"open_new_tab": ""
},
"create_modal": {
"delete_photo": "",
"item_description": "Deskripsi item",
"item_name": "Nama item",
"item_photo": "",
"item_quantity": "",
"parent_item": "",
"rotate_photo": "",
"set_as_primary_photo": "",
"title": "Buat item",
"toast": {
"already_creating": "",
"create_failed": "",
"create_success": "",
"failed_load_parent": "",
"no_canvas_support": "",
"please_select_location": "",
"rotate_failed": "",
"rotate_process_failed": "",
"some_photos_failed": "",
"upload_failed": "",
"upload_success": "",
"uploading_photos": ""
},
"upload_photos": "",
"uploaded": ""
},
"selector": {
"no_results": "",
"placeholder": "",
"search_placeholder": ""
"title": "Buat item"
},
"view": {
"selectable": {
@@ -126,11 +69,8 @@
"table": "Tabel"
},
"table": {
"headers": "",
"page": "Halaman",
"rows_per_page": "Baris per halaman",
"table_settings": "",
"view_item": ""
"rows_per_page": "Baris per halaman"
}
}
},
@@ -138,87 +78,54 @@
"create_modal": {
"label_description": "Keterangan/Deskripsi",
"label_name": "Nama",
"title": "Buat label",
"toast": {
"already_creating": "",
"create_failed": "",
"create_success": "",
"label_name_too_long": ""
}
},
"selector": {
"select_labels": ""
"title": "Buat label"
}
},
"location": {
"create_modal": {
"location_description": "Deskripsi lokasi",
"location_name": "Nama lokasi",
"title": "Tambah Lokasi",
"toast": {
"already_creating": "",
"create_failed": "",
"create_success": ""
}
"title": "Tambah Lokasi"
},
"selector": {
"no_location_found": "",
"parent_location": "Lokasi Induk",
"search_location": "",
"select_location": ""
"parent_location": "Lokasi Induk"
},
"tree": {
"no_locations": "Tidak ada lokasi yang tersedia. Tambahkan lokasi melalui tombol\n`<`span class=\"link-primary\"`>`Buat`<`/span`>` menu navigasi."
}
},
"quick_menu": {
"no_results": "",
"shortcut_hint": "Gunakan tombol angka untuk memilih."
}
},
"global": {
"add": "Tambah",
"archived": "",
"build": "Kompilasi: { build }",
"cancel": "",
"confirm": "Konfirmasi",
"create": "Buat",
"create_and_add": "Buat dan Tambah Baru",
"create_subitem": "",
"created": "Behasil dibuat",
"delete": "Hapus",
"delete_confirm": "",
"demo_instance": "",
"details": "Detail",
"duplicate": "Duplikat",
"edit": "Sunting",
"email": "Email",
"follow_dev": "Ikuti Pengembang",
"footer": {
"api_link": "",
"version_link": ""
},
"github": "Github project",
"insured": "",
"items": "Barang",
"join_discord": "Bergabunglah dengan Discord",
"labels": "Label",
"loading": "",
"locations": "Lokasi",
"maintenance": "Perbaikan",
"name": "Nama",
"navigate": "Navigasi",
"password": "Kata Sandi",
"quantity": "",
"read_docs": "Baca Dokumen",
"return_home": "",
"save": "Simpan",
"search": "Cari",
"sign_out": "Keluar",
"submit": "Kirim",
"unknown": "",
"update": "Perbaharui",
"updating": "",
"value": "Nilai",
"version": "Versi:{ version }",
"welcome": "Selamay datang, { username }"
@@ -243,49 +150,27 @@
"set_email": "Apa email Anda?",
"set_name": "Apa nama anda?",
"set_password": "Password Anda",
"tagline": "Lacak, Atur, dan Kelola Barang-barangmu.",
"title": "",
"toast": {
"invalid_email": "",
"invalid_email_password": "",
"login_success": "",
"problem_registering": "",
"user_registered": ""
}
"tagline": "Lacak, Atur, dan Kelola Barang-barangmu."
},
"items": {
"add": "Tambah",
"advanced": "Tingkat Lanjut",
"archived": "Diarsipkan",
"asset_id": "ID Aset",
"associated_with_multiple": "",
"attachment": "Lampiran",
"attachments": "Lampiran",
"changes_persisted_immediately": "Perubahan lampiran akan segera disimpan",
"created_at": "Dibuat Pada",
"custom_fields": "Informasi Tambahan",
"delete_attachment_confirm": "",
"delete_item_confirm": "",
"description": "Deskripsi",
"details": "Detail",
"drag_and_drop": "Seret dan lepas file di sini atau klik untuk memilih file",
"edit": {
"edit_attachment_dialog": {
"attachment_title": "",
"attachment_type": "",
"primary_photo": "",
"primary_photo_sub": "",
"select_type": "",
"title": ""
}
},
"edit_details": "Edit Detail",
"field_selector": "Selektor",
"field_value": "Nilai",
"first": "Pertama",
"include_archive": "Sertakan Item yang Diarsipkan",
"insured": "Diasuransikan",
"invalid_asset_id": "",
"last": "Terakhir",
"lifetime_warranty": "Garansi seumur hidup",
"location": "Lokasi",
@@ -296,7 +181,6 @@
"name": "Nama",
"negate_labels": "Negasikan Label yang Dipilih",
"next_page": "Halaman Berikutnya",
"no_attachments": "",
"no_results": "Item tidak ditemukan",
"notes": "Catatan",
"only_with_photo": "Hanya item dengan foto",
@@ -318,88 +202,42 @@
"receipts": "Resi",
"reset_search": "Reset Pencarian",
"results": "{ total } Hasil",
"select_field": "",
"serial_number": "Nomor Seri",
"show_advanced_view_options": "Tampilkan opsi lanjutan",
"sold_at": "Dijual Pada",
"sold_details": "Detail Penjualan",
"sold_price": "Harga Jual",
"sold_to": "Dijual Kepada",
"sync_child_locations": "",
"tip_1": "Filter untuk lokasi dan label bekerja dengan operasi 'OR'. Artinya, jika Anda memilih lebih dari satu filter, hanya satu\nfilter yang harus cocok agar data ditampilkan.",
"tip_2": "Pencarian yang diawali dengan '#'' akan meminta ID aset (contoh '#000 -001 ')",
"tip_3": "Filter untuk lokasi dan label bekerja dengan operasi 'OR'. Artinya, jika Anda memilih lebih dari satu filter, hanya satu\nfilter yang harus cocok agar data ditampilkan.",
"tips": "Anjuran",
"tips_sub": "Tips Pencarian",
"toast": {
"asset_not_found": "",
"attachment_deleted": "",
"attachment_updated": "",
"attachment_uploaded": "",
"child_items_location_no_longer_synced": "",
"child_items_location_synced": "",
"child_location_desync": "",
"error_loading_parent_data": "",
"failed_adjust_quantity": "",
"failed_delete_attachment": "",
"failed_delete_item": "",
"failed_duplicate_item": "",
"failed_load_asset": "",
"failed_load_item": "",
"failed_load_items": "",
"failed_save": "",
"failed_save_no_location": "",
"failed_search_items": "",
"failed_update_attachment": "",
"failed_upload_attachment": "",
"item_deleted": "",
"item_saved": "",
"quantity_cannot_negative": "",
"sync_child_location": ""
},
"updated_at": "Diperbarui pada",
"warranty": "Garansi",
"warranty_details": "Rincian Garansi",
"warranty_expires": "Garansi Kedaluwarsa"
},
"labels": {
"label_delete_confirm": "",
"no_results": "Tidak Ditemukan Label",
"toast": {
"failed_delete_label": "",
"failed_load_label": "",
"failed_update_label": "",
"label_deleted": "",
"label_updated": ""
},
"update_label": "Perbarui Label"
},
"languages": {
"ca": "Catalan",
"cs-CZ": "",
"de": "Jerman",
"en": "Bahasa Inggris",
"es": "Spanyol",
"fi-FI": "",
"fr": "Prancis",
"hu": "Hungaria",
"id-ID": "",
"it": "Italia",
"ja-JP": "Jepang",
"ko-KR": "",
"lb-LU": "",
"lt-LT": "",
"nb-NO": "",
"nl": "Belanda",
"pl": "Polandia",
"pt-BR": "Portugis (Brasil)",
"pt-PT": "Bahasa Portugis (Portugal)",
"ru": "Rusia",
"sl": "Bahasa Slovenia",
"sq-AL": "",
"sv": "Swedia",
"ta-IN": "",
"th-TH": "",
"tr": "Turki",
"uk-UA": "Ukraina",
"zh-CN": "Mandarin (Disederhanakan)",
@@ -413,16 +251,7 @@
"locations": {
"child_locations": "Lokasi Turunan",
"collapse_tree": "Ciutkan",
"expand_tree": "",
"location_items_delete_confirm": "",
"no_results": "Lokasi tidak ditemukan",
"toast": {
"failed_delete_location": "",
"failed_load_location": "",
"failed_update_location": "",
"location_deleted": "",
"location_updated": ""
},
"update_location": "Perbarui Lokasi"
},
"maintenance": {
@@ -468,7 +297,6 @@
"locations": "Lokasi",
"maintenance": "Pemeliharaan",
"profile": "Profil",
"scanner": "",
"search": "Cari",
"tools": "Tools"
},
@@ -478,10 +306,7 @@
"currency_format": "Format Mata uang",
"current_password": "Kata sandi saat ini",
"delete_account": "Hapus Akun",
"delete_account_confirm": "",
"delete_account_sub": "Hapus akun Anda dan semua data terkait.",
"delete_notifier_confirm": "",
"display_legacy_header": "",
"enabled": "Tersedia",
"example": "Contoh",
"gen_invite": "Buat Tautan Undangan",
@@ -491,91 +316,32 @@
"language": "Bahasa",
"new_password": "Kata Sandi Baru",
"no_notifiers": "Tidak ada notifier yang dikonfigurasi",
"no_override": "",
"notifier_modal": "{ type, select, true {Ubah} false {Buat} other {Lainnya}} Notifier",
"notifiers": "Notifier",
"notifiers_sub": "Dapatkan pemberitahuan untuk pengingat pemeliharaan mendatang",
"override_locale": "",
"test": "Pengujian",
"theme_settings": "Pengaturan Tampilan",
"theme_settings_sub": "Pengaturan tema disimpan di penyimpanan lokal browser Anda. Anda dapat mengubah tema kapan saja. Jika Anda\nmengalami masalah dalam mengatur tema, coba refresh browser Anda.",
"toast": {
"account_deleted": "",
"failed_change_password": "",
"failed_create_notifier": "",
"failed_delete_account": "",
"failed_delete_notifier": "",
"failed_get_currencies": "",
"failed_test_notifier": "",
"failed_update_group": "",
"failed_update_notifier": "",
"group_updated": "",
"notifier_test_success": "",
"password_changed": ""
},
"update_group": "Perbarui Grup",
"update_language": "Perbarui Bahasa",
"url": "URL",
"user_profile": "Profil Pengguna",
"user_profile_sub": "Undang pengguna, dan kelola akun Anda."
},
"reports": {
"label_generator": {
"asset_end": "",
"asset_start": "",
"base_url": "",
"bordered_labels": "",
"generate_page": "",
"input_placeholder": "",
"instruction_1": "",
"instruction_2": "",
"instruction_3": "",
"label_height": "",
"label_width": "",
"measure_type": "",
"page_bottom_padding": "",
"page_height": "",
"page_left_padding": "",
"page_right_padding": "",
"page_top_padding": "",
"page_width": "",
"qr_code_example": "",
"tip_1": "",
"tip_2": "",
"tip_3": "",
"tips": "",
"title": "",
"toast": {
"page_too_small_card": ""
}
}
},
"scanner": {
"error": "",
"invalid_url": "",
"no_sources": "",
"permission_denied": "",
"select_video_source": "",
"title": "",
"unsupported": ""
},
"tools": {
"actions": "Kelola Inventaris",
"actions_set": {
"ensure_ids": "Pastikan ID Aset",
"ensure_ids_button": "Pastikan ID Aset",
"ensure_ids_confirm": "",
"ensure_ids_sub": "Memastikan semua item dalam inventaris Anda memiliki kolom asset_id yang valid. Hal ini dilakukan dengan mencari nilai asset_id tertinggi saat ini dalam database dan menerapkan nilai berikutnya ke setiap item yang kolom asset_id-nya belum diatur. Proses ini diurutkan berdasarkan kolom created_at.",
"ensure_import_refs": "Pastikan Ref Impor",
"ensure_import_refs_button": "Pastikan Ref Impor",
"ensure_import_refs_sub": "Memastikan semua item dalam inventaris Anda memiliki kolom import_ref yang valid. Hal ini dilakukan dengan membuat string 8 karakter acak untuk setiap item yang kolom import_ref-nya belum diatur.",
"set_primary_photo": "Atur Foto Utama",
"set_primary_photo_button": "Atur Foto Utama",
"set_primary_photo_confirm": "",
"set_primary_photo_sub": "Pada Homebox versi 0.10.0, kolom gambar utama ditambahkan ke lampiran bertipe foto. Ini akan mengatur kolom gambar utama ke gambar pertama dalam lampiran di database, jika belum diatur. '<a class=\"link\" href=\"https://github.com/hay-kot/homebox/pull/576\">'See GitHub PR #576'</a>'",
"zero_datetimes": "Format Waktu Kosong",
"zero_datetimes_button": "Format Waktu Kosong",
"zero_datetimes_confirm": "",
"zero_datetimes_sub": "Mengatur ulang nilai waktu untuk semua bidang tanggal dan waktu di inventaris Anda ke awal tanggal. Ini untuk memperbaiki bug yang muncul di awal pengembangan situs yang menyebabkan nilai waktu disimpan bersama waktu, yang mengakibatkan masalah pada tampilan nilai tanggal yang akurat. '<a class=\"link\" href=\"https://github.com/hay-kot/homebox/issues/236\" target=\"_blank\">'See Github Issue #236 for more details.'</a>'"
},
"actions_sub": "Terapkan tindakan ke inventaris Anda secara massal. Tindakan ini tidak dapat diurungkan. <b>Hati-hati.</b>",
@@ -586,7 +352,6 @@
"export_sub": "Mengekspor semua item ke file CSV dengan format standar Homebox.",
"import": "Impor Inventaris",
"import_button": "Impor Inventaris",
"import_ref_confirm": "",
"import_sub": "Mengimpor CSV dengan format standar Homebox. Tanpa kolom '<code>HB.import_ref</code>', impor ini <b>tidak</b> akan menimpa item yang sudah ada di inventaris Anda, hanya menambahkan item baru. Baris dengan kolom '<code>HB.import_ref</code>' akan digabungkan ke item yang sudah ada dengan import_ref yang sama, jika ada."
},
"import_export_sub": "Impor dan ekspor inventaris Anda ke dan dari file CSV. Ini berguna untuk memigrasikan inventaris Anda ke instance Homebox yang baru.",
@@ -599,13 +364,6 @@
"bill_of_materials_button": "Download Daftar Inventaris",
"bill_of_materials_sub": "Menghasilkan file CSV (Comma Separated Values) yang dapat diimpor ke program spreadsheet. Ini adalah ringkasan inventaris Anda dengan info dasar beserta harganya."
},
"reports_sub": "Buat laporan yang berbeda untuk inventaris Anda.",
"toast": {
"asset_success": "",
"failed_ensure_ids": "",
"failed_ensure_import_refs": "",
"failed_set_primary_photos": "",
"failed_zero_datetimes": ""
}
"reports_sub": "Buat laporan yang berbeda untuk inventaris Anda."
}
}

View File

@@ -331,47 +331,13 @@
"tip_3": "I filtri di campo utilizzano l'operazione 'OR'. Se ne viene selezionato più di uno, ne sarà\n richiesto solo uno per una corrispondenza.",
"tips": "Suggerimenti",
"tips_sub": "Suggerimenti per la Ricerca",
"toast": {
"asset_not_found": "",
"attachment_deleted": "",
"attachment_updated": "",
"attachment_uploaded": "",
"child_items_location_no_longer_synced": "",
"child_items_location_synced": "",
"child_location_desync": "",
"error_loading_parent_data": "",
"failed_adjust_quantity": "",
"failed_delete_attachment": "",
"failed_delete_item": "",
"failed_duplicate_item": "",
"failed_load_asset": "",
"failed_load_item": "",
"failed_load_items": "",
"failed_save": "",
"failed_save_no_location": "",
"failed_search_items": "",
"failed_update_attachment": "",
"failed_upload_attachment": "",
"item_deleted": "",
"item_saved": "",
"quantity_cannot_negative": "",
"sync_child_location": ""
},
"updated_at": "Aggiornato Il",
"warranty": "Garanzia",
"warranty_details": "Dettagli garanzia",
"warranty_expires": "Garanzia scaduta"
},
"labels": {
"label_delete_confirm": "",
"no_results": "Nessuna etichetta trovata",
"toast": {
"failed_delete_label": "",
"failed_load_label": "",
"failed_update_label": "",
"label_deleted": "",
"label_updated": ""
},
"update_label": "Aggiorna etichetta"
},
"languages": {
@@ -414,15 +380,7 @@
"child_locations": "Ubicazione figlia",
"collapse_tree": "Contrai albero",
"expand_tree": "Espandi albero",
"location_items_delete_confirm": "",
"no_results": "Nessuna posizione trovata",
"toast": {
"failed_delete_location": "",
"failed_load_location": "",
"failed_update_location": "",
"location_deleted": "",
"location_updated": ""
},
"update_location": "Aggiorna ubicazione"
},
"maintenance": {
@@ -478,9 +436,7 @@
"currency_format": "Formato Valuta",
"current_password": "Password Corrente",
"delete_account": "Elimina Account",
"delete_account_confirm": "",
"delete_account_sub": "Elimina il tuo account e tutti i dati associati. Questa operazione non può essere annullata.",
"delete_notifier_confirm": "",
"display_legacy_header": "{ currentValue, select, true {Disable Legacy Header} false {Enable Legacy Header} other {Not Hit}}",
"enabled": "Abilitato",
"example": "Esempio",
@@ -499,20 +455,6 @@
"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": "",
"failed_change_password": "",
"failed_create_notifier": "",
"failed_delete_account": "",
"failed_delete_notifier": "",
"failed_get_currencies": "",
"failed_test_notifier": "",
"failed_update_group": "",
"failed_update_notifier": "",
"group_updated": "",
"notifier_test_success": "",
"password_changed": ""
},
"update_group": "Aggiorna Gruppo",
"update_language": "Aggiorna Lingua",
"url": "URL",
@@ -521,33 +463,13 @@
},
"reports": {
"label_generator": {
"asset_end": "",
"asset_start": "",
"base_url": "",
"bordered_labels": "",
"generate_page": "",
"input_placeholder": "",
"instruction_1": "",
"instruction_2": "",
"instruction_3": "",
"label_height": "",
"label_width": "",
"measure_type": "",
"page_bottom_padding": "",
"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\n '<a href=\"https://www.avery.com/templates/5260\">'fogli di etichette ''Avery 5260 '</a>'. Se stai utilizzando un foglio differente,\n\n devi modificare le impostazioni affinchè corrispondano al tuo foglio.",
"tip_2": "",
"tip_3": "",
"tips": "",
"title": "",
"toast": {
"page_too_small_card": ""
}
"tip_1": "Le impostazioni predefinite qui sono configurate per i\n\n '<a href=\"https://www.avery.com/templates/5260\">'fogli di etichette ''Avery 5260 '</a>'. Se stai utilizzando un foglio differente,\n\n devi modificare le impostazioni affinchè corrispondano al tuo foglio."
}
},
"scanner": {
@@ -564,18 +486,15 @@
"actions_set": {
"ensure_ids": "Verifica ID delle risorse",
"ensure_ids_button": "Verifica ID delle risorse",
"ensure_ids_confirm": "",
"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": "",
"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": "",
"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>'",
@@ -586,7 +505,6 @@
"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": "",
"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.",
@@ -599,13 +517,6 @@
"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.",
"toast": {
"asset_success": "",
"failed_ensure_ids": "",
"failed_ensure_import_refs": "",
"failed_set_primary_photos": "",
"failed_zero_datetimes": ""
}
"reports_sub": "Genera diversi report per il tuo inventario."
}
}

View File

@@ -1,34 +1,18 @@
{
"components": {
"app": {
"create_modal": {
"createAndAddAnother": "",
"enter": "",
"shift": ""
},
"import_dialog": {
"change_warning": "【注意】インポート時の動作が変更されました'<br>'\n選択されたCSVファイルにimport_refsの値が存在する場合、該当するアイテムはCSVファイルの値で上書きされます。",
"description": "アイテム、ラベル、ロケーション情報を含む CSV ファイルをインポートします。\nデータの形式など詳細については、ドキュメントを参照してください。",
"title": ".csvファイルのインポート",
"toast": {
"import_failed": "",
"import_success": "",
"please_select_file": ""
}
"title": ".csvファイルのインポート"
},
"outdated": {
"current_version": "現在のバージョン",
"dismiss": "",
"latest_version": "最新バージョン",
"new_version_available": "利用可能な更新があります",
"new_version_available_link": "クリックしてリリースノートを表示"
}
},
"form": {
"password": {
"toggle_show": ""
}
},
"global": {
"copy_text": {
"documentation": "ドキュメント",
@@ -41,7 +25,6 @@
"days": "日",
"hour": "時間",
"hours": "時間",
"in": "",
"just-now": "たった今",
"last-month": "先月",
"last-week": "先週",
@@ -65,58 +48,20 @@
"confirm_description": "この管理ラベルを印刷しますか?",
"download": "画像として保存",
"print": "プリンターで印刷",
"server_print": "",
"titles": "管理ラベルの出力",
"toast": {
"load_status_failed": "",
"print_failed": "",
"print_success": ""
}
"titles": "管理ラベルの出力"
},
"page_qr_code": {
"page_url": "ページ URL",
"qr_tooltip": ""
"page_url": "ページ URL"
},
"password_score": {
"password_strength": "パスワード強度"
}
},
"item": {
"attachments_list": {
"download": "",
"open_new_tab": ""
},
"create_modal": {
"delete_photo": "",
"item_description": "説明",
"item_name": "名称",
"item_photo": "",
"item_quantity": "",
"parent_item": "",
"rotate_photo": "",
"set_as_primary_photo": "",
"title": "アイテム情報の追加",
"toast": {
"already_creating": "",
"create_failed": "",
"create_success": "",
"failed_load_parent": "",
"no_canvas_support": "",
"please_select_location": "",
"rotate_failed": "",
"rotate_process_failed": "",
"some_photos_failed": "",
"upload_failed": "",
"upload_success": "",
"uploading_photos": ""
},
"upload_photos": "",
"uploaded": ""
},
"selector": {
"no_results": "",
"placeholder": "",
"search_placeholder": ""
"title": "アイテム情報の追加"
},
"view": {
"selectable": {
@@ -126,11 +71,8 @@
"table": "テーブル"
},
"table": {
"headers": "",
"page": "ページ",
"rows_per_page": "表示件数",
"table_settings": "",
"view_item": ""
"rows_per_page": "表示件数"
}
}
},
@@ -138,87 +80,53 @@
"create_modal": {
"label_description": "ラベルの説明",
"label_name": "ラベル名",
"title": "ラベルの追加",
"toast": {
"already_creating": "",
"create_failed": "",
"create_success": "",
"label_name_too_long": ""
}
},
"selector": {
"select_labels": ""
"title": "ラベルの追加"
}
},
"location": {
"create_modal": {
"location_description": "場所の詳細",
"location_name": "名称",
"title": "ロケーション(場所)の追加",
"toast": {
"already_creating": "",
"create_failed": "",
"create_success": ""
}
"title": "ロケーション(場所)の追加"
},
"selector": {
"no_location_found": "",
"parent_location": "親項目 (選択された項目の下位にネスト)",
"search_location": "",
"select_location": ""
"parent_location": "親項目 (選択された項目の下位にネスト)"
},
"tree": {
"no_locations": "場所の項目は存在しません。\nナビゲーションバー上部の\"Create\"から追加してください。"
}
},
"quick_menu": {
"no_results": "",
"shortcut_hint": "数字キーを入力することで対応する操作を実行できます"
}
},
"global": {
"add": "追加",
"archived": "",
"build": "ビルド番号: { build }",
"cancel": "",
"confirm": "確認が必要です",
"create": "追加する",
"create_and_add": "続けて追加できます",
"create_subitem": "",
"created": "",
"delete": "削除",
"delete_confirm": "",
"demo_instance": "",
"details": "製品の情報",
"duplicate": "複製",
"edit": "編集",
"email": "メール",
"follow_dev": "開発者をフォローする",
"footer": {
"api_link": "",
"version_link": ""
},
"github": "GitHub プロジェクト",
"insured": "",
"items": "アイテム",
"join_discord": "Discordサーバーへの参加",
"labels": "ラベル",
"loading": "",
"locations": "ロケーション",
"maintenance": "メンテナンス情報",
"name": "名前",
"navigate": "",
"password": "パスワード",
"quantity": "数量",
"read_docs": "ドキュメントを読む",
"return_home": "",
"save": "保存",
"search": "検索",
"sign_out": "ログアウト",
"submit": "送信",
"unknown": "",
"update": "アップデート",
"updating": "",
"value": "値",
"version": "現在のバージョン: { version }",
"welcome": "{ username } でログイン中"
@@ -243,49 +151,27 @@
"set_email": "メールアドレスを入力してください",
"set_name": "お名前は何ですか?",
"set_password": "パスワードを入力してください",
"tagline": "Track, Organize, and Manage your Things.",
"title": "",
"toast": {
"invalid_email": "",
"invalid_email_password": "",
"login_success": "",
"problem_registering": "",
"user_registered": ""
}
"tagline": "Track, Organize, and Manage your Things."
},
"items": {
"add": "項目を追加",
"advanced": "詳細項目の表示",
"archived": "アーカイブ済み",
"asset_id": "Asset ID",
"associated_with_multiple": "",
"attachment": "添付ファイル",
"attachments": "添付ファイル",
"changes_persisted_immediately": "添付ファイルの保存は自動で行われます",
"created_at": "作成日",
"custom_fields": "カスタム項目",
"delete_attachment_confirm": "",
"delete_item_confirm": "",
"description": "説明",
"details": "この製品の情報",
"drag_and_drop": "添付ファイルはドラッグ&ドロップ、もしくはクリックで追加できます",
"edit": {
"edit_attachment_dialog": {
"attachment_title": "",
"attachment_type": "",
"primary_photo": "",
"primary_photo_sub": "",
"select_type": "",
"title": ""
}
},
"edit_details": "基本的な情報の編集",
"field_selector": "カスタム値で絞り込む",
"field_value": "フィールド値",
"first": "最初の",
"include_archive": "「現在は使用していない」にチェックを入れた項目を検索に含める",
"insured": "保険適用",
"invalid_asset_id": "",
"last": "最後",
"lifetime_warranty": "無期限保証",
"location": "場所",
@@ -296,7 +182,6 @@
"name": "名称",
"negate_labels": "選択されたラベルを除外",
"next_page": "次の ページ",
"no_attachments": "",
"no_results": "一致する項目はありません",
"notes": "備考",
"only_with_photo": "写真付きのアイテムのみ",
@@ -318,60 +203,24 @@
"receipts": "レシート(領収書)",
"reset_search": "検索条件をクリア",
"results": "検索結果: { total } 件",
"select_field": "",
"serial_number": "シリアル番号(S/N)",
"show_advanced_view_options": "高度なオプションを表示",
"sold_at": "売却日",
"sold_details": "売却時の情報",
"sold_price": "売却価格",
"sold_to": "売却先",
"sync_child_locations": "",
"tip_1": "フィルター条件を複数選択した場合、\nいずれかに該当している項目すべてをフィルター条件に一致しているとみなします。",
"tip_2": "Asset IDで検索する場合は「#」を先頭に入力してください (例: '#000-001')",
"tip_3": "カスタム値絞り込み(Field Selector)は、\n複数選択された場合にどれかが該当するアイテムすべてを一致しているとみなしします。",
"tips": "ヒント",
"tips_sub": "検索に関するヒント",
"toast": {
"asset_not_found": "",
"attachment_deleted": "",
"attachment_updated": "",
"attachment_uploaded": "",
"child_items_location_no_longer_synced": "",
"child_items_location_synced": "",
"child_location_desync": "",
"error_loading_parent_data": "",
"failed_adjust_quantity": "",
"failed_delete_attachment": "",
"failed_delete_item": "",
"failed_duplicate_item": "",
"failed_load_asset": "",
"failed_load_item": "",
"failed_load_items": "",
"failed_save": "",
"failed_save_no_location": "",
"failed_search_items": "",
"failed_update_attachment": "",
"failed_upload_attachment": "",
"item_deleted": "",
"item_saved": "",
"quantity_cannot_negative": "",
"sync_child_location": ""
},
"updated_at": "更新日",
"warranty": "保証書",
"warranty_details": "保証に関する情報",
"warranty_expires": "保証期間"
},
"labels": {
"label_delete_confirm": "",
"no_results": "一致するラベルはありません",
"toast": {
"failed_delete_label": "",
"failed_load_label": "",
"failed_update_label": "",
"label_deleted": "",
"label_updated": ""
},
"update_label": "ラベル設定の変更"
},
"languages": {
@@ -387,9 +236,6 @@
"it": "イタリア語",
"ja-JP": "日本語",
"ko-KR": "韓国語",
"lb-LU": "",
"lt-LT": "",
"nb-NO": "",
"nl": "オランダ語",
"pl": "ポーランド語",
"pt-BR": "ポルトガル語 (ブラジル)",
@@ -413,16 +259,7 @@
"locations": {
"child_locations": "属しているその他のロケーション",
"collapse_tree": "ツリーを折りたたむ",
"expand_tree": "",
"location_items_delete_confirm": "",
"no_results": "指定された場所は見つかりません",
"toast": {
"failed_delete_location": "",
"failed_load_location": "",
"failed_update_location": "",
"location_deleted": "",
"location_updated": ""
},
"update_location": "場所情報の変更"
},
"maintenance": {
@@ -478,10 +315,7 @@
"currency_format": "通貨の種類",
"current_password": "現在のパスワード",
"delete_account": "アカウントの削除 (永久的です!)",
"delete_account_confirm": "",
"delete_account_sub": "アカウントと関連するデータをすべて削除します。元に戻すことはできません。",
"delete_notifier_confirm": "",
"display_legacy_header": "",
"enabled": "有効",
"example": "例",
"gen_invite": "招待リンクの作成",
@@ -491,72 +325,20 @@
"language": "言語",
"new_password": "新しいパスワード",
"no_notifiers": "通知機能は設定されていません",
"no_override": "",
"notifier_modal": "",
"notifiers": "通知",
"notifiers_sub": "メンテナンスなどのリマインダー通知を受け取れます",
"override_locale": "",
"test": "テスト",
"theme_settings": "テーマ設定",
"theme_settings_sub": "テーマ設定はブラウザに保存されます。いつでも変更できます。\nテーマ設定によって問題が発生した場合は、再読み込みを行ってください。",
"toast": {
"account_deleted": "",
"failed_change_password": "",
"failed_create_notifier": "",
"failed_delete_account": "",
"failed_delete_notifier": "",
"failed_get_currencies": "",
"failed_test_notifier": "",
"failed_update_group": "",
"failed_update_notifier": "",
"group_updated": "",
"notifier_test_success": "",
"password_changed": ""
},
"update_group": "グループ設定を更新",
"update_language": "言語更新",
"url": "URL",
"user_profile": "ユーザー情報",
"user_profile_sub": "アカウントの管理やユーザーの招待など"
},
"reports": {
"label_generator": {
"asset_end": "",
"asset_start": "",
"base_url": "",
"bordered_labels": "",
"generate_page": "",
"input_placeholder": "",
"instruction_1": "",
"instruction_2": "",
"instruction_3": "",
"label_height": "",
"label_width": "",
"measure_type": "",
"page_bottom_padding": "",
"page_height": "",
"page_left_padding": "",
"page_right_padding": "",
"page_top_padding": "",
"page_width": "",
"qr_code_example": "",
"tip_1": "",
"tip_2": "",
"tip_3": "",
"tips": "",
"title": "",
"toast": {
"page_too_small_card": ""
}
}
},
"scanner": {
"error": "不明なエラーが発生しました。スキャンは利用できません。",
"invalid_url": "バーコードが無効です",
"no_sources": "",
"permission_denied": "",
"select_video_source": "",
"title": "",
"unsupported": "メディアストリームAPIはHTTPSのみをサポートしています"
},
"tools": {
@@ -564,18 +346,15 @@
"actions_set": {
"ensure_ids": "アイテムのAsset IDの確認",
"ensure_ids_button": "確認の実行",
"ensure_ids_confirm": "",
"ensure_ids_sub": "全てのアイテムに、有効なAsset IDが存在することを確認します。'<br>'もし存在しないアイテムがあった場合は、登録された日付が古い順にAsset IDの登録を行います。",
"ensure_import_refs": "Import Refsの確認",
"ensure_import_refs_button": "確認の実行",
"ensure_import_refs_sub": "全てのアイテムに、有効な import_refに対応する値 が設定されていることを確認します。'<br>' 設定されていない場合は、ランダムな8文字の文字列を設定します。",
"set_primary_photo": "アイテムの見出し画像の自動設定",
"set_primary_photo_button": "操作を実行",
"set_primary_photo_confirm": "",
"set_primary_photo_sub": "Homebox v0.10.0にて、画像の添付ファイルのうち1枚を見出し画像(Primary Photo)として設定できるようになりました。'<br>'未設定のアイテムは、この機能を利用して自動で設定できます。'<br>'この機能は、見出し画像が未設定のアイテムと関連付けられている中で最も古い画像ファイルを自動的にアイテムの見出し画像として設定します。'<br>'詳しくは、'<a class=\"link\" href=\"https://github.com/hay-kot/homebox/pull/576\">'このページをご覧ください (GitHub PR #576)'</a>'",
"zero_datetimes": "アイテムに設定された日時を消去",
"zero_datetimes_button": "操作を実行",
"zero_datetimes_confirm": "",
"zero_datetimes_sub": "全てのアイテムの'<b>'日付をリセット'</b>'します。'<br>'これは、初期(v0.8.0 / 2023-02-18以前)に発生したバグの修正に必要です。日付が適切に表示されなくなるといった問題が発生している場合に限り、実行してください。'<br>'バグが発生していない場合は実行は不要です。'<a class=\"link\" href=\"https://github.com/hay-kot/homebox/issues/236\" target=\"_blank\">'詳しくはこちらをご覧ください (GitHub Issue #236)'</a>'"
},
"actions_sub": "以下の機能は、すべてのアイテムのデータに影響を与えます。'<b>'これらの操作を元に戻すことはできません。'</b>'",
@@ -586,7 +365,6 @@
"export_sub": "Homeboxで利用可能なCSV形式のファイルをエクスポートします。'<br>'すべてのアイテムが対象です。一部のアイテムを選択してエクスポートすることはできません。",
"import": "インポート (CSVの取り込み)",
"import_button": "CSVファイルを選択",
"import_ref_confirm": "",
"import_sub": "Homeboxで利用可能なCSVファイルをインポートします。\n'<code>'HB.import_ref'</code>'が存在しないアイテムに重複がある場合は上書きされません。\n'<code>'HB.import_ref'</code>'が存在するアイテムに重複がある場合は、同じ'<code>'HB.import_ref'</code>'を持つアイテムのデータが上書きされます。\nどちらも、重複していない場合は関係なく追加されます。"
},
"import_export_sub": "登録されたアイテムをCSVファイルにインポートおよびエクスポートします。Homeboxのソフトウェアを切り替える場合などに便利です。",
@@ -599,13 +377,6 @@
"bill_of_materials_button": "部品表(BOM)を生成する",
"bill_of_materials_sub": "CSV形式のファイルを出力します。基本的なアイテム情報と価格情報を含むアイテムの概要が含まれています。'<br>'UTF-8形式で出力されるため、Microsoft OfficeのExcelで開くと文字化けする恐れがあります。"
},
"reports_sub": "アイテムに関するデータの含まれたファイルを作成できます。",
"toast": {
"asset_success": "",
"failed_ensure_ids": "",
"failed_ensure_import_refs": "",
"failed_set_primary_photos": "",
"failed_zero_datetimes": ""
}
"reports_sub": "アイテムに関するデータの含まれたファイルを作成できます。"
}
}

View File

@@ -1,14 +1,7 @@
{
"components": {
"app": {
"create_modal": {
"createAndAddAnother": "",
"enter": "",
"shift": ""
},
"import_dialog": {
"change_warning": "",
"description": "",
"title": "CSV 파일 들여오기",
"toast": {
"import_failed": "들여오지 못했습니다. 나중에 다시 시도해 주세요.",
@@ -18,9 +11,7 @@
},
"outdated": {
"current_version": "현재 버전",
"dismiss": "",
"latest_version": "최신 버전",
"new_version_available": "",
"new_version_available_link": "릴리스 노트를 보려면 여기를 클릭하세요"
}
},
@@ -31,17 +22,13 @@
},
"global": {
"copy_text": {
"documentation": "",
"failed_to_copy": "클립보드에 복사하지 못했습니다",
"https_required": "",
"learn_more": ""
"failed_to_copy": "클립보드에 복사하지 못했습니다"
},
"date_time": {
"ago": "{0} 전",
"days": "일",
"hour": "시간",
"hours": "시간",
"in": "",
"just-now": "지금",
"last-month": "지난 달",
"last-week": "지난 주",
@@ -51,9 +38,6 @@
"months": "월",
"next-month": "다음 달",
"next-week": "다음 주",
"next-year": "",
"second": "",
"seconds": "",
"tomorrow": "내일",
"week": "주",
"weeks": "주",
@@ -61,20 +45,9 @@
"yesterday": "어제"
},
"label_maker": {
"browser_print": "브라우저에서 인쇄",
"confirm_description": "",
"download": "",
"print": "",
"server_print": "",
"titles": "",
"toast": {
"load_status_failed": "",
"print_failed": "",
"print_success": ""
}
"browser_print": "브라우저에서 인쇄"
},
"page_qr_code": {
"page_url": "",
"qr_tooltip": "QR 코드 표시"
},
"password_score": {
@@ -83,529 +56,8 @@
},
"item": {
"attachments_list": {
"download": "내려받기",
"open_new_tab": ""
},
"create_modal": {
"delete_photo": "",
"item_description": "",
"item_name": "",
"item_photo": "",
"item_quantity": "",
"parent_item": "",
"rotate_photo": "",
"set_as_primary_photo": "",
"title": "",
"toast": {
"already_creating": "",
"create_failed": "",
"create_success": "",
"failed_load_parent": "",
"no_canvas_support": "",
"please_select_location": "",
"rotate_failed": "",
"rotate_process_failed": "",
"some_photos_failed": "",
"upload_failed": "",
"upload_success": "",
"uploading_photos": ""
},
"upload_photos": "",
"uploaded": ""
},
"selector": {
"no_results": "",
"placeholder": "",
"search_placeholder": ""
},
"view": {
"selectable": {
"card": "",
"items": "",
"no_items": "",
"table": ""
},
"table": {
"headers": "",
"page": "",
"rows_per_page": "",
"table_settings": "",
"view_item": ""
}
}
},
"label": {
"create_modal": {
"label_description": "",
"label_name": "",
"title": "",
"toast": {
"already_creating": "",
"create_failed": "",
"create_success": "",
"label_name_too_long": ""
}
},
"selector": {
"select_labels": ""
}
},
"location": {
"create_modal": {
"location_description": "",
"location_name": "",
"title": "",
"toast": {
"already_creating": "",
"create_failed": "",
"create_success": ""
}
},
"selector": {
"no_location_found": "",
"parent_location": "",
"search_location": "",
"select_location": ""
},
"tree": {
"no_locations": ""
}
},
"quick_menu": {
"no_results": "",
"shortcut_hint": ""
}
},
"global": {
"add": "",
"archived": "",
"build": "",
"cancel": "",
"confirm": "",
"create": "",
"create_and_add": "",
"create_subitem": "",
"created": "",
"delete": "",
"delete_confirm": "",
"demo_instance": "",
"details": "",
"duplicate": "",
"edit": "",
"email": "",
"follow_dev": "",
"footer": {
"api_link": "",
"version_link": ""
},
"github": "",
"insured": "",
"items": "",
"join_discord": "",
"labels": "",
"loading": "",
"locations": "",
"maintenance": "",
"name": "",
"navigate": "",
"password": "",
"quantity": "",
"read_docs": "",
"return_home": "",
"save": "",
"search": "",
"sign_out": "",
"submit": "",
"unknown": "",
"update": "",
"updating": "",
"value": "",
"version": "",
"welcome": ""
},
"home": {
"labels": "",
"quick_statistics": "",
"recently_added": "",
"storage_locations": "",
"total_items": "",
"total_labels": "",
"total_locations": "",
"total_value": ""
},
"index": {
"disabled_registration": "",
"dont_join_group": "",
"joining_group": "",
"login": "",
"register": "",
"remember_me": "",
"set_email": "",
"set_name": "",
"set_password": "",
"tagline": "",
"title": "",
"toast": {
"invalid_email": "",
"invalid_email_password": "",
"login_success": "",
"problem_registering": "",
"user_registered": ""
}
},
"items": {
"add": "",
"advanced": "",
"archived": "",
"asset_id": "",
"associated_with_multiple": "",
"attachment": "",
"attachments": "",
"changes_persisted_immediately": "",
"created_at": "",
"custom_fields": "",
"delete_attachment_confirm": "",
"delete_item_confirm": "",
"description": "",
"details": "",
"drag_and_drop": "",
"edit": {
"edit_attachment_dialog": {
"attachment_title": "",
"attachment_type": "",
"primary_photo": "",
"primary_photo_sub": "",
"select_type": "",
"title": ""
}
},
"edit_details": "",
"field_selector": "",
"field_value": "",
"first": "",
"include_archive": "",
"insured": "",
"invalid_asset_id": "",
"last": "",
"lifetime_warranty": "",
"location": "",
"manual": "",
"manuals": "",
"manufacturer": "",
"model_number": "",
"name": "",
"negate_labels": "",
"next_page": "",
"no_attachments": "",
"no_results": "",
"notes": "",
"only_with_photo": "",
"only_without_photo": "",
"options": "",
"order_by": "",
"pages": "",
"parent_item": "",
"photo": "",
"photos": "",
"prev_page": "",
"purchase_date": "",
"purchase_details": "",
"purchase_price": "",
"purchased_from": "",
"quantity": "",
"query_id": "",
"receipt": "",
"receipts": "",
"reset_search": "",
"results": "",
"select_field": "",
"serial_number": "",
"show_advanced_view_options": "",
"sold_at": "",
"sold_details": "",
"sold_price": "",
"sold_to": "",
"sync_child_locations": "",
"tip_1": "",
"tip_2": "",
"tip_3": "",
"tips": "",
"tips_sub": "",
"toast": {
"asset_not_found": "",
"attachment_deleted": "",
"attachment_updated": "",
"attachment_uploaded": "",
"child_items_location_no_longer_synced": "",
"child_items_location_synced": "",
"child_location_desync": "",
"error_loading_parent_data": "",
"failed_adjust_quantity": "",
"failed_delete_attachment": "",
"failed_delete_item": "",
"failed_duplicate_item": "",
"failed_load_asset": "",
"failed_load_item": "",
"failed_load_items": "",
"failed_save": "",
"failed_save_no_location": "",
"failed_search_items": "",
"failed_update_attachment": "",
"failed_upload_attachment": "",
"item_deleted": "",
"item_saved": "",
"quantity_cannot_negative": "",
"sync_child_location": ""
},
"updated_at": "",
"warranty": "",
"warranty_details": "",
"warranty_expires": ""
},
"labels": {
"label_delete_confirm": "",
"no_results": "",
"toast": {
"failed_delete_label": "",
"failed_load_label": "",
"failed_update_label": "",
"label_deleted": "",
"label_updated": ""
},
"update_label": ""
},
"languages": {
"ca": "",
"cs-CZ": "",
"da-DK": "",
"de": "",
"en": "",
"es": "",
"fi-FI": "",
"fr": "",
"hu": "",
"id-ID": "",
"it": "",
"ja-JP": "",
"ko-KR": "",
"lb-LU": "",
"lt-LT": "",
"nb-NO": "",
"nl": "",
"pl": "",
"pt-BR": "",
"pt-PT": "",
"ro-RO": "",
"ru": "",
"sk-SK": "",
"sl": "",
"sq-AL": "",
"sv": "",
"ta-IN": "",
"th-TH": "",
"tr": "",
"uk-UA": "",
"zh-CN": "",
"zh-HK": "",
"zh-MO": "",
"zh-TW": ""
},
"locations": {
"child_locations": "",
"collapse_tree": "",
"expand_tree": "",
"location_items_delete_confirm": "",
"no_results": "",
"toast": {
"failed_delete_location": "",
"failed_load_location": "",
"failed_update_location": "",
"location_deleted": "",
"location_updated": ""
},
"update_location": ""
},
"maintenance": {
"filter": {
"both": "",
"completed": "",
"scheduled": ""
},
"list": {
"complete": "",
"create_first": "",
"delete": "",
"duplicate": "",
"edit": "",
"new": ""
},
"modal": {
"completed_date": "",
"cost": "",
"delete_confirmation": "",
"edit_action": "",
"edit_title": "",
"entry_name": "",
"new_action": "",
"new_title": "",
"notes": "",
"scheduled_date": ""
},
"monthly_average": "",
"toast": {
"failed_to_create": "",
"failed_to_delete": "",
"failed_to_update": ""
},
"total_cost": "",
"total_entries": ""
},
"menu": {
"create_item": "",
"create_label": "",
"create_location": "",
"home": "",
"locations": "",
"maintenance": "",
"profile": "",
"scanner": "",
"search": "",
"tools": ""
},
"profile": {
"active": "",
"change_password": "",
"currency_format": "",
"current_password": "",
"delete_account": "",
"delete_account_confirm": "",
"delete_account_sub": "",
"delete_notifier_confirm": "",
"display_legacy_header": "",
"enabled": "",
"example": "",
"gen_invite": "",
"group_settings": "",
"group_settings_sub": "",
"inactive": "",
"language": "",
"new_password": "",
"no_notifiers": "",
"no_override": "",
"notifier_modal": "",
"notifiers": "",
"notifiers_sub": "",
"override_locale": "",
"test": "",
"theme_settings": "",
"theme_settings_sub": "",
"toast": {
"account_deleted": "",
"failed_change_password": "",
"failed_create_notifier": "",
"failed_delete_account": "",
"failed_delete_notifier": "",
"failed_get_currencies": "",
"failed_test_notifier": "",
"failed_update_group": "",
"failed_update_notifier": "",
"group_updated": "",
"notifier_test_success": "",
"password_changed": ""
},
"update_group": "",
"update_language": "",
"url": "",
"user_profile": "",
"user_profile_sub": ""
},
"reports": {
"label_generator": {
"asset_end": "",
"asset_start": "",
"base_url": "",
"bordered_labels": "",
"generate_page": "",
"input_placeholder": "",
"instruction_1": "",
"instruction_2": "",
"instruction_3": "",
"label_height": "",
"label_width": "",
"measure_type": "",
"page_bottom_padding": "",
"page_height": "",
"page_left_padding": "",
"page_right_padding": "",
"page_top_padding": "",
"page_width": "",
"qr_code_example": "",
"tip_1": "",
"tip_2": "",
"tip_3": "",
"tips": "",
"title": "",
"toast": {
"page_too_small_card": ""
}
}
},
"scanner": {
"error": "",
"invalid_url": "",
"no_sources": "",
"permission_denied": "",
"select_video_source": "",
"title": "",
"unsupported": ""
},
"tools": {
"actions": "",
"actions_set": {
"ensure_ids": "",
"ensure_ids_button": "",
"ensure_ids_confirm": "",
"ensure_ids_sub": "",
"ensure_import_refs": "",
"ensure_import_refs_button": "",
"ensure_import_refs_sub": "",
"set_primary_photo": "",
"set_primary_photo_button": "",
"set_primary_photo_confirm": "",
"set_primary_photo_sub": "",
"zero_datetimes": "",
"zero_datetimes_button": "",
"zero_datetimes_confirm": "",
"zero_datetimes_sub": ""
},
"actions_sub": "",
"import_export": "",
"import_export_set": {
"export": "",
"export_button": "",
"export_sub": "",
"import": "",
"import_button": "",
"import_ref_confirm": "",
"import_sub": ""
},
"import_export_sub": "",
"reports": "",
"reports_set": {
"asset_labels": "",
"asset_labels_button": "",
"asset_labels_sub": "",
"bill_of_materials": "",
"bill_of_materials_button": "",
"bill_of_materials_sub": ""
},
"reports_sub": "",
"toast": {
"asset_success": "",
"failed_ensure_ids": "",
"failed_ensure_import_refs": "",
"failed_set_primary_photos": "",
"failed_zero_datetimes": ""
"download": "내려받기"
}
}
}
}

View File

@@ -1,611 +1 @@
{
"components": {
"app": {
"create_modal": {
"createAndAddAnother": "",
"enter": "",
"shift": ""
},
"import_dialog": {
"change_warning": "",
"description": "",
"title": "",
"toast": {
"import_failed": "",
"import_success": "",
"please_select_file": ""
}
},
"outdated": {
"current_version": "",
"dismiss": "",
"latest_version": "",
"new_version_available": "",
"new_version_available_link": ""
}
},
"form": {
"password": {
"toggle_show": ""
}
},
"global": {
"copy_text": {
"documentation": "",
"failed_to_copy": "",
"https_required": "",
"learn_more": ""
},
"date_time": {
"ago": "",
"days": "",
"hour": "",
"hours": "",
"in": "",
"just-now": "",
"last-month": "",
"last-week": "",
"last-year": "",
"minute": "",
"minutes": "",
"months": "",
"next-month": "",
"next-week": "",
"next-year": "",
"second": "",
"seconds": "",
"tomorrow": "",
"week": "",
"weeks": "",
"years": "",
"yesterday": ""
},
"label_maker": {
"browser_print": "",
"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_photo": "",
"item_quantity": "",
"parent_item": "",
"rotate_photo": "",
"set_as_primary_photo": "",
"title": "",
"toast": {
"already_creating": "",
"create_failed": "",
"create_success": "",
"failed_load_parent": "",
"no_canvas_support": "",
"please_select_location": "",
"rotate_failed": "",
"rotate_process_failed": "",
"some_photos_failed": "",
"upload_failed": "",
"upload_success": "",
"uploading_photos": ""
},
"upload_photos": "",
"uploaded": ""
},
"selector": {
"no_results": "",
"placeholder": "",
"search_placeholder": ""
},
"view": {
"selectable": {
"card": "",
"items": "",
"no_items": "",
"table": ""
},
"table": {
"headers": "",
"page": "",
"rows_per_page": "",
"table_settings": "",
"view_item": ""
}
}
},
"label": {
"create_modal": {
"label_description": "",
"label_name": "",
"title": "",
"toast": {
"already_creating": "",
"create_failed": "",
"create_success": "",
"label_name_too_long": ""
}
},
"selector": {
"select_labels": ""
}
},
"location": {
"create_modal": {
"location_description": "",
"location_name": "",
"title": "",
"toast": {
"already_creating": "",
"create_failed": "",
"create_success": ""
}
},
"selector": {
"no_location_found": "",
"parent_location": "",
"search_location": "",
"select_location": ""
},
"tree": {
"no_locations": ""
}
},
"quick_menu": {
"no_results": "",
"shortcut_hint": ""
}
},
"global": {
"add": "",
"archived": "",
"build": "",
"cancel": "",
"confirm": "",
"create": "",
"create_and_add": "",
"create_subitem": "",
"created": "",
"delete": "",
"delete_confirm": "",
"demo_instance": "",
"details": "",
"duplicate": "",
"edit": "",
"email": "",
"follow_dev": "",
"footer": {
"api_link": "",
"version_link": ""
},
"github": "",
"insured": "",
"items": "",
"join_discord": "",
"labels": "",
"loading": "",
"locations": "",
"maintenance": "",
"name": "",
"navigate": "",
"password": "",
"quantity": "",
"read_docs": "",
"return_home": "",
"save": "",
"search": "",
"sign_out": "",
"submit": "",
"unknown": "",
"update": "",
"updating": "",
"value": "",
"version": "",
"welcome": ""
},
"home": {
"labels": "",
"quick_statistics": "",
"recently_added": "",
"storage_locations": "",
"total_items": "",
"total_labels": "",
"total_locations": "",
"total_value": ""
},
"index": {
"disabled_registration": "",
"dont_join_group": "",
"joining_group": "",
"login": "",
"register": "",
"remember_me": "",
"set_email": "",
"set_name": "",
"set_password": "",
"tagline": "",
"title": "",
"toast": {
"invalid_email": "",
"invalid_email_password": "",
"login_success": "",
"problem_registering": "",
"user_registered": ""
}
},
"items": {
"add": "",
"advanced": "",
"archived": "",
"asset_id": "",
"associated_with_multiple": "",
"attachment": "",
"attachments": "",
"changes_persisted_immediately": "",
"created_at": "",
"custom_fields": "",
"delete_attachment_confirm": "",
"delete_item_confirm": "",
"description": "",
"details": "",
"drag_and_drop": "",
"edit": {
"edit_attachment_dialog": {
"attachment_title": "",
"attachment_type": "",
"primary_photo": "",
"primary_photo_sub": "",
"select_type": "",
"title": ""
}
},
"edit_details": "",
"field_selector": "",
"field_value": "",
"first": "",
"include_archive": "",
"insured": "",
"invalid_asset_id": "",
"last": "",
"lifetime_warranty": "",
"location": "",
"manual": "",
"manuals": "",
"manufacturer": "",
"model_number": "",
"name": "",
"negate_labels": "",
"next_page": "",
"no_attachments": "",
"no_results": "",
"notes": "",
"only_with_photo": "",
"only_without_photo": "",
"options": "",
"order_by": "",
"pages": "",
"parent_item": "",
"photo": "",
"photos": "",
"prev_page": "",
"purchase_date": "",
"purchase_details": "",
"purchase_price": "",
"purchased_from": "",
"quantity": "",
"query_id": "",
"receipt": "",
"receipts": "",
"reset_search": "",
"results": "",
"select_field": "",
"serial_number": "",
"show_advanced_view_options": "",
"sold_at": "",
"sold_details": "",
"sold_price": "",
"sold_to": "",
"sync_child_locations": "",
"tip_1": "",
"tip_2": "",
"tip_3": "",
"tips": "",
"tips_sub": "",
"toast": {
"asset_not_found": "",
"attachment_deleted": "",
"attachment_updated": "",
"attachment_uploaded": "",
"child_items_location_no_longer_synced": "",
"child_items_location_synced": "",
"child_location_desync": "",
"error_loading_parent_data": "",
"failed_adjust_quantity": "",
"failed_delete_attachment": "",
"failed_delete_item": "",
"failed_duplicate_item": "",
"failed_load_asset": "",
"failed_load_item": "",
"failed_load_items": "",
"failed_save": "",
"failed_save_no_location": "",
"failed_search_items": "",
"failed_update_attachment": "",
"failed_upload_attachment": "",
"item_deleted": "",
"item_saved": "",
"quantity_cannot_negative": "",
"sync_child_location": ""
},
"updated_at": "",
"warranty": "",
"warranty_details": "",
"warranty_expires": ""
},
"labels": {
"label_delete_confirm": "",
"no_results": "",
"toast": {
"failed_delete_label": "",
"failed_load_label": "",
"failed_update_label": "",
"label_deleted": "",
"label_updated": ""
},
"update_label": ""
},
"languages": {
"ca": "",
"cs-CZ": "",
"da-DK": "",
"de": "",
"en": "",
"es": "",
"fi-FI": "",
"fr": "",
"hu": "",
"id-ID": "",
"it": "",
"ja-JP": "",
"ko-KR": "",
"lb-LU": "",
"lt-LT": "",
"nb-NO": "",
"nl": "",
"pl": "",
"pt-BR": "",
"pt-PT": "",
"ro-RO": "",
"ru": "",
"sk-SK": "",
"sl": "",
"sq-AL": "",
"sv": "",
"ta-IN": "",
"th-TH": "",
"tr": "",
"uk-UA": "",
"zh-CN": "",
"zh-HK": "",
"zh-MO": "",
"zh-TW": ""
},
"locations": {
"child_locations": "",
"collapse_tree": "",
"expand_tree": "",
"location_items_delete_confirm": "",
"no_results": "",
"toast": {
"failed_delete_location": "",
"failed_load_location": "",
"failed_update_location": "",
"location_deleted": "",
"location_updated": ""
},
"update_location": ""
},
"maintenance": {
"filter": {
"both": "",
"completed": "",
"scheduled": ""
},
"list": {
"complete": "",
"create_first": "",
"delete": "",
"duplicate": "",
"edit": "",
"new": ""
},
"modal": {
"completed_date": "",
"cost": "",
"delete_confirmation": "",
"edit_action": "",
"edit_title": "",
"entry_name": "",
"new_action": "",
"new_title": "",
"notes": "",
"scheduled_date": ""
},
"monthly_average": "",
"toast": {
"failed_to_create": "",
"failed_to_delete": "",
"failed_to_update": ""
},
"total_cost": "",
"total_entries": ""
},
"menu": {
"create_item": "",
"create_label": "",
"create_location": "",
"home": "",
"locations": "",
"maintenance": "",
"profile": "",
"scanner": "",
"search": "",
"tools": ""
},
"profile": {
"active": "",
"change_password": "",
"currency_format": "",
"current_password": "",
"delete_account": "",
"delete_account_confirm": "",
"delete_account_sub": "",
"delete_notifier_confirm": "",
"display_legacy_header": "",
"enabled": "",
"example": "",
"gen_invite": "",
"group_settings": "",
"group_settings_sub": "",
"inactive": "",
"language": "",
"new_password": "",
"no_notifiers": "",
"no_override": "",
"notifier_modal": "",
"notifiers": "",
"notifiers_sub": "",
"override_locale": "",
"test": "",
"theme_settings": "",
"theme_settings_sub": "",
"toast": {
"account_deleted": "",
"failed_change_password": "",
"failed_create_notifier": "",
"failed_delete_account": "",
"failed_delete_notifier": "",
"failed_get_currencies": "",
"failed_test_notifier": "",
"failed_update_group": "",
"failed_update_notifier": "",
"group_updated": "",
"notifier_test_success": "",
"password_changed": ""
},
"update_group": "",
"update_language": "",
"url": "",
"user_profile": "",
"user_profile_sub": ""
},
"reports": {
"label_generator": {
"asset_end": "",
"asset_start": "",
"base_url": "",
"bordered_labels": "",
"generate_page": "",
"input_placeholder": "",
"instruction_1": "",
"instruction_2": "",
"instruction_3": "",
"label_height": "",
"label_width": "",
"measure_type": "",
"page_bottom_padding": "",
"page_height": "",
"page_left_padding": "",
"page_right_padding": "",
"page_top_padding": "",
"page_width": "",
"qr_code_example": "",
"tip_1": "",
"tip_2": "",
"tip_3": "",
"tips": "",
"title": "",
"toast": {
"page_too_small_card": ""
}
}
},
"scanner": {
"error": "",
"invalid_url": "",
"no_sources": "",
"permission_denied": "",
"select_video_source": "",
"title": "",
"unsupported": ""
},
"tools": {
"actions": "",
"actions_set": {
"ensure_ids": "",
"ensure_ids_button": "",
"ensure_ids_confirm": "",
"ensure_ids_sub": "",
"ensure_import_refs": "",
"ensure_import_refs_button": "",
"ensure_import_refs_sub": "",
"set_primary_photo": "",
"set_primary_photo_button": "",
"set_primary_photo_confirm": "",
"set_primary_photo_sub": "",
"zero_datetimes": "",
"zero_datetimes_button": "",
"zero_datetimes_confirm": "",
"zero_datetimes_sub": ""
},
"actions_sub": "",
"import_export": "",
"import_export_set": {
"export": "",
"export_button": "",
"export_sub": "",
"import": "",
"import_button": "",
"import_ref_confirm": "",
"import_sub": ""
},
"import_export_sub": "",
"reports": "",
"reports_set": {
"asset_labels": "",
"asset_labels_button": "",
"asset_labels_sub": "",
"bill_of_materials": "",
"bill_of_materials_button": "",
"bill_of_materials_sub": ""
},
"reports_sub": "",
"toast": {
"asset_success": "",
"failed_ensure_ids": "",
"failed_ensure_import_refs": "",
"failed_set_primary_photos": "",
"failed_zero_datetimes": ""
}
}
}
{}

View File

@@ -1,34 +1,18 @@
{
"components": {
"app": {
"create_modal": {
"createAndAddAnother": "",
"enter": "",
"shift": ""
},
"import_dialog": {
"change_warning": "Pasikeitė importo su esamais import_refs elgesys. Jei CSV faile yra import_ref, \nelementas bus atnaujintas su CSV failo reikšmėmis.",
"description": "Importuokite CSV failą, kuriame yra jūsų elementai, etiketės ir vietos. Daugiau informacijos apie \nreikalingas formatas.",
"title": "Importuoti CSV failą",
"toast": {
"import_failed": "",
"import_success": "",
"please_select_file": ""
}
"title": "Importuoti CSV failą"
},
"outdated": {
"current_version": "Dabartinė Versija",
"dismiss": "Atmesti",
"latest_version": "",
"new_version_available": "Galima Nauja Versija",
"new_version_available_link": "Spauskite čia Norėdami peržiūrėti išleidimo pastabas"
}
},
"form": {
"password": {
"toggle_show": ""
}
},
"global": {
"copy_text": {
"documentation": "dokumentas",
@@ -55,7 +39,6 @@
"second": "antras",
"seconds": "sekundės",
"tomorrow": "rytoj",
"week": "",
"weeks": "savaičių",
"years": "metai",
"yesterday": "vakar"
@@ -66,12 +49,7 @@
"download": "Atsisiųsti Etiketę",
"print": "Spausdinti etiketę",
"server_print": "Spausdinti serveryje",
"titles": "Etiketė",
"toast": {
"load_status_failed": "",
"print_failed": "",
"print_success": ""
}
"titles": "Etiketė"
},
"page_qr_code": {
"page_url": "Puslapio URL",
@@ -82,41 +60,13 @@
}
},
"item": {
"attachments_list": {
"download": "",
"open_new_tab": ""
},
"create_modal": {
"delete_photo": "",
"item_description": "Prekės Aprašymas",
"item_name": "Prekės Pavadinimas",
"item_photo": "Prekės Nuotrauka 📷",
"item_quantity": "Prekės Kiekis",
"parent_item": "",
"rotate_photo": "",
"set_as_primary_photo": "",
"title": "Sukurti Elementą",
"toast": {
"already_creating": "",
"create_failed": "",
"create_success": "",
"failed_load_parent": "",
"no_canvas_support": "",
"please_select_location": "",
"rotate_failed": "",
"rotate_process_failed": "",
"some_photos_failed": "",
"upload_failed": "",
"upload_success": "",
"uploading_photos": ""
},
"upload_photos": "Įkelti Nuotraukas",
"uploaded": ""
},
"selector": {
"no_results": "",
"placeholder": "",
"search_placeholder": ""
"upload_photos": "Įkelti Nuotraukas"
},
"view": {
"selectable": {
@@ -126,486 +76,9 @@
"table": "Lentelė"
},
"table": {
"headers": "",
"page": "Puslapis",
"rows_per_page": "",
"table_settings": "",
"view_item": ""
}
}
},
"label": {
"create_modal": {
"label_description": "",
"label_name": "",
"title": "",
"toast": {
"already_creating": "",
"create_failed": "",
"create_success": "",
"label_name_too_long": ""
}
},
"selector": {
"select_labels": ""
}
},
"location": {
"create_modal": {
"location_description": "",
"location_name": "",
"title": "",
"toast": {
"already_creating": "",
"create_failed": "",
"create_success": ""
}
},
"selector": {
"no_location_found": "",
"parent_location": "",
"search_location": "",
"select_location": ""
},
"tree": {
"no_locations": ""
}
},
"quick_menu": {
"no_results": "",
"shortcut_hint": ""
}
},
"global": {
"add": "",
"archived": "",
"build": "",
"cancel": "",
"confirm": "",
"create": "",
"create_and_add": "",
"create_subitem": "",
"created": "",
"delete": "",
"delete_confirm": "",
"demo_instance": "",
"details": "",
"duplicate": "",
"edit": "",
"email": "",
"follow_dev": "",
"footer": {
"api_link": "",
"version_link": ""
},
"github": "",
"insured": "",
"items": "",
"join_discord": "",
"labels": "",
"loading": "",
"locations": "",
"maintenance": "",
"name": "",
"navigate": "",
"password": "",
"quantity": "",
"read_docs": "",
"return_home": "",
"save": "",
"search": "",
"sign_out": "",
"submit": "",
"unknown": "",
"update": "",
"updating": "",
"value": "",
"version": "",
"welcome": ""
},
"home": {
"labels": "",
"quick_statistics": "",
"recently_added": "",
"storage_locations": "",
"total_items": "",
"total_labels": "",
"total_locations": "",
"total_value": ""
},
"index": {
"disabled_registration": "",
"dont_join_group": "",
"joining_group": "",
"login": "",
"register": "",
"remember_me": "",
"set_email": "",
"set_name": "",
"set_password": "",
"tagline": "",
"title": "",
"toast": {
"invalid_email": "",
"invalid_email_password": "",
"login_success": "",
"problem_registering": "",
"user_registered": ""
}
},
"items": {
"add": "",
"advanced": "",
"archived": "",
"asset_id": "",
"associated_with_multiple": "",
"attachment": "",
"attachments": "",
"changes_persisted_immediately": "",
"created_at": "",
"custom_fields": "",
"delete_attachment_confirm": "",
"delete_item_confirm": "",
"description": "",
"details": "",
"drag_and_drop": "",
"edit": {
"edit_attachment_dialog": {
"attachment_title": "",
"attachment_type": "",
"primary_photo": "",
"primary_photo_sub": "",
"select_type": "",
"title": ""
}
},
"edit_details": "",
"field_selector": "",
"field_value": "",
"first": "",
"include_archive": "",
"insured": "",
"invalid_asset_id": "",
"last": "",
"lifetime_warranty": "",
"location": "",
"manual": "",
"manuals": "",
"manufacturer": "",
"model_number": "",
"name": "",
"negate_labels": "",
"next_page": "",
"no_attachments": "",
"no_results": "",
"notes": "",
"only_with_photo": "",
"only_without_photo": "",
"options": "",
"order_by": "",
"pages": "",
"parent_item": "",
"photo": "",
"photos": "",
"prev_page": "",
"purchase_date": "",
"purchase_details": "",
"purchase_price": "",
"purchased_from": "",
"quantity": "",
"query_id": "",
"receipt": "",
"receipts": "",
"reset_search": "",
"results": "",
"select_field": "",
"serial_number": "",
"show_advanced_view_options": "",
"sold_at": "",
"sold_details": "",
"sold_price": "",
"sold_to": "",
"sync_child_locations": "",
"tip_1": "",
"tip_2": "",
"tip_3": "",
"tips": "",
"tips_sub": "",
"toast": {
"asset_not_found": "",
"attachment_deleted": "",
"attachment_updated": "",
"attachment_uploaded": "",
"child_items_location_no_longer_synced": "",
"child_items_location_synced": "",
"child_location_desync": "",
"error_loading_parent_data": "",
"failed_adjust_quantity": "",
"failed_delete_attachment": "",
"failed_delete_item": "",
"failed_duplicate_item": "",
"failed_load_asset": "",
"failed_load_item": "",
"failed_load_items": "",
"failed_save": "",
"failed_save_no_location": "",
"failed_search_items": "",
"failed_update_attachment": "",
"failed_upload_attachment": "",
"item_deleted": "",
"item_saved": "",
"quantity_cannot_negative": "",
"sync_child_location": ""
},
"updated_at": "",
"warranty": "",
"warranty_details": "",
"warranty_expires": ""
},
"labels": {
"label_delete_confirm": "",
"no_results": "",
"toast": {
"failed_delete_label": "",
"failed_load_label": "",
"failed_update_label": "",
"label_deleted": "",
"label_updated": ""
},
"update_label": ""
},
"languages": {
"ca": "",
"cs-CZ": "",
"da-DK": "",
"de": "",
"en": "",
"es": "",
"fi-FI": "",
"fr": "",
"hu": "",
"id-ID": "",
"it": "",
"ja-JP": "",
"ko-KR": "",
"lb-LU": "",
"lt-LT": "",
"nb-NO": "",
"nl": "",
"pl": "",
"pt-BR": "",
"pt-PT": "",
"ro-RO": "",
"ru": "",
"sk-SK": "",
"sl": "",
"sq-AL": "",
"sv": "",
"ta-IN": "",
"th-TH": "",
"tr": "",
"uk-UA": "",
"zh-CN": "",
"zh-HK": "",
"zh-MO": "",
"zh-TW": ""
},
"locations": {
"child_locations": "",
"collapse_tree": "",
"expand_tree": "",
"location_items_delete_confirm": "",
"no_results": "",
"toast": {
"failed_delete_location": "",
"failed_load_location": "",
"failed_update_location": "",
"location_deleted": "",
"location_updated": ""
},
"update_location": ""
},
"maintenance": {
"filter": {
"both": "",
"completed": "",
"scheduled": ""
},
"list": {
"complete": "",
"create_first": "",
"delete": "",
"duplicate": "",
"edit": "",
"new": ""
},
"modal": {
"completed_date": "",
"cost": "",
"delete_confirmation": "",
"edit_action": "",
"edit_title": "",
"entry_name": "",
"new_action": "",
"new_title": "",
"notes": "",
"scheduled_date": ""
},
"monthly_average": "",
"toast": {
"failed_to_create": "",
"failed_to_delete": "",
"failed_to_update": ""
},
"total_cost": "",
"total_entries": ""
},
"menu": {
"create_item": "",
"create_label": "",
"create_location": "",
"home": "",
"locations": "",
"maintenance": "",
"profile": "",
"scanner": "",
"search": "",
"tools": ""
},
"profile": {
"active": "",
"change_password": "",
"currency_format": "",
"current_password": "",
"delete_account": "",
"delete_account_confirm": "",
"delete_account_sub": "",
"delete_notifier_confirm": "",
"display_legacy_header": "",
"enabled": "",
"example": "",
"gen_invite": "",
"group_settings": "",
"group_settings_sub": "",
"inactive": "",
"language": "",
"new_password": "",
"no_notifiers": "",
"no_override": "",
"notifier_modal": "",
"notifiers": "",
"notifiers_sub": "",
"override_locale": "",
"test": "",
"theme_settings": "",
"theme_settings_sub": "",
"toast": {
"account_deleted": "",
"failed_change_password": "",
"failed_create_notifier": "",
"failed_delete_account": "",
"failed_delete_notifier": "",
"failed_get_currencies": "",
"failed_test_notifier": "",
"failed_update_group": "",
"failed_update_notifier": "",
"group_updated": "",
"notifier_test_success": "",
"password_changed": ""
},
"update_group": "",
"update_language": "",
"url": "",
"user_profile": "",
"user_profile_sub": ""
},
"reports": {
"label_generator": {
"asset_end": "",
"asset_start": "",
"base_url": "",
"bordered_labels": "",
"generate_page": "",
"input_placeholder": "",
"instruction_1": "",
"instruction_2": "",
"instruction_3": "",
"label_height": "",
"label_width": "",
"measure_type": "",
"page_bottom_padding": "",
"page_height": "",
"page_left_padding": "",
"page_right_padding": "",
"page_top_padding": "",
"page_width": "",
"qr_code_example": "",
"tip_1": "",
"tip_2": "",
"tip_3": "",
"tips": "",
"title": "",
"toast": {
"page_too_small_card": ""
}
}
},
"scanner": {
"error": "",
"invalid_url": "",
"no_sources": "",
"permission_denied": "",
"select_video_source": "",
"title": "",
"unsupported": ""
},
"tools": {
"actions": "",
"actions_set": {
"ensure_ids": "",
"ensure_ids_button": "",
"ensure_ids_confirm": "",
"ensure_ids_sub": "",
"ensure_import_refs": "",
"ensure_import_refs_button": "",
"ensure_import_refs_sub": "",
"set_primary_photo": "",
"set_primary_photo_button": "",
"set_primary_photo_confirm": "",
"set_primary_photo_sub": "",
"zero_datetimes": "",
"zero_datetimes_button": "",
"zero_datetimes_confirm": "",
"zero_datetimes_sub": ""
},
"actions_sub": "",
"import_export": "",
"import_export_set": {
"export": "",
"export_button": "",
"export_sub": "",
"import": "",
"import_button": "",
"import_ref_confirm": "",
"import_sub": ""
},
"import_export_sub": "",
"reports": "",
"reports_set": {
"asset_labels": "",
"asset_labels_button": "",
"asset_labels_sub": "",
"bill_of_materials": "",
"bill_of_materials_button": "",
"bill_of_materials_sub": ""
},
"reports_sub": "",
"toast": {
"asset_success": "",
"failed_ensure_ids": "",
"failed_ensure_import_refs": "",
"failed_set_primary_photos": "",
"failed_zero_datetimes": ""
"page": "Puslapis"
}
}
}
}
}

View File

@@ -270,7 +270,7 @@
"attachment": "Vedlegg",
"attachments": "Vedlegg",
"changes_persisted_immediately": "Endringer til vedlegg blir lagret umiddelbart",
"created_at": "Lagt til den",
"created_at": "Lagt til for",
"custom_fields": "Egendefinerte felt",
"delete_attachment_confirm": "Vil du virkelig slette dette vedlegget?",
"delete_item_confirm": "Vil du virkelig slette denne enheten?",

View File

@@ -115,14 +115,14 @@
"some_photos_failed": "{count, plural, =0 {Geen foto's om te uploaden.} =1 {1 foto kon niet worden geüpload.} other {Sommige foto's konden niet worden geüpload.}}",
"upload_failed": "Kan foto niet uploaden: { photoName }",
"upload_success": "{count, plural, =0 {Geen foto's geüpload.} =1 {Foto succesvol geüpload.} other {Alle foto's succesvol geüpload.}}",
"uploading_photos": "{count, plural, =0 {Geen foto's om te uploaden} =1 {1 foto uploaden...} other {{count} foto's uploaden...}}"
"uploading_photos": "{count, plural, =0 {Geen foto's om te uploaden} =1 {1 foto uploaden} other {{count} foto's uploaden}}"
},
"upload_photos": "Fotos toevoegen",
"uploaded": "Geüploade foto"
},
"selector": {
"no_results": "Geen resultaten gevonden",
"placeholder": "Selecteer...",
"placeholder": "Selecteer",
"search_placeholder": "Type om te zoeken…"
},
"view": {
@@ -137,7 +137,7 @@
"page": "Pagina",
"rows_per_page": "Rijen per pagina",
"table_settings": "Tabel instellingen",
"view_item": "Item bekijken"
"view_item": "Toon Item"
}
}
},
@@ -176,7 +176,7 @@
"select_location": "Selecteer een locatie"
},
"tree": {
"no_locations": "Geen locaties beschikbaar. Voeg een nieuwe locatie toe\n via de `<`span class=\"link-primary\"`>`Creeer`<`/span`> knop op het navigatie menu."
"no_locations": "Geen locaties beschikbaar. Voeg een nieuwe locatie toe\n via de' <span class=\"link-primary\">'Creeer'</span>' knop op het navigatie menu."
}
},
"quick_menu": {
@@ -187,7 +187,7 @@
"global": {
"add": "Toevoegen",
"archived": "Gearchiveerd",
"build": "Bouw: { build }",
"build": "Build: { build }",
"cancel": "Annuleren",
"confirm": "Bevestigen",
"create": "Maken",
@@ -204,14 +204,14 @@
"follow_dev": "Volg de ontwikkelaar",
"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\"'>' Versie: { version } Build: { build } '</a>'"
},
"github": "GitHub Project",
"insured": "Verzekerd",
"items": "artikelen",
"join_discord": "Sluit je aan bij de Discord",
"labels": "Labels",
"loading": "Bezig met laden...",
"loading": "Bezig met laden",
"locations": "Locaties",
"maintenance": "Onderhoud",
"name": "Naam",
@@ -614,7 +614,7 @@
"reports_sub": "Genereer verschillende rapporten van je voorraad.",
"toast": {
"asset_success": "{ results } items zijn bijgewerkt.",
"failed_create_missing_thumbnails": "Miniaturen aanmaken mislukt.",
"failed_create_missing_thumbnails": "Ontbrekende miniaturen aanmaken mislukt.",
"failed_ensure_ids": "Item-ID's aanmaken mislukt.",
"failed_ensure_import_refs": "Import refs aanmaken mislukt.",
"failed_set_primary_photos": "Primaire foto's instellen mislukt.",

View File

@@ -1,20 +1,10 @@
{
"components": {
"app": {
"create_modal": {
"createAndAddAnother": "",
"enter": "",
"shift": ""
},
"import_dialog": {
"change_warning": "Zachowanie podczas importu z istniejącymi import_ref zostało zmienione. Jeśli import_ref jest obecny w pliku CSV, \nprzedmiot zostanie zaktualizowany wartościami z pliku CSV.",
"description": "Zaimportuj plik CSV zawierający Twoje przedmioty, etykiety i lokalizacje. Zobacz dokumentację, aby uzyskać \nwięcej informacji na temat wymaganego formatu.",
"title": "Zaimportuj plik CSV",
"toast": {
"import_failed": "",
"import_success": "",
"please_select_file": ""
}
"title": "Zaimportuj plik CSV"
},
"outdated": {
"current_version": "Bieżąca wersja",
@@ -24,11 +14,6 @@
"new_version_available_link": "Kliknij tutaj, aby wyświetlić informacje o wydaniu"
}
},
"form": {
"password": {
"toggle_show": ""
}
},
"global": {
"copy_text": {
"documentation": "dokumentacja",
@@ -66,12 +51,7 @@
"download": "Pobierz etykietę",
"print": "Drukuj etykietę",
"server_print": "Drukuj na serwerze",
"titles": "Etykiety",
"toast": {
"load_status_failed": "",
"print_failed": "",
"print_success": ""
}
"titles": "Etykiety"
},
"page_qr_code": {
"page_url": "Adres URL strony",
@@ -82,41 +62,12 @@
}
},
"item": {
"attachments_list": {
"download": "",
"open_new_tab": ""
},
"create_modal": {
"delete_photo": "",
"item_description": "Opis przedmiotu",
"item_name": "Nazwa przedmiotu",
"item_photo": "Zdjęcie Przedmiotu 📷",
"item_quantity": "",
"parent_item": "",
"rotate_photo": "",
"set_as_primary_photo": "",
"title": "Utwórz przedmiot",
"toast": {
"already_creating": "",
"create_failed": "",
"create_success": "",
"failed_load_parent": "",
"no_canvas_support": "",
"please_select_location": "",
"rotate_failed": "",
"rotate_process_failed": "",
"some_photos_failed": "",
"upload_failed": "",
"upload_success": "",
"uploading_photos": ""
},
"upload_photos": "Prześlij Zdjęcia",
"uploaded": ""
},
"selector": {
"no_results": "",
"placeholder": "",
"search_placeholder": ""
"upload_photos": "Prześlij Zdjęcia"
},
"view": {
"selectable": {
@@ -129,8 +80,7 @@
"headers": "Nagłówki",
"page": "Strona",
"rows_per_page": "Ilość wierszy na stronę",
"table_settings": "Ustawienia Tabeli",
"view_item": ""
"table_settings": "Ustawienia Tabeli"
}
}
},
@@ -138,13 +88,7 @@
"create_modal": {
"label_description": "Opis etykiety",
"label_name": "Nazwa etykiety",
"title": "Stwórz nową etykietę",
"toast": {
"already_creating": "",
"create_failed": "",
"create_success": "",
"label_name_too_long": ""
}
"title": "Stwórz nową etykietę"
},
"selector": {
"select_labels": "Wybierz Etykiety"
@@ -154,12 +98,7 @@
"create_modal": {
"location_description": "Opis lokalizacji",
"location_name": "Nazwa lokalizacji",
"title": "Utwórz lokalizację",
"toast": {
"already_creating": "",
"create_failed": "",
"create_success": ""
}
"title": "Utwórz lokalizację"
},
"selector": {
"no_location_found": "Nie znaleziono żadnej lokalizacji",
@@ -184,11 +123,8 @@
"confirm": "Potwierdź",
"create": "Utwórz",
"create_and_add": "Utwórz i dodaj kolejny",
"create_subitem": "",
"created": "Utworzone",
"delete": "Usuń",
"delete_confirm": "",
"demo_instance": "",
"details": "Szczegóły",
"duplicate": "Duplikat",
"edit": "Edytuj",
@@ -203,7 +139,6 @@
"items": "Przedmioty",
"join_discord": "Dołącz do Discorda",
"labels": "Etykiety",
"loading": "",
"locations": "Lokalizacje",
"maintenance": "Konserwacja",
"name": "Nazwa",
@@ -211,14 +146,11 @@
"password": "Hasło",
"quantity": "Ilość",
"read_docs": "Przeczytaj dokumentację",
"return_home": "",
"save": "Zapisz",
"search": "Wyszukaj",
"sign_out": "Wyloguj się",
"submit": "Wyślij",
"unknown": "",
"update": "Aktualizuj",
"updating": "",
"value": "Wartość",
"version": "Wersja:{version}",
"welcome": "Witaj, {username}"
@@ -243,49 +175,27 @@
"set_email": "Jaki jest Twój adres e-mail?",
"set_name": "Jak się nazywasz?",
"set_password": "Ustaw swoje hasło",
"tagline": "Śledź, organizuj i zarządzaj swoimi rzeczami.",
"title": "",
"toast": {
"invalid_email": "",
"invalid_email_password": "",
"login_success": "",
"problem_registering": "",
"user_registered": ""
}
"tagline": "Śledź, organizuj i zarządzaj swoimi rzeczami."
},
"items": {
"add": "Dodaj",
"advanced": "Zaawansowane",
"archived": "Zarchiwizowane",
"asset_id": "Identyfikator zasobu",
"associated_with_multiple": "",
"attachment": "Załącznik",
"attachments": "Załączniki",
"changes_persisted_immediately": "Zmiany w załącznikach zostaną natychmiast zapisane",
"created_at": "Data utworzenia",
"custom_fields": "Pola niestandardowe",
"delete_attachment_confirm": "",
"delete_item_confirm": "",
"description": "Opis",
"details": "Szczegóły",
"drag_and_drop": "Przeciągnij i upuść pliki tutaj lub kliknij, aby wybrać pliki",
"edit": {
"edit_attachment_dialog": {
"attachment_title": "",
"attachment_type": "",
"primary_photo": "",
"primary_photo_sub": "",
"select_type": "",
"title": ""
}
},
"edit_details": "Edytuj szczegóły",
"field_selector": "Selektor pól",
"field_value": "Wartość pola",
"first": "Pierwszy",
"include_archive": "Uwzględnij zarchiwizowane przedmioty",
"insured": "Ubezpieczony",
"invalid_asset_id": "",
"last": "Ostatni",
"lifetime_warranty": "Dożywotnia gwarancja",
"location": "Lokalizacja",
@@ -296,7 +206,6 @@
"name": "Nazwa",
"negate_labels": "Neguj wybrane etykiety",
"next_page": "Następna strona",
"no_attachments": "",
"no_results": "Nie znaleziono przedmiotów",
"notes": "Notatki",
"only_with_photo": "Tylko przedmioty ze zdjęciem",
@@ -318,60 +227,24 @@
"receipts": "Paragony",
"reset_search": "Zresetuj wyszukiwanie",
"results": "{ total } wyników",
"select_field": "",
"serial_number": "Numer seryjny",
"show_advanced_view_options": "Pokaż ustawienia zaawansowane",
"sold_at": "Sprzedane w",
"sold_details": "Szczegóły sprzedaży",
"sold_price": "Cena sprzedaży",
"sold_to": "Sprzedane do",
"sync_child_locations": "",
"tip_1": "Filtry lokalizacji i etykiet używają operacji 'LUB'. Jeśli wybrano więcej niż jeden, wystarczy jeden, \naby uzyskać dopasowanie.",
"tip_2": "Wyszukiwania poprzedzone prefiksem \"#\" będą wysyłać zapytanie o identyfikator zasobu (na przykład \"#000-001\")",
"tip_3": "Filtry pól używają operacji 'LUB'. Jeśli wybrano więcej niż jeden, wystarczy jeden, \naby uzyskać dopasowanie.",
"tips": "Wskazówki",
"tips_sub": "Wskazówki wyszukiwania",
"toast": {
"asset_not_found": "",
"attachment_deleted": "",
"attachment_updated": "",
"attachment_uploaded": "",
"child_items_location_no_longer_synced": "",
"child_items_location_synced": "",
"child_location_desync": "",
"error_loading_parent_data": "",
"failed_adjust_quantity": "",
"failed_delete_attachment": "",
"failed_delete_item": "",
"failed_duplicate_item": "",
"failed_load_asset": "",
"failed_load_item": "",
"failed_load_items": "",
"failed_save": "",
"failed_save_no_location": "",
"failed_search_items": "",
"failed_update_attachment": "",
"failed_upload_attachment": "",
"item_deleted": "",
"item_saved": "",
"quantity_cannot_negative": "",
"sync_child_location": ""
},
"updated_at": "Zaktualizowano",
"warranty": "Gwarancja",
"warranty_details": "Szczegóły gwarancji",
"warranty_expires": "Gwarancja wygasa"
},
"labels": {
"label_delete_confirm": "",
"no_results": "Nie znaleziono etykiet",
"toast": {
"failed_delete_label": "",
"failed_load_label": "",
"failed_update_label": "",
"label_deleted": "",
"label_updated": ""
},
"update_label": "Aktualizuj etykietę"
},
"languages": {
@@ -387,8 +260,6 @@
"it": "włoski",
"ja-JP": "japoński",
"ko-KR": "Koreański",
"lb-LU": "",
"lt-LT": "",
"nb-NO": "Norweski Bokmål",
"nl": "holenderski",
"pl": "polski",
@@ -414,15 +285,7 @@
"child_locations": "Podlokalizacje",
"collapse_tree": "Zwiń drzewo",
"expand_tree": "Rozwiń Drzewo",
"location_items_delete_confirm": "",
"no_results": "Nie znaleziono lokalizacji",
"toast": {
"failed_delete_location": "",
"failed_load_location": "",
"failed_update_location": "",
"location_deleted": "",
"location_updated": ""
},
"update_location": "Zaktualizuj lokalizację"
},
"maintenance": {
@@ -478,10 +341,7 @@
"currency_format": "Format waluty",
"current_password": "Bieżące hasło",
"delete_account": "Usuń konto",
"delete_account_confirm": "",
"delete_account_sub": "Usuń swoje konto oraz wszystkie powiązane z nim dane. Tego nie można cofnąć.",
"delete_notifier_confirm": "",
"display_legacy_header": "",
"enabled": "Włączone",
"example": "Przykład",
"gen_invite": "Wygeneruj link z zaproszeniem",
@@ -491,70 +351,22 @@
"language": "Język",
"new_password": "Nowe hasło",
"no_notifiers": "Nie skonfigurowano powiadomień",
"no_override": "",
"notifier_modal": "{type, select, true {Edytuj} false {Utwórz} other {Inny}} Powiadomiacz",
"notifiers": "Powiadomiacze",
"notifiers_sub": "Otrzymuj powiadomienia o nadchodzących przypomnieniach o konserwacji",
"override_locale": "",
"test": "Test",
"theme_settings": "Ustawienia tematu",
"theme_settings_sub": "Ustawienia motywu są przechowywane w lokalnej pamięci przeglądarki. Możesz zmienić motyw w dowolnym momencie. \nJeśli masz problemy z ustawieniem motywu, spróbuj odświeżyć przeglądarkę.",
"toast": {
"account_deleted": "",
"failed_change_password": "",
"failed_create_notifier": "",
"failed_delete_account": "",
"failed_delete_notifier": "",
"failed_get_currencies": "",
"failed_test_notifier": "",
"failed_update_group": "",
"failed_update_notifier": "",
"group_updated": "",
"notifier_test_success": "",
"password_changed": ""
},
"update_group": "Zaktualizuj grupę",
"update_language": "Aktualizuj język",
"url": "Adres URL",
"user_profile": "Profil użytkownika",
"user_profile_sub": "Zaproś użytkowników i zarządzaj swoim kontem."
},
"reports": {
"label_generator": {
"asset_end": "",
"asset_start": "",
"base_url": "",
"bordered_labels": "",
"generate_page": "",
"input_placeholder": "",
"instruction_1": "",
"instruction_2": "",
"instruction_3": "",
"label_height": "",
"label_width": "",
"measure_type": "",
"page_bottom_padding": "",
"page_height": "",
"page_left_padding": "",
"page_right_padding": "",
"page_top_padding": "",
"page_width": "",
"qr_code_example": "",
"tip_1": "",
"tip_2": "",
"tip_3": "",
"tips": "",
"title": "",
"toast": {
"page_too_small_card": ""
}
}
},
"scanner": {
"error": "Wystąpił błąd podczas skanowania",
"invalid_url": "Nieprawidłowy URL kodu kreskowego",
"no_sources": "Brak dostępnych źródeł wideo",
"permission_denied": "",
"select_video_source": "Wybierz źródło wideo",
"title": "Skaner",
"unsupported": "Media Stream API nie jest obsługiwany bez HTTPS"
@@ -564,18 +376,15 @@
"actions_set": {
"ensure_ids": "Zapewnienie identyfikatorów zasobów",
"ensure_ids_button": "Zapewnij identyfikatory zasobów",
"ensure_ids_confirm": "",
"ensure_ids_sub": "Zapewnia, że wszystkie przedmioty w Twoim inwentarzu mają prawidłowe pole asset_id. W tym celu wyszukiwany jest najwyższy obecny asset_id w bazie danych, a kolejne wartości są przypisywane do przedmiotów, które nie mają ustawionego pola asset_id. Proces odbywa się w kolejności według pola created_at.",
"ensure_import_refs": "Zapewnij odnośniki importu",
"ensure_import_refs_button": "Zapewnij odnośniki importu",
"ensure_import_refs_sub": "Zapewnia, że wszystkie przedmioty w Twoim inwentarzu mają prawidłowe pole import_ref. W tym celu dla każdego przedmiotu, który nie ma ustawionego pola import_ref, losowo generowany jest 8-znakowy ciąg.",
"set_primary_photo": "Ustaw główne zdjęcie",
"set_primary_photo_button": "Ustaw główne zdjęcie",
"set_primary_photo_confirm": "",
"set_primary_photo_sub": "W wersji v0.10.0 Homebox pole głównego obrazu zostało dodane do załączników typu zdjęcie. Ta akcja ustawi pole głównego obrazu do pierwszego zdjęcia w załącznikach z bazy danych, jeżeli nie jest już ustawione. '<a class=\"link\" href=\"https://github.com/hay-kot/homebox/pull/576\">'Zobacz GitHub PR #576'</a>'",
"zero_datetimes": "Wyzeruj daty i godziny przedmiotów",
"zero_datetimes_button": "Wyzeruj daty i godziny przedmiotów",
"zero_datetimes_confirm": "",
"zero_datetimes_sub": "Resetuje wartość czasu dla wszystkich pól daty i godziny w Twoim inwentarzu, ustawiając ją na początek dnia. Jest to rozwiązanie problemu, który pojawił się we wczesnej fazie rozwoju aplikacji, powodując zapisywanie wartości czasu wraz z datą, co skutkowało nieprawidłowym wyświetlaniem wartości w polach daty. '<a class=\"link\" href=\"https://github.com/hay-kot/homebox/issues/236\" target=\"_blank\">Zobacz szczegóły w GitHub Issue #236</a>'"
},
"actions_sub": "Zastosuj akcje zbiorczo do swojego inwentarza. Są to działania nieodwracalne. '<b>'Bądź ostrożny.'</b>",
@@ -586,7 +395,6 @@
"export_sub": "Eksportuje standardowy format CSV dla Homebox. Zostaną wyeksportowane wszystkie przedmioty z Twojego inwentarza.",
"import": "Importuj inwentarz",
"import_button": "Importuj inwentarz",
"import_ref_confirm": "",
"import_sub": "Importuje standardowy format CSV dla Homebox. Jeśli plik nie zawiera kolumny '<code>'HB.import_ref'</code>', istniejące przedmioty w Twoim inwentarzu '<b>'nie'</b>' zostaną nadpisane zostaną dodane jedynie nowe przedmioty. Wiersze z kolumną '<code>'HB.import_ref'</code>' są łączone z istniejącymi przedmiotami, które mają ten sam import_ref, jeśli taki istnieje."
},
"import_export_sub": "Importuj i eksportuj swój inwentarz z i do pliku CSV. Jest to przydatne podczas przenoszenia inwentarza do nowej instancji Homebox.",
@@ -599,13 +407,6 @@
"bill_of_materials_button": "Generuj zestawienie materiałów",
"bill_of_materials_sub": "Generuje plik CSV (Comma Separated Values), który można zaimportować do programu arkusza kalkulacyjnego. Jest to podsumowanie Twojego inwentarza z podstawowymi informacjami o przedmiotach i cenach."
},
"reports_sub": "Generuj różne raporty dla swojego inwentarza.",
"toast": {
"asset_success": "",
"failed_ensure_ids": "",
"failed_ensure_import_refs": "",
"failed_set_primary_photos": "",
"failed_zero_datetimes": ""
}
"reports_sub": "Generuj różne raporty dla swojego inwentarza."
}
}

View File

@@ -1,20 +1,10 @@
{
"components": {
"app": {
"create_modal": {
"createAndAddAnother": "",
"enter": "",
"shift": ""
},
"import_dialog": {
"change_warning": "O comportamento de 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 items, etiquetas e locais. Consulte a documentação para mais informações\nsobre a formatação aceita.",
"title": "Importar arquivo CSV",
"toast": {
"import_failed": "",
"import_success": "",
"please_select_file": ""
}
"title": "Importar arquivo CSV"
},
"outdated": {
"current_version": "Versão Atual",
@@ -24,11 +14,6 @@
"new_version_available_link": "Clique aqui para ver as novidades"
}
},
"form": {
"password": {
"toggle_show": ""
}
},
"global": {
"copy_text": {
"documentation": "documentação",
@@ -66,12 +51,7 @@
"download": "Baixar Rótulo",
"print": "Imprimir etiqueta",
"server_print": "Imprimir no Servidor",
"titles": "Etiquetas",
"toast": {
"load_status_failed": "",
"print_failed": "",
"print_success": ""
}
"titles": "Etiquetas"
},
"page_qr_code": {
"page_url": "URL da página",
@@ -82,41 +62,13 @@
}
},
"item": {
"attachments_list": {
"download": "",
"open_new_tab": ""
},
"create_modal": {
"delete_photo": "",
"item_description": "Descrição do Item",
"item_name": "Nome do Item",
"item_photo": "Foto do Item 📷",
"item_quantity": "Quantidade de Itens",
"parent_item": "",
"rotate_photo": "",
"set_as_primary_photo": "",
"title": "Criar Item",
"toast": {
"already_creating": "",
"create_failed": "",
"create_success": "",
"failed_load_parent": "",
"no_canvas_support": "",
"please_select_location": "",
"rotate_failed": "",
"rotate_process_failed": "",
"some_photos_failed": "",
"upload_failed": "",
"upload_success": "",
"uploading_photos": ""
},
"upload_photos": "Carregar Fotos",
"uploaded": ""
},
"selector": {
"no_results": "",
"placeholder": "",
"search_placeholder": ""
"upload_photos": "Carregar Fotos"
},
"view": {
"selectable": {
@@ -129,8 +81,7 @@
"headers": "Cabeçalhos",
"page": "Página",
"rows_per_page": "Linhas por página",
"table_settings": "Configurações da Tabela",
"view_item": ""
"table_settings": "Configurações da Tabela"
}
}
},
@@ -138,13 +89,7 @@
"create_modal": {
"label_description": "Descrição da Etiqueta",
"label_name": "Nome da Etiqueta",
"title": "Criar etiqueta",
"toast": {
"already_creating": "",
"create_failed": "",
"create_success": "",
"label_name_too_long": ""
}
"title": "Criar etiqueta"
},
"selector": {
"select_labels": "Selecionar Etiquetas"
@@ -154,12 +99,7 @@
"create_modal": {
"location_description": "Descrição do Local",
"location_name": "Nome do Local",
"title": "Criar Local",
"toast": {
"already_creating": "",
"create_failed": "",
"create_success": ""
}
"title": "Criar Local"
},
"selector": {
"no_location_found": "Nenhum local encontrado",
@@ -184,11 +124,8 @@
"confirm": "Confirmar",
"create": "Criar",
"create_and_add": "Criar e Adicionar Outro",
"create_subitem": "",
"created": "Criado",
"delete": "Excluir",
"delete_confirm": "",
"demo_instance": "",
"details": "Detalhes",
"duplicate": "Duplicar",
"edit": "Editar",
@@ -203,7 +140,6 @@
"items": "Items",
"join_discord": "Junte-se ao Discord",
"labels": "Etiquetas",
"loading": "",
"locations": "Locais",
"maintenance": "Manutenção",
"name": "Nome",
@@ -211,14 +147,11 @@
"password": "Senha",
"quantity": "Quantidade",
"read_docs": "Leia a Documentação",
"return_home": "",
"save": "Salvar",
"search": "Buscar",
"sign_out": "Encerrar sessão",
"submit": "Enviar",
"unknown": "",
"update": "Atualizar",
"updating": "",
"value": "Valor",
"version": "Versão: { version }",
"welcome": "Bem-vindo, {username}"
@@ -243,49 +176,27 @@
"set_email": "Qual o seu e-mail?",
"set_name": "Qual é o seu nome?",
"set_password": "Defina a sua Senha",
"tagline": "Rastreie, organize e gerencie suas coisas.",
"title": "",
"toast": {
"invalid_email": "",
"invalid_email_password": "",
"login_success": "",
"problem_registering": "",
"user_registered": ""
}
"tagline": "Rastreie, organize e gerencie suas coisas."
},
"items": {
"add": "Adicionar",
"advanced": "Avançada",
"archived": "Arquivado",
"asset_id": "ID do Ativo",
"associated_with_multiple": "",
"attachment": "Anexo",
"attachments": "Anexos",
"changes_persisted_immediately": "Alterações nos anexos serão salvas imediatamente",
"created_at": "Criado em",
"custom_fields": "Campos Personalizados",
"delete_attachment_confirm": "",
"delete_item_confirm": "",
"description": "Descrição",
"details": "Detalhes",
"drag_and_drop": "Arraste e solte os arquivos aqui ou clique para selecionar os arquivos",
"edit": {
"edit_attachment_dialog": {
"attachment_title": "",
"attachment_type": "",
"primary_photo": "",
"primary_photo_sub": "",
"select_type": "",
"title": ""
}
},
"edit_details": "Detalhes da Edição",
"field_selector": "Seletor de Campo",
"field_value": "Valor do Campo",
"first": "Primeira",
"include_archive": "Incluir itens arquivados",
"insured": "Segurado",
"invalid_asset_id": "",
"last": "Última",
"lifetime_warranty": "Garantia Vitalícia",
"location": "Local",
@@ -296,7 +207,6 @@
"name": "Nome",
"negate_labels": "Negar Rótulos Selecionados",
"next_page": "Próxima página",
"no_attachments": "",
"no_results": "Nenhum Item Encontrado",
"notes": "Anotações",
"only_with_photo": "Somente itens com foto",
@@ -318,60 +228,24 @@
"receipts": "Recibos",
"reset_search": "Reiniciar Pesquisa",
"results": "{ total } Resultados",
"select_field": "",
"serial_number": "Número Serial",
"show_advanced_view_options": "Exibir Opções de Visualização Avançada",
"sold_at": "Vendido Em",
"sold_details": "Detalhes da Venda",
"sold_price": "Preço da Venda",
"sold_to": "Vendido Para",
"sync_child_locations": "",
"tip_1": "Os filtros de local e etiqueta usam o operador \"OR\". Se você selecionar mais de um, somente um será\nnecessário para obter um resultado.",
"tip_2": "As pesquisas comprefixo '#'' buscam um ID de ativo (exemplo '#000-001')",
"tip_3": "Os filtros de local e etiqueta usam o operador \"OR\". Se você selecionar mais de um, somente um será\nnecessário para obter um resultado.",
"tips": "Dicas",
"tips_sub": "Dicas de pesquisa",
"toast": {
"asset_not_found": "",
"attachment_deleted": "",
"attachment_updated": "",
"attachment_uploaded": "",
"child_items_location_no_longer_synced": "",
"child_items_location_synced": "",
"child_location_desync": "",
"error_loading_parent_data": "",
"failed_adjust_quantity": "",
"failed_delete_attachment": "",
"failed_delete_item": "",
"failed_duplicate_item": "",
"failed_load_asset": "",
"failed_load_item": "",
"failed_load_items": "",
"failed_save": "",
"failed_save_no_location": "",
"failed_search_items": "",
"failed_update_attachment": "",
"failed_upload_attachment": "",
"item_deleted": "",
"item_saved": "",
"quantity_cannot_negative": "",
"sync_child_location": ""
},
"updated_at": "Atualizado em",
"warranty": "Garantia",
"warranty_details": "Detalhes da Garantia",
"warranty_expires": "Garantia Expira Em"
},
"labels": {
"label_delete_confirm": "",
"no_results": "Nenhuma etiqueta encontrada",
"toast": {
"failed_delete_label": "",
"failed_load_label": "",
"failed_update_label": "",
"label_deleted": "",
"label_updated": ""
},
"update_label": "Atualizar Etiqueta"
},
"languages": {
@@ -387,8 +261,6 @@
"it": "Italiano",
"ja-JP": "Japonês",
"ko-KR": "Coreano",
"lb-LU": "",
"lt-LT": "",
"nb-NO": "Danonorueguês",
"nl": "Holandês",
"pl": "Polonês",
@@ -414,15 +286,7 @@
"child_locations": "Locais Filhos",
"collapse_tree": "Ocultar Árvore",
"expand_tree": "Expandir Árvore",
"location_items_delete_confirm": "",
"no_results": "Nenhum local encontrado",
"toast": {
"failed_delete_location": "",
"failed_load_location": "",
"failed_update_location": "",
"location_deleted": "",
"location_updated": ""
},
"update_location": "Atualizar Local"
},
"maintenance": {
@@ -478,10 +342,7 @@
"currency_format": "Formato da moeda",
"current_password": "Senha Atual",
"delete_account": "Excluir conta",
"delete_account_confirm": "",
"delete_account_sub": "Excluir sua conta e todos os dados associados. Essa ação não pode ser desfeita.",
"delete_notifier_confirm": "",
"display_legacy_header": "",
"enabled": "Ativado",
"example": "Exemplo",
"gen_invite": "Gerar link de convite",
@@ -499,62 +360,16 @@
"test": "Teste",
"theme_settings": "Configurações do Tema",
"theme_settings_sub": "As configurações de tema são salvas localmente em seu navegador. Você pode mudar o tema a qualquer momento. Se está\ntendo problemas com a mudança de tema, tente recarregar a pagina.",
"toast": {
"account_deleted": "",
"failed_change_password": "",
"failed_create_notifier": "",
"failed_delete_account": "",
"failed_delete_notifier": "",
"failed_get_currencies": "",
"failed_test_notifier": "",
"failed_update_group": "",
"failed_update_notifier": "",
"group_updated": "",
"notifier_test_success": "",
"password_changed": ""
},
"update_group": "Atualizar grupo",
"update_language": "Atualizar idioma",
"url": "URL",
"user_profile": "Perfil do usuário",
"user_profile_sub": "Convide usuários e gerencie sua conta."
},
"reports": {
"label_generator": {
"asset_end": "",
"asset_start": "",
"base_url": "",
"bordered_labels": "",
"generate_page": "",
"input_placeholder": "",
"instruction_1": "",
"instruction_2": "",
"instruction_3": "",
"label_height": "",
"label_width": "",
"measure_type": "",
"page_bottom_padding": "",
"page_height": "",
"page_left_padding": "",
"page_right_padding": "",
"page_top_padding": "",
"page_width": "",
"qr_code_example": "",
"tip_1": "",
"tip_2": "",
"tip_3": "",
"tips": "",
"title": "",
"toast": {
"page_too_small_card": ""
}
}
},
"scanner": {
"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",
"permission_denied": "",
"select_video_source": "Escolha uma fonte de vídeo",
"title": "Scanner",
"unsupported": "A API do Fluxo de Mídia não é suportada sem o protocolo HTTPS"
@@ -564,18 +379,15 @@
"actions_set": {
"ensure_ids": "Garantir IDs de ativos",
"ensure_ids_button": "Garantir IDs de ativos",
"ensure_ids_confirm": "",
"ensure_ids_sub": "Garante que todos os itens em seu inventário tenham um campo de asset_id válido. Isso é feito através da procura do mais alto asset_id no banco de dados e aplicando o próximo valor aos itens seguintes que não tenham valores de asset_id definidos. Isso é feito com base no campo created_at.",
"ensure_import_refs": "Garantir refs de importação",
"ensure_import_refs_button": "Garantir refs de importação",
"ensure_import_refs_sub": "Garante que todos os itens no seu inventário tenham um campo import_ref válido. Isso é feito gerando aleatoriamente uma sequência de 8 caracteres para cada item que não possuir um campo import_ref válido.",
"set_primary_photo": "Definir foto principal",
"set_primary_photo_button": "Definir foto principal",
"set_primary_photo_confirm": "",
"set_primary_photo_sub": "Na versão v0.10.0 do Homebox, o campo principal de foto foi adicionado aos anexos do tipo foto. Essa ação irá marcar o campo da imagem principal para a primeira imagem no array de anexos do banco de dados, se não estiver feito ainda.'<a class=\"link\" href=\"https://github.com/hay-kot/homebox/pull/576\">'Veja no GitHub PR #576'</a>'",
"zero_datetimes": "Zerar Data Hora do Item",
"zero_datetimes_button": "Zerar Data Hora do Item",
"zero_datetimes_confirm": "",
"zero_datetimes_sub": "Redefine o valor de hora de todos os itens do inventário para o início da data. Isso é para corrigir um bug que foi introduzido no início do desenvolvimento do site que causava o valor da hora ser armazenado errado, resultando em um erro na mostra da data/hora do item. '<a class=\"link\" href=\"https://github.com/hay-kot/homebox/issues/236\" target=\"_blank\">'Veja o item #236 do Github para mais detalhes.'</a>'"
},
"actions_sub": "Aplicar ações ao seu inventário em massa. Essas ações são irreversíveis. '<b>'Tenha cuidado'</b>'",
@@ -586,7 +398,6 @@
"export_sub": "Exporta o formato CSV padrão para o Homebox. Isso irá exportar todos os itens do seu inventário.",
"import": "Importar inventário",
"import_button": "Importar inventário",
"import_ref_confirm": "",
"import_sub": "Importa o formato CSV padrão para o Homebox. Sem uma coluna '<code>'HB.import_ref'</code>' , isso '<b>não</b>' vai sobrescrever nenhum item de seu inventário, apenas adicionar novos items. Linhas que tenham '<code>'HB.import_ref'</code>' colunas são mescladas em itens existentes com o mesmo import_ref, se existir."
},
"import_export_sub": "Importar e exportar seu inventário de ou para um arquivo CSV. Isso é útil para migrar o seu inventário para uma nova instância do Homebox.",
@@ -599,13 +410,6 @@
"bill_of_materials_button": "Gerar Lista de Materiais",
"bill_of_materials_sub": "Gera um arquivo CSV (Valores Separados por Vírgula) que pode ser importado para um programa de planilha. Esse é um sumário do seu inventário com informações básicas dos itens e dos preços."
},
"reports_sub": "Gere relatórios diferentes para o seu inventário.",
"toast": {
"asset_success": "",
"failed_ensure_ids": "",
"failed_ensure_import_refs": "",
"failed_set_primary_photos": "",
"failed_zero_datetimes": ""
}
"reports_sub": "Gere relatórios diferentes para o seu inventário."
}
}

View File

@@ -129,8 +129,7 @@
"headers": "Cabeçalhos",
"page": "Página",
"rows_per_page": "Linhas por página",
"table_settings": "Definições da Tabela",
"view_item": ""
"table_settings": "Definições da Tabela"
}
}
},

View File

@@ -1,20 +1,10 @@
{
"components": {
"app": {
"create_modal": {
"createAndAddAnother": "",
"enter": "",
"shift": ""
},
"import_dialog": {
"change_warning": "Comportamentul pentru importuri cu import_refs existente s-a schimbat. Dacă un import_ref este prezent în fișierul CSV,\nobiectul v-a fi actualizat cu valorile din fișierul CSV.",
"description": "Importă un fișier CSV care conține toate obiectele, etichetele și locațiile tale. \nCitește documentația pentru mai multe informații privind format-ul necesar.",
"title": "Importă fișier CSV",
"toast": {
"import_failed": "",
"import_success": "",
"please_select_file": ""
}
"title": "Importă fișier CSV"
},
"outdated": {
"current_version": "Versiune Curentă",
@@ -24,11 +14,6 @@
"new_version_available_link": "Dă click aici pentru a vedea notele de lansare"
}
},
"form": {
"password": {
"toggle_show": ""
}
},
"global": {
"copy_text": {
"documentation": "documentație",
@@ -60,63 +45,18 @@
"years": "ani",
"yesterday": "ieri"
},
"label_maker": {
"browser_print": "",
"confirm_description": "",
"download": "",
"print": "",
"server_print": "",
"titles": "",
"toast": {
"load_status_failed": "",
"print_failed": "",
"print_success": ""
}
},
"page_qr_code": {
"page_url": "URL Pagină",
"qr_tooltip": ""
"page_url": "URL Pagină"
},
"password_score": {
"password_strength": "Complexitate Parolă"
}
},
"item": {
"attachments_list": {
"download": "",
"open_new_tab": ""
},
"create_modal": {
"delete_photo": "",
"item_description": "Descriere articol",
"item_name": "Denumire articol",
"item_photo": "",
"item_quantity": "",
"parent_item": "",
"rotate_photo": "",
"set_as_primary_photo": "",
"title": "Crează articol",
"toast": {
"already_creating": "",
"create_failed": "",
"create_success": "",
"failed_load_parent": "",
"no_canvas_support": "",
"please_select_location": "",
"rotate_failed": "",
"rotate_process_failed": "",
"some_photos_failed": "",
"upload_failed": "",
"upload_success": "",
"uploading_photos": ""
},
"upload_photos": "",
"uploaded": ""
},
"selector": {
"no_results": "",
"placeholder": "",
"search_placeholder": ""
"title": "Crează articol"
},
"view": {
"selectable": {
@@ -126,11 +66,8 @@
"table": "Tabel"
},
"table": {
"headers": "",
"page": "Pagină",
"rows_per_page": "Rânduri pe pagină",
"table_settings": "",
"view_item": ""
"rows_per_page": "Rânduri pe pagină"
}
}
},
@@ -138,87 +75,50 @@
"create_modal": {
"label_description": "Descrierea etichetei",
"label_name": "Nume eticheta",
"title": "Crează Etichetă",
"toast": {
"already_creating": "",
"create_failed": "",
"create_success": "",
"label_name_too_long": ""
}
},
"selector": {
"select_labels": ""
"title": "Crează Etichetă"
}
},
"location": {
"create_modal": {
"location_description": "Descriere locatie",
"location_name": "Nume locație",
"title": "Crează Locație",
"toast": {
"already_creating": "",
"create_failed": "",
"create_success": ""
}
"title": "Crează Locație"
},
"selector": {
"no_location_found": "",
"parent_location": "Locație Părinte",
"search_location": "",
"select_location": ""
"parent_location": "Locație Părinte"
},
"tree": {
"no_locations": "Nu există locații disponibile. Adaugă o locație nouă folosind butonul\n`<`span class=\"link-primary\"`>`Crează`<`/span`>` din bara de navigație."
}
},
"quick_menu": {
"no_results": "",
"shortcut_hint": ""
}
},
"global": {
"add": "Adaugă",
"archived": "",
"build": "Build: { build }",
"cancel": "",
"confirm": "Confirmă",
"create": "Crează",
"create_and_add": "Crează și Adaugă încă un articol",
"create_subitem": "",
"created": "Creat",
"delete": "Șterge",
"delete_confirm": "",
"demo_instance": "",
"details": "Detalii",
"duplicate": "Duplicat",
"edit": "Redactare",
"email": "Adresă de email",
"follow_dev": "Urmărește developer-ul",
"footer": {
"api_link": "",
"version_link": ""
},
"github": "Proiect GitHub",
"insured": "",
"items": "Articole",
"join_discord": "Vino pe Discord",
"labels": "Etichete",
"loading": "",
"locations": "Locații",
"maintenance": "Mentenanță",
"name": "Nume",
"navigate": "",
"password": "Parolă",
"quantity": "",
"read_docs": "Citește documentația",
"return_home": "",
"save": "Salvare",
"search": "Caută",
"sign_out": "Ieșire",
"submit": "Trimite",
"unknown": "",
"update": "Actualizare",
"updating": "",
"value": "Valoare",
"version": "Versiune: { version }",
"welcome": "Bun venit, { username }"
@@ -243,49 +143,27 @@
"set_email": "Care este adresa ta de email?",
"set_name": "Care este numele tău?",
"set_password": "Setează-ți parola",
"tagline": "Urmărește, Organizează și Gestionează lucrurile tale.",
"title": "",
"toast": {
"invalid_email": "",
"invalid_email_password": "",
"login_success": "",
"problem_registering": "",
"user_registered": ""
}
"tagline": "Urmărește, Organizează și Gestionează lucrurile tale."
},
"items": {
"add": "Adaugă",
"advanced": "Avansat",
"archived": "Arhivate",
"asset_id": "ID activ",
"associated_with_multiple": "",
"attachment": "Atașament",
"attachments": "Fișiere atașate",
"changes_persisted_immediately": "Modificările atașamentelor vor fi salvate imediat",
"created_at": "Creat la",
"custom_fields": "Câmpuri personalizate",
"delete_attachment_confirm": "",
"delete_item_confirm": "",
"description": "Descriere",
"details": "Detalii",
"drag_and_drop": "Trageți și plasați fișierele aici sau faceți clic pentru a selecta fișierele",
"edit": {
"edit_attachment_dialog": {
"attachment_title": "",
"attachment_type": "",
"primary_photo": "",
"primary_photo_sub": "",
"select_type": "",
"title": ""
}
},
"edit_details": "Editare detalii",
"field_selector": "Selector Câmp",
"field_value": "Valoare Câmp",
"first": "Primul",
"include_archive": "Include Articole Arhivate",
"insured": "Asigurat",
"invalid_asset_id": "",
"last": "Ultimul",
"lifetime_warranty": "Garanție pe viață",
"location": "Locație",
@@ -296,11 +174,8 @@
"name": "Nume",
"negate_labels": "Neagă Etichetele Selectate",
"next_page": "Următoarea Pagină",
"no_attachments": "",
"no_results": "Nu s-au găsit articole",
"notes": "Notițe",
"only_with_photo": "",
"only_without_photo": "",
"options": "Opțiuni",
"order_by": "Ordonează După",
"pages": "Pagina { page } din { totalPages }",
@@ -318,88 +193,42 @@
"receipts": "Chitanțe",
"reset_search": "Resetează Căutare",
"results": "{ total } Rezultate",
"select_field": "",
"serial_number": "Număr de serie",
"show_advanced_view_options": "Afișează opțiuni avansate",
"sold_at": "Vândut la",
"sold_details": "Detalii vânzare",
"sold_price": "Preț vânzare",
"sold_to": "Vândut către",
"sync_child_locations": "",
"tip_1": "Filtrele de locație și de etichete folosesc operațiunea \"SAU\". Dacă sunt selectate mai multe,\ndoar unul va fi necesar pentru potrivire.",
"tip_2": "Căutările prefixate cu '#' vor efectua o căutare după ID de activ (exemplu '#000-001')",
"tip_3": "Filtrele de câmp folosesc operația \"OR\". Dacă sunt selectate mai multe, doar unul va fi necesar\npentru potrivire.",
"tips": "Sfaturi",
"tips_sub": "Sfaturi Căutare",
"toast": {
"asset_not_found": "",
"attachment_deleted": "",
"attachment_updated": "",
"attachment_uploaded": "",
"child_items_location_no_longer_synced": "",
"child_items_location_synced": "",
"child_location_desync": "",
"error_loading_parent_data": "",
"failed_adjust_quantity": "",
"failed_delete_attachment": "",
"failed_delete_item": "",
"failed_duplicate_item": "",
"failed_load_asset": "",
"failed_load_item": "",
"failed_load_items": "",
"failed_save": "",
"failed_save_no_location": "",
"failed_search_items": "",
"failed_update_attachment": "",
"failed_upload_attachment": "",
"item_deleted": "",
"item_saved": "",
"quantity_cannot_negative": "",
"sync_child_location": ""
},
"updated_at": "Actualizat La",
"warranty": "Garanție",
"warranty_details": "Detalii Garanție",
"warranty_expires": "Garanția expiră"
},
"labels": {
"label_delete_confirm": "",
"no_results": "Nu s-au găsit Etichete",
"toast": {
"failed_delete_label": "",
"failed_load_label": "",
"failed_update_label": "",
"label_deleted": "",
"label_updated": ""
},
"update_label": "Actualizare etichetă"
},
"languages": {
"ca": "Catalană",
"cs-CZ": "",
"de": "Germană",
"en": "Engleză",
"es": "Spaniolă",
"fi-FI": "",
"fr": "Franceză",
"hu": "Maghiară",
"id-ID": "",
"it": "Italiană",
"ja-JP": "Japoneză",
"ko-KR": "",
"lb-LU": "",
"lt-LT": "",
"nb-NO": "",
"nl": "Olandeză",
"pl": "Poloneză",
"pt-BR": "Portugheză (Brazilia)",
"pt-PT": "Portugheză (Portugalia)",
"ru": "Rusă",
"sl": "Slovenă",
"sq-AL": "",
"sv": "Suedeză",
"ta-IN": "",
"th-TH": "",
"tr": "Turcă",
"uk-UA": "Ucraininană",
"zh-CN": "Chineză (Simplificată)",
@@ -413,16 +242,7 @@
"locations": {
"child_locations": "Locații copii",
"collapse_tree": "Contrage arbore",
"expand_tree": "",
"location_items_delete_confirm": "",
"no_results": "Nu s-au găsit Locații",
"toast": {
"failed_delete_location": "",
"failed_load_location": "",
"failed_update_location": "",
"location_deleted": "",
"location_updated": ""
},
"update_location": "Actualizare locație"
},
"maintenance": {
@@ -468,7 +288,6 @@
"locations": "Locații",
"maintenance": "Mentenanță",
"profile": "Profil",
"scanner": "",
"search": "Caută",
"tools": "Unelte"
},
@@ -478,10 +297,7 @@
"currency_format": "Format monedă",
"current_password": "Parola Actuală",
"delete_account": "Șterge Cont",
"delete_account_confirm": "",
"delete_account_sub": "Ștergeți contul și toate datele asociate acestuia. Această acțiune nu poate fi revocată.",
"delete_notifier_confirm": "",
"display_legacy_header": "",
"enabled": "Activat",
"example": "Exemplu",
"gen_invite": "Generează Link Invitație",
@@ -491,91 +307,32 @@
"language": "Limbă",
"new_password": "Parolă Nouă",
"no_notifiers": "Niciun notificator configurat",
"no_override": "",
"notifier_modal": "{ type, select, true {Edit} false {Create} other {Other}} Notifier",
"notifiers": "Notificatori",
"notifiers_sub": "Primiți notificări pentru mementourile de întreținere viitoare",
"override_locale": "",
"test": "Test",
"theme_settings": "Setări Temă",
"theme_settings_sub": "Setările temei sunt stocate în spațiul de stocare local al browserului. Poți schimba tema oricând. Dacă ai \ndificultăți la setarea temei, poți încerca să reîmprospătezi browser-ul.",
"toast": {
"account_deleted": "",
"failed_change_password": "",
"failed_create_notifier": "",
"failed_delete_account": "",
"failed_delete_notifier": "",
"failed_get_currencies": "",
"failed_test_notifier": "",
"failed_update_group": "",
"failed_update_notifier": "",
"group_updated": "",
"notifier_test_success": "",
"password_changed": ""
},
"update_group": "Actualizare Grup",
"update_language": "Actualizare Limbă",
"url": "URL",
"user_profile": "Profil Utilizator",
"user_profile_sub": "Invitați utilizatori și gestionați-vă contul."
},
"reports": {
"label_generator": {
"asset_end": "",
"asset_start": "",
"base_url": "",
"bordered_labels": "",
"generate_page": "",
"input_placeholder": "",
"instruction_1": "",
"instruction_2": "",
"instruction_3": "",
"label_height": "",
"label_width": "",
"measure_type": "",
"page_bottom_padding": "",
"page_height": "",
"page_left_padding": "",
"page_right_padding": "",
"page_top_padding": "",
"page_width": "",
"qr_code_example": "",
"tip_1": "",
"tip_2": "",
"tip_3": "",
"tips": "",
"title": "",
"toast": {
"page_too_small_card": ""
}
}
},
"scanner": {
"error": "",
"invalid_url": "",
"no_sources": "",
"permission_denied": "",
"select_video_source": "",
"title": "",
"unsupported": ""
},
"tools": {
"actions": "Acțiuni Inventar",
"actions_set": {
"ensure_ids": "Garantează ID-urile activelor",
"ensure_ids_button": "Garantează ID-urile activelor",
"ensure_ids_confirm": "",
"ensure_ids_sub": "Garantează că toate articolele din inventar au un câmp asset_id valid. Acest lucru se face găsind câmpul cu cel mai mare asset_id curent și aplicând următoarea valoare fiecărui articol care nu are câmpul assed_id completat. Acest lucru se face în ordinea dată de câmpul created_at.",
"ensure_import_refs": "Garantează Import Refs",
"ensure_import_refs_button": "Garantează Import Refs",
"ensure_import_refs_sub": "Garantează că toate articolele din inventar au un câmp import_ref valid. Acest lucru se face prin generarea unui șir de 8 caractere aleatoare pentru fiecare articol ce nu are câmp import_ref.",
"set_primary_photo": "Setează ca Imagine Principală",
"set_primary_photo_button": "Setează ca Imagine Principală",
"set_primary_photo_confirm": "",
"set_primary_photo_sub": "În versiunea v0.10.0 a Homebox, câmpul de imagine primară a fost adăugat la atașamentele de tip fotografie. Această acțiune va seta câmpul de imagine primară la prima imagine din matricea de atașamente din baza de date, dacă acest lucru nu este facut deja. '<a class=\"link\" href=\"https://github.com/hay-kot/homebox/pull/576\">'Vezi GitHub PR #576'</a>'",
"zero_datetimes": "Zero articol Data Ore",
"zero_datetimes_button": "Zero articol Data Ore",
"zero_datetimes_confirm": "",
"zero_datetimes_sub": "Resetează valoarea de timp pentru toate câmpurile de dată și oră din inventar la începutul datei. Acesta este un fix pentru un bug care a fost introdus la începutul dezvoltării și care a cauzat valoarea timpului să fie stocată cu timpul ceea ce a provocat probleme cu afișarea corectă a câmpurilor de dată. '<a class=\"link\" href=\"https://github.com/hay-kot/homebox/issues/236\" target=\"_blank\">'Vezi Github Issue #236 pentru mai multe detalii.'</a>'"
},
"actions_sub": "Aplicați acțiuni în inventar în bloc. Aceste acțiuni sunt ireversibile. '<b>'Procedați cu atenție.'</b>'",
@@ -586,7 +343,6 @@
"export_sub": "Exportă formatul CSV standard pentru Homebox. Această acțiune ca exporta toate articolele din inventar.",
"import": "Importă Inventar",
"import_button": "Importă Inventar",
"import_ref_confirm": "",
"import_sub": "Importă formatul standard CSV pentru Homebox. Fără un '<code> ' HB.import_ref' </code> 'coloană, aceasta va'<b>'nu' < / b> ' suprascrie orice elemente existente în inventarul dvs., adăugați doar elemente noi. Rânduri cu' < code> ' HB.import_ref' < / code> ' coloana sunt îmbinate în elementele existente cu același import_ref, dacă există unul."
},
"import_export_sub": "Importați și exportați inventarul într-un fișier CSV. Acest lucru este util atunci când se migrează inventarul către o instanță nouă de Homebox.",
@@ -599,13 +355,6 @@
"bill_of_materials_button": "Generează BOM",
"bill_of_materials_sub": "Generează un fișier CSV (Valori separate prin virgulă) care poate fi importat într-un program de foi de calcul. Acesta este un sumar ar inventarului cu informații minimale legate de articole și prețuri."
},
"reports_sub": "Generați rapoarte diferite pentru inventarul tău.",
"toast": {
"asset_success": "",
"failed_ensure_ids": "",
"failed_ensure_import_refs": "",
"failed_set_primary_photos": "",
"failed_zero_datetimes": ""
}
"reports_sub": "Generați rapoarte diferite pentru inventarul tău."
}
}

View File

@@ -1,20 +1,10 @@
{
"components": {
"app": {
"create_modal": {
"createAndAddAnother": "",
"enter": "",
"shift": ""
},
"import_dialog": {
"change_warning": "Изменено поведение для импортов с существующими import_ref. Если в CSV-файле присутствует import_ref, \nто элемент будет обновлен значениями из CSV-файла.",
"description": "Импортируйте CSV-файл, содержащий ваши предметы, ярлыки и местоположения. Для получения информации о требуемом формате \nсм. документацию.",
"title": "Импорт CSV файла",
"toast": {
"import_failed": "",
"import_success": "",
"please_select_file": ""
}
"title": "Импорт CSV файла"
},
"outdated": {
"current_version": "Текущая версия",
@@ -24,11 +14,6 @@
"new_version_available_link": "Показать комментарии к версии"
}
},
"form": {
"password": {
"toggle_show": ""
}
},
"global": {
"copy_text": {
"documentation": "документация",
@@ -60,63 +45,18 @@
"years": "лет",
"yesterday": "вчера"
},
"label_maker": {
"browser_print": "",
"confirm_description": "",
"download": "",
"print": "",
"server_print": "",
"titles": "",
"toast": {
"load_status_failed": "",
"print_failed": "",
"print_success": ""
}
},
"page_qr_code": {
"page_url": "URL-адрес страницы",
"qr_tooltip": ""
"page_url": "URL-адрес страницы"
},
"password_score": {
"password_strength": "Сложность пароля"
}
},
"item": {
"attachments_list": {
"download": "",
"open_new_tab": ""
},
"create_modal": {
"delete_photo": "",
"item_description": "Описание элемента",
"item_name": "Имя элемента",
"item_photo": "",
"item_quantity": "",
"parent_item": "",
"rotate_photo": "",
"set_as_primary_photo": "",
"title": "Создать элемент",
"toast": {
"already_creating": "",
"create_failed": "",
"create_success": "",
"failed_load_parent": "",
"no_canvas_support": "",
"please_select_location": "",
"rotate_failed": "",
"rotate_process_failed": "",
"some_photos_failed": "",
"upload_failed": "",
"upload_success": "",
"uploading_photos": ""
},
"upload_photos": "",
"uploaded": ""
},
"selector": {
"no_results": "",
"placeholder": "",
"search_placeholder": ""
"title": "Создать элемент"
},
"view": {
"selectable": {
@@ -126,11 +66,8 @@
"table": "Таблица"
},
"table": {
"headers": "",
"page": "Страница",
"rows_per_page": "Строк на странице",
"table_settings": "",
"view_item": ""
"rows_per_page": "Строк на странице"
}
}
},
@@ -138,87 +75,53 @@
"create_modal": {
"label_description": "Описание метки",
"label_name": "Название метки",
"title": "Создать метку",
"toast": {
"already_creating": "",
"create_failed": "",
"create_success": "",
"label_name_too_long": ""
}
},
"selector": {
"select_labels": ""
"title": "Создать метку"
}
},
"location": {
"create_modal": {
"location_description": "Описание места хранения",
"location_name": "Название места хранения",
"title": "Создать локацию",
"toast": {
"already_creating": "",
"create_failed": "",
"create_success": ""
}
"title": "Создать локацию"
},
"selector": {
"no_location_found": "",
"parent_location": "Родительская локация",
"search_location": "",
"select_location": ""
"parent_location": "Родительская локация"
},
"tree": {
"no_locations": "Нет доступных локаций. Добавьте новую локацию, \nнажав на кнопку `<`span class=\"link-primary\"`>`Создать`<`/span`>` в навигационном меню."
}
},
"quick_menu": {
"no_results": "",
"shortcut_hint": "Используйте цифровые клавиши, чтобы быстро выбрать действие."
}
},
"global": {
"add": "Добавить",
"archived": "",
"build": "Сборка: { build }",
"cancel": "",
"confirm": "Подтвердить",
"create": "Создать",
"create_and_add": "Создать и добавить еще",
"create_subitem": "",
"created": "Создано",
"delete": "Удалить",
"delete_confirm": "",
"demo_instance": "",
"details": "Подробнее",
"duplicate": "Дублировать",
"edit": "Редактировать",
"email": "Email",
"follow_dev": "Следить за разработчиком",
"footer": {
"api_link": "",
"version_link": ""
},
"github": "Github проект",
"insured": "",
"items": "Элементы",
"join_discord": "Присоединяйтесь к Discord",
"labels": "Метки",
"loading": "",
"locations": "Места",
"maintenance": "Техническое обслуживание и ремонт",
"name": "Имя",
"navigate": "",
"password": "Пароль",
"quantity": "",
"read_docs": "Прочитать документацию",
"return_home": "",
"save": "Сохранить",
"search": "Поиск",
"sign_out": "Выйти",
"submit": "Отправить",
"unknown": "",
"update": "Обновить",
"updating": "",
"value": "Значение",
"version": "Версия: { version }",
"welcome": "Добро пожаловать, { username }"
@@ -243,49 +146,27 @@
"set_email": "Какой у вас адрес электронной почты?",
"set_name": "Как вас зовут?",
"set_password": "Установите пароль",
"tagline": "Отслеживайте, упорядочивайте и управляйте своими вещами.",
"title": "",
"toast": {
"invalid_email": "",
"invalid_email_password": "",
"login_success": "",
"problem_registering": "",
"user_registered": ""
}
"tagline": "Отслеживайте, упорядочивайте и управляйте своими вещами."
},
"items": {
"add": "Добавить",
"advanced": "Дополнительно",
"archived": "В архиве",
"asset_id": "Инвентарный ID",
"associated_with_multiple": "",
"attachment": "Вложение",
"attachments": "Вложения",
"changes_persisted_immediately": "Изменения во вложениях будут сохранены сразу же",
"created_at": "Создано в",
"custom_fields": "Настраиваемые поля",
"delete_attachment_confirm": "",
"delete_item_confirm": "",
"description": "Описание",
"details": "Подробнее",
"drag_and_drop": "Перетащите файлы сюда или нажмите, чтобы выбрать файлы",
"edit": {
"edit_attachment_dialog": {
"attachment_title": "",
"attachment_type": "",
"primary_photo": "",
"primary_photo_sub": "",
"select_type": "",
"title": ""
}
},
"edit_details": "Редактирование деталей",
"field_selector": "Поле выбора",
"field_value": "Значение поля",
"first": "Первый",
"include_archive": "Включая архивированные элементы",
"insured": "Застраховано",
"invalid_asset_id": "",
"last": "Последний",
"lifetime_warranty": "Гарантия на весь срок эксплуатации",
"location": "Местоположение",
@@ -296,7 +177,6 @@
"name": "Название",
"negate_labels": "Снять выбранные ярлыки",
"next_page": "Следующая страница",
"no_attachments": "",
"no_results": "Элементы не найдены",
"notes": "Заметки",
"only_with_photo": "Только элементы с фото",
@@ -318,78 +198,35 @@
"receipts": "Квитанции",
"reset_search": "Сбросить поиск",
"results": "{ total } Результатов",
"select_field": "",
"serial_number": "Серийный номер",
"show_advanced_view_options": "Показать дополнительные параметры",
"sold_at": "Место продажи",
"sold_details": "Детали продажи",
"sold_price": "Цена продажи",
"sold_to": "Покупатель",
"sync_child_locations": "",
"tip_1": "При фильтрации по локации и по ярлыкам используется логический оператор «ИЛИ». Если выбрано несколько фильтров, то для срабатывания\n требуется лишь одно совпадение.",
"tip_2": "Поисковые запросы с префиксом \"#\" должны включать в себя ID актива (прим. '#000-001')",
"tip_3": "Фильтры по полю используют операцию «ИЛИ». Если выбрано несколько фильтров, для совпадения\n требуется только один.",
"tips": "Подсказки",
"tips_sub": "Поисковые подсказки",
"toast": {
"asset_not_found": "",
"attachment_deleted": "",
"attachment_updated": "",
"attachment_uploaded": "",
"child_items_location_no_longer_synced": "",
"child_items_location_synced": "",
"child_location_desync": "",
"error_loading_parent_data": "",
"failed_adjust_quantity": "",
"failed_delete_attachment": "",
"failed_delete_item": "",
"failed_duplicate_item": "",
"failed_load_asset": "",
"failed_load_item": "",
"failed_load_items": "",
"failed_save": "",
"failed_save_no_location": "",
"failed_search_items": "",
"failed_update_attachment": "",
"failed_upload_attachment": "",
"item_deleted": "",
"item_saved": "",
"quantity_cannot_negative": "",
"sync_child_location": ""
},
"updated_at": "Обновлено в",
"warranty": "Гарантия",
"warranty_details": "Гарантийная информация",
"warranty_expires": "Срок гарантии истекает"
},
"labels": {
"label_delete_confirm": "",
"no_results": "Метки не найдены",
"toast": {
"failed_delete_label": "",
"failed_load_label": "",
"failed_update_label": "",
"label_deleted": "",
"label_updated": ""
},
"update_label": "Обновить метку"
},
"languages": {
"ca": "Каталанский",
"cs-CZ": "",
"de": "Немецкий",
"en": "Английский",
"es": "Испанский",
"fi-FI": "",
"fr": "французский",
"hu": "Венгерский",
"id-ID": "",
"it": "Итальянский",
"ja-JP": "Японский",
"ko-KR": "",
"lb-LU": "",
"lt-LT": "",
"nb-NO": "",
"nl": "Голландский",
"pl": "Польский",
"pt-BR": "Португальский (Бразилия)",
@@ -397,8 +234,6 @@
"ru": "Русский",
"sl": "Словенский",
"sv": "Шведский",
"ta-IN": "",
"th-TH": "",
"tr": "Турецкий",
"uk-UA": "Украинский",
"zh-CN": "Китайский (упрощенный)",
@@ -413,16 +248,7 @@
"locations": {
"child_locations": "Вложенные локации",
"collapse_tree": "Свернуть всё дерево",
"expand_tree": "",
"location_items_delete_confirm": "",
"no_results": "Локаций не найдено",
"toast": {
"failed_delete_location": "",
"failed_load_location": "",
"failed_update_location": "",
"location_deleted": "",
"location_updated": ""
},
"update_location": "Обновить локацию"
},
"maintenance": {
@@ -468,7 +294,6 @@
"locations": "Локации",
"maintenance": "Техническое обслуживание и ремонт",
"profile": "Профиль",
"scanner": "",
"search": "Поиск",
"tools": "Инструменты"
},
@@ -478,10 +303,7 @@
"currency_format": "Формат валюты",
"current_password": "Текущий пароль",
"delete_account": "Удалить аккаунт",
"delete_account_confirm": "",
"delete_account_sub": "Удалить свой аккаунт и все связанные с ним данные. Это действие невозможно отменить.",
"delete_notifier_confirm": "",
"display_legacy_header": "",
"enabled": "Активен",
"example": "Пример",
"gen_invite": "Сгенерировать ссылку-приглашение",
@@ -491,91 +313,32 @@
"language": "Язык",
"new_password": "Новый пароль",
"no_notifiers": "Нет настроенных уведомлений",
"no_override": "",
"notifier_modal": "{ type, select, true {Изменить} false {Создать} other {Другое}} Уведомитель",
"notifiers": "Уведомители",
"notifiers_sub": "Получать уведомления о предстоящем обслуживании",
"override_locale": "",
"test": "Тест",
"theme_settings": "Настройки темы",
"theme_settings_sub": "Настройки темы хранятся в локальном хранилище браузера. Вы можете изменить тему в любое время. Если у вас\n не удается установить тему, попробуйте перезапустить браузер.",
"toast": {
"account_deleted": "",
"failed_change_password": "",
"failed_create_notifier": "",
"failed_delete_account": "",
"failed_delete_notifier": "",
"failed_get_currencies": "",
"failed_test_notifier": "",
"failed_update_group": "",
"failed_update_notifier": "",
"group_updated": "",
"notifier_test_success": "",
"password_changed": ""
},
"update_group": "Обновить группу",
"update_language": "Обновить язык",
"url": "URL",
"user_profile": "Профиль пользователя",
"user_profile_sub": "Приглашайте пользователей и управляйте своим аккаунтом."
},
"reports": {
"label_generator": {
"asset_end": "",
"asset_start": "",
"base_url": "",
"bordered_labels": "",
"generate_page": "",
"input_placeholder": "",
"instruction_1": "",
"instruction_2": "",
"instruction_3": "",
"label_height": "",
"label_width": "",
"measure_type": "",
"page_bottom_padding": "",
"page_height": "",
"page_left_padding": "",
"page_right_padding": "",
"page_top_padding": "",
"page_width": "",
"qr_code_example": "",
"tip_1": "",
"tip_2": "",
"tip_3": "",
"tips": "",
"title": "",
"toast": {
"page_too_small_card": ""
}
}
},
"scanner": {
"error": "",
"invalid_url": "",
"no_sources": "",
"permission_denied": "",
"select_video_source": "",
"title": "",
"unsupported": ""
},
"tools": {
"actions": "Действия с инвентарем",
"actions_set": {
"ensure_ids": "Проверить ID активов",
"ensure_ids_button": "Проверить ID активов",
"ensure_ids_confirm": "",
"ensure_ids_sub": "Гарантирует, что все вещи в вашем инвентаре будут иметь корректное поле asset_id. Это производится при помощи поиска самого большого текущего значения поля asset_id в базе данных и применяет ко всем вещам новые значения, где они не были установлены в поле asset_id. Это производится в порядке сортировки по полю created_at.",
"ensure_import_refs": "Проверка ссылок импорта",
"ensure_import_refs_button": "Обеспечение импорта ссылок",
"ensure_import_refs_sub": "Гарантирует что все вещи в Вашем инвентаре имеют корректное поле import_ref. Это производится при помощи генерации строки из 8 случайных символов для каждой вещи, где не поле import_ref не заполнено.",
"set_primary_photo": "Установить основное фото",
"set_primary_photo_button": "Установить основное фото",
"set_primary_photo_confirm": "",
"set_primary_photo_sub": "В Homebox v0.10.0 мы добавили возможность отмечать вложенные фото как основное изображение. Это действие устанавливает первую фотографию во вложениях в качестве основной, если основное изображение еще не выбрано. '<a class=\"link\" href=\"https://github.com/hay-kot/homebox/pull/576\">'Посмотреть pull request #576'</a>'",
"zero_datetimes": "Сбросить даты",
"zero_datetimes_button": "Сбросить даты",
"zero_datetimes_confirm": "",
"zero_datetimes_sub": "Сбрасывает значение полей даты и времени на начало даты в полном наборе. Это исправляет ошибку, когда сохранение значений времени на ранних этапах разработки сайта приводило к ошибке в точном отображении дат '<a class=\"link\" href=\"https://github.com/hay-kot/homebox/issues/236\" target=\"_blank\">'Посмотреть Issue #236 подробнее.'</a>'"
},
"actions_sub": "Применить действия ко всему вашему инвентарю. Это необратимое действие. '<b>'Будьте осторожны.'</b>'",
@@ -586,7 +349,6 @@
"export_sub": "Экспортирует файл в стандартном CSV формате для Homebox. Это экспортирует все Ваши вещи из Вашего инвентаря.",
"import": "Импортировать инвентарь",
"import_button": "Импортировать инвентарь",
"import_ref_confirm": "",
"import_sub": "Импортировать стандартный CSV формат в Homebox. Без колонки '<code>'HB.import_ref'</code>' , это '<b>'не'</b>' перезапишет какую либо существующую вещь в вашем инвентаре, только добавит новые вещи. Строки с колонкой '<code>'HB.import_ref'</code>' будут объеденены с существующими вещами с теми же import_ref, если такие существуют."
},
"import_export_sub": "Импортировать или экспортировать ваш инвентарь в или из CSV файла. Это полезно при миграции вашего инвентаря в новый экземпляр Homebox.",
@@ -599,13 +361,6 @@
"bill_of_materials_button": "Сгенерировать список запчастей",
"bill_of_materials_sub": "Генерирует CSV файл (значения, разделенные запятой), который может быть импортирован в приложении электронных таблиц. Это сводка вашего инвентаря с базовой информацией о вещах и их цене."
},
"reports_sub": "Создавайте различные отчеты для вашего инвентаря.",
"toast": {
"asset_success": "",
"failed_ensure_ids": "",
"failed_ensure_import_refs": "",
"failed_set_primary_photos": "",
"failed_zero_datetimes": ""
}
"reports_sub": "Создавайте различные отчеты для вашего инвентаря."
}
}

View File

@@ -548,9 +548,9 @@
"page_top_padding": "Odsadenie strany zvrchu",
"page_width": "Šírka strany",
"qr_code_example": "Príklad QR kódu",
"tip_1": "",
"tip_2": "",
"tip_3": "",
"tip_1": "Predvolené nastavenia sú nastavené pre\n'<a href=\"https://www.avery.com/templates/5260\">'hárky štítkov Avery 5260'</a>'. Ak používate iný hárok,\nbudete musieť upraviť nastavenia tak, aby zodpovedali vášmu hárku.",
"tip_2": "Ak si upravujete hárok, rozmery sú v palcoch. Pri vytváraní hárku 5260 som zistil, že rozmery použité v jeho šablóne nezodpovedali tomu, čo bolo potrebné na tlač v rámci políčok.\n\n„<b>„Buďte pripravení na pokusy a omyly.“</b>“",
"tip_3": "Pri tlači nezabudnite:\n'<ol><li>'Nastaviť okraje na 0 alebo Žiadne'</li><li>'Nastaviť mierku na 100 %'</li><li>'Zakázať obojstrannú tlač'</li><li>'Pred tlačou viacerých strán vytlačiť testovaciu stranu'</li></ol>'",
"tips": "Tipy",
"title": "Generátor štítkov",
"toast": {
@@ -562,7 +562,7 @@
"error": "Počas skenovania sa vyskytla chyba",
"invalid_url": "Neplatná adresa URL čiarového kódu",
"no_sources": "Nie sú k dispozícii žiadne zdroje videa",
"permission_denied": "",
"permission_denied": "Prístup k kamere bol zamietnutý, povoľte prístup k kamere v nastaveniach prehliadača.",
"select_video_source": "Vyberte zdroj videa",
"title": "Skener",
"unsupported": "Media Stream API nie je podporované bez protokolu HTTPS"
@@ -573,9 +573,10 @@
"create_missing_thumbnails": "Vytvoriť chýbajúce náhľady",
"create_missing_thumbnails_button": "Vytvoriť náhľady",
"create_missing_thumbnails_confirm": "Naozaj chcete vytvoriť chýbajúce náhľady? Môže to chvíľku trvať a akciu nie je možné pozastaviť.",
"create_missing_thumbnails_sub": "Vytvorí miniatúry pre všetky prílohy, ktoré sú podporované aktuálnou konfiguráciou. Toto je užitočné pre prílohy, ktoré boli nahrané pred vydaním Homeboxu v0.20.0. Toto neprepíše existujúce miniatúry, vytvorí nové iba pre prílohy, ktoré nemajú miniatúru. Upozorňujeme, že miniatúry sa vytvárajú na pozadí a ich vytvorenie môže chvíľu trvať.",
"ensure_ids": "Zabezpečenie identifikátorov aktív",
"ensure_ids_button": "Zabezpečenie identifikátorov aktív",
"ensure_ids_confirm": "",
"ensure_ids_confirm": "Naozaj chcete zabezpečiť, aby všetky prvky mali ID? Môže to chvíľu trvať a nedá sa to vrátiť späť.",
"ensure_ids_sub": "Zabezpečí, aby všetky položky vo vašom inventári mali platné pole asset_id. To sa dosiahne tak, že sa v databáze zistí najvyššie aktuálne pole asset_id a na každú položku, ktorá nemá nastavené pole asset_id sa použije ďalšia hodnota. Toto sa vykonáva v poradí podľa poľa created_at.",
"ensure_import_refs": "Zabezpečiť import referencií",
"ensure_import_refs_button": "Zabezpečiť import referencií",

View File

@@ -1,20 +1,10 @@
{
"components": {
"app": {
"create_modal": {
"createAndAddAnother": "",
"enter": "",
"shift": ""
},
"import_dialog": {
"change_warning": "Sjellja për importet me import_refs ekzistues ka ndryshuar. Nëse një import_ref është i pranishëm në skedarin CSV,\n artikulli do të përditësohet me vlerat në skedarin CSV.",
"description": "Importoni një skedar CSV që përmban artikujt, etiketat dhe vendndodhjet tuaja. Shikoni dokumentacionin për më shumë informacion mbi\nformatin e kërkuar.",
"title": "Importo skedarin CSV",
"toast": {
"import_failed": "",
"import_success": "",
"please_select_file": ""
}
"title": "Importo skedarin CSV"
},
"outdated": {
"current_version": "Version i Tanishëm:",
@@ -24,11 +14,6 @@
"new_version_available_link": "Kliko këtu për të lexuar detajet e versionit të ri"
}
},
"form": {
"password": {
"toggle_show": ""
}
},
"global": {
"copy_text": {
"documentation": "Dokumentacioni",
@@ -66,57 +51,20 @@
"download": "Shkarko etiketën",
"print": "Printo etiketën",
"server_print": "Printo në server",
"titles": "Etiketat",
"toast": {
"load_status_failed": "",
"print_failed": "",
"print_success": ""
}
"titles": "Etiketat"
},
"page_qr_code": {
"page_url": "URL e faqes",
"qr_tooltip": ""
"page_url": "URL e faqes"
},
"password_score": {
"password_strength": "Siguria e Fjalëkalimit"
}
},
"item": {
"attachments_list": {
"download": "",
"open_new_tab": ""
},
"create_modal": {
"delete_photo": "",
"item_description": "Përshkrimi i Artikullit",
"item_name": "Emri i Artikullit",
"item_photo": "",
"item_quantity": "",
"parent_item": "",
"rotate_photo": "",
"set_as_primary_photo": "",
"title": "Krijo artikullin",
"toast": {
"already_creating": "",
"create_failed": "",
"create_success": "",
"failed_load_parent": "",
"no_canvas_support": "",
"please_select_location": "",
"rotate_failed": "",
"rotate_process_failed": "",
"some_photos_failed": "",
"upload_failed": "",
"upload_success": "",
"uploading_photos": ""
},
"upload_photos": "",
"uploaded": ""
},
"selector": {
"no_results": "",
"placeholder": "",
"search_placeholder": ""
"title": "Krijo artikullin"
},
"view": {
"selectable": {
@@ -126,11 +74,8 @@
"table": "Tabela"
},
"table": {
"headers": "",
"page": "Faqe",
"rows_per_page": "Rreshta për faqe",
"table_settings": "",
"view_item": ""
"rows_per_page": "Rreshta për faqe"
}
}
},
@@ -138,87 +83,54 @@
"create_modal": {
"label_description": "Përshkrimi i etiketës",
"label_name": "Emri i etiketës",
"title": "Krijo etiketë",
"toast": {
"already_creating": "",
"create_failed": "",
"create_success": "",
"label_name_too_long": ""
}
},
"selector": {
"select_labels": ""
"title": "Krijo etiketë"
}
},
"location": {
"create_modal": {
"location_description": "Përshkrimi i vendndodhjes",
"location_name": "Emri i vendndodhjes",
"title": "Krijoni një vendndodhje të re",
"toast": {
"already_creating": "",
"create_failed": "",
"create_success": ""
}
"title": "Krijoni një vendndodhje të re"
},
"selector": {
"no_location_found": "",
"parent_location": "Vendndodhja e prindit",
"search_location": "",
"select_location": ""
"parent_location": "Vendndodhja e prindit"
},
"tree": {
"no_locations": "Asnjë vendndodhje në dispozicion. Shto vendndodhje të reja përmes\n butonit `< `span class=\"link-primary\" `> `Krijo `< `/span `> ` në shiritin e navigimit."
}
},
"quick_menu": {
"no_results": "",
"shortcut_hint": "Përdor tastet e numrave për të zgjedhur shpejt një veprim."
}
},
"global": {
"add": "Shto",
"archived": "",
"build": "Ndërto: { build }",
"cancel": "",
"confirm": "Konfirmo",
"create": "Krijo",
"create_and_add": "Krijo dhe shto një tjetër",
"create_subitem": "",
"created": "U Krijua",
"delete": "Fshi",
"delete_confirm": "",
"demo_instance": "",
"details": "Detaje",
"duplicate": "Dubliko",
"edit": "Modifiko",
"email": "Email",
"follow_dev": "Ndiq Zhvilluesin",
"footer": {
"api_link": "",
"version_link": ""
},
"github": "Projekt Github",
"insured": "",
"items": "Artikuj",
"join_discord": "Bashkoju Discord",
"labels": "Etiketa",
"loading": "",
"locations": "Vendndodhjet",
"maintenance": "Mirëmbajtja",
"name": "Emri",
"navigate": "Drejto.",
"password": "Fjalëkalimi",
"quantity": "",
"read_docs": "Lexo dokumentet",
"return_home": "",
"save": "Ruaj",
"search": "Kërko",
"sign_out": "Dil",
"submit": "Dërgo",
"unknown": "",
"update": "Përditëso",
"updating": "",
"value": "Vlerë",
"version": "Versioni: { version }",
"welcome": "Mirë se erdhe, { username }"
@@ -229,383 +141,6 @@
"recently_added": "U shtua së fundmi",
"storage_locations": "Vendndodhjet e magazinimit",
"total_items": "Totali i Artikujve",
"total_labels": "Totali i etiketave",
"total_locations": "",
"total_value": ""
},
"index": {
"disabled_registration": "",
"dont_join_group": "",
"joining_group": "",
"login": "",
"register": "",
"remember_me": "",
"set_email": "",
"set_name": "",
"set_password": "",
"tagline": "",
"title": "",
"toast": {
"invalid_email": "",
"invalid_email_password": "",
"login_success": "",
"problem_registering": "",
"user_registered": ""
}
},
"items": {
"add": "",
"advanced": "",
"archived": "",
"asset_id": "",
"associated_with_multiple": "",
"attachment": "",
"attachments": "",
"changes_persisted_immediately": "",
"created_at": "",
"custom_fields": "",
"delete_attachment_confirm": "",
"delete_item_confirm": "",
"description": "",
"details": "",
"drag_and_drop": "",
"edit": {
"edit_attachment_dialog": {
"attachment_title": "",
"attachment_type": "",
"primary_photo": "",
"primary_photo_sub": "",
"select_type": "",
"title": ""
}
},
"edit_details": "",
"field_selector": "",
"field_value": "",
"first": "",
"include_archive": "",
"insured": "",
"invalid_asset_id": "",
"last": "",
"lifetime_warranty": "",
"location": "",
"manual": "",
"manuals": "",
"manufacturer": "",
"model_number": "",
"name": "",
"negate_labels": "",
"next_page": "",
"no_attachments": "",
"no_results": "",
"notes": "",
"only_with_photo": "",
"only_without_photo": "",
"options": "",
"order_by": "",
"pages": "",
"parent_item": "",
"photo": "",
"photos": "",
"prev_page": "",
"purchase_date": "",
"purchase_details": "",
"purchase_price": "",
"purchased_from": "",
"quantity": "",
"query_id": "",
"receipt": "",
"receipts": "",
"reset_search": "",
"results": "",
"select_field": "",
"serial_number": "",
"show_advanced_view_options": "",
"sold_at": "",
"sold_details": "",
"sold_price": "",
"sold_to": "",
"sync_child_locations": "",
"tip_1": "",
"tip_2": "",
"tip_3": "",
"tips": "",
"tips_sub": "",
"toast": {
"asset_not_found": "",
"attachment_deleted": "",
"attachment_updated": "",
"attachment_uploaded": "",
"child_items_location_no_longer_synced": "",
"child_items_location_synced": "",
"child_location_desync": "",
"error_loading_parent_data": "",
"failed_adjust_quantity": "",
"failed_delete_attachment": "",
"failed_delete_item": "",
"failed_duplicate_item": "",
"failed_load_asset": "",
"failed_load_item": "",
"failed_load_items": "",
"failed_save": "",
"failed_save_no_location": "",
"failed_search_items": "",
"failed_update_attachment": "",
"failed_upload_attachment": "",
"item_deleted": "",
"item_saved": "",
"quantity_cannot_negative": "",
"sync_child_location": ""
},
"updated_at": "",
"warranty": "",
"warranty_details": "",
"warranty_expires": ""
},
"labels": {
"label_delete_confirm": "",
"no_results": "",
"toast": {
"failed_delete_label": "",
"failed_load_label": "",
"failed_update_label": "",
"label_deleted": "",
"label_updated": ""
},
"update_label": ""
},
"languages": {
"ca": "",
"cs-CZ": "",
"da-DK": "",
"de": "",
"en": "",
"es": "",
"fi-FI": "",
"fr": "",
"hu": "",
"id-ID": "",
"it": "",
"ja-JP": "",
"ko-KR": "",
"lb-LU": "",
"lt-LT": "",
"nb-NO": "",
"nl": "",
"pl": "",
"pt-BR": "",
"pt-PT": "",
"ro-RO": "",
"ru": "",
"sk-SK": "",
"sl": "",
"sq-AL": "",
"sv": "",
"ta-IN": "",
"th-TH": "",
"tr": "",
"uk-UA": "",
"zh-CN": "",
"zh-HK": "",
"zh-MO": "",
"zh-TW": ""
},
"locations": {
"child_locations": "",
"collapse_tree": "",
"expand_tree": "",
"location_items_delete_confirm": "",
"no_results": "",
"toast": {
"failed_delete_location": "",
"failed_load_location": "",
"failed_update_location": "",
"location_deleted": "",
"location_updated": ""
},
"update_location": ""
},
"maintenance": {
"filter": {
"both": "",
"completed": "",
"scheduled": ""
},
"list": {
"complete": "",
"create_first": "",
"delete": "",
"duplicate": "",
"edit": "",
"new": ""
},
"modal": {
"completed_date": "",
"cost": "",
"delete_confirmation": "",
"edit_action": "",
"edit_title": "",
"entry_name": "",
"new_action": "",
"new_title": "",
"notes": "",
"scheduled_date": ""
},
"monthly_average": "",
"toast": {
"failed_to_create": "",
"failed_to_delete": "",
"failed_to_update": ""
},
"total_cost": "",
"total_entries": ""
},
"menu": {
"create_item": "",
"create_label": "",
"create_location": "",
"home": "",
"locations": "",
"maintenance": "",
"profile": "",
"scanner": "",
"search": "",
"tools": ""
},
"profile": {
"active": "",
"change_password": "",
"currency_format": "",
"current_password": "",
"delete_account": "",
"delete_account_confirm": "",
"delete_account_sub": "",
"delete_notifier_confirm": "",
"display_legacy_header": "",
"enabled": "",
"example": "",
"gen_invite": "",
"group_settings": "",
"group_settings_sub": "",
"inactive": "",
"language": "",
"new_password": "",
"no_notifiers": "",
"no_override": "",
"notifier_modal": "",
"notifiers": "",
"notifiers_sub": "",
"override_locale": "",
"test": "",
"theme_settings": "",
"theme_settings_sub": "",
"toast": {
"account_deleted": "",
"failed_change_password": "",
"failed_create_notifier": "",
"failed_delete_account": "",
"failed_delete_notifier": "",
"failed_get_currencies": "",
"failed_test_notifier": "",
"failed_update_group": "",
"failed_update_notifier": "",
"group_updated": "",
"notifier_test_success": "",
"password_changed": ""
},
"update_group": "",
"update_language": "",
"url": "",
"user_profile": "",
"user_profile_sub": ""
},
"reports": {
"label_generator": {
"asset_end": "",
"asset_start": "",
"base_url": "",
"bordered_labels": "",
"generate_page": "",
"input_placeholder": "",
"instruction_1": "",
"instruction_2": "",
"instruction_3": "",
"label_height": "",
"label_width": "",
"measure_type": "",
"page_bottom_padding": "",
"page_height": "",
"page_left_padding": "",
"page_right_padding": "",
"page_top_padding": "",
"page_width": "",
"qr_code_example": "",
"tip_1": "",
"tip_2": "",
"tip_3": "",
"tips": "",
"title": "",
"toast": {
"page_too_small_card": ""
}
}
},
"scanner": {
"error": "",
"invalid_url": "",
"no_sources": "",
"permission_denied": "",
"select_video_source": "",
"title": "",
"unsupported": ""
},
"tools": {
"actions": "",
"actions_set": {
"ensure_ids": "",
"ensure_ids_button": "",
"ensure_ids_confirm": "",
"ensure_ids_sub": "",
"ensure_import_refs": "",
"ensure_import_refs_button": "",
"ensure_import_refs_sub": "",
"set_primary_photo": "",
"set_primary_photo_button": "",
"set_primary_photo_confirm": "",
"set_primary_photo_sub": "",
"zero_datetimes": "",
"zero_datetimes_button": "",
"zero_datetimes_confirm": "",
"zero_datetimes_sub": ""
},
"actions_sub": "",
"import_export": "",
"import_export_set": {
"export": "",
"export_button": "",
"export_sub": "",
"import": "",
"import_button": "",
"import_ref_confirm": "",
"import_sub": ""
},
"import_export_sub": "",
"reports": "",
"reports_set": {
"asset_labels": "",
"asset_labels_button": "",
"asset_labels_sub": "",
"bill_of_materials": "",
"bill_of_materials_button": "",
"bill_of_materials_sub": ""
},
"reports_sub": "",
"toast": {
"asset_success": "",
"failed_ensure_ids": "",
"failed_ensure_import_refs": "",
"failed_set_primary_photos": "",
"failed_zero_datetimes": ""
}
"total_labels": "Totali i etiketave"
}
}

View File

@@ -66,12 +66,7 @@
"download": "Ladda ner etikett",
"print": "Skriv ut etikett",
"server_print": "Skriv ut på server",
"titles": "Etiketter",
"toast": {
"load_status_failed": "",
"print_failed": "",
"print_success": ""
}
"titles": "Etiketter"
},
"page_qr_code": {
"page_url": "Sidans URL",
@@ -82,41 +77,12 @@
}
},
"item": {
"attachments_list": {
"download": "",
"open_new_tab": ""
},
"create_modal": {
"delete_photo": "",
"item_description": "Objektbeskrivning",
"item_name": "Objektnamn",
"item_photo": "Artikelfoto 📷",
"item_quantity": "",
"parent_item": "",
"rotate_photo": "",
"set_as_primary_photo": "",
"title": "Skapa föremål",
"toast": {
"already_creating": "",
"create_failed": "",
"create_success": "",
"failed_load_parent": "",
"no_canvas_support": "",
"please_select_location": "",
"rotate_failed": "",
"rotate_process_failed": "",
"some_photos_failed": "",
"upload_failed": "",
"upload_success": "",
"uploading_photos": ""
},
"upload_photos": "Ladda upp bilder",
"uploaded": ""
},
"selector": {
"no_results": "",
"placeholder": "",
"search_placeholder": ""
"upload_photos": "Ladda upp bilder"
},
"view": {
"selectable": {
@@ -129,21 +95,21 @@
"headers": "Rubriker",
"page": "Sida",
"rows_per_page": "Rader per sida",
"table_settings": "Bordsinställningar",
"view_item": ""
"table_settings": "Bordsinställningar"
}
}
},
"label": {
"create_modal": {
"label_color": "Etikettfärg",
"label_description": "Etikettbeskrivning",
"label_name": "Etikettnamm",
"title": "Skapa etikett",
"toast": {
"already_creating": "",
"create_failed": "",
"create_success": "",
"label_name_too_long": ""
"already_creating": "Skapar redan en etikett",
"create_failed": "Det gick inte att skapa etiketten",
"create_success": "Etikett skapad",
"label_name_too_long": "Etikettnamnet får inte vara längre än 50 tecken"
}
},
"selector": {
@@ -154,12 +120,7 @@
"create_modal": {
"location_description": "Platsbeskrivning",
"location_name": "Platsnamn",
"title": "Skapa plats",
"toast": {
"already_creating": "",
"create_failed": "",
"create_success": ""
}
"title": "Skapa plats"
},
"selector": {
"no_location_found": "Ingen plats hittades",
@@ -184,11 +145,8 @@
"confirm": "Godkänn",
"create": "Skapa",
"create_and_add": "Skapa och lägg till en till",
"create_subitem": "",
"created": "Skapad",
"delete": "Ta bort",
"delete_confirm": "",
"demo_instance": "",
"details": "Detaljer",
"duplicate": "Duplicera",
"edit": "Ändra",
@@ -203,7 +161,6 @@
"items": "Föremål",
"join_discord": "Gå med i Discord",
"labels": "Etiketter",
"loading": "",
"locations": "Platser",
"maintenance": "Underhåll",
"name": "Namn",
@@ -211,14 +168,11 @@
"password": "Lösenord",
"quantity": "Kvantitet",
"read_docs": "Läs dokumentationen",
"return_home": "",
"save": "Spara",
"search": "Sök",
"sign_out": "Logga ut",
"submit": "Skicka",
"unknown": "",
"update": "Uppdatera",
"updating": "",
"value": "Värde",
"version": "Version: { version }",
"welcome": "Välkommen, { username }"
@@ -243,49 +197,27 @@
"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.",
"title": "",
"toast": {
"invalid_email": "",
"invalid_email_password": "",
"login_success": "",
"problem_registering": "",
"user_registered": ""
}
"tagline": "Spåra, organisera och hantera dina saker."
},
"items": {
"add": "Lägg till",
"advanced": "Avancerat",
"archived": "Arkiverad",
"asset_id": "Tillgångs-ID",
"associated_with_multiple": "",
"attachment": "Bilaga",
"attachments": "Bilagor",
"changes_persisted_immediately": "Ändringar av bilagor sparas omedelbart",
"created_at": "Skapat",
"custom_fields": "Egna fält",
"delete_attachment_confirm": "",
"delete_item_confirm": "",
"description": "Beskrivning",
"details": "Detaljer",
"drag_and_drop": "Dra och släpp här eller klicka för att välja filer",
"edit": {
"edit_attachment_dialog": {
"attachment_title": "",
"attachment_type": "",
"primary_photo": "",
"primary_photo_sub": "",
"select_type": "",
"title": ""
}
},
"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": "",
"last": "Sista",
"lifetime_warranty": "Livstidsgaranti",
"location": "Plats",
@@ -296,7 +228,6 @@
"name": "Namn",
"negate_labels": "Negera valda etiketter",
"next_page": "Nästa sida",
"no_attachments": "",
"no_results": "Inga föremål hittades",
"notes": "Anteckningar",
"only_with_photo": "Endast artiklar med foto",
@@ -318,60 +249,24 @@
"receipts": "Kvitton",
"reset_search": "Återställ sökning",
"results": "{ total } Resultat",
"select_field": "",
"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": "",
"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": "",
"attachment_deleted": "",
"attachment_updated": "",
"attachment_uploaded": "",
"child_items_location_no_longer_synced": "",
"child_items_location_synced": "",
"child_location_desync": "",
"error_loading_parent_data": "",
"failed_adjust_quantity": "",
"failed_delete_attachment": "",
"failed_delete_item": "",
"failed_duplicate_item": "",
"failed_load_asset": "",
"failed_load_item": "",
"failed_load_items": "",
"failed_save": "",
"failed_save_no_location": "",
"failed_search_items": "",
"failed_update_attachment": "",
"failed_upload_attachment": "",
"item_deleted": "",
"item_saved": "",
"quantity_cannot_negative": "",
"sync_child_location": ""
},
"updated_at": "Uppdaterad",
"warranty": "Garanti",
"warranty_details": "Garantidetaljer",
"warranty_expires": "Garantin upphör"
},
"labels": {
"label_delete_confirm": "",
"no_results": "Inga etiketter hittades",
"toast": {
"failed_delete_label": "",
"failed_load_label": "",
"failed_update_label": "",
"label_deleted": "",
"label_updated": ""
},
"update_label": "Uppdatera etikett"
},
"languages": {
@@ -387,8 +282,6 @@
"it": "Italienska",
"ja-JP": "Japanska",
"ko-KR": "Koreanska",
"lb-LU": "",
"lt-LT": "",
"nb-NO": "Norska bokmål",
"nl": "Nederländska",
"pl": "Polska",
@@ -414,15 +307,7 @@
"child_locations": "Underordnade platser",
"collapse_tree": "Dra ihop träd",
"expand_tree": "Expandera Träd",
"location_items_delete_confirm": "",
"no_results": "Inga platser hittades",
"toast": {
"failed_delete_location": "",
"failed_load_location": "",
"failed_update_location": "",
"location_deleted": "",
"location_updated": ""
},
"update_location": "Uppdatera plats"
},
"maintenance": {
@@ -478,10 +363,7 @@
"currency_format": "Valuta format",
"current_password": "Nuvarande lösenord",
"delete_account": "Radera konto",
"delete_account_confirm": "",
"delete_account_sub": "Ta bort ditt konto och alla tillhörande data. Detta kan inte ångras.",
"delete_notifier_confirm": "",
"display_legacy_header": "",
"enabled": "Aktiverad",
"example": "Exempel",
"gen_invite": "Skapa inbjudningslänk",
@@ -491,70 +373,22 @@
"language": "Språk",
"new_password": "Nytt lösenord",
"no_notifiers": "Inga notifierare konfigurerade",
"no_override": "",
"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": "",
"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": "",
"failed_change_password": "",
"failed_create_notifier": "",
"failed_delete_account": "",
"failed_delete_notifier": "",
"failed_get_currencies": "",
"failed_test_notifier": "",
"failed_update_group": "",
"failed_update_notifier": "",
"group_updated": "",
"notifier_test_success": "",
"password_changed": ""
},
"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": "",
"asset_start": "",
"base_url": "",
"bordered_labels": "",
"generate_page": "",
"input_placeholder": "",
"instruction_1": "",
"instruction_2": "",
"instruction_3": "",
"label_height": "",
"label_width": "",
"measure_type": "",
"page_bottom_padding": "",
"page_height": "",
"page_left_padding": "",
"page_right_padding": "",
"page_top_padding": "",
"page_width": "",
"qr_code_example": "",
"tip_1": "",
"tip_2": "",
"tip_3": "",
"tips": "",
"title": "",
"toast": {
"page_too_small_card": ""
}
}
},
"scanner": {
"error": "Ett fel uppstod vid skanning",
"invalid_url": "Ogiltig streckkods-URL",
"no_sources": "Inga videokällor tillgängliga",
"permission_denied": "",
"select_video_source": "Välj en videokälla",
"title": "Skanner",
"unsupported": "Media Stream API stöds inte utan HTTPS"
@@ -564,18 +398,15 @@
"actions_set": {
"ensure_ids": "Säkerställ tillgångs-ID",
"ensure_ids_button": "Säkerställ tillgångs-ID",
"ensure_ids_confirm": "",
"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": "",
"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": "",
"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>'",
@@ -586,7 +417,6 @@
"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": "",
"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.",
@@ -599,13 +429,6 @@
"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.",
"toast": {
"asset_success": "",
"failed_ensure_ids": "",
"failed_ensure_import_refs": "",
"failed_set_primary_photos": "",
"failed_zero_datetimes": ""
}
"reports_sub": "Generera olika rapporter för ditt lager."
}
}

View File

@@ -1,611 +1,15 @@
{
"components": {
"app": {
"create_modal": {
"createAndAddAnother": "",
"enter": "",
"shift": ""
},
"import_dialog": {
"change_warning": "",
"description": "",
"title": "",
"toast": {
"import_failed": "",
"import_success": "",
"please_select_file": ""
}
},
"outdated": {
"current_version": "",
"dismiss": "",
"latest_version": "",
"new_version_available": "",
"new_version_available_link": ""
}
},
"form": {
"password": {
"toggle_show": ""
}
},
"global": {
"copy_text": {
"documentation": "",
"failed_to_copy": "",
"https_required": "",
"learn_more": ""
},
"date_time": {
"ago": "",
"days": "நாட்கள்",
"hour": "மணி",
"hours": "மணிகள்",
"in": "{0} இல்",
"just-now": "இப்பொழுது",
"last-month": "கடந்த மாதம்",
"last-week": "கடந்த வாரம்",
"last-year": "",
"minute": "",
"minutes": "",
"months": "",
"next-month": "",
"next-week": "",
"next-year": "",
"second": "",
"seconds": "",
"tomorrow": "",
"week": "",
"weeks": "",
"years": "",
"yesterday": ""
},
"label_maker": {
"browser_print": "",
"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_photo": "",
"item_quantity": "",
"parent_item": "",
"rotate_photo": "",
"set_as_primary_photo": "",
"title": "",
"toast": {
"already_creating": "",
"create_failed": "",
"create_success": "",
"failed_load_parent": "",
"no_canvas_support": "",
"please_select_location": "",
"rotate_failed": "",
"rotate_process_failed": "",
"some_photos_failed": "",
"upload_failed": "",
"upload_success": "",
"uploading_photos": ""
},
"upload_photos": "",
"uploaded": ""
},
"selector": {
"no_results": "",
"placeholder": "",
"search_placeholder": ""
},
"view": {
"selectable": {
"card": "",
"items": "",
"no_items": "",
"table": ""
},
"table": {
"headers": "",
"page": "",
"rows_per_page": "",
"table_settings": "",
"view_item": ""
}
}
},
"label": {
"create_modal": {
"label_description": "",
"label_name": "",
"title": "",
"toast": {
"already_creating": "",
"create_failed": "",
"create_success": "",
"label_name_too_long": ""
}
},
"selector": {
"select_labels": ""
}
},
"location": {
"create_modal": {
"location_description": "",
"location_name": "",
"title": "",
"toast": {
"already_creating": "",
"create_failed": "",
"create_success": ""
}
},
"selector": {
"no_location_found": "",
"parent_location": "",
"search_location": "",
"select_location": ""
},
"tree": {
"no_locations": ""
}
},
"quick_menu": {
"no_results": "",
"shortcut_hint": ""
}
},
"global": {
"add": "",
"archived": "",
"build": "",
"cancel": "",
"confirm": "",
"create": "",
"create_and_add": "",
"create_subitem": "",
"created": "",
"delete": "",
"delete_confirm": "",
"demo_instance": "",
"details": "",
"duplicate": "",
"edit": "",
"email": "",
"follow_dev": "",
"footer": {
"api_link": "",
"version_link": ""
},
"github": "",
"insured": "",
"items": "",
"join_discord": "",
"labels": "",
"loading": "",
"locations": "",
"maintenance": "",
"name": "",
"navigate": "",
"password": "",
"quantity": "",
"read_docs": "",
"return_home": "",
"save": "",
"search": "",
"sign_out": "",
"submit": "",
"unknown": "",
"update": "",
"updating": "",
"value": "",
"version": "",
"welcome": ""
},
"home": {
"labels": "",
"quick_statistics": "",
"recently_added": "",
"storage_locations": "",
"total_items": "",
"total_labels": "",
"total_locations": "",
"total_value": ""
},
"index": {
"disabled_registration": "",
"dont_join_group": "",
"joining_group": "",
"login": "",
"register": "",
"remember_me": "",
"set_email": "",
"set_name": "",
"set_password": "",
"tagline": "",
"title": "",
"toast": {
"invalid_email": "",
"invalid_email_password": "",
"login_success": "",
"problem_registering": "",
"user_registered": ""
}
},
"items": {
"add": "",
"advanced": "",
"archived": "",
"asset_id": "",
"associated_with_multiple": "",
"attachment": "",
"attachments": "",
"changes_persisted_immediately": "",
"created_at": "",
"custom_fields": "",
"delete_attachment_confirm": "",
"delete_item_confirm": "",
"description": "",
"details": "",
"drag_and_drop": "",
"edit": {
"edit_attachment_dialog": {
"attachment_title": "",
"attachment_type": "",
"primary_photo": "",
"primary_photo_sub": "",
"select_type": "",
"title": ""
}
},
"edit_details": "",
"field_selector": "",
"field_value": "",
"first": "",
"include_archive": "",
"insured": "",
"invalid_asset_id": "",
"last": "",
"lifetime_warranty": "",
"location": "",
"manual": "",
"manuals": "",
"manufacturer": "",
"model_number": "",
"name": "",
"negate_labels": "",
"next_page": "",
"no_attachments": "",
"no_results": "",
"notes": "",
"only_with_photo": "",
"only_without_photo": "",
"options": "",
"order_by": "",
"pages": "",
"parent_item": "",
"photo": "",
"photos": "",
"prev_page": "",
"purchase_date": "",
"purchase_details": "",
"purchase_price": "",
"purchased_from": "",
"quantity": "",
"query_id": "",
"receipt": "",
"receipts": "",
"reset_search": "",
"results": "",
"select_field": "",
"serial_number": "",
"show_advanced_view_options": "",
"sold_at": "",
"sold_details": "",
"sold_price": "",
"sold_to": "",
"sync_child_locations": "",
"tip_1": "",
"tip_2": "",
"tip_3": "",
"tips": "",
"tips_sub": "",
"toast": {
"asset_not_found": "",
"attachment_deleted": "",
"attachment_updated": "",
"attachment_uploaded": "",
"child_items_location_no_longer_synced": "",
"child_items_location_synced": "",
"child_location_desync": "",
"error_loading_parent_data": "",
"failed_adjust_quantity": "",
"failed_delete_attachment": "",
"failed_delete_item": "",
"failed_duplicate_item": "",
"failed_load_asset": "",
"failed_load_item": "",
"failed_load_items": "",
"failed_save": "",
"failed_save_no_location": "",
"failed_search_items": "",
"failed_update_attachment": "",
"failed_upload_attachment": "",
"item_deleted": "",
"item_saved": "",
"quantity_cannot_negative": "",
"sync_child_location": ""
},
"updated_at": "",
"warranty": "",
"warranty_details": "",
"warranty_expires": ""
},
"labels": {
"label_delete_confirm": "",
"no_results": "",
"toast": {
"failed_delete_label": "",
"failed_load_label": "",
"failed_update_label": "",
"label_deleted": "",
"label_updated": ""
},
"update_label": ""
},
"languages": {
"ca": "",
"cs-CZ": "",
"da-DK": "",
"de": "",
"en": "",
"es": "",
"fi-FI": "",
"fr": "",
"hu": "",
"id-ID": "",
"it": "",
"ja-JP": "",
"ko-KR": "",
"lb-LU": "",
"lt-LT": "",
"nb-NO": "",
"nl": "",
"pl": "",
"pt-BR": "",
"pt-PT": "",
"ro-RO": "",
"ru": "",
"sk-SK": "",
"sl": "",
"sq-AL": "",
"sv": "",
"ta-IN": "",
"th-TH": "",
"tr": "",
"uk-UA": "",
"zh-CN": "",
"zh-HK": "",
"zh-MO": "",
"zh-TW": ""
},
"locations": {
"child_locations": "",
"collapse_tree": "",
"expand_tree": "",
"location_items_delete_confirm": "",
"no_results": "",
"toast": {
"failed_delete_location": "",
"failed_load_location": "",
"failed_update_location": "",
"location_deleted": "",
"location_updated": ""
},
"update_location": ""
},
"maintenance": {
"filter": {
"both": "",
"completed": "",
"scheduled": ""
},
"list": {
"complete": "",
"create_first": "",
"delete": "",
"duplicate": "",
"edit": "",
"new": ""
},
"modal": {
"completed_date": "",
"cost": "",
"delete_confirmation": "",
"edit_action": "",
"edit_title": "",
"entry_name": "",
"new_action": "",
"new_title": "",
"notes": "",
"scheduled_date": ""
},
"monthly_average": "",
"toast": {
"failed_to_create": "",
"failed_to_delete": "",
"failed_to_update": ""
},
"total_cost": "",
"total_entries": ""
},
"menu": {
"create_item": "",
"create_label": "",
"create_location": "",
"home": "",
"locations": "",
"maintenance": "",
"profile": "",
"scanner": "",
"search": "",
"tools": ""
},
"profile": {
"active": "",
"change_password": "",
"currency_format": "",
"current_password": "",
"delete_account": "",
"delete_account_confirm": "",
"delete_account_sub": "",
"delete_notifier_confirm": "",
"display_legacy_header": "",
"enabled": "",
"example": "",
"gen_invite": "",
"group_settings": "",
"group_settings_sub": "",
"inactive": "",
"language": "",
"new_password": "",
"no_notifiers": "",
"no_override": "",
"notifier_modal": "",
"notifiers": "",
"notifiers_sub": "",
"override_locale": "",
"test": "",
"theme_settings": "",
"theme_settings_sub": "",
"toast": {
"account_deleted": "",
"failed_change_password": "",
"failed_create_notifier": "",
"failed_delete_account": "",
"failed_delete_notifier": "",
"failed_get_currencies": "",
"failed_test_notifier": "",
"failed_update_group": "",
"failed_update_notifier": "",
"group_updated": "",
"notifier_test_success": "",
"password_changed": ""
},
"update_group": "",
"update_language": "",
"url": "",
"user_profile": "",
"user_profile_sub": ""
},
"reports": {
"label_generator": {
"asset_end": "",
"asset_start": "",
"base_url": "",
"bordered_labels": "",
"generate_page": "",
"input_placeholder": "",
"instruction_1": "",
"instruction_2": "",
"instruction_3": "",
"label_height": "",
"label_width": "",
"measure_type": "",
"page_bottom_padding": "",
"page_height": "",
"page_left_padding": "",
"page_right_padding": "",
"page_top_padding": "",
"page_width": "",
"qr_code_example": "",
"tip_1": "",
"tip_2": "",
"tip_3": "",
"tips": "",
"title": "",
"toast": {
"page_too_small_card": ""
}
}
},
"scanner": {
"error": "",
"invalid_url": "",
"no_sources": "",
"permission_denied": "",
"select_video_source": "",
"title": "",
"unsupported": ""
},
"tools": {
"actions": "",
"actions_set": {
"ensure_ids": "",
"ensure_ids_button": "",
"ensure_ids_confirm": "",
"ensure_ids_sub": "",
"ensure_import_refs": "",
"ensure_import_refs_button": "",
"ensure_import_refs_sub": "",
"set_primary_photo": "",
"set_primary_photo_button": "",
"set_primary_photo_confirm": "",
"set_primary_photo_sub": "",
"zero_datetimes": "",
"zero_datetimes_button": "",
"zero_datetimes_confirm": "",
"zero_datetimes_sub": ""
},
"actions_sub": "",
"import_export": "",
"import_export_set": {
"export": "",
"export_button": "",
"export_sub": "",
"import": "",
"import_button": "",
"import_ref_confirm": "",
"import_sub": ""
},
"import_export_sub": "",
"reports": "",
"reports_set": {
"asset_labels": "",
"asset_labels_button": "",
"asset_labels_sub": "",
"bill_of_materials": "",
"bill_of_materials_button": "",
"bill_of_materials_sub": ""
},
"reports_sub": "",
"toast": {
"asset_success": "",
"failed_ensure_ids": "",
"failed_ensure_import_refs": "",
"failed_set_primary_photos": "",
"failed_zero_datetimes": ""
"last-week": "கடந்த வாரம்"
}
}
}
}

View File

@@ -1,20 +1,10 @@
{
"components": {
"app": {
"create_modal": {
"createAndAddAnother": "",
"enter": "",
"shift": ""
},
"import_dialog": {
"change_warning": "พฤติกรรมการนำเข้าสำหรับรายการที่มี import_ref อยู่แล้วมีการเปลี่ยนแปลง หากมี import_ref ในไฟล์ CSV\nรายการนั้นจะได้รับการอัปเดตด้วยค่าต่างๆ ที่อยู่ในไฟล์ CSV",
"description": "นำเข้าไฟล์ CSV ที่มีรายการ ป้ายกำกับ และตำแหน่งที่ตั้งของคุณ โปรดดูเอกสารสำหรับข้อมูลเพิ่มเติม\nเกี่ยวกับรูปแบบที่จำเป็น",
"title": "นำเข้า CSV",
"toast": {
"import_failed": "",
"import_success": "",
"please_select_file": ""
}
"title": "นำเข้า CSV"
},
"outdated": {
"current_version": "เวอร์ชั่นปัจจุบัน",
@@ -24,11 +14,6 @@
"new_version_available_link": "กดที่นี่เพื่อดู Release notes"
}
},
"form": {
"password": {
"toggle_show": ""
}
},
"global": {
"copy_text": {
"documentation": "คู่มือการใช้งาน",
@@ -62,111 +47,24 @@
},
"label_maker": {
"browser_print": "พิมพ์จากเบราว์เซอร์",
"confirm_description": "คุณแน่ใจหรือไม่ว่าต้องการพิมพ์ป้ายกำกับนี้?",
"download": "",
"print": "",
"server_print": "",
"titles": "",
"toast": {
"load_status_failed": "",
"print_failed": "",
"print_success": ""
}
},
"page_qr_code": {
"page_url": "",
"qr_tooltip": ""
"confirm_description": "คุณแน่ใจหรือไม่ว่าต้องการพิมพ์ป้ายกำกับนี้?"
},
"password_score": {
"password_strength": "ความแข็งแกร่งของรหัสผ่าน"
}
},
"item": {
"attachments_list": {
"download": "",
"open_new_tab": ""
},
"create_modal": {
"delete_photo": "",
"item_description": "รายละเอียดรายการ",
"item_name": "ชื่อรายการ",
"item_photo": "",
"item_quantity": "",
"parent_item": "",
"rotate_photo": "",
"set_as_primary_photo": "",
"title": "",
"toast": {
"already_creating": "",
"create_failed": "",
"create_success": "",
"failed_load_parent": "",
"no_canvas_support": "",
"please_select_location": "",
"rotate_failed": "",
"rotate_process_failed": "",
"some_photos_failed": "",
"upload_failed": "",
"upload_success": "",
"uploading_photos": ""
},
"upload_photos": "",
"uploaded": ""
},
"selector": {
"no_results": "",
"placeholder": "",
"search_placeholder": ""
"item_name": "ชื่อรายการ"
},
"view": {
"selectable": {
"card": "",
"items": "",
"no_items": "",
"table": ""
},
"table": {
"headers": "",
"page": "หน้า",
"rows_per_page": "",
"table_settings": "",
"view_item": ""
"page": "หน้า"
}
}
},
"label": {
"create_modal": {
"label_description": "",
"label_name": "",
"title": "",
"toast": {
"already_creating": "",
"create_failed": "",
"create_success": "",
"label_name_too_long": ""
}
},
"selector": {
"select_labels": ""
}
},
"location": {
"create_modal": {
"location_description": "",
"location_name": "",
"title": "",
"toast": {
"already_creating": "",
"create_failed": "",
"create_success": ""
}
},
"selector": {
"no_location_found": "",
"parent_location": "",
"search_location": "",
"select_location": ""
},
"tree": {
"no_locations": "ไม่มีตำแหน่งที่ตั้ง โปรดเพิ่มตำแหน่งที่ตั้งใหม่โดยคลิกปุ่ม\n`<`span class=\"link-primary\"`>`สร้าง`<`/span`>`บนแถบนำทาง"
}
@@ -184,11 +82,8 @@
"confirm": "ยืนยัน",
"create": "สร้าง",
"create_and_add": "สร้างและเพิ่มอีกรายการ",
"create_subitem": "",
"created": "สร้างแล้ว",
"delete": "ลบ",
"delete_confirm": "",
"demo_instance": "",
"details": "รายละเอียด",
"duplicate": "ทำสำเนา",
"edit": "แก้ไข",
@@ -203,7 +98,6 @@
"items": "รายการ",
"join_discord": "เข้าร่วม Discord",
"labels": "ป้ายกำกับ",
"loading": "",
"locations": "สถานที่",
"maintenance": "การบำรุงรักษา",
"name": "ชื่อ",
@@ -211,14 +105,11 @@
"password": "รหัสผ่าน",
"quantity": "ปริมาณ",
"read_docs": "อ่านเอกสาร",
"return_home": "",
"save": "บันทึก",
"search": "ค้นหา",
"sign_out": "ลงชื่อออก",
"submit": "ส่ง",
"unknown": "",
"update": "อัปเดต",
"updating": "",
"value": "ราคา",
"version": "เวอร์ชั่น: { version }",
"welcome": "ยินดีต้อนรับ, { username }"
@@ -243,369 +134,21 @@
"set_email": "อีเมลของคุณคืออะไร?",
"set_name": "ชื่อของคุณคืออะไร?",
"set_password": "ตั้งรหัสผ่านของคุณ",
"tagline": "ติดตาม จัดระเบียบ และจัดการสิ่งของของคุณ",
"title": "",
"toast": {
"invalid_email": "",
"invalid_email_password": "",
"login_success": "",
"problem_registering": "",
"user_registered": ""
}
"tagline": "ติดตาม จัดระเบียบ และจัดการสิ่งของของคุณ"
},
"items": {
"add": "เพิ่ม",
"advanced": "ขั้นสูง",
"archived": "เก็บถาวร",
"asset_id": "รหัสสินทรัพย์",
"associated_with_multiple": "",
"attachment": "ไฟล์แนบ",
"attachments": "ไฟล์แนบ",
"changes_persisted_immediately": "การเปลี่ยนแปลงไฟล์แนบจะถูกบันทึกทันที",
"created_at": "สร้างเมื่อ",
"custom_fields": "ฟิลด์ที่กำหนดเอง",
"delete_attachment_confirm": "",
"delete_item_confirm": "",
"description": "รายละเอียด",
"details": "รายละเอียด",
"drag_and_drop": "ลากและวางไฟล์ที่นี่ หรือคลิกเพื่อเลือกไฟล์",
"edit": {
"edit_attachment_dialog": {
"attachment_title": "",
"attachment_type": "",
"primary_photo": "",
"primary_photo_sub": "",
"select_type": "",
"title": ""
}
},
"edit_details": "แก้ไขรายละเอียด",
"field_selector": "",
"field_value": "",
"first": "",
"include_archive": "",
"insured": "",
"invalid_asset_id": "",
"last": "",
"lifetime_warranty": "",
"location": "",
"manual": "",
"manuals": "",
"manufacturer": "",
"model_number": "",
"name": "",
"negate_labels": "",
"next_page": "",
"no_attachments": "",
"no_results": "",
"notes": "",
"only_with_photo": "",
"only_without_photo": "",
"options": "",
"order_by": "",
"pages": "",
"parent_item": "",
"photo": "",
"photos": "",
"prev_page": "",
"purchase_date": "",
"purchase_details": "",
"purchase_price": "",
"purchased_from": "",
"quantity": "",
"query_id": "",
"receipt": "",
"receipts": "",
"reset_search": "",
"results": "",
"select_field": "",
"serial_number": "",
"show_advanced_view_options": "",
"sold_at": "",
"sold_details": "",
"sold_price": "",
"sold_to": "",
"sync_child_locations": "",
"tip_1": "",
"tip_2": "",
"tip_3": "",
"tips": "",
"tips_sub": "",
"toast": {
"asset_not_found": "",
"attachment_deleted": "",
"attachment_updated": "",
"attachment_uploaded": "",
"child_items_location_no_longer_synced": "",
"child_items_location_synced": "",
"child_location_desync": "",
"error_loading_parent_data": "",
"failed_adjust_quantity": "",
"failed_delete_attachment": "",
"failed_delete_item": "",
"failed_duplicate_item": "",
"failed_load_asset": "",
"failed_load_item": "",
"failed_load_items": "",
"failed_save": "",
"failed_save_no_location": "",
"failed_search_items": "",
"failed_update_attachment": "",
"failed_upload_attachment": "",
"item_deleted": "",
"item_saved": "",
"quantity_cannot_negative": "",
"sync_child_location": ""
},
"updated_at": "",
"warranty": "",
"warranty_details": "",
"warranty_expires": ""
},
"labels": {
"label_delete_confirm": "",
"no_results": "",
"toast": {
"failed_delete_label": "",
"failed_load_label": "",
"failed_update_label": "",
"label_deleted": "",
"label_updated": ""
},
"update_label": ""
},
"languages": {
"ca": "",
"cs-CZ": "",
"da-DK": "",
"de": "",
"en": "",
"es": "",
"fi-FI": "",
"fr": "",
"hu": "",
"id-ID": "",
"it": "",
"ja-JP": "",
"ko-KR": "",
"lb-LU": "",
"lt-LT": "",
"nb-NO": "",
"nl": "",
"pl": "",
"pt-BR": "",
"pt-PT": "",
"ro-RO": "",
"ru": "",
"sk-SK": "",
"sl": "",
"sq-AL": "",
"sv": "",
"ta-IN": "",
"th-TH": "",
"tr": "",
"uk-UA": "",
"zh-CN": "",
"zh-HK": "",
"zh-MO": "",
"zh-TW": ""
},
"locations": {
"child_locations": "",
"collapse_tree": "",
"expand_tree": "",
"location_items_delete_confirm": "",
"no_results": "",
"toast": {
"failed_delete_location": "",
"failed_load_location": "",
"failed_update_location": "",
"location_deleted": "",
"location_updated": ""
},
"update_location": ""
},
"maintenance": {
"filter": {
"both": "",
"completed": "",
"scheduled": ""
},
"list": {
"complete": "",
"create_first": "",
"delete": "",
"duplicate": "",
"edit": "",
"new": ""
},
"modal": {
"completed_date": "",
"cost": "",
"delete_confirmation": "",
"edit_action": "",
"edit_title": "",
"entry_name": "",
"new_action": "",
"new_title": "",
"notes": "",
"scheduled_date": ""
},
"monthly_average": "",
"toast": {
"failed_to_create": "",
"failed_to_delete": "",
"failed_to_update": ""
},
"total_cost": "",
"total_entries": ""
},
"menu": {
"create_item": "",
"create_label": "",
"create_location": "",
"home": "",
"locations": "",
"maintenance": "",
"profile": "",
"scanner": "",
"search": "",
"tools": ""
},
"profile": {
"active": "",
"change_password": "",
"currency_format": "",
"current_password": "",
"delete_account": "",
"delete_account_confirm": "",
"delete_account_sub": "",
"delete_notifier_confirm": "",
"display_legacy_header": "",
"enabled": "",
"example": "",
"gen_invite": "",
"group_settings": "",
"group_settings_sub": "",
"inactive": "",
"language": "",
"new_password": "",
"no_notifiers": "",
"no_override": "",
"notifier_modal": "",
"notifiers": "",
"notifiers_sub": "",
"override_locale": "",
"test": "",
"theme_settings": "",
"theme_settings_sub": "",
"toast": {
"account_deleted": "",
"failed_change_password": "",
"failed_create_notifier": "",
"failed_delete_account": "",
"failed_delete_notifier": "",
"failed_get_currencies": "",
"failed_test_notifier": "",
"failed_update_group": "",
"failed_update_notifier": "",
"group_updated": "",
"notifier_test_success": "",
"password_changed": ""
},
"update_group": "",
"update_language": "",
"url": "",
"user_profile": "",
"user_profile_sub": ""
},
"reports": {
"label_generator": {
"asset_end": "",
"asset_start": "",
"base_url": "",
"bordered_labels": "",
"generate_page": "",
"input_placeholder": "",
"instruction_1": "",
"instruction_2": "",
"instruction_3": "",
"label_height": "",
"label_width": "",
"measure_type": "",
"page_bottom_padding": "",
"page_height": "",
"page_left_padding": "",
"page_right_padding": "",
"page_top_padding": "",
"page_width": "",
"qr_code_example": "",
"tip_1": "",
"tip_2": "",
"tip_3": "",
"tips": "",
"title": "",
"toast": {
"page_too_small_card": ""
}
}
},
"scanner": {
"error": "",
"invalid_url": "",
"no_sources": "",
"permission_denied": "",
"select_video_source": "",
"title": "",
"unsupported": ""
},
"tools": {
"actions": "",
"actions_set": {
"ensure_ids": "",
"ensure_ids_button": "",
"ensure_ids_confirm": "",
"ensure_ids_sub": "",
"ensure_import_refs": "",
"ensure_import_refs_button": "",
"ensure_import_refs_sub": "",
"set_primary_photo": "",
"set_primary_photo_button": "",
"set_primary_photo_confirm": "",
"set_primary_photo_sub": "",
"zero_datetimes": "",
"zero_datetimes_button": "",
"zero_datetimes_confirm": "",
"zero_datetimes_sub": ""
},
"actions_sub": "",
"import_export": "",
"import_export_set": {
"export": "",
"export_button": "",
"export_sub": "",
"import": "",
"import_button": "",
"import_ref_confirm": "",
"import_sub": ""
},
"import_export_sub": "",
"reports": "",
"reports_set": {
"asset_labels": "",
"asset_labels_button": "",
"asset_labels_sub": "",
"bill_of_materials": "",
"bill_of_materials_button": "",
"bill_of_materials_sub": ""
},
"reports_sub": "",
"toast": {
"asset_success": "",
"failed_ensure_ids": "",
"failed_ensure_import_refs": "",
"failed_set_primary_photos": "",
"failed_zero_datetimes": ""
}
"edit_details": "แก้ไขรายละเอียด"
}
}

View File

@@ -1,20 +1,10 @@
{
"components": {
"app": {
"create_modal": {
"createAndAddAnother": "",
"enter": "",
"shift": ""
},
"import_dialog": {
"change_warning": "Mevcut import_refs ile içe aktarmaların davranışı değişti. CSV dosyasında bir import_ref varsa, \nöğe CSV dosyasındaki değerlerle güncellenecektir.",
"description": "Öğelerinizi, etiketlerinizi ve konumlarınızı içeren bir CSV dosyasını içe aktarın. Daha fazla\nbilgi için dökümanları okuyun.",
"title": "CSV dosyasını içeri aktar",
"toast": {
"import_failed": "",
"import_success": "",
"please_select_file": ""
}
"title": "CSV dosyasını içeri aktar"
},
"outdated": {
"current_version": "Güncel Sürüm",
@@ -24,11 +14,6 @@
"new_version_available_link": "Sürüm notlarını görüntülemek için buraya tıklayın"
}
},
"form": {
"password": {
"toggle_show": ""
}
},
"global": {
"copy_text": {
"documentation": "dokümantasyon",
@@ -66,12 +51,7 @@
"download": "Etiketi İndir",
"print": "Etiketi yazdır",
"server_print": "Sunucuda yazdır",
"titles": "Etiketler",
"toast": {
"load_status_failed": "",
"print_failed": "",
"print_success": ""
}
"titles": "Etiketler"
},
"page_qr_code": {
"page_url": "Sayfa URL'si",
@@ -82,41 +62,14 @@
}
},
"item": {
"attachments_list": {
"download": "",
"open_new_tab": ""
},
"create_modal": {
"delete_photo": "",
"item_description": "Ürün Açıklaması",
"item_name": "Ürün Adı",
"item_photo": "Öğe Fotoğrafı 📷",
"item_quantity": "Öğe Miktarı",
"parent_item": "Ana Öğe",
"rotate_photo": "",
"set_as_primary_photo": "",
"title": "Eşya Oluştur",
"toast": {
"already_creating": "",
"create_failed": "",
"create_success": "",
"failed_load_parent": "",
"no_canvas_support": "",
"please_select_location": "",
"rotate_failed": "",
"rotate_process_failed": "",
"some_photos_failed": "",
"upload_failed": "",
"upload_success": "",
"uploading_photos": ""
},
"upload_photos": "Fotoğrafları Yükle",
"uploaded": ""
},
"selector": {
"no_results": "",
"placeholder": "",
"search_placeholder": ""
"upload_photos": "Fotoğrafları Yükle"
},
"view": {
"selectable": {
@@ -129,8 +82,7 @@
"headers": "Başlıklar",
"page": "Sayfa",
"rows_per_page": "Sayfa başına satır sayısı",
"table_settings": "Tablo Ayarları",
"view_item": ""
"table_settings": "Tablo Ayarları"
}
}
},
@@ -138,13 +90,7 @@
"create_modal": {
"label_description": "Etiket Açıklaması",
"label_name": "Etiket Adı",
"title": "Etiket oluştur",
"toast": {
"already_creating": "",
"create_failed": "",
"create_success": "",
"label_name_too_long": ""
}
"title": "Etiket oluştur"
},
"selector": {
"select_labels": "Etiketleri seçin"
@@ -154,12 +100,7 @@
"create_modal": {
"location_description": "Konum Açıklaması",
"location_name": "Konum Adı",
"title": "Konum oluştur",
"toast": {
"already_creating": "",
"create_failed": "",
"create_success": ""
}
"title": "Konum oluştur"
},
"selector": {
"no_location_found": "Konum bulunamadı",
@@ -187,8 +128,6 @@
"create_subitem": "Alt Öğe Oluştur",
"created": "Oluşturuldu",
"delete": "Sil",
"delete_confirm": "",
"demo_instance": "",
"details": "Detaylar",
"duplicate": "Kopyala",
"edit": "Düzenle",
@@ -203,7 +142,6 @@
"items": "Öğeler",
"join_discord": "Discord'a Katılın",
"labels": "Etiketler",
"loading": "",
"locations": "Konumlar",
"maintenance": "Bakım",
"name": "İsim",
@@ -211,14 +149,11 @@
"password": "Şifre",
"quantity": "Miktar",
"read_docs": "Dokümanları okuyun",
"return_home": "",
"save": "Kaydet",
"search": "Ara",
"sign_out": "Oturumu kapat",
"submit": "Gönder",
"unknown": "",
"update": "Güncelle",
"updating": "",
"value": "Değer",
"version": "Versiyon:{ version }",
"welcome": "Hoşgeldin, { username }"
@@ -243,49 +178,27 @@
"set_email": "E-posta adresiniz nedir?",
"set_name": "Adın ne?",
"set_password": "Şifrenizi belirleyin",
"tagline": "Eşyalarınızı Takip Edin, Düzenleyin ve Yönetin.",
"title": "",
"toast": {
"invalid_email": "",
"invalid_email_password": "",
"login_success": "",
"problem_registering": "",
"user_registered": ""
}
"tagline": "Eşyalarınızı Takip Edin, Düzenleyin ve Yönetin."
},
"items": {
"add": "Ekle",
"advanced": "İleri Seviye",
"archived": "Arşivlendi",
"asset_id": "Öğe Kimliği",
"associated_with_multiple": "",
"attachment": "Ek",
"attachments": "Ekler",
"changes_persisted_immediately": "Eklerde yapılan değişiklikler hemen kaydedilecektir",
"created_at": "Oluşturulma",
"custom_fields": "Özel Alanlar",
"delete_attachment_confirm": "",
"delete_item_confirm": "",
"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",
"edit": {
"edit_attachment_dialog": {
"attachment_title": "",
"attachment_type": "",
"primary_photo": "",
"primary_photo_sub": "",
"select_type": "",
"title": ""
}
},
"edit_details": "Detayları Düzenle",
"field_selector": "alan seçici",
"field_value": "Alan Değeri",
"first": "Birinci",
"include_archive": "Arşivlenen Öğeleri Dahil Et",
"insured": "Sigortalı",
"invalid_asset_id": "",
"last": "Son",
"lifetime_warranty": "Ömür Boyu Garanti",
"location": "Konum",
@@ -296,11 +209,8 @@
"name": "İsim",
"negate_labels": "Seçili Etiketleri Yoksay",
"next_page": "Sonraki Sayfa",
"no_attachments": "",
"no_results": "Öğe Bulunamadı",
"notes": "Notlar",
"only_with_photo": "",
"only_without_photo": "",
"options": "Seçenekler",
"order_by": "Sıralama ölçütü",
"pages": "Sayfa { page }/{ totalPages }",
@@ -318,88 +228,42 @@
"receipts": "Faturalar",
"reset_search": "Aramayı Sıfırla",
"results": "{ total } Sonuç",
"select_field": "",
"serial_number": "Seri Numarası",
"show_advanced_view_options": "Gelişmiş Seçenekleri Göster",
"sold_at": "Satıldığı Yer",
"sold_details": "Satış Detayları",
"sold_price": "Satış Fiyatı",
"sold_to": "Satılan Kişi",
"sync_child_locations": "",
"tip_1": "Konum ve etiket filtreleri 'veya' işlemini kullanır. Eğer birden fazla seçilirse sadece biri \neşleştirme için kullanılacaktır.",
"tip_2": "'#' ile başlayan aramalar bir varlık kimliğini sorgular (örneğin '#000-001')",
"tip_3": "Alan filtreleri 'VEYA' işlemini kullanır. Birden fazla seçenek seçilirse, eşleşme için yalnızca birinin \nkarşılanması yeterlidir.",
"tips": "İpuçları",
"tips_sub": "Arama İpuçları",
"toast": {
"asset_not_found": "",
"attachment_deleted": "",
"attachment_updated": "",
"attachment_uploaded": "",
"child_items_location_no_longer_synced": "",
"child_items_location_synced": "",
"child_location_desync": "",
"error_loading_parent_data": "",
"failed_adjust_quantity": "",
"failed_delete_attachment": "",
"failed_delete_item": "",
"failed_duplicate_item": "",
"failed_load_asset": "",
"failed_load_item": "",
"failed_load_items": "",
"failed_save": "",
"failed_save_no_location": "",
"failed_search_items": "",
"failed_update_attachment": "",
"failed_upload_attachment": "",
"item_deleted": "",
"item_saved": "",
"quantity_cannot_negative": "",
"sync_child_location": ""
},
"updated_at": "Güncellendiği Zaman",
"warranty": "Garanti",
"warranty_details": "Garanti Bilgileri",
"warranty_expires": "Garanti Bitiş Tarihi"
},
"labels": {
"label_delete_confirm": "",
"no_results": "Etiket Bulunamadı",
"toast": {
"failed_delete_label": "",
"failed_load_label": "",
"failed_update_label": "",
"label_deleted": "",
"label_updated": ""
},
"update_label": "Etiket Güncelle"
},
"languages": {
"ca": "Katalanca",
"cs-CZ": "",
"de": "Almanca",
"en": "İngilizce",
"es": "İspanyolca",
"fi-FI": "",
"fr": "Fransızca",
"hu": "Macarca",
"id-ID": "",
"it": "İtalyanca",
"ja-JP": "Japonca",
"ko-KR": "",
"lb-LU": "",
"lt-LT": "",
"nb-NO": "",
"nl": "Hollandaca",
"pl": "Lehçe",
"pt-BR": "Brezilya Portekizcesi",
"pt-PT": "Portekizce (Portekiz)",
"ru": "Rusça",
"sl": "Slovence",
"sq-AL": "",
"sv": "İsveççe",
"ta-IN": "",
"th-TH": "",
"tr": "Türkçe",
"uk-UA": "Ukraynaca",
"zh-CN": "Basitleştirilmiş Çince",
@@ -413,16 +277,7 @@
"locations": {
"child_locations": "Alt konumlar",
"collapse_tree": "Ağacı Daralt",
"expand_tree": "",
"location_items_delete_confirm": "",
"no_results": "Konum bulunamadı",
"toast": {
"failed_delete_location": "",
"failed_load_location": "",
"failed_update_location": "",
"location_deleted": "",
"location_updated": ""
},
"update_location": "Konumu Güncelle"
},
"maintenance": {
@@ -468,7 +323,6 @@
"locations": "Konumlar",
"maintenance": "Bakım",
"profile": "Profil",
"scanner": "",
"search": "Ara",
"tools": "Araçlar"
},
@@ -478,10 +332,7 @@
"currency_format": "Para Birimi Biçimi",
"current_password": "Mevcut Şifre",
"delete_account": "Hesabı Sil",
"delete_account_confirm": "",
"delete_account_sub": "Hesabınızı ve ona bağlı tüm verileri silin. Bu işlem geri alınamaz.",
"delete_notifier_confirm": "",
"display_legacy_header": "",
"enabled": "Etkinleştirildi",
"example": "Örnek",
"gen_invite": "Davet Bağlantısı Oluştur",
@@ -491,91 +342,35 @@
"language": "Dil",
"new_password": "Yeni Şifre",
"no_notifiers": "Yapılandırılmış bildirimci yok",
"no_override": "",
"notifier_modal": "{ type, select, true {Edit} false {Create} other {Other}} Bildirici",
"notifiers": "Bildirimde Bulunanlar",
"notifiers_sub": "Yaklaşan bakım hatırlatmaları için bildirimler alın",
"override_locale": "",
"test": "Test",
"theme_settings": "Tema Ayarları",
"theme_settings_sub": "Tema ayarları tarayıcınızın yerel depolama alanında saklanır. Temayı istediğiniz zaman değiştirebilirsiniz. \nTemanızı ayarlamakta sorun yaşıyorsanız, tarayıcınızı yenilemeyi deneyin.",
"toast": {
"account_deleted": "",
"failed_change_password": "",
"failed_create_notifier": "",
"failed_delete_account": "",
"failed_delete_notifier": "",
"failed_get_currencies": "",
"failed_test_notifier": "",
"failed_update_group": "",
"failed_update_notifier": "",
"group_updated": "",
"notifier_test_success": "",
"password_changed": ""
},
"update_group": "Grubu Güncelle",
"update_language": "Dili Güncelle",
"url": "URL",
"user_profile": "Kullanıcı Profili",
"user_profile_sub": "Kullanıcıları davet edin ve hesabınızı yönetin."
},
"reports": {
"label_generator": {
"asset_end": "",
"asset_start": "",
"base_url": "",
"bordered_labels": "",
"generate_page": "",
"input_placeholder": "",
"instruction_1": "",
"instruction_2": "",
"instruction_3": "",
"label_height": "",
"label_width": "",
"measure_type": "",
"page_bottom_padding": "",
"page_height": "",
"page_left_padding": "",
"page_right_padding": "",
"page_top_padding": "",
"page_width": "",
"qr_code_example": "",
"tip_1": "",
"tip_2": "",
"tip_3": "",
"tips": "",
"title": "",
"toast": {
"page_too_small_card": ""
}
}
},
"scanner": {
"error": "",
"invalid_url": "",
"no_sources": "",
"permission_denied": "Kamera izni reddedildi, lütfen tarayıcı ayarlarınızda kameraya erişime izin verin",
"select_video_source": "",
"title": "",
"unsupported": ""
"permission_denied": "Kamera izni reddedildi, lütfen tarayıcı ayarlarınızda kameraya erişime izin verin"
},
"tools": {
"actions": "Envanter İşlemleri",
"actions_set": {
"ensure_ids": "Varlık Kimliklerini Sağlayın",
"ensure_ids_button": "Varlık Kimliklerini Sağlayın",
"ensure_ids_confirm": "",
"ensure_ids_sub": "Envanterinizdeki tüm öğelerin geçerli bir asset_id alanına sahip olmasını sağlar. Bu, veritabanındaki en yüksek mevcut asset_id alanını bulup, ayarlanmamış asset_id alanına sahip her öğeye bir sonraki değeri uygulayarak yapılır. Bu işlem, created_at alanına göre sıralanarak gerçekleştirilir.",
"ensure_import_refs": "İçe Aktarma Referanslarını Sağlayın",
"ensure_import_refs_button": "İçe Aktarma Referanslarını Sağlayın",
"ensure_import_refs_sub": "Envanterinizdeki tüm öğelerin geçerli bir import_ref alanına sahip olmasını sağlar. Bu, ayarlanmamış import_ref alanına sahip her öğe için rastgele 8 karakterli bir dize oluşturarak yapılır.",
"set_primary_photo": "Ana Fotoğrafı Ayarla",
"set_primary_photo_button": "Ana Fotoğrafı Ayarla",
"set_primary_photo_confirm": "",
"set_primary_photo_sub": "Homebox'un v0.10.0 sürümünde, fotoğraf türündeki ekler için birincil görüntü alanı eklendi. Bu işlem, veritabanındaki ekler dizisindeki ilk görüntüyü, eğer zaten ayarlanmamışsa, birincil görüntü alanı olarak ayarlayacaktır. '<a class=\"link\" href=\"https://github.com/hay-kot/homebox/pull/576\">'GitHub #576'yı Gör'</a>",
"zero_datetimes": "Sıfır Öğesi Tarih Saatleri",
"zero_datetimes_button": "Sıfır Öğe Tarih Saatleri",
"zero_datetimes_confirm": "",
"zero_datetimes_sub": "Tarih saat alanlarındaki tüm zaman değerlerini en baştaki tarihe sıfırlar. Bu, sitenin geliştirilmesi sırasında erken aşamalarda ortaya çıkan ve zaman değerinin saklanmasına neden olan bir hatayı düzeltmek içindir; bu da tarih alanlarının doğru değerler göstermesinde sorunlara yol açıyordu. '<a class=\"link\" href=\"https://github.com/hay-kot/homebox/issues/236\" target=\"_blank\">'Daha fazla bilgi için Github Sorunu #236'ya Bakın.'</a>'"
},
"actions_sub": "Envanterinize toplu olarak işlemler uygulayın. Bu işlemler geri alınamaz. '<b>'Dikkatli olun.'</b>",
@@ -586,7 +381,6 @@
"export_sub": "Homebox için standart CSV formatını dışa aktarır. Bu, envanterinizdeki tüm öğeleri dışa aktaracaktır.",
"import": "Envanteri İçe Aktar",
"import_button": "Envanteri İçe Aktar",
"import_ref_confirm": "",
"import_sub": "Homebox için standart CSV formatını içe aktarır. '<code>'HB.import_ref'</code>' sütunu olmadan, bu mevcut envanterinizdeki herhangi bir öğeyi '<b>'üzerine yazmaz'</b>', yalnızca yeni öğeler ekler. '<code>'HB.import_ref'</code>' sütununa sahip satırlar, varsa aynı import_ref'e sahip mevcut öğelerle birleştirilir."
},
"import_export_sub": "Envanterinizi bir CSV dosyasına içe ve dışa aktarın. Bu, envanterinizi yeni bir Homebox örneğine taşımak için faydalıdır.",
@@ -599,13 +393,6 @@
"bill_of_materials_button": "Malzeme Listesi Oluştur",
"bill_of_materials_sub": "Bir elektronik tablo programına içe aktarılabilen bir CSV (Virgülle Ayrılmış Değerler) dosyası oluşturur. Bu, envanterinizin temel öğe ve fiyat bilgileriyle birlikte bir özetidir."
},
"reports_sub": "Envanteriniz için farklı raporlar oluşturun.",
"toast": {
"asset_success": "",
"failed_ensure_ids": "",
"failed_ensure_import_refs": "",
"failed_set_primary_photos": "",
"failed_zero_datetimes": ""
}
"reports_sub": "Envanteriniz için farklı raporlar oluşturun."
}
}

View File

@@ -1,20 +1,10 @@
{
"components": {
"app": {
"create_modal": {
"createAndAddAnother": "",
"enter": "",
"shift": ""
},
"import_dialog": {
"change_warning": "Поведінка для імпорту з існуючим параметром import_refs змінилася. Якщо цей параметр присутній у CSV файлі, \nпредмет буде оновлений значеннями з CSV.",
"description": "Імпортувати CSV файл з предметами, мітками і локаціями. Зверніться до документації за\nдодатковою інформацією по формату.",
"title": "Імпортувати .CSV",
"toast": {
"import_failed": "",
"import_success": "",
"please_select_file": ""
}
"title": "Імпортувати .CSV"
},
"outdated": {
"current_version": "Поточна версія",
@@ -24,11 +14,6 @@
"new_version_available_link": "Натисніть тут, щоб переглянути примітки до випуску"
}
},
"form": {
"password": {
"toggle_show": ""
}
},
"global": {
"copy_text": {
"documentation": "документація",
@@ -66,12 +51,7 @@
"download": "Завантажити ярлик",
"print": "Друкована етикетка",
"server_print": "Друк на сервері",
"titles": "Етикетка",
"toast": {
"load_status_failed": "",
"print_failed": "",
"print_success": ""
}
"titles": "Етикетка"
},
"page_qr_code": {
"page_url": "URL сторінки",
@@ -82,41 +62,13 @@
}
},
"item": {
"attachments_list": {
"download": "",
"open_new_tab": ""
},
"create_modal": {
"delete_photo": "",
"item_description": "Опис елемента",
"item_name": "Назва елемента",
"item_photo": "Фотографія товару 📷",
"item_quantity": "Кількість товару",
"parent_item": "",
"rotate_photo": "",
"set_as_primary_photo": "",
"title": "Додати предмет",
"toast": {
"already_creating": "",
"create_failed": "",
"create_success": "",
"failed_load_parent": "",
"no_canvas_support": "",
"please_select_location": "",
"rotate_failed": "",
"rotate_process_failed": "",
"some_photos_failed": "",
"upload_failed": "",
"upload_success": "",
"uploading_photos": ""
},
"upload_photos": "Завантажувати фотографії",
"uploaded": ""
},
"selector": {
"no_results": "",
"placeholder": "",
"search_placeholder": ""
"upload_photos": "Завантажувати фотографії"
},
"view": {
"selectable": {
@@ -129,8 +81,7 @@
"headers": "Заголовок",
"page": "Сторінка",
"rows_per_page": "Рядків на сторінці",
"table_settings": "Налаштування таблиці",
"view_item": ""
"table_settings": "Налаштування таблиці"
}
}
},
@@ -138,13 +89,7 @@
"create_modal": {
"label_description": "Опис мітки",
"label_name": "Назва мітки",
"title": "Створити наліпку",
"toast": {
"already_creating": "",
"create_failed": "",
"create_success": "",
"label_name_too_long": ""
}
"title": "Створити наліпку"
},
"selector": {
"select_labels": "Виберіть ярлики"
@@ -154,12 +99,7 @@
"create_modal": {
"location_description": "Опис місця",
"location_name": "Назва місця",
"title": "Створити локацію",
"toast": {
"already_creating": "",
"create_failed": "",
"create_success": ""
}
"title": "Створити локацію"
},
"selector": {
"no_location_found": "Місцезнаходження не знайдено",
@@ -184,11 +124,8 @@
"confirm": "Зберегти",
"create": "Створити",
"create_and_add": "Створити і додати ще один",
"create_subitem": "",
"created": "Створено",
"delete": "Видалити",
"delete_confirm": "",
"demo_instance": "",
"details": "Подробиці",
"duplicate": "Дублювати",
"edit": "Редагувати",
@@ -203,7 +140,6 @@
"items": "Предмети",
"join_discord": "Доєднатися до Discord",
"labels": "Наліпки",
"loading": "",
"locations": "Локації",
"maintenance": "Технічне обслуговування",
"name": "Ім'я",
@@ -211,14 +147,11 @@
"password": "Пароль",
"quantity": "Кількість",
"read_docs": "Переглянути документацію",
"return_home": "",
"save": "Зберегти",
"search": "Пошук",
"sign_out": "Вийти",
"submit": "Підтвердити",
"unknown": "",
"update": "Оновити",
"updating": "",
"value": "Значення",
"version": "Версія: { version }",
"welcome": "Вітаю, { username }"
@@ -243,49 +176,27 @@
"set_email": "Який ваш e-mail?",
"set_name": "Як вас звуть?",
"set_password": "Оберіть пароль",
"tagline": "Слідкуйте, організуйте і керуйте своїми предметами.",
"title": "",
"toast": {
"invalid_email": "",
"invalid_email_password": "",
"login_success": "",
"problem_registering": "",
"user_registered": ""
}
"tagline": "Слідкуйте, організуйте і керуйте своїми предметами."
},
"items": {
"add": "Додати",
"advanced": "Розширено",
"archived": "Архівовано",
"asset_id": "ID активу",
"associated_with_multiple": "",
"attachment": "Вкладення",
"attachments": "Вкладення",
"changes_persisted_immediately": "Зміни до вкладень будуть збережені одразу",
"created_at": "Створено о",
"custom_fields": "Власні поля",
"delete_attachment_confirm": "",
"delete_item_confirm": "",
"description": "Опис",
"details": "Подробиці",
"drag_and_drop": "Перетягніть файли сюди або клацніть, щоб вибрати файли",
"edit": {
"edit_attachment_dialog": {
"attachment_title": "",
"attachment_type": "",
"primary_photo": "",
"primary_photo_sub": "",
"select_type": "",
"title": ""
}
},
"edit_details": "Редагувати деталі",
"field_selector": "Обрати поле",
"field_value": "Значення поля",
"first": "Перший",
"include_archive": "Включити заархівовані предмети",
"insured": "Застраховано",
"invalid_asset_id": "",
"last": "Останній",
"lifetime_warranty": "Довічна гарантія",
"location": "Місце",
@@ -296,7 +207,6 @@
"name": "Назва",
"negate_labels": "Відмінити обрані мітки",
"next_page": "Наступна сторінка",
"no_attachments": "",
"no_results": "Предметів нема",
"notes": "Примітки",
"only_with_photo": "Тільки товари з фотографією",
@@ -318,60 +228,24 @@
"receipts": "Чеки",
"reset_search": "Скинути пошук",
"results": "{ total } Результатів",
"select_field": "",
"serial_number": "Серійний номер",
"show_advanced_view_options": "Показати розширені параметри",
"sold_at": "Продано за",
"sold_details": "Деталі продажу",
"sold_price": "Ціна продажу",
"sold_to": "Покупець",
"sync_child_locations": "",
"tip_1": "Фільтри по локації і міткам використовують операцію \"АБО\". Якщо більше одного обрано, тільки один\nз них має співпасти для виводу результату.",
"tip_2": "Пошуки, що починаються з \"#\" будуть шукати за ID предмета (наприклад, \"#000-001\")",
"tip_3": "Пошук в полях використовує операцію \"АБО\". Якщо більше одного задіяно, достатньо буде \nспівпасти лише одному для виводу результату.",
"tips": "Підказки",
"tips_sub": "Підказки щодо пошуку",
"toast": {
"asset_not_found": "",
"attachment_deleted": "",
"attachment_updated": "",
"attachment_uploaded": "",
"child_items_location_no_longer_synced": "",
"child_items_location_synced": "",
"child_location_desync": "",
"error_loading_parent_data": "",
"failed_adjust_quantity": "",
"failed_delete_attachment": "",
"failed_delete_item": "",
"failed_duplicate_item": "",
"failed_load_asset": "",
"failed_load_item": "",
"failed_load_items": "",
"failed_save": "",
"failed_save_no_location": "",
"failed_search_items": "",
"failed_update_attachment": "",
"failed_upload_attachment": "",
"item_deleted": "",
"item_saved": "",
"quantity_cannot_negative": "",
"sync_child_location": ""
},
"updated_at": "Оновлено",
"warranty": "Гарантія",
"warranty_details": "Деталі гарантії",
"warranty_expires": "Гарантія закінчується"
},
"labels": {
"label_delete_confirm": "",
"no_results": "Мітки не знайдено",
"toast": {
"failed_delete_label": "",
"failed_load_label": "",
"failed_update_label": "",
"label_deleted": "",
"label_updated": ""
},
"update_label": "Оновити мітку"
},
"languages": {
@@ -387,8 +261,6 @@
"it": "Італійська",
"ja-JP": "Японська",
"ko-KR": "Корейський",
"lb-LU": "",
"lt-LT": "",
"nb-NO": "Норвезький Бокмол",
"nl": "Голландський",
"pl": "Польська мова",
@@ -414,15 +286,7 @@
"child_locations": "Вкладені місця",
"collapse_tree": "Згорнути дерево",
"expand_tree": "Розгорнути дерево",
"location_items_delete_confirm": "",
"no_results": "Локації відсутні",
"toast": {
"failed_delete_location": "",
"failed_load_location": "",
"failed_update_location": "",
"location_deleted": "",
"location_updated": ""
},
"update_location": "Оновити місце"
},
"maintenance": {
@@ -478,10 +342,7 @@
"currency_format": "Формат валюти",
"current_password": "Поточний пароль",
"delete_account": "Видалити обліковий запис",
"delete_account_confirm": "",
"delete_account_sub": "Видалити акаунт і всі пов'язані дані. Це невідворотна дія.",
"delete_notifier_confirm": "",
"display_legacy_header": "",
"enabled": "Включено",
"example": "Приклад",
"gen_invite": "Створити посилання для запрошення",
@@ -491,70 +352,22 @@
"language": "Мова",
"new_password": "Новий пароль",
"no_notifiers": "Немає налаштованих сповіщувачів",
"no_override": "",
"notifier_modal": "{ type, select, true {Edit} false {Create} other {Other}} Сповіщувач",
"notifiers": "Сповіщувачі",
"notifiers_sub": "Отримувати сповіщення про майбутнє технічне обслуговування",
"override_locale": "",
"test": "Тест",
"theme_settings": "Налаштування Теми",
"theme_settings_sub": "Налаштування теми зберігаються в локальному сховищі вашого браузера. Ви можете змінити тему в будь-який момент. Якщо\nзберегти не вдається, спробуйте оновити сторінку (Ctrl+F5).",
"toast": {
"account_deleted": "",
"failed_change_password": "",
"failed_create_notifier": "",
"failed_delete_account": "",
"failed_delete_notifier": "",
"failed_get_currencies": "",
"failed_test_notifier": "",
"failed_update_group": "",
"failed_update_notifier": "",
"group_updated": "",
"notifier_test_success": "",
"password_changed": ""
},
"update_group": "Оновити групу",
"update_language": "Оновлення мови",
"url": "URL-адреса",
"user_profile": "Профіль користувача",
"user_profile_sub": "Запросіть користувачів і керуйте своїм обліковим записом."
},
"reports": {
"label_generator": {
"asset_end": "",
"asset_start": "",
"base_url": "",
"bordered_labels": "",
"generate_page": "",
"input_placeholder": "",
"instruction_1": "",
"instruction_2": "",
"instruction_3": "",
"label_height": "",
"label_width": "",
"measure_type": "",
"page_bottom_padding": "",
"page_height": "",
"page_left_padding": "",
"page_right_padding": "",
"page_top_padding": "",
"page_width": "",
"qr_code_example": "",
"tip_1": "",
"tip_2": "",
"tip_3": "",
"tips": "",
"title": "",
"toast": {
"page_too_small_card": ""
}
}
},
"scanner": {
"error": "Під час сканування сталася помилка",
"invalid_url": "Неправильна URL-адреса штрих-коду",
"no_sources": "Немає доступних джерел відео",
"permission_denied": "",
"select_video_source": "Виберіть джерело відео",
"title": "Сканер",
"unsupported": "API медіапотоку не підтримується без HTTPS"
@@ -564,18 +377,15 @@
"actions_set": {
"ensure_ids": "Перевірити наявність ID",
"ensure_ids_button": "Перевірити наявність ID",
"ensure_ids_confirm": "",
"ensure_ids_sub": "Перевіряє усі ваші предмети на наявність вірного asset_id поля. Цей процес полягає в пошуці найбільшого значення asset_id у базі даних, і присвоєння настпупного за ним значення кожному предмету без asset_id. Процес йде по порядку поля created_at.",
"ensure_import_refs": "Присвоїти дані іморту",
"ensure_import_refs_button": "Присвоїти дані імпорту",
"ensure_import_refs_sub": "Запевнитись, що всі предмети у вашій базі мають коректне поле import_ref. Для цього кожен предмет без встановленого import_ref отримає в це поле строку з восьми випадкових літер.",
"set_primary_photo": "Встановити основну фотографію",
"set_primary_photo_button": "Встановити основну фотографію",
"set_primary_photo_confirm": "",
"set_primary_photo_sub": "У версії v0.10.0 Homebox до вкладень типу photo було додано поле зображення. Ця дія встановить основною фотографією першу картинку, що ви додали до предметів, якщо вона ще не встановлена. '<a class=\"link\" href=\"https://github.com/hay-kot/homebox/pull/576\">'Див. GitHub PR #576'</a>'",
"zero_datetimes": "Обнулити дати предметів",
"zero_datetimes_button": "Обнулити дати предметів",
"zero_datetimes_confirm": "",
"zero_datetimes_sub": "Ця клавіша скидає значення \"час\" для усіх полів типу \"дата\" у списку ваших предметів. Користуйтеся для виправлення багу, що був доданий на початку розробки, і який псував збереження часу, що призводило до некоректного відображення.'<a class=\"link\" href=\"https://github.com/hay-kot/homebox/issues/236\" target=\"_blank\">'Більше даних на GitHub, #236 проблема.'</a>'"
},
"actions_sub": "Дії для роботи з усіма предметами одразу. Процес незворотній.'<b>'Будьте обережні.'</b>'",
@@ -586,7 +396,6 @@
"export_sub": "Експортувати у стандартному для HomeBox форматі. Це виведе у файл усі предмети з інвентара.",
"import": "Імпортувати інвентар",
"import_button": "Імпортувати інвентар",
"import_ref_confirm": "",
"import_sub": "Імпортувати у стандартному форматі для HomeBox .CSV-файл.Без '<code>'HB.import_ref'</code>' колонки, це '<b>не'</b>' перезапише ніякі предмети в інвентарі, лише додасть нові. Рядки з параметром '<code>'HB.import_ref'</code>' будуть злиті з існуючими предметами, якщо такі наявні і import_ref поле співпадає."
},
"import_export_sub": "Імпортувати і експортувати ваш інвентар у форматі .CSV. Це корисно для переносу інвентара на нову інсталяцію HomeBox.",
@@ -599,13 +408,6 @@
"bill_of_materials_button": "Згенерувати звіт",
"bill_of_materials_sub": "Створити .CSV файл, який можна імпортувати у відповідну програму (Excel, Spreadsheets, т.д.). Це буде повний звіт з описом усіх доданих предметів."
},
"reports_sub": "Створити різноманітні звіти по вашим предметам.",
"toast": {
"asset_success": "",
"failed_ensure_ids": "",
"failed_ensure_import_refs": "",
"failed_set_primary_photos": "",
"failed_zero_datetimes": ""
}
"reports_sub": "Створити різноманітні звіти по вашим предметам."
}
}

View File

@@ -0,0 +1,52 @@
{
"components": {
"app": {
"import_dialog": {
"title": "Nhập tệp CSV",
"toast": {
"import_failed": "Nhập thất bại. Xin hãy thử lại sau.",
"import_success": "Nhập thành công!",
"please_select_file": "Xin hãy chọn tệp cần nhập."
}
},
"outdated": {
"current_version": "Phiên bản hiện tại",
"latest_version": "Phiên bản mới nhất",
"new_version_available": "Đã có phiên bản mới"
}
},
"color_selector": {
"color": "Màu",
"randomize": "Màu ngẫu nhiên"
},
"global": {
"date_time": {
"ago": "{0} trước",
"days": "ngày",
"hour": "giờ",
"hours": "giờ",
"last-month": "tháng trước",
"last-week": "tuần trước",
"last-year": "năm trước",
"minute": "phút",
"minutes": "phút",
"months": "tháng",
"next-month": "tháng tới",
"next-week": "tuần tới",
"next-year": "năm tới",
"second": "giây",
"seconds": "giây",
"tomorrow": "ngày mai",
"week": "tuần",
"weeks": "tuần",
"years": "năm",
"yesterday": "hôm qua"
}
},
"item": {
"create_modal": {
"delete_photo": "Xóa Ảnh"
}
}
}
}

View File

@@ -2,7 +2,7 @@
"components": {
"app": {
"create_modal": {
"createAndAddAnother": "使用{shiftKey}+{enterKey}创建并添加另一个。",
"createAndAddAnother": "使用{shiftKey} + {enterKey}创建并添加另一个。",
"enter": "Enter",
"shift": "Shift"
},
@@ -27,8 +27,8 @@
"color_selector": {
"clear": "清除颜色",
"color": "颜色",
"no_color": "透明",
"no_color_selected": "当前透明",
"no_color": "没有颜色",
"no_color_selected": "尚未选择任何颜色",
"randomize": "随机颜色"
},
"form": {
@@ -101,29 +101,29 @@
"item_quantity": "物品数量",
"parent_item": "父项目",
"rotate_photo": "旋转照片",
"set_as_primary_photo": "设置为{isPrimary, select, true {非} false {} other {}}主照片",
"set_as_primary_photo": "设置为{isPrimary, select, true {非} false {} other {}}封面",
"title": "创建物品",
"toast": {
"already_creating": "已创建物品",
"create_failed": "无法创建物品",
"create_success": "物品创建成功",
"failed_load_parent": "加载父级物品失败-请手动选择",
"already_creating": "已创建项目",
"create_failed": "无法创建项目",
"create_success": "项目创建成功",
"failed_load_parent": "加载父失败-请手动选择",
"no_canvas_support": "您的浏览器不支持Canvas操作",
"please_select_location": "请选择位置",
"please_select_location": "请选择位置",
"rotate_failed": "旋转图片失败:{ error }",
"rotate_process_failed": "处理已旋转图片失败",
"some_photos_failed": "{count, plural, =0 {无照片上传.} =1 {一张照片上传失败.} other {多张照片上传失败.}}",
"upload_failed": "上传照片失败:{ photoName }",
"upload_success": "{count, plural, =0 {未上传照片} =1 {照片上传成功} other {所有照片上传成功}}",
"uploading_photos": ""
"uploading_photos": "{count, plural, =0 {没有照片要上传} =1 {正上传 1 张照片…} other {正上传 {count} 照片…}}"
},
"upload_photos": "上传照片",
"uploaded": "照片已上传"
},
"selector": {
"no_results": "返回为空",
"placeholder": "选择...",
"search_placeholder": "输入搜索..."
"placeholder": "选择",
"search_placeholder": "输入搜索"
},
"view": {
"selectable": {
@@ -137,7 +137,7 @@
"page": "页",
"rows_per_page": "每页行数",
"table_settings": "表格设置",
"view_item": "查看物品"
"view_item": "查看项目"
}
}
},
@@ -166,7 +166,7 @@
"toast": {
"already_creating": "正在创建位置",
"create_failed": "无法创建位置",
"create_success": "创建位置失败"
"create_success": "创建位置"
}
},
"selector": {
@@ -176,7 +176,7 @@
"select_location": "选择一个位置"
},
"tree": {
"no_locations": "没有可用的位置。请添加新的位置\n `<`span class=\"link-primary\"`>`创建`<`/span`>` 按钮在导航栏上"
"no_locations": "没有可用的位置。请添加新的位置\n'<span class=\"link-primary\">'创建'</span>' 按钮在导航栏上."
}
},
"quick_menu": {
@@ -195,23 +195,23 @@
"create_subitem": "创建子项目",
"created": "已创建",
"delete": "刪除",
"delete_confirm": "",
"demo_instance": "",
"delete_confirm": "是否确定要删除此项目? ",
"demo_instance": "这是一个演示实例",
"details": "详情",
"duplicate": "复制",
"edit": "修改",
"email": "邮箱",
"follow_dev": "关注开发者",
"footer": {
"api_link": "",
"version_link": ""
"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 } 构建号: { build } '</a>'"
},
"github": "Github项目",
"insured": "",
"insured": "已投保",
"items": "物品",
"join_discord": "加入Discord讨论",
"labels": "标签",
"loading": "",
"loading": "加载中…",
"locations": "位置",
"maintenance": "维护",
"name": "名称",
@@ -219,14 +219,14 @@
"password": "密码",
"quantity": "数量",
"read_docs": "查阅文档",
"return_home": "",
"return_home": "回到主页",
"save": "保存",
"search": "搜索",
"sign_out": "登出",
"submit": "提交",
"unknown": "",
"unknown": "未知",
"update": "更新",
"updating": "",
"updating": "更新中",
"value": "值",
"version": "版本:{version}",
"welcome": "欢迎,{username}"
@@ -252,13 +252,13 @@
"set_name": "你的名称叫什么?",
"set_password": "设置密码",
"tagline": "跟踪、整理和管理您的物品。",
"title": "",
"title": "整理和标记您的内容",
"toast": {
"invalid_email": "",
"invalid_email_password": "",
"login_success": "",
"problem_registering": "",
"user_registered": ""
"invalid_email": "电子邮件地址无效",
"invalid_email_password": "电子邮箱或密码无效",
"login_success": "已成功登录",
"problem_registering": "注册用户时出现问题",
"user_registered": "用户已注册"
}
},
"items": {
@@ -266,25 +266,25 @@
"advanced": "进阶",
"archived": "已归档",
"asset_id": "资产ID",
"associated_with_multiple": "",
"associated_with_multiple": "此资产ID与多个项目相关联",
"attachment": "附件",
"attachments": "附件",
"changes_persisted_immediately": "对附件的更改将会立即保存",
"created_at": "创建于",
"custom_fields": "自定义字段",
"delete_attachment_confirm": "",
"delete_item_confirm": "",
"delete_attachment_confirm": "您确定要删除此附件吗?",
"delete_item_confirm": "您确定要删除此项目?",
"description": "说明",
"details": "详情",
"drag_and_drop": "将文件拖拽到此或点击添加文件",
"edit": {
"edit_attachment_dialog": {
"attachment_title": "",
"attachment_type": "",
"primary_photo": "",
"primary_photo_sub": "",
"select_type": "",
"title": ""
"attachment_title": "附件标题",
"attachment_type": "附件类型",
"primary_photo": "封面",
"primary_photo_sub": "此项仅适用于照片。只有一张可以设为封面。如果选择此选项,若有,则当前封面将被替换。",
"select_type": "选择类型",
"title": "附件编辑"
}
},
"edit_details": "编辑详情",
@@ -293,7 +293,7 @@
"first": "第一页",
"include_archive": "包括已存档的项目",
"insured": "保险",
"invalid_asset_id": "",
"invalid_asset_id": "无效的资产ID",
"last": "最后一页",
"lifetime_warranty": "包含终身保修",
"location": "位置",
@@ -304,7 +304,7 @@
"name": "名称",
"negate_labels": "取消选中的标签",
"next_page": "下一页",
"no_attachments": "",
"no_attachments": "没有找到附件",
"no_results": "没有可显示的物品",
"notes": "笔记",
"only_with_photo": "只包含带有照片的物品",
@@ -326,44 +326,44 @@
"receipts": "单据",
"reset_search": "重置搜索",
"results": "{ total } 条结果",
"select_field": "",
"select_field": "选择字段",
"serial_number": "序列号",
"show_advanced_view_options": "显示高级选项",
"sold_at": "出售日期",
"sold_details": "售出详情",
"sold_price": "出售价格",
"sold_to": "出售对象",
"sync_child_locations": "",
"sync_child_locations": "同步子项目的位置",
"tip_1": "位置和标签过滤器使用“或”操作。如果选择了多个位置或标签,\n则只需要任意一个匹配上即可。",
"tip_2": "以“#”为前缀的搜索将变成查询资产ID例如“#000-001” ",
"tip_3": "字段过滤器使用“或”操作。如果选择了多个位置或标签,\n则只需要任意一个匹配上即可。",
"tips": "建议",
"tips_sub": "搜索提示",
"toast": {
"asset_not_found": "",
"attachment_deleted": "",
"attachment_updated": "",
"attachment_uploaded": "",
"child_items_location_no_longer_synced": "",
"child_items_location_synced": "",
"child_location_desync": "",
"error_loading_parent_data": "",
"failed_adjust_quantity": "",
"failed_delete_attachment": "",
"failed_delete_item": "",
"failed_duplicate_item": "",
"failed_load_asset": "",
"failed_load_item": "",
"failed_load_items": "",
"failed_save": "",
"failed_save_no_location": "",
"failed_search_items": "",
"failed_update_attachment": "",
"failed_upload_attachment": "",
"item_deleted": "",
"item_saved": "",
"quantity_cannot_negative": "",
"sync_child_location": ""
"asset_not_found": "未找到资产",
"attachment_deleted": "附件已删除",
"attachment_updated": "附件已更新",
"attachment_uploaded": "附件已上传",
"child_items_location_no_longer_synced": "子项目的位置将不再与此项目同步。",
"child_items_location_synced": "子项目的位置已与此项目同步",
"child_location_desync": "更改位置将使其与父位置脱离同步",
"error_loading_parent_data": "尝试加载父级数据时出错",
"failed_adjust_quantity": "调整数量失败",
"failed_delete_attachment": "删除附件失败",
"failed_delete_item": "无法删除项目",
"failed_duplicate_item": "复制项目失败",
"failed_load_asset": "加载资产失败",
"failed_load_item": "加载项目失败",
"failed_load_items": "加载项目失败",
"failed_save": "保存项目失败",
"failed_save_no_location": "保存项目失败:未选择位置",
"failed_search_items": "搜索项目失败",
"failed_update_attachment": "更新附件失败",
"failed_upload_attachment": "无法上传附件",
"item_deleted": "项目已删除",
"item_saved": "项目已保存",
"quantity_cannot_negative": "数量不能为负",
"sync_child_location": "所选的父项会将其所有子项的位置同步到同一位置。位置已更新。"
},
"updated_at": "更新于",
"warranty": "保修",
@@ -371,14 +371,14 @@
"warranty_expires": "保修持续到"
},
"labels": {
"label_delete_confirm": "",
"label_delete_confirm": "确定删除此标签吗?此操作无法撤回。",
"no_results": "未找到标签",
"toast": {
"failed_delete_label": "",
"failed_load_label": "",
"failed_update_label": "",
"label_deleted": "",
"label_updated": ""
"failed_delete_label": "删除标签失败",
"failed_load_label": "加载标签失败",
"failed_update_label": "更新标签失败",
"label_deleted": "已删除标签",
"label_updated": "标签已更新"
},
"update_label": "更新标签"
},
@@ -422,14 +422,14 @@
"child_locations": "子位置",
"collapse_tree": "折叠树",
"expand_tree": "展开树",
"location_items_delete_confirm": "",
"location_items_delete_confirm": "您确定要删除此位置及其所有项目吗?此操作无法撤回。",
"no_results": "找不到位置",
"toast": {
"failed_delete_location": "",
"failed_load_location": "",
"failed_update_location": "",
"location_deleted": "",
"location_updated": ""
"failed_delete_location": "无法删除位置",
"failed_load_location": "无法加载位置",
"failed_update_location": "无法更新位置",
"location_deleted": "已删除位置",
"location_updated": "已更新位置"
},
"update_location": "更新位置"
},
@@ -486,10 +486,10 @@
"currency_format": "货币格式",
"current_password": "原密码",
"delete_account": "删除帐户",
"delete_account_confirm": "",
"delete_account_confirm": "您确定要删除您的账号吗?如果您是群组中的最后一位成员,您的所有数据都将被删除。且此操作是无法撤回的。",
"delete_account_sub": "删除您的帐户及其所有相关数据。这是无法撤消的。",
"delete_notifier_confirm": "",
"display_legacy_header": "",
"delete_notifier_confirm": "您确定要删除此通知器吗?",
"display_legacy_header": "{currentValue, select, true {禁用旧版标头} false {启用旧版标头} other {未命中}}",
"enabled": "已启用",
"example": "例子",
"gen_invite": "生成邀请链接",
@@ -498,7 +498,7 @@
"inactive": "未启用",
"language": "语言",
"new_password": "新密码",
"no_notifiers": "未配置通知程序",
"no_notifiers": "未配置通知",
"no_override": "没有预算",
"notifier_modal": "{ type, select, true {编辑} false {创建} other {Other}} 通知器",
"notifiers": "通知器",
@@ -508,18 +508,18 @@
"theme_settings": "主题设置",
"theme_settings_sub": "主题设置存储在浏览器的本地存储中。您可以随时更改主题。\n如果您在设置主题时遇到问题请尝试刷新浏览器。",
"toast": {
"account_deleted": "",
"failed_change_password": "",
"failed_create_notifier": "",
"failed_delete_account": "",
"failed_delete_notifier": "",
"failed_get_currencies": "",
"failed_test_notifier": "",
"failed_update_group": "",
"failed_update_notifier": "",
"group_updated": "",
"notifier_test_success": "",
"password_changed": ""
"account_deleted": "您的账户已删除。",
"failed_change_password": "无法更改密码。",
"failed_create_notifier": "创建通知器失败。",
"failed_delete_account": "无法删除您的账号。",
"failed_delete_notifier": "无法删除通知器。",
"failed_get_currencies": "获取币种失败",
"failed_test_notifier": "测试通知器失败。",
"failed_update_group": "更新群组失败",
"failed_update_notifier": "更新通知器失败。",
"group_updated": "已更新群组",
"notifier_test_success": "通知器测试成功。",
"password_changed": "已成功修改密码。"
},
"update_group": "更新组",
"update_language": "更新语言",
@@ -529,32 +529,32 @@
},
"reports": {
"label_generator": {
"asset_end": "",
"asset_start": "",
"base_url": "",
"bordered_labels": "",
"generate_page": "",
"input_placeholder": "",
"instruction_1": "",
"instruction_2": "",
"instruction_3": "",
"label_height": "",
"label_width": "",
"measure_type": "",
"page_bottom_padding": "",
"page_height": "",
"page_left_padding": "",
"page_right_padding": "",
"page_top_padding": "",
"page_width": "",
"qr_code_example": "",
"tip_1": "",
"tip_2": "",
"tip_3": "",
"tips": "",
"title": "",
"asset_end": "结束编号",
"asset_start": "开始编号",
"base_url": "默认地址",
"bordered_labels": "标签边框",
"generate_page": "生成标签页",
"input_placeholder": "在此输入",
"instruction_1": "Homebox 标签生成器是一款用于帮助您为 Homebox 库存打印标签的工具。旨在用于\n预先打印标签这样您就可以一次性打印出多张标签随时备用并贴在物品上",
"instruction_2": "因此,这些标签的工作方式是在标签上打印一个 URL 的二维码以及资产ID信息。\n如果您在Homebox设置中禁用了资产ID您仍然可以使用此工具但这些资产编号将不会对应任何物品",
"instruction_3": "此功能处于早期开发阶段,可能会在未来版本中发生变化,如果您有反馈,请\n在“<a href=\"https://github.com/sysadminsmedia/homebox/discussions/53\">GitHub讨论”</a>中提供",
"label_height": "标签高度",
"label_width": "标签宽度",
"measure_type": "长度单位",
"page_bottom_padding": "底部页边距",
"page_height": "页面高度",
"page_left_padding": "左侧页边距",
"page_right_padding": "右侧页边距",
"page_top_padding": "顶部页边距",
"page_width": "页面宽度",
"qr_code_example": "二维码地址示例",
"tip_1": "这里的默认设置是\n <a href=\"https://www.avery.com/templates/5260\">“Avery 5260标签纸”</a>的设置,\n 你需要根据你的标签纸调整大小设置。",
"tip_2": "如果您在自定义纸张尺寸,单位是英寸。在制作 Avery 5260 标签纸时,我发现\n其官方模板中的尺寸并不完全适合实际打印在标签框内\n'<b>'所以请多尝试和调整来找到最佳设置。'</b>'",
"tip_3": "打印时,请务必注意:\n '<ol><li>'将边距设置为0或无'</li><li>“将缩放比例设置为100%”</li><li>'禁用双面打印'</li><li>'打印测试页'</li></ol>'",
"tips": "提示",
"title": "标签生成器",
"toast": {
"page_too_small_card": ""
"page_too_small_card": "标签尺寸超出页面尺寸"
}
}
},
@@ -562,39 +562,43 @@
"error": "扫描遇到问题",
"invalid_url": "非法的条形码地址",
"no_sources": "没有可用的摄像头资源",
"permission_denied": "",
"permission_denied": "相机权限被拒绝,请在浏览器设置中允许访问相机",
"select_video_source": "选择摄像头",
"title": "扫描",
"title": "扫描",
"unsupported": "媒体流API只在HTTPS环境下支持"
},
"tools": {
"actions": "库存操作",
"actions_set": {
"create_missing_thumbnails": "创建缺失的缩略图",
"create_missing_thumbnails_button": "创建缩略图",
"create_missing_thumbnails_confirm": "您确定要生成缺失的缩略图吗?这可能需要一段时间且无法暂停。",
"create_missing_thumbnails_sub": "为当前配置支持的所有附件生成缩略图。这对于在 Homebox v0.20.0 版本发布之前上传的附件尤其有用。该操作不会覆盖已有的缩略图,只会为尚未生成缩略图的附件创建新缩略图。请注意,缩略图是在后台生成的,可能需要一些时间才能完成。",
"ensure_ids": "确认资产ID",
"ensure_ids_button": "确认资产ID",
"ensure_ids_confirm": "",
"ensure_ids_confirm": "要开始确认所有资产ID吗这可能需要一段时间并且无法撤消。",
"ensure_ids_sub": "确保库存中的所有项目都有有效的asset_id字段。它会找到库中最大的asset_id字段并将下一个值应用于还未设置asset_id字段的每个项目。未设置asset_id的项目将按created_at字段的顺序生成。",
"ensure_import_refs": "确认导入参考",
"ensure_import_refs_button": "确认导入参考",
"ensure_import_refs_sub": "确保库存中的所有项目都有有效的import_ref字段。这是通过为每个具有未设置的import_ref字段的项目随机生成一个8个字符的字符串来实现的。",
"set_primary_photo": "设置封面图片",
"set_primary_photo": "设置封面",
"set_primary_photo_button": "设置封面",
"set_primary_photo_confirm": "",
"set_primary_photo_confirm": "您确定要设置封面图片吗?这可能需要一段时间,并且无法撤消。",
"set_primary_photo_sub": "设置封面在 Homebox v0.10.0 版本中,该列的类型为图片。如果没有设置封面,则会把附件中第一张图片作为封面。 '<a class=\"link\" href=\"https://github.com/hay-kot/homebox/pull/576\">'更多请参考 GitHub PR #576'</a>'",
"zero_datetimes": "项目日期",
"zero_datetimes_button": "项目日期",
"zero_datetimes_confirm": "",
"zero_datetimes": "重置所有项目日期与时间",
"zero_datetimes_button": "重置所有项目日期与时间",
"zero_datetimes_confirm": "您确定要重置所有日期和时间值吗?这可能需要一段时间,并且无法撤消。",
"zero_datetimes_sub": "将库存中所有日期时间字段的值重置为开始日期。这是为了修复在网站开发早期出现的一个错误,该错误导致自定义时间值保存时,日期会出现偏移的问题。 '<a class=\"link\" href=\"https://github.com/hay-kot/homebox/issues/236\" target=\"_blank\">'详细问题请参考 Github Issue #236 '</a>'"
},
"actions_sub": "将操作批量应用于您的库存。这些都是不可逆转的行动'<b> '谨慎操作。'</b>'",
"actions_sub": "将操作批量应用于您的库存。这些操作都是不可逆转的'<b> '三思而后行!'</b>'",
"import_export": "导入/导出",
"import_export_set": {
"export": "导出库存",
"export_button": "导出库存",
"export_button": "导出清单",
"export_sub": "按标准CSV格式导出Homebox。这将导出库存中的所有项目。",
"import": "导入库存",
"import_button": "导入库存",
"import_ref_confirm": "",
"import_ref_confirm": "您确定要确保所有资产都有IMPORT_REF吗这可能需要一段时间并且无法撤消。",
"import_sub": "Homebox只能导入标准的CSV格式文件。当不存在 '<code>'HB.import_ref'</code>' 列的时候,将 '<b>'不会'</b>' 覆盖现数据库存中的任何现有项目,只添加为新项目。如果与现有的 '<code>'HB.import_ref'</code>' 的项目一样,则会将新旧数据合并。"
},
"import_export_sub": "按CSV格式导入和导出您的库存。在将库存迁移到Homebox的新实例时非常有用。",
@@ -609,11 +613,12 @@
},
"reports_sub": "为您的库存生成其他的报告。",
"toast": {
"asset_success": "",
"failed_ensure_ids": "",
"failed_ensure_import_refs": "",
"failed_set_primary_photos": "",
"failed_zero_datetimes": ""
"asset_success": "{results}资产已更新。",
"failed_create_missing_thumbnails": "无法创建缺失的缩略图。",
"failed_ensure_ids": "无法确认资产ID。",
"failed_ensure_import_refs": "无法确认导入参考。",
"failed_set_primary_photos": "无法设置封面。",
"failed_zero_datetimes": "无法重置日期和时间值。"
}
}
}

View File

@@ -1,122 +1,23 @@
{
"components": {
"app": {
"create_modal": {
"createAndAddAnother": "",
"enter": "",
"shift": ""
},
"import_dialog": {
"change_warning": "現有 import_refs 的導入行為已變更。如果 CSV 檔案中存在 import_ref則\n項目將使用 CSV 檔案中的值進行更新。",
"description": "匯入包含您的商品、標籤和位置的 CSV 檔案。有關所需格式的更多信息\n請參閱文件。",
"title": "匯入CSV檔案",
"toast": {
"import_failed": "",
"import_success": "",
"please_select_file": ""
}
},
"outdated": {
"current_version": "",
"dismiss": "",
"latest_version": "",
"new_version_available": "",
"new_version_available_link": ""
}
},
"form": {
"password": {
"toggle_show": ""
"title": "匯入CSV檔案"
}
},
"global": {
"copy_text": {
"documentation": "",
"failed_to_copy": "",
"https_required": "",
"learn_more": ""
},
"date_time": {
"ago": "",
"days": "",
"hour": "",
"hours": "",
"in": "",
"just-now": "",
"last-month": "",
"last-week": "",
"last-year": "",
"minute": "",
"minutes": "",
"months": "",
"next-month": "",
"next-week": "",
"next-year": "",
"second": "",
"seconds": "",
"tomorrow": "",
"week": "",
"weeks": "",
"years": "",
"yesterday": ""
},
"label_maker": {
"browser_print": "",
"confirm_description": "",
"download": "",
"print": "",
"server_print": "",
"titles": "",
"toast": {
"load_status_failed": "",
"print_failed": "",
"print_success": ""
}
},
"page_qr_code": {
"page_url": "頁面網址",
"qr_tooltip": ""
"page_url": "頁面網址"
},
"password_score": {
"password_strength": "密碼強度"
}
},
"item": {
"attachments_list": {
"download": "",
"open_new_tab": ""
},
"create_modal": {
"delete_photo": "",
"item_description": "",
"item_name": "",
"item_photo": "",
"item_quantity": "",
"parent_item": "",
"rotate_photo": "",
"set_as_primary_photo": "",
"title": "新增項目",
"toast": {
"already_creating": "",
"create_failed": "",
"create_success": "",
"failed_load_parent": "",
"no_canvas_support": "",
"please_select_location": "",
"rotate_failed": "",
"rotate_process_failed": "",
"some_photos_failed": "",
"upload_failed": "",
"upload_success": "",
"uploading_photos": ""
},
"upload_photos": "",
"uploaded": ""
},
"selector": {
"no_results": "",
"placeholder": "",
"search_placeholder": ""
"title": "新增項目"
},
"view": {
"selectable": {
@@ -124,115 +25,42 @@
"items": "項目",
"no_items": "沒有可顯示的項目",
"table": "表格"
},
"table": {
"headers": "",
"page": "",
"rows_per_page": "",
"table_settings": "",
"view_item": ""
}
}
},
"label": {
"create_modal": {
"label_description": "",
"label_name": "",
"title": "新增標籤",
"toast": {
"already_creating": "",
"create_failed": "",
"create_success": "",
"label_name_too_long": ""
}
},
"selector": {
"select_labels": ""
"title": "新增標籤"
}
},
"location": {
"create_modal": {
"location_description": "",
"location_name": "",
"title": "新增地點",
"toast": {
"already_creating": "",
"create_failed": "",
"create_success": ""
"title": "新增地點"
}
},
"selector": {
"no_location_found": "",
"parent_location": "",
"search_location": "",
"select_location": ""
},
"tree": {
"no_locations": ""
}
},
"quick_menu": {
"no_results": "",
"shortcut_hint": ""
}
},
"global": {
"add": "",
"archived": "",
"build": "建立{ build }",
"cancel": "",
"confirm": "確認",
"create": "新增",
"create_and_add": "創建並添加另一個",
"create_subitem": "",
"created": "已建立",
"delete": "",
"delete_confirm": "",
"demo_instance": "",
"details": "",
"duplicate": "",
"edit": "",
"email": "電子信箱",
"follow_dev": "關注開發者",
"footer": {
"api_link": "",
"version_link": ""
},
"github": "GitHub項目",
"insured": "",
"items": "項目",
"join_discord": "加入Discord",
"labels": "標籤",
"loading": "",
"locations": "地點",
"maintenance": "",
"name": "名字",
"navigate": "",
"password": "密碼",
"quantity": "",
"read_docs": "閱讀文件",
"return_home": "",
"save": "",
"search": "搜尋",
"sign_out": "登出",
"submit": "提交",
"unknown": "",
"update": "",
"updating": "",
"value": "",
"version": "版本:{ version }",
"welcome": "歡迎,{ username }"
},
"home": {
"labels": "",
"quick_statistics": "",
"recently_added": "",
"storage_locations": "",
"total_items": "",
"total_labels": "",
"total_locations": "",
"total_value": ""
},
"index": {
"disabled_registration": "已禁用註冊",
"dont_join_group": "不想加入群組?",
@@ -243,234 +71,33 @@
"set_email": "你的電子郵件是什麼?",
"set_name": "你叫什麼名字?",
"set_password": "設定您的密碼",
"tagline": "追蹤、組織和管理您的物品。",
"title": "",
"toast": {
"invalid_email": "",
"invalid_email_password": "",
"login_success": "",
"problem_registering": "",
"user_registered": ""
}
"tagline": "追蹤、組織和管理您的物品。"
},
"items": {
"add": "添加",
"advanced": "",
"archived": "",
"asset_id": "",
"associated_with_multiple": "",
"attachment": "",
"attachments": "",
"changes_persisted_immediately": "",
"created_at": "創建於",
"custom_fields": "自訂欄位",
"delete_attachment_confirm": "",
"delete_item_confirm": "",
"description": "",
"details": "",
"drag_and_drop": "",
"edit": {
"edit_attachment_dialog": {
"attachment_title": "",
"attachment_type": "",
"primary_photo": "",
"primary_photo_sub": "",
"select_type": "",
"title": ""
}
},
"edit_details": "",
"field_selector": "欄位選擇器",
"field_value": "欄位值",
"first": "第一項",
"include_archive": "包括存檔項目",
"insured": "",
"invalid_asset_id": "",
"last": "最後一項",
"lifetime_warranty": "",
"location": "",
"manual": "",
"manuals": "",
"manufacturer": "",
"model_number": "",
"name": "",
"negate_labels": "取消選定的標籤",
"next_page": "下一頁",
"no_attachments": "",
"no_results": "沒有找到項目",
"notes": "",
"only_with_photo": "",
"only_without_photo": "",
"options": "選項",
"order_by": "排序",
"pages": "第{ page } 頁(共{ totalPages })",
"parent_item": "",
"photo": "",
"photos": "",
"prev_page": "上一頁",
"purchase_date": "",
"purchase_details": "",
"purchase_price": "",
"purchased_from": "",
"quantity": "",
"query_id": "查詢資產ID號碼:{ id }",
"receipt": "",
"receipts": "",
"reset_search": "重置搜尋",
"results": "{ total }結果",
"select_field": "",
"serial_number": "",
"show_advanced_view_options": "",
"sold_at": "",
"sold_details": "",
"sold_price": "",
"sold_to": "",
"sync_child_locations": "",
"tip_1": "位置和標籤過濾器使用“OR”運算。如果選擇了多個則一次配對\n只會使用一個。",
"tip_2": "以「#」為前綴的搜尋將查詢資產 ID例如「#000-001」",
"tip_3": "字段過濾器使用“OR”運算。如果選擇了多個則一次配對只需要選擇\n一個。",
"tips": "提示",
"tips_sub": "搜尋技巧",
"toast": {
"asset_not_found": "",
"attachment_deleted": "",
"attachment_updated": "",
"attachment_uploaded": "",
"child_items_location_no_longer_synced": "",
"child_items_location_synced": "",
"child_location_desync": "",
"error_loading_parent_data": "",
"failed_adjust_quantity": "",
"failed_delete_attachment": "",
"failed_delete_item": "",
"failed_duplicate_item": "",
"failed_load_asset": "",
"failed_load_item": "",
"failed_load_items": "",
"failed_save": "",
"failed_save_no_location": "",
"failed_search_items": "",
"failed_update_attachment": "",
"failed_upload_attachment": "",
"item_deleted": "",
"item_saved": "",
"quantity_cannot_negative": "",
"sync_child_location": ""
},
"updated_at": "更新於",
"warranty": "",
"warranty_details": "",
"warranty_expires": ""
},
"labels": {
"label_delete_confirm": "",
"no_results": "",
"toast": {
"failed_delete_label": "",
"failed_load_label": "",
"failed_update_label": "",
"label_deleted": "",
"label_updated": ""
},
"update_label": ""
},
"languages": {
"ca": "",
"cs-CZ": "",
"da-DK": "",
"de": "",
"en": "",
"es": "",
"fi-FI": "",
"fr": "",
"hu": "",
"id-ID": "",
"it": "",
"ja-JP": "",
"ko-KR": "",
"lb-LU": "",
"lt-LT": "",
"nb-NO": "",
"nl": "",
"pl": "",
"pt-BR": "",
"pt-PT": "",
"ro-RO": "",
"ru": "",
"sk-SK": "",
"sl": "",
"sq-AL": "",
"sv": "",
"ta-IN": "",
"th-TH": "",
"tr": "",
"uk-UA": "",
"zh-CN": "",
"zh-HK": "",
"zh-MO": "",
"zh-TW": ""
},
"locations": {
"child_locations": "",
"collapse_tree": "",
"expand_tree": "",
"location_items_delete_confirm": "",
"no_results": "",
"toast": {
"failed_delete_location": "",
"failed_load_location": "",
"failed_update_location": "",
"location_deleted": "",
"location_updated": ""
},
"update_location": ""
},
"maintenance": {
"filter": {
"both": "",
"completed": "",
"scheduled": ""
},
"list": {
"complete": "",
"create_first": "",
"delete": "",
"duplicate": "",
"edit": "",
"new": ""
},
"modal": {
"completed_date": "",
"cost": "",
"delete_confirmation": "",
"edit_action": "",
"edit_title": "",
"entry_name": "",
"new_action": "",
"new_title": "",
"notes": "",
"scheduled_date": ""
},
"monthly_average": "",
"toast": {
"failed_to_create": "",
"failed_to_delete": "",
"failed_to_update": ""
},
"total_cost": "",
"total_entries": ""
},
"menu": {
"create_item": "",
"create_label": "",
"create_location": "",
"home": "",
"locations": "",
"maintenance": "",
"profile": "",
"scanner": "",
"search": "",
"tools": ""
"updated_at": "更新於"
},
"profile": {
"active": "活躍",
@@ -478,134 +105,22 @@
"currency_format": "貨幣格式",
"current_password": "當前密碼",
"delete_account": "刪除帳戶",
"delete_account_confirm": "",
"delete_account_sub": "刪除您的帳戶及其所有相關資料。此操作無法撤回。",
"delete_notifier_confirm": "",
"display_legacy_header": "",
"enabled": "啟用",
"example": "",
"gen_invite": "產生邀請連結",
"group_settings": "群組設定",
"group_settings_sub": "共享群組設定。您可能需要刷新瀏覽器才能套用設定。",
"inactive": "不活躍",
"language": "",
"new_password": "新密碼",
"no_notifiers": "",
"no_override": "",
"notifier_modal": "通知 { type, select, true {Edit} false {Create} other {Other}}",
"notifiers": "通知者",
"notifiers_sub": "獲取即將到來的維護提醒的通知",
"override_locale": "",
"test": "測試",
"theme_settings": "主題設定",
"theme_settings_sub": "主題設定儲存在瀏覽器的本機儲存中。您可以隨時變更主題。如果你是\n 設定主題時遇到問題,請嘗試刷新瀏覽器。",
"toast": {
"account_deleted": "",
"failed_change_password": "",
"failed_create_notifier": "",
"failed_delete_account": "",
"failed_delete_notifier": "",
"failed_get_currencies": "",
"failed_test_notifier": "",
"failed_update_group": "",
"failed_update_notifier": "",
"group_updated": "",
"notifier_test_success": "",
"password_changed": ""
},
"update_group": "更新群組",
"update_language": "",
"url": "網址",
"user_profile": "使用者資料",
"user_profile_sub": "邀請使用者並管理您的帳戶。"
},
"reports": {
"label_generator": {
"asset_end": "",
"asset_start": "",
"base_url": "",
"bordered_labels": "",
"generate_page": "",
"input_placeholder": "",
"instruction_1": "",
"instruction_2": "",
"instruction_3": "",
"label_height": "",
"label_width": "",
"measure_type": "",
"page_bottom_padding": "",
"page_height": "",
"page_left_padding": "",
"page_right_padding": "",
"page_top_padding": "",
"page_width": "",
"qr_code_example": "",
"tip_1": "",
"tip_2": "",
"tip_3": "",
"tips": "",
"title": "",
"toast": {
"page_too_small_card": ""
}
}
},
"scanner": {
"error": "",
"invalid_url": "",
"no_sources": "",
"permission_denied": "",
"select_video_source": "",
"title": "",
"unsupported": ""
},
"tools": {
"actions": "",
"actions_set": {
"ensure_ids": "",
"ensure_ids_button": "",
"ensure_ids_confirm": "",
"ensure_ids_sub": "",
"ensure_import_refs": "",
"ensure_import_refs_button": "",
"ensure_import_refs_sub": "",
"set_primary_photo": "",
"set_primary_photo_button": "",
"set_primary_photo_confirm": "",
"set_primary_photo_sub": "",
"zero_datetimes": "",
"zero_datetimes_button": "",
"zero_datetimes_confirm": "",
"zero_datetimes_sub": ""
},
"actions_sub": "",
"import_export": "",
"import_export_set": {
"export": "",
"export_button": "",
"export_sub": "",
"import": "",
"import_button": "",
"import_ref_confirm": "",
"import_sub": ""
},
"import_export_sub": "",
"reports": "",
"reports_set": {
"asset_labels": "",
"asset_labels_button": "",
"asset_labels_sub": "",
"bill_of_materials": "",
"bill_of_materials_button": "",
"bill_of_materials_sub": ""
},
"reports_sub": "",
"toast": {
"asset_success": "",
"failed_ensure_ids": "",
"failed_ensure_import_refs": "",
"failed_set_primary_photos": "",
"failed_zero_datetimes": ""
}
}
}

View File

@@ -1,20 +1,10 @@
{
"components": {
"app": {
"create_modal": {
"createAndAddAnother": "",
"enter": "",
"shift": ""
},
"import_dialog": {
"change_warning": "現有 import_refs 的導入行為已變更。如果 CSV 檔案中存在 import_ref則\n項目將使用 CSV 檔案中的值進行更新。",
"description": "匯入包含您的商品、標籤和位置的 CSV 檔案。有關所需格式的更多信息\n請參閱文件。",
"title": "匯入CSV檔案",
"toast": {
"import_failed": "",
"import_success": "",
"please_select_file": ""
}
"title": "匯入CSV檔案"
},
"outdated": {
"current_version": "当前版本",
@@ -24,11 +14,6 @@
"new_version_available_link": "点击此处查看版本咨询"
}
},
"form": {
"password": {
"toggle_show": ""
}
},
"global": {
"copy_text": {
"documentation": "文件",
@@ -66,57 +51,20 @@
"download": "下载标签",
"print": "打印标签",
"server_print": "在服务器上打印",
"titles": "标签",
"toast": {
"load_status_failed": "",
"print_failed": "",
"print_success": ""
}
"titles": "标签"
},
"page_qr_code": {
"page_url": "頁面網址",
"qr_tooltip": ""
"page_url": "頁面網址"
},
"password_score": {
"password_strength": "密碼強度"
}
},
"item": {
"attachments_list": {
"download": "",
"open_new_tab": ""
},
"create_modal": {
"delete_photo": "",
"item_description": "项目说明",
"item_name": "项目名称",
"item_photo": "",
"item_quantity": "",
"parent_item": "",
"rotate_photo": "",
"set_as_primary_photo": "",
"title": "新增項目",
"toast": {
"already_creating": "",
"create_failed": "",
"create_success": "",
"failed_load_parent": "",
"no_canvas_support": "",
"please_select_location": "",
"rotate_failed": "",
"rotate_process_failed": "",
"some_photos_failed": "",
"upload_failed": "",
"upload_success": "",
"uploading_photos": ""
},
"upload_photos": "",
"uploaded": ""
},
"selector": {
"no_results": "",
"placeholder": "",
"search_placeholder": ""
"title": "新增項目"
},
"view": {
"selectable": {
@@ -126,11 +74,8 @@
"table": "表格"
},
"table": {
"headers": "",
"page": "页面",
"rows_per_page": "每页行数",
"table_settings": "",
"view_item": ""
"rows_per_page": "每页行数"
}
}
},
@@ -138,87 +83,51 @@
"create_modal": {
"label_description": "标签详情",
"label_name": "标签名",
"title": "新增標籤",
"toast": {
"already_creating": "",
"create_failed": "",
"create_success": "",
"label_name_too_long": ""
}
},
"selector": {
"select_labels": ""
"title": "新增標籤"
}
},
"location": {
"create_modal": {
"location_description": "位置描述",
"location_name": "位置描述",
"title": "新增地點",
"toast": {
"already_creating": "",
"create_failed": "",
"create_success": ""
}
"title": "新增地點"
},
"selector": {
"no_location_found": "",
"parent_location": "父页面",
"search_location": "",
"select_location": ""
},
"tree": {
"no_locations": ""
"parent_location": "父页面"
}
},
"quick_menu": {
"no_results": "",
"shortcut_hint": "用数字键以快速选择操作。"
}
},
"global": {
"add": "添加",
"archived": "",
"build": "建立{ build }",
"cancel": "",
"confirm": "確認",
"create": "新增",
"create_and_add": "創建並添加另一個",
"create_subitem": "",
"created": "已建立",
"delete": "删除",
"delete_confirm": "",
"demo_instance": "",
"details": "详情",
"duplicate": "复制",
"edit": "编辑",
"email": "電子信箱",
"follow_dev": "關注開發者",
"footer": {
"api_link": "",
"version_link": ""
},
"github": "GitHub項目",
"insured": "",
"items": "項目",
"join_discord": "加入Discord",
"labels": "標籤",
"loading": "",
"locations": "地點",
"maintenance": "维护",
"name": "名字",
"navigate": "导航",
"password": "密碼",
"quantity": "",
"read_docs": "閱讀文件",
"return_home": "",
"save": "保存",
"search": "搜尋",
"sign_out": "登出",
"submit": "提交",
"unknown": "",
"update": "更新",
"updating": "",
"value": "值",
"version": "版本:{ version }",
"welcome": "歡迎,{ username }"
@@ -230,8 +139,7 @@
"storage_locations": "存储地址",
"total_items": "目标数量",
"total_labels": "标签总数",
"total_locations": "位置总数",
"total_value": ""
"total_locations": "位置总数"
},
"index": {
"disabled_registration": "已禁用註冊",
@@ -243,51 +151,28 @@
"set_email": "你的電子郵件是什麼?",
"set_name": "你叫什麼名字?",
"set_password": "設定您的密碼",
"tagline": "追蹤、組織和管理您的物品。",
"title": "",
"toast": {
"invalid_email": "",
"invalid_email_password": "",
"login_success": "",
"problem_registering": "",
"user_registered": ""
}
"tagline": "追蹤、組織和管理您的物品。"
},
"items": {
"add": "添加",
"advanced": "高级",
"archived": "已封存",
"asset_id": "组件 ID",
"associated_with_multiple": "",
"attachment": "附件",
"attachments": "附件",
"changes_persisted_immediately": "对附件的更改会被立刻保存",
"created_at": "創建於",
"custom_fields": "自訂欄位",
"delete_attachment_confirm": "",
"delete_item_confirm": "",
"description": "描述",
"details": "详情",
"drag_and_drop": "拖拽或者点击以选择文件",
"edit": {
"edit_attachment_dialog": {
"attachment_title": "",
"attachment_type": "",
"primary_photo": "",
"primary_photo_sub": "",
"select_type": "",
"title": ""
}
},
"edit_details": "编辑详情",
"field_selector": "欄位選擇器",
"field_value": "欄位值",
"first": "第一項",
"include_archive": "包括存檔項目",
"insured": "确保的",
"invalid_asset_id": "",
"last": "最後一項",
"lifetime_warranty": "",
"location": "地址",
"manual": "手动",
"manuals": "手册",
@@ -296,7 +181,6 @@
"name": "名字",
"negate_labels": "取消選定的標籤",
"next_page": "下一頁",
"no_attachments": "",
"no_results": "沒有找到項目",
"notes": "笔记",
"only_with_photo": "仅限附带图片的目标",
@@ -318,159 +202,13 @@
"receipts": "收据",
"reset_search": "重置搜尋",
"results": "{ total }結果",
"select_field": "",
"serial_number": "序列号",
"show_advanced_view_options": "",
"sold_at": "",
"sold_details": "",
"sold_price": "",
"sold_to": "",
"sync_child_locations": "",
"tip_1": "位置和標籤過濾器使用“OR”運算。如果選擇了多個則一次配對\n只會使用一個。",
"tip_2": "以「#」為前綴的搜尋將查詢資產 ID例如「#000-001」",
"tip_3": "字段過濾器使用“OR”運算。如果選擇了多個則一次配對只需要選擇\n一個。",
"tips": "提示",
"tips_sub": "搜尋技巧",
"toast": {
"asset_not_found": "",
"attachment_deleted": "",
"attachment_updated": "",
"attachment_uploaded": "",
"child_items_location_no_longer_synced": "",
"child_items_location_synced": "",
"child_location_desync": "",
"error_loading_parent_data": "",
"failed_adjust_quantity": "",
"failed_delete_attachment": "",
"failed_delete_item": "",
"failed_duplicate_item": "",
"failed_load_asset": "",
"failed_load_item": "",
"failed_load_items": "",
"failed_save": "",
"failed_save_no_location": "",
"failed_search_items": "",
"failed_update_attachment": "",
"failed_upload_attachment": "",
"item_deleted": "",
"item_saved": "",
"quantity_cannot_negative": "",
"sync_child_location": ""
},
"updated_at": "更新於",
"warranty": "",
"warranty_details": "",
"warranty_expires": ""
},
"labels": {
"label_delete_confirm": "",
"no_results": "",
"toast": {
"failed_delete_label": "",
"failed_load_label": "",
"failed_update_label": "",
"label_deleted": "",
"label_updated": ""
},
"update_label": ""
},
"languages": {
"ca": "",
"cs-CZ": "",
"da-DK": "",
"de": "",
"en": "",
"es": "",
"fi-FI": "",
"fr": "",
"hu": "",
"id-ID": "",
"it": "",
"ja-JP": "",
"ko-KR": "",
"lb-LU": "",
"lt-LT": "",
"nb-NO": "",
"nl": "",
"pl": "",
"pt-BR": "",
"pt-PT": "",
"ro-RO": "",
"ru": "",
"sk-SK": "",
"sl": "",
"sq-AL": "",
"sv": "",
"ta-IN": "",
"th-TH": "",
"tr": "",
"uk-UA": "",
"zh-CN": "",
"zh-HK": "",
"zh-MO": "",
"zh-TW": ""
},
"locations": {
"child_locations": "",
"collapse_tree": "",
"expand_tree": "",
"location_items_delete_confirm": "",
"no_results": "",
"toast": {
"failed_delete_location": "",
"failed_load_location": "",
"failed_update_location": "",
"location_deleted": "",
"location_updated": ""
},
"update_location": ""
},
"maintenance": {
"filter": {
"both": "",
"completed": "",
"scheduled": ""
},
"list": {
"complete": "",
"create_first": "",
"delete": "",
"duplicate": "",
"edit": "",
"new": ""
},
"modal": {
"completed_date": "",
"cost": "",
"delete_confirmation": "",
"edit_action": "",
"edit_title": "",
"entry_name": "",
"new_action": "",
"new_title": "",
"notes": "",
"scheduled_date": ""
},
"monthly_average": "",
"toast": {
"failed_to_create": "",
"failed_to_delete": "",
"failed_to_update": ""
},
"total_cost": "",
"total_entries": ""
},
"menu": {
"create_item": "",
"create_label": "",
"create_location": "",
"home": "",
"locations": "",
"maintenance": "",
"profile": "",
"scanner": "",
"search": "",
"tools": ""
"updated_at": "更新於"
},
"profile": {
"active": "活躍",
@@ -478,134 +216,22 @@
"currency_format": "貨幣格式",
"current_password": "當前密碼",
"delete_account": "刪除帳戶",
"delete_account_confirm": "",
"delete_account_sub": "刪除您的帳戶及其所有相關資料。此操作無法撤回。",
"delete_notifier_confirm": "",
"display_legacy_header": "",
"enabled": "啟用",
"example": "",
"gen_invite": "產生邀請連結",
"group_settings": "群組設定",
"group_settings_sub": "共享群組設定。您可能需要刷新瀏覽器才能套用設定。",
"inactive": "不活躍",
"language": "",
"new_password": "新密碼",
"no_notifiers": "",
"no_override": "",
"notifier_modal": "通知 { type, select, true {Edit} false {Create} other {Other}}",
"notifiers": "通知者",
"notifiers_sub": "獲取即將到來的維護提醒的通知",
"override_locale": "",
"test": "測試",
"theme_settings": "主題設定",
"theme_settings_sub": "主題設定儲存在瀏覽器的本機儲存中。您可以隨時變更主題。如果你是\n 設定主題時遇到問題,請嘗試刷新瀏覽器。",
"toast": {
"account_deleted": "",
"failed_change_password": "",
"failed_create_notifier": "",
"failed_delete_account": "",
"failed_delete_notifier": "",
"failed_get_currencies": "",
"failed_test_notifier": "",
"failed_update_group": "",
"failed_update_notifier": "",
"group_updated": "",
"notifier_test_success": "",
"password_changed": ""
},
"update_group": "更新群組",
"update_language": "",
"url": "網址",
"user_profile": "使用者資料",
"user_profile_sub": "邀請使用者並管理您的帳戶。"
},
"reports": {
"label_generator": {
"asset_end": "",
"asset_start": "",
"base_url": "",
"bordered_labels": "",
"generate_page": "",
"input_placeholder": "",
"instruction_1": "",
"instruction_2": "",
"instruction_3": "",
"label_height": "",
"label_width": "",
"measure_type": "",
"page_bottom_padding": "",
"page_height": "",
"page_left_padding": "",
"page_right_padding": "",
"page_top_padding": "",
"page_width": "",
"qr_code_example": "",
"tip_1": "",
"tip_2": "",
"tip_3": "",
"tips": "",
"title": "",
"toast": {
"page_too_small_card": ""
}
}
},
"scanner": {
"error": "",
"invalid_url": "",
"no_sources": "",
"permission_denied": "",
"select_video_source": "",
"title": "",
"unsupported": ""
},
"tools": {
"actions": "",
"actions_set": {
"ensure_ids": "",
"ensure_ids_button": "",
"ensure_ids_confirm": "",
"ensure_ids_sub": "",
"ensure_import_refs": "",
"ensure_import_refs_button": "",
"ensure_import_refs_sub": "",
"set_primary_photo": "",
"set_primary_photo_button": "",
"set_primary_photo_confirm": "",
"set_primary_photo_sub": "",
"zero_datetimes": "",
"zero_datetimes_button": "",
"zero_datetimes_confirm": "",
"zero_datetimes_sub": ""
},
"actions_sub": "",
"import_export": "",
"import_export_set": {
"export": "",
"export_button": "",
"export_sub": "",
"import": "",
"import_button": "",
"import_ref_confirm": "",
"import_sub": ""
},
"import_export_sub": "",
"reports": "",
"reports_set": {
"asset_labels": "",
"asset_labels_button": "",
"asset_labels_sub": "",
"bill_of_materials": "",
"bill_of_materials_button": "",
"bill_of_materials_sub": ""
},
"reports_sub": "",
"toast": {
"asset_success": "",
"failed_ensure_ids": "",
"failed_ensure_import_refs": "",
"failed_set_primary_photos": "",
"failed_zero_datetimes": ""
}
}
}

View File

@@ -1,20 +1,10 @@
{
"components": {
"app": {
"create_modal": {
"createAndAddAnother": "",
"enter": "",
"shift": ""
},
"import_dialog": {
"change_warning": "現有 import_refs 的導入行為已變更。如果 CSV 檔案中存在 import_ref則\n項目將使用 CSV 檔案中的值進行更新。",
"description": "匯入包含您的商品、標籤和位置的 CSV 檔案。有關所需格式的更多信息\n請參閱文件。",
"title": "匯入CSV檔案",
"toast": {
"import_failed": "",
"import_success": "",
"please_select_file": ""
}
"title": "匯入CSV檔案"
},
"outdated": {
"current_version": "當前版本",
@@ -24,11 +14,6 @@
"new_version_available_link": "按此處查看發行說明"
}
},
"form": {
"password": {
"toggle_show": ""
}
},
"global": {
"copy_text": {
"documentation": "文件",
@@ -64,14 +49,7 @@
"browser_print": "從瀏覽器列印",
"confirm_description": "您確定要列印此標籤嗎?",
"download": "下載標籤",
"print": "",
"server_print": "",
"titles": "標籤",
"toast": {
"load_status_failed": "",
"print_failed": "",
"print_success": ""
}
"titles": "標籤"
},
"page_qr_code": {
"page_url": "頁面網址",
@@ -82,41 +60,8 @@
}
},
"item": {
"attachments_list": {
"download": "",
"open_new_tab": ""
},
"create_modal": {
"delete_photo": "",
"item_description": "",
"item_name": "",
"item_photo": "",
"item_quantity": "",
"parent_item": "",
"rotate_photo": "",
"set_as_primary_photo": "",
"title": "新增項目",
"toast": {
"already_creating": "",
"create_failed": "",
"create_success": "",
"failed_load_parent": "",
"no_canvas_support": "",
"please_select_location": "",
"rotate_failed": "",
"rotate_process_failed": "",
"some_photos_failed": "",
"upload_failed": "",
"upload_success": "",
"uploading_photos": ""
},
"upload_photos": "",
"uploaded": ""
},
"selector": {
"no_results": "",
"placeholder": "",
"search_placeholder": ""
"title": "新增項目"
},
"view": {
"selectable": {
@@ -124,115 +69,42 @@
"items": "項目",
"no_items": "沒有可顯示的項目",
"table": "表格"
},
"table": {
"headers": "",
"page": "",
"rows_per_page": "",
"table_settings": "",
"view_item": ""
}
}
},
"label": {
"create_modal": {
"label_description": "",
"label_name": "",
"title": "新增標籤",
"toast": {
"already_creating": "",
"create_failed": "",
"create_success": "",
"label_name_too_long": ""
}
},
"selector": {
"select_labels": ""
"title": "新增標籤"
}
},
"location": {
"create_modal": {
"location_description": "",
"location_name": "",
"title": "新增地點",
"toast": {
"already_creating": "",
"create_failed": "",
"create_success": ""
"title": "新增地點"
}
},
"selector": {
"no_location_found": "",
"parent_location": "",
"search_location": "",
"select_location": ""
},
"tree": {
"no_locations": ""
}
},
"quick_menu": {
"no_results": "",
"shortcut_hint": ""
}
},
"global": {
"add": "",
"archived": "",
"build": "建立{ build }",
"cancel": "",
"confirm": "確認",
"create": "新增",
"create_and_add": "創建並添加另一個",
"create_subitem": "",
"created": "已建立",
"delete": "",
"delete_confirm": "",
"demo_instance": "",
"details": "",
"duplicate": "",
"edit": "",
"email": "電子信箱",
"follow_dev": "關注開發者",
"footer": {
"api_link": "",
"version_link": ""
},
"github": "GitHub項目",
"insured": "",
"items": "項目",
"join_discord": "加入Discord",
"labels": "標籤",
"loading": "",
"locations": "地點",
"maintenance": "",
"name": "名字",
"navigate": "",
"password": "密碼",
"quantity": "",
"read_docs": "閱讀文件",
"return_home": "",
"save": "",
"search": "搜尋",
"sign_out": "登出",
"submit": "提交",
"unknown": "",
"update": "",
"updating": "",
"value": "",
"version": "版本:{ version }",
"welcome": "歡迎,{ username }"
},
"home": {
"labels": "",
"quick_statistics": "",
"recently_added": "",
"storage_locations": "",
"total_items": "",
"total_labels": "",
"total_locations": "",
"total_value": ""
},
"index": {
"disabled_registration": "已禁用註冊",
"dont_join_group": "不想加入群組?",
@@ -243,234 +115,33 @@
"set_email": "你的電子郵件是什麼?",
"set_name": "你叫什麼名字?",
"set_password": "設定您的密碼",
"tagline": "追蹤、組織和管理您的物品。",
"title": "",
"toast": {
"invalid_email": "",
"invalid_email_password": "",
"login_success": "",
"problem_registering": "",
"user_registered": ""
}
"tagline": "追蹤、組織和管理您的物品。"
},
"items": {
"add": "添加",
"advanced": "",
"archived": "",
"asset_id": "",
"associated_with_multiple": "",
"attachment": "",
"attachments": "",
"changes_persisted_immediately": "",
"created_at": "創建於",
"custom_fields": "自訂欄位",
"delete_attachment_confirm": "",
"delete_item_confirm": "",
"description": "",
"details": "",
"drag_and_drop": "",
"edit": {
"edit_attachment_dialog": {
"attachment_title": "",
"attachment_type": "",
"primary_photo": "",
"primary_photo_sub": "",
"select_type": "",
"title": ""
}
},
"edit_details": "",
"field_selector": "欄位選擇器",
"field_value": "欄位值",
"first": "第一項",
"include_archive": "包括存檔項目",
"insured": "",
"invalid_asset_id": "",
"last": "最後一項",
"lifetime_warranty": "",
"location": "",
"manual": "",
"manuals": "",
"manufacturer": "",
"model_number": "",
"name": "",
"negate_labels": "取消選定的標籤",
"next_page": "下一頁",
"no_attachments": "",
"no_results": "沒有找到項目",
"notes": "",
"only_with_photo": "",
"only_without_photo": "",
"options": "選項",
"order_by": "排序",
"pages": "第{ page } 頁(共{ totalPages })",
"parent_item": "",
"photo": "",
"photos": "",
"prev_page": "上一頁",
"purchase_date": "",
"purchase_details": "",
"purchase_price": "",
"purchased_from": "",
"quantity": "",
"query_id": "查詢資產ID號碼:{ id }",
"receipt": "",
"receipts": "",
"reset_search": "重置搜尋",
"results": "{ total }結果",
"select_field": "",
"serial_number": "",
"show_advanced_view_options": "",
"sold_at": "",
"sold_details": "",
"sold_price": "",
"sold_to": "",
"sync_child_locations": "",
"tip_1": "位置和標籤過濾器使用“OR”運算。如果選擇了多個則一次配對\n只會使用一個。",
"tip_2": "以「#」為前綴的搜尋將查詢資產 ID例如「#000-001」",
"tip_3": "字段過濾器使用“OR”運算。如果選擇了多個則一次配對只需要選擇\n一個。",
"tips": "提示",
"tips_sub": "搜尋技巧",
"toast": {
"asset_not_found": "",
"attachment_deleted": "",
"attachment_updated": "",
"attachment_uploaded": "",
"child_items_location_no_longer_synced": "",
"child_items_location_synced": "",
"child_location_desync": "",
"error_loading_parent_data": "",
"failed_adjust_quantity": "",
"failed_delete_attachment": "",
"failed_delete_item": "",
"failed_duplicate_item": "",
"failed_load_asset": "",
"failed_load_item": "",
"failed_load_items": "",
"failed_save": "",
"failed_save_no_location": "",
"failed_search_items": "",
"failed_update_attachment": "",
"failed_upload_attachment": "",
"item_deleted": "",
"item_saved": "",
"quantity_cannot_negative": "",
"sync_child_location": ""
},
"updated_at": "更新於",
"warranty": "",
"warranty_details": "",
"warranty_expires": ""
},
"labels": {
"label_delete_confirm": "",
"no_results": "",
"toast": {
"failed_delete_label": "",
"failed_load_label": "",
"failed_update_label": "",
"label_deleted": "",
"label_updated": ""
},
"update_label": ""
},
"languages": {
"ca": "",
"cs-CZ": "",
"da-DK": "",
"de": "",
"en": "",
"es": "",
"fi-FI": "",
"fr": "",
"hu": "",
"id-ID": "",
"it": "",
"ja-JP": "",
"ko-KR": "",
"lb-LU": "",
"lt-LT": "",
"nb-NO": "",
"nl": "",
"pl": "",
"pt-BR": "",
"pt-PT": "",
"ro-RO": "",
"ru": "",
"sk-SK": "",
"sl": "",
"sq-AL": "",
"sv": "",
"ta-IN": "",
"th-TH": "",
"tr": "",
"uk-UA": "",
"zh-CN": "",
"zh-HK": "",
"zh-MO": "",
"zh-TW": ""
},
"locations": {
"child_locations": "",
"collapse_tree": "",
"expand_tree": "",
"location_items_delete_confirm": "",
"no_results": "",
"toast": {
"failed_delete_location": "",
"failed_load_location": "",
"failed_update_location": "",
"location_deleted": "",
"location_updated": ""
},
"update_location": ""
},
"maintenance": {
"filter": {
"both": "",
"completed": "",
"scheduled": ""
},
"list": {
"complete": "",
"create_first": "",
"delete": "",
"duplicate": "",
"edit": "",
"new": ""
},
"modal": {
"completed_date": "",
"cost": "",
"delete_confirmation": "",
"edit_action": "",
"edit_title": "",
"entry_name": "",
"new_action": "",
"new_title": "",
"notes": "",
"scheduled_date": ""
},
"monthly_average": "",
"toast": {
"failed_to_create": "",
"failed_to_delete": "",
"failed_to_update": ""
},
"total_cost": "",
"total_entries": ""
},
"menu": {
"create_item": "",
"create_label": "",
"create_location": "",
"home": "",
"locations": "",
"maintenance": "",
"profile": "",
"scanner": "",
"search": "",
"tools": ""
"updated_at": "更新於"
},
"profile": {
"active": "活躍",
@@ -478,134 +149,22 @@
"currency_format": "貨幣格式",
"current_password": "當前密碼",
"delete_account": "刪除帳戶",
"delete_account_confirm": "",
"delete_account_sub": "刪除您的帳戶及其所有相關資料。此操作無法撤回。",
"delete_notifier_confirm": "",
"display_legacy_header": "",
"enabled": "啟用",
"example": "",
"gen_invite": "產生邀請連結",
"group_settings": "群組設定",
"group_settings_sub": "共享群組設定。您可能需要刷新瀏覽器才能套用設定。",
"inactive": "不活躍",
"language": "",
"new_password": "新密碼",
"no_notifiers": "",
"no_override": "",
"notifier_modal": "通知 { type, select, true {Edit} false {Create} other {Other}}",
"notifiers": "通知者",
"notifiers_sub": "獲取即將到來的維護提醒的通知",
"override_locale": "",
"test": "測試",
"theme_settings": "主題設定",
"theme_settings_sub": "主題設定儲存在瀏覽器的本機儲存中。您可以隨時變更主題。如果你是\n 設定主題時遇到問題,請嘗試刷新瀏覽器。",
"toast": {
"account_deleted": "",
"failed_change_password": "",
"failed_create_notifier": "",
"failed_delete_account": "",
"failed_delete_notifier": "",
"failed_get_currencies": "",
"failed_test_notifier": "",
"failed_update_group": "",
"failed_update_notifier": "",
"group_updated": "",
"notifier_test_success": "",
"password_changed": ""
},
"update_group": "更新群組",
"update_language": "",
"url": "網址",
"user_profile": "使用者資料",
"user_profile_sub": "邀請使用者並管理您的帳戶。"
},
"reports": {
"label_generator": {
"asset_end": "",
"asset_start": "",
"base_url": "",
"bordered_labels": "",
"generate_page": "",
"input_placeholder": "",
"instruction_1": "",
"instruction_2": "",
"instruction_3": "",
"label_height": "",
"label_width": "",
"measure_type": "",
"page_bottom_padding": "",
"page_height": "",
"page_left_padding": "",
"page_right_padding": "",
"page_top_padding": "",
"page_width": "",
"qr_code_example": "",
"tip_1": "",
"tip_2": "",
"tip_3": "",
"tips": "",
"title": "",
"toast": {
"page_too_small_card": ""
}
}
},
"scanner": {
"error": "",
"invalid_url": "",
"no_sources": "",
"permission_denied": "",
"select_video_source": "",
"title": "",
"unsupported": ""
},
"tools": {
"actions": "",
"actions_set": {
"ensure_ids": "",
"ensure_ids_button": "",
"ensure_ids_confirm": "",
"ensure_ids_sub": "",
"ensure_import_refs": "",
"ensure_import_refs_button": "",
"ensure_import_refs_sub": "",
"set_primary_photo": "",
"set_primary_photo_button": "",
"set_primary_photo_confirm": "",
"set_primary_photo_sub": "",
"zero_datetimes": "",
"zero_datetimes_button": "",
"zero_datetimes_confirm": "",
"zero_datetimes_sub": ""
},
"actions_sub": "",
"import_export": "",
"import_export_set": {
"export": "",
"export_button": "",
"export_sub": "",
"import": "",
"import_button": "",
"import_ref_confirm": "",
"import_sub": ""
},
"import_export_sub": "",
"reports": "",
"reports_set": {
"asset_labels": "",
"asset_labels_button": "",
"asset_labels_sub": "",
"bill_of_materials": "",
"bill_of_materials_button": "",
"bill_of_materials_sub": ""
},
"reports_sub": "",
"toast": {
"asset_success": "",
"failed_ensure_ids": "",
"failed_ensure_import_refs": "",
"failed_set_primary_photos": "",
"failed_zero_datetimes": ""
}
}
}

715
pnpm-lock.yaml generated

File diff suppressed because it is too large Load Diff