Merge remote-tracking branch 'upstream/main' into conn-test

This commit is contained in:
Simon Frei 2022-04-10 12:46:51 +02:00
commit 3d0e8ac0ee
No known key found for this signature in database
GPG Key ID: 7C31D23ECB1006F3
111 changed files with 1453 additions and 526 deletions

View File

@ -10,10 +10,11 @@ jobs:
runs-on: ubuntu-latest
name: Update translations and documentation
steps:
- uses: actions/checkout@v2
- uses: actions/checkout@629c2de402a417ea7690ca6ce3f33229e27606a5 # v2
with:
fetch-depth: 0
token: ${{ secrets.ACTIONS_GITHUB_TOKEN }}
- uses: actions/setup-go@v2
- uses: actions/setup-go@bfdd3570ce990073878bf10f6b2d79082de49492 # v2
with:
go-version: ^1.17.6
- run: |

12
AUTHORS
View File

@ -27,6 +27,7 @@ Aman Gupta <aman@tmm1.net>
Anderson Mesquita (andersonvom) <andersonvom@gmail.com>
andresvia <andres.via@gmail.com>
Andrew Dunham (andrew-d) <andrew@du.nham.ca>
Andrew Meyer <andrewm.bpi@gmail.com>
Andrew Rabert (nvllsvm) <ar@nullsum.net> <6550543+nvllsvm@users.noreply.github.com>
Andrey D (scienmind) <scintertech@cryptolab.net> <scienmind@users.noreply.github.com>
André Colomb (acolomb) <src@andre.colomb.de> <github.com@andre.colomb.de>
@ -76,6 +77,7 @@ Cromefire_ <tim.l@nghorst.net> <26320625+cromefire@users.noreply.github.com>
Cyprien Devillez <cypx@users.noreply.github.com>
Dale Visser <dale.visser@live.com>
Dan <benda.daniel@gmail.com>
Daniel Barczyk <46358936+DanielBarczyk@users.noreply.github.com>
Daniel Bergmann (brgmnn) <dan.arne.bergmann@gmail.com> <brgmnn@users.noreply.github.com>
Daniel Harte (norgeous) <daniel@harte.me> <daniel@danielharte.co.uk> <norgeous@users.noreply.github.com>
Daniel Martí (mvdan) <mvdan@mvdan.cc>
@ -103,13 +105,14 @@ Felix Lampe <mail@flampe.de>
Felix Unterpaintner (bigbear2nd) <bigbear2nd@gmail.com>
Francois-Xavier Gsell (zukoo) <fxgsell@gmail.com>
Frank Isemann (fti7) <frank@isemann.name>
Gahl Saraf <saraf.gahl@gmail.com>
Gahl Saraf <saraf.gahl@gmail.com> <gahl@raftt.io>
georgespatton <georgespatton@users.noreply.github.com>
ghjklw <malo@jaffre.info>
Gilli Sigurdsson (gillisig) <gilli@vx.is>
Gleb Sinyavskiy <zhulik.gleb@gmail.com>
Graham Miln (grahammiln) <graham.miln@dssw.co.uk> <graham.miln@miln.eu>
greatroar <61184462+greatroar@users.noreply.github.com>
Greg <gco@jazzhaiku.com>
Han Boetes <han@boetes.org>
HansK-p <42314815+HansK-p@users.noreply.github.com>
Harrison Jones (harrisonhjones) <harrisonhjones@users.noreply.github.com>
@ -117,6 +120,7 @@ Heiko Zuerker (Smiley73) <heiko@zuerker.org>
Hugo Locurcio <hugo.locurcio@hugo.pro>
Iain Barnett <iainspeed@gmail.com>
Ian Johnson (anonymouse64) <ian.johnson@canonical.com> <person.uwsome@gmail.com>
ignacy123 <ignacy.buczek@onet.pl>
Ikko Ashimine <eltociear@gmail.com>
Ilya Brin <464157+ilyabrin@users.noreply.github.com>
Iskander Sharipov (Alex) <quasilyte@gmail.com>
@ -150,6 +154,7 @@ Jörg Thalheim <Mic92@users.noreply.github.com>
Jędrzej Kula <kula.jedrek@gmail.com>
Kalle Laine <pahakalle@protonmail.com>
Karol Różycki (krozycki) <rozycki.karol@gmail.com>
Kebin Liu <lkebin@gmail.com>
Keith Turner <kturner@apache.org>
Kelong Cong (kc1212) <kc04bc@gmx.com> <kc1212@users.noreply.github.com>
Ken'ichi Kamada (kamadak) <kamada@nanohz.org>
@ -198,6 +203,7 @@ MikolajTwarog <43782609+MikolajTwarog@users.noreply.github.com>
Mingxuan Lin <gdlmx@users.noreply.github.com>
mv1005 <49659413+mv1005@users.noreply.github.com>
Nate Morrison (nrm21) <natemorrison@gmail.com>
Naveen <172697+naveensrinivasan@users.noreply.github.com>
Nicholas Rishel (PrototypeNM1) <rishel.nick@gmail.com> <PrototypeNM1@users.noreply.github.com>
Nico Stapelbroek <3368018+nstapelbroek@users.noreply.github.com>
Nicolas Braud-Santoni <nicolas@braud-santoni.eu>
@ -239,6 +245,7 @@ Roman Zaynetdinov (zaynetro) <romanznet@gmail.com>
Ross Smith II (rasa) <ross@smithii.com>
rubenbe <github-com-00ff86@vandamme.email>
Ruslan Yevdokymov <38809160+ruslanye@users.noreply.github.com>
Ryan Qian <i@bitbili.net>
Ryan Sullivan (KayoticSully) <kayoticsully@gmail.com>
Sacheendra Talluri (sacheendra) <sacheendra.t@gmail.com>
Scott Klupfel (kluppy) <kluppy@going2blue.com>
@ -251,6 +258,8 @@ Stefan Kuntz (Stefan-Code) <stefan.github@gmail.com> <Stefan.github@gmail.com>
Stefan Tatschner (rumpelsepp) <stefan@sevenbyte.org> <rumpelsepp@sevenbyte.org> <stefan@rumpelsepp.org>
Steven Eckhoff <steven.eckhoff.opensource@gmail.com>
Suhas Gundimeda (snugghash) <suhas.gundimeda@gmail.com> <snugghash@gmail.com>
Syncthing Automation <automation@syncthing.net>
Syncthing Release Automation <release@syncthing.net>
Taylor Khan (nelsonkhan) <nelsonkhan@gmail.com>
Thomas Hipp <thomashipp@gmail.com>
Tim Abell (timabell) <tim@timwise.co.uk>
@ -268,6 +277,7 @@ Unrud (Unrud) <unrud@openaliasbox.org> <Unrud@users.noreply.github.com>
Veeti Paananen (veeti) <veeti.paananen@rojekti.fi>
Victor Buinsky (buinsky) <vix_booja@tut.by>
Vil Brekin (Vilbrekin) <vilbrekin@gmail.com>
villekalliomaki <53118179+villekalliomaki@users.noreply.github.com>
Vladimir Rusinov <vrusinov@google.com> <vladimir.rusinov@gmail.com>
wangguoliang <liangcszzu@163.com>
William A. Kennington III (wkennington) <william@wkennington.com>

View File

@ -16,7 +16,7 @@ the name of the Syncthing instance can be optionally defined by using
**Docker cli**
```
$ docker pull syncthing/syncthing
$ docker run -p 8384:8384 -p 22000:22000/tcp -p 22000:22000/udp \
$ docker run -p 8384:8384 -p 22000:22000/tcp -p 22000:22000/udp -p 21027:21027/udp \
-v /wherever/st-sync:/var/syncthing \
--hostname=my-syncthing \
syncthing/syncthing:latest
@ -37,9 +37,10 @@ services:
volumes:
- /wherever/st-sync:/var/syncthing
ports:
- 8384:8384
- 22000:22000/tcp
- 22000:22000/udp
- 8384:8384 # Web UI
- 22000:22000/tcp # TCP file transfers
- 22000:22000/udp # QUIC file transfers
- 21027:21027/udp # Receive local discovery broadcasts
restart: unless-stopped
```

View File

@ -883,7 +883,7 @@ func shouldRebuildAssets(target, srcdir string) bool {
func updateDependencies() {
runPrint(goCmd, "get", "-u", "./cmd/...")
runPrint(goCmd, "mod", "tidy", "-go=1.16", "-compat=1.16")
runPrint(goCmd, "mod", "tidy", "-go=1.17", "-compat=1.17")
// We might have updated the protobuf package and should regenerate to match.
proto()

View File

@ -84,7 +84,7 @@ func checkServers(deviceID protocol.DeviceID, servers ...string) {
}
func checkServer(deviceID protocol.DeviceID, server string) checkResult {
disco, err := discover.NewGlobal(server, tls.Certificate{}, nil, events.NoopLogger)
disco, err := discover.NewGlobal(server, tls.Certificate{}, nil, events.NoopLogger, nil)
if err != nil {
return checkResult{error: err}
}

View File

@ -27,7 +27,7 @@ var errorsCommand = cli.Command{
{
Name: "push",
Usage: "Push an error to active clients",
ArgsUsage: "[error message]",
ArgsUsage: "ERROR-MESSAGE",
Action: expects(1, errorsPush),
},
{

View File

@ -39,13 +39,13 @@ var operationCommand = cli.Command{
{
Name: "folder-override",
Usage: "Override changes on folder (remote for sendonly, local for receiveonly). WARNING: Destructive - deletes/changes your data.",
ArgsUsage: "[folder id]",
ArgsUsage: "FOLDER-ID",
Action: expects(1, foldersOverride),
},
{
Name: "default-ignores",
Usage: "Set the default ignores (config) from a file",
ArgsUsage: "path",
ArgsUsage: "PATH",
Action: expects(1, setDefaultIgnores),
},
},

View File

@ -173,7 +173,7 @@ type serveOptions struct {
DebugGUIAssetsDir string `placeholder:"PATH" help:"Directory to load GUI assets from" env:"STGUIASSETS"`
DebugPerfStats bool `env:"STPERFSTATS" help:"Write running performance statistics to perf-$pid.csv (Unix only)"`
DebugProfileBlock bool `env:"STBLOCKPROFILE" help:"Write block profiles to block-$pid-$timestamp.pprof every 20 seconds"`
DebugProfileCPU bool `help:"Write a CPU profile to cpu-$pid.pprof on exit" env:"CPUPROFILE"`
DebugProfileCPU bool `help:"Write a CPU profile to cpu-$pid.pprof on exit" env:"STCPUPROFILE"`
DebugProfileHeap bool `env:"STHEAPPROFILE" help:"Write heap profiles to heap-$pid-$timestamp.pprof each time heap usage increases"`
DebugProfilerListen string `placeholder:"ADDR" env:"STPROFILER" help:"Network profiler listen address"`
DebugResetDatabase bool `name:"reset-database" help:"Reset the database, forcing a full rescan and resync"`

31
go.mod
View File

@ -34,7 +34,7 @@ require (
github.com/minio/sha256-simd v1.0.0
github.com/miscreant/miscreant.go v0.0.0-20200214223636-26d376326b75
github.com/oschwald/geoip2-golang v1.5.0
github.com/pierrec/lz4/v4 v4.1.12
github.com/pierrec/lz4/v4 v4.1.13
github.com/pkg/errors v0.9.1
github.com/prometheus/client_golang v1.11.0
github.com/prometheus/common v0.30.0 // indirect
@ -44,7 +44,7 @@ require (
github.com/shirou/gopsutil/v3 v3.21.12
github.com/syncthing/notify v0.0.0-20210616190510-c6b7342338d2
github.com/syndtr/goleveldb v1.0.1-0.20200815071216-d9e9293bd0f7
github.com/thejerf/suture/v4 v4.0.1
github.com/thejerf/suture/v4 v4.0.2
github.com/urfave/cli v1.22.5
github.com/vitrun/qart v0.0.0-20160531060029-bf64b92db6b0
golang.org/x/crypto v0.0.0-20210921155107-089bfa567519
@ -53,8 +53,31 @@ require (
golang.org/x/sys v0.0.0-20211013075003-97ac67df715c
golang.org/x/text v0.3.7
golang.org/x/time v0.0.0-20210723032227-1f47c861a9ac
golang.org/x/tools v0.1.6
golang.org/x/tools v0.1.7
google.golang.org/protobuf v1.27.1
)
go 1.16
require (
github.com/Azure/go-ntlmssp v0.0.0-20200615164410-66371956d46c // indirect
github.com/beorn7/perks v1.0.1 // indirect
github.com/cheekybits/genny v1.0.0 // indirect
github.com/go-ole/go-ole v1.2.6 // indirect
github.com/go-task/slim-sprig v0.0.0-20210107165309-348f09dbbbc0 // indirect
github.com/golang/protobuf v1.5.2 // indirect
github.com/marten-seemann/qtls-go1-16 v0.1.4 // indirect
github.com/marten-seemann/qtls-go1-17 v0.1.0 // indirect
github.com/marten-seemann/qtls-go1-18 v0.1.0-beta.1 // indirect
github.com/matttproud/golang_protobuf_extensions v1.0.1 // indirect
github.com/nxadm/tail v1.4.8 // indirect
github.com/onsi/ginkgo v1.16.4 // indirect
github.com/oschwald/maxminddb-golang v1.8.0 // indirect
github.com/petermattis/goid v0.0.0-20180202154549-b0b1615b78e5 // indirect
github.com/power-devops/perfstat v0.0.0-20210106213030-5aafc221ea8c // indirect
github.com/prometheus/client_model v0.2.0 // indirect
github.com/russross/blackfriday/v2 v2.1.0 // indirect
github.com/yusufpapurcu/wmi v1.2.2 // indirect
golang.org/x/xerrors v0.0.0-20200804184101-5ec99f83aff1 // indirect
gopkg.in/tomb.v1 v1.0.0-20141024135613-dd632973f1e7 // indirect
)
go 1.17

16
go.sum
View File

@ -300,8 +300,8 @@ github.com/oschwald/maxminddb-golang v1.8.0 h1:Uh/DSnGoxsyp/KYbY1AuP0tYEwfs0sCph
github.com/oschwald/maxminddb-golang v1.8.0/go.mod h1:RXZtst0N6+FY/3qCNmZMBApR19cdQj43/NM9VkrNAis=
github.com/petermattis/goid v0.0.0-20180202154549-b0b1615b78e5 h1:q2e307iGHPdTGp0hoxKjt1H5pDo6utceo3dQVK3I5XQ=
github.com/petermattis/goid v0.0.0-20180202154549-b0b1615b78e5/go.mod h1:jvVRKCrJTQWu0XVbaOlby/2lO20uSCHEMzzplHXte1o=
github.com/pierrec/lz4/v4 v4.1.12 h1:44l88ehTZAUGW4VlO1QC4zkilL99M6Y9MXNwEs0uzP8=
github.com/pierrec/lz4/v4 v4.1.12/go.mod h1:gZWDp/Ze/IJXGXf23ltt2EXimqmTUXEy0GFuRQyBid4=
github.com/pierrec/lz4/v4 v4.1.13 h1:/OvL3gfLjTf7nEATCYFLe4VeorMGI3nhLU5eb8FnEjU=
github.com/pierrec/lz4/v4 v4.1.13/go.mod h1:gZWDp/Ze/IJXGXf23ltt2EXimqmTUXEy0GFuRQyBid4=
github.com/pkg/errors v0.8.0/go.mod h1:bwawxfHBFNV+L2hUp1rHADufV3IMtnDRdf1r5NINEl0=
github.com/pkg/errors v0.8.1/go.mod h1:bwawxfHBFNV+L2hUp1rHADufV3IMtnDRdf1r5NINEl0=
github.com/pkg/errors v0.9.1 h1:FEBLx1zS214owpjy7qsBeixbURkuhQAwrK5UwLGTwt4=
@ -337,7 +337,6 @@ github.com/prometheus/procfs v0.7.3/go.mod h1:cz+aTbrPOrUb4q7XlbU9ygM+/jj0fzG6c1
github.com/rcrowley/go-metrics v0.0.0-20201227073835-cf1acfcdf475 h1:N/ElC8H3+5XpJzTSTfLsJV/mx9Q9g7kxmchpfZyxgzM=
github.com/rcrowley/go-metrics v0.0.0-20201227073835-cf1acfcdf475/go.mod h1:bCqnVzQkZxMG4s8nGwiZ5l3QUCyqpo9Y+/ZMZ9VjZe4=
github.com/rogpeppe/go-internal v1.3.0/go.mod h1:M8bDsm7K2OlrFYOpmOWEs/qY81heoFRclV5y23lUDJ4=
github.com/russross/blackfriday v1.5.2 h1:HyvC0ARfnZBqnXwABFeSZHpKvJHJJfPz81GNueLj0oo=
github.com/russross/blackfriday v1.5.2/go.mod h1:JO/DiYxRf+HjHt06OyowR9PTA263kcR/rfWxYHBV53g=
github.com/russross/blackfriday/v2 v2.0.1/go.mod h1:+Rmxgy9KzJVeS9/2gXHxylqXiyQDYRxCVz55jmeOWTM=
github.com/russross/blackfriday/v2 v2.1.0 h1:JIOH55/0cWyOuilr9/qlrm0BSXldqnqwMsf35Ld67mk=
@ -391,8 +390,8 @@ github.com/syncthing/notify v0.0.0-20210616190510-c6b7342338d2/go.mod h1:J0q59IW
github.com/syndtr/goleveldb v1.0.1-0.20200815071216-d9e9293bd0f7 h1:udtnv1cokhJYqnUfCMCppJ71bFN9VKfG1BQ6UsYZnx8=
github.com/syndtr/goleveldb v1.0.1-0.20200815071216-d9e9293bd0f7/go.mod h1:u2MKkTVTVJWe5D1rCvame8WqhBd88EuIwODJZ1VHCPM=
github.com/tarm/serial v0.0.0-20180830185346-98f6abe2eb07/go.mod h1:kDXzergiv9cbyO7IOYJZWg1U88JhDg3PB6klq9Hg2pA=
github.com/thejerf/suture/v4 v4.0.1 h1:CLnC1wxLAiHA5zTbbvhSWMupVuGe5ZJ7YddWE3lvb4M=
github.com/thejerf/suture/v4 v4.0.1/go.mod h1:g0e8vwskm9tI0jRjxrnA6lSr0q6OfPdWJVX7G5bVWRs=
github.com/thejerf/suture/v4 v4.0.2 h1:VxIH/J8uYvqJY1+9fxi5GBfGRkRZ/jlSOP6x9HijFQc=
github.com/thejerf/suture/v4 v4.0.2/go.mod h1:g0e8vwskm9tI0jRjxrnA6lSr0q6OfPdWJVX7G5bVWRs=
github.com/tklauser/go-sysconf v0.3.9/go.mod h1:11DU/5sG7UexIrp/O6g35hrWzu0JxlwQ3LSFUzyeuhs=
github.com/tklauser/numcpus v0.3.0/go.mod h1:yFGUr7TUHQRAhyqBcEg0Ge34zDBAsIvJJcyE6boqnA8=
github.com/urfave/cli v1.20.0/go.mod h1:70zkFmudgCuE/ngEzBv17Jvp/497gISqfk5gWijbERA=
@ -407,7 +406,6 @@ github.com/yuin/goldmark v1.1.27/go.mod h1:3hX8gzYuyVAZsxl0MRgGTJEmQBFcNTphYh9de
github.com/yuin/goldmark v1.1.32/go.mod h1:3hX8gzYuyVAZsxl0MRgGTJEmQBFcNTphYh9decYSb74=
github.com/yuin/goldmark v1.2.1/go.mod h1:3hX8gzYuyVAZsxl0MRgGTJEmQBFcNTphYh9decYSb74=
github.com/yuin/goldmark v1.3.5/go.mod h1:mwnBkeHKe2W/ZEtQ+71ViKU8L12m81fl3OWwC1Zlc8k=
github.com/yuin/goldmark v1.4.0/go.mod h1:mwnBkeHKe2W/ZEtQ+71ViKU8L12m81fl3OWwC1Zlc8k=
github.com/yusufpapurcu/wmi v1.2.2 h1:KBNDSne4vP5mbSWnJbO+51IMOXJB67QiYCSBrubbPRg=
github.com/yusufpapurcu/wmi v1.2.2/go.mod h1:SBZ9tNy3G9/m5Oi98Zks0QjeHVDvuK0qfxQmPyzfmi0=
go.opencensus.io v0.18.0/go.mod h1:vKdFvxhtzZ9onBp9VKHK8z/sRpBMnKAsufL7wlDrCOA=
@ -507,7 +505,6 @@ golang.org/x/net v0.0.0-20210405180319-a5a99cb37ef4/go.mod h1:p54w0d4576C0XHj96b
golang.org/x/net v0.0.0-20210428140749-89ef3d95e781/go.mod h1:OJAsFXCWl8Ukc7SiCT/9KSuxbyM7479/AVlXFRxuMCk=
golang.org/x/net v0.0.0-20210525063256-abc453219eb5/go.mod h1:9nx3DQGgdP8bBQD5qxJ1jj9UTztislL4KSBs9R2vV5Y=
golang.org/x/net v0.0.0-20210716203947-853a461950ff/go.mod h1:9nx3DQGgdP8bBQD5qxJ1jj9UTztislL4KSBs9R2vV5Y=
golang.org/x/net v0.0.0-20210805182204-aaa1db679c0d/go.mod h1:9nx3DQGgdP8bBQD5qxJ1jj9UTztislL4KSBs9R2vV5Y=
golang.org/x/net v0.0.0-20210924151903-3ad01bbaa167 h1:eDd+TJqbgfXruGQ5sJRU7tEtp/58OAx4+Ayjxg4SM+4=
golang.org/x/net v0.0.0-20210924151903-3ad01bbaa167/go.mod h1:9nx3DQGgdP8bBQD5qxJ1jj9UTztislL4KSBs9R2vV5Y=
golang.org/x/oauth2 v0.0.0-20180821212333-d2e6202438be/go.mod h1:N/0e6XlmueqKjAGxoOufVs8QHGRruUQn6yWY3a++T0U=
@ -585,7 +582,6 @@ golang.org/x/sys v0.0.0-20210510120138-977fb7262007/go.mod h1:oPkhp1MJrh7nUepCBc
golang.org/x/sys v0.0.0-20210603081109-ebe580a85c40/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
golang.org/x/sys v0.0.0-20210615035016-665e8c7367d1/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
golang.org/x/sys v0.0.0-20210630005230-0f9fa26af87c/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
golang.org/x/sys v0.0.0-20210809222454-d867a43fc93e/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
golang.org/x/sys v0.0.0-20210816074244-15123e1e1f71/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
golang.org/x/sys v0.0.0-20211013075003-97ac67df715c h1:taxlMj0D/1sOAuv/CbSD+MMDof2vbyPTqz5FNYKpXt8=
golang.org/x/sys v0.0.0-20211013075003-97ac67df715c/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
@ -652,8 +648,8 @@ golang.org/x/tools v0.0.0-20201224043029-2b0845dc783e/go.mod h1:emZCQorbCU4vsT4f
golang.org/x/tools v0.0.0-20210106214847-113979e3529a/go.mod h1:emZCQorbCU4vsT4fOWvOPXz4eW1wZW4PmDk9uLelYpA=
golang.org/x/tools v0.1.1/go.mod h1:o0xws9oXOQQZyjljx8fwUC0k7L1pTE6eaCbjGeHmOkk=
golang.org/x/tools v0.1.5/go.mod h1:o0xws9oXOQQZyjljx8fwUC0k7L1pTE6eaCbjGeHmOkk=
golang.org/x/tools v0.1.6 h1:SIasE1FVIQOWz2GEAHFOmoW7xchJcqlucjSULTL0Ag4=
golang.org/x/tools v0.1.6/go.mod h1:LGqMHiF4EqQNHR1JncWGqT5BVaXmza+X+BDGol+dOxo=
golang.org/x/tools v0.1.7 h1:6j8CgantCy3yc8JGBqkDLMKWqZ0RDU2g1HVgacojGWQ=
golang.org/x/tools v0.1.7/go.mod h1:LGqMHiF4EqQNHR1JncWGqT5BVaXmza+X+BDGol+dOxo=
golang.org/x/xerrors v0.0.0-20190717185122-a985d3407aa7/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0=
golang.org/x/xerrors v0.0.0-20191011141410-1b5146add898/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0=
golang.org/x/xerrors v0.0.0-20191204190536-9bdfabe68543/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0=

View File

@ -506,3 +506,10 @@ ul.three-columns li, ul.two-columns li {
padding-top: 6px;
padding-bottom: 6px;
}
/* CJK languages don't use italic at all, hence don't force it on them. */
html[lang|="zh"] i,
html[lang="ja"] i,
html[lang|="ko"] i {
font-style: normal;
}

View File

@ -19,6 +19,7 @@
"Advanced": "Разширени",
"Advanced Configuration": "Разширени настройки",
"All Data": "Всички данни",
"All Time": "През цялото време",
"All folders shared with this device must be protected by a password, such that all sent data is unreadable without the given password.": "Всички папки, споделени с устройството трябва да бъдат защитени с парола, така че данните да са недостъпни без нея.",
"Allow Anonymous Usage Reporting?": "Разрешаване на анонимното отчитане на употребата?",
"Allowed Networks": "Разрешени мрежи",
@ -27,6 +28,7 @@
"An external command handles the versioning. It has to remove the file from the shared folder. If the path to the application contains spaces, it should be quoted.": "Външна команда управлява версиите. Тя трябва да премахне файла от синхронизираната папка. Ако в пътя до приложението има интервали, то той трябва да бъде поставен в кавички.",
"Anonymous Usage Reporting": "Анонимно отчитане на употреба",
"Anonymous usage report format has changed. Would you like to move to the new format?": "Форматът на данните за анонимно отчитане на употреба е променен. Желаете ли да използвате него вместо стария?",
"Apply": "Прилагане",
"Are you sure you want to continue?": "Сигурни ли сте, че желаете да продължите?",
"Are you sure you want to override all remote changes?": "Сигурни ли сте, че желаете да отмените всички промени, направени отдалечено?",
"Are you sure you want to permanently delete all these files?": "Сигурни ли сте, че желаете всички тези файлове да бъдат безвъзвратно премахнати?",
@ -60,12 +62,13 @@
"Connection Error": "Грешка при осъществяване на връзка",
"Connection Type": "Вид на връзката",
"Connections": "Връзки",
"Continuously watching for changes is now available within Syncthing. This will detect changes on disk and issue a scan on only the modified paths. The benefits are that changes are propagated quicker and that less full scans are required.": "Syncthing вече разполага с постоянно наблюдение за промени. Така се забелязват промените на дисковото устройство и се обхождат само променените папки. Ползите са, че промените се разпространяват по-бързо и с по-малко на брой пълни обхождания.",
"Continuously watching for changes is now available within Syncthing. This will detect changes on disk and issue a scan on only the modified paths. The benefits are that changes are propagated quicker and that less full scans are required.": "Syncthing вече разполага с постоянно наблюдение за промени. Така се отчитат промените на дисковото устройство и се обхождат само повлияните папки. Ползите са, че промените се разпространяват по-бързо и с по-малко на брой пълни обхождания.",
"Copied from elsewhere": "Копирано от другаде",
"Copied from original": "Копирано от източника",
"Copyright © 2014-2019 the following Contributors:": "Всички права запазени © 2014-2019 за следните сътрудници:",
"Creating ignore patterns, overwriting an existing file at {%path%}.": "При създаване на шаблони за пренебрегване, съществуващият файл „{{path}}“ ще бъде презаписан.",
"Currently Shared With Devices": "Устройства, с които е споделена",
"Custom Range": "В периода",
"Danger!": "Опасност!",
"Debugging Facilities": "Отстраняване на дефекти",
"Default Configuration": "Настройки по подразбиране",
@ -128,14 +131,14 @@
"Error": "Грешка",
"External File Versioning": "Външно управление на версии",
"Failed Items": "Елементи с грешка",
"Failed to load file versions.": "Failed to load file versions.",
"Failed to load file versions.": "Грешка при зареждане на версии.",
"Failed to load ignore patterns.": "Грешка при зареждане на шаблони за пренебрегване.",
"Failed to setup, retrying": "Грешка при настройване, извършва се повторен опит",
"Failure to connect to IPv6 servers is expected if there is no IPv6 connectivity.": "Неуспешна връзка към сървъри по IPv6 може да се очаква ако няма свързаност по IPv6.",
"File Pull Order": "Ред на изтегляне",
"File Versioning": "Версии на файловете",
"Files are moved to .stversions directory when replaced or deleted by Syncthing.": "Файловете биват преместени в папка .stversions при заменяне или изтриване от Syncthing.",
"Files are moved to date stamped versions in a .stversions directory when replaced or deleted by Syncthing.": "Когато Syncthing замени или изтрие файл той бива преместен в папката .stversions и преименуван - с добавяне на датата и часа.",
"Files are moved to date stamped versions in a .stversions directory when replaced or deleted by Syncthing.": "Когато Syncthing замени или изтрие файл той бива преместен в папката .stversions и преименуван чрез добавяне на датата и часа.",
"Files are protected from changes made on other devices, but changes made on this device will be sent to the rest of the cluster.": "Предпазва местните файлове от промени, идващи от другите устройства, но местните промени се изпращат.",
"Files are synchronized from the cluster, but any changes made locally will not be sent to other devices.": "Файловете се синхронизират от другите устройства, но местните промени не се изпращат.",
"Filesystem Watcher Errors": "Грешка при наблюдаване на файловата система",
@ -171,7 +174,7 @@
"Ignore": "Пренебрегване",
"Ignore Patterns": "Шаблони за пренебрегване",
"Ignore Permissions": "Пренебрегване на права",
"Ignore patterns can only be added after the folder is created. If checked, an input field to enter ignore patterns will be presented after saving.": "Ignore patterns can only be added after the folder is created. If checked, an input field to enter ignore patterns will be presented after saving.",
"Ignore patterns can only be added after the folder is created. If checked, an input field to enter ignore patterns will be presented after saving.": "Шаблони за пренебрегване могат да бъдат добавяни след като папката бъде създадена. Ако е отметнато, след запазване ще бъде показано текстово поле за шаблоните.",
"Ignored Devices": "Пренебрегнати устройства",
"Ignored Folders": "Пренебрегнати папки",
"Ignored at": "Пренебрегнато на",
@ -183,6 +186,9 @@
"Keep Versions": "Пазени версии",
"LDAP": "LDAP",
"Largest First": " Първо най-големи",
"Last 30 Days": "Последните 30 дена",
"Last 7 Days": "Последните 7 дена",
"Last Month": "Миналия месец",
"Last Scan": "Последно обхождане",
"Last seen": "Последно видяно",
"Latest Change": "Последна промяна",
@ -293,7 +299,7 @@
"Select the folders to share with this device.": "Изберете папките, които да споделите с устройството.",
"Send & Receive": "Изпраща и получава",
"Send Only": "Само изпраща",
"Set Ignores on Added Folder": "Set Ignores on Added Folder",
"Set Ignores on Added Folder": "Добавяне на шаблони за пренебрегване",
"Settings": "Настройки",
"Share": "Споделяне",
"Share Folder": "Споделяне на папка",
@ -365,7 +371,7 @@
"The interval must be a positive number of seconds.": "Интервалът трябва да е положителен брой секунди.",
"The interval, in seconds, for running cleanup in the versions directory. Zero to disable periodic cleaning.": "Интервал, в секунди, на почистване на папката с версии. Нула изключва периодичното почистване.",
"The maximum age must be a number and cannot be blank.": "Максималната възраст трябва да е число, полето не може да бъде празно.",
"The maximum time to keep a version (in days, set to 0 to keep versions forever).": "Максималното време за пазене на версия (в дни, задайте 0 за да не бъдат изтривани версии).",
"The maximum time to keep a version (in days, set to 0 to keep versions forever).": "Максимална продължителност за пазене на версия (в дни, за да не бъдат изтривани версии задайте 0).",
"The number of days must be a number and cannot be blank.": "Броят дни трябва да бъде число и не може да бъде празно.",
"The number of days to keep files in the trash can. Zero means forever.": "Брой дни за пазене на файловете в кошчето. Нула значи завинаги.",
"The number of old versions to keep, per file.": "Брой стари версии, които да бъдат пазени за всеки файл.",
@ -374,17 +380,20 @@
"The rate limit must be a non-negative number (0: no limit)": "Ограничението на скоростта трябва да бъде положително число (0: неограничено)",
"The rescan interval must be a non-negative number of seconds.": "Интервалът на обхождане трябва да е положителен брой секунди.",
"There are no devices to share this folder with.": "Няма устройства, с които да споделите папката.",
"There are no file versions to restore.": "There are no file versions to restore.",
"There are no file versions to restore.": "Файлът няма версии, които да бъдат възстановени.",
"There are no folders to share with this device.": "Няма папка, която да споделите с устройството.",
"They are retried automatically and will be synced when the error is resolved.": "Ще бъдат спрени и автоматично синхронизирани, когато грешката бъде отстранена.",
"This Device": "Това устройство",
"This Month": "Този месец",
"This can easily give hackers access to read and change any files on your computer.": "Така се предоставя лесен достъп за четене и промяна на всеки файл на компютъра.",
"This device cannot automatically discover other devices or announce its own address to be found by others. Only devices with statically configured addresses can connect.": "Устройството не може автоматично да открива други устройства или да обяви своя адрес, за да бъде намерено от другите. Само устройствата със статично настроени адреси могат да се свързват.",
"This is a major version upgrade.": "Това е обновяване на значимо издание.",
"This setting controls the free space required on the home (i.e., index database) disk.": "Тази настройка управлява нужното свободното място на основния (пр. този с банката от данни) диск.",
"Time": "Време",
"Time the item was last modified": "Час на последна промяна на елемента",
"Today": "Днес",
"Trash Can File Versioning": "Версии от вида „кошче за отпадъци“",
"Twitter": "Twitter",
"Type": "Вид",
"UNIX Permissions": "Права на UNIX",
"Unavailable": "Няма налични",
@ -428,6 +437,7 @@
"When adding a new device, keep in mind that this device must be added on the other side too.": "Когато добавяте ново устройство имайте предвид, че то също трябва да бъде добавено от другата страна.",
"When adding a new folder, keep in mind that the Folder ID is used to tie folders together between devices. They are case sensitive and must match exactly between all devices.": "Като добавяте папката имайте предвид, че той се използва за еднозначно указване на папката между устройствата. Има разлика в регистъра на знаците и трябва изцяло да съвпада между всички устройства.",
"Yes": "Да",
"Yesterday": "Вчера",
"You can also select one of these nearby devices:": "Също така може да изберете едно от устройствата, които се намират наблизо:",
"You can change your choice at any time in the Settings dialog.": "Може да промените решението си по всяко време в прозореца Настройки.",
"You can read more about the two release channels at the link below.": "Може да научите повече за двата канала на издание, следвайки препратката по-долу.",

View File

@ -19,6 +19,7 @@
"Advanced": "Avançat",
"Advanced Configuration": "Configuració avançada",
"All Data": "Totes les dades",
"All Time": "All Time",
"All folders shared with this device must be protected by a password, such that all sent data is unreadable without the given password.": "All folders shared with this device must be protected by a password, such that all sent data is unreadable without the given password.",
"Allow Anonymous Usage Reporting?": "Permetre informes d'ús anònim?",
"Allowed Networks": "Xarxes permeses",
@ -27,6 +28,7 @@
"An external command handles the versioning. It has to remove the file from the shared folder. If the path to the application contains spaces, it should be quoted.": "Un comandament extern maneja el versionat. És necessari eliminar el fitxer de la carpeta compartida. Si la ruta a l'aplicació conté espais, hi ha que ficar-los entre cometes.",
"Anonymous Usage Reporting": "Informe d'ús anònim",
"Anonymous usage report format has changed. Would you like to move to the new format?": "El format del informe anònim d'ús ha canviat. Vols canviar al nou format?",
"Apply": "Apply",
"Are you sure you want to continue?": "Are you sure you want to continue?",
"Are you sure you want to override all remote changes?": "Are you sure you want to override all remote changes?",
"Are you sure you want to permanently delete all these files?": "Are you sure you want to permanently delete all these files?",
@ -66,6 +68,7 @@
"Copyright © 2014-2019 the following Contributors:": "Copyright © 2014-2019 els següents Col·laboradors:",
"Creating ignore patterns, overwriting an existing file at {%path%}.": "Creant patrons a ignorar, sobreescriguent un fitxer que ja existeix a {{path}}.",
"Currently Shared With Devices": "Currently Shared With Devices",
"Custom Range": "Custom Range",
"Danger!": "Perill!",
"Debugging Facilities": "Utilitats de Depuració",
"Default Configuration": "Default Configuration",
@ -183,6 +186,9 @@
"Keep Versions": "Mantindre versions",
"LDAP": "LDAP",
"Largest First": "El més gran primer",
"Last 30 Days": "Last 30 Days",
"Last 7 Days": "Last 7 Days",
"Last Month": "Last Month",
"Last Scan": "Últim escaneig",
"Last seen": "Vist per última vegada",
"Latest Change": "Últim Canvi",
@ -378,13 +384,16 @@
"There are no folders to share with this device.": "There are no folders to share with this device.",
"They are retried automatically and will be synced when the error is resolved.": "Es reintenta automàticament i es sincronitzaràn quant el resolga l'error.",
"This Device": "Aquest Dispositiu",
"This Month": "This Month",
"This can easily give hackers access to read and change any files on your computer.": "Açò pot donar accés fàcilment als hackers per a llegir i canviar qualsevol fitxer al teu ordinador.",
"This device cannot automatically discover other devices or announce its own address to be found by others. Only devices with statically configured addresses can connect.": "This device cannot automatically discover other devices or announce its own address to be found by others. Only devices with statically configured addresses can connect.",
"This is a major version upgrade.": "Aquesta és una actualització important de la versió.",
"This setting controls the free space required on the home (i.e., index database) disk.": "Aquest ajust controla l'espai lliure requerit en el disc inicial (per exemple, la base de dades de l'index).",
"Time": "Temps",
"Time the item was last modified": "Hora a la que l'ítem fou modificat per última vegada",
"Today": "Today",
"Trash Can File Versioning": "Versionat d'arxius de la paperera",
"Twitter": "Twitter",
"Type": "Tipus",
"UNIX Permissions": "UNIX Permissions",
"Unavailable": "No disponible",
@ -428,6 +437,7 @@
"When adding a new device, keep in mind that this device must be added on the other side too.": "Quant s'afig un nou dispositiu, hi ha que tindre en compte que aquest dispositiu deu ser afegit també en l'altre costat.",
"When adding a new folder, keep in mind that the Folder ID is used to tie folders together between devices. They are case sensitive and must match exactly between all devices.": "Quant s'afig una nova carpeta, hi ha que tindre en compte que l'ID de la carpeta s'utilitza per a juntar les carpetes entre dispositius. Són sensibles a les majúscules i deuen coincidir exactament entre tots els dispositius.",
"Yes": "Sí",
"Yesterday": "Yesterday",
"You can also select one of these nearby devices:": "Pots seleccionar també un d'aquestos dispositius propers:",
"You can change your choice at any time in the Settings dialog.": "Pots canviar la teua elecció en qualsevol moment en el dialog Ajustos",
"You can read more about the two release channels at the link below.": "Pots llegir més sobre els dos canals de versions en l'enllaç de baix.",

View File

@ -19,6 +19,7 @@
"Advanced": "Pokročilé",
"Advanced Configuration": "Pokročilá nastavení",
"All Data": "Všechna data",
"All Time": "Celou dobu",
"All folders shared with this device must be protected by a password, such that all sent data is unreadable without the given password.": "Všechny složky sdílené s tímto zařízením musí být chráněna heslem, aby byla odesílaná data bez hesla nečitelná.",
"Allow Anonymous Usage Reporting?": "Povolit anonymní hlášení o používání?",
"Allowed Networks": "Sítě, ze kterých je umožněn přístup",
@ -27,6 +28,7 @@
"An external command handles the versioning. It has to remove the file from the shared folder. If the path to the application contains spaces, it should be quoted.": "Správu verzí obstarává externí příkaz. U toho je třeba, aby neaktuální soubory jím byly odsouvány pryč ze sdílené složky. Pokud popis umístění tohoto příkazu obsahuje mezeru, je třeba popis umístění uzavřít do uvozovek.",
"Anonymous Usage Reporting": "Anonymní hlášení o používání",
"Anonymous usage report format has changed. Would you like to move to the new format?": "Formát anonymního hlášení o používání byl změněn. Chcete přejít na nový formát?",
"Apply": "Apply",
"Are you sure you want to continue?": "Skutečně si přejete pokračovat?",
"Are you sure you want to override all remote changes?": "Skutečně si přejete přebít všechny vzdálené změny?",
"Are you sure you want to permanently delete all these files?": "Skutečně chcete smazat všechny tyto soubory?",
@ -66,6 +68,7 @@
"Copyright © 2014-2019 the following Contributors:": "Copyright © 2014-2019 následující přispěvatelé:",
"Creating ignore patterns, overwriting an existing file at {%path%}.": "Vytvářejí se vzory ignorovaného a přepisuje se jimi existující soubor v {{path}}.",
"Currently Shared With Devices": "Aktuálně sdíleno se zařízeními",
"Custom Range": "Přesný rozsah",
"Danger!": "Nebezpečí!",
"Debugging Facilities": "Nástroje pro ladění",
"Default Configuration": "Výchozí nastavení",
@ -183,6 +186,9 @@
"Keep Versions": "Kolik verzí ponechávat",
"LDAP": "LDAP",
"Largest First": "Od největších",
"Last 30 Days": "Posledních 30 dní",
"Last 7 Days": "Posledních 7 dní",
"Last Month": "Poslední měsíc",
"Last Scan": "Poslední sken",
"Last seen": "Naposledy spatřen",
"Latest Change": "Poslední změna",
@ -378,13 +384,16 @@
"There are no folders to share with this device.": "S tímto zařízením nejsou sdíleny žádné složky.",
"They are retried automatically and will be synced when the error is resolved.": "Nové pokusy o synchronizaci budou probíhat automaticky a položky budou synchronizovány jakmile bude chyba odstraněna.",
"This Device": "Toto zařízení",
"This Month": "Tento měsíc",
"This can easily give hackers access to read and change any files on your computer.": "Toto může útočníkům jednoduše umožnit čtení a úpravy souborů na vašem počítači. ",
"This device cannot automatically discover other devices or announce its own address to be found by others. Only devices with statically configured addresses can connect.": "Toto zařízení nemůže automaticky objevovat ostatní zařízení ani oznamovat ostatním vlastní adresu. Připojit se mohou jen zařízení se staticky nastavenou adresou.",
"This is a major version upgrade.": "Toto je velká aktualizace.",
"This setting controls the free space required on the home (i.e., index database) disk.": "Toto nastavení ovládá velikost volného prostoru na hlavním datovém úložišti (to, na kterém je databáze rejstříku).",
"Time": "Čas",
"Time the item was last modified": "Čas poslední modifikace položky",
"Today": "Dnes",
"Trash Can File Versioning": "Ponechávat jednu předchozí verzi (jako Koš) ",
"Twitter": "Twitter",
"Type": "Typ",
"UNIX Permissions": "UNIX oprávnění",
"Unavailable": "Nedostupné",
@ -428,6 +437,7 @@
"When adding a new device, keep in mind that this device must be added on the other side too.": "Při přidávání nového zařízení mějte na paměti, že je ho třeba také zadat na druhé straně.",
"When adding a new folder, keep in mind that the Folder ID is used to tie folders together between devices. They are case sensitive and must match exactly between all devices.": "Při přidávání nové složky mějte na paměti, že její identifikátor je použit jako vazba mezi složkami napříč zařízeními. Rozlišují se malá a velká písmena a je třeba, aby přesně souhlasilo mezi všemi zařízeními.",
"Yes": "Ano",
"Yesterday": "Včera",
"You can also select one of these nearby devices:": "Také můžete vybrat jedno z těchto okolních zařízení:",
"You can change your choice at any time in the Settings dialog.": "Vaši volbu můžete kdykoliv změnit v dialogu nastavení.",
"You can read more about the two release channels at the link below.": "O kandidátech na vydání si můžete přečíst více v odkazu níže.",

View File

@ -1,5 +1,5 @@
{
"A device with that ID is already added.": "En enhed med dette id er allerede tilføjet.",
"A device with that ID is already added.": "En enhed med dette ID er allerede tilføjet.",
"A negative number of days doesn't make sense.": "Et negativt antal dage giver ikke mening.",
"A new major version may not be compatible with previous versions.": "En ny versionsudgivelse er måske ikke kompatibel med tidligere versioner.",
"API Key": "API-nøgle",
@ -11,7 +11,7 @@
"Add Folder": "Tilføj mappe",
"Add Remote Device": "Tilføj fjernenhed",
"Add devices from the introducer to our device list, for mutually shared folders.": "Tilføj enheder fra den introducerende enhed til vores enhedsliste for gensidigt delte mapper.",
"Add ignore patterns": "Add ignore patterns",
"Add ignore patterns": "Tilføj ignoreringsmønstre",
"Add new folder?": "Tilføj ny mappe",
"Additionally the full rescan interval will be increased (times 60, i.e. new default of 1h). You can also configure it manually for every folder later after choosing No.": "Derudover vil intervallet for den komplette genskan blive forøget (60 gange, dvs. ny standard er 1 time). Du kan også konfigurere det manuelt for hver mappe senere efter at have valgt Nej.",
"Address": "Adresse",
@ -19,14 +19,16 @@
"Advanced": "Avanceret",
"Advanced Configuration": "Avanceret konfiguration",
"All Data": "Alt data",
"All Time": "Hele tiden",
"All folders shared with this device must be protected by a password, such that all sent data is unreadable without the given password.": "Alle mapper delt med denne enhed, skal beskyttes med adgangskode, således at alle sendte data er ikke-læsbare uden den angivne adgangskode.",
"Allow Anonymous Usage Reporting?": "Tillad anonym brugerstatistik?",
"Allowed Networks": "Tilladte netværk",
"Alphabetic": "Alfabetisk",
"Altered by ignoring deletes.": "Altered by ignoring deletes.",
"Altered by ignoring deletes.": "Ændret ved at ignorere sletninger.",
"An external command handles the versioning. It has to remove the file from the shared folder. If the path to the application contains spaces, it should be quoted.": "En ekstern kommando styrer versioneringen. Den skal fjerne filen fra den delte mappe. Hvis stien til programmet indeholder mellemrum, bør den sættes i anførselstegn.",
"Anonymous Usage Reporting": "Anonym brugerstatistik",
"Anonymous usage report format has changed. Would you like to move to the new format?": "Formatet for anonym brugerstatistik er ændret. Vil du flytte til det nye format?",
"Apply": "Anvend",
"Are you sure you want to continue?": "Fortsætte?",
"Are you sure you want to override all remote changes?": "Tilsidesæt alle eksterne ændringer?",
"Are you sure you want to permanently delete all these files?": "Slette valgte filer permanent?",
@ -66,6 +68,7 @@
"Copyright © 2014-2019 the following Contributors:": "Copyright © 2014-2019 de følgende bidragsydere:",
"Creating ignore patterns, overwriting an existing file at {%path%}.": "Opretter ignoreringsmønstre; overskriver en eksisterende fil på {{path}}.",
"Currently Shared With Devices": "i øjeblikket delt med enheder",
"Custom Range": "Tilpasset interval",
"Danger!": "Fare!",
"Debugging Facilities": "Faciliteter til fejlretning",
"Default Configuration": "Standard opsætning",
@ -128,7 +131,7 @@
"Error": "Fejl",
"External File Versioning": "Ekstern filversionering",
"Failed Items": "Mislykkede filer",
"Failed to load file versions.": "Failed to load file versions.",
"Failed to load file versions.": "Fil versioner kunne ikke indlæses.",
"Failed to load ignore patterns.": "Ignorerings-mønstre kunne ikke indlæses.",
"Failed to setup, retrying": "Opsætning mislykkedes; prøver igen",
"Failure to connect to IPv6 servers is expected if there is no IPv6 connectivity.": "Fejl i forbindelse med opkobling til IPv6-servere skal forventes, hvis der ikke er IPv6-forbindelse.",
@ -183,6 +186,9 @@
"Keep Versions": "Behold versioner",
"LDAP": "LDAP",
"Largest First": "Største først",
"Last 30 Days": "Seneste 30 dage",
"Last 7 Days": "Seneste 7 dage",
"Last Month": "Sidste måned",
"Last Scan": "Seneste skanning",
"Last seen": "Sidst set",
"Latest Change": "Seneste ændring",
@ -293,7 +299,7 @@
"Select the folders to share with this device.": "Vælg hvilke mapper du vil dele med denne enhed.",
"Send & Receive": "Send og modtag",
"Send Only": "Send kun",
"Set Ignores on Added Folder": "Set Ignores on Added Folder",
"Set Ignores on Added Folder": "Sæt ignorerer på tilføjet mappe",
"Settings": "Indstillinger",
"Share": "Del",
"Share Folder": "Del mappe",
@ -374,17 +380,20 @@
"The rate limit must be a non-negative number (0: no limit)": "Hastighedsbegrænsningen skal være et ikke-negativt tal (0: ingen begrænsning)",
"The rescan interval must be a non-negative number of seconds.": "Genskanningsintervallet skal være et ikke-negativt antal sekunder.",
"There are no devices to share this folder with.": "Der er ingen enheder at dele denne mappe med.",
"There are no file versions to restore.": "There are no file versions to restore.",
"There are no file versions to restore.": "Der er ingen fil versioner at gendanne.",
"There are no folders to share with this device.": "Der er ingen mapper at dele med denne enhed.",
"They are retried automatically and will be synced when the error is resolved.": "De prøves igen automatisk og vil blive synkroniseret, når fejlen er løst.",
"This Device": "Denne enhed",
"This Month": "Denne måned",
"This can easily give hackers access to read and change any files on your computer.": "Dette gør det nemt for hackere at få adgang til at læse og ændre filer på din computer.",
"This device cannot automatically discover other devices or announce its own address to be found by others. Only devices with statically configured addresses can connect.": "This device cannot automatically discover other devices or announce its own address to be found by others. Only devices with statically configured addresses can connect.",
"This is a major version upgrade.": "Dette er en ny hovedversion.",
"This setting controls the free space required on the home (i.e., index database) disk.": "Denne indstilling styrer den krævede ledige plads på hjemmedrevet (dvs. drevet med indeksdatabasen).",
"Time": "Tid",
"Time the item was last modified": "Tidspunkt for seneste ændring af filen",
"Today": "I dag",
"Trash Can File Versioning": "Versionering med papirkurv",
"Twitter": "Twitter",
"Type": "Type",
"UNIX Permissions": "UNIX rettigheder",
"Unavailable": "Ikke tilgængelig",
@ -428,6 +437,7 @@
"When adding a new device, keep in mind that this device must be added on the other side too.": "Når der tilføjes en ny enhed, vær da opmærksom på, at denne enhed også skal tilføjes i den anden ende.",
"When adding a new folder, keep in mind that the Folder ID is used to tie folders together between devices. They are case sensitive and must match exactly between all devices.": "Når der tilføjes en ny enhed, vær da opmærksom på at samme mappe-ID bruges til at forbinde mapper på de forskellige enheder. Der er forskel på store og små bogstaver, og ID skal være fuldstændig identisk på alle enheder.",
"Yes": "Ja",
"Yesterday": "I går",
"You can also select one of these nearby devices:": "Du kan også vælge en af disse enheder i nærheden:",
"You can change your choice at any time in the Settings dialog.": "Du kan altid ændre dit valg under indstillinger.",
"You can read more about the two release channels at the link below.": "Du kan læse mere om de to udgivelseskanaler på linket herunder.",

View File

@ -19,6 +19,7 @@
"Advanced": "Erweitert",
"Advanced Configuration": "Erweiterte Konfiguration",
"All Data": "Alle Daten",
"All Time": "Gesamter Zeitraum",
"All folders shared with this device must be protected by a password, such that all sent data is unreadable without the given password.": "Alle Ordner, welche mit diesem Gerät geteilt werden, müssen von einem Passwort geschützt werden, sodass keine gesendeten Daten ohne Kenntnis des Passworts gelesen werden können. ",
"Allow Anonymous Usage Reporting?": "Übertragung von anonymen Nutzungsberichten erlauben?",
"Allowed Networks": "Erlaubte Netzwerke",
@ -27,6 +28,7 @@
"An external command handles the versioning. It has to remove the file from the shared folder. If the path to the application contains spaces, it should be quoted.": "Ein externer Befehl behandelt die Versionierung. Die Datei aus dem freigegebenen Ordner muss entfernen werden. Wenn der Pfad der Anwendung Leerzeichen enthält, sollte dieser in Anführungszeichen stehen.",
"Anonymous Usage Reporting": "Anonymer Nutzungsbericht",
"Anonymous usage report format has changed. Would you like to move to the new format?": "Das Format des anonymen Nutzungsberichts hat sich geändert. Möchten Sie auf das neue Format umsteigen?",
"Apply": "Anwenden",
"Are you sure you want to continue?": "Sind Sie sicher, dass Sie fortfahren möchten?",
"Are you sure you want to override all remote changes?": "Sind Sie sicher, dass Sie alle entfernten Änderungen überschreiben möchten?",
"Are you sure you want to permanently delete all these files?": "Sind Sie sicher, dass Sie all diese Dateien dauerhaft löschen möchten?",
@ -66,6 +68,7 @@
"Copyright © 2014-2019 the following Contributors:": "Copyright © 2014-2019 folgende Mitwirkende:",
"Creating ignore patterns, overwriting an existing file at {%path%}.": "Erstelle Ignoriermuster, welche die existierende Datei {{path}} überschreiben.",
"Currently Shared With Devices": "Derzeit mit Geräten geteilt",
"Custom Range": "Eigener Zeitraum",
"Danger!": "Achtung!",
"Debugging Facilities": "Debugging-Möglichkeiten",
"Default Configuration": "Vorgabekonfiguration",
@ -128,7 +131,7 @@
"Error": "Fehler",
"External File Versioning": "Externe Dateiversionierung",
"Failed Items": "Fehlgeschlagene Elemente",
"Failed to load file versions.": "Failed to load file versions.",
"Failed to load file versions.": "Fehler beim Laden der Dateiversionen.",
"Failed to load ignore patterns.": "Fehler beim Laden der Ignoriermuster.",
"Failed to setup, retrying": "Fehler beim Installieren, versuche erneut",
"Failure to connect to IPv6 servers is expected if there is no IPv6 connectivity.": "Ein Verbindungsfehler zu IPv6-Servern ist zu erwarten, wenn es keine IPv6-Konnektivität gibt.",
@ -183,6 +186,9 @@
"Keep Versions": "Versionen erhalten",
"LDAP": "LDAP",
"Largest First": "Größte zuerst",
"Last 30 Days": "Letzte 30 Tage",
"Last 7 Days": "Letzte 7 Tage",
"Last Month": "Letzter Monat",
"Last Scan": "Letzter Scan",
"Last seen": "Zuletzt online",
"Latest Change": "Letzte Änderung",
@ -374,17 +380,20 @@
"The rate limit must be a non-negative number (0: no limit)": "Das Datenratelimit muss eine nicht negative Zahl sein (0 = kein Limit).",
"The rescan interval must be a non-negative number of seconds.": "Das Scanintervall muss eine nicht negative Anzahl (in Sekunden) sein.",
"There are no devices to share this folder with.": "Es gibt keine Geräte, mit denen dieser Ordner geteilt werden kann.",
"There are no file versions to restore.": "There are no file versions to restore.",
"There are no file versions to restore.": "Es gibt keine Dateiversionen zum Wiederherstellen.",
"There are no folders to share with this device.": "Es gibt keine Ordner, die mit diesem Gerät geteilt werden können.",
"They are retried automatically and will be synced when the error is resolved.": "Sie werden automatisch heruntergeladen und werden synchronisiert, wenn der Fehler behoben wurde.",
"This Device": "Dieses Gerät",
"This Month": "Dieser Monat",
"This can easily give hackers access to read and change any files on your computer.": "Dies kann dazu führen, dass Unberechtigte relativ einfach auf Ihre Dateien zugreifen und diese ändern können.",
"This device cannot automatically discover other devices or announce its own address to be found by others. Only devices with statically configured addresses can connect.": "Dieses Gerät kann nicht automatisch andere Geräte auffinden, oder seine eigene Adresse bekannt geben, um von anderen gefunden zu werden. Nur Geräte mit statisch konfigurierten Adressen können sich verbinden.",
"This is a major version upgrade.": "Dies ist eine Hauptversionsaktualisierung.",
"This setting controls the free space required on the home (i.e., index database) disk.": "Diese Einstellung regelt den freien Speicherplatz, der für den Systemordner (d.h. Indexdatenbank) erforderlich ist.",
"Time": "Zeit",
"Time the item was last modified": "Zeit der letzten Änderung des Elements",
"Today": "Heute",
"Trash Can File Versioning": "Papierkorb Dateiversionierung",
"Twitter": "Twitter",
"Type": "Typ",
"UNIX Permissions": "UNIX-Berechtigungen",
"Unavailable": " Nicht verfügbar",
@ -428,6 +437,7 @@
"When adding a new device, keep in mind that this device must be added on the other side too.": "Beachte beim Hinzufügen eines neuen Gerätes, dass dieses Gerät auch auf den anderen Geräten hinzugefügt werden muss.",
"When adding a new folder, keep in mind that the Folder ID is used to tie folders together between devices. They are case sensitive and must match exactly between all devices.": "Beachte bitte beim Hinzufügen eines neuen Ordners, dass die Ordnerkennung dazu verwendet wird, Ordner zwischen Geräten zu verbinden. Die Kennung muss also auf allen Geräten gleich sein, die Groß- und Kleinschreibung muss dabei beachtet werden.",
"Yes": "Ja",
"Yesterday": "Gestern",
"You can also select one of these nearby devices:": "Sie können auch ein in der Nähe befindliches Geräte auswählen:",
"You can change your choice at any time in the Settings dialog.": "Sie können Ihre Wahl jederzeit in den Einstellungen ändern.",
"You can read more about the two release channels at the link below.": "Über den folgenden Link können Sie mehr über die zwei Veröffentlichungskanäle erfahren.",

View File

@ -19,6 +19,7 @@
"Advanced": "Προχωρημένες",
"Advanced Configuration": "Προχωρημένες ρυθμίσεις",
"All Data": "Όλα τα δεδομένα",
"All Time": "All Time",
"All folders shared with this device must be protected by a password, such that all sent data is unreadable without the given password.": "All folders shared with this device must be protected by a password, such that all sent data is unreadable without the given password.",
"Allow Anonymous Usage Reporting?": "Να επιτρέπεται η αποστολή ανώνυμων στοιχείων χρήσης;",
"Allowed Networks": "Επιτρεπόμενα δίκτυα",
@ -27,6 +28,7 @@
"An external command handles the versioning. It has to remove the file from the shared folder. If the path to the application contains spaces, it should be quoted.": "Μια εξωτερική εντολή χειρίζεται την τήρηση εκδόσεων και αναλαμβάνει να αφαιρέσει το αρχείο από τον συγχρονισμένο φάκελο. Αν η διαδρομή προς την εφαρμογή περιέχει διαστήματα, πρέπει να εσωκλείεται σε εισαγωγικά. ",
"Anonymous Usage Reporting": "Ανώνυμα στοιχεία χρήσης",
"Anonymous usage report format has changed. Would you like to move to the new format?": "Η μορφή της αναφοράς ανώνυμων στοιχείων χρήσης έχει αλλάξει. Επιθυμείτε να μεταβείτε στη νέα μορφή;",
"Apply": "Apply",
"Are you sure you want to continue?": "Are you sure you want to continue?",
"Are you sure you want to override all remote changes?": "Are you sure you want to override all remote changes?",
"Are you sure you want to permanently delete all these files?": "Are you sure you want to permanently delete all these files?",
@ -66,6 +68,7 @@
"Copyright © 2014-2019 the following Contributors:": "Copyright © 2014-2019 για τους παρακάτω συνεισφέροντες:",
"Creating ignore patterns, overwriting an existing file at {%path%}.": "Δημιουργία προτύπων αγνόησης, αντικατάσταση του υπάρχοντος αρχείου στο {{path}}.",
"Currently Shared With Devices": "Διαμοιράζεται με αυτές τις συσκευές",
"Custom Range": "Custom Range",
"Danger!": "Προσοχή!",
"Debugging Facilities": "Εργαλεία αποσφαλμάτωσης",
"Default Configuration": "Default Configuration",
@ -183,6 +186,9 @@
"Keep Versions": "Διατήρηση εκδόσεων",
"LDAP": "LDAP",
"Largest First": "Το μεγαλύτερο πρώτα",
"Last 30 Days": "Last 30 Days",
"Last 7 Days": "Last 7 Days",
"Last Month": "Last Month",
"Last Scan": "Τελευταία Σάρωση",
"Last seen": "Τελευταία σύνδεση",
"Latest Change": "Τελευταία αλλαγή",
@ -378,13 +384,16 @@
"There are no folders to share with this device.": "There are no folders to share with this device.",
"They are retried automatically and will be synced when the error is resolved.": "Όταν επιλυθεί το σφάλμα θα κατεβούν και θα συχρονιστούν αυτόματα.",
"This Device": "Αυτή η συσκευή",
"This Month": "This Month",
"This can easily give hackers access to read and change any files on your computer.": "Αυτό μπορεί εύκολα να δώσει πρόσβαση ανάγνωσης και επεξεργασίας αρχείων του υπολογιστή σας σε χάκερς.",
"This device cannot automatically discover other devices or announce its own address to be found by others. Only devices with statically configured addresses can connect.": "This device cannot automatically discover other devices or announce its own address to be found by others. Only devices with statically configured addresses can connect.",
"This is a major version upgrade.": "Αυτή είναι μια σημαντική αναβάθμιση.",
"This setting controls the free space required on the home (i.e., index database) disk.": "Αυτή η επιλογή καθορίζει τον ελεύθερο χώρο που θα παραμένει ελεύθερος στον δίσκο όπου βρίσκεται ο κατάλογος της εφαρμογής (και συνεπώς η βάση δεδομένων ευρετηρίων).",
"Time": "Χρόνος",
"Time the item was last modified": "Ώρα τελευταίας τροποποίησης του στοιχείου",
"Today": "Today",
"Trash Can File Versioning": "Τήρηση εκδόσεων κάδου ανακύκλωσης",
"Twitter": "Twitter",
"Type": "Τύπος",
"UNIX Permissions": "Άδειες αρχείων UNIX",
"Unavailable": "Μη διαθέσιμο",
@ -428,6 +437,7 @@
"When adding a new device, keep in mind that this device must be added on the other side too.": "Θυμήσου πως όταν προσθέτεις μια νέα συσκευή, ετούτη η συσκευή θα πρέπει να προστεθεί και στην άλλη πλευρά.",
"When adding a new folder, keep in mind that the Folder ID is used to tie folders together between devices. They are case sensitive and must match exactly between all devices.": "Όταν προσθέτεις έναν νέο φάκελο, θυμήσου πως η ταυτότητα ενός φακέλου χρησιμοποιείται για να να συσχετίσει φακέλους μεταξύ συσκευών. Η ταυτότητα του φακέλου θα πρέπει να είναι η ίδια σε όλες τις συσκευές και έχουν σημασία τα πεζά ή κεφαλαία γράμματα.",
"Yes": "Ναι",
"Yesterday": "Yesterday",
"You can also select one of these nearby devices:": "Μπορείτε επίσης να επιλέξετε μια από αυτές τις γειτονικές συσκευές:",
"You can change your choice at any time in the Settings dialog.": "Μπορείτε να αλλάξετε τη ρύθμιση αυτή ανά πάσα στιγμή στο παράθυρο «Ρυθμίσεις».",
"You can read more about the two release channels at the link below.": "Μπορείτε να διαβάσετε περισσότερα για τα δύο κανάλια εκδόσεων στον παρακάτω σύνδεσμο.",

View File

@ -19,6 +19,7 @@
"Advanced": "Advanced",
"Advanced Configuration": "Advanced Configuration",
"All Data": "All Data",
"All Time": "All Time",
"All folders shared with this device must be protected by a password, such that all sent data is unreadable without the given password.": "All folders shared with this device must be protected by a password, such that all sent data is unreadable without the given password.",
"Allow Anonymous Usage Reporting?": "Allow Anonymous Usage Reporting?",
"Allowed Networks": "Allowed Networks",
@ -27,6 +28,7 @@
"An external command handles the versioning. It has to remove the file from the shared folder. If the path to the application contains spaces, it should be quoted.": "An external command handles the versioning. It has to remove the file from the shared folder. If the path to the application contains spaces, it should be quoted.",
"Anonymous Usage Reporting": "Anonymous Usage Reporting",
"Anonymous usage report format has changed. Would you like to move to the new format?": "Anonymous usage report format has changed. Would you like to move to the new format?",
"Apply": "Apply",
"Are you sure you want to continue?": "Are you sure you want to continue?",
"Are you sure you want to override all remote changes?": "Are you sure you want to override all remote changes?",
"Are you sure you want to permanently delete all these files?": "Are you sure you want to permanently delete all these files?",
@ -66,6 +68,7 @@
"Copyright © 2014-2019 the following Contributors:": "Copyright © 2014-2019 the following Contributors:",
"Creating ignore patterns, overwriting an existing file at {%path%}.": "Creating ignore patterns, overwriting an existing file at {{path}}.",
"Currently Shared With Devices": "Currently Shared With Devices",
"Custom Range": "Custom Range",
"Danger!": "Danger!",
"Debugging Facilities": "Debugging Facilities",
"Default Configuration": "Default Configuration",
@ -183,6 +186,9 @@
"Keep Versions": "Keep Versions",
"LDAP": "LDAP",
"Largest First": "Largest First",
"Last 30 Days": "Last 30 Days",
"Last 7 Days": "Last 7 Days",
"Last Month": "Last Month",
"Last Scan": "Last Scan",
"Last seen": "Last seen",
"Latest Change": "Latest Change",
@ -378,13 +384,16 @@
"There are no folders to share with this device.": "There are no folders to share with this device.",
"They are retried automatically and will be synced when the error is resolved.": "They are retried automatically and will be synced when the error is resolved.",
"This Device": "This Device",
"This Month": "This Month",
"This can easily give hackers access to read and change any files on your computer.": "This can easily give hackers access to read and change any files on your computer.",
"This device cannot automatically discover other devices or announce its own address to be found by others. Only devices with statically configured addresses can connect.": "This device cannot automatically discover other devices or announce its own address to be found by others. Only devices with statically configured addresses can connect.",
"This is a major version upgrade.": "This is a major version upgrade.",
"This setting controls the free space required on the home (i.e., index database) disk.": "This setting controls the free space required on the home (i.e., index database) disk.",
"Time": "Time",
"Time the item was last modified": "Time the item was last modified",
"Today": "Today",
"Trash Can File Versioning": "Bin File Versioning",
"Twitter": "Twitter",
"Type": "Type",
"UNIX Permissions": "UNIX Permissions",
"Unavailable": "Unavailable",
@ -428,6 +437,7 @@
"When adding a new device, keep in mind that this device must be added on the other side too.": "When adding a new device, keep in mind that this device must be added on the other side too.",
"When adding a new folder, keep in mind that the Folder ID is used to tie folders together between devices. They are case sensitive and must match exactly between all devices.": "When adding a new folder, keep in mind that the Folder ID is used to tie folders together between devices. They are case sensitive and must match exactly between all devices.",
"Yes": "Yes",
"Yesterday": "Yesterday",
"You can also select one of these nearby devices:": "You can also select one of these nearby devices:",
"You can change your choice at any time in the Settings dialog.": "You can change your choice at any time in the Settings dialog.",
"You can read more about the two release channels at the link below.": "You can read more about the two release channels at the link below.",

View File

@ -19,6 +19,7 @@
"Advanced": "Advanced",
"Advanced Configuration": "Advanced Configuration",
"All Data": "All Data",
"All Time": "All Time",
"All folders shared with this device must be protected by a password, such that all sent data is unreadable without the given password.": "All folders shared with this device must be protected by a password, such that all sent data is unreadable without the given password.",
"Allow Anonymous Usage Reporting?": "Allow Anonymous Usage Reporting?",
"Allowed Networks": "Allowed Networks",
@ -27,6 +28,7 @@
"An external command handles the versioning. It has to remove the file from the shared folder. If the path to the application contains spaces, it should be quoted.": "An external command handles the versioning. It has to remove the file from the shared folder. If the path to the application contains spaces, it should be quoted.",
"Anonymous Usage Reporting": "Anonymous Usage Reporting",
"Anonymous usage report format has changed. Would you like to move to the new format?": "Anonymous usage report format has changed. Would you like to move to the new format?",
"Apply": "Apply",
"Are you sure you want to continue?": "Are you sure you want to continue?",
"Are you sure you want to override all remote changes?": "Are you sure you want to override all remote changes?",
"Are you sure you want to permanently delete all these files?": "Are you sure you want to permanently delete all these files?",
@ -66,6 +68,7 @@
"Copyright © 2014-2019 the following Contributors:": "Copyright © 2014-2019 the following Contributors:",
"Creating ignore patterns, overwriting an existing file at {%path%}.": "Creating ignore patterns, overwriting an existing file at {{path}}.",
"Currently Shared With Devices": "Currently Shared With Devices",
"Custom Range": "Custom Range",
"Danger!": "Danger!",
"Debugging Facilities": "Debugging Facilities",
"Default Configuration": "Default Configuration",
@ -183,6 +186,9 @@
"Keep Versions": "Keep Versions",
"LDAP": "LDAP",
"Largest First": "Largest First",
"Last 30 Days": "Last 30 Days",
"Last 7 Days": "Last 7 Days",
"Last Month": "Last Month",
"Last Scan": "Last Scan",
"Last seen": "Last seen",
"Latest Change": "Latest Change",
@ -378,13 +384,16 @@
"There are no folders to share with this device.": "There are no folders to share with this device.",
"They are retried automatically and will be synced when the error is resolved.": "They are retried automatically and will be synced when the error is resolved.",
"This Device": "This Device",
"This Month": "This Month",
"This can easily give hackers access to read and change any files on your computer.": "This can easily give hackers access to read and change any files on your computer.",
"This device cannot automatically discover other devices or announce its own address to be found by others. Only devices with statically configured addresses can connect.": "This device cannot automatically discover other devices or announce its own address to be found by others. Only devices with statically configured addresses can connect.",
"This is a major version upgrade.": "This is a major version upgrade.",
"This setting controls the free space required on the home (i.e., index database) disk.": "This setting controls the free space required on the home (i.e., index database) disk.",
"Time": "Time",
"Time the item was last modified": "Time the item was last modified",
"Today": "Today",
"Trash Can File Versioning": "Rubbish Bin File Versioning",
"Twitter": "Twitter",
"Type": "Type",
"UNIX Permissions": "UNIX Permissions",
"Unavailable": "Unavailable",
@ -428,6 +437,7 @@
"When adding a new device, keep in mind that this device must be added on the other side too.": "When adding a new device, keep in mind that this device must be added on the other side too.",
"When adding a new folder, keep in mind that the Folder ID is used to tie folders together between devices. They are case sensitive and must match exactly between all devices.": "When adding a new folder, keep in mind that the Folder ID is used to tie folders together between devices. They are case sensitive and must match exactly between all devices.",
"Yes": "Yes",
"Yesterday": "Yesterday",
"You can also select one of these nearby devices:": "You can also select one of these nearby devices:",
"You can change your choice at any time in the Settings dialog.": "You can change your choice at any time in the Settings dialogue.",
"You can read more about the two release channels at the link below.": "You can read more about the two release channels at the link below.",

View File

@ -19,6 +19,7 @@
"Advanced": "Advanced",
"Advanced Configuration": "Advanced Configuration",
"All Data": "All Data",
"All Time": "All Time",
"All folders shared with this device must be protected by a password, such that all sent data is unreadable without the given password.": "All folders shared with this device must be protected by a password, such that all sent data is unreadable without the given password.",
"Allow Anonymous Usage Reporting?": "Allow Anonymous Usage Reporting?",
"Allowed Networks": "Allowed Networks",
@ -27,6 +28,7 @@
"An external command handles the versioning. It has to remove the file from the shared folder. If the path to the application contains spaces, it should be quoted.": "An external command handles the versioning. It has to remove the file from the shared folder. If the path to the application contains spaces, it should be quoted.",
"Anonymous Usage Reporting": "Anonymous Usage Reporting",
"Anonymous usage report format has changed. Would you like to move to the new format?": "Anonymous usage report format has changed. Would you like to move to the new format?",
"Apply": "Apply",
"Are you sure you want to continue?": "Are you sure you want to continue?",
"Are you sure you want to override all remote changes?": "Are you sure you want to override all remote changes?",
"Are you sure you want to permanently delete all these files?": "Are you sure you want to permanently delete all these files?",
@ -66,6 +68,7 @@
"Copyright © 2014-2019 the following Contributors:": "Copyright © 2014-2019 the following Contributors:",
"Creating ignore patterns, overwriting an existing file at {%path%}.": "Creating ignore patterns, overwriting an existing file at {{path}}.",
"Currently Shared With Devices": "Currently Shared With Devices",
"Custom Range": "Custom Range",
"Danger!": "Danger!",
"Debugging Facilities": "Debugging Facilities",
"Default Configuration": "Default Configuration",
@ -183,6 +186,9 @@
"Keep Versions": "Keep Versions",
"LDAP": "LDAP",
"Largest First": "Largest First",
"Last 30 Days": "Last 30 Days",
"Last 7 Days": "Last 7 Days",
"Last Month": "Last Month",
"Last Scan": "Last Scan",
"Last seen": "Last seen",
"Latest Change": "Latest Change",
@ -378,13 +384,16 @@
"There are no folders to share with this device.": "There are no folders to share with this device.",
"They are retried automatically and will be synced when the error is resolved.": "They are retried automatically and will be synced when the error is resolved.",
"This Device": "This Device",
"This Month": "This Month",
"This can easily give hackers access to read and change any files on your computer.": "This can easily give hackers access to read and change any files on your computer.",
"This device cannot automatically discover other devices or announce its own address to be found by others. Only devices with statically configured addresses can connect.": "This device cannot automatically discover other devices or announce its own address to be found by others. Only devices with statically configured addresses can connect.",
"This is a major version upgrade.": "This is a major version upgrade.",
"This setting controls the free space required on the home (i.e., index database) disk.": "This setting controls the free space required on the home (i.e., index database) disk.",
"Time": "Time",
"Time the item was last modified": "Time the item was last modified",
"Today": "Today",
"Trash Can File Versioning": "Trash Can File Versioning",
"Twitter": "Twitter",
"Type": "Type",
"UNIX Permissions": "UNIX Permissions",
"Unavailable": "Unavailable",
@ -428,6 +437,7 @@
"When adding a new device, keep in mind that this device must be added on the other side too.": "When adding a new device, keep in mind that this device must be added on the other side too.",
"When adding a new folder, keep in mind that the Folder ID is used to tie folders together between devices. They are case sensitive and must match exactly between all devices.": "When adding a new folder, keep in mind that the Folder ID is used to tie folders together between devices. They are case sensitive and must match exactly between all devices.",
"Yes": "Yes",
"Yesterday": "Yesterday",
"You can also select one of these nearby devices:": "You can also select one of these nearby devices:",
"You can change your choice at any time in the Settings dialog.": "You can change your choice at any time in the Settings dialog.",
"You can read more about the two release channels at the link below.": "You can read more about the two release channels at the link below.",

View File

@ -19,6 +19,7 @@
"Advanced": "Altnivela",
"Advanced Configuration": "Altnivela Agordo",
"All Data": "Ĉiuj Datumoj",
"All Time": "All Time",
"All folders shared with this device must be protected by a password, such that all sent data is unreadable without the given password.": "Ĉiuj dosierujoj, kiuj estas dividitaj kun ĉi tiu aparato devas esti protektitaj per pasvorto, tiel ĉiuj senditaj datumoj estas nelegeblaj sen la pasvorto.",
"Allow Anonymous Usage Reporting?": "Permesi Anoniman Raporton de Uzado?",
"Allowed Networks": "Permesitaj Retoj",
@ -27,6 +28,7 @@
"An external command handles the versioning. It has to remove the file from the shared folder. If the path to the application contains spaces, it should be quoted.": "Ekstera komando manipulas la version. Ĝi devas forigi la dosieron el la komunigita dosierujo. Se la vojo al la apliko elhavas blankoj, ĝi devas esti inter citiloj.",
"Anonymous Usage Reporting": "Anonima Raporto de Uzado",
"Anonymous usage report format has changed. Would you like to move to the new format?": "Formato de anonima raporto de uzado ŝanĝis. Ĉu vi ŝatus transiri al la nova formato?",
"Apply": "Apply",
"Are you sure you want to continue?": "Ĉu vi certas, ke vi volas daŭrigi?",
"Are you sure you want to override all remote changes?": "Ĉu vi certas, ke vi volas transpasi ĉiujn forajn ŝanĝojn?",
"Are you sure you want to permanently delete all these files?": "Ĉu vi certas, ke vi volas porĉiame forigi ĉiujn ĉi tiujn dosierojn?",
@ -66,6 +68,7 @@
"Copyright © 2014-2019 the following Contributors:": "Kopirajto © 2014-2019 por la sekvantaj Kontribuantoj:",
"Creating ignore patterns, overwriting an existing file at {%path%}.": "Kreante ignorantajn ŝablonojn, anstataŭige ekzistantan dosieron ĉe {{path}}.",
"Currently Shared With Devices": "Nune komunigita kun aparatoj",
"Custom Range": "Custom Range",
"Danger!": "Danĝero!",
"Debugging Facilities": "Elpurigadiloj",
"Default Configuration": "Defaŭlta agordo",
@ -183,6 +186,9 @@
"Keep Versions": "Konservi Versiojn",
"LDAP": "LDAP",
"Largest First": "Plej Granda Unue",
"Last 30 Days": "Last 30 Days",
"Last 7 Days": "Last 7 Days",
"Last Month": "Last Month",
"Last Scan": "Lasta Skano",
"Last seen": "Lasta vidita",
"Latest Change": "Lasta Ŝanĝo",
@ -378,13 +384,16 @@
"There are no folders to share with this device.": "There are no folders to share with this device.",
"They are retried automatically and will be synced when the error is resolved.": "Ili estas reprovitaj aŭtomate kaj estos sinkronigitaj kiam la eraro estas solvita.",
"This Device": "Ĉi Tiu Aparato",
"This Month": "This Month",
"This can easily give hackers access to read and change any files on your computer.": "Ĉi tio povas facile doni al kodumuloj atingon por legi kaj ŝanĝi ajnajn dosierojn en via komputilo.",
"This device cannot automatically discover other devices or announce its own address to be found by others. Only devices with statically configured addresses can connect.": "This device cannot automatically discover other devices or announce its own address to be found by others. Only devices with statically configured addresses can connect.",
"This is a major version upgrade.": "Ĉi tio estas ĉefversio ĝisdatigita.",
"This setting controls the free space required on the home (i.e., index database) disk.": "Ĉi tiu agordo regas la libera spaco postulita sur la hejma (t.e. indeksa datumbaza) disko.",
"Time": "Tempo",
"Time the item was last modified": "Tempo de lasta modifo de la ero",
"Today": "Today",
"Trash Can File Versioning": "Rubuja Dosiera Versionado",
"Twitter": "Twitter",
"Type": "Tipo",
"UNIX Permissions": "Permesoj UNIX",
"Unavailable": "Ne disponebla",
@ -428,6 +437,7 @@
"When adding a new device, keep in mind that this device must be added on the other side too.": "Dum la aldonado de nova aparato, memoru ke ĉi tiu aparato devas esti aldonita en la alia flanko ankaŭ.",
"When adding a new folder, keep in mind that the Folder ID is used to tie folders together between devices. They are case sensitive and must match exactly between all devices.": "Dum la aldonado de nova dosierujo, memoru ke la Dosieruja ID estas uzita por ligi la dosierujojn kune inter aparatoj. Ili estas literfakodistingaj kaj devas kongrui precize inter ĉiuj aparatoj.",
"Yes": "Jes",
"Yesterday": "Yesterday",
"You can also select one of these nearby devices:": "Vi povas ankaŭ elekti unu el ĉi tiuj proksimaj aparatoj:",
"You can change your choice at any time in the Settings dialog.": "Vi povas ŝanĝi vian elekton iam ajn en la Agorda dialogo.",
"You can read more about the two release channels at the link below.": "Vi povas legi plu pri la du eldonkanaloj per la malsupra ligilo.",

View File

@ -11,7 +11,7 @@
"Add Folder": "Agregar Carpeta",
"Add Remote Device": "Añadir un dispositivo",
"Add devices from the introducer to our device list, for mutually shared folders.": "Añadir dispositivos desde el introductor a nuestra lista de dispositivos, para las carpetas compartidas mutuamente.",
"Add ignore patterns": "Agregar patrones a ignorar",
"Add ignore patterns": "Añadir patrones a ignorar",
"Add new folder?": "¿Agregar una carpeta nueva?",
"Additionally the full rescan interval will be increased (times 60, i.e. new default of 1h). You can also configure it manually for every folder later after choosing No.": "De manera adicional, el intervalo de escaneo será incrementado (por ejemplo, times 60, establece un nuevo intervalo por defecto de una hora). También puedes configurarlo manualmente para cada carpeta tras elegir el número.",
"Address": "Dirección",
@ -19,6 +19,7 @@
"Advanced": "Avanzado",
"Advanced Configuration": "Configuración Avanzada",
"All Data": "Todos los datos",
"All Time": "Todo el tiempo",
"All folders shared with this device must be protected by a password, such that all sent data is unreadable without the given password.": "Todos las carpetas compartidas con este equipo deben ser protegidas con una contraseña, de manera que todos los datos enviados sean ilegibles sin la contraseña dada.",
"Allow Anonymous Usage Reporting?": "¿Deseas permitir el envío anónimo de informes de uso?",
"Allowed Networks": "Redes permitidas",
@ -27,14 +28,15 @@
"An external command handles the versioning. It has to remove the file from the shared folder. If the path to the application contains spaces, it should be quoted.": "Un comando externo maneja el versionado. Tiene que eliminar el fichero de la carpeta compartida. Si la ruta a la aplicación contiene espacios, hay que escribirla entre comillas.",
"Anonymous Usage Reporting": "Informe anónimo de uso",
"Anonymous usage report format has changed. Would you like to move to the new format?": "El formato del informe anónimo de uso ha cambiado. ¿Quieres cambiar al nuevo formato?",
"Are you sure you want to continue?": "¿Está seguro(a) de que desea continuar?",
"Are you sure you want to override all remote changes?": "¿Está seguro(a) de que desea sobreescribir todos los cambios remotos?",
"Are you sure you want to permanently delete all these files?": "¿Estás seguro(a) de que quieres eliminar permanentemente todos estos ficheros?",
"Apply": "Apply",
"Are you sure you want to continue?": "¿Seguro que quieres continuar?",
"Are you sure you want to override all remote changes?": "¿Seguro que quieres sobreescribir todos los cambios remotos?",
"Are you sure you want to permanently delete all these files?": "¿Seguro que quieres eliminar permanentemente todos estos archivos?",
"Are you sure you want to remove device {%name%}?": "¿Estás seguro de que quieres quitar el dispositivo {{name}}?",
"Are you sure you want to remove folder {%label%}?": "¿Estás seguro de que quieres quitar la carpeta {{label}}?",
"Are you sure you want to restore {%count%} files?": "¿Estás seguro de que quieres restaurar {{count}} ficheros?",
"Are you sure you want to revert all local changes?": "¿Está seguro(a) de que desea revertir todos los cambios locales?",
"Are you sure you want to upgrade?": "¿Está seguro(a) de que desea actualizar?",
"Are you sure you want to revert all local changes?": "¿Seguro que quieres revertir todos los cambios locales?",
"Are you sure you want to upgrade?": "¿Seguro que quieres actualizar?",
"Auto Accept": "Auto aceptar",
"Automatic Crash Reporting": "Informe automático de errores",
"Automatic upgrade now offers the choice between stable releases and release candidates.": "Ahora la actualización automática permite elegir entre versiones estables o versiones candidatas.",
@ -47,10 +49,10 @@
"Cancel": "Cancelar",
"Changelog": "Registro de cambios",
"Clean out after": "Limpiar tras",
"Cleaning Versions": "Limpiando Versiones",
"Cleanup Interval": "Intervalo de Limpieza",
"Cleaning Versions": "Limpiando versiones",
"Cleanup Interval": "Intervalo de limpieza",
"Click to see discovery failures": "Clica para ver fallos de descubrimiento.",
"Click to see full identification string and QR code.": "Haga clic para ver la cadena de identificación completa y su código QR.",
"Click to see full identification string and QR code.": "Haz clic para ver la cadena de identificación completa y el código QR.",
"Close": "Cerrar",
"Command": "Acción",
"Comment, when used at the start of a line": "Comentar, cuando se usa al comienzo de una línea",
@ -65,16 +67,17 @@
"Copied from original": "Copiado del original",
"Copyright © 2014-2019 the following Contributors:": "Copyright © 2014-2019 los siguientes Colaboradores:",
"Creating ignore patterns, overwriting an existing file at {%path%}.": "Crear patrones a ignorar, sobreescribiendo un fichero existente en {{path}}.",
"Currently Shared With Devices": "Actualmente Compartida Con Los Equipos",
"Currently Shared With Devices": "Actualmente compartida con los equipos",
"Custom Range": "Rango personalizado",
"Danger!": "¡Peligro!",
"Debugging Facilities": "Ayudas a la depuración",
"Default Configuration": "Configuración Por Defecto",
"Default Device": "Equipo Por Defecto",
"Default Folder": "Carpeta Por Defecto",
"Default Configuration": "Configuración por defecto",
"Default Device": "Equipo por defecto",
"Default Folder": "Carpeta por defecto",
"Default Folder Path": "Ruta de la carpeta por defecto",
"Defaults": "Valores Por Defecto",
"Defaults": "Valores por defecto",
"Delete": "Eliminar",
"Delete Unexpected Items": "Borrar Elementos Inesperados",
"Delete Unexpected Items": "Borrar elementos inesperados",
"Deleted": "Eliminado",
"Deselect All": "Deseleccionar Todo",
"Deselect devices to stop sharing this folder with.": "Deseleccione los equipos con los cuales dejar de compartir esta carpeta.",
@ -128,7 +131,7 @@
"Error": "Error",
"External File Versioning": "Versionado externo de fichero",
"Failed Items": "Elementos fallidos",
"Failed to load file versions.": "Failed to load file versions.",
"Failed to load file versions.": "Error al cargar las versiones del archivo.",
"Failed to load ignore patterns.": "Fallo al cargar patrones a ignorar",
"Failed to setup, retrying": "Fallo al configurar, reintentando",
"Failure to connect to IPv6 servers is expected if there is no IPv6 connectivity.": "Se espera un fallo al conectar a los servidores IPv6 si no hay conectividad IPv6.",
@ -183,6 +186,9 @@
"Keep Versions": "Mantener versiones",
"LDAP": "LDAP",
"Largest First": "Más grande primero",
"Last 30 Days": "Últimos 30 días",
"Last 7 Days": "Últimos 7 días",
"Last Month": "Último mes",
"Last Scan": "Último escaneo",
"Last seen": "Visto por última vez",
"Latest Change": "Último Cambio",
@ -374,17 +380,20 @@
"The rate limit must be a non-negative number (0: no limit)": "El límite de velocidad debe ser un número no negativo (0: sin límite)",
"The rescan interval must be a non-negative number of seconds.": "El intervalo de actualización debe ser un número positivo de segundos.",
"There are no devices to share this folder with.": "No hay equipos con los cuales compartir esta carpeta.",
"There are no file versions to restore.": "There are no file versions to restore.",
"There are no file versions to restore.": "No hay versiones de archivo que restaurar.",
"There are no folders to share with this device.": "No hay carpetas para compartir con este equipo.",
"They are retried automatically and will be synced when the error is resolved.": "Se reintentarán de forma automática y se sincronizarán cuando se resuelva el error.",
"This Device": "Este Dispositivo",
"This Month": "Este mes",
"This can easily give hackers access to read and change any files on your computer.": "Esto podría permitir fácilmente el acceso a hackers para leer y modificar cualquier fichero de tu equipo.",
"This device cannot automatically discover other devices or announce its own address to be found by others. Only devices with statically configured addresses can connect.": "Este dispositivo no puede descubrir automáticamente a otros dispositivos o anunciar su propia dirección para que sea encontrado con otros. Solo dispositivos con direcciones configuradas como estáticas pueden conectarse.",
"This is a major version upgrade.": "Hay una actualización importante.",
"This setting controls the free space required on the home (i.e., index database) disk.": "Este ajuste controla el espacio libre necesario en el disco principal (por ejemplo, el índice de la base de datos).",
"Time": "Hora",
"Time the item was last modified": "Tiempo en el que se modificó el ítem por última vez",
"Today": "Hoy",
"Trash Can File Versioning": "Versionado de archivos de la papelera",
"Twitter": "Twitter",
"Type": "Tipo",
"UNIX Permissions": "Permisos de UNIX",
"Unavailable": "No disponible",
@ -395,9 +404,9 @@
"Unignore": "Designorar",
"Unknown": "Desconocido",
"Unshared": "No compartido",
"Unshared Devices": "Equipos no Compartidos",
"Unshared Folders": "Carpetas no Compartidas",
"Untrusted": "No Confiable",
"Unshared Devices": "Equipos no compartidos",
"Unshared Folders": "Carpetas no compartidas",
"Untrusted": "No confiable",
"Up to Date": "Actualizado",
"Updated": "Actualizado",
"Upgrade": "Actualizar",
@ -413,9 +422,9 @@
"Versions": "Versiones",
"Versions Path": "Ruta de las versiones",
"Versions are automatically deleted if they are older than the maximum age or exceed the number of files allowed in an interval.": "Las versiones se borran automáticamente si son más antiguas que la edad máxima o exceden el número de ficheros permitidos en un intervalo.",
"Waiting to Clean": "Esperando para Limpiar",
"Waiting to Scan": "Esperando para Escanear",
"Waiting to Sync": "Esperando para Sincronizar",
"Waiting to Clean": "Esperando para limpiar",
"Waiting to Scan": "Esperando para escanear",
"Waiting to Sync": "Esperando para sincronizar",
"Warning": "Advertencia",
"Warning, this path is a parent directory of an existing folder \"{%otherFolder%}\".": "¡Peligro! Esta ruta es un directorio principal de la carpeta ya existente \"{{otherFolder}}\".",
"Warning, this path is a parent directory of an existing folder \"{%otherFolderLabel%}\" ({%otherFolder%}).": "'Peligro! Esta ruta es un subdirectorio de la carpeta ya existente \"{{otherFolderLabel}}\" ({{otherFolder}}).",
@ -428,6 +437,7 @@
"When adding a new device, keep in mind that this device must be added on the other side too.": "Cuando añada un nuevo dispositivo, tenga en cuenta que este debe añadirse también en el otro lado.",
"When adding a new folder, keep in mind that the Folder ID is used to tie folders together between devices. They are case sensitive and must match exactly between all devices.": "Cuando añada una nueva carpeta, tenga en cuenta que su ID se usa para unir carpetas entre dispositivos. Son sensibles a las mayúsculas y deben coincidir exactamente entre todos los dispositivos.",
"Yes": "Si",
"Yesterday": "Ayer",
"You can also select one of these nearby devices:": "Puedes seleccionar también uno de estos dispositivos cercanos:",
"You can change your choice at any time in the Settings dialog.": "Puedes cambiar tu elección en cualquier momento en el panel de Ajustes.",
"You can read more about the two release channels at the link below.": "Puedes leer más sobre los dos método de publicación de versiones en el siguiente enlace.",
@ -435,7 +445,7 @@
"You have no ignored folders.": "No tienes carpetas ignoradas.",
"You have unsaved changes. Do you really want to discard them?": "Tienes cambios sin guardar. ¿Quieres descartarlos?",
"You must keep at least one version.": "Debes mantener al menos una versión.",
"You should never add or change anything locally in a \"{%receiveEncrypted%}\" folder.": "Nunca debe agregar o cambiar nada localmente en una carpeta \"{{receiveEncrypted}}\".",
"You should never add or change anything locally in a \"{%receiveEncrypted%}\" folder.": "Nunca debes añadir o cambiar nada localmente en una carpeta \"{{receiveEncrypted}}\".",
"days": "días",
"directories": "directorios",
"files": "archivos",

View File

@ -19,6 +19,7 @@
"Advanced": "Avanzado",
"Advanced Configuration": "Configuración Avanzada",
"All Data": "Todos los datos",
"All Time": "All Time",
"All folders shared with this device must be protected by a password, such that all sent data is unreadable without the given password.": "Todas las carpetas compartidas con este dispositivo deben estar protegidas por una contraseña, de forma que todos los datos enviados sean ilegibles sin la contraseña indicada.",
"Allow Anonymous Usage Reporting?": "¿Deseas permitir el envío anónimo de informes de uso?",
"Allowed Networks": "Redes permitidas",
@ -27,6 +28,7 @@
"An external command handles the versioning. It has to remove the file from the shared folder. If the path to the application contains spaces, it should be quoted.": "Un comando externo maneja las versiones. Tienes que eliminar el archivo de la carpeta compartida. Si la ruta a la aplicación contiene espacios, ésta debe estar entre comillas.",
"Anonymous Usage Reporting": "Informe anónimo de uso",
"Anonymous usage report format has changed. Would you like to move to the new format?": "El formato del informe de uso anónimo a cambiado. ¿Desearía usar el nuevo formato?",
"Apply": "Apply",
"Are you sure you want to continue?": "¿Está seguro(a) de que desea continuar?",
"Are you sure you want to override all remote changes?": "¿Está seguro(a) de que desea sobreescribir todos los cambios remotos?",
"Are you sure you want to permanently delete all these files?": "¿Está seguro de que desea eliminar permanente todos estos archivos?",
@ -66,6 +68,7 @@
"Copyright © 2014-2019 the following Contributors:": "Derechos de Autor © 2014-2019 los siguientes colaboradores:",
"Creating ignore patterns, overwriting an existing file at {%path%}.": "Crear patrones a ignorar, sobreescribiendo un fichero existente en {{path}}.",
"Currently Shared With Devices": "Actualmente Compartida con los Dispositivos",
"Custom Range": "Custom Range",
"Danger!": "¡Peligro!",
"Debugging Facilities": "Servicios de depuración",
"Default Configuration": "Configuración Predeterminada",
@ -183,6 +186,9 @@
"Keep Versions": "Mantener versiones",
"LDAP": "LDAP",
"Largest First": "Más grande primero",
"Last 30 Days": "Last 30 Days",
"Last 7 Days": "Last 7 Days",
"Last Month": "Last Month",
"Last Scan": "Último escaneo",
"Last seen": "Visto por última vez",
"Latest Change": "Último Cambio",
@ -378,13 +384,16 @@
"There are no folders to share with this device.": "No hay carpetas para compartir con este dispositivo.",
"They are retried automatically and will be synced when the error is resolved.": "Se reintentarán de forma automática y se sincronizarán cuando se resuelva el error.",
"This Device": "Este Dispositivo",
"This Month": "This Month",
"This can easily give hackers access to read and change any files on your computer.": "Esto podría permitir fácilmente el acceso a hackers para leer y modificar cualquier fichero de tu equipo.",
"This device cannot automatically discover other devices or announce its own address to be found by others. Only devices with statically configured addresses can connect.": "Este dispositivo no puede descubrir automáticamente a otros dispositivos o anunciar su propia dirección para que sea encontrado con otros. Solo dispositivos con direcciones configuradas como estáticas pueden conectarse.",
"This is a major version upgrade.": "Hay una actualización importante.",
"This setting controls the free space required on the home (i.e., index database) disk.": "Este ajuste controla el espacio libre necesario en el disco principal (por ejemplo, el índice de la base de datos).",
"Time": "Hora",
"Time the item was last modified": "Hora en que el ítem fue modificado por última vez",
"Today": "Today",
"Trash Can File Versioning": "Versionado de archivos de la papelera",
"Twitter": "Twitter",
"Type": "Tipo",
"UNIX Permissions": "Permisos de UNIX",
"Unavailable": "No disponible",
@ -428,6 +437,7 @@
"When adding a new device, keep in mind that this device must be added on the other side too.": "Cuando añada un nuevo dispositivo, tenga en cuenta que este debe añadirse también en el otro lado.",
"When adding a new folder, keep in mind that the Folder ID is used to tie folders together between devices. They are case sensitive and must match exactly between all devices.": "Cuando añada una nueva carpeta, tenga en cuenta que su ID se usa para unir carpetas entre dispositivos. Son sensibles a las mayúsculas y deben coincidir exactamente entre todos los dispositivos.",
"Yes": "Si",
"Yesterday": "Yesterday",
"You can also select one of these nearby devices:": "También puede seleccionar uno de estos dispositivos cercanos:",
"You can change your choice at any time in the Settings dialog.": "Puedes cambiar tu elección en cualquier momento en el panel de Ajustes.",
"You can read more about the two release channels at the link below.": "Puedes leer más sobre los dos método de publicación de versiones en el siguiente enlace.",

View File

@ -19,6 +19,7 @@
"Advanced": "Aitzinatua",
"Advanced Configuration": "Konfigurazio aitzinatua",
"All Data": "Datu guziak",
"All Time": "All Time",
"All folders shared with this device must be protected by a password, such that all sent data is unreadable without the given password.": "Gailu honekin partekatutako karpeta guztiak pasahitz baten bidez babestu behar dira, horrela, bidalitako datu guztiak irakurri ezinak izango dira emandako pasahitzik gabe.",
"Allow Anonymous Usage Reporting?": "Izenik gabeko erabiltze erreportak baimendu?",
"Allowed Networks": "Sare baimenduak",
@ -27,6 +28,7 @@
"An external command handles the versioning. It has to remove the file from the shared folder. If the path to the application contains spaces, it should be quoted.": "Kanpoko kontrolagailu batek fitxategien bertsioak kudeatzen ditu. Fitxategiak kendu behar ditu errepertorio sinkronizatuan. Aplikaziorako ibilbideak espazioak baditu, komatxo artean egon behar du.",
"Anonymous Usage Reporting": "Izenik gabeko erabiltze erreportak",
"Anonymous usage report format has changed. Would you like to move to the new format?": "Erabilera anonimoko txostenaren formatua aldatu egin da. Formatu berria erabili nahi duzu?",
"Apply": "Apply",
"Are you sure you want to continue?": "Ziur zaude jarraitu nahi duzula?",
"Are you sure you want to override all remote changes?": "Ziur zaude urruneko aldaketa guztiak gainidatzi nahi dituzula?",
"Are you sure you want to permanently delete all these files?": "Ziur zaude fitxategi guzti hauek betirako ezabatu nahi dituzula?",
@ -66,6 +68,7 @@
"Copyright © 2014-2019 the following Contributors:": "Copyright 2014-2019 ekarle hauek:",
"Creating ignore patterns, overwriting an existing file at {%path%}.": "Baztertze modelo batzuen sortzea, dagoen fitxategiari ordaina ezartzea: {{path}}",
"Currently Shared With Devices": "Gaur egun tresnekin partekatua",
"Custom Range": "Custom Range",
"Danger!": "Lanjera !",
"Debugging Facilities": "Arazketa zerbitzuak",
"Default Configuration": "Konfigurazio lehenetsia",
@ -183,6 +186,9 @@
"Keep Versions": "Gorde bertsioak",
"LDAP": "LDAP",
"Largest First": "Handienak lehenik",
"Last 30 Days": "Last 30 Days",
"Last 7 Days": "Last 7 Days",
"Last Month": "Last Month",
"Last Scan": "Azken azterketa",
"Last seen": "Azken agerraldia",
"Latest Change": "Azken aldaketa",
@ -378,13 +384,16 @@
"There are no folders to share with this device.": "Ez dago gailu honekin partekatzeko karpetarik.",
"They are retried automatically and will be synced when the error is resolved.": "Errorea zuzendua izanen delarik, automatikoki berriz entseatuak et sinkronizatuak izanen dira",
"This Device": "Tresna hau",
"This Month": "This Month",
"This can easily give hackers access to read and change any files on your computer.": "Hunek errexki irakurtzen eta aldatzen uzten ahal du zure ordenagailuko edozein fitxero, nahiz eta sartu denak ez haizu izan!",
"This device cannot automatically discover other devices or announce its own address to be found by others. Only devices with statically configured addresses can connect.": "Gailu honek ezin ditu automatikoki beste gailu batzuk aurkitu edo bere helbidea iragarri beste batzuek aurkitzeko. Estatikoki konfiguratutako helbideak dituzten gailuak bakarrik konekta daitezke.",
"This is a major version upgrade.": "Aktualizatze garrantzitsu bat da",
"This setting controls the free space required on the home (i.e., index database) disk.": "Behar den espazio kontrolatzen du egokitze honek, zure erabiltzale partekatzea geritzatzen duen diskoan (hori da, indexazio datu-basean)",
"Time": "Ordua",
"Time the item was last modified": "Itema azkenekoz aldatu zen ordua",
"Today": "Today",
"Trash Can File Versioning": "Zakarrontzia",
"Twitter": "Twitter",
"Type": "Mota",
"UNIX Permissions": "UNIX baimenak",
"Unavailable": "Ez dago erabilgarri",
@ -428,6 +437,7 @@
"When adding a new device, keep in mind that this device must be added on the other side too.": "Tresna bat gehitzen duzularik, gogoan atxik ezazu zurea bestaldean gehitu behar dela ere",
"When adding a new folder, keep in mind that the Folder ID is used to tie folders together between devices. They are case sensitive and must match exactly between all devices.": "Partekatze bat gehitzen delarik, gogoan atxik ezazu bere IDa erabilia dela errepertorioak lotzeko tresnen bitartez. ID-a hautskorra da eta partekatze hontan parte hartzen duten tresna guzietan berdina izan behar du.",
"Yes": "Bai",
"Yesterday": "Yesterday",
"You can also select one of these nearby devices:": "Gertuko gailu hauetako bat ere hauta dezakezu:",
"You can change your choice at any time in the Settings dialog.": "Zure hautua aldatzen ahal duzu \"Konfigurazio\" leihatilan",
"You can read more about the two release channels at the link below.": "Bi banaketa kanal hauen bidez gehiago jakin dezakezu, lokarri honen bidez ",

View File

@ -19,6 +19,7 @@
"Advanced": "Lisäasetukset",
"Advanced Configuration": "Kehittyneet asetukset",
"All Data": "Kaikki data",
"All Time": "All Time",
"All folders shared with this device must be protected by a password, such that all sent data is unreadable without the given password.": "All folders shared with this device must be protected by a password, such that all sent data is unreadable without the given password.",
"Allow Anonymous Usage Reporting?": "Salli anonyymi käyttöraportointi?",
"Allowed Networks": "Sallitut verkot",
@ -27,6 +28,7 @@
"An external command handles the versioning. It has to remove the file from the shared folder. If the path to the application contains spaces, it should be quoted.": "Ulkoinen komento hallitsee versionnin. Sen täytyy poistaa tiedosto synkronoidusta kansiosta. Mikäli ohjelman polussa on välilyöntejä se on laitettava lainausmerkkeihin.",
"Anonymous Usage Reporting": "Anonyymi käyttöraportointi",
"Anonymous usage report format has changed. Would you like to move to the new format?": "Anonyymi käyttöraportti on muuttunut. Haluatko vaihtaa uuteen muotoon?",
"Apply": "Apply",
"Are you sure you want to continue?": "Are you sure you want to continue?",
"Are you sure you want to override all remote changes?": "Are you sure you want to override all remote changes?",
"Are you sure you want to permanently delete all these files?": "Are you sure you want to permanently delete all these files?",
@ -66,6 +68,7 @@
"Copyright © 2014-2019 the following Contributors:": "Tekijänoikeus © 2014-2019 seuraavat avustajat:",
"Creating ignore patterns, overwriting an existing file at {%path%}.": "Luodaan ohituslausekkeet. Ylikirjoitetaan tiedosto: {{path}}.",
"Currently Shared With Devices": "Currently Shared With Devices",
"Custom Range": "Custom Range",
"Danger!": "Vaara!",
"Debugging Facilities": "Debug -luokat",
"Default Configuration": "Default Configuration",
@ -183,6 +186,9 @@
"Keep Versions": "Säilytä versiot",
"LDAP": "LDAP",
"Largest First": "Suurin ensin",
"Last 30 Days": "Last 30 Days",
"Last 7 Days": "Last 7 Days",
"Last Month": "Last Month",
"Last Scan": "Viimeisin skannaus",
"Last seen": "Nähty viimeksi",
"Latest Change": "Viimeisin muutos",
@ -378,13 +384,16 @@
"There are no folders to share with this device.": "There are no folders to share with this device.",
"They are retried automatically and will be synced when the error is resolved.": "Niiden synkronointia yritetään uudelleen automaattisesti.",
"This Device": "Tämä laite",
"This Month": "This Month",
"This can easily give hackers access to read and change any files on your computer.": "Tämä voi helposti sallia vihamielisille tahoille pääsyn lukea ja muokata kaikkia tiedostojasi",
"This device cannot automatically discover other devices or announce its own address to be found by others. Only devices with statically configured addresses can connect.": "This device cannot automatically discover other devices or announce its own address to be found by others. Only devices with statically configured addresses can connect.",
"This is a major version upgrade.": "Tämä on pääversion päivitys.",
"This setting controls the free space required on the home (i.e., index database) disk.": "Tämä asetus määrittää vaaditun vapaan levytilan kotikansiossa (se missä index-tietokanta on).",
"Time": "Aika",
"Time the item was last modified": "Aika jolloin kohdetta viimeksi muokattiin",
"Today": "Today",
"Trash Can File Versioning": "Roskakorin tiedostoversiointi",
"Twitter": "Twitter",
"Type": "Tyyppi",
"UNIX Permissions": "UNIX Permissions",
"Unavailable": "Ei saatavilla",
@ -428,6 +437,7 @@
"When adding a new device, keep in mind that this device must be added on the other side too.": "Lisättäessä laitetta, muista että tämä laite tulee myös lisätä toiseen laitteeseen.",
"When adding a new folder, keep in mind that the Folder ID is used to tie folders together between devices. They are case sensitive and must match exactly between all devices.": "Lisättäessä uutta kansiota, muista että kansion ID:tä käytetään solmimaan kansiot yhteen laitteiden välillä. Ne ovat riippuvaisia kirjankoosta ja niiden tulee täsmätä kaikkien laitteiden välillä.",
"Yes": "Kyllä",
"Yesterday": "Yesterday",
"You can also select one of these nearby devices:": "Voit myös valita jonkin näistä lähellä olevista laitteista:",
"You can change your choice at any time in the Settings dialog.": "Voit muuttaa valintaasi koska tahansa \"Asetukset\" -valikossa.",
"You can read more about the two release channels at the link below.": "Voit lukea lisää kahdesta julkaisukanavasta alla olevasta linkistä.",

View File

@ -19,6 +19,7 @@
"Advanced": "Avancé",
"Advanced Configuration": "Configuration avancée",
"All Data": "Toutes les données",
"All Time": "Toujours",
"All folders shared with this device must be protected by a password, such that all sent data is unreadable without the given password.": "Tous les partages pour cet appareil doivent être protégés par mot de passe, de sorte que les données envoyées soient illisibles sans le mot de passe.",
"Allow Anonymous Usage Reporting?": "Autoriser l'envoi de statistiques d'utilisation anonymisées ?",
"Allowed Networks": "Réseaux autorisés",
@ -27,6 +28,7 @@
"An external command handles the versioning. It has to remove the file from the shared folder. If the path to the application contains spaces, it should be quoted.": "Une commande externe gère les versions de fichiers. Il lui incombe de supprimer les fichiers du répertoire partagé. Si le chemin contient des espaces, il doit être spécifié entre guillemets.",
"Anonymous Usage Reporting": "Rapport anonyme de statistiques d'utilisation",
"Anonymous usage report format has changed. Would you like to move to the new format?": "Le format du rapport anonyme d'utilisation a changé. Voulez-vous passer au nouveau format ?",
"Apply": "Appliquer",
"Are you sure you want to continue?": "Confirmez-vous ?",
"Are you sure you want to override all remote changes?": "Voulez-vous vraiment écraser tous les changements distants ?",
"Are you sure you want to permanently delete all these files?": "Êtes-vous sûrs de vouloir définitivement supprimer tous ces fichiers ?",
@ -66,6 +68,7 @@
"Copyright © 2014-2019 the following Contributors:": "Copyright © 2014-2019 les Contributeurs suivants :",
"Creating ignore patterns, overwriting an existing file at {%path%}.": "Création de masques d'exclusion, remplacement du fichier existant : {{path}}.",
"Currently Shared With Devices": "Appareils membres actuels de ce partage :",
"Custom Range": "Plage personnalisée",
"Danger!": "Attention !",
"Debugging Facilities": "Outils de débogage",
"Default Configuration": "Préférences pour les créations (non rétroactif)",
@ -128,7 +131,7 @@
"Error": "Erreur",
"External File Versioning": "Gestion externe des versions de fichiers",
"Failed Items": "Éléments en échec",
"Failed to load file versions.": "Failed to load file versions.",
"Failed to load file versions.": "Échec de chargement des versions de fichiers.",
"Failed to load ignore patterns.": "Échec du chargement des masques d'exclusions.",
"Failed to setup, retrying": "Échec, nouvel essai",
"Failure to connect to IPv6 servers is expected if there is no IPv6 connectivity.": "La connexion aux serveurs en IPv6 va échouer s'il n'y a pas de connectivité IPv6.",
@ -183,6 +186,9 @@
"Keep Versions": "Nombre de versions à conserver",
"LDAP": "LDAP",
"Largest First": "Les plus volumineux en premier",
"Last 30 Days": "Les 30 derniers jours",
"Last 7 Days": "Les 7 derniers jours",
"Last Month": "Le mois dernier",
"Last Scan": "Dernière analyse",
"Last seen": "Dernière apparition",
"Latest Change": "Dernier changement",
@ -374,17 +380,20 @@
"The rate limit must be a non-negative number (0: no limit)": "La limite de débit ne doit pas être négative (0 = pas de limite)",
"The rescan interval must be a non-negative number of seconds.": "L'intervalle d'analyse ne doit pas être un nombre négatif de secondes.",
"There are no devices to share this folder with.": "Il n'y a aucun appareil à ajouter à ce partage.",
"There are no file versions to restore.": "There are no file versions to restore.",
"There are no file versions to restore.": "Aucune version de fichier à restaurer.",
"There are no folders to share with this device.": "Il n'y a aucun partage disponible.",
"They are retried automatically and will be synced when the error is resolved.": "Ils seront automatiquement retentés et synchronisés quand l'erreur sera résolue.",
"This Device": "Cet appareil",
"This Month": "Ce mois-ci",
"This can easily give hackers access to read and change any files on your computer.": "Ceci peut aisément permettre à un intrus de lire et modifier n'importe quel fichier de votre ordinateur.",
"This device cannot automatically discover other devices or announce its own address to be found by others. Only devices with statically configured addresses can connect.": "Cet appareil ne peut ni découvrir automatiquement les autres, ni annoncer sa propre présence pour être découvert pas les autres. Seuls les appareils configurés avec des connexions statiques peuvent se connecter.",
"This is a major version upgrade.": "Il s'agit d'une mise à jour majeure.",
"This setting controls the free space required on the home (i.e., index database) disk.": "Ce réglage contrôle l'espace disque requis dans le disque qui abrite votre répertoire utilisateur (pour la base de données d'indexation).",
"Time": "Heure",
"Time the item was last modified": "Dernière modification de l'élément",
"Today": "Aujourd'hui",
"Trash Can File Versioning": "Style poubelle",
"Twitter": "Piaf",
"Type": "Type",
"UNIX Permissions": "Permissions UNIX",
"Unavailable": "Indisponible",
@ -428,6 +437,7 @@
"When adding a new device, keep in mind that this device must be added on the other side too.": "Lorsque vous ajoutez un appareil, gardez à l'esprit que le votre doit aussi être ajouté de l'autre coté.",
"When adding a new folder, keep in mind that the Folder ID is used to tie folders together between devices. They are case sensitive and must match exactly between all devices.": "Lorsqu'un nouveau partage est ajouté, gardez à l'esprit que son ID est utilisée pour lier les répertoires à travers les appareils. L'ID est sensible à la casse et sera forcément la même sur tous les appareils participant à ce partage.",
"Yes": "Oui",
"Yesterday": "Hier",
"You can also select one of these nearby devices:": "Vous pouvez également sélectionner l'un de ces appareils proches :",
"You can change your choice at any time in the Settings dialog.": "Vous pouvez changer votre choix dans la boîte de dialogue \"Configuration\".",
"You can read more about the two release channels at the link below.": "Vous pouvez en savoir plus sur les deux canaux de distribution via le lien ci-dessous.",

View File

@ -19,6 +19,7 @@
"Advanced": "Avansearre",
"Advanced Configuration": "Avansearre konfiguraasje",
"All Data": "Alle data",
"All Time": "All Time",
"All folders shared with this device must be protected by a password, such that all sent data is unreadable without the given password.": "Alle mappen dy't mei dit apparaat dielt binne, moatte wurde beskerme mei in wachtwurd, sadat alle ferstjoerde data net lêsber is sûnder it opjûne wachtwurd .",
"Allow Anonymous Usage Reporting?": "Anonime brûkensrapportaazje tastean?",
"Allowed Networks": "Tasteane Netwurken",
@ -27,6 +28,7 @@
"An external command handles the versioning. It has to remove the file from the shared folder. If the path to the application contains spaces, it should be quoted.": "In ekstern kommando soarget foar it ferzjebehear. It moat de triem út de dielde map fuortsmite. As it paad nei de applikaasje romtes hat, moat it tusken oanheltekens sette wurden.",
"Anonymous Usage Reporting": "Anonym brûkensrapportaazje",
"Anonymous usage report format has changed. Would you like to move to the new format?": "It formaat fan de rapportaazje fan anonime gebrûksynformaasje is feroare. Wolle jo op dit nije formaat oerstappe?",
"Apply": "Apply",
"Are you sure you want to continue?": "Binne jo der wis fan dat jo trochgean wolle?",
"Are you sure you want to override all remote changes?": "Are you sure you want to override all remote changes?",
"Are you sure you want to permanently delete all these files?": "Binne jo der wis fan dat jo al dizze bestannen permanint wiskje wolle?",
@ -66,6 +68,7 @@
"Copyright © 2014-2019 the following Contributors:": "Copyright © 2014-2019 de folgende Bydragers:",
"Creating ignore patterns, overwriting an existing file at {%path%}.": "Meitsje negear-patroanen dy in besteande triem oerskriuwe yn {{path}}.",
"Currently Shared With Devices": "Op dit stuit Dielt mei Apparaten",
"Custom Range": "Custom Range",
"Danger!": "Gefaar!",
"Debugging Facilities": "Debug-foarsjennings",
"Default Configuration": "Standertkonfiguraasje",
@ -183,6 +186,9 @@
"Keep Versions": "Ferzjes bewarje",
"LDAP": "LDAP",
"Largest First": "Grutste earst",
"Last 30 Days": "Last 30 Days",
"Last 7 Days": "Last 7 Days",
"Last Month": "Last Month",
"Last Scan": "Lêst Skent",
"Last seen": "Lêst sjoen",
"Latest Change": "Meast Resinte Feroarings",
@ -378,13 +384,16 @@
"There are no folders to share with this device.": "D'r binne gjin mappen te dielen mei dit apparaat.",
"They are retried automatically and will be synced when the error is resolved.": "Sy wurde automatysk opnij probearre en sille syngronisearre wurde wannear at de flater oplost is.",
"This Device": "Dit Apparaat",
"This Month": "This Month",
"This can easily give hackers access to read and change any files on your computer.": "Dit kin samar ynkringers (hackers) tagong jaan om elke triem op jo kompjûter te besjen en te feroarjen.",
"This device cannot automatically discover other devices or announce its own address to be found by others. Only devices with statically configured addresses can connect.": "This device cannot automatically discover other devices or announce its own address to be found by others. Only devices with statically configured addresses can connect.",
"This is a major version upgrade.": "Dit is in wichtige ferzjefernijing.",
"This setting controls the free space required on the home (i.e., index database) disk.": "Dizze ynstelling bepaalt de frije romte dy't noadich is op de home-skiif (fan de yndeks-databank).",
"Time": "Tiid",
"Time the item was last modified": "Tiidstip dat it ûnderdiel foar it lest oanpast waard.",
"Today": "Today",
"Trash Can File Versioning": "Jiskefet-triemferzjebehear",
"Twitter": "Twitter",
"Type": "Type",
"UNIX Permissions": "UNIX-Rjochten",
"Unavailable": "Net beskikber",
@ -428,6 +437,7 @@
"When adding a new device, keep in mind that this device must be added on the other side too.": "Hâld by it taheakjen fan in nij apparaat yn de holle dat it apparaat oan de oare kant ek taheakke wurde moat. ",
"When adding a new folder, keep in mind that the Folder ID is used to tie folders together between devices. They are case sensitive and must match exactly between all devices.": "Hâld by it taheakjen fan in nije map yn de holle dat de map-ID brûkt wurd om de mappen tusken apparaten mei-inoar te ferbinen. Se binne haadlettergefoelich en moatte oer alle apparaten eksakt oerienkomme.",
"Yes": "Ja",
"Yesterday": "Yesterday",
"You can also select one of these nearby devices:": "Jo kinne ek ien fan dizze tichtbye apparaten selektearje:",
"You can change your choice at any time in the Settings dialog.": "Jo kinne jo kar op elk stuit oanpasse yn it Ynstellingsdialooch.",
"You can read more about the two release channels at the link below.": "Jo kinne mear lêze oer de twa útjeftekanalen fia de ûndersteande link.",

View File

@ -19,6 +19,7 @@
"Advanced": "Haladó",
"Advanced Configuration": "Haladó beállítások",
"All Data": "Minden adat",
"All Time": "Szüntelen",
"All folders shared with this device must be protected by a password, such that all sent data is unreadable without the given password.": "Minden, ezzel az eszközzel megosztott mappát jelszóval kell védeni, így az összes elküldött adat olvashatatlan a megadott jelszó nélkül.",
"Allow Anonymous Usage Reporting?": "A névtelen felhasználási adatok elküldhetők?",
"Allowed Networks": "Engedélyezett hálózatok",
@ -27,6 +28,7 @@
"An external command handles the versioning. It has to remove the file from the shared folder. If the path to the application contains spaces, it should be quoted.": "Külső program kezeli a fájlverzió-követést. Az távolítja el a fájlt a megosztott mappából. Ha az alkalmazás útvonala szóközöket tartalmaz, zárójelezni szükséges az útvonalat.",
"Anonymous Usage Reporting": "Névtelen felhasználási adatok küldése",
"Anonymous usage report format has changed. Would you like to move to the new format?": "A névtelen használati jelentés formátuma megváltozott. Szeretnél áttérni az új formátumra?",
"Apply": "Alkalmazás",
"Are you sure you want to continue?": "Biztosan folytatható?",
"Are you sure you want to override all remote changes?": "Biztos, hogy felülírható minden távoli módosítás?",
"Are you sure you want to permanently delete all these files?": "Biztos, hogy véglegesen törölhetőek mindezek a fájlok?",
@ -66,6 +68,7 @@
"Copyright © 2014-2019 the following Contributors:": "Szerzői jog © 2014-2019 az alábbi közreműködők:",
"Creating ignore patterns, overwriting an existing file at {%path%}.": "Mellőzési minták létrehozása, egy létező fájl felülírása itt: {{path}}.",
"Currently Shared With Devices": "Eszközök, melyekkel jelenleg meg van osztva",
"Custom Range": "Egyedi intervallum",
"Danger!": "Veszély!",
"Debugging Facilities": "Hibakeresési képességek",
"Default Configuration": "Alapértelmezett beállítások",
@ -183,6 +186,9 @@
"Keep Versions": "Megtartott verziók",
"LDAP": "LDAP",
"Largest First": "Nagyobb először",
"Last 30 Days": "Utolsó 30 nap",
"Last 7 Days": "Utolsó 7 nap",
"Last Month": "Előző hónap",
"Last Scan": "Utolsó vizsgálat",
"Last seen": "Utoljára látva",
"Latest Change": "Utolsó módosítás",
@ -378,13 +384,16 @@
"There are no folders to share with this device.": "Nincsenek mappák, amelyek megoszthatók ezzel az eszközzel.",
"They are retried automatically and will be synced when the error is resolved.": "A hiba javítása után automatikusan újra megpróbálja a szinkronizálást.",
"This Device": "Ez az eszköz",
"This Month": "Jelen hónap",
"This can easily give hackers access to read and change any files on your computer.": "Így a hekkerek könnyedén hozzáférést szerezhetnek a gépen tárolt fájlok olvasásához és módosításához.",
"This device cannot automatically discover other devices or announce its own address to be found by others. Only devices with statically configured addresses can connect.": "Ez az eszköz nem képes automatikusan felderíteni más eszközöket, illetve nem tudja bejelenteni a saját címét, hogy mások megtalálják. Csak statikusan konfigurált címekkel rendelkező eszközök tudnak csatlakozni.",
"This is a major version upgrade.": "Ez egy főverzió-frissítés.",
"This setting controls the free space required on the home (i.e., index database) disk.": "Ez e beállítás szabályozza a szükséges szabad helyet a fő (pl: index, adatbázis) lemezen.",
"Time": "Idő",
"Time the item was last modified": "Az idő, amikor utoljára módosítva lett az elem",
"Today": "Ma",
"Trash Can File Versioning": "Szemetes fájlverzió-követés",
"Twitter": "Twitter",
"Type": "Típus",
"UNIX Permissions": "UNIX jogosultságok",
"Unavailable": "Nem elérhető",
@ -428,6 +437,7 @@
"When adding a new device, keep in mind that this device must be added on the other side too.": "Új eszköz hozzáadásakor nem szabad elfeledkezni arról, hogy a másik oldalon ezt az eszközt is hozzá kell adni.",
"When adding a new folder, keep in mind that the Folder ID is used to tie folders together between devices. They are case sensitive and must match exactly between all devices.": "Új eszköz hozzáadásakor észben kell tartani, hogy a mappaazonosító arra való, hogy összekösse a mappákat az eszközökön. Az azonosító kisbetű-nagybetű érzékeny és pontosan egyeznie kell az eszközökön.",
"Yes": "Igen",
"Yesterday": "Tegnap",
"You can also select one of these nearby devices:": "Az alábbi közelben lévő eszközök közül lehet választani:",
"You can change your choice at any time in the Settings dialog.": "A beállításoknál bármikor módosíthatod a választásodat.",
"You can read more about the two release channels at the link below.": "A két kiadási csatornáról az alábbi linken olvashatsz további információkat.",

View File

@ -19,6 +19,7 @@
"Advanced": "Tingkat Lanjut",
"Advanced Configuration": "Konfigurasi Tingkat Lanjut",
"All Data": "Semua Data",
"All Time": "Semua Waktu",
"All folders shared with this device must be protected by a password, such that all sent data is unreadable without the given password.": "Semua folder yang dibagi dengan perangkat ini harus dilindungi dengan sandi, sehingga semua data tidak dapat dilihat tanpa sandi.",
"Allow Anonymous Usage Reporting?": "Izinkan Laporan Penggunaan Anonim?",
"Allowed Networks": "Jaringan Terizinkan",
@ -27,6 +28,7 @@
"An external command handles the versioning. It has to remove the file from the shared folder. If the path to the application contains spaces, it should be quoted.": "Perintah eksternal menangani pemversian. Ia harus menghapus berkas dari folder yang dibagi. Jika lokasi aplikasi terdapat spasi, itu harus dikutip.",
"Anonymous Usage Reporting": "Pelaporan Penggunaan Anonim",
"Anonymous usage report format has changed. Would you like to move to the new format?": "Format pelaporan penggunaan anonim telah berubah. Maukah anda pindah menggunakan format yang baru?",
"Apply": "Apply",
"Are you sure you want to continue?": "Apakah anda yakin ingin lanjut?",
"Are you sure you want to override all remote changes?": "Apakah anda yakin ingin menimpa semua perubahan jarak jauh?",
"Are you sure you want to permanently delete all these files?": "Apakah anda yakin ingin menghapus semua berkas berikut secara permanen?",
@ -45,7 +47,7 @@
"Be careful!": "Harap hati-hati!",
"Bugs": "Bugs",
"Cancel": "Batal",
"Changelog": "Log perubahan",
"Changelog": "Log Perubahan",
"Clean out after": "Bersihkan setelah",
"Cleaning Versions": "Versi Pembersihan",
"Cleanup Interval": "Interval Pembersihan",
@ -66,6 +68,7 @@
"Copyright © 2014-2019 the following Contributors:": "Hak cipta © 2014-2019 Kontributor berikut ini:",
"Creating ignore patterns, overwriting an existing file at {%path%}.": "Membuat pola pengabaian, menimpa sebuah file yang sudah ada di {{path}}.",
"Currently Shared With Devices": "Sekarang Terbagi Dengan Perangkat",
"Custom Range": "Rentang Kustom",
"Danger!": "Bahaya!",
"Debugging Facilities": "Fasilitas Debug",
"Default Configuration": "Konfigurasi Bawaan",
@ -117,7 +120,7 @@
"Edit Folder Defaults": "Sunting Bawaan Folder",
"Editing {%path%}.": "Menyunting {{path}}.",
"Enable Crash Reporting": "Akitfkan Pelaporan Crash",
"Enable NAT traversal": "Aktifkan traversal NAT",
"Enable NAT traversal": "Aktifkan Traversal NAT",
"Enable Relaying": "Aktifkan Relay",
"Enabled": "Aktif",
"Enter a non-negative number (e.g., \"2.35\") and select a unit. Percentages are as part of the total disk size.": "Masukkan nomor yang bukan negatif (contoh \"2.35\") dan pilih sebuah unit. Persentase adalah bagian dari total ukuran penyimpanan.",
@ -128,7 +131,7 @@
"Error": "Galat",
"External File Versioning": "Pemversian Berkas Eksternal",
"Failed Items": "Berkas yang gagal",
"Failed to load file versions.": "Failed to load file versions.",
"Failed to load file versions.": "Gagal memuat versi berkas.",
"Failed to load ignore patterns.": "Gagal memuat pola pengabaian.",
"Failed to setup, retrying": "Gagal menyiapkan, mengulang",
"Failure to connect to IPv6 servers is expected if there is no IPv6 connectivity.": "Gagal untuk menyambung ke server IPv6 itu disangka apabila tidak ada konektivitas IPv6.",
@ -155,7 +158,7 @@
"GUI Authentication Password": "Sandi Otentikasi GUI",
"GUI Authentication User": "Pengguna Otentikasi GUI",
"GUI Authentication: Set User and Password": "Otentikasi GUI: Atur Pengguna dan Sandi",
"GUI Listen Address": "Alamat Mendengar GUI",
"GUI Listen Address": "Alamat Pendengaran GUI",
"GUI Theme": "Tema GUI",
"General": "Umum",
"Generate": "Generasi",
@ -183,6 +186,9 @@
"Keep Versions": "Jumlah Versi yang Disimpan",
"LDAP": "LDAP",
"Largest First": "Terbesar Dahulu",
"Last 30 Days": "30 Hari Terakhir",
"Last 7 Days": "7 Hari Terakhir",
"Last Month": "Bulan Lalu",
"Last Scan": "Scan Terakhir",
"Last seen": "Terakhir dilihat",
"Latest Change": "Perubahan Terbaru",
@ -300,7 +306,7 @@
"Share Folders With Device": "Bagi Folder Dengan Perangkat",
"Share this folder?": "Bagi Folder Ini?",
"Shared Folders": "Folder Yang Dibagi",
"Shared With": "Dibagi dengan",
"Shared With": "Dibagi Dengan",
"Sharing": "Pembagian",
"Show ID": "Tampilkan ID",
"Show QR": "Tampilkan QR",
@ -374,17 +380,20 @@
"The rate limit must be a non-negative number (0: no limit)": "Pembatasan kecepatan harus berupa angka positif (0: tidak terbatas)",
"The rescan interval must be a non-negative number of seconds.": "Interval pemindaian ulang harus berupa angka positif.",
"There are no devices to share this folder with.": "Tidak ada perangkat untuk membagikan folder ini.",
"There are no file versions to restore.": "There are no file versions to restore.",
"There are no file versions to restore.": "Tidak ada versi berkas untuk dipulihkan.",
"There are no folders to share with this device.": "Tidak ada folder untuk dibagi dengan perangkat ini.",
"They are retried automatically and will be synced when the error is resolved.": "Mereka diulang secara otomatis dan akan disinkron ketika galat telah terselesaikan.",
"This Device": "Perangkat Ini",
"This Month": "Bulan Ini",
"This can easily give hackers access to read and change any files on your computer.": "Ini dapat dengan mudah memberi peretas akses untuk melihat dan mengubah file apapun dalam komputer anda.",
"This device cannot automatically discover other devices or announce its own address to be found by others. Only devices with statically configured addresses can connect.": "Perangkat ini tidak dapat menemukan perangkat lain secara otomatis atau mengumumkan alamat sendiri untuk dapat ditemukan oleh perangkat lain. Hanya perangkat dengan konfigurasi alamat statik dapat menyambung.",
"This is a major version upgrade.": "Ini adalah peningkatan versi besar.",
"This setting controls the free space required on the home (i.e., index database) disk.": "Pengaturan ini mengontrol jumlah penyimpanan kosong yang dibutuhkan dalam penyimpanan utama (contoh database indeks).",
"Time": "Waktu",
"Time the item was last modified": "Waktu file terakhir dimodifikasi",
"Today": "Hari Ini",
"Trash Can File Versioning": "Pemversian Berkas Tempat Sampah",
"Twitter": "Twitter",
"Type": "Tipe",
"UNIX Permissions": "Izin UNIX",
"Unavailable": "Tidak Tersedia",
@ -425,9 +434,10 @@
"Watch for Changes": "Pantau Perubahan",
"Watching for Changes": "Memantau Perubahan",
"Watching for changes discovers most changes without periodic scanning.": "Memantau perubahan menemukan kebanyakan perubahan tanpa pemindaian periodik.",
"When adding a new device, keep in mind that this device must be added on the other side too.": "When adding a new device, keep in mind that this device must be added on the other side too.",
"When adding a new folder, keep in mind that the Folder ID is used to tie folders together between devices. They are case sensitive and must match exactly between all devices.": "When adding a new folder, keep in mind that the Folder ID is used to tie folders together between devices. They are case sensitive and must match exactly between all devices.",
"When adding a new device, keep in mind that this device must be added on the other side too.": "Ketika menambah perangkat baru, perlu diingat bahwa perangkat ini juga harus ditambahkan pada sisi lain juga.",
"When adding a new folder, keep in mind that the Folder ID is used to tie folders together between devices. They are case sensitive and must match exactly between all devices.": "Ketika menambah sebuah folder baru, perlu diingat bahwa ID Folder digunakan untuk mengikat folder antar perangkat. Mereka peka terhadap kapitalisasi huruf dan harus sama pada semua perangkat.",
"Yes": "Iya",
"Yesterday": "Kemarin",
"You can also select one of these nearby devices:": "Anda juga dapat memilih salah satu perangkat disekitar berikut:",
"You can change your choice at any time in the Settings dialog.": "Anda dapat mengubah pilihan anda dalam dialog Pengaturan.",
"You can read more about the two release channels at the link below.": "Anda dapat membaca lebih lanjut tentang dua saluran rilis pada tautan di bawah.",

View File

@ -19,6 +19,7 @@
"Advanced": "Avanzato",
"Advanced Configuration": "Configurazione Avanzata",
"All Data": "Tutti i Dati",
"All Time": "All Time",
"All folders shared with this device must be protected by a password, such that all sent data is unreadable without the given password.": "Tutte le cartelle condivise con questo dispositivo devono essere protette da una password, in modo tale che tutti i dati inviati siano illeggibili senza la password fornita.",
"Allow Anonymous Usage Reporting?": "Abilitare Statistiche Anonime di Utilizzo?",
"Allowed Networks": "Reti Consentite.",
@ -27,6 +28,7 @@
"An external command handles the versioning. It has to remove the file from the shared folder. If the path to the application contains spaces, it should be quoted.": "Il controllo versione è gestito da un comando esterno. Quest'ultimo deve rimuovere il file dalla cartella condivisa. Se il percorso dell'applicazione contiene spazi, deve essere indicato tra virgolette.",
"Anonymous Usage Reporting": "Statistiche Anonime di Utilizzo",
"Anonymous usage report format has changed. Would you like to move to the new format?": "Il formato delle statistiche anonime di utilizzo è cambiato. Vuoi passare al nuovo formato?",
"Apply": "Apply",
"Are you sure you want to continue?": "Sei sicuro di voler continuare?",
"Are you sure you want to override all remote changes?": "Sei sicuro di voler sovrascrivere tutte le modifiche remote?",
"Are you sure you want to permanently delete all these files?": "Sei sicuro di voler eliminare definitivamente tutti questi file?",
@ -66,6 +68,7 @@
"Copyright © 2014-2019 the following Contributors:": "Copyright © 2014-2019 i seguenti Collaboratori:",
"Creating ignore patterns, overwriting an existing file at {%path%}.": "Creazione di schemi di esclusione, sovrascrivendo un file esistente in {{path}}.",
"Currently Shared With Devices": "Attualmente Condiviso Con Dispositivi",
"Custom Range": "Custom Range",
"Danger!": "Pericolo!",
"Debugging Facilities": "Servizi di Debug",
"Default Configuration": "Configurazione predefinita",
@ -183,6 +186,9 @@
"Keep Versions": "Versioni Mantenute",
"LDAP": "LDAP",
"Largest First": "Prima il più grande",
"Last 30 Days": "Last 30 Days",
"Last 7 Days": "Last 7 Days",
"Last Month": "Last Month",
"Last Scan": "Ultima Scansione",
"Last seen": "Ultima connessione",
"Latest Change": "Ultima Modifica",
@ -378,13 +384,16 @@
"There are no folders to share with this device.": "Non ci sono cartelle da condividere con questo dispositivo.",
"They are retried automatically and will be synced when the error is resolved.": "Verranno effettuati tentativi in automatico e verranno sincronizzati quando l'errore sarà risolto.",
"This Device": "Questo Dispositivo",
"This Month": "This Month",
"This can easily give hackers access to read and change any files on your computer.": "Ciò potrebbe facilmente permettere agli hackers accesso alla lettura e modifica di qualunque file del tuo computer.",
"This device cannot automatically discover other devices or announce its own address to be found by others. Only devices with statically configured addresses can connect.": "Questo dispositivo non può rilevare automaticamente altri dispositivi o annunciare il proprio indirizzo per essere trovato da altri. Possono connettersi solo i dispositivi con indirizzi configurati staticamente.",
"This is a major version upgrade.": "Questo è un aggiornamento di versione principale",
"This setting controls the free space required on the home (i.e., index database) disk.": "Questa impostazione controlla lo spazio libero richiesto sul disco home (cioè, database di indice).",
"Time": "Tempo",
"Time the item was last modified": "Ora dell'ultima modifica degli elementi",
"Today": "Today",
"Trash Can File Versioning": "Controllo Versione con Cestino",
"Twitter": "Twitter",
"Type": "Tipo",
"UNIX Permissions": "Permessi UNIX",
"Unavailable": "Non disponibile",
@ -428,6 +437,7 @@
"When adding a new device, keep in mind that this device must be added on the other side too.": "Quando si aggiunge un nuovo dispositivo, tenere presente che il dispositivo deve essere aggiunto anche dall'altra parte.",
"When adding a new folder, keep in mind that the Folder ID is used to tie folders together between devices. They are case sensitive and must match exactly between all devices.": "Quando aggiungi una nuova cartella, ricordati che gli ID vengono utilizzati per collegare le cartelle nei dispositivi. Distinguono maiuscole e minuscole e devono corrispondere esattamente su tutti i dispositivi.",
"Yes": "Sì",
"Yesterday": "Yesterday",
"You can also select one of these nearby devices:": "È anche possibile selezionare uno di questi dispositivi nelle vicinanze:",
"You can change your choice at any time in the Settings dialog.": "Puoi sempre cambiare la tua scelta nel dialogo Impostazioni.",
"You can read more about the two release channels at the link below.": "Puoi ottenere piu informazioni riguarda i due canali di rilascio nel collegamento sottostante.",

View File

@ -19,6 +19,7 @@
"Advanced": "高度な設定",
"Advanced Configuration": "高度な設定",
"All Data": "全てのデータ",
"All Time": "All Time",
"All folders shared with this device must be protected by a password, such that all sent data is unreadable without the given password.": "このデバイスと共有するすべてのフォルダーはパスワードによって保護されなければならず、送信されたすべてのデータは指定したパスワードがなければ読み取れません。",
"Allow Anonymous Usage Reporting?": "匿名で使用状況をレポートすることを許可しますか?",
"Allowed Networks": "許可されているネットワーク",
@ -27,6 +28,7 @@
"An external command handles the versioning. It has to remove the file from the shared folder. If the path to the application contains spaces, it should be quoted.": "An external command handles the versioning. It has to remove the file from the shared folder. If the path to the application contains spaces, it should be quoted.",
"Anonymous Usage Reporting": "匿名での使用状況レポート",
"Anonymous usage report format has changed. Would you like to move to the new format?": "匿名での使用状況レポートのフォーマットが変わりました。新形式でのレポートに移行しますか?",
"Apply": "Apply",
"Are you sure you want to continue?": "続行してもよろしいですか?",
"Are you sure you want to override all remote changes?": "リモートでの変更をすべて上書きしてもよろしいですか?",
"Are you sure you want to permanently delete all these files?": "これらのファイルをすべて完全に削除してもよろしいですか?",
@ -66,6 +68,7 @@
"Copyright © 2014-2019 the following Contributors:": "Copyright © 2014-2019 the following Contributors:",
"Creating ignore patterns, overwriting an existing file at {%path%}.": "無視パターンを作成中。既存のファイルが {{path}} にある場合は上書きされます。",
"Currently Shared With Devices": "現在共有中のデバイス",
"Custom Range": "Custom Range",
"Danger!": "危険!",
"Debugging Facilities": "デバッグ機能",
"Default Configuration": "デフォルトの設定",
@ -86,7 +89,7 @@
"Device Name": "デバイス名",
"Device is untrusted, enter encryption password": "Device is untrusted, enter encryption password",
"Device rate limits": "デバイス速度制限",
"Device that last modified the item": "Device that last modified the item",
"Device that last modified the item": "項目を最後に変更したデバイス",
"Devices": "デバイス",
"Disable Crash Reporting": "クラッシュレポートを無効にする",
"Disabled": "無効",
@ -183,6 +186,9 @@
"Keep Versions": "保持するバージョン数",
"LDAP": "LDAP",
"Largest First": "大きい順",
"Last 30 Days": "Last 30 Days",
"Last 7 Days": "Last 7 Days",
"Last Month": "Last Month",
"Last Scan": "最終スキャン日時",
"Last seen": "最終接続日時",
"Latest Change": "最終変更内容",
@ -197,7 +203,7 @@
"Local Discovery": "LAN内で探索",
"Local State": "ローカル状態",
"Local State (Total)": "ローカル状態 (合計)",
"Locally Changed Items": "Locally Changed Items",
"Locally Changed Items": "ローカルで変更された項目",
"Log": "ログ",
"Log tailing paused. Scroll to the bottom to continue.": "ログのリアルタイム表示を停止しています。下部までスクロールすると再開されます。",
"Logs": "ログ",
@ -206,8 +212,8 @@
"Maximum Age": "最大保存日数",
"Metadata Only": "メタデータのみ",
"Minimum Free Disk Space": "同期を停止する最小空きディスク容量",
"Mod. Device": "Mod. Device",
"Mod. Time": "Mod. Time",
"Mod. Device": "変更デバイス",
"Mod. Time": "変更日時",
"Move to top of queue": "最優先にする",
"Multi level wildcard (matches multiple directory levels)": "多階層ワイルドカード (複数のディレクトリ階層にマッチします)",
"Never": "記録なし",
@ -378,13 +384,16 @@
"There are no folders to share with this device.": "There are no folders to share with this device.",
"They are retried automatically and will be synced when the error is resolved.": "エラーが解決すると、自動的に再試行され同期されます。",
"This Device": "このデバイス",
"This Month": "This Month",
"This can easily give hackers access to read and change any files on your computer.": "この設定のままでは、あなたのコンピューターにある任意のファイルを、他者が簡単に盗み見たり書き換えたりすることができます。",
"This device cannot automatically discover other devices or announce its own address to be found by others. Only devices with statically configured addresses can connect.": "This device cannot automatically discover other devices or announce its own address to be found by others. Only devices with statically configured addresses can connect.",
"This is a major version upgrade.": "メジャーアップグレードです。",
"This setting controls the free space required on the home (i.e., index database) disk.": "この設定は、ホームディスク (インデックスデータベースがあるディスク) で必要な空き容量を管理します。",
"Time": "日時",
"Time the item was last modified": "Time the item was last modified",
"Time the item was last modified": "項目を最後に変更した日時",
"Today": "Today",
"Trash Can File Versioning": "ゴミ箱によるバージョン管理",
"Twitter": "Twitter",
"Type": "タイプ",
"UNIX Permissions": "UNIX パーミッション",
"Unavailable": "利用不可",
@ -428,6 +437,7 @@
"When adding a new device, keep in mind that this device must be added on the other side too.": "新しいデバイスを追加する際は、相手側デバイスにもこのデバイスを追加してください。",
"When adding a new folder, keep in mind that the Folder ID is used to tie folders together between devices. They are case sensitive and must match exactly between all devices.": "新しいフォルダーを追加する際、フォルダーIDはデバイス間でフォルダーの対応づけに使われることに注意してください。フォルダーIDは大文字と小文字が区別され、共有するすべてのデバイスの間で完全に一致しなくてはなりません。",
"Yes": "はい",
"Yesterday": "Yesterday",
"You can also select one of these nearby devices:": "近くに検出された以下のデバイスの一つを選択できます。",
"You can change your choice at any time in the Settings dialog.": "この設定はいつでも変更できます。",
"You can read more about the two release channels at the link below.": "2種類のリリースチャネルについての詳細は、以下のリンク先を参照してください。",

View File

@ -19,14 +19,16 @@
"Advanced": "고급",
"Advanced Configuration": "고급 설정",
"All Data": "전체 데이터",
"All Time": "전체 기간",
"All folders shared with this device must be protected by a password, such that all sent data is unreadable without the given password.": "송신하는 데이터 모두를 비밀번호 없이 읽을 수 없도록 이 기기와 공유한 모든 폴더를 비밀번호로 보호해야 합니다.",
"Allow Anonymous Usage Reporting?": "익명 사용 보고를 허용하시겠습니까?",
"Allowed Networks": "허가된 망",
"Alphabetic": "가나다순",
"Altered by ignoring deletes.": "삭제 항목 무시로 변경",
"Altered by ignoring deletes.": "삭제 항목 무시로 변경",
"An external command handles the versioning. It has to remove the file from the shared folder. If the path to the application contains spaces, it should be quoted.": "외부 명령이 파일 버전을 관리합니다. 공유 폴더에서 파일을 삭제해야 합니다. 응용 프로그램의 경로에 공백이 있으면 따옴표로 묶어야 합니다.",
"Anonymous Usage Reporting": "익명 사용 보고",
"Anonymous usage report format has changed. Would you like to move to the new format?": "익명 사용 보고의 형식이 변경되었습니다. 새 형식으로 설정을 변경하시겠습니까?",
"Apply": "적용",
"Are you sure you want to continue?": "계속하시겠습니까?",
"Are you sure you want to override all remote changes?": "다른 기기의 변경 항목 모두를 덮어쓰시겠습니까?",
"Are you sure you want to permanently delete all these files?": "이 파일 모두를 영구 삭제하시겠습니까?",
@ -65,7 +67,8 @@
"Copied from original": "원본에서 복사됨",
"Copyright © 2014-2019 the following Contributors:": "Copyright © 2014-2019 하위 기여자들:",
"Creating ignore patterns, overwriting an existing file at {%path%}.": "무시 양식 생성 중; {{path}} 경로의 기존 파일을 덮어씁니다.",
"Currently Shared With Devices": "현재 공유된 기기",
"Currently Shared With Devices": "공유된 기기",
"Custom Range": "사용자 설정 기간",
"Danger!": "위험!",
"Debugging Facilities": "디버그 기능",
"Default Configuration": "기본 설정",
@ -115,7 +118,7 @@
"Edit Device Defaults": "기기 기본 설정 편집",
"Edit Folder": "폴더 편집",
"Edit Folder Defaults": "폴더 기본 설정 편집",
"Editing {%path%}.": "{{path}} 경로 편집 중",
"Editing {%path%}.": "{{path}} 편집 중입니다.",
"Enable Crash Reporting": "충돌 보고 활성화",
"Enable NAT traversal": "NAT 통과 활성화",
"Enable Relaying": "중계 활성화",
@ -174,7 +177,7 @@
"Ignore patterns can only be added after the folder is created. If checked, an input field to enter ignore patterns will be presented after saving.": "무시 양식은 폴더가 생성된 후에만 추가할 수 있습니다. 체크할 경우, 폴더를 저장할 다음에 무시 양식을 입력하기 위한 새 창으로 이동합니다.",
"Ignored Devices": "무시한 기기",
"Ignored Folders": "무시한 폴더",
"Ignored at": "무시된 기기",
"Ignored at": "무시한 일자",
"Incoming Rate Limit (KiB/s)": "수신 속도 제한(KiB/s)",
"Incorrect configuration may damage your folder contents and render Syncthing inoperable.": "잘못된 설정은 폴더의 내용을 훼손하거나 Syncthing을 작동하지 못하게 할 수 있습니다.",
"Introduced By": "소개한 기기",
@ -183,6 +186,9 @@
"Keep Versions": "버전 수",
"LDAP": "LDAP",
"Largest First": "큰 파일 순",
"Last 30 Days": "지난 30일",
"Last 7 Days": "지난 7일",
"Last Month": "지난 달",
"Last Scan": "최근 탐색",
"Last seen": "최근 접속",
"Latest Change": "최신 변경 항목",
@ -210,24 +216,24 @@
"Mod. Time": "수정 시간",
"Move to top of queue": "대기열 상단으로 이동",
"Multi level wildcard (matches multiple directory levels)": "다중 수준 와일드카드(여러 단계의 디렉토리에서 적용됨)",
"Never": "사용 안 함",
"Never": "사용하지 않음",
"New Device": "새 기기",
"New Folder": "새 폴더",
"Newest First": "최신 파일 순",
"No": "아니요",
"No File Versioning": "파일 버전 관리 안 함",
"No File Versioning": "파일 버전 관리하지 않음",
"No files will be deleted as a result of this operation.": "이 작업의 결과로는 아무 파일도 삭제되지 않습니다.",
"No upgrades": "업데이트 안 함",
"No upgrades": "업데이트하지 않음",
"Not shared": "공유되지 않음",
"Notice": "공지",
"OK": "확인",
"Off": "꺼짐",
"Off": "하지 않음",
"Oldest First": "오랜 파일 순",
"Optional descriptive label for the folder. Can be different on each device.": "폴더를 묘사하는 선택적 이름입니다. 기기마다 달리 설정해도 됩니다.",
"Options": "옵션",
"Out of Sync": "동기화 실패",
"Out of Sync Items": "동기화 실패 항목",
"Outgoing Rate Limit (KiB/s)": "송신 속도 제한 (KiB/s)",
"Outgoing Rate Limit (KiB/s)": "송신 속도 제한(KiB/s)",
"Override": "덮어쓰기",
"Override Changes": "변경 항목 덮어쓰기",
"Path": "경로",
@ -376,15 +382,18 @@
"There are no devices to share this folder with.": "이 폴더를 공유할 기기가 없습니다.",
"There are no file versions to restore.": "복구할 파일 버전이 없습니다.",
"There are no folders to share with this device.": "이 기기와 공유할 폴더가 없습니다.",
"They are retried automatically and will be synced when the error is resolved.": "자동 재시도 중이며 문제가 해결되는 대로 동기화됩니다.",
"They are retried automatically and will be synced when the error is resolved.": "자동 재시도 중이며 문제가 해결되는 즉시 동기화될 예정입니다.",
"This Device": "현재 기기",
"This Month": "이번 달",
"This can easily give hackers access to read and change any files on your computer.": "이로 인해서는 해커가 손쉽게 컴퓨터의 모든 파일을 읽고 편집할 수 있게 됩니다.",
"This device cannot automatically discover other devices or announce its own address to be found by others. Only devices with statically configured addresses can connect.": "이 기기는 다른 기기를 자동으로 탐지하거나 다른 기기로부터 발견되도록 자신의 주소를 통보할 수 없습니다. 고정 주소로 설정한 기기만이 현재 기기에 접속할 수 있습니다.",
"This is a major version upgrade.": "주요 버전 업데이트입니다.",
"This setting controls the free space required on the home (i.e., index database) disk.": "이 설정은 홈(즉, 인덕스 데이터베이스) 저장 장치의 여유 공간을 관리합니다.",
"Time": "시간",
"Time the item was last modified": "항목 최근 변경 시간",
"Today": "오늘",
"Trash Can File Versioning": "휴지통을 통한 파일 버전 관리",
"Twitter": "트위터",
"Type": "유형",
"UNIX Permissions": "UNIX 권한",
"Unavailable": "변경 불가",
@ -399,7 +408,7 @@
"Unshared Folders": "공유되지 않은 폴더",
"Untrusted": "신뢰하지 않음",
"Up to Date": "최신 상태",
"Updated": "업데이트 완료",
"Updated": "업데이트",
"Upgrade": "업데이트",
"Upgrade To {%version%}": "{{version}}으로 업데이트",
"Upgrading": "업데이트 중",
@ -428,6 +437,7 @@
"When adding a new device, keep in mind that this device must be added on the other side too.": "새 기기를 추가할 때는 추가한 기기에서도 현재 기기를 추가해야 합니다.",
"When adding a new folder, keep in mind that the Folder ID is used to tie folders together between devices. They are case sensitive and must match exactly between all devices.": "새 폴더를 추가할 때 폴더 ID 번호는 기기 간에 폴더를 묶어줍니다. 대소문자가 구분되며 모든 기기에서 동일해야 합니다.",
"Yes": "예",
"Yesterday": "어제",
"You can also select one of these nearby devices:": "주변의 기기 중 하나를 선택할 수도 있습니다.",
"You can change your choice at any time in the Settings dialog.": "설정창에서 기존의 설정을 언제나 변경할 수 있습니다.",
"You can read more about the two release channels at the link below.": "두 가지의 출시 경로에 대해서는 아래의 링크를 참조하여 자세히 읽어보실 수 있습니다.",
@ -440,13 +450,13 @@
"directories": "개의 폴더",
"files": "개의 파일",
"full documentation": "전체 사용 설명서",
"items": "항목",
"items": "개의 항목",
"seconds": "초",
"theme-name-black": "검은색",
"theme-name-dark": "어두운 색",
"theme-name-default": "기본 색",
"theme-name-light": "밝은 색",
"{%device%} wants to share folder \"{%folder%}\".": "{{device}} 기기에서 \"{{folder}}\" 폴더를 공유하길 원합니다.",
"{%device%} wants to share folder \"{%folderlabel%}\" ({%folder%}).": "{{device}} 기기에서 \"{{folderlabel}}\" ({{folder}}) 폴더를 공유하길 원합니다.",
"{%device%} wants to share folder \"{%folder%}\".": "{{device}} 기기 \"{{folder}}\" 폴더를 공유하길 원합니다.",
"{%device%} wants to share folder \"{%folderlabel%}\" ({%folder%}).": "{{device}} 기기 \"{{folderlabel}}\" ({{folder}}) 폴더를 공유하길 원합니다.",
"{%reintroducer%} might reintroduce this device.": "{{reintroducer}} 기기에서 이 기기를 다시 소개할 수 있습니다."
}

View File

@ -19,6 +19,7 @@
"Advanced": "Išplėstiniai",
"Advanced Configuration": "Išplėstinė konfigūracija",
"All Data": "Visiems duomenims",
"All Time": "All Time",
"All folders shared with this device must be protected by a password, such that all sent data is unreadable without the given password.": "All folders shared with this device must be protected by a password, such that all sent data is unreadable without the given password.",
"Allow Anonymous Usage Reporting?": "Siųsti anoniminę naudojimo ataskaitą?",
"Allowed Networks": "Leidžiami tinklai",
@ -27,13 +28,14 @@
"An external command handles the versioning. It has to remove the file from the shared folder. If the path to the application contains spaces, it should be quoted.": "Išorinė komanda apdoroja versijų valdymą. Ji turi pašalinti failą iš bendrinamo aplanko. Jei kelyje į programą yra tarpų, jie turėtų būti imami į kabutes.",
"Anonymous Usage Reporting": "Anoniminė naudojimo ataskaita",
"Anonymous usage report format has changed. Would you like to move to the new format?": "Anoniminės naudojimo ataskaitos formatas pasikeitė. Ar norėtumėte pereiti prie naujojo formato?",
"Apply": "Apply",
"Are you sure you want to continue?": "Ar tikrai norite tęsti?",
"Are you sure you want to override all remote changes?": "Are you sure you want to override all remote changes?",
"Are you sure you want to override all remote changes?": "Ar tikrai norite nustelbti visus nuotolinius pakeitimus?",
"Are you sure you want to permanently delete all these files?": "Ar tikrai norite visam laikui ištrinti visus šiuos failus?",
"Are you sure you want to remove device {%name%}?": "Ar tikrai norite pašalinti įrenginį {{name}}?",
"Are you sure you want to remove folder {%label%}?": "Ar tikrai norite pašalinti aplanką {{label}}?",
"Are you sure you want to restore {%count%} files?": "Ar tikrai norite atkurti {{count}} failų(-us)?",
"Are you sure you want to revert all local changes?": "Are you sure you want to revert all local changes?",
"Are you sure you want to revert all local changes?": "Ar tikrai norite sugrąžinti visus vietinius pakeitimus?",
"Are you sure you want to upgrade?": "Ar tikrai norite naujinti?",
"Auto Accept": "Automatiškai priimti",
"Automatic Crash Reporting": "Automatinės ataskaitos apie strigtis",
@ -66,6 +68,7 @@
"Copyright © 2014-2019 the following Contributors:": "Autorių teisės © 2014-2019 šių bendraautorių:",
"Creating ignore patterns, overwriting an existing file at {%path%}.": "Kuriami nepaisomi šablonai, perrašomas esamas failas, esantis {{path}}.",
"Currently Shared With Devices": "Šiuo metu bendrinama su įrenginiais",
"Custom Range": "Custom Range",
"Danger!": "Pavojus!",
"Debugging Facilities": "Derinimo priemonės",
"Default Configuration": "Numatytoji konfigūracija",
@ -183,6 +186,9 @@
"Keep Versions": "Saugojamų versijų kiekis",
"LDAP": "LDAP",
"Largest First": "Didžiausi pirmiau",
"Last 30 Days": "Last 30 Days",
"Last 7 Days": "Last 7 Days",
"Last Month": "Last Month",
"Last Scan": "Paskutinis nuskaitymas",
"Last seen": "Paskutinį kartą matytas",
"Latest Change": "Paskutinis pakeitimas",
@ -378,13 +384,16 @@
"There are no folders to share with this device.": "There are no folders to share with this device.",
"They are retried automatically and will be synced when the error is resolved.": "Failus bus automatiškai bandoma parsiųsti dar kartą kai išspręsite klaidas.",
"This Device": "Šis įrenginys",
"This Month": "This Month",
"This can easily give hackers access to read and change any files on your computer.": "Tai gali suteikti programišiams lengvą prieigą skaityti ir keisti bet kokius failus jūsų kompiuteryje.",
"This device cannot automatically discover other devices or announce its own address to be found by others. Only devices with statically configured addresses can connect.": "This device cannot automatically discover other devices or announce its own address to be found by others. Only devices with statically configured addresses can connect.",
"This is a major version upgrade.": "Tai yra stambus atnaujinimas.",
"This setting controls the free space required on the home (i.e., index database) disk.": "Šis nustatymas valdo laisvą vietą, kuri yra reikalinga namų (duomenų bazės) diske.",
"Time": "Laikas",
"Time the item was last modified": "Laikas, kai elementas buvo paskutinį kartą modifikuotas",
"Today": "Šiandien",
"Trash Can File Versioning": "Šiukšliadėžės versijų valdymas",
"Twitter": "„Twitter“",
"Type": "Tipas",
"UNIX Permissions": "UNIX leidimai",
"Unavailable": "Neprieinama",
@ -428,6 +437,7 @@
"When adding a new device, keep in mind that this device must be added on the other side too.": "Pridėdami įrenginį, turėkite omeny, kad šis įrenginys taip pat turi būti pridėtas kitoje pusėje.",
"When adding a new folder, keep in mind that the Folder ID is used to tie folders together between devices. They are case sensitive and must match exactly between all devices.": "Kai įvedate naują aplanką neužmirškite, kad jis bus naudojamas visuose įrenginiuose. Svarbu visur įvesti visiškai tokį pat aplanko vardą neužmirštant apie didžiąsias ir mažąsias raides.",
"Yes": "Taip",
"Yesterday": "Vakar",
"You can also select one of these nearby devices:": "Jūs taip pat galite pasirinkti vieną iš šių šalia esančių įrenginių:",
"You can change your choice at any time in the Settings dialog.": "Jūs bet kuriuo metu galite pakeisti savo pasirinkimą nustatymų dialoge.",
"You can read more about the two release channels at the link below.": "Jūs galite perskaityti daugiau apie šiuos du laidos kanalus, pasinaudodami žemiau esančia nuoroda.",

View File

@ -19,6 +19,7 @@
"Advanced": "Avansert",
"Advanced Configuration": "Avanserte innstillinger",
"All Data": "Alle data",
"All Time": "All Time",
"All folders shared with this device must be protected by a password, such that all sent data is unreadable without the given password.": "All folders shared with this device must be protected by a password, such that all sent data is unreadable without the given password.",
"Allow Anonymous Usage Reporting?": "Tillat anonym innsamling av brukerdata?",
"Allowed Networks": "Tillatte nettverk",
@ -27,6 +28,7 @@
"An external command handles the versioning. It has to remove the file from the shared folder. If the path to the application contains spaces, it should be quoted.": "En ekstern kommando tar hånd om versjoneringen. Den må fjerne filen fra den delte mappen. Hvis stien til programmet inneholder mellomrom, må den siteres.",
"Anonymous Usage Reporting": "Anonym innsamling av brukerdata",
"Anonymous usage report format has changed. Would you like to move to the new format?": "Det anonyme bruksrapportformatet har endret seg. Ønsker du å gå over til det nye formatet?",
"Apply": "Apply",
"Are you sure you want to continue?": "Are you sure you want to continue?",
"Are you sure you want to override all remote changes?": "Are you sure you want to override all remote changes?",
"Are you sure you want to permanently delete all these files?": "Are you sure you want to permanently delete all these files?",
@ -66,6 +68,7 @@
"Copyright © 2014-2019 the following Contributors:": "Opphavrett © 2014-2019 for følgende bidragsytere:",
"Creating ignore patterns, overwriting an existing file at {%path%}.": "Oppretter ignoreringsmønster, overskriver eksisterende fil i {{path}}.",
"Currently Shared With Devices": "Currently Shared With Devices",
"Custom Range": "Custom Range",
"Danger!": "Fare!",
"Debugging Facilities": "Feilrettingsverktøy",
"Default Configuration": "Default Configuration",
@ -183,6 +186,9 @@
"Keep Versions": "Behold versjoner",
"LDAP": "LDAP",
"Largest First": "Største fil først",
"Last 30 Days": "Last 30 Days",
"Last 7 Days": "Last 7 Days",
"Last Month": "Last Month",
"Last Scan": "Siste gjennomsøking",
"Last seen": "Sist sett",
"Latest Change": "Sist endret",
@ -378,13 +384,16 @@
"There are no folders to share with this device.": "There are no folders to share with this device.",
"They are retried automatically and will be synced when the error is resolved.": "Disse hentes automatisk og vil synkroniseres når feilen er blitt utbedret.",
"This Device": "Denne enheten",
"This Month": "This Month",
"This can easily give hackers access to read and change any files on your computer.": "Dette kan lett gi hackere tilgang til å lese og endre alle filer på datamaskinen din.",
"This device cannot automatically discover other devices or announce its own address to be found by others. Only devices with statically configured addresses can connect.": "This device cannot automatically discover other devices or announce its own address to be found by others. Only devices with statically configured addresses can connect.",
"This is a major version upgrade.": "Dette er en storoppgradering",
"This setting controls the free space required on the home (i.e., index database) disk.": "Denne innstillingen kontrollerer ledig diskplass krevd på hjemme- (f.eks. indekseringsdatabase-) disken.",
"Time": "Klokkeslett",
"Time the item was last modified": "Tidspunktet elementet sist ble endret",
"Today": "Today",
"Trash Can File Versioning": "Papirkurv versjonskontroll",
"Twitter": "Twitter",
"Type": "Type",
"UNIX Permissions": "UNIX Permissions",
"Unavailable": "Utilgjengelig",
@ -428,6 +437,7 @@
"When adding a new device, keep in mind that this device must be added on the other side too.": "Når du legger til en ny enhet, husk at enheten må legges til på andre siden også.",
"When adding a new folder, keep in mind that the Folder ID is used to tie folders together between devices. They are case sensitive and must match exactly between all devices.": "Når en ny mappe blir lagt til, husk at Mappe-ID blir brukt til å binde sammen mapper mellom enheter. Det er forskjell på store og små bokstaver, så IDene må være identiske på alle enhetene.",
"Yes": "Ja",
"Yesterday": "Yesterday",
"You can also select one of these nearby devices:": "Du kan også velge en av disse enhetene i nærheten:",
"You can change your choice at any time in the Settings dialog.": "Du kan endre ditt valg når som helst i innstillingene.",
"You can read more about the two release channels at the link below.": "Du kan lese mer om de to nye utgivelseskanalene i lenken nedenfor.",

View File

@ -19,6 +19,7 @@
"Advanced": "Geavanceerd",
"Advanced Configuration": "Geavanceerde configuratie",
"All Data": "Alle gegevens",
"All Time": "Altijd",
"All folders shared with this device must be protected by a password, such that all sent data is unreadable without the given password.": "Alle mappen die gedeeld worden met dit apparaat moeten beschermd worden met een wachtwoord zodat alle verzonden gegevens onleesbaar zijn zonder het opgegeven wachtwoord.",
"Allow Anonymous Usage Reporting?": "Versturen van anonieme gebruikersstatistieken toestaan?",
"Allowed Networks": "Toegestane netwerken",
@ -27,6 +28,7 @@
"An external command handles the versioning. It has to remove the file from the shared folder. If the path to the application contains spaces, it should be quoted.": "Een externe opdracht regelt het versiebeheer. Hij moet het bestand verwijderen uit de gedeelde map. Als het pad naar de toepassing spaties bevat, moet dit tussen aanhalingstekens geplaatst worden.",
"Anonymous Usage Reporting": "Anonieme gebruikersstatistieken",
"Anonymous usage report format has changed. Would you like to move to the new format?": "Het formaat voor anonieme gebruikersrapporten is gewijzigd. Wilt u naar het nieuwe formaat overschakelen?",
"Apply": "Toepassen",
"Are you sure you want to continue?": "Weet u zeker dat u wilt doorgaan?",
"Are you sure you want to override all remote changes?": "Weet u zeker dat u alle externe wijzigingen wilt overschrijven?",
"Are you sure you want to permanently delete all these files?": "Weet u zeker dat u al deze bestanden permanent wilt verwijderen?",
@ -66,6 +68,7 @@
"Copyright © 2014-2019 the following Contributors:": "Auteursrecht © 2014-2019 voor de volgende bijdragers:",
"Creating ignore patterns, overwriting an existing file at {%path%}.": "Negeerpatronen worden aangemaakt, bestaand bestand wordt overschreven op {{path}}.",
"Currently Shared With Devices": "Momenteel gedeeld met apparaten",
"Custom Range": "Aangepast bereik",
"Danger!": "Let op!",
"Debugging Facilities": "Debugmogelijkheden",
"Default Configuration": "Standaardconfiguratie",
@ -128,7 +131,7 @@
"Error": "Fout",
"External File Versioning": "Extern versiebeheer",
"Failed Items": "Mislukte items",
"Failed to load file versions.": "Failed to load file versions.",
"Failed to load file versions.": "Laden van bestandsversies mislukt.",
"Failed to load ignore patterns.": "Laden van negeerpatronen mislukt.",
"Failed to setup, retrying": "Instellen mislukt, opnieuw proberen",
"Failure to connect to IPv6 servers is expected if there is no IPv6 connectivity.": "Als er geen IPv6-connectiviteit is worden problemen bij verbinden met IPv6-servers verwacht.",
@ -183,6 +186,9 @@
"Keep Versions": "Versies behouden",
"LDAP": "LDAP",
"Largest First": "Grootste eerst",
"Last 30 Days": "Laatste 30 dagen",
"Last 7 Days": "Laatste 7 dagen",
"Last Month": "Laatste maand",
"Last Scan": "Laatste scan",
"Last seen": "Laatst gezien op",
"Latest Change": "Laatste wijziging",
@ -374,17 +380,20 @@
"The rate limit must be a non-negative number (0: no limit)": "De snelheidsbegrenzing moet een positief getal zijn (0: geen begrenzing)",
"The rescan interval must be a non-negative number of seconds.": "Het interval voor opnieuw scannen moet een positief aantal seconden zijn.",
"There are no devices to share this folder with.": "Er zijn geen apparaten om deze map mee te delen.",
"There are no file versions to restore.": "There are no file versions to restore.",
"There are no file versions to restore.": "Er zijn geen bestandsversies om te herstellen.",
"There are no folders to share with this device.": "Er zijn geen mappen om te delen met dit apparaat.",
"They are retried automatically and will be synced when the error is resolved.": "Ze worden automatisch opnieuw geprobeerd en zullen gesynchroniseerd worden wanneer de fout opgelost is.",
"This Device": "Dit apparaat",
"This Month": "Deze maand",
"This can easily give hackers access to read and change any files on your computer.": "Dit kan hackers eenvoudig toegang geven om bestanden op uw computer te lezen en te wijzigen.",
"This device cannot automatically discover other devices or announce its own address to be found by others. Only devices with statically configured addresses can connect.": "Dit apparaat kan andere apparaten niet automatisch detecteren of zijn eigen adres aankondigen om door anderen gevonden te worden. Alleen apparaten met statisch geconfigureerde adressen kunnen verbinding maken.",
"This is a major version upgrade.": "Dit is een grote versie-upgrade.",
"This setting controls the free space required on the home (i.e., index database) disk.": "Deze instelling bepaalt de benodigde vrije ruimte op de home-schijf (d.w.z. de indexdatabase).",
"Time": "Tijd",
"Time the item was last modified": "Tijdstip waarop het item laatst gewijzigd is",
"Today": "Vandaag",
"Trash Can File Versioning": "Prullenbak-versiebeheer",
"Twitter": "Twitter",
"Type": "Type",
"UNIX Permissions": "UNIX-machtigingen",
"Unavailable": "Niet beschikbaar",
@ -428,6 +437,7 @@
"When adding a new device, keep in mind that this device must be added on the other side too.": "Houd er bij het toevoegen van een nieuw apparaat rekening mee dat dit apparaat ook aan de andere kant moet toegevoegd worden.",
"When adding a new folder, keep in mind that the Folder ID is used to tie folders together between devices. They are case sensitive and must match exactly between all devices.": "Houd er bij het toevoegen van een nieuwe map rekening mee dat de map-ID gebruikt wordt om mappen aan elkaar te koppelen tussen apparaten. Ze zijn hoofdlettergevoelig en moeten exact overeenkomen op alle apparaten.",
"Yes": "Ja",
"Yesterday": "Gisteren",
"You can also select one of these nearby devices:": "U kunt ook een van deze apparaten in de buurt selecteren:",
"You can change your choice at any time in the Settings dialog.": "U kunt uw keuze op elk moment aanpassen in het instellingen-venster.",
"You can read more about the two release channels at the link below.": "U kunt meer te weten komen over de twee release-kanalen via onderstaande link.",

View File

@ -19,6 +19,7 @@
"Advanced": "Zaawansowane",
"Advanced Configuration": "Zaawansowane ustawienia",
"All Data": "Wszystkie dane",
"All Time": "Cały okres",
"All folders shared with this device must be protected by a password, such that all sent data is unreadable without the given password.": "Wszystkie foldery współdzielone z tym urządzeniem muszą być zabezpieczone hasłem, tak aby całość przesyłanych danych była nie do odczytu bez podania danego hasła.",
"Allow Anonymous Usage Reporting?": "Czy chcesz zezwolić na anonimowe statystyki użycia?",
"Allowed Networks": "Dozwolone sieci",
@ -27,6 +28,7 @@
"An external command handles the versioning. It has to remove the file from the shared folder. If the path to the application contains spaces, it should be quoted.": "Zewnętrzne polecenie odpowiedzialne jest za wersjonowanie. Musi ono usunąć plik ze współdzielonego folderu. Jeżeli ścieżka do aplikacji zawiera spacje, to powinna ona być zamknięta w cudzysłowie.",
"Anonymous Usage Reporting": "Anonimowe statystyki użycia",
"Anonymous usage report format has changed. Would you like to move to the new format?": "Format anonimowych statystyk użycia uległ zmianie. Czy chcesz przejść na nowy format?",
"Apply": "Zastosuj",
"Are you sure you want to continue?": "Czy na pewno chcesz kontynuować?",
"Are you sure you want to override all remote changes?": "Czy na pewno chcesz nadpisać wszystkie zmiany zdalne?",
"Are you sure you want to permanently delete all these files?": "Czy na pewno chcesz nieodwracalnie usunąć wszystkie te pliki?",
@ -66,6 +68,7 @@
"Copyright © 2014-2019 the following Contributors:": "Wszelkie prawa zastrzeżone © 2014-2019 dla następujących współtwórców:",
"Creating ignore patterns, overwriting an existing file at {%path%}.": "Tworzenie wzorców ignorowania; nadpisuje istniejący plik w ścieżce {{path}}.",
"Currently Shared With Devices": "Obecnie współdzielony z urządzeniami",
"Custom Range": "Niestandardowy okres",
"Danger!": "Niebezpieczeństwo!",
"Debugging Facilities": "Narzędzia do debugowania",
"Default Configuration": "Domyślne ustawienia",
@ -183,6 +186,9 @@
"Keep Versions": "Zachowuj wersje",
"LDAP": "LDAP",
"Largest First": "Od największych",
"Last 30 Days": "Ostatnie 30 dni",
"Last 7 Days": "Ostatnie 7 dni",
"Last Month": "Ubiegły miesiąc",
"Last Scan": "Ostatnie skanowanie",
"Last seen": "Ostatnio widziany",
"Latest Change": "Ostatnia zmiana",
@ -378,13 +384,16 @@
"There are no folders to share with this device.": "Brak folderów, które można współdzielić z tym urządzeniem.",
"They are retried automatically and will be synced when the error is resolved.": "Ponowne próby zachodzą automatycznie, a synchronizacja nastąpi po usunięciu błędu.",
"This Device": "To urządzenie",
"This Month": "Ten miesiąc",
"This can easily give hackers access to read and change any files on your computer.": "Może to umożliwić hakerom dostęp do odczytu i zmian dowolnych plików na tym komputerze.",
"This device cannot automatically discover other devices or announce its own address to be found by others. Only devices with statically configured addresses can connect.": "To urządzenie nie jest w stanie automatycznie odnajdować innych urządzeń oraz ogłaszać swojego adresu, aby mogło ono zostać znalezione przez nie. Tylko urządzenia z adresem ustawionym statycznie są w stanie się połączyć.",
"This is a major version upgrade.": "To jest duża aktualizacja.",
"This setting controls the free space required on the home (i.e., index database) disk.": "To ustawienie kontroluje ilość wolnej przestrzeni na dysku domowym (np. do indeksowania bazy danych).",
"Time": "Czas",
"Time the item was last modified": "Czas ostatniej modyfikacji elementu",
"Today": "Dzisiaj",
"Trash Can File Versioning": "Wersjonowanie plików w koszu",
"Twitter": "Twitter",
"Type": "Rodzaj",
"UNIX Permissions": "UNIX-owe uprawnienia",
"Unavailable": "Niedostępne",
@ -428,6 +437,7 @@
"When adding a new device, keep in mind that this device must be added on the other side too.": "Dodając nowe urządzenie pamiętaj, że musi ono zostać dodane także po drugiej stronie.",
"When adding a new folder, keep in mind that the Folder ID is used to tie folders together between devices. They are case sensitive and must match exactly between all devices.": "Dodając nowy folder pamiętaj, że numer ID jest używany do parowania folderów pomiędzy urządzeniami. Wielkość liter ma znaczenie i musi on być identyczny na wszystkich urządzeniach.",
"Yes": "Tak",
"Yesterday": "Wczoraj",
"You can also select one of these nearby devices:": "Możesz również wybrać jedno z pobliskich urządzeń:",
"You can change your choice at any time in the Settings dialog.": "Możesz zmienić swój wybór w dowolnej chwili w oknie Ustawień.",
"You can read more about the two release channels at the link below.": "Możesz przeczytać więcej na temat obu kanałów wydawniczych pod poniższym odnośnikiem.",

View File

@ -19,6 +19,7 @@
"Advanced": "Avançado",
"Advanced Configuration": "Configuração avançada",
"All Data": "Todos os dados",
"All Time": "Todo o tempo",
"All folders shared with this device must be protected by a password, such that all sent data is unreadable without the given password.": "Todas as pastas compartilhadas com este dispositivo devem ser protegidas por uma senha, de forma que todos os dados enviados sejam ilegíveis sem a senha fornecida.",
"Allow Anonymous Usage Reporting?": "Permitir envio de relatórios anônimos de uso?",
"Allowed Networks": "Redes permitidas",
@ -27,6 +28,7 @@
"An external command handles the versioning. It has to remove the file from the shared folder. If the path to the application contains spaces, it should be quoted.": "Um comando externo controla o controle de versão. Tem que remover o arquivo da pasta compartilhada. Se o caminho para o aplicativo contiver espaços, ele deve ser colocado entre aspas.",
"Anonymous Usage Reporting": "Relatórios anônimos de uso",
"Anonymous usage report format has changed. Would you like to move to the new format?": "O formato do relatório anônimo de uso mudou. Gostaria de usar o formato novo?",
"Apply": "Aplicar",
"Are you sure you want to continue?": "Deseja realmente continuar?",
"Are you sure you want to override all remote changes?": "Tem a certeza que quer sobrepor todas as alterações remotas?",
"Are you sure you want to permanently delete all these files?": "Deseja realmente excluir todos estes arquivos permanentemente?",
@ -66,6 +68,7 @@
"Copyright © 2014-2019 the following Contributors:": "Copyright © 2014-2019 dos Contribuintes:",
"Creating ignore patterns, overwriting an existing file at {%path%}.": "Criando filtros, sobrescrevendo o arquivo {{path}}.",
"Currently Shared With Devices": "Compartilhado com outros dispositivos",
"Custom Range": "Intervalo de tempo",
"Danger!": "Perigo!",
"Debugging Facilities": "Facilidades de depuração",
"Default Configuration": "Configuração Padrão",
@ -183,6 +186,9 @@
"Keep Versions": "Manter versões",
"LDAP": "LDAP",
"Largest First": "Maior primeiro",
"Last 30 Days": "Últimos 30 dias",
"Last 7 Days": "Últimos 7 dias",
"Last Month": "Último mês",
"Last Scan": "Última verificação",
"Last seen": "Visto por último em",
"Latest Change": "Última mudança",
@ -378,13 +384,16 @@
"There are no folders to share with this device.": "Não há pastas para compartilhar com este dispositivo.",
"They are retried automatically and will be synced when the error is resolved.": "Serão tentadas automaticamente e sincronizadas após o erro ter sido resolvido.",
"This Device": "Este dispositivo",
"This Month": "Este mês",
"This can easily give hackers access to read and change any files on your computer.": "Isto pode dar a hackers poder de leitura e escrita de qualquer arquivo em seu dispositivo.",
"This device cannot automatically discover other devices or announce its own address to be found by others. Only devices with statically configured addresses can connect.": "Este dispositivo não pode descobrir automaticamente outros dispositivos ou anunciar seu próprio endereço para ser encontrado por outros. Apenas dispositivos com endereços configurados estaticamente podem se conectar.",
"This is a major version upgrade.": "Esta é uma atualização para uma versão \"major\".",
"This setting controls the free space required on the home (i.e., index database) disk.": "Este ajuste controla o espaço livre necessário no disco que contém o banco de dados do Syncthing.",
"Time": "Hora",
"Time the item was last modified": "Momento em que o item foi modificado pela última vez",
"Today": "Hoje",
"Trash Can File Versioning": "Lixeira",
"Twitter": "Twitter",
"Type": "Tipo",
"UNIX Permissions": "Permissões UNIX",
"Unavailable": "Não disponível",
@ -428,6 +437,7 @@
"When adding a new device, keep in mind that this device must be added on the other side too.": "Quando estiver adicionando um dispositivo, lembre-se de que este dispositivo deve ser adicionado do outro lado também.",
"When adding a new folder, keep in mind that the Folder ID is used to tie folders together between devices. They are case sensitive and must match exactly between all devices.": "Quando adicionar uma nova pasta, lembre-se que o ID da pasta é utilizado para ligar pastas entre dispositivos. Ele é sensível às diferenças entre maiúsculas e minúsculas e deve ser o mesmo em todos os dispositivos.",
"Yes": "Sim",
"Yesterday": "Ontem",
"You can also select one of these nearby devices:": "Vocẽ também pode selecionar um destes dispositivos próximos:",
"You can change your choice at any time in the Settings dialog.": "Você pode mudar de ideia a qualquer momento na tela de configurações.",
"You can read more about the two release channels at the link below.": "Você pode se informar melhor sobre os dois canais de lançamento no link abaixo.",

View File

@ -19,6 +19,7 @@
"Advanced": "Avançadas",
"Advanced Configuration": "Configuração avançada",
"All Data": "Todos os dados",
"All Time": "O tempo todo",
"All folders shared with this device must be protected by a password, such that all sent data is unreadable without the given password.": "Todas as pastas partilhadas com este dispositivo têm de ser protegidas com uma senha, por forma a que todos os dados enviados sejam ilegíveis sem a senha dada.",
"Allow Anonymous Usage Reporting?": "Permitir envio de relatórios anónimos de utilização?",
"Allowed Networks": "Redes permitidas",
@ -27,6 +28,7 @@
"An external command handles the versioning. It has to remove the file from the shared folder. If the path to the application contains spaces, it should be quoted.": "Um comando externo controla as versões. Esse comando tem que remover o ficheiro da pasta partilhada. Se o caminho para a aplicação contiver espaços, então terá de o escrever entre aspas.",
"Anonymous Usage Reporting": "Enviar relatórios anónimos de utilização",
"Anonymous usage report format has changed. Would you like to move to the new format?": "O formato do relatório anónimo de utilização foi alterado. Gostaria de mudar para o novo formato?",
"Apply": "Aplicar",
"Are you sure you want to continue?": "Tem a certeza de que quer continuar?",
"Are you sure you want to override all remote changes?": "Tem a certeza que quer sobrepor todas as alterações remotas?",
"Are you sure you want to permanently delete all these files?": "Tem a certeza de que quer eliminar permanentemente todos estes ficheiros?",
@ -66,6 +68,7 @@
"Copyright © 2014-2019 the following Contributors:": "Copyright © 2014-2019 dos seguintes contribuidores:",
"Creating ignore patterns, overwriting an existing file at {%path%}.": "Criando padrões de exclusão, sobrescrevendo um ficheiro existente em {{path}}.",
"Currently Shared With Devices": "Dispositivos com os quais está partilhada",
"Custom Range": "Intervalo personalizado",
"Danger!": "Perigo!",
"Debugging Facilities": "Recursos de depuração",
"Default Configuration": "Configuração predefinida",
@ -183,6 +186,9 @@
"Keep Versions": "Manter versões",
"LDAP": "LDAP",
"Largest First": "Primeiro os maiores",
"Last 30 Days": "Últimos 30 dias",
"Last 7 Days": "Últimos 7 dias",
"Last Month": "Último mês",
"Last Scan": "Última verificação",
"Last seen": "Última vez que foi verificado",
"Latest Change": "Última alteração",
@ -378,13 +384,16 @@
"There are no folders to share with this device.": "Não existem pastas para partilhar com este dispositivo.",
"They are retried automatically and will be synced when the error is resolved.": "Será tentado automaticamente e os itens serão sincronizados assim que o erro seja resolvido.",
"This Device": "Este dispositivo",
"This Month": "Este mês",
"This can easily give hackers access to read and change any files on your computer.": "Isso facilmente dará acesso aos piratas informáticos para lerem e modificarem quaisquer ficheiros no seu computador.",
"This device cannot automatically discover other devices or announce its own address to be found by others. Only devices with statically configured addresses can connect.": "Este dispositivo não pode descobrir automaticamente outros dispositivos ou anunciar o seu próprio endereço para que seja encontrado pelos outros. Apenas dispositivos com endereços configurados estaticamente podem estabelecer ligação.",
"This is a major version upgrade.": "Esta é uma actualização para uma versão importante.",
"This setting controls the free space required on the home (i.e., index database) disk.": "Este parâmetro controla o espaço livre necessário no disco base (ou seja, o disco da base de dados do índice).",
"Time": "Quando",
"Time the item was last modified": "Quando o item foi modificado pela última vez",
"Today": "Hoje",
"Trash Can File Versioning": "Reciclagem",
"Twitter": "Twitter",
"Type": "Tipo",
"UNIX Permissions": "Permissões UNIX",
"Unavailable": "Indisponível",
@ -428,6 +437,7 @@
"When adding a new device, keep in mind that this device must be added on the other side too.": "Quando adicionar um novo dispositivo, lembre-se que este dispositivo tem que ser adicionado do outro lado também.",
"When adding a new folder, keep in mind that the Folder ID is used to tie folders together between devices. They are case sensitive and must match exactly between all devices.": "Quando adicionar uma nova pasta, lembre-se que o ID da pasta é utilizado para ligar as pastas entre dispositivos. É sensível às diferenças entre maiúsculas e minúsculas e tem que ter uma correspondência perfeita entre todos os dispositivos.",
"Yes": "Sim",
"Yesterday": "Ontem",
"You can also select one of these nearby devices:": "Também pode seleccionar um destes dispositivos que estão próximos:",
"You can change your choice at any time in the Settings dialog.": "Pode modificar a sua escolha em qualquer altura nas configurações.",
"You can read more about the two release channels at the link below.": "Pode ler mais sobre os dois canais de lançamento na ligação abaixo.",

View File

@ -19,6 +19,7 @@
"Advanced": "Avansat",
"Advanced Configuration": "Configurari avansate",
"All Data": "Toate Datele",
"All Time": "All Time",
"All folders shared with this device must be protected by a password, such that all sent data is unreadable without the given password.": "Toate folderele partajate cu acest dispozitiv trebuie protejate printr-o parolă, astfel încât toate datele trimise să nu poată fi citite fără parola dată.",
"Allow Anonymous Usage Reporting?": "Permiteţi raportarea anonimă de folosire a aplicaţiei?",
"Allowed Networks": "Rețele permise",
@ -27,6 +28,7 @@
"An external command handles the versioning. It has to remove the file from the shared folder. If the path to the application contains spaces, it should be quoted.": "O comandă externă gestionează versiunea. Trebuie să elimine fișierul din folderul partajat. Dacă calea către aplicație conține spații, ar trebui să fie pusă între ghilimele.",
"Anonymous Usage Reporting": "Raport Anonim despre Folosirea Aplicației",
"Anonymous usage report format has changed. Would you like to move to the new format?": "Formatul raportului de utilizare anonim s-a schimbat. Doriți să vă mutați în noul format?",
"Apply": "Apply",
"Are you sure you want to continue?": "Ești sigur ca vrei sa continui?",
"Are you sure you want to override all remote changes?": "Are you sure you want to override all remote changes?",
"Are you sure you want to permanently delete all these files?": "Sigur doriți să ștergeți definitiv toate aceste fișiere?",
@ -66,6 +68,7 @@
"Copyright © 2014-2019 the following Contributors:": "Copyright © 2014-2019 the following Contributors:",
"Creating ignore patterns, overwriting an existing file at {%path%}.": "Creating ignore patterns, overwriting an existing file at {{path}}.",
"Currently Shared With Devices": "Currently Shared With Devices",
"Custom Range": "Custom Range",
"Danger!": "Danger!",
"Debugging Facilities": "Debugging Facilities",
"Default Configuration": "Default Configuration",
@ -183,6 +186,9 @@
"Keep Versions": "Păstrează Versiuni",
"LDAP": "LDAP",
"Largest First": "Largest First",
"Last 30 Days": "Last 30 Days",
"Last 7 Days": "Last 7 Days",
"Last Month": "Last Month",
"Last Scan": "Last Scan",
"Last seen": "Ultima vizionare",
"Latest Change": "Latest Change",
@ -378,13 +384,16 @@
"There are no folders to share with this device.": "There are no folders to share with this device.",
"They are retried automatically and will be synced when the error is resolved.": "They are retried automatically and will be synced when the error is resolved.",
"This Device": "This Device",
"This Month": "This Month",
"This can easily give hackers access to read and change any files on your computer.": "This can easily give hackers access to read and change any files on your computer.",
"This device cannot automatically discover other devices or announce its own address to be found by others. Only devices with statically configured addresses can connect.": "This device cannot automatically discover other devices or announce its own address to be found by others. Only devices with statically configured addresses can connect.",
"This is a major version upgrade.": "This is a major version upgrade.",
"This setting controls the free space required on the home (i.e., index database) disk.": "This setting controls the free space required on the home (i.e., index database) disk.",
"Time": "Time",
"Time the item was last modified": "Time the item was last modified",
"Today": "Today",
"Trash Can File Versioning": "Trash Can File Versioning",
"Twitter": "Twitter",
"Type": "Type",
"UNIX Permissions": "UNIX Permissions",
"Unavailable": "Unavailable",
@ -428,6 +437,7 @@
"When adding a new device, keep in mind that this device must be added on the other side too.": "Când adaugi un dispozitiv nou, trebuie să adaugi şi dispozitivul curent în dispozitivul nou.",
"When adding a new folder, keep in mind that the Folder ID is used to tie folders together between devices. They are case sensitive and must match exactly between all devices.": "Cînd adăugaţi un fişier nou, nu uitaţi că ID-ul fişierului va rămîne acelaşi pe toate dispozitivele. Iar literele mari sînt diferite de literele mici. ",
"Yes": "Da",
"Yesterday": "Yesterday",
"You can also select one of these nearby devices:": "You can also select one of these nearby devices:",
"You can change your choice at any time in the Settings dialog.": "You can change your choice at any time in the Settings dialog.",
"You can read more about the two release channels at the link below.": "You can read more about the two release channels at the link below.",

View File

@ -11,7 +11,7 @@
"Add Folder": "Добавить папку",
"Add Remote Device": "Добавить удалённое устройство",
"Add devices from the introducer to our device list, for mutually shared folders.": "Добавлять устройства, известные рекомендателю, в список устройств, если есть общие с ними папки.",
"Add ignore patterns": "Add ignore patterns",
"Add ignore patterns": "Добавить шаблоны для игнорирования",
"Add new folder?": "Добавить новую папку?",
"Additionally the full rescan interval will be increased (times 60, i.e. new default of 1h). You can also configure it manually for every folder later after choosing No.": "Также будет увеличен интервал полного сканирования (в 60 раз, т.е. новое значение - 1 час). Вы можете вручную настроить интервал для каждой папки, выбрав \"Нет\".",
"Address": "Адрес",
@ -19,6 +19,7 @@
"Advanced": "Дополнительно",
"Advanced Configuration": "Дополнительные настройки",
"All Data": "Все данные",
"All Time": "All Time",
"All folders shared with this device must be protected by a password, such that all sent data is unreadable without the given password.": "Все папки, совместно используемые с этим устройством, должны быть защищены паролем, чтобы все отправленные данные были нечитаемы.",
"Allow Anonymous Usage Reporting?": "Разрешить анонимный отчет об использовании?",
"Allowed Networks": "Разрешённые сети",
@ -27,6 +28,7 @@
"An external command handles the versioning. It has to remove the file from the shared folder. If the path to the application contains spaces, it should be quoted.": "Для версионирования используется внешняя программа. Ей нужно удалить файл из общей папки. Если путь к приложению содержит пробелы, его нужно взять в кавычки.",
"Anonymous Usage Reporting": "Анонимный отчет об использовании",
"Anonymous usage report format has changed. Would you like to move to the new format?": "Формат анонимных отчётов изменился. Хотите переключиться на новый формат?",
"Apply": "Apply",
"Are you sure you want to continue?": "Уверены, что хотите продолжить?",
"Are you sure you want to override all remote changes?": "Уверены, что хотите перезаписать все удалённые изменения?",
"Are you sure you want to permanently delete all these files?": "Уверены, что хотите навсегда удалить эти файлы?",
@ -66,6 +68,7 @@
"Copyright © 2014-2019 the following Contributors:": "Авторские права © 2014-2019 принадлежат:",
"Creating ignore patterns, overwriting an existing file at {%path%}.": "Создание шаблонов игнорирования, существующий файл {{path}} будет перезаписан.",
"Currently Shared With Devices": "В настоящее время используется совместно с устройствами",
"Custom Range": "Custom Range",
"Danger!": "Опасно!",
"Debugging Facilities": "Средства отладки",
"Default Configuration": "Настройки по умолчанию",
@ -128,7 +131,7 @@
"Error": "Ошибка",
"External File Versioning": "Внешний контроль версий файлов",
"Failed Items": "Сбои",
"Failed to load file versions.": "Failed to load file versions.",
"Failed to load file versions.": "Не удалось загрузить другие версии файла",
"Failed to load ignore patterns.": "Не удалось загрузить шаблоны игнорирования.",
"Failed to setup, retrying": "Не удалось настроить, пробуем ещё",
"Failure to connect to IPv6 servers is expected if there is no IPv6 connectivity.": "Если нет IPv6-соединений, при подключении к IPv6-серверам произойдёт ошибка.",
@ -171,7 +174,7 @@
"Ignore": "Игнорировать",
"Ignore Patterns": "Шаблоны игнорирования",
"Ignore Permissions": "Игнорировать файловые права доступа",
"Ignore patterns can only be added after the folder is created. If checked, an input field to enter ignore patterns will be presented after saving.": "Ignore patterns can only be added after the folder is created. If checked, an input field to enter ignore patterns will be presented after saving.",
"Ignore patterns can only be added after the folder is created. If checked, an input field to enter ignore patterns will be presented after saving.": "Шаблоны игнорирования могут быть добавлены только после создания папки. При включении поле для ввода шаблонов игнорирования появится после сохранения. ",
"Ignored Devices": "Игнорируемые устройства",
"Ignored Folders": "Игнорируемые папки",
"Ignored at": "Добавлено",
@ -183,6 +186,9 @@
"Keep Versions": "Количество хранимых версий",
"LDAP": "LDAP",
"Largest First": "Сначала большие",
"Last 30 Days": "Last 30 Days",
"Last 7 Days": "Last 7 Days",
"Last Month": "Last Month",
"Last Scan": "Последнее сканирование",
"Last seen": "Был доступен",
"Latest Change": "Последнее изменение",
@ -374,17 +380,20 @@
"The rate limit must be a non-negative number (0: no limit)": "Скорость должна быть неотрицательным числом (0: нет ограничения)",
"The rescan interval must be a non-negative number of seconds.": "Интервал пересканирования должен быть неотрицательным количеством секунд.",
"There are no devices to share this folder with.": "Нет устройств, для которых будет доступна эта папка.",
"There are no file versions to restore.": "There are no file versions to restore.",
"There are no file versions to restore.": "Нет версий файла для восстановления.",
"There are no folders to share with this device.": "Нет папок, которыми можно поделиться с этим устройством.",
"They are retried automatically and will be synced when the error is resolved.": "Будут синхронизированы автоматически когда ошибка будет исправлена.",
"This Device": "Это устройство",
"This Month": "This Month",
"This can easily give hackers access to read and change any files on your computer.": "Это может дать доступ хакерам для чтения и изменения любых файлов на вашем компьютере.",
"This device cannot automatically discover other devices or announce its own address to be found by others. Only devices with statically configured addresses can connect.": "Это устройство не может автоматически обнаруживать другие устройства или анонсировать свой адрес для обнаружения извне. Только устройства со статически заданными адресами могут подключиться.",
"This is a major version upgrade.": "Это обновление основной версии продукта.",
"This setting controls the free space required on the home (i.e., index database) disk.": "Эта настройка управляет свободным местом, необходимым на домашнем диске (например, для базы индексов).",
"Time": "Время",
"Time the item was last modified": "Время последней модификации объекта",
"Today": "Today",
"Trash Can File Versioning": "Использовать версионность для файлов в Корзине",
"Twitter": "Twitter",
"Type": "Тип",
"UNIX Permissions": "Разрешения UNIX",
"Unavailable": "Недоступно",
@ -428,6 +437,7 @@
"When adding a new device, keep in mind that this device must be added on the other side too.": "Когда добавляете устройство, помните о том, что это же устройство должно быть добавлено и другой стороной.",
"When adding a new folder, keep in mind that the Folder ID is used to tie folders together between devices. They are case sensitive and must match exactly between all devices.": "Когда добавляете новую папку, помните, что ID папок используются для того, чтобы связывать папки между всеми устройствами. Они чувствительны к регистру и должны совпадать на всех используемых устройствах.",
"Yes": "Да",
"Yesterday": "Yesterday",
"You can also select one of these nearby devices:": "Вы можете выбрать из этих устройств рядом:",
"You can change your choice at any time in the Settings dialog.": "Выбор можно изменить в любой момент в диалоге настроек.",
"You can read more about the two release channels at the link below.": "О двух каналах выпусков можно почитать подробнее по нижеприведённой ссылке.",

View File

@ -19,6 +19,7 @@
"Advanced": "Pokročilé",
"Advanced Configuration": "Pokročilá konfigurácia",
"All Data": "Všetky dáta",
"All Time": "All Time",
"All folders shared with this device must be protected by a password, such that all sent data is unreadable without the given password.": "All folders shared with this device must be protected by a password, such that all sent data is unreadable without the given password.",
"Allow Anonymous Usage Reporting?": "Povoliť anoynmné hlásenia o použivaní?",
"Allowed Networks": "Povolené siete",
@ -27,6 +28,7 @@
"An external command handles the versioning. It has to remove the file from the shared folder. If the path to the application contains spaces, it should be quoted.": "An external command handles the versioning. It has to remove the file from the shared folder. If the path to the application contains spaces, it should be quoted.",
"Anonymous Usage Reporting": "Anonymné hlásenie o používaní",
"Anonymous usage report format has changed. Would you like to move to the new format?": "Formát anonymného hlásenia o používaní sa zmenil. Chcete prejsť na nový formát?",
"Apply": "Apply",
"Are you sure you want to continue?": "Are you sure you want to continue?",
"Are you sure you want to override all remote changes?": "Are you sure you want to override all remote changes?",
"Are you sure you want to permanently delete all these files?": "Určite chcete vymazať všetky tieto súbory?",
@ -66,6 +68,7 @@
"Copyright © 2014-2019 the following Contributors:": "Copyright © 2014-2019 nasledujúci prispievatelia:",
"Creating ignore patterns, overwriting an existing file at {%path%}.": "Vytváranie vzorov ignorovania, prepísanie existujúceho súboru v {{path}}.",
"Currently Shared With Devices": "Currently Shared With Devices",
"Custom Range": "Custom Range",
"Danger!": "Pozor!",
"Debugging Facilities": "Debugging Facilities",
"Default Configuration": "Default Configuration",
@ -183,6 +186,9 @@
"Keep Versions": "Ponechanie verzií",
"LDAP": "LDAP",
"Largest First": "Najprv najväčšie",
"Last 30 Days": "Last 30 Days",
"Last 7 Days": "Last 7 Days",
"Last Month": "Last Month",
"Last Scan": "Posledný sken",
"Last seen": "Naposledy videný",
"Latest Change": "Posledná zmena",
@ -378,13 +384,16 @@
"There are no folders to share with this device.": "There are no folders to share with this device.",
"They are retried automatically and will be synced when the error is resolved.": "They are retried automatically and will be synced when the error is resolved.",
"This Device": "Toto zariadenie",
"This Month": "This Month",
"This can easily give hackers access to read and change any files on your computer.": "This can easily give hackers access to read and change any files on your computer.",
"This device cannot automatically discover other devices or announce its own address to be found by others. Only devices with statically configured addresses can connect.": "This device cannot automatically discover other devices or announce its own address to be found by others. Only devices with statically configured addresses can connect.",
"This is a major version upgrade.": "Toto je hlavná aktualizácia.",
"This setting controls the free space required on the home (i.e., index database) disk.": "Toto nastavenie kontroluje voľné miesto požadované na domovskom disku (napr. indexová databáza).",
"Time": "Čas",
"Time the item was last modified": "Čas poslednej zmeny položky",
"Today": "Today",
"Trash Can File Versioning": "Verzie súborov v koši",
"Twitter": "Twitter",
"Type": "Typ",
"UNIX Permissions": "UNIX Permissions",
"Unavailable": "Nedostupné",
@ -428,6 +437,7 @@
"When adding a new device, keep in mind that this device must be added on the other side too.": "When adding a new device, keep in mind that this device must be added on the other side too.",
"When adding a new folder, keep in mind that the Folder ID is used to tie folders together between devices. They are case sensitive and must match exactly between all devices.": "When adding a new folder, keep in mind that the Folder ID is used to tie folders together between devices. They are case sensitive and must match exactly between all devices.",
"Yes": "Áno",
"Yesterday": "Yesterday",
"You can also select one of these nearby devices:": "Môžete tiež vybrať jedno z týchto blízkych zariadení:",
"You can change your choice at any time in the Settings dialog.": "Voľbu môžete kedykoľvek zmeniť v dialógu Nastavenia.",
"You can read more about the two release channels at the link below.": "O dvoch vydávacích kanáloch si môžete viacej prečítať v odkaze nižšie.",

View File

@ -11,7 +11,7 @@
"Add Folder": "Dodaj mapo",
"Add Remote Device": "Dodaj oddaljeno napravo",
"Add devices from the introducer to our device list, for mutually shared folders.": "Dodajte naprave od uvajalca na naš seznam naprav, za vzajemno deljenje map.",
"Add ignore patterns": "Add ignore patterns",
"Add ignore patterns": "Dodaj vzorce za ignoriranje",
"Add new folder?": "Dodaj novo mapo",
"Additionally the full rescan interval will be increased (times 60, i.e. new default of 1h). You can also configure it manually for every folder later after choosing No.": "Poleg tega bo celoten interval ponovnega skeniranja se povečal (60 krat, torej nova privzeta vrednost 1 ure). Ti lahko tudi nastaviš si to ročno za vsako mapo pozneje, če ste prej izbrali Ne.",
"Address": "Naslov",
@ -19,6 +19,7 @@
"Advanced": "Napredno",
"Advanced Configuration": "Napredna konfiguracija",
"All Data": "Vsi podatki",
"All Time": "Celi čas",
"All folders shared with this device must be protected by a password, such that all sent data is unreadable without the given password.": "Vse deljene mape z to napravo morajo biti zaščitena z geslom, tako, da so vsi poslani podatki neberljivi, brez podanega gesla. ",
"Allow Anonymous Usage Reporting?": "Ali naj se dovoli brezimno poročanje o uporabi?",
"Allowed Networks": "Dovoljena omrežja",
@ -27,6 +28,7 @@
"An external command handles the versioning. It has to remove the file from the shared folder. If the path to the application contains spaces, it should be quoted.": "Zunanji ukaz upravlja z različicami. To mora odstraniti datoteko od deljene mape. Če pot do aplikacije vsebuje presledke, jo postavite v dvojne narekovaje.",
"Anonymous Usage Reporting": "Brezimno poročanje o uporabi",
"Anonymous usage report format has changed. Would you like to move to the new format?": "Format anonimnega poročanja uporabe se je spremenil. Ali želite se premakniti na novi format?",
"Apply": "Apply",
"Are you sure you want to continue?": "Ste prepričani, da želite nadaljevati?",
"Are you sure you want to override all remote changes?": "Ali ste prepričani, da želite preglasiti vse oddaljene spremembe?",
"Are you sure you want to permanently delete all these files?": "Ste prepričani, da želite trajno izbrisati datoteke?",
@ -66,6 +68,7 @@
"Copyright © 2014-2019 the following Contributors:": "Avtorske pravice © 2014-2019 pripadajo naslednjim sodelavcem:",
"Creating ignore patterns, overwriting an existing file at {%path%}.": "Ustvarjanje prezrtih vzorcev, prepisovanje obstoječe datoteke na {{path}}.",
"Currently Shared With Devices": "Trenutno deljeno z napravami",
"Custom Range": "Obseg po meri",
"Danger!": "Nevarno!",
"Debugging Facilities": "Možnosti za odpravljanje napak",
"Default Configuration": "Privzeta konfiguracija",
@ -171,7 +174,7 @@
"Ignore": "Prezri",
"Ignore Patterns": "Vzorec preziranja",
"Ignore Permissions": "Prezri dovoljenja",
"Ignore patterns can only be added after the folder is created. If checked, an input field to enter ignore patterns will be presented after saving.": "Ignore patterns can only be added after the folder is created. If checked, an input field to enter ignore patterns will be presented after saving.",
"Ignore patterns can only be added after the folder is created. If checked, an input field to enter ignore patterns will be presented after saving.": "Vzorci za ignoriranje se lahko edino dodajo po tem, ko se ustvari mapi. Če je odkljukano, se predstavi vhodno polje za vnos njega.",
"Ignored Devices": "Prezrte naprave",
"Ignored Folders": "Prezrte mape",
"Ignored at": "Prezrt pri",
@ -183,6 +186,9 @@
"Keep Versions": "Ohrani različice",
"LDAP": "LDAP",
"Largest First": "najprej največja",
"Last 30 Days": "Zadnjih 30 dni",
"Last 7 Days": "Zadnjih 7 dni",
"Last Month": "Zadnji mesec",
"Last Scan": "Zadnje skeniranje",
"Last seen": "Zadnjič videno",
"Latest Change": "Najnovejša sprememba",
@ -374,17 +380,20 @@
"The rate limit must be a non-negative number (0: no limit)": "Omejitev stopnje odzivnosti mora biti nenegativno število (0: brez omejitve)",
"The rescan interval must be a non-negative number of seconds.": "Interval skeniranja mora biti pozitivna številka.",
"There are no devices to share this folder with.": "Ni naprav za skupno rabo te mape.",
"There are no file versions to restore.": "There are no file versions to restore.",
"There are no file versions to restore.": "Ni različic od datotek za obnoviti.",
"There are no folders to share with this device.": "Ni map za skupno rabo s to napravo.",
"They are retried automatically and will be synced when the error is resolved.": "Samodejno se poskuša znova in bo sinhronizirano, ko je napaka odpravljena.",
"This Device": "Ta naprava",
"This Month": "Ta mesec",
"This can easily give hackers access to read and change any files on your computer.": "To lahko hekerjem preprosto omogoči dostop do branja in spreminjanja vseh datotek v vašem računalniku.",
"This device cannot automatically discover other devices or announce its own address to be found by others. Only devices with statically configured addresses can connect.": "Ta naprava ne more samodejno odkriti drugih naprav ali objaviti svojega naslova, da ga najdejo drugi. Povezujejo se lahko samo naprave s statično konfiguriranimi naslovi.",
"This is a major version upgrade.": "To je nadgradnja glavne različice",
"This setting controls the free space required on the home (i.e., index database) disk.": "Ta nastavitev nadzoruje prosti prostor potreben na domačem (naprimer, indeksirana podatkovna baza) pogonu.",
"Time": "Čas",
"Time the item was last modified": "Čas, ko je bil element nazadnje spremenjen",
"Today": "Danes",
"Trash Can File Versioning": "Beleženje različic datotek s Smetnjakom",
"Twitter": "Twitter",
"Type": "Vrsta",
"UNIX Permissions": "UNIX dovoljenja",
"Unavailable": "Ni na voljo",
@ -428,6 +437,7 @@
"When adding a new device, keep in mind that this device must be added on the other side too.": "Ob dodajanju nove naprave imejte v mislih, da ta naprava mora biti dodana tudi na drugi strani.",
"When adding a new folder, keep in mind that the Folder ID is used to tie folders together between devices. They are case sensitive and must match exactly between all devices.": "Ko dodajate novo mapo, ne pozabite, da se ID mape uporablja za povezovanje map med napravami. Razlikujejo se na velike in male črke in se morajo natančno ujemati med vsemi napravami.",
"Yes": "Da",
"Yesterday": "Včeraj",
"You can also select one of these nearby devices:": "Izberete lahko tudi eno od teh naprav v bližini:",
"You can change your choice at any time in the Settings dialog.": "Svojo izbiro lahko kadar koli spremenite v pozivnem oknu Nastavitve.",
"You can read more about the two release channels at the link below.": "Več o obeh kanalih za izdajo si lahko preberete na spodnji povezavi.",

View File

@ -19,6 +19,7 @@
"Advanced": "Avancerat",
"Advanced Configuration": "Avancerad konfiguration",
"All Data": "Alla data",
"All Time": "All tid",
"All folders shared with this device must be protected by a password, such that all sent data is unreadable without the given password.": "Alla mappar som delas med denna enhet måste skyddas av ett lösenord, så att alla data som skickas är oläsliga utan det angivna lösenordet.",
"Allow Anonymous Usage Reporting?": "Tillåt anonym användarstatistiksrapportering?",
"Allowed Networks": "Tillåtna nätverk",
@ -27,6 +28,7 @@
"An external command handles the versioning. It has to remove the file from the shared folder. If the path to the application contains spaces, it should be quoted.": "Ett externt kommando hanterar versionen. Det måste ta bort filen från den delade mappen. Om sökvägen till applikationen innehåller mellanslag bör den citeras.",
"Anonymous Usage Reporting": "Anonym användarstatistiksrapportering",
"Anonymous usage report format has changed. Would you like to move to the new format?": "Anonymt användningsrapportformat har ändrats. Vill du flytta till det nya formatet?",
"Apply": "Tillämpa",
"Are you sure you want to continue?": "Är du säker på att du vill fortsätta?",
"Are you sure you want to override all remote changes?": "Är du säker på att du vill åsidosätta alla fjärrändringar?",
"Are you sure you want to permanently delete all these files?": "Är du säker på att du vill ta bort alla dessa filer permanent?",
@ -66,6 +68,7 @@
"Copyright © 2014-2019 the following Contributors:": "Copyright © 2014-2019 följande bidragsgivare:",
"Creating ignore patterns, overwriting an existing file at {%path%}.": "Skapa ignorera mönster, skriver över en existerande fil på {{path}}.",
"Currently Shared With Devices": "För närvarande delas med enheter",
"Custom Range": "Anpassat intervall",
"Danger!": "Fara!",
"Debugging Facilities": "Felsökningsfunktioner",
"Default Configuration": "Standardkonfiguration",
@ -128,7 +131,7 @@
"Error": "Fel",
"External File Versioning": "Extern filversionshantering",
"Failed Items": "Misslyckade objekt",
"Failed to load file versions.": "Failed to load file versions.",
"Failed to load file versions.": "Det gick inte att läsa in filversioner.",
"Failed to load ignore patterns.": "Det gick inte att läsa in ignorera mönster.",
"Failed to setup, retrying": "Det gick inte att ställa in, försöker igen",
"Failure to connect to IPv6 servers is expected if there is no IPv6 connectivity.": "Det går inte att ansluta till IPv6-servrar om det inte finns någon IPv6-anslutning.",
@ -183,6 +186,9 @@
"Keep Versions": "Behåll versioner",
"LDAP": "LDAP",
"Largest First": "Största först",
"Last 30 Days": "Senaste 30 dagarna",
"Last 7 Days": "Senaste 7 dagarna",
"Last Month": "Förra månaden",
"Last Scan": "Senaste skanning",
"Last seen": "Senast sedd",
"Latest Change": "Senaste ändring",
@ -244,9 +250,9 @@
"Periodic scanning at given interval and failed setting up watching for changes, retrying every 1m:": "Periodisk skanning vid givet intervall och misslyckades med att ställa in bevakning av ändringar, försöker igen var 1:e minut:",
"Permanently add it to the ignore list, suppressing further notifications.": "Lägg till det permanent i ignoreringslistan och undertryck ytterligare aviseringar.",
"Permissions": "Behörigheter",
"Please consult the release notes before performing a major upgrade.": "Vänligen läs igenom versionsnyheterna innan du utför en större uppgradering.",
"Please set a GUI Authentication User and Password in the Settings dialog.": "Vänligen ställ in en autentiseringsanvändare och ett lösenord för det grafiska användargränssnittet i dialogrutan Inställningar.",
"Please wait": "Vänligen vänta",
"Please consult the release notes before performing a major upgrade.": "Läs igenom versionsnyheterna innan du utför en större uppgradering.",
"Please set a GUI Authentication User and Password in the Settings dialog.": "Ställ in en autentiseringsanvändare och ett lösenord för det grafiska användargränssnittet i dialogrutan Inställningar.",
"Please wait": "Vänta",
"Prefix indicating that the file can be deleted if preventing directory removal": "Prefix som indikerar att filen kan tas bort om den förhindrar mappborttagning",
"Prefix indicating that the pattern should be matched without case sensitivity": "Prefix som indikerar att mönstret ska matchas utan skiftlägeskänslighet",
"Preparing to Sync": "Förberedelser för synkronisering",
@ -340,7 +346,7 @@
"Syncthing is upgrading.": "Syncthing uppgraderas.",
"Syncthing now supports automatically reporting crashes to the developers. This feature is enabled by default.": "Syncthing stöder nu automatiskt kraschrapportering till utvecklarna. Denna funktion är aktiverad som standard.",
"Syncthing seems to be down, or there is a problem with your Internet connection. Retrying…": "Syncthing verkar vara avstängd eller så är det problem med din internetanslutning. Försöker igen...",
"Syncthing seems to be experiencing a problem processing your request. Please refresh the page or restart Syncthing if the problem persists.": "Syncthing verkar ha drabbats av ett problem med behandlingen av din förfrågan. Vänligen uppdatera sidan eller starta om Syncthing om problemet kvarstår.",
"Syncthing seems to be experiencing a problem processing your request. Please refresh the page or restart Syncthing if the problem persists.": "Syncthing verkar ha drabbats av ett problem med behandlingen av din förfrågan. Uppdatera sidan eller starta om Syncthing om problemet kvarstår.",
"Take me back": "Ta mig tillbaka",
"The GUI address is overridden by startup options. Changes here will not take effect while the override is in place.": "Den grafiska gränssnittsadressen åsidosätts av startalternativ. Ändringar här träder inte i kraft så länge åsidosättningen är på plats.",
"The Syncthing Authors": "Syncthing-upphovsmän",
@ -374,17 +380,20 @@
"The rate limit must be a non-negative number (0: no limit)": "Frekvensgränsen måste vara ett icke-negativt tal (0: ingen gräns)",
"The rescan interval must be a non-negative number of seconds.": "Förnyelseintervallet måste vara ett positivt antal sekunder",
"There are no devices to share this folder with.": "Det finns inga enheter att dela denna mapp med.",
"There are no file versions to restore.": "There are no file versions to restore.",
"There are no file versions to restore.": "Det finns inga filversioner att återställa.",
"There are no folders to share with this device.": "Det finns inga mappar att dela med denna enhet.",
"They are retried automatically and will be synced when the error is resolved.": "De omprövas automatiskt och kommer att synkroniseras när felet är löst.",
"This Device": "Denna enhet",
"This Month": "Den här månaden",
"This can easily give hackers access to read and change any files on your computer.": "Detta kan lätt ge hackare tillgång till att läsa och ändra några filer på datorn.",
"This device cannot automatically discover other devices or announce its own address to be found by others. Only devices with statically configured addresses can connect.": "Denna enhet kan inte automatiskt upptäcka andra enheter eller meddela sin egen adress som andra kan hitta. Endast enheter med statiskt konfigurerade adresser kan ansluta.",
"This is a major version upgrade.": "Det här är en stor uppgradering.",
"This setting controls the free space required on the home (i.e., index database) disk.": "Denna inställning styr hur mycket ledigt utrymme som krävs på hemdisken (dvs. indexdatabasen).",
"Time": "Tid",
"Time the item was last modified": "Tidpunkten objektet var senast ändrad",
"Today": "Idag",
"Trash Can File Versioning": "Papperskorgs filversionshantering",
"Twitter": "Twitter",
"Type": "Typ",
"UNIX Permissions": "UNIX-behörigheter",
"Unavailable": "Otillgänglig",
@ -408,7 +417,7 @@
"Usage reporting is always enabled for candidate releases.": "Användningsrapportering är alltid aktiverad för kandidatutgåvor.",
"Use HTTPS for GUI": "Använd HTTPS för gränssnitt",
"Use notifications from the filesystem to detect changed items.": "Använd aviseringar från filsystemet för att upptäcka ändrade objekt.",
"Username/Password has not been set for the GUI authentication. Please consider setting it up.": "Användarnamn/lösenord har inte ställts in för autentisering av det grafiska gränssnittet. Vänligen överväg att ställa in det.",
"Username/Password has not been set for the GUI authentication. Please consider setting it up.": "Användarnamn/lösenord har inte ställts in för autentisering av det grafiska gränssnittet. Överväg att ställa in det.",
"Version": "Version",
"Versions": "Versioner",
"Versions Path": "Sökväg för versioner",
@ -428,6 +437,7 @@
"When adding a new device, keep in mind that this device must be added on the other side too.": "När du lägger till en ny enhet, kom ihåg att denna enhet måste läggas till på den andra enheten också.",
"When adding a new folder, keep in mind that the Folder ID is used to tie folders together between devices. They are case sensitive and must match exactly between all devices.": "När du lägger till ny mapp, tänk på att mapp-ID knyter ihop mappar mellan olika enheter. De skiftlägeskänsliga och måste matcha precis mellan alla enheter.",
"Yes": "Ja",
"Yesterday": "Igår",
"You can also select one of these nearby devices:": "Du kan också välja en av dessa närliggande enheter:",
"You can change your choice at any time in the Settings dialog.": "Du kan ändra ditt val när som helst i inställningsdialogrutan.",
"You can read more about the two release channels at the link below.": "Du kan läsa mer om de två publiceringsskanalerna på länken nedan.",

View File

@ -19,6 +19,7 @@
"Advanced": "Gelişmiş",
"Advanced Configuration": "Gelişmiş Yapılandırma",
"All Data": "Tüm Veriler",
"All Time": "Tüm Zamanlar",
"All folders shared with this device must be protected by a password, such that all sent data is unreadable without the given password.": "Bu cihazla paylaşılan tüm klasörler bir parola ile korunmak zorundadır, böylece gönderilen tüm veriler verilen parola olmadan okunamaz.",
"Allow Anonymous Usage Reporting?": "İsimsiz Kullanım Bildirmeye İzin Verilsin Mi?",
"Allowed Networks": "İzin Verilen Ağlar",
@ -27,6 +28,7 @@
"An external command handles the versioning. It has to remove the file from the shared folder. If the path to the application contains spaces, it should be quoted.": "Harici bir komut sürümlendirmeyi gerçekleştirir. Dosyayı paylaşılan klasörden kaldırmak zorundadır. Eğer uygulama yolu boşluklar içeriyorsa, tırnak içine alınmalıdır.",
"Anonymous Usage Reporting": "İsimsiz Kullanım Bildirme",
"Anonymous usage report format has changed. Would you like to move to the new format?": "İsimsiz kullanım raporu biçimi değişti. Yeni biçime geçmek ister misiniz?",
"Apply": "Uygula",
"Are you sure you want to continue?": "Devam etmek istediğinize emin misiniz?",
"Are you sure you want to override all remote changes?": "Tüm uzak değişiklikleri geçersiz kılmak istediğinize emin misiniz?",
"Are you sure you want to permanently delete all these files?": "Tüm bu dosyaları kalıcı olarak silmek istediğinize emin misiniz?",
@ -66,6 +68,7 @@
"Copyright © 2014-2019 the following Contributors:": "Telif hakkı © 2014-2020 Katkıda Bulunanlar:",
"Creating ignore patterns, overwriting an existing file at {%path%}.": "Yoksayma şekilleri oluşturuluyor, {{path}} yolunda varolan bir dosyanın üzerine yazılıyor.",
"Currently Shared With Devices": "Şu Anda Paylaşıldığı Cihazlar",
"Custom Range": "Özel Aralık",
"Danger!": "Tehlike!",
"Debugging Facilities": "Hata Ayıklama Olanakları",
"Default Configuration": "Varsayılan Yapılandırma",
@ -183,6 +186,9 @@
"Keep Versions": "Sürümleri Tut",
"LDAP": "LDAP",
"Largest First": "Önce En Büyük Olan",
"Last 30 Days": "Son 30 Gün",
"Last 7 Days": "Son 7 Gün",
"Last Month": "Geçen Ay",
"Last Scan": "Son Tarama",
"Last seen": "Son görülme",
"Latest Change": "Son Değişiklik",
@ -378,13 +384,16 @@
"There are no folders to share with this device.": "Bu cihazla paylaşılacak klasörler yok.",
"They are retried automatically and will be synced when the error is resolved.": "Otomatik olarak yeniden denenirler ve hata çözüldüğünde eşitleneceklerdir.",
"This Device": "Bu Cihaz",
"This Month": "Bu Ay",
"This can easily give hackers access to read and change any files on your computer.": "Bu, bilgisayar korsanlarının bilgisayarınızdaki herhangi bir dosyayı okumasına ve değiştirmesine kolayca erişim sağlayabilir.",
"This device cannot automatically discover other devices or announce its own address to be found by others. Only devices with statically configured addresses can connect.": "Bu cihaz diğer cihazları otomatik olarak keşfedemez veya başkaları tarafından bulunacak kendi adresini duyuramaz. Yalnızca sabit olarak yapılandırılmış adreslere sahip cihazlar bağlanabilir.",
"This is a major version upgrade.": "Bu büyük sürüm yükseltmesidir.",
"This setting controls the free space required on the home (i.e., index database) disk.": "Bu ayar, ev (yani indeks veritabanı) diskindeki gereken boş alanı denetler.",
"Time": "Zaman",
"Time the item was last modified": "Öğenin son düzenlendiği zaman",
"Today": "Bugün",
"Trash Can File Versioning": "Çöp Kutusu Dosyası Sürümlendirme",
"Twitter": "Twitter",
"Type": "Tür",
"UNIX Permissions": "Unix İzinleri",
"Unavailable": "Kullanılamaz",
@ -428,6 +437,7 @@
"When adding a new device, keep in mind that this device must be added on the other side too.": "Yeni bir cihaz eklerken, bu cihazın karşı tarafa da eklenmek zorunda olduğunu unutmayın.",
"When adding a new folder, keep in mind that the Folder ID is used to tie folders together between devices. They are case sensitive and must match exactly between all devices.": "Yeni bir klasör eklerken, Klasör Kimliği'nin klasörleri cihazlar arasında bağlamak için kullanıldığını unutmayın. Büyük/küçük harf duyarlıdırlar ve tüm cihazlarda tam olarak eşleşmek zorundadırlar.",
"Yes": "Evet",
"Yesterday": "Dün",
"You can also select one of these nearby devices:": "Ayrıca yakındaki cihazlardan birini de seçebilirsiniz:",
"You can change your choice at any time in the Settings dialog.": "Seçiminizi istediğiniz zaman Ayarlar ileti öğesinde değiştirebilirsiniz.",
"You can read more about the two release channels at the link below.": "İki yayım kanalı hakkında daha fazlasını aşağıdaki bağlantıda okuyabilirsiniz.",

View File

@ -19,6 +19,7 @@
"Advanced": "Розширені",
"Advanced Configuration": "Розширена конфігурація",
"All Data": "Усі дані",
"All Time": "All Time",
"All folders shared with this device must be protected by a password, such that all sent data is unreadable without the given password.": "All folders shared with this device must be protected by a password, such that all sent data is unreadable without the given password.",
"Allow Anonymous Usage Reporting?": "Дозволити програмі збирати анонімну статистику використання?",
"Allowed Networks": "Дозволені мережі",
@ -27,6 +28,7 @@
"An external command handles the versioning. It has to remove the file from the shared folder. If the path to the application contains spaces, it should be quoted.": "Зовнішня команда керування версіями. Вона має видалити файл із спільної директорії. Якщо шлях до програми містить пробіли, він буде взятий у лапки.",
"Anonymous Usage Reporting": "Анонімна статистика використання",
"Anonymous usage report format has changed. Would you like to move to the new format?": "Змінився формат анонімного звіту про користування. Бажаєте перейти на новий формат?",
"Apply": "Apply",
"Are you sure you want to continue?": "Are you sure you want to continue?",
"Are you sure you want to override all remote changes?": "Are you sure you want to override all remote changes?",
"Are you sure you want to permanently delete all these files?": "Are you sure you want to permanently delete all these files?",
@ -66,6 +68,7 @@
"Copyright © 2014-2019 the following Contributors:": "© 2014-2019 Всі права застережено, вклад внесли:",
"Creating ignore patterns, overwriting an existing file at {%path%}.": "Створення шаблонів винятків з перезаписом існуючого файлу {{path}}.",
"Currently Shared With Devices": "На даний момент є спільний доступ пристроїв",
"Custom Range": "Custom Range",
"Danger!": "Небезпечно!",
"Debugging Facilities": "Засоби відладки",
"Default Configuration": "Default Configuration",
@ -183,6 +186,9 @@
"Keep Versions": "Зберігати версії",
"LDAP": "LDAP",
"Largest First": "Спершу найбільші",
"Last 30 Days": "Last 30 Days",
"Last 7 Days": "Last 7 Days",
"Last Month": "Last Month",
"Last Scan": "Останнє сканування",
"Last seen": "З’являвся останній раз",
"Latest Change": "Найостанніша зміна",
@ -378,13 +384,16 @@
"There are no folders to share with this device.": "There are no folders to share with this device.",
"They are retried automatically and will be synced when the error is resolved.": "Вони будуть автоматично повторно синхронізовані, коли помилку буде усунено. ",
"This Device": "Локальний пристрій",
"This Month": "This Month",
"This can easily give hackers access to read and change any files on your computer.": "Це легко може дати хакерам доступ до читання та зміни будь-яких файлів на вашому комп'ютері.",
"This device cannot automatically discover other devices or announce its own address to be found by others. Only devices with statically configured addresses can connect.": "This device cannot automatically discover other devices or announce its own address to be found by others. Only devices with statically configured addresses can connect.",
"This is a major version upgrade.": "Це оновлення мажорної версії",
"This setting controls the free space required on the home (i.e., index database) disk.": "Це налаштування визначає необхідний вільний простір на домашньому (тобто той, що містить базу даних) диску.",
"Time": "Час",
"Time the item was last modified": "Час останньої зміни елемента:",
"Today": "Today",
"Trash Can File Versioning": "Версіонування файлів у кошику ",
"Twitter": "Twitter",
"Type": "Тип",
"UNIX Permissions": "UNIX дозволи",
"Unavailable": "Недоступно",
@ -428,6 +437,7 @@
"When adding a new device, keep in mind that this device must be added on the other side too.": "Коли додаєте новий вузол, пам’ятайте, що цей вузол повинен бути доданий і на іншій стороні.",
"When adding a new folder, keep in mind that the Folder ID is used to tie folders together between devices. They are case sensitive and must match exactly between all devices.": "Коли додаєте нову директорію, пам’ятайте, що ID цієї директорії використовується для того, щоб зв’язувати директорії разом між пристроями. Назви повинні точно співпадати між усіма пристроями, регістр символів має значення.",
"Yes": "Так",
"Yesterday": "Yesterday",
"You can also select one of these nearby devices:": "Ви також можете обрати один із сусідніх пристроїв:",
"You can change your choice at any time in the Settings dialog.": "Ви завжди можете змінити свій вибір у вікні Налаштувань.",
"You can read more about the two release channels at the link below.": "Ви можете прочитати більше про два канали випусків за посиланням нижче.",

View File

@ -19,6 +19,7 @@
"Advanced": "高级",
"Advanced Configuration": "高级配置",
"All Data": "所有数据",
"All Time": "All Time",
"All folders shared with this device must be protected by a password, such that all sent data is unreadable without the given password.": "与此设备共享的所有文件夹都必须有密码保护,这样所有发送的数据在没有密码的情况下是不可读的。",
"Allow Anonymous Usage Reporting?": "允许匿名使用报告?",
"Allowed Networks": "允许的网络",
@ -27,6 +28,7 @@
"An external command handles the versioning. It has to remove the file from the shared folder. If the path to the application contains spaces, it should be quoted.": "外部命令接管了版本控制。该外部命令必须自行从共享文件夹中删除该文件。如果此应用程序的路径包含空格,应该用半角引号括起来。",
"Anonymous Usage Reporting": "匿名使用报告",
"Anonymous usage report format has changed. Would you like to move to the new format?": "匿名使用情况的报告格式已经变更。是否要迁移到新的格式?",
"Apply": "Apply",
"Are you sure you want to continue?": "您确定要继续吗?",
"Are you sure you want to override all remote changes?": "您确定要覆盖所有远程更改吗?  ",
"Are you sure you want to permanently delete all these files?": "确认要永久删除这些文件吗?",
@ -66,6 +68,7 @@
"Copyright © 2014-2019 the following Contributors:": "版权所有 © 2014-2019 以下贡献者:",
"Creating ignore patterns, overwriting an existing file at {%path%}.": "正在创建忽略模式,覆盖位于 {{path}} 的已有文件。",
"Currently Shared With Devices": "当前设备已共享",
"Custom Range": "Custom Range",
"Danger!": "危险!",
"Debugging Facilities": "调试功能",
"Default Configuration": "默认配置",
@ -183,6 +186,9 @@
"Keep Versions": "保留版本数量",
"LDAP": "LDAP",
"Largest First": "大文件优先",
"Last 30 Days": "Last 30 Days",
"Last 7 Days": "Last 7 Days",
"Last Month": "Last Month",
"Last Scan": "最后扫描",
"Last seen": "最后可见",
"Latest Change": "最后更改",
@ -378,13 +384,16 @@
"There are no folders to share with this device.": "没有文件夹与此设备共享。",
"They are retried automatically and will be synced when the error is resolved.": "系统将会自动重试,当错误被解决时,它们将会被同步。",
"This Device": "当前设备",
"This Month": "This Month",
"This can easily give hackers access to read and change any files on your computer.": "这会让骇客能够轻而易举地访问及修改您的文件。",
"This device cannot automatically discover other devices or announce its own address to be found by others. Only devices with statically configured addresses can connect.": "此设备无法自动发现其它设备或广播自己的地址被其他人发现。只有具有静态配置地址的设备才能连接。",
"This is a major version upgrade.": "这是一个重大版本更新。",
"This setting controls the free space required on the home (i.e., index database) disk.": "此设置控制主(例如索引数据库)磁盘上需要的可用空间。",
"Time": "时间",
"Time the item was last modified": "该项最近修改的时间",
"Today": "Today",
"Trash Can File Versioning": "回收站式版本控制",
"Twitter": "Twitter",
"Type": "类型",
"UNIX Permissions": "UNIX权限",
"Unavailable": "无效",
@ -428,6 +437,7 @@
"When adding a new device, keep in mind that this device must be added on the other side too.": "若您在本机添加新设备,记住您也必须在这个新设备上添加本机。",
"When adding a new folder, keep in mind that the Folder ID is used to tie folders together between devices. They are case sensitive and must match exactly between all devices.": "若你添加了新文件夹,记住文件夹 ID 是用以在不同设备间建立联系的。在不同设备间拥有相同 ID 的文件夹将会被同步。且文件夹 ID 区分大小写。",
"Yes": "是",
"Yesterday": "Yesterday",
"You can also select one of these nearby devices:": "您也可以从这些附近的设备中选择:",
"You can change your choice at any time in the Settings dialog.": "您可以在任何时候在设置对话框中更改选择。",
"You can read more about the two release channels at the link below.": "您可以从以下链接读取更多关于两个发行渠道的信息。",

View File

@ -19,6 +19,7 @@
"Advanced": "高級",
"Advanced Configuration": "高級配置",
"All Data": "所有資料",
"All Time": "All Time",
"All folders shared with this device must be protected by a password, such that all sent data is unreadable without the given password.": "All folders shared with this device must be protected by a password, such that all sent data is unreadable without the given password.",
"Allow Anonymous Usage Reporting?": "允許匿名使用報告?",
"Allowed Networks": "允許的網絡",
@ -27,6 +28,7 @@
"An external command handles the versioning. It has to remove the file from the shared folder. If the path to the application contains spaces, it should be quoted.": "外部命令接管了版本控制。該外部命令必須自行從共享文件夾中刪除該文件。如果此應用程序的路徑包含空格,應該用半角引號括起來。",
"Anonymous Usage Reporting": "匿名使用報告",
"Anonymous usage report format has changed. Would you like to move to the new format?": "匿名使用情況的報告格式已經變更。是否要遷移到新的格式?",
"Apply": "Apply",
"Are you sure you want to continue?": "Are you sure you want to continue?",
"Are you sure you want to override all remote changes?": "Are you sure you want to override all remote changes?",
"Are you sure you want to permanently delete all these files?": "Are you sure you want to permanently delete all these files?",
@ -66,6 +68,7 @@
"Copyright © 2014-2019 the following Contributors:": "版權所有©2014-2019以下貢獻者",
"Creating ignore patterns, overwriting an existing file at {%path%}.": "正在創建忽略模式,覆蓋位於 {{path}} 的已有文件。",
"Currently Shared With Devices": "當前設備已共享",
"Custom Range": "Custom Range",
"Danger!": "危險!",
"Debugging Facilities": "調試功能",
"Default Configuration": "Default Configuration",
@ -183,6 +186,9 @@
"Keep Versions": "保留版本數量",
"LDAP": "LDAP",
"Largest First": "大文件優先",
"Last 30 Days": "Last 30 Days",
"Last 7 Days": "Last 7 Days",
"Last Month": "Last Month",
"Last Scan": "最後掃瞄",
"Last seen": "最後可見",
"Latest Change": "最後更改",
@ -378,13 +384,16 @@
"There are no folders to share with this device.": "沒有與此設備共享的文件夾。",
"They are retried automatically and will be synced when the error is resolved.": "系統將會自動重試,當錯誤被解決時,它們將會被同步。",
"This Device": "當前設備",
"This Month": "This Month",
"This can easily give hackers access to read and change any files on your computer.": "這會讓駭客能夠輕而易舉地訪問及修改您的文件。",
"This device cannot automatically discover other devices or announce its own address to be found by others. Only devices with statically configured addresses can connect.": "This device cannot automatically discover other devices or announce its own address to be found by others. Only devices with statically configured addresses can connect.",
"This is a major version upgrade.": "這是一個重大版本更新。",
"This setting controls the free space required on the home (i.e., index database) disk.": "此設置控制主(例如索引數據庫)磁盤上需要的可用空間。",
"Time": "時間",
"Time the item was last modified": "該項最近修改的時間",
"Today": "Today",
"Trash Can File Versioning": "回收站式版本控制",
"Twitter": "Twitter",
"Type": "類型",
"UNIX Permissions": "UNIX權限",
"Unavailable": "無效",
@ -428,6 +437,7 @@
"When adding a new device, keep in mind that this device must be added on the other side too.": "若您在本機添加新設備,記住您也必須在這個新設備上添加本機。",
"When adding a new folder, keep in mind that the Folder ID is used to tie folders together between devices. They are case sensitive and must match exactly between all devices.": "若你添加了新文件夾,記住文件夾 ID 是用以在不同設備間建立聯繫的。在不同設備間擁有相同 ID 的文件夾將會被同步。且文件夾 ID 區分大小寫。",
"Yes": "是",
"Yesterday": "Yesterday",
"You can also select one of these nearby devices:": "您也可以從這些附近的設備中選擇:",
"You can change your choice at any time in the Settings dialog.": "您可以在任何時候在設置對話框中更改選擇。",
"You can read more about the two release channels at the link below.": "您可以從以下鏈接讀取更多關於兩個發行渠道的信息。",

View File

@ -19,6 +19,7 @@
"Advanced": "進階",
"Advanced Configuration": "進階配置",
"All Data": "全部資料",
"All Time": "All Time",
"All folders shared with this device must be protected by a password, such that all sent data is unreadable without the given password.": "所有與此裝置分享的資料夾必須使用密碼保護起來,如此一來,沒有提供密碼將無法閱覽資料。",
"Allow Anonymous Usage Reporting?": "允許回報匿名數據?",
"Allowed Networks": "允許的網路",
@ -27,6 +28,7 @@
"An external command handles the versioning. It has to remove the file from the shared folder. If the path to the application contains spaces, it should be quoted.": "外部指令接管了版本控制。它必須將檔案自分享資料夾中移除。如果應用程式的路徑包含了空格,則必須使用雙引號刮起。",
"Anonymous Usage Reporting": "匿名數據回報",
"Anonymous usage report format has changed. Would you like to move to the new format?": "匿名數據回報格式已經變更,想要移至新格式嗎?",
"Apply": "Apply",
"Are you sure you want to continue?": "您確定要繼續嗎?",
"Are you sure you want to override all remote changes?": "Are you sure you want to override all remote changes?",
"Are you sure you want to permanently delete all these files?": "確認永久刪除檔案?",
@ -66,6 +68,7 @@
"Copyright © 2014-2019 the following Contributors:": "Copyright © 2014-2019 下列貢獻者:",
"Creating ignore patterns, overwriting an existing file at {%path%}.": "建立忽略樣式,覆蓋已存在的 {{path}}。",
"Currently Shared With Devices": "目前與裝置共享",
"Custom Range": "Custom Range",
"Danger!": "危險!",
"Debugging Facilities": "除錯工具",
"Default Configuration": "預設配置",
@ -183,6 +186,9 @@
"Keep Versions": "保留歷史版本數",
"LDAP": "LDAP",
"Largest First": "最大的優先",
"Last 30 Days": "Last 30 Days",
"Last 7 Days": "Last 7 Days",
"Last Month": "Last Month",
"Last Scan": "最後掃描",
"Last seen": "最後發現時間",
"Latest Change": "最近變動",
@ -378,13 +384,16 @@
"There are no folders to share with this device.": "沒有資料夾分享給此裝置。",
"They are retried automatically and will be synced when the error is resolved.": "解決問題後,將會自動重試和同步。",
"This Device": "本機",
"This Month": "This Month",
"This can easily give hackers access to read and change any files on your computer.": "這能給駭客輕易的來讀取、變更電腦中的任何檔案。",
"This device cannot automatically discover other devices or announce its own address to be found by others. Only devices with statically configured addresses can connect.": "This device cannot automatically discover other devices or announce its own address to be found by others. Only devices with statically configured addresses can connect.",
"This is a major version upgrade.": "這是一個重大版本更新。",
"This setting controls the free space required on the home (i.e., index database) disk.": "此設定控制家目錄(即:索引資料庫)的必須可用空間。",
"Time": "時間",
"Time the item was last modified": "前次修改時間",
"Today": "Today",
"Trash Can File Versioning": "垃圾筒式檔案版本控制",
"Twitter": "Twitter",
"Type": "類型",
"UNIX Permissions": "UNIX 權限",
"Unavailable": "無法使用",
@ -428,6 +437,7 @@
"When adding a new device, keep in mind that this device must be added on the other side too.": "當新增一個裝置時,務必記住,當前的這個裝置也同樣必須被添加至另一邊。",
"When adding a new folder, keep in mind that the Folder ID is used to tie folders together between devices. They are case sensitive and must match exactly between all devices.": "當新增一個資料夾時,請記住,資料夾識別碼是用來將裝置之間的資料夾綁定在一起的。它們有區分大小寫,且必須在所有裝置之間完全相同。",
"Yes": "是",
"Yesterday": "Yesterday",
"You can also select one of these nearby devices:": "您亦可從這些附近裝置中擇一:",
"You can change your choice at any time in the Settings dialog.": "您可以在設定對話框中隨時更改您的選擇。",
"You can read more about the two release channels at the link below.": "您可於下方連結閱讀更多關於發行頻道的說明。",

View File

@ -892,13 +892,13 @@
<div class="container">
<ul class="nav navbar-nav">
<li><a class="navbar-link" href="https://syncthing.net/" target="_blank"><span class="fas fa-home"></span>&nbsp;<span translate>Home page</span></a></li>
<li><a class="navbar-link" href="https://docs.syncthing.net/" target="_blank"><span class="fas fa-book"></span>&nbsp;<span translate>Documentation</span></a></li>
<li><a class="navbar-link" href="{{docsURL()}}" target="_blank"><span class="fas fa-book"></span>&nbsp;<span translate>Documentation</span></a></li>
<li><a class="navbar-link" href="https://forum.syncthing.net" target="_blank"><span class="fas fa-question-circle"></span>&nbsp;<span translate>Support</span></a></li>
<li><a class="navbar-link" href="https://data.syncthing.net/" target="_blank"><span class="fas fa-bar-chart"></span>&nbsp;<span translate>Statistics</span></a></li>
<li><a class="navbar-link" href="https://github.com/syncthing/syncthing/releases" target="_blank"><span class="far fa-file-alt"></span>&nbsp;<span translate>Changelog</span></a></li>
<li><a class="navbar-link" href="https://github.com/syncthing/syncthing/issues" target="_blank"><span class="fas fa-bug"></span>&nbsp;<span translate>Bugs</span></a></li>
<li><a class="navbar-link" href="https://github.com/syncthing/syncthing" target="_blank"><span class="fas fa-wrench"></span>&nbsp;<span translate>Source Code</span></a></li>
<li><a class="navbar-link" href="https://twitter.com/syncthing" target="_blank"><span class="fab fa-twitter"></span>&nbsp;Twitter</a></li>
<li><a class="navbar-link" href="https://twitter.com/syncthing" target="_blank"><span class="fab fa-twitter"></span>&nbsp;<span translate>Twitter</span></a></li>
</ul>
</div>
</nav>

View File

@ -19,7 +19,7 @@
<h4 class="text-center" translate>The Syncthing Authors</h4>
<div class="row">
<div class="col-md-12" id="contributor-list">
Aaron Bieber, Adam Piggott, Adel Qalieh, Alan Pope, Alberto Donato, Alessandro G., Alex Lindeman, Alex Xu, Alexander Graf, Alexandre Viau, Aman Gupta, Anderson Mesquita, Andrew Dunham, Andrew Rabert, Andrey D, André Colomb, Anjan Momi, Antoine Lamielle, Antony Male, Anur, Aranjedeath, Arkadiusz Tymiński, Arthur Axel fREW Schmidt, Artur Zubilewicz, Audrius Butkevicius, Aurélien Rainone, BAHADIR YILMAZ, Bart De Vries, Ben Curthoys, Ben Schulz, Ben Shepherd, Ben Sidhom, Benedikt Heine, Benedikt Morbach, Benjamin Nater, Benno Fünfstück, Benny Ng, Boqin Qin, Boris Rybalkin, Brandon Philips, Brendan Long, Brian R. Becker, Caleb Callaway, Carsten Hagemann, Cathryne Linenweaver, Cedric Staniewski, Chih-Hsuan Yen, Choongkyu, Chris Howie, Chris Joel, Chris Tonkinson, Christian Prescott, Colin Kennedy, Cromefire_, Cyprien Devillez, Dale Visser, Dan, Daniel Bergmann, Daniel Harte, Daniel Martí, Darshil Chanpura, David Rimmer, Denis A., Dennis Wilson, Dmitry Saveliev, Domenic Horner, Dominik Heidler, Elias Jarlebring, Elliot Huffman, Emil Hessman, Eric Lesiuta, Erik Meitner, Evgeny Kuznetsov, Federico Castagnini, Felix Ableitner, Felix Lampe, Felix Unterpaintner, Francois-Xavier Gsell, Frank Isemann, Gahl Saraf, Gilli Sigurdsson, Gleb Sinyavskiy, Graham Miln, Han Boetes, HansK-p, Harrison Jones, Heiko Zuerker, Hugo Locurcio, Iain Barnett, Ian Johnson, Ikko Ashimine, Ilya Brin, Iskander Sharipov, Jaakko Hannikainen, Jacek Szafarkiewicz, Jack Croft, Jacob, Jake Peterson, Jakob Borg, James Patterson, Jaroslav Lichtblau, Jaroslav Malec, Jaya Chithra, Jens Diemer, Jerry Jacobs, Jesse Lucas, Jochen Voss, Johan Andersson, Johan Vromans, John Rinehart, Jonas Thelemann, Jonathan, Jonathan Cross, Jonta, Jose Manuel Delicado, Jörg Thalheim, Jędrzej Kula, Kalle Laine, Karol Różycki, Keith Turner, Kelong Cong, Ken'ichi Kamada, Kevin Allen, Kevin Bushiri, Kevin White, Jr., Kurt Fitzner, Lars K.W. Gohlke, Lars Lehtonen, Laurent Arnoud, Laurent Etiemble, Leo Arias, Liu Siyuan, Lode Hoste, Lord Landon Agahnim, Lukas Lihotzki, Majed Abdulaziz, Marc Laporte, Marc Pujol, Marcin Dziadus, Marcus Legendre, Mario Majila, Mark Pulford, Mateusz Naściszewski, Mateusz Ż, Matic Potočnik, Matt Burke, Matt Robenolt, Matteo Ruina, Maurizio Tomasi, Max, Max Schulze, MaximAL, Maxime Thirouin, MichaIng, Michael Jephcote, Michael Ploujnikov, Michael Rienstra, Michael Tilli, Mike Boone, MikeLund, MikolajTwarog, Mingxuan Lin, Nate Morrison, Nicholas Rishel, Nico Stapelbroek, Nicolas Braud-Santoni, Nicolas Perraut, Niels Peter Roest, Nils Jakobi, NinoM4ster, Nitroretro, NoLooseEnds, Oliver Freyermuth, Otiel, Oyebanji Jacob Mayowa, Pablo, Pascal Jungblut, Paul Brit, Pawel Palenica, Paweł Rozlach, Peter Badida, Peter Dave Hello, Peter Hoeg, Peter Marquardt, Phani Rithvij, Phil Davis, Philippe Schommers, Phill Luby, Pier Paolo Ramon, Piotr Bejda, Pramodh KP, Quentin Hibon, Rahmi Pruitt, Richard Hartmann, Robert Carosi, Roberto Santalla, Robin Schoonover, Roman Zaynetdinov, Ross Smith II, Ruslan Yevdokymov, Ryan Sullivan, Sacheendra Talluri, Scott Klupfel, Sergey Mishin, Shaarad Dalvi, Simon Frei, Simon Mwepu, Sly_tom_cat, Stefan Kuntz, Stefan Tatschner, Steven Eckhoff, Suhas Gundimeda, Taylor Khan, Thomas Hipp, Tim Abell, Tim Howes, Tobias Klauser, Tobias Nygren, Tobias Tom, Tom Jakubowski, Tomasz Wilczyński, Tommy Thorn, Tully Robinson, Tyler Brazier, Tyler Kropp, Unrud, Veeti Paananen, Victor Buinsky, Vil Brekin, Vladimir Rusinov, William A. Kennington III, Wulf Weich, Xavier O., Yannic A., andresvia, andyleap, boomsquared, bt90, chenrui, chucic, deepsource-autofix[bot], dependabot-preview[bot], dependabot[bot], derekriemer, desbma, georgespatton, ghjklw, greatroar, janost, jaseg, jelle van der Waa, jtagcat, klemens, marco-m, mclang, mv1005, otbutz, overkill, perewa, rubenbe, wangguoliang, wouter bolsterlee, xarx00, xjtdy888, 佛跳墙
Jakob Borg, Audrius Butkevicius, Jesse Lucas, Simon Frei, Alexander Graf, Alexandre Viau, Anderson Mesquita, André Colomb, Antony Male, Ben Schulz, Caleb Callaway, Daniel Harte, Evgeny Kuznetsov, Lars K.W. Gohlke, Lode Hoste, Michael Ploujnikov, Nate Morrison, Philippe Schommers, Ryan Sullivan, Sergey Mishin, Stefan Tatschner, Syncthing Release Automation, Tomasz Wilczyński, Wulf Weich, dependabot-preview[bot], dependabot[bot], greatroar, Aaron Bieber, Adam Piggott, Adel Qalieh, Alan Pope, Alberto Donato, Alessandro G., Alex Lindeman, Alex Xu, Aman Gupta, Andrew Dunham, Andrew Meyer, Andrew Rabert, Andrey D, Anjan Momi, Antoine Lamielle, Anur, Aranjedeath, Arkadiusz Tymiński, Arthur Axel fREW Schmidt, Artur Zubilewicz, Aurélien Rainone, BAHADIR YILMAZ, Bart De Vries, Ben Curthoys, Ben Shepherd, Ben Sidhom, Benedikt Heine, Benedikt Morbach, Benjamin Nater, Benno Fünfstück, Benny Ng, Boqin Qin, Boris Rybalkin, Brandon Philips, Brendan Long, Brian R. Becker, Carsten Hagemann, Cathryne Linenweaver, Cedric Staniewski, Chih-Hsuan Yen, Choongkyu, Chris Howie, Chris Joel, Chris Tonkinson, Christian Prescott, Colin Kennedy, Cromefire_, Cyprien Devillez, Dale Visser, Dan, Daniel Barczyk, Daniel Bergmann, Daniel Martí, Darshil Chanpura, David Rimmer, Denis A., Dennis Wilson, Dmitry Saveliev, Domenic Horner, Dominik Heidler, Elias Jarlebring, Elliot Huffman, Emil Hessman, Eric Lesiuta, Erik Meitner, Federico Castagnini, Felix Ableitner, Felix Lampe, Felix Unterpaintner, Francois-Xavier Gsell, Frank Isemann, Gahl Saraf, Gilli Sigurdsson, Gleb Sinyavskiy, Graham Miln, Greg, Han Boetes, HansK-p, Harrison Jones, Heiko Zuerker, Hugo Locurcio, Iain Barnett, Ian Johnson, Ikko Ashimine, Ilya Brin, Iskander Sharipov, Jaakko Hannikainen, Jacek Szafarkiewicz, Jack Croft, Jacob, Jake Peterson, James Patterson, Jaroslav Lichtblau, Jaroslav Malec, Jaya Chithra, Jens Diemer, Jerry Jacobs, Jochen Voss, Johan Andersson, Johan Vromans, John Rinehart, Jonas Thelemann, Jonathan, Jonathan Cross, Jonta, Jose Manuel Delicado, Jörg Thalheim, Jędrzej Kula, Kalle Laine, Karol Różycki, Kebin Liu, Keith Turner, Kelong Cong, Ken'ichi Kamada, Kevin Allen, Kevin Bushiri, Kevin White, Jr., Kurt Fitzner, Lars Lehtonen, Laurent Arnoud, Laurent Etiemble, Leo Arias, Liu Siyuan, Lord Landon Agahnim, Lukas Lihotzki, Majed Abdulaziz, Marc Laporte, Marc Pujol, Marcin Dziadus, Marcus Legendre, Mario Majila, Mark Pulford, Mateusz Naściszewski, Mateusz Ż, Matic Potočnik, Matt Burke, Matt Robenolt, Matteo Ruina, Maurizio Tomasi, Max, Max Schulze, MaximAL, Maxime Thirouin, MichaIng, Michael Jephcote, Michael Rienstra, Michael Tilli, Mike Boone, MikeLund, MikolajTwarog, Mingxuan Lin, Naveen, Nicholas Rishel, Nico Stapelbroek, Nicolas Braud-Santoni, Nicolas Perraut, Niels Peter Roest, Nils Jakobi, NinoM4ster, Nitroretro, NoLooseEnds, Oliver Freyermuth, Otiel, Oyebanji Jacob Mayowa, Pablo, Pascal Jungblut, Paul Brit, Pawel Palenica, Paweł Rozlach, Peter Badida, Peter Dave Hello, Peter Hoeg, Peter Marquardt, Phani Rithvij, Phil Davis, Phill Luby, Pier Paolo Ramon, Piotr Bejda, Pramodh KP, Quentin Hibon, Rahmi Pruitt, Richard Hartmann, Robert Carosi, Roberto Santalla, Robin Schoonover, Roman Zaynetdinov, Ross Smith II, Ruslan Yevdokymov, Ryan Qian, Sacheendra Talluri, Scott Klupfel, Shaarad Dalvi, Simon Mwepu, Sly_tom_cat, Stefan Kuntz, Steven Eckhoff, Suhas Gundimeda, Syncthing Automation, Taylor Khan, Thomas Hipp, Tim Abell, Tim Howes, Tobias Klauser, Tobias Nygren, Tobias Tom, Tom Jakubowski, Tommy Thorn, Tully Robinson, Tyler Brazier, Tyler Kropp, Unrud, Veeti Paananen, Victor Buinsky, Vil Brekin, Vladimir Rusinov, William A. Kennington III, Xavier O., Yannic A., andresvia, andyleap, boomsquared, bt90, chenrui, chucic, deepsource-autofix[bot], derekriemer, desbma, georgespatton, ghjklw, ignacy123, janost, jaseg, jelle van der Waa, jtagcat, klemens, marco-m, mclang, mv1005, otbutz, overkill, perewa, rubenbe, villekalliomaki, wangguoliang, wouter bolsterlee, xarx00, xjtdy888, 佛跳墙
</div>
</div>
<hr />

View File

@ -65,18 +65,25 @@ angular.module('syncthing.core')
DEVICE_PAUSED: 'DevicePaused', // Emitted when a device has been paused
DEVICE_RESUMED: 'DeviceResumed', // Emitted when a device has been resumed
DOWNLOAD_PROGRESS: 'DownloadProgress', // Emitted during file downloads for each folder for each file
FAILURE: 'Failure', // Specific errors sent to the usage reporting server for diagnosis
FOLDER_COMPLETION: 'FolderCompletion', //Emitted when the local or remote contents for a folder changes
FOLDER_REJECTED: 'FolderRejected', // DEPRECATED: Emitted when a device sends index information for a folder we do not have, or have but do not share with the device in question
PENDING_FOLDERS_CHANGED: 'PendingFoldersChanged', // Emitted when pending folders were added / updated (offered by some device, but not shared to them) or removed (folder ignored or added or no longer offered from the remote device)
FOLDER_SUMMARY: 'FolderSummary', // Emitted when folder contents have changed locally
ITEM_FINISHED: 'ItemFinished', // Generated when Syncthing ends synchronizing a file to a newer version
ITEM_STARTED: 'ItemStarted', // Generated when Syncthing begins synchronizing a file to a newer version
LISTEN_ADDRESSES_CHANGED: 'ListenAddressesChanged', // Listen address resolution has changed.
LOCAL_CHANGE_DETECTED: 'LocalChangeDetected', // Generated upon scan whenever the local disk has discovered an updated file from the previous scan.
LOCAL_INDEX_UPDATED: 'LocalIndexUpdated', // Generated when the local index information has changed, due to synchronizing one or more items from the cluster or discovering local changes during a scan
LOGIN_ATTEMPT: 'LoginAttempt', // Emitted on every login attempt when authentication is enabled for the GUI.
REMOTE_CHANGE_DETECTED: 'RemoteChangeDetected', // Generated upon scan whenever a file is locally updated due to a remote change.
REMOTE_DOWNLOAD_PROGRESS: 'RemoteDownloadProgress', // DownloadProgress message received from a connected remote device.
REMOTE_INDEX_UPDATED: 'RemoteIndexUpdated', // Generated each time new index information is received from a device
STARTING: 'Starting', // Emitted exactly once, when Syncthing starts, before parsing configuration etc
STARTUP_COMPLETED: 'StartupCompleted', // Emitted exactly once, when initialization is complete and Syncthing is ready to start exchanging data with other devices
STATE_CHANGED: 'StateChanged', // Emitted when a folder changes state
FOLDER_ERRORS: 'FolderErrors', // Emitted when a folder has errors preventing a full sync
FOLDER_WATCH_STATE_CHANGED: 'FolderWatchStateChanged', // Watcher routine encountered a new error, or a previous error disappeared after retrying.
FOLDER_SCAN_PROGRESS: 'FolderScanProgress', // Emitted every ScanProgressIntervalS seconds, indicating how far into the scan it is at.
FOLDER_PAUSED: 'FolderPaused', // Emitted when a folder is paused
FOLDER_RESUMED: 'FolderResumed', // Emitted when a folder is resumed

View File

@ -99,6 +99,7 @@ angular.module('syncthing.core')
function useLocale(language, save2Storage) {
if (language) {
$translate.use(language).then(function () {
document.documentElement.setAttribute("lang", language);
if (save2Storage && _localStorage)
_localStorage[_SYNLANG] = language;
});

View File

@ -74,7 +74,6 @@ angular.module('syncthing.core')
cleanupIntervalS: 3600,
simpleKeep: 5,
staggeredMaxAge: 365,
staggeredCleanInterval: 3600,
externalCommand: "",
};
@ -2071,7 +2070,6 @@ angular.module('syncthing.core')
break;
case "staggered":
$scope.currentFolder._guiVersioning.staggeredMaxAge = Math.floor(+currentVersioning.params.maxAge / 86400);
$scope.currentFolder._guiVersioning.staggeredCleanInterval = +currentVersioning.params.cleanInterval;
break;
case "external":
$scope.currentFolder._guiVersioning.externalCommand = currentVersioning.params.command;
@ -2256,7 +2254,6 @@ angular.module('syncthing.core')
break;
case "staggered":
folderCfg.versioning.params.maxAge = '' + (folderCfg._guiVersioning.staggeredMaxAge * 86400);
folderCfg.versioning.params.cleanInterval = '' + folderCfg._guiVersioning.staggeredCleanInterval;
break;
case "external":
folderCfg.versioning.params.command = '' + folderCfg._guiVersioning.externalCommand;
@ -2599,15 +2596,14 @@ angular.module('syncthing.core')
$scope.restoreVersions.filters['start'] = minDate;
$scope.restoreVersions.filters['end'] = maxDate;
var ranges = {
'All time': [minDate, maxDate],
'Today': [moment(), moment()],
'Yesterday': [moment().subtract(1, 'days'), moment().subtract(1, 'days')],
'Last 7 Days': [moment().subtract(6, 'days'), moment()],
'Last 30 Days': [moment().subtract(29, 'days'), moment()],
'This Month': [moment().startOf('month'), moment().endOf('month')],
'Last Month': [moment().subtract(1, 'month').startOf('month'), moment().subtract(1, 'month').endOf('month')]
};
var ranges = {};
ranges[$translate.instant("All Time")] = [minDate, maxDate];
ranges[$translate.instant("Today")] = [moment().startOf('day'), moment()];
ranges[$translate.instant("Yesterday")] = [moment().subtract(1, 'days').startOf('day'), moment().startOf('day')];
ranges[$translate.instant("Last 7 Days")] = [moment().subtract(6, 'days').startOf('day'), moment()];
ranges[$translate.instant("Last 30 Days")] = [moment().subtract(29, 'days').startOf('day'), moment()];
ranges[$translate.instant("This Month")] = [moment().startOf('month'), moment()];
ranges[$translate.instant("Last Month")] = [moment().subtract(1, 'month').startOf('month'), moment().startOf('month')];
// Filter out invalid ranges.
$.each(ranges, function (key, range) {
@ -2628,6 +2624,9 @@ angular.module('syncthing.core')
maxDate: maxDate,
ranges: ranges,
locale: {
applyLabel: $translate.instant("Apply"),
cancelLabel: $translate.instant("Cancel"),
customRangeLabel: $translate.instant("Custom Range"),
format: 'YYYY/MM/DD HH:mm:ss',
}
}).on('apply.daterangepicker', function (ev, picker) {
@ -2924,16 +2923,18 @@ angular.module('syncthing.core')
$scope.docsURL = function (path) {
var url = 'https://docs.syncthing.net';
if (path) {
var hash = path.indexOf('#');
if (hash != -1) {
url += '/' + path.slice(0, hash);
url += '?version=' + $scope.versionBase();
url += path.slice(hash);
} else {
url += '/' + path;
url += '?version=' + $scope.versionBase();
}
if (!path) {
// Undefined or null should become a valid string.
path = '';
}
var hash = path.indexOf('#');
if (hash != -1) {
url += '/' + path.slice(0, hash);
url += '?version=' + $scope.versionBase();
url += path.slice(hash);
} else {
url += '/' + path;
url += '?version=' + $scope.versionBase();
}
return url;
};

View File

@ -87,7 +87,8 @@
</select>
</div>
<div class="form-group" ng-if="currentFolder._guiVersioning.selector=='trashcan' || currentFolder._guiVersioning.selector=='simple'" ng-class="{'has-error': folderEditor.trashcanClean.$invalid && folderEditor.trashcanClean.$dirty}">
<p translate class="help-block">Files are moved to .stversions directory when replaced or deleted by Syncthing.</p>
<p translate class="help-block" ng-if="currentFolder._guiVersioning.selector=='trashcan'">Files are moved to .stversions directory when replaced or deleted by Syncthing.</p>
<p translate class="help-block" ng-if="currentFolder._guiVersioning.selector=='simple'">Files are moved to date stamped versions in a .stversions directory when replaced or deleted by Syncthing.</p>
<label translate for="trashcanClean">Clean out after</label>
<div class="input-group">
<input name="trashcanClean" id="trashcanClean" class="form-control text-right" type="number" ng-model="currentFolder._guiVersioning.trashcanClean" required="" aria-required="true" min="0" />
@ -100,7 +101,6 @@
</p>
</div>
<div class="form-group" ng-if="currentFolder._guiVersioning.selector=='simple'" ng-class="{'has-error': folderEditor.simpleKeep.$invalid && folderEditor.simpleKeep.$dirty}">
<p translate class="help-block">Files are moved to date stamped versions in a .stversions directory when replaced or deleted by Syncthing.</p>
<label translate for="simpleKeep">Keep Versions</label>
<input name="simpleKeep" id="simpleKeep" class="form-control" type="number" ng-model="currentFolder._guiVersioning.simpleKeep" required="" aria-required="true" min="1" />
<p class="help-block">

View File

@ -16,7 +16,7 @@
<div class="panel-body">
<form class="form-horizontal" role="form">
<div ng-repeat="(key, value) in advancedConfig.gui" ng-init="type = inputTypeFor(key, value)" ng-if="type != 'skip'" class="form-group">
<label for="guiInput{{$index}}" class="col-sm-4 control-label">{{key | uncamel}}</label>
<label for="guiInput{{$index}}" class="col-sm-4 control-label">{{key | uncamel}}&nbsp;<a href="{{docsURL('users/config#config-option-gui.')}}{{key | lowercase}}" target="_blank"><span class="fas fa-question-circle"></span></a></label>
<div class="col-sm-8">
<input ng-if="inputTypeFor(key, value) == 'list'" id="guiInput{{$index}}" class="form-control" type="text" ng-model="advancedConfig.gui[key]" ng-list />
<input ng-if="inputTypeFor(key, value) != 'list'" id="guiInput{{$index}}" class="form-control" type="{{inputTypeFor(key, value)}}" ng-model="advancedConfig.gui[key]" />
@ -35,7 +35,7 @@
<div class="panel-body">
<form class="form-horizontal" role="form">
<div ng-repeat="(key, value) in advancedConfig.options" ng-if="inputTypeFor(key, value) != 'skip'" class="form-group">
<label for="optionsInput{{$index}}" class="col-sm-4 control-label">{{key | uncamel}}</label>
<label for="optionsInput{{$index}}" class="col-sm-4 control-label">{{key | uncamel}}&nbsp;<a href="{{docsURL('users/config#config-option-options.')}}{{key | lowercase}}" target="_blank"><span class="fas fa-question-circle"></span></a></label>
<div class="col-sm-8">
<input ng-if="inputTypeFor(key, value) == 'list'" id="optionsInput{{$index}}" class="form-control" type="text" ng-model="advancedConfig.options[key]" ng-list />
<input ng-if="inputTypeFor(key, value) != 'list'" id="optionsInput{{$index}}" class="form-control" type="{{inputTypeFor(key, value)}}" ng-model="advancedConfig.options[key]" />
@ -54,7 +54,7 @@
<div class="panel-body">
<form class="form-horizontal" role="form">
<div ng-repeat="(key, value) in advancedConfig.ldap" ng-if="inputTypeFor(key, value) != 'skip'" class="form-group">
<label for="ldapInput{{$index}}" class="col-sm-4 control-label">{{key | uncamel}}</label>
<label for="ldapInput{{$index}}" class="col-sm-4 control-label">{{key | uncamel}}&nbsp;<a href="{{docsURL('users/config#config-option-ldap.')}}{{key | lowercase}}" target="_blank"><span class="fas fa-question-circle"></span></a></label>
<div class="col-sm-8">
<input ng-if="inputTypeFor(key, value) == 'list'" id="ldapInput{{$index}}" class="form-control" type="text" ng-model="advancedConfig.ldap[key]" ng-list />
<input ng-if="inputTypeFor(key, value) != 'list'" id="ldapInput{{$index}}" class="form-control" type="{{inputTypeFor(key, value)}}" ng-model="advancedConfig.ldap[key]" />
@ -84,7 +84,7 @@
<div class="panel-body">
<form class="form-horizontal" role="form">
<div ng-repeat="(key, value) in folder" ng-if="inputTypeFor(key, value) != 'skip'" class="form-group">
<label for="folder{{folderIndex}}Input{{$index}}" class="col-sm-4 control-label">{{key | uncamel}}</label>
<label for="folder{{folderIndex}}Input{{$index}}" class="col-sm-4 control-label">{{key | uncamel}}&nbsp;<a href="{{docsURL('users/config#config-option-folder.')}}{{key | lowercase}}" target="_blank"><span class="fas fa-question-circle"></span></a></label>
<div class="col-sm-8">
<input ng-if="inputTypeFor(key, value) == 'list'" id="folder{{folderIndex}}Input{{$index}}" class="form-control" type="text" ng-model="folder[key]" ng-list />
<input ng-if="inputTypeFor(key, value) != 'list'" id="folder{{folderIndex}}Input{{$index}}" class="form-control" type="{{inputTypeFor(key, value)}}" ng-model="folder[key]" />
@ -114,7 +114,7 @@
<div class="panel-body">
<form class="form-horizontal" role="form">
<div ng-repeat="(key, value) in device" ng-if="inputTypeFor(key, value) != 'skip'" class="form-group">
<label for="device{{deviceIndex}}Input{{$index}}" class="col-sm-4 control-label">{{key | uncamel}}</label>
<label for="device{{deviceIndex}}Input{{$index}}" class="col-sm-4 control-label">{{key | uncamel}}&nbsp;<a href="{{docsURL('users/config#config-option-device.')}}{{key | lowercase}}" target="_blank"><span class="fas fa-question-circle"></span></a></label>
<div class="col-sm-8">
<input ng-if="inputTypeFor(key, value) == 'list'" id="device{{deviceIndex}}Input{{$index}}" class="form-control" type="text" ng-model="device[key]" ng-list />
<input ng-if="inputTypeFor(key, value) != 'list'" id="device{{deviceIndex}}Input{{$index}}" class="form-control" type="{{inputTypeFor(key, value)}}" ng-model="device[key]" />
@ -142,7 +142,7 @@
<div id="advancedDefaultFolder" class="panel-collapse collapse" role="tabpanel" aria-labelledby="advancedDefaultFolderHeading">
<form class="form-horizontal" role="form">
<div ng-repeat="(key, value) in advancedConfig.defaults.folder" ng-if="inputTypeFor(key, value) != 'skip'" class="form-group">
<label for="advancedDefaultFolderInput{{$index}}" class="col-sm-4 control-label">{{key | uncamel}}</label>
<label for="advancedDefaultFolderInput{{$index}}" class="col-sm-4 control-label">{{key | uncamel}}&nbsp;<a href="{{docsURL('users/config#config-option-folder.')}}{{key | lowercase}}" target="_blank"><span class="fas fa-question-circle"></span></a></label>
<div class="col-sm-8">
<input ng-if="inputTypeFor(key, value) == 'list'" id="advancedDefaultFolderInput{{$index}}" class="form-control" type="text" ng-model="advancedConfig.defaults.folder[key]" ng-list />
<input ng-if="inputTypeFor(key, value) != 'list'" id="advancedDefaultFolderInput{{$index}}" class="form-control" type="{{inputTypeFor(key, value)}}" ng-model="advancedConfig.defaults.folder[key]" />
@ -158,7 +158,7 @@
<div id="advancedDefaultDevice" class="panel-collapse collapse" role="tabpanel" aria-labelledby="advancedDefaultDeviceHeading">
<form class="form-horizontal" role="form">
<div ng-repeat="(key, value) in advancedConfig.defaults.device" ng-if="inputTypeFor(key, value) != 'skip'" class="form-group">
<label for="advancedDefaultDeviceInput{{$index}}" class="col-sm-4 control-label">{{key | uncamel}}</label>
<label for="advancedDefaultDeviceInput{{$index}}" class="col-sm-4 control-label">{{key | uncamel}}&nbsp;<a href="{{docsURL('users/config#config-option-device.')}}{{key | lowercase}}" target="_blank"><span class="fas fa-question-circle"></span></a></label>
<div class="col-sm-8">
<input ng-if="inputTypeFor(key, value) == 'list'" id="advancedDefaultDeviceInput{{$index}}" class="form-control" type="text" ng-model="advancedConfig.defaults.device[key]" ng-list />
<input ng-if="inputTypeFor(key, value) != 'list'" id="advancedDefaultDeviceInput{{$index}}" class="form-control" type="{{inputTypeFor(key, value)}}" ng-model="advancedConfig.defaults.device[key]" />

View File

@ -59,6 +59,8 @@ import (
)
const (
// Default mask excludes these very noisy event types to avoid filling the pipe.
// FIXME: ItemStarted and ItemFinished should be excluded for the same reason.
DefaultEventMask = events.AllEvents &^ events.LocalChangeDetected &^ events.RemoteChangeDetected
DiskEventMask = events.LocalChangeDetected | events.RemoteChangeDetected
EventSubBufferSize = 1000
@ -248,11 +250,11 @@ func (s *service) Serve(ctx context.Context) error {
restMux.HandlerFunc(http.MethodGet, "/rest/db/ignores", s.getDBIgnores) // folder
restMux.HandlerFunc(http.MethodGet, "/rest/db/need", s.getDBNeed) // folder [perpage] [page]
restMux.HandlerFunc(http.MethodGet, "/rest/db/remoteneed", s.getDBRemoteNeed) // device folder [perpage] [page]
restMux.HandlerFunc(http.MethodGet, "/rest/db/localchanged", s.getDBLocalChanged) // folder
restMux.HandlerFunc(http.MethodGet, "/rest/db/localchanged", s.getDBLocalChanged) // folder [perpage] [page]
restMux.HandlerFunc(http.MethodGet, "/rest/db/status", s.getDBStatus) // folder
restMux.HandlerFunc(http.MethodGet, "/rest/db/browse", s.getDBBrowse) // folder [prefix] [dirsonly] [levels]
restMux.HandlerFunc(http.MethodGet, "/rest/folder/versions", s.getFolderVersions) // folder
restMux.HandlerFunc(http.MethodGet, "/rest/folder/errors", s.getFolderErrors) // folder
restMux.HandlerFunc(http.MethodGet, "/rest/folder/errors", s.getFolderErrors) // folder [perpage] [page]
restMux.HandlerFunc(http.MethodGet, "/rest/folder/pullerrors", s.getFolderErrors) // folder (deprecated)
restMux.HandlerFunc(http.MethodGet, "/rest/events", s.getIndexEvents) // [since] [limit] [timeout] [events]
restMux.HandlerFunc(http.MethodGet, "/rest/events/disk", s.getDiskEvents) // [since] [limit] [timeout]
@ -275,7 +277,7 @@ func (s *service) Serve(ctx context.Context) error {
restMux.HandlerFunc(http.MethodGet, "/rest/system/log.txt", s.getSystemLogTxt) // [since]
// The POST handlers
restMux.HandlerFunc(http.MethodPost, "/rest/db/prio", s.postDBPrio) // folder file [perpage] [page]
restMux.HandlerFunc(http.MethodPost, "/rest/db/prio", s.postDBPrio) // folder file
restMux.HandlerFunc(http.MethodPost, "/rest/db/ignores", s.postDBIgnores) // folder
restMux.HandlerFunc(http.MethodPost, "/rest/db/override", s.postDBOverride) // folder
restMux.HandlerFunc(http.MethodPost, "/rest/db/revert", s.postDBRevert) // folder

View File

@ -35,6 +35,7 @@ import (
"github.com/syncthing/syncthing/lib/locations"
"github.com/syncthing/syncthing/lib/logger"
loggermocks "github.com/syncthing/syncthing/lib/logger/mocks"
"github.com/syncthing/syncthing/lib/model"
modelmocks "github.com/syncthing/syncthing/lib/model/mocks"
"github.com/syncthing/syncthing/lib/protocol"
"github.com/syncthing/syncthing/lib/svcutil"
@ -260,7 +261,7 @@ func TestAPIServiceRequests(t *testing.T) {
if err != nil {
t.Fatal(err)
}
defer cancel()
t.Cleanup(cancel)
cases := []httpTestCase{
// /rest/db
@ -298,6 +299,12 @@ func TestAPIServiceRequests(t *testing.T) {
Type: "application/json",
Prefix: "null",
},
{
URL: "/rest/db/status?folder=default",
Code: 200,
Type: "application/json",
Prefix: "",
},
// /rest/stats
{
@ -466,14 +473,17 @@ func TestAPIServiceRequests(t *testing.T) {
}
for _, tc := range cases {
t.Log("Testing", tc.URL, "...")
testHTTPRequest(t, baseURL, tc, testAPIKey)
t.Run(cases[0].URL, func(t *testing.T) {
testHTTPRequest(t, baseURL, tc, testAPIKey)
})
}
}
// testHTTPRequest tries the given test case, comparing the result code,
// content type, and result prefix.
func testHTTPRequest(t *testing.T, baseURL string, tc httpTestCase, apikey string) {
t.Parallel()
timeout := time.Second
if tc.Timeout > 0 {
timeout = tc.Timeout
@ -608,7 +618,7 @@ func startHTTP(cfg config.Wrapper) (string, context.CancelFunc, error) {
}
addrChan := make(chan string)
mockedSummary := &modelmocks.FolderSummaryService{}
mockedSummary.SummaryReturns(map[string]interface{}{"mocked": true}, nil)
mockedSummary.SummaryReturns(new(model.FolderSummary), nil)
// Instantiate the API service
urService := ur.New(cfg, m, connections, false)

View File

@ -29,7 +29,7 @@ import (
const (
OldestHandledVersion = 10
CurrentVersion = 35
CurrentVersion = 36
MaxRescanIntervalS = 365 * 24 * 60 * 60
)

View File

@ -261,8 +261,8 @@ func (f *FolderConfiguration) CheckAvailableSpace(req uint64) error {
if err != nil {
return nil
}
if !checkAvailableSpace(req, f.MinDiskFree, usage) {
return fmt.Errorf("insufficient space in %v %v", fs.Type(), fs.URI())
if err := checkAvailableSpace(req, f.MinDiskFree, usage); err != nil {
return fmt.Errorf("insufficient space in folder %v (%v): %w", f.Description(), fs.URI(), err)
}
return nil
}

View File

@ -27,6 +27,7 @@ import (
// put the newest on top for readability.
var (
migrations = migrationSet{
{36, migrateToConfigV36},
{35, migrateToConfigV35},
{34, migrateToConfigV34},
{33, migrateToConfigV33},
@ -94,6 +95,12 @@ func (m migration) apply(cfg *Configuration) {
cfg.Version = m.targetVersion
}
func migrateToConfigV36(cfg *Configuration) {
for i := range cfg.Folders {
delete(cfg.Folders[i].Versioning.Params, "cleanInterval")
}
}
func migrateToConfigV35(cfg *Configuration) {
for i, fcfg := range cfg.Folders {
params := fcfg.Versioning.Params

View File

@ -83,10 +83,10 @@ func CheckFreeSpace(minFree Size, usage fs.Usage) error {
if minFree.Percentage() {
freePct := (float64(usage.Free) / float64(usage.Total)) * 100
if freePct < val {
return fmt.Errorf("%.1f %% < %v", freePct, minFree)
return fmt.Errorf("current %.2f %% < required %v", freePct, minFree)
}
} else if float64(usage.Free) < val {
return fmt.Errorf("%sB < %v", formatSI(usage.Free), minFree)
return fmt.Errorf("current %sB < required %v", formatSI(usage.Free), minFree)
}
return nil
@ -94,12 +94,12 @@ func CheckFreeSpace(minFree Size, usage fs.Usage) error {
// checkAvailableSpace checks that the free space does not fall below the minimum
// required free space, considering additional required space for a future operation.
func checkAvailableSpace(req uint64, minFree Size, usage fs.Usage) bool {
func checkAvailableSpace(req uint64, minFree Size, usage fs.Usage) error {
if usage.Free < req {
return false
return fmt.Errorf("current %sB < required %sB", formatSI(usage.Free), formatSI(req))
}
usage.Free -= req
return CheckFreeSpace(minFree, usage) == nil
return CheckFreeSpace(minFree, usage)
}
func formatSI(b uint64) string {

View File

@ -159,8 +159,10 @@ func TestCheckAvailableSize(t *testing.T) {
continue
}
usage := fs.Usage{Free: tc.free, Total: tc.total}
if ok := checkAvailableSpace(tc.req, minFree, usage); ok != tc.ok {
t.Errorf("checkAvailableSpace(%v, %v, %v) == %v, expected %v", tc.req, minFree, usage, ok, tc.ok)
err = checkAvailableSpace(tc.req, minFree, usage)
t.Log(err)
if (err == nil) != tc.ok {
t.Errorf("checkAvailableSpace(%v, %v, %v) == %v, expected %v", tc.req, minFree, usage, err, tc.ok)
}
}
}

View File

@ -23,6 +23,7 @@ import (
"github.com/thejerf/suture/v4"
"github.com/syncthing/syncthing/lib/config"
"github.com/syncthing/syncthing/lib/connections/registry"
"github.com/syncthing/syncthing/lib/dialer"
"github.com/syncthing/syncthing/lib/events"
"github.com/syncthing/syncthing/lib/nat"
@ -447,7 +448,7 @@ func withConnectionPair(b interface{ Fatal(...interface{}) }, connUri string, h
natSvc := nat.NewService(deviceId, wcfg)
conns := make(chan internalConn, 1)
fmt.Println("listening", uri)
listenSvc := lf.New(uri, wcfg, tlsCfg, conns, natSvc)
listenSvc := lf.New(uri, wcfg, tlsCfg, conns, natSvc, registry.New())
supervisor.Add(listenSvc)
var addr *url.URL
@ -466,7 +467,8 @@ func withConnectionPair(b interface{ Fatal(...interface{}) }, connUri string, h
if err != nil {
b.Fatal(err)
}
dialer := df.New(cfg.Options, tlsCfg)
// Purposely using a different registry: Don't want to reuse port between dialer and listener on the same device
dialer := df.New(cfg.Options, tlsCfg, registry.New())
// Relays might take some time to register the device, so dial multiple times
fmt.Println("dialing", addr)

View File

@ -41,6 +41,7 @@ func init() {
type quicDialer struct {
commonDialer
registry *registry.Registry
}
func (d *quicDialer) Dial(ctx context.Context, _ protocol.DeviceID, uri *url.URL) (internalConn, error) {
@ -58,7 +59,7 @@ func (d *quicDialer) Dial(ctx context.Context, _ protocol.DeviceID, uri *url.URL
// Given we always pass the connection to quic, it assumes it's a remote connection it never closes it,
// So our wrapper around it needs to close it, but it only needs to close it if it's not the listening connection.
var createdConn net.PacketConn
listenConn := registry.Get(uri.Scheme, packetConnUnspecified)
listenConn := d.registry.Get(uri.Scheme, packetConnUnspecified)
if listenConn != nil {
conn = listenConn.(net.PacketConn)
} else {
@ -96,7 +97,7 @@ func (d *quicDialer) Dial(ctx context.Context, _ protocol.DeviceID, uri *url.URL
type quicDialerFactory struct{}
func (quicDialerFactory) New(opts config.OptionsConfiguration, tlsCfg *tls.Config) genericDialer {
func (quicDialerFactory) New(opts config.OptionsConfiguration, tlsCfg *tls.Config, registry *registry.Registry) genericDialer {
// So the idea is that we should probably try dialing every 20 seconds.
// However it would still be nice if this was adjustable/proportional to ReconnectIntervalS
// But prevent something silly like 1/3 = 0 etc.
@ -104,10 +105,13 @@ func (quicDialerFactory) New(opts config.OptionsConfiguration, tlsCfg *tls.Confi
if quicInterval < 10 {
quicInterval = 10
}
return &quicDialer{commonDialer{
reconnectInterval: time.Duration(quicInterval) * time.Second,
tlsCfg: tlsCfg,
}}
return &quicDialer{
commonDialer: commonDialer{
reconnectInterval: time.Duration(quicInterval) * time.Second,
tlsCfg: tlsCfg,
},
registry: registry,
}
}
func (quicDialerFactory) Priority() int {

View File

@ -40,11 +40,12 @@ type quicListener struct {
onAddressesChangedNotifier
uri *url.URL
cfg config.Wrapper
tlsCfg *tls.Config
conns chan internalConn
factory listenerFactory
uri *url.URL
cfg config.Wrapper
tlsCfg *tls.Config
conns chan internalConn
factory listenerFactory
registry *registry.Registry
address *url.URL
laddr net.Addr
@ -100,8 +101,8 @@ func (t *quicListener) serve(ctx context.Context) error {
go svc.Serve(ctx)
registry.Register(t.uri.Scheme, conn)
defer registry.Unregister(t.uri.Scheme, conn)
t.registry.Register(t.uri.Scheme, conn)
defer t.registry.Unregister(t.uri.Scheme, conn)
listener, err := quic.Listen(conn, t.tlsCfg, quicConfig)
if err != nil {
@ -217,13 +218,14 @@ func (f *quicListenerFactory) Valid(config.Configuration) error {
return nil
}
func (f *quicListenerFactory) New(uri *url.URL, cfg config.Wrapper, tlsCfg *tls.Config, conns chan internalConn, natService *nat.Service) genericListener {
func (f *quicListenerFactory) New(uri *url.URL, cfg config.Wrapper, tlsCfg *tls.Config, conns chan internalConn, natService *nat.Service, registry *registry.Registry) genericListener {
l := &quicListener{
uri: fixupPort(uri, config.DefaultQUICPort),
cfg: cfg,
tlsCfg: tlsCfg,
conns: conns,
factory: f,
uri: fixupPort(uri, config.DefaultQUICPort),
cfg: cfg,
tlsCfg: tlsCfg,
conns: conns,
factory: f,
registry: registry,
}
l.ServiceWithError = svcutil.AsService(l.serve, l.String())
l.nat.Store(stun.NATUnknown)

View File

@ -15,10 +15,6 @@ import (
"github.com/syncthing/syncthing/lib/sync"
)
var (
Default = New()
)
type Registry struct {
mut sync.Mutex
available map[string][]interface{}
@ -85,15 +81,3 @@ func (r *Registry) Get(scheme string, preferred func(interface{}) bool) interfac
}
return best
}
func Register(scheme string, item interface{}) {
Default.Register(scheme, item)
}
func Unregister(scheme string, item interface{}) {
Default.Unregister(scheme, item)
}
func Get(scheme string, preferred func(interface{}) bool) interface{} {
return Default.Get(scheme, preferred)
}

View File

@ -13,6 +13,7 @@ import (
"time"
"github.com/syncthing/syncthing/lib/config"
"github.com/syncthing/syncthing/lib/connections/registry"
"github.com/syncthing/syncthing/lib/dialer"
"github.com/syncthing/syncthing/lib/protocol"
"github.com/syncthing/syncthing/lib/relay/client"
@ -68,7 +69,7 @@ func (d *relayDialer) Dial(ctx context.Context, id protocol.DeviceID, uri *url.U
type relayDialerFactory struct{}
func (relayDialerFactory) New(opts config.OptionsConfiguration, tlsCfg *tls.Config) genericDialer {
func (relayDialerFactory) New(opts config.OptionsConfiguration, tlsCfg *tls.Config, _ *registry.Registry) genericDialer {
return &relayDialer{commonDialer{
trafficClass: opts.TrafficClass,
reconnectInterval: time.Duration(opts.RelayReconnectIntervalM) * time.Minute,

View File

@ -16,6 +16,7 @@ import (
"github.com/pkg/errors"
"github.com/syncthing/syncthing/lib/config"
"github.com/syncthing/syncthing/lib/connections/registry"
"github.com/syncthing/syncthing/lib/dialer"
"github.com/syncthing/syncthing/lib/nat"
"github.com/syncthing/syncthing/lib/relay/client"
@ -177,7 +178,7 @@ func (t *relayListener) NATType() string {
type relayListenerFactory struct{}
func (f *relayListenerFactory) New(uri *url.URL, cfg config.Wrapper, tlsCfg *tls.Config, conns chan internalConn, natService *nat.Service) genericListener {
func (f *relayListenerFactory) New(uri *url.URL, cfg config.Wrapper, tlsCfg *tls.Config, conns chan internalConn, natService *nat.Service, _ *registry.Registry) genericListener {
t := &relayListener{
uri: uri,
cfg: cfg,

View File

@ -12,6 +12,7 @@ package connections
import (
"context"
"crypto/tls"
"crypto/x509"
"fmt"
"math"
"net"
@ -22,6 +23,7 @@ import (
"time"
"github.com/syncthing/syncthing/lib/config"
"github.com/syncthing/syncthing/lib/connections/registry"
"github.com/syncthing/syncthing/lib/discover"
"github.com/syncthing/syncthing/lib/events"
"github.com/syncthing/syncthing/lib/nat"
@ -55,6 +57,13 @@ var (
errDisabled = fmt.Errorf("%w: disabled by configuration", errUnsupported)
errDeprecated = fmt.Errorf("%w: deprecated", errUnsupported)
errNotInBuild = fmt.Errorf("%w: disabled at build time", errUnsupported)
// Various reasons to reject a connection
errNetworkNotAllowed = errors.New("network not allowed")
errDeviceAlreadyConnected = errors.New("already connected to this device")
errDeviceIgnored = errors.New("device is ignored")
errConnLimitReached = errors.New("connection limit reached")
errDevicePaused = errors.New("device is paused")
)
const (
@ -128,6 +137,14 @@ type ConnectionStatusEntry struct {
Error *string `json:"error"`
}
type connWithHello struct {
c internalConn
hello protocol.Hello
err error
remoteID protocol.DeviceID
remoteCert *x509.Certificate
}
type service struct {
*suture.Supervisor
connectionStatusHandler
@ -138,11 +155,13 @@ type service struct {
tlsCfg *tls.Config
discoverer discover.Finder
conns chan internalConn
hellos chan *connWithHello
bepProtocolName string
tlsDefaultCommonName string
limiter *limiter
natService *nat.Service
evLogger events.Logger
registry *registry.Registry
dialNow chan struct{}
dialNowDevices map[protocol.DeviceID]struct{}
@ -153,7 +172,7 @@ type service struct {
listenerTokens map[string]suture.ServiceToken
}
func NewService(cfg config.Wrapper, myID protocol.DeviceID, mdl Model, tlsCfg *tls.Config, discoverer discover.Finder, bepProtocolName string, tlsDefaultCommonName string, evLogger events.Logger) Service {
func NewService(cfg config.Wrapper, myID protocol.DeviceID, mdl Model, tlsCfg *tls.Config, discoverer discover.Finder, bepProtocolName string, tlsDefaultCommonName string, evLogger events.Logger, registry *registry.Registry) Service {
spec := svcutil.SpecWithInfoLogger(l)
service := &service{
Supervisor: suture.New("connections.Service", spec),
@ -170,6 +189,7 @@ func NewService(cfg config.Wrapper, myID protocol.DeviceID, mdl Model, tlsCfg *t
limiter: newLimiter(myID, cfg),
natService: nat.NewService(myID, cfg),
evLogger: evLogger,
registry: registry,
dialNowDevicesMut: sync.NewMutex(),
dialNow: make(chan struct{}, 1),
@ -194,7 +214,8 @@ func NewService(cfg config.Wrapper, myID protocol.DeviceID, mdl Model, tlsCfg *t
// incoming or outgoing.
service.Add(svcutil.AsService(service.connect, fmt.Sprintf("%s/connect", service)))
service.Add(svcutil.AsService(service.handle, fmt.Sprintf("%s/handle", service)))
service.Add(svcutil.AsService(service.handleConns, fmt.Sprintf("%s/handleConns", service)))
service.Add(svcutil.AsService(service.handleHellos, fmt.Sprintf("%s/handleHellos", service)))
service.Add(service.natService)
svcutil.OnSupervisorDone(service.Supervisor, func() {
@ -205,7 +226,7 @@ func NewService(cfg config.Wrapper, myID protocol.DeviceID, mdl Model, tlsCfg *t
return service
}
func (s *service) handle(ctx context.Context) error {
func (s *service) handleConns(ctx context.Context) error {
var c internalConn
for {
select {
@ -245,8 +266,84 @@ func (s *service) handle(ctx context.Context) error {
continue
}
if err := s.connectionCheckEarly(remoteID, c); err != nil {
l.Infof("Connection from %s at %s (%s) rejected: %v", remoteID, c.RemoteAddr(), c.Type(), err)
c.Close()
continue
}
_ = c.SetDeadline(time.Now().Add(20 * time.Second))
hello, err := protocol.ExchangeHello(c, s.model.GetHello(remoteID))
go func() {
hello, err := protocol.ExchangeHello(c, s.model.GetHello(remoteID))
select {
case s.hellos <- &connWithHello{c, hello, err, remoteID, remoteCert}:
case <-ctx.Done():
}
}()
}
}
func (s *service) connectionCheckEarly(remoteID protocol.DeviceID, c internalConn) error {
if s.cfg.IgnoredDevice(remoteID) {
return errDeviceIgnored
}
if max := s.cfg.Options().ConnectionLimitMax; max > 0 && s.model.NumConnections() >= max {
// We're not allowed to accept any more connections.
return errConnLimitReached
}
cfg, ok := s.cfg.Device(remoteID)
if !ok {
// We do go ahead exchanging hello messages to get information about the device.
return nil
}
if cfg.Paused {
return errDevicePaused
}
if len(cfg.AllowedNetworks) > 0 && !IsAllowedNetwork(c.RemoteAddr().String(), cfg.AllowedNetworks) {
// The connection is not from an allowed network.
return errNetworkNotAllowed
}
// Lower priority is better, just like nice etc.
if ct, ok := s.model.Connection(remoteID); ok {
if ct.Priority() > c.priority || time.Since(ct.Statistics().StartedAt) > minConnectionReplaceAge {
l.Debugf("Switching connections %s (existing: %s new: %s)", remoteID, ct, c)
} else {
// We should not already be connected to the other party. TODO: This
// could use some better handling. If the old connection is dead but
// hasn't timed out yet we may want to drop *that* connection and keep
// this one. But in case we are two devices connecting to each other
// in parallel we don't want to do that or we end up with no
// connections still established...
return errDeviceAlreadyConnected
}
}
return nil
}
func (s *service) handleHellos(ctx context.Context) error {
var c internalConn
var hello protocol.Hello
var err error
var remoteID protocol.DeviceID
var remoteCert *x509.Certificate
for {
select {
case <-ctx.Done():
return ctx.Err()
case withHello := <-s.hellos:
c = withHello.c
hello = withHello.hello
err = withHello.err
remoteID = withHello.remoteID
remoteCert = withHello.remoteCert
}
if err != nil {
if protocol.IsVersionMismatch(err) {
// The error will be a relatively user friendly description
@ -279,25 +376,6 @@ func (s *service) handle(ctx context.Context) error {
continue
}
// If we have a relay connection, and the new incoming connection is
// not a relay connection, we should drop that, and prefer this one.
ct, connected := s.model.Connection(remoteID)
// Lower priority is better, just like nice etc.
if connected && (ct.Priority() > c.priority || time.Since(ct.Statistics().StartedAt) > minConnectionReplaceAge) {
l.Debugf("Switching connections %s (existing: %s new: %s)", remoteID, ct, c)
} else if connected {
// We should not already be connected to the other party. TODO: This
// could use some better handling. If the old connection is dead but
// hasn't timed out yet we may want to drop *that* connection and keep
// this one. But in case we are two devices connecting to each other
// in parallel we don't want to do that or we end up with no
// connections still established...
l.Infof("Connected to already connected device %s (existing: %s new: %s)", remoteID, ct, c)
c.Close()
continue
}
deviceCfg, ok := s.cfg.Device(remoteID)
if !ok {
l.Infof("Device %s removed from config during connection attempt at %s", remoteID, c)
@ -346,7 +424,6 @@ func (s *service) handle(ctx context.Context) error {
continue
}
}
func (s *service) connect(ctx context.Context) error {
// Map of when to earliest dial each given device + address again
nextDialAt := make(nextDialRegistry)
@ -581,7 +658,7 @@ func (s *service) resolveDialTargets(ctx context.Context, now time.Time, cfg con
continue
}
dialer := dialerFactory.New(s.cfg.Options(), s.tlsCfg)
dialer := dialerFactory.New(s.cfg.Options(), s.tlsCfg, s.registry)
nextDialAt.set(deviceID, addr, now.Add(dialer.RedialFrequency()))
// For LAN addresses, increase the priority so that we
@ -681,7 +758,7 @@ func (s *service) createListener(factory listenerFactory, uri *url.URL) bool {
l.Debugln("Starting listener", uri)
listener := factory.New(uri, s.cfg, s.tlsCfg, s.conns, s.natService)
listener := factory.New(uri, s.cfg, s.tlsCfg, s.conns, s.natService, s.registry)
listener.OnAddressesChanged(s.logListenAddressesChangedEvent)
// Retrying a listener many times in rapid succession is unlikely to help,
@ -882,7 +959,7 @@ func (s *connectionStatusHandler) ConnectionStatus() map[string]ConnectionStatus
}
func (s *connectionStatusHandler) setConnectionStatus(address string, err error) {
if errors.Cause(err) == context.Canceled {
if errors.Is(err, context.Canceled) {
return
}

View File

@ -16,6 +16,7 @@ import (
"time"
"github.com/syncthing/syncthing/lib/config"
"github.com/syncthing/syncthing/lib/connections/registry"
"github.com/syncthing/syncthing/lib/nat"
"github.com/syncthing/syncthing/lib/protocol"
"github.com/syncthing/syncthing/lib/stats"
@ -139,7 +140,7 @@ func (c internalConn) String() string {
}
type dialerFactory interface {
New(config.OptionsConfiguration, *tls.Config) genericDialer
New(config.OptionsConfiguration, *tls.Config, *registry.Registry) genericDialer
Priority() int
AlwaysWAN() bool
Valid(config.Configuration) error
@ -162,7 +163,7 @@ type genericDialer interface {
}
type listenerFactory interface {
New(*url.URL, config.Wrapper, *tls.Config, chan internalConn, *nat.Service) genericListener
New(*url.URL, config.Wrapper, *tls.Config, chan internalConn, *nat.Service, *registry.Registry) genericListener
Valid(config.Configuration) error
}

View File

@ -13,6 +13,7 @@ import (
"time"
"github.com/syncthing/syncthing/lib/config"
"github.com/syncthing/syncthing/lib/connections/registry"
"github.com/syncthing/syncthing/lib/dialer"
"github.com/syncthing/syncthing/lib/protocol"
)
@ -28,6 +29,7 @@ func init() {
type tcpDialer struct {
commonDialer
registry *registry.Registry
}
func (d *tcpDialer) Dial(ctx context.Context, _ protocol.DeviceID, uri *url.URL) (internalConn, error) {
@ -35,7 +37,7 @@ func (d *tcpDialer) Dial(ctx context.Context, _ protocol.DeviceID, uri *url.URL)
timeoutCtx, cancel := context.WithTimeout(ctx, 10*time.Second)
defer cancel()
conn, err := dialer.DialContextReusePort(timeoutCtx, uri.Scheme, uri.Host)
conn, err := dialer.DialContextReusePortFunc(d.registry)(timeoutCtx, uri.Scheme, uri.Host)
if err != nil {
return internalConn{}, err
}
@ -62,12 +64,15 @@ func (d *tcpDialer) Dial(ctx context.Context, _ protocol.DeviceID, uri *url.URL)
type tcpDialerFactory struct{}
func (tcpDialerFactory) New(opts config.OptionsConfiguration, tlsCfg *tls.Config) genericDialer {
return &tcpDialer{commonDialer{
trafficClass: opts.TrafficClass,
reconnectInterval: time.Duration(opts.ReconnectIntervalS) * time.Second,
tlsCfg: tlsCfg,
}}
func (tcpDialerFactory) New(opts config.OptionsConfiguration, tlsCfg *tls.Config, registry *registry.Registry) genericDialer {
return &tcpDialer{
commonDialer: commonDialer{
trafficClass: opts.TrafficClass,
reconnectInterval: time.Duration(opts.ReconnectIntervalS) * time.Second,
tlsCfg: tlsCfg,
},
registry: registry,
}
}
func (tcpDialerFactory) Priority() int {

View File

@ -32,11 +32,12 @@ type tcpListener struct {
svcutil.ServiceWithError
onAddressesChangedNotifier
uri *url.URL
cfg config.Wrapper
tlsCfg *tls.Config
conns chan internalConn
factory listenerFactory
uri *url.URL
cfg config.Wrapper
tlsCfg *tls.Config
conns chan internalConn
factory listenerFactory
registry *registry.Registry
natService *nat.Service
mapping *nat.Mapping
@ -69,8 +70,8 @@ func (t *tcpListener) serve(ctx context.Context) error {
t.notifyAddressesChanged(t)
defer t.clearAddresses(t)
registry.Register(t.uri.Scheme, tcaddr)
defer registry.Unregister(t.uri.Scheme, tcaddr)
t.registry.Register(t.uri.Scheme, tcaddr)
defer t.registry.Unregister(t.uri.Scheme, tcaddr)
l.Infof("TCP listener (%v) starting", tcaddr)
defer l.Infof("TCP listener (%v) shutting down", tcaddr)
@ -213,7 +214,7 @@ func (t *tcpListener) NATType() string {
type tcpListenerFactory struct{}
func (f *tcpListenerFactory) New(uri *url.URL, cfg config.Wrapper, tlsCfg *tls.Config, conns chan internalConn, natService *nat.Service) genericListener {
func (f *tcpListenerFactory) New(uri *url.URL, cfg config.Wrapper, tlsCfg *tls.Config, conns chan internalConn, natService *nat.Service, registry *registry.Registry) genericListener {
l := &tcpListener{
uri: fixupPort(uri, config.DefaultTCPPort),
cfg: cfg,
@ -221,6 +222,7 @@ func (f *tcpListenerFactory) New(uri *url.URL, cfg config.Wrapper, tlsCfg *tls.C
conns: conns,
natService: natService,
factory: f,
registry: registry,
}
l.ServiceWithError = svcutil.AsService(l.serve, l.String())
return l

View File

@ -133,23 +133,13 @@ func OpenMemory() Backend {
return OpenLevelDBMemory()
}
type errClosed struct{}
var (
errClosed = errors.New("database is closed")
errNotFound = errors.New("key not found")
)
func (*errClosed) Error() string { return "database is closed" }
type errNotFound struct{}
func (*errNotFound) Error() string { return "key not found" }
func IsClosed(err error) bool {
e := &errClosed{}
return errors.As(err, &e)
}
func IsNotFound(err error) bool {
e := &errNotFound{}
return errors.As(err, &e)
}
func IsClosed(err error) bool { return errors.Is(err, errClosed) }
func IsNotFound(err error) bool { return errors.Is(err, errNotFound) }
// releaser manages counting on top of a waitgroup
type releaser struct {
@ -183,7 +173,7 @@ func (cg *closeWaitGroup) Add(i int) error {
cg.closeMut.RLock()
defer cg.closeMut.RUnlock()
if cg.closed {
return &errClosed{}
return errClosed
}
cg.WaitGroup.Add(i)
return nil

View File

@ -223,11 +223,11 @@ func (it *leveldbIterator) Error() error {
// wrapLeveldbErr wraps errors so that the backend package can recognize them
func wrapLeveldbErr(err error) error {
if err == leveldb.ErrClosed {
return &errClosed{}
}
if err == leveldb.ErrNotFound {
return &errNotFound{}
switch err {
case leveldb.ErrClosed:
return errClosed
case leveldb.ErrNotFound:
return errNotFound
}
return err
}

View File

@ -133,13 +133,13 @@ var (
update0to3Folder = "UpdateSchema0to3"
invalid = "invalid"
slashPrefixed = "/notgood"
haveUpdate0to3 map[protocol.DeviceID]fileList
haveUpdate0to3 map[protocol.DeviceID][]protocol.FileInfo
)
func init() {
remoteDevice0, _ = protocol.DeviceIDFromString("AIR6LPZ-7K4PTTV-UXQSMUU-CPQ5YWH-OEDFIIQ-JUG777G-2YQXXR5-YD6AWQR")
remoteDevice1, _ = protocol.DeviceIDFromString("I6KAH76-66SLLLB-5PFXSOA-UFJCDZC-YAOMLEK-CP2GB32-BV5RQST-3PSROAU")
haveUpdate0to3 = map[protocol.DeviceID]fileList{
haveUpdate0to3 = map[protocol.DeviceID][]protocol.FileInfo{
protocol.LocalDeviceID: {
protocol.FileInfo{Name: "a", Version: protocol.Vector{Counters: []protocol.Counter{{ID: myID, Value: 1000}}}, Blocks: genBlocks(1)},
protocol.FileInfo{Name: slashPrefixed, Version: protocol.Vector{Counters: []protocol.Counter{{ID: myID, Value: 1000}}}, Blocks: genBlocks(1)},

View File

@ -512,17 +512,3 @@ func (fv FileVersion) copy() FileVersion {
n.InvalidDevices = append([][]byte{}, fv.InvalidDevices...)
return n
}
type fileList []protocol.FileInfo
func (fl fileList) Len() int {
return len(fl)
}
func (fl fileList) Swap(a, b int) {
fl[a], fl[b] = fl[b], fl[a]
}
func (fl fileList) Less(a, b int) bool {
return fl[a].Name < fl[b].Name
}

View File

@ -104,32 +104,34 @@ func DialContext(ctx context.Context, network, addr string) (net.Conn, error) {
// DialContextReusePort tries dialing via proxy if a proxy is configured, and falls back to
// a direct connection reusing the port from the connections registry, if no proxy is defined, or connecting via proxy
// fails. It also in parallel dials without reusing the port, just in case reusing the port affects routing decisions badly.
func DialContextReusePort(ctx context.Context, network, addr string) (net.Conn, error) {
// If proxy is configured, there is no point trying to reuse listen addresses.
if proxy.FromEnvironment() != proxy.Direct {
return DialContext(ctx, network, addr)
}
func DialContextReusePortFunc(registry *registry.Registry) func(ctx context.Context, network, addr string) (net.Conn, error) {
return func(ctx context.Context, network, addr string) (net.Conn, error) {
// If proxy is configured, there is no point trying to reuse listen addresses.
if proxy.FromEnvironment() != proxy.Direct {
return DialContext(ctx, network, addr)
}
localAddrInterface := registry.Get(network, func(addr interface{}) bool {
return addr.(*net.TCPAddr).IP.IsUnspecified()
})
if localAddrInterface == nil {
// Nothing listening, nothing to reuse.
return DialContext(ctx, network, addr)
}
localAddrInterface := registry.Get(network, func(addr interface{}) bool {
return addr.(*net.TCPAddr).IP.IsUnspecified()
})
if localAddrInterface == nil {
// Nothing listening, nothing to reuse.
return DialContext(ctx, network, addr)
}
laddr, ok := localAddrInterface.(*net.TCPAddr)
if !ok {
return nil, errUnexpectedInterfaceType
}
laddr, ok := localAddrInterface.(*net.TCPAddr)
if !ok {
return nil, errUnexpectedInterfaceType
}
// Dial twice, once reusing the listen address, another time not reusing it, just in case reusing the address
// influences routing and we fail to reach our destination.
dialer := net.Dialer{
Control: ReusePortControl,
LocalAddr: laddr,
// Dial twice, once reusing the listen address, another time not reusing it, just in case reusing the address
// influences routing and we fail to reach our destination.
dialer := net.Dialer{
Control: ReusePortControl,
LocalAddr: laddr,
}
return dialTwicePreferFirst(ctx, dialer.DialContext, (&net.Dialer{}).DialContext, "reuse", "non-reuse", network, addr)
}
return dialTwicePreferFirst(ctx, dialer.DialContext, (&net.Dialer{}).DialContext, "reuse", "non-reuse", network, addr)
}
type dialFunc func(ctx context.Context, network, address string) (net.Conn, error)

View File

@ -14,6 +14,7 @@ import (
"time"
"github.com/syncthing/syncthing/lib/config"
"github.com/syncthing/syncthing/lib/connections/registry"
"github.com/syncthing/syncthing/lib/events"
"github.com/syncthing/syncthing/lib/protocol"
)
@ -23,7 +24,7 @@ func setupCache() *manager {
cfg.Options.LocalAnnEnabled = false
cfg.Options.GlobalAnnEnabled = false
return NewManager(protocol.LocalDeviceID, config.Wrap("", cfg, protocol.LocalDeviceID, events.NoopLogger), tls.Certificate{}, events.NoopLogger, nil).(*manager)
return NewManager(protocol.LocalDeviceID, config.Wrap("", cfg, protocol.LocalDeviceID, events.NoopLogger), tls.Certificate{}, events.NoopLogger, nil, registry.New()).(*manager)
}
func TestCacheUnique(t *testing.T) {

View File

@ -14,12 +14,14 @@ import (
"errors"
"fmt"
"io"
"net"
"net/http"
"net/url"
"strconv"
stdsync "sync"
"time"
"github.com/syncthing/syncthing/lib/connections/registry"
"github.com/syncthing/syncthing/lib/dialer"
"github.com/syncthing/syncthing/lib/events"
"github.com/syncthing/syncthing/lib/protocol"
@ -71,7 +73,7 @@ func (e *lookupError) CacheFor() time.Duration {
return e.cacheFor
}
func NewGlobal(server string, cert tls.Certificate, addrList AddressLister, evLogger events.Logger) (FinderService, error) {
func NewGlobal(server string, cert tls.Certificate, addrList AddressLister, evLogger events.Logger, registry *registry.Registry) (FinderService, error) {
server, opts, err := parseOptions(server)
if err != nil {
return nil, err
@ -88,10 +90,16 @@ func NewGlobal(server string, cert tls.Certificate, addrList AddressLister, evLo
// The http.Client used for announcements. It needs to have our
// certificate to prove our identity, and may or may not verify the server
// certificate depending on the insecure setting.
var dialContext func(ctx context.Context, network, addr string) (net.Conn, error)
if registry != nil {
dialContext = dialer.DialContextReusePortFunc(registry)
} else {
dialContext = dialer.DialContext
}
var announceClient httpClient = &contextClient{&http.Client{
Timeout: requestTimeout,
Transport: &http.Transport{
DialContext: dialer.DialContextReusePort,
DialContext: dialContext,
Proxy: http.ProxyFromEnvironment,
TLSClientConfig: &tls.Config{
InsecureSkipVerify: opts.insecure,
@ -420,26 +428,18 @@ type contextClient struct {
}
func (c *contextClient) Get(ctx context.Context, url string) (*http.Response, error) {
// For <go1.13 compatibility. Use the following commented line once that
// isn't required anymore.
// req, err := http.NewRequestWithContext(ctx, "GET", url, nil)
req, err := http.NewRequest("GET", url, nil)
req, err := http.NewRequestWithContext(ctx, "GET", url, nil)
if err != nil {
return nil, err
}
req.Cancel = ctx.Done()
return c.Client.Do(req)
}
func (c *contextClient) Post(ctx context.Context, url, ctype string, data io.Reader) (*http.Response, error) {
// For <go1.13 compatibility. Use the following commented line once that
// isn't required anymore.
// req, err := http.NewRequestWithContext(ctx, "POST", url, data)
req, err := http.NewRequest("POST", url, data)
req, err := http.NewRequestWithContext(ctx, "POST", url, data)
if err != nil {
return nil, err
}
req.Cancel = ctx.Done()
req.Header.Set("Content-Type", ctype)
return c.Client.Do(req)
}

View File

@ -16,6 +16,7 @@ import (
"testing"
"time"
"github.com/syncthing/syncthing/lib/connections/registry"
"github.com/syncthing/syncthing/lib/events"
"github.com/syncthing/syncthing/lib/protocol"
"github.com/syncthing/syncthing/lib/tlsutil"
@ -56,15 +57,17 @@ func TestGlobalOverHTTP(t *testing.T) {
// is only allowed in combination with the "insecure" and "noannounce"
// parameters.
if _, err := NewGlobal("http://192.0.2.42/", tls.Certificate{}, nil, events.NoopLogger); err == nil {
registry := registry.New()
if _, err := NewGlobal("http://192.0.2.42/", tls.Certificate{}, nil, events.NoopLogger, registry); err == nil {
t.Fatal("http is not allowed without insecure and noannounce")
}
if _, err := NewGlobal("http://192.0.2.42/?insecure", tls.Certificate{}, nil, events.NoopLogger); err == nil {
if _, err := NewGlobal("http://192.0.2.42/?insecure", tls.Certificate{}, nil, events.NoopLogger, registry); err == nil {
t.Fatal("http is not allowed without noannounce")
}
if _, err := NewGlobal("http://192.0.2.42/?noannounce", tls.Certificate{}, nil, events.NoopLogger); err == nil {
if _, err := NewGlobal("http://192.0.2.42/?noannounce", tls.Certificate{}, nil, events.NoopLogger, registry); err == nil {
t.Fatal("http is not allowed without insecure")
}
@ -185,7 +188,7 @@ func TestGlobalAnnounce(t *testing.T) {
go func() { _ = http.Serve(list, mux) }()
url := "https://" + list.Addr().String() + "?insecure"
disco, err := NewGlobal(url, cert, new(fakeAddressLister), events.NoopLogger)
disco, err := NewGlobal(url, cert, new(fakeAddressLister), events.NoopLogger, registry.New())
if err != nil {
t.Fatal(err)
}
@ -210,7 +213,7 @@ func TestGlobalAnnounce(t *testing.T) {
}
func testLookup(url string) ([]string, error) {
disco, err := NewGlobal(url, tls.Certificate{}, nil, events.NoopLogger)
disco, err := NewGlobal(url, tls.Certificate{}, nil, events.NoopLogger, registry.New())
if err != nil {
return nil, err
}

View File

@ -19,6 +19,7 @@ import (
"github.com/thejerf/suture/v4"
"github.com/syncthing/syncthing/lib/config"
"github.com/syncthing/syncthing/lib/connections/registry"
"github.com/syncthing/syncthing/lib/events"
"github.com/syncthing/syncthing/lib/protocol"
"github.com/syncthing/syncthing/lib/svcutil"
@ -44,12 +45,13 @@ type manager struct {
cert tls.Certificate
evLogger events.Logger
addressLister AddressLister
registry *registry.Registry
finders map[string]cachedFinder
mut sync.RWMutex
}
func NewManager(myID protocol.DeviceID, cfg config.Wrapper, cert tls.Certificate, evLogger events.Logger, lister AddressLister) Manager {
func NewManager(myID protocol.DeviceID, cfg config.Wrapper, cert tls.Certificate, evLogger events.Logger, lister AddressLister, registry *registry.Registry) Manager {
m := &manager{
Supervisor: suture.New("discover.Manager", svcutil.SpecWithDebugLogger(l)),
myID: myID,
@ -57,6 +59,7 @@ func NewManager(myID protocol.DeviceID, cfg config.Wrapper, cert tls.Certificate
cert: cert,
evLogger: evLogger,
addressLister: lister,
registry: registry,
finders: make(map[string]cachedFinder),
mut: sync.NewRWMutex(),
@ -257,7 +260,7 @@ func (m *manager) CommitConfiguration(_, to config.Configuration) (handled bool)
if _, ok := m.finders[identity]; ok {
continue
}
gd, err := NewGlobal(srv, m.cert, m.addressLister, m.evLogger)
gd, err := NewGlobal(srv, m.cert, m.addressLister, m.evLogger, m.registry)
if err != nil {
l.Warnln("Global discovery:", err)
continue

View File

@ -12,7 +12,7 @@ package fs
import "github.com/syncthing/notify"
const (
subEventMask = notify.Create | notify.FileModified | notify.FileRenameFrom | notify.FileDelete | notify.FileRenameTo
subEventMask = notify.Create | notify.FileModified | notify.FileRenameFrom | notify.FileDelete | notify.FileRenameTo | notify.FileNoFollow
permEventMask = notify.FileAttrib
rmEventMask = notify.FileDelete | notify.FileRenameFrom
)

View File

@ -18,4 +18,7 @@ const (
subEventMask = notify.NoteDelete | notify.NoteWrite | notify.NoteRename | notify.Create | notify.NoteAttrib | notify.NoteExtend
permEventMask = 0
rmEventMask = notify.NoteDelete | notify.NoteRename
// WatchKqueue indicates if kqueue is used for filesystem watching
WatchKqueue = true
)

View File

@ -0,0 +1,13 @@
// Copyright (C) 2022 The Syncthing Authors.
//
// This Source Code Form is subject to the terms of the Mozilla Public
// License, v. 2.0. If a copy of the MPL was not distributed with this file,
// You can obtain one at http://mozilla.org/MPL/2.0/.
//go:build !dragonfly && !freebsd && !netbsd && !openbsd
// +build !dragonfly,!freebsd,!netbsd,!openbsd
package fs
// WatchKqueue indicates if kqueue is used for filesystem watching
const WatchKqueue = false

View File

@ -34,6 +34,9 @@ import (
"github.com/syncthing/syncthing/lib/watchaggregator"
)
// Arbitrary limit that triggers a warning on kqueue systems
const kqueueItemCountThreshold = 10000
type folder struct {
stateTracker
config.FolderConfiguration
@ -81,6 +84,8 @@ type folder struct {
puller puller
versioner versioner.Versioner
warnedKqueue bool
}
type syncRequest struct {
@ -329,7 +334,7 @@ func (f *folder) getHealthErrorWithoutIgnores() error {
dbPath := locations.Get(locations.Database)
if usage, err := fs.NewFilesystem(fs.FilesystemTypeBasic, dbPath).Usage("."); err == nil {
if err = config.CheckFreeSpace(f.model.cfg.Options().MinHomeDiskFree, usage); err != nil {
return errors.Wrapf(err, "insufficient space on disk for database (%v)", dbPath)
return fmt.Errorf("insufficient space on disk for database (%v): %w", dbPath, err)
}
}
@ -382,7 +387,6 @@ func (f *folder) pull() (success bool, err error) {
l.Debugln("Skipping pull of", f.Description(), "due to folder error:", err)
return false, err
}
f.setError(nil)
// Send only folder doesn't do any io, it only checks for out-of-sync
// items that differ in metadata and updates those.
@ -409,6 +413,7 @@ func (f *folder) pull() (success bool, err error) {
l.Debugln("Skipping pull of", f.Description(), "due to folder error:", err)
return false, err
}
f.setError(nil)
success, err = f.puller.pull()
@ -431,10 +436,6 @@ func (f *folder) scanSubdirs(subDirs []string) error {
err := f.getHealthErrorAndLoadIgnores()
if err != nil {
// If there is a health error we set it as the folder error. We do not
// clear the folder error if there is no health error, as there might be
// an *other* folder error (failed to load ignores, for example). Hence
// we do not use the CheckHealth() convenience function here.
return err
}
f.setError(nil)
@ -984,6 +985,19 @@ func (f *folder) monitorWatch(ctx context.Context) {
warnedOutside := false
var lastWatch time.Time
pause := time.Minute
// Subscribe to folder summaries only on kqueue systems, to warn about potential high resource usage
var summarySub events.Subscription
var summaryChan <-chan events.Event
if fs.WatchKqueue && !f.warnedKqueue {
summarySub = f.evLogger.Subscribe(events.FolderCompletion)
summaryChan = summarySub.C()
}
defer func() {
aggrCancel() // aggrCancel might e re-assigned -> call within closure
if summaryChan != nil {
summarySub.Unsubscribe()
}
}()
for {
select {
case <-failTimer.C:
@ -1028,6 +1042,15 @@ func (f *folder) monitorWatch(ctx context.Context) {
aggrCancel()
errChan = nil
aggrCtx, aggrCancel = context.WithCancel(ctx)
case ev := <-summaryChan:
if data, ok := ev.Data.(FolderSummaryEventData); !ok {
f.evLogger.Log(events.Failure, "Unexpected type of folder-summary event in folder.monitorWatch")
} else if data.Summary.LocalTotalItems > kqueueItemCountThreshold {
f.warnedKqueue = true
summarySub.Unsubscribe()
summaryChan = nil
l.Warnf("Filesystem watching (kqueue) is enabled on %v with a lot of files/directories, and that requires a lot of resources and might slow down your system significantly", f.Description())
}
case <-ctx.Done():
return
}
@ -1042,7 +1065,7 @@ func (f *folder) setWatchError(err error, nextTryIn time.Duration) {
f.watchErr = err
f.watchMut.Unlock()
if err != prevErr {
data := map[string]interface{}{
data := map[string]string{
"folder": f.ID,
}
if prevErr != nil {

View File

@ -1849,7 +1849,7 @@ func (f *sendReceiveFolder) moveForConflict(name, lastModBy string, scanChan cha
}
func (f *sendReceiveFolder) newPullError(path string, err error) {
if errors.Cause(err) == f.ctx.Err() {
if errors.Is(err, f.ctx.Err()) {
// Error because the folder stopped - no point logging/tracking
return
}

View File

@ -29,7 +29,7 @@ const maxDurationSinceLastEventReq = time.Minute
type FolderSummaryService interface {
suture.Service
Summary(folder string) (map[string]interface{}, error)
Summary(folder string) (*FolderSummary, error)
OnEventRequest()
}
@ -76,8 +76,58 @@ func (c *folderSummaryService) String() string {
return fmt.Sprintf("FolderSummaryService@%p", c)
}
func (c *folderSummaryService) Summary(folder string) (map[string]interface{}, error) {
var res = make(map[string]interface{})
// FolderSummary replaces the previously used map[string]interface{}, and needs
// to keep the structure/naming for api backwards compatibility
type FolderSummary struct {
Errors int `json:"errors"`
PullErrors int `json:"pullErrors"` // deprecated
Invalid string `json:"invalid"` // deprecated
GlobalFiles int `json:"globalFiles"`
GlobalDirectories int `json:"globalDirectories"`
GlobalSymlinks int `json:"globalSymlinks"`
GlobalDeleted int `json:"globalDeleted"`
GlobalBytes int64 `json:"globalBytes"`
GlobalTotalItems int `json:"globalTotalItems"`
LocalFiles int `json:"localFiles"`
LocalDirectories int `json:"localDirectories"`
LocalSymlinks int `json:"localSymlinks"`
LocalDeleted int `json:"localDeleted"`
LocalBytes int64 `json:"localBytes"`
LocalTotalItems int `json:"localTotalItems"`
NeedFiles int `json:"needFiles"`
NeedDirectories int `json:"needDirectories"`
NeedSymlinks int `json:"needSymlinks"`
NeedDeletes int `json:"needDeletes"`
NeedBytes int64 `json:"needBytes"`
NeedTotalItems int `json:"needTotalItems"`
ReceiveOnlyChangedFiles int `json:"receiveOnlyChangedFiles"`
ReceiveOnlyChangedDirectories int `json:"receiveOnlyChangedDirectories"`
ReceiveOnlyChangedSymlinks int `json:"receiveOnlyChangedSymlinks"`
ReceiveOnlyChangedDeletes int `json:"receiveOnlyChangedDeletes"`
ReceiveOnlyChangedBytes int64 `json:"receiveOnlyChangedBytes"`
ReceiveOnlyTotalItems int `json:"receiveOnlyTotalItems"`
InSyncFiles int `json:"inSyncFiles"`
InSyncBytes int64 `json:"inSyncBytes"`
State string `json:"state"`
StateChanged time.Time `json:"stateChanged"`
Error string `json:"error"`
Version int64 `json:"version"` // deprecated
Sequence int64 `json:"sequence"`
IgnorePatterns bool `json:"ignorePatterns"`
WatchError string `json:"watchError"`
}
func (c *folderSummaryService) Summary(folder string) (*FolderSummary, error) {
res := new(FolderSummary)
var local, global, need, ro db.Counts
var ourSeq, remoteSeq int64
@ -101,14 +151,14 @@ func (c *folderSummaryService) Summary(folder string) (map[string]interface{}, e
return nil, err
}
res["errors"] = len(errors)
res["pullErrors"] = len(errors) // deprecated
res.Errors = len(errors)
res.PullErrors = len(errors) // deprecated
res["invalid"] = "" // Deprecated, retains external API for now
res.Invalid = "" // Deprecated, retains external API for now
res["globalFiles"], res["globalDirectories"], res["globalSymlinks"], res["globalDeleted"], res["globalBytes"], res["globalTotalItems"] = global.Files, global.Directories, global.Symlinks, global.Deleted, global.Bytes, global.TotalItems()
res.GlobalFiles, res.GlobalDirectories, res.GlobalSymlinks, res.GlobalDeleted, res.GlobalBytes, res.GlobalTotalItems = global.Files, global.Directories, global.Symlinks, global.Deleted, global.Bytes, global.TotalItems()
res["localFiles"], res["localDirectories"], res["localSymlinks"], res["localDeleted"], res["localBytes"], res["localTotalItems"] = local.Files, local.Directories, local.Symlinks, local.Deleted, local.Bytes, local.TotalItems()
res.LocalFiles, res.LocalDirectories, res.LocalSymlinks, res.LocalDeleted, res.LocalBytes, res.LocalTotalItems = local.Files, local.Directories, local.Symlinks, local.Deleted, local.Bytes, local.TotalItems()
fcfg, haveFcfg := c.cfg.Folder(folder)
@ -122,41 +172,41 @@ func (c *folderSummaryService) Summary(folder string) (map[string]interface{}, e
if need.Bytes < 0 {
need.Bytes = 0
}
res["needFiles"], res["needDirectories"], res["needSymlinks"], res["needDeletes"], res["needBytes"], res["needTotalItems"] = need.Files, need.Directories, need.Symlinks, need.Deleted, need.Bytes, need.TotalItems()
res.NeedFiles, res.NeedDirectories, res.NeedSymlinks, res.NeedDeletes, res.NeedBytes, res.NeedTotalItems = need.Files, need.Directories, need.Symlinks, need.Deleted, need.Bytes, need.TotalItems()
if haveFcfg && (fcfg.Type == config.FolderTypeReceiveOnly || fcfg.Type == config.FolderTypeReceiveEncrypted) {
// Add statistics for things that have changed locally in a receive
// only or receive encrypted folder.
res["receiveOnlyChangedFiles"] = ro.Files
res["receiveOnlyChangedDirectories"] = ro.Directories
res["receiveOnlyChangedSymlinks"] = ro.Symlinks
res["receiveOnlyChangedDeletes"] = ro.Deleted
res["receiveOnlyChangedBytes"] = ro.Bytes
res["receiveOnlyTotalItems"] = ro.TotalItems()
res.ReceiveOnlyChangedFiles = ro.Files
res.ReceiveOnlyChangedDirectories = ro.Directories
res.ReceiveOnlyChangedSymlinks = ro.Symlinks
res.ReceiveOnlyChangedDeletes = ro.Deleted
res.ReceiveOnlyChangedBytes = ro.Bytes
res.ReceiveOnlyTotalItems = ro.TotalItems()
}
res["inSyncFiles"], res["inSyncBytes"] = global.Files-need.Files, global.Bytes-need.Bytes
res.InSyncFiles, res.InSyncBytes = global.Files-need.Files, global.Bytes-need.Bytes
res["state"], res["stateChanged"], err = c.model.State(folder)
res.State, res.StateChanged, err = c.model.State(folder)
if err != nil {
res["error"] = err.Error()
res.Error = err.Error()
}
res["version"] = ourSeq + remoteSeq // legacy
res["sequence"] = ourSeq + remoteSeq // new name
res.Version = ourSeq + remoteSeq // legacy
res.Sequence = ourSeq + remoteSeq // new name
ignorePatterns, _, _ := c.model.CurrentIgnores(folder)
res["ignorePatterns"] = false
res.IgnorePatterns = false
for _, line := range ignorePatterns {
if len(line) > 0 && !strings.HasPrefix(line, "//") {
res["ignorePatterns"] = true
res.IgnorePatterns = true
break
}
}
err = c.model.WatchError(folder)
if err != nil {
res["watchError"] = err.Error()
res.WatchError = err.Error()
}
return res, nil
@ -322,6 +372,11 @@ func (c *folderSummaryService) foldersToHandle() []string {
return res
}
type FolderSummaryEventData struct {
Folder string `json:"folder"`
Summary *FolderSummary `json:"summary"`
}
// sendSummary send the summary events for a single folder
func (c *folderSummaryService) sendSummary(ctx context.Context, folder string) {
// The folder summary contains how many bytes, files etc
@ -330,9 +385,9 @@ func (c *folderSummaryService) sendSummary(ctx context.Context, folder string) {
if err != nil {
return
}
c.evLogger.Log(events.FolderSummary, map[string]interface{}{
"folder": folder,
"summary": data,
c.evLogger.Log(events.FolderSummary, FolderSummaryEventData{
Folder: folder,
Summary: data,
})
for _, devCfg := range c.cfg.Folders()[folder].Devices {

View File

@ -24,17 +24,17 @@ type FolderSummaryService struct {
serveReturnsOnCall map[int]struct {
result1 error
}
SummaryStub func(string) (map[string]interface{}, error)
SummaryStub func(string) (*model.FolderSummary, error)
summaryMutex sync.RWMutex
summaryArgsForCall []struct {
arg1 string
}
summaryReturns struct {
result1 map[string]interface{}
result1 *model.FolderSummary
result2 error
}
summaryReturnsOnCall map[int]struct {
result1 map[string]interface{}
result1 *model.FolderSummary
result2 error
}
invocations map[string][][]interface{}
@ -126,7 +126,7 @@ func (fake *FolderSummaryService) ServeReturnsOnCall(i int, result1 error) {
}{result1}
}
func (fake *FolderSummaryService) Summary(arg1 string) (map[string]interface{}, error) {
func (fake *FolderSummaryService) Summary(arg1 string) (*model.FolderSummary, error) {
fake.summaryMutex.Lock()
ret, specificReturn := fake.summaryReturnsOnCall[len(fake.summaryArgsForCall)]
fake.summaryArgsForCall = append(fake.summaryArgsForCall, struct {
@ -151,7 +151,7 @@ func (fake *FolderSummaryService) SummaryCallCount() int {
return len(fake.summaryArgsForCall)
}
func (fake *FolderSummaryService) SummaryCalls(stub func(string) (map[string]interface{}, error)) {
func (fake *FolderSummaryService) SummaryCalls(stub func(string) (*model.FolderSummary, error)) {
fake.summaryMutex.Lock()
defer fake.summaryMutex.Unlock()
fake.SummaryStub = stub
@ -164,28 +164,28 @@ func (fake *FolderSummaryService) SummaryArgsForCall(i int) string {
return argsForCall.arg1
}
func (fake *FolderSummaryService) SummaryReturns(result1 map[string]interface{}, result2 error) {
func (fake *FolderSummaryService) SummaryReturns(result1 *model.FolderSummary, result2 error) {
fake.summaryMutex.Lock()
defer fake.summaryMutex.Unlock()
fake.SummaryStub = nil
fake.summaryReturns = struct {
result1 map[string]interface{}
result1 *model.FolderSummary
result2 error
}{result1, result2}
}
func (fake *FolderSummaryService) SummaryReturnsOnCall(i int, result1 map[string]interface{}, result2 error) {
func (fake *FolderSummaryService) SummaryReturnsOnCall(i int, result1 *model.FolderSummary, result2 error) {
fake.summaryMutex.Lock()
defer fake.summaryMutex.Unlock()
fake.SummaryStub = nil
if fake.summaryReturnsOnCall == nil {
fake.summaryReturnsOnCall = make(map[int]struct {
result1 map[string]interface{}
result1 *model.FolderSummary
result2 error
})
}
fake.summaryReturnsOnCall[i] = struct {
result1 map[string]interface{}
result1 *model.FolderSummary
result2 error
}{result1, result2}
}

View File

@ -177,15 +177,13 @@ var (
)
var (
errDeviceUnknown = errors.New("unknown device")
errDevicePaused = errors.New("device is paused")
errDeviceIgnored = errors.New("device is ignored")
errDeviceRemoved = errors.New("device has been removed")
ErrFolderPaused = errors.New("folder is paused")
ErrFolderNotRunning = errors.New("folder is not running")
ErrFolderMissing = errors.New("no such folder")
errNetworkNotAllowed = errors.New("network not allowed")
errNoVersioner = errors.New("folder has no versioner")
errDeviceUnknown = errors.New("unknown device")
errDevicePaused = errors.New("device is paused")
errDeviceRemoved = errors.New("device has been removed")
ErrFolderPaused = errors.New("folder is paused")
ErrFolderNotRunning = errors.New("folder is not running")
ErrFolderMissing = errors.New("no such folder")
errNoVersioner = errors.New("folder has no versioner")
// errors about why a connection is closed
errReplacingConnection = errors.New("replacing connection")
errStopped = errors.New("Syncthing is being stopped")
@ -1006,9 +1004,8 @@ func (m *model) NeedFolderFiles(folder string, page, perpage int) ([]db.FileInfo
return progress, queued, rest, nil
}
// RemoteNeedFolderFiles returns paginated list of currently needed files in
// progress, queued, and to be queued on next puller iteration, as well as the
// total number of files currently needed.
// RemoteNeedFolderFiles returns paginated list of currently needed files for a
// remote device to become synced with a folder.
func (m *model) RemoteNeedFolderFiles(folder string, device protocol.DeviceID, page, perpage int) ([]db.FileInfoTruncated, error) {
m.fmut.RLock()
rf, ok := m.folderFiles[folder]
@ -2115,12 +2112,7 @@ func (m *model) setIgnores(cfg config.FolderConfiguration, content []string) err
// This allows us to extract some information from the Hello message
// and add it to a list of known devices ahead of any checks.
func (m *model) OnHello(remoteID protocol.DeviceID, addr net.Addr, hello protocol.Hello) error {
if m.cfg.IgnoredDevice(remoteID) {
return errDeviceIgnored
}
cfg, ok := m.cfg.Device(remoteID)
if !ok {
if _, ok := m.cfg.Device(remoteID); !ok {
if err := m.db.AddOrUpdatePendingDevice(remoteID, hello.DeviceName, addr.String()); err != nil {
l.Warnf("Failed to persist pending device entry to database: %v", err)
}
@ -2139,21 +2131,6 @@ func (m *model) OnHello(remoteID protocol.DeviceID, addr net.Addr, hello protoco
})
return errDeviceUnknown
}
if cfg.Paused {
return errDevicePaused
}
if len(cfg.AllowedNetworks) > 0 && !connections.IsAllowedNetwork(addr.String(), cfg.AllowedNetworks) {
// The connection is not from an allowed network.
return errNetworkNotAllowed
}
if max := m.cfg.Options().ConnectionLimitMax; max > 0 && m.NumConnections() >= max {
// We're not allowed to accept any more connections.
return errConnLimitReached
}
return nil
}

View File

@ -114,26 +114,29 @@ func inWritableDir(fn func(string) error, targetFs fs.Filesystem, path string, i
if !info.IsDir() {
return errors.New("Not a directory: " + path)
}
if info.Mode()&0200 == 0 {
const permBits = fs.ModePerm | fs.ModeSetuid | fs.ModeSetgid | fs.ModeSticky
if mode := info.Mode() & permBits; mode&0200 == 0 {
// A non-writeable directory (for this user; we assume that's the
// relevant part). Temporarily change the mode so we can delete the
// file or directory inside it.
if err := targetFs.Chmod(dir, 0755); err == nil {
// Chmod succeeded, we should change the permissions back on the way
// out. If we fail we log the error as we have irrevocably messed up
// at this point. :( (The operation we were called to wrap has
// succeeded or failed on its own so returning an error to the
// caller is inappropriate.)
defer func() {
if err := targetFs.Chmod(dir, info.Mode()&fs.ModePerm); err != nil && !fs.IsNotExist(err) {
logFn := l.Warnln
if ignorePerms {
logFn = l.Debugln
}
logFn("Failed to restore directory permissions after gaining write access:", err)
}
}()
if err := targetFs.Chmod(dir, mode|0700); err != nil {
return err
}
// Chmod succeeded, we should change the permissions back on the way
// out. If we fail we log the error as we have irrevocably messed up
// at this point. :( (The operation we were called to wrap has
// succeeded or failed on its own so returning an error to the
// caller is inappropriate.)
defer func() {
if err := targetFs.Chmod(dir, mode); err != nil && !fs.IsNotExist(err) {
logFn := l.Warnln
if ignorePerms {
logFn = l.Debugln
}
logFn("Failed to restore directory permissions after gaining write access:", err)
}
}()
}
return fn(path)

View File

@ -8,14 +8,14 @@ package pmp
import (
"context"
"errors"
"fmt"
"net"
"strings"
"time"
"github.com/jackpal/gateway"
"github.com/jackpal/go-nat-pmp"
"github.com/pkg/errors"
natpmp "github.com/jackpal/go-nat-pmp"
"github.com/syncthing/syncthing/lib/nat"
"github.com/syncthing/syncthing/lib/util"
@ -50,7 +50,7 @@ func Discover(ctx context.Context, renewal, timeout time.Duration) []nat.Device
return ierr
})
if err != nil {
if errors.Cause(err) == context.Canceled {
if errors.Is(err, context.Canceled) {
return nil
}
if strings.Contains(err.Error(), "Timed out") {

View File

@ -180,14 +180,12 @@ type rawConnection struct {
cw *countingWriter
closer io.Closer // Closing the underlying connection and thus cr and cw
awaitingMut sync.Mutex // Protects awaiting and nextID.
awaiting map[int]chan asyncResult
awaitingMut sync.Mutex
nextID int
idxMut sync.Mutex // ensures serialization of Index calls
nextID int
nextIDMut sync.Mutex
inbox chan message
outbox chan asyncMessage
closeBox chan asyncMessage
@ -336,17 +334,15 @@ func (c *rawConnection) IndexUpdate(ctx context.Context, folder string, idx []Fi
// Request returns the bytes for the specified block after fetching them from the connected peer.
func (c *rawConnection) Request(ctx context.Context, folder string, name string, blockNo int, offset int64, size int, hash []byte, weakHash uint32, fromTemporary bool) ([]byte, error) {
c.nextIDMut.Lock()
id := c.nextID
c.nextID++
c.nextIDMut.Unlock()
rc := make(chan asyncResult, 1)
c.awaitingMut.Lock()
id := c.nextID
c.nextID++
if _, ok := c.awaiting[id]; ok {
c.awaitingMut.Unlock()
panic("id taken")
}
rc := make(chan asyncResult, 1)
c.awaiting[id] = rc
c.awaitingMut.Unlock()

View File

@ -26,6 +26,7 @@ import (
"github.com/syncthing/syncthing/lib/build"
"github.com/syncthing/syncthing/lib/config"
"github.com/syncthing/syncthing/lib/connections"
"github.com/syncthing/syncthing/lib/connections/registry"
"github.com/syncthing/syncthing/lib/db"
"github.com/syncthing/syncthing/lib/db/backend"
"github.com/syncthing/syncthing/lib/discover"
@ -276,8 +277,9 @@ func (a *App) startup() error {
// Create a wrapper that is then wired after they are both setup.
addrLister := &lateAddressLister{}
discoveryManager := discover.NewManager(a.myID, a.cfg, a.cert, a.evLogger, addrLister)
connectionsService := connections.NewService(a.cfg, a.myID, m, tlsCfg, discoveryManager, bepProtocolName, tlsDefaultCommonName, a.evLogger)
connRegistry := registry.New()
discoveryManager := discover.NewManager(a.myID, a.cfg, a.cert, a.evLogger, addrLister, connRegistry)
connectionsService := connections.NewService(a.cfg, a.myID, m, tlsCfg, discoveryManager, bepProtocolName, tlsDefaultCommonName, a.evLogger, connRegistry)
addrLister.AddressLister = connectionsService

View File

@ -9,8 +9,10 @@ package syncthing
import (
"context"
"fmt"
"regexp"
"github.com/syncthing/syncthing/lib/events"
"github.com/syncthing/syncthing/lib/model"
)
// The verbose logging service subscribes to events and prints these in
@ -46,6 +48,8 @@ func (s *verboseService) Serve(ctx context.Context) error {
}
}
var folderSummaryRemoveDeprecatedRe = regexp.MustCompile(`(Invalid|IgnorePatterns|StateChanged):\S+\s?`)
func (s *verboseService) formatEvent(ev events.Event) string {
switch ev.Type {
case events.DownloadProgress, events.LocalIndexUpdated:
@ -116,15 +120,8 @@ func (s *verboseService) formatEvent(ev events.Event) string {
return fmt.Sprintf("Completion for folder %q on device %v is %v%%", data["folder"], data["device"], data["completion"])
case events.FolderSummary:
data := ev.Data.(map[string]interface{})
sum := make(map[string]interface{})
for k, v := range data["summary"].(map[string]interface{}) {
if k == "invalid" || k == "ignorePatterns" || k == "stateChanged" {
continue
}
sum[k] = v
}
return fmt.Sprintf("Summary for folder %q is %v", data["folder"], sum)
data := ev.Data.(model.FolderSummaryEventData)
return folderSummaryRemoveDeprecatedRe.ReplaceAllString(fmt.Sprintf("Summary for folder %q is %+v", data.Folder, data.Summary), "")
case events.FolderScanProgress:
data := ev.Data.(map[string]interface{})

View File

@ -212,7 +212,7 @@ loop:
case *UnsupportedDeviceTypeError:
l.Debugln(err.Error())
default:
if errors.Cause(err) != context.Canceled {
if !errors.Is(err, context.Canceled) {
l.Infoln("UPnP parse:", err)
}
}

View File

@ -27,7 +27,7 @@ level margin: \\n[rst2man-indent\\n[rst2man-indent-level]]
.\" new: \\n[rst2man-indent\\n[rst2man-indent-level]]
.in \\n[rst2man-indent\\n[rst2man-indent-level]]u
..
.TH "STDISCOSRV" "1" "Jan 30, 2022" "v1" "Syncthing"
.TH "STDISCOSRV" "1" "Apr 02, 2022" "v1.19.1" "Syncthing"
.SH NAME
stdiscosrv \- Syncthing Discovery Server
.SH SYNOPSIS

View File

@ -27,7 +27,7 @@ level margin: \\n[rst2man-indent\\n[rst2man-indent-level]]
.\" new: \\n[rst2man-indent\\n[rst2man-indent-level]]
.in \\n[rst2man-indent\\n[rst2man-indent-level]]u
..
.TH "STRELAYSRV" "1" "Jan 30, 2022" "v1" "Syncthing"
.TH "STRELAYSRV" "1" "Apr 02, 2022" "v1.19.1" "Syncthing"
.SH NAME
strelaysrv \- Syncthing Relay Server
.SH SYNOPSIS

View File

@ -27,7 +27,7 @@ level margin: \\n[rst2man-indent\\n[rst2man-indent-level]]
.\" new: \\n[rst2man-indent\\n[rst2man-indent-level]]
.in \\n[rst2man-indent\\n[rst2man-indent-level]]u
..
.TH "SYNCTHING-BEP" "7" "Jan 30, 2022" "v1" "Syncthing"
.TH "SYNCTHING-BEP" "7" "Apr 02, 2022" "v1.19.1" "Syncthing"
.SH NAME
syncthing-bep \- Block Exchange Protocol v1
.SH INTRODUCTION AND DEFINITIONS
@ -48,7 +48,7 @@ for the last block which may be smaller.
.sp
The key words “MUST”, “MUST NOT”, “REQUIRED”, “SHALL”, “SHALL NOT”,
“SHOULD”, “SHOULD NOT”, “RECOMMENDED”, “MAY”, and “OPTIONAL” in this
document are to be interpreted as described in [RFC 2119](\fI\%https://datatracker.ietf.org/doc/html/rfc2119\fP).
document are to be interpreted as described in \fI\%RFC 2119\fP <\fBhttps://datatracker.ietf.org/doc/html/rfc2119.html\fP>\&.
.SH TRANSPORT AND AUTHENTICATION
.sp
BEP is deployed as the highest level in a protocol stack, with the lower

View File

@ -27,7 +27,7 @@ level margin: \\n[rst2man-indent\\n[rst2man-indent-level]]
.\" new: \\n[rst2man-indent\\n[rst2man-indent-level]]
.in \\n[rst2man-indent\\n[rst2man-indent-level]]u
..
.TH "SYNCTHING-CONFIG" "5" "Jan 30, 2022" "v1" "Syncthing"
.TH "SYNCTHING-CONFIG" "5" "Apr 02, 2022" "v1.19.1" "Syncthing"
.SH NAME
syncthing-config \- Syncthing Configuration
.SH SYNOPSIS
@ -904,9 +904,9 @@ untrusted\&.
.UNINDENT
.UNINDENT
.sp
There must be exactly one \fBgui\fP element. The GUI configuration is also used
by the rest\-api and the event\-api\&. The following attributes may
be set on the \fBgui\fP element:
There must be exactly one \fBgui\fP element. The GUI configuration is also used by
the /dev/rest and the /dev/events\&. The following attributes may be
set on the \fBgui\fP element:
.INDENT 0.0
.TP
.B enabled
@ -922,7 +922,8 @@ still possible but not required.
.INDENT 0.0
.TP
.B debugging
This enables profiling and additional debugging endpoints in the rest\-api\&.
This enables /users/profiling and additional endpoints in the REST
API, see /rest/debug\&.
.UNINDENT
.sp
The following child elements may be present:

View File

@ -27,7 +27,7 @@ level margin: \\n[rst2man-indent\\n[rst2man-indent-level]]
.\" new: \\n[rst2man-indent\\n[rst2man-indent-level]]
.in \\n[rst2man-indent\\n[rst2man-indent-level]]u
..
.TH "SYNCTHING-DEVICE-IDS" "7" "Jan 30, 2022" "v1" "Syncthing"
.TH "SYNCTHING-DEVICE-IDS" "7" "Apr 02, 2022" "v1.19.1" "Syncthing"
.SH NAME
syncthing-device-ids \- Understanding Device IDs
.sp

Some files were not shown because too many files have changed in this diff Show More