Compare commits

..
158 Commits
Author SHA1 Message Date
Simon FreiandJakob Borg 601a4fac1a cmd/syncthing: Accept absolute -home paths (regression from #3183)
GitHub-Pull-Request: https://github.com/syncthing/syncthing/pull/4033
2017-03-09 14:57:12 +00:00
Jakob Borg f4ccc69422 gui, man: Update docs & translations 2017-03-09 14:13:11 +01:00
Audrius ButkeviciusandJakob Borg ceea5ebeb3 lib/connections, vendor: Change KCP mux to SMUX
Closes #4032
2017-03-09 14:03:09 +01:00
Jakob Borg f35e1ac0c5 lib/config: Oops, update tests 2017-03-08 14:23:48 +01:00
Jakob Borg 0e76f9d93b lib/config: Update default update interval for KCP 2017-03-08 14:18:39 +01:00
Simon FreiandJakob Borg 1b08176583 gui: Update translation strings
GitHub-Pull-Request: https://github.com/syncthing/syncthing/pull/4031
2017-03-08 12:38:25 +00:00
Jakob Borg b3e2665a79 vendor: Update github.com/xtaci/kcp 2017-03-07 14:29:21 +01:00
Jakob BorgandAudrius Butkevicius 81af29e3e2 lib/config, lib/connections: Configurables for KCP, disable by default
GitHub-Pull-Request: https://github.com/syncthing/syncthing/pull/4030
2017-03-07 12:55:50 +00:00
Audrius ButkeviciusandJakob Borg 0da0774ce4 lib/connections: Add KCP support (fixes #804)
GitHub-Pull-Request: https://github.com/syncthing/syncthing/pull/3489
2017-03-07 12:44:16 +00:00
Jakob Borg 151004d645 vendor: Update github.com/syndtr/goleveldb 2017-03-07 11:57:45 +01:00
Jakob Borg 4e3fdfaeef build: Disable seemingly buggy staticcheck warning 2017-03-07 11:51:58 +01:00
Simon FreiandJakob Borg 1c29a93013 lib/events, cmd/syncthing: Correct GlobalID in debug and mark "since" parameter optional
Skip-check: metalint

GitHub-Pull-Request: https://github.com/syncthing/syncthing/pull/4025
2017-03-07 05:44:47 +00:00
Jakob Borg 689f13f4f1 build: Don't check for supported Go version
One thing less to maintain, and you can discover for yourself if it
builds or not.
2017-03-05 10:31:56 +01:00
Jakob Borg 0558565a95 build, jenkins: Build for linux-mipsle 2017-03-05 10:13:07 +01:00
Jakob Borg b84c4e1417 vendor: Update github.com/minio/sha256-simd 2017-03-05 10:12:54 +01:00
Simon FreiandJakob Borg 416811a2a9 cmd/syncthing, lib/config: Pause/resume all devices whithout argument
GitHub-Pull-Request: https://github.com/syncthing/syncthing/pull/3989
LGTM: AudriusButkevicius, calmh
2017-03-04 07:54:13 +00:00
Simon FreiandJakob Borg c20d612736 cmd/syncthing, lib/model: Handle rel/abs paths for config/protected paths (fixes #3183)
GitHub-Pull-Request: https://github.com/syncthing/syncthing/pull/3995
2017-03-04 07:49:48 +00:00
Jakob Borg 3475a9ab0a jenkins: Remove spurious 'parts' directory when cleaning 2017-03-04 08:22:35 +01:00
Jakob Borg d7adee05a8 build, jenkins: Build for mips (fixes #3959) 2017-03-04 07:48:42 +01:00
Jakob Borg 73cbd17e17 vendor: Update github.com/minio/sha256-simd with patch for mips 2017-03-04 07:48:16 +01:00
Jakob Borg 7260629bc0 vendor: Update golang.org/x/net/ipv6 2017-03-04 07:28:11 +01:00
andresviaandJakob Borg 566c348b00 build: Remove obsolete check for vendoring support
Skip-check: authors

GitHub-Pull-Request: https://github.com/syncthing/syncthing/pull/4008
2017-02-26 15:12:20 +00:00
chucicandAudrius Butkevicius 190f153b92 gui: Correct usage of folder vs directory
skip-check: authors

GitHub-Pull-Request: https://github.com/syncthing/syncthing/pull/4007
2017-02-25 17:43:07 +00:00
HairyFotrandJakob Borg c56c48a777 all: Correct various typos
Skip-check: authors

GitHub-Pull-Request: https://github.com/syncthing/syncthing/pull/4005
2017-02-25 08:12:13 +00:00
Wulf Weich 98d22b88a0 gui: Fix icons in pause / resume all buttons (fixes #4003)
GitHub-Pull-Request: https://github.com/syncthing/syncthing/pull/4004
2017-02-24 08:42:32 +00:00
Jakob Borg 28449f9f5b gui, man: Update docs and translations 2017-02-23 07:47:07 +01:00
Jakob Borg a0e2e7a962 gui: Translation strinsg for pause/resume all 2017-02-22 04:03:41 +01:00
Ben SandJakob Borg fb6d453c74 gui: Update button wording
GitHub-Pull-Request: https://github.com/syncthing/syncthing/pull/3982
2017-02-10 17:21:16 +00:00
Jakob BorgandAudrius Butkevicius 89f8be40c6 lib/model: Use ignore patterns in remote completion calculation
Basically, if we don't care about the sync status of the file we should
not tag someone else out of sync because they don't have the latest
version. This solves *my* "Syncing - 100%" scenario at least.

The reason this happens seems to be like this, in my situation. I have
three devices, connected in a "line": A-B-C. A is a Mac and litters
.DS_Store files everywhere. I've ignored these, but some escaped into
the folders before I did so. I've also ignored them on B and C but at
different stages. B was flagging C as out of sync, because at the point
the ignores were introduced C had a lower version of .DS_Store than A.
Now none of them are sending updates about it any more since it's
ignored...

GitHub-Pull-Request: https://github.com/syncthing/syncthing/pull/3981
2017-02-10 11:22:09 +00:00
Jakob Borg 96fba1b322 Merge branch 'release'
* release:
  cmd/syncthing: Environment handling for upgrade restarts (fixes #3970)
2017-02-10 11:58:26 +01:00
Niller303andJakob Borg 0c68e1e510 GUI: Added "Pause All Folders" and "Resume All Folders buttons
As per scienmind's post (#3964) i though it was a good idea and wanted
such a button.

GitHub-Pull-Request: https://github.com/syncthing/syncthing/pull/3973
LGTM: AudriusButkevicius, calmh
2017-02-09 20:31:23 +00:00
Simon FreiandJakob Borg 22903df2c1 lib/model: Meaningful error messages for paused folders
GitHub-Pull-Request: https://github.com/syncthing/syncthing/pull/3977
LGTM: AudriusButkevicius, calmh
2017-02-09 20:29:56 +00:00
Jakob Borg 10618e80a3 authors: Add Niller303 2017-02-09 13:55:51 +01:00
Jakob Borg 161326c548 all: Weed out a few other http urls (ref #3976) 2017-02-09 08:04:16 +01:00
Jakob Borg f7fc0c1d3e all: Update license url to https (ref #3976) 2017-02-09 08:04:16 +01:00
Audrius ButkeviciusandJakob Borg 120e6eab2c lib/sync: Fix a race in unlocker logging (fixes #3884)
Other routines use atomics, hence even if we are under a lock, we should
too.

We might atomically store with
Not sure how it happens, but it's between lines

GitHub-Pull-Request: https://github.com/syncthing/syncthing/pull/3974
2017-02-08 22:31:19 +00:00
Audrius ButkeviciusandJakob Borg 72de47df00 lib/model: Increase in-flight buffer from 2mb to 8mb, download 2 files at a time
GitHub-Pull-Request: https://github.com/syncthing/syncthing/pull/3972
2017-02-08 20:00:55 +00:00
Jakob Borg dfe23e8d53 jenkins: Set BUILD_USER for Debian and Snap builds
GitHub-Pull-Request: https://github.com/syncthing/syncthing/pull/3971
2017-02-08 13:02:09 +00:00
Jakob Borg 2b1c942d56 cmd/syncthing: Environment handling for upgrade restarts (fixes #3970) 2017-02-07 21:36:58 +01:00
Jakob Borg 204f125ab3 cmd/syncthing: Environment handling for upgrade restarts (fixes #3970) 2017-02-07 21:25:33 +01:00
Jakob Borg 73f9c7d174 lib/versioner: Convert Staggered to a suture.Service (fixes #3820) 2017-02-07 14:33:33 +01:00
Jakob Borg c4ba580cbb all: Remove symlink support on Windows, SymlinksEnabled config
After this change,

- Symlinks on Windows are always unsupported. Sorry.

- Symlinks are always enabled on other platforms. They are just a small
  file like anything else. There is no need to special case them. If you
  don't want to sync some symlinks, ignore them.

- The protocol doesn't differentiate between different "types" of
  symlinks. If that distinction ever does become relevant the individual
  devices can figure it out by looking at the destination when they
  create the link.

It's backwards compatible in that all the old symlink types are still
understood to be symlinks, and the new SYMLINK type is equivalent to the
old SYMLINK_UNKNOWN which was always a valid way to do it.

GitHub-Pull-Request: https://github.com/syncthing/syncthing/pull/3962
LGTM: AudriusButkevicius
2017-02-07 08:34:24 +00:00
Jakob Borg 9fda9642d3 lib/events: Make test even less timing dependent 2017-02-07 08:57:39 +01:00
Jakob Borg dfd2c464b6 lib/events: Overflow test should calculate average log time 2017-02-07 08:47:53 +01:00
Jakob Borg 5a1ee7f0b0 gui, man: Update docs & translations 2017-02-07 08:28:02 +01:00
Jakob Borg fdcbd54cd7 lib/events: Be more resilient against dropping events (fixes #3952)
Instead of just immediately dropping the event if the subscription isn't
ready to receive it, give it 15 ms to catch up. The value 15 ms is
grabbed out of thin air - it just seems reasonable to me.

The timer juggling makes the event send pretty much exactly twice as
slow as it was before, but we're still under a microsecond. I think it's
negligible compared to whatever event that just happened that we're
interested in logging (usually a file operation of some kind).

	benchmark                  old ns/op     new ns/op     delta
	BenchmarkBufferedSub-8     475           950           +100.00%

	benchmark                  old allocs     new allocs     delta
	BenchmarkBufferedSub-8     4              4              +0.00%

	benchmark                  old bytes     new bytes     delta
	BenchmarkBufferedSub-8     104           117           +12.50%

GitHub-Pull-Request: https://github.com/syncthing/syncthing/pull/3960
2017-02-07 07:25:09 +00:00
Jakob Borg e14741a58c cmd/syncthing: Speed up the CPU benchmark
Not the measured performance, just the wall clock time it takes to
complete. The random generation was dominating.
2017-02-06 13:42:39 +01:00
Audrius Butkevicius 67acef1794 lib/weakhash, lib/model, cmd/syncthing: Decide if to use weakhash on startup (fixes #3938)
GitHub-Pull-Request: https://github.com/syncthing/syncthing/pull/3949
2017-02-06 10:27:11 +00:00
Simon FreiandJakob Borg 237893ead3 cmd/syncthing: Only delay next scan (via REST) if the scan succeeds
GitHub-Pull-Request: https://github.com/syncthing/syncthing/pull/3927
2017-02-05 18:17:44 +00:00
Jakob Borg 2590536ef3 readme: Spelling error in bold in the first sentence
Nobody reads this, right?
2017-02-05 18:58:12 +01:00
Jakob Borg dc91995475 readme: Go report card badge 2017-02-05 18:54:25 +01:00
Jakob Borg 3655c97850 cmd/syncthing, lib/fs, lib/sync: Spelling in comments 2017-02-05 18:51:52 +01:00
Jakob Borg c0f3f06cfb lib/weakhash, script: gofmt -s 2017-02-05 18:49:57 +01:00
Jakob Borg 05450ca034 readme: More build badges 2017-02-05 18:46:17 +01:00
Jakob Borg c005e61151 snapcraft: s/snap/prime (fixes #3955) 2017-02-05 15:03:36 +01:00
Jakob Borg 63e0b53e8b build: Set snap grade "stable" for release candidates 2017-02-05 14:42:29 +01:00
Jakob Borg 1f586c0fdd gui, man: Update docs & translations 2017-02-05 13:54:49 +01:00
Jakob Borg f1a073501f lib/fs: A nil MtimeFS is valid (fixes #3958)
GitHub-Pull-Request: https://github.com/syncthing/syncthing/pull/3961
2017-02-05 12:54:08 +00:00
Jakob Borg a72f5379fb jenkins: Build natively on Solaris
GitHub-Pull-Request: https://github.com/syncthing/syncthing/pull/3957
2017-02-05 11:20:15 +00:00
Jakob Borg 8cccecceba lib/events: Speed up event polling loop slightly (ref #3952)
GitHub-Pull-Request: https://github.com/syncthing/syncthing/pull/3954
2017-02-04 15:53:39 +00:00
janostandJakob Borg 81418d724a jenkins: Add arm64 deb build
Skip-check: authors

GitHub-Pull-Request: https://github.com/syncthing/syncthing/pull/3953
2017-02-04 14:18:54 +00:00
Jakob Borg 3eb7a9373a gui, lib/config: Add notification about new release channels
GitHub-Pull-Request: https://github.com/syncthing/syncthing/pull/3945
2017-02-04 09:45:17 +00:00
Antony MaleandJakob Borg ac510b26e2 cmd/syncthing, lib/events, lib/sync: Add timeout to REST event API, remove Ping (fixes #3933)
GitHub-Pull-Request: https://github.com/syncthing/syncthing/pull/3941
2017-01-31 12:04:29 +00:00
Jakob Borg 20f8b4fd57 gui: Wording of auto upgrade selections 2017-01-30 23:14:45 +01:00
Jakob Borg 1c9361a818 cmd/syncthing: Implement "release candidate" logic
GitHub-Pull-Request: https://github.com/syncthing/syncthing/pull/3943
LGTM: AudriusButkevicius
2017-01-30 21:33:07 +00:00
Jakob BorgandAudrius Butkevicius 35e87e23fd cmd/syncthing, gui, lib/config, lib/upgrade: Add option to upgrade to pre-releases
GitHub-Pull-Request: https://github.com/syncthing/syncthing/pull/3939
2017-01-27 12:17:06 +00:00
benshepandJakob Borg e03be9158b gui: Remaining sync bytes in folder header (fixes #3908)
The progress indicator in the folder header in the GUI now shows the
remaining bytes to sync as well as the percentage.

GitHub-Pull-Request: https://github.com/syncthing/syncthing/pull/3928
2017-01-26 09:39:48 +00:00
Jakob Borg 9833d13762 gui: Don't trim space on the password field (fixes #3935) 2017-01-26 08:13:41 +01:00
Jakob Borg 6ec7d711d8 authors: Add benshep 2017-01-25 19:20:52 +01:00
Jakob Borg 22a4d49ed0 cmd/syncthing: Handle -logfile again (fixes #3931)
The monitor process should not set STNORESTART as this indicates the
intention from the user. Setting STMONITORED is enough, as this tells
the next Syncthing instance that it is running under the monitor
process.

GitHub-Pull-Request: https://github.com/syncthing/syncthing/pull/3932
2017-01-25 07:33:35 +00:00
Antony MaleandJakob Borg ddca8d91fa cmd/syncthing: Send Ping events to the disk events API
The Ping event is important, as it means that requests complete within
a sensible time. The disk events API didn't have the Ping event, so
if there were no disk events, the request would keep taking forever.
Unless, of course, there's a reverse proxy which times the request out
after a suitably large interval (or something else aborts it), in which
case Syncthing isn't very happy.

GitHub-Pull-Request: https://github.com/syncthing/syncthing/pull/3929
2017-01-24 17:32:34 +00:00
Jakob BorgandAudrius Butkevicius ee36e2d46d lib/weakhash: Limit number of hits for any given weakhash
GitHub-Pull-Request: https://github.com/syncthing/syncthing/pull/3925
2017-01-24 08:26:45 +00:00
Jakob Borg de49ea594a lib/upnp: Wrong order of internal/external port after OnlyPermanentLeasesSupported (fixes #3924) 2017-01-23 23:17:02 +01:00
Jakob BorgandAudrius Butkevicius 6d4fa27ea7 cmd/syncthing: Report real hashing performance, including weakhash
Instead of

    [I6KAH] 19:05:56 INFO: Single thread hash performance is 359 MB/s using minio/sha256-simd (354 MB/s using crypto/sha256).

it now says

    [I6KAH] 19:06:16 INFO: Single thread SHA256 performance is 359 MB/s using minio/sha256-simd (354 MB/s using crypto/sha256).
    [I6KAH] 19:06:17 INFO: Actual hashing performance is 299.01 MB/s

which is more informative. This is also the number it reports in usage
reporting.

GitHub-Pull-Request: https://github.com/syncthing/syncthing/pull/3918
2017-01-23 21:56:43 +00:00
Jakob Borg 9587b89d9d gui, man: Update docs & translations 2017-01-23 22:03:08 +01:00
Jakob Borg 79c7f7193b lib/upnp: Remove unnecessary error allocation
GitHub-Pull-Request: https://github.com/syncthing/syncthing/pull/3923
2017-01-23 21:02:55 +00:00
Audrius ButkeviciusandJakob Borg 2c4b92d410 lib/connections: Fix rate limiting on arm64 (fixes #3921)
Skip-check: metalint

GitHub-Pull-Request: https://github.com/syncthing/syncthing/pull/3922
2017-01-23 20:55:00 +00:00
Audrius ButkeviciusandJakob Borg dd78177ae0 scanner: Allow disabling weak hash in scanning (fixes #3891)
GitHub-Pull-Request: https://github.com/syncthing/syncthing/pull/3905
2017-01-23 13:50:32 +00:00
Jakob Borg bd55ec79d2 goals, readme: Add updated project goals 2017-01-19 18:12:40 +01:00
Jakob Borg 1313ba8c0a gui, vendor: Update license, copyright for github.com/chmduquesne/rollinghash 2017-01-19 15:59:39 +01:00
Jakob Borg 842e873a94 cmd/syncthing: Fix -logfile/-no-restart test on non-Windows. 2017-01-18 18:59:48 +01:00
Jakob Borg d4c4b1fb4c vendor: Temporarily patch github.com/chmduquesne/rollinghash
To avoid allocations in the hasher. PR files, should be available for
update soon.
2017-01-18 18:45:29 +01:00
Jakob Borg 68f1c6ccab lib/scanner: Avoid per iteration allocations in Blocks()
Resetting the io.LimitReader is better than creating a new one on every
iteration.
2017-01-18 18:43:00 +01:00
Antony MaleandJakob Borg 4c8aa14e07 cmd/syncthing: Fail if -logfile and -no-restart passed together (fixes #3912)
GitHub-Pull-Request: https://github.com/syncthing/syncthing/pull/3915
2017-01-18 12:19:22 +00:00
Jakob Borg bd1c29ee32 lib/scanner, vendor: Fix previous commit
Can't do what I did, as the rolling function is not the same as the
non-rolling one. Instead this uses an improved version of the rolling
adler32 to accomplish the same thing. (PR filed on upstream, so should
be able to use that directly in the future.)
2017-01-18 11:57:01 +01:00
Jakob Borg 9b1c592fb7 lib/scanner: Speed up weak hash
The rolling version of adler32 is just a wrapper around the standard
hash/adler32 when used in a non-rolling fashion, but it's inefficient as
it allocates a new hash instance for every Write(). This uses the
default version instead in the block hasher, and adds a test to verify
the result is the same as they were before. It reduces allocations by
88% and increases speed about 5%.

	benchmark               old ns/op     new ns/op     delta
	BenchmarkHashFile-8     64434698      61303647      -4.86%

	benchmark               old MB/s     new MB/s     speedup
	BenchmarkHashFile-8     276.65       290.78       1.05x

	benchmark               old allocs     new allocs     delta
	BenchmarkHashFile-8     1238           150            -87.88%

	benchmark               old bytes     new bytes     delta
	BenchmarkHashFile-8     17877363      49292         -99.72%
2017-01-18 10:33:17 +01:00
Jakob Borg f36f00e87b gui: Update translation base (lang-en) (fixes #3909) 2017-01-17 15:58:35 +01:00
Simon FreiandAudrius Butkevicius dbb3a34887 lib/ignore: Centralize handling of temporary filenames (fixes #3899)
GitHub-Pull-Request: https://github.com/syncthing/syncthing/pull/3901
LGTM: calmh, AudriusButkevicius
2017-01-17 07:33:48 +00:00
KAMADA Ken'ichiandAudrius Butkevicius 929a4d0c0c gui: Improve warnings when creating folder in a subdirectory (fixes #3197, fixes #3902)
GitHub-Pull-Request: https://github.com/syncthing/syncthing/pull/3904
2017-01-14 12:18:48 +00:00
ProactiveServicesandJakob Borg c953cdc375 gui: Package attribution and copyright bumps (fixes #3861)
GitHub-Pull-Request: https://github.com/syncthing/syncthing/pull/3863
2017-01-10 07:50:11 +00:00
Jakob Borg c20c17e3c6 gui, man: Update docs & translations 2017-01-10 08:41:14 +01:00
Audrius ButkeviciusandJakob Borg 1a1e35d998 lib/osutil: Replace IsDir with TraversesSymlink (fixes #3839)
GitHub-Pull-Request: https://github.com/syncthing/syncthing/pull/3883
LGTM: calmh
2017-01-10 07:09:31 +00:00
Adel QaliehandJakob Borg 8d2a31e38e lib/model: Remove syncthing-specific files (fixes #3819)
Syncthing adds some hidden files when a folder is added, but there is currently
no equivalent cleanup procedure. This change is conservative as not to
accidentally cause data loss.

GitHub-Pull-Request: https://github.com/syncthing/syncthing/pull/3874
2017-01-07 17:05:30 +00:00
Jakob Borg fe377a166a authors: Update adelq 2017-01-07 17:56:46 +01:00
Jakob Borg 5770d80bf9 authors: Add adelq 2017-01-07 17:54:41 +01:00
Jakob Borg 7a16dbd31d lib/scanner: Fix previous commit: don't stop scan completely 2017-01-05 15:05:49 +01:00
Jakob BorgandAudrius Butkevicius 926c88cfc4 lib/scanner: Never, ever descend into symlinks (ref #3857)
On Windows we would descend into SYMLINKD type links when we scanned
them successfully, as we would return nil from the walk function and the
filepath.Walk iterator apparently thought it OK to descend into the
symlinked directory.

With this change we always return filepath.SkipDir no matter what.

Tested on Windows 10 as admin, does what it should.

GitHub-Pull-Request: https://github.com/syncthing/syncthing/pull/3875
2017-01-05 13:26:29 +00:00
Audrius ButkeviciusandJakob Borg 29d010ec0e lib/model, lib/weakhash: Hash using adler32, add heuristic in puller
Adler32 is much faster, and the heuristic avoid the obvious cases where it
will not help.

GitHub-Pull-Request: https://github.com/syncthing/syncthing/pull/3872
2017-01-04 21:04:13 +00:00
Jakob BorgandAudrius Butkevicius 920274bce4 lib/db: Don't panic on unknown folder in ListFolders (fixes #3584)
GitHub-Pull-Request: https://github.com/syncthing/syncthing/pull/3869
2017-01-04 10:34:52 +00:00
Jakob Borg 2ebd6ad77f lib/scanner: Don't stop byte counter ticks before scan is done 2017-01-03 15:03:32 +01:00
KudalufiandJakob Borg 79dd6918f2 cmd/syncthing: Add support for -auditfile= (fixes #3859)
Adds support for -auditfile= where is "-" for stdout, "--" for stderr, or a
filename. It can be left blank (or left out entirely) for the original
behaviour of creating a timestamped filename.

GitHub-Pull-Request: https://github.com/syncthing/syncthing/pull/3860
2017-01-03 08:54:28 +00:00
Jakob Borg 79f7f50c4d authors: Add Kudalufi 2017-01-03 09:24:29 +01:00
Jakob BorgandAudrius Butkevicius 987718baf8 vendor: Update github.com/gogo/protobuf
Also tweaks the proto definitions:

 - [packed=false] on the block_indexes field to retain compat with
   v0.14.16 and earlier.

 - Uses the vendored protobuf package in include paths.

And, "build.go setup" will install the vendored protoc-gen-gogofast.
This should ensure that a proto rebuild isn't so dependent on whatever
version of the compiler and package the developer has installed...

GitHub-Pull-Request: https://github.com/syncthing/syncthing/pull/3864
2017-01-03 00:16:21 +00:00
Jakob Borg 4fb9c143ac authors: Update ProactiveServices 2017-01-02 15:12:57 +01:00
Jakob BorgandAudrius Butkevicius ec62888539 lib/connections: Allow on the fly changes to rate limits (fixes #3846)
Also replaces github.com/juju/ratelimit with golang.org/x/time/rate as
the latter supports changing the rate on the fly.

GitHub-Pull-Request: https://github.com/syncthing/syncthing/pull/3862
2017-01-02 11:29:20 +00:00
Jakob Borg 8c34a76f7a man: refresh.sh requires bash 2017-01-01 20:45:52 +01:00
Jakob Borg 6809d38cde lib/protocol: Revert protobuf encoder changes in v0.14.17 (fixes #3855)
The protobuf encoder now produces packed arrays for things like []int32,
which is actually correct according to the proto3 spec. However
Syncthing v0.14.16 and earlier doesn't support this. This reverts the
encoding change, but keeps the updated decoder so that we are both more
compatible with other proto3 implementations and can move to the updated
encoder in the future.

GitHub-Pull-Request: https://github.com/syncthing/syncthing/pull/3856
2017-01-01 17:19:00 +00:00
Mark PulfordandJakob Borg 69ae4aa024 cmd/syncthing: Avoid Keepalive/GUI refresh race
This avoids unnecessary browser request failures and retries. Eg:
- Browser reuses existing HTTP connection for GUI refresh request
- Server closes connection with request in flight
- Browser retries GET request.

GitHub-Pull-Request: https://github.com/syncthing/syncthing/pull/3854
2017-01-01 12:38:31 +00:00
Jakob Borg 8e8b867fba authors: Add mpx 2017-01-01 13:28:33 +01:00
Jakob Borg 0a118d2979 lib/config, lib/model: Temporarily disable bad tests (ref #3834, #3843) 2017-01-01 13:27:18 +01:00
Nathan MorrisonandAudrius Butkevicius 8daaa5d0d2 gui: Populate global changes on load
GitHub-Pull-Request: https://github.com/syncthing/syncthing/pull/3848
2016-12-30 01:33:27 +00:00
Jakob Borg eb14f85a57 vendor: Update github.com/syndtr/goleveldb 2016-12-28 12:19:14 +01:00
Jakob Borg c69c3c7c36 lib/sha256: Smoke test the implementation on startup (hello OpenSUSE!) 2016-12-28 12:15:51 +01:00
Jakob Borg 54911d44c5 gui: s/foldersendonly.html/foldertypes.html 2016-12-27 11:29:12 +01:00
Jakob Borg c765f7be8d gui, man: Update docs and translations 2016-12-26 14:23:55 +01:00
Jakob Borg 44bdaf3ac2 cmd/syncthing: Add -reset-deltas option to reset delta index IDs
Also rename and clarify the description of -reset-database (formerly
-reset).
2016-12-26 13:49:51 +01:00
Jakob Borg fc16e49cb0 Merge branch 'v0.14.16-hotfix'
* v0.14.16-hotfix:
  gui, man: Update docs & translations
  lib/model: Allow empty subdirs in scan request (fixes #3829)
  lib/model: Don't send symlinks to old devices that can't handle them (fixes #3802)
  lib/model: Accept scan requests of paths ending in slash (fixes #3804)
  gui: Avoid pause between event polls (ref #3527)
2016-12-24 20:12:53 +01:00
Jakob Borg f5a310ad64 Revert "lib/model: Handle filename conflicts on Windows."
This reverts commit 01e50eb3fa.
2016-12-23 11:10:58 +01:00
UnrudandAudrius Butkevicius 01e50eb3fa lib/model: Handle filename conflicts on Windows.
GitHub-Pull-Request: https://github.com/syncthing/syncthing/pull/3810
LGTM: calmh
2016-12-22 23:04:53 +00:00
Jakob Borg 722b81c6f0 gui, man: Update docs & translations 2016-12-21 19:46:28 +01:00
Jakob Borg f0efa2b974 lib/model: Allow empty subdirs in scan request (fixes #3829)
GitHub-Pull-Request: https://github.com/syncthing/syncthing/pull/3833
2016-12-21 19:45:38 +01:00
Audrius ButkeviciusandJakob Borg bab7c8ebbf all: Add folder pause, make pauses permanent (fixes #3407, fixes #215, fixes #3001)
GitHub-Pull-Request: https://github.com/syncthing/syncthing/pull/3520
2016-12-21 18:41:25 +00:00
Nathan MorrisonandAudrius Butkevicius 0725e3af38 all: Add a global change list
GitHub-Pull-Request: https://github.com/syncthing/syncthing/pull/3694
2016-12-21 16:35:20 +00:00
Jakob BorgandJakob Borg dd7bb6c4b8 lib/model: Fix tests, clean up pool usage in protocol 2016-12-21 14:53:45 +01:00
Jakob BorgandJakob Borg d41c131364 build: Enable gometalinter "gosimple" check, improve build.go 2016-12-21 14:53:45 +01:00
Jakob BorgandJakob Borg 47f22ff3e5 build: Enable gometalinter "unconvert" check 2016-12-21 14:53:45 +01:00
Jakob BorgandJakob Borg 744c2e82b5 build: Enable gometalinter "staticcheck" check 2016-12-21 14:53:45 +01:00
Jakob BorgandJakob Borg ead7281c20 build: Enable gometalinter "unused" check 2016-12-21 14:53:45 +01:00
AudriusButkeviciusandJakob Borg aa3ef49dd7 lib/model: Fix lock order
GitHub-Pull-Request: https://github.com/syncthing/syncthing/pull/3823
2016-12-21 12:22:18 +00:00
Jakob BorgandAudrius Butkevicius 5c067661f4 lib/model: Consistently show folder description in startup messages
Since we anyway need the folderConfig for this I'm skipping the copying
of all it's attributes that rwfolder did and just keeping the original
around instead.

GitHub-Pull-Request: https://github.com/syncthing/syncthing/pull/3825
2016-12-21 11:23:20 +00:00
Jakob BorgandAudrius Butkevicius 226da976dc lib/model: Allow empty subdirs in scan request (fixes #3829)
GitHub-Pull-Request: https://github.com/syncthing/syncthing/pull/3833
2016-12-21 10:33:07 +00:00
AudriusButkeviciusandJakob Borg ba17cc0a11 gui: Show introducedBy (fixes #3809) 2016-12-21 11:01:15 +01:00
AudriusButkeviciusandJakob Borg 9e0afb7d8a lib/connections: Support setting traffic class (fixes #3790) 2016-12-21 11:01:15 +01:00
AudriusButkeviciusandJakob Borg 9e7d50bc76 cmd/syncthing: Explain corruption panics (fixes #3689) 2016-12-21 11:01:15 +01:00
Jakob Borg d7d5687faa lib/protocol: Warnln should have been Warnf 2016-12-21 10:43:12 +01:00
Jakob Borg 21eb098dd2 vendor: Update github.com/minio/sha256-simd, CPU detection (Linux) 2016-12-20 09:20:28 +01:00
Jakob Borg 2f770f8bfb lib/config, lib/protocol: Improve folder description with empty label 2016-12-19 10:12:06 +01:00
Jakob Borg f09698d845 gui: Add missing strings to lang-en.json 2016-12-18 22:29:43 +01:00
Jakob Borg 3fbcb024a7 gui: Update link to send only documentation page 2016-12-18 22:29:43 +01:00
Jakob BorgandAudrius Butkevicius b8c1c0e048 cmd/syncthing: Enable better crypto, print negotiated cipher suite
This adds support for AES_256_GCM_SHA384 (in there since Go 1.5, a bit
of a shame we missed it) and ChaCha20-Poly1305 (if built with Go 1.8;
ignored on older Gos).

GitHub-Pull-Request: https://github.com/syncthing/syncthing/pull/3822
2016-12-18 21:07:44 +00:00
Jakob Borg 2d47242d54 jenkins: Don't clean out when building with old Go (nukes coverage data) 2016-12-18 19:58:46 +01:00
Jakob Borg 66a7829eee jenkins: Also try build with old Go version, if available 2016-12-18 19:25:27 +01:00
Jakob BorgandAudrius Butkevicius 9c67bd2550 lib/connections: Fix port fixup in Go 1.8 (fixes #3817)
The test for the error string is fragile, and the error string changed
in Go 1.8 so the relevant part is no longer a prefix. This covers it
with a test though, so it should be fine in the future as well.

GitHub-Pull-Request: https://github.com/syncthing/syncthing/pull/3818
2016-12-18 11:28:18 +00:00
Jakob BorgandAudrius Butkevicius f67c5a2fd6 lib/model: Don't send symlinks to old devices that can't handle them (fixes #3802)
GitHub-Pull-Request: https://github.com/syncthing/syncthing/pull/3811
2016-12-17 19:48:33 +00:00
Jakob Borg 263402f80a cmd/stcli: Add copyright headers to satisfy check 2016-12-17 12:28:59 +01:00
Jakob Borg 920a83ec7a cmd/stcli: Fix metalint ineffasign complaint 2016-12-17 10:51:48 +01:00
Jakob Borg 3c2ac3522c cmd/stcli: Update for new folder type 2016-12-17 01:44:18 +01:00
Jakob Borg 9fdaa637a8 vendor: Add github.com/AudriusButkevicius/cli 2016-12-17 01:33:17 +01:00
Jakob Borg 81a9d7f2b9 cmd/stcli: Make it build again 2016-12-17 01:33:17 +01:00
Audrius ButkevičiusandJakob Borg d8d3f05164 cmd/stcli: Import from syncthing-cli repository 2016-12-17 01:33:17 +01:00
Jakob Borg 653be136ee gui: Update lang-en.json 2016-12-17 00:59:25 +01:00
Heiko ZuerkerandAudrius Butkevicius 398c356f22 lib/model: Clarify master terminology (fixes #2679)
GitHub-Pull-Request: https://github.com/syncthing/syncthing/pull/3793
2016-12-16 22:23:35 +00:00
Audrius Butkevicius 542b76f687 lib/model: Moar sleep
GitHub-Pull-Request: https://github.com/syncthing/syncthing/pull/3807
2016-12-16 12:05:27 +00:00
Jakob Borg abb8a1914a lib/model: Accept scan requests of paths ending in slash (fixes #3804)
GitHub-Pull-Request: https://github.com/syncthing/syncthing/pull/3805
2016-12-16 11:21:22 +00:00
Jakob Borg 163d335078 gui: Update lang-en.json 2016-12-16 09:42:13 +01:00
Audrius Butkevicius 0582836820 lib/model, lib/scanner: Efficient inserts/deletes in the middle of the file
GitHub-Pull-Request: https://github.com/syncthing/syncthing/pull/3527
2016-12-14 23:30:29 +00:00
Jakob Borg bb15776ae6 gui: Avoid pause between event polls (ref #3527)
We lose important events due to the frequency of ItemStarted /
ItemFinished events.
2016-12-14 10:31:16 +01:00
Jakob Borg dde9d4c9eb lib/rc: Remove pause to aggregate events (ref #3527) 2016-12-14 10:24:36 +01:00
1361 changed files with 387877 additions and 67851 deletions
-1
View File
@@ -6,4 +6,3 @@ vendor/** -text=auto
# Diffs on these files are meaningless
*.svg -diff
*.pb.go -diff
+7 -1
View File
@@ -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>
+83
View File
@@ -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.
+1 -1
View File
@@ -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
+11 -2
View File
@@ -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>
+49 -14
View File
@@ -1,24 +1,58 @@
# Syncthing
[![Latest Build (Official)](https://img.shields.io/jenkins/s/http/build.syncthing.net/syncthing.svg?style=flat-square&label=unix%20build)](http://build.syncthing.net/job/syncthing/lastBuild/)
[![API Documentation](https://img.shields.io/badge/api-Godoc-blue.svg?style=flat-square)](http://godoc.org/github.com/syncthing/syncthing)
[![Latest Linux & Cross Build](https://img.shields.io/jenkins/s/http/build.syncthing.net/syncthing.svg?style=flat-square&label=linux+%26+cross)](https://build.syncthing.net/job/syncthing/lastBuild/)
[![Latest Windows Build](https://img.shields.io/jenkins/s/http/build.syncthing.net/syncthing-windows.svg?style=flat-square&label=windows)](https://build.syncthing.net/job/syncthing/lastBuild/)
[![Latest Mac Build](https://img.shields.io/jenkins/s/http/build.syncthing.net/syncthing-mac.svg?style=flat-square&label=mac)](https://build.syncthing.net/job/syncthing/lastBuild/)
[![Latest Solaris Build](https://img.shields.io/jenkins/s/http/build.syncthing.net/syncthing-solaris.svg?style=flat-square&label=solaris)](https://build.syncthing.net/job/syncthing/lastBuild/)
[![API Documentation](https://img.shields.io/badge/api-Godoc-blue.svg?style=flat-square)](https://godoc.org/github.com/syncthing/syncthing)
[![MPLv2 License](https://img.shields.io/badge/license-MPLv2-blue.svg?style=flat-square)](https://www.mozilla.org/MPL/2.0/)
[![CII Best Practices](https://bestpractices.coreinfrastructure.org/projects/88/badge)](https://bestpractices.coreinfrastructure.org/projects/88)
[![Go Report Card](https://goreportcard.com/badge/github.com/syncthing/syncthing)](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
+70 -103
View File
@@ -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
View File
@@ -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.
+19
View File
@@ -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.
+115
View File
@@ -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)
}
+188
View File
@@ -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")
}
+67
View File
@@ -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)
}
}
+351
View File
@@ -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")
}
+78
View File
@@ -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)
}
+127
View File
@@ -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)
}
+173
View File
@@ -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)
}
+72
View File
@@ -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)
}
+31
View File
@@ -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",
}
+63
View File
@@ -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()
}
+165
View File
@@ -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 -4
View File
@@ -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
View File
@@ -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
+4 -6
View File
@@ -1,14 +1,8 @@
stdiscosrv
==========
[![Latest Build](http://img.shields.io/jenkins/s/http/build.syncthing.net/stdiscosrv.svg?style=flat-square)](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.
+5 -5
View File
@@ -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
+1 -1
View File
@@ -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 -2
View File
@@ -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)
}
+1 -1
View File
@@ -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
+3 -8
View File
@@ -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
View File
@@ -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
View File
@@ -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
View File
@@ -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
View File
@@ -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
+18 -9
View File
@@ -1,15 +1,24 @@
# relaypoolsrv
[![Latest Build](http://img.shields.io/jenkins/s/http/build.syncthing.net/relaypoolsrv.svg?style=flat-square)](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.
+1 -1
View File
@@ -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
View File
@@ -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
View File
@@ -1,28 +1,20 @@
strelaysrv
==========
[![Latest Build](http://img.shields.io/jenkins/s/http/build.syncthing.net/strelaysrv.svg?style=flat-square)](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)
+5 -6
View File
@@ -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
View File
@@ -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
}
}
+1 -1
View File
@@ -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,
+1 -1
View File
@@ -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
View File
@@ -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
View File
@@ -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
View File
@@ -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
+4 -4
View File
@@ -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)
+1 -1
View File
@@ -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
View File
@@ -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
View File
@@ -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 {
+1 -1
View File
@@ -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
View File
@@ -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
View File
@@ -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
+1 -1
View File
@@ -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
View File
@@ -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
View File
@@ -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
+1 -1
View File
@@ -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
+1 -1
View File
@@ -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
View File
@@ -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
View File
@@ -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)
}
}
+1 -1
View File
@@ -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
View File
@@ -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
View File
@@ -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
View File
@@ -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
View File
@@ -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
+1 -1
View File
@@ -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
+1 -1
View File
@@ -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
+13 -2
View File
@@ -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
}
+1 -1
View File
@@ -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
View File
@@ -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
+7 -3
View File
@@ -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 {}
}
+1 -1
View File
@@ -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
View File
@@ -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
View File
@@ -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
}
+1 -1
View File
@@ -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
+1 -1
View File
@@ -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
+1 -1
View File
@@ -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 -2
View File
@@ -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
}
+1 -1
View File
@@ -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
+1 -1
View File
@@ -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
+26 -21
View File
@@ -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
}
+19 -4
View File
@@ -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
View File
@@ -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
+1 -1
View File
@@ -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/.
*/
+1 -1
View File
@@ -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/.
*/
+33
View File
@@ -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": "ЎОрДĐșŃ‚ĐŸŃ€ĐžĐž",
+33
View File
@@ -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",
+38 -5
View File
@@ -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}}\".",
+40 -7
View File
@@ -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",
+33
View File
@@ -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",
+80 -47
View File
@@ -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."
}
+34 -1
View File
@@ -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": "ÎșÎ±Ï„ÎŹÎ»ÎżÎłÎżÎč",
+33
View File
@@ -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",
+33
View File
@@ -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",
+273
View File
@@ -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}})."
}
+38 -5
View File
@@ -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}}\".",
+34 -1
View File
@@ -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",
+63 -30
View File
@@ -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",
+33
View File
@@ -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",
+53 -20
View File
@@ -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}})."
+55 -22
View File
@@ -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}})."
+33
View File
@@ -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",
+102 -69
View File
@@ -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