Compare commits
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
601a4fac1a | ||
|
|
f4ccc69422 | ||
|
|
ceea5ebeb3 | ||
|
|
f35e1ac0c5 | ||
|
|
0e76f9d93b | ||
|
|
1b08176583 | ||
|
|
b3e2665a79 | ||
|
|
81af29e3e2 | ||
|
|
0da0774ce4 | ||
|
|
151004d645 | ||
|
|
4e3fdfaeef | ||
|
|
1c29a93013 | ||
|
|
689f13f4f1 | ||
|
|
0558565a95 | ||
|
|
b84c4e1417 | ||
|
|
416811a2a9 | ||
|
|
c20d612736 | ||
|
|
3475a9ab0a | ||
|
|
d7adee05a8 | ||
|
|
73cbd17e17 | ||
|
|
7260629bc0 | ||
|
|
566c348b00 | ||
|
|
190f153b92 | ||
|
|
c56c48a777 | ||
|
|
98d22b88a0 | ||
|
|
28449f9f5b | ||
|
|
a0e2e7a962 | ||
|
|
fb6d453c74 | ||
|
|
89f8be40c6 | ||
|
|
96fba1b322 | ||
|
|
0c68e1e510 | ||
|
|
22903df2c1 | ||
|
|
10618e80a3 | ||
|
|
161326c548 | ||
|
|
f7fc0c1d3e | ||
|
|
120e6eab2c | ||
|
|
72de47df00 | ||
|
|
dfe23e8d53 | ||
|
|
2b1c942d56 | ||
|
|
204f125ab3 | ||
|
|
73f9c7d174 | ||
|
|
c4ba580cbb | ||
|
|
9fda9642d3 | ||
|
|
dfd2c464b6 | ||
|
|
5a1ee7f0b0 | ||
|
|
fdcbd54cd7 | ||
|
|
e14741a58c | ||
|
|
67acef1794 | ||
|
|
237893ead3 | ||
|
|
2590536ef3 | ||
|
|
dc91995475 | ||
|
|
3655c97850 | ||
|
|
c0f3f06cfb | ||
|
|
05450ca034 | ||
|
|
c005e61151 | ||
|
|
63e0b53e8b | ||
|
|
1f586c0fdd | ||
|
|
f1a073501f | ||
|
|
a72f5379fb | ||
|
|
8cccecceba | ||
|
|
81418d724a | ||
|
|
3eb7a9373a | ||
|
|
ac510b26e2 | ||
|
|
20f8b4fd57 | ||
|
|
1c9361a818 | ||
|
|
35e87e23fd | ||
|
|
e03be9158b | ||
|
|
9833d13762 | ||
|
|
6ec7d711d8 | ||
|
|
22a4d49ed0 | ||
|
|
ddca8d91fa | ||
|
|
ee36e2d46d | ||
|
|
de49ea594a | ||
|
|
6d4fa27ea7 | ||
|
|
9587b89d9d | ||
|
|
79c7f7193b | ||
|
|
2c4b92d410 | ||
|
|
dd78177ae0 | ||
|
|
bd55ec79d2 | ||
|
|
1313ba8c0a | ||
|
|
842e873a94 | ||
|
|
d4c4b1fb4c | ||
|
|
68f1c6ccab | ||
|
|
4c8aa14e07 | ||
|
|
bd1c29ee32 | ||
|
|
9b1c592fb7 | ||
|
|
f36f00e87b | ||
|
|
dbb3a34887 | ||
|
|
929a4d0c0c | ||
|
|
c953cdc375 | ||
|
|
c20c17e3c6 | ||
|
|
1a1e35d998 | ||
|
|
8d2a31e38e | ||
|
|
fe377a166a | ||
|
|
5770d80bf9 | ||
|
|
7a16dbd31d | ||
|
|
926c88cfc4 | ||
|
|
29d010ec0e | ||
|
|
920274bce4 | ||
|
|
2ebd6ad77f | ||
|
|
79dd6918f2 | ||
|
|
79f7f50c4d | ||
|
|
987718baf8 | ||
|
|
4fb9c143ac | ||
|
|
ec62888539 | ||
|
|
8c34a76f7a | ||
|
|
6809d38cde | ||
|
|
69ae4aa024 | ||
|
|
8e8b867fba | ||
|
|
0a118d2979 | ||
|
|
8daaa5d0d2 | ||
|
|
eb14f85a57 | ||
|
|
c69c3c7c36 | ||
|
|
54911d44c5 | ||
|
|
c765f7be8d | ||
|
|
44bdaf3ac2 | ||
|
|
fc16e49cb0 | ||
|
|
f5a310ad64 | ||
|
|
01e50eb3fa | ||
|
|
722b81c6f0 | ||
|
|
f0efa2b974 | ||
|
|
bab7c8ebbf | ||
|
|
0725e3af38 | ||
|
|
dd7bb6c4b8 | ||
|
|
d41c131364 | ||
|
|
47f22ff3e5 | ||
|
|
744c2e82b5 | ||
|
|
ead7281c20 | ||
|
|
aa3ef49dd7 | ||
|
|
5c067661f4 | ||
|
|
226da976dc | ||
|
|
ba17cc0a11 | ||
|
|
9e0afb7d8a | ||
|
|
9e7d50bc76 | ||
|
|
d7d5687faa | ||
|
|
21eb098dd2 | ||
|
|
2f770f8bfb | ||
|
|
f09698d845 | ||
|
|
3fbcb024a7 | ||
|
|
b8c1c0e048 | ||
|
|
2d47242d54 | ||
|
|
66a7829eee | ||
|
|
9c67bd2550 | ||
|
|
f67c5a2fd6 | ||
|
|
0437f6dd66 | ||
|
|
11b35d650d | ||
|
|
b279e261a1 | ||
|
|
263402f80a | ||
|
|
920a83ec7a | ||
|
|
3c2ac3522c | ||
|
|
9fdaa637a8 | ||
|
|
81a9d7f2b9 | ||
|
|
d8d3f05164 | ||
|
|
653be136ee | ||
|
|
398c356f22 | ||
|
|
542b76f687 | ||
|
|
abb8a1914a | ||
|
|
163d335078 | ||
|
|
0582836820 | ||
|
|
bb15776ae6 | ||
|
|
dde9d4c9eb |
@@ -6,4 +6,3 @@ vendor/** -text=auto
|
||||
|
||||
# Diffs on these files are meaningless
|
||||
*.svg -diff
|
||||
*.pb.go -diff
|
||||
|
||||
@@ -6,7 +6,8 @@
|
||||
# The NICKS list is auto generated from this file.
|
||||
|
||||
Aaron Bieber (qbit) <qbit@deftly.net>
|
||||
Adam Piggott (simplypeachy) <aD@simplypeachy.co.uk> <simplypeachy@users.noreply.github.com>
|
||||
Adam Piggott (ProactiveServices) <aD@simplypeachy.co.uk> <simplypeachy@users.noreply.github.com> <ProactiveServices@users.noreply.github.com>
|
||||
Adel Qalieh (adelq) <aqalieh95@gmail.com> <adelq@users.noreply.github.com>
|
||||
Alessandro G. (alessandro.g89) <alessandro.g89@gmail.com>
|
||||
Alexander Graf (alex2108) <register-github@alex-graf.de>
|
||||
Alexandre Viau (aviau) <alexandre@alexandreviau.net> <aviau@debian.org>
|
||||
@@ -20,6 +21,7 @@ Audrius Butkevicius (AudriusButkevicius) <audrius.butkevicius@gmail.com>
|
||||
Bart De Vries (mogwa1) <devriesb@gmail.com>
|
||||
Ben Curthoys (bencurthoys) <ben@bencurthoys.com>
|
||||
Ben Schulz (uok) <ueomkail@gmail.com> <uok@users.noreply.github.com>
|
||||
Ben Shepherd (benshep) <bjashepherd@gmail.com>
|
||||
Ben Sidhom (bsidhom) <bsidhom@gmail.com>
|
||||
Benny Ng (tpng) <benny.tpng@gmail.com>
|
||||
Brandon Philips (philips) <brandon@ifup.org>
|
||||
@@ -48,6 +50,7 @@ Felix Unterpaintner (bigbear2nd) <bigbear2nd@gmail.com>
|
||||
Francois-Xavier Gsell (zukoo) <fxgsell@gmail.com>
|
||||
Frank Isemann (fti7) <frank@isemann.name>
|
||||
Gilli Sigurdsson (gillisig) <gilli@vx.is>
|
||||
Heiko Zuerker (Smiley73) <heiko@zuerker.org>
|
||||
Jaakko Hannikainen (jgke) <jgke@jgke.fi>
|
||||
Jacek Szafarkiewicz (hadogenes) <szafar@linux.pl>
|
||||
Jake Peterson (acogdev) <jake@acogdev.com>
|
||||
@@ -62,6 +65,7 @@ Kelong Cong (kc1212) <kc04bc@gmx.com> <kc1212@users.noreply.github.com>
|
||||
Ken'ichi Kamada (kamadak) <kamada@nanohz.org>
|
||||
Kevin Allen (ironmig) <kma1660@gmail.com>
|
||||
Kevin White, Jr. (kwhite17) <kevinwhite1710@gmail.com>
|
||||
Kurt Fitzner (Kudalufi) <kurt@va1der.ca>
|
||||
Lars K.W. Gohlke (lkwg82) <lkwg82@gmx.de>
|
||||
Laurent Etiemble (letiemble) <laurent.etiemble@gmail.com> <laurent.etiemble@monobjc.net>
|
||||
Leo Arias (elopio) <yo@elopio.net>
|
||||
@@ -71,6 +75,7 @@ Majed Abdulaziz (majedev) <majed.alhajry@gmail.com>
|
||||
Marc Laporte (marclaporte) <marc@marclaporte.com> <marc@laporte.name>
|
||||
Marc Pujol (kilburn) <kilburn@la3.org>
|
||||
Marcin Dziadus (marcindziadus) <dziadus.marcin@gmail.com>
|
||||
Mark Pulford (mpx) <mark@kyne.com.au>
|
||||
Mateusz NaĆciszewski (mateon1) <matin1111@wp.pl>
|
||||
Matt Burke (burkemw3) <mburke@amplify.com> <burkemw3@gmail.com>
|
||||
Max Schulze (kralo) <max.schulze@online.de> <kralo@users.noreply.github.com>
|
||||
@@ -78,6 +83,7 @@ Michael Jephcote (Rewt0r) <rewt0r@gmx.com> <Rewt0r@users.noreply.github.com>
|
||||
Michael Ploujnikov (plouj) <ploujj@gmail.com>
|
||||
Michael Tilli (pyfisch) <pyfisch@gmail.com>
|
||||
Nate Morrison (nrm21) <natemorrison@gmail.com>
|
||||
Niels Peter Roest (Niller303) <nielsproest@hotmail.com> <seje.niels@hotmail.com>
|
||||
Pascal Jungblut (pascalj) <github@pascalj.com> <mail@pascal-jungblut.com>
|
||||
Peter Hoeg (peterhoeg) <peter@speartail.com>
|
||||
Philippe Schommers (filoozoom) <philippe@schommers.be>
|
||||
|
||||
@@ -0,0 +1,83 @@
|
||||
# The Syncthing Goals
|
||||
|
||||
Syncthing is a **continuous file synchronization program**. It synchronizes
|
||||
files between two or more computers. We strive to fulfill the goals below.
|
||||
The goals are listed in order of importance, the most important one being
|
||||
the first.
|
||||
|
||||
> "Syncing files" here is precise. It means we specifically exclude things
|
||||
> that are not files - calendar items, instant messages, and so on. If those
|
||||
> are in fact stored as files on disk, they can of course be synced as
|
||||
> files.
|
||||
|
||||
Syncthing should be:
|
||||
|
||||
### 1. Safe From Data Loss
|
||||
|
||||
Protecting the user's data is paramount. We take every reasonable precaution
|
||||
to avoid corrupting the user's files.
|
||||
|
||||
> This is the overriding goal, without which synchronizing files becomes
|
||||
> pointless. This means that we do not make unsafe trade offs for the sake
|
||||
> of performance or, in some cases, even usability.
|
||||
|
||||
### 2. Secure Against Attackers
|
||||
|
||||
Again, protecting the user's data is paramount. Regardless of our other
|
||||
goals we must never allow the user's data to be susceptible to eavesdropping
|
||||
or modification by unauthorized parties.
|
||||
|
||||
> This should be understood in context. It is not necessarily reasonable to
|
||||
> expect Syncthing to be resistant against well equipped state level
|
||||
> attackers. We will however do our best. Note also that this is different
|
||||
> from anonymity which is not, currently, a goal.
|
||||
|
||||
### 3. Easy to Use
|
||||
|
||||
Syncthing should be approachable, understandable and inclusive.
|
||||
|
||||
> Complex concepts and maths form the base of Synchting's functionality.
|
||||
> This should nonetheless be abstracted or hidden to a degree where
|
||||
> Syncthing is usable by the general public.
|
||||
|
||||
### 4. Automatic
|
||||
|
||||
User interaction should be required only when absolutely necessary.
|
||||
|
||||
> Specifically this means that changes to files are picked up without
|
||||
> prompting, conflicts are resolved without prompting and connections are
|
||||
> maintained without prompting. We only prompt the user when it is required
|
||||
> to fulfill one of the (overriding) Secure, Safe or Easy goals.
|
||||
|
||||
### 5. Universally Available
|
||||
|
||||
Syncthing should run on every common computer. We are mindful that the
|
||||
latest technology is not always available to any given individual.
|
||||
|
||||
> Computers include desktops, laptops, servers, virtual machines, small
|
||||
> general purpose computers such as Raspberry Pis and, *where possible*,
|
||||
> tablets and phones. NAS appliances, toasters, cars, firearms, thermostats
|
||||
> and so on may include computing capabitilies but it is not our goal for
|
||||
> Syncthing to run smoothly on these devices.
|
||||
|
||||
### 6. For Individuals
|
||||
|
||||
Syncthing is primarily about empowering the individual user with safe,
|
||||
secure and easy to use file synchronization.
|
||||
|
||||
> We acknowledge that it's also useful in an enterprise setting and include
|
||||
> functionality to support that. If this is in conflict with the
|
||||
> requirements of the individual, those will however take priority.
|
||||
|
||||
### 7. Everything Else
|
||||
|
||||
There are many things we care about that don't make it on to the list. It is
|
||||
fine to optimize for these values as well, as long as they are not in
|
||||
conflict with the stated goals above.
|
||||
|
||||
> For example, performance is a thing we care about. We just don't care more
|
||||
> about it than safety, security, etc. Maintainability of the code base and
|
||||
> providing entertainment value for the maintainers are also things that
|
||||
> matter. It is understood that there are aspects of Syncthing that are
|
||||
> suboptimal or even in opposition with the goals above. However, we
|
||||
> continuously strive to align Syncthing more and more with these goals.
|
||||
@@ -357,7 +357,7 @@ Exhibit A - Source Code Form License Notice
|
||||
|
||||
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/.
|
||||
file, You can obtain one at https://mozilla.org/MPL/2.0/.
|
||||
|
||||
If it is not possible or desirable to put the notice in a particular
|
||||
file, then You may include the notice in a location (such as a LICENSE
|
||||
|
||||
@@ -4,6 +4,8 @@
|
||||
0x010C <antoine.lamielle@0x010c.fr>
|
||||
0x010C <gh@0x010c.fr>
|
||||
acogdev <jake@acogdev.com>
|
||||
adelq <aqalieh95@gmail.com>
|
||||
adelq <adelq@users.noreply.github.com>
|
||||
alessandro.g89 <alessandro.g89@gmail.com>
|
||||
alex2108 <register-github@alex-graf.de>
|
||||
andersonvom <andersonvom@gmail.com>
|
||||
@@ -13,6 +15,7 @@ AudriusButkevicius <audrius.butkevicius@gmail.com>
|
||||
aviau <alexandre@alexandreviau.net>
|
||||
aviau <aviau@debian.org>
|
||||
bencurthoys <ben@bencurthoys.com>
|
||||
benshep <bjashepherd@gmail.com>
|
||||
bigbear2nd <bigbear2nd@gmail.com>
|
||||
brbecker <brbecker@gmail.com>
|
||||
brendanlong <self@brendanlong.com>
|
||||
@@ -63,6 +66,7 @@ kozec <kozec@kozec.com>
|
||||
kralo <max.schulze@online.de>
|
||||
kralo <kralo@users.noreply.github.com>
|
||||
krozycki <rozycki.karol@gmail.com>
|
||||
Kudalufi <kurt@va1der.ca>
|
||||
kwhite17 <kevinwhite1710@gmail.com>
|
||||
letiemble <laurent.etiemble@gmail.com>
|
||||
letiemble <laurent.etiemble@monobjc.net>
|
||||
@@ -76,7 +80,10 @@ mateon1 <matin1111@wp.pl>
|
||||
mogwa1 <devriesb@gmail.com>
|
||||
moshen <moshen.colin@gmail.com>
|
||||
Moter8 <moter8@gmail.com>
|
||||
mpx <mark@kyne.com.au>
|
||||
mvdan <mvdan@mvdan.cc>
|
||||
Niller303 <nielsproest@hotmail.com>
|
||||
Niller303 <seje.niels@hotmail.com>
|
||||
norgeous <daniel@harte.me>
|
||||
norgeous <daniel@danielharte.co.uk>
|
||||
norgeous <norgeous@users.noreply.github.com>
|
||||
@@ -89,6 +96,9 @@ philips <brandon@ifup.org>
|
||||
piobpl <piotrb10@gmail.com>
|
||||
plouj <ploujj@gmail.com>
|
||||
pluby <phill.luby@newredo.com>
|
||||
ProactiveServices <aD@simplypeachy.co.uk>
|
||||
ProactiveServices <simplypeachy@users.noreply.github.com>
|
||||
ProactiveServices <ProactiveServices@users.noreply.github.com>
|
||||
pyfisch <pyfisch@gmail.com>
|
||||
qbit <qbit@deftly.net>
|
||||
ralder <ralder@yandex.ru>
|
||||
@@ -99,8 +109,7 @@ rumpelsepp <rumpelsepp@sevenbyte.org>
|
||||
scienmind <scintertech@cryptolab.net>
|
||||
sciurius <jvromans@squirrel.nl>
|
||||
seehuhn <voss@seehuhn.de>
|
||||
simplypeachy <aD@simplypeachy.co.uk>
|
||||
simplypeachy <simplypeachy@users.noreply.github.com>
|
||||
Smiley73 <heiko@zuerker.org>
|
||||
snnd <dw@risu.io>
|
||||
Stefan-Code <stefan.github@gmail.com>
|
||||
Stefan-Code <Stefan.github@gmail.com>
|
||||
|
||||
@@ -1,24 +1,58 @@
|
||||
# Syncthing
|
||||
|
||||
[](http://build.syncthing.net/job/syncthing/lastBuild/)
|
||||
[](http://godoc.org/github.com/syncthing/syncthing)
|
||||
[](https://build.syncthing.net/job/syncthing/lastBuild/)
|
||||
[](https://build.syncthing.net/job/syncthing/lastBuild/)
|
||||
[](https://build.syncthing.net/job/syncthing/lastBuild/)
|
||||
[](https://build.syncthing.net/job/syncthing/lastBuild/)
|
||||
[](https://godoc.org/github.com/syncthing/syncthing)
|
||||
[](https://www.mozilla.org/MPL/2.0/)
|
||||
[](https://bestpractices.coreinfrastructure.org/projects/88)
|
||||
[](https://goreportcard.com/report/github.com/syncthing/syncthing)
|
||||
|
||||
This is the Syncthing project which pursues the following goals:
|
||||
## Goals
|
||||
|
||||
1. Define a protocol for synchronization of a folder between a number of
|
||||
collaborating devices. This protocol should be well defined, unambiguous,
|
||||
easily understood, free to use, efficient, secure and language neutral.
|
||||
This is called the [Block Exchange Protocol][1].
|
||||
Syncthing is a **continuous file synchronization program**. It synchronizes
|
||||
files between two or more computers. We strive to fulfill the goals below.
|
||||
The goals are listed in order of importance, the most important one being
|
||||
the first. This is the summary version of the goal list - for more
|
||||
commentary, see the full [Goals document][13].
|
||||
|
||||
2. Provide the reference implementation to demonstrate the usability of
|
||||
said protocol. This is the `syncthing` utility. We hope that
|
||||
alternative, compatible implementations of the protocol will arise.
|
||||
Syncthing should be:
|
||||
|
||||
The two are evolving together; the protocol is not to be considered
|
||||
stable until Syncthing 1.0 is released, at which point it is locked down
|
||||
for incompatible changes.
|
||||
1. Safe From Data Loss
|
||||
|
||||
Protecting the user's data is paramount. We take every reasonable
|
||||
precaution to avoid corrupting the user's files.
|
||||
|
||||
2. Secure Against Attackers
|
||||
|
||||
Again, protecting the user's data is paramount. Regardless of our other
|
||||
goals we must never allow the user's data to be susceptible to
|
||||
eavesdropping or modification by unauthorized parties.
|
||||
|
||||
3. Easy to Use
|
||||
|
||||
Syncthing should be approachable, understandable and inclusive.
|
||||
|
||||
4. Automatic
|
||||
|
||||
User interaction should be required only when absolutely necessary.
|
||||
|
||||
5. Universally Available
|
||||
|
||||
Syncthing should run on every common computer. We are mindful that the
|
||||
latest technology is not always available to any given individual.
|
||||
|
||||
6. For Individuals
|
||||
|
||||
Syncthing is primarily about empowering the individual user with safe,
|
||||
secure and easy to use file synchronization.
|
||||
|
||||
7. Everything Else
|
||||
|
||||
There are many things we care about that don't make it on to the list. It
|
||||
is fine to optimize for these values, as long as they are not in conflict
|
||||
with the stated goals above.
|
||||
|
||||
## Getting Started
|
||||
|
||||
@@ -64,7 +98,7 @@ All code is licensed under the [MPLv2 License][7].
|
||||
[1]: https://docs.syncthing.net/specs/bep-v1.html
|
||||
[2]: https://docs.syncthing.net/intro/getting-started.html
|
||||
[3]: https://github.com/syncthing/syncthing/blob/master/etc
|
||||
[4]: http://www.freenode.net/irc_servers.shtml
|
||||
[4]: http://www.freenode.net/
|
||||
[5]: https://docs.syncthing.net/dev/building.html
|
||||
[6]: https://docs.syncthing.net/
|
||||
[7]: https://github.com/syncthing/syncthing/blob/master/LICENSE
|
||||
@@ -73,3 +107,4 @@ All code is licensed under the [MPLv2 License][7].
|
||||
[10]: https://github.com/syncthing/syncthing/issues
|
||||
[11]: https://docs.syncthing.net/users/contrib.html#gui-wrappers
|
||||
[12]: https://www.bountysource.com/teams/syncthing/issues
|
||||
[13]: https://github.com/syncthing/syncthing/blob/master/GOALS.md
|
||||
|
||||
@@ -2,7 +2,7 @@
|
||||
//
|
||||
// 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/.
|
||||
// You can obtain one at https://mozilla.org/MPL/2.0/.
|
||||
|
||||
// +build ignore
|
||||
|
||||
@@ -27,7 +27,6 @@ import (
|
||||
"runtime"
|
||||
"strconv"
|
||||
"strings"
|
||||
"syscall"
|
||||
"text/template"
|
||||
"time"
|
||||
)
|
||||
@@ -154,6 +153,41 @@ var targets = map[string]target{
|
||||
},
|
||||
}
|
||||
|
||||
var (
|
||||
// fast linters complete in a fraction of a second and might as well be
|
||||
// run always as part of the build
|
||||
fastLinters = []string{
|
||||
"deadcode",
|
||||
"golint",
|
||||
"ineffassign",
|
||||
"vet",
|
||||
}
|
||||
|
||||
// slow linters take several seconds and are run only as part of the
|
||||
// "metalint" command.
|
||||
slowLinters = []string{
|
||||
"gosimple",
|
||||
"staticcheck",
|
||||
"structcheck",
|
||||
"unused",
|
||||
"varcheck",
|
||||
}
|
||||
|
||||
// Which parts of the tree to lint
|
||||
lintDirs = []string{".", "./lib/...", "./cmd/..."}
|
||||
|
||||
// Messages to ignore
|
||||
lintExcludes = []string{
|
||||
".pb.go",
|
||||
"should have comment",
|
||||
"protocol.Vector composite literal uses unkeyed fields",
|
||||
"cli.Requires composite literal uses unkeyed fields",
|
||||
"Use DialContext instead", // Go 1.7
|
||||
"os.SEEK_SET is deprecated", // Go 1.7
|
||||
"SA4017", // staticcheck "is a pure function but its return value is ignored"
|
||||
}
|
||||
)
|
||||
|
||||
func init() {
|
||||
// The "syncthing" target includes a few more files found in the "etc"
|
||||
// and "extra" dirs.
|
||||
@@ -170,8 +204,6 @@ func init() {
|
||||
targets["syncthing"] = syncthingPkg
|
||||
}
|
||||
|
||||
const minGoVersion = 1.5
|
||||
|
||||
func main() {
|
||||
log.SetOutput(os.Stdout)
|
||||
log.SetFlags(0)
|
||||
@@ -187,9 +219,6 @@ func main() {
|
||||
setGoPath()
|
||||
}
|
||||
|
||||
// We use Go 1.5+ vendoring.
|
||||
os.Setenv("GO15VENDOREXPERIMENT", "1")
|
||||
|
||||
// Set path to $GOPATH/bin:$PATH so that we can for sure find tools we
|
||||
// might have installed during "build.go setup".
|
||||
os.Setenv("PATH", fmt.Sprintf("%s%cbin%c%s", os.Getenv("GOPATH"), os.PathSeparator, os.PathListSeparator, os.Getenv("PATH")))
|
||||
@@ -197,14 +226,11 @@ func main() {
|
||||
parseFlags()
|
||||
|
||||
checkArchitecture()
|
||||
goVersion, _ = checkRequiredGoVersion()
|
||||
|
||||
// Invoking build.go with no parameters at all builds everything (incrementally),
|
||||
// which is what you want for maximum error checking during development.
|
||||
if flag.NArg() == 0 {
|
||||
runCommand("install", targets["all"])
|
||||
runCommand("vet", target{})
|
||||
runCommand("lint", target{})
|
||||
} else {
|
||||
// with any command given but not a target, the target is
|
||||
// "syncthing". So "go run build.go install" is "go run build.go install
|
||||
@@ -224,7 +250,7 @@ func main() {
|
||||
|
||||
func checkArchitecture() {
|
||||
switch goarch {
|
||||
case "386", "amd64", "arm", "arm64", "ppc64", "ppc64le":
|
||||
case "386", "amd64", "arm", "arm64", "ppc64", "ppc64le", "mips", "mipsle":
|
||||
break
|
||||
default:
|
||||
log.Printf("Unknown goarch %q; proceed with caution!", goarch)
|
||||
@@ -242,6 +268,7 @@ func runCommand(cmd string, target target) {
|
||||
tags = []string{"noupgrade"}
|
||||
}
|
||||
install(target, tags)
|
||||
metalint(fastLinters, lintDirs)
|
||||
|
||||
case "build":
|
||||
var tags []string
|
||||
@@ -249,6 +276,7 @@ func runCommand(cmd string, target target) {
|
||||
tags = []string{"noupgrade"}
|
||||
}
|
||||
build(target, tags)
|
||||
metalint(fastLinters, lintDirs)
|
||||
|
||||
case "test":
|
||||
test("./lib/...", "./cmd/...")
|
||||
@@ -284,25 +312,14 @@ func runCommand(cmd string, target target) {
|
||||
clean()
|
||||
|
||||
case "vet":
|
||||
vet("build.go")
|
||||
vet("cmd", "lib")
|
||||
metalint(fastLinters, lintDirs)
|
||||
|
||||
case "lint":
|
||||
lint(".")
|
||||
lint("./cmd/...")
|
||||
lint("./lib/...")
|
||||
metalint(fastLinters, lintDirs)
|
||||
|
||||
case "metalint":
|
||||
if isGometalinterInstalled() {
|
||||
dirs := []string{".", "./cmd/...", "./lib/..."}
|
||||
ok := gometalinter("deadcode", dirs, "test/util.go")
|
||||
ok = gometalinter("structcheck", dirs) && ok
|
||||
ok = gometalinter("varcheck", dirs) && ok
|
||||
ok = gometalinter("ineffassign", dirs) && ok
|
||||
if !ok {
|
||||
os.Exit(1)
|
||||
}
|
||||
}
|
||||
metalint(fastLinters, lintDirs)
|
||||
metalint(slowLinters, lintDirs)
|
||||
|
||||
case "version":
|
||||
fmt.Println(getVersion())
|
||||
@@ -333,29 +350,6 @@ func parseFlags() {
|
||||
flag.Parse()
|
||||
}
|
||||
|
||||
func checkRequiredGoVersion() (float64, bool) {
|
||||
re := regexp.MustCompile(`go(\d+\.\d+)`)
|
||||
ver := runtime.Version()
|
||||
if m := re.FindStringSubmatch(ver); len(m) == 2 {
|
||||
vs := string(m[1])
|
||||
// This is a standard go build. Verify that it's new enough.
|
||||
f, err := strconv.ParseFloat(vs, 64)
|
||||
if err != nil {
|
||||
log.Printf("*** Couldn't parse Go version out of %q.\n*** This isn't known to work, proceed on your own risk.", vs)
|
||||
return 0, false
|
||||
}
|
||||
if f < 1.5 {
|
||||
log.Printf("*** Go version %.01f doesn't support the vendoring mechanism.\n*** Ensure correct dependencies in your $GOPATH.", f)
|
||||
} else if f < minGoVersion {
|
||||
log.Fatalf("*** Go version %.01f is less than required %.01f.\n*** This is known not to work, not proceeding.", f, minGoVersion)
|
||||
}
|
||||
return f, true
|
||||
}
|
||||
|
||||
log.Printf("*** Unknown Go version %q.\n*** This isn't known to work, proceed on your own risk.", ver)
|
||||
return 0, false
|
||||
}
|
||||
|
||||
func setup() {
|
||||
packages := []string{
|
||||
"github.com/alecthomas/gometalinter",
|
||||
@@ -364,16 +358,22 @@ func setup() {
|
||||
"github.com/FiloSottile/gvt",
|
||||
"github.com/golang/lint/golint",
|
||||
"github.com/gordonklaus/ineffassign",
|
||||
"github.com/mdempsky/unconvert",
|
||||
"github.com/mitchellh/go-wordwrap",
|
||||
"github.com/opennota/check/cmd/...",
|
||||
"github.com/tsenart/deadcode",
|
||||
"golang.org/x/net/html",
|
||||
"golang.org/x/tools/cmd/cover",
|
||||
"honnef.co/go/simple/cmd/gosimple",
|
||||
"honnef.co/go/staticcheck/cmd/staticcheck",
|
||||
"honnef.co/go/unused/cmd/unused",
|
||||
}
|
||||
for _, pkg := range packages {
|
||||
fmt.Println(pkg)
|
||||
runPrint("go", "get", "-u", pkg)
|
||||
}
|
||||
|
||||
runPrint("go", "install", "-v", "./vendor/github.com/gogo/protobuf/protoc-gen-gogofast")
|
||||
}
|
||||
|
||||
func test(pkgs ...string) {
|
||||
@@ -557,7 +557,7 @@ func buildSnap(target target) {
|
||||
snapver = snapver[1:]
|
||||
}
|
||||
snapgrade := "devel"
|
||||
if matched, _ := regexp.MatchString(`^\d+\.\d+\.\d+$`, snapver); matched {
|
||||
if matched, _ := regexp.MatchString(`^\d+\.\d+\.\d+(-rc.\d+)?$`, snapver); matched {
|
||||
snapgrade = "stable"
|
||||
}
|
||||
err = tmpl.Execute(f, map[string]string{
|
||||
@@ -1003,48 +1003,6 @@ func zipFile(out string, files []archiveFile) {
|
||||
}
|
||||
}
|
||||
|
||||
func vet(dirs ...string) {
|
||||
params := []string{"tool", "vet", "-all"}
|
||||
params = append(params, dirs...)
|
||||
bs, err := runError("go", params...)
|
||||
|
||||
if len(bs) > 0 {
|
||||
log.Printf("%s", bs)
|
||||
}
|
||||
|
||||
if err != nil {
|
||||
if exitStatus(err) == 3 {
|
||||
// Exit code 3, the "vet" tool is not installed
|
||||
return
|
||||
}
|
||||
|
||||
// A genuine error exit from the vet tool.
|
||||
log.Fatal(err)
|
||||
}
|
||||
}
|
||||
|
||||
func lint(pkg string) {
|
||||
bs, err := runError("golint", pkg)
|
||||
if err != nil {
|
||||
log.Println(`- No golint, not linting. Try "go get -u github.com/golang/lint/golint".`)
|
||||
return
|
||||
}
|
||||
|
||||
analCommentPolicy := regexp.MustCompile(`exported (function|method|const|type|var) [^\s]+ should have comment`)
|
||||
for _, line := range strings.Split(string(bs), "\n") {
|
||||
if line == "" {
|
||||
continue
|
||||
}
|
||||
if analCommentPolicy.MatchString(line) {
|
||||
continue
|
||||
}
|
||||
if strings.Contains(line, ".pb.go:") {
|
||||
continue
|
||||
}
|
||||
log.Println(line)
|
||||
}
|
||||
}
|
||||
|
||||
func macosCodesign(file string) {
|
||||
if pass := os.Getenv("CODESIGN_KEYCHAIN_PASS"); pass != "" {
|
||||
bs, err := runError("security", "unlock-keychain", "-p", pass)
|
||||
@@ -1064,14 +1022,16 @@ func macosCodesign(file string) {
|
||||
}
|
||||
}
|
||||
|
||||
func exitStatus(err error) int {
|
||||
if err, ok := err.(*exec.ExitError); ok {
|
||||
if ws, ok := err.ProcessState.Sys().(syscall.WaitStatus); ok {
|
||||
return ws.ExitStatus()
|
||||
func metalint(linters []string, dirs []string) {
|
||||
ok := true
|
||||
if isGometalinterInstalled() {
|
||||
if !gometalinter(linters, dirs, lintExcludes...) {
|
||||
ok = false
|
||||
}
|
||||
}
|
||||
|
||||
return -1
|
||||
if !ok {
|
||||
log.Fatal("Build succeeded, but there were lint warnings")
|
||||
}
|
||||
}
|
||||
|
||||
func isGometalinterInstalled() bool {
|
||||
@@ -1082,10 +1042,12 @@ func isGometalinterInstalled() bool {
|
||||
return true
|
||||
}
|
||||
|
||||
func gometalinter(linter string, dirs []string, excludes ...string) bool {
|
||||
params := []string{"--disable-all"}
|
||||
params = append(params, fmt.Sprintf("--deadline=%ds", 60))
|
||||
params = append(params, "--enable="+linter)
|
||||
func gometalinter(linters []string, dirs []string, excludes ...string) bool {
|
||||
params := []string{"--disable-all", "--concurrency=2", "--deadline=300s"}
|
||||
|
||||
for _, linter := range linters {
|
||||
params = append(params, "--enable="+linter)
|
||||
}
|
||||
|
||||
for _, exclude := range excludes {
|
||||
params = append(params, "--exclude="+exclude)
|
||||
@@ -1098,14 +1060,19 @@ func gometalinter(linter string, dirs []string, excludes ...string) bool {
|
||||
bs, _ := runError("gometalinter", params...)
|
||||
|
||||
nerr := 0
|
||||
lines := make(map[string]struct{})
|
||||
for _, line := range strings.Split(string(bs), "\n") {
|
||||
if line == "" {
|
||||
continue
|
||||
}
|
||||
if strings.Contains(line, ".pb.go:") {
|
||||
if _, ok := lines[line]; ok {
|
||||
continue
|
||||
}
|
||||
log.Println(line)
|
||||
if strings.Contains(line, "executable file not found") {
|
||||
log.Println(` - Try "go run build.go setup" to install missing tools`)
|
||||
}
|
||||
lines[line] = struct{}{}
|
||||
nerr++
|
||||
}
|
||||
|
||||
|
||||
+1
-1
@@ -2,7 +2,7 @@
|
||||
//
|
||||
// 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/.
|
||||
// You can obtain one at https://mozilla.org/MPL/2.0/.
|
||||
|
||||
// This doesn't build on Windows due to the Rusage stuff.
|
||||
|
||||
|
||||
@@ -0,0 +1,19 @@
|
||||
Copyright (C) 2014 Audrius ButkeviÄius
|
||||
|
||||
Permission is hereby granted, free of charge, to any person obtaining a copy of
|
||||
this software and associated documentation files (the "Software"), to deal in
|
||||
the Software without restriction, including without limitation the rights to
|
||||
use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies
|
||||
of the Software, and to permit persons to whom the Software is furnished to do
|
||||
so, subject to the following conditions:
|
||||
|
||||
- The above copyright notice and this permission notice shall be included in
|
||||
all copies or substantial portions of the Software.
|
||||
|
||||
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
||||
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
||||
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
||||
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
||||
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
||||
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
|
||||
SOFTWARE.
|
||||
@@ -0,0 +1,115 @@
|
||||
// Copyright (C) 2014 Audrius ButkeviÄius
|
||||
|
||||
package main
|
||||
|
||||
import (
|
||||
"bytes"
|
||||
"crypto/tls"
|
||||
"net/http"
|
||||
"strings"
|
||||
|
||||
"github.com/AudriusButkevicius/cli"
|
||||
)
|
||||
|
||||
type APIClient struct {
|
||||
httpClient http.Client
|
||||
endpoint string
|
||||
apikey string
|
||||
username string
|
||||
password string
|
||||
id string
|
||||
csrf string
|
||||
}
|
||||
|
||||
var instance *APIClient
|
||||
|
||||
func getClient(c *cli.Context) *APIClient {
|
||||
if instance != nil {
|
||||
return instance
|
||||
}
|
||||
endpoint := c.GlobalString("endpoint")
|
||||
if !strings.HasPrefix(endpoint, "http") {
|
||||
endpoint = "http://" + endpoint
|
||||
}
|
||||
httpClient := http.Client{
|
||||
Transport: &http.Transport{
|
||||
TLSClientConfig: &tls.Config{
|
||||
InsecureSkipVerify: c.GlobalBool("insecure"),
|
||||
},
|
||||
},
|
||||
}
|
||||
client := APIClient{
|
||||
httpClient: httpClient,
|
||||
endpoint: endpoint,
|
||||
apikey: c.GlobalString("apikey"),
|
||||
username: c.GlobalString("username"),
|
||||
password: c.GlobalString("password"),
|
||||
}
|
||||
|
||||
if client.apikey == "" {
|
||||
request, err := http.NewRequest("GET", client.endpoint, nil)
|
||||
die(err)
|
||||
response := client.handleRequest(request)
|
||||
client.id = response.Header.Get("X-Syncthing-ID")
|
||||
if client.id == "" {
|
||||
die("Failed to get device ID")
|
||||
}
|
||||
for _, item := range response.Cookies() {
|
||||
if item.Name == "CSRF-Token-"+client.id[:5] {
|
||||
client.csrf = item.Value
|
||||
goto csrffound
|
||||
}
|
||||
}
|
||||
die("Failed to get CSRF token")
|
||||
csrffound:
|
||||
}
|
||||
instance = &client
|
||||
return &client
|
||||
}
|
||||
|
||||
func (client *APIClient) handleRequest(request *http.Request) *http.Response {
|
||||
if client.apikey != "" {
|
||||
request.Header.Set("X-API-Key", client.apikey)
|
||||
}
|
||||
if client.username != "" || client.password != "" {
|
||||
request.SetBasicAuth(client.username, client.password)
|
||||
}
|
||||
if client.csrf != "" {
|
||||
request.Header.Set("X-CSRF-Token-"+client.id[:5], client.csrf)
|
||||
}
|
||||
|
||||
response, err := client.httpClient.Do(request)
|
||||
die(err)
|
||||
|
||||
if response.StatusCode == 404 {
|
||||
die("Invalid endpoint or API call")
|
||||
} else if response.StatusCode == 401 {
|
||||
die("Invalid username or password")
|
||||
} else if response.StatusCode == 403 {
|
||||
if client.apikey == "" {
|
||||
die("Invalid CSRF token")
|
||||
}
|
||||
die("Invalid API key")
|
||||
} else if response.StatusCode != 200 {
|
||||
body := strings.TrimSpace(string(responseToBArray(response)))
|
||||
if body != "" {
|
||||
die(body)
|
||||
}
|
||||
die("Unknown HTTP status returned: " + response.Status)
|
||||
}
|
||||
return response
|
||||
}
|
||||
|
||||
func httpGet(c *cli.Context, url string) *http.Response {
|
||||
client := getClient(c)
|
||||
request, err := http.NewRequest("GET", client.endpoint+"/rest/"+url, nil)
|
||||
die(err)
|
||||
return client.handleRequest(request)
|
||||
}
|
||||
|
||||
func httpPost(c *cli.Context, url string, body string) *http.Response {
|
||||
client := getClient(c)
|
||||
request, err := http.NewRequest("POST", client.endpoint+"/rest/"+url, bytes.NewBufferString(body))
|
||||
die(err)
|
||||
return client.handleRequest(request)
|
||||
}
|
||||
@@ -0,0 +1,188 @@
|
||||
// Copyright (C) 2014 Audrius ButkeviÄius
|
||||
|
||||
package main
|
||||
|
||||
import (
|
||||
"fmt"
|
||||
"strings"
|
||||
|
||||
"github.com/AudriusButkevicius/cli"
|
||||
"github.com/syncthing/syncthing/lib/config"
|
||||
)
|
||||
|
||||
func init() {
|
||||
cliCommands = append(cliCommands, cli.Command{
|
||||
Name: "devices",
|
||||
HideHelp: true,
|
||||
Usage: "Device command group",
|
||||
Subcommands: []cli.Command{
|
||||
{
|
||||
Name: "list",
|
||||
Usage: "List registered devices",
|
||||
Requires: &cli.Requires{},
|
||||
Action: devicesList,
|
||||
},
|
||||
{
|
||||
Name: "add",
|
||||
Usage: "Add a new device",
|
||||
Requires: &cli.Requires{"device id", "device name?"},
|
||||
Action: devicesAdd,
|
||||
},
|
||||
{
|
||||
Name: "remove",
|
||||
Usage: "Remove an existing device",
|
||||
Requires: &cli.Requires{"device id"},
|
||||
Action: devicesRemove,
|
||||
},
|
||||
{
|
||||
Name: "get",
|
||||
Usage: "Get a property of a device",
|
||||
Requires: &cli.Requires{"device id", "property"},
|
||||
Action: devicesGet,
|
||||
},
|
||||
{
|
||||
Name: "set",
|
||||
Usage: "Set a property of a device",
|
||||
Requires: &cli.Requires{"device id", "property", "value..."},
|
||||
Action: devicesSet,
|
||||
},
|
||||
},
|
||||
})
|
||||
}
|
||||
|
||||
func devicesList(c *cli.Context) {
|
||||
cfg := getConfig(c)
|
||||
first := true
|
||||
writer := newTableWriter()
|
||||
for _, device := range cfg.Devices {
|
||||
if !first {
|
||||
fmt.Fprintln(writer)
|
||||
}
|
||||
fmt.Fprintln(writer, "ID:\t", device.DeviceID, "\t")
|
||||
fmt.Fprintln(writer, "Name:\t", device.Name, "\t(name)")
|
||||
fmt.Fprintln(writer, "Address:\t", strings.Join(device.Addresses, " "), "\t(address)")
|
||||
fmt.Fprintln(writer, "Compression:\t", device.Compression, "\t(compression)")
|
||||
fmt.Fprintln(writer, "Certificate name:\t", device.CertName, "\t(certname)")
|
||||
fmt.Fprintln(writer, "Introducer:\t", device.Introducer, "\t(introducer)")
|
||||
first = false
|
||||
}
|
||||
writer.Flush()
|
||||
}
|
||||
|
||||
func devicesAdd(c *cli.Context) {
|
||||
nid := c.Args()[0]
|
||||
id := parseDeviceID(nid)
|
||||
|
||||
newDevice := config.DeviceConfiguration{
|
||||
DeviceID: id,
|
||||
Name: nid,
|
||||
Addresses: []string{"dynamic"},
|
||||
}
|
||||
|
||||
if len(c.Args()) > 1 {
|
||||
newDevice.Name = c.Args()[1]
|
||||
}
|
||||
|
||||
if len(c.Args()) > 2 {
|
||||
addresses := c.Args()[2:]
|
||||
for _, item := range addresses {
|
||||
if item == "dynamic" {
|
||||
continue
|
||||
}
|
||||
validAddress(item)
|
||||
}
|
||||
newDevice.Addresses = addresses
|
||||
}
|
||||
|
||||
cfg := getConfig(c)
|
||||
for _, device := range cfg.Devices {
|
||||
if device.DeviceID == id {
|
||||
die("Device " + nid + " already exists")
|
||||
}
|
||||
}
|
||||
cfg.Devices = append(cfg.Devices, newDevice)
|
||||
setConfig(c, cfg)
|
||||
}
|
||||
|
||||
func devicesRemove(c *cli.Context) {
|
||||
nid := c.Args()[0]
|
||||
id := parseDeviceID(nid)
|
||||
if nid == getMyID(c) {
|
||||
die("Cannot remove yourself")
|
||||
}
|
||||
cfg := getConfig(c)
|
||||
for i, device := range cfg.Devices {
|
||||
if device.DeviceID == id {
|
||||
last := len(cfg.Devices) - 1
|
||||
cfg.Devices[i] = cfg.Devices[last]
|
||||
cfg.Devices = cfg.Devices[:last]
|
||||
setConfig(c, cfg)
|
||||
return
|
||||
}
|
||||
}
|
||||
die("Device " + nid + " not found")
|
||||
}
|
||||
|
||||
func devicesGet(c *cli.Context) {
|
||||
nid := c.Args()[0]
|
||||
id := parseDeviceID(nid)
|
||||
arg := c.Args()[1]
|
||||
cfg := getConfig(c)
|
||||
for _, device := range cfg.Devices {
|
||||
if device.DeviceID != id {
|
||||
continue
|
||||
}
|
||||
switch strings.ToLower(arg) {
|
||||
case "name":
|
||||
fmt.Println(device.Name)
|
||||
case "address":
|
||||
fmt.Println(strings.Join(device.Addresses, "\n"))
|
||||
case "compression":
|
||||
fmt.Println(device.Compression.String())
|
||||
case "certname":
|
||||
fmt.Println(device.CertName)
|
||||
case "introducer":
|
||||
fmt.Println(device.Introducer)
|
||||
default:
|
||||
die("Invalid property: " + arg + "\nAvailable properties: name, address, compression, certname, introducer")
|
||||
}
|
||||
return
|
||||
}
|
||||
die("Device " + nid + " not found")
|
||||
}
|
||||
|
||||
func devicesSet(c *cli.Context) {
|
||||
nid := c.Args()[0]
|
||||
id := parseDeviceID(nid)
|
||||
arg := c.Args()[1]
|
||||
config := getConfig(c)
|
||||
for i, device := range config.Devices {
|
||||
if device.DeviceID != id {
|
||||
continue
|
||||
}
|
||||
switch strings.ToLower(arg) {
|
||||
case "name":
|
||||
config.Devices[i].Name = strings.Join(c.Args()[2:], " ")
|
||||
case "address":
|
||||
for _, item := range c.Args()[2:] {
|
||||
if item == "dynamic" {
|
||||
continue
|
||||
}
|
||||
validAddress(item)
|
||||
}
|
||||
config.Devices[i].Addresses = c.Args()[2:]
|
||||
case "compression":
|
||||
err := config.Devices[i].Compression.UnmarshalText([]byte(c.Args()[2]))
|
||||
die(err)
|
||||
case "certname":
|
||||
config.Devices[i].CertName = strings.Join(c.Args()[2:], " ")
|
||||
case "introducer":
|
||||
config.Devices[i].Introducer = parseBool(c.Args()[2])
|
||||
default:
|
||||
die("Invalid property: " + arg + "\nAvailable properties: name, address, compression, certname, introducer")
|
||||
}
|
||||
setConfig(c, config)
|
||||
return
|
||||
}
|
||||
die("Device " + nid + " not found")
|
||||
}
|
||||
@@ -0,0 +1,67 @@
|
||||
// Copyright (C) 2014 Audrius ButkeviÄius
|
||||
|
||||
package main
|
||||
|
||||
import (
|
||||
"encoding/json"
|
||||
"fmt"
|
||||
"strings"
|
||||
|
||||
"github.com/AudriusButkevicius/cli"
|
||||
)
|
||||
|
||||
func init() {
|
||||
cliCommands = append(cliCommands, cli.Command{
|
||||
Name: "errors",
|
||||
HideHelp: true,
|
||||
Usage: "Error command group",
|
||||
Subcommands: []cli.Command{
|
||||
{
|
||||
Name: "show",
|
||||
Usage: "Show pending errors",
|
||||
Requires: &cli.Requires{},
|
||||
Action: errorsShow,
|
||||
},
|
||||
{
|
||||
Name: "push",
|
||||
Usage: "Push an error to active clients",
|
||||
Requires: &cli.Requires{"error message..."},
|
||||
Action: errorsPush,
|
||||
},
|
||||
{
|
||||
Name: "clear",
|
||||
Usage: "Clear pending errors",
|
||||
Requires: &cli.Requires{},
|
||||
Action: wrappedHTTPPost("system/error/clear"),
|
||||
},
|
||||
},
|
||||
})
|
||||
}
|
||||
|
||||
func errorsShow(c *cli.Context) {
|
||||
response := httpGet(c, "system/error")
|
||||
var data map[string][]map[string]interface{}
|
||||
json.Unmarshal(responseToBArray(response), &data)
|
||||
writer := newTableWriter()
|
||||
for _, item := range data["errors"] {
|
||||
time := item["time"].(string)[:19]
|
||||
time = strings.Replace(time, "T", " ", 1)
|
||||
err := item["error"].(string)
|
||||
err = strings.TrimSpace(err)
|
||||
fmt.Fprintln(writer, time+":\t"+err)
|
||||
}
|
||||
writer.Flush()
|
||||
}
|
||||
|
||||
func errorsPush(c *cli.Context) {
|
||||
err := strings.Join(c.Args(), " ")
|
||||
response := httpPost(c, "system/error", strings.TrimSpace(err))
|
||||
if response.StatusCode != 200 {
|
||||
err = fmt.Sprint("Failed to push error\nStatus code: ", response.StatusCode)
|
||||
body := string(responseToBArray(response))
|
||||
if body != "" {
|
||||
err += "\nBody: " + body
|
||||
}
|
||||
die(err)
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,351 @@
|
||||
// Copyright (C) 2014 Audrius ButkeviÄius
|
||||
|
||||
package main
|
||||
|
||||
import (
|
||||
"fmt"
|
||||
"path/filepath"
|
||||
"strings"
|
||||
|
||||
"github.com/AudriusButkevicius/cli"
|
||||
"github.com/syncthing/syncthing/lib/config"
|
||||
)
|
||||
|
||||
func init() {
|
||||
cliCommands = append(cliCommands, cli.Command{
|
||||
Name: "folders",
|
||||
HideHelp: true,
|
||||
Usage: "Folder command group",
|
||||
Subcommands: []cli.Command{
|
||||
{
|
||||
Name: "list",
|
||||
Usage: "List available folders",
|
||||
Requires: &cli.Requires{},
|
||||
Action: foldersList,
|
||||
},
|
||||
{
|
||||
Name: "add",
|
||||
Usage: "Add a new folder",
|
||||
Requires: &cli.Requires{"folder id", "directory"},
|
||||
Action: foldersAdd,
|
||||
},
|
||||
{
|
||||
Name: "remove",
|
||||
Usage: "Remove an existing folder",
|
||||
Requires: &cli.Requires{"folder id"},
|
||||
Action: foldersRemove,
|
||||
},
|
||||
{
|
||||
Name: "override",
|
||||
Usage: "Override changes from other nodes for a master folder",
|
||||
Requires: &cli.Requires{"folder id"},
|
||||
Action: foldersOverride,
|
||||
},
|
||||
{
|
||||
Name: "get",
|
||||
Usage: "Get a property of a folder",
|
||||
Requires: &cli.Requires{"folder id", "property"},
|
||||
Action: foldersGet,
|
||||
},
|
||||
{
|
||||
Name: "set",
|
||||
Usage: "Set a property of a folder",
|
||||
Requires: &cli.Requires{"folder id", "property", "value..."},
|
||||
Action: foldersSet,
|
||||
},
|
||||
{
|
||||
Name: "unset",
|
||||
Usage: "Unset a property of a folder",
|
||||
Requires: &cli.Requires{"folder id", "property"},
|
||||
Action: foldersUnset,
|
||||
},
|
||||
{
|
||||
Name: "devices",
|
||||
Usage: "Folder devices command group",
|
||||
HideHelp: true,
|
||||
Subcommands: []cli.Command{
|
||||
{
|
||||
Name: "list",
|
||||
Usage: "List of devices which the folder is shared with",
|
||||
Requires: &cli.Requires{"folder id"},
|
||||
Action: foldersDevicesList,
|
||||
},
|
||||
{
|
||||
Name: "add",
|
||||
Usage: "Share a folder with a device",
|
||||
Requires: &cli.Requires{"folder id", "device id"},
|
||||
Action: foldersDevicesAdd,
|
||||
},
|
||||
{
|
||||
Name: "remove",
|
||||
Usage: "Unshare a folder with a device",
|
||||
Requires: &cli.Requires{"folder id", "device id"},
|
||||
Action: foldersDevicesRemove,
|
||||
},
|
||||
{
|
||||
Name: "clear",
|
||||
Usage: "Unshare a folder with all devices",
|
||||
Requires: &cli.Requires{"folder id"},
|
||||
Action: foldersDevicesClear,
|
||||
},
|
||||
},
|
||||
},
|
||||
},
|
||||
})
|
||||
}
|
||||
|
||||
func foldersList(c *cli.Context) {
|
||||
cfg := getConfig(c)
|
||||
first := true
|
||||
writer := newTableWriter()
|
||||
for _, folder := range cfg.Folders {
|
||||
if !first {
|
||||
fmt.Fprintln(writer)
|
||||
}
|
||||
fmt.Fprintln(writer, "ID:\t", folder.ID, "\t")
|
||||
fmt.Fprintln(writer, "Path:\t", folder.RawPath, "\t(directory)")
|
||||
fmt.Fprintln(writer, "Folder type:\t", folder.Type, "\t(type)")
|
||||
fmt.Fprintln(writer, "Ignore permissions:\t", folder.IgnorePerms, "\t(permissions)")
|
||||
fmt.Fprintln(writer, "Rescan interval in seconds:\t", folder.RescanIntervalS, "\t(rescan)")
|
||||
|
||||
if folder.Versioning.Type != "" {
|
||||
fmt.Fprintln(writer, "Versioning:\t", folder.Versioning.Type, "\t(versioning)")
|
||||
for key, value := range folder.Versioning.Params {
|
||||
fmt.Fprintf(writer, "Versioning %s:\t %s \t(versioning-%s)\n", key, value, key)
|
||||
}
|
||||
}
|
||||
first = false
|
||||
}
|
||||
writer.Flush()
|
||||
}
|
||||
|
||||
func foldersAdd(c *cli.Context) {
|
||||
cfg := getConfig(c)
|
||||
abs, err := filepath.Abs(c.Args()[1])
|
||||
die(err)
|
||||
folder := config.FolderConfiguration{
|
||||
ID: c.Args()[0],
|
||||
RawPath: filepath.Clean(abs),
|
||||
}
|
||||
cfg.Folders = append(cfg.Folders, folder)
|
||||
setConfig(c, cfg)
|
||||
}
|
||||
|
||||
func foldersRemove(c *cli.Context) {
|
||||
cfg := getConfig(c)
|
||||
rid := c.Args()[0]
|
||||
for i, folder := range cfg.Folders {
|
||||
if folder.ID == rid {
|
||||
last := len(cfg.Folders) - 1
|
||||
cfg.Folders[i] = cfg.Folders[last]
|
||||
cfg.Folders = cfg.Folders[:last]
|
||||
setConfig(c, cfg)
|
||||
return
|
||||
}
|
||||
}
|
||||
die("Folder " + rid + " not found")
|
||||
}
|
||||
|
||||
func foldersOverride(c *cli.Context) {
|
||||
cfg := getConfig(c)
|
||||
rid := c.Args()[0]
|
||||
for _, folder := range cfg.Folders {
|
||||
if folder.ID == rid && folder.Type == config.FolderTypeSendOnly {
|
||||
response := httpPost(c, "db/override", "")
|
||||
if response.StatusCode != 200 {
|
||||
err := fmt.Sprint("Failed to override changes\nStatus code: ", response.StatusCode)
|
||||
body := string(responseToBArray(response))
|
||||
if body != "" {
|
||||
err += "\nBody: " + body
|
||||
}
|
||||
die(err)
|
||||
}
|
||||
return
|
||||
}
|
||||
}
|
||||
die("Folder " + rid + " not found or folder not master")
|
||||
}
|
||||
|
||||
func foldersGet(c *cli.Context) {
|
||||
cfg := getConfig(c)
|
||||
rid := c.Args()[0]
|
||||
arg := strings.ToLower(c.Args()[1])
|
||||
for _, folder := range cfg.Folders {
|
||||
if folder.ID != rid {
|
||||
continue
|
||||
}
|
||||
if strings.HasPrefix(arg, "versioning-") {
|
||||
arg = arg[11:]
|
||||
value, ok := folder.Versioning.Params[arg]
|
||||
if ok {
|
||||
fmt.Println(value)
|
||||
return
|
||||
}
|
||||
die("Versioning property " + c.Args()[1][11:] + " not found")
|
||||
}
|
||||
switch arg {
|
||||
case "directory":
|
||||
fmt.Println(folder.RawPath)
|
||||
case "type":
|
||||
fmt.Println(folder.Type)
|
||||
case "permissions":
|
||||
fmt.Println(folder.IgnorePerms)
|
||||
case "rescan":
|
||||
fmt.Println(folder.RescanIntervalS)
|
||||
case "versioning":
|
||||
if folder.Versioning.Type != "" {
|
||||
fmt.Println(folder.Versioning.Type)
|
||||
}
|
||||
default:
|
||||
die("Invalid property: " + c.Args()[1] + "\nAvailable properties: directory, type, permissions, versioning, versioning-<key>")
|
||||
}
|
||||
return
|
||||
}
|
||||
die("Folder " + rid + " not found")
|
||||
}
|
||||
|
||||
func foldersSet(c *cli.Context) {
|
||||
rid := c.Args()[0]
|
||||
arg := strings.ToLower(c.Args()[1])
|
||||
val := strings.Join(c.Args()[2:], " ")
|
||||
cfg := getConfig(c)
|
||||
for i, folder := range cfg.Folders {
|
||||
if folder.ID != rid {
|
||||
continue
|
||||
}
|
||||
if strings.HasPrefix(arg, "versioning-") {
|
||||
cfg.Folders[i].Versioning.Params[arg[11:]] = val
|
||||
setConfig(c, cfg)
|
||||
return
|
||||
}
|
||||
switch arg {
|
||||
case "directory":
|
||||
cfg.Folders[i].RawPath = val
|
||||
case "type":
|
||||
var t config.FolderType
|
||||
if err := t.UnmarshalText([]byte(val)); err != nil {
|
||||
die("Invalid folder type: " + err.Error())
|
||||
}
|
||||
cfg.Folders[i].Type = t
|
||||
case "permissions":
|
||||
cfg.Folders[i].IgnorePerms = parseBool(val)
|
||||
case "rescan":
|
||||
cfg.Folders[i].RescanIntervalS = parseInt(val)
|
||||
case "versioning":
|
||||
cfg.Folders[i].Versioning.Type = val
|
||||
default:
|
||||
die("Invalid property: " + c.Args()[1] + "\nAvailable properties: directory, master, permissions, versioning, versioning-<key>")
|
||||
}
|
||||
setConfig(c, cfg)
|
||||
return
|
||||
}
|
||||
die("Folder " + rid + " not found")
|
||||
}
|
||||
|
||||
func foldersUnset(c *cli.Context) {
|
||||
rid := c.Args()[0]
|
||||
arg := strings.ToLower(c.Args()[1])
|
||||
cfg := getConfig(c)
|
||||
for i, folder := range cfg.Folders {
|
||||
if folder.ID != rid {
|
||||
continue
|
||||
}
|
||||
if strings.HasPrefix(arg, "versioning-") {
|
||||
arg = arg[11:]
|
||||
if _, ok := folder.Versioning.Params[arg]; ok {
|
||||
delete(cfg.Folders[i].Versioning.Params, arg)
|
||||
setConfig(c, cfg)
|
||||
return
|
||||
}
|
||||
die("Versioning property " + c.Args()[1][11:] + " not found")
|
||||
}
|
||||
switch arg {
|
||||
case "versioning":
|
||||
cfg.Folders[i].Versioning.Type = ""
|
||||
cfg.Folders[i].Versioning.Params = make(map[string]string)
|
||||
default:
|
||||
die("Invalid property: " + c.Args()[1] + "\nAvailable properties: versioning, versioning-<key>")
|
||||
}
|
||||
setConfig(c, cfg)
|
||||
return
|
||||
}
|
||||
die("Folder " + rid + " not found")
|
||||
}
|
||||
|
||||
func foldersDevicesList(c *cli.Context) {
|
||||
rid := c.Args()[0]
|
||||
cfg := getConfig(c)
|
||||
for _, folder := range cfg.Folders {
|
||||
if folder.ID != rid {
|
||||
continue
|
||||
}
|
||||
for _, device := range folder.Devices {
|
||||
fmt.Println(device.DeviceID)
|
||||
}
|
||||
return
|
||||
}
|
||||
die("Folder " + rid + " not found")
|
||||
}
|
||||
|
||||
func foldersDevicesAdd(c *cli.Context) {
|
||||
rid := c.Args()[0]
|
||||
nid := parseDeviceID(c.Args()[1])
|
||||
cfg := getConfig(c)
|
||||
for i, folder := range cfg.Folders {
|
||||
if folder.ID != rid {
|
||||
continue
|
||||
}
|
||||
for _, device := range folder.Devices {
|
||||
if device.DeviceID == nid {
|
||||
die("Device " + c.Args()[1] + " is already part of this folder")
|
||||
}
|
||||
}
|
||||
for _, device := range cfg.Devices {
|
||||
if device.DeviceID == nid {
|
||||
cfg.Folders[i].Devices = append(folder.Devices, config.FolderDeviceConfiguration{
|
||||
DeviceID: device.DeviceID,
|
||||
})
|
||||
setConfig(c, cfg)
|
||||
return
|
||||
}
|
||||
}
|
||||
die("Device " + c.Args()[1] + " not found in device list")
|
||||
}
|
||||
die("Folder " + rid + " not found")
|
||||
}
|
||||
|
||||
func foldersDevicesRemove(c *cli.Context) {
|
||||
rid := c.Args()[0]
|
||||
nid := parseDeviceID(c.Args()[1])
|
||||
cfg := getConfig(c)
|
||||
for ri, folder := range cfg.Folders {
|
||||
if folder.ID != rid {
|
||||
continue
|
||||
}
|
||||
for ni, device := range folder.Devices {
|
||||
if device.DeviceID == nid {
|
||||
last := len(folder.Devices) - 1
|
||||
cfg.Folders[ri].Devices[ni] = folder.Devices[last]
|
||||
cfg.Folders[ri].Devices = cfg.Folders[ri].Devices[:last]
|
||||
setConfig(c, cfg)
|
||||
return
|
||||
}
|
||||
}
|
||||
die("Device " + c.Args()[1] + " not found")
|
||||
}
|
||||
die("Folder " + rid + " not found")
|
||||
}
|
||||
|
||||
func foldersDevicesClear(c *cli.Context) {
|
||||
rid := c.Args()[0]
|
||||
cfg := getConfig(c)
|
||||
for i, folder := range cfg.Folders {
|
||||
if folder.ID != rid {
|
||||
continue
|
||||
}
|
||||
cfg.Folders[i].Devices = []config.FolderDeviceConfiguration{}
|
||||
setConfig(c, cfg)
|
||||
return
|
||||
}
|
||||
die("Folder " + rid + " not found")
|
||||
}
|
||||
@@ -0,0 +1,78 @@
|
||||
// Copyright (C) 2014 Audrius ButkeviÄius
|
||||
|
||||
package main
|
||||
|
||||
import (
|
||||
"encoding/json"
|
||||
"fmt"
|
||||
|
||||
"github.com/AudriusButkevicius/cli"
|
||||
)
|
||||
|
||||
func init() {
|
||||
cliCommands = append(cliCommands, []cli.Command{
|
||||
{
|
||||
Name: "id",
|
||||
Usage: "Get ID of the Syncthing client",
|
||||
Requires: &cli.Requires{},
|
||||
Action: generalID,
|
||||
},
|
||||
{
|
||||
Name: "status",
|
||||
Usage: "Configuration status, whether or not a restart is required for changes to take effect",
|
||||
Requires: &cli.Requires{},
|
||||
Action: generalStatus,
|
||||
},
|
||||
{
|
||||
Name: "restart",
|
||||
Usage: "Restart syncthing",
|
||||
Requires: &cli.Requires{},
|
||||
Action: wrappedHTTPPost("system/restart"),
|
||||
},
|
||||
{
|
||||
Name: "shutdown",
|
||||
Usage: "Shutdown syncthing",
|
||||
Requires: &cli.Requires{},
|
||||
Action: wrappedHTTPPost("system/shutdown"),
|
||||
},
|
||||
{
|
||||
Name: "reset",
|
||||
Usage: "Reset syncthing deleting all folders and devices",
|
||||
Requires: &cli.Requires{},
|
||||
Action: wrappedHTTPPost("system/reset"),
|
||||
},
|
||||
{
|
||||
Name: "upgrade",
|
||||
Usage: "Upgrade syncthing (if a newer version is available)",
|
||||
Requires: &cli.Requires{},
|
||||
Action: wrappedHTTPPost("system/upgrade"),
|
||||
},
|
||||
{
|
||||
Name: "version",
|
||||
Usage: "Syncthing client version",
|
||||
Requires: &cli.Requires{},
|
||||
Action: generalVersion,
|
||||
},
|
||||
}...)
|
||||
}
|
||||
|
||||
func generalID(c *cli.Context) {
|
||||
fmt.Println(getMyID(c))
|
||||
}
|
||||
|
||||
func generalStatus(c *cli.Context) {
|
||||
response := httpGet(c, "system/config/insync")
|
||||
var status struct{ ConfigInSync bool }
|
||||
json.Unmarshal(responseToBArray(response), &status)
|
||||
if !status.ConfigInSync {
|
||||
die("Config out of sync")
|
||||
}
|
||||
fmt.Println("Config in sync")
|
||||
}
|
||||
|
||||
func generalVersion(c *cli.Context) {
|
||||
response := httpGet(c, "system/version")
|
||||
version := make(map[string]interface{})
|
||||
json.Unmarshal(responseToBArray(response), &version)
|
||||
prettyPrintJSON(version)
|
||||
}
|
||||
@@ -0,0 +1,127 @@
|
||||
// Copyright (C) 2014 Audrius ButkeviÄius
|
||||
|
||||
package main
|
||||
|
||||
import (
|
||||
"fmt"
|
||||
"strings"
|
||||
|
||||
"github.com/AudriusButkevicius/cli"
|
||||
)
|
||||
|
||||
func init() {
|
||||
cliCommands = append(cliCommands, cli.Command{
|
||||
Name: "gui",
|
||||
HideHelp: true,
|
||||
Usage: "GUI command group",
|
||||
Subcommands: []cli.Command{
|
||||
{
|
||||
Name: "dump",
|
||||
Usage: "Show all GUI configuration settings",
|
||||
Requires: &cli.Requires{},
|
||||
Action: guiDump,
|
||||
},
|
||||
{
|
||||
Name: "get",
|
||||
Usage: "Get a GUI configuration setting",
|
||||
Requires: &cli.Requires{"setting"},
|
||||
Action: guiGet,
|
||||
},
|
||||
{
|
||||
Name: "set",
|
||||
Usage: "Set a GUI configuration setting",
|
||||
Requires: &cli.Requires{"setting", "value"},
|
||||
Action: guiSet,
|
||||
},
|
||||
{
|
||||
Name: "unset",
|
||||
Usage: "Unset a GUI configuration setting",
|
||||
Requires: &cli.Requires{"setting"},
|
||||
Action: guiUnset,
|
||||
},
|
||||
},
|
||||
})
|
||||
}
|
||||
|
||||
func guiDump(c *cli.Context) {
|
||||
cfg := getConfig(c).GUI
|
||||
writer := newTableWriter()
|
||||
fmt.Fprintln(writer, "Enabled:\t", cfg.Enabled, "\t(enabled)")
|
||||
fmt.Fprintln(writer, "Use HTTPS:\t", cfg.UseTLS(), "\t(tls)")
|
||||
fmt.Fprintln(writer, "Listen Addresses:\t", cfg.Address(), "\t(address)")
|
||||
if cfg.User != "" {
|
||||
fmt.Fprintln(writer, "Authentication User:\t", cfg.User, "\t(username)")
|
||||
fmt.Fprintln(writer, "Authentication Password:\t", cfg.Password, "\t(password)")
|
||||
}
|
||||
if cfg.APIKey != "" {
|
||||
fmt.Fprintln(writer, "API Key:\t", cfg.APIKey, "\t(apikey)")
|
||||
}
|
||||
writer.Flush()
|
||||
}
|
||||
|
||||
func guiGet(c *cli.Context) {
|
||||
cfg := getConfig(c).GUI
|
||||
arg := c.Args()[0]
|
||||
switch strings.ToLower(arg) {
|
||||
case "enabled":
|
||||
fmt.Println(cfg.Enabled)
|
||||
case "tls":
|
||||
fmt.Println(cfg.UseTLS())
|
||||
case "address":
|
||||
fmt.Println(cfg.Address())
|
||||
case "user":
|
||||
if cfg.User != "" {
|
||||
fmt.Println(cfg.User)
|
||||
}
|
||||
case "password":
|
||||
if cfg.User != "" {
|
||||
fmt.Println(cfg.Password)
|
||||
}
|
||||
case "apikey":
|
||||
if cfg.APIKey != "" {
|
||||
fmt.Println(cfg.APIKey)
|
||||
}
|
||||
default:
|
||||
die("Invalid setting: " + arg + "\nAvailable settings: enabled, tls, address, user, password, apikey")
|
||||
}
|
||||
}
|
||||
|
||||
func guiSet(c *cli.Context) {
|
||||
cfg := getConfig(c)
|
||||
arg := c.Args()[0]
|
||||
val := c.Args()[1]
|
||||
switch strings.ToLower(arg) {
|
||||
case "enabled":
|
||||
cfg.GUI.Enabled = parseBool(val)
|
||||
case "tls":
|
||||
cfg.GUI.RawUseTLS = parseBool(val)
|
||||
case "address":
|
||||
validAddress(val)
|
||||
cfg.GUI.RawAddress = val
|
||||
case "user":
|
||||
cfg.GUI.User = val
|
||||
case "password":
|
||||
cfg.GUI.Password = val
|
||||
case "apikey":
|
||||
cfg.GUI.APIKey = val
|
||||
default:
|
||||
die("Invalid setting: " + arg + "\nAvailable settings: enabled, tls, address, user, password, apikey")
|
||||
}
|
||||
setConfig(c, cfg)
|
||||
}
|
||||
|
||||
func guiUnset(c *cli.Context) {
|
||||
cfg := getConfig(c)
|
||||
arg := c.Args()[0]
|
||||
switch strings.ToLower(arg) {
|
||||
case "user":
|
||||
cfg.GUI.User = ""
|
||||
case "password":
|
||||
cfg.GUI.Password = ""
|
||||
case "apikey":
|
||||
cfg.GUI.APIKey = ""
|
||||
default:
|
||||
die("Invalid setting: " + arg + "\nAvailable settings: user, password, apikey")
|
||||
}
|
||||
setConfig(c, cfg)
|
||||
}
|
||||
@@ -0,0 +1,173 @@
|
||||
// Copyright (C) 2014 Audrius ButkeviÄius
|
||||
|
||||
package main
|
||||
|
||||
import (
|
||||
"fmt"
|
||||
"strings"
|
||||
|
||||
"github.com/AudriusButkevicius/cli"
|
||||
)
|
||||
|
||||
func init() {
|
||||
cliCommands = append(cliCommands, cli.Command{
|
||||
Name: "options",
|
||||
HideHelp: true,
|
||||
Usage: "Options command group",
|
||||
Subcommands: []cli.Command{
|
||||
{
|
||||
Name: "dump",
|
||||
Usage: "Show all Syncthing option settings",
|
||||
Requires: &cli.Requires{},
|
||||
Action: optionsDump,
|
||||
},
|
||||
{
|
||||
Name: "get",
|
||||
Usage: "Get a Syncthing option setting",
|
||||
Requires: &cli.Requires{"setting"},
|
||||
Action: optionsGet,
|
||||
},
|
||||
{
|
||||
Name: "set",
|
||||
Usage: "Set a Syncthing option setting",
|
||||
Requires: &cli.Requires{"setting", "value..."},
|
||||
Action: optionsSet,
|
||||
},
|
||||
},
|
||||
})
|
||||
}
|
||||
|
||||
func optionsDump(c *cli.Context) {
|
||||
cfg := getConfig(c).Options
|
||||
writer := newTableWriter()
|
||||
|
||||
fmt.Fprintln(writer, "Sync protocol listen addresses:\t", strings.Join(cfg.ListenAddresses, " "), "\t(addresses)")
|
||||
fmt.Fprintln(writer, "Global discovery enabled:\t", cfg.GlobalAnnEnabled, "\t(globalannenabled)")
|
||||
fmt.Fprintln(writer, "Global discovery servers:\t", strings.Join(cfg.GlobalAnnServers, " "), "\t(globalannserver)")
|
||||
|
||||
fmt.Fprintln(writer, "Local discovery enabled:\t", cfg.LocalAnnEnabled, "\t(localannenabled)")
|
||||
fmt.Fprintln(writer, "Local discovery port:\t", cfg.LocalAnnPort, "\t(localannport)")
|
||||
|
||||
fmt.Fprintln(writer, "Outgoing rate limit in KiB/s:\t", cfg.MaxSendKbps, "\t(maxsend)")
|
||||
fmt.Fprintln(writer, "Incoming rate limit in KiB/s:\t", cfg.MaxRecvKbps, "\t(maxrecv)")
|
||||
fmt.Fprintln(writer, "Reconnect interval in seconds:\t", cfg.ReconnectIntervalS, "\t(reconnect)")
|
||||
fmt.Fprintln(writer, "Start browser:\t", cfg.StartBrowser, "\t(browser)")
|
||||
fmt.Fprintln(writer, "Enable UPnP:\t", cfg.NATEnabled, "\t(nat)")
|
||||
fmt.Fprintln(writer, "UPnP Lease in minutes:\t", cfg.NATLeaseM, "\t(natlease)")
|
||||
fmt.Fprintln(writer, "UPnP Renewal period in minutes:\t", cfg.NATRenewalM, "\t(natrenew)")
|
||||
fmt.Fprintln(writer, "Restart on Wake Up:\t", cfg.RestartOnWakeup, "\t(wake)")
|
||||
|
||||
reporting := "unrecognized value"
|
||||
switch cfg.URAccepted {
|
||||
case -1:
|
||||
reporting = "false"
|
||||
case 0:
|
||||
reporting = "undecided/false"
|
||||
case 1:
|
||||
reporting = "true"
|
||||
}
|
||||
fmt.Fprintln(writer, "Anonymous usage reporting:\t", reporting, "\t(reporting)")
|
||||
|
||||
writer.Flush()
|
||||
}
|
||||
|
||||
func optionsGet(c *cli.Context) {
|
||||
cfg := getConfig(c).Options
|
||||
arg := c.Args()[0]
|
||||
switch strings.ToLower(arg) {
|
||||
case "address":
|
||||
fmt.Println(strings.Join(cfg.ListenAddresses, "\n"))
|
||||
case "globalannenabled":
|
||||
fmt.Println(cfg.GlobalAnnEnabled)
|
||||
case "globalannservers":
|
||||
fmt.Println(strings.Join(cfg.GlobalAnnServers, "\n"))
|
||||
case "localannenabled":
|
||||
fmt.Println(cfg.LocalAnnEnabled)
|
||||
case "localannport":
|
||||
fmt.Println(cfg.LocalAnnPort)
|
||||
case "maxsend":
|
||||
fmt.Println(cfg.MaxSendKbps)
|
||||
case "maxrecv":
|
||||
fmt.Println(cfg.MaxRecvKbps)
|
||||
case "reconnect":
|
||||
fmt.Println(cfg.ReconnectIntervalS)
|
||||
case "browser":
|
||||
fmt.Println(cfg.StartBrowser)
|
||||
case "nat":
|
||||
fmt.Println(cfg.NATEnabled)
|
||||
case "natlease":
|
||||
fmt.Println(cfg.NATLeaseM)
|
||||
case "natrenew":
|
||||
fmt.Println(cfg.NATRenewalM)
|
||||
case "reporting":
|
||||
switch cfg.URAccepted {
|
||||
case -1:
|
||||
fmt.Println("false")
|
||||
case 0:
|
||||
fmt.Println("undecided/false")
|
||||
case 1:
|
||||
fmt.Println("true")
|
||||
default:
|
||||
fmt.Println("unknown")
|
||||
}
|
||||
case "wake":
|
||||
fmt.Println(cfg.RestartOnWakeup)
|
||||
default:
|
||||
die("Invalid setting: " + arg + "\nAvailable settings: address, globalannenabled, globalannserver, localannenabled, localannport, maxsend, maxrecv, reconnect, browser, upnp, upnplease, upnprenew, reporting, wake")
|
||||
}
|
||||
}
|
||||
|
||||
func optionsSet(c *cli.Context) {
|
||||
config := getConfig(c)
|
||||
arg := c.Args()[0]
|
||||
val := c.Args()[1]
|
||||
switch strings.ToLower(arg) {
|
||||
case "address":
|
||||
for _, item := range c.Args().Tail() {
|
||||
validAddress(item)
|
||||
}
|
||||
config.Options.ListenAddresses = c.Args().Tail()
|
||||
case "globalannenabled":
|
||||
config.Options.GlobalAnnEnabled = parseBool(val)
|
||||
case "globalannserver":
|
||||
for _, item := range c.Args().Tail() {
|
||||
validAddress(item)
|
||||
}
|
||||
config.Options.GlobalAnnServers = c.Args().Tail()
|
||||
case "localannenabled":
|
||||
config.Options.LocalAnnEnabled = parseBool(val)
|
||||
case "localannport":
|
||||
config.Options.LocalAnnPort = parsePort(val)
|
||||
case "maxsend":
|
||||
config.Options.MaxSendKbps = parseUint(val)
|
||||
case "maxrecv":
|
||||
config.Options.MaxRecvKbps = parseUint(val)
|
||||
case "reconnect":
|
||||
config.Options.ReconnectIntervalS = parseUint(val)
|
||||
case "browser":
|
||||
config.Options.StartBrowser = parseBool(val)
|
||||
case "nat":
|
||||
config.Options.NATEnabled = parseBool(val)
|
||||
case "natlease":
|
||||
config.Options.NATLeaseM = parseUint(val)
|
||||
case "natrenew":
|
||||
config.Options.NATRenewalM = parseUint(val)
|
||||
case "reporting":
|
||||
switch strings.ToLower(val) {
|
||||
case "u", "undecided", "unset":
|
||||
config.Options.URAccepted = 0
|
||||
default:
|
||||
boolvalue := parseBool(val)
|
||||
if boolvalue {
|
||||
config.Options.URAccepted = 1
|
||||
} else {
|
||||
config.Options.URAccepted = -1
|
||||
}
|
||||
}
|
||||
case "wake":
|
||||
config.Options.RestartOnWakeup = parseBool(val)
|
||||
default:
|
||||
die("Invalid setting: " + arg + "\nAvailable settings: address, globalannenabled, globalannserver, localannenabled, localannport, maxsend, maxrecv, reconnect, browser, upnp, upnplease, upnprenew, reporting, wake")
|
||||
}
|
||||
setConfig(c, config)
|
||||
}
|
||||
@@ -0,0 +1,72 @@
|
||||
// Copyright (C) 2014 Audrius ButkeviÄius
|
||||
|
||||
package main
|
||||
|
||||
import (
|
||||
"encoding/json"
|
||||
"fmt"
|
||||
|
||||
"github.com/AudriusButkevicius/cli"
|
||||
)
|
||||
|
||||
func init() {
|
||||
cliCommands = append(cliCommands, cli.Command{
|
||||
Name: "report",
|
||||
HideHelp: true,
|
||||
Usage: "Reporting command group",
|
||||
Subcommands: []cli.Command{
|
||||
{
|
||||
Name: "system",
|
||||
Usage: "Report system state",
|
||||
Requires: &cli.Requires{},
|
||||
Action: reportSystem,
|
||||
},
|
||||
{
|
||||
Name: "connections",
|
||||
Usage: "Report about connections to other devices",
|
||||
Requires: &cli.Requires{},
|
||||
Action: reportConnections,
|
||||
},
|
||||
{
|
||||
Name: "usage",
|
||||
Usage: "Usage report",
|
||||
Requires: &cli.Requires{},
|
||||
Action: reportUsage,
|
||||
},
|
||||
},
|
||||
})
|
||||
}
|
||||
|
||||
func reportSystem(c *cli.Context) {
|
||||
response := httpGet(c, "system/status")
|
||||
data := make(map[string]interface{})
|
||||
json.Unmarshal(responseToBArray(response), &data)
|
||||
prettyPrintJSON(data)
|
||||
}
|
||||
|
||||
func reportConnections(c *cli.Context) {
|
||||
response := httpGet(c, "system/connections")
|
||||
data := make(map[string]map[string]interface{})
|
||||
json.Unmarshal(responseToBArray(response), &data)
|
||||
var overall map[string]interface{}
|
||||
for key, value := range data {
|
||||
if key == "total" {
|
||||
overall = value
|
||||
continue
|
||||
}
|
||||
value["Device ID"] = key
|
||||
prettyPrintJSON(value)
|
||||
fmt.Println()
|
||||
}
|
||||
if overall != nil {
|
||||
fmt.Println("=== Overall statistics ===")
|
||||
prettyPrintJSON(overall)
|
||||
}
|
||||
}
|
||||
|
||||
func reportUsage(c *cli.Context) {
|
||||
response := httpGet(c, "svc/report")
|
||||
report := make(map[string]interface{})
|
||||
json.Unmarshal(responseToBArray(response), &report)
|
||||
prettyPrintJSON(report)
|
||||
}
|
||||
@@ -0,0 +1,31 @@
|
||||
// Copyright (C) 2014 Audrius ButkeviÄius
|
||||
|
||||
package main
|
||||
|
||||
var jsonAttributeLabels = map[string]string{
|
||||
"folderMaxMiB": "Largest folder size in MiB",
|
||||
"folderMaxFiles": "Largest folder file count",
|
||||
"longVersion": "Long version",
|
||||
"totMiB": "Total size in MiB",
|
||||
"totFiles": "Total files",
|
||||
"uniqueID": "Unique ID",
|
||||
"numFolders": "Folder count",
|
||||
"numDevices": "Device count",
|
||||
"memoryUsageMiB": "Memory usage in MiB",
|
||||
"memorySize": "Total memory in MiB",
|
||||
"sha256Perf": "SHA256 Benchmark",
|
||||
"At": "Last contacted",
|
||||
"Completion": "Percent complete",
|
||||
"InBytesTotal": "Total bytes received",
|
||||
"OutBytesTotal": "Total bytes sent",
|
||||
"ClientVersion": "Client version",
|
||||
"alloc": "Memory allocated in bytes",
|
||||
"sys": "Memory using in bytes",
|
||||
"cpuPercent": "CPU load in percent",
|
||||
"extAnnounceOK": "External announcments working",
|
||||
"goroutines": "Number of Go routines",
|
||||
"myID": "Client ID",
|
||||
"tilde": "Tilde expands to",
|
||||
"arch": "Architecture",
|
||||
"os": "OS",
|
||||
}
|
||||
@@ -0,0 +1,63 @@
|
||||
// Copyright (C) 2014 Audrius ButkeviÄius
|
||||
|
||||
package main
|
||||
|
||||
import (
|
||||
"sort"
|
||||
|
||||
"github.com/AudriusButkevicius/cli"
|
||||
)
|
||||
|
||||
type ByAlphabet []cli.Command
|
||||
|
||||
func (a ByAlphabet) Len() int { return len(a) }
|
||||
func (a ByAlphabet) Swap(i, j int) { a[i], a[j] = a[j], a[i] }
|
||||
func (a ByAlphabet) Less(i, j int) bool { return a[i].Name < a[j].Name }
|
||||
|
||||
var cliCommands []cli.Command
|
||||
|
||||
func main() {
|
||||
app := cli.NewApp()
|
||||
app.Name = "syncthing-cli"
|
||||
app.Author = "Audrius ButkeviÄius"
|
||||
app.Email = "audrius.butkevicius@gmail.com"
|
||||
app.Usage = "Syncthing command line interface"
|
||||
app.Version = "0.1"
|
||||
app.HideHelp = true
|
||||
|
||||
app.Flags = []cli.Flag{
|
||||
cli.StringFlag{
|
||||
Name: "endpoint, e",
|
||||
Value: "http://127.0.0.1:8384",
|
||||
Usage: "End point to connect to",
|
||||
EnvVar: "STENDPOINT",
|
||||
},
|
||||
cli.StringFlag{
|
||||
Name: "apikey, k",
|
||||
Value: "",
|
||||
Usage: "API Key",
|
||||
EnvVar: "STAPIKEY",
|
||||
},
|
||||
cli.StringFlag{
|
||||
Name: "username, u",
|
||||
Value: "",
|
||||
Usage: "Username",
|
||||
EnvVar: "STUSERNAME",
|
||||
},
|
||||
cli.StringFlag{
|
||||
Name: "password, p",
|
||||
Value: "",
|
||||
Usage: "Password",
|
||||
EnvVar: "STPASSWORD",
|
||||
},
|
||||
cli.BoolFlag{
|
||||
Name: "insecure, i",
|
||||
Usage: "Do not verify SSL certificate",
|
||||
EnvVar: "STINSECURE",
|
||||
},
|
||||
}
|
||||
|
||||
sort.Sort(ByAlphabet(cliCommands))
|
||||
app.Commands = cliCommands
|
||||
app.RunAndExitOnError()
|
||||
}
|
||||
@@ -0,0 +1,165 @@
|
||||
// Copyright (C) 2014 Audrius ButkeviÄius
|
||||
|
||||
package main
|
||||
|
||||
import (
|
||||
"encoding/json"
|
||||
"fmt"
|
||||
"io/ioutil"
|
||||
"net/http"
|
||||
"os"
|
||||
"regexp"
|
||||
"sort"
|
||||
"strconv"
|
||||
"strings"
|
||||
"text/tabwriter"
|
||||
"unicode"
|
||||
|
||||
"github.com/AudriusButkevicius/cli"
|
||||
"github.com/syncthing/syncthing/lib/config"
|
||||
"github.com/syncthing/syncthing/lib/protocol"
|
||||
)
|
||||
|
||||
func responseToBArray(response *http.Response) []byte {
|
||||
defer response.Body.Close()
|
||||
bytes, err := ioutil.ReadAll(response.Body)
|
||||
if err != nil {
|
||||
die(err)
|
||||
}
|
||||
return bytes
|
||||
}
|
||||
|
||||
func die(vals ...interface{}) {
|
||||
if len(vals) > 1 || vals[0] != nil {
|
||||
os.Stderr.WriteString(fmt.Sprintln(vals...))
|
||||
os.Exit(1)
|
||||
}
|
||||
}
|
||||
|
||||
func wrappedHTTPPost(url string) func(c *cli.Context) {
|
||||
return func(c *cli.Context) {
|
||||
httpPost(c, url, "")
|
||||
}
|
||||
}
|
||||
|
||||
func prettyPrintJSON(json map[string]interface{}) {
|
||||
writer := newTableWriter()
|
||||
remap := make(map[string]interface{})
|
||||
for k, v := range json {
|
||||
key, ok := jsonAttributeLabels[k]
|
||||
if !ok {
|
||||
key = firstUpper(k)
|
||||
}
|
||||
remap[key] = v
|
||||
}
|
||||
|
||||
jsonKeys := make([]string, 0, len(remap))
|
||||
for key := range remap {
|
||||
jsonKeys = append(jsonKeys, key)
|
||||
}
|
||||
sort.Strings(jsonKeys)
|
||||
for _, k := range jsonKeys {
|
||||
var value string
|
||||
rvalue := remap[k]
|
||||
switch rvalue.(type) {
|
||||
case int, int16, int32, int64, uint, uint16, uint32, uint64, float32, float64:
|
||||
value = fmt.Sprintf("%.0f", rvalue)
|
||||
default:
|
||||
value = fmt.Sprint(rvalue)
|
||||
}
|
||||
if value == "" {
|
||||
continue
|
||||
}
|
||||
fmt.Fprintln(writer, k+":\t"+value)
|
||||
}
|
||||
writer.Flush()
|
||||
}
|
||||
|
||||
func firstUpper(str string) string {
|
||||
for i, v := range str {
|
||||
return string(unicode.ToUpper(v)) + str[i+1:]
|
||||
}
|
||||
return ""
|
||||
}
|
||||
|
||||
func newTableWriter() *tabwriter.Writer {
|
||||
writer := new(tabwriter.Writer)
|
||||
writer.Init(os.Stdout, 0, 8, 0, '\t', 0)
|
||||
return writer
|
||||
}
|
||||
|
||||
func getMyID(c *cli.Context) string {
|
||||
response := httpGet(c, "system/status")
|
||||
data := make(map[string]interface{})
|
||||
json.Unmarshal(responseToBArray(response), &data)
|
||||
return data["myID"].(string)
|
||||
}
|
||||
|
||||
func getConfig(c *cli.Context) config.Configuration {
|
||||
response := httpGet(c, "system/config")
|
||||
config := config.Configuration{}
|
||||
json.Unmarshal(responseToBArray(response), &config)
|
||||
return config
|
||||
}
|
||||
|
||||
func setConfig(c *cli.Context, cfg config.Configuration) {
|
||||
body, err := json.Marshal(cfg)
|
||||
die(err)
|
||||
response := httpPost(c, "system/config", string(body))
|
||||
if response.StatusCode != 200 {
|
||||
die("Unexpected status code", response.StatusCode)
|
||||
}
|
||||
}
|
||||
|
||||
func parseBool(input string) bool {
|
||||
val, err := strconv.ParseBool(input)
|
||||
if err != nil {
|
||||
die(input + " is not a valid value for a boolean")
|
||||
}
|
||||
return val
|
||||
}
|
||||
|
||||
func parseInt(input string) int {
|
||||
val, err := strconv.ParseInt(input, 0, 64)
|
||||
if err != nil {
|
||||
die(input + " is not a valid value for an integer")
|
||||
}
|
||||
return int(val)
|
||||
}
|
||||
|
||||
func parseUint(input string) int {
|
||||
val, err := strconv.ParseUint(input, 0, 64)
|
||||
if err != nil {
|
||||
die(input + " is not a valid value for an unsigned integer")
|
||||
}
|
||||
return int(val)
|
||||
}
|
||||
|
||||
func parsePort(input string) int {
|
||||
port := parseUint(input)
|
||||
if port < 1 || port > 65535 {
|
||||
die(input + " is not a valid port\nExpected value between 1 and 65535")
|
||||
}
|
||||
return port
|
||||
}
|
||||
|
||||
func validAddress(input string) {
|
||||
tokens := strings.Split(input, ":")
|
||||
if len(tokens) != 2 {
|
||||
die(input + " is not a valid value for an address\nExpected format <ip or hostname>:<port>")
|
||||
}
|
||||
matched, err := regexp.MatchString("^[a-zA-Z0-9]+([-a-zA-Z0-9.]+[-a-zA-Z0-9]+)?$", tokens[0])
|
||||
die(err)
|
||||
if !matched {
|
||||
die(input + " is not a valid value for an address\nExpected format <ip or hostname>:<port>")
|
||||
}
|
||||
parsePort(tokens[1])
|
||||
}
|
||||
|
||||
func parseDeviceID(input string) protocol.DeviceID {
|
||||
device, err := protocol.DeviceIDFromString(input)
|
||||
if err != nil {
|
||||
die(input + " is not a valid device id")
|
||||
}
|
||||
return device
|
||||
}
|
||||
@@ -2,7 +2,7 @@
|
||||
//
|
||||
// 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/.
|
||||
// You can obtain one at https://mozilla.org/MPL/2.0/.
|
||||
|
||||
package main
|
||||
|
||||
@@ -15,8 +15,6 @@ import (
|
||||
"log"
|
||||
"os"
|
||||
"path/filepath"
|
||||
|
||||
"github.com/syncthing/syncthing/lib/symlinks"
|
||||
)
|
||||
|
||||
func main() {
|
||||
@@ -104,7 +102,7 @@ func startWalker(dir string, res chan<- fileInfo, abort <-chan struct{}) chan er
|
||||
mode: os.ModeSymlink,
|
||||
}
|
||||
|
||||
tgt, _, err := symlinks.Read(path)
|
||||
tgt, err := os.Readlink(path)
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
|
||||
+1
-1
@@ -2,7 +2,7 @@
|
||||
//
|
||||
// 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/.
|
||||
// You can obtain one at https://mozilla.org/MPL/2.0/.
|
||||
|
||||
package main
|
||||
|
||||
|
||||
@@ -1,14 +1,8 @@
|
||||
stdiscosrv
|
||||
==========
|
||||
|
||||
[](http://build.syncthing.net/job/stdiscosrv/lastBuild/)
|
||||
|
||||
This is the global discovery server for the `syncthing` project.
|
||||
|
||||
To get it, run `go get github.com/syncthing/stdiscosrv` or download the
|
||||
[latest build](http://build.syncthing.net/job/stdiscosrv/lastSuccessfulBuild/artifact/)
|
||||
from the build server.
|
||||
|
||||
Usage
|
||||
-----
|
||||
|
||||
@@ -38,3 +32,7 @@ In all cases, the appropriate tables and indexes will be created at first
|
||||
startup. If it doesn't exit with an error, you're fine.
|
||||
|
||||
See `stdiscosrv -help` for other options.
|
||||
|
||||
##### Third-party attribution
|
||||
|
||||
[cznic/lldb](https://github.com/cznic/lldb), Copyright (C) 2014 The lldb Authors.
|
||||
|
||||
@@ -19,9 +19,9 @@ import (
|
||||
"time"
|
||||
|
||||
"github.com/golang/groupcache/lru"
|
||||
"github.com/juju/ratelimit"
|
||||
"github.com/syncthing/syncthing/lib/protocol"
|
||||
"golang.org/x/net/context"
|
||||
"golang.org/x/time/rate"
|
||||
)
|
||||
|
||||
type querysrv struct {
|
||||
@@ -373,14 +373,14 @@ func (s *querysrv) limit(remote net.IP) bool {
|
||||
|
||||
bkt, ok := s.limiter.Get(key)
|
||||
if ok {
|
||||
bkt := bkt.(*ratelimit.Bucket)
|
||||
if bkt.TakeAvailable(1) != 1 {
|
||||
bkt := bkt.(*rate.Limiter)
|
||||
if !bkt.Allow() {
|
||||
// Rate limit exceeded; ignore packet
|
||||
return true
|
||||
}
|
||||
} else {
|
||||
// One packet per ten seconds average rate, burst ten packets
|
||||
s.limiter.Add(key, ratelimit.NewBucket(10*time.Second/time.Duration(limitAvg), int64(limitBurst)))
|
||||
// limitAvg is in packets per ten seconds.
|
||||
s.limiter.Add(key, rate.NewLimiter(rate.Limit(limitAvg)/10, limitBurst))
|
||||
}
|
||||
|
||||
return false
|
||||
|
||||
@@ -2,7 +2,7 @@
|
||||
//
|
||||
// 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/.
|
||||
// You can obtain one at https://mozilla.org/MPL/2.0/.
|
||||
|
||||
package main
|
||||
|
||||
|
||||
@@ -2,7 +2,7 @@
|
||||
//
|
||||
// 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/.
|
||||
// You can obtain one at https://mozilla.org/MPL/2.0/.
|
||||
|
||||
package main
|
||||
|
||||
@@ -70,7 +70,7 @@ func main() {
|
||||
if *standardBlocks || blockSize < protocol.BlockSize {
|
||||
blockSize = protocol.BlockSize
|
||||
}
|
||||
bs, err := scanner.Blocks(fd, blockSize, fi.Size(), nil)
|
||||
bs, err := scanner.Blocks(fd, blockSize, fi.Size(), nil, true)
|
||||
if err != nil {
|
||||
log.Fatal(err)
|
||||
}
|
||||
|
||||
@@ -2,7 +2,7 @@
|
||||
//
|
||||
// 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/.
|
||||
// You can obtain one at https://mozilla.org/MPL/2.0/.
|
||||
|
||||
package main
|
||||
|
||||
|
||||
@@ -2,7 +2,7 @@
|
||||
//
|
||||
// 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/.
|
||||
// You can obtain one at https://mozilla.org/MPL/2.0/.
|
||||
|
||||
package main
|
||||
|
||||
@@ -66,7 +66,7 @@ func generateFiles(dir string, files, maxexp int, srcname string) error {
|
||||
}
|
||||
|
||||
func generateOneFile(fd io.ReadSeeker, p1 string, s int64) error {
|
||||
src := io.LimitReader(&inifiteReader{fd}, int64(s))
|
||||
src := io.LimitReader(&inifiteReader{fd}, s)
|
||||
dst, err := os.Create(p1)
|
||||
if err != nil {
|
||||
return err
|
||||
@@ -85,12 +85,7 @@ func generateOneFile(fd io.ReadSeeker, p1 string, s int64) error {
|
||||
_ = os.Chmod(p1, os.FileMode(rand.Intn(0777)|0400))
|
||||
|
||||
t := time.Now().Add(-time.Duration(rand.Intn(30*86400)) * time.Second)
|
||||
err = os.Chtimes(p1, t, t)
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
|
||||
return nil
|
||||
return os.Chtimes(p1, t, t)
|
||||
}
|
||||
|
||||
func randomName() string {
|
||||
|
||||
+1
-1
@@ -2,7 +2,7 @@
|
||||
//
|
||||
// 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/.
|
||||
// You can obtain one at https://mozilla.org/MPL/2.0/.
|
||||
|
||||
package main
|
||||
|
||||
|
||||
@@ -2,7 +2,7 @@
|
||||
//
|
||||
// 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/.
|
||||
// You can obtain one at https://mozilla.org/MPL/2.0/.
|
||||
|
||||
package main
|
||||
|
||||
|
||||
+1
-1
@@ -2,7 +2,7 @@
|
||||
//
|
||||
// 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/.
|
||||
// You can obtain one at https://mozilla.org/MPL/2.0/.
|
||||
|
||||
package main
|
||||
|
||||
|
||||
+1
-1
@@ -2,7 +2,7 @@
|
||||
//
|
||||
// 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/.
|
||||
// You can obtain one at https://mozilla.org/MPL/2.0/.
|
||||
|
||||
package main
|
||||
|
||||
|
||||
@@ -1,15 +1,24 @@
|
||||
# relaypoolsrv
|
||||
|
||||
[](http://build.syncthing.net/job/relaypoolsrv/lastBuild/)
|
||||
This is the relay pool server for the `syncthing` project, which allows
|
||||
community hosted [relaysrv](https://github.com/syncthing/relaysrv)'s to join
|
||||
the public pool.
|
||||
|
||||
This is the relay pool server for the `syncthing` project, which allows community hosted [relaysrv](https://github.com/syncthing/relaysrv)'s to join the public pool.
|
||||
Servers that join the pool are then advertised to users of `syncthing` as
|
||||
potential connection points for those who are unable to connect directly due
|
||||
to NAT or firewall issues.
|
||||
|
||||
Servers that join the pool are then advertised to users of `syncthing` as potential connection points for those who are unable to connect directly due to NAT or firewall issues.
|
||||
|
||||
There is very little reason why you'd want to run this yourself, as `relaypoolsrv` is just used for announcement and lookup of public relay servers. If you are looking to setup a private or a public relay, please check the documentation for [relaysrv](https://github.com/syncthing/relaysrv), which also explains how to join the default public pool.
|
||||
|
||||
If you still want to run it, you can run `go get github.com/syncthing/relaypoolsrv` download it or download the
|
||||
[latest build](http://build.syncthing.net/job/relaypoolsrv/lastSuccessfulBuild/artifact/)
|
||||
from the build server.
|
||||
There is very little reason why you'd want to run this yourself, as
|
||||
`relaypoolsrv` is just used for announcement and lookup of public relay
|
||||
servers. If you are looking to setup a private or a public relay, please
|
||||
check the documentation for
|
||||
[relaysrv](https://github.com/syncthing/relaysrv), which also explains how
|
||||
to join the default public pool.
|
||||
|
||||
See `relaypoolsrv -help` for configuration options.
|
||||
|
||||
##### Third-party attributions
|
||||
|
||||
[oschwald/geoip2-golang](https://github.com/oschwald/geoip2-golang), [oschwald/maxminddb-golang](https://github.com/oschwald/maxminddb-golang), Copyright (C) 2015 [Gregory J. Oschwald](mailto:oschwald@gmail.com).
|
||||
|
||||
[lib/pq](https://github.com/lib/pq)</a>, Copyright (C) 2011-2013 'pq' Contributors Portions Copyright (C) 2011 Blake Mizerany.
|
||||
|
||||
@@ -48,7 +48,7 @@
|
||||
</p>
|
||||
</div>
|
||||
<div id="map"></div> <!-- Can't hide the map, otherwise it freaks out -->
|
||||
<p>The circle size represents how much bytes the relay transfered relative to other relays</p>
|
||||
<p>The circle size represents how much bytes the relay transferred relative to other relays</p>
|
||||
</div>
|
||||
<div>
|
||||
<table class="table table-striped table-condensed table">
|
||||
|
||||
+15
-17
@@ -23,14 +23,12 @@ import (
|
||||
"time"
|
||||
|
||||
"github.com/golang/groupcache/lru"
|
||||
"github.com/juju/ratelimit"
|
||||
|
||||
"github.com/oschwald/geoip2-golang"
|
||||
|
||||
"github.com/syncthing/syncthing/cmd/strelaypoolsrv/auto"
|
||||
"github.com/syncthing/syncthing/lib/relay/client"
|
||||
"github.com/syncthing/syncthing/lib/sync"
|
||||
"github.com/syncthing/syncthing/lib/tlsutil"
|
||||
"golang.org/x/time/rate"
|
||||
)
|
||||
|
||||
type location struct {
|
||||
@@ -65,12 +63,12 @@ var (
|
||||
dir string
|
||||
evictionTime = time.Hour
|
||||
debug bool
|
||||
getLRUSize = 10 << 10
|
||||
getLimitBurst int64 = 10
|
||||
getLimitAvg = 1
|
||||
postLRUSize = 1 << 10
|
||||
postLimitBurst int64 = 2
|
||||
postLimitAvg = 1
|
||||
getLRUSize = 10 << 10
|
||||
getLimitBurst = 10
|
||||
getLimitAvg = 1
|
||||
postLRUSize = 1 << 10
|
||||
postLimitBurst = 2
|
||||
postLimitAvg = 1
|
||||
getLimit time.Duration
|
||||
postLimit time.Duration
|
||||
permRelaysFile string
|
||||
@@ -99,10 +97,10 @@ func main() {
|
||||
flag.DurationVar(&evictionTime, "eviction", evictionTime, "After how long the relay is evicted")
|
||||
flag.IntVar(&getLRUSize, "get-limit-cache", getLRUSize, "Get request limiter cache size")
|
||||
flag.IntVar(&getLimitAvg, "get-limit-avg", 2, "Allowed average get request rate, per 10 s")
|
||||
flag.Int64Var(&getLimitBurst, "get-limit-burst", getLimitBurst, "Allowed burst get requests")
|
||||
flag.IntVar(&getLimitBurst, "get-limit-burst", getLimitBurst, "Allowed burst get requests")
|
||||
flag.IntVar(&postLRUSize, "post-limit-cache", postLRUSize, "Post request limiter cache size")
|
||||
flag.IntVar(&postLimitAvg, "post-limit-avg", 2, "Allowed average post request rate, per minute")
|
||||
flag.Int64Var(&postLimitBurst, "post-limit-burst", postLimitBurst, "Allowed burst post requests")
|
||||
flag.IntVar(&postLimitBurst, "post-limit-burst", postLimitBurst, "Allowed burst post requests")
|
||||
flag.StringVar(&permRelaysFile, "perm-relays", "", "Path to list of permanent relays")
|
||||
flag.StringVar(&ipHeader, "ip-header", "", "Name of header which holds clients ip:port. Only meaningful when running behind a reverse proxy.")
|
||||
flag.StringVar(&geoipPath, "geoip", "GeoLite2-City.mmdb", "Path to GeoLite2-City database")
|
||||
@@ -249,13 +247,13 @@ func handleRequest(w http.ResponseWriter, r *http.Request) {
|
||||
w.Header().Set("Access-Control-Allow-Origin", "*")
|
||||
switch r.Method {
|
||||
case "GET":
|
||||
if limit(r.RemoteAddr, getLRUCache, getMut, getLimit, int64(getLimitBurst)) {
|
||||
if limit(r.RemoteAddr, getLRUCache, getMut, getLimit, getLimitBurst) {
|
||||
w.WriteHeader(429)
|
||||
return
|
||||
}
|
||||
handleGetRequest(w, r)
|
||||
case "POST":
|
||||
if limit(r.RemoteAddr, postLRUCache, postMut, postLimit, int64(postLimitBurst)) {
|
||||
if limit(r.RemoteAddr, postLRUCache, postMut, postLimit, postLimitBurst) {
|
||||
w.WriteHeader(429)
|
||||
return
|
||||
}
|
||||
@@ -446,7 +444,7 @@ func evict(relay relay) func() {
|
||||
}
|
||||
}
|
||||
|
||||
func limit(addr string, cache *lru.Cache, lock sync.RWMutex, rate time.Duration, burst int64) bool {
|
||||
func limit(addr string, cache *lru.Cache, lock sync.RWMutex, intv time.Duration, burst int) bool {
|
||||
host, _, err := net.SplitHostPort(addr)
|
||||
if err != nil {
|
||||
return false
|
||||
@@ -456,14 +454,14 @@ func limit(addr string, cache *lru.Cache, lock sync.RWMutex, rate time.Duration,
|
||||
bkt, ok := cache.Get(host)
|
||||
lock.RUnlock()
|
||||
if ok {
|
||||
bkt := bkt.(*ratelimit.Bucket)
|
||||
if bkt.TakeAvailable(1) != 1 {
|
||||
bkt := bkt.(*rate.Limiter)
|
||||
if !bkt.Allow() {
|
||||
// Rate limit
|
||||
return true
|
||||
}
|
||||
} else {
|
||||
lock.Lock()
|
||||
cache.Add(host, ratelimit.NewBucket(rate, burst))
|
||||
cache.Add(host, rate.NewLimiter(rate.Every(intv), burst))
|
||||
lock.Unlock()
|
||||
}
|
||||
return false
|
||||
|
||||
+15
-25
@@ -1,28 +1,20 @@
|
||||
strelaysrv
|
||||
==========
|
||||
|
||||
[](http://build.syncthing.net/job/strelaysrv/lastBuild/)
|
||||
|
||||
This is the relay server for the `syncthing` project.
|
||||
|
||||
To get it, run `go get github.com/syncthing/syncthing/cmd/strelaysrv` or download the
|
||||
[latest build](http://build.syncthing.net/job/strelaysrv/lastSuccessfulBuild/artifact/)
|
||||
from the build server.
|
||||
|
||||
:exclamation:Warnings:exclamation: - Read or regret
|
||||
-----
|
||||
|
||||
By default, all relay servers will join the default public relay pool, which means that the relay server will be availble for public use, and **will consume your bandwidth** helping others to connect.
|
||||
By default, all relay servers will join to the default public relay pool, which means that the relay server will be available for public use, and **will consume your bandwidth** helping others to connect.
|
||||
|
||||
If you wish to disable this behaviour, please specify `-pools=""` argument.
|
||||
If you wish to disable this behaviour, please specify the `-pools=""` argument.
|
||||
|
||||
Please note that `strelaysrv` is only usable by `syncthing` **version v0.12 and onwards**.
|
||||
|
||||
To run `strelaysrv` you need to have port 22067 available to the internet, which means you might need to allow it through your firewall if you **have a public IP, or setup a port-forwarding** (22067 to 22067) if you are behind a router.
|
||||
To run `strelaysrv` you need to have port 22067 available to the internet, which means you might need to port forward it and/or allow it through your firewall.
|
||||
|
||||
Furthermore, **by default strelaysrv will also expose a /status HTTP endpoint on port 22070**, which is used by the pool servers to peek at metrics of the strelaysrv, such as what are the current transfer rates, how many clients are connected, etc, etc. If you wish this information to be available, similarlly you might want to allow it through your firewall, or port-forward it (22070 to 22070) on your NAT device.
|
||||
|
||||
This is **not mandatory** for the strelaysrv to function, and is used only to gather metrics and present them in the overview page of the pool server, displaying stats about the specific relay.
|
||||
Furthermore, by default `strelaysrv` will also expose a /status HTTP endpoint on port 22070, which is used by the pool servers to read metrics of the `strelaysrv`, such as the current transfer rates, how many clients are connected, etc. If you wish this information to be available you may need to port forward and allow it through your firewall. This is not mandatory for the `strelaysrv` to function, and is used only to gather metrics and present them in the overview page of the pool server.
|
||||
|
||||
At the point of writing the endpoint output looks as follows:
|
||||
|
||||
@@ -66,7 +58,7 @@ If you wish to disable the /status endpoint, provide `-status-srv=""` as one of
|
||||
|
||||
Running for public use
|
||||
----
|
||||
Make sure you have a public IP with port 22067 open, or make sure you have port-forwarding (22067 to 22067) if you are behind a router.
|
||||
Make sure you have a public IP with port 22067 open, or have forwarded port 22067 if you are behind a NAT.
|
||||
|
||||
Run the `strelaysrv` with no arguments (or `-debug` if you want more output), and that should be enough for the server to join the public relay pool.
|
||||
You should see a message saying:
|
||||
@@ -79,37 +71,37 @@ See `strelaysrv -help` for other options, such as rate limits, timeout intervals
|
||||
Running for private use
|
||||
-----
|
||||
|
||||
Once you've started the `strelaysrv`, it will generate a key pair and print an URI:
|
||||
Once you've started the `strelaysrv`, it will generate a key pair and print a URI:
|
||||
```bash
|
||||
relay://:22067/?id=EZQOIDM-6DDD4ZI-DJ65NSM-4OQWRAT-EIKSMJO-OZ552BO-WQZEGYY-STS5RQM&pingInterval=1m0s&networkTimeout=2m0s&sessionLimitBps=0&globalLimitBps=0&statusAddr=:22070
|
||||
```
|
||||
|
||||
This URI contains partial address of the relay server, as well as it's options which in the future may be taken into account when choosing the best suitable relay out of multiple available.
|
||||
This URI contains a partial address of the relay server, as well as its options which in the future may be taken into account when choosing the most suitable relay.
|
||||
|
||||
Because `-listen` option was not used, the `strelaysrv` does not know it's external IP, therefore you should replace the host part of the URI with your public IP address on which the `strelaysrv` will be available:
|
||||
Because the `-listen` option was not used `strelaysrv` does not know its external IP, therefore you should replace the host part of the URI with your public IP address on which the `strelaysrv` will be available:
|
||||
|
||||
```bash
|
||||
relay://123.123.123.123:22067/?id=EZQOIDM-6DDD4ZI-DJ65NSM-4OQWRAT-EIKSMJO-OZ552BO-WQZEGYY-STS5RQM&pingInterval=1m0s&networkTimeout=2m0s&sessionLimitBps=0&globalLimitBps=0&statusAddr=:22070
|
||||
relay://192.0.2.1:22067/?id=EZQOIDM-6DDD4ZI-DJ65NSM-4OQWRAT-EIKSMJO-OZ552BO-WQZEGYY-STS5RQM&pingInterval=1m0s&networkTimeout=2m0s&sessionLimitBps=0&globalLimitBps=0&statusAddr=:22070
|
||||
```
|
||||
|
||||
If you do not care about certificate pinning (improved security) or do not care about passing verbose settings to the clients, you can shorten the URL to just the host part:
|
||||
|
||||
```bash
|
||||
relay://123.123.123.123:22067
|
||||
relay://192.0.2.1:22067
|
||||
```
|
||||
|
||||
This URI can then be used in `syncthing` as one of the relay servers.
|
||||
This URI can then be used in `syncthing` clients as one of the relay servers by adding the URI to the "Sync Protocol Listen Address" field, under Actions and Settings.
|
||||
|
||||
See `strelaysrv -help` for other options, such as rate limits, timeout intervals, etc.
|
||||
|
||||
Other items available in this repo
|
||||
----
|
||||
##### testutil
|
||||
A test utility which can be used to test connectivity of a relay server.
|
||||
You need to generate two x509 key pairs (key.pem and cert.pem), one for the client, another one for the server, in separate directories.
|
||||
A test utility which can be used to test the connectivity of a relay server.
|
||||
You need to generate two x509 key pairs (key.pem and cert.pem), one for the client and one for the server, in separate directories.
|
||||
Afterwards, start the client:
|
||||
```bash
|
||||
./testutil -relay="relay://uri.of.relay" -keys=certs/client/ -join
|
||||
./testutil -relay="relay://192.0.2.1:22067" -keys=certs/client/ -join
|
||||
```
|
||||
|
||||
This prints out the client ID:
|
||||
@@ -120,7 +112,7 @@ This prints out the client ID:
|
||||
In the other terminal run the following:
|
||||
|
||||
```bash
|
||||
./testutil -relay="relay://uri.of.relay" -keys=certs/server/ -connect=BG2C5ZA-W7XPFDO-LH222Z6-65F3HJX-ADFTGRT-3SBFIGM-KV26O2Q-E5RMRQ2
|
||||
./testutil -relay="relay://192.0.2.1:22067" -keys=certs/server/ -connect=BG2C5ZA-W7XPFDO-LH222Z6-65F3HJX-ADFTGRT-3SBFIGM-KV26O2Q-E5RMRQ2
|
||||
```
|
||||
|
||||
Which should then give you an interactive prompt, where you can type things in one terminal, and they get relayed to the other terminal.
|
||||
@@ -137,5 +129,3 @@ Relay related libraries used by this repo
|
||||
Only used by the testutil.
|
||||
|
||||
[Available here](https://github.com/syncthing/syncthing/tree/master/lib/relay/client)
|
||||
|
||||
|
||||
|
||||
@@ -20,10 +20,10 @@ import (
|
||||
"syscall"
|
||||
"time"
|
||||
|
||||
"github.com/juju/ratelimit"
|
||||
"github.com/syncthing/syncthing/lib/osutil"
|
||||
"github.com/syncthing/syncthing/lib/relay/protocol"
|
||||
"github.com/syncthing/syncthing/lib/tlsutil"
|
||||
"golang.org/x/time/rate"
|
||||
|
||||
"github.com/syncthing/syncthing/lib/config"
|
||||
"github.com/syncthing/syncthing/lib/nat"
|
||||
@@ -54,7 +54,6 @@ func init() {
|
||||
var (
|
||||
listen string
|
||||
debug bool
|
||||
proto string
|
||||
|
||||
sessionAddress []byte
|
||||
sessionPort uint16
|
||||
@@ -69,8 +68,8 @@ var (
|
||||
globalLimitBps int
|
||||
overLimit int32
|
||||
descriptorLimit int64
|
||||
sessionLimiter *ratelimit.Bucket
|
||||
globalLimiter *ratelimit.Bucket
|
||||
sessionLimiter *rate.Limiter
|
||||
globalLimiter *rate.Limiter
|
||||
|
||||
statusAddr string
|
||||
poolAddrs string
|
||||
@@ -216,10 +215,10 @@ func main() {
|
||||
}
|
||||
|
||||
if sessionLimitBps > 0 {
|
||||
sessionLimiter = ratelimit.NewBucketWithRate(float64(sessionLimitBps), int64(2*sessionLimitBps))
|
||||
sessionLimiter = rate.NewLimiter(rate.Limit(sessionLimitBps), 2*sessionLimitBps)
|
||||
}
|
||||
if globalLimitBps > 0 {
|
||||
globalLimiter = ratelimit.NewBucketWithRate(float64(globalLimitBps), int64(2*globalLimitBps))
|
||||
globalLimiter = rate.NewLimiter(rate.Limit(globalLimitBps), 2*globalLimitBps)
|
||||
}
|
||||
|
||||
if statusAddr != "" {
|
||||
|
||||
+49
-22
@@ -7,15 +7,16 @@ import (
|
||||
"encoding/hex"
|
||||
"fmt"
|
||||
"log"
|
||||
"math"
|
||||
"net"
|
||||
"sync"
|
||||
"sync/atomic"
|
||||
"time"
|
||||
|
||||
"github.com/juju/ratelimit"
|
||||
"github.com/syncthing/syncthing/lib/relay/protocol"
|
||||
"golang.org/x/time/rate"
|
||||
|
||||
syncthingprotocol "github.com/syncthing/syncthing/lib/protocol"
|
||||
"github.com/syncthing/syncthing/lib/relay/protocol"
|
||||
)
|
||||
|
||||
var (
|
||||
@@ -26,7 +27,7 @@ var (
|
||||
bytesProxied int64
|
||||
)
|
||||
|
||||
func newSession(serverid, clientid syncthingprotocol.DeviceID, sessionRateLimit, globalRateLimit *ratelimit.Bucket) *session {
|
||||
func newSession(serverid, clientid syncthingprotocol.DeviceID, sessionRateLimit, globalRateLimit *rate.Limiter) *session {
|
||||
serverkey := make([]byte, 32)
|
||||
_, err := rand.Read(serverkey)
|
||||
if err != nil {
|
||||
@@ -108,7 +109,7 @@ type session struct {
|
||||
clientkey []byte
|
||||
clientid syncthingprotocol.DeviceID
|
||||
|
||||
rateLimit func(bytes int64)
|
||||
rateLimit func(bytes int)
|
||||
|
||||
connsChan chan net.Conn
|
||||
conns []net.Conn
|
||||
@@ -216,7 +217,7 @@ done:
|
||||
func (s *session) GetClientInvitationMessage() protocol.SessionInvitation {
|
||||
return protocol.SessionInvitation{
|
||||
From: s.serverid[:],
|
||||
Key: []byte(s.clientkey),
|
||||
Key: s.clientkey,
|
||||
Address: sessionAddress,
|
||||
Port: sessionPort,
|
||||
ServerSocket: false,
|
||||
@@ -226,7 +227,7 @@ func (s *session) GetClientInvitationMessage() protocol.SessionInvitation {
|
||||
func (s *session) GetServerInvitationMessage() protocol.SessionInvitation {
|
||||
return protocol.SessionInvitation{
|
||||
From: s.clientid[:],
|
||||
Key: []byte(s.serverkey),
|
||||
Key: s.serverkey,
|
||||
Address: sessionAddress,
|
||||
Port: sessionPort,
|
||||
ServerSocket: true,
|
||||
@@ -268,7 +269,7 @@ func (s *session) proxy(c1, c2 net.Conn) error {
|
||||
}
|
||||
|
||||
if s.rateLimit != nil {
|
||||
s.rateLimit(int64(n))
|
||||
s.rateLimit(n)
|
||||
}
|
||||
|
||||
c2.SetWriteDeadline(time.Now().Add(networkTimeout))
|
||||
@@ -283,7 +284,7 @@ func (s *session) String() string {
|
||||
return fmt.Sprintf("<%s/%s>", hex.EncodeToString(s.clientkey)[:5], hex.EncodeToString(s.serverkey)[:5])
|
||||
}
|
||||
|
||||
func makeRateLimitFunc(sessionRateLimit, globalRateLimit *ratelimit.Bucket) func(int64) {
|
||||
func makeRateLimitFunc(sessionRateLimit, globalRateLimit *rate.Limiter) func(int) {
|
||||
// This may be a case of super duper premature optimization... We build an
|
||||
// optimized function to do the rate limiting here based on what we need
|
||||
// to do and then use it in the loop.
|
||||
@@ -298,29 +299,55 @@ func makeRateLimitFunc(sessionRateLimit, globalRateLimit *ratelimit.Bucket) func
|
||||
|
||||
if sessionRateLimit == nil {
|
||||
// We only have a global limiter
|
||||
return func(bytes int64) {
|
||||
globalRateLimit.Wait(bytes)
|
||||
return func(bytes int) {
|
||||
take(bytes, globalRateLimit)
|
||||
}
|
||||
}
|
||||
|
||||
if globalRateLimit == nil {
|
||||
// We only have a session limiter
|
||||
return func(bytes int64) {
|
||||
sessionRateLimit.Wait(bytes)
|
||||
return func(bytes int) {
|
||||
take(bytes, sessionRateLimit)
|
||||
}
|
||||
}
|
||||
|
||||
// We have both. Queue the bytes on both the global and session specific
|
||||
// rate limiters. Wait for both in parallell, so that the actual send
|
||||
// happens when both conditions are satisfied. In practice this just means
|
||||
// wait the longer of the two times.
|
||||
return func(bytes int64) {
|
||||
t0 := sessionRateLimit.Take(bytes)
|
||||
t1 := globalRateLimit.Take(bytes)
|
||||
if t0 > t1 {
|
||||
time.Sleep(t0)
|
||||
} else {
|
||||
time.Sleep(t1)
|
||||
// rate limiters.
|
||||
return func(bytes int) {
|
||||
take(bytes, sessionRateLimit, globalRateLimit)
|
||||
}
|
||||
}
|
||||
|
||||
// take is a utility function to consume tokens from a set of rate.Limiters.
|
||||
// Tokens are consumed in parallel on all limiters, respecting their
|
||||
// individual burst sizes.
|
||||
func take(tokens int, ls ...*rate.Limiter) {
|
||||
// minBurst is the smallest burst size supported by all limiters.
|
||||
minBurst := int(math.MaxInt32)
|
||||
for _, l := range ls {
|
||||
if burst := l.Burst(); burst < minBurst {
|
||||
minBurst = burst
|
||||
}
|
||||
}
|
||||
|
||||
for tokens > 0 {
|
||||
// chunk is how many tokens we can consume at a time
|
||||
chunk := tokens
|
||||
if chunk > minBurst {
|
||||
chunk = minBurst
|
||||
}
|
||||
|
||||
// maxDelay is the longest delay mandated by any of the limiters for
|
||||
// the chosen chunk size.
|
||||
var maxDelay time.Duration
|
||||
for _, l := range ls {
|
||||
res := l.ReserveN(time.Now(), chunk)
|
||||
if del := res.Delay(); del > maxDelay {
|
||||
maxDelay = del
|
||||
}
|
||||
}
|
||||
|
||||
time.Sleep(maxDelay)
|
||||
tokens -= chunk
|
||||
}
|
||||
}
|
||||
|
||||
@@ -42,7 +42,7 @@ func getStatus(w http.ResponseWriter, r *http.Request) {
|
||||
status["goMaxProcs"] = runtime.GOMAXPROCS(-1)
|
||||
status["goNumRoutine"] = runtime.NumGoroutine()
|
||||
status["kbps10s1m5m15m30m60m"] = []int64{
|
||||
rc.rate(10/10) * 8 / 1000,
|
||||
rc.rate(1) * 8 / 1000, // each interval is 10s
|
||||
rc.rate(60/10) * 8 / 1000,
|
||||
rc.rate(5*60/10) * 8 / 1000,
|
||||
rc.rate(15*60/10) * 8 / 1000,
|
||||
|
||||
@@ -2,7 +2,7 @@
|
||||
//
|
||||
// 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/.
|
||||
// You can obtain one at https://mozilla.org/MPL/2.0/.
|
||||
|
||||
package main
|
||||
|
||||
|
||||
@@ -2,7 +2,7 @@
|
||||
//
|
||||
// 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/.
|
||||
// You can obtain one at https://mozilla.org/MPL/2.0/.
|
||||
|
||||
package main
|
||||
|
||||
|
||||
@@ -2,7 +2,7 @@
|
||||
//
|
||||
// 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/.
|
||||
// You can obtain one at https://mozilla.org/MPL/2.0/.
|
||||
|
||||
package main
|
||||
|
||||
|
||||
@@ -2,7 +2,7 @@
|
||||
//
|
||||
// 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/.
|
||||
// You can obtain one at https://mozilla.org/MPL/2.0/.
|
||||
|
||||
package main
|
||||
|
||||
|
||||
@@ -2,7 +2,7 @@
|
||||
//
|
||||
// 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/.
|
||||
// You can obtain one at https://mozilla.org/MPL/2.0/.
|
||||
|
||||
package main
|
||||
|
||||
@@ -20,13 +20,13 @@ func TestAuditService(t *testing.T) {
|
||||
service := newAuditService(buf)
|
||||
|
||||
// Event sent before start, will not be logged
|
||||
events.Default.Log(events.Ping, "the first event")
|
||||
events.Default.Log(events.ConfigSaved, "the first event")
|
||||
|
||||
go service.Serve()
|
||||
service.WaitForStart()
|
||||
|
||||
// Event that should end up in the audit log
|
||||
events.Default.Log(events.Ping, "the second event")
|
||||
events.Default.Log(events.ConfigSaved, "the second event")
|
||||
|
||||
// We need to give the events time to arrive, since the channels are buffered etc.
|
||||
time.Sleep(10 * time.Millisecond)
|
||||
@@ -35,7 +35,7 @@ func TestAuditService(t *testing.T) {
|
||||
service.WaitForStop()
|
||||
|
||||
// This event should not be logged, since we have stopped.
|
||||
events.Default.Log(events.Ping, "the third event")
|
||||
events.Default.Log(events.ConfigSaved, "the third event")
|
||||
|
||||
result := string(buf.Bytes())
|
||||
t.Log(result)
|
||||
|
||||
@@ -2,7 +2,7 @@
|
||||
//
|
||||
// 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/.
|
||||
// You can obtain one at https://mozilla.org/MPL/2.0/.
|
||||
|
||||
package main
|
||||
|
||||
|
||||
@@ -2,7 +2,7 @@
|
||||
//
|
||||
// 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/.
|
||||
// You can obtain one at https://mozilla.org/MPL/2.0/.
|
||||
|
||||
package main
|
||||
|
||||
|
||||
+77
-60
@@ -2,7 +2,7 @@
|
||||
//
|
||||
// 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/.
|
||||
// You can obtain one at https://mozilla.org/MPL/2.0/.
|
||||
|
||||
package main
|
||||
|
||||
@@ -82,8 +82,6 @@ type modelIntf interface {
|
||||
Availability(folder, file string, version protocol.Vector, block protocol.BlockInfo) []model.Availability
|
||||
GetIgnores(folder string) ([]string, []string, error)
|
||||
SetIgnores(folder string, content []string) error
|
||||
PauseDevice(device protocol.DeviceID)
|
||||
ResumeDevice(device protocol.DeviceID)
|
||||
DelayScan(folder string, next time.Duration)
|
||||
ScanFolder(folder string) error
|
||||
ScanFolders() map[string]error
|
||||
@@ -105,6 +103,8 @@ type configIntf interface {
|
||||
Subscribe(c config.Committer)
|
||||
Folders() map[string]config.FolderConfiguration
|
||||
Devices() map[protocol.DeviceID]config.DeviceConfiguration
|
||||
SetDevice(config.DeviceConfiguration) error
|
||||
SetDevices([]config.DeviceConfiguration) error
|
||||
Save() error
|
||||
ListenAddresses() []string
|
||||
RequiresRestart() bool
|
||||
@@ -234,8 +234,8 @@ func (s *apiService) Serve() {
|
||||
getRestMux.HandleFunc("/rest/db/need", s.getDBNeed) // folder [perpage] [page]
|
||||
getRestMux.HandleFunc("/rest/db/status", s.getDBStatus) // folder
|
||||
getRestMux.HandleFunc("/rest/db/browse", s.getDBBrowse) // folder [prefix] [dirsonly] [levels]
|
||||
getRestMux.HandleFunc("/rest/events", s.getIndexEvents) // since [limit]
|
||||
getRestMux.HandleFunc("/rest/events/disk", s.getDiskEvents) // since [limit]
|
||||
getRestMux.HandleFunc("/rest/events", s.getIndexEvents) // [since] [limit] [timeout]
|
||||
getRestMux.HandleFunc("/rest/events/disk", s.getDiskEvents) // [since] [limit] [timeout]
|
||||
getRestMux.HandleFunc("/rest/stats/device", s.getDeviceStats) // -
|
||||
getRestMux.HandleFunc("/rest/stats/folder", s.getFolderStats) // -
|
||||
getRestMux.HandleFunc("/rest/svc/deviceid", s.getDeviceID) // id
|
||||
@@ -258,21 +258,21 @@ func (s *apiService) Serve() {
|
||||
|
||||
// The POST handlers
|
||||
postRestMux := http.NewServeMux()
|
||||
postRestMux.HandleFunc("/rest/db/prio", s.postDBPrio) // folder file [perpage] [page]
|
||||
postRestMux.HandleFunc("/rest/db/ignores", s.postDBIgnores) // folder
|
||||
postRestMux.HandleFunc("/rest/db/override", s.postDBOverride) // folder
|
||||
postRestMux.HandleFunc("/rest/db/scan", s.postDBScan) // folder [sub...] [delay]
|
||||
postRestMux.HandleFunc("/rest/system/config", s.postSystemConfig) // <body>
|
||||
postRestMux.HandleFunc("/rest/system/error", s.postSystemError) // <body>
|
||||
postRestMux.HandleFunc("/rest/system/error/clear", s.postSystemErrorClear) // -
|
||||
postRestMux.HandleFunc("/rest/system/ping", s.restPing) // -
|
||||
postRestMux.HandleFunc("/rest/system/reset", s.postSystemReset) // [folder]
|
||||
postRestMux.HandleFunc("/rest/system/restart", s.postSystemRestart) // -
|
||||
postRestMux.HandleFunc("/rest/system/shutdown", s.postSystemShutdown) // -
|
||||
postRestMux.HandleFunc("/rest/system/upgrade", s.postSystemUpgrade) // -
|
||||
postRestMux.HandleFunc("/rest/system/pause", s.postSystemPause) // device
|
||||
postRestMux.HandleFunc("/rest/system/resume", s.postSystemResume) // device
|
||||
postRestMux.HandleFunc("/rest/system/debug", s.postSystemDebug) // [enable] [disable]
|
||||
postRestMux.HandleFunc("/rest/db/prio", s.postDBPrio) // folder file [perpage] [page]
|
||||
postRestMux.HandleFunc("/rest/db/ignores", s.postDBIgnores) // folder
|
||||
postRestMux.HandleFunc("/rest/db/override", s.postDBOverride) // folder
|
||||
postRestMux.HandleFunc("/rest/db/scan", s.postDBScan) // folder [sub...] [delay]
|
||||
postRestMux.HandleFunc("/rest/system/config", s.postSystemConfig) // <body>
|
||||
postRestMux.HandleFunc("/rest/system/error", s.postSystemError) // <body>
|
||||
postRestMux.HandleFunc("/rest/system/error/clear", s.postSystemErrorClear) // -
|
||||
postRestMux.HandleFunc("/rest/system/ping", s.restPing) // -
|
||||
postRestMux.HandleFunc("/rest/system/reset", s.postSystemReset) // [folder]
|
||||
postRestMux.HandleFunc("/rest/system/restart", s.postSystemRestart) // -
|
||||
postRestMux.HandleFunc("/rest/system/shutdown", s.postSystemShutdown) // -
|
||||
postRestMux.HandleFunc("/rest/system/upgrade", s.postSystemUpgrade) // -
|
||||
postRestMux.HandleFunc("/rest/system/pause", s.makeDevicePauseHandler(true)) // [device]
|
||||
postRestMux.HandleFunc("/rest/system/resume", s.makeDevicePauseHandler(false)) // [device]
|
||||
postRestMux.HandleFunc("/rest/system/debug", s.postSystemDebug) // [enable] [disable]
|
||||
|
||||
// Debug endpoints, not for general use
|
||||
debugMux := http.NewServeMux()
|
||||
@@ -327,8 +327,10 @@ func (s *apiService) Serve() {
|
||||
handler = debugMiddleware(handler)
|
||||
|
||||
srv := http.Server{
|
||||
Handler: handler,
|
||||
ReadTimeout: 10 * time.Second,
|
||||
Handler: handler,
|
||||
// ReadTimeout must be longer than SyncthingController $scope.refresh
|
||||
// interval to avoid HTTP keepalive/GUI refresh race.
|
||||
ReadTimeout: 15 * time.Second,
|
||||
}
|
||||
|
||||
s.fss = newFolderSummaryService(s.cfg, s.model)
|
||||
@@ -342,7 +344,7 @@ func (s *apiService) Serve() {
|
||||
s.started <- listener.Addr().String()
|
||||
}
|
||||
|
||||
// Indicate successfull initial startup, to ourselves and to interested
|
||||
// Indicate successful initial startup, to ourselves and to interested
|
||||
// listeners (i.e. the thing that starts the browser).
|
||||
select {
|
||||
case <-s.startedOnce:
|
||||
@@ -381,10 +383,8 @@ func (s *apiService) String() string {
|
||||
}
|
||||
|
||||
func (s *apiService) VerifyConfiguration(from, to config.Configuration) error {
|
||||
if _, err := net.ResolveTCPAddr("tcp", to.GUI.Address()); err != nil {
|
||||
return err
|
||||
}
|
||||
return nil
|
||||
_, err := net.ResolveTCPAddr("tcp", to.GUI.Address())
|
||||
return err
|
||||
}
|
||||
|
||||
func (s *apiService) CommitConfiguration(from, to config.Configuration) bool {
|
||||
@@ -1020,9 +1020,15 @@ func (s *apiService) getEvents(w http.ResponseWriter, r *http.Request, eventSub
|
||||
qs := r.URL.Query()
|
||||
sinceStr := qs.Get("since")
|
||||
limitStr := qs.Get("limit")
|
||||
timeoutStr := qs.Get("timeout")
|
||||
since, _ := strconv.Atoi(sinceStr)
|
||||
limit, _ := strconv.Atoi(limitStr)
|
||||
|
||||
timeout := defaultEventTimeout
|
||||
if timeoutSec, timeoutErr := strconv.Atoi(timeoutStr); timeoutErr == nil && timeoutSec >= 0 { // 0 is a valid timeout
|
||||
timeout = time.Duration(timeoutSec) * time.Second
|
||||
}
|
||||
|
||||
// Flush before blocking, to indicate that we've received the request and
|
||||
// that it should not be retried. Must set Content-Type header before
|
||||
// flushing.
|
||||
@@ -1030,7 +1036,8 @@ func (s *apiService) getEvents(w http.ResponseWriter, r *http.Request, eventSub
|
||||
f := w.(http.Flusher)
|
||||
f.Flush()
|
||||
|
||||
evs := eventSub.Since(since, nil)
|
||||
// If there are no events available return an empty slice, as this gets serialized as `[]`
|
||||
evs := eventSub.Since(since, []events.Event{}, timeout)
|
||||
if 0 < limit && limit < len(evs) {
|
||||
evs = evs[len(evs)-limit:]
|
||||
}
|
||||
@@ -1039,11 +1046,12 @@ func (s *apiService) getEvents(w http.ResponseWriter, r *http.Request, eventSub
|
||||
}
|
||||
|
||||
func (s *apiService) getSystemUpgrade(w http.ResponseWriter, r *http.Request) {
|
||||
if noUpgrade {
|
||||
if noUpgradeFromEnv {
|
||||
http.Error(w, upgrade.ErrUpgradeUnsupported.Error(), 500)
|
||||
return
|
||||
}
|
||||
rel, err := upgrade.LatestRelease(s.cfg.Options().ReleasesURL, Version)
|
||||
opts := s.cfg.Options()
|
||||
rel, err := upgrade.LatestRelease(opts.ReleasesURL, Version, opts.UpgradeToPreReleases)
|
||||
if err != nil {
|
||||
http.Error(w, err.Error(), 500)
|
||||
return
|
||||
@@ -1084,7 +1092,8 @@ func (s *apiService) getLang(w http.ResponseWriter, r *http.Request) {
|
||||
}
|
||||
|
||||
func (s *apiService) postSystemUpgrade(w http.ResponseWriter, r *http.Request) {
|
||||
rel, err := upgrade.LatestRelease(s.cfg.Options().ReleasesURL, Version)
|
||||
opts := s.cfg.Options()
|
||||
rel, err := upgrade.LatestRelease(opts.ReleasesURL, Version, opts.UpgradeToPreReleases)
|
||||
if err != nil {
|
||||
l.Warnln("getting latest release:", err)
|
||||
http.Error(w, err.Error(), 500)
|
||||
@@ -1105,48 +1114,56 @@ func (s *apiService) postSystemUpgrade(w http.ResponseWriter, r *http.Request) {
|
||||
}
|
||||
}
|
||||
|
||||
func (s *apiService) postSystemPause(w http.ResponseWriter, r *http.Request) {
|
||||
var qs = r.URL.Query()
|
||||
var deviceStr = qs.Get("device")
|
||||
func (s *apiService) makeDevicePauseHandler(paused bool) http.HandlerFunc {
|
||||
return func(w http.ResponseWriter, r *http.Request) {
|
||||
var qs = r.URL.Query()
|
||||
var deviceStr = qs.Get("device")
|
||||
|
||||
device, err := protocol.DeviceIDFromString(deviceStr)
|
||||
if err != nil {
|
||||
http.Error(w, err.Error(), 500)
|
||||
return
|
||||
var cfgs []config.DeviceConfiguration
|
||||
|
||||
if deviceStr == "" {
|
||||
for _, cfg := range s.cfg.Devices() {
|
||||
cfg.Paused = paused
|
||||
cfgs = append(cfgs, cfg)
|
||||
}
|
||||
} else {
|
||||
device, err := protocol.DeviceIDFromString(deviceStr)
|
||||
if err != nil {
|
||||
http.Error(w, err.Error(), 500)
|
||||
return
|
||||
}
|
||||
|
||||
cfg, ok := s.cfg.Devices()[device]
|
||||
if !ok {
|
||||
http.Error(w, "not found", http.StatusNotFound)
|
||||
return
|
||||
}
|
||||
|
||||
cfg.Paused = paused
|
||||
cfgs = append(cfgs, cfg)
|
||||
}
|
||||
|
||||
if err := s.cfg.SetDevices(cfgs); err != nil {
|
||||
http.Error(w, err.Error(), 500)
|
||||
}
|
||||
}
|
||||
|
||||
s.model.PauseDevice(device)
|
||||
}
|
||||
|
||||
func (s *apiService) postSystemResume(w http.ResponseWriter, r *http.Request) {
|
||||
var qs = r.URL.Query()
|
||||
var deviceStr = qs.Get("device")
|
||||
|
||||
device, err := protocol.DeviceIDFromString(deviceStr)
|
||||
if err != nil {
|
||||
http.Error(w, err.Error(), 500)
|
||||
return
|
||||
}
|
||||
|
||||
s.model.ResumeDevice(device)
|
||||
}
|
||||
|
||||
func (s *apiService) postDBScan(w http.ResponseWriter, r *http.Request) {
|
||||
qs := r.URL.Query()
|
||||
folder := qs.Get("folder")
|
||||
if folder != "" {
|
||||
subs := qs["sub"]
|
||||
err := s.model.ScanFolderSubdirs(folder, subs)
|
||||
if err != nil {
|
||||
http.Error(w, err.Error(), 500)
|
||||
return
|
||||
}
|
||||
nextStr := qs.Get("next")
|
||||
next, err := strconv.Atoi(nextStr)
|
||||
if err == nil {
|
||||
s.model.DelayScan(folder, time.Duration(next)*time.Second)
|
||||
}
|
||||
|
||||
subs := qs["sub"]
|
||||
err = s.model.ScanFolderSubdirs(folder, subs)
|
||||
if err != nil {
|
||||
http.Error(w, err.Error(), 500)
|
||||
return
|
||||
}
|
||||
} else {
|
||||
errors := s.model.ScanFolders()
|
||||
if len(errors) > 0 {
|
||||
|
||||
@@ -2,7 +2,7 @@
|
||||
//
|
||||
// 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/.
|
||||
// You can obtain one at https://mozilla.org/MPL/2.0/.
|
||||
|
||||
package main
|
||||
|
||||
|
||||
@@ -2,7 +2,7 @@
|
||||
//
|
||||
// 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/.
|
||||
// You can obtain one at https://mozilla.org/MPL/2.0/.
|
||||
|
||||
package main
|
||||
|
||||
|
||||
@@ -2,7 +2,7 @@
|
||||
//
|
||||
// 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/.
|
||||
// You can obtain one at https://mozilla.org/MPL/2.0/.
|
||||
|
||||
//+build solaris
|
||||
|
||||
|
||||
@@ -2,7 +2,7 @@
|
||||
//
|
||||
// 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/.
|
||||
// You can obtain one at https://mozilla.org/MPL/2.0/.
|
||||
|
||||
package main
|
||||
|
||||
|
||||
@@ -2,7 +2,7 @@
|
||||
//
|
||||
// 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/.
|
||||
// You can obtain one at https://mozilla.org/MPL/2.0/.
|
||||
|
||||
package main
|
||||
|
||||
|
||||
@@ -2,7 +2,7 @@
|
||||
//
|
||||
// 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/.
|
||||
// You can obtain one at https://mozilla.org/MPL/2.0/.
|
||||
|
||||
//+build !windows,!solaris
|
||||
|
||||
|
||||
@@ -2,7 +2,7 @@
|
||||
//
|
||||
// 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/.
|
||||
// You can obtain one at https://mozilla.org/MPL/2.0/.
|
||||
|
||||
//+build windows
|
||||
|
||||
|
||||
@@ -2,7 +2,7 @@
|
||||
//
|
||||
// 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/.
|
||||
// You can obtain one at https://mozilla.org/MPL/2.0/.
|
||||
|
||||
package main
|
||||
|
||||
|
||||
@@ -2,7 +2,7 @@
|
||||
//
|
||||
// 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/.
|
||||
// You can obtain one at https://mozilla.org/MPL/2.0/.
|
||||
|
||||
package main
|
||||
|
||||
|
||||
+210
-63
@@ -2,7 +2,7 @@
|
||||
//
|
||||
// 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/.
|
||||
// You can obtain one at https://mozilla.org/MPL/2.0/.
|
||||
|
||||
package main
|
||||
|
||||
@@ -12,6 +12,7 @@ import (
|
||||
"errors"
|
||||
"flag"
|
||||
"fmt"
|
||||
"io"
|
||||
"io/ioutil"
|
||||
"log"
|
||||
"net"
|
||||
@@ -42,9 +43,9 @@ import (
|
||||
"github.com/syncthing/syncthing/lib/protocol"
|
||||
"github.com/syncthing/syncthing/lib/rand"
|
||||
"github.com/syncthing/syncthing/lib/sha256"
|
||||
"github.com/syncthing/syncthing/lib/symlinks"
|
||||
"github.com/syncthing/syncthing/lib/tlsutil"
|
||||
"github.com/syncthing/syncthing/lib/upgrade"
|
||||
"github.com/syncthing/syncthing/lib/weakhash"
|
||||
|
||||
"github.com/thejerf/suture"
|
||||
|
||||
@@ -59,6 +60,7 @@ var (
|
||||
BuildHost = "unknown"
|
||||
BuildUser = "unknown"
|
||||
IsRelease bool
|
||||
IsCandidate bool
|
||||
IsBeta bool
|
||||
LongVersion string
|
||||
allowedVersionExp = regexp.MustCompile(`^v\d+\.\d+\.\d+(-[a-z0-9]+)*(\.\d+)*(\+\d+-g[0-9a-f]+)?(-[^\s]+)?$`)
|
||||
@@ -77,7 +79,7 @@ const (
|
||||
tlsDefaultCommonName = "syncthing"
|
||||
httpsRSABits = 2048
|
||||
bepRSABits = 0 // 384 bit ECDSA used instead
|
||||
pingEventInterval = time.Minute
|
||||
defaultEventTimeout = time.Minute
|
||||
maxSystemErrors = 5
|
||||
initialSystemLog = 10
|
||||
maxSystemLog = 250
|
||||
@@ -98,14 +100,23 @@ func init() {
|
||||
}
|
||||
}
|
||||
|
||||
// Check for a clean release build. A release is something like "v0.1.2",
|
||||
// with an optional suffix of letters and dot separated numbers like
|
||||
// "-beta3.47". If there's more stuff, like a plus sign and a commit hash
|
||||
// and so on, then it's not a release. If there's a dash anywhere in
|
||||
// there, it's some kind of beta or prerelease version.
|
||||
// Check for a clean release build. A release is something like
|
||||
// "v0.1.2", with an optional suffix of letters and dot separated
|
||||
// numbers like "-beta3.47". If there's more stuff, like a plus sign and
|
||||
// a commit hash and so on, then it's not a release. If it has a dash in
|
||||
// it, it's some sort of beta, release candidate or special build. If it
|
||||
// has "-rc." in it, like "v0.14.35-rc.42", then it's a candidate build.
|
||||
//
|
||||
// So, every build that is not a stable release build has IsBeta = true.
|
||||
// This is used to enable some extra debugging (the deadlock detector).
|
||||
//
|
||||
// Release candidate builds are also "betas" from this point of view and
|
||||
// will have that debugging enabled. In addition, some features are
|
||||
// forced for release candidates - auto upgrade, and usage reporting.
|
||||
|
||||
exp := regexp.MustCompile(`^v\d+\.\d+\.\d+(-[a-z]+[\d\.]+)?$`)
|
||||
IsRelease = exp.MatchString(Version)
|
||||
IsCandidate = strings.Contains(Version, "-rc.")
|
||||
IsBeta = strings.Contains(Version, "-")
|
||||
|
||||
stamp, _ := strconv.Atoi(BuildStamp)
|
||||
@@ -140,11 +151,11 @@ show time only (2).
|
||||
Development Settings
|
||||
--------------------
|
||||
|
||||
The following environment variables modify syncthing's behavior in ways that
|
||||
The following environment variables modify Syncthing's behavior in ways that
|
||||
are mostly useful for developers. Use with care.
|
||||
|
||||
STNODEFAULTFOLDER Don't create a default folder when starting for the first
|
||||
time. This variable will be ignored anytime after the first
|
||||
time. This variable will be ignored anytime after the first
|
||||
run.
|
||||
|
||||
STGUIASSETS Directory to load GUI assets from. Overrides compiled in
|
||||
@@ -153,8 +164,8 @@ are mostly useful for developers. Use with care.
|
||||
STTRACE A comma separated string of facilities to trace. The valid
|
||||
facility strings listed below.
|
||||
|
||||
STPROFILER Set to a listen address such as "127.0.0.1:9090" to start the
|
||||
profiler with HTTP access.
|
||||
STPROFILER Set to a listen address such as "127.0.0.1:9090" to start
|
||||
the profiler with HTTP access.
|
||||
|
||||
STCPUPROFILE Write a CPU profile to cpu-$pid.pprof on exit.
|
||||
|
||||
@@ -167,6 +178,20 @@ are mostly useful for developers. Use with care.
|
||||
STPERFSTATS Write running performance statistics to perf-$pid.csv. Not
|
||||
supported on Windows.
|
||||
|
||||
STDEADLOCK Used for debugging internal deadlocks. Use only under
|
||||
direction of a developer.
|
||||
|
||||
STDEADLOCKTIMEOUT Used for debugging internal deadlocks; sets debug
|
||||
sensitivity. Use only under direction of a developer.
|
||||
|
||||
STDEADLOCKTHRESHOLD Used for debugging internal deadlocks; sets debug
|
||||
sensitivity. Use only under direction of a developer.
|
||||
|
||||
STNORESTART Equivalent to the -no-restart argument. Disable the
|
||||
Syncthing monitor process which handles restarts for some
|
||||
configuration changes, upgrades, crashes and also log file
|
||||
writing (stdout is still written).
|
||||
|
||||
STNOUPGRADE Disable automatic upgrades.
|
||||
|
||||
STHASHING Select the SHA256 hashing package to use. Possible values
|
||||
@@ -179,7 +204,7 @@ are mostly useful for developers. Use with care.
|
||||
|
||||
GOGC Percentage of heap growth at which to trigger GC. Default is
|
||||
100. Lower numbers keep peak memory usage down, at the price
|
||||
of CPU usage (ie. performance).
|
||||
of CPU usage (i.e. performance).
|
||||
|
||||
|
||||
Debugging Facilities
|
||||
@@ -192,14 +217,15 @@ The following are valid values for the STTRACE variable:
|
||||
|
||||
// Environment options
|
||||
var (
|
||||
noUpgrade = os.Getenv("STNOUPGRADE") != ""
|
||||
innerProcess = os.Getenv("STNORESTART") != "" || os.Getenv("STMONITORED") != ""
|
||||
noDefaultFolder = os.Getenv("STNODEFAULTFOLDER") != ""
|
||||
noUpgradeFromEnv = os.Getenv("STNOUPGRADE") != ""
|
||||
innerProcess = os.Getenv("STNORESTART") != "" || os.Getenv("STMONITORED") != ""
|
||||
noDefaultFolder = os.Getenv("STNODEFAULTFOLDER") != ""
|
||||
)
|
||||
|
||||
type RuntimeOptions struct {
|
||||
confDir string
|
||||
reset bool
|
||||
resetDatabase bool
|
||||
resetDeltaIdxs bool
|
||||
showVersion bool
|
||||
showPaths bool
|
||||
doUpgrade bool
|
||||
@@ -210,8 +236,10 @@ type RuntimeOptions struct {
|
||||
hideConsole bool
|
||||
logFile string
|
||||
auditEnabled bool
|
||||
auditFile string
|
||||
verbose bool
|
||||
paused bool
|
||||
unpaused bool
|
||||
guiAddress string
|
||||
guiAPIKey string
|
||||
generateDir string
|
||||
@@ -258,8 +286,9 @@ func parseCommandLineOptions() RuntimeOptions {
|
||||
flag.IntVar(&options.logFlags, "logflags", options.logFlags, "Select information in log line prefix (see below)")
|
||||
flag.BoolVar(&options.noBrowser, "no-browser", false, "Do not start browser")
|
||||
flag.BoolVar(&options.browserOnly, "browser-only", false, "Open GUI in browser")
|
||||
flag.BoolVar(&options.noRestart, "no-restart", options.noRestart, "Do not restart; just exit")
|
||||
flag.BoolVar(&options.reset, "reset", false, "Reset the database")
|
||||
flag.BoolVar(&options.noRestart, "no-restart", options.noRestart, "Disable monitor process, managed restarts and log file writing")
|
||||
flag.BoolVar(&options.resetDatabase, "reset-database", false, "Reset the database, forcing a full rescan and resync")
|
||||
flag.BoolVar(&options.resetDeltaIdxs, "reset-deltas", false, "Reset delta index IDs, forcing a full index exchange")
|
||||
flag.BoolVar(&options.doUpgrade, "upgrade", false, "Perform upgrade")
|
||||
flag.BoolVar(&options.doUpgradeCheck, "upgrade-check", false, "Check for available upgrade")
|
||||
flag.BoolVar(&options.showVersion, "version", false, "Show version")
|
||||
@@ -267,8 +296,10 @@ func parseCommandLineOptions() RuntimeOptions {
|
||||
flag.StringVar(&options.upgradeTo, "upgrade-to", options.upgradeTo, "Force upgrade directly from specified URL")
|
||||
flag.BoolVar(&options.auditEnabled, "audit", false, "Write events to audit file")
|
||||
flag.BoolVar(&options.verbose, "verbose", false, "Print verbose log output")
|
||||
flag.BoolVar(&options.paused, "paused", false, "Start with all devices paused")
|
||||
flag.BoolVar(&options.paused, "paused", false, "Start with all devices and folders paused")
|
||||
flag.BoolVar(&options.unpaused, "unpaused", false, "Start with all devices and folders unpaused")
|
||||
flag.StringVar(&options.logFile, "logfile", options.logFile, "Log file name (use \"-\" for stdout)")
|
||||
flag.StringVar(&options.auditFile, "auditfile", options.auditFile, "Specify audit file (use \"-\" for stdout, \"--\" for stderr)")
|
||||
if runtime.GOOS == "windows" {
|
||||
// Allow user to hide the console window
|
||||
flag.BoolVar(&options.hideConsole, "no-console", false, "Hide console window")
|
||||
@@ -299,12 +330,27 @@ func main() {
|
||||
os.Setenv("STGUIAPIKEY", options.guiAPIKey)
|
||||
}
|
||||
|
||||
// Check for options which are not compatible with each other. We have
|
||||
// to check logfile before it's set to the default below - we only want
|
||||
// to complain if they set -logfile explicitly, not if it's set to its
|
||||
// default location
|
||||
if options.noRestart && (options.logFile != "" && options.logFile != "-") {
|
||||
l.Fatalln("-logfile may not be used with -no-restart or STNORESTART")
|
||||
}
|
||||
|
||||
if options.hideConsole {
|
||||
osutil.HideConsole()
|
||||
}
|
||||
|
||||
if options.confDir != "" {
|
||||
// Not set as default above because the string can be really long.
|
||||
if !filepath.IsAbs(options.confDir) {
|
||||
var err error
|
||||
options.confDir, err = filepath.Abs(options.confDir)
|
||||
if err != nil {
|
||||
l.Fatalln(err)
|
||||
}
|
||||
}
|
||||
baseDirs["config"] = options.confDir
|
||||
}
|
||||
|
||||
@@ -367,12 +413,40 @@ func main() {
|
||||
return
|
||||
}
|
||||
|
||||
if options.reset {
|
||||
if options.resetDatabase {
|
||||
resetDB()
|
||||
return
|
||||
}
|
||||
|
||||
if options.noRestart {
|
||||
// ---BEGIN TEMPORARY HACK---
|
||||
//
|
||||
// Remove once v0.14.21-v0.14.22 are rare enough. Those versions,
|
||||
// essentially:
|
||||
//
|
||||
// 1. os.Setenv("STMONITORED", "yes")
|
||||
// 2. os.Setenv("STNORESTART", "")
|
||||
//
|
||||
// where the intention was for 2 to cancel out 1 instead of setting
|
||||
// STNORESTART to the empty value. We check for exactly this combination
|
||||
// and pretend that neither was set. Looking through os.Environ lets us
|
||||
// distinguish. Luckily, we weren't smart enough to use os.Unsetenv.
|
||||
|
||||
matches := 0
|
||||
for _, str := range os.Environ() {
|
||||
if str == "STNORESTART=" {
|
||||
matches++
|
||||
}
|
||||
if str == "STMONITORED=yes" {
|
||||
matches++
|
||||
}
|
||||
}
|
||||
if matches == 2 {
|
||||
innerProcess = false
|
||||
}
|
||||
|
||||
// ---END TEMPORARY HACK---
|
||||
|
||||
if innerProcess || options.noRestart {
|
||||
syncthingMain(options)
|
||||
} else {
|
||||
monitorMain(options)
|
||||
@@ -452,8 +526,8 @@ func debugFacilities() string {
|
||||
|
||||
func checkUpgrade() upgrade.Release {
|
||||
cfg, _ := loadConfig()
|
||||
releasesURL := cfg.Options().ReleasesURL
|
||||
release, err := upgrade.LatestRelease(releasesURL, Version)
|
||||
opts := cfg.Options()
|
||||
release, err := upgrade.LatestRelease(opts.ReleasesURL, Version, opts.UpgradeToPreReleases)
|
||||
if err != nil {
|
||||
l.Fatalln("Upgrade:", err)
|
||||
}
|
||||
@@ -541,7 +615,7 @@ func syncthingMain(runtimeOptions RuntimeOptions) {
|
||||
l.SetPrefix("[start] ")
|
||||
|
||||
if runtimeOptions.auditEnabled {
|
||||
startAuditing(mainService)
|
||||
startAuditing(mainService, runtimeOptions.auditFile)
|
||||
}
|
||||
|
||||
if runtimeOptions.verbose {
|
||||
@@ -554,8 +628,8 @@ func syncthingMain(runtimeOptions RuntimeOptions) {
|
||||
// Event subscription for the API; must start early to catch the early
|
||||
// events. The LocalChangeDetected event might overwhelm the event
|
||||
// receiver in some situations so we will not subscribe to it here.
|
||||
apiSub := events.NewBufferedSubscription(events.Default.Subscribe(events.AllEvents&^events.LocalChangeDetected), 1000)
|
||||
diskSub := events.NewBufferedSubscription(events.Default.Subscribe(events.LocalChangeDetected), 1000)
|
||||
apiSub := events.NewBufferedSubscription(events.Default.Subscribe(events.AllEvents&^events.LocalChangeDetected&^events.RemoteChangeDetected), 1000)
|
||||
diskSub := events.NewBufferedSubscription(events.Default.Subscribe(events.LocalChangeDetected|events.RemoteChangeDetected), 1000)
|
||||
|
||||
if len(os.Getenv("GOMAXPROCS")) == 0 {
|
||||
runtime.GOMAXPROCS(runtime.NumCPU())
|
||||
@@ -566,7 +640,7 @@ func syncthingMain(runtimeOptions RuntimeOptions) {
|
||||
// report the error if there is one.
|
||||
osutil.MaximizeOpenFileLimit()
|
||||
|
||||
// Ensure that that we have a certificate and key.
|
||||
// Ensure that we have a certificate and key.
|
||||
cert, err := tls.LoadX509KeyPair(locations[locCertFile], locations[locKeyFile])
|
||||
if err != nil {
|
||||
l.Infof("Generating ECDSA key and certificate for %s...", tlsDefaultCommonName)
|
||||
@@ -584,6 +658,10 @@ func syncthingMain(runtimeOptions RuntimeOptions) {
|
||||
|
||||
sha256.SelectAlgo()
|
||||
sha256.Report()
|
||||
perfWithWeakHash := cpuBench(3, 150*time.Millisecond, true)
|
||||
l.Infof("Hashing performance with weak hash is %.02f MB/s", perfWithWeakHash)
|
||||
perfWithoutWeakHash := cpuBench(3, 150*time.Millisecond, false)
|
||||
l.Infof("Hashing performance without weak hash is %.02f MB/s", perfWithoutWeakHash)
|
||||
|
||||
// Emit the Starting event, now that we know who we are.
|
||||
|
||||
@@ -620,6 +698,10 @@ func syncthingMain(runtimeOptions RuntimeOptions) {
|
||||
InsecureSkipVerify: true,
|
||||
MinVersion: tls.VersionTLS12,
|
||||
CipherSuites: []uint16{
|
||||
0xCCA8, // TLS_ECDHE_RSA_WITH_CHACHA20_POLY1305, Go 1.8
|
||||
0xCCA9, // TLS_ECDHE_ECDSA_WITH_CHACHA20_POLY1305, Go 1.8
|
||||
tls.TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384,
|
||||
tls.TLS_ECDHE_ECDSA_WITH_AES_256_GCM_SHA384,
|
||||
tls.TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256,
|
||||
tls.TLS_ECDHE_ECDSA_WITH_AES_128_GCM_SHA256,
|
||||
tls.TLS_ECDHE_RSA_WITH_AES_128_CBC_SHA,
|
||||
@@ -629,13 +711,22 @@ func syncthingMain(runtimeOptions RuntimeOptions) {
|
||||
},
|
||||
}
|
||||
|
||||
// If the read or write rate should be limited, set up a rate limiter for it.
|
||||
// This will be used on connections created in the connect and listen routines.
|
||||
|
||||
opts := cfg.Options()
|
||||
|
||||
if !opts.SymlinksEnabled {
|
||||
symlinks.Supported = false
|
||||
if opts.WeakHashSelectionMethod == config.WeakHashAuto {
|
||||
if perfWithoutWeakHash*0.8 > perfWithWeakHash {
|
||||
l.Infof("Weak hash disabled, as it has an unacceptable performance impact.")
|
||||
weakhash.Enabled = false
|
||||
} else {
|
||||
l.Infof("Weak hash enabled, as it has an acceptable performance impact.")
|
||||
weakhash.Enabled = true
|
||||
}
|
||||
} else if opts.WeakHashSelectionMethod == config.WeakHashNever {
|
||||
l.Infof("Disabling weak hash")
|
||||
weakhash.Enabled = false
|
||||
} else if opts.WeakHashSelectionMethod == config.WeakHashAlways {
|
||||
l.Infof("Enabling weak hash")
|
||||
weakhash.Enabled = true
|
||||
}
|
||||
|
||||
if (opts.MaxRecvKbps > 0 || opts.MaxSendKbps > 0) && !opts.LimitBandwidthInLan {
|
||||
@@ -663,6 +754,11 @@ func syncthingMain(runtimeOptions RuntimeOptions) {
|
||||
l.Fatalln("Cannot open database:", err, "- Is another copy of Syncthing already running?")
|
||||
}
|
||||
|
||||
if runtimeOptions.resetDeltaIdxs {
|
||||
l.Infoln("Reinitializing delta index IDs")
|
||||
ldb.DropDeltaIndexIDs()
|
||||
}
|
||||
|
||||
protectedFiles := []string{
|
||||
locations[locDatabase],
|
||||
locations[locConfigFile],
|
||||
@@ -685,6 +781,10 @@ func syncthingMain(runtimeOptions RuntimeOptions) {
|
||||
// have been incorrectly ignore filtered.
|
||||
ldb.DropDeltaIndexIDs()
|
||||
}
|
||||
if cfg.RawCopy().OriginalVersion < 19 {
|
||||
// Converts old symlink types to new in the entire database.
|
||||
ldb.ConvertSymlinkTypes()
|
||||
}
|
||||
|
||||
m := model.NewModel(cfg, myID, myDeviceName(cfg), "syncthing", Version, ldb, protectedFiles)
|
||||
|
||||
@@ -697,14 +797,17 @@ func syncthingMain(runtimeOptions RuntimeOptions) {
|
||||
m.StartDeadlockDetector(20 * time.Minute)
|
||||
}
|
||||
|
||||
if runtimeOptions.paused {
|
||||
for device := range cfg.Devices() {
|
||||
m.PauseDevice(device)
|
||||
}
|
||||
if runtimeOptions.unpaused {
|
||||
setPauseState(cfg, false)
|
||||
} else if runtimeOptions.paused {
|
||||
setPauseState(cfg, true)
|
||||
}
|
||||
|
||||
// Add and start folders
|
||||
for _, folderCfg := range cfg.Folders() {
|
||||
if folderCfg.Paused {
|
||||
continue
|
||||
}
|
||||
m.AddFolder(folderCfg)
|
||||
m.StartFolder(folderCfg.ID)
|
||||
}
|
||||
@@ -772,20 +875,26 @@ func syncthingMain(runtimeOptions RuntimeOptions) {
|
||||
}
|
||||
}
|
||||
|
||||
// Candidate builds always run with usage reporting.
|
||||
|
||||
if IsCandidate {
|
||||
l.Infoln("Anonymous usage reporting is always enabled for candidate releases.")
|
||||
opts.URAccepted = usageReportVersion
|
||||
// Unique ID will be set and config saved below if necessary.
|
||||
}
|
||||
|
||||
if opts.URAccepted > 0 && opts.URAccepted < usageReportVersion {
|
||||
l.Infoln("Anonymous usage report has changed; revoking acceptance")
|
||||
opts.URAccepted = 0
|
||||
opts.URUniqueID = ""
|
||||
cfg.SetOptions(opts)
|
||||
}
|
||||
if opts.URAccepted >= usageReportVersion {
|
||||
if opts.URUniqueID == "" {
|
||||
// Previously the ID was generated from the node ID. We now need
|
||||
// to generate a new one.
|
||||
opts.URUniqueID = rand.String(8)
|
||||
cfg.SetOptions(opts)
|
||||
cfg.Save()
|
||||
}
|
||||
|
||||
if opts.URAccepted >= usageReportVersion && opts.URUniqueID == "" {
|
||||
// Generate and save a new unique ID if it is missing.
|
||||
opts.URUniqueID = rand.String(8)
|
||||
cfg.SetOptions(opts)
|
||||
cfg.Save()
|
||||
}
|
||||
|
||||
// The usageReportingManager registers itself to listen to configuration
|
||||
@@ -797,8 +906,21 @@ func syncthingMain(runtimeOptions RuntimeOptions) {
|
||||
go standbyMonitor()
|
||||
}
|
||||
|
||||
// Candidate builds should auto upgrade. Make sure the option is set,
|
||||
// unless we are in a build where it's disabled or the STNOUPGRADE
|
||||
// environment variable is set.
|
||||
|
||||
if IsCandidate && !upgrade.DisabledByCompilation && !noUpgradeFromEnv {
|
||||
l.Infoln("Automatic upgrade is always enabled for candidate releases.")
|
||||
if opts.AutoUpgradeIntervalH == 0 || opts.AutoUpgradeIntervalH > 24 {
|
||||
opts.AutoUpgradeIntervalH = 12
|
||||
}
|
||||
// We don't tweak the user's choice of upgrading to pre-releases or
|
||||
// not, as otherwise they cannot step off the candidate channel.
|
||||
}
|
||||
|
||||
if opts.AutoUpgradeIntervalH > 0 {
|
||||
if noUpgrade {
|
||||
if noUpgradeFromEnv {
|
||||
l.Infof("No automatic upgrades; STNOUPGRADE environment variable defined.")
|
||||
} else {
|
||||
go autoUpgrade(cfg)
|
||||
@@ -808,7 +930,6 @@ func syncthingMain(runtimeOptions RuntimeOptions) {
|
||||
events.Default.Log(events.StartupComplete, map[string]string{
|
||||
"myID": myID.String(),
|
||||
})
|
||||
go generatePingEvents()
|
||||
|
||||
cleanConfigDirectory()
|
||||
|
||||
@@ -915,11 +1036,31 @@ func copyFile(src, dst string) error {
|
||||
return nil
|
||||
}
|
||||
|
||||
func startAuditing(mainService *suture.Supervisor) {
|
||||
auditFile := timestampedLoc(locAuditLog)
|
||||
fd, err := os.OpenFile(auditFile, os.O_WRONLY|os.O_CREATE|os.O_EXCL, 0600)
|
||||
if err != nil {
|
||||
l.Fatalln("Audit:", err)
|
||||
func startAuditing(mainService *suture.Supervisor, auditFile string) {
|
||||
|
||||
var fd io.Writer
|
||||
var err error
|
||||
var auditDest string
|
||||
var auditFlags int
|
||||
|
||||
if auditFile == "-" {
|
||||
fd = os.Stdout
|
||||
auditDest = "stdout"
|
||||
} else if auditFile == "--" {
|
||||
fd = os.Stderr
|
||||
auditDest = "stderr"
|
||||
} else {
|
||||
if auditFile == "" {
|
||||
auditFile = timestampedLoc(locAuditLog)
|
||||
auditFlags = os.O_WRONLY | os.O_CREATE | os.O_EXCL
|
||||
} else {
|
||||
auditFlags = os.O_WRONLY | os.O_CREATE | os.O_APPEND
|
||||
}
|
||||
fd, err = os.OpenFile(auditFile, auditFlags, 0600)
|
||||
if err != nil {
|
||||
l.Fatalln("Audit:", err)
|
||||
}
|
||||
auditDest = auditFile
|
||||
}
|
||||
|
||||
auditService := newAuditService(fd)
|
||||
@@ -929,7 +1070,7 @@ func startAuditing(mainService *suture.Supervisor) {
|
||||
// ensure we capture all events from the start.
|
||||
auditService.WaitForStart()
|
||||
|
||||
l.Infoln("Audit log in", auditFile)
|
||||
l.Infoln("Audit log in", auditDest)
|
||||
}
|
||||
|
||||
func setupGUI(mainService *suture.Supervisor, cfg *config.Wrapper, m *model.Model, apiSub events.BufferedSubscription, diskSub events.BufferedSubscription, discoverer discover.CachingMux, connectionsService *connections.Service, errors, systemLog logger.Recorder, runtimeOptions RuntimeOptions) {
|
||||
@@ -1002,13 +1143,6 @@ func defaultConfig(myName string) config.Configuration {
|
||||
return newCfg
|
||||
}
|
||||
|
||||
func generatePingEvents() {
|
||||
for {
|
||||
time.Sleep(pingEventInterval)
|
||||
events.Default.Log(events.Ping, nil)
|
||||
}
|
||||
}
|
||||
|
||||
func resetDB() error {
|
||||
return os.RemoveAll(locations[locDatabase])
|
||||
}
|
||||
@@ -1066,7 +1200,7 @@ func getFreePort(host string, ports ...int) (int, error) {
|
||||
}
|
||||
|
||||
func standbyMonitor() {
|
||||
restartDelay := time.Duration(60 * time.Second)
|
||||
restartDelay := 60 * time.Second
|
||||
now := time.Now()
|
||||
for {
|
||||
time.Sleep(10 * time.Second)
|
||||
@@ -1098,8 +1232,8 @@ func autoUpgrade(cfg *config.Wrapper) {
|
||||
l.Infof("Connected to device %s with a newer version (current %q < remote %q). Checking for upgrades.", data["id"], Version, data["clientVersion"])
|
||||
case <-timer.C:
|
||||
}
|
||||
|
||||
rel, err := upgrade.LatestRelease(cfg.Options().ReleasesURL, Version)
|
||||
opts := cfg.Options()
|
||||
rel, err := upgrade.LatestRelease(opts.ReleasesURL, Version, opts.UpgradeToPreReleases)
|
||||
if err == upgrade.ErrUpgradeUnsupported {
|
||||
events.Default.Unsubscribe(sub)
|
||||
return
|
||||
@@ -1199,3 +1333,16 @@ func showPaths() {
|
||||
fmt.Printf("GUI override directory:\n\t%s\n\n", locations[locGUIAssets])
|
||||
fmt.Printf("Default sync folder directory:\n\t%s\n\n", locations[locDefFolder])
|
||||
}
|
||||
|
||||
func setPauseState(cfg *config.Wrapper, paused bool) {
|
||||
raw := cfg.RawCopy()
|
||||
for i := range raw.Devices {
|
||||
raw.Devices[i].Paused = paused
|
||||
}
|
||||
for i := range raw.Folders {
|
||||
raw.Folders[i].Paused = paused
|
||||
}
|
||||
if err := cfg.Replace(raw); err != nil {
|
||||
l.Fatalln("Cannot adjust paused state:", err)
|
||||
}
|
||||
}
|
||||
|
||||
@@ -2,7 +2,7 @@
|
||||
//
|
||||
// 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/.
|
||||
// You can obtain one at https://mozilla.org/MPL/2.0/.
|
||||
|
||||
package main
|
||||
|
||||
|
||||
@@ -2,7 +2,7 @@
|
||||
//
|
||||
// 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/.
|
||||
// You can obtain one at https://mozilla.org/MPL/2.0/.
|
||||
|
||||
package main
|
||||
|
||||
|
||||
@@ -2,7 +2,7 @@
|
||||
//
|
||||
// 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/.
|
||||
// You can obtain one at https://mozilla.org/MPL/2.0/.
|
||||
|
||||
package main
|
||||
|
||||
|
||||
@@ -2,7 +2,7 @@
|
||||
//
|
||||
// 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/.
|
||||
// You can obtain one at https://mozilla.org/MPL/2.0/.
|
||||
|
||||
package main
|
||||
|
||||
|
||||
@@ -2,7 +2,7 @@
|
||||
//
|
||||
// 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/.
|
||||
// You can obtain one at https://mozilla.org/MPL/2.0/.
|
||||
|
||||
// +build solaris
|
||||
|
||||
|
||||
@@ -2,7 +2,7 @@
|
||||
//
|
||||
// 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/.
|
||||
// You can obtain one at https://mozilla.org/MPL/2.0/.
|
||||
|
||||
// +build freebsd openbsd dragonfly
|
||||
|
||||
|
||||
@@ -2,7 +2,7 @@
|
||||
//
|
||||
// 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/.
|
||||
// You can obtain one at https://mozilla.org/MPL/2.0/.
|
||||
|
||||
package main
|
||||
|
||||
|
||||
@@ -2,13 +2,14 @@
|
||||
//
|
||||
// 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/.
|
||||
// You can obtain one at https://mozilla.org/MPL/2.0/.
|
||||
|
||||
package main
|
||||
|
||||
import (
|
||||
"github.com/syncthing/syncthing/lib/config"
|
||||
"github.com/syncthing/syncthing/lib/protocol"
|
||||
"github.com/syncthing/syncthing/lib/util"
|
||||
)
|
||||
|
||||
type mockedConfig struct {
|
||||
@@ -24,7 +25,9 @@ func (c *mockedConfig) ListenAddresses() []string {
|
||||
}
|
||||
|
||||
func (c *mockedConfig) RawCopy() config.Configuration {
|
||||
return config.Configuration{}
|
||||
cfg := config.Configuration{}
|
||||
util.SetDefaults(&cfg.Options)
|
||||
return cfg
|
||||
}
|
||||
|
||||
func (c *mockedConfig) Options() config.OptionsConfiguration {
|
||||
@@ -45,6 +48,14 @@ func (c *mockedConfig) Devices() map[protocol.DeviceID]config.DeviceConfiguratio
|
||||
return nil
|
||||
}
|
||||
|
||||
func (c *mockedConfig) SetDevice(config.DeviceConfiguration) error {
|
||||
return nil
|
||||
}
|
||||
|
||||
func (c *mockedConfig) SetDevices([]config.DeviceConfiguration) error {
|
||||
return nil
|
||||
}
|
||||
|
||||
func (c *mockedConfig) Save() error {
|
||||
return nil
|
||||
}
|
||||
|
||||
@@ -2,7 +2,7 @@
|
||||
//
|
||||
// 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/.
|
||||
// You can obtain one at https://mozilla.org/MPL/2.0/.
|
||||
|
||||
package main
|
||||
|
||||
|
||||
@@ -2,7 +2,7 @@
|
||||
//
|
||||
// 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/.
|
||||
// You can obtain one at https://mozilla.org/MPL/2.0/.
|
||||
|
||||
package main
|
||||
|
||||
|
||||
@@ -2,14 +2,18 @@
|
||||
//
|
||||
// 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/.
|
||||
// You can obtain one at https://mozilla.org/MPL/2.0/.
|
||||
|
||||
package main
|
||||
|
||||
import "github.com/syncthing/syncthing/lib/events"
|
||||
import (
|
||||
"time"
|
||||
|
||||
"github.com/syncthing/syncthing/lib/events"
|
||||
)
|
||||
|
||||
type mockedEventSub struct{}
|
||||
|
||||
func (s *mockedEventSub) Since(id int, into []events.Event) []events.Event {
|
||||
func (s *mockedEventSub) Since(id int, into []events.Event, timeout time.Duration) []events.Event {
|
||||
select {}
|
||||
}
|
||||
|
||||
@@ -2,7 +2,7 @@
|
||||
//
|
||||
// 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/.
|
||||
// You can obtain one at https://mozilla.org/MPL/2.0/.
|
||||
|
||||
package main
|
||||
|
||||
|
||||
@@ -2,7 +2,7 @@
|
||||
//
|
||||
// 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/.
|
||||
// You can obtain one at https://mozilla.org/MPL/2.0/.
|
||||
|
||||
package main
|
||||
|
||||
|
||||
+45
-10
@@ -2,7 +2,7 @@
|
||||
//
|
||||
// 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/.
|
||||
// You can obtain one at https://mozilla.org/MPL/2.0/.
|
||||
|
||||
package main
|
||||
|
||||
@@ -35,8 +35,6 @@ const (
|
||||
)
|
||||
|
||||
func monitorMain(runtimeOptions RuntimeOptions) {
|
||||
os.Setenv("STNORESTART", "yes")
|
||||
os.Setenv("STMONITORED", "yes")
|
||||
l.SetPrefix("[monitor] ")
|
||||
|
||||
var dst io.Writer = os.Stdout
|
||||
@@ -70,6 +68,8 @@ func monitorMain(runtimeOptions RuntimeOptions) {
|
||||
sigHup := syscall.Signal(1)
|
||||
signal.Notify(restartSign, sigHup)
|
||||
|
||||
childEnv := childEnv()
|
||||
first := true
|
||||
for {
|
||||
if t := time.Since(restarts[0]); t < loopThreshold {
|
||||
l.Warnf("%d restarts in %v; not retrying further", countRestarts, t)
|
||||
@@ -80,6 +80,7 @@ func monitorMain(runtimeOptions RuntimeOptions) {
|
||||
restarts[len(restarts)-1] = time.Now()
|
||||
|
||||
cmd := exec.Command(args[0], args[1:]...)
|
||||
cmd.Env = childEnv
|
||||
|
||||
stderr, err := cmd.StderrPipe()
|
||||
if err != nil {
|
||||
@@ -97,10 +98,6 @@ func monitorMain(runtimeOptions RuntimeOptions) {
|
||||
l.Fatalln(err)
|
||||
}
|
||||
|
||||
// Let the next child process know that this is not the first time
|
||||
// it's starting up.
|
||||
os.Setenv("STRESTART", "yes")
|
||||
|
||||
stdoutMut.Lock()
|
||||
stdoutFirstLines = make([]string, 0, 10)
|
||||
stdoutLastLines = make([]string, 0, 50)
|
||||
@@ -150,7 +147,6 @@ func monitorMain(runtimeOptions RuntimeOptions) {
|
||||
// Restart the monitor process to release the .old
|
||||
// binary as part of the upgrade process.
|
||||
l.Infoln("Restarting monitor...")
|
||||
os.Setenv("STNORESTART", "")
|
||||
if err = restartMonitor(args); err != nil {
|
||||
l.Warnln("Restart:", err)
|
||||
}
|
||||
@@ -162,6 +158,13 @@ func monitorMain(runtimeOptions RuntimeOptions) {
|
||||
|
||||
l.Infoln("Syncthing exited:", err)
|
||||
time.Sleep(1 * time.Second)
|
||||
|
||||
if first {
|
||||
// Let the next child process know that this is not the first time
|
||||
// it's starting up.
|
||||
childEnv = append(childEnv, "STRESTART=yes")
|
||||
first = false
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -202,8 +205,24 @@ func copyStderr(stderr io.Reader, dst io.Writer) {
|
||||
}
|
||||
|
||||
l.Warnf("Panic detected, writing to \"%s\"", panicFd.Name())
|
||||
l.Warnln("Please check for existing issues with similar panic message at https://github.com/syncthing/syncthing/issues/")
|
||||
l.Warnln("If no issue with similar panic message exists, please create a new issue with the panic log attached")
|
||||
if strings.Contains(line, "leveldb") && strings.Contains(line, "corrupt") {
|
||||
l.Warnln(`
|
||||
*********************************************************************************
|
||||
* Crash due to corrupt database. *
|
||||
* *
|
||||
* This crash usually occurs due to one of the following reasons: *
|
||||
* - Syncthing being stopped abruptly (killed/loss of power) *
|
||||
* - Bad hardware (memory/disk issues) *
|
||||
* - Software that affects disk writes (SSD caching software and simillar) *
|
||||
* *
|
||||
* Please see the following URL for instructions on how to recover: *
|
||||
* https://docs.syncthing.net/users/faq.html#my-syncthing-database-is-corrupt *
|
||||
*********************************************************************************
|
||||
`)
|
||||
} else {
|
||||
l.Warnln("Please check for existing issues with similar panic message at https://github.com/syncthing/syncthing/issues/")
|
||||
l.Warnln("If no issue with similar panic message exists, please create a new issue with the panic log attached")
|
||||
}
|
||||
|
||||
stdoutMut.Lock()
|
||||
for _, line := range stdoutFirstLines {
|
||||
@@ -394,3 +413,19 @@ func (f *autoclosedFile) closerLoop() {
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
// Returns the desired child environment, properly filtered and added to.
|
||||
func childEnv() []string {
|
||||
var env []string
|
||||
for _, str := range os.Environ() {
|
||||
if strings.HasPrefix("STNORESTART=", str) {
|
||||
continue
|
||||
}
|
||||
if strings.HasPrefix("STMONITORED=", str) {
|
||||
continue
|
||||
}
|
||||
env = append(env, str)
|
||||
}
|
||||
env = append(env, "STMONITORED=yes")
|
||||
return env
|
||||
}
|
||||
|
||||
@@ -2,7 +2,7 @@
|
||||
//
|
||||
// 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/.
|
||||
// You can obtain one at https://mozilla.org/MPL/2.0/.
|
||||
|
||||
// +build !windows
|
||||
|
||||
|
||||
@@ -2,7 +2,7 @@
|
||||
//
|
||||
// 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/.
|
||||
// You can obtain one at https://mozilla.org/MPL/2.0/.
|
||||
|
||||
// +build windows
|
||||
|
||||
|
||||
@@ -2,7 +2,7 @@
|
||||
//
|
||||
// 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/.
|
||||
// You can obtain one at https://mozilla.org/MPL/2.0/.
|
||||
|
||||
// +build !solaris,!windows
|
||||
|
||||
|
||||
@@ -2,7 +2,7 @@
|
||||
//
|
||||
// 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/.
|
||||
// You can obtain one at https://mozilla.org/MPL/2.0/.
|
||||
|
||||
package main
|
||||
|
||||
@@ -169,7 +169,7 @@ func (c *folderSummaryService) foldersToHandle() []string {
|
||||
c.lastEventReqMut.Lock()
|
||||
last := c.lastEventReq
|
||||
c.lastEventReqMut.Unlock()
|
||||
if time.Since(last) > pingEventInterval {
|
||||
if time.Since(last) > defaultEventTimeout {
|
||||
return nil
|
||||
}
|
||||
|
||||
|
||||
@@ -2,7 +2,7 @@
|
||||
//
|
||||
// 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/.
|
||||
// You can obtain one at https://mozilla.org/MPL/2.0/.
|
||||
|
||||
//+build go1.7
|
||||
|
||||
|
||||
@@ -2,7 +2,7 @@
|
||||
//
|
||||
// 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/.
|
||||
// You can obtain one at https://mozilla.org/MPL/2.0/.
|
||||
|
||||
package main
|
||||
|
||||
|
||||
@@ -2,7 +2,7 @@
|
||||
//
|
||||
// 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/.
|
||||
// You can obtain one at https://mozilla.org/MPL/2.0/.
|
||||
|
||||
package main
|
||||
|
||||
@@ -22,7 +22,7 @@ import (
|
||||
"github.com/syncthing/syncthing/lib/dialer"
|
||||
"github.com/syncthing/syncthing/lib/model"
|
||||
"github.com/syncthing/syncthing/lib/protocol"
|
||||
"github.com/syncthing/syncthing/lib/sha256"
|
||||
"github.com/syncthing/syncthing/lib/scanner"
|
||||
"github.com/syncthing/syncthing/lib/upgrade"
|
||||
"github.com/thejerf/suture"
|
||||
)
|
||||
@@ -81,9 +81,10 @@ func (m *usageReportingManager) String() string {
|
||||
// reportData returns the data to be sent in a usage report. It's used in
|
||||
// various places, so not part of the usageReportingManager object.
|
||||
func reportData(cfg configIntf, m modelIntf) map[string]interface{} {
|
||||
opts := cfg.Options()
|
||||
res := make(map[string]interface{})
|
||||
res["urVersion"] = usageReportVersion
|
||||
res["uniqueID"] = cfg.Options().URUniqueID
|
||||
res["uniqueID"] = opts.URUniqueID
|
||||
res["version"] = Version
|
||||
res["longVersion"] = LongVersion
|
||||
res["platform"] = runtime.GOOS + "-" + runtime.GOARCH
|
||||
@@ -112,7 +113,8 @@ func reportData(cfg configIntf, m modelIntf) map[string]interface{} {
|
||||
var mem runtime.MemStats
|
||||
runtime.ReadMemStats(&mem)
|
||||
res["memoryUsageMiB"] = (mem.Sys - mem.HeapReleased) / 1024 / 1024
|
||||
res["sha256Perf"] = cpuBench(5, 125*time.Millisecond)
|
||||
res["sha256Perf"] = cpuBench(5, 125*time.Millisecond, false)
|
||||
res["hashPerf"] = cpuBench(5, 125*time.Millisecond, true)
|
||||
|
||||
bytes, err := memorySize()
|
||||
if err == nil {
|
||||
@@ -134,7 +136,7 @@ func reportData(cfg configIntf, m modelIntf) map[string]interface{} {
|
||||
for _, cfg := range cfg.Folders() {
|
||||
rescanIntvs = append(rescanIntvs, cfg.RescanIntervalS)
|
||||
|
||||
if cfg.Type == config.FolderTypeReadOnly {
|
||||
if cfg.Type == config.FolderTypeSendOnly {
|
||||
folderUses["readonly"]++
|
||||
}
|
||||
if cfg.IgnorePerms {
|
||||
@@ -188,7 +190,7 @@ func reportData(cfg configIntf, m modelIntf) map[string]interface{} {
|
||||
res["deviceUses"] = deviceUses
|
||||
|
||||
defaultAnnounceServersDNS, defaultAnnounceServersIP, otherAnnounceServers := 0, 0, 0
|
||||
for _, addr := range cfg.Options().GlobalAnnServers {
|
||||
for _, addr := range opts.GlobalAnnServers {
|
||||
if addr == "default" || addr == "default-v4" || addr == "default-v6" {
|
||||
defaultAnnounceServersDNS++
|
||||
} else {
|
||||
@@ -196,8 +198,8 @@ func reportData(cfg configIntf, m modelIntf) map[string]interface{} {
|
||||
}
|
||||
}
|
||||
res["announce"] = map[string]interface{}{
|
||||
"globalEnabled": cfg.Options().GlobalAnnEnabled,
|
||||
"localEnabled": cfg.Options().LocalAnnEnabled,
|
||||
"globalEnabled": opts.GlobalAnnEnabled,
|
||||
"localEnabled": opts.LocalAnnEnabled,
|
||||
"defaultServersDNS": defaultAnnounceServersDNS,
|
||||
"defaultServersIP": defaultAnnounceServersIP,
|
||||
"otherServers": otherAnnounceServers,
|
||||
@@ -218,10 +220,11 @@ func reportData(cfg configIntf, m modelIntf) map[string]interface{} {
|
||||
"otherServers": otherRelayServers,
|
||||
}
|
||||
|
||||
res["usesRateLimit"] = cfg.Options().MaxRecvKbps > 0 || cfg.Options().MaxSendKbps > 0
|
||||
res["usesRateLimit"] = opts.MaxRecvKbps > 0 || opts.MaxSendKbps > 0
|
||||
|
||||
res["upgradeAllowedManual"] = !(upgrade.DisabledByCompilation || noUpgrade)
|
||||
res["upgradeAllowedAuto"] = !(upgrade.DisabledByCompilation || noUpgrade) && cfg.Options().AutoUpgradeIntervalH > 0
|
||||
res["upgradeAllowedManual"] = !(upgrade.DisabledByCompilation || noUpgradeFromEnv)
|
||||
res["upgradeAllowedAuto"] = !(upgrade.DisabledByCompilation || noUpgradeFromEnv) && opts.AutoUpgradeIntervalH > 0
|
||||
res["upgradeAllowedPre"] = !(upgrade.DisabledByCompilation || noUpgradeFromEnv) && opts.AutoUpgradeIntervalH > 0 && opts.UpgradeToPreReleases
|
||||
|
||||
return res
|
||||
}
|
||||
@@ -284,29 +287,31 @@ func (s *usageReportingService) Stop() {
|
||||
}
|
||||
|
||||
// cpuBench returns CPU performance as a measure of single threaded SHA-256 MiB/s
|
||||
func cpuBench(iterations int, duration time.Duration) float64 {
|
||||
func cpuBench(iterations int, duration time.Duration, useWeakHash bool) float64 {
|
||||
dataSize := 16 * protocol.BlockSize
|
||||
bs := make([]byte, dataSize)
|
||||
rand.Reader.Read(bs)
|
||||
|
||||
var perf float64
|
||||
for i := 0; i < iterations; i++ {
|
||||
if v := cpuBenchOnce(duration); v > perf {
|
||||
if v := cpuBenchOnce(duration, useWeakHash, bs); v > perf {
|
||||
perf = v
|
||||
}
|
||||
}
|
||||
blocksResult = nil
|
||||
return perf
|
||||
}
|
||||
|
||||
func cpuBenchOnce(duration time.Duration) float64 {
|
||||
chunkSize := 100 * 1 << 10
|
||||
h := sha256.New()
|
||||
bs := make([]byte, chunkSize)
|
||||
rand.Reader.Read(bs)
|
||||
var blocksResult []protocol.BlockInfo // so the result is not optimized away
|
||||
|
||||
func cpuBenchOnce(duration time.Duration, useWeakHash bool, bs []byte) float64 {
|
||||
t0 := time.Now()
|
||||
b := 0
|
||||
for time.Since(t0) < duration {
|
||||
h.Write(bs)
|
||||
b += chunkSize
|
||||
r := bytes.NewReader(bs)
|
||||
blocksResult, _ = scanner.Blocks(r, protocol.BlockSize, int64(len(bs)), nil, useWeakHash)
|
||||
b += len(bs)
|
||||
}
|
||||
h.Sum(nil)
|
||||
d := time.Since(t0)
|
||||
return float64(int(float64(b)/d.Seconds()/(1<<20)*100)) / 100
|
||||
}
|
||||
|
||||
@@ -2,7 +2,7 @@
|
||||
//
|
||||
// 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/.
|
||||
// You can obtain one at https://mozilla.org/MPL/2.0/.
|
||||
|
||||
package main
|
||||
|
||||
@@ -66,7 +66,7 @@ func (s *verboseService) WaitForStart() {
|
||||
|
||||
func (s *verboseService) formatEvent(ev events.Event) string {
|
||||
switch ev.Type {
|
||||
case events.Ping, events.DownloadProgress, events.LocalIndexUpdated:
|
||||
case events.DownloadProgress, events.LocalIndexUpdated:
|
||||
// Skip
|
||||
return ""
|
||||
|
||||
@@ -94,9 +94,12 @@ func (s *verboseService) formatEvent(ev events.Event) string {
|
||||
|
||||
case events.LocalChangeDetected:
|
||||
data := ev.Data.(map[string]string)
|
||||
// Local change detected in folder "foo": modified file /Users/jb/whatever
|
||||
return fmt.Sprintf("Local change detected in folder %q: %s %s %s", data["folder"], data["action"], data["type"], data["path"])
|
||||
|
||||
case events.RemoteChangeDetected:
|
||||
data := ev.Data.(map[string]string)
|
||||
return fmt.Sprintf("Remote change detected in folder %q: %s %s %s", data["folder"], data["action"], data["type"], data["path"])
|
||||
|
||||
case events.RemoteIndexUpdated:
|
||||
data := ev.Data.(map[string]interface{})
|
||||
return fmt.Sprintf("Device %v sent an index update for %q with %d items", data["device"], data["folder"], data["items"])
|
||||
@@ -151,7 +154,7 @@ func (s *verboseService) formatEvent(ev events.Event) string {
|
||||
if total > 0 {
|
||||
pct = 100 * current / total
|
||||
}
|
||||
return fmt.Sprintf("Scanning folder %q, %d%% done (%.01f MB/s)", folder, pct, rate)
|
||||
return fmt.Sprintf("Scanning folder %q, %d%% done (%.01f MiB/s)", folder, pct, rate)
|
||||
|
||||
case events.DevicePaused:
|
||||
data := ev.Data.(map[string]string)
|
||||
@@ -163,6 +166,18 @@ func (s *verboseService) formatEvent(ev events.Event) string {
|
||||
device := data["device"]
|
||||
return fmt.Sprintf("Device %v was resumed", device)
|
||||
|
||||
case events.FolderPaused:
|
||||
data := ev.Data.(map[string]string)
|
||||
id := data["id"]
|
||||
label := data["label"]
|
||||
return fmt.Sprintf("Folder %v (%v) was paused", id, label)
|
||||
|
||||
case events.FolderResumed:
|
||||
data := ev.Data.(map[string]string)
|
||||
id := data["id"]
|
||||
label := data["label"]
|
||||
return fmt.Sprintf("Folder %v (%v) was resumed", id, label)
|
||||
|
||||
case events.ListenAddressesChanged:
|
||||
data := ev.Data.(map[string]interface{})
|
||||
address := data["address"]
|
||||
|
||||
+1
-1
@@ -2,7 +2,7 @@
|
||||
//
|
||||
// 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/.
|
||||
// You can obtain one at https://mozilla.org/MPL/2.0/.
|
||||
|
||||
// +build ignore
|
||||
|
||||
|
||||
@@ -3,7 +3,7 @@
|
||||
//
|
||||
// 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/.
|
||||
// You can obtain one at https://mozilla.org/MPL/2.0/.
|
||||
|
||||
*/
|
||||
|
||||
|
||||
@@ -3,7 +3,7 @@
|
||||
//
|
||||
// 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/.
|
||||
// You can obtain one at https://mozilla.org/MPL/2.0/.
|
||||
|
||||
*/
|
||||
|
||||
|
||||
@@ -4,6 +4,7 @@
|
||||
"A new major version may not be compatible with previous versions.": "ĐĐŸĐČа ĐŸŃĐœĐŸĐČĐœĐ° ĐČĐ”ŃŃĐžŃ, ĐșĐŸŃŃĐŸ ĐŒĐŸĐ¶Đ” Ўа ĐœĐ” Đ” ŃŃĐČĐŒĐ”ŃĐžŃĐžĐŒĐ° Ń ĐżŃДЎОŃĐœĐž ĐČĐ”ŃŃОО.",
|
||||
"API Key": "API ĐĐ»ŃŃ",
|
||||
"About": "Đа ĐżŃĐŸĐłŃĐ°ĐŒĐ°Ńа",
|
||||
"Action": "ĐĐ”ĐčŃŃĐČОД",
|
||||
"Actions": "ĐĐ”ĐœŃ",
|
||||
"Add": "ĐĐŸĐ±Đ°ĐČĐž",
|
||||
"Add Device": "ĐĐŸĐ±Đ°ĐČĐž ŃŃŃŃĐŸĐčŃŃĐČĐŸ",
|
||||
@@ -18,9 +19,11 @@
|
||||
"All Data": "ĐŃĐžŃĐșĐž ĐŽĐ°ĐœĐœĐž",
|
||||
"Allow Anonymous Usage Reporting?": "РазŃĐ”ŃĐž Đ°ĐœĐŸĐœĐžĐŒĐœĐŸ ĐŽĐŸĐșлаЎĐČĐ°ĐœĐ” за ŃĐżĐŸŃŃДбаŃа ĐœĐ° ĐżŃĐŸĐłŃĐ°ĐŒĐ°Ńа?",
|
||||
"Alphabetic": "ĐзбŃŃĐ”Đœ ŃДЎ",
|
||||
"An external command handles the versioning. It has to remove the file from the shared folder.": "An external command handles the versioning. It has to remove the file from the shared folder.",
|
||||
"An external command handles the versioning. It has to remove the file from the synced folder.": "ĐŃŃга ĐșĐŸĐŒĐ°ĐœĐŽĐ° ŃĐ” Đ·Đ°ĐœĐžĐŒĐ°ĐČа Ń ĐČĐ”ŃŃООŃĐ”. йазО ĐșĐŸĐŒĐ°ĐœĐŽĐ° ŃŃŃбĐČа Ўа ĐżŃĐ”ĐŒĐ°Ń
ĐœĐž ŃаĐčла ĐŸŃ ŃĐžĐœŃ
ŃĐŸĐœĐžĐ·ĐžŃĐ°ĐœĐ°Ńа папĐșа.",
|
||||
"Anonymous Usage Reporting": "ĐĐœĐŸĐœĐžĐŒĐ”Đœ ĐŽĐŸĐșлаЎ",
|
||||
"Any devices configured on an introducer device will be added to this device as well.": "ĐŁŃŃŃĐŸĐčŃŃĐČа ĐœĐ°ŃŃŃĐŸĐ”ĐœĐž Ўа ĐżŃДЎŃŃаĐČŃŃ ĐŽŃŃгО ŃŃŃŃĐŸĐčŃŃĐČа ŃŃŃĐŸ ŃĐ” бŃĐŽĐ°Ń ĐŽĐŸĐ±Đ°ĐČĐ”ĐœĐž ĐșŃĐŒ ŃĐŸĐČа ŃŃŃŃĐŸĐčŃŃĐČĐŸ.",
|
||||
"Automatic upgrade now offers the choice between stable releases and release candidates.": "ĐĐČŃĐŸĐŒĐ°ŃĐžŃĐœĐŸŃĐŸ ĐŸĐ±ĐœĐŸĐČŃĐČĐ°ĐœĐ” ĐČĐ”ŃĐ” ĐżŃДЎлага ĐžĐ·Đ±ĐŸŃ ĐŒĐ”Đ¶ĐŽŃ ŃŃĐ°Đ±ĐžĐ»ĐœĐž ĐČĐ”ŃŃОО Đž ĐșĐ°ĐœĐŽĐžĐŽĐ°Ń ĐČĐ”ŃŃОО.",
|
||||
"Automatic upgrades": "ĐĐČŃĐŸĐŒĐ°ŃĐžŃĐœĐŸ ĐŸĐ±ĐœĐŸĐČŃĐČĐ°ĐœĐ”",
|
||||
"Be careful!": "ĐĐœĐžĐŒĐ°ĐœĐžĐ”!",
|
||||
"Bugs": "ĐŃĐłĐŸĐČĐ”",
|
||||
@@ -37,8 +40,10 @@
|
||||
"Copied from elsewhere": "ĐĐŸĐżĐžŃĐ°ĐœĐ” ĐŸŃ ĐœŃĐșŃĐŽĐ” ĐŽŃŃгаЎД",
|
||||
"Copied from original": "ĐĐŸĐżĐžŃĐ°Đœ ĐŸŃ ĐŸŃĐžĐłĐžĐœĐ°Đ»Đ°",
|
||||
"Copyright © 2014-2016 the following Contributors:": "ĐŃĐžŃĐșĐž ĐżŃаĐČаŃа Đ·Đ°ĐżĐ°Đ·Đ”ĐœĐž © 2014-2016 ĐĄŃŃŃŃĐŽĐœĐžŃĐž:",
|
||||
"Copyright © 2014-2017 the following Contributors:": "ĐŃĐžŃĐșĐž ĐżŃаĐČаŃа Đ·Đ°ĐżĐ°Đ·Đ”ĐœĐž © 2014-2017. ĐĄŃŃŃŃĐŽĐœĐžŃĐž:",
|
||||
"Danger!": "ĐпаŃĐœĐŸŃŃ!",
|
||||
"Deleted": "ĐĐ·ŃŃĐžŃĐŸ",
|
||||
"Device": "ĐŁŃŃŃĐŸĐčŃŃĐČĐŸ",
|
||||
"Device \"{%name%}\" ({%device%} at {%address%}) wants to connect. Add new device?": "ĐŁŃŃŃĐŸĐčŃŃĐČĐŸ \"{{name}}\" ({{device}}) ĐœĐ° {{address}} жДлаД Ўа ŃĐ” ŃĐČŃŃжД. ĐĐŸĐ±Đ°ĐČĐž ĐœĐŸĐČĐŸ ŃŃŃŃĐŸĐčŃŃĐČĐŸ?",
|
||||
"Device ID": "ĐĐŽĐ”ĐœŃĐžŃĐžĐșаŃĐŸŃ ĐœĐ° ŃŃŃŃĐŸĐčŃŃĐČĐŸ",
|
||||
"Device Identification": "ĐĐŽĐ”ĐœŃĐžŃĐžĐșаŃĐŸŃ ĐœĐ° ŃŃŃŃĐŸĐčŃŃĐČĐŸ",
|
||||
@@ -52,6 +57,8 @@
|
||||
"Downloaded": "ĐĐ·ŃĐ”ĐłĐ»Đ”Đœ",
|
||||
"Downloading": "ĐĐ·ŃДглŃĐœĐ”",
|
||||
"Edit": "ĐŃĐŸĐŒĐ”ĐœĐž",
|
||||
"Edit Device": "ĐŃĐŸĐŒŃĐœĐ° ĐœĐ° ŃŃŃŃĐŸĐčŃŃĐČĐŸŃĐŸ",
|
||||
"Edit Folder": "ĐŃĐŸĐŒŃĐœĐ° ĐœĐ° папĐșаŃа",
|
||||
"Editing": "ĐŃĐŸĐŒĐ”ĐœŃĐœĐ”",
|
||||
"Enable NAT traversal": "РазŃĐ”ŃĐž NAT traversal",
|
||||
"Enable Relaying": "РазŃĐ”ŃĐž ĐżŃДпŃаŃĐ°ĐœĐ”",
|
||||
@@ -63,7 +70,9 @@
|
||||
"File Pull Order": "РДЎ ĐœĐ° ŃĐČалŃĐœĐ”",
|
||||
"File Versioning": "ĐĐ”ŃŃОО ĐœĐ° ŃаĐčĐ»ĐŸĐČĐ”ŃĐ”",
|
||||
"File permission bits are ignored when looking for changes. Use on FAT file systems.": "ĐĐžŃĐŸĐČĐ”ŃĐ” за ĐżŃаĐČа за ĐŽĐŸŃŃŃĐż ŃĐ” бŃĐŽĐ°Ń ĐžĐłĐœĐŸŃĐžŃĐ°ĐœĐž, ĐșĐŸĐłĐ°ŃĐŸ ŃĐ” ĐżŃĐŸĐČĐ”ŃŃĐČа за ĐżŃĐŸĐŒĐ”ĐœĐž. ĐĐŸĐ»Đ·ĐČаĐčŃĐ” за ŃаĐčĐ»ĐŸĐČĐž ŃĐžŃŃĐ”ĐŒĐž ŃОп FAT.",
|
||||
"Files are moved to .stversions directory when replaced or deleted by Syncthing.": "Files are moved to .stversions directory when replaced or deleted by Syncthing.",
|
||||
"Files are moved to .stversions folder 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.": "Files are moved to date stamped versions in a .stversions directory when replaced or deleted by Syncthing.",
|
||||
"Files are moved to date stamped versions in a .stversions folder 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.": "ĐаŃĐžŃаĐČа ŃаĐčĐ»ĐŸĐČĐ”ŃĐ” ĐŸŃ ĐżŃĐŸĐŒĐ”ĐœĐž ĐœĐ°ĐżŃаĐČĐ”ĐœĐž ĐœĐ° ĐŽŃŃгО ŃŃŃŃĐŸĐčŃŃĐČа, ĐœĐŸ ĐżŃĐŸĐŒĐ”ĐœĐžŃĐ” ĐœĐ°ĐżŃаĐČĐ”ĐœĐž ĐœĐ° ŃĐŸĐČа ŃŃŃŃĐŸĐčŃŃĐČĐŸ ŃĐ” бŃĐŽĐ°Ń ŃĐžĐœŃ
ŃĐŸĐœĐžĐ·ĐžŃĐ°ĐœĐž Ń ĐŸŃŃĐ°ĐœĐ°Đ»ĐžŃĐ” ŃŃŃŃĐŸĐčŃŃĐČа.",
|
||||
"Folder": "ĐапĐșа",
|
||||
@@ -76,7 +85,9 @@
|
||||
"GUI Authentication Password": "ĐаŃĐŸĐ»Đ° за ĐžĐœŃĐ”ŃŃĐ”ĐčŃа",
|
||||
"GUI Authentication User": "ĐĐŸŃŃДбОŃДлŃĐșĐŸ ĐžĐŒĐ” за ĐžĐœŃĐ”ŃŃĐ”ĐčŃа",
|
||||
"GUI Listen Addresses": "ĐĐŽŃĐ”Ń Đ·Đ° ŃĐČŃŃĐ·ĐČĐ°ĐœĐ” Ń ĐżĐŸŃŃДбОŃДлŃĐșĐžŃ ĐžĐœŃĐ”ŃŃĐ”ĐčŃ",
|
||||
"GUI Theme": "ĐąĐ”ĐŒĐ° за ĐżĐŸŃŃДбОŃДлŃĐșĐžŃ ĐžĐœŃĐ”ŃĐ”ĐčŃ",
|
||||
"Generate": "ĐĐ”ĐœĐ”ŃĐžŃаĐč",
|
||||
"Global Changes": "ĐĐ»ĐŸĐ±Đ°Đ»ĐœĐž ĐżŃĐŸĐŒĐ”ĐœĐž",
|
||||
"Global Discovery": "ĐĐ»ĐŸĐ±Đ°Đ»ĐœĐŸ ĐŸŃĐșŃĐžĐČĐ°ĐœĐ”",
|
||||
"Global Discovery Servers": "ĐĄŃŃĐČŃŃĐž за ĐłĐ»ĐŸĐ±Đ°Đ»ĐœĐŸ ĐŸŃĐșŃĐžĐČĐ°ĐœĐ”",
|
||||
"Global State": "ĐĐ»ĐŸĐ±Đ°Đ»ĐœĐŸ ŃŃŃŃĐŸŃĐœĐžĐ”",
|
||||
@@ -87,6 +98,7 @@
|
||||
"Ignore Permissions": "ĐĐłĐœĐŸŃĐžŃаĐč ĐżŃаĐČаŃа за ĐŽĐŸŃŃŃĐż",
|
||||
"Incoming Rate Limit (KiB/s)": "ĐĐžĐŒĐžŃ ĐœĐ° ŃĐșĐŸŃĐŸŃŃŃа за ŃĐČалŃĐœĐ” (KiB/s)",
|
||||
"Incorrect configuration may damage your folder contents and render Syncthing inoperable.": "ĐДпŃаĐČĐžĐ»ĐœĐž ĐœĐ°ŃŃŃĐŸĐčĐșĐž ĐŒĐŸĐłĐ°Ń ĐŽĐ° ĐżĐŸĐČŃДЎŃŃ ŃаĐčĐ»ĐŸĐČĐ”ŃĐ” Đž Ўа ĐżĐŸĐżŃĐ”ŃĐ°Ń ĐœĐ° ŃĐžĐœŃ
ŃĐŸĐœĐžĐ·ĐžŃĐ°ĐœĐ”ŃĐŸ.",
|
||||
"Introduced By": "ĐŃĐ”ĐŽĐ»ĐŸĐ¶Đ”Đœ ĐŸŃ",
|
||||
"Introducer": "ĐĐŸĐ¶Đ” Ўа ĐżŃДЎлага ĐŽŃŃгО ŃŃŃŃĐŸĐčŃŃĐČа",
|
||||
"Inversion of the given condition (i.e. do not exclude)": "ĐбŃаŃĐœĐŸŃĐŸ ĐœĐ° ĐŽĐ°ĐŽĐ”ĐœĐŸŃĐŸ ŃŃĐ»ĐŸĐČОД (ĐżŃ. ĐœĐ” ОзĐșĐ»ŃŃĐČаĐč)",
|
||||
"Keep Versions": "ĐазО ĐČĐ”ŃŃОО",
|
||||
@@ -95,6 +107,8 @@
|
||||
"Last Scan": "ĐĐŸŃĐ»Đ”ĐŽĐœĐŸ ŃĐșĐ°ĐœĐžŃĐ°Đœ",
|
||||
"Last seen": "ĐĐŸŃĐ»Đ”ĐŽĐœĐŸ ĐČОЎŃĐœĐŸ",
|
||||
"Later": "ĐĐŸ-ĐșŃŃĐœĐŸ",
|
||||
"Latest Change": "ĐĐŸŃĐ»Đ”ĐŽĐœĐ° ĐżŃĐŸĐŒŃĐœĐ°",
|
||||
"Learn more": "ĐаŃŃĐ”ŃĐ” ĐżĐŸĐČĐ”ŃĐ”",
|
||||
"Listeners": "ĐĄĐžĐœŃ
ŃĐŸĐœĐžĐ·ĐžŃаŃĐž ŃŃŃŃĐŸĐčŃŃĐČа",
|
||||
"Local Discovery": "ĐĐŸĐșĐ°Đ»ĐœĐŸ ĐŸŃĐșŃĐžĐČĐ°ĐœĐ”",
|
||||
"Local State": "ĐĐŸĐșĐ°Đ»ĐœĐŸ ŃŃŃŃĐŸŃĐœĐžĐ”",
|
||||
@@ -112,6 +126,7 @@
|
||||
"Newest First": "ĐŃŃĐČĐŸ ĐœĐ°Đč-ĐœĐŸĐČĐžŃĐ”",
|
||||
"No": "ĐĐ”",
|
||||
"No File Versioning": "ĐДз ĐČĐ”ŃŃОО",
|
||||
"No upgrades": "ĐŃĐŒĐ° ĐŸĐ±ĐœĐŸĐČĐ»Đ”ĐœĐžŃ",
|
||||
"Normal": "ĐĐŸŃĐŒĐ°Đ»Đ”Đœ",
|
||||
"Notice": "ĐĐ·ĐČĐ”ŃŃОД",
|
||||
"OK": "ĐĐ",
|
||||
@@ -123,9 +138,12 @@
|
||||
"Out of Sync Items": "ĐĐ”ŃĐžĐœŃ
ŃĐŸĐœĐžĐ·ĐžŃĐ°ĐœĐž Đ”Đ»Đ”ĐŒĐ”ĐœŃĐž",
|
||||
"Outgoing Rate Limit (KiB/s)": "ĐĐžĐŒĐžŃ ĐœĐ° ŃĐșĐŸŃĐŸŃŃ Đ·Đ° ĐșаŃĐČĐ°ĐœĐ” (KiB/s)",
|
||||
"Override Changes": "ĐĐ°Đ»ĐŸĐ¶Đž Đ»ĐŸĐșĐ°Đ»ĐœĐžŃĐ” ĐżŃĐŸĐŒĐ”ĐœĐž",
|
||||
"Path": "ĐŃŃ",
|
||||
"Path to the folder on the local computer. Will be created if it does not exist. The tilde character (~) can be used as a shortcut for": "ĐŃŃ ĐŽĐŸ папĐșаŃа ĐœĐ° ŃĐŸĐČа ŃŃŃŃĐŸĐčŃŃĐČĐŸ. ĐĐșĐŸ ĐœĐ” ŃŃŃĐ”ŃŃĐČŃĐČа ŃĐ” бŃĐŽĐ” ŃŃĐ·ĐŽĐ°ĐŽĐ”ĐœĐ°. ĐĄĐžĐŒĐČĐŸĐ»ŃŃ ŃОлЎа (~) ĐŒĐŸĐ¶Đ” Ўа бŃĐŽĐ” ĐžĐ·ĐżĐŸĐ»Đ·ĐČĐ°Đœ ĐșаŃĐŸ Đ·Đ°ĐŒĐ”ŃŃĐžŃДл ĐœĐ°",
|
||||
"Path where versions should be stored (leave empty for the default .stversions directory in the shared folder).": "Path where versions should be stored (leave empty for the default .stversions directory in the shared folder).",
|
||||
"Path where versions should be stored (leave empty for the default .stversions folder in the folder).": "ĐŃŃŃŃ, ĐșŃĐŽĐ”ŃĐŸ ĐČĐ”ŃŃООŃĐ” Ўа бŃĐŽĐ°Ń ŃĐșлаЎОŃĐ°ĐœĐž(ĐŸŃŃаĐČĐž ĐżŃĐ°Đ·ĐœĐŸ за папĐșаŃа .stversions).",
|
||||
"Pause": "ĐаŃза",
|
||||
"Pause All": "ĐаŃза ĐœĐ° ĐČĐžŃŃĐșĐŸ",
|
||||
"Paused": "Đа паŃза",
|
||||
"Please consult the release notes before performing a major upgrade.": "ĐĐŸĐ»Ń ĐżŃĐŸŃĐ”ŃĐž бДлДжĐșĐžŃĐ” ĐżĐŸ ĐŸĐ±ĐœĐŸĐČŃĐČĐ°ĐœĐ”ŃĐŸ ĐżŃДЎО Ўа Đ·Đ°ĐżĐŸŃĐœĐ”Ń.",
|
||||
"Please set a GUI Authentication User and Password in the Settings dialog.": "ĐĐŸĐ»Ń Đ·Đ°ĐŽĐ°ĐčŃĐ” ĐżĐŸŃŃДбОŃДлŃĐșĐŸ ĐžĐŒĐ” Đž паŃĐŸĐ»Đ° за ĐżĐŸŃŃДбОŃДлŃĐșĐžŃ ĐžĐœŃĐ”ŃŃĐ”ĐčŃ ĐČ ŃĐ”ĐșŃĐžŃŃа ĐаŃŃŃĐŸĐčĐșĐž.",
|
||||
@@ -137,6 +155,7 @@
|
||||
"Random": "ĐŃĐŸĐžĐ·ĐČĐŸĐ»Đ”Đœ",
|
||||
"Reduced by ignore patterns": "ĐĐ°ĐŒĐ°Đ»Đ”ĐœĐŸ ĐżĐŸŃŃДЎŃŃĐČĐŸĐŒ ŃĐ°Đ±Đ»ĐŸĐœ за ĐžĐłĐœĐŸŃĐžŃĐ°ĐœĐ”",
|
||||
"Release Notes": "ĐДлДжĐșĐž ĐżĐŸ ĐŸĐ±ĐœĐŸĐČŃĐČĐ°ĐœĐ”ŃĐŸ",
|
||||
"Release candidates contain the latest features and fixes. They are similar to the traditional bi-weekly Syncthing releases.": "ĐĐ°ĐœĐŽĐžĐŽĐ°Ń ĐČĐ”ŃŃООŃĐ” ŃŃĐŽŃŃĐ¶Đ°Ń ĐœĐ°Đč-ĐœĐŸĐČаŃа ŃŃĐœĐșŃĐžĐŸĐœĐ°Đ»ĐœĐŸŃŃ Đž ĐżĐŸĐżŃаĐČĐșĐž. йД Ńа блОзĐșĐž ĐŽĐŸ ŃŃаЎОŃĐžĐŸĐœĐœĐžŃĐ” ĐŽĐČŃ-ŃĐ”ĐŽĐŒĐžŃĐœĐž Synchthing ĐŸĐ±ĐœĐŸĐČĐ»Đ”ĐœĐžŃ.",
|
||||
"Remote Devices": "ЧŃжЎО ŃŃŃŃĐŸĐčŃŃĐČа",
|
||||
"Remove": "ĐŃĐ”ĐŒĐ°Ń
ĐœĐž",
|
||||
"Required identifier for the folder. Must be the same on all cluster devices.": "ĐаЎŃлжОŃĐ”Đ»Đ”Đœ ĐžĐŽĐ”ĐœŃĐžŃĐžĐșаŃĐŸŃ Đ·Đ° ŃазО папĐșа. ĐąŃŃбĐČа Ўа бŃĐŽĐ” Đ”ĐŽĐžĐœ Đž ŃŃŃ ĐœĐ° ĐČŃĐžŃĐșĐž ŃŃŃŃĐŸĐčŃŃĐČа.",
|
||||
@@ -147,12 +166,15 @@
|
||||
"Restart Needed": "ĐĐ·ĐžŃĐșĐČа ŃĐ” ŃĐ”ŃŃаŃŃĐžŃĐ°ĐœĐ”",
|
||||
"Restarting": "Đ Đ”ŃŃаŃŃĐžŃĐ°ĐœĐ”",
|
||||
"Resume": "ĐŃŃĐœĐž",
|
||||
"Resume All": "ĐŃŃĐșĐ°ĐœĐ” ĐœĐ° ĐČŃĐžŃĐșĐŸ",
|
||||
"Reused": "ĐĐŸĐČŃĐŸŃĐœĐŸ ĐžĐ·ĐżĐŸĐ»Đ·ĐČĐ°Đœ",
|
||||
"Save": "ĐапазО",
|
||||
"Scan Time Remaining": "ĐŃŃаĐČаŃĐŸ ĐČŃĐ”ĐŒĐ” за ŃĐșĐ°ĐœĐžŃĐ°ĐœĐ”",
|
||||
"Scanning": "ĐĄĐșĐ°ĐœĐžŃĐ°ĐœĐ”",
|
||||
"Select the devices to share this folder with.": "ĐзбДŃĐ”ŃĐ” ŃŃŃŃĐŸĐčŃŃĐČаŃа, Ń ĐșĐŸĐžŃĐŸ Ўа ŃĐżĐŸĐŽĐ”Đ»ĐžŃĐ” папĐșаŃа.",
|
||||
"Select the folders to share with this device.": "ĐзбДŃĐ”ŃĐ” папĐșĐžŃĐ” за ŃĐżĐŸĐŽĐ”Đ»ŃĐœĐ” Ń ŃĐŸĐČа ŃŃŃŃĐŸĐčŃŃĐČĐŸ.",
|
||||
"Send & Receive": "ĐĐ·ĐżŃаŃĐ°ĐœĐ” & ĐżĐŸĐ»ŃŃаĐČĐ°ĐœĐ”",
|
||||
"Send Only": "ĐĄĐ°ĐŒĐŸ ОзпŃаŃĐ°ĐœĐ”",
|
||||
"Settings": "ĐаŃŃŃĐŸĐčĐșĐž",
|
||||
"Share": "ĐĄĐżĐŸĐŽĐ”Đ»Đž",
|
||||
"Share Folder": "ĐĄĐżĐŸĐŽĐ”Đ»Đž папĐșа",
|
||||
@@ -170,6 +192,9 @@
|
||||
"Single level wildcard (matches within a directory only)": "ĐаŃĐșа ĐœĐ° Đ”ĐŽĐœĐŸ ĐœĐžĐČĐŸ (ĐżĐŸĐșŃĐžĐČа ŃĐ°ĐŒĐŸ ĐČ ĐżĐ°ĐżĐșа)",
|
||||
"Smallest First": "ĐŃŃĐČĐŸ ĐœĐ°Đč-ĐŒĐ°Đ»ĐșĐžŃĐ”",
|
||||
"Source Code": "ĐĄĐŸŃŃ ĐșĐŸĐŽ",
|
||||
"Stable releases and release candidates": "ĐĄŃĐ°Đ±ĐžĐ»ĐœĐž ĐČĐ”ŃŃОО Đž ĐșĐ°ĐœĐŽĐžĐŽĐ°ŃĐž за ŃŃĐ°Đ±ĐžĐ»ĐœĐž ĐČĐ”ŃŃОО",
|
||||
"Stable releases are delayed by about two weeks. During this time they go through testing as release candidates.": "ĐĄŃĐ°Đ±ĐžĐ»ĐœĐžŃĐ” ĐČĐ”ŃŃОО Ńа забаĐČĐ”ĐœĐž Ń ĐŽĐČĐ” ŃĐ”ĐŽĐŒĐžŃĐž. ĐŃДз ŃĐŸĐČа ĐČŃĐ”ĐŒĐ” ŃĐ” ĐżŃĐ”ĐŒĐžĐœĐ°ĐČĐ°Ń ĐżŃДз ŃĐ”ŃŃĐČĐ°ĐœĐ” ĐșаŃĐŸ бŃĐŽĐ°Ń ĐșĐ°ĐœĐŽĐžĐŽĐ°Ń ĐČĐ”ŃŃОО.",
|
||||
"Stable releases only": "ĐĄĐ°ĐŒĐŸ ŃŃĐ°Đ±ĐžĐ»ĐœĐž ĐČĐ”ŃŃОО",
|
||||
"Staggered File Versioning": "ĐаŃлагĐČаŃĐž ŃĐ” ĐČĐ”ŃŃОО",
|
||||
"Start Browser": "ĐĄŃаŃŃĐžŃаĐč бŃаŃĐ·ŃŃа",
|
||||
"Statistics": "ĐĄŃаŃĐžŃŃĐžĐșа",
|
||||
@@ -210,7 +235,9 @@
|
||||
"This Device": "ĐаŃĐ”ŃĐŸ ŃŃŃŃĐŸĐčŃŃĐČĐŸ",
|
||||
"This can easily give hackers access to read and change any files on your computer.": "ĐąĐŸĐČа ЎаĐČа лДŃĐ”Đœ ĐŽĐŸŃŃŃĐż ĐœĐ° Ń
аĐșĐ”ŃĐž Ўа ŃĐ°Đ·ĐłĐ»Đ”Đ¶ĐŽĐ°Ń Đž ĐżŃĐŸĐŒĐ”ĐœŃŃ ĐČŃŃĐșаĐșĐČĐž ŃаĐčĐ»ĐŸĐČĐ” ĐœĐ° ĐșĐŸĐŒĐżŃŃŃŃа ĐĐž.",
|
||||
"This is a major version upgrade.": "ĐąĐŸĐČа Đ” ĐœĐŸĐČа ĐŸŃĐœĐŸĐČĐœĐ° ĐČĐ”ŃŃĐžŃ.",
|
||||
"Time": "ĐŃĐ”ĐŒĐ”",
|
||||
"Trash Can File Versioning": "ĐĄĐ°ĐŒĐŸ ĐœĐ° ŃаĐčĐ»ĐŸĐČĐ”ŃĐ” ĐČ ĐșĐŸŃŃĐ”ŃĐŸ",
|
||||
"Type": "йОп",
|
||||
"Unknown": "ĐĐ”ŃŃĐœĐŸ",
|
||||
"Unshared": "ĐĐ”ŃĐżĐŸĐŽĐ”Đ»Đ”ĐœĐ°",
|
||||
"Unused": "ĐĐ”ĐžĐ·ĐżĐŸĐ»Đ·ĐČĐ°Đœ",
|
||||
@@ -221,14 +248,20 @@
|
||||
"Upgrading": "ĐĐ±ĐœĐŸĐČŃĐČĐ°ĐœĐ”",
|
||||
"Upload Rate": "ĐĄĐșĐŸŃĐŸŃŃ ĐœĐ° ĐșаŃĐČĐ°ĐœĐ”",
|
||||
"Uptime": "Đ Đ°Đ±ĐŸŃĐž ĐŸŃ",
|
||||
"Usage reporting is always enabled for candidate releases.": "ĐĐŸĐșлаЎŃŃ Đ·Đ° ĐżĐŸĐ»Đ·ĐČĐ°ĐœĐ”ŃĐŸ Đ” ĐČĐžĐœĐ°ĐłĐž ĐČĐșĐ»ŃŃĐ”Đœ за ĐșĐ°ĐœĐŽĐžĐŽĐ°Ń ĐœĐŸĐČĐž ĐČĐ”ŃŃОО.",
|
||||
"Use HTTPS for GUI": "ĐĐ·ĐżĐŸĐ»Đ·ĐČаĐč HTTPS за ĐżĐŸŃŃДбОŃДлŃĐșĐžŃ ĐžĐœŃĐ”ŃŃĐ”ĐčŃ",
|
||||
"Version": "ĐĐ”ŃŃĐžŃ",
|
||||
"Versions Path": "ĐŃŃ ĐŽĐŸ ĐČĐ”ŃŃООŃĐ”",
|
||||
"Versions are automatically deleted if they are older than the maximum age or exceed the number of files allowed in an interval.": "ĐĐ”ŃŃООŃĐ” бОĐČĐ°Ń ĐžĐ·ŃŃĐžĐČĐ°ĐœĐž аĐČŃĐŸĐŒĐ°ŃĐžŃĐœĐŸ, ĐșĐŸĐłĐ°ŃĐŸ Ńа ĐżĐŸ-ŃŃаŃĐž ĐŸŃ ĐŒĐ°ĐșŃĐžĐŒĐ°Đ»ĐœĐ°Ńа ĐČŃĐ·ŃаŃŃ ĐžĐ»Đž ĐœĐ°ĐŽĐŒĐžĐœĐ°ĐČĐ°Ń Đ±ŃĐŸŃ ŃаĐčĐ»ĐŸĐČĐ” ŃазŃĐ”ŃĐ”ĐœĐž ĐČ ĐŽĐ°ĐŽĐ”Đœ ĐžĐœŃĐ”ŃĐČал.",
|
||||
"Warning, this path is a parent directory of an existing folder \"{%otherFolder%}\".": "ĐŃДЎŃĐżŃĐ”Đ¶ĐŽĐ”ĐœĐžĐ”, ŃĐŸĐ·Đž ĐżŃŃ Đ” ĐżĐŸ-ĐłĐŸŃĐœĐ° ĐŽĐžŃĐ”ĐșŃĐŸŃĐžŃ ĐœĐ° ŃŃŃĐ”ŃŃĐČŃĐČаŃаŃа папĐșа \"{{otherFolder}}\".",
|
||||
"Warning, this path is a parent directory of an existing folder \"{%otherFolderLabel%}\" ({%otherFolder%}).": "ĐŃДЎŃĐżŃĐ”Đ¶ĐŽĐ”ĐœĐžĐ”, ŃĐŸĐ·Đž ĐżŃŃ Đ” ĐżĐŸ-ĐłĐŸŃĐœĐ° ĐŽĐžŃĐ”ĐșŃĐŸŃĐžŃ ĐœĐ° ŃŃŃĐ”ŃŃĐČŃĐČаŃаŃа папĐșа \"{{otherFolderLabel}}\" ({{otherFolder}}).",
|
||||
"Warning, this path is a subdirectory of an existing folder \"{%otherFolder%}\".": "ĐĐœĐžĐŒĐ°ĐœĐžĐ”, ŃĐŸĐČа Đ” ĐČŃŃŃĐ”ŃĐœĐ° папĐșа ĐœĐ° ĐČĐ”ŃĐ” ŃŃŃĐ”ŃŃĐČŃĐČаŃа папĐșа \"{{otherFolder}}\".",
|
||||
"Warning, this path is a subdirectory of an existing folder \"{%otherFolderLabel%}\" ({%otherFolder%}).": "ĐŃДЎŃĐżŃĐ”Đ¶ĐŽĐ”ĐœĐžĐ”, ŃĐŸĐ·Đž ĐżŃŃ Đ” ĐżĐŸĐŽ-ĐŽĐžŃĐ”ĐșŃĐŸŃĐžŃ ĐœĐ° ŃŃŃĐ”ŃŃĐČŃĐČаŃаŃа папĐșа \"{{otherFolderLabel}}\" ({{otherFolder}}).",
|
||||
"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": "Đа",
|
||||
"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 must keep at least one version.": "ĐąŃŃбĐČа Ўа ĐżĐ°Đ·ĐžŃ ĐżĐŸĐœĐ” Đ”ĐŽĐœĐ° ĐČĐ”ŃŃĐžŃ.",
|
||||
"days": "ĐŽĐœĐž",
|
||||
"directories": "ĐŽĐžŃĐ”ĐșŃĐŸŃОО",
|
||||
|
||||
@@ -4,6 +4,7 @@
|
||||
"A new major version may not be compatible with previous versions.": "Una nova versiĂł major pot ser incompatible amb versions anteriors.",
|
||||
"API Key": "Clau API",
|
||||
"About": "Sobre",
|
||||
"Action": "Action",
|
||||
"Actions": "Accions",
|
||||
"Add": "Afegir",
|
||||
"Add Device": "Afegir dispositiu",
|
||||
@@ -18,9 +19,11 @@
|
||||
"All Data": "Totes les dades",
|
||||
"Allow Anonymous Usage Reporting?": "Permetre l'enviament anĂČnim d'informes d'Ășs?",
|
||||
"Alphabetic": "AlfabĂštic",
|
||||
"An external command handles the versioning. It has to remove the file from the shared folder.": "An external command handles the versioning. It has to remove the file from the shared folder.",
|
||||
"An external command handles the versioning. It has to remove the file from the synced folder.": "Un comando extern s'encarrega del control de versions. Ha d'eliminar l'arxiu de la carpeta sincronitzada.",
|
||||
"Anonymous Usage Reporting": "Informe anĂČnim d'Ășs",
|
||||
"Any devices configured on an introducer device will be added to this device as well.": "Qualsevol dispositiu configurat en un dispositiu introductor també s'afegirà a aquest dispositiu.",
|
||||
"Automatic upgrade now offers the choice between stable releases and release candidates.": "Automatic upgrade now offers the choice between stable releases and release candidates.",
|
||||
"Automatic upgrades": "Actualitzacions automĂ tiques",
|
||||
"Be careful!": "Ves amb compte!",
|
||||
"Bugs": "Bugs",
|
||||
@@ -37,8 +40,10 @@
|
||||
"Copied from elsewhere": "Copiat d'un altre lloc",
|
||||
"Copied from original": "Copiat de l'original",
|
||||
"Copyright © 2014-2016 the following Contributors:": "Copyright © 2014-2016 the following Contributors:",
|
||||
"Copyright © 2014-2017 the following Contributors:": "Copyright © 2014-2017 the following Contributors:",
|
||||
"Danger!": "Perill!",
|
||||
"Deleted": "Esborrat",
|
||||
"Device": "Device",
|
||||
"Device \"{%name%}\" ({%device%} at {%address%}) wants to connect. Add new device?": "Device \"{{name}}\" ({{device}} at {{address}}) wants to connect. Add new device?",
|
||||
"Device ID": "ID del dispositiu",
|
||||
"Device Identification": "IdentificaciĂł del dispositiu",
|
||||
@@ -52,6 +57,8 @@
|
||||
"Downloaded": "Descarregat",
|
||||
"Downloading": "Descarregant",
|
||||
"Edit": "Editar",
|
||||
"Edit Device": "Edit Device",
|
||||
"Edit Folder": "Edit Folder",
|
||||
"Editing": "Modificant",
|
||||
"Enable NAT traversal": "Enable NAT traversal",
|
||||
"Enable Relaying": "Enable Relaying",
|
||||
@@ -63,7 +70,9 @@
|
||||
"File Pull Order": "Ordre d'agafar fitxers",
|
||||
"File Versioning": "Versionat de Fitxers",
|
||||
"File permission bits are ignored when looking for changes. Use on FAT file systems.": "Els bits de permisos dels fitxers son ignorats quan es cerquen canvis. Utilitzar en sistemes de fitxers FAT.",
|
||||
"Files are moved to .stversions directory when replaced or deleted by Syncthing.": "Files are moved to .stversions directory when replaced or deleted by Syncthing.",
|
||||
"Files are moved to .stversions folder when replaced or deleted by Syncthing.": "Els fitxers són moguts a la carpeta .stversions quan són reemplaçats o esborrats per Syncthing.",
|
||||
"Files are moved to date stamped versions in a .stversions directory when replaced or deleted by Syncthing.": "Files are moved to date stamped versions in a .stversions directory when replaced or deleted by Syncthing.",
|
||||
"Files are moved to date stamped versions in a .stversions folder when replaced or deleted by Syncthing.": "Els fitxers es mouen amb l'estampat de la data a la carpeta .stversions quan son substituĂŻts o esborrats per syncthing.",
|
||||
"Files are protected from changes made on other devices, but changes made on this device will be sent to the rest of the cluster.": "Els fitxers estan protegits de canvis fets per altres dispositius, perĂČ els canvis fets en aquest dispositiu seran enviats a la resta del cluster.",
|
||||
"Folder": "Carpeta",
|
||||
@@ -76,7 +85,9 @@
|
||||
"GUI Authentication Password": "Contrasenya d'autenticaciĂł GUI",
|
||||
"GUI Authentication User": "Usuari d'autenticaciĂł GUI",
|
||||
"GUI Listen Addresses": "Adreça d'escolta del GUI",
|
||||
"GUI Theme": "GUI Theme",
|
||||
"Generate": "Generar",
|
||||
"Global Changes": "Global Changes",
|
||||
"Global Discovery": "Descobriment Global",
|
||||
"Global Discovery Servers": "Global Discovery Servers",
|
||||
"Global State": "Estat global",
|
||||
@@ -87,6 +98,7 @@
|
||||
"Ignore Permissions": "Ignora Permisos",
|
||||
"Incoming Rate Limit (KiB/s)": "LĂmit de velocitat d'entrada (KiB/s)",
|
||||
"Incorrect configuration may damage your folder contents and render Syncthing inoperable.": "Una configuraciĂł incorrecta pot malmetre els continguts de la teva carpeta i que Syncthing esdevingui inoperatiu.",
|
||||
"Introduced By": "Introduced By",
|
||||
"Introducer": "Introductor",
|
||||
"Inversion of the given condition (i.e. do not exclude)": "InversiĂł del patrĂČ introduĂŻt",
|
||||
"Keep Versions": "Mantenir Versions",
|
||||
@@ -95,6 +107,8 @@
|
||||
"Last Scan": "Last Scan",
|
||||
"Last seen": "Vist per Ășltima vegada",
|
||||
"Later": "Després",
|
||||
"Latest Change": "Latest Change",
|
||||
"Learn more": "Learn more",
|
||||
"Listeners": "Listeners",
|
||||
"Local Discovery": "Descobriment Local",
|
||||
"Local State": "Estat local",
|
||||
@@ -112,6 +126,7 @@
|
||||
"Newest First": "Més nou primer",
|
||||
"No": "No",
|
||||
"No File Versioning": "Sense Versionat de Fitxer",
|
||||
"No upgrades": "No upgrades",
|
||||
"Normal": "Normal",
|
||||
"Notice": "AvĂs",
|
||||
"OK": "OK",
|
||||
@@ -123,9 +138,12 @@
|
||||
"Out of Sync Items": "Arxius encara no sincronitzats",
|
||||
"Outgoing Rate Limit (KiB/s)": "LĂmit de velocitat de sortida (KiB/s)",
|
||||
"Override Changes": "Sobreescriure Canvis",
|
||||
"Path": "Path",
|
||||
"Path to the folder on the local computer. Will be created if it does not exist. The tilde character (~) can be used as a shortcut for": "Ruta de la carpeta a l'equip local. Si no existeix serĂ creada. El carĂ cter (~) es pot fer servir com a drecera de",
|
||||
"Path where versions should be stored (leave empty for the default .stversions directory in the shared folder).": "Path where versions should be stored (leave empty for the default .stversions directory in the shared folder).",
|
||||
"Path where versions should be stored (leave empty for the default .stversions folder in the folder).": "Ruta on les versions s'haurien de guardar (deixa-ho buit per fer servir el directori .stversions per defecte a la carpeta)",
|
||||
"Pause": "Pausa",
|
||||
"Pause All": "Pause All",
|
||||
"Paused": "Pausat",
|
||||
"Please consult the release notes before performing a major upgrade.": "Si us plau consulta les notes de llançament abans de realitzar una actualització major.",
|
||||
"Please set a GUI Authentication User and Password in the Settings dialog.": "Si us plau, estableix un usuari i contrasenya al GUI a través del quadre de dià leg de configuració.",
|
||||
@@ -137,6 +155,7 @@
|
||||
"Random": "Aleatori",
|
||||
"Reduced by ignore patterns": "Reduced by ignore patterns",
|
||||
"Release Notes": "Notes de llançament",
|
||||
"Release candidates contain the latest features and fixes. They are similar to the traditional bi-weekly Syncthing releases.": "Release candidates contain the latest features and fixes. They are similar to the traditional bi-weekly Syncthing releases.",
|
||||
"Remote Devices": "Remote Devices",
|
||||
"Remove": "Esborrar",
|
||||
"Required identifier for the folder. Must be the same on all cluster devices.": "Required identifier for the folder. Must be the same on all cluster devices.",
|
||||
@@ -147,12 +166,15 @@
|
||||
"Restart Needed": "Ăs Necessari Reiniciar",
|
||||
"Restarting": "Reiniciant",
|
||||
"Resume": "Reprendre",
|
||||
"Resume All": "Resume All",
|
||||
"Reused": "Reutilitzat",
|
||||
"Save": "Guardar",
|
||||
"Scan Time Remaining": "Temps d'escanejat restant",
|
||||
"Scanning": "Escanejant",
|
||||
"Select the devices to share this folder with.": "Selecciona els dispositius en els quals compartir aquesta carpeta.",
|
||||
"Select the folders to share with this device.": "Selecciona la carpeta per a compartir en aquest dispositiu.",
|
||||
"Send & Receive": "Send & Receive",
|
||||
"Send Only": "Send Only",
|
||||
"Settings": "PreferĂšncies",
|
||||
"Share": "Compartir",
|
||||
"Share Folder": "Compartir carpeta",
|
||||
@@ -170,6 +192,9 @@
|
||||
"Single level wildcard (matches within a directory only)": "CarĂ cter comodĂ de nivell singular (aparella sĂłls en una carpeta)",
|
||||
"Smallest First": "Més petit primer",
|
||||
"Source Code": "Codi Font",
|
||||
"Stable releases and release candidates": "Stable releases and release candidates",
|
||||
"Stable releases are delayed by about two weeks. During this time they go through testing as release candidates.": "Stable releases are delayed by about two weeks. During this time they go through testing as release candidates.",
|
||||
"Stable releases only": "Stable releases only",
|
||||
"Staggered File Versioning": "Versionat de Fitxers Esglaonat",
|
||||
"Start Browser": "Arrancar Navegador",
|
||||
"Statistics": "EstadĂstiques",
|
||||
@@ -210,7 +235,9 @@
|
||||
"This Device": "This Device",
|
||||
"This can easily give hackers access to read and change any files on your computer.": "AixĂČ pot donar facilment accĂ©s a hackers per llegir i canviar qualsevol fitxer del teu ordinador.",
|
||||
"This is a major version upgrade.": "Aquesta és una actualització de versió major.",
|
||||
"Time": "Time",
|
||||
"Trash Can File Versioning": "Paperera de versionat de fitxers",
|
||||
"Type": "Type",
|
||||
"Unknown": "Desconegut",
|
||||
"Unshared": "No compartit",
|
||||
"Unused": "No usat",
|
||||
@@ -221,14 +248,20 @@
|
||||
"Upgrading": "Actualitzant",
|
||||
"Upload Rate": "Tasca de Pujada",
|
||||
"Uptime": "Temps funcionant",
|
||||
"Usage reporting is always enabled for candidate releases.": "Usage reporting is always enabled for candidate releases.",
|
||||
"Use HTTPS for GUI": "Utilitzar HTTPS pel GUI",
|
||||
"Version": "VersiĂł",
|
||||
"Versions Path": "Carpeta de les Versions",
|
||||
"Versions are automatically deleted if they are older than the maximum age or exceed the number of files allowed in an interval.": "Les versions son automà ticament eliminades si son més antigues que el mà xim d'antiguitat o si excedeixen del nombre de fitxers permesos en un interval.",
|
||||
"Warning, this path is a parent directory of an existing folder \"{%otherFolder%}\".": "Warning, this path is a parent directory of an existing folder \"{{otherFolder}}\".",
|
||||
"Warning, this path is a parent directory of an existing folder \"{%otherFolderLabel%}\" ({%otherFolder%}).": "Warning, this path is a parent directory of an existing folder \"{{otherFolderLabel}}\" ({{otherFolder}}).",
|
||||
"Warning, this path is a subdirectory of an existing folder \"{%otherFolder%}\".": "Warning, this path is a subdirectory of an existing folder \"{{otherFolder}}\".",
|
||||
"Warning, this path is a subdirectory of an existing folder \"{%otherFolderLabel%}\" ({%otherFolder%}).": "Warning, this path is a subdirectory of an existing folder \"{{otherFolderLabel}}\" ({{otherFolder}}).",
|
||||
"When adding a new device, keep in mind that this device must be added on the other side too.": "Quan s'afegeix un nou dispositiu, recorda que aquest dispositiu tambĂš s'ha d'afegir a l'altre banda.",
|
||||
"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.": "Quan s'afegeix una nova carpeta recorda que el ID d'aquesta s'utilitza per lligar repositoris entre els dispositius. Es distingeix entre majĂșscules i minĂșscules i ha de ser exactament iguals entre tots els dispositius.",
|
||||
"Yes": "Si",
|
||||
"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.",
|
||||
"You must keep at least one version.": "Has de mantenir com a mĂnim una versiĂł.",
|
||||
"days": "dies",
|
||||
"directories": "directories",
|
||||
|
||||
@@ -4,6 +4,7 @@
|
||||
"A new major version may not be compatible with previous versions.": "Una nova versiĂłn amb canvis importants pot no ser compatible amb versions prĂšvies.",
|
||||
"API Key": "Clau API",
|
||||
"About": "Sobre",
|
||||
"Action": "Action",
|
||||
"Actions": "Accions",
|
||||
"Add": "Afegir",
|
||||
"Add Device": "Afegir dispositiu",
|
||||
@@ -18,9 +19,11 @@
|
||||
"All Data": "Totes les dades",
|
||||
"Allow Anonymous Usage Reporting?": "Permetre informes d'Ășs anĂČnim?",
|
||||
"Alphabetic": "AlfabĂštic",
|
||||
"An external command handles the versioning. It has to remove the file from the shared folder.": "An external command handles the versioning. It has to remove the file from the shared folder.",
|
||||
"An external command handles the versioning. It has to remove the file from the synced folder.": "Un comando extern controla el versionat. Ăs necessari eliminar el fitxer de la carpeta sincronitzada.",
|
||||
"Anonymous Usage Reporting": "Informe d'Ășs anĂČnim",
|
||||
"Any devices configured on an introducer device will be added to this device as well.": "Tots els dispositius configurats en un dispositiu presentador serà n afegits també a aquest dispositiu.",
|
||||
"Automatic upgrade now offers the choice between stable releases and release candidates.": "Automatic upgrade now offers the choice between stable releases and release candidates.",
|
||||
"Automatic upgrades": "Actualitzacions automĂ tiques",
|
||||
"Be careful!": "Tin precauciĂł!",
|
||||
"Bugs": "Errors (Bugs)",
|
||||
@@ -31,27 +34,31 @@
|
||||
"Command": "Comando",
|
||||
"Comment, when used at the start of a line": "Comentar, quant s'utilitza al principi d'una lĂnia",
|
||||
"Compression": "CompresiĂł",
|
||||
"Configured": "Configured",
|
||||
"Configured": "Configurat",
|
||||
"Connection Error": "Error de connexiĂł",
|
||||
"Connection Type": "Tipus de connexiĂł",
|
||||
"Copied from elsewhere": "Copiat de qualsevol lloc",
|
||||
"Copied from original": "Copiat de l'original",
|
||||
"Copyright © 2014-2016 the following Contributors:": "Copyright © 2014-2016 els segĂŒents Col·laboradors:",
|
||||
"Copyright © 2014-2017 the following Contributors:": "Copyright © 2014-2017 the following Contributors:",
|
||||
"Danger!": "Perill!",
|
||||
"Deleted": "Esborrat",
|
||||
"Device": "Device",
|
||||
"Device \"{%name%}\" ({%device%} at {%address%}) wants to connect. Add new device?": "Dispositiu \"{{name}}\" ({{device}} a l'adreça {{address}}) vol connectar. Afegir nou dispositiu?",
|
||||
"Device ID": "ID del dispositiu",
|
||||
"Device Identification": "IdentificaciĂł del dispositiu",
|
||||
"Device Name": "Nom del dispositiu",
|
||||
"Devices": "Dispositius",
|
||||
"Disconnected": "Desconnectat",
|
||||
"Discovered": "Discovered",
|
||||
"Discovered": "Descobert",
|
||||
"Discovery": "Descobriment",
|
||||
"Documentation": "DocumentaciĂł",
|
||||
"Download Rate": "Velocitat de descĂ rrega",
|
||||
"Downloaded": "Descarregat",
|
||||
"Downloading": "Descarregant",
|
||||
"Edit": "Editar",
|
||||
"Edit Device": "Editar Dispositiu",
|
||||
"Edit Folder": "Editar Carpeta",
|
||||
"Editing": "Editant",
|
||||
"Enable NAT traversal": "Permetre NAT transversal",
|
||||
"Enable Relaying": "Permetre Transmissions",
|
||||
@@ -63,7 +70,9 @@
|
||||
"File Pull Order": "Ordre de fitxers del pull",
|
||||
"File Versioning": "Versionat de fitxer",
|
||||
"File permission bits are ignored when looking for changes. Use on FAT file systems.": "Els bits de permĂs del fitxer sĂłn ignorats quant es busquen els canvis. Utilitzar en sistemes de fitxers FAT.",
|
||||
"Files are moved to .stversions directory when replaced or deleted by Syncthing.": "Files are moved to .stversions directory when replaced or deleted by Syncthing.",
|
||||
"Files are moved to .stversions folder when replaced or deleted by Syncthing.": "Els arxius es menejen a la carpeta .stversions quant sĂłn substituĂŻts o esborrats per Syncthing.",
|
||||
"Files are moved to date stamped versions in a .stversions directory when replaced or deleted by Syncthing.": "Files are moved to date stamped versions in a .stversions directory when replaced or deleted by Syncthing.",
|
||||
"Files are moved to date stamped versions in a .stversions folder when replaced or deleted by Syncthing.": "Els fitxers són canviats a versions amb indicació de data en una carpeta \".stversions\" quant són reemplaçats o esborrats per Syncthing.",
|
||||
"Files are protected from changes made on other devices, but changes made on this device will be sent to the rest of the cluster.": "Els fitxers sĂłn protegits dels canvis fets en altres dispositius, perĂČ els canvis fets en aquest dispositiu serĂ n enviats a la resta del grup (cluster).",
|
||||
"Folder": "Carpeta",
|
||||
@@ -76,7 +85,9 @@
|
||||
"GUI Authentication Password": "Password d'autenticaciĂł de l'InterfĂcie GrĂ fica d'Usuari (GUI)",
|
||||
"GUI Authentication User": "AutenticaciĂł de l'usuari de l'InterfĂcie GrĂ fica d'Usuari (GUI)",
|
||||
"GUI Listen Addresses": "DirecciĂł d'escolta de l'InterfĂcie GrĂ fica d'Usuari (GUI)",
|
||||
"GUI Theme": "GUI Theme",
|
||||
"Generate": "Generar",
|
||||
"Global Changes": "Global Changes",
|
||||
"Global Discovery": "Descobriment global",
|
||||
"Global Discovery Servers": "Servidors de Descobriment Global",
|
||||
"Global State": "Estat global",
|
||||
@@ -87,6 +98,7 @@
|
||||
"Ignore Permissions": "Permisos a ignorar",
|
||||
"Incoming Rate Limit (KiB/s)": "LĂmit de descĂ rrega (KiB/s)",
|
||||
"Incorrect configuration may damage your folder contents and render Syncthing inoperable.": "La configuraciĂłn incorrecta pot danyar el contingut de la teua carpeta i deixar Syncthing inoperatiu.",
|
||||
"Introduced By": "Introduced By",
|
||||
"Introducer": "Presentador",
|
||||
"Inversion of the given condition (i.e. do not exclude)": "InversiĂł de la condiciĂł donada (per exemple no excloure)",
|
||||
"Keep Versions": "Mantindre versions",
|
||||
@@ -95,6 +107,8 @@
|
||||
"Last Scan": "Ăltim escaneig",
|
||||
"Last seen": "Vist per Ășltima vegada",
|
||||
"Later": "Més tard",
|
||||
"Latest Change": "Ăltim Canvi",
|
||||
"Learn more": "Learn more",
|
||||
"Listeners": "Escoltants",
|
||||
"Local Discovery": "Descobriment local",
|
||||
"Local State": "Estat local",
|
||||
@@ -112,6 +126,7 @@
|
||||
"Newest First": "El més nou primer",
|
||||
"No": "No",
|
||||
"No File Versioning": "Sense versionat de fitxer",
|
||||
"No upgrades": "No upgrades",
|
||||
"Normal": "Normal",
|
||||
"Notice": "AvĂs",
|
||||
"OK": "OK",
|
||||
@@ -123,9 +138,12 @@
|
||||
"Out of Sync Items": "Dispositius sense sincronitzar",
|
||||
"Outgoing Rate Limit (KiB/s)": "LĂmit de pujada (KiB/s)",
|
||||
"Override Changes": "Sobreescriure els canvis",
|
||||
"Path": "Path",
|
||||
"Path to the folder on the local computer. Will be created if it does not exist. The tilde character (~) can be used as a shortcut for": "Ruta a la carpeta local en l'ordinador. Es crearĂ si no existeix. El carĂ cter tilde (~) es pot utilitzar com a drecera",
|
||||
"Path where versions should be stored (leave empty for the default .stversions directory in the shared folder).": "Path where versions should be stored (leave empty for the default .stversions directory in the shared folder).",
|
||||
"Path where versions should be stored (leave empty for the default .stversions folder in the folder).": "Ruta on les versions deurien estar emmagatzemades (deixar buit per a la carpeta .stversions en la carpeta).",
|
||||
"Pause": "Pausa",
|
||||
"Pause All": "Pause All",
|
||||
"Paused": "Pausat",
|
||||
"Please consult the release notes before performing a major upgrade.": "Per favor, consultar les notes de la versiĂł abans de fer una actualitzaciĂł important.",
|
||||
"Please set a GUI Authentication User and Password in the Settings dialog.": "Per favor, estableix un usuari i password per a l'InterfĂcie GrĂ fica d'Usuari en el menĂș d'Adjustos.",
|
||||
@@ -135,8 +153,9 @@
|
||||
"Quick guide to supported patterns": "GuĂa rĂ pida de patrons suportats",
|
||||
"RAM Utilization": "UtilitzaciĂł de la RAM",
|
||||
"Random": "Aleatori",
|
||||
"Reduced by ignore patterns": "Reduced by ignore patterns",
|
||||
"Reduced by ignore patterns": "ReduĂŻt ignorant patrons",
|
||||
"Release Notes": "Notes de la versiĂł",
|
||||
"Release candidates contain the latest features and fixes. They are similar to the traditional bi-weekly Syncthing releases.": "Release candidates contain the latest features and fixes. They are similar to the traditional bi-weekly Syncthing releases.",
|
||||
"Remote Devices": "Dispositius Remots",
|
||||
"Remove": "Eliminar",
|
||||
"Required identifier for the folder. Must be the same on all cluster devices.": "Identificador necessari per la carpeta. Deu ser el mateix en tots els dispositius del cluster.",
|
||||
@@ -147,12 +166,15 @@
|
||||
"Restart Needed": "Reinici necesari",
|
||||
"Restarting": "Reiniciant",
|
||||
"Resume": "Continuar",
|
||||
"Resume All": "Resume All",
|
||||
"Reused": "Reutilitzat",
|
||||
"Save": "Gravar",
|
||||
"Scan Time Remaining": "Temps d'escaneig restant",
|
||||
"Scanning": "Rastrejant",
|
||||
"Select the devices to share this folder with.": "Selecciona els dispositius amb els que compartir aquesta carpeta.",
|
||||
"Select the folders to share with this device.": "Selecciona les carpetes per a compartir amb aquest dispositiu.",
|
||||
"Send & Receive": "Enviar i Rebre",
|
||||
"Send Only": "Enviar Solament",
|
||||
"Settings": "Ajustos",
|
||||
"Share": "Compartir",
|
||||
"Share Folder": "Compartir carpeta",
|
||||
@@ -170,6 +192,9 @@
|
||||
"Single level wildcard (matches within a directory only)": "ComodĂ de nivell Ășnic (coincideix sols dins d'un directori)",
|
||||
"Smallest First": "El més xicotet primer",
|
||||
"Source Code": "Codi font",
|
||||
"Stable releases and release candidates": "Stable releases and release candidates",
|
||||
"Stable releases are delayed by about two weeks. During this time they go through testing as release candidates.": "Stable releases are delayed by about two weeks. During this time they go through testing as release candidates.",
|
||||
"Stable releases only": "Stable releases only",
|
||||
"Staggered File Versioning": "Versionat de fitxers escalonat",
|
||||
"Start Browser": "Iniciar navegador",
|
||||
"Statistics": "EstadĂstiques",
|
||||
@@ -210,7 +235,9 @@
|
||||
"This Device": "Aquest Dispositiu",
|
||||
"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 is a major version upgrade.": "Aquesta és una actualització important de la versió.",
|
||||
"Time": "Time",
|
||||
"Trash Can File Versioning": "Versionat d'arxius de la paperera",
|
||||
"Type": "Type",
|
||||
"Unknown": "Desconegut",
|
||||
"Unshared": "No compartit",
|
||||
"Unused": "No utilitzat",
|
||||
@@ -221,18 +248,24 @@
|
||||
"Upgrading": "Actualitzant",
|
||||
"Upload Rate": "Velocitat d'actualitzaciĂł",
|
||||
"Uptime": "Temps de funcionament",
|
||||
"Usage reporting is always enabled for candidate releases.": "Usage reporting is always enabled for candidate releases.",
|
||||
"Use HTTPS for GUI": "Utilitzar HTTP per a l'InterfĂcie GrĂ fica d'Usuari (GUI)",
|
||||
"Version": "VersiĂł",
|
||||
"Versions Path": "Ruta de les versions",
|
||||
"Versions are automatically deleted if they are older than the maximum age or exceed the number of files allowed in an interval.": "Les versions s'esborren automà ticament si són més antigues que l'edat mà xima o excedixen el nombre de fitxer permesos en un interval.",
|
||||
"Warning, this path is a parent directory of an existing folder \"{%otherFolder%}\".": "Warning, this path is a parent directory of an existing folder \"{{otherFolder}}\".",
|
||||
"Warning, this path is a parent directory of an existing folder \"{%otherFolderLabel%}\" ({%otherFolder%}).": "Warning, this path is a parent directory of an existing folder \"{{otherFolderLabel}}\" ({{otherFolder}}).",
|
||||
"Warning, this path is a subdirectory of an existing folder \"{%otherFolder%}\".": "Perill! Aquesta ruta és un subdirectori d'una carpeta que ja existeix nomenada \"{{otherFolder}}\".",
|
||||
"Warning, this path is a subdirectory of an existing folder \"{%otherFolderLabel%}\" ({%otherFolder%}).": "Warning, this path is a subdirectory of an existing folder \"{{otherFolderLabel}}\" ({{otherFolder}}).",
|
||||
"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Ă",
|
||||
"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.",
|
||||
"You must keep at least one version.": "Es deu mantindre al menys una versiĂł.",
|
||||
"days": "dies",
|
||||
"directories": "directories",
|
||||
"files": "files",
|
||||
"directories": "directoris",
|
||||
"files": "arxius",
|
||||
"full documentation": "DocumentaciĂł completa",
|
||||
"items": "Elements",
|
||||
"{%device%} wants to share folder \"{%folder%}\".": "{{device}} vol compartit la carpeta \"{{folder}}\".",
|
||||
|
||||
@@ -1,9 +1,10 @@
|
||||
{
|
||||
"A device with that ID is already added.": "PĆĂstroj s tĂmto ID je jiĆŸ pĆĂdĂĄn.",
|
||||
"A device with that ID is already added.": "PĆĂstroj s tĂmto ID je jiĆŸ pĆidĂĄn.",
|
||||
"A negative number of days doesn't make sense.": "ZĂĄpornĂœ poÄet dnĂ nedĂĄvĂĄ smysl.",
|
||||
"A new major version may not be compatible with previous versions.": "NovĂĄ dĆŻleĆŸitĂĄ verze nemusĂ bĂœt kompatibilnĂ s pĆedchozĂmi verzemi.",
|
||||
"API Key": "API klĂÄ",
|
||||
"About": "O aplikaci",
|
||||
"Action": "Akce",
|
||||
"Actions": "Akce",
|
||||
"Add": "PĆidat",
|
||||
"Add Device": "PĆidat pĆĂstroj",
|
||||
@@ -18,9 +19,11 @@
|
||||
"All Data": "VĆĄechna data",
|
||||
"Allow Anonymous Usage Reporting?": "Povolit anonymnĂ hlĂĄĆĄenĂ o pouĆŸĂvĂĄnĂ?",
|
||||
"Alphabetic": "AbecednÄ",
|
||||
"An external command handles the versioning. It has to remove the file from the shared folder.": "An external command handles the versioning. It has to remove the file from the shared folder.",
|
||||
"An external command handles the versioning. It has to remove the file from the synced folder.": "VerzovĂĄnĂ obstarĂĄvĂĄ externĂ pĆĂkaz. MusĂ odstranit soubor ze sdĂlenĂ©ho adresĂĄĆe.",
|
||||
"Anonymous Usage Reporting": "AnonymnĂ hlĂĄĆĄenĂ o pouĆŸĂvĂĄnĂ",
|
||||
"Any devices configured on an introducer device will be added to this device as well.": "JakĂ©koliv pĆĂstroje nakonfigurovanĂ© na zavadÄÄi budou pĆidĂĄny takĂ© na tento pĆĂstroj.",
|
||||
"Automatic upgrade now offers the choice between stable releases and release candidates.": "AutomatickĂĄ aktualizace nynĂ nabĂzĂ volbu mezi stabilnĂmi vydĂĄnĂmi a kandidĂĄty na vydĂĄnĂ.",
|
||||
"Automatic upgrades": "Automatické aktualizace",
|
||||
"Be careful!": "Pozor!",
|
||||
"Bugs": "Chyby",
|
||||
@@ -37,8 +40,10 @@
|
||||
"Copied from elsewhere": "ZkopĂrovĂĄno odjinud",
|
||||
"Copied from original": "ZkopĂrovĂĄno z originĂĄlu",
|
||||
"Copyright © 2014-2016 the following Contributors:": "Copyright © 2014-2016 nĂĄsledujĂcĂ pĆispÄvatelĂ©:",
|
||||
"Copyright © 2014-2017 the following Contributors:": "Copyright © 2014-2017 nĂĄsledujĂcĂ pĆispÄvatelĂ©:",
|
||||
"Danger!": "Pozor!",
|
||||
"Deleted": "SmazĂĄno",
|
||||
"Device": "ZaĆĂzenĂ",
|
||||
"Device \"{%name%}\" ({%device%} at {%address%}) wants to connect. Add new device?": "ZaĆĂzenĂ \"{{name}}\" ({{device}} na {{address}}) se chce pĆipojit. PĆidat novĂ© zaĆĂzenĂ?",
|
||||
"Device ID": "ID pĆĂstroje",
|
||||
"Device Identification": "Identifikace pĆĂstroje",
|
||||
@@ -52,6 +57,8 @@
|
||||
"Downloaded": "StaĆŸeno",
|
||||
"Downloading": "Stahuji",
|
||||
"Edit": "Upravit",
|
||||
"Edit Device": "Upravit zaĆĂzenĂ",
|
||||
"Edit Folder": "Upravit adresĂĄĆ",
|
||||
"Editing": "Upravuje se",
|
||||
"Enable NAT traversal": "Povolit NAT pĆenos",
|
||||
"Enable Relaying": "Povolit pĆenaĆĄeÄe",
|
||||
@@ -63,8 +70,10 @@
|
||||
"File Pull Order": "PoĆadĂ stahovĂĄnĂ souborĆŻ",
|
||||
"File Versioning": "VerzovĂĄnĂ souborĆŻ",
|
||||
"File permission bits are ignored when looking for changes. Use on FAT file systems.": "Bity oznaÄujĂcĂ prĂĄva souborĆŻ jsou pĆi hledĂĄnĂ zmÄn ignorovĂĄny. PouĆŸĂt pro souborovĂ© systĂ©my FAT.",
|
||||
"Files are moved to .stversions folder when replaced or deleted by Syncthing.": "Po nahrazenĂ nebo smazĂĄnĂ aplikacĂ Syncthing jsou soubory pĆesunuty do adresĂĄĆe .stversions.",
|
||||
"Files are moved to date stamped versions in a .stversions folder when replaced or deleted by Syncthing.": "Po nahrazenĂ nebo smazĂĄnĂ aplikacĂ Syncthing jsou soubory pĆesunuty do verzĂ oznaÄenĂœch daty v adresĂĄĆi .stversions.",
|
||||
"Files are moved to .stversions directory when replaced or deleted by Syncthing.": "Files are moved to .stversions directory when replaced or deleted by Syncthing.",
|
||||
"Files are moved to .stversions folder when replaced or deleted by Syncthing.": "Po nahrazenĂ nebo smazĂĄnĂ aplikacĂ Syncthing jsou soubory pĆesunuty do sloĆŸky .stversions.",
|
||||
"Files are moved to date stamped versions in a .stversions directory when replaced or deleted by Syncthing.": "Files are moved to date stamped versions in a .stversions directory when replaced or deleted by Syncthing.",
|
||||
"Files are moved to date stamped versions in a .stversions folder when replaced or deleted by Syncthing.": "Po nahrazenĂ nebo smazĂĄnĂ aplikacĂ Syncthing jsou soubory pĆesunuty do verzĂ oznaÄenĂœch daty ve sloĆŸce .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.": "Soubory jsou chrĂĄnÄny pĆed zmÄnami na ostatnĂch pĆĂstrojĂch, ale zmÄny provedenĂ© z tohoto pĆĂstroje budou rozeslĂĄny na zbytek clusteru.",
|
||||
"Folder": "AdresĂĄĆ",
|
||||
"Folder ID": "ID adresĂĄĆe",
|
||||
@@ -76,7 +85,9 @@
|
||||
"GUI Authentication Password": "PĆihlaĆĄovacĂ heslo pro GUI",
|
||||
"GUI Authentication User": "PĆihlaĆĄovacĂ jmĂ©no pro GUI",
|
||||
"GUI Listen Addresses": "Adresa naslouchĂĄnĂ GUI",
|
||||
"GUI Theme": "Grafické téma",
|
||||
"Generate": "Generovat",
|
||||
"Global Changes": "GlobĂĄlnĂ zmÄny",
|
||||
"Global Discovery": "GlobĂĄlnĂ oznamovĂĄnĂ",
|
||||
"Global Discovery Servers": "Servery globĂĄlnĂho oznamovĂĄnĂ",
|
||||
"Global State": "GlobĂĄlnĂ status",
|
||||
@@ -87,6 +98,7 @@
|
||||
"Ignore Permissions": "Ignorovat oprĂĄvnÄnĂ",
|
||||
"Incoming Rate Limit (KiB/s)": "OmezenĂ pĆĂchozĂ rychlosti (KiB/s)",
|
||||
"Incorrect configuration may damage your folder contents and render Syncthing inoperable.": "NesprĂĄvnĂ© nastavenĂ mĆŻĆŸe poĆĄkodit obsah VaĆĄich adresĂĄĆĆŻ a uÄinit Syncthing nefunkÄnĂ.",
|
||||
"Introduced By": "Zavedl",
|
||||
"Introducer": "ZavadÄÄ",
|
||||
"Inversion of the given condition (i.e. do not exclude)": "ProhozenĂ zadanĂ© podmĂnky (napĆ. nevynechat)",
|
||||
"Keep Versions": "Ponechat verze",
|
||||
@@ -95,6 +107,8 @@
|
||||
"Last Scan": "PoslednĂ sken",
|
||||
"Last seen": "Naposledy spatĆen",
|
||||
"Later": "PozdÄji",
|
||||
"Latest Change": "PoslednĂ zmÄna",
|
||||
"Learn more": "ZjistÄte vĂce",
|
||||
"Listeners": "NaslouchajĂcĂ",
|
||||
"Local Discovery": "MĂstnĂ oznamovĂĄnĂ",
|
||||
"Local State": "MĂstnĂ status",
|
||||
@@ -105,13 +119,14 @@
|
||||
"Metadata Only": "Pouze metadata",
|
||||
"Minimum Free Disk Space": "MinimĂĄlnĂ velikost volnĂ©ho mĂsta na disku",
|
||||
"Move to top of queue": "PĆesunout na zaÄĂĄtek fronty",
|
||||
"Multi level wildcard (matches multiple directory levels)": "VĂceĂșrovĆovĂœ zĂĄstupnĂœ znak (shoda skrz vĂce ĂșrovnĂ adresĂĄĆĆŻ)",
|
||||
"Multi level wildcard (matches multiple directory levels)": "VĂceĂșrovĆovĂœ zĂĄstupnĂœ znak (shoda skrz vĂce ĂșrovnĂ sloĆŸek)",
|
||||
"Never": "Nikdy",
|
||||
"New Device": "NovĂœ pĆĂstroj",
|
||||
"New Folder": "NovĂœ adresĂĄĆ",
|
||||
"Newest First": "Od nejnovÄjĆĄĂho",
|
||||
"No": "Ne",
|
||||
"No File Versioning": "Bez verzovĂĄnĂ souborĆŻ",
|
||||
"No upgrades": "ĆœĂĄdnĂ© aktualizace",
|
||||
"Normal": "NormĂĄlnĂ",
|
||||
"Notice": "OznĂĄmenĂ",
|
||||
"OK": "OK",
|
||||
@@ -123,9 +138,12 @@
|
||||
"Out of Sync Items": "NesesynchronizovanĂ© poloĆŸky",
|
||||
"Outgoing Rate Limit (KiB/s)": "OmezenĂ odchozĂ rychlosti (KiB/s)",
|
||||
"Override Changes": "PĆepsat zmÄny",
|
||||
"Path": "Cesta",
|
||||
"Path to the folder on the local computer. Will be created if it does not exist. The tilde character (~) can be used as a shortcut for": "Cesta k adresĂĄĆi na lokĂĄlnĂm poÄĂtaÄi. Pokud neexistuje, bude vytvoĆen. Znak vlnovky (~) mĆŻĆŸe bĂœt pouĆŸit jako zkratka pro",
|
||||
"Path where versions should be stored (leave empty for the default .stversions folder in the folder).": "Cesta pro uklĂĄdĂĄnĂ verzĂ (nechat prĂĄzdnĂ© pro vĂœchozĂ podadresĂĄĆ .stversions v adresĂĄĆĂch).",
|
||||
"Path where versions should be stored (leave empty for the default .stversions directory in the shared folder).": "Path where versions should be stored (leave empty for the default .stversions directory in the shared folder).",
|
||||
"Path where versions should be stored (leave empty for the default .stversions folder in the folder).": "Cesta pro uklĂĄdĂĄnĂ verzĂ (nechat prĂĄzdnĂ© pro vĂœchozĂ sloĆŸku .stversions v adresĂĄĆi).",
|
||||
"Pause": "Pozastavit",
|
||||
"Pause All": "Pozastavit vĆĄe",
|
||||
"Paused": "Pozastaveno",
|
||||
"Please consult the release notes before performing a major upgrade.": "PĆed spuĆĄtÄnĂm dĆŻleĆŸitĂ© aktualizace si nejdĆĂve pĆeÄtÄte poznĂĄmky k vydĂĄnĂ novĂ© verze.",
|
||||
"Please set a GUI Authentication User and Password in the Settings dialog.": "Zadejte prosĂm pĆihlaĆĄovacĂ jmĂ©no a heslo pro GUI v dialogu nastavenĂ.",
|
||||
@@ -137,6 +155,7 @@
|
||||
"Random": "NĂĄhodnÄ",
|
||||
"Reduced by ignore patterns": "Redukovåno o ignorované vzory",
|
||||
"Release Notes": "PoznĂĄmky k vydĂĄnĂ",
|
||||
"Release candidates contain the latest features and fixes. They are similar to the traditional bi-weekly Syncthing releases.": "KandidĂĄti na vydĂĄnĂ obsahujĂ nejnovÄjĆĄĂ zmÄny a opravy. PodobajĂ se tradiÄnĂm dvoutĂœdennĂm vydĂĄnĂm Syncthing.",
|
||||
"Remote Devices": "VzdĂĄlenĂĄ zaĆĂzenĂ",
|
||||
"Remove": "Odstranit",
|
||||
"Required identifier for the folder. Must be the same on all cluster devices.": "PoĆŸadovanĂœ identifikĂĄtor adresĂĄĆe. MusĂ bĂœt stejnĂœ na vĆĄech zaĆĂzenĂch.",
|
||||
@@ -147,12 +166,15 @@
|
||||
"Restart Needed": "Je nutnĂœ restart",
|
||||
"Restarting": "Restartuji",
|
||||
"Resume": "PokraÄovat",
|
||||
"Resume All": "PokraÄovat (vĆĄe)",
|
||||
"Reused": "OpakovanÄ pouĆŸitĂ©",
|
||||
"Save": "UloĆŸit",
|
||||
"Scan Time Remaining": "ZbĂœvajĂcĂ Äas skenovĂĄnĂ",
|
||||
"Scanning": "SkenovĂĄnĂ",
|
||||
"Select the devices to share this folder with.": "Vybrat pĆĂstroje, se kterĂœmi sdĂlet tento adresĂĄĆ.",
|
||||
"Select the folders to share with this device.": "Vybrat adresĂĄĆe sdĂlenĂ© s tĂmto pĆĂstrojem.",
|
||||
"Send & Receive": "Odeslat a pĆijmout",
|
||||
"Send Only": "Pouze odeslat",
|
||||
"Settings": "NastavenĂ",
|
||||
"Share": "SdĂlet",
|
||||
"Share Folder": "SdĂlet adresĂĄĆ",
|
||||
@@ -167,9 +189,12 @@
|
||||
"Shutdown": "Vypnout",
|
||||
"Shutdown Complete": "VypnutĂ dokonÄeno",
|
||||
"Simple File Versioning": "Jednoduché verzovånà souborƯ",
|
||||
"Single level wildcard (matches within a directory only)": "JednoĂșrovĆovĂœ zĂĄstupnĂœ znak (shody pouze uvnitĆ adresĂĄĆe)",
|
||||
"Single level wildcard (matches within a directory only)": "JednoĂșrovĆovĂœ zĂĄstupnĂœ znak (shody pouze uvnitĆ sloĆŸky)",
|
||||
"Smallest First": "Od nejmenĆĄĂho",
|
||||
"Source Code": "ZdrojovĂœ kĂłd",
|
||||
"Stable releases and release candidates": "StabilnĂ vydĂĄnĂ a kandidĂĄti na vydĂĄnĂ",
|
||||
"Stable releases are delayed by about two weeks. During this time they go through testing as release candidates.": "StabilnĂ vydĂĄnĂ jsou opoĆŸdÄna zhruba o dva tĂœdny. Po tuto dobu se testujĂ jako kandidĂĄti na vydĂĄnĂ.",
|
||||
"Stable releases only": "Pouze stabilnĂ vydĂĄnĂ",
|
||||
"Staggered File Versioning": "Postupné verzovånà souborƯ",
|
||||
"Start Browser": "OtevĆĂt prohlĂĆŸeÄ",
|
||||
"Statistics": "Statistiky",
|
||||
@@ -210,7 +235,9 @@
|
||||
"This Device": "Toto zaĆĂzenĂ",
|
||||
"This can easily give hackers access to read and change any files on your computer.": "To mĆŻĆŸe ĂștoÄnĂkĆŻm jednoduĆĄe povolit ÄtenĂ a Ășpravy souborĆŻ na vaĆĄem pĆĂstroji. ",
|
||||
"This is a major version upgrade.": "Toto je dĆŻleĆŸitĂĄ aktualizace.",
|
||||
"Time": "Äas",
|
||||
"Trash Can File Versioning": "VerzovĂĄnĂ souborĆŻ v koĆĄi",
|
||||
"Type": "Typ",
|
||||
"Unknown": "NeznĂĄmĂœ",
|
||||
"Unshared": "NesdĂlenĂœ",
|
||||
"Unused": "NepouĆŸitĂœ",
|
||||
@@ -221,14 +248,20 @@
|
||||
"Upgrading": "Aktualizuji",
|
||||
"Upload Rate": "Rychlost odesĂlĂĄnĂ",
|
||||
"Uptime": "CelkovĂœ Äas bÄhu",
|
||||
"Usage reporting is always enabled for candidate releases.": "HlĂĄĆĄenĂ o pouĆŸĂvĂĄnĂ je pro kandidĂĄty na vydĂĄnĂ vĆŸdy zapnuto.",
|
||||
"Use HTTPS for GUI": "PouĆŸĂt HTTPS pro grafickĂ© rozhranĂ",
|
||||
"Version": "Verze",
|
||||
"Versions Path": "Cesta k verzĂm",
|
||||
"Versions are automatically deleted if they are older than the maximum age or exceed the number of files allowed in an interval.": "Verze jsou automaticky smazĂĄny, pokud jsou starĆĄĂ neĆŸ maximĂĄlnĂ ÄasovĂœ limit nebo pĆekroÄĂ poÄet souborĆŻ povolenĂœch pro interval.",
|
||||
"Warning, this path is a subdirectory of an existing folder \"{%otherFolder%}\".": "VarovĂĄnĂ: tato cesta je podadresĂĄĆem existujĂcĂho adresĂĄĆe \"{{otherFolder}}\".",
|
||||
"Warning, this path is a parent directory of an existing folder \"{%otherFolder%}\".": "VarovĂĄnĂ, tato cesta je nadĆazenou sloĆŸkou existujĂcĂho adresĂĄĆe \"{{otherFolder}}\".",
|
||||
"Warning, this path is a parent directory of an existing folder \"{%otherFolderLabel%}\" ({%otherFolder%}).": "VarovĂĄnĂ, tato cesta je nadĆazenou sloĆŸkou existujĂcĂho adresĂĄĆe \"{{otherFolderLabel}}\" ({{otherFolder}}).",
|
||||
"Warning, this path is a subdirectory of an existing folder \"{%otherFolder%}\".": "VarovĂĄnĂ: tato cesta je podsloĆŸkou existujĂcĂho adresĂĄĆe \"{{otherFolder}}\".",
|
||||
"Warning, this path is a subdirectory of an existing folder \"{%otherFolderLabel%}\" ({%otherFolder%}).": "VarovĂĄnĂ, tato cesta je podsloĆŸkou existujĂcĂho adresĂĄĆe \"{{otherFolderLabel}}\" ({{otherFolder}}).",
|
||||
"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 pĆĂstroje 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Ă©ho adresĂĄĆe mÄjte na pamÄti, ĆŸe jeho ID je pouĆŸito ke svĂĄzĂĄnĂ adresĂĄĆĆŻ napĆĂÄ pĆĂstoji. RozliĆĄujĂ se malĂĄ a velkĂĄ pĂsmena a musĂ pĆesnÄ souhlasit mezi vĆĄemi pĆĂstroji.",
|
||||
"Yes": "Ano",
|
||||
"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.",
|
||||
"You must keep at least one version.": "Je tĆeba ponechat alespoĆ jednu verzi.",
|
||||
"days": "dnĂ",
|
||||
"directories": "sloĆŸek",
|
||||
|
||||
@@ -4,6 +4,7 @@
|
||||
"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",
|
||||
"About": "Om",
|
||||
"Action": "Action",
|
||||
"Actions": "Handlinger.",
|
||||
"Add": "TilfĂžj",
|
||||
"Add Device": "TilfĂžj enhed",
|
||||
@@ -18,9 +19,11 @@
|
||||
"All Data": "Alt data",
|
||||
"Allow Anonymous Usage Reporting?": "Tillad anonym brugerstatistik?",
|
||||
"Alphabetic": "Alfabetisk",
|
||||
"An external command handles the versioning. It has to remove the file from the shared folder.": "An external command handles the versioning. It has to remove the file from the shared folder.",
|
||||
"An external command handles the versioning. It has to remove the file from the synced folder.": " ",
|
||||
"Anonymous Usage Reporting": "Anonym brugerstatistik",
|
||||
"Any devices configured on an introducer device will be added to this device as well.": "Alle enheder som er konfigueret som en introducerende enhed, vil ogsÄ blive tilfÞjet til denne enhed.",
|
||||
"Automatic upgrade now offers the choice between stable releases and release candidates.": "Automatic upgrade now offers the choice between stable releases and release candidates.",
|
||||
"Automatic upgrades": "Automatisk opdatering",
|
||||
"Be careful!": "VĂŠr forsigtig!",
|
||||
"Bugs": "Fejl",
|
||||
@@ -37,8 +40,10 @@
|
||||
"Copied from elsewhere": "Kopieret fra et andet sted",
|
||||
"Copied from original": "Kopieret fra originalen",
|
||||
"Copyright © 2014-2016 the following Contributors:": "Copyright © 2014-2016 the following Contributors:",
|
||||
"Copyright © 2014-2017 the following Contributors:": "Copyright © 2014-2017 the following Contributors:",
|
||||
"Danger!": "Fare!",
|
||||
"Deleted": "Slettet",
|
||||
"Device": "Device",
|
||||
"Device \"{%name%}\" ({%device%} at {%address%}) wants to connect. Add new device?": "Device \"{{name}}\" ({{device}} at {{address}}) wants to connect. Add new device?",
|
||||
"Device ID": "Enheds-ID",
|
||||
"Device Identification": "Enhedsidentifikation",
|
||||
@@ -52,6 +57,8 @@
|
||||
"Downloaded": "Downloadet",
|
||||
"Downloading": "Downloader",
|
||||
"Edit": "Rediger",
|
||||
"Edit Device": "Edit Device",
|
||||
"Edit Folder": "Edit Folder",
|
||||
"Editing": "Redigerer",
|
||||
"Enable NAT traversal": "Enable NAT traversal",
|
||||
"Enable Relaying": "Enable Relaying",
|
||||
@@ -63,7 +70,9 @@
|
||||
"File Pull Order": "Filhentnings rĂŠkkefĂžlge",
|
||||
"File Versioning": "Filversionering",
|
||||
"File permission bits are ignored when looking for changes. Use on FAT file systems.": "Filtilladelses bits ignoreres nÄr der sÞges efter Êndringer. Bruges pÄ FAT filsystemer. ",
|
||||
"Files are moved to .stversions directory when replaced or deleted by Syncthing.": "Files are moved to .stversions directory when replaced or deleted by Syncthing.",
|
||||
"Files are moved to .stversions folder when replaced or deleted by Syncthing.": "Filer flyttes til .stversions mappen nÄr de erstattes eller slettes af Syncthing.",
|
||||
"Files are moved to date stamped versions in a .stversions directory when replaced or deleted by Syncthing.": "Files are moved to date stamped versions in a .stversions directory when replaced or deleted by Syncthing.",
|
||||
"Files are moved to date stamped versions in a .stversions folder when replaced or deleted by Syncthing.": "Filer flyttes til data-stemplede versioner i en .stversions mappe nÄr de erstattes eller slettes af Syncthing.",
|
||||
"Files are protected from changes made on other devices, but changes made on this device will be sent to the rest of the cluster.": "Filer er beskyttet fra Êndringer foretaget pÄ andre enheder, men Êndringerne pÄ denne enhed vil blive sendt til alle andre tilknyttede enheder.",
|
||||
"Folder": "Mappe",
|
||||
@@ -76,7 +85,9 @@
|
||||
"GUI Authentication Password": "GUI-kodeord",
|
||||
"GUI Authentication User": "GUI-brugernavn",
|
||||
"GUI Listen Addresses": "GUI-lytteadresse",
|
||||
"GUI Theme": "GUI Theme",
|
||||
"Generate": "Opret",
|
||||
"Global Changes": "Global Changes",
|
||||
"Global Discovery": "Globalt opslag",
|
||||
"Global Discovery Servers": "Global Discovery Servers",
|
||||
"Global State": "Global tilstand",
|
||||
@@ -87,6 +98,7 @@
|
||||
"Ignore Permissions": "Ignorér filrettigheder",
|
||||
"Incoming Rate Limit (KiB/s)": "IndgÄende hastighedsbegrÊnsning (KiB/s)",
|
||||
"Incorrect configuration may damage your folder contents and render Syncthing inoperable.": "Ukorrekt opsĂŠtning kan skade dine data og gĂžre Syncthing ude af stand til at fungere.",
|
||||
"Introduced By": "Introduced By",
|
||||
"Introducer": "Introducerende enhed",
|
||||
"Inversion of the given condition (i.e. do not exclude)": "Det omvendte (dvs. undlad ikke)",
|
||||
"Keep Versions": "Behold versioner",
|
||||
@@ -95,6 +107,8 @@
|
||||
"Last Scan": "Last Scan",
|
||||
"Last seen": "Sidst set",
|
||||
"Later": "Senere",
|
||||
"Latest Change": "Latest Change",
|
||||
"Learn more": "Learn more",
|
||||
"Listeners": "Listeners",
|
||||
"Local Discovery": "Lokal opslag",
|
||||
"Local State": "Lokal tilstand",
|
||||
@@ -112,6 +126,7 @@
|
||||
"Newest First": "Nyeste fĂžrst",
|
||||
"No": "Nej",
|
||||
"No File Versioning": "Ingen filversion",
|
||||
"No upgrades": "No upgrades",
|
||||
"Normal": "Normal",
|
||||
"Notice": "OBS",
|
||||
"OK": "OK",
|
||||
@@ -123,9 +138,12 @@
|
||||
"Out of Sync Items": "Endnu ikke synkroniserede filer",
|
||||
"Outgoing Rate Limit (KiB/s)": "UdgÄende hastighedsbegrÊnsning (KiB/s)",
|
||||
"Override Changes": "Overskriv ĂŠndringer",
|
||||
"Path": "Path",
|
||||
"Path to the folder on the local computer. Will be created if it does not exist. The tilde character (~) can be used as a shortcut for": "Sti til den lokale mappe. Vil blive oprettet hvis den ikke findes. Tilde tegnet (~) kan bruges som en forkortelse for",
|
||||
"Path where versions should be stored (leave empty for the default .stversions directory in the shared folder).": "Path where versions should be stored (leave empty for the default .stversions directory in the shared folder).",
|
||||
"Path where versions should be stored (leave empty for the default .stversions folder in the folder).": "Sti hvor versioner skal gemmes (efterlad tom for default .stversions mappe)",
|
||||
"Pause": "Pause",
|
||||
"Pause All": "Pause All",
|
||||
"Paused": "Pauset",
|
||||
"Please consult the release notes before performing a major upgrade.": "Tjek venligst udgivelsesnoterne fĂžr opgradering til en ny version.",
|
||||
"Please set a GUI Authentication User and Password in the Settings dialog.": "SĂŠt vensligt en GUI bruger og kodeord i opsĂŠtningsdialogen.",
|
||||
@@ -137,6 +155,7 @@
|
||||
"Random": "TilfĂŠldig",
|
||||
"Reduced by ignore patterns": "Reduced by ignore patterns",
|
||||
"Release Notes": "Udgivelsesnoter",
|
||||
"Release candidates contain the latest features and fixes. They are similar to the traditional bi-weekly Syncthing releases.": "Release candidates contain the latest features and fixes. They are similar to the traditional bi-weekly Syncthing releases.",
|
||||
"Remote Devices": "Remote Devices",
|
||||
"Remove": "Fjern",
|
||||
"Required identifier for the folder. Must be the same on all cluster devices.": "Required identifier for the folder. Must be the same on all cluster devices.",
|
||||
@@ -147,12 +166,15 @@
|
||||
"Restart Needed": "Programmet krĂŠver genstart",
|
||||
"Restarting": "Genstarter",
|
||||
"Resume": "Genoptag",
|
||||
"Resume All": "Resume All",
|
||||
"Reused": "Genbrugt",
|
||||
"Save": "Gem",
|
||||
"Scan Time Remaining": "Tid tilbage af skanningen",
|
||||
"Scanning": "Opdaterer",
|
||||
"Select the devices to share this folder with.": "VĂŠlg hvilke enheder du vil dele denne mappe med",
|
||||
"Select the folders to share with this device.": "VĂŠlg hvilke mapper du vil dele med denne enhed.",
|
||||
"Send & Receive": "Send & Receive",
|
||||
"Send Only": "Send Only",
|
||||
"Settings": "Indstillinger",
|
||||
"Share": "Del",
|
||||
"Share Folder": "Delt mappe",
|
||||
@@ -170,6 +192,9 @@
|
||||
"Single level wildcard (matches within a directory only)": "Enkeltnivau wildcard (matcher kun inden for en mapp)",
|
||||
"Smallest First": "Mindste fĂžrst",
|
||||
"Source Code": "Kildekode",
|
||||
"Stable releases and release candidates": "Stable releases and release candidates",
|
||||
"Stable releases are delayed by about two weeks. During this time they go through testing as release candidates.": "Stable releases are delayed by about two weeks. During this time they go through testing as release candidates.",
|
||||
"Stable releases only": "Stable releases only",
|
||||
"Staggered File Versioning": "Forskudte filversioner",
|
||||
"Start Browser": "Start browser",
|
||||
"Statistics": "Statistikker",
|
||||
@@ -210,7 +235,9 @@
|
||||
"This Device": "This Device",
|
||||
"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 is a major version upgrade.": "Dette er en ny version",
|
||||
"Time": "Time",
|
||||
"Trash Can File Versioning": "Skraldespand fil versioner",
|
||||
"Type": "Type",
|
||||
"Unknown": "Ukendt",
|
||||
"Unshared": "Ikke delt",
|
||||
"Unused": "Ubrugt",
|
||||
@@ -221,14 +248,20 @@
|
||||
"Upgrading": "Opgradere",
|
||||
"Upload Rate": "Uploadhastighed",
|
||||
"Uptime": "Oppetid",
|
||||
"Usage reporting is always enabled for candidate releases.": "Usage reporting is always enabled for candidate releases.",
|
||||
"Use HTTPS for GUI": "Anvend HTTPS til GUI adgang",
|
||||
"Version": "Version",
|
||||
"Versions Path": "Versions-sti",
|
||||
"Versions are automatically deleted if they are older than the maximum age or exceed the number of files allowed in an interval.": "Versioner slettes automatisk, hvis de er ĂŠldre end den satte maksimum alder eller overstiger det tilladte antal filer i et interval.",
|
||||
"Warning, this path is a parent directory of an existing folder \"{%otherFolder%}\".": "Warning, this path is a parent directory of an existing folder \"{{otherFolder}}\".",
|
||||
"Warning, this path is a parent directory of an existing folder \"{%otherFolderLabel%}\" ({%otherFolder%}).": "Warning, this path is a parent directory of an existing folder \"{{otherFolderLabel}}\" ({{otherFolder}}).",
|
||||
"Warning, this path is a subdirectory of an existing folder \"{%otherFolder%}\".": "Warning, this path is a subdirectory of an existing folder \"{{otherFolder}}\".",
|
||||
"Warning, this path is a subdirectory of an existing folder \"{%otherFolderLabel%}\" ({%otherFolder%}).": "Warning, this path is a subdirectory of an existing folder \"{{otherFolderLabel}}\" ({{otherFolder}}).",
|
||||
"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 pÄ den anden side.",
|
||||
"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 ID bruges til at forbinde mapperne 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",
|
||||
"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.",
|
||||
"You must keep at least one version.": "Du skal beholde mindst én version.",
|
||||
"days": "dage",
|
||||
"directories": "directories",
|
||||
|
||||
@@ -1,15 +1,16 @@
|
||||
{
|
||||
"A device with that ID is already added.": "Ein GerÀt mit dieser ID existiert bereits.",
|
||||
"A device with that ID is already added.": "Ein GerĂ€t mit dieser Kennung ist bereits hinzugefĂŒgt.",
|
||||
"A negative number of days doesn't make sense.": "Eine negative Anzahl von Tagen ergibt keinen Sinn.",
|
||||
"A new major version may not be compatible with previous versions.": "Die neue Hauptversion ist evtl. nicht mit vorherigen Versionen kompatibel.",
|
||||
"API Key": "API-SchlĂŒssel",
|
||||
"About": "Ăber Syncthing",
|
||||
"About": "Ăber",
|
||||
"Action": "Aktion",
|
||||
"Actions": "Aktionen",
|
||||
"Add": "HinzufĂŒgen",
|
||||
"Add Device": "GerĂ€t hinzufĂŒgen",
|
||||
"Add Folder": "Verzeichnis hinzufĂŒgen",
|
||||
"Add Remote Device": "Remote-GerĂ€t hinzufĂŒgen",
|
||||
"Add new folder?": "Neues Verzeichnis hinzufĂŒgen?",
|
||||
"Add Folder": "Ordner hinzufĂŒgen",
|
||||
"Add Remote Device": "GerĂ€t hinzufĂŒgen",
|
||||
"Add new folder?": "Neuen Ordner hinzufĂŒgen?",
|
||||
"Address": "Adresse",
|
||||
"Addresses": "Adressen",
|
||||
"Advanced": "Erweitert",
|
||||
@@ -18,9 +19,11 @@
|
||||
"All Data": "Alle Daten",
|
||||
"Allow Anonymous Usage Reporting?": "Ăbertragung von anonymen Nutzungsberichten erlauben?",
|
||||
"Alphabetic": "Alphabetisch",
|
||||
"An external command handles the versioning. It has to remove the file from the synced folder.": "Ein externer Programmaufruf handhabt die Versionierung. Es muss die Datei aus dem zu synchronisierendem Verzeichnis entfernen.",
|
||||
"An external command handles the versioning. It has to remove the file from the shared folder.": "An external command handles the versioning. It has to remove the file from the shared folder.",
|
||||
"An external command handles the versioning. It has to remove the file from the synced folder.": "Ein externer Programmaufruf handhabt die Versionierung. Es muss die Datei aus dem zu synchronisierendem Ordner entfernen.",
|
||||
"Anonymous Usage Reporting": "Anonymer Nutzungsbericht",
|
||||
"Any devices configured on an introducer device will be added to this device as well.": "Alle GerÀte, die beim Verteiler eingetragen sind, werden auch bei diesem GerÀt eingetragen",
|
||||
"Automatic upgrade now offers the choice between stable releases and release candidates.": "Die automatische Aktualisierung bietet jetzt die Wahl zwischen stabilen Veröffentlichungen und Veröffentlichungskandidaten.",
|
||||
"Automatic upgrades": "Automatische Updates aktivieren",
|
||||
"Be careful!": "Vorsicht!",
|
||||
"Bugs": "Fehler",
|
||||
@@ -37,11 +40,13 @@
|
||||
"Copied from elsewhere": "Von anderer Quelle kopiert",
|
||||
"Copied from original": "Vom Original kopiert",
|
||||
"Copyright © 2014-2016 the following Contributors:": "Copyright © 2014-2016 der folgenden UnterstĂŒtzer:",
|
||||
"Copyright © 2014-2017 the following Contributors:": "Copyright © 2014-2017 der folgenden UnterstĂŒtzer:",
|
||||
"Danger!": "Achtung!",
|
||||
"Deleted": "Gelöscht",
|
||||
"Device": "GerÀt",
|
||||
"Device \"{%name%}\" ({%device%} at {%address%}) wants to connect. Add new device?": "GerĂ€t \"{{name}}\" ({{device}} {{address}}) möchte sich verbinden. GerĂ€t hinzufĂŒgen?",
|
||||
"Device ID": "GerÀte ID",
|
||||
"Device Identification": "GerÀte Identifikation",
|
||||
"Device ID": "GerÀtekennung",
|
||||
"Device Identification": "GerÀteidentifikation",
|
||||
"Device Name": "GerÀtename",
|
||||
"Devices": "GerÀte",
|
||||
"Disconnected": "Getrennt",
|
||||
@@ -52,6 +57,8 @@
|
||||
"Downloaded": "Heruntergeladen",
|
||||
"Downloading": "LĂ€dt herunter",
|
||||
"Edit": "Bearbeiten",
|
||||
"Edit Device": "GerÀt bearbeiten",
|
||||
"Edit Folder": "Ordner bearbeiten",
|
||||
"Editing": "Bearbeitet",
|
||||
"Enable NAT traversal": "NAT-Durchdringung aktivieren",
|
||||
"Enable Relaying": "Weiterleitung aktivieren",
|
||||
@@ -63,20 +70,24 @@
|
||||
"File Pull Order": "DateiĂŒbertragungsreihenfolge",
|
||||
"File Versioning": "Dateiversionierung",
|
||||
"File permission bits are ignored when looking for changes. Use on FAT file systems.": "Dateizugriffsrechte beim Suchen nach VerÀnderungen ignorieren. Bei FAT-Dateisystemen zu verwenden.",
|
||||
"Files are moved to .stversions folder when replaced or deleted by Syncthing.": "Wenn Syncthing Dateien ersetzt oder löscht, werden sie in das .stversions Verzeichnis verschoben.",
|
||||
"Files are moved to date stamped versions in a .stversions folder when replaced or deleted by Syncthing.": "Dateien werden, bevor Syncthing sie löscht oder ersetzt, datiert in das Verzeichnis .stversions verschoben.",
|
||||
"Files are moved to .stversions directory when replaced or deleted by Syncthing.": "Files are moved to .stversions directory when replaced or deleted by Syncthing.",
|
||||
"Files are moved to .stversions folder when replaced or deleted by Syncthing.": "Wenn Syncthing Dateien ersetzt oder löscht, werden sie in den Ordner .stversions verschoben.",
|
||||
"Files are moved to date stamped versions in a .stversions directory when replaced or deleted by Syncthing.": "Files are moved to date stamped versions in a .stversions directory when replaced or deleted by Syncthing.",
|
||||
"Files are moved to date stamped versions in a .stversions folder when replaced or deleted by Syncthing.": "Dateien werden, bevor Syncthing sie löscht oder ersetzt, datiert in den Ordner .stversions verschoben.",
|
||||
"Files are protected from changes made on other devices, but changes made on this device will be sent to the rest of the cluster.": "Dateien sind auf diesem GerĂ€t schreibgeschĂŒtzt. Auf diesem GerĂ€t durchgefĂŒhrte VerĂ€nderungen werden aber auf den Rest des Verbunds ĂŒbertragen.",
|
||||
"Folder": "Verzeichnis",
|
||||
"Folder ID": "Verzeichnis ID",
|
||||
"Folder Label": "Verzeichnisbezeichnung",
|
||||
"Folder Path": "Verzeichnispfad",
|
||||
"Folder Type": "Verzeichnistyp",
|
||||
"Folders": "Verzeichnisse",
|
||||
"Folder": "Ordner",
|
||||
"Folder ID": "Ordnerkennung",
|
||||
"Folder Label": "Ordnerbezeichnung",
|
||||
"Folder Path": "Ordnerpfad",
|
||||
"Folder Type": "Ordnertyp",
|
||||
"Folders": "Ordner",
|
||||
"GUI": "GUI",
|
||||
"GUI Authentication Password": "Passwort fĂŒr Zugang zur BenutzeroberflĂ€che",
|
||||
"GUI Authentication User": "Nutzername fĂŒr Zugang zur BenutzeroberflĂ€che",
|
||||
"GUI Listen Addresses": "Adresse(n) fĂŒr die BenutzeroberflĂ€che",
|
||||
"GUI Theme": "GUI Thema",
|
||||
"Generate": "Generieren",
|
||||
"Global Changes": "Globale Ănderungen",
|
||||
"Global Discovery": "Globale GerÀtesuche",
|
||||
"Global Discovery Servers": "Globale GerÀtesuchserver",
|
||||
"Global State": "Globaler Status",
|
||||
@@ -86,7 +97,8 @@
|
||||
"Ignore Patterns": "Ignoriermuster",
|
||||
"Ignore Permissions": "Berechtigungen ignorieren",
|
||||
"Incoming Rate Limit (KiB/s)": "Limit Datenrate (eingehend) (KB/s)",
|
||||
"Incorrect configuration may damage your folder contents and render Syncthing inoperable.": "Eine falsche Konfiguration kann den Verzeichnisinhalt beschĂ€digen und Syncthing in einen unausfĂŒhrbaren Zustand versetzen.",
|
||||
"Incorrect configuration may damage your folder contents and render Syncthing inoperable.": "Eine falsche Konfiguration kann den Ordnerinhalt beschĂ€digen und Syncthing in einen unausfĂŒhrbaren Zustand versetzen.",
|
||||
"Introduced By": "Verteilt von",
|
||||
"Introducer": "VerteilergerÀt",
|
||||
"Inversion of the given condition (i.e. do not exclude)": "Umkehrung der angegebenen Bedingung (z.B. schlieĂe nicht aus)",
|
||||
"Keep Versions": "Versionen erhalten",
|
||||
@@ -95,6 +107,8 @@
|
||||
"Last Scan": "Letzter Scan",
|
||||
"Last seen": "Zuletzt online",
|
||||
"Later": "SpÀter",
|
||||
"Latest Change": "Letzte Ănderung",
|
||||
"Learn more": "Mehr erfahren",
|
||||
"Listeners": "Zuhörer",
|
||||
"Local Discovery": "Lokale GerÀtesuche",
|
||||
"Local State": "Lokaler Status",
|
||||
@@ -105,27 +119,31 @@
|
||||
"Metadata Only": "Nur Metadaten",
|
||||
"Minimum Free Disk Space": "Minimal freier Festplattenspeicher",
|
||||
"Move to top of queue": "An den Anfang der Warteschlange setzen",
|
||||
"Multi level wildcard (matches multiple directory levels)": "Verschachteltes Maskenzeichen (wird fĂŒr verschachtelte Verzeichnisse verwendet)",
|
||||
"Multi level wildcard (matches multiple directory levels)": "Verschachteltes Maskenzeichen (wird fĂŒr verschachtelte Ordner verwendet)",
|
||||
"Never": "Nie",
|
||||
"New Device": "Neues GerÀt",
|
||||
"New Folder": "Neues Verzeichnis",
|
||||
"New Folder": "Neuer Ordner",
|
||||
"Newest First": "Neueste zuerst",
|
||||
"No": "Nein",
|
||||
"No File Versioning": "Keine Dateiversionierung",
|
||||
"No upgrades": "Keine Upgrades",
|
||||
"Normal": "Normal",
|
||||
"Notice": "Hinweis",
|
||||
"OK": "OK",
|
||||
"Off": "Aus",
|
||||
"Oldest First": "Ălteste zuerst",
|
||||
"Optional descriptive label for the folder. Can be different on each device.": "Optionale beschreibende Bezeichnung des Verzeichnisses. Kann auf jedem GerÀt unterschiedlich sein.",
|
||||
"Optional descriptive label for the folder. Can be different on each device.": "Optionale beschreibende Bezeichnung des Ordners. Kann auf jedem GerÀt unterschiedlich sein.",
|
||||
"Options": "Optionen",
|
||||
"Out of Sync": "Nicht synchronisiert",
|
||||
"Out of Sync Items": "Nicht synchronisierte Objekte",
|
||||
"Outgoing Rate Limit (KiB/s)": "Limit Datenrate (ausgehend) (KB/s)",
|
||||
"Override Changes": "Ănderungen ĂŒberschreiben",
|
||||
"Path to the folder on the local computer. Will be created if it does not exist. The tilde character (~) can be used as a shortcut for": "Pfad zum Verzeichnis auf dem lokalen GerĂ€t. Verzeichnis wird erzeugt, wenn es nicht existiert. Das Tilden-Zeichen (~) kann als AbkĂŒrzung benutzt werden fĂŒr",
|
||||
"Path where versions should be stored (leave empty for the default .stversions folder in the folder).": "Pfad in dem alte Dateiversionen gespeichert werden sollen (ohne Angabe wird das Verzeichnis .stversions im Verzeichnis verwendet).",
|
||||
"Path": "Pfad",
|
||||
"Path to the folder on the local computer. Will be created if it does not exist. The tilde character (~) can be used as a shortcut for": "Pfad zum Ordner auf dem lokalen GerĂ€t. Ordner wird erzeugt, wenn er nicht existiert. Das Tilden-Zeichen (~) kann als AbkĂŒrzung benutzt werden fĂŒr",
|
||||
"Path where versions should be stored (leave empty for the default .stversions directory in the shared folder).": "Path where versions should be stored (leave empty for the default .stversions directory in the shared folder).",
|
||||
"Path where versions should be stored (leave empty for the default .stversions folder in the folder).": "Pfad in dem alte Dateiversionen gespeichert werden sollen (ohne Angabe wird der Ordner .stversions im Ordner verwendet).",
|
||||
"Pause": "Pause",
|
||||
"Pause All": "Alles pausieren",
|
||||
"Paused": "Pausiert",
|
||||
"Please consult the release notes before performing a major upgrade.": "Bitte lesen Sie die Veröffentlichungsnotizen bevor Sie eine neue Hauptversion installieren.",
|
||||
"Please set a GUI Authentication User and Password in the Settings dialog.": "Bitte setze einen Benutzer und ein Passwort fĂŒr das GUI in den Einstellungen.",
|
||||
@@ -135,41 +153,48 @@
|
||||
"Quick guide to supported patterns": "Schnellanleitung zu den unterstĂŒtzten Mustern",
|
||||
"RAM Utilization": "RAM Auslastung",
|
||||
"Random": "Zufall",
|
||||
"Reduced by ignore patterns": "BeschrÀnkt durch Ignoriermuster",
|
||||
"Reduced by ignore patterns": "Durch Ignoriermuster reduziert",
|
||||
"Release Notes": "Veröffentlichungsnotizen",
|
||||
"Remote Devices": "Remote-GerÀte",
|
||||
"Release candidates contain the latest features and fixes. They are similar to the traditional bi-weekly Syncthing releases.": "Veröffentlichungskandidaten enthalten die neuesten Funktionen und Verbesserungen. Sie entsprechen den traditionellen zweiwöchentlichen Syncthing-Veröffentlichungen.",
|
||||
"Remote Devices": "Fern-GerÀte",
|
||||
"Remove": "Entfernen",
|
||||
"Required identifier for the folder. Must be the same on all cluster devices.": "Erforderliche ID fĂŒr das Verzeichnis. Muss auf allen Verbund-GerĂ€ten gleich sein.",
|
||||
"Required identifier for the folder. Must be the same on all cluster devices.": "Erforderlicher Bezeichner fĂŒr den Ordner. Muss auf allen Verbund-GerĂ€ten gleich sein.",
|
||||
"Rescan": "Neu scannen",
|
||||
"Rescan All": "Alle neu scannen",
|
||||
"Rescan Interval": "Scanintervall",
|
||||
"Restart": "Neustart",
|
||||
"Restart Needed": "Neustart benötigt",
|
||||
"Restarting": "Wird neu gestartet",
|
||||
"Resume": "Fortfahren",
|
||||
"Resume": "Fortsetzen",
|
||||
"Resume All": "Alles fortsetzen",
|
||||
"Reused": "Erneut benutzt",
|
||||
"Save": "Speichern",
|
||||
"Scan Time Remaining": "Zeit fĂŒr Scan verbleibend",
|
||||
"Scanning": "Scannen",
|
||||
"Select the devices to share this folder with.": "WÀhle die GerÀte aus, mit denen Du dieses Verzeichnis teilen willst.",
|
||||
"Select the folders to share with this device.": "WÀhle die Verzeichnisse aus, die du mit diesem GerÀt teilen möchtest",
|
||||
"Select the devices to share this folder with.": "WÀhle die GerÀte aus, mit denen Du diesen Ordner teilen willst.",
|
||||
"Select the folders to share with this device.": "WÀhle die Ordner aus, die Du mit diesem GerÀt teilen möchtest",
|
||||
"Send & Receive": "Senden & empfangen",
|
||||
"Send Only": "Nur senden",
|
||||
"Settings": "Einstellungen",
|
||||
"Share": "Teilen",
|
||||
"Share Folder": "Teile Verzeichnis",
|
||||
"Share Folders With Device": "Teile Verzeichnisse mit diesem GerÀt",
|
||||
"Share Folder": "Ordner teilen",
|
||||
"Share Folders With Device": "Ordner mit diesem GerÀt teilen",
|
||||
"Share With Devices": "Teile mit diesen GerÀten",
|
||||
"Share this folder?": "Dieses Verzeichnis teilen?",
|
||||
"Share this folder?": "Diesen Ordner teilen?",
|
||||
"Shared With": "Geteilt mit",
|
||||
"Show ID": "ID anzeigen",
|
||||
"Show ID": "Eigene Kennung",
|
||||
"Show QR": "Zeige QR Code",
|
||||
"Shown instead of Device ID in the cluster status. Will be advertised to other devices as an optional default name.": "Wird anstatt der GerÀte ID angezeigt. Wird als optionaler GerÀtename an die anderen Clients im Cluster weitergegeben.",
|
||||
"Shown instead of Device ID in the cluster status. Will be advertised to other devices as an optional default name.": "Wird anstatt der GerÀtekennung im Verbund-Status angezeigt. Wird als optionaler Standardname an andere GerÀte bekannt gegeben.",
|
||||
"Shown instead of Device ID in the cluster status. Will be updated to the name the device advertises if left empty.": "Wird auf diesem GerÀt als GerÀtename angezeigt und an die anderen GerÀte im GerÀte-Verbund weitergegeben. Wenn kein GerÀtename anegegeben wird, wird der Name des entfernten GerÀtes genommen.",
|
||||
"Shutdown": "Herunterfahren",
|
||||
"Shutdown Complete": "VollstÀndig Heruntergefahren",
|
||||
"Simple File Versioning": "Einfache Dateiversionierung",
|
||||
"Single level wildcard (matches within a directory only)": "Einzelnes Maskenzeichen (wird fĂŒr ein einzelnes Verzeichnis verwendet)",
|
||||
"Single level wildcard (matches within a directory only)": "Einzelnes Maskenzeichen (wird fĂŒr einen einzelnen Ordner verwendet)",
|
||||
"Smallest First": "Kleinstes zuerst",
|
||||
"Source Code": "Quellcode",
|
||||
"Stable releases and release candidates": "Stabile Veröffentlichungen und Veröffentlichungskandidaten",
|
||||
"Stable releases are delayed by about two weeks. During this time they go through testing as release candidates.": "Stabile Veröffentlichungen werden ca. 2 Wochen verzögert. WÀhrend dieser Zeit durchlaufen sie eine Testphase als Veröffentlichungskandidaten.",
|
||||
"Stable releases only": "AusschlieĂlich stabile Releases",
|
||||
"Staggered File Versioning": "Stufenweise Dateiversionierung",
|
||||
"Start Browser": "Browser starten",
|
||||
"Statistics": "Statistiken",
|
||||
@@ -186,14 +211,14 @@
|
||||
"The Syncthing admin interface is configured to allow remote access without a password.": "Die Syncthing-OberflÀche erlaubt mit den jetzigen Einstellungen einen Zugriff ohne Passwort.",
|
||||
"The aggregated statistics are publicly available at the URL below.": "Die gesammelten Statistiken sind öffentlich unter der nachfolgenden URL verfĂŒgbar.",
|
||||
"The configuration has been saved but not activated. Syncthing must restart to activate the new configuration.": "Die Konfiguration wurde gespeichert, aber noch nicht aktiviert. Syncthing muss neugestartet werden, um die neue Konfiguration zu ĂŒbernehmen.",
|
||||
"The device ID cannot be blank.": "Die GerÀte ID darf nicht leer sein.",
|
||||
"The device ID to enter here can be found in the \"Actions > Show ID\" dialog on the other device. Spaces and dashes are optional (ignored).": "Die hier einzutragende GerÀte ID kann im \"Aktionen > Zeige ID\"-Dialog auf dem anderen GerÀt gefunden werden. Leerzeichen und Bindestriche sind optional (werden ignoriert).",
|
||||
"The encrypted usage report is sent daily. It is used to track common platforms, folder sizes and app versions. If the reported data set is changed you will be prompted with this dialog again.": "Der verschlĂŒsselte Nutzungsbericht wird tĂ€glich gesendet. Er wird verwendet, um Statistiken ĂŒber verwendete Betriebssysteme, Verzeichnis-GröĂen und Programm-Versionen zu erstellen. Sollte der Bericht in Zukunft weitere Daten erfassen, wird dieses Fenster erneut angezeigt.",
|
||||
"The entered device ID does not look valid. It should be a 52 or 56 character string consisting of letters and numbers, with spaces and dashes being optional.": "Die eingegebene GerĂ€te ID scheint nicht gĂŒltig zu sein. Es sollte eine 52 oder 56 stellige Zeichenkette aus Buchstaben und Nummern sein. Leerzeichen und Bindestriche sind optional.",
|
||||
"The first command line parameter is the folder path and the second parameter is the relative path in the folder.": "Der erste Kommandozeilenparameter ist der Verzeichnis-Pfad und der zweite Parameter ist der relative Pfad in diesem Verzeichnis.",
|
||||
"The folder ID cannot be blank.": "Die Verzeichnis ID darf nicht leer sein.",
|
||||
"The folder ID must be unique.": "Die Verzeichnis ID darf nur einmal existieren.",
|
||||
"The folder path cannot be blank.": "Der Verzeichnispfad darf nicht leer sein.",
|
||||
"The device ID cannot be blank.": "Die GerÀtekennung darf nicht leer sein.",
|
||||
"The device ID to enter here can be found in the \"Actions > Show ID\" dialog on the other device. Spaces and dashes are optional (ignored).": "Die hier einzutragende GerÀtekennung kann im Dialog \"Aktionen > Kennung anzeigen\" auf dem anderen GerÀt gefunden werden. Leerzeichen und Bindestriche sind optional (werden ignoriert).",
|
||||
"The encrypted usage report is sent daily. It is used to track common platforms, folder sizes and app versions. If the reported data set is changed you will be prompted with this dialog again.": "Der verschlĂŒsselte Nutzungsbericht wird tĂ€glich gesendet. Er wird verwendet, um Statistiken ĂŒber verwendete Betriebssysteme, OrdnergröĂen und Programmversionen zu erstellen. Sollte der Bericht in Zukunft weitere Daten erfassen, wird dieses Fenster erneut angezeigt.",
|
||||
"The entered device ID does not look valid. It should be a 52 or 56 character string consisting of letters and numbers, with spaces and dashes being optional.": "Die eingegebene GerĂ€tekennung scheint nicht gĂŒltig zu sein. Es sollte eine 52 oder 56 stellige Zeichenkette aus Buchstaben und Nummern sein. Leerzeichen und Bindestriche sind optional.",
|
||||
"The first command line parameter is the folder path and the second parameter is the relative path in the folder.": "Der erste Kommandozeilenparameter ist der Ordnerpfad und der zweite Parameter ist der relative Pfad in diesem Ordner.",
|
||||
"The folder ID cannot be blank.": "Die Ordnerkennung darf nicht leer sein.",
|
||||
"The folder ID must be unique.": "Die Ordnerkennung muss eindeutig sein.",
|
||||
"The folder path cannot be blank.": "Der Ordnerpfad darf nicht leer sein.",
|
||||
"The following intervals are used: for the first hour a version is kept every 30 seconds, for the first day a version is kept every hour, for the first 30 days a version is kept every day, until the maximum age a version is kept every week.": "Es wird in folgenden AbstÀnden versioniert: In der ersten Stunde wird alle 30 Sekunden eine Version behalten, am ersten Tag eine jede Stunde, in den ersten 30 Tagen eine jeden Tag. Danach wird bis zum angegebenen Höchstalter eine Version pro Woche behalten.",
|
||||
"The following items could not be synchronized.": "Die folgenden Objekte konnten nicht synchronisiert werden.",
|
||||
"The maximum age must be a number and cannot be blank.": "Das Höchstalter muss angegeben werden und eine Zahl sein.",
|
||||
@@ -210,7 +235,9 @@
|
||||
"This Device": "Dieses GerÀt",
|
||||
"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 is a major version upgrade.": "Dies ist eine neue Hauptversion.",
|
||||
"Time": "Zeit",
|
||||
"Trash Can File Versioning": "Papierkorb Dateiversionierung",
|
||||
"Type": "Typ",
|
||||
"Unknown": "Unbekannt",
|
||||
"Unshared": "Ungeteilt",
|
||||
"Unused": "Ungenutzt",
|
||||
@@ -221,20 +248,26 @@
|
||||
"Upgrading": "Wird aktualisiert",
|
||||
"Upload Rate": "Upload",
|
||||
"Uptime": "Betriebszeit",
|
||||
"Usage reporting is always enabled for candidate releases.": "Nutzungsauswertung ist fĂŒr Veröffentlichungskandidaten immer aktiviert.",
|
||||
"Use HTTPS for GUI": "HTTPS fĂŒr BenutzeroberflĂ€che benutzen",
|
||||
"Version": "Version",
|
||||
"Versions Path": "Versionierungspfad",
|
||||
"Versions are automatically deleted if they are older than the maximum age or exceed the number of files allowed in an interval.": "Alte Dateiversionen werden automatisch gelöscht, wenn sie Àlter als das angegebene Höchstalter sind oder die angegebene Höchstzahl an Dateien erreicht ist.",
|
||||
"Warning, this path is a subdirectory of an existing folder \"{%otherFolder%}\".": "Warnung, dieser Pfad ist ein Unterverzeichnis des existierenden Verzeichnisses \"{{otherFolder}}\".",
|
||||
"Warning, this path is a parent directory of an existing folder \"{%otherFolder%}\".": "Warnung, dieser Pfad ist ein ĂŒbergeordnetes Verzeichnis eines existierenden Ordners \"{{otherFolder}}\".",
|
||||
"Warning, this path is a parent directory of an existing folder \"{%otherFolderLabel%}\" ({%otherFolder%}).": "Warnung, dieser Pfad ist ein ĂŒbergeordnetes Verzeichnis eines existierenden Ordners \"{{otherFolderLabel}}\" ({{otherFolder}}).",
|
||||
"Warning, this path is a subdirectory of an existing folder \"{%otherFolder%}\".": "Warnung, dieser Pfad ist ein Unterordner des existierenden Ordners \"{{otherFolder}}\".",
|
||||
"Warning, this path is a subdirectory of an existing folder \"{%otherFolderLabel%}\" ({%otherFolder%}).": "Warnung, dieser Pfad ist ein Unterverzeichnis eines existierenden Ordners \"{{otherFolderLabel}}\" ({{otherFolder}}).",
|
||||
"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 Verzeichnisses, dass die Verzeichnis ID dazu verwendet wird, Verzeichnisse zwischen GerĂ€ten zu verbinden. Die ID muss also auf allen GerĂ€ten gleich sein, die GroĂ- und Kleinschreibung muss dabei beachtet werden.",
|
||||
"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",
|
||||
"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 untenstehenden Link können Sie mehr ĂŒber die zwei VeröffentlichungskanĂ€le erfahren.",
|
||||
"You must keep at least one version.": "Du musst mindestens eine Version behalten.",
|
||||
"days": "Tage",
|
||||
"directories": "Verzeichnisse",
|
||||
"directories": "Ordner",
|
||||
"files": "Dateien",
|
||||
"full documentation": "Komplette Dokumentation",
|
||||
"items": "Objekte",
|
||||
"{%device%} wants to share folder \"{%folder%}\".": "{{device}} möchte das Verzeichnis \"{{folder}}\" teilen.",
|
||||
"{%device%} wants to share folder \"{%folderlabel%}\" ({%folder%}).": "{{device}} möchte das Verzeichnis \"{{folderlabel}}\" ({{folder}}) teilen."
|
||||
"{%device%} wants to share folder \"{%folder%}\".": "{{device}} möchte den Ordner \"{{folder}}\" teilen.",
|
||||
"{%device%} wants to share folder \"{%folderlabel%}\" ({%folder%}).": "{{device}} möchte den Ordner \"{{folderlabel}}\" ({{folder}}) teilen."
|
||||
}
|
||||
@@ -4,6 +4,7 @@
|
||||
"A new major version may not be compatible with previous versions.": "ÎÎčα ΜÎα ÏηΌαΜÏÎčÎșÎź ÎÎșÎŽÎżÏη ÎŒÏÎżÏΔί Μα ΌηΜ Î”ÎŻÎœÎ±Îč ÏÏ
ÎŒÎČαÏÎź ΌΔ ÏÎčÏ ÏÏοηγοÏÎŒÎ”ÎœÎ”Ï Î”ÎșÎŽÏÏΔÎčÏ.",
|
||||
"API Key": "ÎλΔÎčÎŽÎŻ API",
|
||||
"About": "ÎŁÏΔÏÎčÎșÎŹ ΌΔ ÏÎż Syncthing",
|
||||
"Action": "ÎΜÎÏγΔÎčα",
|
||||
"Actions": "ÎΜÎÏγΔÎčΔÏ",
|
||||
"Add": "Î ÏÎżÏΞΟÎșη",
|
||||
"Add Device": "Î ÏÎżÏΞΟÎșη ÏÏ
ÏÎșΔÏ
ÎźÏ",
|
||||
@@ -18,9 +19,11 @@
|
||||
"All Data": "Îλα Ïα ÎŽÎ”ÎŽÎżÎŒÎΜα",
|
||||
"Allow Anonymous Usage Reporting?": "Îα ΔÏÎčÏÏÎÏΔÏαÎč η αÏÎżÏÏολΟ αΜÏΜÏ
ÎŒÏΜ ÏÏÎżÎčÏΔίÏΜ ÏÏÎźÏηÏ;",
|
||||
"Alphabetic": "ÎλÏαÎČηÏÎčÎșÎŹ",
|
||||
"An external command handles the versioning. It has to remove the file from the shared folder.": "An external command handles the versioning. It has to remove the file from the shared folder.",
|
||||
"An external command handles the versioning. It has to remove the file from the synced folder.": "ÎÎčα ΔΟÏÏΔÏÎčÎșÎź ΔΜÏολΟ ÏΔÎčÏίζΔÏαÎč ÏηΜ ÎŽÎčαÏΔίÏÎčÏη ΔÎșÎŽÏÏΔÏΜ. ΧÏΔÎčΏζΔÏαÎč Μα αÏαÎčÏÎÏΔÎč ÏÎż αÏÏΔίο αÏÏ ÏÎż ÏÎŹÎșΔλο ÏÏ
ÎłÏÏÎżÎœÎčÏÎŒÎΜÏΜ.",
|
||||
"Anonymous Usage Reporting": "ÎΜÏΜÏ
Όα ÏÏÎżÎčÏΔία ÏÏÎźÏηÏ",
|
||||
"Any devices configured on an introducer device will be added to this device as well.": "ÎΜ ΎηλÏΞΔί ÏαΜ «ÎČαÏÎčÎșÏÏ ÎșÏÎŒÎČÎżÏ», ÏÏÏΔ ÏÎ»Î”Ï ÎżÎč ÏÏ
ÏÎșΔÏ
ÎÏ ÏÎżÏ
Î”ÎŻÎœÎ±Îč ΎηλÏÎŒÎÎœÎ”Ï Î”ÎșΔί Ξα Ï
ÏÎŹÏÏÎżÏ
Μ ÎșαÎč ÏÏÎżÎœ ÏÎżÏÎčÎșÏ ÎșÏÎŒÎČÎż.",
|
||||
"Automatic upgrade now offers the choice between stable releases and release candidates.": "ÎÎčα ÏÎčÏ Î±Ï
ÏÏΌαÏÎ”Ï Î±ÎœÎ±ÎČÎ±ÎžÎŒÎŻÏΔÎčÏ ÎŒÏÎżÏΔίÏΔ ÏλÎÎżÎœ Μα ΔÏÎčλÎΟΔÏΔ ΌΔÏÎ±ÎŸÏ ÏÏαΞΔÏÏΜ ΔÎșÎŽÏÏΔÏΜ ÎșαÎč Ï
ÏÎżÏÎźÏÎčÏΜ ΔÎșÎŽÏÏΔÏΜ.",
|
||||
"Automatic upgrades": "ÎÏ
ÏÏΌαÏη αΜαÎČÎŹÎžÎŒÎčÏη",
|
||||
"Be careful!": "ÎΔ ÏÏÎżÏÎżÏÎź!",
|
||||
"Bugs": "Bugs",
|
||||
@@ -37,8 +40,10 @@
|
||||
"Copied from elsewhere": "ÎÏΔÎč αΜÏÎčÎłÏαÏΔί αÏÏ ÎșÎŹÏÎżÏ
αλλοÏ",
|
||||
"Copied from original": "ÎÏΔÎč αΜÏÎčÎłÏαÏΔί αÏÏ ÏÎż ÏÏÏÏÏÏÏ
ÏÎż",
|
||||
"Copyright © 2014-2016 the following Contributors:": "Copyright © 2014-2016 ÎłÎčα ÏÎżÏ
Ï ÏαÏαÎșÎŹÏÏ ÏÏ
ΜΔÎčÏÏÎÏÎżÎœÏΔÏ:",
|
||||
"Copyright © 2014-2017 the following Contributors:": "Copyright © 2014-2017 ÎłÎčα ÏÎżÏ
Ï ÏαÏαÎșÎŹÏÏ ÏÏ
ΜΔÎčÏÏÎÏÎżÎœÏΔÏ:",
|
||||
"Danger!": "Î ÏÎżÏÎżÏÎź!",
|
||||
"Deleted": "ÎÎčαγÏαΌΌÎΜα",
|
||||
"Device": "ÎŁÏ
ÏÎșΔÏ
Îź",
|
||||
"Device \"{%name%}\" ({%device%} at {%address%}) wants to connect. Add new device?": "Î ÏÏ
ÏÎșΔÏ
Îź \"{{name}}\" ({{device}} ÏÏη ÎŽÎčΔÏΞÏ
ΜÏη {{address}}) ΔÏÎčΞÏ
ÎŒÎ”ÎŻ Μα ÏÏ
ÎœÎŽÎ”ÎžÎ”ÎŻ. Î ÏÎżÏΞΟÎșη ÏÎ·Ï ÎœÎÎ±Ï ÏÏ
ÏÎșΔÏ
ÎźÏ;",
|
||||
"Device ID": "΀αÏ
ÏÏÏηÏα ÏÏ
ÏÎșΔÏ
ÎźÏ",
|
||||
"Device Identification": "΀αÏ
ÏÏÏηÏα ÏÏ
ÏÎșΔÏ
ÎźÏ",
|
||||
@@ -52,6 +57,8 @@
|
||||
"Downloaded": "ÎÏΔÎč ληÏΞΔί",
|
||||
"Downloading": "ÎÎźÏη",
|
||||
"Edit": "ÎÏΔΟΔÏγαÏία",
|
||||
"Edit Device": "ÎÏΔΟΔÏγαÏία ÏÏ
ÏÎșΔÏ
ÎźÏ",
|
||||
"Edit Folder": "ÎÏΔΟΔÏγαÏία ÏαÎșÎλοÏ
",
|
||||
"Editing": "ÎÏΔΟΔÏγαÏία ÏΔ ΔΟÎλÎčΟη",
|
||||
"Enable NAT traversal": "ÎΜΔÏγοÏοίηÏη ÎŽÎčÎŹÏÏÎčÏÎ·Ï NAT",
|
||||
"Enable Relaying": "ÎΜΔÏγοÏοίηÏη αΜαΌΔÏÎŹÎŽÎżÏηÏ",
|
||||
@@ -63,7 +70,9 @@
|
||||
"File Pull Order": "ΣΔÎčÏÎŹ ΌΔ ÏηΜ ÎżÏοία Ξα ÎșαÏΔÎČÎ±ÎŻÎœÎżÏ
Μ Ïα αÏÏΔία",
|
||||
"File Versioning": "΀ΟÏηÏη ΔÎșÎŽÏÏΔÏΜ",
|
||||
"File permission bits are ignored when looking for changes. Use on FAT file systems.": "΀α ÎŽÎčÎșαÎčÏΌαÏα ÏÏΜ αÏÏΔίÏΜ Ξα Î±ÎłÎœÎżÎżÏΜÏαÎč ÏÏαΜ ÎșÎżÎčÏÎŹÎ¶Ï ÎłÎčα αλλαγÎÏ. ÎÏÎżÏÎŹ ÏÏ
ÏÏÎźÎŒÎ±Ïα αÏÏΔίÏΜ FAT.",
|
||||
"Files are moved to .stversions directory when replaced or deleted by Syncthing.": "Files are moved to .stversions directory when replaced or deleted by Syncthing.",
|
||||
"Files are moved to .stversions folder 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.": "Files are moved to date stamped versions in a .stversions directory when replaced or deleted by Syncthing.",
|
||||
"Files are moved to date stamped versions in a .stversions folder 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.": "΀α αÏÏΔία ÏÏÎżÏÏαÏΔÏÎżÎœÏαÎč αÏÏ Î±Î»Î»Î±ÎłÎÏ ÏÎżÏ
ÎłÎŻÎœÎżÎœÏαÎč ÏΔ ÎŹÎ»Î»Î”Ï ÏÏ
ÏÎșΔÏ
ÎÏ, αλλΏ ÏÏÎżÎčÎ”Ï Î±Î»Î»Î±ÎłÎÏ ÎłÎŻÎœÎżÏ
Μ ÏΔ αÏ
ÏÎź Ïη ÏÏ
ÏÎșΔÏ
Îź Ξα αÏÎżÏÏαλοÏΜ ÏΔ Ïλη Ïη ÏÏ
ÏÏΏΎα ÏÏ
ÏÎșΔÏ
ÏΜ.",
|
||||
"Folder": "ΊΏÎșΔλοÏ",
|
||||
@@ -76,7 +85,9 @@
|
||||
"GUI Authentication Password": "ÎÏÎŽÎčÎșÏÏ ÎłÎčα ÏηΜ ÏÏÏÏÎČαÏη ÏÏη ÎŽÎčΔÏαÏÎź",
|
||||
"GUI Authentication User": "ΧÏηÏÏÏΜÏ
ÎŒÎż ÎłÎčα ÏηΜ ÏÏÏÏÎČαÏη ÏÏη ÎŽÎčΔÏαÏÎź",
|
||||
"GUI Listen Addresses": "ÎÎčΔÏ
ΞÏΜÏΔÎčÏ Î±ÏÏ ÏÎčÏ ÎżÏÎżÎŻÎ”Ï ÎžÎ± Î”ÎŻÎœÎ±Îč ÏÏÎżÏÎČÎŹÏÎčΌη η ÎŽÎčΔÏαÏÎź",
|
||||
"GUI Theme": "ÎÎΌα GUI",
|
||||
"Generate": "ÎηΌÎčÎżÏ
Ïγία",
|
||||
"Global Changes": "ÎŁÏ
ÎœÎżÎ»ÎčÎșÎÏ Î±Î»Î»Î±ÎłÎÏ",
|
||||
"Global Discovery": "ÎαΞολÎčÎșÎź αΜΔÏÏΔÏη",
|
||||
"Global Discovery Servers": "ÎÎčαÎșÎżÎŒÎčÏÏÎÏ ÎșαΞολÎčÎșÎźÏ Î±ÎœÎ”ÏÏΔÏÎ·Ï ÎșÏÎŒÎČÏΜ",
|
||||
"Global State": "ÎαΞολÎčÎșÎź ÎșαÏÎŹÏÏαÏη",
|
||||
@@ -86,7 +97,8 @@
|
||||
"Ignore Patterns": "Î ÏÏÏÏ
ÏÎż ÎłÎčα Î±ÎłÎœÏηÏη",
|
||||
"Ignore Permissions": "ÎÎłÎœÏηÏΔ Ïα ÎŽÎčÎșαÎčÏΌαÏα",
|
||||
"Incoming Rate Limit (KiB/s)": "ΠΔÏÎčÎżÏÎčÏÎŒÏÏ ÏαÏÏÏηÏÎ±Ï Î»ÎźÏÎ·Ï (KiB/s)",
|
||||
"Incorrect configuration may damage your folder contents and render Syncthing inoperable.": "ÎΔ ÎŒÎčα ΔÏÏαλΌÎΜη ÏÏΞΌÎčÏη ÎŒÏÎżÏΔί Μα ÏÏÎżÎșληΞΔί ζηΌÎčÎŹ ÏÏα ÏΔÏÎčΔÏÏΌΔΜα ÏÏΜ ÏαÎșÎλÏΜ ÎșαÎč ÏÎż Syncthing ΔΜΎÎÏΔÏαÎč Μα ÏÏαΌαÏÎźÏΔÎč Μα λΔÎčÏÎżÏ
ÏγΔί.",
|
||||
"Incorrect configuration may damage your folder contents and render Syncthing inoperable.": "ÎΔ ÎŒÎčα ΔÏÏαλΌÎΜη ÏÏΞΌÎčÏη ÎŒÏÎżÏΔί Μα ÏÏÎżÎșληΞΔί ζηΌÎčÎŹ ÏÏα ÏΔÏÎčΔÏÏΌΔΜα ÏÏΜ ÏαÎșÎλÏΜ ÎșαÎč ÏÎż Syncthing Μα ÏÏαΌαÏÎźÏΔÎč Μα λΔÎčÏÎżÏ
ÏγΔί.",
|
||||
"Introduced By": "Î ÏÎżÏΏΞηÎșΔ αÏÏ",
|
||||
"Introducer": "ÎαÏÎčÎșÏÏ ÎșÏÎŒÎČÎżÏ",
|
||||
"Inversion of the given condition (i.e. do not exclude)": "ÎΜÏÎčÏÏÏÎżÏÎź ÏÎ·Ï ÎŽÎżÏÎŒÎÎœÎ·Ï ÏÏ
ÎœÎžÎźÎșÎ·Ï (Ï.Ï. Μα ΌηΜ ΔΟαÎčÏΔίÏ) ",
|
||||
"Keep Versions": "ÎÎčαÏÎźÏηÏη ΔÎșÎŽÏÏΔÏΜ",
|
||||
@@ -95,6 +107,8 @@
|
||||
"Last Scan": "΀ΔλΔÏ
Ïαία ÎŁÎŹÏÏÏη",
|
||||
"Last seen": "΀ΔλΔÏ
Ïαία ÏÎżÏÎŹ ÏÏ
ΜΎΔΎΔΌÎÎœÎżÏ",
|
||||
"Later": "ÎÏÎłÏÏΔÏα",
|
||||
"Latest Change": "΀ΔλΔÏ
Ïαία αλλαγΟ",
|
||||
"Learn more": "ÎΏΞΔÏΔ ÏΔÏÎčÏÏÏÏΔÏα",
|
||||
"Listeners": "ÎÎșÏοαÏÎÏ",
|
||||
"Local Discovery": "΀οÏÎčÎșÎź αΜΔÏÏΔÏη",
|
||||
"Local State": "΀οÏÎčÎșÎź ÎșαÏÎŹÏÏαÏη",
|
||||
@@ -112,6 +126,7 @@
|
||||
"Newest First": "΀ο ΜΔÏÏΔÏÎż ÏÏÏÏα",
|
||||
"No": "ÎÏÎč",
|
||||
"No File Versioning": "Îα ΌηΜ ÏηÏÎżÏΜÏαÎč ΔÎșÎŽÏÏΔÎčÏ",
|
||||
"No upgrades": "ÎÏΔΜΔÏγοÏÎżÎčηΌÎΜΔÏ",
|
||||
"Normal": "ÎÎ±ÎœÎżÎœÎčÎșÏÏ",
|
||||
"Notice": "ÎŁÎ·ÎŒÎ”ÎŻÏÏη",
|
||||
"OK": "OK",
|
||||
@@ -123,9 +138,12 @@
|
||||
"Out of Sync Items": "Îη ÏÏ
ÎłÏÏÎżÎœÎčÏÎŒÎΜα αΜÏÎčÎșÎ”ÎŻÎŒÎ”ÎœÎ±",
|
||||
"Outgoing Rate Limit (KiB/s)": "ΠΔÏÎčÎżÏÎčÏÎŒÏÏ ÏαÏÏÏηÏÎ±Ï Î±ÏÎżÏÏÎżÎ»ÎźÏ (KiB/s)",
|
||||
"Override Changes": "Îα αΜÏÎčÎșαÏαÏÏαΞοÏΜ ÎżÎč αλλαγÎÏ",
|
||||
"Path": "ÎÎżÎœÎżÏÎŹÏÎč",
|
||||
"Path to the folder on the local computer. Will be created if it does not exist. The tilde character (~) can be used as a shortcut for": "ÎÎżÎœÎżÏÎŹÏÎč ÏÎżÏ
ÏαÎșÎλοÏ
ÏΔ αÏ
ÏÏΜ ÏÎżÎœ Ï
ÏολογÎčÏÏÎź. ÎΜ ΎΔΜ Ï
ÏÎŹÏÏΔÎč Ξα ΎηΌÎčÎżÏ
ÏγηΞΔί. Î ÏΔÏÎčÏÏÏÎŒÎΜη (~) ÎŒÏÎżÏΔί Μα ÎŒÏΔÎč ÏαΜ ÏÏ
ΜÏÏΌΔÏ
Ïη ÎłÎčα ÏÎż",
|
||||
"Path where versions should be stored (leave empty for the default .stversions directory in the shared folder).": "Path where versions should be stored (leave empty for the default .stversions directory in the shared folder).",
|
||||
"Path where versions should be stored (leave empty for the default .stversions folder in the folder).": "Î ÏÎŹÎșÎ”Î»ÎżÏ ÏÏÎżÎœ ÎżÏοίο Ξα αÏοΞηÎșΔÏÎżÎœÏαÎč ÎżÎč ΔÎșÎŽÏÏΔÎčÏ ÏÏΜ αÏÏΔίÏΜ (αΜ ΎΔΜ ÎżÏÎčÏÏΔί Ξα αÏοΞηÎșΔÏÎżÎœÏαÎč ÏÏÎżÎœ Ï
ÏÎżÏÎŹÎșΔλο .stversions)",
|
||||
"Pause": "ΠαÏÏη",
|
||||
"Pause All": "ΠαÏÏη ÏλÏΜ",
|
||||
"Paused": "ΣΔ ÏαÏÏη",
|
||||
"Please consult the release notes before performing a major upgrade.": "ΠαÏαÎșαλοÏΌΔ, ÏÏÎčΜ αÏÏ ÏηΜ ΔÎșÏÎλΔÏη ÎŒÎčÎ±Ï ÏηΌαΜÏÎčÎșÎźÏ Î±ÎœÎ±ÎČÎŹÎžÎŒÎčÏηÏ, Μα ÏÏ
ÎŒÎČÎżÏ
λΔÏ
ÏÎ”ÎŻÏ ÏÎż ÏÎ·ÎŒÎ”ÎŻÏΌα ÏÎżÏ
Ïη ÏÏ
ÎœÎżÎŽÎ”ÏΔÎč. ",
|
||||
"Please set a GUI Authentication User and Password in the Settings dialog.": "ΠαÏαÎșÎ±Î»Ï ÏÏÎčÏΔ ÏÏÎčÏ ÏÏ
ÎžÎŒÎŻÏΔÎčÏ ÎΜαΜ ÏÏÎźÏÏη ÎșαÎč ÎΜαΜ ÎșÏÎŽÎčÎșÏ ÏÏÏÏÎČαÏÎ·Ï ÎłÎčα Ïη ÎŽÎčΔÏαÏÎź.",
|
||||
@@ -137,6 +155,7 @@
|
||||
"Random": "΀Ï
Ïαία",
|
||||
"Reduced by ignore patterns": "ΠΔÏÎčÎżÏÎčÏÎŒÎΜα λÏÎłÏ ÏÏÎżÏÏÏÏΜ Î±ÎłÎœÏηÏηÏ",
|
||||
"Release Notes": "ÎŁÎ·ÎŒÎ”ÎŻÏΌα ÎÎșÎŽÎżÏηÏ",
|
||||
"Release candidates contain the latest features and fixes. They are similar to the traditional bi-weekly Syncthing releases.": "ÎÎč Ï
ÏÎżÏÎźÏÎčÎ”Ï Î”ÎșÎŽÏÏΔÎčÏ ÏΔÏÎčÎÏÎżÏ
Μ ÏÎčÏ ÎœÎ”ÏÏΔÏÎ”Ï Î»Î”ÎčÏÎżÏ
ÏÎłÎŻÎ”Ï ÎșαÎč ΔÏÎčÎŽÎčÎżÏΞÏÏΔÎčÏ ÏÏÎ±Î»ÎŒÎŹÏÏΜ, ÏÏÏÏ ÎșαÎč ÎżÎč ÏαÏαΎοÏÎčαÎșÎÏ ÎŽÎčÏΔÎČÎŽÎżÎŒÎ±ÎŽÎčÎ±ÎŻÎ”Ï Î”ÎșÎŽÏÏΔÎčÏ ÏÎżÏ
Syncthing.",
|
||||
"Remote Devices": "ÎÏÎżÎŒÎ±ÎșÏÏ
ÏÎŒÎÎœÎ”Ï ÏÏ
ÏÎșΔÏ
ÎÏ",
|
||||
"Remove": "ÎÏαίÏΔÏη",
|
||||
"Required identifier for the folder. Must be the same on all cluster devices.": "ÎÏαÏαίÏηÏÎż Î±ÎœÎ±ÎłÎœÏÏÎčÏÏÎčÎșÏ ÎłÎčα ÏÎżÎœ ÏÎŹÎșΔλο. Î ÏÎÏΔÎč Μα Î”ÎŻÎœÎ±Îč ÏÎż ÎŻÎŽÎčÎż ÏΔ ÏÎ»Î”Ï ÏÎčÏ ÏÏ
ÏÎșΔÏ
ÎÏ ÎŒÎ” ÏÎčÏ ÎżÏÎżÎŻÎ”Ï ÎŽÎčÎ±ÎŒÎżÎčÏΏζΔÏαÎč Îż ÏÎŹÎșÎ”Î»ÎżÏ Î±Ï
ÏÏÏ.",
|
||||
@@ -147,12 +166,15 @@
|
||||
"Restart Needed": "ÎÏαÎčÏΔίÏαÎč ΔÏαΜΔÎșÎșÎŻÎœÎ·Ïη",
|
||||
"Restarting": "ÎÏαΜΔÎșÎșÎŻÎœÎ·Ïη",
|
||||
"Resume": "ÎŁÏ
ΜÎÏΔÎčα",
|
||||
"Resume All": "ÎŁÏ
ΜÎÏÎčÏη ÏλÏΜ",
|
||||
"Reused": "ΧÏηÏÎčÎŒÎżÏÎżÎčΟΞηÎșΔ ÎŸÎ±ÎœÎŹ",
|
||||
"Save": "ÎÏοΞΟÎșΔÏ
Ïη",
|
||||
"Scan Time Remaining": "ÎΜαÏÎżÎŒÎ”ÎŻÎœÎ±ÎœÏÎ±Ï ÏÏÏÎœÎżÏ ÎłÎčα ÏÎżÎœ ÎλΔγÏÎż ",
|
||||
"Scanning": "ÎλΔγÏÎżÏ ÎłÎčα αλλαγÎÏ",
|
||||
"Select the devices to share this folder with.": "ÎÎčÎŹÎ»Î”ÎŸÎ” ÏÎčÏ ÏÏ
ÏÎșΔÏ
ÎÏ ÏÏÎżÏ ÏÎčÏ ÎżÏÎżÎŻÎ”Ï ÎžÎ± ÎŽÎčÎ±ÎŒÎżÎčÏΏζΔÏαÎč αÏ
ÏÏÏ Îż ÏÎŹÎșΔλοÏ.",
|
||||
"Select the folders to share with this device.": "ÎÎčÎŹÎ»Î”ÎŸÎ” ÏÎżÎčÎżÎč ÏÎŹÎșΔλοÎč Ξα ÎŽÎčÎ±ÎŒÎżÎčÏÎŹÎ¶ÎżÎœÏαÎč ÏÏÎżÏ Î±Ï
ÏÎź Ïη ÏÏ
ÏÎșΔÏ
Îź.",
|
||||
"Send & Receive": "ÎÏÎżÏÏολΟ ÎșαÎč λΟÏη",
|
||||
"Send Only": "ÎÏÎœÎż αÏÎżÏÏολΟ",
|
||||
"Settings": "ÎĄÏ
ÎžÎŒÎŻÏΔÎčÏ",
|
||||
"Share": "ÎÎčÎ±ÎŒÎżÎŻÏαÏη",
|
||||
"Share Folder": "ÎÎčÎ±ÎŒÎżÎŻÏαÏη ÏαÎșÎλοÏ
",
|
||||
@@ -170,6 +192,9 @@
|
||||
"Single level wildcard (matches within a directory only)": "΀ΔλΔÏÏÎźÏ ÎŒÏαλαΜÏÎÏ (*) ÎłÎčα ÎΜα ΔÏÎŻÏΔΎο (ÏÏηÏÎčÎŒÎżÏÎżÎčΔίÏαÎč ÎłÎčα ÎΜαΜ ÏÎŹÎșΔλο ÎŒÏÎœÎż)",
|
||||
"Smallest First": "΀ο ÎŒÎčÎșÏÏÏΔÏÎż ÏÏÏÏα",
|
||||
"Source Code": "Î Î·ÎłÎ±ÎŻÎżÏ ÎșÏÎŽÎčÎșαÏ",
|
||||
"Stable releases and release candidates": "ÎŁÏαΞΔÏÎÏ Î”ÎșÎŽÏÏΔÎčÏ ÎșαÎč Ï
ÏÎżÏÎźÏÎčÎ”Ï Î”ÎșÎŽÏÏΔÎčÏ.",
|
||||
"Stable releases are delayed by about two weeks. During this time they go through testing as release candidates.": "ÎÎč ÏÏαΞΔÏÎÏ Î”ÎșÎŽÏÏΔÎčÏ ÎČÎłÎ±ÎŻÎœÎżÏ
Μ ΌΔ ÎșαΞÏ
ÏÏÎÏηÏη ÏΔÏÎŻÏÎżÏ
ÎŽÏÎż ΔÎČÎŽÎżÎŒÎŹÎŽÏΜ. ΣΔ αÏ
ÏÏ ÏÎż ÎŽÎčÎŹÏÏηΌα ÎŽÎżÎșÎčÎŒÎŹÎ¶ÎżÎœÏαÎč ÏÏ Ï
ÏÎżÏÎźÏÎčÎ”Ï Î”ÎșÎŽÏÏΔÎčÏ.",
|
||||
"Stable releases only": "ÎÏÎœÎż ÏÏαΞΔÏÎÏ Î”ÎșÎŽÏÏΔÎčÏ",
|
||||
"Staggered File Versioning": "Îα ÏηÏÎżÏΜÏαÎč ÎșλÎčΌαÎșÎżÏÎŒÎ”ÎœÎ”Ï Î”ÎșÎŽÏÏΔÎčÏ",
|
||||
"Start Browser": "ÎÎșÎșÎŻÎœÎ·Ïη ÏÏογÏÎŹÎŒÎŒÎ±ÏÎżÏ ÏΔÏÎčΟγηÏηÏ",
|
||||
"Statistics": "ÎŁÏαÏÎčÏÏÎčÎșÎŹ",
|
||||
@@ -210,7 +235,9 @@
|
||||
"This Device": "ÎÏ
ÏÎź η ÏÏ
ÏÎșΔÏ
Îź",
|
||||
"This can easily give hackers access to read and change any files on your computer.": "ÎÏ
ÏÏ ÎŒÏÎżÏΔί ΔÏÎșολα Μα ÎŽÏÏΔÎč ÏÏÏÏÎČαÏη Î±ÎœÎŹÎłÎœÏÏÎ·Ï ÎșαÎč ΔÏΔΟΔÏγαÏÎŻÎ±Ï Î±ÏÏΔίÏΜ ÏÎżÏ
Ï
ÏολογÎčÏÏÎź ÏÎ±Ï ÏΔ ÏÎŹÎșΔÏÏ.",
|
||||
"This is a major version upgrade.": "ÎÏ
ÏÎź Î”ÎŻÎœÎ±Îč ÎŒÎčα ÏηΌαΜÏÎčÎșÎź αΜαÎČÎŹÎžÎŒÎčÏη.",
|
||||
"Time": "ΧÏÏÎœÎżÏ",
|
||||
"Trash Can File Versioning": "΀ΟÏηÏη ΔÎșÎŽÏÏΔÏΜ ÎșÎŹÎŽÎżÏ
αΜαÎșÏÎșλÏÏηÏ",
|
||||
"Type": "΀ÏÏÎżÏ",
|
||||
"Unknown": "ÎÎłÎœÏÏÏÎż",
|
||||
"Unshared": "ÎΔ ÎŒÎżÎčÏΏζΔÏαÎč",
|
||||
"Unused": "ÎΔ ÏÏηÏÎčÎŒÎżÏÎżÎčΔίÏαÎč",
|
||||
@@ -221,14 +248,20 @@
|
||||
"Upgrading": "ÎΜαÎČÎŹÎžÎŒÎčÏη",
|
||||
"Upload Rate": "΀αÏÏÏηÏα αΜΔÎČÎŹÏΌαÏÎżÏ",
|
||||
"Uptime": "ΧÏÏÎœÎżÏ Î±ÏÏÏÏÎșÎżÏÏÎ·Ï Î»Î”ÎčÏÎżÏ
ÏγίαÏ",
|
||||
"Usage reporting is always enabled for candidate releases.": "ΠαÏÎżÏÏολΟ αΜαÏÎżÏÏΜ ÏÏÎźÏÎ·Ï Î”ÎŻÎœÎ±Îč ÏÎŹÎœÏα ΔΜΔÏγοÏÎżÎčηΌÎΜη ÏÏÎčÏ Ï
ÏÎżÏÎźÏÎčÎ”Ï Î”ÎșÎŽÏÏΔÎčÏ.",
|
||||
"Use HTTPS for GUI": "ΧÏÎźÏη HTTPS ÎłÎčα Ïη ÎŽÎčΔÏαÏÎź",
|
||||
"Version": "ÎÎșÎŽÎżÏη",
|
||||
"Versions Path": "ΊΏÎșÎ”Î»ÎżÏ ÏÎźÏηÏÎ·Ï Î”ÎșÎŽÏÏΔÏΜ",
|
||||
"Versions are automatically deleted if they are older than the maximum age or exceed the number of files allowed in an interval.": "ÎÎč ÏαλÎčÎÏ Î”ÎșÎŽÏÏΔÎčÏ ÎžÎ± ÏÎČÎźÎœÎżÎœÏαÎč αÏ
ÏÏΌαÏα ÏÏαΜ ΟΔÏΔÏÎŹÏÎżÏ
Μ Ïη ÎŒÎÎłÎčÏÏη ηλÎčÎșία Îź ÏÏαΜ ΟΔÏΔÏαÏÏΔί Îż ÎŒÎÎłÎčÏÏÎżÏ Î±ÏÎčΞΌÏÏ Î±ÏÏΔίÏΜ Î±ÎœÎŹ ÏΔÏίοΎο.",
|
||||
"Warning, this path is a parent directory of an existing folder \"{%otherFolder%}\".": "Î ÏÎżÏÎżÏÎź, αÏ
ÏÏ ÏÎż ÎŒÎżÎœÎżÏÎŹÏÎč Î”ÎŻÎœÎ±Îč ÎłÎżÎœÎčÎșÏÏ ÏÎŹÎșÎ”Î»ÎżÏ Î”ÎœÏÏ Ï
ÏÎŹÏÏÎżÎœÏÎżÏ ÏαÎșÎλοÏ
\"{{otherFolder}}\".",
|
||||
"Warning, this path is a parent directory of an existing folder \"{%otherFolderLabel%}\" ({%otherFolder%}).": "Î ÏÎżÏÎżÏÎź, αÏ
ÏÏ ÏÎż ÎŒÎżÎœÎżÏÎŹÏÎč Î”ÎŻÎœÎ±Îč ÎłÎżÎœÎčÎșÏÏ ÏÎŹÎșÎ”Î»ÎżÏ Î”ÎœÏÏ Ï
ÏÎŹÏÏÎżÎœÏÎżÏ ÏαÎșÎλοÏ
\"{{otherFolderLabel}}\" ({{otherFolder}}).",
|
||||
"Warning, this path is a subdirectory of an existing folder \"{%otherFolder%}\".": "Î ÏÎżÏÎżÏÎź, αÏ
ÏÏ ÏÎż ÎŒÎżÎœÎżÏÎŹÏÎč Î”ÎŻÎœÎ±Îč Ï
ÏÎżÏÎŹÎșÎ”Î»ÎżÏ ÏÎżÏ
Ï
ÏÎŹÏÏÎżÎœÏÎżÏ ÏαÎșÎλοÏ
\"{{otherFolder}}\".",
|
||||
"Warning, this path is a subdirectory of an existing folder \"{%otherFolderLabel%}\" ({%otherFolder%}).": "Î ÏÎżÏÎżÏÎź, αÏ
ÏÏ ÏÎż ÎŒÎżÎœÎżÏÎŹÏÎč Î”ÎŻÎœÎ±Îč Ï
ÏÎżÏÎŹÎșÎ”Î»ÎżÏ Î”ÎœÏÏ Ï
ÏÎŹÏÏÎżÎœÏÎżÏ ÏαÎșÎλοÏ
\"{{otherFolderLabel}}\" ({{otherFolder}}).",
|
||||
"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": "ÎαÎč",
|
||||
"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 must keep at least one version.": "Î ÏÎÏΔÎč Μα ÏηÏÎźÏΔÎčÏ ÏÎżÏ
λΏÏÎčÏÏÎżÎœ ÎŒÎčα ÎÎșÎŽÎżÏη.",
|
||||
"days": "ÎÎÏΔÏ",
|
||||
"directories": "ÎșαÏΏλογοÎč",
|
||||
|
||||
@@ -4,6 +4,7 @@
|
||||
"A new major version may not be compatible with previous versions.": "A new major version may not be compatible with previous versions.",
|
||||
"API Key": "API Key",
|
||||
"About": "About",
|
||||
"Action": "Action",
|
||||
"Actions": "Actions",
|
||||
"Add": "Add",
|
||||
"Add Device": "Add Device",
|
||||
@@ -18,9 +19,11 @@
|
||||
"All Data": "All Data",
|
||||
"Allow Anonymous Usage Reporting?": "Allow Anonymous Usage Reporting?",
|
||||
"Alphabetic": "Alphabetic",
|
||||
"An external command handles the versioning. It has to remove the file from the shared folder.": "An external command handles the versioning. It has to remove the file from the shared folder.",
|
||||
"An external command handles the versioning. It has to remove the file from the synced folder.": "An external command handles the versioning. It has to remove the file from the synced folder.",
|
||||
"Anonymous Usage Reporting": "Anonymous Usage Reporting",
|
||||
"Any devices configured on an introducer device will be added to this device as well.": "Any devices configured on an introducer device will be added to this device as well.",
|
||||
"Automatic upgrade now offers the choice between stable releases and release candidates.": "Automatic upgrade now offers the choice between stable releases and release candidates.",
|
||||
"Automatic upgrades": "Automatic upgrades",
|
||||
"Be careful!": "Be careful!",
|
||||
"Bugs": "Bugs",
|
||||
@@ -37,8 +40,10 @@
|
||||
"Copied from elsewhere": "Copied from elsewhere",
|
||||
"Copied from original": "Copied from original",
|
||||
"Copyright © 2014-2016 the following Contributors:": "Copyright © 2014-2016 the following Contributors:",
|
||||
"Copyright © 2014-2017 the following Contributors:": "Copyright © 2014-2017 the following Contributors:",
|
||||
"Danger!": "Danger!",
|
||||
"Deleted": "Deleted",
|
||||
"Device": "Device",
|
||||
"Device \"{%name%}\" ({%device%} at {%address%}) wants to connect. Add new device?": "Device \"{{name}}\" ({{device}} at {{address}}) wants to connect. Add new device?",
|
||||
"Device ID": "Device ID",
|
||||
"Device Identification": "Device Identification",
|
||||
@@ -52,6 +57,8 @@
|
||||
"Downloaded": "Downloaded",
|
||||
"Downloading": "Downloading",
|
||||
"Edit": "Edit",
|
||||
"Edit Device": "Edit Device",
|
||||
"Edit Folder": "Edit Folder",
|
||||
"Editing": "Editing",
|
||||
"Enable NAT traversal": "Enable NAT traversal",
|
||||
"Enable Relaying": "Enable Relaying",
|
||||
@@ -63,7 +70,9 @@
|
||||
"File Pull Order": "File Pull Order",
|
||||
"File Versioning": "File Versioning",
|
||||
"File permission bits are ignored when looking for changes. Use on FAT file systems.": "File permission bits are ignored when looking for changes. Use on FAT file systems.",
|
||||
"Files are moved to .stversions directory when replaced or deleted by Syncthing.": "Files are moved to .stversions directory when replaced or deleted by Syncthing.",
|
||||
"Files are moved to .stversions folder when replaced or deleted by Syncthing.": "Files are moved to .stversions folder when replaced or deleted by Syncthing.",
|
||||
"Files are moved to date stamped versions in a .stversions directory when replaced or deleted by Syncthing.": "Files are moved to date stamped versions in a .stversions directory when replaced or deleted by Syncthing.",
|
||||
"Files are moved to date stamped versions in a .stversions folder when replaced or deleted by Syncthing.": "Files are moved to date stamped versions in a .stversions folder when replaced or deleted by Syncthing.",
|
||||
"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 protected from changes made on other devices, but changes made on this device will be sent to the rest of the cluster.",
|
||||
"Folder": "Folder",
|
||||
@@ -76,7 +85,9 @@
|
||||
"GUI Authentication Password": "GUI Authentication Password",
|
||||
"GUI Authentication User": "GUI Authentication User",
|
||||
"GUI Listen Addresses": "GUI Listen Addresses",
|
||||
"GUI Theme": "GUI Theme",
|
||||
"Generate": "Generate",
|
||||
"Global Changes": "Global Changes",
|
||||
"Global Discovery": "Global Discovery",
|
||||
"Global Discovery Servers": "Global Discovery Servers",
|
||||
"Global State": "Global State",
|
||||
@@ -87,6 +98,7 @@
|
||||
"Ignore Permissions": "Ignore Permissions",
|
||||
"Incoming Rate Limit (KiB/s)": "Incoming Rate Limit (KiB/s)",
|
||||
"Incorrect configuration may damage your folder contents and render Syncthing inoperable.": "Incorrect configuration may damage your folder contents and render Syncthing inoperable.",
|
||||
"Introduced By": "Introduced By",
|
||||
"Introducer": "Introducer",
|
||||
"Inversion of the given condition (i.e. do not exclude)": "Inversion of the given condition (i.e. do not exclude)",
|
||||
"Keep Versions": "Keep Versions",
|
||||
@@ -95,6 +107,8 @@
|
||||
"Last Scan": "Last Scan",
|
||||
"Last seen": "Last seen",
|
||||
"Later": "Later",
|
||||
"Latest Change": "Latest Change",
|
||||
"Learn more": "Learn more",
|
||||
"Listeners": "Listeners",
|
||||
"Local Discovery": "Local Discovery",
|
||||
"Local State": "Local State",
|
||||
@@ -112,6 +126,7 @@
|
||||
"Newest First": "Newest First",
|
||||
"No": "No",
|
||||
"No File Versioning": "No File Versioning",
|
||||
"No upgrades": "No upgrades",
|
||||
"Normal": "Normal",
|
||||
"Notice": "Notice",
|
||||
"OK": "OK",
|
||||
@@ -123,9 +138,12 @@
|
||||
"Out of Sync Items": "Out of Sync Items",
|
||||
"Outgoing Rate Limit (KiB/s)": "Outgoing Rate Limit (KiB/s)",
|
||||
"Override Changes": "Override Changes",
|
||||
"Path": "Path",
|
||||
"Path to the folder on the local computer. Will be created if it does not exist. The tilde character (~) can be used as a shortcut for": "Path to the folder on the local computer. Will be created if it does not exist. The tilde character (~) can be used as a shortcut for",
|
||||
"Path where versions should be stored (leave empty for the default .stversions directory in the shared folder).": "Path where versions should be stored (leave empty for the default .stversions directory in the shared folder).",
|
||||
"Path where versions should be stored (leave empty for the default .stversions folder in the folder).": "Path where versions should be stored (leave empty for the default .stversions folder in the folder).",
|
||||
"Pause": "Pause",
|
||||
"Pause All": "Pause All",
|
||||
"Paused": "Paused",
|
||||
"Please consult the release notes before performing a major upgrade.": "Please consult the release notes before performing a major upgrade.",
|
||||
"Please set a GUI Authentication User and Password in the Settings dialog.": "Please set a GUI Authentication User and Password in the Settings dialogue.",
|
||||
@@ -137,6 +155,7 @@
|
||||
"Random": "Random",
|
||||
"Reduced by ignore patterns": "Reduced by ignore patterns",
|
||||
"Release Notes": "Release Notes",
|
||||
"Release candidates contain the latest features and fixes. They are similar to the traditional bi-weekly Syncthing releases.": "Release candidates contain the latest features and fixes. They are similar to the traditional bi-weekly Syncthing releases.",
|
||||
"Remote Devices": "Remote Devices",
|
||||
"Remove": "Remove",
|
||||
"Required identifier for the folder. Must be the same on all cluster devices.": "Required identifier for the folder. Must be the same on all cluster devices.",
|
||||
@@ -147,12 +166,15 @@
|
||||
"Restart Needed": "Restart Needed",
|
||||
"Restarting": "Restarting",
|
||||
"Resume": "Resume",
|
||||
"Resume All": "Resume All",
|
||||
"Reused": "Reused",
|
||||
"Save": "Save",
|
||||
"Scan Time Remaining": "Scan Time Remaining",
|
||||
"Scanning": "Scanning",
|
||||
"Select the devices to share this folder with.": "Select the devices to share this folder with.",
|
||||
"Select the folders to share with this device.": "Select the folders to share with this device.",
|
||||
"Send & Receive": "Send & Receive",
|
||||
"Send Only": "Send Only",
|
||||
"Settings": "Settings",
|
||||
"Share": "Share",
|
||||
"Share Folder": "Share Folder",
|
||||
@@ -170,6 +192,9 @@
|
||||
"Single level wildcard (matches within a directory only)": "Single level wildcard (matches within a directory only)",
|
||||
"Smallest First": "Smallest First",
|
||||
"Source Code": "Source Code",
|
||||
"Stable releases and release candidates": "Stable releases and release candidates",
|
||||
"Stable releases are delayed by about two weeks. During this time they go through testing as release candidates.": "Stable releases are delayed by about two weeks. During this time they go through testing as release candidates.",
|
||||
"Stable releases only": "Stable releases only",
|
||||
"Staggered File Versioning": "Staggered File Versioning",
|
||||
"Start Browser": "Start Browser",
|
||||
"Statistics": "Statistics",
|
||||
@@ -210,7 +235,9 @@
|
||||
"This Device": "This Device",
|
||||
"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 is a major version upgrade.": "This is a major version upgrade.",
|
||||
"Time": "Time",
|
||||
"Trash Can File Versioning": "Rubbish Bin File Versioning",
|
||||
"Type": "Type",
|
||||
"Unknown": "Unknown",
|
||||
"Unshared": "Unshared",
|
||||
"Unused": "Unused",
|
||||
@@ -221,14 +248,20 @@
|
||||
"Upgrading": "Upgrading",
|
||||
"Upload Rate": "Upload Rate",
|
||||
"Uptime": "Uptime",
|
||||
"Usage reporting is always enabled for candidate releases.": "Usage reporting is always enabled for candidate releases.",
|
||||
"Use HTTPS for GUI": "Use HTTPS for GUI",
|
||||
"Version": "Version",
|
||||
"Versions Path": "Versions Path",
|
||||
"Versions are automatically deleted if they are older than the maximum age or exceed the number of files allowed in an interval.": "Versions are automatically deleted if they are older than the maximum age or exceed the number of files allowed in an interval.",
|
||||
"Warning, this path is a parent directory of an existing folder \"{%otherFolder%}\".": "Warning, this path is a parent directory of an existing folder \"{{otherFolder}}\".",
|
||||
"Warning, this path is a parent directory of an existing folder \"{%otherFolderLabel%}\" ({%otherFolder%}).": "Warning, this path is a parent directory of an existing folder \"{{otherFolderLabel}}\" ({{otherFolder}}).",
|
||||
"Warning, this path is a subdirectory of an existing folder \"{%otherFolder%}\".": "Warning, this path is a subdirectory of an existing folder \"{{otherFolder}}\".",
|
||||
"Warning, this path is a subdirectory of an existing folder \"{%otherFolderLabel%}\" ({%otherFolder%}).": "Warning, this path is a subdirectory of an existing folder \"{{otherFolderLabel}}\" ({{otherFolder}}).",
|
||||
"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",
|
||||
"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.",
|
||||
"You must keep at least one version.": "You must keep at least one version.",
|
||||
"days": "days",
|
||||
"directories": "directories",
|
||||
|
||||
@@ -4,6 +4,7 @@
|
||||
"A new major version may not be compatible with previous versions.": "A new major version may not be compatible with previous versions.",
|
||||
"API Key": "API Key",
|
||||
"About": "About",
|
||||
"Action": "Action",
|
||||
"Actions": "Actions",
|
||||
"Add": "Add",
|
||||
"Add Device": "Add Device",
|
||||
@@ -18,9 +19,11 @@
|
||||
"All Data": "All Data",
|
||||
"Allow Anonymous Usage Reporting?": "Allow Anonymous Usage Reporting?",
|
||||
"Alphabetic": "Alphabetic",
|
||||
"An external command handles the versioning. It has to remove the file from the shared folder.": "An external command handles the versioning. It has to remove the file from the shared folder.",
|
||||
"An external command handles the versioning. It has to remove the file from the synced folder.": "An external command handles the versioning. It has to remove the file from the synced folder.",
|
||||
"Anonymous Usage Reporting": "Anonymous Usage Reporting",
|
||||
"Any devices configured on an introducer device will be added to this device as well.": "Any devices configured on an introducer device will be added to this device as well.",
|
||||
"Automatic upgrade now offers the choice between stable releases and release candidates.": "Automatic upgrade now offers the choice between stable releases and release candidates.",
|
||||
"Automatic upgrades": "Automatic upgrades",
|
||||
"Be careful!": "Be careful!",
|
||||
"Bugs": "Bugs",
|
||||
@@ -37,8 +40,10 @@
|
||||
"Copied from elsewhere": "Copied from elsewhere",
|
||||
"Copied from original": "Copied from original",
|
||||
"Copyright © 2014-2016 the following Contributors:": "Copyright © 2014-2016 the following Contributors:",
|
||||
"Copyright © 2014-2017 the following Contributors:": "Copyright © 2014-2017 the following Contributors:",
|
||||
"Danger!": "Danger!",
|
||||
"Deleted": "Deleted",
|
||||
"Device": "Device",
|
||||
"Device \"{%name%}\" ({%device%} at {%address%}) wants to connect. Add new device?": "Device \"{{name}}\" ({{device}} at {{address}}) wants to connect. Add new device?",
|
||||
"Device ID": "Device ID",
|
||||
"Device Identification": "Device Identification",
|
||||
@@ -52,6 +57,8 @@
|
||||
"Downloaded": "Downloaded",
|
||||
"Downloading": "Downloading",
|
||||
"Edit": "Edit",
|
||||
"Edit Device": "Edit Device",
|
||||
"Edit Folder": "Edit Folder",
|
||||
"Editing": "Editing",
|
||||
"Enable NAT traversal": "Enable NAT traversal",
|
||||
"Enable Relaying": "Enable Relaying",
|
||||
@@ -63,7 +70,9 @@
|
||||
"File Pull Order": "File Pull Order",
|
||||
"File Versioning": "File Versioning",
|
||||
"File permission bits are ignored when looking for changes. Use on FAT file systems.": "File permission bits are ignored when looking for changes. Use on FAT file systems.",
|
||||
"Files are moved to .stversions directory when replaced or deleted by Syncthing.": "Files are moved to .stversions directory when replaced or deleted by Syncthing.",
|
||||
"Files are moved to .stversions folder when replaced or deleted by Syncthing.": "Files are moved to .stversions folder when replaced or deleted by Syncthing.",
|
||||
"Files are moved to date stamped versions in a .stversions directory when replaced or deleted by Syncthing.": "Files are moved to date stamped versions in a .stversions directory when replaced or deleted by Syncthing.",
|
||||
"Files are moved to date stamped versions in a .stversions folder when replaced or deleted by Syncthing.": "Files are moved to date stamped versions in a .stversions folder when replaced or deleted by Syncthing.",
|
||||
"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 protected from changes made on other devices, but changes made on this device will be sent to the rest of the cluster.",
|
||||
"Folder": "Folder",
|
||||
@@ -76,7 +85,9 @@
|
||||
"GUI Authentication Password": "GUI Authentication Password",
|
||||
"GUI Authentication User": "GUI Authentication User",
|
||||
"GUI Listen Addresses": "GUI Listen Addresses",
|
||||
"GUI Theme": "GUI Theme",
|
||||
"Generate": "Generate",
|
||||
"Global Changes": "Global Changes",
|
||||
"Global Discovery": "Global Discovery",
|
||||
"Global Discovery Servers": "Global Discovery Servers",
|
||||
"Global State": "Global State",
|
||||
@@ -87,6 +98,7 @@
|
||||
"Ignore Permissions": "Ignore Permissions",
|
||||
"Incoming Rate Limit (KiB/s)": "Incoming Rate Limit (KiB/s)",
|
||||
"Incorrect configuration may damage your folder contents and render Syncthing inoperable.": "Incorrect configuration may damage your folder contents and render Syncthing inoperable.",
|
||||
"Introduced By": "Introduced By",
|
||||
"Introducer": "Introducer",
|
||||
"Inversion of the given condition (i.e. do not exclude)": "Inversion of the given condition (i.e. do not exclude)",
|
||||
"Keep Versions": "Keep Versions",
|
||||
@@ -95,6 +107,8 @@
|
||||
"Last Scan": "Last Scan",
|
||||
"Last seen": "Last seen",
|
||||
"Later": "Later",
|
||||
"Latest Change": "Latest Change",
|
||||
"Learn more": "Learn more",
|
||||
"Listeners": "Listeners",
|
||||
"Local Discovery": "Local Discovery",
|
||||
"Local State": "Local State",
|
||||
@@ -112,6 +126,7 @@
|
||||
"Newest First": "Newest First",
|
||||
"No": "No",
|
||||
"No File Versioning": "No File Versioning",
|
||||
"No upgrades": "No upgrades",
|
||||
"Normal": "Normal",
|
||||
"Notice": "Notice",
|
||||
"OK": "OK",
|
||||
@@ -123,9 +138,12 @@
|
||||
"Out of Sync Items": "Out of Sync Items",
|
||||
"Outgoing Rate Limit (KiB/s)": "Outgoing Rate Limit (KiB/s)",
|
||||
"Override Changes": "Override Changes",
|
||||
"Path": "Path",
|
||||
"Path to the folder on the local computer. Will be created if it does not exist. The tilde character (~) can be used as a shortcut for": "Path to the folder on the local computer. Will be created if it does not exist. The tilde character (~) can be used as a shortcut for",
|
||||
"Path where versions should be stored (leave empty for the default .stversions directory in the shared folder).": "Path where versions should be stored (leave empty for the default .stversions directory in the shared folder).",
|
||||
"Path where versions should be stored (leave empty for the default .stversions folder in the folder).": "Path where versions should be stored (leave empty for the default .stversions folder in the folder).",
|
||||
"Pause": "Pause",
|
||||
"Pause All": "Pause All",
|
||||
"Paused": "Paused",
|
||||
"Please consult the release notes before performing a major upgrade.": "Please consult the release notes before performing a major upgrade.",
|
||||
"Please set a GUI Authentication User and Password in the Settings dialog.": "Please set a GUI Authentication User and Password in the Settings dialog.",
|
||||
@@ -137,6 +155,7 @@
|
||||
"Random": "Random",
|
||||
"Reduced by ignore patterns": "Reduced by ignore patterns",
|
||||
"Release Notes": "Release Notes",
|
||||
"Release candidates contain the latest features and fixes. They are similar to the traditional bi-weekly Syncthing releases.": "Release candidates contain the latest features and fixes. They are similar to the traditional bi-weekly Syncthing releases.",
|
||||
"Remote Devices": "Remote Devices",
|
||||
"Remove": "Remove",
|
||||
"Required identifier for the folder. Must be the same on all cluster devices.": "Required identifier for the folder. Must be the same on all cluster devices.",
|
||||
@@ -147,12 +166,15 @@
|
||||
"Restart Needed": "Restart Needed",
|
||||
"Restarting": "Restarting",
|
||||
"Resume": "Resume",
|
||||
"Resume All": "Resume All",
|
||||
"Reused": "Reused",
|
||||
"Save": "Save",
|
||||
"Scan Time Remaining": "Scan Time Remaining",
|
||||
"Scanning": "Scanning",
|
||||
"Select the devices to share this folder with.": "Select the devices to share this folder with.",
|
||||
"Select the folders to share with this device.": "Select the folders to share with this device.",
|
||||
"Send \u0026 Receive": "Send \u0026 Receive",
|
||||
"Send Only": "Send Only",
|
||||
"Settings": "Settings",
|
||||
"Share": "Share",
|
||||
"Share Folder": "Share Folder",
|
||||
@@ -170,6 +192,9 @@
|
||||
"Single level wildcard (matches within a directory only)": "Single level wildcard (matches within a directory only)",
|
||||
"Smallest First": "Smallest First",
|
||||
"Source Code": "Source Code",
|
||||
"Stable releases and release candidates": "Stable releases and release candidates",
|
||||
"Stable releases are delayed by about two weeks. During this time they go through testing as release candidates.": "Stable releases are delayed by about two weeks. During this time they go through testing as release candidates.",
|
||||
"Stable releases only": "Stable releases only",
|
||||
"Staggered File Versioning": "Staggered File Versioning",
|
||||
"Start Browser": "Start Browser",
|
||||
"Statistics": "Statistics",
|
||||
@@ -210,7 +235,9 @@
|
||||
"This Device": "This Device",
|
||||
"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 is a major version upgrade.": "This is a major version upgrade.",
|
||||
"Time": "Time",
|
||||
"Trash Can File Versioning": "Trash Can File Versioning",
|
||||
"Type": "Type",
|
||||
"Unknown": "Unknown",
|
||||
"Unshared": "Unshared",
|
||||
"Unused": "Unused",
|
||||
@@ -221,14 +248,20 @@
|
||||
"Upgrading": "Upgrading",
|
||||
"Upload Rate": "Upload Rate",
|
||||
"Uptime": "Uptime",
|
||||
"Usage reporting is always enabled for candidate releases.": "Usage reporting is always enabled for candidate releases.",
|
||||
"Use HTTPS for GUI": "Use HTTPS for GUI",
|
||||
"Version": "Version",
|
||||
"Versions Path": "Versions Path",
|
||||
"Versions are automatically deleted if they are older than the maximum age or exceed the number of files allowed in an interval.": "Versions are automatically deleted if they are older than the maximum age or exceed the number of files allowed in an interval.",
|
||||
"Warning, this path is a parent directory of an existing folder \"{%otherFolder%}\".": "Warning, this path is a parent directory of an existing folder \"{{otherFolder}}\".",
|
||||
"Warning, this path is a parent directory of an existing folder \"{%otherFolderLabel%}\" ({%otherFolder%}).": "Warning, this path is a parent directory of an existing folder \"{{otherFolderLabel}}\" ({{otherFolder}}).",
|
||||
"Warning, this path is a subdirectory of an existing folder \"{%otherFolder%}\".": "Warning, this path is a subdirectory of an existing folder \"{{otherFolder}}\".",
|
||||
"Warning, this path is a subdirectory of an existing folder \"{%otherFolderLabel%}\" ({%otherFolder%}).": "Warning, this path is a subdirectory of an existing folder \"{{otherFolderLabel}}\" ({{otherFolder}}).",
|
||||
"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",
|
||||
"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.",
|
||||
"You must keep at least one version.": "You must keep at least one version.",
|
||||
"days": "days",
|
||||
"directories": "directories",
|
||||
|
||||
@@ -0,0 +1,273 @@
|
||||
{
|
||||
"A device with that ID is already added.": "Aparato kiu ID jam estis aldonita.",
|
||||
"A negative number of days doesn't make sense.": "Negativa numero de tagoj ne sencas.",
|
||||
"A new major version may not be compatible with previous versions.": "Nova Äefa versio eble ne kongruas kun antaĆaj versioj.",
|
||||
"API Key": "API Ćlosilo",
|
||||
"About": "Pri",
|
||||
"Action": "Ago",
|
||||
"Actions": "Agoj",
|
||||
"Add": "Aldoni",
|
||||
"Add Device": "Aldonu Aparaton",
|
||||
"Add Folder": "Aldonu Dosierujon",
|
||||
"Add Remote Device": "Aldonu Foran Aparaton",
|
||||
"Add new folder?": "Aldoni novan dosierujon?",
|
||||
"Address": "Adreso",
|
||||
"Addresses": "Adresoj",
|
||||
"Advanced": "Altnivela",
|
||||
"Advanced Configuration": "Altinivela Agordo",
|
||||
"Advanced settings": "Altnivelaj agordoj",
|
||||
"All Data": "Äioj Datumoj",
|
||||
"Allow Anonymous Usage Reporting?": "Permesi Sennoman Raporton de Uzado?",
|
||||
"Alphabetic": "Alfabeta",
|
||||
"An external command handles the versioning. It has to remove the file from the shared folder.": "An external command handles the versioning. It has to remove the file from the shared folder.",
|
||||
"An external command handles the versioning. It has to remove the file from the synced folder.": "Externa komando traktas la versionadon. Äi havas forigi la dosiero el la sinkronigita dosierujo.",
|
||||
"Anonymous Usage Reporting": "Sennoma Raporto de Uzado",
|
||||
"Any devices configured on an introducer device will be added to this device as well.": "Iu devizo agordita en prezentista aparato ankaĆ estos aldonita al Äi tiu aparato .",
|
||||
"Automatic upgrade now offers the choice between stable releases and release candidates.": "AĆtomata Äisdatigo nun proponas la elekto inter stabilaj eldonoj kaj antaĆeldonoj.",
|
||||
"Automatic upgrades": "AĆtomataj Äisdatigoj",
|
||||
"Be careful!": "Zorgu!",
|
||||
"Bugs": "Cimoj",
|
||||
"CPU Utilization": "Äefprocesoro Utiligo",
|
||||
"Changelog": "ĆanÄoprotokolo",
|
||||
"Clean out after": "Purigi poste",
|
||||
"Close": "Fermi",
|
||||
"Command": "Komando",
|
||||
"Comment, when used at the start of a line": "Komento, kiam uzita Äe la komenco de la lineo",
|
||||
"Compression": "Densigo",
|
||||
"Configured": "Agordita",
|
||||
"Connection Error": "Eraro de Konekto",
|
||||
"Connection Type": "Tipo de Konekto",
|
||||
"Copied from elsewhere": "Kopiita de aliloke",
|
||||
"Copied from original": "kopiita de originala",
|
||||
"Copyright © 2014-2016 the following Contributors:": "Kopirajto © 2014-2016 el la sekvantaj Kontribuantoj:",
|
||||
"Copyright © 2014-2017 the following Contributors:": "Kopirajto © 2014-2017 el la sekvantaj Kontribuantoj:",
|
||||
"Danger!": "DanÄero!",
|
||||
"Deleted": "Forigita",
|
||||
"Device": "Aparato",
|
||||
"Device \"{%name%}\" ({%device%} at {%address%}) wants to connect. Add new device?": "Aparato \"{{name}}\" ({{device}} Äe {{address}}) volas konekti. Aldoni la novan devizon?",
|
||||
"Device ID": "Aparato ID",
|
||||
"Device Identification": "Identigo de Aparato",
|
||||
"Device Name": "Nomo de Aparato",
|
||||
"Devices": "Aparatoj",
|
||||
"Disconnected": "Malkonektita",
|
||||
"Discovered": "Malkovrita",
|
||||
"Discovery": "Malkovro",
|
||||
"Documentation": "Dokumentado",
|
||||
"Download Rate": "ElĆutrapido",
|
||||
"Downloaded": "ElĆutita",
|
||||
"Downloading": "ElĆutado",
|
||||
"Edit": "Redakti",
|
||||
"Edit Device": "Redakti Aparato",
|
||||
"Edit Folder": "Redakti Dosierujo",
|
||||
"Editing": "Redaktado",
|
||||
"Enable NAT traversal": "Ćaltu trairadan NAT",
|
||||
"Enable Relaying": "Ćaltu Relajsado",
|
||||
"Enter comma separated (\"tcp://ip:port\", \"tcp://host:port\") addresses or \"dynamic\" to perform automatic discovery of the address.": "Enigi adresojn dividitajn per komoj (\"tcp://ip:port\", \"tcp://host:port\") aĆ \"dynamic\" por elfari aĆtomatan elkovron de la adreso.",
|
||||
"Enter ignore patterns, one per line.": "Enigi modelrekonojn por ignori, unu per lineo.",
|
||||
"Error": "Eraro",
|
||||
"External File Versioning": "Externa Versionado de Dosiero",
|
||||
"Failed Items": "Malsuksesaj Elementoj",
|
||||
"File Pull Order": "Ordo de Tiro de Dosieroj",
|
||||
"File Versioning": "Versionado de Dosieroj",
|
||||
"File permission bits are ignored when looking for changes. Use on FAT file systems.": "Permesoj bitoj de dosieroj estas ignorita dum la serÄado por ĆanÄoj. Uzi en FAT dosiersistemoj.",
|
||||
"Files are moved to .stversions directory when replaced or deleted by Syncthing.": "Files are moved to .stversions directory when replaced or deleted by Syncthing.",
|
||||
"Files are moved to .stversions folder when replaced or deleted by Syncthing.": "Dosieroj estas movitaj al .stversions dosierujo kiam anstataĆigitaj aĆ forigitaj je Syncthing.",
|
||||
"Files are moved to date stamped versions in a .stversions directory when replaced or deleted by Syncthing.": "Files are moved to date stamped versions in a .stversions directory when replaced or deleted by Syncthing.",
|
||||
"Files are moved to date stamped versions in a .stversions folder when replaced or deleted by Syncthing.": "Dosieroj estas movitaj al datostampitaj versioj en .stversions dosierujo kiam anstataĆigitaj aĆ forigitaj je Syncthing.",
|
||||
"Files are protected from changes made on other devices, but changes made on this device will be sent to the rest of the cluster.": "Dosieroj estas protektata de ĆanÄoj faritaj en aliaj aparatoj, sed ĆanÄoj farita en Äi tiu aparato estos senditaj al resto de la fasko.",
|
||||
"Folder": "Dosierujo",
|
||||
"Folder ID": "Dosierujo ID",
|
||||
"Folder Label": "Etikedo de Dosierujo",
|
||||
"Folder Path": "Vojo de Dosierujo",
|
||||
"Folder Type": "Tipo de Dosierujo",
|
||||
"Folders": "Dosierujoj",
|
||||
"GUI": "Grafika Interfaco",
|
||||
"GUI Authentication Password": "Perpasvorto de AĆtentigo en Grafika Interfaco",
|
||||
"GUI Authentication User": "Uzanto de AĆtentigo en Grafika Interfaco",
|
||||
"GUI Listen Addresses": "Adreso de AĆkultado en Grafika Interfaco",
|
||||
"GUI Theme": "Etoso de Grafika Interfaco",
|
||||
"Generate": "Generi",
|
||||
"Global Changes": "Mallokaj ĆanÄoj",
|
||||
"Global Discovery": "Malloka Malkovro",
|
||||
"Global Discovery Servers": "Mallokaj Serviojn por Malkovrado",
|
||||
"Global State": "Malloka Stato",
|
||||
"Help": "Helpo",
|
||||
"Home page": "HejmpaÄo",
|
||||
"Ignore": "Ignoru",
|
||||
"Ignore Patterns": "Modelrekonoj por Ignori",
|
||||
"Ignore Permissions": "Permesoj por Ignori",
|
||||
"Incoming Rate Limit (KiB/s)": "Limo de Envenrapido (KiB/s)",
|
||||
"Incorrect configuration may damage your folder contents and render Syncthing inoperable.": "MalÄusta agordo povas difekti viajn enhavojn en dosierujo kaj turni Syncthing-n senefika.",
|
||||
"Introduced By": "Prezentita Per",
|
||||
"Introducer": "Prezentista",
|
||||
"Inversion of the given condition (i.e. do not exclude)": "Inversigo de la donita kondiÄo (i.e. ne ekskluzivi)",
|
||||
"Keep Versions": "Konservi Versiojn.",
|
||||
"Largest First": "Plej Granda Unue",
|
||||
"Last File Received": "Lasta Dosiero Ricevita",
|
||||
"Last Scan": "Lasta Skano",
|
||||
"Last seen": "Lasta vidita",
|
||||
"Later": "Poste",
|
||||
"Latest Change": "Lasta ĆanÄo",
|
||||
"Learn more": "Lerni pli",
|
||||
"Listeners": "AĆskultantoj",
|
||||
"Local Discovery": "Loka Malkovro",
|
||||
"Local State": "Loca Stato",
|
||||
"Local State (Total)": "Loca Stato (Totala)",
|
||||
"Major Upgrade": "Äefa Äisdatigo",
|
||||
"Master": "Äefa",
|
||||
"Maximum Age": "Maksimuma AÄo",
|
||||
"Metadata Only": "Nur Metadatumoj",
|
||||
"Minimum Free Disk Space": "Minimuma Libera Diskospaco",
|
||||
"Move to top of queue": "Movi supren en la atendovico",
|
||||
"Multi level wildcard (matches multiple directory levels)": "PlurpaĆa Ä”okero (kongruas kun multoblaj niveloj de dosierujoj)",
|
||||
"Never": "Neniam",
|
||||
"New Device": "Nova Aparato",
|
||||
"New Folder": "Dova Dosierujo",
|
||||
"Newest First": "Plejnova Unue",
|
||||
"No": "Ne",
|
||||
"No File Versioning": "Sen Versionado de Dosieroj",
|
||||
"No upgrades": "Sen Äidatigoj",
|
||||
"Normal": "Normala",
|
||||
"Notice": "Rimarko",
|
||||
"OK": "Bone",
|
||||
"Off": "For",
|
||||
"Oldest First": "Maljuna Unue",
|
||||
"Optional descriptive label for the folder. Can be different on each device.": "Malnepra priskriba etikedo por la dosierujo. Povas esti malsama en Äiu aparato.",
|
||||
"Options": "Opcioj",
|
||||
"Out of Sync": "Elsinkronigita",
|
||||
"Out of Sync Items": "Elementoj Elsinkronigitaj",
|
||||
"Outgoing Rate Limit (KiB/s)": "Limo de Elirantrapido (KiB/s)",
|
||||
"Override Changes": "Transpasi ĆanÄojn",
|
||||
"Path": "Vojo",
|
||||
"Path to the folder on the local computer. Will be created if it does not exist. The tilde character (~) can be used as a shortcut for": "Vojo de la dosierujo en la loka komputilo. KreiÄos se ne ekzistas. La tildo signo (~) povas esti uzata kiel Ćparvojo por",
|
||||
"Path where versions should be stored (leave empty for the default .stversions directory in the shared folder).": "Path where versions should be stored (leave empty for the default .stversions directory in the shared folder).",
|
||||
"Path where versions should be stored (leave empty for the default .stversions folder in the folder).": "Vojo kie vesioj esti konservita (lasi malplena por la defaĆlta .stversions dosierujo en la dosierujo).",
|
||||
"Pause": "PaĆzu",
|
||||
"Pause All": "PaĆzu Äion",
|
||||
"Paused": "PaĆzita",
|
||||
"Please consult the release notes before performing a major upgrade.": "Bonvolu konsulti la eldonaj notoj antaĆ elfaranta Äefan Äisdatigon.",
|
||||
"Please set a GUI Authentication User and Password in the Settings dialog.": "Bonvolu agordi Uzanto kaj Perpasvorto de AĆtentigo en Grafika Interfaco en la dialogo de Agordoj.",
|
||||
"Please wait": "Bonvolu atendi",
|
||||
"Preview": "AntaĆrigardo",
|
||||
"Preview Usage Report": "AntaĆrigardo de Raporto de Uzado",
|
||||
"Quick guide to supported patterns": "Manlibreto por subtenataj modelrekonoj",
|
||||
"RAM Utilization": "RAM Utiligo",
|
||||
"Random": "Hazarda",
|
||||
"Reduced by ignore patterns": "Reduktita per modelrekonoj por ignori",
|
||||
"Release Notes": "Eldonaj Notoj",
|
||||
"Release candidates contain the latest features and fixes. They are similar to the traditional bi-weekly Syncthing releases.": "AntaĆeldonoj enhavas la lastajn funkciojn kaj riparojn. Ili estas similaj al la tradicia dusemajna Syncthing eldonaj.",
|
||||
"Remote Devices": "Foraj Aparatoj",
|
||||
"Remove": "Forigu",
|
||||
"Required identifier for the folder. Must be the same on all cluster devices.": "Nepra identigilo por la dosierujo. Devas esti la sama en Äiuj aparatoj de la fasko.",
|
||||
"Rescan": "Reskanu",
|
||||
"Rescan All": "Reskanu Äion",
|
||||
"Rescan Interval": "Intervalo de Reskano",
|
||||
"Restart": "Rekomencu",
|
||||
"Restart Needed": "Rekomenco Bezonata",
|
||||
"Restarting": "Rekomencanta",
|
||||
"Resume": "DaĆrigu",
|
||||
"Resume All": "DaĆrigu Äion",
|
||||
"Reused": "Reuzata",
|
||||
"Save": "Konservu",
|
||||
"Scan Time Remaining": "Restanta Tempo por Skani",
|
||||
"Scanning": "Skanado",
|
||||
"Select the devices to share this folder with.": "Elekti la aparatojn por komunigi Äi tiun dosierujon.",
|
||||
"Select the folders to share with this device.": "Elekti la dosierujojn por komunigi kun Äi tiu aparato.",
|
||||
"Send & Receive": "Sendi kaj Ricevi",
|
||||
"Send Only": "Nur Sendi",
|
||||
"Settings": "Agordoj",
|
||||
"Share": "Komunigu",
|
||||
"Share Folder": "Komunigu Dosierujon",
|
||||
"Share Folders With Device": "Dosierujoj Komunigita Kun Aparato",
|
||||
"Share With Devices": "Komunigu Kun Aparatoj",
|
||||
"Share this folder?": "Komunigi Äi tion dosierujon?",
|
||||
"Shared With": "Komunigita Kun",
|
||||
"Show ID": "Montru ID",
|
||||
"Show QR": "Montru QR",
|
||||
"Shown instead of Device ID in the cluster status. Will be advertised to other devices as an optional default name.": "Montri anstataĆ la Aparato ID en la stato de la fakso. Anoncota al aliaj aparatoj kiel opcia defaĆlta nomo.",
|
||||
"Shown instead of Device ID in the cluster status. Will be updated to the name the device advertises if left empty.": "Montri anstataĆ la Aparato ID en la stato de la fakso. Aktualigonta al la nomo de la aparato se lasus malplena.",
|
||||
"Shutdown": "Sistemfermu",
|
||||
"Shutdown Complete": "Sistemfermon Completigita",
|
||||
"Simple File Versioning": "Simpla Versionado de Dosieroj",
|
||||
"Single level wildcard (matches within a directory only)": "UnuoppaĆa Ä”okero (kongruas nur en unu dosierujo)",
|
||||
"Smallest First": "Plej Malgranda Unue",
|
||||
"Source Code": "Fontcodo",
|
||||
"Stable releases and release candidates": "Stabilaj eldonoj kaj antaĆeldonoj",
|
||||
"Stable releases are delayed by about two weeks. During this time they go through testing as release candidates.": "Stabilaj eldonoj prokrastas je ÄirkaĆ du semjanoj. Dum tiu tempo ili iras tra testado kiel antĆeldonoj.",
|
||||
"Stable releases only": "Nur stabilaj eldonoj",
|
||||
"Staggered File Versioning": "EkĆanceliÄita Versionado de Dosieroj",
|
||||
"Start Browser": "LanÄu Retumilon",
|
||||
"Statistics": "Statistikoj",
|
||||
"Stopped": "HaltiÄita",
|
||||
"Support": "Subteno",
|
||||
"Sync Protocol Listen Addresses": "Adresoj de AĆskulto de la Protokolo de Elsinkronigo",
|
||||
"Syncing": "Elsinkronigitado",
|
||||
"Syncthing has been shut down.": "Syncthing estis elĆaltita.",
|
||||
"Syncthing includes the following software or portions thereof:": "Syncthing enhavas la sekvantajn programarojn aĆ Äiajn partojn :",
|
||||
"Syncthing is restarting.": "Syncthing estas rekomencanta.",
|
||||
"Syncthing is upgrading.": "Syncthing estas Äisdatiganta.",
|
||||
"Syncthing seems to be down, or there is a problem with your Internet connection. RetryingâŠ": "Syncthing Ćajnas nefunkcii, aĆ Äi tie estas problemo kun via retkonekto. Reprovanta...",
|
||||
"Syncthing seems to be experiencing a problem processing your request. Please refresh the page or restart Syncthing if the problem persists.": "Syncthing Ćajnas havi problemon kun la traktado de via peto. Bonvolu aktualigi la paÄon aĆ rekomenci Syncthing se la problemo obstinas.",
|
||||
"The Syncthing admin interface is configured to allow remote access without a password.": "La administra interfaco de Syncthing estas agordita por permesi foran atingon sen pasvorto.",
|
||||
"The aggregated statistics are publicly available at the URL below.": "La sumaj statistikj estas publike disponebla Äe la URL malsupre.",
|
||||
"The configuration has been saved but not activated. Syncthing must restart to activate the new configuration.": "La agordo estis konservita sed ne aktivigita. Syncthing devas rekomenci por aktivigi la novan agordon.",
|
||||
"The device ID cannot be blank.": "La aparato ID ne povas esti malplena.",
|
||||
"The device ID to enter here can be found in the \"Actions > Show ID\" dialog on the other device. Spaces and dashes are optional (ignored).": "La aparato ID por enigi Äi tie troviÄas Äe la dialogo en \"Agoj > Montru ID\" en la alia aparato. Interspacoj kaj streketoj estas opcia (ignorigita).",
|
||||
"The encrypted usage report is sent daily. It is used to track common platforms, folder sizes and app versions. If the reported data set is changed you will be prompted with this dialog again.": "La Äifrita raporto de uzado estas sendita Äiutage. Estas uzita por sekvi komunajn platformojn, dosierujgrandojn kaj aplikaÄ”versiojn. Se la raporto datumaro ĆanÄas, vi estos avertata per Äi tiu dialogo denove.",
|
||||
"The entered device ID does not look valid. It should be a 52 or 56 character string consisting of letters and numbers, with spaces and dashes being optional.": "La enigita aparato ID ne Ćajnas valida. Äi devas esti signoÄeno de 52 aĆ 56 longo enhavinta leterojn kaj nombrojn, kun interspacoj kaj streketoj opciaj.",
|
||||
"The first command line parameter is the folder path and the second parameter is the relative path in the folder.": "Ka unua komandlinia parametro estas la vojo de la dosierujo kaj la dua parametro estas la relativa vojo en la dosierujo.",
|
||||
"The folder ID cannot be blank.": "La dosierujo ID ne povas esti malplena.",
|
||||
"The folder ID must be unique.": "La dosierujo ID devas esti unika.",
|
||||
"The folder path cannot be blank.": "La vojo de la dosierujo ne povas esti malplena.",
|
||||
"The following intervals are used: for the first hour a version is kept every 30 seconds, for the first day a version is kept every hour, for the first 30 days a version is kept every day, until the maximum age a version is kept every week.": "La sekvantaj intervaloj estas uzinta: dum la unua horo versio estas konservita Äiu 30 sekundoj, dum la unua tago versio estas konservita Äiu horo, dum la unua 30 tagoj versio estas konservita Äiu tago, Äis la maksimuma aÄo versio estas konservita Äiu semajno.",
|
||||
"The following items could not be synchronized.": "La sekvantaj elementoj ne povis sinkronigi.",
|
||||
"The maximum age must be a number and cannot be blank.": "La maksimuma aÄo devas esti nombro kaj ne povas esti malplena.",
|
||||
"The maximum time to keep a version (in days, set to 0 to keep versions forever).": "La maksimuma tempo por konservi version (en tagoj, agordi je 0 por konservi versiojn eterne).",
|
||||
"The minimum free disk space percentage must be a non-negative number between 0 and 100 (inclusive).": "La minimuma libera procento de diskospaco devas esti poziva numero inter 0 kaj 100 (inkluziva).",
|
||||
"The number of days must be a number and cannot be blank.": "La nombro de tagoj devas esti nombro kaj ne povas esti malplena.",
|
||||
"The number of days to keep files in the trash can. Zero means forever.": "La nombro de tagoj por konservi dosieroj en la rubujo. Nulo signifas eterne.",
|
||||
"The number of old versions to keep, per file.": "La nombro de malnova versioj por konservi, po dosiero.",
|
||||
"The number of versions must be a number and cannot be blank.": "La nombro de versioj devas esti nombro kaj ne povas esti malplena.",
|
||||
"The path cannot be blank.": "La vojo ne povas esti malplena.",
|
||||
"The rate limit must be a non-negative number (0: no limit)": "La limo de rapido devas esti pozitiva nombro (0: senlimo)",
|
||||
"The rescan interval must be a non-negative number of seconds.": "La intervalo de reskano devas esti pozitiva nombro de sekundoj.",
|
||||
"They are retried automatically and will be synced when the error is resolved.": "Ili estas reprovintaj aĆtomate kaj estos sinkronigitaj kiam la eraro estas solvita.",
|
||||
"This Device": "Äi tio Aparato",
|
||||
"This can easily give hackers access to read and change any files on your computer.": "Äi tio povas facile doni al kodumuloj atingo por legi kaj ĆanÄi ajna dosierojn en via komputilo.",
|
||||
"This is a major version upgrade.": "Äi tio estas Äefversia plibonigo.",
|
||||
"Time": "Tempo",
|
||||
"Trash Can File Versioning": "Versionado de Dosiero en Rubujo",
|
||||
"Type": "Tipo",
|
||||
"Unknown": "Nekonata",
|
||||
"Unshared": "Nekomunigita",
|
||||
"Unused": "Neuzita",
|
||||
"Up to Date": "Äisdata",
|
||||
"Updated": "Äisdatigita",
|
||||
"Upgrade": "Plibonigu",
|
||||
"Upgrade To {%version%}": "Plibonigi Al {{version}}",
|
||||
"Upgrading": "Pliboniganta",
|
||||
"Upload Rate": "AlĆutrapido",
|
||||
"Uptime": "DaĆro de funkciado",
|
||||
"Usage reporting is always enabled for candidate releases.": "La raporto de uzado Äiam estas Ćaltita por antaĆeldonoj.",
|
||||
"Use HTTPS for GUI": "Uzi HTTPS por grafika interfaco.",
|
||||
"Version": "Versio",
|
||||
"Versions Path": "Vojo de Versioj",
|
||||
"Versions are automatically deleted if they are older than the maximum age or exceed the number of files allowed in an interval.": "Versioj estas aĆtomate forigitaj se ili estas pli maljuna ol la maksimuma aÄo aĆ superas la nombro de dosierujoj permesita en intervalo.",
|
||||
"Warning, this path is a parent directory of an existing folder \"{%otherFolder%}\".": "Averto, Äi tiu vojo estas parentdosierujo de ekzistanta dosierujo \"{{otherFolder}}\".",
|
||||
"Warning, this path is a parent directory of an existing folder \"{%otherFolderLabel%}\" ({%otherFolder%}).": "Averto, Äi tiu vojo estas parentdosierujo de ekzistanta dosierujo \"{{otherFolderLabel}}\" ({{otherFolder}}).",
|
||||
"Warning, this path is a subdirectory of an existing folder \"{%otherFolder%}\".": "Averto, Äi tiu vojo estas subdosierujo de ekzistanta dosierujo \"{{otherFolder}}\".",
|
||||
"Warning, this path is a subdirectory of an existing folder \"{%otherFolderLabel%}\" ({%otherFolder%}).": "Averto, Äi tiu vojo estas subdosierujo de ekzistanta dosierujo \"{{otherFolderLabel}}\" ({{otherFolder}}).",
|
||||
"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 Dosierujo ID estas uzita por ligi la dosierujojn kune inter aparatoj. Ili estas usklecodistinga kaj devas kongrui Äuste inter Äiuj aparatoj.",
|
||||
"Yes": "Jes",
|
||||
"You can change your choice at any time in the Settings dialog.": "Vi povas ĆanÄi vian elekton iam en la dialogo de Agordo.",
|
||||
"You can read more about the two release channels at the link below.": "Vi povas legi pli pri la du eldonkanalo Äe la malsupra ligilo.",
|
||||
"You must keep at least one version.": "Vi devas konservi almenĆ unu versio.",
|
||||
"days": "tagoj",
|
||||
"directories": "dosierujoj",
|
||||
"files": "dosieroj",
|
||||
"full documentation": "tuta dokumentado",
|
||||
"items": "elementoj",
|
||||
"{%device%} wants to share folder \"{%folder%}\".": "{{device}} volas komunigi dosierujo \"{{folder}}\".",
|
||||
"{%device%} wants to share folder \"{%folderlabel%}\" ({%folder%}).": "{{device}} volas komunigi dosierujo \"{{folderlabel}}\" ({{folder}})."
|
||||
}
|
||||
@@ -4,6 +4,7 @@
|
||||
"A new major version may not be compatible with previous versions.": "Una nueva versiĂłn con cambios importantes puede no ser compatible con versiones anteriores.",
|
||||
"API Key": "Clave del API",
|
||||
"About": "Acerca de",
|
||||
"Action": "AcciĂłn",
|
||||
"Actions": "Acciones",
|
||||
"Add": "Agregar",
|
||||
"Add Device": "Agregar el dispositivo",
|
||||
@@ -18,9 +19,11 @@
|
||||
"All Data": "Todos los datos",
|
||||
"Allow Anonymous Usage Reporting?": "ÂżDeseas permitir el envĂo anĂłnimo de informes de uso?",
|
||||
"Alphabetic": "Alfabético",
|
||||
"An external command handles the versioning. It has to remove the file from the shared folder.": "An external command handles the versioning. It has to remove the file from the shared folder.",
|
||||
"An external command handles the versioning. It has to remove the file from the synced folder.": "Un comando externo controla la versiĂłn. El fichero debe ser eliminado de la carpeta sincronizada.",
|
||||
"Anonymous Usage Reporting": "Informe anĂłnimo de uso",
|
||||
"Any devices configured on an introducer device will be added to this device as well.": "Cualquier dispositivo configurado en un dispositivo de introducción serå añadido también.",
|
||||
"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.",
|
||||
"Automatic upgrades": "Actualizaciones automĂĄticas",
|
||||
"Be careful!": "ÂĄTen cuidado!",
|
||||
"Bugs": "Errores",
|
||||
@@ -31,27 +34,31 @@
|
||||
"Command": "AcciĂłn",
|
||||
"Comment, when used at the start of a line": "Comentar, cuando se usa al comienzo de una lĂnea",
|
||||
"Compression": "CompresiĂłn",
|
||||
"Configured": "Configured",
|
||||
"Configured": "Configurado",
|
||||
"Connection Error": "Error de conexiĂłn",
|
||||
"Connection Type": "Tipo de conexiĂłn",
|
||||
"Copied from elsewhere": "Copiado de otro sitio",
|
||||
"Copied from original": "Copiado del original",
|
||||
"Copyright © 2014-2016 the following Contributors:": "Copyright © 2014-2016 los siguientes Colaboradores:",
|
||||
"Copyright © 2014-2017 the following Contributors:": "Copyright © 2014-2017 Los siguientes colaboradores:",
|
||||
"Danger!": "ÂĄPeligro!",
|
||||
"Deleted": "Eliminado",
|
||||
"Device": "Dispositivo",
|
||||
"Device \"{%name%}\" ({%device%} at {%address%}) wants to connect. Add new device?": "El dispositivo \"{{name}}\" ({{device}} en la dirección {{address}}) quiere conectarse. Añadir nuevo dispositivo?",
|
||||
"Device ID": "ID del Dispositivo",
|
||||
"Device Identification": "IdentificaciĂłn del Dispositivo",
|
||||
"Device Name": "Nombre del Dispositivo",
|
||||
"Devices": "Dispositivos",
|
||||
"Disconnected": "Desconectado",
|
||||
"Discovered": "Discovered",
|
||||
"Discovered": "Descubierto",
|
||||
"Discovery": "Descubrimiento",
|
||||
"Documentation": "DocumentaciĂłn",
|
||||
"Download Rate": "Velocidad de descarga",
|
||||
"Downloaded": "Descargado",
|
||||
"Downloading": "Descargando",
|
||||
"Edit": "Editar",
|
||||
"Edit Device": "Editar Dispositivo",
|
||||
"Edit Folder": "Editar Carpeta",
|
||||
"Editing": "Editando",
|
||||
"Enable NAT traversal": "Permitir NAT transversal",
|
||||
"Enable Relaying": "Habilitar RetransmisiĂłn",
|
||||
@@ -63,7 +70,9 @@
|
||||
"File Pull Order": "Orden de obtenciĂłn de los ficheros",
|
||||
"File Versioning": "Versionado de ficheros",
|
||||
"File permission bits are ignored when looking for changes. Use on FAT file systems.": "Los bits de permiso de ficheros son ignorados cuando se buscan cambios. Utilizar en sistemas de ficheros FAT.",
|
||||
"Files are moved to .stversions directory when replaced or deleted by Syncthing.": "Files are moved to .stversions directory when replaced or deleted by Syncthing.",
|
||||
"Files are moved to .stversions folder when replaced or deleted by Syncthing.": "Los archivos serĂĄn movidos a la carpeta .stversions cuando sean reemplazados o borrados por Syncthing.",
|
||||
"Files are moved to date stamped versions in a .stversions directory when replaced or deleted by Syncthing.": "Files are moved to date stamped versions in a .stversions directory when replaced or deleted by Syncthing.",
|
||||
"Files are moved to date stamped versions in a .stversions folder when replaced or deleted by Syncthing.": "Los ficheros son cambiados a versiones con indicaciĂłn de fecha en una carpeta \".stversions\" cuando son reemplazados o borrados por Syncthing.",
|
||||
"Files are protected from changes made on other devices, but changes made on this device will be sent to the rest of the cluster.": "Los ficheros son protegidos por los cambios hechos en otros dispositivos, pero los cambios hechos en este dispositivo serĂĄn enviados al resto del grupo (cluster).",
|
||||
"Folder": "Carpeta",
|
||||
@@ -76,7 +85,9 @@
|
||||
"GUI Authentication Password": "Password de la Interfaz GrĂĄfica de Usuario (GUI)",
|
||||
"GUI Authentication User": "AutentificaciĂłn de usuario de la Interfaz GrĂĄfica de Usuario (GUI)",
|
||||
"GUI Listen Addresses": "Direcciones de escucha de la Interfaz GrĂĄfica de Usuario (GUI)",
|
||||
"GUI Theme": "Tema GUI",
|
||||
"Generate": "Generar",
|
||||
"Global Changes": "Cambios globales",
|
||||
"Global Discovery": "Descubrimiento global",
|
||||
"Global Discovery Servers": "Servidores Globales de Descubrimiento",
|
||||
"Global State": "Estado global",
|
||||
@@ -87,6 +98,7 @@
|
||||
"Ignore Permissions": "Permisos a ignorar",
|
||||
"Incoming Rate Limit (KiB/s)": "LĂmite de descarga (KiB/s)",
|
||||
"Incorrect configuration may damage your folder contents and render Syncthing inoperable.": "Una configuración incorrecta puede dañar los contenidos de la carpeta y hacer que Syncthing no funcione.",
|
||||
"Introduced By": "Introducido por",
|
||||
"Introducer": "Presentador",
|
||||
"Inversion of the given condition (i.e. do not exclude)": "InversiĂłn de la condiciĂłn dada (por ejemplo, \"no excluir\")",
|
||||
"Keep Versions": "Mantener versiones",
|
||||
@@ -95,6 +107,8 @@
|
||||
"Last Scan": "Ăltimo escaneo",
|
||||
"Last seen": "Visto por Ășltima vez",
|
||||
"Later": "MĂĄs tarde",
|
||||
"Latest Change": "Ăltimo Cambio",
|
||||
"Learn more": "Saber mĂĄs",
|
||||
"Listeners": "Oyentes",
|
||||
"Local Discovery": "Descubrimiento local",
|
||||
"Local State": "Estado local",
|
||||
@@ -112,6 +126,7 @@
|
||||
"Newest First": "El mĂĄs nuevo primero",
|
||||
"No": "No",
|
||||
"No File Versioning": "Sin versionado de fichero",
|
||||
"No upgrades": "Sin actualizaciones",
|
||||
"Normal": "Normal",
|
||||
"Notice": "Aviso",
|
||||
"OK": "OK",
|
||||
@@ -123,9 +138,12 @@
|
||||
"Out of Sync Items": "Elementos no sincronizados",
|
||||
"Outgoing Rate Limit (KiB/s)": "LĂmite de subida (KiB/s)",
|
||||
"Override Changes": "Anular cambios",
|
||||
"Path": "Parche",
|
||||
"Path to the folder on the local computer. Will be created if it does not exist. The tilde character (~) can be used as a shortcut for": "Ruta a la carpeta en la mĂĄquina local. Se crearĂĄ si no existe. El carĂĄcter de la tilde (~) puede usarse como atajo.",
|
||||
"Path where versions should be stored (leave empty for the default .stversions directory in the shared folder).": "Path where versions should be stored (leave empty for the default .stversions directory in the shared folder).",
|
||||
"Path where versions should be stored (leave empty for the default .stversions folder in the folder).": "Ruta donde se almacenarĂĄn las versiones (dejar vacĂo para usar la carpeta por defecto \".stversions\").",
|
||||
"Pause": "Pausar",
|
||||
"Pause All": "Pausar todo",
|
||||
"Paused": "Pausado",
|
||||
"Please consult the release notes before performing a major upgrade.": "Por favor, consultar las notas de la versiĂłn antes de realizar una actualizaciĂłn importante.",
|
||||
"Please set a GUI Authentication User and Password in the Settings dialog.": "Por favor, introduzca un Usuario y Contraseña para la Autenticación de la Interfaz de Usuario en el panel de Ajustes.",
|
||||
@@ -135,8 +153,9 @@
|
||||
"Quick guide to supported patterns": "GuĂa rĂĄpida de patrones soportados",
|
||||
"RAM Utilization": "Uso de RAM",
|
||||
"Random": "Aleatorio",
|
||||
"Reduced by ignore patterns": "Reduced by ignore patterns",
|
||||
"Reduced by ignore patterns": "Reducido por patrones de ignorar",
|
||||
"Release Notes": "Notas de la versiĂłn",
|
||||
"Release candidates contain the latest features and fixes. They are similar to the traditional bi-weekly Syncthing releases.": "Las versiones candidatas contienen las Ășltimas funcionalidades y correcciones. Son similares a las tradicionales versiones bisemanales de Syncthing.",
|
||||
"Remote Devices": "Otros dispositivos",
|
||||
"Remove": "Eliminar",
|
||||
"Required identifier for the folder. Must be the same on all cluster devices.": "Identificador requerido para la carpeta. Debe ser el mismo en todos los dispositivos del clĂșster.",
|
||||
@@ -147,12 +166,15 @@
|
||||
"Restart Needed": "Reinicio necesario",
|
||||
"Restarting": "Reiniciando",
|
||||
"Resume": "Continuar",
|
||||
"Resume All": "Continuar todo",
|
||||
"Reused": "Reutilizado",
|
||||
"Save": "Guardar",
|
||||
"Scan Time Remaining": "Tiempo Restante de Escaneo",
|
||||
"Scanning": "Analizando",
|
||||
"Select the devices to share this folder with.": "Selecciona los dispositivos con los que compartir esta carpeta.",
|
||||
"Select the folders to share with this device.": "Selecciona las carpetas para compartir con este dispositivo.",
|
||||
"Send & Receive": "Enviar y Recibir",
|
||||
"Send Only": "Solo Enviar",
|
||||
"Settings": "Ajustes",
|
||||
"Share": "Compartir",
|
||||
"Share Folder": "Compartir carpeta",
|
||||
@@ -170,6 +192,9 @@
|
||||
"Single level wildcard (matches within a directory only)": "ComodĂn de nivel Ășnico (coincide solamente dentro de un directorio)",
|
||||
"Smallest First": "El mås pequeño primero",
|
||||
"Source Code": "CĂłdigo fuente",
|
||||
"Stable releases and release candidates": "Versiones estables y versiones candidatas",
|
||||
"Stable releases are delayed by about two weeks. During this time they go through testing as release candidates.": "Las versiones estables son publicadas cada dos semanas. Durante este tiempo son probadas como versiones candidatas.",
|
||||
"Stable releases only": "Solo versiones estables",
|
||||
"Staggered File Versioning": "Versionado escalonado de fichero",
|
||||
"Start Browser": "Iniciar el navegador",
|
||||
"Statistics": "EstadĂsticas",
|
||||
@@ -210,7 +235,9 @@
|
||||
"This Device": "Este Dispositivo",
|
||||
"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 is a major version upgrade.": "Hay una actualizaciĂłn importante.",
|
||||
"Time": "Hora",
|
||||
"Trash Can File Versioning": "Versionado de archivos de la papelera",
|
||||
"Type": "Tipo",
|
||||
"Unknown": "Desconocido",
|
||||
"Unshared": "No compartido",
|
||||
"Unused": "No usado",
|
||||
@@ -221,18 +248,24 @@
|
||||
"Upgrading": "Actualizando",
|
||||
"Upload Rate": "Velocidad de subida",
|
||||
"Uptime": "Tiempo de funcionamiento",
|
||||
"Usage reporting is always enabled for candidate releases.": "El informe de uso estĂĄ siempre habilitado en las versiones candidatas.",
|
||||
"Use HTTPS for GUI": "Usar HTTPS para la Interfaz GrĂĄfica de Usuario (GUI)",
|
||||
"Version": "VersiĂłn",
|
||||
"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.",
|
||||
"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}}).",
|
||||
"Warning, this path is a subdirectory of an existing folder \"{%otherFolder%}\".": "Peligro! Esta ruta es un subdirectorio de una carpeta ya existente llamada \"{{otherFolder}}\".",
|
||||
"Warning, this path is a subdirectory of an existing folder \"{%otherFolderLabel%}\" ({%otherFolder%}).": "Peligro, esta ruta es un subdirectorio de una carpeta ya existente llamada \"{{otherFolderLabel}}\" ({{otherFolder}}).",
|
||||
"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",
|
||||
"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.",
|
||||
"You must keep at least one version.": "Debes mantener al menos una versiĂłn.",
|
||||
"days": "dĂas",
|
||||
"directories": "directories",
|
||||
"files": "files",
|
||||
"directories": "directorios",
|
||||
"files": "archivos",
|
||||
"full documentation": "DocumentaciĂłn completa",
|
||||
"items": "Elementos",
|
||||
"{%device%} wants to share folder \"{%folder%}\".": "{{device}} quiere compartir la carpeta \"{{folder}}\".",
|
||||
|
||||
@@ -4,11 +4,12 @@
|
||||
"A new major version may not be compatible with previous versions.": "Una versiĂłn mĂĄs reciente puede no ser compatible con las versiones anteriores.",
|
||||
"API Key": "Clave API",
|
||||
"About": "Acerca de",
|
||||
"Action": "AcciĂłn ",
|
||||
"Actions": "Acciones",
|
||||
"Add": "Agregar",
|
||||
"Add Device": "Agregar Dispositivo",
|
||||
"Add Folder": "Agregar Repositorio",
|
||||
"Add Remote Device": "Añadir un dispositivo",
|
||||
"Add Remote Device": "Agregar Dispositivo Remoto",
|
||||
"Add new folder?": "ÂżAgregar nueva carpeta?",
|
||||
"Address": "DirecciĂłn",
|
||||
"Addresses": "Direcciones",
|
||||
@@ -18,9 +19,11 @@
|
||||
"All Data": "Todos los datos",
|
||||
"Allow Anonymous Usage Reporting?": "Permitir reporte anĂłnimo de uso?",
|
||||
"Alphabetic": "Alfabético",
|
||||
"An external command handles the versioning. It has to remove the file from the shared folder.": "An external command handles the versioning. It has to remove the file from the shared folder.",
|
||||
"An external command handles the versioning. It has to remove the file from the synced folder.": "Un comando exterior maneja el control de versiones. Ăste tiene que eliminar el archivo de la carpeta sincronizada.",
|
||||
"Anonymous Usage Reporting": "Reporte anĂłnimo de uso",
|
||||
"Any devices configured on an introducer device will be added to this device as well.": "Cualquier dispositivo configurado en un dispositivo introductor serå también agregado a tu propio dispositivo.",
|
||||
"Automatic upgrade now offers the choice between stable releases and release candidates.": "La actualizaciĂłn automĂĄtica ofrece la opciĂłn entre versiones estables y versiones preliminares.",
|
||||
"Automatic upgrades": "Actualizaciones automĂĄticas",
|
||||
"Be careful!": "ÂĄSĂ© cuidadoso!",
|
||||
"Bugs": "Errores",
|
||||
@@ -37,8 +40,10 @@
|
||||
"Copied from elsewhere": "Copiado desde otra parte.",
|
||||
"Copied from original": "Copiado del original",
|
||||
"Copyright © 2014-2016 the following Contributors:": "Copyright © 2014-2016 los siguientes contribuidores:",
|
||||
"Copyright © 2014-2017 the following Contributors:": "Copyright © 2014-2017 los siguientes contribuidores:",
|
||||
"Danger!": "Peligro!",
|
||||
"Deleted": "Suprimido",
|
||||
"Device": "Dispositivo",
|
||||
"Device \"{%name%}\" ({%device%} at {%address%}) wants to connect. Add new device?": "Dispositivo \"{{name}}\" ({{device}} en {{address}}) quiere conectar. ¿Añadir nuevo dispositivo?",
|
||||
"Device ID": "ID del dispositivo",
|
||||
"Device Identification": "IdentificaciĂłn del dispositivo",
|
||||
@@ -52,6 +57,8 @@
|
||||
"Downloaded": "Descargado",
|
||||
"Downloading": "Descargando",
|
||||
"Edit": "Editar",
|
||||
"Edit Device": "Cambiando dispositivo",
|
||||
"Edit Folder": "Cambiando repositorio",
|
||||
"Editing": "Editando",
|
||||
"Enable NAT traversal": "Habilitar NAT trasversal",
|
||||
"Enable Relaying": "Habilitar RetransmisiĂłn",
|
||||
@@ -63,7 +70,9 @@
|
||||
"File Pull Order": "Orden para coger ficheros",
|
||||
"File Versioning": "Control de versiones",
|
||||
"File permission bits are ignored when looking for changes. Use on FAT file systems.": "Los permisos de archivo son ignorados al buscar cambios. Usar el sistemas de archivos FAT.",
|
||||
"Files are moved to .stversions directory when replaced or deleted by Syncthing.": "Files are moved to .stversions directory when replaced or deleted by Syncthing.",
|
||||
"Files are moved to .stversions folder when replaced or deleted by Syncthing.": "Los archivos son movidos al directorio .stversions cuando son reemplazados o eliminados por Syncthing. Sus caminos de accesos relativos son recreados aquĂ si necesidad. ",
|
||||
"Files are moved to date stamped versions in a .stversions directory when replaced or deleted by Syncthing.": "Files are moved to date stamped versions in a .stversions directory when replaced or deleted by Syncthing.",
|
||||
"Files are moved to date stamped versions in a .stversions folder when replaced or deleted by Syncthing.": "Lo archivos son movidos al directorio .stversions y renombrados a versiones marcadas por fecha cuando son reemplazados o eliminados por Syncthing, Sus caminos de accesos relativos son recreados aquĂ si necesidad.",
|
||||
"Files are protected from changes made on other devices, but changes made on this device will be sent to the rest of the cluster.": "Los archivos estĂĄn protegidos frente a los cambios realizados en otros dispositivos, peros los cambios realizados en este dispositivo serĂĄn envĂados al resto del grupo",
|
||||
"Folder": "Repositorio",
|
||||
@@ -76,7 +85,9 @@
|
||||
"GUI Authentication Password": "Contraseña de autenticación de la GUI",
|
||||
"GUI Authentication User": "Usuario de la GUI",
|
||||
"GUI Listen Addresses": "Direcciones de escucha para la GUI.",
|
||||
"GUI Theme": "Apariencia de la GUI",
|
||||
"Generate": "Generar",
|
||||
"Global Changes": "Ăltimas modificaciones",
|
||||
"Global Discovery": "BĂșsqueda en internet",
|
||||
"Global Discovery Servers": "Servidores globales de identificaciĂłn",
|
||||
"Global State": "Estado global",
|
||||
@@ -87,6 +98,7 @@
|
||||
"Ignore Permissions": "Ignorar permisos",
|
||||
"Incoming Rate Limit (KiB/s)": "LĂmite de velocidad de entrada (KiB/s)",
|
||||
"Incorrect configuration may damage your folder contents and render Syncthing inoperable.": "Configuración incorrecta puede dañar los contenidos de la carpeta y hacer Syncthing inoperable.",
|
||||
"Introduced By": "Introducido por",
|
||||
"Introducer": "Dispositivo introductor",
|
||||
"Inversion of the given condition (i.e. do not exclude)": "InversiĂłn de la condiciĂłn dada (es decir, no excluir)",
|
||||
"Keep Versions": "Conservar versiones",
|
||||
@@ -95,6 +107,8 @@
|
||||
"Last Scan": "Ăltimo escaneo",
|
||||
"Last seen": "Visto por ultima vez",
|
||||
"Later": "MĂĄs tarde",
|
||||
"Latest Change": "Ăltimo cambio",
|
||||
"Learn more": "Saber mĂĄs",
|
||||
"Listeners": "Receptor",
|
||||
"Local Discovery": "BĂșsqueda en red local",
|
||||
"Local State": "Estado local",
|
||||
@@ -112,6 +126,7 @@
|
||||
"Newest First": "Nuevo primero",
|
||||
"No": "No",
|
||||
"No File Versioning": "Sin control de versiones de archivos",
|
||||
"No upgrades": "No actualizaciones",
|
||||
"Normal": "Normal",
|
||||
"Notice": "Aviso",
|
||||
"OK": "OK",
|
||||
@@ -123,9 +138,12 @@
|
||||
"Out of Sync Items": "Ătems no sincronizados",
|
||||
"Outgoing Rate Limit (KiB/s)": "Tasa mĂĄxima de envĂo (KiB/s)",
|
||||
"Override Changes": "Reemplazar los cambios",
|
||||
"Path": "Ruta",
|
||||
"Path to the folder on the local computer. Will be created if it does not exist. The tilde character (~) can be used as a shortcut for": "Ruta del repositorio en el equipo local. SerĂĄ creado si no existe. El carĂĄcter tilde (~) puede ser utilizado como atajo de ",
|
||||
"Path where versions should be stored (leave empty for the default .stversions directory in the shared folder).": "Path where versions should be stored (leave empty for the default .stversions directory in the shared folder).",
|
||||
"Path where versions should be stored (leave empty for the default .stversions folder in the folder).": "Ruta donde serĂĄn guardas las versiones (dejar vacĂo para usar el directorio predifinido \".stversions\" en el repositorio)",
|
||||
"Pause": "Pausa",
|
||||
"Pause All": "Todos en pausa",
|
||||
"Paused": "En pausa",
|
||||
"Please consult the release notes before performing a major upgrade.": "Por favor consulta las notas de lanzamiento antes de realizar una actualizacĂłn mayor.",
|
||||
"Please set a GUI Authentication User and Password in the Settings dialog.": "Por favor, establece un Usuario y Contraseña de Autenticación en la GUI en el diålogo de Configuración",
|
||||
@@ -137,6 +155,7 @@
|
||||
"Random": "Aleatorio",
|
||||
"Reduced by ignore patterns": "(Restringido por patrones de exclusiĂłn)",
|
||||
"Release Notes": "Notas de lanzamiento",
|
||||
"Release candidates contain the latest features and fixes. They are similar to the traditional bi-weekly Syncthing releases.": "Las versiones preliminares contienen las Ășltimas funcionalidades y los Ășltimos correctivos. Son idĂ©nticas a las actualizaciones bimensuales tradicionales.",
|
||||
"Remote Devices": "Otros dispositivos",
|
||||
"Remove": "Eliminar",
|
||||
"Required identifier for the folder. Must be the same on all cluster devices.": "IdentificaciĂłn requerida para la carpeta. Debe ser la misma en todos los dispositivos del grupo.",
|
||||
@@ -147,12 +166,15 @@
|
||||
"Restart Needed": "Es necesario reiniciar",
|
||||
"Restarting": "Reiniciando",
|
||||
"Resume": "Reanudar",
|
||||
"Resume All": "Reanudar todos",
|
||||
"Reused": "Reutilizado",
|
||||
"Save": "Guardar",
|
||||
"Scan Time Remaining": "Tiempo de Escaneo Restante",
|
||||
"Scanning": "ActualizaciĂłn",
|
||||
"Select the devices to share this folder with.": "Seleccione los dispositivos con los cuales compartir este repositorio.",
|
||||
"Select the folders to share with this device.": "Seleccione los repositorios para compartir con este dispositivo.",
|
||||
"Send & Receive": "EnvĂo y recepciĂłn",
|
||||
"Send Only": "EnvĂo (lectura sola)",
|
||||
"Settings": "ConfiguraciĂłn",
|
||||
"Share": "Compartir",
|
||||
"Share Folder": "Compartir repositorio",
|
||||
@@ -170,6 +192,9 @@
|
||||
"Single level wildcard (matches within a directory only)": "CarĂĄcter comodĂn de un solo nivel (coincide sĂłlo dentro de un directorio)",
|
||||
"Smallest First": "Mås pequeño primero",
|
||||
"Source Code": "CĂłdigo fuente",
|
||||
"Stable releases and release candidates": "Versiones stables y preliminares",
|
||||
"Stable releases are delayed by about two weeks. During this time they go through testing as release candidates.": "Las versiones estables son trasladadas de cerca de dos semanas. Durante este tiempo son sometidas a un test como versiones preliminares.",
|
||||
"Stable releases only": "Versiones estables solamente",
|
||||
"Staggered File Versioning": "Versiones del archivo escalonado",
|
||||
"Start Browser": "Iniciar navegador",
|
||||
"Statistics": "EstadĂsticas",
|
||||
@@ -210,7 +235,9 @@
|
||||
"This Device": "Este Dispositivo",
|
||||
"This can easily give hackers access to read and change any files on your computer.": "Esto puede darle permiso a los hackers, podrån acceder a cualquier archivo, pudiéndolos leer y editar.",
|
||||
"This is a major version upgrade.": "Esta es una actualizaciĂłn de version mayor.",
|
||||
"Time": "Tiempo",
|
||||
"Trash Can File Versioning": "Versiones como cubo de basura",
|
||||
"Type": "Tipo",
|
||||
"Unknown": "Desconocido",
|
||||
"Unshared": "No compartido",
|
||||
"Unused": "No utilizado",
|
||||
@@ -221,14 +248,20 @@
|
||||
"Upgrading": "Actualizando",
|
||||
"Upload Rate": "Tasa de subida",
|
||||
"Uptime": "Tiempo en funcionamiento",
|
||||
"Usage reporting is always enabled for candidate releases.": "Reportes anĂłnimos de uso siempre estan enviados en las versions preliminares.",
|
||||
"Use HTTPS for GUI": "Usar HTTPS para la GUI",
|
||||
"Version": "VersiĂłn",
|
||||
"Versions Path": "Ruta de 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 eliminan automĂĄticamente si son mayores de la edad mĂĄxima o mayor que el nĂșmero de archivos permitidos en un intervalo.",
|
||||
"Warning, this path is a parent directory of an existing folder \"{%otherFolder%}\".": "AtenciĂłn, esta ruta es un repertorio allegado por lo menos de un reparto existente (por ejemplo \" {{otherFolder}} \"). Si usted continĂșa, usted deberĂa crear un nuevo subdirectorio, si no esto puede causar problemas tales como duplicaciones y/o supresiones intempestivas de ficheros.",
|
||||
"Warning, this path is a parent directory of an existing folder \"{%otherFolderLabel%}\" ({%otherFolder%}).": "AtenciĂłn, esta ruta es un repertorio allegado por lo menos de un reparto existente (por ejemplo \" {{otherFolderLabel}} \" ({{otherFolder}})). Si usted continĂșa, usted deberĂa crear un nuevo subdirectorio, si no esto puede causar problemas tales como duplicaciones y/o supresiones intempestivas de ficheros.",
|
||||
"Warning, this path is a subdirectory of an existing folder \"{%otherFolder%}\".": "AtenciĂłn, esta direcciĂłn es un subdirectorio de un directorio existente \"{{otherFolder}}\".",
|
||||
"Warning, this path is a subdirectory of an existing folder \"{%otherFolderLabel%}\" ({%otherFolder%}).": "ATENCIĂN, esta ruta es un subdirectorio del reparto existente \" {{otherFolderLabel}} \" ({{otherFolder}}). Esto puede causar problemas tales como duplicaciones y/o supresiones intempestivas de ficheros.",
|
||||
"When adding a new device, keep in mind that this device must be added on the other side too.": "Al agregar un nuevo dispositivo, tenga en cuenta que este dispositivo se debe agregar en el otro lado tambié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.": "Al agregar un nuevo repositorio, tenga en cuenta que la ID del repositorio se utiliza para conectar los repositorios entre dispositivos. Se distingue entre mayĂșsculas y minĂșsculas y debe ser exactamente igual en todos los dispositivos.",
|
||||
"Yes": "SĂ",
|
||||
"You can change your choice at any time in the Settings dialog.": "Usted puede cambiar su elecciĂłn en el cuadro de diĂĄlogo ConfiguraciĂłn.",
|
||||
"You can read more about the two release channels at the link below.": "Usted puede saber mĂĄs sobre ambos canales de distribuciĂłn vĂa el lazo mĂĄs abajo.",
|
||||
"You must keep at least one version.": "Debe mantener al menos una versiĂłn",
|
||||
"days": "dĂas",
|
||||
"directories": "directorios",
|
||||
|
||||
@@ -1,44 +1,49 @@
|
||||
{
|
||||
"A device with that ID is already added.": "Id horrekin beste talde bat gehitu da.",
|
||||
"A negative number of days doesn't make sense.": "Hemen 0 edo zenbaki positiboa ,mesedez.",
|
||||
"A device with that ID is already added.": "Id hori duen tresna bat jadanik bada",
|
||||
"A negative number of days doesn't make sense.": "0 edo zenbaki positiboa onartzen da bakarrik",
|
||||
"A new major version may not be compatible with previous versions.": "Aldaketa garrantzitsuak dituen bertsio berria beharbada ez da bateragarria izango bertsio zaharragoekin.",
|
||||
"API Key": "API giltza",
|
||||
"About": "Egoki",
|
||||
"About": "Honi buruz",
|
||||
"Action": "Ekintza",
|
||||
"Actions": "Egintzak",
|
||||
"Add": "Gaineratu",
|
||||
"Add Device": "Gaineratu makina",
|
||||
"Add Folder": "Gaineratu partekatze",
|
||||
"Add Remote Device": "Gaineratu makinan izan",
|
||||
"Add new folder?": "Gaineratu hau partekatze ?",
|
||||
"Address": "Helbide",
|
||||
"Addresses": "Helbidek",
|
||||
"Advanced": "Aditu",
|
||||
"Advanced Configuration": "Konfigurazio aintzinatua",
|
||||
"Advanced settings": "Ezarpen aurreratuak",
|
||||
"Add": "Gehitu",
|
||||
"Add Device": "Tresna gehitu",
|
||||
"Add Folder": "Karpeta gehitu",
|
||||
"Add Remote Device": "Urruneko tresna bat gehitu",
|
||||
"Add new folder?": "Karpeta berria gehitu?",
|
||||
"Address": "Helbidea",
|
||||
"Addresses": "Helbideak",
|
||||
"Advanced": "Aitzinatua",
|
||||
"Advanced Configuration": "Konfigurazio aitzinatua",
|
||||
"Advanced settings": "Parametro aitzinatuak",
|
||||
"All Data": "Datu guziak",
|
||||
"Allow Anonymous Usage Reporting?": "Izenik gabeko erabiltze erreportak baimendu",
|
||||
"Allow Anonymous Usage Reporting?": "Izenik gabeko erabiltze erreportak baimendu?",
|
||||
"Alphabetic": "Alfabetikoa",
|
||||
"An external command handles the versioning. It has to remove the file from the synced folder.": "Kanpoko kontrolagailu batek bertsioak erabiltzen ditu. Fitxeroak errepertorio sinkronizatutik desagertaraztea berari doakio.",
|
||||
"An external command handles the versioning. It has to remove the file from the shared folder.": "An external command handles the versioning. It has to remove the file from the shared folder.",
|
||||
"An external command handles the versioning. It has to remove the file from the synced folder.": "Kanpoko kontrolagailu batek fitxeroen bertsioak erabiltzen ditu. Fitxeroak errepertorio sinkronizatutik desagertaraztea berari doakio.",
|
||||
"Anonymous Usage Reporting": "Izenik gabeko erabiltze erreportak",
|
||||
"Any devices configured on an introducer device will be added to this device as well.": "Sarrarazle batean sartua izanen edozein tresna dena huntan ere izanen da.",
|
||||
"Automatic upgrades": "Aktualizatze automatikoak",
|
||||
"Be careful!": "Kasu!",
|
||||
"Bugs": "Akatsek",
|
||||
"CPU Utilization": "Prozesadore erabiltze",
|
||||
"Changelog": "Bertsio historia",
|
||||
"Any devices configured on an introducer device will be added to this device as well.": "Sarrarazle deitzen duzun tresna batean gehitua izanen den edozein tresna, zurean ere gehitua izanen da.",
|
||||
"Automatic upgrade now offers the choice between stable releases and release candidates.": "Eguneratze automatiko sistemak iraunkor ala aitzin bertsioen arteko aukera proposatzen du",
|
||||
"Automatic upgrades": "Eguneratze automatikoak",
|
||||
"Be careful!": "Kasu emazu!",
|
||||
"Bugs": "Akatsak",
|
||||
"CPU Utilization": "Prozesadorearen erabiltzea",
|
||||
"Changelog": "Bertsioen historia",
|
||||
"Clean out after": "Garbi âŠ. epearen ondotik",
|
||||
"Close": "Ezeztatu",
|
||||
"Close": "Hetsi",
|
||||
"Command": "Kontrolagailua",
|
||||
"Comment, when used at the start of a line": "Komentarioa, lerro baten hastean delarik",
|
||||
"Compression": "Trinkotze",
|
||||
"Configured": "Konfiguratua",
|
||||
"Connection Error": "Konexio hutsa",
|
||||
"Connection Type": "Konexion mota",
|
||||
"Connection Type": "Konexio mota",
|
||||
"Copied from elsewhere": "Beste nunbaitik kopiatua",
|
||||
"Copied from original": "Kopiatua jatorrizkoatik",
|
||||
"Copied from original": "Jatorrizkotik kopiatua",
|
||||
"Copyright © 2014-2016 the following Contributors:": "Copyright 2014-2016, ekarle hauk:",
|
||||
"Danger!": "Lanjer !",
|
||||
"Deleted": "Ezeztatu",
|
||||
"Copyright © 2014-2017 the following Contributors:": "Copyright 2014-2017, ekarle hauk:",
|
||||
"Danger!": "Lanjera !",
|
||||
"Deleted": "Kendua",
|
||||
"Device": "Tresna",
|
||||
"Device \"{%name%}\" ({%device%} at {%address%}) wants to connect. Add new device?": "Makina \"{{name}}\" ({{device}} izan {{address}}) konektatu nahi du. Gaineratu berri makina ?",
|
||||
"Device ID": "Makina ID",
|
||||
"Device Identification": "Tresnaren identifikazioa",
|
||||
@@ -52,10 +57,12 @@
|
||||
"Downloaded": "Telekargatua",
|
||||
"Downloading": "Deskargatze",
|
||||
"Edit": "Aldatu",
|
||||
"Edit Device": "Aldaketa tresna",
|
||||
"Edit Folder": "Aldaketa partekatze",
|
||||
"Editing": "Aldaketa",
|
||||
"Enable NAT traversal": "Ahalbidetu NAT",
|
||||
"Enable Relaying": "Ahalbidetu lekua hartu",
|
||||
"Enter comma separated (\"tcp://ip:port\", \"tcp://host:port\") addresses or \"dynamic\" to perform automatic discovery of the address.": " (\"tcp://ip:port\" ou \"tcp://nom:port\") zuzenbideak sar, krakotx batez separatuak edo bestenaz \"dynamic\", zuzenbidearen xekatze automatikoa aktibatzeko\nTu peux traduire nom et port dans la parenthĂšse, c'est pas des variables du programme, juste du texte explicatif",
|
||||
"Enter comma separated (\"tcp://ip:port\", \"tcp://host:port\") addresses or \"dynamic\" to perform automatic discovery of the address.": " (\"tcp://ip:port\", \"tcp://nom:port\") zuzenbideak sar, krakotx batez separatuak edo bestenaz \"dynamic\", zuzenbidearen xekatze automatikoa aktibatzeko\nTu peux traduire nom et port mot Ă mot dans la parenthĂšse, c'est pas des variables du programme, juste du texte explicatif",
|
||||
"Enter ignore patterns, one per line.": "Ezkluzio filtroak sar, lerro batean bakar bat",
|
||||
"Error": "Huts",
|
||||
"External File Versioning": "Fitxero bertsioen kanpoko kudeaketa",
|
||||
@@ -63,7 +70,9 @@
|
||||
"File Pull Order": "Fitxategiak irekitzeko agindua",
|
||||
"File Versioning": "Artxiboak babesteko metodoa",
|
||||
"File permission bits are ignored when looking for changes. Use on FAT file systems.": "Aldaketa bilaketetan fitxero baimenen bitak ez dira kontuan hartuko. Fitxero FAT sistimetan erabilia.",
|
||||
"Files are moved to .stversions directory when replaced or deleted by Syncthing.": "Files are moved to .stversions directory when replaced or deleted by Syncthing.",
|
||||
"Files are moved to .stversions folder when replaced or deleted by Syncthing.": ".stbersioak azpi karpetan lekutuko dira fitxeroak, Syncthing-ek aldatu edo ezeztatuko dituelarik. Beren helbide errelatiboak hor berean berriz sortuak izanen dira, behar balin bada",
|
||||
"Files are moved to date stamped versions in a .stversions directory when replaced or deleted by Syncthing.": "Files are moved to date stamped versions in a .stversions directory when replaced or deleted by Syncthing.",
|
||||
"Files are moved to date stamped versions in a .stversions folder when replaced or deleted by Syncthing.": ".stbersioak azpi karpetan lekutuko eta ordu-markatuko dira fitxeroak, Syncthing-ek aldatu edo ezeztatuko dituelarik. Beren helbide errelatiboak hor berean berriz sortuak izanen dira, behar balin bada",
|
||||
"Files are protected from changes made on other devices, but changes made on this device will be sent to the rest of the cluster.": "Beste tresnetan eginak izanen diren aldaketetatik zainduak izanen dira fitxeroak; haatik, tresna huntan egindako aldaketak besteeri hedatuak izanen dira",
|
||||
"Folder": "Partekatze",
|
||||
@@ -76,7 +85,9 @@
|
||||
"GUI Authentication Password": "Interfaze grafiko pasahitz",
|
||||
"GUI Authentication User": "Interfaze grafiko erabiltzaile",
|
||||
"GUI Listen Addresses": "Interfaze grafiko helbide",
|
||||
"GUI Theme": "GUI Theme",
|
||||
"Generate": "Sortu",
|
||||
"Global Changes": "Global Changes",
|
||||
"Global Discovery": "Aurkikuntza oso",
|
||||
"Global Discovery Servers": "Aurkikuntza oso zerbitzarik",
|
||||
"Global State": "Oso egoera",
|
||||
@@ -87,6 +98,7 @@
|
||||
"Ignore Permissions": "Baztertu baimenek",
|
||||
"Incoming Rate Limit (KiB/s)": "Deskargatze emari gehieneko (KiB/s)",
|
||||
"Incorrect configuration may damage your folder contents and render Syncthing inoperable.": "Langer !!!!",
|
||||
"Introduced By": "Introduced By",
|
||||
"Introducer": "Abiarazle",
|
||||
"Inversion of the given condition (i.e. do not exclude)": "Emana izan den baldintza alderantziz eman (i.e ez baztertu)",
|
||||
"Keep Versions": "Gorde bertsioak",
|
||||
@@ -95,6 +107,8 @@
|
||||
"Last Scan": "Azterketa azken",
|
||||
"Last seen": "Azken agerraldia",
|
||||
"Later": "Berantago",
|
||||
"Latest Change": "Asken aldaketa",
|
||||
"Learn more": "Learn more",
|
||||
"Listeners": "Entzungailuak",
|
||||
"Local Discovery": "Lekuko aurkikuntza",
|
||||
"Local State": "Lekuko egoera",
|
||||
@@ -112,6 +126,7 @@
|
||||
"Newest First": "Gehien gertatu berri lehen",
|
||||
"No": "Ez",
|
||||
"No File Versioning": "Ez babestu",
|
||||
"No upgrades": "No upgrades",
|
||||
"Normal": "Normal",
|
||||
"Notice": "Jakinaraztea",
|
||||
"OK": "Ados",
|
||||
@@ -123,20 +138,24 @@
|
||||
"Out of Sync Items": "Ez sinkronizatu elementuak",
|
||||
"Outgoing Rate Limit (KiB/s)": "Bidaltze emari gehieneko (KiB/s)",
|
||||
"Override Changes": "Aldaketak desegin",
|
||||
"Path to the folder on the local computer. Will be created if it does not exist. The tilde character (~) can be used as a shortcut for": "Bertako tresnaren karpetari buruzko bidea. Ez balin bada, asmatu beharko da bat. Tildea (~, edo ~+Espazioa Windows XP+Azerty-n) erabil litzateke bide motz gisa.",
|
||||
"Path": "Bidexka",
|
||||
"Path to the folder on the local computer. Will be created if it does not exist. The tilde character (~) can be used as a shortcut for": "Bertako tresnaren karpetari buruzko bidea. Ez balin bada, asmatu beharko da bat. Vous pouvez entrer un chemin absolu (p.ex \"/home/moi/Sync/Exemple\") ou relatif Ă celui du programme (p.ex \"..\\Partages\\Exemple\" - utile pour installation portable). Tildea (~, edo ~+Espazioa Windows XP+Azerty-n) erabil litzateke bide motz gisa",
|
||||
"Path where versions should be stored (leave empty for the default .stversions directory in the shared folder).": "Path where versions should be stored (leave empty for the default .stversions directory in the shared folder).",
|
||||
"Path where versions should be stored (leave empty for the default .stversions folder in the folder).": "Kopiak kontserbatzeko bidea (hutsa utzezazu, .stversioen karpetaren bide ohituan).",
|
||||
"Pause": "Pausa",
|
||||
"Pause All": "Pause All",
|
||||
"Paused": "Geldirik",
|
||||
"Please consult the release notes before performing a major upgrade.": "Aktualizatze garrantzitsu bat egin baino lehen, bertsioaren oharrak begira itzazu.",
|
||||
"Please set a GUI Authentication User and Password in the Settings dialog.": "Konfigurazio leihoan asma itzazu erabiltzale izen bat eta sartzeko giltza bat",
|
||||
"Please wait": "Oraino pazientzia pixka bat har ezazu",
|
||||
"Preview": "Aurrebista",
|
||||
"Preview Usage Report": "Erabiltze aurrebista",
|
||||
"Quick guide to supported patterns": "Filtro ez onartuen txostena",
|
||||
"Quick guide to supported patterns": "Filtro ez onartuen txostena :",
|
||||
"RAM Utilization": "RAM erabiltze",
|
||||
"Random": "Aleatorio",
|
||||
"Reduced by ignore patterns": "(Mugatu baztertzek patroikez)",
|
||||
"Release Notes": "Bertsioen notak",
|
||||
"Release candidates contain the latest features and fixes. They are similar to the traditional bi-weekly Syncthing releases.": "Release candidates contain the latest features and fixes. They are similar to the traditional bi-weekly Syncthing releases.",
|
||||
"Remote Devices": "Besteak makinak",
|
||||
"Remove": "Kendu",
|
||||
"Required identifier for the folder. Must be the same on all cluster devices.": "Partikatzearen erabilzaile izena. Diren tresna guzietan berdin berdina izan behar du",
|
||||
@@ -147,12 +166,15 @@
|
||||
"Restart Needed": "Berriz piztea beharrezkoa",
|
||||
"Restarting": "Berriz piztea martxan",
|
||||
"Resume": "Berriz hasi",
|
||||
"Resume All": "Resume All",
|
||||
"Reused": "Berriz erabilia",
|
||||
"Save": "Begiratu",
|
||||
"Scan Time Remaining": "Gelditzen den denbora azterketa",
|
||||
"Scanning": "Etengabeko azterketa",
|
||||
"Select the devices to share this folder with.": "Honekin sinkronizatua:",
|
||||
"Select the folders to share with this device.": "Tresna hunek erabiltzen dituen banaketak hauta",
|
||||
"Send & Receive": "Igorri & Artu",
|
||||
"Send Only": "Bakarrik igorri",
|
||||
"Settings": "Egokitzek",
|
||||
"Share": "Banatu",
|
||||
"Share Folder": "Banatu",
|
||||
@@ -170,6 +192,9 @@
|
||||
"Single level wildcard (matches within a directory only)": "Hein bakar bateko jokerra (karpetaren barnean bakarrik dagokiona)",
|
||||
"Smallest First": "Tipienak lehenik",
|
||||
"Source Code": "Iturri kode",
|
||||
"Stable releases and release candidates": "Stable releases and release candidates",
|
||||
"Stable releases are delayed by about two weeks. During this time they go through testing as release candidates.": "Stable releases are delayed by about two weeks. During this time they go through testing as release candidates.",
|
||||
"Stable releases only": "Stable releases only",
|
||||
"Staggered File Versioning": "Bertsio eskaleratuak",
|
||||
"Start Browser": "Web nabigatzailea pitz",
|
||||
"Statistics": "Statistikak",
|
||||
@@ -187,7 +212,7 @@
|
||||
"The aggregated statistics are publicly available at the URL below.": "Estadistikak zuzen bide honetan publikoki ikusgarri dira",
|
||||
"The configuration has been saved but not activated. Syncthing must restart to activate the new configuration.": "Konfigurazioa grabatua izan da bainan ez aktibatua. Syncthing berriz piztu behar da konfigurazio berriaren berriz aktibatzeko.",
|
||||
"The device ID cannot be blank.": "Tresnaren ID-a ez da hutsa izaiten ahal.",
|
||||
"The device ID to enter here can be found in the \"Actions > Show ID\" dialog on the other device. Spaces and dashes are optional (ignored).": "Tresnaren ID-a atxemaiten ahal da \"Ekintza> Tresna urrunduaren \"ID-a erakuts\" menuan. Espazio eta gioiak ez dira beharrezkoak.",
|
||||
"The device ID to enter here can be found in the \"Actions > Show ID\" dialog on the other device. Spaces and dashes are optional (ignored).": "Tresnaren ID-a atxemaiten ahal da \"Ekintzak > Tresna urrunduaren \"ID-a erakuts\" menuan. Espazio eta gioiak ez dira beharrezkoak.",
|
||||
"The encrypted usage report is sent daily. It is used to track common platforms, folder sizes and app versions. If the reported data set is changed you will be prompted with this dialog again.": "Erabileraren zifratu txostena egun guziz igorria da. Erabili diren plataformak, banaketeen neurriak eta aplikazioaren bertsioen zerendatzeko balio du.",
|
||||
"The entered device ID does not look valid. It should be a 52 or 56 character string consisting of letters and numbers, with spaces and dashes being optional.": "Sartu den tresnaren ID-ak iduri du ez duela balio. 52 edo 56-ko ezaugarriko kadena baten itxura behar luke, hizkiak, zifrak eta baita ere tarte edo gioiez egina",
|
||||
"The first command line parameter is the folder path and the second parameter is the relative path in the folder.": "Agingailu lerroaren lehen parametroa banatua den karpetaren bidea da, eta bigarrena karpetan den errelatibo bidea",
|
||||
@@ -210,7 +235,9 @@
|
||||
"This Device": "Makina hau",
|
||||
"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!",
|
||||
"This is a major version upgrade.": "Aktualizatze garrantzitsu bat da",
|
||||
"Time": "Denbora",
|
||||
"Trash Can File Versioning": "Zakarrontzia",
|
||||
"Type": "Mota",
|
||||
"Unknown": "Ez ezaguna",
|
||||
"Unshared": "Partekatu ez den",
|
||||
"Unused": "Ez baliatua",
|
||||
@@ -221,14 +248,20 @@
|
||||
"Upgrading": "Syncthing-en egunetaratzea",
|
||||
"Upload Rate": "Bidaltze emari",
|
||||
"Uptime": "Denbora ibiltze",
|
||||
"Usage reporting is always enabled for candidate releases.": "Usage reporting is always enabled for candidate releases.",
|
||||
"Use HTTPS for GUI": "HTTPS-a erabil GUI-arentzat",
|
||||
"Version": "Bertsio",
|
||||
"Versions Path": "Bertsioen egon tokia",
|
||||
"Versions are automatically deleted if they are older than the maximum age or exceed the number of files allowed in an interval.": "Bertsioak automatikoki ezeztatuak izanen dira, kontserbatzeko iraupen denbora pasatua badute edo bitartean onartua den kopurua gainditua balin bada",
|
||||
"Warning, this path is a parent directory of an existing folder \"{%otherFolder%}\".": "Warning, this path is a parent directory of an existing folder \"{{otherFolder}}\".",
|
||||
"Warning, this path is a parent directory of an existing folder \"{%otherFolderLabel%}\" ({%otherFolder%}).": "Warning, this path is a parent directory of an existing folder \"{{otherFolderLabel}}\" ({{otherFolder}}).",
|
||||
"Warning, this path is a subdirectory of an existing folder \"{%otherFolder%}\".": "Kasu emazu, \"{{otherFolder}}\" banaketa azpi-karpetaren bidea da. Arazoak emaiten ahal ditu, fitxero batzuen ezeztatze edo duplikatzeak batez ere.",
|
||||
"Warning, this path is a subdirectory of an existing folder \"{%otherFolderLabel%}\" ({%otherFolder%}).": "Kasu emazu, \"{{otherFolderLabel}}\" ({{otherFolder}}) banaketa azpi-karpetaren bidea da. Arazoak emaiten ahal ditu, fitxero batzuen ezeztatze edo duplikatzeak batez ere.",
|
||||
"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.": "Tresna bat gehitzen delarik, gogoan atxik ezazu bere IDa erabilia dela errepertorioak lotzeko tresnen bitartez. ID-a hautskorra da eta banatze huntan parte hartzen duten tresna guzietan berdina izanen da",
|
||||
"Yes": "Bai",
|
||||
"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.",
|
||||
"You must keep at least one version.": "Bertsio bat bederen behar duzu atxiki",
|
||||
"days": "Egunak",
|
||||
"directories": "karpetak",
|
||||
|
||||
@@ -4,6 +4,7 @@
|
||||
"A new major version may not be compatible with previous versions.": "Uusi pÀÀversio ei vÀlttÀmÀttÀ ole yhteensopiva aiempien versioiden kanssa.",
|
||||
"API Key": "API-avain",
|
||||
"About": "Tietoja",
|
||||
"Action": "Action",
|
||||
"Actions": "Muokkaa",
|
||||
"Add": "LisÀÀ",
|
||||
"Add Device": "LisÀÀ laite",
|
||||
@@ -18,9 +19,11 @@
|
||||
"All Data": "Kaikki data",
|
||||
"Allow Anonymous Usage Reporting?": "Salli anonyymi kÀyttöraportointi?",
|
||||
"Alphabetic": "Aakkosellinen",
|
||||
"An external command handles the versioning. It has to remove the file from the shared folder.": "An external command handles the versioning. It has to remove the file from the shared folder.",
|
||||
"An external command handles the versioning. It has to remove the file from the synced folder.": "Ulkoinen komento hallitsee versionnin. Sen tÀytyy poistaa tiedosto synkronoidusta kansiosta.",
|
||||
"Anonymous Usage Reporting": "Anonyymi kÀyttöraportointi",
|
||||
"Any devices configured on an introducer device will be added to this device as well.": "Kaikki esittelijÀksi mÀÀritetyn laitteen tuntemat laitteet lisÀtÀÀn myös tÀhÀn laitteeseen.",
|
||||
"Automatic upgrade now offers the choice between stable releases and release candidates.": "Automatic upgrade now offers the choice between stable releases and release candidates.",
|
||||
"Automatic upgrades": "Automaattiset pÀivitykset",
|
||||
"Be careful!": "Ole varovainen!",
|
||||
"Bugs": "Bugit",
|
||||
@@ -37,8 +40,10 @@
|
||||
"Copied from elsewhere": "Kopioitu muualta",
|
||||
"Copied from original": "Kopioitu alkuperÀisestÀ lÀhteestÀ",
|
||||
"Copyright © 2014-2016 the following Contributors:": "Copyright © 2014-2016 seuraavat avustajat",
|
||||
"Copyright © 2014-2017 the following Contributors:": "Copyright © 2014-2017 the following Contributors:",
|
||||
"Danger!": "Vaara!",
|
||||
"Deleted": "Poistettu",
|
||||
"Device": "Laite",
|
||||
"Device \"{%name%}\" ({%device%} at {%address%}) wants to connect. Add new device?": "Laite \"{{name}}\" {{device}} osoitteessa ({{address}}) haluaa yhdistÀÀ. LisÀÀ uusi laite?",
|
||||
"Device ID": "Laitteen ID",
|
||||
"Device Identification": "Laitteen tunniste",
|
||||
@@ -52,6 +57,8 @@
|
||||
"Downloaded": "Ladattu",
|
||||
"Downloading": "Ladataan",
|
||||
"Edit": "Muokkaa",
|
||||
"Edit Device": "Muokkaa laitetta",
|
||||
"Edit Folder": "Muokkaa kansiota",
|
||||
"Editing": "Muokkaus",
|
||||
"Enable NAT traversal": "Aktivoi osoitteenmuunnoksen kierto",
|
||||
"Enable Relaying": "Aktivoi yhteyden vÀlitys",
|
||||
@@ -63,7 +70,9 @@
|
||||
"File Pull Order": "Tiedostojen noutojÀrjestys",
|
||||
"File Versioning": "Tiedostoversiointi",
|
||||
"File permission bits are ignored when looking for changes. Use on FAT file systems.": "Tiedostojen oikeusbitit jÀtetÀÀn huomiotta etsittÀessÀ muutoksia. KÀytÀ FAT-tiedostojÀrjestelmissÀ.",
|
||||
"Files are moved to .stversions directory when replaced or deleted by Syncthing.": "Files are moved to .stversions directory when replaced or deleted by Syncthing.",
|
||||
"Files are moved to .stversions folder when replaced or deleted by Syncthing.": "Kun Syncthing poistaa tai korvaa tiedostoja, ne siirretÀÀn .stversions-hakemistoon.",
|
||||
"Files are moved to date stamped versions in a .stversions directory when replaced or deleted by Syncthing.": "Files are moved to date stamped versions in a .stversions directory when replaced or deleted by Syncthing.",
|
||||
"Files are moved to date stamped versions in a .stversions folder when replaced or deleted by Syncthing.": "Tiedostot siirretÀÀn pÀivÀmÀÀrÀllÀ merkityiksi versioiksi .stversions-kansioon, kun Syncthing korvaa tai poistaa ne.",
|
||||
"Files are protected from changes made on other devices, but changes made on this device will be sent to the rest of the cluster.": "Tiedostot on suojattu muilla laitteilla tehdyiltÀ muutoksilta, mutta tÀllÀ laitteella tehdyt muutokset lÀhetetÀÀn muuhun ryhmÀÀn.",
|
||||
"Folder": "Kansio",
|
||||
@@ -76,7 +85,9 @@
|
||||
"GUI Authentication Password": "GUI:n salasana",
|
||||
"GUI Authentication User": "GUI:n kÀyttÀjÀtunnus",
|
||||
"GUI Listen Addresses": "GUI:n kuunteluosoitteet",
|
||||
"GUI Theme": "GUI Theme",
|
||||
"Generate": "Generoi",
|
||||
"Global Changes": "Global Changes",
|
||||
"Global Discovery": "Globaali etsintÀ",
|
||||
"Global Discovery Servers": "Globaalit etsintÀpalvelimet",
|
||||
"Global State": "Globaali tila",
|
||||
@@ -87,6 +98,7 @@
|
||||
"Ignore Permissions": "JÀtÀ oikeudet huomiotta",
|
||||
"Incoming Rate Limit (KiB/s)": "SisÀÀntulevan liikenteen rajoitus (KiB/s)",
|
||||
"Incorrect configuration may damage your folder contents and render Syncthing inoperable.": "Virheelliset asetukset voivat vahingoittaa kansion sisÀltöÀ tai estÀÀ Syncthingin toiminnan.",
|
||||
"Introduced By": "Introduced By",
|
||||
"Introducer": "EsittelijÀ",
|
||||
"Inversion of the given condition (i.e. do not exclude)": "KÀÀnteinen ehto (t.s. ÀlÀ ohita)",
|
||||
"Keep Versions": "SÀilytÀ versiot",
|
||||
@@ -95,6 +107,8 @@
|
||||
"Last Scan": "Viimeisin skannaus",
|
||||
"Last seen": "NĂ€hty viimeksi",
|
||||
"Later": "Myöhemmin",
|
||||
"Latest Change": "Viimeisin muutos",
|
||||
"Learn more": "Learn more",
|
||||
"Listeners": "Kuuntelijat",
|
||||
"Local Discovery": "Paikallinen etsintÀ",
|
||||
"Local State": "Paikallinen tila",
|
||||
@@ -112,6 +126,7 @@
|
||||
"Newest First": "Uusin ensin",
|
||||
"No": "Ei",
|
||||
"No File Versioning": "Ei tiedostoversiointia",
|
||||
"No upgrades": "Ei pÀivityksiÀ",
|
||||
"Normal": "Normaali kansio",
|
||||
"Notice": "Huomautus",
|
||||
"OK": "OK",
|
||||
@@ -123,9 +138,12 @@
|
||||
"Out of Sync Items": "Kohteet, jotka eivÀt ole ajan tasalla",
|
||||
"Outgoing Rate Limit (KiB/s)": "UloslÀhtevÀn liikenteen rajoitus (KiB/s)",
|
||||
"Override Changes": "Ohita muutokset",
|
||||
"Path": "Path",
|
||||
"Path to the folder on the local computer. Will be created if it does not exist. The tilde character (~) can be used as a shortcut for": "Polku kansioon paikallisella tietokoneella. Kansio luodaan, ellei sitÀ ole olemassa. Tilde-merkkiÀ (~) voidaan kÀyttÀÀ oikotienÀ polulle",
|
||||
"Path where versions should be stored (leave empty for the default .stversions directory in the shared folder).": "Path where versions should be stored (leave empty for the default .stversions directory in the shared folder).",
|
||||
"Path where versions should be stored (leave empty for the default .stversions folder in the folder).": "Polku jonne versiot tullaan tallentamaan (jÀtÀ tyhjÀksi oletusvalintaa .stversions varten).",
|
||||
"Pause": "KeskeytÀ",
|
||||
"Pause All": "Pause All",
|
||||
"Paused": "Keskeytetty",
|
||||
"Please consult the release notes before performing a major upgrade.": "Tutustu julkaisutietoihin ennen kuin teet pÀÀversion pÀivityksen.",
|
||||
"Please set a GUI Authentication User and Password in the Settings dialog.": "Ole hyvÀ ja aseta kÀyttÀjÀtunnus ja salasana kÀyttöliittymÀÀ varten asetusvalikossa.",
|
||||
@@ -137,6 +155,7 @@
|
||||
"Random": "Satunnainen",
|
||||
"Reduced by ignore patterns": "VĂ€hennetty ohituslausekkeiden perusteella",
|
||||
"Release Notes": "Julkaisutiedot",
|
||||
"Release candidates contain the latest features and fixes. They are similar to the traditional bi-weekly Syncthing releases.": "Release candidates contain the latest features and fixes. They are similar to the traditional bi-weekly Syncthing releases.",
|
||||
"Remote Devices": "Laitteet",
|
||||
"Remove": "Poista",
|
||||
"Required identifier for the folder. Must be the same on all cluster devices.": "Pakollinen tunniste kansiolle, jonka tÀytyy olla sama kaikilla laitteilla.",
|
||||
@@ -147,12 +166,15 @@
|
||||
"Restart Needed": "UudelleenkÀynnistys tarvitaan",
|
||||
"Restarting": "KÀynnistetÀÀn uudelleen",
|
||||
"Resume": "Jatka",
|
||||
"Resume All": "Resume All",
|
||||
"Reused": "UudelleenkÀytetty",
|
||||
"Save": "Tallenna",
|
||||
"Scan Time Remaining": "Skannausaikaa jÀljellÀ",
|
||||
"Scanning": "Skannataan",
|
||||
"Select the devices to share this folder with.": "Valitse laitteet, joiden kanssa tÀmÀ kansio jaetaan.",
|
||||
"Select the folders to share with this device.": "Valitse kansiot jaettavaksi tÀmÀn laitteen kanssa.",
|
||||
"Send & Receive": "LÀhetÀ & vastaanota",
|
||||
"Send Only": "Vain lÀhetys",
|
||||
"Settings": "Asetukset",
|
||||
"Share": "Jaa",
|
||||
"Share Folder": "Jaa kansio",
|
||||
@@ -170,6 +192,9 @@
|
||||
"Single level wildcard (matches within a directory only)": "Yksitasoinen jokerimerkki (vaikuttaa vain kyseisen kansion sisÀllÀ)",
|
||||
"Smallest First": "Pienin ensin",
|
||||
"Source Code": "LĂ€hdekoodi",
|
||||
"Stable releases and release candidates": "Vakaat julkaisut ja julkaisuehdokkaat",
|
||||
"Stable releases are delayed by about two weeks. During this time they go through testing as release candidates.": "Stable releases are delayed by about two weeks. During this time they go through testing as release candidates.",
|
||||
"Stable releases only": "Vain vakaat julkaisut",
|
||||
"Staggered File Versioning": "Porrastettu tiedostoversiointi",
|
||||
"Start Browser": "KÀynnistÀ selain",
|
||||
"Statistics": "Tilastot",
|
||||
@@ -210,7 +235,9 @@
|
||||
"This Device": "TÀmÀ laite",
|
||||
"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 is a major version upgrade.": "TÀmÀ on pÀÀversion pÀivitys.",
|
||||
"Time": "Aika",
|
||||
"Trash Can File Versioning": "Roskakorin tiedostoversiointi",
|
||||
"Type": "Tyyppi",
|
||||
"Unknown": "Tuntematon",
|
||||
"Unshared": "Jakamaton",
|
||||
"Unused": "KÀyttÀmÀtön",
|
||||
@@ -221,14 +248,20 @@
|
||||
"Upgrading": "PÀivitetÀÀn",
|
||||
"Upload Rate": "LÀhetysmÀÀrÀ",
|
||||
"Uptime": "PÀÀllÀoloaika",
|
||||
"Usage reporting is always enabled for candidate releases.": "Usage reporting is always enabled for candidate releases.",
|
||||
"Use HTTPS for GUI": "KÀytÀ HTTPS:ÀÀ GUI:n kanssa",
|
||||
"Version": "Versio",
|
||||
"Versions Path": "Versioiden polku",
|
||||
"Versions are automatically deleted if they are older than the maximum age or exceed the number of files allowed in an interval.": "Versiot poistetaan automaattisesti mikÀli ne ovat vanhempia kuin maksimi-ikÀ tai niiden mÀÀrÀ ylittÀÀ sallitun mÀÀrÀn tietyllÀ aikavÀlillÀ.",
|
||||
"Warning, this path is a parent directory of an existing folder \"{%otherFolder%}\".": "Varoitus: tÀmÀ polku on olemassa olevan kansion \"{{otherFolder}}\" ylÀkansio.",
|
||||
"Warning, this path is a parent directory of an existing folder \"{%otherFolderLabel%}\" ({%otherFolder%}).": "Warning, this path is a parent directory of an existing folder \"{{otherFolderLabel}}\" ({{otherFolder}}).",
|
||||
"Warning, this path is a subdirectory of an existing folder \"{%otherFolder%}\".": "Varoitus: tÀmÀ polku on olemassa olevan kansion \"{{otherFolder}}\" alikansio.",
|
||||
"Warning, this path is a subdirectory of an existing folder \"{%otherFolderLabel%}\" ({%otherFolder%}).": "Warning, this path is a subdirectory of an existing folder \"{{otherFolderLabel}}\" ({{otherFolder}}).",
|
||||
"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À",
|
||||
"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.",
|
||||
"You must keep at least one version.": "Sinun tulee sÀilyttÀÀ ainakin yksi versio.",
|
||||
"days": "pÀivÀÀ",
|
||||
"directories": "kansiot",
|
||||
|
||||
@@ -4,6 +4,7 @@
|
||||
"A new major version may not be compatible with previous versions.": "Une nouvelle version majeure peut présenter des incompatibilités avec les versions antérieures.",
|
||||
"API Key": "Clé API",
|
||||
"About": "Ă propos",
|
||||
"Action": "Action",
|
||||
"Actions": "Actions",
|
||||
"Add": "Ajouter",
|
||||
"Add Device": "Ajouter l'appareil",
|
||||
@@ -18,14 +19,16 @@
|
||||
"All Data": "Toutes les données",
|
||||
"Allow Anonymous Usage Reporting?": "Autoriser l'envoi de statistiques d'utilisation anonymisées ?",
|
||||
"Alphabetic": "Alphabétique",
|
||||
"An external command handles the versioning. It has to remove the file from the shared folder.": "An external command handles the versioning. It has to remove the file from the shared folder.",
|
||||
"An external command handles the versioning. It has to remove the file from the synced folder.": "Une commande externe gÚre les versions de fichiers. Il lui incombe de supprimer les fichiers dans le répertoire synchronisé.",
|
||||
"Anonymous Usage Reporting": "Rapport anonyme de statistiques d'utilisation",
|
||||
"Any devices configured on an introducer device will be added to this device as well.": "Tout appareil ajouté sur un appareil introducteur sera aussi ajouté sur votre propre appareil.",
|
||||
"Any devices configured on an introducer device will be added to this device as well.": "Tout appareil ajouté sur un appareil que vous déclarez comme introducteur sera aussi ajouté sur votre propre appareil.",
|
||||
"Automatic upgrade now offers the choice between stable releases and release candidates.": "Le systÚme de mise à jour automatique propose le choix entre versions stables et versions préliminaires.",
|
||||
"Automatic upgrades": "Mises Ă jour automatiques",
|
||||
"Be careful!": "Faites attention !",
|
||||
"Bugs": "Bugs",
|
||||
"CPU Utilization": "Utilisation du CPU",
|
||||
"Changelog": "Historique des changements",
|
||||
"Changelog": "Historique des versions",
|
||||
"Clean out after": "Purger aprĂšs :",
|
||||
"Close": "Fermer",
|
||||
"Command": "Commande",
|
||||
@@ -37,8 +40,10 @@
|
||||
"Copied from elsewhere": "Copié d'ailleurs",
|
||||
"Copied from original": "Copié depuis l'original",
|
||||
"Copyright © 2014-2016 the following Contributors:": "Copyright © 2014-2016, les contributeurs suivants:",
|
||||
"Copyright © 2014-2017 the following Contributors:": "Copyright © 2014-2017, les contributeurs suivants :",
|
||||
"Danger!": "Attention !",
|
||||
"Deleted": "Supprimé",
|
||||
"Device": "Appareil",
|
||||
"Device \"{%name%}\" ({%device%} at {%address%}) wants to connect. Add new device?": "L'appareil \"{{name}}\" ({{device}} Ă l'IP {{address}}) souhaite se connecter. L'acceptez-vous ?",
|
||||
"Device ID": "ID de l'appareil",
|
||||
"Device Identification": "Identifiant de l'appareil",
|
||||
@@ -49,9 +54,11 @@
|
||||
"Discovery": "Découverte",
|
||||
"Documentation": "Documentation",
|
||||
"Download Rate": "Débit de réception",
|
||||
"Downloaded": "Téléchargé",
|
||||
"Downloading": "Téléchargement",
|
||||
"Downloaded": "Reçu",
|
||||
"Downloading": "Réception",
|
||||
"Edit": "Modifier",
|
||||
"Edit Device": "Modifier l'appareil",
|
||||
"Edit Folder": "Modifier le partage",
|
||||
"Editing": "Modifications",
|
||||
"Enable NAT traversal": "Activer transfert d'adresses NAT",
|
||||
"Enable Relaying": "Activer le relayage",
|
||||
@@ -63,8 +70,10 @@
|
||||
"File Pull Order": "Ordre de récupération de fichier",
|
||||
"File Versioning": "Méthode de préservation des fichiers",
|
||||
"File permission bits are ignored when looking for changes. Use on FAT file systems.": "Les bits de permission de fichier sont ignorés lors de la recherche de changements. Utilisé sur les systÚmes de fichiers FAT.",
|
||||
"Files are moved to .stversions directory when replaced or deleted by Syncthing.": "Files are moved to .stversions directory when replaced or deleted by Syncthing.",
|
||||
"Files are moved to .stversions folder when replaced or deleted by Syncthing.": "Les fichiers sont déplacés dans le sous-répertoire .stversions quand ils sont remplacés ou supprimés par Syncthing. Leurs chemins d'accÚs relatifs y sont recréés si besoin.",
|
||||
"Files are moved to date stamped versions in a .stversions folder when replaced or deleted by Syncthing.": "Les fichiers sont déplacés, avec horodatage, dans le répertoire .stversions quand ils sont remplacés ou supprimés par Syncthing. Leurs chemins d'accÚs relatifs y sont recréés si besoin.",
|
||||
"Files are moved to date stamped versions in a .stversions directory when replaced or deleted by Syncthing.": "Files are moved to date stamped versions in a .stversions directory when replaced or deleted by Syncthing.",
|
||||
"Files are moved to date stamped versions in a .stversions folder when replaced or deleted by Syncthing.": "Quand ils sont remplacés ou supprimés par Syncthing, les fichiers sont déplacés et horodatés vers le sous-répertoire .stversions dans une arborescence relative identique à celle de l'original.",
|
||||
"Files are protected from changes made on other devices, but changes made on this device will be sent to the rest of the cluster.": "Les fichiers sont protégés des changements réalisés sur les autres appareils, mais les changements réalisés sur celui-ci seront transférés aux autres.",
|
||||
"Folder": "Partage",
|
||||
"Folder ID": "ID du partage",
|
||||
@@ -76,7 +85,9 @@
|
||||
"GUI Authentication Password": "Mot de passe d'authentification GUI",
|
||||
"GUI Authentication User": "Utilisateur autorisé GUI",
|
||||
"GUI Listen Addresses": "Adresses de l'interface (GUI)",
|
||||
"GUI Theme": "ThĂšme graphique",
|
||||
"Generate": "Générer",
|
||||
"Global Changes": "Derniers changements",
|
||||
"Global Discovery": "Découverte globale",
|
||||
"Global Discovery Servers": "Serveurs de découverte globale",
|
||||
"Global State": "Ătat global",
|
||||
@@ -85,16 +96,19 @@
|
||||
"Ignore": "Ignorer",
|
||||
"Ignore Patterns": "RĂšgles d'exclusion",
|
||||
"Ignore Permissions": "Ignorer les permissions",
|
||||
"Incoming Rate Limit (KiB/s)": "Limite du débit entrant (KiB/s)",
|
||||
"Incoming Rate Limit (KiB/s)": "Limite du débit de réception (Kio/s)",
|
||||
"Incorrect configuration may damage your folder contents and render Syncthing inoperable.": "Une configuration incorrecte peut créer des dommages dans vos répertoires et mettre Syncthing hors-service.",
|
||||
"Introduced By": "Introduit par",
|
||||
"Introducer": "Appareil introducteur",
|
||||
"Inversion of the given condition (i.e. do not exclude)": "Inverser la condition donnée (i.e. ne pas exclure)",
|
||||
"Keep Versions": "Combien de versions conserver",
|
||||
"Largest First": "Les plus volumineux d'abord",
|
||||
"Last File Received": "DerniĂšre mise Ă jour",
|
||||
"Last File Received": "Dernier changement",
|
||||
"Last Scan": "DerniĂšre analyse",
|
||||
"Last seen": "DerniĂšre apparition",
|
||||
"Later": "Plus tard",
|
||||
"Latest Change": "Dernier changement",
|
||||
"Learn more": "En savoir plus",
|
||||
"Listeners": "SystÚmes à l'écoute",
|
||||
"Local Discovery": "Découverte locale",
|
||||
"Local State": "Ătat local",
|
||||
@@ -112,6 +126,7 @@
|
||||
"Newest First": "Les plus récents en premier",
|
||||
"No": "Non",
|
||||
"No File Versioning": "Pas de préservation",
|
||||
"No upgrades": "Pas de mises Ă jour",
|
||||
"Normal": "Normal",
|
||||
"Notice": "Notification",
|
||||
"OK": "OK",
|
||||
@@ -121,38 +136,45 @@
|
||||
"Options": "Options",
|
||||
"Out of Sync": "Désynchronisé",
|
||||
"Out of Sync Items": "ĂlĂ©ments non synchronisĂ©s",
|
||||
"Outgoing Rate Limit (KiB/s)": "Limite du débit sortant (KiB/s)",
|
||||
"Outgoing Rate Limit (KiB/s)": "Limite du débit d'envoi (Kio/s)",
|
||||
"Override Changes": "Ăcraser les changements",
|
||||
"Path to the folder on the local computer. Will be created if it does not exist. The tilde character (~) can be used as a shortcut for": "Chemin vers le rĂ©pertoire dans l'appareil local. Il sera créé s'il n'existe pas. Le caractĂšre tilde (~, ou ~+Espace sous Windows XP+Azerty) peut ĂȘtre utilisĂ© comme raccourci vers",
|
||||
"Path where versions should be stored (leave empty for the default .stversions folder in the folder).": "Chemin oĂč les versions doivent ĂȘtre conservĂ©es (laisser vide pour le chemin par dĂ©faut de .stversions dans le rĂ©pertoire)",
|
||||
"Path": "Chemin",
|
||||
"Path to the folder on the local computer. Will be created if it does not exist. The tilde character (~) can be used as a shortcut for": "Chemin vers le rĂ©pertoire dans l'appareil local. Il sera créé s'il n'existe pas. Vous pouvez entrer un chemin absolu (p.ex \"/home/moi/Sync/Exemple\") ou relatif Ă celui du programme (p.ex \"..\\Partages\\Exemple\" - utile pour installation portable). Le caractĂšre tilde (~, ou ~+Espace sous Windows XP+Azerty) peut ĂȘtre utilisĂ© comme raccourci vers",
|
||||
"Path where versions should be stored (leave empty for the default .stversions directory in the shared folder).": "Path where versions should be stored (leave empty for the default .stversions directory in the shared folder).",
|
||||
"Path where versions should be stored (leave empty for the default .stversions folder in the folder).": "Chemin oĂč les versions doivent ĂȘtre conservĂ©es (laisser vide pour le chemin par dĂ©faut de .stversions dans le rĂ©pertoire).\nChemin relatif ou absolu (recommandĂ©), mais dans un rĂ©pertoire non synchronisĂ© (par masque ou hors du chemin du partage).\nSur la mĂȘme partition ou systĂšme de fichiers (recommandĂ©).",
|
||||
"Pause": "Pause",
|
||||
"Pause All": "Tout suspendre",
|
||||
"Paused": "En pause",
|
||||
"Please consult the release notes before performing a major upgrade.": "Veuillez consulter les notes de version avant de réaliser une mise à jour majeure.",
|
||||
"Please set a GUI Authentication User and Password in the Settings dialog.": "Veuillez définir un nom d'utilisateur et un mot de passe dans les réglages.",
|
||||
"Please wait": "Merci de patienter",
|
||||
"Preview": "Aperçu",
|
||||
"Preview Usage Report": "Aperçu du rapport de statistiques d'utilisation",
|
||||
"Quick guide to supported patterns": "Guide rapide des masques supportés",
|
||||
"Quick guide to supported patterns": "Guide rapide des masques compatibles ci-dessous",
|
||||
"RAM Utilization": "Utilisation de la RAM",
|
||||
"Random": "Aléatoire",
|
||||
"Reduced by ignore patterns": "(Limité par des masques d'exclusion)",
|
||||
"Release Notes": "Notes de version",
|
||||
"Release candidates contain the latest features and fixes. They are similar to the traditional bi-weekly Syncthing releases.": "Les versions préliminaires contiennent les derniÚres fonctionnalités et derniers correctifs. Elles sont identiques aux traditionnelles mises à jour bimensuelles.",
|
||||
"Remote Devices": "Autres appareils",
|
||||
"Remove": "Enlever",
|
||||
"Required identifier for the folder. Must be the same on all cluster devices.": "Identifiant du partage. Doit ĂȘtre le mĂȘme sur tous les appareils concernĂ©s.",
|
||||
"Rescan": "Réanalyser",
|
||||
"Rescan All": "Réanalyser tout",
|
||||
"Rescan All": "Tout réanalyser",
|
||||
"Rescan Interval": "Intervalle d'analyse",
|
||||
"Restart": "Redémarrer",
|
||||
"Restart Needed": "Redémarrage nécessaire",
|
||||
"Restarting": "Redémarrage en cours",
|
||||
"Resume": "Reprise",
|
||||
"Resume All": "Tout libérer",
|
||||
"Reused": "Réutilisé",
|
||||
"Save": "Enregistrer",
|
||||
"Scan Time Remaining": "Temps d'analyse restant",
|
||||
"Scanning": "Analyse en cours",
|
||||
"Select the devices to share this folder with.": "Synchroniser avec :",
|
||||
"Select the folders to share with this device.": "Sélectionner les partages auxquels participe cet appareil.",
|
||||
"Send & Receive": "Envoi & réception",
|
||||
"Send Only": "Envoi (lecture seule)",
|
||||
"Settings": "Configuration",
|
||||
"Share": "Partager",
|
||||
"Share Folder": "Partager",
|
||||
@@ -170,6 +192,9 @@
|
||||
"Single level wildcard (matches within a directory only)": "Joker Ă un seul niveau (correspond uniquement Ă lâintĂ©rieur du rĂ©pertoire)",
|
||||
"Smallest First": "Les plus petits d'abord",
|
||||
"Source Code": "Code source",
|
||||
"Stable releases and release candidates": "Versions stables et préliminaires",
|
||||
"Stable releases are delayed by about two weeks. During this time they go through testing as release candidates.": "Les versions stables sont reportées d'environ deux semaines. Pendant ce temps elles sont testées en tant que versions préliminaires.",
|
||||
"Stable releases only": "Seulement les versions stables",
|
||||
"Staggered File Versioning": "Versions échelonnées",
|
||||
"Start Browser": "Lancer le navigateur web",
|
||||
"Statistics": "Statistiques",
|
||||
@@ -188,20 +213,20 @@
|
||||
"The configuration has been saved but not activated. Syncthing must restart to activate the new configuration.": "La configuration a été enregistrée mais pas activée. Syncthing doit redémarrer afin d'activer la nouvelle configuration.",
|
||||
"The device ID cannot be blank.": "L'ID de l'appareil ne peut ĂȘtre vide.",
|
||||
"The device ID to enter here can be found in the \"Actions > Show ID\" dialog on the other device. Spaces and dashes are optional (ignored).": "L'ID d'appareil à saisir ici se trouve dans le menu \"Actions > Afficher mon ID\" sur l'appareil distant. Les tirets et espaces sont optionnels (et ignorés).",
|
||||
"The encrypted usage report is sent daily. It is used to track common platforms, folder sizes and app versions. If the reported data set is changed you will be prompted with this dialog again.": "Le rapport d'utilisation chiffré est envoyé quotidiennement. Il sert à répertorier les plates-formes utilisées, la taille des partages et les versions de l'application. Si les données rapportées sont modifiées cette boite de dialogue vous redemandera votre confirmation.",
|
||||
"The encrypted usage report is sent daily. It is used to track common platforms, folder sizes and app versions. If the reported data set is changed you will be prompted with this dialog again.": "Le rapport d'utilisation chiffrĂ© est envoyĂ© quotidiennement. Il sert Ă rĂ©pertorier les plates-formes utilisĂ©es, la taille des partages et les versions de l'application. Si le jeu de donnĂ©es rapportĂ©es devait ĂȘtre changĂ©, il vous serait demandĂ© de valider de nouveau son envoi via ce message. Vous pouvez revenir sur votre dĂ©cision via Actions/Configuration, et agir sur la frĂ©quence d'envoi via Actions/AvancĂ©/Options (urInitialDelayS).",
|
||||
"The entered device ID does not look valid. It should be a 52 or 56 character string consisting of letters and numbers, with spaces and dashes being optional.": "L'ID de l'appareil inséré ne semble pas valide. Il devrait ressembler à une chaßne de 52 ou 56 caractÚres comprenant des lettres, des chiffres et potentiellement des espaces et des traits d'union.",
|
||||
"The first command line parameter is the folder path and the second parameter is the relative path in the folder.": "Le premier paramÚtre de ligne de commande est le chemin du répertoire partagé, et le second est le chemin relatif dans le répertoire.",
|
||||
"The folder ID cannot be blank.": "L'identifiant du partage ne peut ĂȘtre vide.",
|
||||
"The folder ID must be unique.": "L'ID du partage doit ĂȘtre unique.",
|
||||
"The folder path cannot be blank.": "Le chemin vers le rĂ©pertoire ne peut pas ĂȘtre vide.",
|
||||
"The following intervals are used: for the first hour a version is kept every 30 seconds, for the first day a version is kept every hour, for the first 30 days a version is kept every day, until the maximum age a version is kept every week.": "Les intervalles suivant sont utilisés: jusqu'à une heure une version est conservée toutes les 30 secondes. Jusqu'à un jour une version est conservée chaque heure. Jusqu'à 30 jours une version est conservée chaque jour. Au-delà , jusqu'à la limite d'ùge, une version est conservée chaque semaine.",
|
||||
"The following intervals are used: for the first hour a version is kept every 30 seconds, for the first day a version is kept every hour, for the first 30 days a version is kept every day, until the maximum age a version is kept every week.": "Les seuils de durĂ©e suivants dĂ©finissent le nombre maximum de versions pour chaque fichier : pendant la premiĂšre heure une version peut ĂȘtre conservĂ©e toutes les 30 secondes. Jusqu'Ă un jour, jusqu'Ă une version par heure - des versions de la premiĂšre heure sont alors progressivement effacĂ©es pour n'en garder qu'une par heure. Jusqu'Ă 30 jours, jusqu'Ă une version par jour - des versions horaires du premier jour sont alors progressivement effacĂ©es pour n'en garder qu'une par jour. Au-delĂ , jusqu'Ă la limite d'Ăąge, jusqu'Ă une version est conservĂ©e par semaine - des versions journaliĂšres du premier mois sont alors progressivement effacĂ©es pour n'en garder qu'une par semaine.",
|
||||
"The following items could not be synchronized.": "Les fichiers suivants n'ont pas pu ĂȘtre synchronisĂ©s.",
|
||||
"The maximum age must be a number and cannot be blank.": "L'Ăąge maximum doit ĂȘtre un nombre et ne peut ĂȘtre vide.",
|
||||
"The maximum time to keep a version (in days, set to 0 to keep versions forever).": "Le temps maximum de conservation d'une version (en jours, mettre à 0 pour conserver les versions indéfiniment)",
|
||||
"The maximum time to keep a version (in days, set to 0 to keep versions forever).": "Durée maximum de conservation d'une version (en jours, 0 pour conserver les versions indéfiniment)",
|
||||
"The minimum free disk space percentage must be a non-negative number between 0 and 100 (inclusive).": "Le pourcentage d'espace disque libre doit ĂȘtre un nombre positif compris entre 0 et 100 (inclus).",
|
||||
"The number of days must be a number and cannot be blank.": "Le nombre de jours doit ĂȘtre numĂ©rique et ne peut pas ĂȘtre vide.",
|
||||
"The number of days to keep files in the trash can. Zero means forever.": "Le nombre de jours de conservation des fichiers dans la poubelle. 0 signifie toujours.",
|
||||
"The number of old versions to keep, per file.": "Le nombre d'anciennes versions Ă garder, par fichier.",
|
||||
"The number of old versions to keep, per file.": "Le nombre maximum d'anciennes versions à garder indéfiniment, par fichier.",
|
||||
"The number of versions must be a number and cannot be blank.": "Le nombre de versions doit ĂȘtre numĂ©rique, et ne peut pas ĂȘtre vide.",
|
||||
"The path cannot be blank.": "Le chemin ne peut pas ĂȘtre vide.",
|
||||
"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)",
|
||||
@@ -210,30 +235,38 @@
|
||||
"This Device": "Cet appareil",
|
||||
"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 is a major version upgrade.": "Il s'agit d'une mise Ă jour majeure.",
|
||||
"Time": "Heure",
|
||||
"Trash Can File Versioning": "Style poubelle",
|
||||
"Type": "Type",
|
||||
"Unknown": "Inconnu",
|
||||
"Unshared": "Non partagé",
|
||||
"Unused": "Non utilisé",
|
||||
"Up to Date": "Synchronisé",
|
||||
"Up to Date": "Ă jour",
|
||||
"Updated": "Mis Ă jour",
|
||||
"Upgrade": "Mettre Ă jour",
|
||||
"Upgrade To {%version%}": "Mettre Ă jour vers {{version}}",
|
||||
"Upgrading": "Mise Ă jour de Syncthing",
|
||||
"Upload Rate": "Débit d'envoi",
|
||||
"Uptime": "Durée de fonctionnement",
|
||||
"Usage reporting is always enabled for candidate releases.": "Les statistiques d'utilisation sont toujours envoyées pour les versions préliminaires.",
|
||||
"Use HTTPS for GUI": "Utiliser l'HTTPS pour le GUI",
|
||||
"Version": "Version",
|
||||
"Versions Path": "Emplacement des versions",
|
||||
"Versions are automatically deleted if they are older than the maximum age or exceed the number of files allowed in an interval.": "Les versions seront supprimées automatiquement, si elles dépassent la durée maximum de conservation, ou si leur nombre est supérieur à la valeur autorisée dans l'intervalle.",
|
||||
"Warning, this path is a subdirectory of an existing folder \"{%otherFolder%}\".": "Attention, ce chemin est un sous-répertoire du partage existant \"{{otherFolder}}\". Ceci peut causer des problÚmes tels que duplications de fichiers ou suppressions intempestives sur les autres machines.",
|
||||
"Versions are automatically deleted if they are older than the maximum age or exceed the number of files allowed in an interval.": "Les plus anciennes versions seront supprimées automatiquement quand elles dépassent la durée maximum de conservation ou si leur nombre (par fichier) est supérieur à la limite prédéfinie pour l'intervalle.",
|
||||
"Warning, this path is a parent directory of an existing folder \"{%otherFolder%}\".": "Attention, ce chemin est un répertoire parent d'au moins un partage existant (par exemple \"{{otherFolder}}\"). Si vous continuez, vous devriez créer un nouveau sous-répertoire, sinon ceci peut causer des problÚmes tels que duplications et/ou suppressions intempestives de fichiers.",
|
||||
"Warning, this path is a parent directory of an existing folder \"{%otherFolderLabel%}\" ({%otherFolder%}).": "Attention, ce chemin est un répertoire parent d'au moins un partage existant (par exemple \"{{otherFolderLabel}}\" ({{otherFolder}})). Si vous continuez, vous devriez créer un nouveau sous-répertoire, sinon ceci peut causer des problÚmes tels que duplications et/ou suppressions intempestives de fichiers.",
|
||||
"Warning, this path is a subdirectory of an existing folder \"{%otherFolder%}\".": "ATTENTION, ce chemin est un sous-répertoire du partage existant \"{{otherFolder}}\". Ceci peut causer des problÚmes tels que duplications et/ou suppressions intempestives de fichiers.",
|
||||
"Warning, this path is a subdirectory of an existing folder \"{%otherFolderLabel%}\" ({%otherFolder%}).": "ATTENTION, ce chemin est un sous-répertoire du partage existant \"{{otherFolderLabel}}\" ({{otherFolder}}). Ceci peut causer des problÚmes tels que duplications et/ou suppressions intempestives de fichiers.",
|
||||
"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",
|
||||
"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.",
|
||||
"You must keep at least one version.": "Vous devez garder au minimum une version.",
|
||||
"days": "Jours",
|
||||
"directories": "répertoires",
|
||||
"files": "fichiers",
|
||||
"full documentation": "documentation complĂšte",
|
||||
"full documentation": "Documentation complĂšte ici",
|
||||
"items": "éléments",
|
||||
"{%device%} wants to share folder \"{%folder%}\".": "{{device}} vous invite au partage \"{{folder}}\".",
|
||||
"{%device%} wants to share folder \"{%folderlabel%}\" ({%folder%}).": "{{device}} vous invite au partage \"{{folderlabel}}\" ({{folder}})."
|
||||
|
||||
@@ -4,6 +4,7 @@
|
||||
"A new major version may not be compatible with previous versions.": "Une nouvelle version majeure peut présenter des incompatibilités avec les versions antérieures.",
|
||||
"API Key": "Clé API",
|
||||
"About": "Ă propos",
|
||||
"Action": "Action",
|
||||
"Actions": "Actions",
|
||||
"Add": "Ajouter",
|
||||
"Add Device": "Ajouter l'appareil",
|
||||
@@ -18,14 +19,16 @@
|
||||
"All Data": "Toutes les données",
|
||||
"Allow Anonymous Usage Reporting?": "Autoriser l'envoi de statistiques d'utilisation anonymisées ?",
|
||||
"Alphabetic": "Alphabétique",
|
||||
"An external command handles the versioning. It has to remove the file from the shared folder.": "An external command handles the versioning. It has to remove the file from the shared folder.",
|
||||
"An external command handles the versioning. It has to remove the file from the synced folder.": "Une commande externe gÚre les versions de fichiers. Il lui incombe de supprimer les fichiers dans le répertoire synchronisé.",
|
||||
"Anonymous Usage Reporting": "Rapport anonyme de statistiques d'utilisation",
|
||||
"Any devices configured on an introducer device will be added to this device as well.": "Tout appareil ajouté sur un appareil introducteur sera aussi ajouté sur votre propre appareil.",
|
||||
"Any devices configured on an introducer device will be added to this device as well.": "Tout appareil ajouté sur un appareil que vous déclarez comme introducteur sera aussi ajouté sur votre propre appareil.",
|
||||
"Automatic upgrade now offers the choice between stable releases and release candidates.": "Le systÚme de mise à jour automatique propose le choix entre versions stables et versions préliminaires.",
|
||||
"Automatic upgrades": "Mises Ă jour automatiques",
|
||||
"Be careful!": "Faites attention !",
|
||||
"Bugs": "Bugs",
|
||||
"CPU Utilization": "Utilisation du CPU",
|
||||
"Changelog": "Historique des changements",
|
||||
"Changelog": "Historique des versions",
|
||||
"Clean out after": "Purger aprĂšs :",
|
||||
"Close": "Fermer",
|
||||
"Command": "Commande",
|
||||
@@ -37,8 +40,10 @@
|
||||
"Copied from elsewhere": "Copié d'ailleurs",
|
||||
"Copied from original": "Copié depuis l'original",
|
||||
"Copyright © 2014-2016 the following Contributors:": "Copyright © 2014-2016, les contributeurs suivants:",
|
||||
"Copyright © 2014-2017 the following Contributors:": "Copyright © 2014-2017, les contributeurs suivants :",
|
||||
"Danger!": "Attention !",
|
||||
"Deleted": "Supprimé",
|
||||
"Device": "Appareil",
|
||||
"Device \"{%name%}\" ({%device%} at {%address%}) wants to connect. Add new device?": "L'appareil \"{{name}}\" ({{device}} Ă {{address}}) veut se connecter. L'acceptez-vous ?",
|
||||
"Device ID": "ID de l'appareil",
|
||||
"Device Identification": "Identifiant de l'appareil",
|
||||
@@ -48,10 +53,12 @@
|
||||
"Discovered": "Découvert",
|
||||
"Discovery": "Découverte",
|
||||
"Documentation": "Documentation",
|
||||
"Download Rate": "Vitesse de réception",
|
||||
"Downloaded": "Téléchargé",
|
||||
"Downloading": "Téléchargement",
|
||||
"Download Rate": "Débit de réception",
|
||||
"Downloaded": "Reçu",
|
||||
"Downloading": "Réception",
|
||||
"Edit": "Modifier",
|
||||
"Edit Device": "Modifier l'appareil",
|
||||
"Edit Folder": "Modifier le partage",
|
||||
"Editing": "Modifications",
|
||||
"Enable NAT traversal": "Activer la translation d'adresses (NAT)",
|
||||
"Enable Relaying": "Relayage possible",
|
||||
@@ -63,8 +70,10 @@
|
||||
"File Pull Order": "Ordre de récupération des fichiers",
|
||||
"File Versioning": "Méthode de préservation des fichiers",
|
||||
"File permission bits are ignored when looking for changes. Use on FAT file systems.": "Les bits de permission de fichier sont ignorés lors de la recherche de changements. Utilisé sur les systÚmes de fichiers FAT.",
|
||||
"Files are moved to .stversions directory when replaced or deleted by Syncthing.": "Files are moved to .stversions directory when replaced or deleted by Syncthing.",
|
||||
"Files are moved to .stversions folder when replaced or deleted by Syncthing.": "Les fichiers sont déplacés dans le sous-répertoire .stversions quand ils sont remplacés ou supprimés par Syncthing. Leurs chemins d'accÚs relatifs y sont recréés si besoin.",
|
||||
"Files are moved to date stamped versions in a .stversions folder when replaced or deleted by Syncthing.": "Les fichiers sont déplacés et horodatés dans le sous-répertoire .stversions quand ils sont remplacés ou supprimés par Syncthing. Leurs chemins d'accÚs relatifs y sont recréés si besoin.",
|
||||
"Files are moved to date stamped versions in a .stversions directory when replaced or deleted by Syncthing.": "Files are moved to date stamped versions in a .stversions directory when replaced or deleted by Syncthing.",
|
||||
"Files are moved to date stamped versions in a .stversions folder when replaced or deleted by Syncthing.": "Quand ils sont remplacés ou supprimés par Syncthing, les fichiers sont déplacés et horodatés vers le sous-répertoire .stversions dans une arborescence relative identique à celle de l'original.",
|
||||
"Files are protected from changes made on other devices, but changes made on this device will be sent to the rest of the cluster.": "Les fichiers sont protégés des changements réalisés sur les autres appareils, mais les changements réalisés sur celui-ci seront transférés aux autres.",
|
||||
"Folder": "Partage",
|
||||
"Folder ID": "ID du partage",
|
||||
@@ -76,7 +85,9 @@
|
||||
"GUI Authentication Password": "Mot de passe d'authentification GUI",
|
||||
"GUI Authentication User": "Utilisateur autorisé GUI",
|
||||
"GUI Listen Addresses": "Adresses de l'interface (GUI)",
|
||||
"GUI Theme": "ThĂšme graphique",
|
||||
"Generate": "Générer",
|
||||
"Global Changes": "Derniers changements",
|
||||
"Global Discovery": "Découverte globale",
|
||||
"Global Discovery Servers": "Serveurs de découverte globale",
|
||||
"Global State": "Ătat global",
|
||||
@@ -85,16 +96,19 @@
|
||||
"Ignore": "Ignorer",
|
||||
"Ignore Patterns": "Exclusions ...",
|
||||
"Ignore Permissions": "Ignorer les permissions",
|
||||
"Incoming Rate Limit (KiB/s)": "Limite du débit de réception (Ko/s)",
|
||||
"Incoming Rate Limit (KiB/s)": "Limite du débit de réception (Kio/s)",
|
||||
"Incorrect configuration may damage your folder contents and render Syncthing inoperable.": "Une configuration incorrecte peut créer des dommages dans vos répertoires et mettre Syncthing hors-service.",
|
||||
"Introduced By": "Introduit par",
|
||||
"Introducer": "Appareil introducteur",
|
||||
"Inversion of the given condition (i.e. do not exclude)": "Inverser la condition donnée (i.e. ne pas exclure)",
|
||||
"Keep Versions": "Combien de versions conserver",
|
||||
"Largest First": "Les plus volumineux d'abord",
|
||||
"Last File Received": "DerniĂšre mise Ă jour",
|
||||
"Last File Received": "Dernier changement",
|
||||
"Last Scan": "DerniĂšre analyse",
|
||||
"Last seen": "DerniĂšre apparition",
|
||||
"Later": "Plus tard",
|
||||
"Latest Change": "Dernier changement",
|
||||
"Learn more": "En savoir plus",
|
||||
"Listeners": "SystÚmes en écoute",
|
||||
"Local Discovery": "Découverte locale",
|
||||
"Local State": "Ătat local",
|
||||
@@ -112,6 +126,7 @@
|
||||
"Newest First": "Les plus récents en premier",
|
||||
"No": "Non",
|
||||
"No File Versioning": "Pas de préservation",
|
||||
"No upgrades": "Pas de mises Ă jour",
|
||||
"Normal": "Normal",
|
||||
"Notice": "Notification",
|
||||
"OK": "OK",
|
||||
@@ -121,38 +136,45 @@
|
||||
"Options": "Options",
|
||||
"Out of Sync": "Désynchronisé",
|
||||
"Out of Sync Items": "ĂlĂ©ments non synchronisĂ©s",
|
||||
"Outgoing Rate Limit (KiB/s)": "Limite du débit d'émission (Ko/s)",
|
||||
"Outgoing Rate Limit (KiB/s)": "Limite du débit d'envoi (Kio/s)",
|
||||
"Override Changes": "Ăcraser les changements",
|
||||
"Path to the folder on the local computer. Will be created if it does not exist. The tilde character (~) can be used as a shortcut for": "Chemin vers le rĂ©pertoire dans l'appareil local. Il sera créé s'il n'existe pas. Le caractĂšre tilde (~, ou ~+Espace sous Windows XP+Azerty) peut ĂȘtre utilisĂ© comme raccourci vers",
|
||||
"Path where versions should be stored (leave empty for the default .stversions folder in the folder).": "Chemin oĂč les copies doivent ĂȘtre conservĂ©es (laisser vide pour le chemin par dĂ©faut de .stversions dans le rĂ©pertoire)",
|
||||
"Path": "Chemin",
|
||||
"Path to the folder on the local computer. Will be created if it does not exist. The tilde character (~) can be used as a shortcut for": "Chemin vers le rĂ©pertoire dans l'appareil local. Il sera créé s'il n'existe pas. Vous pouvez entrer un chemin absolu (p.ex \"/home/moi/Sync/Exemple\") ou relatif Ă celui du programme (p.ex \"..\\Partages\\Exemple\" - utile pour installation portable). Le caractĂšre tilde (~, ou ~+Espace sous Windows XP+Azerty) peut ĂȘtre utilisĂ© comme raccourci vers",
|
||||
"Path where versions should be stored (leave empty for the default .stversions directory in the shared folder).": "Path where versions should be stored (leave empty for the default .stversions directory in the shared folder).",
|
||||
"Path where versions should be stored (leave empty for the default .stversions folder in the folder).": "Chemin oĂč les versions doivent ĂȘtre conservĂ©es (laisser vide pour le chemin par dĂ©faut de .stversions dans le rĂ©pertoire).\nChemin relatif ou absolu (recommandĂ©), mais dans un rĂ©pertoire non synchronisĂ© (par masque ou hors du chemin du partage).\nSur la mĂȘme partition ou systĂšme de fichiers (recommandĂ©).",
|
||||
"Pause": "Pause",
|
||||
"Pause All": "Tout suspendre",
|
||||
"Paused": "En pause",
|
||||
"Please consult the release notes before performing a major upgrade.": "Veuillez consulter les notes de version avant de réaliser une mise à jour majeure.",
|
||||
"Please set a GUI Authentication User and Password in the Settings dialog.": "Veuillez dĂ©finir un nom d'utilisateur et un mot de passe dans la fenĂȘtre de Configuration.",
|
||||
"Please wait": "Merci de patienter",
|
||||
"Preview": "Aperçu",
|
||||
"Preview Usage Report": "Aperçu du rapport de statistiques d'utilisation",
|
||||
"Quick guide to supported patterns": "Filtro ez onartuen txostena",
|
||||
"Quick guide to supported patterns": "Guide rapide des masques compatibles ci-dessous",
|
||||
"RAM Utilization": "Utilisation de la RAM",
|
||||
"Random": "Aléatoire",
|
||||
"Reduced by ignore patterns": "(Limité par des masques d'exclusion)",
|
||||
"Release Notes": "Notes de version",
|
||||
"Release candidates contain the latest features and fixes. They are similar to the traditional bi-weekly Syncthing releases.": "Les versions préliminaires contiennent les derniÚres fonctionnalités et derniers correctifs. Elles sont identiques aux traditionnelles mises à jour bimensuelles.",
|
||||
"Remote Devices": "Autres appareils",
|
||||
"Remove": "Enlever",
|
||||
"Required identifier for the folder. Must be the same on all cluster devices.": "Identifiant du partage. Doit ĂȘtre le mĂȘme sur tous les appareils concernĂ©s.",
|
||||
"Rescan": "Réanalyser",
|
||||
"Rescan All": "Réanalyser tout",
|
||||
"Rescan All": "Tout réanalyser",
|
||||
"Rescan Interval": "Intervalle d'analyse",
|
||||
"Restart": "Redémarrer",
|
||||
"Restart Needed": "Redémarrage nécessaire",
|
||||
"Restarting": "Redémarrage en cours",
|
||||
"Resume": "Reprise",
|
||||
"Resume All": "Tout libérer",
|
||||
"Reused": "Réutilisé",
|
||||
"Save": "Enregistrer",
|
||||
"Scan Time Remaining": "Temps d'analyse restant",
|
||||
"Scanning": "Analyse en cours",
|
||||
"Select the devices to share this folder with.": "Synchroniser avec :",
|
||||
"Select the folders to share with this device.": "Sélectionner les partages auxquels participe cet appareil.",
|
||||
"Send & Receive": "Envoi & réception",
|
||||
"Send Only": "Envoi (lecture seule)",
|
||||
"Settings": "Configuration",
|
||||
"Share": "Partager",
|
||||
"Share Folder": "Partager",
|
||||
@@ -170,6 +192,9 @@
|
||||
"Single level wildcard (matches within a directory only)": "Joker Ă un seul niveau (correspond uniquement Ă lâintĂ©rieur du rĂ©pertoire)",
|
||||
"Smallest First": "Les plus petits d'abord",
|
||||
"Source Code": "Code source",
|
||||
"Stable releases and release candidates": "Versions stables et préliminaires",
|
||||
"Stable releases are delayed by about two weeks. During this time they go through testing as release candidates.": "Les versions stables sont reportées d'environ deux semaines. Pendant ce temps elles sont testées en tant que versions préliminaires.",
|
||||
"Stable releases only": "Seulement les versions stables",
|
||||
"Staggered File Versioning": "Versions échelonnées",
|
||||
"Start Browser": "Lancer le navigateur web",
|
||||
"Statistics": "Statistiques",
|
||||
@@ -188,20 +213,20 @@
|
||||
"The configuration has been saved but not activated. Syncthing must restart to activate the new configuration.": "La configuration a été enregistrée mais pas activée. Syncthing doit redémarrer afin d'activer la nouvelle configuration.",
|
||||
"The device ID cannot be blank.": "L'ID de l'appareil ne peut ĂȘtre vide.",
|
||||
"The device ID to enter here can be found in the \"Actions > Show ID\" dialog on the other device. Spaces and dashes are optional (ignored).": "L'ID d'appareil à saisir ici se trouve dans le menu \"Actions > Afficher mon ID\" de l'appareil distant. Espaces et tirets sont optionnels (ignorés).",
|
||||
"The encrypted usage report is sent daily. It is used to track common platforms, folder sizes and app versions. If the reported data set is changed you will be prompted with this dialog again.": "Le rapport d'utilisation chiffrĂ© est envoyĂ© quotidiennement. Il sert Ă rĂ©pertorier les plates-formes utilisĂ©es, la taille des partages et les versions de l'application. Si le jeu de donnĂ©es rapportĂ©es devait ĂȘtre changĂ©, il vous sera demandĂ© de le valider de nouveau via ce message.",
|
||||
"The encrypted usage report is sent daily. It is used to track common platforms, folder sizes and app versions. If the reported data set is changed you will be prompted with this dialog again.": "Le rapport d'utilisation chiffrĂ© est envoyĂ© quotidiennement. Il sert Ă rĂ©pertorier les plates-formes utilisĂ©es, la taille des partages et les versions de l'application. Si le jeu de donnĂ©es rapportĂ©es devait ĂȘtre changĂ©, il vous serait demandĂ© de valider de nouveau son envoi via ce message. Vous pouvez revenir sur votre dĂ©cision via Actions/Configuration, et agir sur la frĂ©quence d'envoi via Actions/AvancĂ©/Options (urInitialDelayS).",
|
||||
"The entered device ID does not look valid. It should be a 52 or 56 character string consisting of letters and numbers, with spaces and dashes being optional.": "L'ID de l'appareil inséré ne semble pas valide. Il devrait ressembler à une chaßne de 52 ou 56 caractÚres comprenant des lettres, des chiffres et potentiellement des espaces et des traits d'union.",
|
||||
"The first command line parameter is the folder path and the second parameter is the relative path in the folder.": "Le premier paramÚtre de ligne de commande est le chemin du répertoire partagé, et le second est le chemin relatif dans le répertoire.",
|
||||
"The folder ID cannot be blank.": "L'ID du partage ne peut ĂȘtre vide.",
|
||||
"The folder ID must be unique.": "L'ID du partage doit ĂȘtre unique.",
|
||||
"The folder path cannot be blank.": "Le chemin vers le rĂ©pertoire ne peut pas ĂȘtre vide.",
|
||||
"The following intervals are used: for the first hour a version is kept every 30 seconds, for the first day a version is kept every hour, for the first 30 days a version is kept every day, until the maximum age a version is kept every week.": "Les intervalles suivant sont utilisés: jusqu'à une heure une version est conservée toutes les 30 secondes. Jusqu'à un jour une version est conservée chaque heure. Jusqu'à 30 jours une version est conservée chaque jour. Au-delà , jusqu'à la limite d'ùge, une version est conservée chaque semaine.",
|
||||
"The following intervals are used: for the first hour a version is kept every 30 seconds, for the first day a version is kept every hour, for the first 30 days a version is kept every day, until the maximum age a version is kept every week.": "Les seuils de durĂ©e suivants dĂ©finissent le nombre maximum de versions pour chaque fichier : pendant la premiĂšre heure une version peut ĂȘtre conservĂ©e toutes les 30 secondes. Jusqu'Ă un jour, jusqu'Ă une version par heure - des versions de la premiĂšre heure sont alors progressivement effacĂ©es pour n'en garder qu'une par heure. Jusqu'Ă 30 jours, jusqu'Ă une version par jour - des versions horaires du premier jour sont alors progressivement effacĂ©es pour n'en garder qu'une par jour. Au-delĂ , jusqu'Ă la limite d'Ăąge, jusqu'Ă une version est conservĂ©e par semaine - des versions journaliĂšres du premier mois sont alors progressivement effacĂ©es pour n'en garder qu'une par semaine.",
|
||||
"The following items could not be synchronized.": "Les fichiers suivants n'ont pas pu ĂȘtre synchronisĂ©s.",
|
||||
"The maximum age must be a number and cannot be blank.": "L'Ăąge maximum doit ĂȘtre un nombre et ne peut ĂȘtre vide.",
|
||||
"The maximum time to keep a version (in days, set to 0 to keep versions forever).": "Le temps maximum de conservation d'une version (en jours, mettre à 0 pour conserver les versions indéfiniment)",
|
||||
"The maximum time to keep a version (in days, set to 0 to keep versions forever).": "Durée maximum de conservation d'une version (en jours, 0 pour conserver les versions indéfiniment)",
|
||||
"The minimum free disk space percentage must be a non-negative number between 0 and 100 (inclusive).": "Le pourcentage d'espace disque libre doit ĂȘtre un nombre positif compris entre 0 et 100 (inclus).",
|
||||
"The number of days must be a number and cannot be blank.": "Le nombre de jours doit ĂȘtre numĂ©rique et ne peut pas ĂȘtre vide.",
|
||||
"The number of days to keep files in the trash can. Zero means forever.": "Le nombre de jours de conservation des fichiers dans la poubelle. 0 signifie toujours.",
|
||||
"The number of old versions to keep, per file.": "Le nombre d'anciennes versions Ă garder, par fichier.",
|
||||
"The number of old versions to keep, per file.": "Le nombre maximum d'anciennes versions à garder indéfiniment, par fichier.",
|
||||
"The number of versions must be a number and cannot be blank.": "Le nombre de versions doit ĂȘtre numĂ©rique, et ne peut pas ĂȘtre vide.",
|
||||
"The path cannot be blank.": "Le chemin ne peut pas ĂȘtre vide.",
|
||||
"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)",
|
||||
@@ -210,30 +235,38 @@
|
||||
"This Device": "Cet appareil",
|
||||
"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 is a major version upgrade.": "Il s'agit d'une mise Ă jour majeure.",
|
||||
"Time": "Heure",
|
||||
"Trash Can File Versioning": "Style poubelle",
|
||||
"Type": "Type",
|
||||
"Unknown": "Inconnu",
|
||||
"Unshared": "Non partagé",
|
||||
"Unused": "Non utilisé",
|
||||
"Up to Date": "Synchronisé",
|
||||
"Up to Date": "Ă jour",
|
||||
"Updated": "Mis Ă jour",
|
||||
"Upgrade": "Mettre Ă jour",
|
||||
"Upgrade To {%version%}": "Mettre Ă jour vers {{version}}",
|
||||
"Upgrading": "Mise Ă jour de Syncthing",
|
||||
"Upload Rate": "Vitesse d'émission",
|
||||
"Upload Rate": "Débit d'envoi",
|
||||
"Uptime": "Durée de fonctionnement",
|
||||
"Usage reporting is always enabled for candidate releases.": "Les statistiques d'utilisation sont toujours envoyées pour les versions préliminaires.",
|
||||
"Use HTTPS for GUI": "Utiliser l'HTTPS pour le GUI",
|
||||
"Version": "Version",
|
||||
"Versions Path": "Emplacement des versions",
|
||||
"Versions are automatically deleted if they are older than the maximum age or exceed the number of files allowed in an interval.": "Les versions seront supprimées automatiquement, si elles dépassent la durée maximum de conservation, ou si leur nombre est supérieur à la valeur autorisée dans l'intervalle.",
|
||||
"Warning, this path is a subdirectory of an existing folder \"{%otherFolder%}\".": "Attention, ce chemin est un sous-répertoire du partage existant \"{{otherFolder}}\". Ceci peut causer des problÚmes tels que duplications de fichiers ou suppressions intempestives sur les autres appareils.",
|
||||
"Versions are automatically deleted if they are older than the maximum age or exceed the number of files allowed in an interval.": "Les plus anciennes versions seront supprimées automatiquement quand elles dépassent la durée maximum de conservation ou si leur nombre (par fichier) est supérieur à la limite prédéfinie pour l'intervalle.",
|
||||
"Warning, this path is a parent directory of an existing folder \"{%otherFolder%}\".": "Attention, ce chemin est un répertoire parent d'au moins un partage existant (par exemple \"{{otherFolder}}\"). Si vous continuez, vous devriez créer un nouveau sous-répertoire, sinon ceci peut causer des problÚmes tels que duplications et/ou suppressions intempestives de fichiers.",
|
||||
"Warning, this path is a parent directory of an existing folder \"{%otherFolderLabel%}\" ({%otherFolder%}).": "Attention, ce chemin est un répertoire parent d'au moins un partage existant (par exemple \"{{otherFolderLabel}}\" ({{otherFolder}})). Si vous continuez, vous devriez créer un nouveau sous-répertoire, sinon ceci peut causer des problÚmes tels que duplications et/ou suppressions intempestives de fichiers.",
|
||||
"Warning, this path is a subdirectory of an existing folder \"{%otherFolder%}\".": "ATTENTION, ce chemin est un sous-répertoire du partage existant \"{{otherFolder}}\". Ceci peut causer des problÚmes tels que duplications et/ou suppressions intempestives de fichiers.",
|
||||
"Warning, this path is a subdirectory of an existing folder \"{%otherFolderLabel%}\" ({%otherFolder%}).": "ATTENTION, ce chemin est un sous-répertoire du partage existant \"{{otherFolderLabel}}\" ({{otherFolder}}). Ceci peut causer des problÚmes tels que duplications et/ou suppressions intempestives de fichiers.",
|
||||
"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",
|
||||
"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.",
|
||||
"You must keep at least one version.": "Vous devez garder au minimum une version.",
|
||||
"days": "Jours",
|
||||
"directories": "répertoires",
|
||||
"files": "Fichiers",
|
||||
"full documentation": "documentation complĂšte",
|
||||
"full documentation": "Documentation complĂšte ici",
|
||||
"items": "éléments",
|
||||
"{%device%} wants to share folder \"{%folder%}\".": "{{device}} vous invite au partage \"{{folder}}\".",
|
||||
"{%device%} wants to share folder \"{%folderlabel%}\" ({%folder%}).": "{{device}} vous invite au partage \"{{folderlabel}}\" ({{folder}})."
|
||||
|
||||
@@ -4,6 +4,7 @@
|
||||
"A new major version may not be compatible with previous versions.": "In nije, wichtige ferzje koe wol ris net te kombinearjen wĂȘze mei foargeande ferzjes.",
|
||||
"API Key": "API-kaai",
|
||||
"About": "Oer",
|
||||
"Action": "Aksje",
|
||||
"Actions": "Aksjes",
|
||||
"Add": "Taheakje",
|
||||
"Add Device": "Apparaat taheakje",
|
||||
@@ -18,9 +19,11 @@
|
||||
"All Data": "Alle data",
|
||||
"Allow Anonymous Usage Reporting?": "Anonime brûkensrapportaazje tastean?",
|
||||
"Alphabetic": "Alfabetysk",
|
||||
"An external command handles the versioning. It has to remove the file from the shared folder.": "An external command handles the versioning. It has to remove the file from the shared folder.",
|
||||
"An external command handles the versioning. It has to remove the file from the synced folder.": "In ekstern kommando soarget foar it ferzjebehear. It moat de triem Ășt de syngronisearre map fuortsmite.",
|
||||
"Anonymous Usage Reporting": "Anonym brûkensrapportaazje",
|
||||
"Any devices configured on an introducer device will be added to this device as well.": "Alle apparaten die op in 'yntrodusearjend apparaat' ynstelt binne, wurde ek op dit apparaat taheakke.",
|
||||
"Automatic upgrade now offers the choice between stable releases and release candidates.": "Automatyske fernijing biedt no de kar tusken stabyle ferzjes en ferzje kandidaten",
|
||||
"Automatic upgrades": "Automatyske fernijings",
|
||||
"Be careful!": "Tink derom!",
|
||||
"Bugs": "Brekkings",
|
||||
@@ -37,8 +40,10 @@
|
||||
"Copied from elsewhere": "Oernommen fan earne oars",
|
||||
"Copied from original": "Oernommen fan orizjineel",
|
||||
"Copyright © 2014-2016 the following Contributors:": "Copyright © 2014-2016 de folgende bydragers:",
|
||||
"Copyright © 2014-2017 the following Contributors:": "Copyright © 2014-2017 de folgende Bydragers:",
|
||||
"Danger!": "Gefaar!",
|
||||
"Deleted": "Fuortsmiten",
|
||||
"Device": "Apparaat",
|
||||
"Device \"{%name%}\" ({%device%} at {%address%}) wants to connect. Add new device?": "Apparaat \"{{name}}\" {{device}} op ({{address}}) wol ferbining meitsje. Nij apparaat taheakje?",
|
||||
"Device ID": "Apparaat-ID",
|
||||
"Device Identification": "Apparaatidentifikaasje",
|
||||
@@ -52,6 +57,8 @@
|
||||
"Downloaded": "Ynladen",
|
||||
"Downloading": "Oan it ynladen",
|
||||
"Edit": "Bewurkje",
|
||||
"Edit Device": "Apparaat Bewurkje",
|
||||
"Edit Folder": "Map Bewurkje",
|
||||
"Editing": "Bewurkjen",
|
||||
"Enable NAT traversal": "NAT-trochkruse ynskeakelje",
|
||||
"Enable Relaying": "Trochjaan tastean",
|
||||
@@ -63,7 +70,9 @@
|
||||
"File Pull Order": "Triemlûkfolchoarder",
|
||||
"File Versioning": "Triemferzjebehear",
|
||||
"File permission bits are ignored when looking for changes. Use on FAT file systems.": "Bits foar triemrjochten wurde negearre yn it sykjen foar feroarings. Brûk dit op FAT-triemsystemen.",
|
||||
"Files are moved to .stversions directory when replaced or deleted by Syncthing.": "Files are moved to .stversions directory when replaced or deleted by Syncthing.",
|
||||
"Files are moved to .stversions folder when replaced or deleted by Syncthing.": "Triemen wurde ferset nei map .stversions wannear't troch Syncthing ferfangen of fuortsmiten.",
|
||||
"Files are moved to date stamped versions in a .stversions directory when replaced or deleted by Syncthing.": "Files are moved to date stamped versions in a .stversions directory when replaced or deleted by Syncthing.",
|
||||
"Files are moved to date stamped versions in a .stversions folder when replaced or deleted by Syncthing.": "Triemen wurde ferset nei in mei datum stimpele ferzjes yn in .stversions map wannear troch Syncthing ferfangen of fuortsmiten.",
|
||||
"Files are protected from changes made on other devices, but changes made on this device will be sent to the rest of the cluster.": "Triemen binne ymmĂșn foar feroarings makke troch oare apparaten, mar feroarings makke op dit apparaat wurde nei de rest fan 'e bondel ferstjoerd.",
|
||||
"Folder": "Map",
|
||||
@@ -76,7 +85,9 @@
|
||||
"GUI Authentication Password": "Wachtwurd foar ferifikaasje yn GUI",
|
||||
"GUI Authentication User": "Brûkers-ID foar ferifikaasje yn GUI",
|
||||
"GUI Listen Addresses": "Harkadres foar GUI",
|
||||
"GUI Theme": "Ynterfaasjetema",
|
||||
"Generate": "Generearje",
|
||||
"Global Changes": "WrĂąldwide Feroarings",
|
||||
"Global Discovery": "Wrùldwide ûntdekking",
|
||||
"Global Discovery Servers": "Wrùldwide ûntdekkingstsjinners",
|
||||
"Global State": "WrĂąldwide tastĂąn",
|
||||
@@ -87,6 +98,7 @@
|
||||
"Ignore Permissions": "Negear-rjochten",
|
||||
"Incoming Rate Limit (KiB/s)": "Downloadfluggenslimyt (KiB/s)",
|
||||
"Incorrect configuration may damage your folder contents and render Syncthing inoperable.": "Ferkearde konfiguraasje kin de ynhùld fan jo mappen skeine en Syncthing unbrûkber meitsje.",
|
||||
"Introduced By": "Yntrodusearre Troch",
|
||||
"Introducer": "Yntrodusearrer",
|
||||
"Inversion of the given condition (i.e. do not exclude)": "Dizze betingst omkeare (d.w.z. net Ăștslute) ",
|
||||
"Keep Versions": "Ferzjes bewarje",
|
||||
@@ -95,6 +107,8 @@
|
||||
"Last Scan": "LĂȘst Skent",
|
||||
"Last seen": "LĂȘst sjoen",
|
||||
"Later": "Letter",
|
||||
"Latest Change": "Meast Resinte Feroarings",
|
||||
"Learn more": "Mear witte",
|
||||
"Listeners": "Harkers",
|
||||
"Local Discovery": "Lokale ûntdekking",
|
||||
"Local State": "Lokale tastĂąn",
|
||||
@@ -112,6 +126,7 @@
|
||||
"Newest First": "Nijste earst",
|
||||
"No": "Nee",
|
||||
"No File Versioning": "Gjin triemferzjebehear",
|
||||
"No upgrades": "Gjin fernijings",
|
||||
"Normal": "Normaal",
|
||||
"Notice": "Notysje",
|
||||
"OK": "Okee",
|
||||
@@ -123,9 +138,12 @@
|
||||
"Out of Sync Items": "Net syngronisearre items",
|
||||
"Outgoing Rate Limit (KiB/s)": "Uploadfluggenslimyt (KiB/s)",
|
||||
"Override Changes": "Feroarings oerskriuwe",
|
||||
"Path": "Paad",
|
||||
"Path to the folder on the local computer. Will be created if it does not exist. The tilde character (~) can be used as a shortcut for": "Paad nei de map op de lokale kompjûter. Wurd oanmakke as dizze net bestiet. It tilde teken (~) kin brûkt wurde as fluchkeppeling foar",
|
||||
"Path where versions should be stored (leave empty for the default .stversions directory in the shared folder).": "Path where versions should be stored (leave empty for the default .stversions directory in the shared folder).",
|
||||
"Path where versions should be stored (leave empty for the default .stversions folder in the folder).": "Paad dĂȘr't de ferzjes bewarre wurde moatte (leech litte foar de standert .stversions-map yn de map).",
|
||||
"Pause": "Skoftsje",
|
||||
"Pause All": "Pause All",
|
||||
"Paused": "Skoftet",
|
||||
"Please consult the release notes before performing a major upgrade.": "Foardat jo in wichtige fernijing ynstallearre, graach earst de fernijingsoantekenings lĂȘze.",
|
||||
"Please set a GUI Authentication User and Password in the Settings dialog.": "Graach foar GUI-ferifikaasje in brûkers-ID en wachtwurd ynstelle yn it ynstellingsdialooch.",
|
||||
@@ -137,6 +155,7 @@
|
||||
"Random": "Willekeurich",
|
||||
"Reduced by ignore patterns": "Ferlytse troch negear-patroanen",
|
||||
"Release Notes": "Utjeftenotysjes",
|
||||
"Release candidates contain the latest features and fixes. They are similar to the traditional bi-weekly Syncthing releases.": "Ferzje kandidaten hawwe de lĂȘste mooglikheden en ferbetterings. Se binne allyksa de tradisjonele twa-wyklikse Syncthing ferzjes.",
|
||||
"Remote Devices": "Apparaten op OfstĂąn",
|
||||
"Remove": "Fuortsmite",
|
||||
"Required identifier for the folder. Must be the same on all cluster devices.": "Ferplicht ID foar de map. Moat op alle bondelapparaten itselde wĂȘze.",
|
||||
@@ -147,12 +166,15 @@
|
||||
"Restart Needed": "Werstart nedich",
|
||||
"Restarting": "Oan it werstarten",
|
||||
"Resume": "Trochgean",
|
||||
"Resume All": "Resume All",
|
||||
"Reused": "Opnij brûkt",
|
||||
"Save": "Bewarje",
|
||||
"Scan Time Remaining": "Oerbleaune skentiid",
|
||||
"Scanning": "Oan it skennen",
|
||||
"Select the devices to share this folder with.": "Sykje de apparaten Ășt om dizze map mei te dielen.",
|
||||
"Select the folders to share with this device.": "Sykje de mappen Ășt om mei dit apparaat te dielen.",
|
||||
"Send & Receive": "Stjoere & Untfange",
|
||||
"Send Only": "Allinnich Stjoere",
|
||||
"Settings": "Ynstellings",
|
||||
"Share": "Diele",
|
||||
"Share Folder": "Map diele",
|
||||
@@ -170,6 +192,9 @@
|
||||
"Single level wildcard (matches within a directory only)": "Inkel-nivo jokerteken (wildcard) (fergeliket allinnich binnen in map)",
|
||||
"Smallest First": "Lytste earst",
|
||||
"Source Code": "Boarnekoade",
|
||||
"Stable releases and release candidates": "Stabyle ferzjes en ferzje kanditaten",
|
||||
"Stable releases are delayed by about two weeks. During this time they go through testing as release candidates.": "Stabyle ferzjes wurde likernĂŽch twa wiken Ăștstelt. Yn die tiid wurde se testen as ferzje kandidaten.",
|
||||
"Stable releases only": "Allinnich stabyle ferzjes",
|
||||
"Staggered File Versioning": "Sprieden triemferzjebehear",
|
||||
"Start Browser": "Browser iepenje wannear't Syncthing start",
|
||||
"Statistics": "Statistiken",
|
||||
@@ -210,7 +235,9 @@
|
||||
"This Device": "Dit Apparaat",
|
||||
"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 is a major version upgrade.": "Dit is in wichtige ferzjefernijing.",
|
||||
"Time": "Tiid",
|
||||
"Trash Can File Versioning": "Jiskefet-triemferzjebehear",
|
||||
"Type": "Type",
|
||||
"Unknown": "Unbekend",
|
||||
"Unshared": "Net dielt",
|
||||
"Unused": "Net brûkt",
|
||||
@@ -221,14 +248,20 @@
|
||||
"Upgrading": "Oan it fernijen",
|
||||
"Upload Rate": "Oplaadfluggens",
|
||||
"Uptime": "Rintiid",
|
||||
"Usage reporting is always enabled for candidate releases.": "Brûkersrapportaazje stiet altyd oan foar ferzje kandidaten.",
|
||||
"Use HTTPS for GUI": "Brûk HTTPS foar GUI",
|
||||
"Version": "Ferzje",
|
||||
"Versions Path": "Ferzjes-paad",
|
||||
"Versions are automatically deleted if they are older than the maximum age or exceed the number of files allowed in an interval.": "Ferzjes wurde automatysk fuortsmiten wannear't se Ăąlder binne dan de maksimale Ăąldens of wannear it tal fan triemen yn in ynterval grutter is dan tastean.",
|
||||
"Warning, this path is a parent directory of an existing folder \"{%otherFolder%}\".": "WarskĂŽging, dit paad is in boppelizzende triemtafel fan in besteande map \"{{otherFolder}}\".",
|
||||
"Warning, this path is a parent directory of an existing folder \"{%otherFolderLabel%}\" ({%otherFolder%}).": "WarskĂŽging, dit paad is in boppelizzende triemtafel fan in besteande map \"{{otherFolderLabel}}\" ({{otherFolder}}).",
|
||||
"Warning, this path is a subdirectory of an existing folder \"{%otherFolder%}\".": "WarskÎging, dit paad is in ûnderlizzende triemtafel fan in besteande map \"{{otherFolder}}\".",
|
||||
"Warning, this path is a subdirectory of an existing folder \"{%otherFolderLabel%}\" ({%otherFolder%}).": "WarskÎging, dit paad is in ûnderlizzende triemtafel fan in besteande map \"{{otherFolderLabel}}\" ({{otherFolder}}).",
|
||||
"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",
|
||||
"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.",
|
||||
"You must keep at least one version.": "Jo moatte minstens ien ferzje bewarje.",
|
||||
"days": "dagen",
|
||||
"directories": "triemtafels",
|
||||
|
||||
@@ -1,30 +1,33 @@
|
||||
{
|
||||
"A device with that ID is already added.": "MĂĄr van hozzĂĄadott eszköz ezzel az azonosĂtĂłval.",
|
||||
"A negative number of days doesn't make sense.": "NegatĂv szĂĄmĂș nap nincs Ă©rtelmezve.",
|
||||
"A negative number of days doesn't make sense.": "NegatĂv szĂĄmĂș napnak nincs Ă©rtelme.",
|
||||
"A new major version may not be compatible with previous versions.": "Az Ășj fĆverziĂł nem feltĂ©tlenĂŒl kompatibilis az elĆzĆ fĆverziĂłkkal.",
|
||||
"API Key": "API kulcs",
|
||||
"API Key": "API-kulcs",
|
||||
"About": "Névjegy",
|
||||
"Action": "MƱvelet",
|
||||
"Actions": "MƱveletek",
|
||||
"Add": "HozzĂĄadĂĄs",
|
||||
"Add Device": "Eszköz hozzåadåsa",
|
||||
"Add Folder": "Mappa hozzĂĄadĂĄsa",
|
||||
"Add Remote Device": "Tåvoli eszköz hozzåadåsa",
|
||||
"Add new folder?": " Ăj mappa hozzĂĄadĂĄs?",
|
||||
"Add new folder?": "HozzĂĄadhatĂł az Ășj mappa?",
|
||||
"Address": "CĂm",
|
||||
"Addresses": "CĂmek",
|
||||
"Advanced": "HaladĂł",
|
||||
"Advanced Configuration": "HaladĂł beĂĄllĂtĂĄsok",
|
||||
"Advanced settings": "HaladĂł beĂĄllĂtĂĄsok",
|
||||
"All Data": "Minden adat",
|
||||
"Allow Anonymous Usage Reporting?": "EngedĂ©lyezed a nĂ©vtelen felhasznĂĄlĂĄsi adatok kĂŒldĂ©sĂ©t?",
|
||||
"Allow Anonymous Usage Reporting?": "A nĂ©vtelen felhasznĂĄlĂĄsi adatok elkĂŒldhetĆk?",
|
||||
"Alphabetic": "ABC sorrendben",
|
||||
"An external command handles the versioning. It has to remove the file from the synced folder.": "KĂŒlsĆ program kezeli a fĂĄjl verziĂłkövetĂ©st. A fĂĄjlt el kell tĂĄvolĂtania a szinkronizĂĄlt mappĂĄbĂłl.",
|
||||
"An external command handles the versioning. It has to remove the file from the shared folder.": "An external command handles the versioning. It has to remove the file from the shared folder.",
|
||||
"An external command handles the versioning. It has to remove the file from the synced folder.": "KĂŒlsĆ program kezeli a fĂĄjlverziĂł-követĂ©st. Az tĂĄvolĂtja el a fĂĄjlt a szinkronizĂĄlt mappĂĄbĂłl.",
|
||||
"Anonymous Usage Reporting": "NĂ©vtelen felhasznĂĄlĂĄsi adatok kĂŒldĂ©se",
|
||||
"Any devices configured on an introducer device will be added to this device as well.": "A bevezetĆ eszközön beĂĄllĂtott minden eszköz hozzĂĄ lesz adva ehhez az eszközhöz is.",
|
||||
"Automatic upgrade now offers the choice between stable releases and release candidates.": "Az automatikus frissĂtĂ©s most lehetĆsĂ©get kĂnĂĄl a stabil Ă©s az elĆzetes kiadĂĄsok közötti vĂĄlasztĂĄsra.",
|
||||
"Automatic upgrades": "Automatikus frissĂtĂ©sek",
|
||||
"Be careful!": "Légy óvatos!",
|
||||
"Be careful!": "Ăvatosan!",
|
||||
"Bugs": "HibĂĄk",
|
||||
"CPU Utilization": "Processzor hasznĂĄlat",
|
||||
"CPU Utilization": "ProcesszorhasznĂĄlat",
|
||||
"Changelog": "VĂĄltozĂĄsok",
|
||||
"Clean out after": "TakarĂtĂĄs",
|
||||
"Close": "BezĂĄrĂĄs",
|
||||
@@ -33,15 +36,17 @@
|
||||
"Compression": "TömörĂtĂ©s",
|
||||
"Configured": "BeĂĄllĂtott",
|
||||
"Connection Error": "KapcsolĂłdĂĄsi hiba",
|
||||
"Connection Type": "Kapcsolat tĂpus",
|
||||
"Connection Type": "KapcsolattĂpus",
|
||||
"Copied from elsewhere": "MĂĄshonnan mĂĄsolva",
|
||||
"Copied from original": "EredetirĆl mĂĄsolva",
|
||||
"Copyright © 2014-2016 the following Contributors:": "SzerzĆi jog © 2014-2016 az alĂĄbbi közremƱködĆk:",
|
||||
"Copyright © 2014-2017 the following Contributors:": "SzerzĆi jog © 2014-2017 az alĂĄbbi közremƱködĆk:",
|
||||
"Danger!": "Veszély!",
|
||||
"Deleted": "Törölve",
|
||||
"Device \"{%name%}\" ({%device%} at {%address%}) wants to connect. Add new device?": "\"{{name}}\" eszköz ({{device}} @ {{address}}) szeretne csatlakozni. HozzĂĄadod az Ășj eszközt?",
|
||||
"Device ID": "Eszköz azonosĂtĂł",
|
||||
"Device Identification": "Eszköz azonosĂtĂł",
|
||||
"Device": "Eszköz",
|
||||
"Device \"{%name%}\" ({%device%} at {%address%}) wants to connect. Add new device?": "\"{{name}}\" eszköz ({{device}} @ {{address}}) szeretne csatlakozni. HozzĂĄadhatĂł az Ășj eszköz?",
|
||||
"Device ID": "EszközazonosĂtĂł",
|
||||
"Device Identification": "EszközazonosĂtĂł",
|
||||
"Device Name": "Eszköz neve",
|
||||
"Devices": "Eszközök",
|
||||
"Disconnected": "Kapcsolat bontva",
|
||||
@@ -52,31 +57,37 @@
|
||||
"Downloaded": "Letöltve",
|
||||
"Downloading": "Letöltés",
|
||||
"Edit": "Szerkesztés",
|
||||
"Edit Device": "Eszköz szerkesztése",
|
||||
"Edit Folder": "Mappa szerkesztése",
|
||||
"Editing": "Szerkesztés",
|
||||
"Enable NAT traversal": "NAT bejårås engedélyezése",
|
||||
"Enable Relaying": "KözvetĂtĂ©s engedĂ©lyezĂ©se",
|
||||
"Enter comma separated (\"tcp://ip:port\", \"tcp://host:port\") addresses or \"dynamic\" to perform automatic discovery of the address.": "VesszĆvel elvĂĄlasztva több cĂm is bevihetĆ (\"tcp://ip:port\", \"tcp://host:port\"), az automatikus felderĂtĂ©shez a 'dynamic' kulcsszĂł hasznĂĄlatos. ",
|
||||
"Enter ignore patterns, one per line.": "Add meg a kihagyåsi mintåkat, soronként egyet.",
|
||||
"Enter ignore patterns, one per line.": "A kihagyåsi mintåkból soronként egyet kell megadni.",
|
||||
"Error": "Hiba",
|
||||
"External File Versioning": "KĂŒlsĆ fĂĄjl verziĂłkövetĂ©s",
|
||||
"External File Versioning": "KĂŒlsĆ fĂĄjlverziĂł-követĂ©s",
|
||||
"Failed Items": "HibĂĄs elemek",
|
||||
"File Pull Order": "FĂĄjl kĂŒldĂ©si sorrend",
|
||||
"File Versioning": "Fåjl verziókövetés",
|
||||
"File permission bits are ignored when looking for changes. Use on FAT file systems.": "FĂĄjl jogosultsĂĄgok figyelmen kĂvĂŒl hagyĂĄsa vĂĄltozĂĄsok keresĂ©sekor. FAT fĂĄjlrendszerek hasznĂĄlatakor.",
|
||||
"File Pull Order": "FĂĄjlkĂŒldĂ©si sorrend",
|
||||
"File Versioning": "Fåjlverzió-követés",
|
||||
"File permission bits are ignored when looking for changes. Use on FAT file systems.": "FĂĄjljogosultsĂĄgok figyelmen kĂvĂŒl hagyĂĄsa vĂĄltozĂĄsok keresĂ©sekor. FAT fĂĄjlrendszerek hasznĂĄlatakor hasznos.",
|
||||
"Files are moved to .stversions directory when replaced or deleted by Syncthing.": "Files are moved to .stversions directory when replaced or deleted by Syncthing.",
|
||||
"Files are moved to .stversions folder when replaced or deleted by Syncthing.": "Ha a Syncthing åthelyezi vagy törli a fåjlokat, akkor azok a .stversions mappåba lesznek åthelyezve.",
|
||||
"Files are moved to date stamped versions in a .stversions directory when replaced or deleted by Syncthing.": "Files are moved to date stamped versions in a .stversions directory when replaced or deleted by Syncthing.",
|
||||
"Files are moved to date stamped versions in a .stversions folder when replaced or deleted by Syncthing.": "Ha a Syncthing felĂŒlĂrja vagy törli a fĂĄjlokat, akkor azok a .stversions mappĂĄba lesznek ĂĄthelyezve, idĆbĂ©lyegzĆvel ellĂĄtva.",
|
||||
"Files are protected from changes made on other devices, but changes made on this device will be sent to the rest of the cluster.": "A fåjlok védve vannak a mås eszközökön történt våltozåsokkal szemben, de az ezen az eszközön történt våltozåsok érvényesek lesznek a többire.",
|
||||
"Folder": "Mappa",
|
||||
"Folder ID": "Mappa azonosĂtĂł",
|
||||
"Folder Label": "Mappa cĂmke",
|
||||
"Folder Path": "Mappa elĂ©rĂ©si Ăștja",
|
||||
"Folder Type": "Mappa tĂpus",
|
||||
"Folder ID": "MappaazonosĂtĂł",
|
||||
"Folder Label": "MappacĂmke",
|
||||
"Folder Path": "Mappa elĂ©rĂ©si Ăștvonala",
|
||||
"Folder Type": "MappatĂpus",
|
||||
"Folders": "MappĂĄk",
|
||||
"GUI": "Grafikus felĂŒlet",
|
||||
"GUI Authentication Password": "Grafikus felĂŒlet jelszava",
|
||||
"GUI Authentication User": "Grafikus felĂŒlet felhasznĂĄlĂł neve ",
|
||||
"GUI Authentication User": "Grafikus felĂŒlet felhasznĂĄlĂłi neve ",
|
||||
"GUI Listen Addresses": "Grafikus felĂŒlet cĂme",
|
||||
"GUI Theme": "Grafikus felĂŒlet tĂ©mĂĄja",
|
||||
"Generate": "GenerĂĄlĂĄs",
|
||||
"Global Changes": "GlobĂĄlis mĂłdosĂtĂĄsok",
|
||||
"Global Discovery": "Globålis felfedezés",
|
||||
"Global Discovery Servers": "GlobĂĄlis felfedezĆ kiszolgĂĄlĂłk",
|
||||
"Global State": "GlobĂĄlis ĂĄllapot",
|
||||
@@ -85,8 +96,9 @@
|
||||
"Ignore": "Figyelmen kĂvĂŒl hagyĂĄs",
|
||||
"Ignore Patterns": "KihagyĂĄsi mintĂĄk",
|
||||
"Ignore Permissions": "JogosultsĂĄgok figyelmen kĂvĂŒl hagyĂĄsa",
|
||||
"Incoming Rate Limit (KiB/s)": "BejövĆ sebessĂ©g korlĂĄt (KIB/mp)",
|
||||
"Incoming Rate Limit (KiB/s)": "BejövĆ sebessĂ©gkorlĂĄt (KiB/mp)",
|
||||
"Incorrect configuration may damage your folder contents and render Syncthing inoperable.": "Helytelen konfiguråció esetén kårosodhat a mappåk tartalma és mƱködésképtelenné vålhat a Syncthing.",
|
||||
"Introduced By": "Bevezette",
|
||||
"Introducer": "BevezetĆ",
|
||||
"Inversion of the given condition (i.e. do not exclude)": "A feltétel ellentéte (pl. ki nem hagyås)",
|
||||
"Keep Versions": "Megtartott verziĂłk",
|
||||
@@ -95,11 +107,13 @@
|
||||
"Last Scan": "UtolsĂł vizsgĂĄlat",
|
||||
"Last seen": "UtoljĂĄra lĂĄtva",
|
||||
"Later": "KĂ©sĆbb",
|
||||
"Latest Change": "UtolsĂł mĂłdosĂtĂĄs",
|
||||
"Learn more": "Tudj meg többet",
|
||||
"Listeners": "Kapcsolatok",
|
||||
"Local Discovery": "Helyi felfedezés",
|
||||
"Local State": "Helyi ĂĄllapot",
|
||||
"Local State (Total)": "Helyi ĂĄllapot (Teljes)",
|
||||
"Major Upgrade": "FĆverziĂł frissĂtĂ©s",
|
||||
"Local State (Total)": "Helyi ĂĄllapot (teljes)",
|
||||
"Major Upgrade": "FĆverziĂł-frissĂtĂ©s",
|
||||
"Master": "Központi",
|
||||
"Maximum Age": "MaximĂĄlis kor",
|
||||
"Metadata Only": "Csak metaadatok",
|
||||
@@ -111,7 +125,8 @@
|
||||
"New Folder": "Ăj mappa",
|
||||
"Newest First": "Ăjabb elĆször",
|
||||
"No": "Nem",
|
||||
"No File Versioning": "Nincs fåjl verziókövetés",
|
||||
"No File Versioning": "Nincs fåjlverzió-követés",
|
||||
"No upgrades": "Nincsenek frissĂtĂ©sek",
|
||||
"Normal": "NormĂĄl",
|
||||
"Notice": "Megjegyzés",
|
||||
"OK": "Rendben",
|
||||
@@ -123,20 +138,24 @@
|
||||
"Out of Sync Items": "Nem szinkronizĂĄlt elemek",
|
||||
"Outgoing Rate Limit (KiB/s)": "KimenĆ sĂĄvszĂ©lessĂ©g (KiB/mp)",
|
||||
"Override Changes": "VĂĄltoztatĂĄsok felĂŒlbĂrĂĄlĂĄsa",
|
||||
"Path to the folder on the local computer. Will be created if it does not exist. The tilde character (~) can be used as a shortcut for": "A mappa elĂ©rĂ©si Ăștja az eszközön. Amennyiben nem lĂ©tezik, a program automatikusan lĂ©trehozza. A hullĂĄmvonal (~) a következĆ helyettesĂtĂ©sre hasznĂĄlhatĂł: ",
|
||||
"Path": "Ătvonal",
|
||||
"Path to the folder on the local computer. Will be created if it does not exist. The tilde character (~) can be used as a shortcut for": "A mappa elĂ©rĂ©si Ăștvonala az eszközön. Amennyiben nem lĂ©tezik, a program automatikusan lĂ©trehozza. A hullĂĄmvonal (~) a következĆ helyettesĂtĂ©sre hasznĂĄlhatĂł: ",
|
||||
"Path where versions should be stored (leave empty for the default .stversions directory in the shared folder).": "Path where versions should be stored (leave empty for the default .stversions directory in the shared folder).",
|
||||
"Path where versions should be stored (leave empty for the default .stversions folder in the folder).": "A verziĂłk tĂĄrolĂĄsĂĄra szolgĂĄlĂł elĂ©rĂ©si Ășt (ĂŒresen hagyva az alapĂ©rtelmezett .stversions mappa)",
|
||||
"Pause": "SzĂŒnet",
|
||||
"Pause All": "Mindent szĂŒneteltet",
|
||||
"Paused": "SzĂŒnetel",
|
||||
"Please consult the release notes before performing a major upgrade.": "Nagyobb frissĂtĂ©s elĆtt ellenĆrizni kell a kiadĂĄsi megjegyzĂ©seket.",
|
||||
"Please set a GUI Authentication User and Password in the Settings dialog.": "KĂ©rlek, ĂĄllĂtsd be a grafikus felĂŒlet felhasznĂĄlĂłnevĂ©t Ă©s jelszavĂĄt a BeĂĄllĂtĂĄsok ablakban.",
|
||||
"Please wait": "Kérlek, vårj",
|
||||
"Please set a GUI Authentication User and Password in the Settings dialog.": "Be kell ĂĄllĂtani a grafikus felĂŒlet felhasznĂĄlĂłnevĂ©t Ă©s jelszavĂĄt a BeĂĄllĂtĂĄsok pĂĄrbeszĂ©dablakban.",
|
||||
"Please wait": "TĂŒrelem",
|
||||
"Preview": "ElĆnĂ©zet",
|
||||
"Preview Usage Report": "Felhasznålåsi adatok åtnézése",
|
||||
"Preview Usage Report": "Hasznålati jelentés åttekintése",
|
||||
"Quick guide to supported patterns": "Rövid ĂștmutatĂł a hasznĂĄlhatĂł mintĂĄkrĂłl",
|
||||
"RAM Utilization": "MemĂłria hasznĂĄlat",
|
||||
"RAM Utilization": "MemĂłriahasznĂĄlat",
|
||||
"Random": "VéletlenszerƱ",
|
||||
"Reduced by ignore patterns": "Kihagyåsi mintåkkal csökkentve",
|
||||
"Release Notes": "Kiadåsi megjegyzések",
|
||||
"Release candidates contain the latest features and fixes. They are similar to the traditional bi-weekly Syncthing releases.": "Az elĆzetes kiadĂĄsok tartalmazzĂĄk a legĂșjabb fejlesztĂ©seket Ă©s javĂtĂĄsokat. Ezek hasonlĂłak a hagyomĂĄnyos, kĂ©theti Syncthing kiadĂĄsokhoz.",
|
||||
"Remote Devices": "Tåvoli eszközök",
|
||||
"Remove": "EltĂĄvolĂtĂĄs",
|
||||
"Required identifier for the folder. Must be the same on all cluster devices.": "A mappa szĂŒksĂ©ges azonosĂtĂłja. Minden fĂŒrtözött eszközön azonosnak kell lennie.",
|
||||
@@ -147,30 +166,36 @@
|
||||
"Restart Needed": "ĂjraindĂtĂĄs szĂŒksĂ©ges",
|
||||
"Restarting": "ĂjraindulĂĄs",
|
||||
"Resume": "FolytatĂĄs",
|
||||
"Resume All": "Mindent folytat",
|
||||
"Reused": "ĂjrafelhasznĂĄlva",
|
||||
"Save": "Mentés",
|
||||
"Scan Time Remaining": "FennmaradĂł ĂĄtnĂ©zĂ©si idĆ",
|
||||
"Scanning": "ĂtnĂ©zĂ©s",
|
||||
"Select the devices to share this folder with.": "Vålaszd ki az eszközöket, amelyekkel meg szeretnéd osztani a mappåt",
|
||||
"Select the folders to share with this device.": "Vålaszd ki a mappåkat, amiket meg szeretnél osztani ezzel az eszközzel.",
|
||||
"Select the devices to share this folder with.": "Eszközök, amelyekkel megosztandó a mappa",
|
||||
"Select the folders to share with this device.": "Mappåk, amelyek megosztandók ezzel az eszközzel.",
|
||||
"Send & Receive": "KĂŒldĂ©s Ă©s fogadĂĄs",
|
||||
"Send Only": "Csak kĂŒldĂ©s",
|
||||
"Settings": "BeĂĄllĂtĂĄsok",
|
||||
"Share": "MegosztĂĄs",
|
||||
"Share Folder": "Mappa megosztĂĄsa",
|
||||
"Share Folders With Device": "Mappåk megosztåsa az eszközzel",
|
||||
"Share With Devices": "Megosztås mås eszközzel",
|
||||
"Share this folder?": "Megosztod ezt a mappĂĄt?",
|
||||
"Share this folder?": "MegoszthatĂł ez a mappa?",
|
||||
"Shared With": "Megosztva ezekkel:",
|
||||
"Show ID": "AzonosĂtĂł mutatĂĄsa",
|
||||
"Show QR": "QR-kĂłd mutatĂĄsa",
|
||||
"Shown instead of Device ID in the cluster status. Will be advertised to other devices as an optional default name.": "Az eszköz azonosĂtĂł helyett jelenik meg. A többi eszközön alapĂ©rtelmezett nĂ©vkĂ©nt hasznĂĄlhatĂł. ",
|
||||
"Shown instead of Device ID in the cluster status. Will be updated to the name the device advertises if left empty.": "Az eszköz azonosĂtĂł helyett jelenik meg. Ăresen hagyva az eszköz sajĂĄt neve lesz hasznĂĄlva ",
|
||||
"Shown instead of Device ID in the cluster status. Will be advertised to other devices as an optional default name.": "Az eszközazonosĂtĂł helyett jelenik meg. A többi eszközön alapĂ©rtelmezett nĂ©vkĂ©nt hasznĂĄlhatĂł. ",
|
||||
"Shown instead of Device ID in the cluster status. Will be updated to the name the device advertises if left empty.": "Az eszközazonosĂtĂł helyett jelenik meg. Ăresen hagyva az eszköz sajĂĄt neve lesz alkalmazva.",
|
||||
"Shutdown": "LeĂĄllĂtĂĄs",
|
||||
"Shutdown Complete": "LeĂĄllĂtĂĄs kĂ©sz",
|
||||
"Simple File Versioning": "EgyszerƱ fåjl verziókövetés",
|
||||
"Simple File Versioning": "EgyszerƱ fåjlverzió-követés",
|
||||
"Single level wildcard (matches within a directory only)": "EgyszintƱ helyettesĂtĆ karakter (csak egy mappĂĄra Ă©rvĂ©nyes)",
|
||||
"Smallest First": "Kisebb elĆször",
|
||||
"Source Code": "ForrĂĄskĂłd",
|
||||
"Staggered File Versioning": "TöbbszintƱ fåjl verziókövetés",
|
||||
"Stable releases and release candidates": "Stabil Ă©s elĆzetes kiadĂĄsok ",
|
||||
"Stable releases are delayed by about two weeks. During this time they go through testing as release candidates.": "A stabil kiadĂĄsok nagyjĂĄbĂłl kĂ©t hĂ©ttel el vannak csĂșsztatva. Ez alatt elĆzetes kiadĂĄskĂ©nt tesztelĂ©sen mennek keresztĂŒl.",
|
||||
"Stable releases only": "Csak stabil kiadĂĄsok",
|
||||
"Staggered File Versioning": "TöbbszintƱ fåjlverzió-követés",
|
||||
"Start Browser": "BöngĂ©szĆ indĂtĂĄsa",
|
||||
"Statistics": "Statisztika",
|
||||
"Stopped": "LeĂĄllĂtva",
|
||||
@@ -178,63 +203,71 @@
|
||||
"Sync Protocol Listen Addresses": "SzinkronizĂĄciĂłs protokoll cĂme",
|
||||
"Syncing": "SzinkronizĂĄlĂĄs",
|
||||
"Syncthing has been shut down.": "Syncthing leĂĄllĂtva",
|
||||
"Syncthing includes the following software or portions thereof:": "Syncthing a következĆ programokat, vagy komponenseket tartalmazza.",
|
||||
"Syncthing includes the following software or portions thereof:": "A Syncthing a következĆ programokat, vagy komponenseket tartalmazza.",
|
||||
"Syncthing is restarting.": "Syncthing Ășjraindul",
|
||||
"Syncthing is upgrading.": "Syncthing frissĂŒl",
|
||||
"Syncthing seems to be down, or there is a problem with your Internet connection. RetryingâŠ": "Ăgy tƱnik, hogy a Syncthing nem mƱködik, vagy valami problĂ©ma van a hĂĄlĂłzati kapcsolattal. Ăjra prĂłbĂĄlom...",
|
||||
"Syncthing seems to be experiencing a problem processing your request. Please refresh the page or restart Syncthing if the problem persists.": "Ăgy tƱnik, hogy a Syncthing problĂ©mĂĄba ĂŒtközött a kĂ©rĂ©s feldolgozĂĄsa sorĂĄn. Ha a problĂ©ma tovĂĄbbra is fennĂĄll, akkor frissĂteni kell az oldalt, vagy Ășjra kell indĂtani a Syncthinget.",
|
||||
"The Syncthing admin interface is configured to allow remote access without a password.": "A Syncthing adminisztrĂĄciĂłs felĂŒletĂ©nek tĂĄvoli elĂ©rĂ©se be van kapcsolva jelszĂł nĂ©lkĂŒl.",
|
||||
"The aggregated statistics are publicly available at the URL below.": "Az összesĂtett statisztikĂĄk elĂ©rhetĆk az alĂĄbbi cĂmen.",
|
||||
"The configuration has been saved but not activated. Syncthing must restart to activate the new configuration.": "A beĂĄllĂtĂĄsok elmentĂ©sre kerĂŒltek, de nem lettek aktivĂĄlva. IndĂtsd Ășjra a Syncthing-et, hogy aktivĂĄld Ćket.",
|
||||
"The device ID cannot be blank.": "Az eszköz azonosĂtĂł nem lehet ĂŒres.",
|
||||
"The configuration has been saved but not activated. Syncthing must restart to activate the new configuration.": "A beĂĄllĂtĂĄsok elmentĂ©sre kerĂŒltek, de nem lettek aktivĂĄlva. Ăjra kell indĂtani a Syncthing-et az aktivĂĄlĂĄsukhoz.",
|
||||
"The device ID cannot be blank.": "Az eszközazonosĂtĂł nem lehet ĂŒres.",
|
||||
"The device ID to enter here can be found in the \"Actions > Show ID\" dialog on the other device. Spaces and dashes are optional (ignored).": "Az itt megadandĂł eszközazonosĂtĂł a mĂĄsik eszköz MƱveletek > AzonosĂtĂł mutatĂĄsa cĂmƱ ablakĂĄban lĂĄthatĂł. SzĂłközök Ă©s kötĆjelek hasznĂĄlhatĂłk (nem szĂĄmĂtanak).",
|
||||
"The encrypted usage report is sent daily. It is used to track common platforms, folder sizes and app versions. If the reported data set is changed you will be prompted with this dialog again.": "A titkosĂtott felhasznĂĄlĂĄsi adatok naponta kerĂŒlnek kĂŒldĂ©sre. Arra hasznĂĄljuk Ćket hogy kövessĂŒk a kĂŒlönbözĆ platformokat, mappa mĂ©reteket Ă©s program verziĂłkat. Amennyiben az elkĂŒldĂ©sre kerĂŒlĆ adat megvĂĄltozik, ez az ablak Ășjra megjelenik.",
|
||||
"The entered device ID does not look valid. It should be a 52 or 56 character string consisting of letters and numbers, with spaces and dashes being optional.": "A beĂrt eszköz azonosĂtĂł nem valĂłdi. Az azonosĂtĂł 52 vagy 56 karakter hosszĂș, szĂĄmokbĂłl Ă©s betƱkbĆl ĂĄll, opcionĂĄlisan szĂłközöket Ă©s kötĆjeleket tartalmaz.",
|
||||
"The first command line parameter is the folder path and the second parameter is the relative path in the folder.": "Az elsĆ parancssori paramĂ©ter a mappa elĂ©rĂ©si Ăștja, a mĂĄsodik a relatĂv elĂ©rĂ©si Ășt a mappĂĄban.",
|
||||
"The folder ID cannot be blank.": "A mappa azonosĂtĂł nem lehet ĂŒres.",
|
||||
"The folder ID must be unique.": "A mappa azonosĂtĂł egyedi kell legyen",
|
||||
"The folder path cannot be blank.": "Az elĂ©rĂ©si Ășt nem lehet ĂŒres",
|
||||
"The encrypted usage report is sent daily. It is used to track common platforms, folder sizes and app versions. If the reported data set is changed you will be prompted with this dialog again.": "A titkosĂtott felhasznĂĄlĂĄsi adatok naponta kerĂŒlnek kĂŒldĂ©sre. Arra hasznĂĄljuk Ćket, hogy kövessĂŒk a kĂŒlönbözĆ platformokat, mappamĂ©reteket Ă©s programverziĂłkat. Az elkĂŒldött adatcsomag vĂĄltozĂĄsa esetĂ©n ismĂ©telt engedĂ©lyezĂ©si kĂ©rĂ©s fog megjelenni.",
|
||||
"The entered device ID does not look valid. It should be a 52 or 56 character string consisting of letters and numbers, with spaces and dashes being optional.": "A megadott eszközazonosĂtĂł nem tƱnik Ă©rvĂ©nyesnek. Az azonosĂtĂł 52 vagy 56 karakterbĆl kell ĂĄlljon, betƱket Ă©s szĂĄmokat tartalmazhat., opcionĂĄlisan szĂłközöket Ă©s kötĆjeleket.",
|
||||
"The first command line parameter is the folder path and the second parameter is the relative path in the folder.": "Az elsĆ parancssori paramĂ©ter a mappa elĂ©rĂ©si Ăștvonala, a mĂĄsodik a relatĂv elĂ©rĂ©si Ășt a mappĂĄban.",
|
||||
"The folder ID cannot be blank.": "A mappaazonosĂtĂł nem lehet ĂŒres.",
|
||||
"The folder ID must be unique.": "A mappaazonosĂtĂł egyedi kell legyen.",
|
||||
"The folder path cannot be blank.": "Az elĂ©rĂ©si Ăștvonal nem lehet ĂŒres.",
|
||||
"The following intervals are used: for the first hour a version is kept every 30 seconds, for the first day a version is kept every hour, for the first 30 days a version is kept every day, until the maximum age a version is kept every week.": "A következĆ intervallumokat hasznĂĄljuk: egy rĂ©gi verziĂłt ĆrzĂŒnk meg az elsĆ ĂłrĂĄban minden 30 mĂĄsodpercben, az elsĆ nap minden ĂłrĂĄban, az elsĆ 30 napban minden nap, egĂ©szen addig amĂg el nem Ă©rjĂŒk a maximĂĄlisan megtarthatĂł verziĂłk szĂĄmĂĄt minden hĂ©ten.",
|
||||
"The following items could not be synchronized.": "A következĆ elemek nem szinkronizĂĄlhatĂłak.",
|
||||
"The maximum age must be a number and cannot be blank.": "A maximĂĄlis kornak szĂĄmnak kell lenni Ă©s nem lehet ĂŒres",
|
||||
"The maximum time to keep a version (in days, set to 0 to keep versions forever).": "A verziók megtartåsånak maximålis ideje (napokban, ha 0-t adsz meg örökre megmaradnak).",
|
||||
"The minimum free disk space percentage must be a non-negative number between 0 and 100 (inclusive).": "A minimĂĄlis szabad terĂŒlet szĂĄzalĂ©kos, nem-negatĂv Ă©rtĂ©ke 0 Ă©s 100 között",
|
||||
"The maximum age must be a number and cannot be blank.": "A maximĂĄlis kornak szĂĄmnak kell lenni Ă©s nem lehet ĂŒres.",
|
||||
"The maximum time to keep a version (in days, set to 0 to keep versions forever).": "A verziók megtartåsånak maximålis ideje (napokban, 0-t megadva örökre megmaradnak).",
|
||||
"The minimum free disk space percentage must be a non-negative number between 0 and 100 (inclusive).": "A minimĂĄlis szabad terĂŒlet szĂĄzalĂ©kos, nem-negatĂv Ă©rtĂ©ke 0 Ă©s 100 között.",
|
||||
"The number of days must be a number and cannot be blank.": "A napok szĂĄma szĂĄm kell legyen Ă©s nem lehet ĂŒres.",
|
||||
"The number of days to keep files in the trash can. Zero means forever.": "A napok szåma ameddig a fåjlok meg lesznek tartva a szemetesben. A 0 azt jelenti örökre.",
|
||||
"The number of old versions to keep, per file.": "A megtartott régi verziók szåma, fåjlonként.",
|
||||
"The number of versions must be a number and cannot be blank.": "A megtartott verziĂłk szĂĄma nem lehet ĂŒres",
|
||||
"The path cannot be blank.": "ElĂ©rĂ©si Ășt nem lehet ĂŒres.",
|
||||
"The rate limit must be a non-negative number (0: no limit)": "Az arĂĄny limitnek pozitĂv szĂĄmnak kell lennie (0: nincs limit)",
|
||||
"The rescan interval must be a non-negative number of seconds.": "Az åtnézési intervallum nullånål nagyobb måsodperc érték kell legyen",
|
||||
"The number of days to keep files in the trash can. Zero means forever.": "A napok szåma, ameddig a fåjlok meg lesznek tartva a szemetesben. A 0 azt jelenti, hogy örökre.",
|
||||
"The number of old versions to keep, per file.": "A megtartott régi verziók szåma fåjlonként.",
|
||||
"The number of versions must be a number and cannot be blank.": "A megtartott verziĂłk szĂĄma nem lehet ĂŒres.",
|
||||
"The path cannot be blank.": "Az elĂ©rĂ©si Ăștvonal nem lehet ĂŒres.",
|
||||
"The rate limit must be a non-negative number (0: no limit)": "A sebessĂ©glimitnek pozitĂv szĂĄmnak kell lennie (0: nincs limit)",
|
||||
"The rescan interval must be a non-negative number of seconds.": "Az åtnézési intervallum nullånål nagyobb måsodperc érték kell legyen.",
|
||||
"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 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Ă©peden tĂĄrolt fĂĄjlok olvasĂĄsĂĄhoz Ă©s mĂłdosĂtĂĄsĂĄhoz.",
|
||||
"This is a major version upgrade.": "Ez egy fĆverziĂł frissĂtĂ©s.",
|
||||
"Trash Can File Versioning": "Szemetes fåjl verziókövetés",
|
||||
"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 is a major version upgrade.": "Ez egy fĆverziĂł-frissĂtĂ©s.",
|
||||
"Time": "IdĆ",
|
||||
"Trash Can File Versioning": "Szemetes fåjlverzió-követés",
|
||||
"Type": "TĂpus",
|
||||
"Unknown": "Ismeretlen",
|
||||
"Unshared": "Nincs megosztva",
|
||||
"Unused": "Nincs hasznĂĄlatban",
|
||||
"Up to Date": "Friss",
|
||||
"Updated": "FrissĂtve",
|
||||
"Upgrade": "FrissĂtĂ©s",
|
||||
"Upgrade To {%version%}": "FrissĂtĂ©s a {{version}} verziĂłra",
|
||||
"Upgrade To {%version%}": "FrissĂtĂ©s a verziĂłra: {{version}}",
|
||||
"Upgrading": "FrissĂtĂ©s",
|
||||
"Upload Rate": "Feltöltési sebesség",
|
||||
"Uptime": "ĂzemidĆ",
|
||||
"Use HTTPS for GUI": "HTTPS hasznĂĄlata a felĂŒlethez",
|
||||
"Usage reporting is always enabled for candidate releases.": "Az elĆzetes kiadĂĄsokban a hasznĂĄlati jelentĂ©s mindig engedĂ©lyezett.",
|
||||
"Use HTTPS for GUI": "HTTPS hasznĂĄlata a grafikus felĂŒlethez",
|
||||
"Version": "VerziĂł",
|
||||
"Versions Path": "VerziĂłk Ăștvonala",
|
||||
"Versions are automatically deleted if they are older than the maximum age or exceed the number of files allowed in an interval.": "A rĂ©gi verziĂłk automatikusan törlĆdnek, amennyiben öregebbek mint a maximum kor, vagy mĂĄr több van belĆlĂŒk mint az adott idĆszakban megtarthatĂł maximum.",
|
||||
"Warning, this path is a subdirectory of an existing folder \"{%otherFolder%}\".": "Figyelem, ez az Ăștvonal egy meglĂ©vĆ mappa alkönyvtĂĄra \"{{otherFolder}}\".",
|
||||
"When adding a new device, keep in mind that this device must be added on the other side too.": "Amikor Ășj eszközt adsz hozzĂĄ, tartsd Ă©szben, 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.": "Amikor Ășj mappĂĄt adsz hozzĂĄ, tartsd Ă©szben, hogy a mappa azonosĂtĂł arra valĂł hogy összekösd a mappĂĄkat az eszközeiden. Az azonosĂtĂł kisbetƱ-nagybetƱ Ă©rzĂ©keny Ă©s pontosan egyeznie kell az eszközökön.",
|
||||
"Versions are automatically deleted if they are older than the maximum age or exceed the number of files allowed in an interval.": "A rĂ©gi verziĂłk automatikusan törlĆdnek, amennyiben öregebbek, mint a maximum kor, vagy mĂĄr több van belĆlĂŒk, mint az adott idĆszakban megtarthatĂł maximum.",
|
||||
"Warning, this path is a parent directory of an existing folder \"{%otherFolder%}\".": "Figyelem, ez az Ăștvonal a meglĂ©vĆ â{{otherFolder}}â mappa szĂŒlĆmappĂĄja.",
|
||||
"Warning, this path is a parent directory of an existing folder \"{%otherFolderLabel%}\" ({%otherFolder%}).": "Figyelem, ez az Ăștvonal a meglĂ©vĆ â{{otherFolderLabel}}â ({{otherFolder}}) mappa szĂŒlĆmappĂĄja.",
|
||||
"Warning, this path is a subdirectory of an existing folder \"{%otherFolder%}\".": "Figyelem, ez az Ăștvonal a meglĂ©vĆ â{{otherFolder}}â mappa almappĂĄja.",
|
||||
"Warning, this path is a subdirectory of an existing folder \"{%otherFolderLabel%}\" ({%otherFolder%}).": "Figyelem, ez az Ăștvonal a meglĂ©vĆ â{{otherFolderLabel}}â ({{otherFolder}}) mappa almappĂĄja.",
|
||||
"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",
|
||||
"You must keep at least one version.": "LegalĂĄbb egy verziĂłt meg kell tartanod.",
|
||||
"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.",
|
||||
"You must keep at least one version.": "LegalĂĄbb egy verziĂłt meg kell tartani.",
|
||||
"days": "nap",
|
||||
"directories": "könyvtårak",
|
||||
"files": "fĂĄjlok",
|
||||
"directories": "mappa",
|
||||
"files": "fĂĄjl",
|
||||
"full documentation": "teljes dokumentĂĄciĂł",
|
||||
"items": "elem",
|
||||
"{%device%} wants to share folder \"{%folder%}\".": "{{device}} meg szeretné osztani a \"{{folder}}\" nevƱ mappåt.",
|
||||
"{%device%} wants to share folder \"{%folderlabel%}\" ({%folder%}).": "{{device}} szeretné megosztani \"{{folderlabel}}\" ({{folder}}) mappåt."
|
||||
"{%device%} wants to share folder \"{%folder%}\".": "{{device}} szeretnĂ© megosztani a mappĂĄt: â{{folder}}â.",
|
||||
"{%device%} wants to share folder \"{%folderlabel%}\" ({%folder%}).": "{{device}} szeretnĂ© megosztani a mappĂĄt: â{{folderlabel}}â ({{folder}})."
|
||||
}
|
||||
Some files were not shown because too many files have changed in this diff Show More
Reference in New Issue
Block a user