Compare commits
29
Commits
v1.18.5
...
v1.19.0-rc.1
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
b6d1e16b4e | ||
|
|
e700ef3208 | ||
|
|
45d145a281 | ||
|
|
b2996eee87 | ||
|
|
21d04b895a | ||
|
|
40bb52fdd8 | ||
|
|
1242ac74ab | ||
|
|
3bfd41c48b | ||
|
|
4fb7e04686 | ||
|
|
dc0dbed96e | ||
|
|
0cba3154f0 | ||
|
|
fec476cc80 | ||
|
|
bc3d306dd7 | ||
|
|
5237337626 | ||
|
|
368094e15d | ||
|
|
0f93e76e80 | ||
|
|
083fa1803a | ||
|
|
c00c6b3957 | ||
|
|
cc39341eb9 | ||
|
|
bf7f82f7b2 | ||
|
|
eb857dbc45 | ||
|
|
e7620e951d | ||
|
|
286a25ae49 | ||
|
|
ae70046b49 | ||
|
|
c366933416 | ||
|
|
6a9716e8a1 | ||
|
|
b84ee4d240 | ||
|
|
8a1e54d58a | ||
|
|
3e032c4da6 |
@@ -0,0 +1,28 @@
|
||||
name: Update translations and documentation
|
||||
on:
|
||||
workflow_dispatch:
|
||||
schedule:
|
||||
- cron: '42 3 * * 1'
|
||||
|
||||
jobs:
|
||||
|
||||
update_transifex_docs:
|
||||
runs-on: ubuntu-latest
|
||||
name: Update translations and documentation
|
||||
steps:
|
||||
- uses: actions/checkout@v2
|
||||
with:
|
||||
token: ${{ secrets.ACTIONS_GITHUB_TOKEN }}
|
||||
- uses: actions/setup-go@v2
|
||||
with:
|
||||
go-version: ^1.17.6
|
||||
- run: |
|
||||
set -euo pipefail
|
||||
git config --global user.name 'Syncthing Release Automation'
|
||||
git config --global user.email 'release@syncthing.net'
|
||||
bash build.sh translate
|
||||
bash build.sh prerelease
|
||||
git push
|
||||
env:
|
||||
TRANSIFEX_USER: ${{ secrets.TRANSIFEX_USER }}
|
||||
TRANSIFEX_PASS: ${{ secrets.TRANSIFEX_PASS }}
|
||||
@@ -47,6 +47,7 @@ var (
|
||||
cc string
|
||||
run string
|
||||
benchRun string
|
||||
buildOut string
|
||||
debugBinary bool
|
||||
coverage bool
|
||||
long bool
|
||||
@@ -374,6 +375,7 @@ func parseFlags() {
|
||||
flag.StringVar(&run, "run", "", "Specify which tests to run")
|
||||
flag.StringVar(&benchRun, "bench", "", "Specify which benchmarks to run")
|
||||
flag.BoolVar(&withNextGenGUI, "with-next-gen-gui", withNextGenGUI, "Also build 'newgui'")
|
||||
flag.StringVar(&buildOut, "build-out", "", "Set the '-o' value for 'go build'")
|
||||
flag.Parse()
|
||||
}
|
||||
|
||||
@@ -506,6 +508,9 @@ func build(target target, tags []string) {
|
||||
}
|
||||
|
||||
args := []string{"build", "-v"}
|
||||
if buildOut != "" {
|
||||
args = append(args, "-o", buildOut)
|
||||
}
|
||||
args = appendParameters(args, tags, target.buildPkgs...)
|
||||
runPrint(goCmd, args...)
|
||||
}
|
||||
|
||||
+22
-11
@@ -10,8 +10,10 @@ import (
|
||||
"bytes"
|
||||
"context"
|
||||
"crypto/tls"
|
||||
"encoding/base64"
|
||||
"encoding/json"
|
||||
"encoding/pem"
|
||||
"errors"
|
||||
"fmt"
|
||||
"log"
|
||||
"math/rand"
|
||||
@@ -229,10 +231,10 @@ func (s *apiSrv) handleGET(ctx context.Context, w http.ResponseWriter, req *http
|
||||
func (s *apiSrv) handlePOST(ctx context.Context, remoteAddr *net.TCPAddr, w http.ResponseWriter, req *http.Request) {
|
||||
reqID := ctx.Value(idKey).(requestID)
|
||||
|
||||
rawCert := certificateBytes(req)
|
||||
if rawCert == nil {
|
||||
rawCert, err := certificateBytes(req)
|
||||
if err != nil {
|
||||
if debug {
|
||||
log.Println(reqID, "no certificates")
|
||||
log.Println(reqID, "no certificates:", err)
|
||||
}
|
||||
announceRequestsTotal.WithLabelValues("no_certificate").Inc()
|
||||
w.Header().Set("Retry-After", errorRetryAfterString())
|
||||
@@ -304,9 +306,9 @@ func handlePing(w http.ResponseWriter, r *http.Request) {
|
||||
w.WriteHeader(204)
|
||||
}
|
||||
|
||||
func certificateBytes(req *http.Request) []byte {
|
||||
func certificateBytes(req *http.Request) ([]byte, error) {
|
||||
if req.TLS != nil && len(req.TLS.PeerCertificates) > 0 {
|
||||
return req.TLS.PeerCertificates[0].Raw
|
||||
return req.TLS.PeerCertificates[0].Raw, nil
|
||||
}
|
||||
|
||||
var bs []byte
|
||||
@@ -319,7 +321,7 @@ func certificateBytes(req *http.Request) []byte {
|
||||
hdr, err := url.QueryUnescape(hdr)
|
||||
if err != nil {
|
||||
// Decoding failed
|
||||
return nil
|
||||
return nil, err
|
||||
}
|
||||
|
||||
bs = []byte(hdr)
|
||||
@@ -338,6 +340,15 @@ func certificateBytes(req *http.Request) []byte {
|
||||
}
|
||||
}
|
||||
}
|
||||
} else if hdr := req.Header.Get("X-Tls-Client-Cert-Der-Base64"); hdr != "" {
|
||||
// Caddy {tls_client_certificate_der_base64}
|
||||
hdr, err := base64.StdEncoding.DecodeString(hdr)
|
||||
if err != nil {
|
||||
// Decoding failed
|
||||
return nil, err
|
||||
}
|
||||
|
||||
bs = pem.EncodeToMemory(&pem.Block{Type: "CERTIFICATE", Bytes: hdr})
|
||||
} else if hdr := req.Header.Get("X-Forwarded-Tls-Client-Cert"); hdr != "" {
|
||||
// Traefik 2 passtlsclientcert
|
||||
// The certificate is in PEM format with url encoding but without newlines
|
||||
@@ -346,7 +357,7 @@ func certificateBytes(req *http.Request) []byte {
|
||||
hdr, err := url.QueryUnescape(hdr)
|
||||
if err != nil {
|
||||
// Decoding failed
|
||||
return nil
|
||||
return nil, err
|
||||
}
|
||||
|
||||
for i := 64; i < len(hdr); i += 65 {
|
||||
@@ -359,16 +370,16 @@ func certificateBytes(req *http.Request) []byte {
|
||||
}
|
||||
|
||||
if bs == nil {
|
||||
return nil
|
||||
return nil, errors.New("empty certificate header")
|
||||
}
|
||||
|
||||
block, _ := pem.Decode(bs)
|
||||
if block == nil {
|
||||
// Decoding failed
|
||||
return nil
|
||||
return nil, errors.New("certificate decode result is empty")
|
||||
}
|
||||
|
||||
return block.Bytes
|
||||
return block.Bytes, nil
|
||||
}
|
||||
|
||||
// fixupAddresses checks the list of addresses, removing invalid ones and
|
||||
@@ -419,7 +430,7 @@ func fixupAddresses(remote *net.TCPAddr, addresses []string) []string {
|
||||
|
||||
// If zero port was specified, use remote port.
|
||||
if port == "0" && remote.Port > 0 {
|
||||
port = fmt.Sprintf("%d", remote.Port)
|
||||
port = strconv.Itoa(remote.Port)
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@@ -10,8 +10,10 @@ import (
|
||||
"bytes"
|
||||
"context"
|
||||
"crypto/tls"
|
||||
"encoding/json"
|
||||
"errors"
|
||||
"fmt"
|
||||
"io"
|
||||
"net"
|
||||
"net/http"
|
||||
"strings"
|
||||
@@ -25,6 +27,7 @@ import (
|
||||
type APIClient interface {
|
||||
Get(url string) (*http.Response, error)
|
||||
Post(url, body string) (*http.Response, error)
|
||||
PutJSON(url string, o interface{}) (*http.Response, error)
|
||||
}
|
||||
|
||||
type apiClient struct {
|
||||
@@ -118,20 +121,36 @@ func (c *apiClient) Do(req *http.Request) (*http.Response, error) {
|
||||
return resp, checkResponse(resp)
|
||||
}
|
||||
|
||||
func (c *apiClient) Get(url string) (*http.Response, error) {
|
||||
request, err := http.NewRequest("GET", c.Endpoint()+"rest/"+url, nil)
|
||||
func (c *apiClient) Request(url, method string, r io.Reader) (*http.Response, error) {
|
||||
request, err := http.NewRequest(method, c.Endpoint()+"rest/"+url, r)
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
return c.Do(request)
|
||||
}
|
||||
|
||||
func (c *apiClient) Post(url, body string) (*http.Response, error) {
|
||||
request, err := http.NewRequest("POST", c.Endpoint()+"rest/"+url, bytes.NewBufferString(body))
|
||||
func (c *apiClient) RequestString(url, method, data string) (*http.Response, error) {
|
||||
return c.Request(url, method, bytes.NewBufferString(data))
|
||||
}
|
||||
|
||||
func (c *apiClient) RequestJSON(url, method string, o interface{}) (*http.Response, error) {
|
||||
data, err := json.Marshal(o)
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
return c.Do(request)
|
||||
return c.Request(url, method, bytes.NewBuffer(data))
|
||||
}
|
||||
|
||||
func (c *apiClient) Get(url string) (*http.Response, error) {
|
||||
return c.RequestString(url, "GET", "")
|
||||
}
|
||||
|
||||
func (c *apiClient) Post(url, body string) (*http.Response, error) {
|
||||
return c.RequestString(url, "POST", body)
|
||||
}
|
||||
|
||||
func (c *apiClient) PutJSON(url string, o interface{}) (*http.Response, error) {
|
||||
return c.RequestJSON(url, "PUT", o)
|
||||
}
|
||||
|
||||
var errNotFound = errors.New("invalid endpoint or API call")
|
||||
|
||||
@@ -7,8 +7,12 @@
|
||||
package cli
|
||||
|
||||
import (
|
||||
"bufio"
|
||||
"fmt"
|
||||
"path/filepath"
|
||||
|
||||
"github.com/syncthing/syncthing/lib/config"
|
||||
"github.com/syncthing/syncthing/lib/fs"
|
||||
"github.com/urfave/cli"
|
||||
)
|
||||
|
||||
@@ -38,6 +42,12 @@ var operationCommand = cli.Command{
|
||||
ArgsUsage: "[folder id]",
|
||||
Action: expects(1, foldersOverride),
|
||||
},
|
||||
{
|
||||
Name: "default-ignores",
|
||||
Usage: "Set the default ignores (config) from a file",
|
||||
ArgsUsage: "path",
|
||||
Action: expects(1, setDefaultIgnores),
|
||||
},
|
||||
},
|
||||
}
|
||||
|
||||
@@ -74,3 +84,29 @@ func foldersOverride(c *cli.Context) error {
|
||||
}
|
||||
return fmt.Errorf("Folder " + rid + " not found")
|
||||
}
|
||||
|
||||
func setDefaultIgnores(c *cli.Context) error {
|
||||
client, err := getClientFactory(c).getClient()
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
dir, file := filepath.Split(c.Args()[0])
|
||||
filesystem := fs.NewFilesystem(fs.FilesystemTypeBasic, dir)
|
||||
|
||||
fd, err := filesystem.Open(file)
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
scanner := bufio.NewScanner(fd)
|
||||
var lines []string
|
||||
for scanner.Scan() {
|
||||
lines = append(lines, scanner.Text())
|
||||
}
|
||||
fd.Close()
|
||||
if err := scanner.Err(); err != nil {
|
||||
return err
|
||||
}
|
||||
|
||||
_, err = client.PutJSON("config/defaults/ignores", config.Ignores{Lines: lines})
|
||||
return err
|
||||
}
|
||||
|
||||
@@ -0,0 +1,29 @@
|
||||
// Copyright (C) 2021 The Syncthing Authors.
|
||||
//
|
||||
// This Source Code Form is subject to the terms of the Mozilla Public
|
||||
// License, v. 2.0. If a copy of the MPL was not distributed with this file,
|
||||
// You can obtain one at https://mozilla.org/MPL/2.0/.
|
||||
|
||||
package cli
|
||||
|
||||
import (
|
||||
"github.com/urfave/cli"
|
||||
)
|
||||
|
||||
var pendingCommand = cli.Command{
|
||||
Name: "pending",
|
||||
HideHelp: true,
|
||||
Usage: "Pending subcommand group",
|
||||
Subcommands: []cli.Command{
|
||||
{
|
||||
Name: "devices",
|
||||
Usage: "Show pending devices",
|
||||
Action: expects(0, indexDumpOutput("cluster/pending/devices")),
|
||||
},
|
||||
{
|
||||
Name: "folders",
|
||||
Usage: "Show pending folders",
|
||||
Action: expects(0, indexDumpOutput("cluster/pending/folders")),
|
||||
},
|
||||
},
|
||||
}
|
||||
@@ -35,6 +35,7 @@ var showCommand = cli.Command{
|
||||
Usage: "Report about connections to other devices",
|
||||
Action: expects(0, indexDumpOutput("system/connections")),
|
||||
},
|
||||
pendingCommand,
|
||||
{
|
||||
Name: "usage",
|
||||
Usage: "Show usage report",
|
||||
|
||||
@@ -12,4 +12,5 @@ type CommonOptions struct {
|
||||
ConfDir string `name:"config" placeholder:"PATH" help:"Set configuration directory (config and keys)"`
|
||||
HomeDir string `name:"home" placeholder:"PATH" help:"Set configuration and data directory"`
|
||||
NoDefaultFolder bool `env:"STNODEFAULTFOLDER" help:"Don't create the \"default\" folder on first startup"`
|
||||
SkipPortProbing bool `help:"Don't try to find free ports for GUI and listen addresses on first startup"`
|
||||
}
|
||||
|
||||
@@ -53,18 +53,18 @@ func (c *CLI) Run() error {
|
||||
reader := bufio.NewReader(os.Stdin)
|
||||
password, _, err := reader.ReadLine()
|
||||
if err != nil {
|
||||
return fmt.Errorf("Failed reading GUI password: %w", err)
|
||||
return fmt.Errorf("failed reading GUI password: %w", err)
|
||||
}
|
||||
c.GUIPassword = string(password)
|
||||
}
|
||||
|
||||
if err := Generate(c.ConfDir, c.GUIUser, c.GUIPassword, c.NoDefaultFolder); err != nil {
|
||||
return fmt.Errorf("Failed to generate config and keys: %w", err)
|
||||
if err := Generate(c.ConfDir, c.GUIUser, c.GUIPassword, c.NoDefaultFolder, c.SkipPortProbing); err != nil {
|
||||
return fmt.Errorf("failed to generate config and keys: %w", err)
|
||||
}
|
||||
return nil
|
||||
}
|
||||
|
||||
func Generate(confDir, guiUser, guiPassword string, noDefaultFolder bool) error {
|
||||
func Generate(confDir, guiUser, guiPassword string, noDefaultFolder, skipPortProbing bool) error {
|
||||
dir, err := fs.ExpandTilde(confDir)
|
||||
if err != nil {
|
||||
return err
|
||||
@@ -90,20 +90,13 @@ func Generate(confDir, guiUser, guiPassword string, noDefaultFolder bool) error
|
||||
log.Println("Device ID:", myID)
|
||||
|
||||
cfgFile := locations.Get(locations.ConfigFile)
|
||||
var cfg config.Wrapper
|
||||
if _, err := os.Stat(cfgFile); err == nil {
|
||||
if guiUser == "" && guiPassword == "" {
|
||||
log.Println("WARNING: Config exists; will not overwrite.")
|
||||
return nil
|
||||
}
|
||||
|
||||
if cfg, _, err = config.Load(cfgFile, myID, events.NoopLogger); err != nil {
|
||||
return fmt.Errorf("load config: %w", err)
|
||||
}
|
||||
} else {
|
||||
if cfg, err = syncthing.DefaultConfig(cfgFile, myID, events.NoopLogger, noDefaultFolder); err != nil {
|
||||
cfg, _, err := config.Load(cfgFile, myID, events.NoopLogger)
|
||||
if fs.IsNotExist(err) {
|
||||
if cfg, err = syncthing.DefaultConfig(cfgFile, myID, events.NoopLogger, noDefaultFolder, skipPortProbing); err != nil {
|
||||
return fmt.Errorf("create config: %w", err)
|
||||
}
|
||||
} else if err != nil {
|
||||
return fmt.Errorf("load config: %w", err)
|
||||
}
|
||||
|
||||
ctx, cancel := context.WithCancel(context.Background())
|
||||
@@ -136,7 +129,7 @@ func updateGUIAuthentication(guiCfg *config.GUIConfiguration, guiUser, guiPasswo
|
||||
|
||||
if guiPassword != "" && guiCfg.Password != guiPassword {
|
||||
if err := guiCfg.HashAndSetPassword(guiPassword); err != nil {
|
||||
return fmt.Errorf("Failed to set GUI authentication password: %w", err)
|
||||
return fmt.Errorf("failed to set GUI authentication password: %w", err)
|
||||
}
|
||||
log.Println("Updated GUI authentication password.")
|
||||
}
|
||||
|
||||
+13
-10
@@ -329,7 +329,7 @@ func (options serveOptions) Run() error {
|
||||
}
|
||||
|
||||
if options.BrowserOnly {
|
||||
if err := openGUI(protocol.EmptyDeviceID); err != nil {
|
||||
if err := openGUI(); err != nil {
|
||||
l.Warnln("Failed to open web UI:", err)
|
||||
os.Exit(svcutil.ExitError.AsInt())
|
||||
}
|
||||
@@ -337,7 +337,7 @@ func (options serveOptions) Run() error {
|
||||
}
|
||||
|
||||
if options.GenerateDir != "" {
|
||||
if err := generate.Generate(options.GenerateDir, "", "", options.NoDefaultFolder); err != nil {
|
||||
if err := generate.Generate(options.GenerateDir, "", "", options.NoDefaultFolder, options.SkipPortProbing); err != nil {
|
||||
l.Warnln("Failed to generate config and keys:", err)
|
||||
os.Exit(svcutil.ExitError.AsInt())
|
||||
}
|
||||
@@ -406,8 +406,8 @@ func (options serveOptions) Run() error {
|
||||
return nil
|
||||
}
|
||||
|
||||
func openGUI(myID protocol.DeviceID) error {
|
||||
cfg, err := loadOrDefaultConfig(myID, events.NoopLogger)
|
||||
func openGUI() error {
|
||||
cfg, err := loadOrDefaultConfig()
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
@@ -452,7 +452,7 @@ func (e *errNoUpgrade) Error() string {
|
||||
}
|
||||
|
||||
func checkUpgrade() (upgrade.Release, error) {
|
||||
cfg, err := loadOrDefaultConfig(protocol.EmptyDeviceID, events.NoopLogger)
|
||||
cfg, err := loadOrDefaultConfig()
|
||||
if err != nil {
|
||||
return upgrade.Release{}, err
|
||||
}
|
||||
@@ -471,7 +471,7 @@ func checkUpgrade() (upgrade.Release, error) {
|
||||
}
|
||||
|
||||
func upgradeViaRest() error {
|
||||
cfg, err := loadOrDefaultConfig(protocol.EmptyDeviceID, events.NoopLogger)
|
||||
cfg, err := loadOrDefaultConfig()
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
@@ -551,7 +551,7 @@ func syncthingMain(options serveOptions) {
|
||||
evLogger := events.NewLogger()
|
||||
earlyService.Add(evLogger)
|
||||
|
||||
cfgWrapper, err := syncthing.LoadConfigAtStartup(locations.Get(locations.ConfigFile), cert, evLogger, options.AllowNewerConfig, options.NoDefaultFolder)
|
||||
cfgWrapper, err := syncthing.LoadConfigAtStartup(locations.Get(locations.ConfigFile), cert, evLogger, options.AllowNewerConfig, options.NoDefaultFolder, options.SkipPortProbing)
|
||||
if err != nil {
|
||||
l.Warnln("Failed to initialize config:", err)
|
||||
os.Exit(svcutil.ExitError.AsInt())
|
||||
@@ -711,12 +711,15 @@ func setupSignalHandling(app *syncthing.App) {
|
||||
}()
|
||||
}
|
||||
|
||||
func loadOrDefaultConfig(myID protocol.DeviceID, evLogger events.Logger) (config.Wrapper, error) {
|
||||
// loadOrDefaultConfig creates a temporary, minimal configuration wrapper if no file
|
||||
// exists. As it disregards some command-line options, that should never be persisted.
|
||||
func loadOrDefaultConfig() (config.Wrapper, error) {
|
||||
cfgFile := locations.Get(locations.ConfigFile)
|
||||
cfg, _, err := config.Load(cfgFile, myID, evLogger)
|
||||
cfg, _, err := config.Load(cfgFile, protocol.EmptyDeviceID, events.NoopLogger)
|
||||
|
||||
if err != nil {
|
||||
cfg, err = syncthing.DefaultConfig(cfgFile, myID, evLogger, true)
|
||||
newCfg := config.New(protocol.EmptyDeviceID)
|
||||
return config.Wrap(cfgFile, newCfg, protocol.EmptyDeviceID, events.NoopLogger), nil
|
||||
}
|
||||
|
||||
return cfg, err
|
||||
|
||||
@@ -20,11 +20,9 @@ import (
|
||||
"syscall"
|
||||
"time"
|
||||
|
||||
"github.com/syncthing/syncthing/lib/events"
|
||||
"github.com/syncthing/syncthing/lib/fs"
|
||||
"github.com/syncthing/syncthing/lib/locations"
|
||||
"github.com/syncthing/syncthing/lib/osutil"
|
||||
"github.com/syncthing/syncthing/lib/protocol"
|
||||
"github.com/syncthing/syncthing/lib/svcutil"
|
||||
"github.com/syncthing/syncthing/lib/sync"
|
||||
)
|
||||
@@ -564,7 +562,7 @@ func childEnv() []string {
|
||||
// panicUploadMaxWait uploading panics...
|
||||
func maybeReportPanics() {
|
||||
// Try to get a config to see if/where panics should be reported.
|
||||
cfg, err := loadOrDefaultConfig(protocol.EmptyDeviceID, events.NoopLogger)
|
||||
cfg, err := loadOrDefaultConfig()
|
||||
if err != nil {
|
||||
l.Warnln("Couldn't load config; not reporting crash")
|
||||
return
|
||||
|
||||
@@ -4,7 +4,6 @@ require (
|
||||
github.com/AudriusButkevicius/pfilter v0.0.10
|
||||
github.com/AudriusButkevicius/recli v0.0.6
|
||||
github.com/alecthomas/kong v0.2.17
|
||||
github.com/bkaradzic/go-lz4 v0.0.0-20160924222819-7224d8d8f27e
|
||||
github.com/calmh/xdr v1.1.0
|
||||
github.com/ccding/go-stun v0.1.3
|
||||
github.com/certifi/gocertifi v0.0.0-20210507211836-431795d63e8d // indirect
|
||||
@@ -30,12 +29,13 @@ require (
|
||||
github.com/kballard/go-shellquote v0.0.0-20180428030007-95032a82bc51
|
||||
github.com/klauspost/cpuid/v2 v2.0.9 // indirect
|
||||
github.com/lib/pq v1.10.3
|
||||
github.com/lucas-clemente/quic-go v0.23.0
|
||||
github.com/lucas-clemente/quic-go v0.24.0
|
||||
github.com/maruel/panicparse v1.6.1
|
||||
github.com/maxbrunsfeld/counterfeiter/v6 v6.3.0
|
||||
github.com/minio/sha256-simd v1.0.0
|
||||
github.com/miscreant/miscreant.go v0.0.0-20200214223636-26d376326b75
|
||||
github.com/oschwald/geoip2-golang v1.5.0
|
||||
github.com/pierrec/lz4/v4 v4.1.12
|
||||
github.com/pkg/errors v0.9.1
|
||||
github.com/prometheus/client_golang v1.11.0
|
||||
github.com/prometheus/common v0.30.0 // indirect
|
||||
|
||||
@@ -60,8 +60,6 @@ github.com/beorn7/perks v0.0.0-20180321164747-3a771d992973/go.mod h1:Dwedo/Wpr24
|
||||
github.com/beorn7/perks v1.0.0/go.mod h1:KWe93zE9D1o94FZ5RNwFwVgaQK1VOXiVxmqh+CedLV8=
|
||||
github.com/beorn7/perks v1.0.1 h1:VlbKKnNfV8bJzeqoa4cOKqO6bYr3WgKZxO8Z16+hsOM=
|
||||
github.com/beorn7/perks v1.0.1/go.mod h1:G2ZrVWU2WbWT9wwq4/hrbKbnv/1ERSJQ0ibhJ6rlkpw=
|
||||
github.com/bkaradzic/go-lz4 v0.0.0-20160924222819-7224d8d8f27e h1:2augTYh6E+XoNrrivZJBadpThP/dsvYKj0nzqfQ8tM4=
|
||||
github.com/bkaradzic/go-lz4 v0.0.0-20160924222819-7224d8d8f27e/go.mod h1:0YdlkowM3VswSROI7qDxhRvJ3sLhlFrRRwjwegp5jy4=
|
||||
github.com/bradfitz/go-smtpd v0.0.0-20170404230938-deb6d6237625/go.mod h1:HYsPBTaaSFSlLx/70C2HPIMNZpVV8+vt/A+FMnYP11g=
|
||||
github.com/buger/jsonparser v0.0.0-20181115193947-bf1c66bbce23/go.mod h1:bbYlZJ7hK1yFx9hf58LP0zeX7UjIGs20ufpu3evjr+s=
|
||||
github.com/calmh/xdr v1.1.0 h1:U/Dd4CXNLoo8EiQ4ulJUXkgO1/EyQLgDKLgpY1SOoJE=
|
||||
@@ -242,8 +240,8 @@ github.com/kr/text v0.1.0/go.mod h1:4Jbv+DJW3UT/LiOwJeYQe1efqtUx/iVham/4vfdArNI=
|
||||
github.com/lib/pq v1.10.3 h1:v9QZf2Sn6AmjXtQeFpdoq/eaNtYP6IN+7lcrygsIAtg=
|
||||
github.com/lib/pq v1.10.3/go.mod h1:AlVN5x4E4T544tWzH6hKfbfQvm3HdbOxrmggDNAPY9o=
|
||||
github.com/lucas-clemente/quic-go v0.22.0/go.mod h1:vF5M1XqhBAHgbjKcJOXY3JZz3GP0T3FQhz/uyOUS38Q=
|
||||
github.com/lucas-clemente/quic-go v0.23.0 h1:5vFnKtZ6nHDFsc/F3uuiF4T3y/AXaQdxjUqiVw26GZE=
|
||||
github.com/lucas-clemente/quic-go v0.23.0/go.mod h1:paZuzjXCE5mj6sikVLMvqXk8lJV2AsqtJ6bDhjEfxx0=
|
||||
github.com/lucas-clemente/quic-go v0.24.0 h1:ToR7SIIEdrgOhgVTHvPgdVRJfgVy+N0wQAagH7L4d5g=
|
||||
github.com/lucas-clemente/quic-go v0.24.0/go.mod h1:paZuzjXCE5mj6sikVLMvqXk8lJV2AsqtJ6bDhjEfxx0=
|
||||
github.com/lunixbochs/vtclean v1.0.0/go.mod h1:pHhQNgMf3btfWnGBVipUOjRYhoOsdGqdm/+2c2E2WMI=
|
||||
github.com/mailru/easyjson v0.0.0-20190312143242-1de009706dbe/go.mod h1:C1wdFJiN94OJF2b5HbByQZoLdCWB1Yqtg26g4irojpc=
|
||||
github.com/marten-seemann/qpack v0.2.1/go.mod h1:F7Gl5L1jIgN1D11ucXefiuJS9UMVP2opoCp2jDKb7wc=
|
||||
@@ -299,6 +297,8 @@ github.com/oschwald/maxminddb-golang v1.8.0 h1:Uh/DSnGoxsyp/KYbY1AuP0tYEwfs0sCph
|
||||
github.com/oschwald/maxminddb-golang v1.8.0/go.mod h1:RXZtst0N6+FY/3qCNmZMBApR19cdQj43/NM9VkrNAis=
|
||||
github.com/petermattis/goid v0.0.0-20180202154549-b0b1615b78e5 h1:q2e307iGHPdTGp0hoxKjt1H5pDo6utceo3dQVK3I5XQ=
|
||||
github.com/petermattis/goid v0.0.0-20180202154549-b0b1615b78e5/go.mod h1:jvVRKCrJTQWu0XVbaOlby/2lO20uSCHEMzzplHXte1o=
|
||||
github.com/pierrec/lz4/v4 v4.1.12 h1:44l88ehTZAUGW4VlO1QC4zkilL99M6Y9MXNwEs0uzP8=
|
||||
github.com/pierrec/lz4/v4 v4.1.12/go.mod h1:gZWDp/Ze/IJXGXf23ltt2EXimqmTUXEy0GFuRQyBid4=
|
||||
github.com/pkg/errors v0.8.0/go.mod h1:bwawxfHBFNV+L2hUp1rHADufV3IMtnDRdf1r5NINEl0=
|
||||
github.com/pkg/errors v0.8.1/go.mod h1:bwawxfHBFNV+L2hUp1rHADufV3IMtnDRdf1r5NINEl0=
|
||||
github.com/pkg/errors v0.9.1 h1:FEBLx1zS214owpjy7qsBeixbURkuhQAwrK5UwLGTwt4=
|
||||
|
||||
@@ -166,16 +166,13 @@ table.table-auto td {
|
||||
display: none;
|
||||
}
|
||||
|
||||
*[language-select] > .dropdown-menu {
|
||||
li[language-select] > .dropdown-menu {
|
||||
column-count: 2;
|
||||
column-gap: 0;
|
||||
width: 450px;
|
||||
}
|
||||
|
||||
*[language-select] > .dropdown-menu > li {
|
||||
float: left;
|
||||
width: 50%;
|
||||
}
|
||||
|
||||
*[language-select] > .dropdown-menu > li > a {
|
||||
li[language-select] > .dropdown-menu > li > a {
|
||||
overflow: hidden;
|
||||
text-overflow: ellipsis;
|
||||
}
|
||||
@@ -351,17 +348,19 @@ ul.three-columns li, ul.two-columns li {
|
||||
border-radius: 2px;
|
||||
}
|
||||
|
||||
*[language-select] {
|
||||
li[language-select] {
|
||||
position: static !important;
|
||||
}
|
||||
|
||||
*[language-select] > .dropdown-menu {
|
||||
li[language-select] > .dropdown-menu {
|
||||
column-count: auto;
|
||||
margin-left: 15px;
|
||||
margin-right: 15px;
|
||||
margin-top: -12px !important;
|
||||
max-width: 450px;
|
||||
height: 265px;
|
||||
overflow-y: scroll;
|
||||
/* height of 5.5 elements + negative margin-top */
|
||||
height: 276px;
|
||||
}
|
||||
|
||||
table.table-condensed td,
|
||||
|
||||
@@ -22,6 +22,7 @@
|
||||
"Allow Anonymous Usage Reporting?": "Разрешаване на анонимното отчитане на употребата?",
|
||||
"Allowed Networks": "Разрешени мрежи",
|
||||
"Alphabetic": "Азбучен ред",
|
||||
"Altered by ignoring deletes.": "Пренебрегнати са премахнати файлове.",
|
||||
"An external command handles the versioning. It has to remove the file from the shared folder. If the path to the application contains spaces, it should be quoted.": "Външна команда управлява версиите. Тя трябва да премахне файла от синхронизираната папка. Ако в пътя до приложението има интервали, то той трябва да бъде поставен в кавички.",
|
||||
"Anonymous Usage Reporting": "Анонимно отчитане на употреба",
|
||||
"Anonymous usage report format has changed. Would you like to move to the new format?": "Форматът на данните за анонимно отчитане на употреба е променен. Желаете ли да използвате него вместо стария?",
|
||||
@@ -436,6 +437,10 @@
|
||||
"full documentation": "пълна документация",
|
||||
"items": "елемента",
|
||||
"seconds": "секунди",
|
||||
"theme-name-black": "Черна",
|
||||
"theme-name-dark": "Тъмна",
|
||||
"theme-name-default": "По подразбиране",
|
||||
"theme-name-light": "Светла",
|
||||
"{%device%} wants to share folder \"{%folder%}\".": "{{device}} споделя папката „{{folder}}“.",
|
||||
"{%device%} wants to share folder \"{%folderlabel%}\" ({%folder%}).": "{{device}} споделя папката „{{folder}}“. ({{folder}}).",
|
||||
"{%reintroducer%} might reintroduce this device.": "Поръчителят {{reintroducer}} може отново да предложи това устройство."
|
||||
|
||||
@@ -22,6 +22,7 @@
|
||||
"Allow Anonymous Usage Reporting?": "Permetre informes d'ús anònim?",
|
||||
"Allowed Networks": "Xarxes permeses",
|
||||
"Alphabetic": "Alfabètic",
|
||||
"Altered by ignoring deletes.": "Altered by ignoring deletes.",
|
||||
"An external command handles the versioning. It has to remove the file from the shared folder. If the path to the application contains spaces, it should be quoted.": "Un comandament extern maneja el versionat. És necessari eliminar el fitxer de la carpeta compartida. Si la ruta a l'aplicació conté espais, hi ha que ficar-los entre cometes.",
|
||||
"Anonymous Usage Reporting": "Informe d'ús anònim",
|
||||
"Anonymous usage report format has changed. Would you like to move to the new format?": "El format del informe anònim d'ús ha canviat. Vols canviar al nou format?",
|
||||
@@ -436,6 +437,10 @@
|
||||
"full documentation": "Documentació completa",
|
||||
"items": "Elements",
|
||||
"seconds": "seconds",
|
||||
"theme-name-black": "Black",
|
||||
"theme-name-dark": "Dark",
|
||||
"theme-name-default": "Default",
|
||||
"theme-name-light": "Light",
|
||||
"{%device%} wants to share folder \"{%folder%}\".": "{{device}} vol compartit la carpeta \"{{folder}}\".",
|
||||
"{%device%} wants to share folder \"{%folderlabel%}\" ({%folder%}).": "{{device}} vol compartir la carpeta \"{{folderlabel}}\" ({{folder}}).",
|
||||
"{%reintroducer%} might reintroduce this device.": "{{reintroducer}} might reintroduce this device."
|
||||
|
||||
@@ -22,6 +22,7 @@
|
||||
"Allow Anonymous Usage Reporting?": "Povolit anonymní hlášení o používání?",
|
||||
"Allowed Networks": "Sítě, ze kterých je umožněn přístup",
|
||||
"Alphabetic": "Abecední",
|
||||
"Altered by ignoring deletes.": "Altered by ignoring deletes.",
|
||||
"An external command handles the versioning. It has to remove the file from the shared folder. If the path to the application contains spaces, it should be quoted.": "Správu verzí obstarává externí příkaz. U toho je třeba, aby neaktuální soubory jím byly odsouvány pryč ze sdílené složky. Pokud popis umístění tohoto příkazu obsahuje mezeru, je třeba popis umístění uzavřít do uvozovek.",
|
||||
"Anonymous Usage Reporting": "Anonymní hlášení o používání",
|
||||
"Anonymous usage report format has changed. Would you like to move to the new format?": "Formát anonymního hlášení o používání byl změněn. Chcete přejít na nový formát?",
|
||||
@@ -436,6 +437,10 @@
|
||||
"full documentation": "úplná dokumentace",
|
||||
"items": "položky",
|
||||
"seconds": "sekund",
|
||||
"theme-name-black": "Black",
|
||||
"theme-name-dark": "Dark",
|
||||
"theme-name-default": "Default",
|
||||
"theme-name-light": "Light",
|
||||
"{%device%} wants to share folder \"{%folder%}\".": "{{device}} chce sdílet složku „{{folder}}“.",
|
||||
"{%device%} wants to share folder \"{%folderlabel%}\" ({%folder%}).": "{{device}} chce sdílet složku „{{folderlabel}}“ ({{folder}}).",
|
||||
"{%reintroducer%} might reintroduce this device.": "{{reintroducer}} může toto zařízení znovu uvést."
|
||||
|
||||
@@ -22,6 +22,7 @@
|
||||
"Allow Anonymous Usage Reporting?": "Tillad anonym brugerstatistik?",
|
||||
"Allowed Networks": "Tilladte netværk",
|
||||
"Alphabetic": "Alfabetisk",
|
||||
"Altered by ignoring deletes.": "Altered by ignoring deletes.",
|
||||
"An external command handles the versioning. It has to remove the file from the shared folder. If the path to the application contains spaces, it should be quoted.": "En ekstern kommando styrer versioneringen. Den skal fjerne filen fra den delte mappe. Hvis stien til programmet indeholder mellemrum, bør den sættes i anførselstegn.",
|
||||
"Anonymous Usage Reporting": "Anonym brugerstatistik",
|
||||
"Anonymous usage report format has changed. Would you like to move to the new format?": "Formatet for anonym brugerstatistik er ændret. Vil du flytte til det nye format?",
|
||||
@@ -91,7 +92,7 @@
|
||||
"Disabled periodic scanning and disabled watching for changes": "Deaktiverede periodisk skanning og deaktiverede overvågning af ændringer",
|
||||
"Disabled periodic scanning and enabled watching for changes": "Deaktiverede periodisk skanning og aktiverede overvågning af ændringer",
|
||||
"Disabled periodic scanning and failed setting up watching for changes, retrying every 1m:": "Deaktiverede periodisk skanning fra og lykkedes ikke med at opsætte overvågning af ændringer; prøver igen hvert minut:",
|
||||
"Disables comparing and syncing file permissions. Useful on systems with nonexistent or custom permissions (e.g. FAT, exFAT, Synology, Android).": "Disables comparing and syncing file permissions. Useful on systems with nonexistent or custom permissions (e.g. FAT, exFAT, Synology, Android).",
|
||||
"Disables comparing and syncing file permissions. Useful on systems with nonexistent or custom permissions (e.g. FAT, exFAT, Synology, Android).": "Deaktiverer sammenligning og synkronisering af fil tilladelser. Nyttigt på systemer med ikke-eksisterende eller tilpasset tilladelser (f.eks. FAT, exFAT, Synology, Android).",
|
||||
"Discard": "Behold ikke",
|
||||
"Disconnected": "Ikke tilsluttet",
|
||||
"Disconnected (Unused)": "Ikke tilsluttet (ubrugt)",
|
||||
@@ -436,6 +437,10 @@
|
||||
"full documentation": "fuld dokumentation",
|
||||
"items": "filer",
|
||||
"seconds": "sekunder",
|
||||
"theme-name-black": "Sort",
|
||||
"theme-name-dark": "Mørk",
|
||||
"theme-name-default": "Standard",
|
||||
"theme-name-light": "Lys",
|
||||
"{%device%} wants to share folder \"{%folder%}\".": "{{device}} ønsker at dele mappen “{{folder}}”.",
|
||||
"{%device%} wants to share folder \"{%folderlabel%}\" ({%folder%}).": "{{device}} ønsker at dele mappen “{{folderlabel}}” ({{folder}}).",
|
||||
"{%reintroducer%} might reintroduce this device.": "{{reintroducer}} vil muligvis genindføre denne enhed."
|
||||
|
||||
@@ -18,20 +18,21 @@
|
||||
"Advanced": "Erweitert",
|
||||
"Advanced Configuration": "Erweiterte Konfiguration",
|
||||
"All Data": "Alle Daten",
|
||||
"All folders shared with this device must be protected by a password, such that all sent data is unreadable without the given password.": "Alle Ordner, welche mit diesem Gerät geteilt werden, müssen von einem Passwort geschützt werden, sodass die gesendeten Daten ohne Kenntnis des Passworts nicht gelesen werden können. ",
|
||||
"All folders shared with this device must be protected by a password, such that all sent data is unreadable without the given password.": "Alle Ordner, welche mit diesem Gerät geteilt werden, müssen von einem Passwort geschützt werden, sodass keine gesendeten Daten ohne Kenntnis des Passworts gelesen werden können. ",
|
||||
"Allow Anonymous Usage Reporting?": "Übertragung von anonymen Nutzungsberichten erlauben?",
|
||||
"Allowed Networks": "Erlaubte Netzwerke",
|
||||
"Alphabetic": "Alphabetisch",
|
||||
"Altered by ignoring deletes.": "Weicht ab, weil Löschungen ignoriert werden.",
|
||||
"An external command handles the versioning. It has to remove the file from the shared folder. If the path to the application contains spaces, it should be quoted.": "Ein externer Befehl behandelt die Versionierung. Die Datei aus dem freigegebenen Ordner muss entfernen werden. Wenn der Pfad der Anwendung Leerzeichen enthält, sollte dieser in Anführungszeichen stehen.",
|
||||
"Anonymous Usage Reporting": "Anonymer Nutzungsbericht",
|
||||
"Anonymous usage report format has changed. Would you like to move to the new format?": "Das Format des anonymen Nutzungsberichts hat sich geändert. Möchten Sie auf das neue Format umsteigen?",
|
||||
"Are you sure you want to continue?": "Sind Sie sicher, dass Sie fortfahren möchten?",
|
||||
"Are you sure you want to override all remote changes?": "Are you sure you want to override all remote changes?",
|
||||
"Are you sure you want to override all remote changes?": "Sind Sie sicher, dass Sie alle entfernten Änderungen überschreiben möchten?",
|
||||
"Are you sure you want to permanently delete all these files?": "Sind Sie sicher, dass Sie all diese Dateien dauerhaft löschen möchten?",
|
||||
"Are you sure you want to remove device {%name%}?": "Sind Sie sicher, dass sie das Gerät {{name}} entfernen möchten?",
|
||||
"Are you sure you want to remove folder {%label%}?": "Sind Sie sicher, dass sie den Ordner {{label}} entfernen möchten?",
|
||||
"Are you sure you want to restore {%count%} files?": "Sind Sie sicher, dass Sie {{count}} Dateien wiederherstellen möchten?",
|
||||
"Are you sure you want to revert all local changes?": "Are you sure you want to revert all local changes?",
|
||||
"Are you sure you want to revert all local changes?": "Sind Sie sicher, dass Sie alle lokalen Änderungen zurücksetzen möchten?",
|
||||
"Are you sure you want to upgrade?": "Sind Sie sicher, dass Sie ein Upgrade durchführen möchten?",
|
||||
"Auto Accept": "Automatische Annahme",
|
||||
"Automatic Crash Reporting": "Automatische Absturzmeldung",
|
||||
@@ -98,7 +99,7 @@
|
||||
"Discovered": "Ermittelt",
|
||||
"Discovery": "Gerätesuche",
|
||||
"Discovery Failures": "Gerätesuchfehler",
|
||||
"Discovery Status": "Discovery Status",
|
||||
"Discovery Status": "Status der Gerätesuche",
|
||||
"Dismiss": "Ausblenden",
|
||||
"Do not add it to the ignore list, so this notification may recur.": "Nicht zur Ignorierliste hinzufügen, diese Benachrichtigung kann erneut auftauchen.",
|
||||
"Do not restore": "Nicht wiederherstellen",
|
||||
@@ -126,7 +127,7 @@
|
||||
"Error": "Fehler",
|
||||
"External File Versioning": "Externe Dateiversionierung",
|
||||
"Failed Items": "Fehlgeschlagene Elemente",
|
||||
"Failed to load ignore patterns.": "Failed to load ignore patterns.",
|
||||
"Failed to load ignore patterns.": "Fehler beim Laden der Ignoriermuster.",
|
||||
"Failed to setup, retrying": "Fehler beim Installieren, versuche erneut",
|
||||
"Failure to connect to IPv6 servers is expected if there is no IPv6 connectivity.": "Ein Verbindungsfehler zu IPv6-Servern ist zu erwarten, wenn es keine IPv6-Konnektivität gibt.",
|
||||
"File Pull Order": "Dateiübertragungsreihenfolge",
|
||||
@@ -184,8 +185,8 @@
|
||||
"Latest Change": "Letzte Änderung",
|
||||
"Learn more": "Mehr erfahren",
|
||||
"Limit": "Limit",
|
||||
"Listener Failures": "Listener Failures",
|
||||
"Listener Status": "Listener Status",
|
||||
"Listener Failures": "Fehler bei Listener",
|
||||
"Listener Status": "Status der Listener",
|
||||
"Listeners": "Zuhörer",
|
||||
"Loading data...": "Daten werden geladen...",
|
||||
"Loading...": "Wird geladen...",
|
||||
@@ -224,7 +225,7 @@
|
||||
"Out of Sync": "Nicht synchronisiert",
|
||||
"Out of Sync Items": "Nicht synchronisierte Elemente",
|
||||
"Outgoing Rate Limit (KiB/s)": "Ausgehendes Datenratelimit (KiB/s)",
|
||||
"Override": "Override",
|
||||
"Override": "Überschreiben",
|
||||
"Override Changes": "Änderungen überschreiben",
|
||||
"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",
|
||||
@@ -274,7 +275,7 @@
|
||||
"Resume": "Fortsetzen",
|
||||
"Resume All": "Alles fortsetzen",
|
||||
"Reused": "Erneut benutzt",
|
||||
"Revert": "Revert",
|
||||
"Revert": "Zurücksetzen",
|
||||
"Revert Local Changes": "Lokale Änderungen zurücksetzen",
|
||||
"Save": "Speichern",
|
||||
"Scan Time Remaining": "Verbleibende Scanzeit",
|
||||
@@ -358,7 +359,7 @@
|
||||
"The following methods are used to discover other devices on the network and announce this device to be found by others:": "Die folgenden Methoden werden verwendet, um andere Geräte im Netzwerk aufzufinden und dieses Gerät anzukündigen, damit es von anderen gefunden wird:",
|
||||
"The following unexpected items were found.": "Die folgenden unerwarteten Elemente wurden gefunden.",
|
||||
"The interval must be a positive number of seconds.": "Das Intervall muss eine positive Zahl von Sekunden sein.",
|
||||
"The interval, in seconds, for running cleanup in the versions directory. Zero to disable periodic cleaning.": "Das Intervall, in Sekunden, zwischen den Bereinigungen im Versionsverzeichnis. 0 um das regelmäßige Bereinigen zu deaktivieren.",
|
||||
"The interval, in seconds, for running cleanup in the versions directory. Zero to disable periodic cleaning.": "Das Intervall, in Sekunden, zwischen den Bereinigungen im Versionsverzeichnis. Null um das regelmäßige Bereinigen zu deaktivieren.",
|
||||
"The maximum age must be a number and cannot be blank.": "Das Höchstalter muss angegeben werden und eine Zahl sein.",
|
||||
"The maximum time to keep a version (in days, set to 0 to keep versions forever).": "Die längste Zeit, die alte Versionen vorgehalten werden (in Tagen) (0 um alte Versionen für immer zu behalten).",
|
||||
"The number of days must be a number and cannot be blank.": "Die Anzahl von Versionen muss eine Ganzzahl und darf nicht leer sein.",
|
||||
@@ -402,7 +403,7 @@
|
||||
"Usage reporting is always enabled for candidate releases.": "Nutzungsbericht ist für Veröffentlichungskandidaten immer aktiviert.",
|
||||
"Use HTTPS for GUI": "HTTPS für Benutzeroberfläche verwenden",
|
||||
"Use notifications from the filesystem to detect changed items.": "Benachrichtigungen des Dateisystems nutzen, um Änderungen zu erkennen.",
|
||||
"Username/Password has not been set for the GUI authentication. Please consider setting it up.": "Benutzername und Passwort für die Benutzeroberfläche sind nicht gesetzt. Setzen Sie diese zum Schutz ihrer Daten. ",
|
||||
"Username/Password has not been set for the GUI authentication. Please consider setting it up.": "Benutzername und Passwort für die Benutzeroberfläche sind nicht gesetzt. Bitte richten Sie diese zur Absicherung ein.",
|
||||
"Version": "Version",
|
||||
"Versions": "Versionen",
|
||||
"Versions Path": "Versionierungspfad",
|
||||
|
||||
@@ -22,6 +22,7 @@
|
||||
"Allow Anonymous Usage Reporting?": "Να επιτρέπεται η αποστολή ανώνυμων στοιχείων χρήσης;",
|
||||
"Allowed Networks": "Επιτρεπόμενα δίκτυα",
|
||||
"Alphabetic": "Αλφαβητικά",
|
||||
"Altered by ignoring deletes.": "Altered by ignoring deletes.",
|
||||
"An external command handles the versioning. It has to remove the file from the shared folder. If the path to the application contains spaces, it should be quoted.": "Μια εξωτερική εντολή χειρίζεται την τήρηση εκδόσεων και αναλαμβάνει να αφαιρέσει το αρχείο από τον συγχρονισμένο φάκελο. Αν η διαδρομή προς την εφαρμογή περιέχει διαστήματα, πρέπει να εσωκλείεται σε εισαγωγικά. ",
|
||||
"Anonymous Usage Reporting": "Ανώνυμα στοιχεία χρήσης",
|
||||
"Anonymous usage report format has changed. Would you like to move to the new format?": "Η μορφή της αναφοράς ανώνυμων στοιχείων χρήσης έχει αλλάξει. Επιθυμείτε να μεταβείτε στη νέα μορφή;",
|
||||
@@ -436,6 +437,10 @@
|
||||
"full documentation": "πλήρης τεκμηρίωση",
|
||||
"items": "εγγραφές",
|
||||
"seconds": "δευτερόλεπτα",
|
||||
"theme-name-black": "Black",
|
||||
"theme-name-dark": "Dark",
|
||||
"theme-name-default": "Default",
|
||||
"theme-name-light": "Light",
|
||||
"{%device%} wants to share folder \"{%folder%}\".": "Η συσκευή {{device}} θέλει να μοιράσει τον φάκελο «{{folder}}».",
|
||||
"{%device%} wants to share folder \"{%folderlabel%}\" ({%folder%}).": "Η συσκευή {{device}} επιθυμεί να διαμοιράσει τον φάκελο \"{{folderlabel}}\" ({{folder}}).",
|
||||
"{%reintroducer%} might reintroduce this device.": "{{reintroducer}} might reintroduce this device."
|
||||
|
||||
@@ -22,6 +22,7 @@
|
||||
"Allow Anonymous Usage Reporting?": "Allow Anonymous Usage Reporting?",
|
||||
"Allowed Networks": "Allowed Networks",
|
||||
"Alphabetic": "Alphabetic",
|
||||
"Altered by ignoring deletes.": "Altered by ignoring deletes.",
|
||||
"An external command handles the versioning. It has to remove the file from the shared folder. If the path to the application contains spaces, it should be quoted.": "An external command handles the versioning. It has to remove the file from the shared folder. If the path to the application contains spaces, it should be quoted.",
|
||||
"Anonymous Usage Reporting": "Anonymous Usage Reporting",
|
||||
"Anonymous usage report format has changed. Would you like to move to the new format?": "Anonymous usage report format has changed. Would you like to move to the new format?",
|
||||
@@ -436,6 +437,10 @@
|
||||
"full documentation": "full documentation",
|
||||
"items": "items",
|
||||
"seconds": "seconds",
|
||||
"theme-name-black": "Black",
|
||||
"theme-name-dark": "Dark",
|
||||
"theme-name-default": "Default",
|
||||
"theme-name-light": "Light",
|
||||
"{%device%} wants to share folder \"{%folder%}\".": "{{device}} wants to share folder \"{{folder}}\".",
|
||||
"{%device%} wants to share folder \"{%folderlabel%}\" ({%folder%}).": "{{device}} wants to share folder \"{{folderlabel}}\" ({{folder}}).",
|
||||
"{%reintroducer%} might reintroduce this device.": "{{reintroducer}} might reintroduce this device."
|
||||
|
||||
@@ -22,6 +22,7 @@
|
||||
"Allow Anonymous Usage Reporting?": "Allow Anonymous Usage Reporting?",
|
||||
"Allowed Networks": "Allowed Networks",
|
||||
"Alphabetic": "Alphabetic",
|
||||
"Altered by ignoring deletes.": "Altered by ignoring deletes.",
|
||||
"An external command handles the versioning. It has to remove the file from the shared folder. If the path to the application contains spaces, it should be quoted.": "An external command handles the versioning. It has to remove the file from the shared folder. If the path to the application contains spaces, it should be quoted.",
|
||||
"Anonymous Usage Reporting": "Anonymous Usage Reporting",
|
||||
"Anonymous usage report format has changed. Would you like to move to the new format?": "Anonymous usage report format has changed. Would you like to move to the new format?",
|
||||
@@ -436,6 +437,10 @@
|
||||
"full documentation": "full documentation",
|
||||
"items": "items",
|
||||
"seconds": "seconds",
|
||||
"theme-name-black": "Black",
|
||||
"theme-name-dark": "Dark",
|
||||
"theme-name-default": "Default",
|
||||
"theme-name-light": "Light",
|
||||
"{%device%} wants to share folder \"{%folder%}\".": "{{device}} wants to share folder \"{{folder}}\".",
|
||||
"{%device%} wants to share folder \"{%folderlabel%}\" ({%folder%}).": "{{device}} wants to share folder \"{{folderlabel}}\" ({{folder}}).",
|
||||
"{%reintroducer%} might reintroduce this device.": "{{reintroducer}} might reintroduce this device."
|
||||
|
||||
@@ -11,6 +11,7 @@
|
||||
"Add Folder": "Add Folder",
|
||||
"Add Remote Device": "Add Remote Device",
|
||||
"Add devices from the introducer to our device list, for mutually shared folders.": "Add devices from the introducer to our device list, for mutually shared folders.",
|
||||
"Add ignore patterns": "Add ignore patterns",
|
||||
"Add new folder?": "Add new folder?",
|
||||
"Additionally the full rescan interval will be increased (times 60, i.e. new default of 1h). You can also configure it manually for every folder later after choosing No.": "Additionally the full rescan interval will be increased (times 60, i.e. new default of 1h). You can also configure it manually for every folder later after choosing No.",
|
||||
"Address": "Address",
|
||||
@@ -22,6 +23,7 @@
|
||||
"Allow Anonymous Usage Reporting?": "Allow Anonymous Usage Reporting?",
|
||||
"Allowed Networks": "Allowed Networks",
|
||||
"Alphabetic": "Alphabetic",
|
||||
"Altered by ignoring deletes.": "Altered by ignoring deletes.",
|
||||
"An external command handles the versioning. It has to remove the file from the shared folder. If the path to the application contains spaces, it should be quoted.": "An external command handles the versioning. It has to remove the file from the shared folder. If the path to the application contains spaces, it should be quoted.",
|
||||
"Anonymous Usage Reporting": "Anonymous Usage Reporting",
|
||||
"Anonymous usage report format has changed. Would you like to move to the new format?": "Anonymous usage report format has changed. Would you like to move to the new format?",
|
||||
@@ -168,6 +170,7 @@
|
||||
"Ignore": "Ignore",
|
||||
"Ignore Patterns": "Ignore Patterns",
|
||||
"Ignore Permissions": "Ignore Permissions",
|
||||
"Ignore patterns can only be added after the folder is created. If checked, an input field to enter ignore patterns will be presented after saving.": "Ignore patterns can only be added after the folder is created. If checked, an input field to enter ignore patterns will be presented after saving.",
|
||||
"Ignored Devices": "Ignored Devices",
|
||||
"Ignored Folders": "Ignored Folders",
|
||||
"Ignored at": "Ignored at",
|
||||
@@ -289,6 +292,7 @@
|
||||
"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",
|
||||
"Set Ignores on Added Folder": "Set Ignores on Added Folder",
|
||||
"Settings": "Settings",
|
||||
"Share": "Share",
|
||||
"Share Folder": "Share Folder",
|
||||
|
||||
@@ -18,20 +18,21 @@
|
||||
"Advanced": "Altnivela",
|
||||
"Advanced Configuration": "Altnivela Agordo",
|
||||
"All Data": "Ĉiuj Datumoj",
|
||||
"All folders shared with this device must be protected by a password, such that all sent data is unreadable without the given password.": "All folders shared with this device must be protected by a password, such that all sent data is unreadable without the given password.",
|
||||
"All folders shared with this device must be protected by a password, such that all sent data is unreadable without the given password.": "Ĉiuj dosierujoj, kiuj estas dividitaj kun ĉi tiu aparato devas esti protektitaj per pasvorto, tiel ĉiuj senditaj datumoj estas nelegeblaj sen la pasvorto.",
|
||||
"Allow Anonymous Usage Reporting?": "Permesi Anoniman Raporton de Uzado?",
|
||||
"Allowed Networks": "Permesitaj Retoj",
|
||||
"Alphabetic": "Alfabeta",
|
||||
"Altered by ignoring deletes.": "Altered by ignoring deletes.",
|
||||
"An external command handles the versioning. It has to remove the file from the shared folder. If the path to the application contains spaces, it should be quoted.": "Ekstera komando manipulas la version. Ĝi devas forigi la dosieron el la komunigita dosierujo. Se la vojo al la apliko elhavas blankoj, ĝi devas esti inter citiloj.",
|
||||
"Anonymous Usage Reporting": "Anonima Raporto de Uzado",
|
||||
"Anonymous usage report format has changed. Would you like to move to the new format?": "Formato de anonima raporto de uzado ŝanĝis. Ĉu vi ŝatus transiri al la nova formato?",
|
||||
"Are you sure you want to continue?": "Are you sure you want to continue?",
|
||||
"Are you sure you want to override all remote changes?": "Are you sure you want to override all remote changes?",
|
||||
"Are you sure you want to permanently delete all these files?": "Are you sure you want to permanently delete all these files?",
|
||||
"Are you sure you want to continue?": "Ĉu vi certas, ke vi volas daŭrigi?",
|
||||
"Are you sure you want to override all remote changes?": "Ĉu vi certas, ke vi volas transpasi ĉiujn forajn ŝanĝojn?",
|
||||
"Are you sure you want to permanently delete all these files?": "Ĉu vi certas, ke vi volas porĉiame forigi ĉiujn ĉi tiujn dosierojn?",
|
||||
"Are you sure you want to remove device {%name%}?": "Ĉu vi certas, ke vi volas forigi aparaton {{name}}?",
|
||||
"Are you sure you want to remove folder {%label%}?": "Ĉu vi certas, ke vi volas forigi dosierujon {{label}}?",
|
||||
"Are you sure you want to restore {%count%} files?": "Ĉu vi certas, ke vi volas restarigi {{count}} dosierojn?",
|
||||
"Are you sure you want to revert all local changes?": "Are you sure you want to revert all local changes?",
|
||||
"Are you sure you want to revert all local changes?": "Ĉu vi certas, ke vi volas malfari ĉiujn lokajn ŝanĝojn?",
|
||||
"Are you sure you want to upgrade?": "Ĉu vi certe volas plinovigi ?",
|
||||
"Auto Accept": "Akcepti Aŭtomate",
|
||||
"Automatic Crash Reporting": "Aŭtomata raportado de kraŝoj",
|
||||
@@ -42,13 +43,13 @@
|
||||
"Available debug logging facilities:": "Disponeblaj elpurigadaj protokoliloj:",
|
||||
"Be careful!": "Atentu!",
|
||||
"Bugs": "Cimoj",
|
||||
"Cancel": "Cancel",
|
||||
"Cancel": "Nuligi",
|
||||
"Changelog": "Ŝanĝoprotokolo",
|
||||
"Clean out after": "Purigi poste",
|
||||
"Cleaning Versions": "Cleaning Versions",
|
||||
"Cleanup Interval": "Cleanup Interval",
|
||||
"Click to see discovery failures": "Alklaku por vidi malsukcesajn malkovrojn",
|
||||
"Click to see full identification string and QR code.": "Click to see full identification string and QR code.",
|
||||
"Click to see full identification string and QR code.": "Alklaku por vidi la plenan identigan signovicon kaj QR-kodo",
|
||||
"Close": "Fermi",
|
||||
"Command": "Komando",
|
||||
"Comment, when used at the start of a line": "Komento, kiam uzita ĉe la komenco de lineo",
|
||||
@@ -66,12 +67,12 @@
|
||||
"Currently Shared With Devices": "Nune komunigita kun aparatoj",
|
||||
"Danger!": "Danĝero!",
|
||||
"Debugging Facilities": "Elpurigadiloj",
|
||||
"Default Configuration": "Default Configuration",
|
||||
"Default Configuration": "Defaŭlta agordo",
|
||||
"Default Device": "Default Device",
|
||||
"Default Folder": "Default Folder",
|
||||
"Default Folder": "Defaŭlta Dosierujo",
|
||||
"Default Folder Path": "Defaŭlta Dosieruja Vojo",
|
||||
"Defaults": "Defaults",
|
||||
"Delete": "Delete",
|
||||
"Delete": "Forigu",
|
||||
"Delete Unexpected Items": "Delete Unexpected Items",
|
||||
"Deleted": "Forigita",
|
||||
"Deselect All": "Malelekti Ĉiujn",
|
||||
@@ -82,7 +83,7 @@
|
||||
"Device ID": "Aparato ID",
|
||||
"Device Identification": "Identigo de Aparato",
|
||||
"Device Name": "Nomo de Aparato",
|
||||
"Device is untrusted, enter encryption password": "Device is untrusted, enter encryption password",
|
||||
"Device is untrusted, enter encryption password": "Aparato ne estas fidinda, entajpu pasvorto por ĉifrado",
|
||||
"Device rate limits": "Limoj de rapideco de aparato",
|
||||
"Device that last modified the item": "Aparato kiu laste modifis la eron",
|
||||
"Devices": "Aparatoj",
|
||||
@@ -164,7 +165,7 @@
|
||||
"However, your current settings indicate you might not want it enabled. We have disabled automatic crash reporting for you.": "However, your current settings indicate you might not want it enabled. We have disabled automatic crash reporting for you.",
|
||||
"Identification": "Identification",
|
||||
"If untrusted, enter encryption password": "If untrusted, enter encryption password",
|
||||
"If you want to prevent other users on this computer from accessing Syncthing and through it your files, consider setting up authentication.": "If you want to prevent other users on this computer from accessing Syncthing and through it your files, consider setting up authentication.",
|
||||
"If you want to prevent other users on this computer from accessing Syncthing and through it your files, consider setting up authentication.": "Se vi volas malhelpi aliajn uzantojn sur ĉi tiu komputilo atingi Syncthing kaj per ĝi viajn dosierojn, konsideru agordi aŭtentokontrolon.",
|
||||
"Ignore": "Ignoru",
|
||||
"Ignore Patterns": "Ignorantaj Ŝablonoj",
|
||||
"Ignore Permissions": "Ignori Permesojn",
|
||||
@@ -436,6 +437,10 @@
|
||||
"full documentation": "tuta dokumentado",
|
||||
"items": "eroj",
|
||||
"seconds": "seconds",
|
||||
"theme-name-black": "Black",
|
||||
"theme-name-dark": "Dark",
|
||||
"theme-name-default": "Default",
|
||||
"theme-name-light": "Light",
|
||||
"{%device%} wants to share folder \"{%folder%}\".": "{{device}} volas komunigi dosierujon \"{{folder}}\".",
|
||||
"{%device%} wants to share folder \"{%folderlabel%}\" ({%folder%}).": "{{device}} volas komunigi dosierujon \"{{folderlabel}}\" ({{folder}}).",
|
||||
"{%reintroducer%} might reintroduce this device.": "{{reintroducer}} might reintroduce this device."
|
||||
|
||||
@@ -22,6 +22,7 @@
|
||||
"Allow Anonymous Usage Reporting?": "¿Deseas permitir el envío anónimo de informes de uso?",
|
||||
"Allowed Networks": "Redes permitidas",
|
||||
"Alphabetic": "Alfabético",
|
||||
"Altered by ignoring deletes.": "Altered by ignoring deletes.",
|
||||
"An external command handles the versioning. It has to remove the file from the shared folder. If the path to the application contains spaces, it should be quoted.": "Un comando externo maneja el versionado. Tiene que eliminar el fichero de la carpeta compartida. Si la ruta a la aplicación contiene espacios, hay que escribirla entre comillas.",
|
||||
"Anonymous Usage Reporting": "Informe anónimo de uso",
|
||||
"Anonymous usage report format has changed. Would you like to move to the new format?": "El formato del informe anónimo de uso ha cambiado. ¿Quieres cambiar al nuevo formato?",
|
||||
@@ -436,6 +437,10 @@
|
||||
"full documentation": "Documentación completa",
|
||||
"items": "Elementos",
|
||||
"seconds": "segundos",
|
||||
"theme-name-black": "Black",
|
||||
"theme-name-dark": "Dark",
|
||||
"theme-name-default": "Default",
|
||||
"theme-name-light": "Light",
|
||||
"{%device%} wants to share folder \"{%folder%}\".": "{{device}} quiere compartir la carpeta \"{{folder}}\".",
|
||||
"{%device%} wants to share folder \"{%folderlabel%}\" ({%folder%}).": "{{device}} quiere compartir la carpeta \"{{folderlabel}}\" ({{folder}}).",
|
||||
"{%reintroducer%} might reintroduce this device.": "{{reintroducer}} puede reintroducir este equipo."
|
||||
|
||||
@@ -22,6 +22,7 @@
|
||||
"Allow Anonymous Usage Reporting?": "¿Deseas permitir el envío anónimo de informes de uso?",
|
||||
"Allowed Networks": "Redes permitidas",
|
||||
"Alphabetic": "Alfabético",
|
||||
"Altered by ignoring deletes.": "Altered by ignoring deletes.",
|
||||
"An external command handles the versioning. It has to remove the file from the shared folder. If the path to the application contains spaces, it should be quoted.": "Un comando externo maneja las versiones. Tienes que eliminar el archivo de la carpeta compartida. Si la ruta a la aplicación contiene espacios, ésta debe estar entre comillas.",
|
||||
"Anonymous Usage Reporting": "Informe anónimo de uso",
|
||||
"Anonymous usage report format has changed. Would you like to move to the new format?": "El formato del informe de uso anónimo a cambiado. ¿Desearía usar el nuevo formato?",
|
||||
@@ -436,6 +437,10 @@
|
||||
"full documentation": "Documentación completa",
|
||||
"items": "Elementos",
|
||||
"seconds": "segundos",
|
||||
"theme-name-black": "Black",
|
||||
"theme-name-dark": "Dark",
|
||||
"theme-name-default": "Default",
|
||||
"theme-name-light": "Light",
|
||||
"{%device%} wants to share folder \"{%folder%}\".": "{{device}} quiere compartir la carpeta \"{{folder}}\".",
|
||||
"{%device%} wants to share folder \"{%folderlabel%}\" ({%folder%}).": "{{device}} quiere compartir la carpeta \"{{folderlabel}}\" ({{folder}}).",
|
||||
"{%reintroducer%} might reintroduce this device.": "{{reintroducer}} puede reintroducir este dispositivo."
|
||||
|
||||
@@ -22,6 +22,7 @@
|
||||
"Allow Anonymous Usage Reporting?": "Izenik gabeko erabiltze erreportak baimendu?",
|
||||
"Allowed Networks": "Sare baimenduak",
|
||||
"Alphabetic": "Alfabetikoa",
|
||||
"Altered by ignoring deletes.": "Altered by ignoring deletes.",
|
||||
"An external command handles the versioning. It has to remove the file from the shared folder. If the path to the application contains spaces, it should be quoted.": "Kanpoko kontrolagailu batek fitxategien bertsioak kudeatzen ditu. Fitxategiak kendu behar ditu errepertorio sinkronizatuan. Aplikaziorako ibilbideak espazioak baditu, komatxo artean egon behar du.",
|
||||
"Anonymous Usage Reporting": "Izenik gabeko erabiltze erreportak",
|
||||
"Anonymous usage report format has changed. Would you like to move to the new format?": "Erabilera anonimoko txostenaren formatua aldatu egin da. Formatu berria erabili nahi duzu?",
|
||||
@@ -436,6 +437,10 @@
|
||||
"full documentation": "Dokumentazio osoa",
|
||||
"items": "Elementuak",
|
||||
"seconds": "segunduak",
|
||||
"theme-name-black": "Black",
|
||||
"theme-name-dark": "Dark",
|
||||
"theme-name-default": "Default",
|
||||
"theme-name-light": "Light",
|
||||
"{%device%} wants to share folder \"{%folder%}\".": "{{device}}k \"{{folder}}\" partekatze hontan gomitatzen zaitu.",
|
||||
"{%device%} wants to share folder \"{%folderlabel%}\" ({%folder%}).": "{{device}}k \"{{folderlabel}}\" ({{folder}}) hontan gomitatzen zaitu.",
|
||||
"{%reintroducer%} might reintroduce this device.": "{{reintroducer}} -ek gailu hau birsar lezake."
|
||||
|
||||
@@ -22,6 +22,7 @@
|
||||
"Allow Anonymous Usage Reporting?": "Salli anonyymi käyttöraportointi?",
|
||||
"Allowed Networks": "Sallitut verkot",
|
||||
"Alphabetic": "Aakkosellinen",
|
||||
"Altered by ignoring deletes.": "Altered by ignoring deletes.",
|
||||
"An external command handles the versioning. It has to remove the file from the shared folder. If the path to the application contains spaces, it should be quoted.": "Ulkoinen komento hallitsee versionnin. Sen täytyy poistaa tiedosto synkronoidusta kansiosta. Mikäli ohjelman polussa on välilyöntejä se on laitettava lainausmerkkeihin.",
|
||||
"Anonymous Usage Reporting": "Anonyymi käyttöraportointi",
|
||||
"Anonymous usage report format has changed. Would you like to move to the new format?": "Anonyymi käyttöraportti on muuttunut. Haluatko vaihtaa uuteen muotoon?",
|
||||
@@ -436,6 +437,10 @@
|
||||
"full documentation": "täysi dokumentaatio",
|
||||
"items": "kohteet",
|
||||
"seconds": "seconds",
|
||||
"theme-name-black": "Black",
|
||||
"theme-name-dark": "Dark",
|
||||
"theme-name-default": "Default",
|
||||
"theme-name-light": "Light",
|
||||
"{%device%} wants to share folder \"{%folder%}\".": "{{device}} haluaa jakaa kansion \"{{folder}}\".",
|
||||
"{%device%} wants to share folder \"{%folderlabel%}\" ({%folder%}).": "{{device}} haluaa jakaa kansion \"{{folderlabel}}\" ({{folder}}).",
|
||||
"{%reintroducer%} might reintroduce this device.": "{{reintroducer}} might reintroduce this device."
|
||||
|
||||
@@ -22,6 +22,7 @@
|
||||
"Allow Anonymous Usage Reporting?": "Autoriser l'envoi de statistiques d'utilisation anonymisées ?",
|
||||
"Allowed Networks": "Réseaux autorisés",
|
||||
"Alphabetic": "Alphabétique",
|
||||
"Altered by ignoring deletes.": "Altéré par \"Ignore Delete\".",
|
||||
"An external command handles the versioning. It has to remove the file from the shared folder. If the path to the application contains spaces, it should be quoted.": "Une commande externe gère les versions de fichiers. Il lui incombe de supprimer les fichiers du répertoire partagé. Si le chemin contient des espaces, il doit être spécifié entre guillemets.",
|
||||
"Anonymous Usage Reporting": "Rapport anonyme de statistiques d'utilisation",
|
||||
"Anonymous usage report format has changed. Would you like to move to the new format?": "Le format du rapport anonyme d'utilisation a changé. Voulez-vous passer au nouveau format ?",
|
||||
@@ -100,7 +101,7 @@
|
||||
"Discovery Failures": "Échecs de découverte",
|
||||
"Discovery Status": "État de la découverte",
|
||||
"Dismiss": "Écarter",
|
||||
"Do not add it to the ignore list, so this notification may recur.": "Ne pas l'ajouter à la liste permanente à ignorer, pour que cette notification puisse réapparaître.",
|
||||
"Do not add it to the ignore list, so this notification may recur.": "Attendre la disparition de cette demande : évite l'ajout immédiat à la liste noire persistante.",
|
||||
"Do not restore": "Ne pas restaurer",
|
||||
"Do not restore all": "Ne pas tout restaurer",
|
||||
"Do you want to enable watching for changes for all your folders?": "Voulez-vous activer la surveillance des changements sur tous vos partages ?",
|
||||
@@ -436,6 +437,10 @@
|
||||
"full documentation": "Documentation complète ici",
|
||||
"items": "élément(s)",
|
||||
"seconds": "secondes",
|
||||
"theme-name-black": "Noir",
|
||||
"theme-name-dark": "Sombre",
|
||||
"theme-name-default": "Par défaut (système)",
|
||||
"theme-name-light": "Clair",
|
||||
"{%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}}).",
|
||||
"{%reintroducer%} might reintroduce this device.": "{{reintroducer}} pourrait ré-enrôler cet appareil."
|
||||
|
||||
@@ -22,6 +22,7 @@
|
||||
"Allow Anonymous Usage Reporting?": "Anonime brûkensrapportaazje tastean?",
|
||||
"Allowed Networks": "Tasteane Netwurken",
|
||||
"Alphabetic": "Alfabetysk",
|
||||
"Altered by ignoring deletes.": "Altered by ignoring deletes.",
|
||||
"An external command handles the versioning. It has to remove the file from the shared folder. If the path to the application contains spaces, it should be quoted.": "In ekstern kommando soarget foar it ferzjebehear. It moat de triem út de dielde map fuortsmite. As it paad nei de applikaasje romtes hat, moat it tusken oanheltekens sette wurden.",
|
||||
"Anonymous Usage Reporting": "Anonym brûkensrapportaazje",
|
||||
"Anonymous usage report format has changed. Would you like to move to the new format?": "It formaat fan de rapportaazje fan anonime gebrûksynformaasje is feroare. Wolle jo op dit nije formaat oerstappe?",
|
||||
@@ -436,6 +437,10 @@
|
||||
"full documentation": "komplete dokumintaasje",
|
||||
"items": "items",
|
||||
"seconds": "sekonden",
|
||||
"theme-name-black": "Black",
|
||||
"theme-name-dark": "Dark",
|
||||
"theme-name-default": "Default",
|
||||
"theme-name-light": "Light",
|
||||
"{%device%} wants to share folder \"{%folder%}\".": "{{device}} wol map \"{{folder}}\" diele.",
|
||||
"{%device%} wants to share folder \"{%folderlabel%}\" ({%folder%}).": "{{device}} wol map \"{{folderlabel}}\" ({{folder}}) diele.",
|
||||
"{%reintroducer%} might reintroduce this device.": "{{reintroducer}} kin dit apparaat opnij yntrodusearje."
|
||||
|
||||
@@ -22,6 +22,7 @@
|
||||
"Allow Anonymous Usage Reporting?": "A névtelen felhasználási adatok elküldhetők?",
|
||||
"Allowed Networks": "Engedélyezett hálózatok",
|
||||
"Alphabetic": "ABC sorrendben",
|
||||
"Altered by ignoring deletes.": "Módosítva a törlések figyelmen kívül hagyásával.",
|
||||
"An external command handles the versioning. It has to remove the file from the shared folder. If the path to the application contains spaces, it should be quoted.": "Külső program kezeli a fájlverzió-követést. Az távolítja el a fájlt a megosztott mappából. Ha az alkalmazás útvonala szóközöket tartalmaz, zárójelezni szükséges az útvonalat.",
|
||||
"Anonymous Usage Reporting": "Névtelen felhasználási adatok küldése",
|
||||
"Anonymous usage report format has changed. Would you like to move to the new format?": "A névtelen használati jelentés formátuma megváltozott. Szeretnél áttérni az új formátumra?",
|
||||
@@ -436,6 +437,10 @@
|
||||
"full documentation": "teljes dokumentáció",
|
||||
"items": "elem",
|
||||
"seconds": "másodperc",
|
||||
"theme-name-black": "Fekete",
|
||||
"theme-name-dark": "Sötét",
|
||||
"theme-name-default": "Alapértelmezett",
|
||||
"theme-name-light": "Világos",
|
||||
"{%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}}).",
|
||||
"{%reintroducer%} might reintroduce this device.": "{{reintroducer}} újra bevezetheti ezt az eszközt."
|
||||
|
||||
@@ -12,16 +12,17 @@
|
||||
"Add Remote Device": "Tambah Perangkat Jarak Jauh",
|
||||
"Add devices from the introducer to our device list, for mutually shared folders.": "Tambahkan perangkat dari pengenal ke daftar perangkat kita, untuk folder yang saling terbagi.",
|
||||
"Add new folder?": "Tambah folder baru?",
|
||||
"Additionally the full rescan interval will be increased (times 60, i.e. new default of 1h). You can also configure it manually for every folder later after choosing No.": "Selain itu, interval pindai ulang secara penuh akan ditambah (kali 60, yaitu bawaan baru selama 1 jam). Anda juga bisa mengkonfigurasi secara manual untuk setiap folder setelah memilih Tidak.",
|
||||
"Additionally the full rescan interval will be increased (times 60, i.e. new default of 1h). You can also configure it manually for every folder later after choosing No.": "Selain itu, interval pindai ulang secara penuh akan ditambah (kali 60, yaitu bawaan baru selama 1 jam). Anda juga dapat mengkonfigurasi secara manual untuk setiap folder setelah memilih Tidak.",
|
||||
"Address": "Alamat",
|
||||
"Addresses": "Alamat",
|
||||
"Advanced": "Tingkat Lanjut",
|
||||
"Advanced Configuration": "Konfigurasi Tingkat Lanjut",
|
||||
"All Data": "Semua Data",
|
||||
"All folders shared with this device must be protected by a password, such that all sent data is unreadable without the given password.": "Semua folder yang dibagi dengan perangkat ini harus dilindungi dengan sandi, sehingga semua data tidak dapat dilihat tanpa sandi.",
|
||||
"Allow Anonymous Usage Reporting?": "Aktifkan Laporan Penggunaan Anonim?",
|
||||
"Allow Anonymous Usage Reporting?": "Izinkan Laporan Penggunaan Anonim?",
|
||||
"Allowed Networks": "Jaringan Terizinkan",
|
||||
"Alphabetic": "Alfabet",
|
||||
"Altered by ignoring deletes.": "Altered by ignoring deletes.",
|
||||
"An external command handles the versioning. It has to remove the file from the shared folder. If the path to the application contains spaces, it should be quoted.": "Perintah eksternal menangani pemversian. Ia harus menghapus berkas dari folder yang dibagi. Jika lokasi aplikasi terdapat spasi, itu harus dikutip.",
|
||||
"Anonymous Usage Reporting": "Pelaporan Penggunaan Anonim",
|
||||
"Anonymous usage report format has changed. Would you like to move to the new format?": "Format pelaporan penggunaan anonim telah berubah. Maukah anda pindah menggunakan format yang baru?",
|
||||
@@ -100,7 +101,7 @@
|
||||
"Discovery Failures": "Kegagalan Penemuan",
|
||||
"Discovery Status": "Status Penemuan",
|
||||
"Dismiss": "Tolak",
|
||||
"Do not add it to the ignore list, so this notification may recur.": "Jangan tambahkan ke daftar pengabaian, maka notifkasi ini mungkin muncul kembali.",
|
||||
"Do not add it to the ignore list, so this notification may recur.": "Jangan tambahkan ke daftar pengabaian, maka notifikasi ini mungkin muncul kembali.",
|
||||
"Do not restore": "Jangan pulihkan",
|
||||
"Do not restore all": "Jangan pulihkan semua",
|
||||
"Do you want to enable watching for changes for all your folders?": "Apakah anda ingin mengaktifkan fitur melihat perubahan untuk semua folder anda?",
|
||||
@@ -125,7 +126,7 @@
|
||||
"Enter up to three octal digits.": "Masukkan hingga tiga digit oktal.",
|
||||
"Error": "Galat",
|
||||
"External File Versioning": "Pemversian Berkas Eksternal",
|
||||
"Failed Items": "Materi yang gagal",
|
||||
"Failed Items": "Berkas yang gagal",
|
||||
"Failed to load ignore patterns.": "Gagal memuat pola pengabaian.",
|
||||
"Failed to setup, retrying": "Gagal menyiapkan, mengulang",
|
||||
"Failure to connect to IPv6 servers is expected if there is no IPv6 connectivity.": "Gagal untuk menyambung ke server IPv6 itu disangka apabila tidak ada konektivitas IPv6.",
|
||||
@@ -172,7 +173,7 @@
|
||||
"Ignored Folders": "Folder yang Diabaikan",
|
||||
"Ignored at": "Diabaikan di",
|
||||
"Incoming Rate Limit (KiB/s)": "Batas Kecepatan Unduh (KiB/s)",
|
||||
"Incorrect configuration may damage your folder contents and render Syncthing inoperable.": "Konfigurasi salah bisa merusak isi folder dan membuat Syncthing tidak bisa dijalankan.",
|
||||
"Incorrect configuration may damage your folder contents and render Syncthing inoperable.": "Konfigurasi salah dapat merusak isi folder dan membuat Syncthing tidak dapat dijalankan.",
|
||||
"Introduced By": "Dikenalkan Oleh",
|
||||
"Introducer": "Pengenal",
|
||||
"Inversion of the given condition (i.e. do not exclude)": "Inversi dari kondisi yang diberikan (yakni jangan dikecualikan)",
|
||||
@@ -204,7 +205,7 @@
|
||||
"Minimum Free Disk Space": "Ruang Penyimpanan Kosong Minimum",
|
||||
"Mod. Device": "Perangkat Pengubah",
|
||||
"Mod. Time": "Waktu Diubah",
|
||||
"Move to top of queue": "Move to top of queue",
|
||||
"Move to top of queue": "Pindah ke daftar tunggu teratas",
|
||||
"Multi level wildcard (matches multiple directory levels)": "Wildcard multi tingkat (cocok dalam tingkat direktori apapun)",
|
||||
"Never": "Never",
|
||||
"New Device": "Perangkat Baru",
|
||||
@@ -232,8 +233,8 @@
|
||||
"Path where versions should be stored (leave empty for the default .stversions directory in the shared folder).": "Lokasi berbagai versi berkas disimpan (tinggalkan kosong untuk menggunakan direktori .stversions bawaan dalam folder).",
|
||||
"Pause": "Jeda",
|
||||
"Pause All": "Jeda Semua",
|
||||
"Paused": "Telah Berjeda",
|
||||
"Paused (Unused)": "Telah Berjeda (Tidak Digunakan)",
|
||||
"Paused": "Terjeda",
|
||||
"Paused (Unused)": "Terjeda (Tidak Digunakan)",
|
||||
"Pending changes": "Perubahan yang tertunda",
|
||||
"Periodic scanning at given interval and disabled watching for changes": "Pemindaian periodik pada interval tertentu dan fitur melihat perubahan dinonaktifkan",
|
||||
"Periodic scanning at given interval and enabled watching for changes": "Pemindaian periodik pada interval tertentu dan fitur melihat perubahan diaktifkan",
|
||||
@@ -366,7 +367,7 @@
|
||||
"The number of old versions to keep, per file.": "Jumlah versi lama untuk disimpan, setiap berkas.",
|
||||
"The number of versions must be a number and cannot be blank.": "Jumlah versi harus berupa angka dan tidak dapat kosong.",
|
||||
"The path cannot be blank.": "Lokasi tidak dapat kosong.",
|
||||
"The rate limit must be a non-negative number (0: no limit)": "Pembatasan kecepatan harus berupa angka positif (0: tidak ada batas)",
|
||||
"The rate limit must be a non-negative number (0: no limit)": "Pembatasan kecepatan harus berupa angka positif (0: tidak terbatas)",
|
||||
"The rescan interval must be a non-negative number of seconds.": "Interval pemindaian ulang harus berupa angka positif.",
|
||||
"There are no devices to share this folder with.": "Tidak ada perangkat untuk membagikan folder ini.",
|
||||
"There are no folders to share with this device.": "Tidak ada folder untuk dibagi dengan perangkat ini.",
|
||||
@@ -382,7 +383,7 @@
|
||||
"Type": "Tipe",
|
||||
"UNIX Permissions": "Izin UNIX",
|
||||
"Unavailable": "Tidak Tersedia",
|
||||
"Unavailable/Disabled by administrator or maintainer": "Tidak Tersedia/Dinonaktifkan oleh administrator atau pengelola",
|
||||
"Unavailable/Disabled by administrator or maintainer": "Tidak tersedia/Dinonaktifkan oleh administrator atau pengelola",
|
||||
"Undecided (will prompt)": "Belum terpilih (akan mengingatkan)",
|
||||
"Unexpected Items": "Berkas Tidak Terduga",
|
||||
"Unexpected items have been found in this folder.": "Berkas tidak terduga telah ditemukan dalam folder ini.",
|
||||
@@ -436,6 +437,10 @@
|
||||
"full documentation": "dokumentasi penuh",
|
||||
"items": "berkas",
|
||||
"seconds": "detik",
|
||||
"theme-name-black": "Hitam",
|
||||
"theme-name-dark": "Gelap",
|
||||
"theme-name-default": "Bawaan",
|
||||
"theme-name-light": "Terang",
|
||||
"{%device%} wants to share folder \"{%folder%}\".": "{{device}} ingin berbagi folder \"{{folder}}\".",
|
||||
"{%device%} wants to share folder \"{%folderlabel%}\" ({%folder%}).": "{{device}} ingin berbagi folder \"{{folderlabel}}\" ({{folder}}).",
|
||||
"{%reintroducer%} might reintroduce this device.": "{{reintroducer}} mungkin memperkenalkan ulang perangkat ini."
|
||||
|
||||
@@ -22,6 +22,7 @@
|
||||
"Allow Anonymous Usage Reporting?": "Abilitare Statistiche Anonime di Utilizzo?",
|
||||
"Allowed Networks": "Reti Consentite.",
|
||||
"Alphabetic": "Alfabetico",
|
||||
"Altered by ignoring deletes.": "Altered by ignoring deletes.",
|
||||
"An external command handles the versioning. It has to remove the file from the shared folder. If the path to the application contains spaces, it should be quoted.": "Il controllo versione è gestito da un comando esterno. Quest'ultimo deve rimuovere il file dalla cartella condivisa. Se il percorso dell'applicazione contiene spazi, deve essere indicato tra virgolette.",
|
||||
"Anonymous Usage Reporting": "Statistiche Anonime di Utilizzo",
|
||||
"Anonymous usage report format has changed. Would you like to move to the new format?": "Il formato delle statistiche anonime di utilizzo è cambiato. Vuoi passare al nuovo formato?",
|
||||
@@ -436,6 +437,10 @@
|
||||
"full documentation": "documentazione completa",
|
||||
"items": "elementi",
|
||||
"seconds": "secondi",
|
||||
"theme-name-black": "Nero",
|
||||
"theme-name-dark": "Scuro",
|
||||
"theme-name-default": "Default",
|
||||
"theme-name-light": "Chiaro",
|
||||
"{%device%} wants to share folder \"{%folder%}\".": "{{device}} vuole condividere la cartella \"{{folder}}\".",
|
||||
"{%device%} wants to share folder \"{%folderlabel%}\" ({%folder%}).": "{{device}} vuole condividere la cartella \"{{folderlabel}}\" ({{folder}}).",
|
||||
"{%reintroducer%} might reintroduce this device.": "{{reintroducer}} potrebbe reintrodurre questo dispositivo."
|
||||
|
||||
@@ -22,27 +22,28 @@
|
||||
"Allow Anonymous Usage Reporting?": "匿名で使用状況をレポートすることを許可しますか?",
|
||||
"Allowed Networks": "許可されているネットワーク",
|
||||
"Alphabetic": "アルファベット順",
|
||||
"Altered by ignoring deletes.": "Altered by ignoring deletes.",
|
||||
"An external command handles the versioning. It has to remove the file from the shared folder. If the path to the application contains spaces, it should be quoted.": "An external command handles the versioning. It has to remove the file from the shared folder. If the path to the application contains spaces, it should be quoted.",
|
||||
"Anonymous Usage Reporting": "匿名での使用状況レポート",
|
||||
"Anonymous usage report format has changed. Would you like to move to the new format?": "匿名での使用状況レポートのフォーマットが変わりました。新形式でのレポートに移行しますか?",
|
||||
"Are you sure you want to continue?": "続行してもよろしいですか?",
|
||||
"Are you sure you want to override all remote changes?": "Are you sure you want to override all remote changes?",
|
||||
"Are you sure you want to override all remote changes?": "リモートでの変更をすべて上書きしてもよろしいですか?",
|
||||
"Are you sure you want to permanently delete all these files?": "これらのファイルをすべて完全に削除してもよろしいですか?",
|
||||
"Are you sure you want to remove device {%name%}?": "デバイス {{name}} を削除してよろしいですか?",
|
||||
"Are you sure you want to remove folder {%label%}?": "フォルダー {{label}} を削除してよろしいですか?",
|
||||
"Are you sure you want to restore {%count%} files?": "{{count}} ファイルを復元してもよろしいですか?",
|
||||
"Are you sure you want to revert all local changes?": "Are you sure you want to revert all local changes?",
|
||||
"Are you sure you want to revert all local changes?": "ローカルでの変更をすべて取り消してもよろしいですか?",
|
||||
"Are you sure you want to upgrade?": "アップグレードしてよろしいですか?",
|
||||
"Auto Accept": "自動承諾",
|
||||
"Automatic Crash Reporting": "自動クラッシュレポート",
|
||||
"Automatic upgrade now offers the choice between stable releases and release candidates.": "自動アップグレードは、安定版とリリース候補版のいずれかを選べるようになりました。",
|
||||
"Automatic upgrades": "自動アップグレード",
|
||||
"Automatic upgrades are always enabled for candidate releases.": "Automatic upgrades are always enabled for candidate releases.",
|
||||
"Automatic upgrades are always enabled for candidate releases.": "リリース候補版ではアップデートは常に自動で行われます。",
|
||||
"Automatically create or share folders that this device advertises at the default path.": "このデバイスが通知するデフォルトのパスで自動的にフォルダを作成、共有します。",
|
||||
"Available debug logging facilities:": "Available debug logging facilities:",
|
||||
"Be careful!": "注意!",
|
||||
"Bugs": "バグ",
|
||||
"Cancel": "Cancel",
|
||||
"Cancel": "キャンセル",
|
||||
"Changelog": "更新履歴",
|
||||
"Clean out after": "以下の期間後に完全に削除する",
|
||||
"Cleaning Versions": "Cleaning Versions",
|
||||
@@ -146,7 +147,7 @@
|
||||
"Folder type \"{%receiveEncrypted%}\" can only be set when adding a new folder.": "Folder type \"{{receiveEncrypted}}\" can only be set when adding a new folder.",
|
||||
"Folder type \"{%receiveEncrypted%}\" cannot be changed after adding the folder. You need to remove the folder, delete or decrypt the data on disk, and add the folder again.": "Folder type \"{{receiveEncrypted}}\" cannot be changed after adding the folder. You need to remove the folder, delete or decrypt the data on disk, and add the folder again.",
|
||||
"Folders": "フォルダー",
|
||||
"For the following folders an error occurred while starting to watch for changes. It will be retried every minute, so the errors might go away soon. If they persist, try to fix the underlying issue and ask for help if you can't.": "For the following folders an error occurred while starting to watch for changes. It will be retried every minute, so the errors might go away soon. If they persist, try to fix the underlying issue and ask for help if you can't.",
|
||||
"For the following folders an error occurred while starting to watch for changes. It will be retried every minute, so the errors might go away soon. If they persist, try to fix the underlying issue and ask for help if you can't.": "以下のフォルダへの変更の監視を始めるにあたってエラーが発生しました。1分ごとに再試行するため、すぐに回復するかもしれません。エラーが続くようであれば、原因に対処するか、必要に応じて助けを求めましょう。",
|
||||
"Full Rescan Interval (s)": "フルスキャンの間隔 (秒)",
|
||||
"GUI": "GUI",
|
||||
"GUI Authentication Password": "GUI認証パスワード",
|
||||
@@ -195,7 +196,7 @@
|
||||
"Local State (Total)": "ローカル状態 (合計)",
|
||||
"Locally Changed Items": "Locally Changed Items",
|
||||
"Log": "ログ",
|
||||
"Log tailing paused. Scroll to the bottom to continue.": "Log tailing paused. Scroll to the bottom to continue.",
|
||||
"Log tailing paused. Scroll to the bottom to continue.": "ログのリアルタイム表示を停止しています。下部までスクロールすると再開されます。",
|
||||
"Logs": "ログ",
|
||||
"Major Upgrade": "メジャーアップグレード",
|
||||
"Mass actions": "Mass actions",
|
||||
@@ -245,7 +246,7 @@
|
||||
"Please wait": "お待ちください",
|
||||
"Prefix indicating that the file can be deleted if preventing directory removal": "このファイルが中に残っているためにディレクトリを削除できない場合、このファイルごと消してもよいことを示す接頭辞",
|
||||
"Prefix indicating that the pattern should be matched without case sensitivity": "大文字・小文字を同一視してマッチさせる接頭辞",
|
||||
"Preparing to Sync": "Preparing to Sync",
|
||||
"Preparing to Sync": "同期の準備中",
|
||||
"Preview": "プレビュー",
|
||||
"Preview Usage Report": "使用状況レポートのプレビュー",
|
||||
"Quick guide to supported patterns": "サポートされているパターンのクイックガイド",
|
||||
@@ -275,7 +276,7 @@
|
||||
"Resume All": "すべて再開",
|
||||
"Reused": "中断後再利用",
|
||||
"Revert": "Revert",
|
||||
"Revert Local Changes": "Revert Local Changes",
|
||||
"Revert Local Changes": "ローカルでの変更を取り消す",
|
||||
"Save": "保存",
|
||||
"Scan Time Remaining": "スキャン残り時間",
|
||||
"Scanning": "スキャン中",
|
||||
@@ -299,7 +300,7 @@
|
||||
"Sharing": "共有",
|
||||
"Show ID": "IDを表示",
|
||||
"Show QR": "QRコードを表示",
|
||||
"Show detailed discovery status": "Show detailed discovery status",
|
||||
"Show detailed discovery status": "詳細な探索ステータスを表示する",
|
||||
"Show detailed listener status": "Show detailed listener status",
|
||||
"Show diff with previous version": "前バージョンとの差分を表示",
|
||||
"Shown instead of Device ID in the cluster status. Will be advertised to other devices as an optional default name.": "ステータス画面でデバイスIDの代わりに表示されます。他のデバイスに対してもデフォルトの名前として通知されます。",
|
||||
@@ -349,7 +350,7 @@
|
||||
"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.": "入力されたデバイスIDが正しくありません。デバイスIDは52文字または56文字で、アルファベットと数字からなります。スペースとハイフンは入力してもしなくてもかまいません。",
|
||||
"The folder ID cannot be blank.": "フォルダーIDは空欄にできません。",
|
||||
"The folder ID must be unique.": "フォルダーIDが重複しています。",
|
||||
"The folder content on other devices will be overwritten to become identical with this device. Files not present here will be deleted on other devices.": "The folder content on other devices will be overwritten to become identical with this device. Files not present here will be deleted on other devices.",
|
||||
"The folder content on other devices will be overwritten to become identical with this device. Files not present here will be deleted on other devices.": "他のデバイス上にあるフォルダーの中身は、このデバイスのものと同じになるように上書きされます。他のデバイスにあっても、ここに表示されていないファイルは削除されます。",
|
||||
"The folder content on this device will be overwritten to become identical with other devices. Files newly added here will be deleted.": "The folder content on this device will be overwritten to become identical with other devices. Files newly added here will be deleted.",
|
||||
"The folder path cannot be blank.": "フォルダーパスは空欄にできません。",
|
||||
"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.": "保存間隔は次の通りです。初めの1時間は30秒ごとに古いバージョンを保存します。同様に、初めの1日間は1時間ごと、初めの30日間は1日ごと、その後最大保存日数までは1週間ごとに、古いバージョンを保存します。",
|
||||
@@ -357,7 +358,7 @@
|
||||
"The following items were changed locally.": "The following items were changed locally.",
|
||||
"The following methods are used to discover other devices on the network and announce this device to be found by others:": "The following methods are used to discover other devices on the network and announce this device to be found by others:",
|
||||
"The following unexpected items were found.": "The following unexpected items were found.",
|
||||
"The interval must be a positive number of seconds.": "The interval must be a positive number of seconds.",
|
||||
"The interval must be a positive number of seconds.": "間隔は0秒以下にはできません。",
|
||||
"The interval, in seconds, for running cleanup in the versions directory. Zero to disable periodic cleaning.": "The interval, in seconds, for running cleanup in the versions directory. Zero to disable periodic cleaning.",
|
||||
"The maximum age must be a number and cannot be blank.": "最大保存日数には数値を指定してください。空欄にはできません。",
|
||||
"The maximum time to keep a version (in days, set to 0 to keep versions forever).": "古いバージョンを保持する最大日数 (0で無期限)",
|
||||
@@ -368,7 +369,7 @@
|
||||
"The path cannot be blank.": "パスを入力してください。",
|
||||
"The rate limit must be a non-negative number (0: no limit)": "帯域制限値は0以上で指定して下さい。 (0で無制限)",
|
||||
"The rescan interval must be a non-negative number of seconds.": "再スキャン間隔は0秒以上で指定してください。",
|
||||
"There are no devices to share this folder with.": "There are no devices to share this folder with.",
|
||||
"There are no devices to share this folder with.": "どのデバイスともフォルダーを共有していません。",
|
||||
"There are no folders to share with this device.": "There are no folders to share with this device.",
|
||||
"They are retried automatically and will be synced when the error is resolved.": "エラーが解決すると、自動的に再試行され同期されます。",
|
||||
"This Device": "このデバイス",
|
||||
@@ -381,8 +382,8 @@
|
||||
"Trash Can File Versioning": "ゴミ箱によるバージョン管理",
|
||||
"Type": "タイプ",
|
||||
"UNIX Permissions": "UNIX パーミッション",
|
||||
"Unavailable": "Unavailable",
|
||||
"Unavailable/Disabled by administrator or maintainer": "Unavailable/Disabled by administrator or maintainer",
|
||||
"Unavailable": "利用不可",
|
||||
"Unavailable/Disabled by administrator or maintainer": "利用不可、または管理者によって無効化されています",
|
||||
"Undecided (will prompt)": "未決定(再確認する)",
|
||||
"Unexpected Items": "Unexpected Items",
|
||||
"Unexpected items have been found in this folder.": "Unexpected items have been found in this folder.",
|
||||
@@ -415,7 +416,7 @@
|
||||
"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}}) のサブディレクトリです。",
|
||||
"Warning: If you are using an external watcher like {%syncthingInotify%}, you should make sure it is deactivated.": "Warning: If you are using an external watcher like {{syncthingInotify}}, you should make sure it is deactivated.",
|
||||
"Warning: If you are using an external watcher like {%syncthingInotify%}, you should make sure it is deactivated.": "注意: {{syncthingInotify}} などの外部の監視ソフトは必ず無効にしてください。",
|
||||
"Watch for Changes": "変更の監視",
|
||||
"Watching for Changes": "変更の監視",
|
||||
"Watching for changes discovers most changes without periodic scanning.": "変更の監視は、定期スキャンを行わずにほとんどの変更を検出できます。",
|
||||
@@ -436,6 +437,10 @@
|
||||
"full documentation": "詳細なマニュアル",
|
||||
"items": "項目",
|
||||
"seconds": "seconds",
|
||||
"theme-name-black": "ブラック",
|
||||
"theme-name-dark": "ダーク",
|
||||
"theme-name-default": "デフォルト",
|
||||
"theme-name-light": "ライト",
|
||||
"{%device%} wants to share folder \"{%folder%}\".": "{{device}} がフォルダー \"{{folder}}\" を共有するよう求めています。",
|
||||
"{%device%} wants to share folder \"{%folderlabel%}\" ({%folder%}).": "{{device}} がフォルダー「{{folderlabel}}」 ({{folder}}) を共有するよう求めています。",
|
||||
"{%reintroducer%} might reintroduce this device.": "{{reintroducer}} might reintroduce this device."
|
||||
|
||||
@@ -19,50 +19,51 @@
|
||||
"Advanced Configuration": "고급 설정",
|
||||
"All Data": "전체 데이터",
|
||||
"All folders shared with this device must be protected by a password, such that all sent data is unreadable without the given password.": "All folders shared with this device must be protected by a password, such that all sent data is unreadable without the given password.",
|
||||
"Allow Anonymous Usage Reporting?": "익명 사용 보고서를 보내시겠습니까?",
|
||||
"Allow Anonymous Usage Reporting?": "익명 사용 보고를 허용하시겠습니까?",
|
||||
"Allowed Networks": "허가된 네트워크",
|
||||
"Alphabetic": "가나다순",
|
||||
"Altered by ignoring deletes.": "삭제 항목 무시로 변경됨",
|
||||
"An external command handles the versioning. It has to remove the file from the shared folder. If the path to the application contains spaces, it should be quoted.": "외부 명령이 파일 버전을 관리합니다. 공유 폴더에서 파일을 삭제해야 합니다. 응용 프로그램의 경로에 공백이 있으면 따옴표로 묶어야 합니다.",
|
||||
"Anonymous Usage Reporting": "익명 사용 보고서",
|
||||
"Anonymous usage report format has changed. Would you like to move to the new format?": "익명 사용 보고서의 형식이 변경되었습니다. 새 형식으로 이동하시겠습니까?",
|
||||
"Anonymous Usage Reporting": "익명 사용 보고",
|
||||
"Anonymous usage report format has changed. Would you like to move to the new format?": "익명 사용 보고의 형식이 변경되었습니다. 새 형식으로 설정하시겠습니까?",
|
||||
"Are you sure you want to continue?": "계속하시겠습니까?",
|
||||
"Are you sure you want to override all remote changes?": "다른 기기의 모든 변경 항목을 덮어쓰시겠습니까?",
|
||||
"Are you sure you want to permanently delete all these files?": "이 모든 파일을 영구 삭제하시겠습니까?",
|
||||
"Are you sure you want to remove device {%name%}?": "{{name}} 기기를 제거하시겠습니까?",
|
||||
"Are you sure you want to remove folder {%label%}?": "{{label}} 폴더를 제거하시겠습니까?",
|
||||
"Are you sure you want to restore {%count%} files?": "{{count}} 개의 파일을 복원하시겠습니까?",
|
||||
"Are you sure you want to revert all local changes?": "이 기기의 모든 변경 항목을 되돌리시겠습니까?",
|
||||
"Are you sure you want to revert all local changes?": "현재 기기의 모든 변경 항목을 되돌리시겠습니까?",
|
||||
"Are you sure you want to upgrade?": "업데이트를 하시겠습니까?",
|
||||
"Auto Accept": "자동 수락",
|
||||
"Automatic Crash Reporting": "자동 충돌 보고서",
|
||||
"Automatic Crash Reporting": "자동 충돌 보고",
|
||||
"Automatic upgrade now offers the choice between stable releases and release candidates.": "자동 업데이트가 안정 버전과 출시 후보 중 선택할 수 있게 바뀌었습니다.",
|
||||
"Automatic upgrades": "자동 업데이트",
|
||||
"Automatic upgrades are always enabled for candidate releases.": "출시 후보는 자동 업데이트가 항상 활성화되어 있습니다.",
|
||||
"Automatically create or share folders that this device advertises at the default path.": "이 기기가 기본 경로에서 알리는 폴더를 자동으로 만들거나 공유합니다.",
|
||||
"Automatically create or share folders that this device advertises at the default path.": "이 기기가 통보하는 폴더들을 기본 경로에서 자동으로 생성 또는 공유합니다.",
|
||||
"Available debug logging facilities:": "사용 가능한 디버그 로깅 기능:",
|
||||
"Be careful!": "주의하십시오!",
|
||||
"Bugs": "버그",
|
||||
"Cancel": "취소",
|
||||
"Changelog": "바뀐 점",
|
||||
"Clean out after": "삭제 후",
|
||||
"Cleaning Versions": "버전 정리 중",
|
||||
"Clean out after": "보관 기간",
|
||||
"Cleaning Versions": "버전 정리",
|
||||
"Cleanup Interval": "정리 간격",
|
||||
"Click to see discovery failures": "탐지 실패 보기",
|
||||
"Click to see full identification string and QR code.": "기기 식별자 및 QR 코드 보기",
|
||||
"Close": "닫기",
|
||||
"Command": "명령",
|
||||
"Comment, when used at the start of a line": "명령행에서 시작을 할수 있어요.",
|
||||
"Comment, when used at the start of a line": "주석 (줄 앞에 사용할 때)",
|
||||
"Compression": "압축",
|
||||
"Configured": "설정됨",
|
||||
"Connected (Unused)": "연결됨 (미사용)",
|
||||
"Connection Error": "연결 오류",
|
||||
"Connection Type": "연결 유형",
|
||||
"Connections": "연결",
|
||||
"Continuously watching for changes is now available within Syncthing. This will detect changes on disk and issue a scan on only the modified paths. The benefits are that changes are propagated quicker and that less full scans are required.": "Syncthing는 변경 사항을 지속적으로 감지 할 수 있습니다. 이렇게 하면 디스크의 변경 사항을 감지하고 수정 된 경로에서만 검사를 실행합니다. 이점은 변경 사항이 더 빠르게 전파되고 전체 탐색 횟수가 줄어듭니다.",
|
||||
"Continuously watching for changes is now available within Syncthing. This will detect changes on disk and issue a scan on only the modified paths. The benefits are that changes are propagated quicker and that less full scans are required.": "지속적 변경 항목 감시 기능이 Syncthing에 추가되었습니다. 저장장치에서 변경 항목이 감시되면 변경된 경로에서만 탐색이 실시됩니다. 변경 항목이 더 빠르게 전파되며 전체 탐색 횟수가 줄어드는 이점이 있습니다.",
|
||||
"Copied from elsewhere": "다른 곳에서 복사됨",
|
||||
"Copied from original": "원본에서 복사됨",
|
||||
"Copyright © 2014-2019 the following Contributors:": "Copyright © 2014-2019 the following Contributors:",
|
||||
"Creating ignore patterns, overwriting an existing file at {%path%}.": "무시 패턴 생성 중, {{path}}에 존재하는 파일을 덮어씁니다.",
|
||||
"Creating ignore patterns, overwriting an existing file at {%path%}.": "무시 양식 생성 중, {{path}}에 존재하는 파일을 덮어씁니다.",
|
||||
"Currently Shared With Devices": "현재 공유된 기기",
|
||||
"Danger!": "위험!",
|
||||
"Debugging Facilities": "디버깅 기능",
|
||||
@@ -86,55 +87,55 @@
|
||||
"Device rate limits": "기기 속도 제한",
|
||||
"Device that last modified the item": "항목을 마지막으로 수정한 기기",
|
||||
"Devices": "기기",
|
||||
"Disable Crash Reporting": "충돌 보고서 해제",
|
||||
"Disable Crash Reporting": "충돌 보고 비활성화",
|
||||
"Disabled": "비활성화됨",
|
||||
"Disabled periodic scanning and disabled watching for changes": "주기적 탐색을 사용 중지하고 변경 사항을 감시하지 않음",
|
||||
"Disabled periodic scanning and enabled watching for changes": "주기적 탐색을 사용 중지하고 변경 사항 감시 하기",
|
||||
"Disabled periodic scanning and failed setting up watching for changes, retrying every 1m:": "Disabled periodic scanning and failed setting up watching for changes, retrying every 1m:",
|
||||
"Disables comparing and syncing file permissions. Useful on systems with nonexistent or custom permissions (e.g. FAT, exFAT, Synology, Android).": "Disables comparing and syncing file permissions. Useful on systems with nonexistent or custom permissions (e.g. FAT, exFAT, Synology, Android).",
|
||||
"Discard": "무시",
|
||||
"Disabled periodic scanning and disabled watching for changes": "주기적 탐색 비활성화됨, 변경 항목 감시 비활성화됨",
|
||||
"Disabled periodic scanning and enabled watching for changes": "주기적 탐색 비활성화됨, 변경 항목 감시 활성화됨",
|
||||
"Disabled periodic scanning and failed setting up watching for changes, retrying every 1m:": "주기적 탐색 비활성화됨, 변경 항목 감시 설정에 실패함, 1분마다 재시도 중:",
|
||||
"Disables comparing and syncing file permissions. Useful on systems with nonexistent or custom permissions (e.g. FAT, exFAT, Synology, Android).": "파일의 권한을 비교 및 동기화를 비활성화합니다. FAT, exFAT, Synology, Android 등 파일 권한이 존재하지 않거나 비표준 파일 권한을 사용하는 체제에서 유용합니다.",
|
||||
"Discard": "일시적 무시",
|
||||
"Disconnected": "연결 끊김",
|
||||
"Disconnected (Unused)": "연결 끊김 (미사용)",
|
||||
"Discovered": "탐지됨",
|
||||
"Discovery": "탐지",
|
||||
"Discovery Failures": "탐지 실패",
|
||||
"Discovery Status": "탐지 현황",
|
||||
"Dismiss": "무시",
|
||||
"Dismiss": "나중에",
|
||||
"Do not add it to the ignore list, so this notification may recur.": "Do not add it to the ignore list, so this notification may recur.",
|
||||
"Do not restore": "복구 하지 않기",
|
||||
"Do not restore all": "모두 복구 하지 않기",
|
||||
"Do you want to enable watching for changes for all your folders?": "변경 사항 감시를 당신의 모든 폴더에서 활성화 하는걸 원하시나요?",
|
||||
"Do you want to enable watching for changes for all your folders?": "변경 항목 감시를 모든 폴더에서 활성화하시겠습니까?",
|
||||
"Documentation": "사용 설명서",
|
||||
"Download Rate": "수신 속도",
|
||||
"Downloaded": "수신됨",
|
||||
"Downloading": "수신 중",
|
||||
"Downloading": "수신",
|
||||
"Edit": "편집",
|
||||
"Edit Device": "기기 편집",
|
||||
"Edit Device Defaults": "기기 기본 설정 편집",
|
||||
"Edit Folder": "폴더 편집",
|
||||
"Edit Folder Defaults": "폴더 기본 설정 편집",
|
||||
"Editing {%path%}.": "{{path}} 편집 중",
|
||||
"Enable Crash Reporting": "충돌 보고서 활성화",
|
||||
"Enable Crash Reporting": "충돌 보고 활성화",
|
||||
"Enable NAT traversal": "NAT traversal 활성화",
|
||||
"Enable Relaying": "Relaying 활성화",
|
||||
"Enabled": "활성화됨",
|
||||
"Enter a non-negative number (e.g., \"2.35\") and select a unit. Percentages are as part of the total disk size.": "음수가 아닌 수 (예, \"2.35\") 를 입력 후 단위를 선택하세요. 백분율은 총 디스크 크기의 일부입니다.",
|
||||
"Enter a non-privileged port number (1024 - 65535).": "비 특권 포트 번호를 입력하세요 (1024 - 65535).",
|
||||
"Enter comma separated (\"tcp://ip:port\", \"tcp://host:port\") addresses or \"dynamic\" to perform automatic discovery of the address.": "Enter comma separated (\"tcp://ip:port\", \"tcp://host:port\") addresses or \"dynamic\" to perform automatic discovery of the address.",
|
||||
"Enter ignore patterns, one per line.": "무시할 패턴을 한 줄에 하나씩 입력하세요.",
|
||||
"Enter ignore patterns, one per line.": "무시할 양식을 한 줄에 하나씩 입력하십시오.",
|
||||
"Enter up to three octal digits.": "최대 3자리의 8진수를 입력하세요.",
|
||||
"Error": "오류",
|
||||
"External File Versioning": "외부 파일 버전 관리",
|
||||
"Failed Items": "실패 항목",
|
||||
"Failed to load ignore patterns.": "Failed to load ignore patterns.",
|
||||
"Failed to load ignore patterns.": "무시 양식을 불러오기에 실패했습니다.",
|
||||
"Failed to setup, retrying": "설정 적용 실패, 재시도 중",
|
||||
"Failure to connect to IPv6 servers is expected if there is no IPv6 connectivity.": "IPv6 네트워크에 연결되지 않은 경우 IPv6 서버에 연결 할 수 없습니다.",
|
||||
"File Pull Order": "파일 수신 순서",
|
||||
"File Versioning": "파일 버전 관리",
|
||||
"Files are moved to .stversions directory when replaced or deleted by Syncthing.": "파일이 Syncthing에 의해서 교체되거나 삭제되면 .stversions 폴더로 이동됩니다.",
|
||||
"Files are moved to date stamped versions in a .stversions directory when replaced or deleted by Syncthing.": "파일이 Syncthing에 의해서 교체되거나 삭제되면 .stversions 폴더에 있는 날짜가 바뀐 버전으로 이동됩니다.",
|
||||
"Files are moved to date stamped versions in a .stversions directory when replaced or deleted by Syncthing.": "파일이 Syncthing에 의해 교체되거나 삭제되면 .stversions 폴더에 있는 날짜가 찍힌 버전으로 이동됩니다.",
|
||||
"Files are protected from changes made on other devices, but changes made on this device will be sent to the rest of the cluster.": "다른 기기가 파일을 편집할 수 없으며 반드시 이 장치의 내용을 기준으로 동기화합니다.",
|
||||
"Files are synchronized from the cluster, but any changes made locally will not be sent to other devices.": "Files are synchronized from the cluster, but any changes made locally will not be sent to other devices.",
|
||||
"Files are synchronized from the cluster, but any changes made locally will not be sent to other devices.": "다른 기기로부터 파일을 동기화하지만 현재 기기에서 변경된 항목은 다른 기기로 전송되지 않습니다.",
|
||||
"Filesystem Watcher Errors": "파일 시스템 감시 오류",
|
||||
"Filter by date": "날짜별 정렬",
|
||||
"Filter by name": "이름별 정렬",
|
||||
@@ -143,22 +144,22 @@
|
||||
"Folder Label": "폴더명",
|
||||
"Folder Path": "폴더 경로",
|
||||
"Folder Type": "폴더 유형",
|
||||
"Folder type \"{%receiveEncrypted%}\" can only be set when adding a new folder.": "Folder type \"{{receiveEncrypted}}\" can only be set when adding a new folder.",
|
||||
"Folder type \"{%receiveEncrypted%}\" cannot be changed after adding the folder. You need to remove the folder, delete or decrypt the data on disk, and add the folder again.": "Folder type \"{{receiveEncrypted}}\" cannot be changed after adding the folder. You need to remove the folder, delete or decrypt the data on disk, and add the folder again.",
|
||||
"Folder type \"{%receiveEncrypted%}\" can only be set when adding a new folder.": "\"{{receiveEncrypted}}\" 폴더 유형은 새 폴더를 추가할 때만 설정할 수 있습니다.",
|
||||
"Folder type \"{%receiveEncrypted%}\" cannot be changed after adding the folder. You need to remove the folder, delete or decrypt the data on disk, and add the folder again.": "\"{{receiveEncrypted}}\" 폴더 유형은 폴더를 추가한 후 변경할 수 없습니다. 폴더를 먼저 삭제하고, 디스크에 있는 데이터를 삭제 또는 해독한 다음 폴더를 다시 추가하십시오.",
|
||||
"Folders": "폴더",
|
||||
"For the following folders an error occurred while starting to watch for changes. It will be retried every minute, so the errors might go away soon. If they persist, try to fix the underlying issue and ask for help if you can't.": "For the following folders an error occurred while starting to watch for changes. It will be retried every minute, so the errors might go away soon. If they persist, try to fix the underlying issue and ask for help if you can't.",
|
||||
"Full Rescan Interval (s)": "전체 재탐색 간격 (초)",
|
||||
"GUI": "GUI",
|
||||
"GUI Authentication Password": "GUI 인증 비밀번호",
|
||||
"GUI Authentication User": "GUI 인증 사용자",
|
||||
"GUI Authentication: Set User and Password": "GUI 인증: 사용자와 비밀번호를 설정하십시오",
|
||||
"GUI Authentication: Set User and Password": "GUI 인증: 사용자 이름과 비밀번호를 설정하십시오",
|
||||
"GUI Listen Address": "GUI 수신 주소",
|
||||
"GUI Theme": "GUI 테마",
|
||||
"General": "일반",
|
||||
"Generate": "생성",
|
||||
"Global Discovery": "글로벌 탐지",
|
||||
"Global Discovery Servers": "글로벌 탐지 서버",
|
||||
"Global State": "글로벌 서버 상태",
|
||||
"Global State": "전체 기기 상태",
|
||||
"Help": "도움말",
|
||||
"Home page": "홈페이지",
|
||||
"However, your current settings indicate you might not want it enabled. We have disabled automatic crash reporting for you.": "However, your current settings indicate you might not want it enabled. We have disabled automatic crash reporting for you.",
|
||||
@@ -166,17 +167,17 @@
|
||||
"If untrusted, enter encryption password": "신뢰하지 않는 경우 암호화 비밀번호를 입력하십시오.",
|
||||
"If you want to prevent other users on this computer from accessing Syncthing and through it your files, consider setting up authentication.": "If you want to prevent other users on this computer from accessing Syncthing and through it your files, consider setting up authentication.",
|
||||
"Ignore": "무시",
|
||||
"Ignore Patterns": "무시 패턴",
|
||||
"Ignore Patterns": "무시 양식",
|
||||
"Ignore Permissions": "권한 무시",
|
||||
"Ignored Devices": "무시된 기기",
|
||||
"Ignored Folders": "무시된 폴더",
|
||||
"Ignored at": "Ignored at",
|
||||
"Ignored at": "무시된 기기",
|
||||
"Incoming Rate Limit (KiB/s)": "수신 속도 제한 (KiB/s)",
|
||||
"Incorrect configuration may damage your folder contents and render Syncthing inoperable.": "잘못된 설정은 폴더의 컨텐츠를 훼손하거나 Syncthing의 오작동을 일으킬 수 있습니다.",
|
||||
"Introduced By": "Introduced By",
|
||||
"Introduced By": "유도한 기기",
|
||||
"Introducer": "유도자",
|
||||
"Inversion of the given condition (i.e. do not exclude)": "주어진 조건의 반대 (전혀 배제하지 않음)",
|
||||
"Keep Versions": "버전 보관",
|
||||
"Inversion of the given condition (i.e. do not exclude)": "특정한 조건의 반대 (즉 배제하지 않음)",
|
||||
"Keep Versions": "버전 수",
|
||||
"LDAP": "LDAP",
|
||||
"Largest First": "큰 파일 순",
|
||||
"Last Scan": "마지막 탐색",
|
||||
@@ -189,30 +190,30 @@
|
||||
"Listeners": "수신자",
|
||||
"Loading data...": "데이터를 불러오는 중...",
|
||||
"Loading...": "불러오는 중...",
|
||||
"Local Additions": "로컬 변경 항목",
|
||||
"Local Additions": "현재 기기 추가 항목",
|
||||
"Local Discovery": "로컬 탐지",
|
||||
"Local State": "로컬 상태",
|
||||
"Local State (Total)": "로컬 상태 (합계)",
|
||||
"Locally Changed Items": "로컬 변경 항목",
|
||||
"Local State": "현재 기기 상태",
|
||||
"Local State (Total)": "현재 기기 상태 (합계)",
|
||||
"Locally Changed Items": "현재 기기 변경 항목",
|
||||
"Log": "기록",
|
||||
"Log tailing paused. Scroll to the bottom to continue.": "Log tailing paused. Scroll to the bottom to continue.",
|
||||
"Logs": "기록",
|
||||
"Major Upgrade": "주요 업데이트",
|
||||
"Mass actions": "Mass actions",
|
||||
"Maximum Age": "최대 보존 기간",
|
||||
"Mass actions": "다중 동작",
|
||||
"Maximum Age": "최대 보관 기간",
|
||||
"Metadata Only": "메타데이터만",
|
||||
"Minimum Free Disk Space": "최소 여유 디스크 용량",
|
||||
"Mod. Device": "수정된 기기",
|
||||
"Mod. Time": "수정된 시간",
|
||||
"Move to top of queue": "대기열 상단으로 이동",
|
||||
"Multi level wildcard (matches multiple directory levels)": "다중 레벨 와일드 카드 (여러 단계의 디렉토리와 일치하는 경우)",
|
||||
"Multi level wildcard (matches multiple directory levels)": "다중 레벨 와일드카드 (여러 단계의 디렉토리에서 적용됨)",
|
||||
"Never": "사용 안 함",
|
||||
"New Device": "새 기기",
|
||||
"New Folder": "새 폴더",
|
||||
"Newest First": "최신 파일 순",
|
||||
"No": "아니요",
|
||||
"No File Versioning": "파일 버전 관리 안 함",
|
||||
"No files will be deleted as a result of this operation.": "No files will be deleted as a result of this operation.",
|
||||
"No files will be deleted as a result of this operation.": "이 작업으로 인해서는 아무 파일도 삭제되지 않습니다.",
|
||||
"No upgrades": "업데이트 안함",
|
||||
"Not shared": "공유되지 않음",
|
||||
"Notice": "공지",
|
||||
@@ -227,34 +228,34 @@
|
||||
"Override": "덮어쓰기",
|
||||
"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 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 new auto accepted folders will be created, as well as the default suggested path when adding new folders via the UI. Tilde character (~) expands to {%tilde%}.": "Path where new auto accepted folders will be created, as well as the default suggested path when adding new folders via the UI. Tilde character (~) expands to {{tilde}}.",
|
||||
"Path where versions should be stored (leave empty for the default .stversions directory in the shared folder).": "버전을 보관할 경로 (비워둘 시 공유된 폴더 안의 기본값 .stversions 폴더로 지정됨)",
|
||||
"Path where versions should be stored (leave empty for the default .stversions directory in the shared folder).": "버전을 보관할 경로입니다. 공유된 폴더 안의 기본값 .stversions 폴더로 사용하려면 비워 두십시오.",
|
||||
"Pause": "일시 중지",
|
||||
"Pause All": "모두 일시 중지",
|
||||
"Paused": "일시 중지됨",
|
||||
"Paused (Unused)": "일시 중지됨 (미사용)",
|
||||
"Pending changes": "Pending changes",
|
||||
"Periodic scanning at given interval and disabled watching for changes": "Periodic scanning at given interval and disabled watching for changes",
|
||||
"Periodic scanning at given interval and enabled watching for changes": "Periodic scanning at given interval and enabled watching for changes",
|
||||
"Periodic scanning at given interval and failed setting up watching for changes, retrying every 1m:": "Periodic scanning at given interval and failed setting up watching for changes, retrying every 1m:",
|
||||
"Pending changes": "대기 중인 변경 항목",
|
||||
"Periodic scanning at given interval and disabled watching for changes": "설정한 간격으로 주기적 탐색 활성화됨, 변경 항목 감시 비활성화됨",
|
||||
"Periodic scanning at given interval and enabled watching for changes": "설정한 간격으로 주기적 탐색 활성화됨, 변경 항목 감시 활성화됨",
|
||||
"Periodic scanning at given interval and failed setting up watching for changes, retrying every 1m:": "설정한 간격으로 주기적 탐색 활성화됨, 변경 항목 감시 설정에 실패함, 1분마다 재시도 중:",
|
||||
"Permanently add it to the ignore list, suppressing further notifications.": "Permanently add it to the ignore list, suppressing further notifications.",
|
||||
"Permissions": "권한",
|
||||
"Please consult the release notes before performing a major upgrade.": "메이저 업데이트를 하기 전에 먼저 릴리즈 노트를 살펴보세요.",
|
||||
"Please set a GUI Authentication User and Password in the Settings dialog.": "설정에서 GUI 인증용 User와 암호를 입력해주세요.",
|
||||
"Please set a GUI Authentication User and Password in the Settings dialog.": "설정 창에서 GUI 인증 사용자 이름과 비밀번호를 설정하십시오.",
|
||||
"Please wait": "기다려 주십시오",
|
||||
"Prefix indicating that the file can be deleted if preventing directory removal": "디렉토리 제거를 방지 할 경우 파일을 삭제할 수 있음을 나타내는 접두사",
|
||||
"Prefix indicating that the pattern should be matched without case sensitivity": "대소 문자를 구분하지 않고 패턴을 일치시켜야 함을 나타내는 접두사",
|
||||
"Preparing to Sync": "동기화 준비 중",
|
||||
"Prefix indicating that the file can be deleted if preventing directory removal": "디렉터리 제거를 방지하는 파일을 삭제할 수 있음을 나타내는 접두사",
|
||||
"Prefix indicating that the pattern should be matched without case sensitivity": "대소 문자 구분 없이 양식을 적용함을 나타내는 접두사",
|
||||
"Preparing to Sync": "동기화 준비",
|
||||
"Preview": "미리 보기",
|
||||
"Preview Usage Report": "사용 보고서 미리 보기",
|
||||
"Quick guide to supported patterns": "지원하는 패턴에 대한 빠른 도움말",
|
||||
"Quick guide to supported patterns": "지원하는 양식에 대한 빠른 도움말",
|
||||
"Random": "무작위",
|
||||
"Receive Encrypted": "암호화 수신",
|
||||
"Receive Only": "수신 전용",
|
||||
"Received data is already encrypted": "수신된 데이터는 이미 암호화되어 있습니다",
|
||||
"Recent Changes": "최근 변경 항목",
|
||||
"Reduced by ignore patterns": "무시 패턴으로 축소",
|
||||
"Reduced by ignore patterns": "무시 양식으로 축소됨",
|
||||
"Release Notes": "릴리즈 노트",
|
||||
"Release candidates contain the latest features and fixes. They are similar to the traditional bi-weekly Syncthing releases.": "출시 후보는 최신 기능과 버그 픽스를 포함 하고 있습니다. 이 버전은 예전 방식인 2주 주기 Syncthing 출시와 비슷합니다.",
|
||||
"Remote Devices": "다른 기기",
|
||||
@@ -275,11 +276,11 @@
|
||||
"Resume All": "모두 재개",
|
||||
"Reused": "재사용",
|
||||
"Revert": "되돌리기",
|
||||
"Revert Local Changes": "본 기기의 변경 항목 되돌리기",
|
||||
"Revert Local Changes": "현재 기기의 변경 항목 되돌리기",
|
||||
"Save": "저장",
|
||||
"Scan Time Remaining": "탐색 남은 시간",
|
||||
"Scanning": "탐색 중",
|
||||
"See external versioning help for supported templated command line parameters.": "지원되는 템플릿 명령 행 매개 변수에 대해서는 외부 버전 도움말을 참조하십시오.",
|
||||
"Scanning": "탐색",
|
||||
"See external versioning help for supported templated command line parameters.": "지원하는 견본 명령 매개 변수에 대해서는 외부 버전 도움말을 참조하십시오.",
|
||||
"Select All": "모두 선택",
|
||||
"Select a version": "버전을 선택하십시오.",
|
||||
"Select additional devices to share this folder with.": "이 폴더를 추가로 공유할 기기를 선택하십시오.",
|
||||
@@ -287,7 +288,7 @@
|
||||
"Select latest version": "가장 최신 버전 선택하십시오.",
|
||||
"Select oldest version": "가장 오래된 버전 선택하십시오.",
|
||||
"Select the folders to share with this device.": "이 기기와 공유할 폴더를 선택하십시오.",
|
||||
"Send & Receive": "송신 & 수신",
|
||||
"Send & Receive": "송수신",
|
||||
"Send Only": "송신 전용",
|
||||
"Settings": "설정",
|
||||
"Share": "공유",
|
||||
@@ -295,19 +296,19 @@
|
||||
"Share Folders With Device": "폴더를 공유할 기기",
|
||||
"Share this folder?": "이 폴더를 공유하시겠습니까?",
|
||||
"Shared Folders": "공유 폴더",
|
||||
"Shared With": "~와 공유",
|
||||
"Shared With": "공유된 기기",
|
||||
"Sharing": "공유",
|
||||
"Show ID": "기기 ID 보기",
|
||||
"Show QR": "QR 코드 보기",
|
||||
"Show detailed discovery status": "탐지 현황 상세 보기",
|
||||
"Show detailed listener status": "수신자 현황 상세 보기",
|
||||
"Show diff with previous version": "이전 버전과 변경사항 보기",
|
||||
"Shown instead of Device ID in the cluster status. Will be advertised to other devices as an optional default name.": "기기에 대한 아이디로 표시됩니다. 옵션에 얻은 기본 이름으로 다른 기기에 통보합니다.",
|
||||
"Shown instead of Device ID in the cluster status. Will be updated to the name the device advertises if left empty.": "아이디가 비어 있는 경우 기본 값으로 다른 기기에 업데이트됩니다.",
|
||||
"Shown instead of Device ID in the cluster status. Will be advertised to other devices as an optional default name.": "기기 ID 대신에 기기 목록에서 나타납니다. 다른 기기에 선택적 기본값 이름으로 통보됩니다.",
|
||||
"Shown instead of Device ID in the cluster status. Will be updated to the name the device advertises if left empty.": "기기 ID 대신에 기기 목록에서 나타납니다. 비워 둘 경우 다른 기기에서 통보한 이름으로 갱신됩니다.",
|
||||
"Shutdown": "종료",
|
||||
"Shutdown Complete": "종료 완료",
|
||||
"Simple File Versioning": "간단한 파일 버전 관리",
|
||||
"Single level wildcard (matches within a directory only)": "단일 레벨 와일드카드 (하나의 디렉토리만 일치하는 경우)",
|
||||
"Single level wildcard (matches within a directory only)": "단일 레벨 와일드카드 (하나의 디렉토리 내에서만 적용됨)",
|
||||
"Size": "크기",
|
||||
"Smallest First": "작은 파일 순",
|
||||
"Some discovery methods could not be established for finding other devices or announcing this device:": "Some discovery methods could not be established for finding other devices or announcing this device:",
|
||||
@@ -317,23 +318,23 @@
|
||||
"Stable releases and release candidates": "안정 버전과 출시 후보",
|
||||
"Stable releases are delayed by about two weeks. During this time they go through testing as release candidates.": "안정 버전은 약 2주 정도 지연되어 출시됩니다. 그 기간 동안 출시 후보에 대한 테스트를 거칩니다.",
|
||||
"Stable releases only": "안정 버전만",
|
||||
"Staggered File Versioning": "타임스탬프 기준 파일 버전 관리",
|
||||
"Staggered File Versioning": "시차제 파일 버전 관리",
|
||||
"Start Browser": "브라우저 열기",
|
||||
"Statistics": "통계",
|
||||
"Stopped": "중지됨",
|
||||
"Stores and syncs only encrypted data. Folders on all connected devices need to be set up with the same password or be of type \"{%receiveEncrypted%}\" too.": "Stores and syncs only encrypted data. Folders on all connected devices need to be set up with the same password or be of type \"{{receiveEncrypted}}\" too.",
|
||||
"Stores and syncs only encrypted data. Folders on all connected devices need to be set up with the same password or be of type \"{%receiveEncrypted%}\" too.": "암호화된 데이터만 보관하여 동기화합니다. 모든 공유된 기기의 폴더가 동일한 비밀번호를 설정하거나 같은 \"{{receiveEncrypted}}\" 폴더 유형이어야 합니다.",
|
||||
"Support": "지원",
|
||||
"Support Bundle": "Support Bundle",
|
||||
"Sync Protocol Listen Addresses": "동기화 프로토콜 수신 주소",
|
||||
"Syncing": "동기화 중",
|
||||
"Syncing": "동기화",
|
||||
"Syncthing has been shut down.": "Syncthing이 종료되었습니다.",
|
||||
"Syncthing includes the following software or portions thereof:": "Syncthing은 다음과 같은 소프트웨어나 그 일부를 포함합니다:",
|
||||
"Syncthing is Free and Open Source Software licensed as MPL v2.0.": "Syncthing는 MPL v2.0 으로 라이센스 된 무료 및 오픈 소스 소프트웨어입니다.",
|
||||
"Syncthing includes the following software or portions thereof:": "Syncthing은 다음과 같은 소프트웨어 또는 그 일부를 포함합니다:",
|
||||
"Syncthing is Free and Open Source Software licensed as MPL v2.0.": "Syncthing은 MPL v2.0으로 라이센스된 자유-오픈 소스 소프트웨어입니다.",
|
||||
"Syncthing is listening on the following network addresses for connection attempts from other devices:": "Syncthing is listening on the following network addresses for connection attempts from other devices:",
|
||||
"Syncthing is not listening for connection attempts from other devices on any address. Only outgoing connections from this device may work.": "Syncthing is not listening for connection attempts from other devices on any address. Only outgoing connections from this device may work.",
|
||||
"Syncthing is restarting.": "Syncthing이 재시작 중입니다.",
|
||||
"Syncthing is upgrading.": "Syncthing이 업데이트 중입니다.",
|
||||
"Syncthing now supports automatically reporting crashes to the developers. This feature is enabled by default.": "Syncthing는 이제 개발자에게 충돌보고를 자동으로 지원합니다. 이 기능은 기본적으로 활성화 되어 있습니다.",
|
||||
"Syncthing now supports automatically reporting crashes to the developers. This feature is enabled by default.": "개발자들에게 충돌을 자동으로 보고하는 기능이 Syncthing에 추가되었습니다. 이 기능은 기본값으로 활성화되어 있습니다.",
|
||||
"Syncthing seems to be down, or there is a problem with your Internet connection. Retrying…": "Syncthing이 중지되었거나 인터넷 연결에 문제가 있는 것 같습니다. 재시도 중입니다...",
|
||||
"Syncthing seems to be experiencing a problem processing your request. Please refresh the page or restart Syncthing if the problem persists.": "Syncthing에서 요청을 처리하는 중에 문제가 발생했습니다. 계속 문제가 발생하면 페이지를 다시 불러오거나 Syncthing을 재시작해 보세요.",
|
||||
"Take me back": "취소",
|
||||
@@ -345,24 +346,24 @@
|
||||
"The configuration has been saved but not activated. Syncthing must restart to activate the new configuration.": "설정이 저장되었지만 활성화되지 않았습니다. 설정을 활성화 하려면 Syncthing을 다시 시작하세요.",
|
||||
"The device ID cannot be blank.": "기기 ID는 비워 둘 수 없습니다.",
|
||||
"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).": "여기에 입력한 기기 ID가 다른 기기의 \"동작 > ID 보기\"에 표시됩니다. 공백과 하이픈은 세지 않습니다. 즉 무시됩니다.",
|
||||
"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.": "암호화된 사용 보고서는 매일 전송됩니다 사용 중인 플랫폼과 폴더 크기, 앱 버전이 포함되어 있습니다. 전송되는 데이터가 변경되면 다시 이 대화 상자가 나타납니다.",
|
||||
"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.": "암호화된 사용 보고서는 매일 전송됩니다. 사용 중인 운영체제, 폴더 크기와 앱 버전을 추적하기 위해서입니다. 보고되는 정보가 변경되면 이 창이 다시 나타날 것입니다.",
|
||||
"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.": "입력한 기기 ID가 올바르지 않습니다. 52/56자의 알파벳과 숫자로 구성되어 있으며, 공백과 하이픈은 포함되지 않습니다.",
|
||||
"The folder ID cannot be blank.": "폴더 ID는 비워 둘 수 없습니다.",
|
||||
"The folder ID must be unique.": "폴더 ID는 중복될 수 없습니다.",
|
||||
"The folder content on other devices will be overwritten to become identical with this device. Files not present here will be deleted on other devices.": "The folder content on other devices will be overwritten to become identical with this device. Files not present here will be deleted on other devices.",
|
||||
"The folder content on this device will be overwritten to become identical with other devices. Files newly added here will be deleted.": "The folder content on this device will be overwritten to become identical with other devices. Files newly added here will be deleted.",
|
||||
"The folder path cannot be blank.": "폴더 경로는 비워 둘 수 없습니다.",
|
||||
"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.": "다음과 같은 간격이 사용됩니다: 첫 한 시간 동안은 버전이 매 30초마다 유지되며, 첫 하루 동안은 매 시간, 첫 한 달 동안은 매 일마다 유지됩니다. 그리고 최대 날짜까지는 버전이 매 주마다 유지됩니다.",
|
||||
"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.": "다음과 같은 간격이 사용됩니다: 첫 한 시간 동안은 30초마다, 첫 하루 동안은 1시간마다, 첫 30일 동안은 1일마다, 그리고 최대 보관 기간까지는 1주일마다 버전이 보관됩니다.",
|
||||
"The following items could not be synchronized.": "이 항목들은 동기화 할 수 없습니다.",
|
||||
"The following items were changed locally.": "다음 로컬 변경 항목이 발견되었습니다.",
|
||||
"The following items were changed locally.": "다음 항목이 현재 기기에서 변경되었습니다.",
|
||||
"The following methods are used to discover other devices on the network and announce this device to be found by others:": "The following methods are used to discover other devices on the network and announce this device to be found by others:",
|
||||
"The following unexpected items were found.": "예기치 못한 항목이 발견되었습니다.",
|
||||
"The interval must be a positive number of seconds.": "간격은 초 단위의 자연수여야 합니다.",
|
||||
"The interval, in seconds, for running cleanup in the versions directory. Zero to disable periodic cleaning.": "The interval, in seconds, for running cleanup in the versions directory. Zero to disable periodic cleaning.",
|
||||
"The maximum age must be a number and cannot be blank.": "최대 보존 기간은 숫자여야 하며 비워 둘 수 없습니다.",
|
||||
"The maximum time to keep a version (in days, set to 0 to keep versions forever).": "버전을 유지할 최대 시간을 지정합니다. 일단위이며 버전을 계속 유지하려면 0을 입력하세요,",
|
||||
"The interval, in seconds, for running cleanup in the versions directory. Zero to disable periodic cleaning.": "버전 폴더를 정리하는 초 단위의 간격입니다. 주기적 정리를 비활성화하려면 0을 입력하십시오.",
|
||||
"The maximum age must be a number and cannot be blank.": "최대 보관 기간은 숫자여야 하며 비워 둘 수 없습니다.",
|
||||
"The maximum time to keep a version (in days, set to 0 to keep versions forever).": "버전을 보관할 최대 시간입니다. 일 단위이며 버전을 계속 보관하려면 0을 입력하십시오.",
|
||||
"The number of days must be a number and cannot be blank.": "날짜는 숫자여야 하며 비워 둘 수 없습니다.",
|
||||
"The number of days to keep files in the trash can. Zero means forever.": "설정된 날짜 동안 파일이 휴지통에 보관됩니다. 0은 무제한입니다.",
|
||||
"The number of days to keep files in the trash can. Zero means forever.": "휴지통에서 파일을 보관할 일수입니다. 0은 무제한을 의미합니다.",
|
||||
"The number of old versions to keep, per file.": "각 파일별로 유지할 이전 버전의 개수를 지정합니다.",
|
||||
"The number of versions must be a number and cannot be blank.": "버전 개수는 숫자여야 하며 비워 둘 수 없습니다.",
|
||||
"The path cannot be blank.": "경로는 비워 둘 수 없습니다.",
|
||||
@@ -392,24 +393,24 @@
|
||||
"Unshared Devices": "공유되지 않은 기기",
|
||||
"Unshared Folders": "공유되지 않은 폴더",
|
||||
"Untrusted": "신뢰하지 않음",
|
||||
"Up to Date": "최신 데이터",
|
||||
"Up to Date": "최신 상태",
|
||||
"Updated": "업데이트 완료",
|
||||
"Upgrade": "업데이트",
|
||||
"Upgrade To {%version%}": "{{version}}으로 업데이트",
|
||||
"Upgrading": "업데이트 중",
|
||||
"Upload Rate": "업로드 속도",
|
||||
"Upload Rate": "송신 속도",
|
||||
"Uptime": "가동 시간",
|
||||
"Usage reporting is always enabled for candidate releases.": "출시 후보 버전에서는 사용 보고서가 항상 활성화 됩니다.",
|
||||
"Usage reporting is always enabled for candidate releases.": "출시 후보 버전에서는 사용 보고가 항상 활성화되어 있습니다.",
|
||||
"Use HTTPS for GUI": "GUI에서 HTTPS 프로토콜 사용",
|
||||
"Use notifications from the filesystem to detect changed items.": "Use notifications from the filesystem to detect changed items.",
|
||||
"Username/Password has not been set for the GUI authentication. Please consider setting it up.": "Username/Password has not been set for the GUI authentication. Please consider setting it up.",
|
||||
"Username/Password has not been set for the GUI authentication. Please consider setting it up.": "GUI 인증을 위한 사용자 이름과 비밀번호가 설정되지 않았습니다.",
|
||||
"Version": "버전",
|
||||
"Versions": "버전",
|
||||
"Versions Path": "버전 저장 경로",
|
||||
"Versions are automatically deleted if they are older than the maximum age or exceed the number of files allowed in an interval.": "최대 보존 기간보다 오래되었거나 지정한 개수를 넘긴 버전은 자동으로 삭제됩니다.",
|
||||
"Waiting to Clean": "정리 대기 중",
|
||||
"Waiting to Scan": "탐색 대기 중",
|
||||
"Waiting to Sync": "동기화 대기 중",
|
||||
"Versions Path": "보관 경로",
|
||||
"Versions are automatically deleted if they are older than the maximum age or exceed the number of files allowed in an interval.": "최대 보관 기간보다 오래되었거나 간격 내에서 허용되는 파일 개수를 넘긴 버전은 자동으로 삭제됩니다.",
|
||||
"Waiting to Clean": "정리 대기",
|
||||
"Waiting to Scan": "탐색 대기",
|
||||
"Waiting to Sync": "동기화 대기",
|
||||
"Warning": "경고",
|
||||
"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}})의 상위 폴더입니다.",
|
||||
@@ -417,8 +418,8 @@
|
||||
"Warning, this path is a subdirectory of an existing folder \"{%otherFolderLabel%}\" ({%otherFolder%}).": "경고 : 이 경로는 현재 존재하는 폴더 \"{{otherFolderLabel}}\" ({{otherFolder}})의 하위 폴더입니다.",
|
||||
"Warning: If you are using an external watcher like {%syncthingInotify%}, you should make sure it is deactivated.": "경고 : {{syncthingInotify}}와 같은 외부 감시 도구를 사용하는 경우 비활성화되어 있는지 확인해야 합니다.",
|
||||
"Watch for Changes": "변경 항목 감시",
|
||||
"Watching for Changes": "변경 항목 감시 중",
|
||||
"Watching for changes discovers most changes without periodic scanning.": "Watching for changes discovers most changes without periodic scanning.",
|
||||
"Watching for Changes": "변경 항목 감시",
|
||||
"Watching for changes discovers most changes without periodic scanning.": "변경 항목 감시는 주기적으로 탐색하지 않아도 대부분의 변경 항목을 탐지합니다.",
|
||||
"When adding a new device, keep in mind that this device must be added on the other side too.": "새 기기를 추가할 시 추가한 기기 쪽에서도 이 기기를 추가해야 합니다.",
|
||||
"When adding a new folder, keep in mind that the Folder ID is used to tie folders together between devices. They are case sensitive and must match exactly between all devices.": "새 폴더를 추가할 시 폴더 ID는 기기 간에 폴더를 묶을 때 사용됩니다. 대소문자를 구분하며 모든 기기에서 같은 ID를 사용해야 합니다.",
|
||||
"Yes": "예",
|
||||
@@ -427,16 +428,20 @@
|
||||
"You can read more about the two release channels at the link below.": "이 두 개의 출시 채널에 대해 아래 링크에서 자세하게 읽어 보실 수 있습니다.",
|
||||
"You have no ignored devices.": "무시된 기기가 없습니다.",
|
||||
"You have no ignored folders.": "무시된 폴더가 없습니다.",
|
||||
"You have unsaved changes. Do you really want to discard them?": "저장되지 않은 변경사항이 있습니다. 변경사항을 무시하시겠습니까?",
|
||||
"You have unsaved changes. Do you really want to discard them?": "저장되지 않은 변경 사항이 있습니다. 변경 사항을 무시하시겠습니까?",
|
||||
"You must keep at least one version.": "최소 한 개의 버전은 유지해야 합니다.",
|
||||
"You should never add or change anything locally in a \"{%receiveEncrypted%}\" folder.": "You should never add or change anything locally in a \"{{receiveEncrypted}}\" folder.",
|
||||
"You should never add or change anything locally in a \"{%receiveEncrypted%}\" folder.": "\"{{receiveEncrypted}}\" 폴더 내에서는 아무것도 추가 또는 변경하여서는 안 됩니다.",
|
||||
"days": "일",
|
||||
"directories": "폴더",
|
||||
"files": "파일",
|
||||
"full documentation": "전체 사용 설명서",
|
||||
"items": "항목",
|
||||
"seconds": "초",
|
||||
"{%device%} wants to share folder \"{%folder%}\".": "{{device}} 에서 폴더 \\\"{{folder}}\\\" 를 공유하길 원합니다.",
|
||||
"{%device%} wants to share folder \"{%folderlabel%}\" ({%folder%}).": "{{device}} 에서 폴더 \"{{folderLabel}}\" ({{folder}})를 공유하길 원합니다.",
|
||||
"theme-name-black": "검은색",
|
||||
"theme-name-dark": "어두운 색",
|
||||
"theme-name-default": "기본 색",
|
||||
"theme-name-light": "밝은 색",
|
||||
"{%device%} wants to share folder \"{%folder%}\".": "{{device}}에서 \"{{folder}}\" 폴더를 공유하길 원합니다.",
|
||||
"{%device%} wants to share folder \"{%folderlabel%}\" ({%folder%}).": "{{device}}에서 \"{{folderlabel}}\"({{folder}}) 폴더를 공유하길 원합니다.",
|
||||
"{%reintroducer%} might reintroduce this device.": "{{reintroducer}} might reintroduce this device."
|
||||
}
|
||||
@@ -22,6 +22,7 @@
|
||||
"Allow Anonymous Usage Reporting?": "Siųsti anoniminę naudojimo ataskaitą?",
|
||||
"Allowed Networks": "Leidžiami tinklai",
|
||||
"Alphabetic": "Abėcėlės tvarka",
|
||||
"Altered by ignoring deletes.": "Altered by ignoring deletes.",
|
||||
"An external command handles the versioning. It has to remove the file from the shared folder. If the path to the application contains spaces, it should be quoted.": "Išorinė komanda apdoroja versijų valdymą. Ji turi pašalinti failą iš bendrinamo aplanko. Jei kelyje į programą yra tarpų, jie turėtų būti imami į kabutes.",
|
||||
"Anonymous Usage Reporting": "Anoniminė naudojimo ataskaita",
|
||||
"Anonymous usage report format has changed. Would you like to move to the new format?": "Anoniminės naudojimo ataskaitos formatas pasikeitė. Ar norėtumėte pereiti prie naujojo formato?",
|
||||
@@ -224,7 +225,7 @@
|
||||
"Out of Sync": "Išsisinchronizavę",
|
||||
"Out of Sync Items": "Nesutikrinta",
|
||||
"Outgoing Rate Limit (KiB/s)": "Išsiunčiamo srauto maksimalus greitis (KiB/s)",
|
||||
"Override": "Override",
|
||||
"Override": "Nustelbti",
|
||||
"Override Changes": "Perrašyti pakeitimus",
|
||||
"Path": "Kelias",
|
||||
"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": "Kelias iki aplanko šiame kompiuteryje. Bus sukurtas, jei neegzistuoja. Tildės simbolis (~) gali būti naudojamas kaip trumpinys",
|
||||
@@ -436,6 +437,10 @@
|
||||
"full documentation": "pilna dokumentacija",
|
||||
"items": "įrašai",
|
||||
"seconds": "sek.",
|
||||
"theme-name-black": "Black",
|
||||
"theme-name-dark": "Dark",
|
||||
"theme-name-default": "Default",
|
||||
"theme-name-light": "Light",
|
||||
"{%device%} wants to share folder \"{%folder%}\".": "{{device}} nori dalintis aplanku \"{{folder}}\"",
|
||||
"{%device%} wants to share folder \"{%folderlabel%}\" ({%folder%}).": "{{device}} nori dalintis aplanku \"{{folderlabel}}\" ({{folder}}).",
|
||||
"{%reintroducer%} might reintroduce this device.": "{{reintroducer}} might reintroduce this device."
|
||||
|
||||
@@ -22,6 +22,7 @@
|
||||
"Allow Anonymous Usage Reporting?": "Tillat anonym innsamling av brukerdata?",
|
||||
"Allowed Networks": "Tillatte nettverk",
|
||||
"Alphabetic": "Alfabetisk",
|
||||
"Altered by ignoring deletes.": "Altered by ignoring deletes.",
|
||||
"An external command handles the versioning. It has to remove the file from the shared folder. If the path to the application contains spaces, it should be quoted.": "En ekstern kommando tar hånd om versjoneringen. Den må fjerne filen fra den delte mappen. Hvis stien til programmet inneholder mellomrom, må den siteres.",
|
||||
"Anonymous Usage Reporting": "Anonym innsamling av brukerdata",
|
||||
"Anonymous usage report format has changed. Would you like to move to the new format?": "Det anonyme bruksrapportformatet har endret seg. Ønsker du å gå over til det nye formatet?",
|
||||
@@ -436,6 +437,10 @@
|
||||
"full documentation": "all dokumentasjon",
|
||||
"items": "elementer",
|
||||
"seconds": "sekunder",
|
||||
"theme-name-black": "Black",
|
||||
"theme-name-dark": "Dark",
|
||||
"theme-name-default": "Default",
|
||||
"theme-name-light": "Light",
|
||||
"{%device%} wants to share folder \"{%folder%}\".": "{{device}} ønsker å dele mappa \"{{folder}}\".",
|
||||
"{%device%} wants to share folder \"{%folderlabel%}\" ({%folder%}).": "{{device}} ønsker å dele mappa \"{{folderlabel}}\" ({{folder}}).",
|
||||
"{%reintroducer%} might reintroduce this device.": "{{reintroducer}} might reintroduce this device."
|
||||
|
||||
@@ -22,6 +22,7 @@
|
||||
"Allow Anonymous Usage Reporting?": "Versturen van anonieme gebruikersstatistieken toestaan?",
|
||||
"Allowed Networks": "Toegestane netwerken",
|
||||
"Alphabetic": "Alfabetisch",
|
||||
"Altered by ignoring deletes.": "Veranderd door het negeren van verwijderingen.",
|
||||
"An external command handles the versioning. It has to remove the file from the shared folder. If the path to the application contains spaces, it should be quoted.": "Een externe opdracht regelt het versiebeheer. Hij moet het bestand verwijderen uit de gedeelde map. Als het pad naar de toepassing spaties bevat, moet dit tussen aanhalingstekens geplaatst worden.",
|
||||
"Anonymous Usage Reporting": "Anonieme gebruikersstatistieken",
|
||||
"Anonymous usage report format has changed. Would you like to move to the new format?": "Het formaat voor anonieme gebruikersrapporten is gewijzigd. Wilt u naar het nieuwe formaat overschakelen?",
|
||||
@@ -436,6 +437,10 @@
|
||||
"full documentation": "volledige documentatie",
|
||||
"items": "items",
|
||||
"seconds": "seconden",
|
||||
"theme-name-black": "Zwart",
|
||||
"theme-name-dark": "Donker",
|
||||
"theme-name-default": "Standaard",
|
||||
"theme-name-light": "Licht",
|
||||
"{%device%} wants to share folder \"{%folder%}\".": "{{device}} wil map \"{{folder}}\" delen.",
|
||||
"{%device%} wants to share folder \"{%folderlabel%}\" ({%folder%}).": "{{device}} wil map \"{{folderlabel}}\" ({{folder}}) delen.",
|
||||
"{%reintroducer%} might reintroduce this device.": "{{reintroducer}} kan dit apparaat mogelijk opnieuw introduceren."
|
||||
|
||||
@@ -4,8 +4,8 @@
|
||||
"A new major version may not be compatible with previous versions.": "Nowa duża wersja może nie być kompatybilna z poprzednimi wersjami.",
|
||||
"API Key": "Klucz API",
|
||||
"About": "O Syncthing",
|
||||
"Action": "Akcja",
|
||||
"Actions": "Akcje",
|
||||
"Action": "Działanie",
|
||||
"Actions": "Działania",
|
||||
"Add": "Dodaj",
|
||||
"Add Device": "Dodaj urządzenie",
|
||||
"Add Folder": "Dodaj folder",
|
||||
@@ -22,6 +22,7 @@
|
||||
"Allow Anonymous Usage Reporting?": "Czy chcesz zezwolić na anonimowe statystyki użycia?",
|
||||
"Allowed Networks": "Dozwolone sieci",
|
||||
"Alphabetic": "Alfabetycznie",
|
||||
"Altered by ignoring deletes.": "Zmieniono przez ignorowanie usuniętych.",
|
||||
"An external command handles the versioning. It has to remove the file from the shared folder. If the path to the application contains spaces, it should be quoted.": "Zewnętrzne polecenie odpowiedzialne jest za wersjonowanie. Musi ono usunąć plik ze współdzielonego folderu. Jeśli ścieżka do aplikacji zawiera spacje, powinna ona być zamknięta w cudzysłowie.",
|
||||
"Anonymous Usage Reporting": "Anonimowe statystyki użycia",
|
||||
"Anonymous usage report format has changed. Would you like to move to the new format?": "Format anonimowych statystyk użycia uległ zmianie. Czy chcesz przejść na nowy format?",
|
||||
@@ -38,7 +39,7 @@
|
||||
"Automatic upgrade now offers the choice between stable releases and release candidates.": "Automatycznie aktualizacje pozwalają teraz na wybór pomiędzy wydaniami stabilnymi oraz wydaniami kandydującymi.",
|
||||
"Automatic upgrades": "Automatyczne aktualizacje",
|
||||
"Automatic upgrades are always enabled for candidate releases.": "Automatyczne aktualizacje są zawsze włączone dla wydań kandydujących.",
|
||||
"Automatically create or share folders that this device advertises at the default path.": "Automatycznie utwórz lub współdziel foldery wysyłane przez to urządzenie w domyślnej ścieżce.",
|
||||
"Automatically create or share folders that this device advertises at the default path.": "Automatycznie współdziel lub utwórz w domyślnej ścieżce foldery wysyłane przez to urządzenie.",
|
||||
"Available debug logging facilities:": "Dostępne narzędzia logujące do debugowania:",
|
||||
"Be careful!": "Ostrożnie!",
|
||||
"Bugs": "Błędy",
|
||||
@@ -58,7 +59,7 @@
|
||||
"Connection Error": "Błąd połączenia",
|
||||
"Connection Type": "Rodzaj połączenia",
|
||||
"Connections": "Połączenia",
|
||||
"Continuously watching for changes is now available within Syncthing. This will detect changes on disk and issue a scan on only the modified paths. The benefits are that changes are propagated quicker and that less full scans are required.": "Ciągłe obserwowanie zmian jest już dostępne w Syncthing. Będzie ono wykrywać zmiany na dysku i uruchamiać skanowanie tylko w zmodyfikowanych ścieżkach. Zalety tego są takie, że zmiany rozsyłane są znacznie szybciej oraz że wymagana jest mniejsza liczba pełnych skanowań.",
|
||||
"Continuously watching for changes is now available within Syncthing. This will detect changes on disk and issue a scan on only the modified paths. The benefits are that changes are propagated quicker and that less full scans are required.": "Ciągłe obserwowanie zmian jest już dostępne w Syncthingu. Będzie ono wykrywać zmiany na dysku i uruchamiać skanowanie tylko w zmodyfikowanych ścieżkach. Zalety tego są takie, że zmiany rozsyłane są znacznie szybciej oraz że wymagana jest mniejsza liczba pełnych skanowań.",
|
||||
"Copied from elsewhere": "Skopiowane z innego miejsca ",
|
||||
"Copied from original": "Skopiowane z oryginału",
|
||||
"Copyright © 2014-2019 the following Contributors:": "Wszelkie prawa zastrzeżone © 2014-2019 dla współtwórców:",
|
||||
@@ -164,7 +165,7 @@
|
||||
"However, your current settings indicate you might not want it enabled. We have disabled automatic crash reporting for you.": "Niemniej jednak, obecne ustawienia wskazują, że możesz nie chcieć włączać tej funkcji. Automatyczne zgłaszanie awarii zostało wyłączone na tym urządzeniu.",
|
||||
"Identification": "Identyfikator",
|
||||
"If untrusted, enter encryption password": "Jeżeli folder jest niezaufany, wprowadź szyfrujące hasło",
|
||||
"If you want to prevent other users on this computer from accessing Syncthing and through it your files, consider setting up authentication.": "Jeżeli chcesz zakazać innym użytkownikom tego komputera dostępu do Syncthing, a przez niego do swoich plików, zastanów się nad włączeniem uwierzytelniania.",
|
||||
"If you want to prevent other users on this computer from accessing Syncthing and through it your files, consider setting up authentication.": "Jeżeli chcesz zakazać innym użytkownikom tego komputera dostępu do Syncthinga, a przez niego do swoich plików, zastanów się nad włączeniem uwierzytelniania.",
|
||||
"Ignore": "Ignoruj",
|
||||
"Ignore Patterns": "Wzorce ignorowania",
|
||||
"Ignore Permissions": "Ignorowanie uprawnień",
|
||||
@@ -256,7 +257,7 @@
|
||||
"Recent Changes": "Ostatnie zmiany",
|
||||
"Reduced by ignore patterns": "Ograniczono przez wzorce ignorowania",
|
||||
"Release Notes": "Informacje o wersji",
|
||||
"Release candidates contain the latest features and fixes. They are similar to the traditional bi-weekly Syncthing releases.": "Wydania kandydujące zawierają najnowsze funkcje oraz poprawki błędów. Są one podobne do tradycyjnych codwutygodniowych wydań Syncthing.",
|
||||
"Release candidates contain the latest features and fixes. They are similar to the traditional bi-weekly Syncthing releases.": "Wydania kandydujące zawierają najnowsze funkcje oraz poprawki błędów. Są one podobne do tradycyjnych codwutygodniowych wydań Syncthinga.",
|
||||
"Remote Devices": "Urządzenia zdalne",
|
||||
"Remote GUI": "Zdalne GUI",
|
||||
"Remove": "Usuń",
|
||||
@@ -339,12 +340,12 @@
|
||||
"Take me back": "Powrót",
|
||||
"The GUI address is overridden by startup options. Changes here will not take effect while the override is in place.": "Adres GUI jest nadpisywany przez opcje uruchamiania. Zmiany dokonane tutaj nie będą obowiązywać, dopóki nadpisywanie jest w użyciu.",
|
||||
"The Syncthing Authors": "The Syncthing Authors",
|
||||
"The Syncthing admin interface is configured to allow remote access without a password.": "Ustawienia interfejsu administracyjnego Syncthing zezwalają na zdalny dostęp bez hasła.",
|
||||
"The Syncthing admin interface is configured to allow remote access without a password.": "Ustawienia interfejsu administracyjnego Syncthinga zezwalają na zdalny dostęp bez hasła.",
|
||||
"The aggregated statistics are publicly available at the URL below.": "Zebrane statystyki są publicznie dostępne pod poniższym adresem.",
|
||||
"The cleanup interval cannot be blank.": "Przedział czasowy czyszczenia nie może być pusty.",
|
||||
"The configuration has been saved but not activated. Syncthing must restart to activate the new configuration.": "Ustawienia zostały zapisane, ale nie są jeszcze aktywne. Syncthing musi zostać uruchomiony ponownie, aby aktywować nowe ustawienia.",
|
||||
"The device ID cannot be blank.": "ID urządzenia nie może być puste.",
|
||||
"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).": "ID urządzenia do wpisania tutaj można znaleźć w oknie \"Akcje > Pokaż ID\" na innym urządzeniu. Spacje i myślniki są opcjonalne (ignorowane).",
|
||||
"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).": "ID urządzenia do wpisania tutaj można znaleźć w oknie \"Działania > Pokaż ID\" na innym urządzeniu. Spacje i myślniki są opcjonalne (ignorowane).",
|
||||
"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.": "Zaszyfrowane statystyki użycia są wysyłane codziennie. Używane są one do śledzenia popularności systemów, rozmiarów folderów oraz wersji programu. Jeżeli wysyłane statystyki ulegną zmianie, zostaniesz poproszony o ponowne udzielenie zgody w tym oknie.",
|
||||
"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.": "Wprowadzone ID urządzenia wygląda na niepoprawne. Musi ono zawierać 52 lub 56 znaków składających się z liter i cyfr. Spacje i myślniki są opcjonalne.",
|
||||
"The folder ID cannot be blank.": "ID folderu nie może być puste.",
|
||||
@@ -386,7 +387,7 @@
|
||||
"Undecided (will prompt)": "Jeszcze nie zdecydowałem (przypomnij później)",
|
||||
"Unexpected Items": "Elementy nieoczekiwane",
|
||||
"Unexpected items have been found in this folder.": "Znaleziono elementy nieoczekiwane w tym folderze.",
|
||||
"Unignore": "Wyłącz ignorowanie",
|
||||
"Unignore": "Przestań ignorować",
|
||||
"Unknown": "Nieznany",
|
||||
"Unshared": "Niewspółdzielony",
|
||||
"Unshared Devices": "Niewspółdzielone urządzenia",
|
||||
@@ -411,16 +412,16 @@
|
||||
"Waiting to Scan": "Oczekiwanie na skanowanie",
|
||||
"Waiting to Sync": "Oczekiwanie na synchronizację",
|
||||
"Warning": "Uwaga",
|
||||
"Warning, this path is a parent directory of an existing folder \"{%otherFolder%}\".": "Uwaga, ta ścieżka to nadkatalog istniejącego folderu \"{{otherFolder}}\".",
|
||||
"Warning, this path is a parent directory of an existing folder \"{%otherFolderLabel%}\" ({%otherFolder%}).": "Uwaga, ta ścieżka to nadkatalog istniejącego folderu \"{{otherFolderLabel}}\" ({{otherFolder}}).",
|
||||
"Warning, this path is a subdirectory of an existing folder \"{%otherFolder%}\".": "Uwaga, ta ścieżka to podkatalog istniejącego folderu \"{{otherFolder}}\".",
|
||||
"Warning, this path is a subdirectory of an existing folder \"{%otherFolderLabel%}\" ({%otherFolder%}).": "Uwaga, ten folder to podkatalog istniejącego folderu \"{{otherFolderLabel}}\" ({{otherFolder}}).",
|
||||
"Warning: If you are using an external watcher like {%syncthingInotify%}, you should make sure it is deactivated.": "Uwaga: Jeżeli korzystasz z zewnętrznego obserwatora, takiego jak {{syncthingInotify}}, upewnij się, że ta opcja jest wyłączona.",
|
||||
"Warning, this path is a parent directory of an existing folder \"{%otherFolder%}\".": "Uwaga: ta ścieżka to nadkatalog istniejącego folderu \"{{otherFolder}}\".",
|
||||
"Warning, this path is a parent directory of an existing folder \"{%otherFolderLabel%}\" ({%otherFolder%}).": "Uwaga: ta ścieżka to nadkatalog istniejącego folderu \"{{otherFolderLabel}}\" ({{otherFolder}}).",
|
||||
"Warning, this path is a subdirectory of an existing folder \"{%otherFolder%}\".": "Uwaga: ta ścieżka to podkatalog istniejącego folderu \"{{otherFolder}}\".",
|
||||
"Warning, this path is a subdirectory of an existing folder \"{%otherFolderLabel%}\" ({%otherFolder%}).": "Uwaga: ten folder to podkatalog istniejącego folderu \"{{otherFolderLabel}}\" ({{otherFolder}}).",
|
||||
"Warning: If you are using an external watcher like {%syncthingInotify%}, you should make sure it is deactivated.": "Uwaga: jeżeli korzystasz z zewnętrznego obserwatora, takiego jak {{syncthingInotify}}, upewnij się, że ta opcja jest wyłączona.",
|
||||
"Watch for Changes": "Obserwuj zmiany",
|
||||
"Watching for Changes": "Obserwowanie zmian",
|
||||
"Watching for changes discovers most changes without periodic scanning.": "Obserwowanie wykrywa większość zmian bez potrzeby okresowego skanowania.",
|
||||
"When adding a new device, keep in mind that this device must be added on the other side too.": "Gdy dodajesz nowe urządzenie pamiętaj, że to urządzenie musi zostać dodane także po drugiej stronie.",
|
||||
"When adding a new folder, keep in mind that the Folder ID is used to tie folders together between devices. They are case sensitive and must match exactly between all devices.": "Gdy dodajesz nowy folder pamiętaj, że ID folderu używane jest do łączenia folderów pomiędzy urządzeniami. Wielkość liter ma znaczenie i musi ono być identyczne na wszystkich urządzeniach.",
|
||||
"When adding a new folder, keep in mind that the Folder ID is used to tie folders together between devices. They are case sensitive and must match exactly between all devices.": "Dodając nowy folder pamiętaj, że ID folderu używane jest do parowania folderów pomiędzy urządzeniami. Wielkość liter ma znaczenie i musi ono być identyczne na wszystkich urządzeniach.",
|
||||
"Yes": "Tak",
|
||||
"You can also select one of these nearby devices:": "Możesz również wybrać jedno z pobliskich urządzeń:",
|
||||
"You can change your choice at any time in the Settings dialog.": "Możesz zmienić swój wybór w dowolnej chwili w oknie Ustawień.",
|
||||
@@ -436,6 +437,10 @@
|
||||
"full documentation": "pełna dokumentacja",
|
||||
"items": "elementy",
|
||||
"seconds": "sekundy",
|
||||
"theme-name-black": "Czarny",
|
||||
"theme-name-dark": "Ciemny",
|
||||
"theme-name-default": "Domyślny",
|
||||
"theme-name-light": "Jasny",
|
||||
"{%device%} wants to share folder \"{%folder%}\".": "{{device}} chce współdzielić folder \"{{folder}}\"",
|
||||
"{%device%} wants to share folder \"{%folderlabel%}\" ({%folder%}).": "{{device}} chce współdzielić folder \"{{folderlabel}}\" ({{folder}}).",
|
||||
"{%reintroducer%} might reintroduce this device.": "{{reintroducer}} może ponownie wprowadzić to urządzenie."
|
||||
|
||||
@@ -22,6 +22,7 @@
|
||||
"Allow Anonymous Usage Reporting?": "Permitir envio de relatórios anônimos de uso?",
|
||||
"Allowed Networks": "Redes permitidas",
|
||||
"Alphabetic": "Alfabética",
|
||||
"Altered by ignoring deletes.": "Alterado ignorando exclusões.",
|
||||
"An external command handles the versioning. It has to remove the file from the shared folder. If the path to the application contains spaces, it should be quoted.": "Um comando externo controla o controle de versão. Tem que remover o arquivo da pasta compartilhada. Se o caminho para o aplicativo contiver espaços, ele deve ser colocado entre aspas.",
|
||||
"Anonymous Usage Reporting": "Relatórios anônimos de uso",
|
||||
"Anonymous usage report format has changed. Would you like to move to the new format?": "O formato do relatório anônimo de uso mudou. Gostaria de usar o formato novo?",
|
||||
@@ -436,6 +437,10 @@
|
||||
"full documentation": "documentação completa",
|
||||
"items": "itens",
|
||||
"seconds": "segundos",
|
||||
"theme-name-black": "Preto",
|
||||
"theme-name-dark": "Escuro",
|
||||
"theme-name-default": "Padrão",
|
||||
"theme-name-light": "Claro",
|
||||
"{%device%} wants to share folder \"{%folder%}\".": "{{device}} quer compartilhar a pasta \"{{folder}}\".",
|
||||
"{%device%} wants to share folder \"{%folderlabel%}\" ({%folder%}).": "{{device}} quer compartilhar a pasta \"{{folderlabel}}\" ({{folder}}).",
|
||||
"{%reintroducer%} might reintroduce this device.": "{{reintroducer}} pode reintroduzir este dispositivo."
|
||||
|
||||
@@ -22,6 +22,7 @@
|
||||
"Allow Anonymous Usage Reporting?": "Permitir envio de relatórios anónimos de utilização?",
|
||||
"Allowed Networks": "Redes permitidas",
|
||||
"Alphabetic": "Alfabética",
|
||||
"Altered by ignoring deletes.": "Altered by ignoring deletes.",
|
||||
"An external command handles the versioning. It has to remove the file from the shared folder. If the path to the application contains spaces, it should be quoted.": "Um comando externo controla as versões. Esse comando tem que remover o ficheiro da pasta partilhada. Se o caminho para a aplicação contiver espaços, então terá de o escrever entre aspas.",
|
||||
"Anonymous Usage Reporting": "Enviar relatórios anónimos de utilização",
|
||||
"Anonymous usage report format has changed. Would you like to move to the new format?": "O formato do relatório anónimo de utilização foi alterado. Gostaria de mudar para o novo formato?",
|
||||
@@ -436,6 +437,10 @@
|
||||
"full documentation": "documentação completa",
|
||||
"items": "itens",
|
||||
"seconds": "segundos",
|
||||
"theme-name-black": "Preto",
|
||||
"theme-name-dark": "Escuro",
|
||||
"theme-name-default": "Predefinido",
|
||||
"theme-name-light": "Claro",
|
||||
"{%device%} wants to share folder \"{%folder%}\".": "{{device}} quer partilhar a pasta \"{{folder}}\".",
|
||||
"{%device%} wants to share folder \"{%folderlabel%}\" ({%folder%}).": "{{device}} quer partilhar a pasta \"{{folderlabel}}\" ({{folder}}).",
|
||||
"{%reintroducer%} might reintroduce this device.": "{{reintroducer}} poderá reintroduzir este dispositivo."
|
||||
|
||||
@@ -22,6 +22,7 @@
|
||||
"Allow Anonymous Usage Reporting?": "Permiteţi raportarea anonimă de folosire a aplicaţiei?",
|
||||
"Allowed Networks": "Rețele permise",
|
||||
"Alphabetic": "Alfabetic",
|
||||
"Altered by ignoring deletes.": "Altered by ignoring deletes.",
|
||||
"An external command handles the versioning. It has to remove the file from the shared folder. If the path to the application contains spaces, it should be quoted.": "O comandă externă gestionează versiunea. Trebuie să elimine fișierul din folderul partajat. Dacă calea către aplicație conține spații, ar trebui să fie pusă între ghilimele.",
|
||||
"Anonymous Usage Reporting": "Raport Anonim despre Folosirea Aplicației",
|
||||
"Anonymous usage report format has changed. Would you like to move to the new format?": "Formatul raportului de utilizare anonim s-a schimbat. Doriți să vă mutați în noul format?",
|
||||
@@ -436,6 +437,10 @@
|
||||
"full documentation": "toată documentaţia",
|
||||
"items": "obiecte",
|
||||
"seconds": "seconds",
|
||||
"theme-name-black": "Black",
|
||||
"theme-name-dark": "Dark",
|
||||
"theme-name-default": "Default",
|
||||
"theme-name-light": "Light",
|
||||
"{%device%} wants to share folder \"{%folder%}\".": "{{Dispozitivul}} vrea să transmită mapa {{Mapa}}",
|
||||
"{%device%} wants to share folder \"{%folderlabel%}\" ({%folder%}).": "{{device}} wants to share folder \"{{folderlabel}}\" ({{folder}}).",
|
||||
"{%reintroducer%} might reintroduce this device.": "{{reintroducer}} might reintroduce this device."
|
||||
|
||||
@@ -22,16 +22,17 @@
|
||||
"Allow Anonymous Usage Reporting?": "Разрешить анонимный отчет об использовании?",
|
||||
"Allowed Networks": "Разрешённые сети",
|
||||
"Alphabetic": "По алфавиту",
|
||||
"Altered by ignoring deletes.": "Altered by ignoring deletes.",
|
||||
"An external command handles the versioning. It has to remove the file from the shared folder. If the path to the application contains spaces, it should be quoted.": "Для версионирования используется внешняя программа. Ей нужно удалить файл из общей папки. Если путь к приложению содержит пробелы, его нужно взять в кавычки.",
|
||||
"Anonymous Usage Reporting": "Анонимный отчет об использовании",
|
||||
"Anonymous usage report format has changed. Would you like to move to the new format?": "Формат анонимных отчётов изменился. Хотите переключиться на новый формат?",
|
||||
"Are you sure you want to continue?": "Уверены, что хотите продолжить?",
|
||||
"Are you sure you want to override all remote changes?": "Are you sure you want to override all remote changes?",
|
||||
"Are you sure you want to override all remote changes?": "Уверены, что хотите перезаписать все удалённые изменения?",
|
||||
"Are you sure you want to permanently delete all these files?": "Уверены, что хотите навсегда удалить эти файлы?",
|
||||
"Are you sure you want to remove device {%name%}?": "Уверены, что хотите удалить устройство {{name}}?",
|
||||
"Are you sure you want to remove folder {%label%}?": "Уверены, что хотите удалить папку {{label}}?",
|
||||
"Are you sure you want to restore {%count%} files?": "Уверены, что хотите восстановить {{count}} файлов?",
|
||||
"Are you sure you want to revert all local changes?": "Are you sure you want to revert all local changes?",
|
||||
"Are you sure you want to revert all local changes?": "Уверены, что хотите отменить все локальные изменения?",
|
||||
"Are you sure you want to upgrade?": "Уверены, что хотите обновить?",
|
||||
"Auto Accept": "Автопринятие",
|
||||
"Automatic Crash Reporting": "Автоматическая отправка отчётов о сбоях",
|
||||
@@ -48,7 +49,7 @@
|
||||
"Cleaning Versions": "Очистка Версий",
|
||||
"Cleanup Interval": "Интервал очистки",
|
||||
"Click to see discovery failures": "Щёлкните, чтобы посмотреть ошибки",
|
||||
"Click to see full identification string and QR code.": "Click to see full identification string and QR code.",
|
||||
"Click to see full identification string and QR code.": "Нажмите, чтобы увидеть полную строку идентификации и QR код.",
|
||||
"Close": "Закрыть",
|
||||
"Command": "Команда",
|
||||
"Comment, when used at the start of a line": "Комментарий, если используется в начале строки",
|
||||
@@ -98,9 +99,9 @@
|
||||
"Discovered": "Обнаружено",
|
||||
"Discovery": "Обнаружение",
|
||||
"Discovery Failures": "Ошибки обнаружения",
|
||||
"Discovery Status": "Discovery Status",
|
||||
"Discovery Status": "Статус обнаружения",
|
||||
"Dismiss": "Отклонить",
|
||||
"Do not add it to the ignore list, so this notification may recur.": "Do not add it to the ignore list, so this notification may recur.",
|
||||
"Do not add it to the ignore list, so this notification may recur.": "Не добавлять в список игнорирования, это уведомление может повториться.",
|
||||
"Do not restore": "Не восстанавливать",
|
||||
"Do not restore all": "Не восстанавливать все",
|
||||
"Do you want to enable watching for changes for all your folders?": "Хотите включить слежение за изменениями для всех своих папок?",
|
||||
@@ -126,7 +127,7 @@
|
||||
"Error": "Ошибка",
|
||||
"External File Versioning": "Внешний контроль версий файлов",
|
||||
"Failed Items": "Сбои",
|
||||
"Failed to load ignore patterns.": "Failed to load ignore patterns.",
|
||||
"Failed to load ignore patterns.": "Не удалось загрузить шаблоны игнорирования.",
|
||||
"Failed to setup, retrying": "Не удалось настроить, пробуем ещё",
|
||||
"Failure to connect to IPv6 servers is expected if there is no IPv6 connectivity.": "Если нет IPv6-соединений, при подключении к IPv6-серверам произойдёт ошибка.",
|
||||
"File Pull Order": "Порядок получения файлов",
|
||||
@@ -162,7 +163,7 @@
|
||||
"Help": "Помощь",
|
||||
"Home page": "Сайт",
|
||||
"However, your current settings indicate you might not want it enabled. We have disabled automatic crash reporting for you.": "Ваши настройки указывают что вы не хотите, чтобы эта функция была включена. Мы отключили отправку отчетов о сбоях.",
|
||||
"Identification": "Identification",
|
||||
"Identification": "Идентификация",
|
||||
"If untrusted, enter encryption password": "Если ненадёжное, укажите пароль шифрования",
|
||||
"If you want to prevent other users on this computer from accessing Syncthing and through it your files, consider setting up authentication.": "Если вы хотите запретить другим пользователям на этом компьютере доступ к Syncthing и через него к вашим файлам, подумайте о настройке аутентификации.",
|
||||
"Ignore": "Игнорировать",
|
||||
@@ -184,8 +185,8 @@
|
||||
"Latest Change": "Последнее изменение",
|
||||
"Learn more": "Узнать больше",
|
||||
"Limit": "Ограничение",
|
||||
"Listener Failures": "Listener Failures",
|
||||
"Listener Status": "Listener Status",
|
||||
"Listener Failures": "Ошибки прослушивателя",
|
||||
"Listener Status": "Статус прослушивателя",
|
||||
"Listeners": "Прослушиватель",
|
||||
"Loading data...": "Загрузка данных...",
|
||||
"Loading...": "Загрузка...",
|
||||
@@ -224,7 +225,7 @@
|
||||
"Out of Sync": "Нет синхронизации",
|
||||
"Out of Sync Items": "Несинхронизированные элементы",
|
||||
"Outgoing Rate Limit (KiB/s)": "Ограничение исходящей скорости (КиБ/с)",
|
||||
"Override": "Override",
|
||||
"Override": "Перезаписать",
|
||||
"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": "Путь к папке на локальном компьютере. Если её не существует, то она будет создана. Тильда (~) может использоваться как сокращение для",
|
||||
@@ -238,7 +239,7 @@
|
||||
"Periodic scanning at given interval and disabled watching for changes": "Периодическое сканирование с заданным интервалом, отслеживание изменений отключено",
|
||||
"Periodic scanning at given interval and enabled watching for changes": "Периодическое сканирование с заданным интервалом и включено отслеживание изменений",
|
||||
"Periodic scanning at given interval and failed setting up watching for changes, retrying every 1m:": "Периодическое сканирование с заданным интервалом, не удалось включить отслеживание изменений, повторная попытка каждую минуту.",
|
||||
"Permanently add it to the ignore list, suppressing further notifications.": "Permanently add it to the ignore list, suppressing further notifications.",
|
||||
"Permanently add it to the ignore list, suppressing further notifications.": "Добавление в список игнорирования навсегда с подавлением будущих уведомлений.",
|
||||
"Permissions": "Разрешения",
|
||||
"Please consult the release notes before performing a major upgrade.": "Перед проведением обновления основной версии ознакомьтесь, пожалуйста, с замечаниями к версии",
|
||||
"Please set a GUI Authentication User and Password in the Settings dialog.": "Установите имя пользователя и пароль для интерфейса в настройках",
|
||||
@@ -258,7 +259,7 @@
|
||||
"Release Notes": "Примечания к выпуску",
|
||||
"Release candidates contain the latest features and fixes. They are similar to the traditional bi-weekly Syncthing releases.": "Кандидаты в релизы содержат последние улучшения и исправления. Они похожи на традиционные двухнедельные выпуски Syncthing.",
|
||||
"Remote Devices": "Удалённые устройства",
|
||||
"Remote GUI": "Удаленный GUI",
|
||||
"Remote GUI": "Удалённый GUI",
|
||||
"Remove": "Удалить",
|
||||
"Remove Device": "Удалить устройство",
|
||||
"Remove Folder": "Удалить папку",
|
||||
@@ -274,7 +275,7 @@
|
||||
"Resume": "Возобновить",
|
||||
"Resume All": "Возобновить все",
|
||||
"Reused": "Повторно использовано",
|
||||
"Revert": "Revert",
|
||||
"Revert": "Обратить",
|
||||
"Revert Local Changes": "Отменить изменения на этом компьютере",
|
||||
"Save": "Сохранить",
|
||||
"Scan Time Remaining": "Оставшееся время сканирования",
|
||||
@@ -299,8 +300,8 @@
|
||||
"Sharing": "Предоставление доступа",
|
||||
"Show ID": "Показать ID",
|
||||
"Show QR": "Показать QR-код",
|
||||
"Show detailed discovery status": "Show detailed discovery status",
|
||||
"Show detailed listener status": "Show detailed listener status",
|
||||
"Show detailed discovery status": "Показать подробный статус обнаружения",
|
||||
"Show detailed listener status": "Показать подробный статус прослушивателя",
|
||||
"Show diff with previous version": "Показать различия с предыдущей версией",
|
||||
"Shown instead of Device ID in the cluster status. Will be advertised to other devices as an optional default name.": "Отображается вместо ID устройства в статусе группы. Будет разослан другим устройствам в качестве имени по умолчанию.",
|
||||
"Shown instead of Device ID in the cluster status. Will be updated to the name the device advertises if left empty.": "Отображается вместо ID устройства в статусе группы. Если поле не заполнено, то будет установлено имя, передаваемое этим устройством.",
|
||||
@@ -310,9 +311,9 @@
|
||||
"Single level wildcard (matches within a directory only)": "Одноуровневая маска (поиск совпадений только внутри папки)",
|
||||
"Size": "Размер",
|
||||
"Smallest First": "Сначала маленькие",
|
||||
"Some discovery methods could not be established for finding other devices or announcing this device:": "Some discovery methods could not be established for finding other devices or announcing this device:",
|
||||
"Some discovery methods could not be established for finding other devices or announcing this device:": "Некоторые методы обнаружения не могут быть использованы для поиска других устройств или анонсирования этого устройства:",
|
||||
"Some items could not be restored:": "Не удалось восстановить некоторые объекты:",
|
||||
"Some listening addresses could not be enabled to accept connections:": "Some listening addresses could not be enabled to accept connections:",
|
||||
"Some listening addresses could not be enabled to accept connections:": "Некоторые адреса для прослушивания не могут быть активированы для приёма соединений:",
|
||||
"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.": "Стабильные выпуски выходят с задержкой около двух недель. За это время они проходят тестирование в качестве кандидатов в релизы.",
|
||||
@@ -329,8 +330,8 @@
|
||||
"Syncthing has been shut down.": "Syncthing был выключен.",
|
||||
"Syncthing includes the following software or portions thereof:": "Syncthing включает в себя следующее ПО или его части:",
|
||||
"Syncthing is Free and Open Source Software licensed as MPL v2.0.": "Syncthing — свободное программное обеспечение с открытым кодом под лицензией MPL v2.0.",
|
||||
"Syncthing is listening on the following network addresses for connection attempts from other devices:": "Syncthing is listening on the following network addresses for connection attempts from other devices:",
|
||||
"Syncthing is not listening for connection attempts from other devices on any address. Only outgoing connections from this device may work.": "Syncthing is not listening for connection attempts from other devices on any address. Only outgoing connections from this device may work.",
|
||||
"Syncthing is listening on the following network addresses for connection attempts from other devices:": "Syncthing ожидает подключения от других устройств на следующих сетевых адресах:",
|
||||
"Syncthing is not listening for connection attempts from other devices on any address. Only outgoing connections from this device may work.": "Syncthing не ожидает попыток подключения ни на каких адресах. Только исходящие подключения могут работать на этом устройстве.",
|
||||
"Syncthing is restarting.": "Перезапуск Syncthing.",
|
||||
"Syncthing is upgrading.": "Обновление Syncthing.",
|
||||
"Syncthing now supports automatically reporting crashes to the developers. This feature is enabled by default.": "Syncthing теперь поддерживает автоматическую отправку отчетов о сбоях разработчикам. Эта функция включена по умолчанию.",
|
||||
@@ -355,7 +356,7 @@
|
||||
"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.": "Используются следующие интервалы: в первый час версия меняется каждые 30 секунд, в первый день - каждый час, первые 30 дней - каждый день, после, до максимального срока - каждую неделю.",
|
||||
"The following items could not be synchronized.": "Невозможно синхронизировать следующие объекты",
|
||||
"The following items were changed locally.": "Следующие объекты были изменены локально",
|
||||
"The following methods are used to discover other devices on the network and announce this device to be found by others:": "The following methods are used to discover other devices on the network and announce this device to be found by others:",
|
||||
"The following methods are used to discover other devices on the network and announce this device to be found by others:": "Для обнаружения других устройств в сети и анонсирования этого устройства используются следующие методы:",
|
||||
"The following unexpected items were found.": "Были найдены следующие объекты.",
|
||||
"The interval must be a positive number of seconds.": "Интервал секунд должен быть положительным.",
|
||||
"The interval, in seconds, for running cleanup in the versions directory. Zero to disable periodic cleaning.": "Интервал в секундах для запуска очистки в каталоге версий. Ноль, чтобы отключить периодическую очистку.",
|
||||
@@ -373,7 +374,7 @@
|
||||
"They are retried automatically and will be synced when the error is resolved.": "Будут синхронизированы автоматически когда ошибка будет исправлена.",
|
||||
"This Device": "Это устройство",
|
||||
"This can easily give hackers access to read and change any files on your computer.": "Это может дать доступ хакерам для чтения и изменения любых файлов на вашем компьютере.",
|
||||
"This device cannot automatically discover other devices or announce its own address to be found by others. Only devices with statically configured addresses can connect.": "This device cannot automatically discover other devices or announce its own address to be found by others. Only devices with statically configured addresses can connect.",
|
||||
"This device cannot automatically discover other devices or announce its own address to be found by others. Only devices with statically configured addresses can connect.": "Это устройство не может автоматически обнаруживать другие устройства или анонсировать свой адрес для обнаружения извне. Только устройства со статически заданными адресами могут подключиться.",
|
||||
"This is a major version upgrade.": "Это обновление основной версии продукта.",
|
||||
"This setting controls the free space required on the home (i.e., index database) disk.": "Эта настройка управляет свободным местом, необходимым на домашнем диске (например, для базы индексов).",
|
||||
"Time": "Время",
|
||||
@@ -436,6 +437,10 @@
|
||||
"full documentation": "полная документация",
|
||||
"items": "элементы",
|
||||
"seconds": "сек.",
|
||||
"theme-name-black": "Чёрная",
|
||||
"theme-name-dark": "Тёманя",
|
||||
"theme-name-default": "По умолчанию",
|
||||
"theme-name-light": "Светлая",
|
||||
"{%device%} wants to share folder \"{%folder%}\".": "{{device}} хочет поделиться папкой «{{folder}}».",
|
||||
"{%device%} wants to share folder \"{%folderlabel%}\" ({%folder%}).": "{{device}} хочет поделиться папкой «{{folderlabel}}» ({{folder}}).",
|
||||
"{%reintroducer%} might reintroduce this device.": "{{reintroducer}} может повторно рекомендовать это устройство."
|
||||
|
||||
@@ -22,6 +22,7 @@
|
||||
"Allow Anonymous Usage Reporting?": "Povoliť anoynmné hlásenia o použivaní?",
|
||||
"Allowed Networks": "Povolené siete",
|
||||
"Alphabetic": "Abecedne",
|
||||
"Altered by ignoring deletes.": "Altered by ignoring deletes.",
|
||||
"An external command handles the versioning. It has to remove the file from the shared folder. If the path to the application contains spaces, it should be quoted.": "An external command handles the versioning. It has to remove the file from the shared folder. If the path to the application contains spaces, it should be quoted.",
|
||||
"Anonymous Usage Reporting": "Anonymné hlásenie o používaní",
|
||||
"Anonymous usage report format has changed. Would you like to move to the new format?": "Formát anonymného hlásenia o používaní sa zmenil. Chcete prejsť na nový formát?",
|
||||
@@ -436,6 +437,10 @@
|
||||
"full documentation": "úplná dokumntácia",
|
||||
"items": "položiek",
|
||||
"seconds": "sekúnd",
|
||||
"theme-name-black": "Black",
|
||||
"theme-name-dark": "Dark",
|
||||
"theme-name-default": "Default",
|
||||
"theme-name-light": "Light",
|
||||
"{%device%} wants to share folder \"{%folder%}\".": "{{device}} chce zdieľať adresár \"{{folder}}\".",
|
||||
"{%device%} wants to share folder \"{%folderlabel%}\" ({%folder%}).": "{{device}} chce zdieľať adresár \"{{folderlabel}}\" ({{folder}}).",
|
||||
"{%reintroducer%} might reintroduce this device.": "{{reintroducer}} might reintroduce this device."
|
||||
|
||||
@@ -0,0 +1,447 @@
|
||||
{
|
||||
"A device with that ID is already added.": "Naprava z istim ID-jem že obstaja.",
|
||||
"A negative number of days doesn't make sense.": "Negativno število dni nima smisla.",
|
||||
"A new major version may not be compatible with previous versions.": "Nova glavna različica morda ni združljiva s prejšnjimi različicami. ",
|
||||
"API Key": "Ključ API",
|
||||
"About": "O sistemu ...",
|
||||
"Action": "Dejanje",
|
||||
"Actions": "Dejanja",
|
||||
"Add": "Dodaj",
|
||||
"Add Device": "Dodaj napravo",
|
||||
"Add Folder": "Dodaj mapo",
|
||||
"Add Remote Device": "Dodaj oddaljeno napravo",
|
||||
"Add devices from the introducer to our device list, for mutually shared folders.": "Dodajte naprave od uvajalca na naš seznam naprav, za vzajemno deljenje map.",
|
||||
"Add new folder?": "Dodaj novo mapo",
|
||||
"Additionally the full rescan interval will be increased (times 60, i.e. new default of 1h). You can also configure it manually for every folder later after choosing No.": "Poleg tega bo celoten interval ponovnega skeniranja se povečal (60 krat, torej nova privzeta vrednost 1 ure). Ti lahko tudi nastaviš si to ročno za vsako mapo pozneje, če ste prej izbrali Ne.",
|
||||
"Address": "Naslov",
|
||||
"Addresses": "Naslovi",
|
||||
"Advanced": "Napredno",
|
||||
"Advanced Configuration": "Napredna konfiguracija",
|
||||
"All Data": "Vsi podatki",
|
||||
"All folders shared with this device must be protected by a password, such that all sent data is unreadable without the given password.": "Vse deljene mape z to napravo morajo biti zaščitena z geslom, tako, da so vsi poslani podatki neberljivi, brez podanega gesla. ",
|
||||
"Allow Anonymous Usage Reporting?": "Ali naj se dovoli brezimno poročanje o uporabi?",
|
||||
"Allowed Networks": "Dovoljena omrežja",
|
||||
"Alphabetic": "Po abecedi",
|
||||
"Altered by ignoring deletes.": "Altered by ignoring deletes.",
|
||||
"An external command handles the versioning. It has to remove the file from the shared folder. If the path to the application contains spaces, it should be quoted.": "Zunanji ukaz upravlja z različicami. To mora odstraniti datoteko od deljene mape. Če pot do aplikacije vsebuje presledke, jo postavite v dvojne narekovaje.",
|
||||
"Anonymous Usage Reporting": "Brezimno poročanje o uporabi",
|
||||
"Anonymous usage report format has changed. Would you like to move to the new format?": "Format anonimnega poročanja uporabe se je spremenil. Ali želite se premakniti na novi format?",
|
||||
"Are you sure you want to continue?": "Ste prepričani, da želite nadaljevati?",
|
||||
"Are you sure you want to override all remote changes?": "Ali ste prepričani, da želite preglasiti vse oddaljene spremembe?",
|
||||
"Are you sure you want to permanently delete all these files?": "Ste prepričani, da želite trajno izbrisati datoteke?",
|
||||
"Are you sure you want to remove device {%name%}?": "Ste prepričani, da želite odstraniti napravo {{name}}?",
|
||||
"Are you sure you want to remove folder {%label%}?": "Ste prepričani, da želite odstraniti mapo {{label}}?",
|
||||
"Are you sure you want to restore {%count%} files?": "Ste prepričani, da želite obnoviti {{count}} datotek?",
|
||||
"Are you sure you want to revert all local changes?": "Ste prepričani, da želite povrniti vse lokalne spremembe?",
|
||||
"Are you sure you want to upgrade?": "Ali ste prepričani, da želite nadgraditi?",
|
||||
"Auto Accept": "Samodejno sprejmi",
|
||||
"Automatic Crash Reporting": "Avtomatsko poročanje o sesutju",
|
||||
"Automatic upgrade now offers the choice between stable releases and release candidates.": "Samodejna nadgradnja zdaj ponuja izbiro med stabilnimi izdajami in kandidati za izdajo.",
|
||||
"Automatic upgrades": "Avtomatično posodabljanje",
|
||||
"Automatic upgrades are always enabled for candidate releases.": "Samodejne nadgradnje so vedno omogočene za kandidatne izdaje.",
|
||||
"Automatically create or share folders that this device advertises at the default path.": "Samodejno ustvarite ali delite mape, ki jih ta naprava oglašuje na privzeti poti.",
|
||||
"Available debug logging facilities:": "Razpoložljive naprave za beleženje napak:",
|
||||
"Be careful!": "Previdno!",
|
||||
"Bugs": "Hrošči",
|
||||
"Cancel": "Prekliči",
|
||||
"Changelog": "Spremembe",
|
||||
"Clean out after": "Počisti kasneje",
|
||||
"Cleaning Versions": "Različice za očistiti",
|
||||
"Cleanup Interval": "Interval čiščenja",
|
||||
"Click to see discovery failures": "Pritisnite za ogled napak pri odkrivanju",
|
||||
"Click to see full identification string and QR code.": "Pritisnite, če si želite ogledati celoten identifikacijski niz in QR kodo.",
|
||||
"Close": "Zapri",
|
||||
"Command": "Ukaz",
|
||||
"Comment, when used at the start of a line": "Komentar uporabljen na začetku vrstice",
|
||||
"Compression": "Stisnjeno",
|
||||
"Configured": "Nastavljeno",
|
||||
"Connected (Unused)": "Povezano (neuporabljeno)",
|
||||
"Connection Error": "Napaka povezave",
|
||||
"Connection Type": "Tip povezave",
|
||||
"Connections": "Povezave",
|
||||
"Continuously watching for changes is now available within Syncthing. This will detect changes on disk and issue a scan on only the modified paths. The benefits are that changes are propagated quicker and that less full scans are required.": "Nenehno spremljanje sprememb je zdaj na voljo v Syncthing-u. To bo zaznalo spremembe na disku in izdalo skeniranje samo na spremenjenih poteh. Prednosti so, da se spremembe hitreje širijo in da je potrebnih manj popolnih pregledov.",
|
||||
"Copied from elsewhere": "Prekopirano od drugod.",
|
||||
"Copied from original": "Kopiranje z originala",
|
||||
"Copyright © 2014-2019 the following Contributors:": "Avtorske pravice © 2014-2019 pripadajo naslednjim sodelavcem:",
|
||||
"Creating ignore patterns, overwriting an existing file at {%path%}.": "Ustvarjanje prezrtih vzorcev, prepisovanje obstoječe datoteke na {{path}}.",
|
||||
"Currently Shared With Devices": "Trenutno deljeno z napravami",
|
||||
"Danger!": "Nevarno!",
|
||||
"Debugging Facilities": "Možnosti za odpravljanje napak",
|
||||
"Default Configuration": "Privzeta konfiguracija",
|
||||
"Default Device": "Privzeta naprava",
|
||||
"Default Folder": "Privzeta mapa",
|
||||
"Default Folder Path": "Privzeta pot do mape",
|
||||
"Defaults": "Privzeti",
|
||||
"Delete": "Izbriši",
|
||||
"Delete Unexpected Items": "Izbrišite nepričakovane predmete",
|
||||
"Deleted": "Izbrisana",
|
||||
"Deselect All": "Prekliči vse",
|
||||
"Deselect devices to stop sharing this folder with.": "Prekliči izbiro naprav, z katerimi ne želiš več deliti mape.",
|
||||
"Deselect folders to stop sharing with this device.": "Prekliči mape, da se ne delijo več z to napravo.",
|
||||
"Device": "Naprava",
|
||||
"Device \"{%name%}\" ({%device%} at {%address%}) wants to connect. Add new device?": "Naprava \"{{name}}\" {{device}} na ({{address}}) želi vzpostaviti povezavo. Dodaj novo napravo?",
|
||||
"Device ID": "ID Naprave",
|
||||
"Device Identification": "Identifikacija naprave",
|
||||
"Device Name": "Ime naprave",
|
||||
"Device is untrusted, enter encryption password": "Naprava ni zaupljiva, vnesite geslo za šifriranje",
|
||||
"Device rate limits": "Omejitve hitrosti naprave",
|
||||
"Device that last modified the item": "Naprava, ki je nazadnje spremenila predmet",
|
||||
"Devices": "Naprave",
|
||||
"Disable Crash Reporting": "Onemogoči poročanje o zrušitvah",
|
||||
"Disabled": "Onemogočeno",
|
||||
"Disabled periodic scanning and disabled watching for changes": "Onemogočeno občasno skeniranje in onemogočeno spremljanje sprememb",
|
||||
"Disabled periodic scanning and enabled watching for changes": "Onemogočeno občasno skeniranje in omogočeno spremljanje sprememb",
|
||||
"Disabled periodic scanning and failed setting up watching for changes, retrying every 1m:": "Onemogočeno periodično skeniranje in neuspešna nastavitev opazovanja sprememb, ponovni poskus vsake 1 minute:",
|
||||
"Disables comparing and syncing file permissions. Useful on systems with nonexistent or custom permissions (e.g. FAT, exFAT, Synology, Android).": "Onemogoči primerjavo in sinhronizacijo dovoljenj za datoteke. Uporabno v sistemih z neobstoječimi dovoljenji ali dovoljenji po meri (npr. FAT, exFAT, Synology, Android).",
|
||||
"Discard": "Zavrzi",
|
||||
"Disconnected": "Brez povezave",
|
||||
"Disconnected (Unused)": "Ni povezave (neuporabljeno)",
|
||||
"Discovered": "Odkrito",
|
||||
"Discovery": "Odkritje",
|
||||
"Discovery Failures": "Napake odkritja",
|
||||
"Discovery Status": "Stanje odkritja",
|
||||
"Dismiss": "Opusti",
|
||||
"Do not add it to the ignore list, so this notification may recur.": "Ne dodajte to na seznam prezrtih, tako, da se obvestilo lahko ponovi.",
|
||||
"Do not restore": "Ne obnovi",
|
||||
"Do not restore all": "Ne obnovi vse",
|
||||
"Do you want to enable watching for changes for all your folders?": "Ali želite omogočiti spremljanje sprememb za vse svoje mape?",
|
||||
"Documentation": "Dokumentacija",
|
||||
"Download Rate": "Hitrost prejemanja",
|
||||
"Downloaded": "Prenešeno",
|
||||
"Downloading": "Prenašanje",
|
||||
"Edit": "Uredi",
|
||||
"Edit Device": "Uredi napravo",
|
||||
"Edit Device Defaults": "Uredi privzete nastavitve naprave",
|
||||
"Edit Folder": "Uredi mapo",
|
||||
"Edit Folder Defaults": "Uredi privzete nastavitve mape",
|
||||
"Editing {%path%}.": "Ureja se {{path}}.",
|
||||
"Enable Crash Reporting": "Omogoči poročanje o zrušitvah",
|
||||
"Enable NAT traversal": "Omogoči NAT prehod",
|
||||
"Enable Relaying": "Omogoči posredovanje",
|
||||
"Enabled": "Omogočeno",
|
||||
"Enter a non-negative number (e.g., \"2.35\") and select a unit. Percentages are as part of the total disk size.": "Vnesite število, katera ni negativno (npr. \"2,35\") in izberite enoto. Odstotki so del celotne velikosti diska.",
|
||||
"Enter a non-privileged port number (1024 - 65535).": "Vnesite neprivilegirano številko omrežnih vrat (1024 - 65535).",
|
||||
"Enter comma separated (\"tcp://ip:port\", \"tcp://host:port\") addresses or \"dynamic\" to perform automatic discovery of the address.": "Vnesi z vejico ločene naslove (\"tcp://ip:port\", \"tcp://host:port\") ali \"dynamic\" za samodejno odkrivanje naslova.",
|
||||
"Enter ignore patterns, one per line.": "Vnesite spregledni vzorec, enega v vrsto",
|
||||
"Enter up to three octal digits.": "Vnesite do tri osmiške števke.",
|
||||
"Error": "Napaka",
|
||||
"External File Versioning": "Zunanje beleženje različic datotek",
|
||||
"Failed Items": "Neuspeli predmeti",
|
||||
"Failed to load ignore patterns.": "Prezrih vzorcev ni bilo mogoče naložiti.",
|
||||
"Failed to setup, retrying": "Nastavitev ni uspela, ponovni poskus",
|
||||
"Failure to connect to IPv6 servers is expected if there is no IPv6 connectivity.": "Neuspeh povezav z IPv6 strežniki je pričakovan, če ni IPv6 povezljivost.",
|
||||
"File Pull Order": "Vrstni red prenosa datotek",
|
||||
"File Versioning": "Beleženje različic datotek",
|
||||
"Files are moved to .stversions directory when replaced or deleted by Syncthing.": "Datoteke so premaknjene v .stversions mapo ob brisanju ali zamenjavi s strani programa Syncthing.",
|
||||
"Files are moved to date stamped versions in a .stversions directory when replaced or deleted by Syncthing.": "Datoteke se premaknejo v datumsko označene različice v mapi .stversions, ko jih zamenja ali izbriše 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.": "Datoteke so zaščitene pred spremembami z drugih naprav, ampak spremembe narejene na tej napravi bodo poslane na ostale naprave.",
|
||||
"Files are synchronized from the cluster, but any changes made locally will not be sent to other devices.": "Datoteke se sinhronizirajo iz gruče, vendar vse spremembe, narejene lokalno, ne bodo poslane drugim napravam.",
|
||||
"Filesystem Watcher Errors": "Napake opazovalca datotečnega sistema",
|
||||
"Filter by date": "Filtriraj po datumu",
|
||||
"Filter by name": "Filtriraj po imenu",
|
||||
"Folder": "Mapa",
|
||||
"Folder ID": "ID Mape",
|
||||
"Folder Label": "Oznaka mape",
|
||||
"Folder Path": "Pot do mape",
|
||||
"Folder Type": "Vrsta mape",
|
||||
"Folder type \"{%receiveEncrypted%}\" can only be set when adding a new folder.": "Vrsta mape »{{receiveEncrypted}}« je mogoče nastaviti samo ob dodajanju nove mape.",
|
||||
"Folder type \"{%receiveEncrypted%}\" cannot be changed after adding the folder. You need to remove the folder, delete or decrypt the data on disk, and add the folder again.": "Vrste mape »{{receiveEncrypted}}« po dodajanju mape ni mogoče spremeniti. Odstraniti morate mapo, izbrisati ali dešifrirati podatke na disku in ponovno dodati mapo.",
|
||||
"Folders": "Mape",
|
||||
"For the following folders an error occurred while starting to watch for changes. It will be retried every minute, so the errors might go away soon. If they persist, try to fix the underlying issue and ask for help if you can't.": "Za naslednje mape je prišlo do napake, ko so se začele spremljati spremembe. Se bo ponovno poskusilo vsako minuto, tako da lahko napake kmalu izginejo. Če vztrajajo, poskusite odpraviti osnovno težavo in prosite za pomoč, če ne morete.",
|
||||
"Full Rescan Interval (s)": "Polni interval osveževanja (v sekundah)",
|
||||
"GUI": "Vmesnik",
|
||||
"GUI Authentication Password": "Geslo overjanja vmesnika",
|
||||
"GUI Authentication User": "Uporabniško ime overjanja vmesnika",
|
||||
"GUI Authentication: Set User and Password": "Overjanje za grafični vmesnik: Nastavi uporabnika in geslo",
|
||||
"GUI Listen Address": "Naslov grafičnega vmesnika",
|
||||
"GUI Theme": "Slog grafičnega vmesnika",
|
||||
"General": "Splošno",
|
||||
"Generate": "Ustvari",
|
||||
"Global Discovery": "Splošno odkrivanje",
|
||||
"Global Discovery Servers": "Strežniki splošnega odkrivanja",
|
||||
"Global State": "Stanje odkrivanja",
|
||||
"Help": "Pomoč",
|
||||
"Home page": "Domača stran",
|
||||
"However, your current settings indicate you might not want it enabled. We have disabled automatic crash reporting for you.": "Vendar pa vaše trenutne nastavitve kažejo, da morda ne želite to omogočiti. Za vas smo onemogočili samodejno poročanje o zrušitvah.",
|
||||
"Identification": "Identifikacija",
|
||||
"If untrusted, enter encryption password": "Če ni zaupanja vreden, vnesite geslo za šifriranje",
|
||||
"If you want to prevent other users on this computer from accessing Syncthing and through it your files, consider setting up authentication.": "Če želite drugim uporabnikom v tem računalniku preprečiti dostop do Syncthinga in prek njega do vaših datotek, razmislite o nastavitvi preverjanja pristnosti.",
|
||||
"Ignore": "Prezri",
|
||||
"Ignore Patterns": "Vzorec preziranja",
|
||||
"Ignore Permissions": "Prezri dovoljenja",
|
||||
"Ignored Devices": "Prezrte naprave",
|
||||
"Ignored Folders": "Prezrte mape",
|
||||
"Ignored at": "Prezrt pri",
|
||||
"Incoming Rate Limit (KiB/s)": "Omejitev nalaganja (KiB/s)",
|
||||
"Incorrect configuration may damage your folder contents and render Syncthing inoperable.": "Nepravilna konfiguracija lahko poškodujejo vsebino vaše mape in povzroči, da Syncthing postane neoperativen.",
|
||||
"Introduced By": "Predstavil",
|
||||
"Introducer": "Uvajalec",
|
||||
"Inversion of the given condition (i.e. do not exclude)": "Inverzija podanega pogoja (primer. ne vključi)",
|
||||
"Keep Versions": "Ohrani različice",
|
||||
"LDAP": "LDAP",
|
||||
"Largest First": "najprej največja",
|
||||
"Last Scan": "Zadnje skeniranje",
|
||||
"Last seen": "Zadnjič videno",
|
||||
"Latest Change": "Najnovejša sprememba",
|
||||
"Learn more": "Nauči se več",
|
||||
"Limit": "Omejitev",
|
||||
"Listener Failures": "Napake vmesnika",
|
||||
"Listener Status": "Stanje vmesnika",
|
||||
"Listeners": "Poslušalci",
|
||||
"Loading data...": "Nalaganje podatkov...",
|
||||
"Loading...": "Nalaganje...",
|
||||
"Local Additions": "Lokalni dodatki",
|
||||
"Local Discovery": "Krajevno odkrivanje",
|
||||
"Local State": "Krajevno stanje",
|
||||
"Local State (Total)": "Krajevno stanje (vsota)",
|
||||
"Locally Changed Items": "Lokalno spremenjeni predmeti",
|
||||
"Log": "Dnevnik",
|
||||
"Log tailing paused. Scroll to the bottom to continue.": "Odvajanje dnevnika je zaustavljeno. Za nadaljevanje se pomaknite do dna.",
|
||||
"Logs": "Dnevniki",
|
||||
"Major Upgrade": "Večja nadgradnja",
|
||||
"Mass actions": "Množične akcije",
|
||||
"Maximum Age": "Največja starost",
|
||||
"Metadata Only": "Samo metapodatki ",
|
||||
"Minimum Free Disk Space": "Minimalen nezaseden prostor na disku",
|
||||
"Mod. Device": "Spremenjeno od naprave",
|
||||
"Mod. Time": "Čas spremembe",
|
||||
"Move to top of queue": "Premakni na vrh čakalne vrste",
|
||||
"Multi level wildcard (matches multiple directory levels)": "Več ravni map (sklada se z več ravni map in podmap)",
|
||||
"Never": "Nikoli",
|
||||
"New Device": "Nova Naprava",
|
||||
"New Folder": "Nova Mapa",
|
||||
"Newest First": "najprej najnovejši",
|
||||
"No": "Ne",
|
||||
"No File Versioning": "Brez beleženja različic datotek",
|
||||
"No files will be deleted as a result of this operation.": "Nobene datoteke se ne bodo izbrisale kot rezultat od te operacije.",
|
||||
"No upgrades": "Nobene posodobitve",
|
||||
"Not shared": "Ni deljeno",
|
||||
"Notice": "Obvestilo",
|
||||
"OK": "V redu",
|
||||
"Off": "Brez",
|
||||
"Oldest First": "Najprej najstarejši",
|
||||
"Optional descriptive label for the folder. Can be different on each device.": "Izbirna opisna oznaka za mapo. Na vsaki napravi je lahko drugačna.",
|
||||
"Options": "Možnosti",
|
||||
"Out of Sync": "Neusklajeno",
|
||||
"Out of Sync Items": "Predmeti izven sinhronizacije",
|
||||
"Outgoing Rate Limit (KiB/s)": "Omejitev prenašanja (KiB/s)",
|
||||
"Override": "Preglasi",
|
||||
"Override Changes": "Prepiši spremembe",
|
||||
"Path": "Pot",
|
||||
"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": "Pot do mape v lokalnem računalniku. Ustvarjeno bo, če ne obstaja. Znak tilde (~) lahko uporabite kot bližnjico za",
|
||||
"Path where new auto accepted folders will be created, as well as the default suggested path when adding new folders via the UI. Tilde character (~) expands to {%tilde%}.": "Pot, kjer bodo ustvarjene nove samodejno sprejete mape, kot tudi privzeta predlagana pot pri dodajanju novih map prek uporabniškega vmesnika. Znak tilde (~) se razširi na {{tilde}}.",
|
||||
"Path where versions should be stored (leave empty for the default .stversions directory in the shared folder).": "Pot, kjer naj bodo shranjene različice (pustite prazno za privzeto mapo .stversions v mapi skupne rabe).",
|
||||
"Pause": "Premor",
|
||||
"Pause All": "Začasno ustavi vse",
|
||||
"Paused": "V premoru",
|
||||
"Paused (Unused)": "Zaustavljeno (neuporabljeno)",
|
||||
"Pending changes": "Čakajoče spremembe",
|
||||
"Periodic scanning at given interval and disabled watching for changes": "Občasno skeniranje v določenem intervalu in onemogočeno spremljanje sprememb",
|
||||
"Periodic scanning at given interval and enabled watching for changes": "Periodično skeniranje v določenem intervalu in omogočeno spremljanje sprememb",
|
||||
"Periodic scanning at given interval and failed setting up watching for changes, retrying every 1m:": "Periodično skeniranje v določenem intervalu in neuspešna nastavitev spremljanje sprememb, ponovni poskus vsake 1 minute:",
|
||||
"Permanently add it to the ignore list, suppressing further notifications.": "Trajno ga dodajte na seznam prezrtih, tako da preprečite nadaljnja obvestila.",
|
||||
"Permissions": "Dovoljenja",
|
||||
"Please consult the release notes before performing a major upgrade.": "Prosimo, da preverite opombe ob izdaji, preden izvedete nadgradnjo na glavno različico.",
|
||||
"Please set a GUI Authentication User and Password in the Settings dialog.": "Prosimo, nastavite uporabnika in geslo za preverjanje pristnosti grafičnega vmesnika v pozivnem oknu Nastavitve.",
|
||||
"Please wait": "Počakajte ...",
|
||||
"Prefix indicating that the file can be deleted if preventing directory removal": "Predpona, ki označuje, da je datoteko mogoče izbrisati, če preprečuje odstranitev imenika",
|
||||
"Prefix indicating that the pattern should be matched without case sensitivity": "Predpona, ki označuje, da je treba vzorec ujemati brez občutljivosti velikih in malih črk",
|
||||
"Preparing to Sync": "Priprava na sinhronizacijo",
|
||||
"Preview": "Predogled",
|
||||
"Preview Usage Report": "Predogled poročila uporabe",
|
||||
"Quick guide to supported patterns": "Hitri vodnik za podprte vzorce",
|
||||
"Random": "Naključno",
|
||||
"Receive Encrypted": "Prejmi šifrirano",
|
||||
"Receive Only": "Samo prejemanje",
|
||||
"Received data is already encrypted": "Prejeti podatki so že šifrirani",
|
||||
"Recent Changes": "Nedavne spremembe",
|
||||
"Reduced by ignore patterns": "Zmanjšano z ignoriranjem vzorcev",
|
||||
"Release Notes": "Opombe ob izdaji",
|
||||
"Release candidates contain the latest features and fixes. They are similar to the traditional bi-weekly Syncthing releases.": "Kandidati za izdajo vsebujejo najnovejše funkcije in popravke. Podobne so tradicionalnim dvotedenskim izdajam Syncthing.",
|
||||
"Remote Devices": "Oddaljene naprave",
|
||||
"Remote GUI": "Oddaljeni grafični vmesnik",
|
||||
"Remove": "Odstrani",
|
||||
"Remove Device": "Odstranite napravo",
|
||||
"Remove Folder": "Odstranite mapo",
|
||||
"Required identifier for the folder. Must be the same on all cluster devices.": "Zahtevan identifikator za mapo. Biti mora enak na vseh napravah v gruči.",
|
||||
"Rescan": "Ponovno osveži",
|
||||
"Rescan All": "Osveži vse",
|
||||
"Rescans": "Ponovno skeniranje",
|
||||
"Restart": "Ponovno zaženi",
|
||||
"Restart Needed": "Zahtevan je ponovni zagon",
|
||||
"Restarting": "Poteka ponovni zagon",
|
||||
"Restore": "Obnovi",
|
||||
"Restore Versions": "Obnovi različice",
|
||||
"Resume": "Nadaljuj",
|
||||
"Resume All": "Nadaljuj vse",
|
||||
"Reused": "Ponovno uporabi",
|
||||
"Revert": "Povrni",
|
||||
"Revert Local Changes": "Razveljavi lokalne spremembe",
|
||||
"Save": "Shrani",
|
||||
"Scan Time Remaining": "Preostali čas skeniranja",
|
||||
"Scanning": "Osveževanje",
|
||||
"See external versioning help for supported templated command line parameters.": "Oglejte si zunanjo pomoč za urejanje različic za podprte predloge parametrov ukazne vrstice.",
|
||||
"Select All": "Izberi vse",
|
||||
"Select a version": "Izberite različico",
|
||||
"Select additional devices to share this folder with.": "Izberite dodatne naprave za skupno rabo te mape.",
|
||||
"Select additional folders to share with this device.": "Izberite dodatne mape za skupno rabo s to napravo.",
|
||||
"Select latest version": "Izberite najnovejšo različico",
|
||||
"Select oldest version": "Izberite najstarejšo različico",
|
||||
"Select the folders to share with this device.": "Izberi mapo za deljenje z to napravo.",
|
||||
"Send & Receive": "Pošlji in Prejmi",
|
||||
"Send Only": "Samo pošiljanje",
|
||||
"Settings": "Nastavitve",
|
||||
"Share": "Deli",
|
||||
"Share Folder": "Deli mapo",
|
||||
"Share Folders With Device": "Deli mapo z napravo",
|
||||
"Share this folder?": "Deli to mapo?",
|
||||
"Shared Folders": "Skupne mape",
|
||||
"Shared With": "Usklajeno z",
|
||||
"Sharing": "Skupna raba",
|
||||
"Show ID": "Pokaži ID",
|
||||
"Show QR": "Pokaži QR",
|
||||
"Show detailed discovery status": "Pokaži podroben status odkritja",
|
||||
"Show detailed listener status": "Pokaži podroben status vmesnika",
|
||||
"Show diff with previous version": "Pokaži razliko s prejšnjo različico",
|
||||
"Shown instead of Device ID in the cluster status. Will be advertised to other devices as an optional default name.": "Prikazano namesto ID-ja naprave v stanju gruče. Oglašuje se drugim napravam kot neobvezno privzeto ime.",
|
||||
"Shown instead of Device ID in the cluster status. Will be updated to the name the device advertises if left empty.": "Prikazano namesto ID-ja naprave v stanju gruče. Če ostane prazno, bo posodobljeno na ime, ki ga oglašuje naprava.",
|
||||
"Shutdown": "Izklopi",
|
||||
"Shutdown Complete": "Izklop končan",
|
||||
"Simple File Versioning": "Enostvno beleženje različic datotek",
|
||||
"Single level wildcard (matches within a directory only)": "Enostopenjski nadomestni znak (ujema se samo v imeniku)",
|
||||
"Size": "Velikost",
|
||||
"Smallest First": "najprej najmanjša",
|
||||
"Some discovery methods could not be established for finding other devices or announcing this device:": "Nekaterih metod odkrivanja ni bilo mogoče vzpostaviti za iskanje drugih naprav ali objavo te naprave:",
|
||||
"Some items could not be restored:": "Nekaterih predmetov ni bilo mogoče obnoviti:",
|
||||
"Some listening addresses could not be enabled to accept connections:": "Nekaterim naslovom za poslušanje ni bilo mogoče omogočiti sprejemanja povezav:",
|
||||
"Source Code": "Izvorna koda",
|
||||
"Stable releases and release candidates": "Stabilne izdaje in kandidati za sprostitev",
|
||||
"Stable releases are delayed by about two weeks. During this time they go through testing as release candidates.": "Stabilne izdaje zamujajo za približno dva tedna. V tem času gredo skozi testiranje kot kandidati za izdajo.",
|
||||
"Stable releases only": "Samo stabilne izdaje",
|
||||
"Staggered File Versioning": "Razporeditveno beleženje različic datotek",
|
||||
"Start Browser": "Zaženi brskalnik",
|
||||
"Statistics": "Statistika",
|
||||
"Stopped": "Zaustavljeno",
|
||||
"Stores and syncs only encrypted data. Folders on all connected devices need to be set up with the same password or be of type \"{%receiveEncrypted%}\" too.": "Shranjuje in sinhronizira samo šifrirane podatke. Mape na vseh povezanih napravah morajo biti nastavljene z istim geslom ali pa morajo biti tudi vrste \"{{receiveEncrypted}}\".",
|
||||
"Support": "Pomoč",
|
||||
"Support Bundle": "Podporni paket",
|
||||
"Sync Protocol Listen Addresses": "Naslovi poslušanja protokola sinhronizacije",
|
||||
"Syncing": "Usklajevanje",
|
||||
"Syncthing has been shut down.": "Program Syncthing je onemogočen.",
|
||||
"Syncthing includes the following software or portions thereof:": "Syncthing vključuje naslednjo programsko opremo ali njene dele:",
|
||||
"Syncthing is Free and Open Source Software licensed as MPL v2.0.": "Syncthing je brezplačna odprtokodna programska oprema, licencirana kot MPL v2.0.",
|
||||
"Syncthing is listening on the following network addresses for connection attempts from other devices:": "Syncthing posluša na naslednjih omrežnih naslovih poskuse povezovanja iz drugih naprav:",
|
||||
"Syncthing is not listening for connection attempts from other devices on any address. Only outgoing connections from this device may work.": "Syncthing ne posluša poskusov povezovanja drugih naprav na katerem koli naslovu. Delujejo lahko samo odhodne povezave iz te naprave.",
|
||||
"Syncthing is restarting.": "Program Syncthing se ponovno zaganja.",
|
||||
"Syncthing is upgrading.": "Program Syncthing se posodablja",
|
||||
"Syncthing now supports automatically reporting crashes to the developers. This feature is enabled by default.": "Syncthing zdaj podpira samodejno poročanje o zrušitvah razvijalcem. Ta funkcija je privzeto omogočena.",
|
||||
"Syncthing seems to be down, or there is a problem with your Internet connection. Retrying…": "Zdi se, da je Syncthing ni delujoč ali pa je prišlo do težave z vašo internetno povezavo. Ponovni poskus …",
|
||||
"Syncthing seems to be experiencing a problem processing your request. Please refresh the page or restart Syncthing if the problem persists.": "Zdi se, da ima Syncthing težave pri obdelavi vaše zahteve. Osvežite stran ali znova zaženite Syncthing, če se težava ponovi.",
|
||||
"Take me back": "Daj me nazaj",
|
||||
"The GUI address is overridden by startup options. Changes here will not take effect while the override is in place.": "Naslov grafičnega vmesnika preglasijo možnosti zagona. Spremembe tukaj ne bodo veljale, dokler je preglasitev v veljavi.",
|
||||
"The Syncthing Authors": "Syncthing avtorji",
|
||||
"The Syncthing admin interface is configured to allow remote access without a password.": "Skrbniški vmesnik Syncthing je konfiguriran tako, da omogoča oddaljeni dostop brez gesla.",
|
||||
"The aggregated statistics are publicly available at the URL below.": "Zbrani statistični podatki so javno dostopni na spodnjem URL-ju.",
|
||||
"The cleanup interval cannot be blank.": "Interval čiščenja ne sme biti prazen.",
|
||||
"The configuration has been saved but not activated. Syncthing must restart to activate the new configuration.": "Konfiguracija je bila shranjena, vendar ni aktivirana. Sinhronizacija se mora znova zagnati, da aktivirate novo konfiguracijo.",
|
||||
"The device ID cannot be blank.": "ID naprave ne more biti prazno.",
|
||||
"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).": "ID naprave, ki ga vnesete tukaj, najdete v pozivnem oknu »Dejanja > Pokaži ID« na drugi napravi. Presledki in pomišljaji so neobvezni (prezrti).",
|
||||
"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.": "Poročilo o šifrirani uporabi se pošilja vsak dan. Uporablja se za sledenje običajnih platform, velikosti map in različic aplikacij. Če se sporočeni nabor podatkov spremeni, boste znova pozvani k temu pozivnem oknu.",
|
||||
"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.": "Vneseni ID naprave ni videti veljaven. To mora biti niz z 52 ali 56 znaki, sestavljen iz črk in številk, pri čemer so presledki in pomišljaji neobvezni.",
|
||||
"The folder ID cannot be blank.": "ID mape ne more biti prazno.",
|
||||
"The folder ID must be unique.": "ID mape more biti edinstveno.",
|
||||
"The folder content on other devices will be overwritten to become identical with this device. Files not present here will be deleted on other devices.": "Vsebina mape na drugih napravah bo prepisana, da bo postala identična tej napravi. Datoteke, ki niso tukaj, bodo izbrisane na drugih napravah.",
|
||||
"The folder content on this device will be overwritten to become identical with other devices. Files newly added here will be deleted.": "Vsebina mape na drugih napravah bo prepisana, da bo postala identična tej napravi. Tu na novo dodane datoteke bodo izbrisane.",
|
||||
"The folder path cannot be blank.": "Pot mape ne more biti prazno.",
|
||||
"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.": "Uporabljajo se sledeči intervali: prvo uro se različica hrani vsakih 30 sekund, prvi dan se različica hrani vsako uro, prvih 30 dni se različica hrani vsak dan, do najvišje starosti se različica hrani vsaki teden.",
|
||||
"The following items could not be synchronized.": "Naslednjih predmetov ni bilo mogoče sinhronizirati.",
|
||||
"The following items were changed locally.": "Naslednji predmeti so bili lokalno spremenjeni.",
|
||||
"The following methods are used to discover other devices on the network and announce this device to be found by others:": "Naslednje metode se uporabljajo za odkrivanje drugih naprav v omrežju in oznanitev, da jo najdejo drugi:",
|
||||
"The following unexpected items were found.": "Najdeni so bili naslednji nepričakovani predmeti.",
|
||||
"The interval must be a positive number of seconds.": "Interval mora biti pozitivno število od sekund.",
|
||||
"The interval, in seconds, for running cleanup in the versions directory. Zero to disable periodic cleaning.": "Interval, v sekundah, za zagon čiščenja v mapi različic. 0 za onemogočanje občasnega čiščenja.",
|
||||
"The maximum age must be a number and cannot be blank.": "Najvišja starost mora biti številka in ne sme biti prazno.",
|
||||
"The maximum time to keep a version (in days, set to 0 to keep versions forever).": "Najdaljši čas za shranjevanje različice (v dnevih, nastavite na 0, da se različice ohranijo za vedno).",
|
||||
"The number of days must be a number and cannot be blank.": "Število dni mora biti število in ne more biti prazno.",
|
||||
"The number of days to keep files in the trash can. Zero means forever.": "Število dni kolikor se hranijo datoteke v Smetnjaku. Nič pomeni za zmeraj. ",
|
||||
"The number of old versions to keep, per file.": "Število starejših različic za hrambo na datoteko.",
|
||||
"The number of versions must be a number and cannot be blank.": "Število različic mora biti število in ne more biti prazno.",
|
||||
"The path cannot be blank.": "Pot ne more biti prazna.",
|
||||
"The rate limit must be a non-negative number (0: no limit)": "Omejitev stopnje odzivnosti mora biti nenegativno število (0: brez omejitve)",
|
||||
"The rescan interval must be a non-negative number of seconds.": "Interval skeniranja mora biti pozitivna številka.",
|
||||
"There are no devices to share this folder with.": "Ni naprav za skupno rabo te mape.",
|
||||
"There are no folders to share with this device.": "Ni map za skupno rabo s to napravo.",
|
||||
"They are retried automatically and will be synced when the error is resolved.": "Samodejno se poskuša znova in bo sinhronizirano, ko je napaka odpravljena.",
|
||||
"This Device": "Ta naprava",
|
||||
"This can easily give hackers access to read and change any files on your computer.": "To lahko hekerjem preprosto omogoči dostop do branja in spreminjanja vseh datotek v vašem računalniku.",
|
||||
"This device cannot automatically discover other devices or announce its own address to be found by others. Only devices with statically configured addresses can connect.": "Ta naprava ne more samodejno odkriti drugih naprav ali objaviti svojega naslova, da ga najdejo drugi. Povezujejo se lahko samo naprave s statično konfiguriranimi naslovi.",
|
||||
"This is a major version upgrade.": "To je nadgradnja glavne različice",
|
||||
"This setting controls the free space required on the home (i.e., index database) disk.": "Ta nastavitev nadzoruje prosti prostor potreben na domačem (naprimer, indeksirana podatkovna baza) pogonu.",
|
||||
"Time": "Čas",
|
||||
"Time the item was last modified": "Čas, ko je bil element nazadnje spremenjen",
|
||||
"Trash Can File Versioning": "Beleženje različic datotek s Smetnjakom",
|
||||
"Type": "Vrsta",
|
||||
"UNIX Permissions": "UNIX dovoljenja",
|
||||
"Unavailable": "Ni na voljo",
|
||||
"Unavailable/Disabled by administrator or maintainer": "Ni na voljo/Onemogočeno od administratorja ali vzdrževalca",
|
||||
"Undecided (will prompt)": "Neodločen (bo pozval)",
|
||||
"Unexpected Items": "Nepričakovani predmeti",
|
||||
"Unexpected items have been found in this folder.": "V tej mapi so bili najdeni nepričakovani predmeti.",
|
||||
"Unignore": "Odignoriraj",
|
||||
"Unknown": "Neznano",
|
||||
"Unshared": "Ne deli",
|
||||
"Unshared Devices": "Naprave, ki niso v skupni rabi",
|
||||
"Unshared Folders": "Mape, ki niso v skupni rabi",
|
||||
"Untrusted": "Nezaupno",
|
||||
"Up to Date": "Posodobljeno",
|
||||
"Updated": "Posodobljeno",
|
||||
"Upgrade": "Posodobi",
|
||||
"Upgrade To {%version%}": "Posodobi na različico {{version}}",
|
||||
"Upgrading": "Posodabljanje",
|
||||
"Upload Rate": "Hitrost prejemanja",
|
||||
"Uptime": "Čas delovanja",
|
||||
"Usage reporting is always enabled for candidate releases.": "Poročanje o uporabi je vedno omogočeno za kandidatne izdaje.",
|
||||
"Use HTTPS for GUI": "Uporabi protokol HTTPS za vmesnik",
|
||||
"Use notifications from the filesystem to detect changed items.": "Za odkrivanje spremenjenih elementov uporabite obvestila iz datotečnega sistema.",
|
||||
"Username/Password has not been set for the GUI authentication. Please consider setting it up.": "Uporabniško ime/geslo ni bilo nastavljeno za preverjanje pristnosti na grafičnem vmesniku. Razmislite o nastavitvi.",
|
||||
"Version": "Različica",
|
||||
"Versions": "Različice",
|
||||
"Versions Path": "Pot do različic",
|
||||
"Versions are automatically deleted if they are older than the maximum age or exceed the number of files allowed in an interval.": "Različice se samodejno izbrišejo, če so starejše od najvišje starosti ali presegajo dovoljeno število datotek v intervalu.",
|
||||
"Waiting to Clean": "Čakanje na čiščenje",
|
||||
"Waiting to Scan": "Čakanje na skeniranje",
|
||||
"Waiting to Sync": "Čakanje na sinhronizacijo",
|
||||
"Warning": "Opozorilo",
|
||||
"Warning, this path is a parent directory of an existing folder \"{%otherFolder%}\".": "Opozorilo, ta pot je nadrejena mapa obstoječe mape \"{{otherFolder}}\".",
|
||||
"Warning, this path is a parent directory of an existing folder \"{%otherFolderLabel%}\" ({%otherFolder%}).": "Opozorilo, ta pot je nadrejena mapa obstoječe mape \"{{otherFolderLabel}}\" ({{otherFolder}}).",
|
||||
"Warning, this path is a subdirectory of an existing folder \"{%otherFolder%}\".": "Opozorilo, ta pot je že podmapa obstoječe mape \"{{otherFolder}}\".",
|
||||
"Warning, this path is a subdirectory of an existing folder \"{%otherFolderLabel%}\" ({%otherFolder%}).": "Opozorilo, ta pot je že podmapa obstoječe mape \"{{otherFolderLabel}}\" ({{otherFolder}}).",
|
||||
"Warning: If you are using an external watcher like {%syncthingInotify%}, you should make sure it is deactivated.": "Opozorilo: Če uporabljate zunanji opazovalec, kot je {{syncthingInotify}}, se prepričajte, da je deaktiviran.",
|
||||
"Watch for Changes": "Gleda se za spremembe",
|
||||
"Watching for Changes": "Gledanje za spremembe",
|
||||
"Watching for changes discovers most changes without periodic scanning.": "Opazovanje sprememb odkrije večino sprememb brez občasnega skeniranja.",
|
||||
"When adding a new device, keep in mind that this device must be added on the other side too.": "Ob dodajanju nove naprave imejte v mislih, da ta naprava mora biti dodana tudi na drugi strani.",
|
||||
"When adding a new folder, keep in mind that the Folder ID is used to tie folders together between devices. They are case sensitive and must match exactly between all devices.": "Ko dodajate novo mapo, ne pozabite, da se ID mape uporablja za povezovanje map med napravami. Razlikujejo se na velike in male črke in se morajo natančno ujemati med vsemi napravami.",
|
||||
"Yes": "Da",
|
||||
"You can also select one of these nearby devices:": "Izberete lahko tudi eno od teh naprav v bližini:",
|
||||
"You can change your choice at any time in the Settings dialog.": "Svojo izbiro lahko kadar koli spremenite v pozivnem oknu Nastavitve.",
|
||||
"You can read more about the two release channels at the link below.": "Več o obeh kanalih za izdajo si lahko preberete na spodnji povezavi.",
|
||||
"You have no ignored devices.": "Nimate prezrtih naprav.",
|
||||
"You have no ignored folders.": "Nimate prezrtih map.",
|
||||
"You have unsaved changes. Do you really want to discard them?": "Imate neshranjene spremembe. Ali jih res želite zavreči?",
|
||||
"You must keep at least one version.": "Potrebno je obdržati vsaj eno verzijo.",
|
||||
"You should never add or change anything locally in a \"{%receiveEncrypted%}\" folder.": "Nikoli ne smete ničesar dodati ali spremeniti lokalno v mapi \"{{receiveEncrypted}}\".",
|
||||
"days": "dnevi",
|
||||
"directories": "mape",
|
||||
"files": "datoteke",
|
||||
"full documentation": "celotna dokumentacija",
|
||||
"items": "predmeti",
|
||||
"seconds": "sekunde",
|
||||
"theme-name-black": "Črna",
|
||||
"theme-name-dark": "Temno",
|
||||
"theme-name-default": "Privzeto",
|
||||
"theme-name-light": "Svetlo",
|
||||
"{%device%} wants to share folder \"{%folder%}\".": "{{device}} želi deliti mapo \"{{folder}}\".",
|
||||
"{%device%} wants to share folder \"{%folderlabel%}\" ({%folder%}).": "{{device}} želi deliti mapo \"{{folderlabel}}\" ({{folder}}).",
|
||||
"{%reintroducer%} might reintroduce this device.": "{{reintroducer}} bo morda znova predstavil to napravo."
|
||||
}
|
||||
@@ -22,6 +22,7 @@
|
||||
"Allow Anonymous Usage Reporting?": "Tillåt anonym användarstatistiksrapportering?",
|
||||
"Allowed Networks": "Tillåtna nätverk",
|
||||
"Alphabetic": "Alfabetisk",
|
||||
"Altered by ignoring deletes.": "Ändrad genom att ignorera borttagningar.",
|
||||
"An external command handles the versioning. It has to remove the file from the shared folder. If the path to the application contains spaces, it should be quoted.": "Ett externt kommando hanterar versionen. Det måste ta bort filen från den delade mappen. Om sökvägen till applikationen innehåller mellanslag bör den citeras.",
|
||||
"Anonymous Usage Reporting": "Anonym användarstatistiksrapportering",
|
||||
"Anonymous usage report format has changed. Would you like to move to the new format?": "Anonymt användningsrapportformat har ändrats. Vill du flytta till det nya formatet?",
|
||||
@@ -92,7 +93,7 @@
|
||||
"Disabled periodic scanning and enabled watching for changes": "Inaktiverad periodisk skanning och aktiverad bevakning av ändringar",
|
||||
"Disabled periodic scanning and failed setting up watching for changes, retrying every 1m:": "Inaktiverad periodisk skanning och misslyckades med att ställa in bevakning av ändringar, försöker igen var 1:e minut:",
|
||||
"Disables comparing and syncing file permissions. Useful on systems with nonexistent or custom permissions (e.g. FAT, exFAT, Synology, Android).": "Inaktiverar att jämföra och synkronisera filbehörigheter. Användbart för system med obefintliga eller anpassade behörigheter (t.ex. FAT, exFAT, Synology, Android).",
|
||||
"Discard": "Kasta",
|
||||
"Discard": "Kassera",
|
||||
"Disconnected": "Frånkopplad",
|
||||
"Disconnected (Unused)": "Frånkopplad (oanvänd)",
|
||||
"Discovered": "Upptäckt",
|
||||
@@ -171,7 +172,7 @@
|
||||
"Ignored Devices": "Ignorerade enheter",
|
||||
"Ignored Folders": "Ignorerade mappar",
|
||||
"Ignored at": "Ignorerad vid",
|
||||
"Incoming Rate Limit (KiB/s)": "Inkommande hastighetsgräns (KiB/s)",
|
||||
"Incoming Rate Limit (KiB/s)": "Ingående hastighetsgräns (KiB/s)",
|
||||
"Incorrect configuration may damage your folder contents and render Syncthing inoperable.": "Inkorrekt konfiguration kan skada innehållet i mappen and få Syncthing att sluta fungera.",
|
||||
"Introduced By": "Introducerad av",
|
||||
"Introducer": "Introduktör",
|
||||
@@ -278,7 +279,7 @@
|
||||
"Revert Local Changes": "Återställ lokala ändringar",
|
||||
"Save": "Spara",
|
||||
"Scan Time Remaining": "Återstående skanningstid",
|
||||
"Scanning": "Skannar",
|
||||
"Scanning": "Skanning",
|
||||
"See external versioning help for supported templated command line parameters.": "Se hjälp för extern version för stödda mallade kommandoradsparametrar.",
|
||||
"Select All": "Markera alla",
|
||||
"Select a version": "Välj en version",
|
||||
@@ -427,7 +428,7 @@
|
||||
"You can read more about the two release channels at the link below.": "Du kan läsa mer om de två publiceringsskanalerna på länken nedan.",
|
||||
"You have no ignored devices.": "Du har inga ignorerade enheter.",
|
||||
"You have no ignored folders.": "Du har inga ignorerade mappar.",
|
||||
"You have unsaved changes. Do you really want to discard them?": "Du har osparade ändringar. Vill du verkligen kasta dem?",
|
||||
"You have unsaved changes. Do you really want to discard them?": "Du har osparade ändringar. Vill du verkligen kassera dem?",
|
||||
"You must keep at least one version.": "Du måste behålla åtminstone en version.",
|
||||
"You should never add or change anything locally in a \"{%receiveEncrypted%}\" folder.": "Du ska aldrig lägga till eller ändra något lokalt i en \"{{receiveEncrypted}}\"-mapp.",
|
||||
"days": "dagar",
|
||||
@@ -436,6 +437,10 @@
|
||||
"full documentation": "fullständig dokumentation",
|
||||
"items": "objekt",
|
||||
"seconds": "sekunder",
|
||||
"theme-name-black": "Svart",
|
||||
"theme-name-dark": "Mörkt",
|
||||
"theme-name-default": "Standard",
|
||||
"theme-name-light": "Ljust",
|
||||
"{%device%} wants to share folder \"{%folder%}\".": "{{device}} vill dela mapp \"{{folder}}\".",
|
||||
"{%device%} wants to share folder \"{%folderlabel%}\" ({%folder%}).": "{{device}} vill dela mapp \"{{folderlabel}}\" ({{folder}}).",
|
||||
"{%reintroducer%} might reintroduce this device.": "{{reintroducer}} kan återinföra denna enhet."
|
||||
|
||||
@@ -22,6 +22,7 @@
|
||||
"Allow Anonymous Usage Reporting?": "İsimsiz Kullanım Bildirmeye İzin Verilsin Mi?",
|
||||
"Allowed Networks": "İzin Verilen Ağlar",
|
||||
"Alphabetic": "Alfabetik",
|
||||
"Altered by ignoring deletes.": "Silmeler yoksayılarak değiştirildi.",
|
||||
"An external command handles the versioning. It has to remove the file from the shared folder. If the path to the application contains spaces, it should be quoted.": "Harici bir komut sürümlendirmeyi gerçekleştirir. Dosyayı paylaşılan klasörden kaldırmak zorundadır. Eğer uygulama yolu boşluklar içeriyorsa, tırnak içine alınmalıdır.",
|
||||
"Anonymous Usage Reporting": "İsimsiz Kullanım Bildirme",
|
||||
"Anonymous usage report format has changed. Would you like to move to the new format?": "İsimsiz kullanım raporu biçimi değişti. Yeni biçime geçmek ister misiniz?",
|
||||
@@ -436,6 +437,10 @@
|
||||
"full documentation": "tam belgelendirme",
|
||||
"items": "öğe",
|
||||
"seconds": "saniye",
|
||||
"theme-name-black": "Siyah",
|
||||
"theme-name-dark": "Koyu",
|
||||
"theme-name-default": "Varsayılan",
|
||||
"theme-name-light": "Açık",
|
||||
"{%device%} wants to share folder \"{%folder%}\".": "{{device}}, \"{{folder}}\" klasörünü paylaşmak istiyor.",
|
||||
"{%device%} wants to share folder \"{%folderlabel%}\" ({%folder%}).": "{{device}}, \"{{folderlabel}}\" ({{folder}}) klasörünü paylaşmak istiyor.",
|
||||
"{%reintroducer%} might reintroduce this device.": "{{reintroducer}} bu cihazı yeniden tanıtabilir."
|
||||
|
||||
@@ -22,6 +22,7 @@
|
||||
"Allow Anonymous Usage Reporting?": "Дозволити програмі збирати анонімну статистику використання?",
|
||||
"Allowed Networks": "Дозволені мережі",
|
||||
"Alphabetic": "За алфавітом",
|
||||
"Altered by ignoring deletes.": "Altered by ignoring deletes.",
|
||||
"An external command handles the versioning. It has to remove the file from the shared folder. If the path to the application contains spaces, it should be quoted.": "Зовнішня команда керування версіями. Вона має видалити файл із спільної директорії. Якщо шлях до програми містить пробіли, він буде взятий у лапки.",
|
||||
"Anonymous Usage Reporting": "Анонімна статистика використання",
|
||||
"Anonymous usage report format has changed. Would you like to move to the new format?": "Змінився формат анонімного звіту про користування. Бажаєте перейти на новий формат?",
|
||||
@@ -436,6 +437,10 @@
|
||||
"full documentation": "повна документація",
|
||||
"items": "елементи",
|
||||
"seconds": "секунд",
|
||||
"theme-name-black": "Black",
|
||||
"theme-name-dark": "Dark",
|
||||
"theme-name-default": "Default",
|
||||
"theme-name-light": "Light",
|
||||
"{%device%} wants to share folder \"{%folder%}\".": "{{device}} хоче поділитися директорією \"{{folder}}\".",
|
||||
"{%device%} wants to share folder \"{%folderlabel%}\" ({%folder%}).": "{{device}} хоче поділитися директорією \"{{folderLabel}}\" ({{folder}}).",
|
||||
"{%reintroducer%} might reintroduce this device.": "{{reintroducer}} might reintroduce this device."
|
||||
|
||||
@@ -22,6 +22,7 @@
|
||||
"Allow Anonymous Usage Reporting?": "允许匿名使用报告?",
|
||||
"Allowed Networks": "允许的网络",
|
||||
"Alphabetic": "字母顺序",
|
||||
"Altered by ignoring deletes.": "Altered by ignoring deletes.",
|
||||
"An external command handles the versioning. It has to remove the file from the shared folder. If the path to the application contains spaces, it should be quoted.": "外部命令接管了版本控制。该外部命令必须自行从共享文件夹中删除该文件。如果此应用程序的路径包含空格,应该用半角引号括起来。",
|
||||
"Anonymous Usage Reporting": "匿名使用报告",
|
||||
"Anonymous usage report format has changed. Would you like to move to the new format?": "匿名使用情况的报告格式已经变更。是否要迁移到新的格式?",
|
||||
@@ -114,9 +115,9 @@
|
||||
"Edit Folder": "编辑文件夹",
|
||||
"Edit Folder Defaults": "编辑文件夹默认值",
|
||||
"Editing {%path%}.": "正在编辑 {{path}}。",
|
||||
"Enable Crash Reporting": "启用自动发送崩溃报告",
|
||||
"Enable NAT traversal": "启用 NAT 遍历",
|
||||
"Enable Relaying": "开启中继",
|
||||
"Enable Crash Reporting": "启用崩溃报告",
|
||||
"Enable NAT traversal": "启用 NAT 穿透",
|
||||
"Enable Relaying": "启用中继",
|
||||
"Enabled": "已启用",
|
||||
"Enter a non-negative number (e.g., \"2.35\") and select a unit. Percentages are as part of the total disk size.": "输入一个非负数(例如“2.35”)并选择单位。%表示占磁盘总容量的百分比。",
|
||||
"Enter a non-privileged port number (1024 - 65535).": "输入一个非特权的端口号 (1024 - 65535)。",
|
||||
@@ -436,6 +437,10 @@
|
||||
"full documentation": "完整文档",
|
||||
"items": "条目",
|
||||
"seconds": "秒",
|
||||
"theme-name-black": "黑色",
|
||||
"theme-name-dark": "深色",
|
||||
"theme-name-default": "默认",
|
||||
"theme-name-light": "浅色",
|
||||
"{%device%} wants to share folder \"{%folder%}\".": "{{device}} 想将 “{{folder}}” 文件夹共享给您。",
|
||||
"{%device%} wants to share folder \"{%folderlabel%}\" ({%folder%}).": "{{device}} 想要共享 \"{{folderlabel}}\" ({{folder}}) 文件夹给您。",
|
||||
"{%reintroducer%} might reintroduce this device.": "{{reintroducer}}可能会重新引入此设备。"
|
||||
|
||||
@@ -22,6 +22,7 @@
|
||||
"Allow Anonymous Usage Reporting?": "允許匿名使用報告?",
|
||||
"Allowed Networks": "允許的網絡",
|
||||
"Alphabetic": "字母順序",
|
||||
"Altered by ignoring deletes.": "Altered by ignoring deletes.",
|
||||
"An external command handles the versioning. It has to remove the file from the shared folder. If the path to the application contains spaces, it should be quoted.": "外部命令接管了版本控制。該外部命令必須自行從共享文件夾中刪除該文件。如果此應用程序的路徑包含空格,應該用半角引號括起來。",
|
||||
"Anonymous Usage Reporting": "匿名使用報告",
|
||||
"Anonymous usage report format has changed. Would you like to move to the new format?": "匿名使用情況的報告格式已經變更。是否要遷移到新的格式?",
|
||||
@@ -436,6 +437,10 @@
|
||||
"full documentation": "完整文檔",
|
||||
"items": "條目",
|
||||
"seconds": "秒",
|
||||
"theme-name-black": "Black",
|
||||
"theme-name-dark": "Dark",
|
||||
"theme-name-default": "Default",
|
||||
"theme-name-light": "Light",
|
||||
"{%device%} wants to share folder \"{%folder%}\".": "{{device}} 想將 「{{folder}}」 文件夾共享給您。",
|
||||
"{%device%} wants to share folder \"{%folderlabel%}\" ({%folder%}).": "{{device}} 想要共享 \"{{folderlabel}}\" ({{folder}}) 文件夾給您。",
|
||||
"{%reintroducer%} might reintroduce this device.": "{{reintroducer}} 可能會重新引入此設備。"
|
||||
|
||||
@@ -22,6 +22,7 @@
|
||||
"Allow Anonymous Usage Reporting?": "允許回報匿名數據?",
|
||||
"Allowed Networks": "允許的網路",
|
||||
"Alphabetic": "字母順序",
|
||||
"Altered by ignoring deletes.": "Altered by ignoring deletes.",
|
||||
"An external command handles the versioning. It has to remove the file from the shared folder. If the path to the application contains spaces, it should be quoted.": "外部指令接管了版本控制。它必須將檔案自分享資料夾中移除。如果應用程式的路徑包含了空格,則必須使用雙引號刮起。",
|
||||
"Anonymous Usage Reporting": "匿名數據回報",
|
||||
"Anonymous usage report format has changed. Would you like to move to the new format?": "匿名數據回報格式已經變更,想要移至新格式嗎?",
|
||||
@@ -436,6 +437,10 @@
|
||||
"full documentation": "完整說明文件",
|
||||
"items": "個項目",
|
||||
"seconds": "秒",
|
||||
"theme-name-black": "Black",
|
||||
"theme-name-dark": "Dark",
|
||||
"theme-name-default": "Default",
|
||||
"theme-name-light": "Light",
|
||||
"{%device%} wants to share folder \"{%folder%}\".": "{{device}} 想要共享資料夾 \"{{folder}}\"。",
|
||||
"{%device%} wants to share folder \"{%folderlabel%}\" ({%folder%}).": "{{device}} 想要共享資料夾 \"{{folderlabel}}\" ({{folder}})。",
|
||||
"{%reintroducer%} might reintroduce this device.": "{{reintroducer}} 可能會重新引入此裝置。"
|
||||
|
||||
@@ -1 +1 @@
|
||||
var langPrettyprint = {"bg":"Bulgarian","ca@valencia":"Catalan (Valencian)","cs":"Czech","da":"Danish","de":"German","el":"Greek","en":"English","en-AU":"English (Australia)","en-GB":"English (United Kingdom)","eo":"Esperanto","es":"Spanish","es-ES":"Spanish (Spain)","eu":"Basque","fi":"Finnish","fr":"French","fy":"Western Frisian","hu":"Hungarian","id":"Indonesian","it":"Italian","ja":"Japanese","ko-KR":"Korean (Korea)","lt":"Lithuanian","nb":"Norwegian Bokmål","nl":"Dutch","pl":"Polish","pt-BR":"Portuguese (Brazil)","pt-PT":"Portuguese (Portugal)","ro-RO":"Romanian (Romania)","ru":"Russian","sk":"Slovak","sv":"Swedish","tr":"Turkish","uk":"Ukrainian","zh-CN":"Chinese (China)","zh-HK":"Chinese (Hong Kong)","zh-TW":"Chinese (Taiwan)"}
|
||||
var langPrettyprint = {"bg":"Bulgarian","ca@valencia":"Catalan (Valencian)","cs":"Czech","da":"Danish","de":"German","el":"Greek","en":"English","en-AU":"English (Australia)","en-GB":"English (United Kingdom)","eo":"Esperanto","es":"Spanish","es-ES":"Spanish (Spain)","eu":"Basque","fi":"Finnish","fr":"French","fy":"Western Frisian","hu":"Hungarian","id":"Indonesian","it":"Italian","ja":"Japanese","ko-KR":"Korean (Korea)","lt":"Lithuanian","nb":"Norwegian Bokmål","nl":"Dutch","pl":"Polish","pt-BR":"Portuguese (Brazil)","pt-PT":"Portuguese (Portugal)","ro-RO":"Romanian (Romania)","ru":"Russian","sk":"Slovak","sl":"Slovenian","sv":"Swedish","tr":"Turkish","uk":"Ukrainian","zh-CN":"Chinese (China)","zh-HK":"Chinese (Hong Kong)","zh-TW":"Chinese (Taiwan)"}
|
||||
|
||||
@@ -1 +1 @@
|
||||
var validLangs = ["bg","ca@valencia","cs","da","de","el","en","en-AU","en-GB","eo","es","es-ES","eu","fi","fr","fy","hu","id","it","ja","ko-KR","lt","nb","nl","pl","pt-BR","pt-PT","ro-RO","ru","sk","sv","tr","uk","zh-CN","zh-HK","zh-TW"]
|
||||
var validLangs = ["bg","ca@valencia","cs","da","de","el","en","en-AU","en-GB","eo","es","es-ES","eu","fi","fr","fy","hu","id","it","ja","ko-KR","lt","nb","nl","pl","pt-BR","pt-PT","ro-RO","ru","sk","sl","sv","tr","uk","zh-CN","zh-HK","zh-TW"]
|
||||
|
||||
@@ -428,6 +428,13 @@
|
||||
<div ng-if="model[folder.id].ignorePatterns">
|
||||
<a href="" ng-click="editFolderExisting(folder, '#folder-ignores')"><i class="small" translate>Reduced by ignore patterns</i></a>
|
||||
</div>
|
||||
<div ng-if="folder.ignoreDelete">
|
||||
<i class="small">
|
||||
<span translate style="white-space: normal;">Altered by ignoring deletes.</span>
|
||||
<br>
|
||||
<a href="https://docs.syncthing.net/advanced/folder-ignoredelete" target="_blank"><span class="fas fa-question-circle"></span> <span translate>Help</span></a>
|
||||
</i>
|
||||
</div>
|
||||
</td>
|
||||
</tr>
|
||||
<tr ng-if="model[folder.id].needTotalItems > 0">
|
||||
|
||||
@@ -19,7 +19,7 @@
|
||||
<h4 class="text-center" translate>The Syncthing Authors</h4>
|
||||
<div class="row">
|
||||
<div class="col-md-12" id="contributor-list">
|
||||
Jakob Borg, Audrius Butkevicius, Jesse Lucas, Simon Frei, Alexander Graf, Alexandre Viau, Anderson Mesquita, André Colomb, Antony Male, Ben Schulz, Caleb Callaway, Daniel Harte, Evgeny Kuznetsov, Lars K.W. Gohlke, Lode Hoste, Michael Ploujnikov, Nate Morrison, Philippe Schommers, Ryan Sullivan, Sergey Mishin, Stefan Tatschner, Tomasz Wilczyński, Wulf Weich, dependabot-preview[bot], greatroar, Aaron Bieber, Adam Piggott, Adel Qalieh, Alan Pope, Alberto Donato, Alessandro G., Alex Lindeman, Alex Xu, Aman Gupta, Andrew Dunham, Andrew Rabert, Andrey D, Anjan Momi, Antoine Lamielle, Anur, Aranjedeath, Arkadiusz Tymiński, Arthur Axel fREW Schmidt, Artur Zubilewicz, Aurélien Rainone, BAHADIR YILMAZ, Bart De Vries, Ben Curthoys, Ben Shepherd, Ben Sidhom, Benedikt Heine, Benedikt Morbach, Benjamin Nater, Benno Fünfstück, Benny Ng, Boqin Qin, Boris Rybalkin, Brandon Philips, Brendan Long, Brian R. Becker, Carsten Hagemann, Cathryne Linenweaver, Cedric Staniewski, Chih-Hsuan Yen, Choongkyu, Chris Howie, Chris Joel, Chris Tonkinson, Christian Prescott, Colin Kennedy, Cromefire_, Cyprien Devillez, Dale Visser, Dan, Daniel Bergmann, Daniel Martí, Darshil Chanpura, David Rimmer, Denis A., Dennis Wilson, Dmitry Saveliev, Domenic Horner, Dominik Heidler, Elias Jarlebring, Elliot Huffman, Emil Hessman, Eric Lesiuta, Erik Meitner, Federico Castagnini, Felix Ableitner, Felix Lampe, Felix Unterpaintner, Francois-Xavier Gsell, Frank Isemann, Gahl Saraf, Gilli Sigurdsson, Gleb Sinyavskiy, Graham Miln, Han Boetes, HansK-p, Harrison Jones, Heiko Zuerker, Hugo Locurcio, Iain Barnett, Ian Johnson, Ikko Ashimine, Ilya Brin, Iskander Sharipov, Jaakko Hannikainen, Jacek Szafarkiewicz, Jack Croft, Jacob, Jake Peterson, James Patterson, Jaroslav Lichtblau, Jaroslav Malec, Jaya Chithra, Jens Diemer, Jerry Jacobs, Jochen Voss, Johan Andersson, Johan Vromans, John Rinehart, Jonas Thelemann, Jonathan, Jonathan Cross, Jonta, Jose Manuel Delicado, Jörg Thalheim, Jędrzej Kula, Kalle Laine, Karol Różycki, Keith Turner, Kelong Cong, Ken'ichi Kamada, Kevin Allen, Kevin Bushiri, Kevin White, Jr., Kurt Fitzner, Lars Lehtonen, Laurent Arnoud, Laurent Etiemble, Leo Arias, Liu Siyuan, Lord Landon Agahnim, Lukas Lihotzki, Majed Abdulaziz, Marc Laporte, Marc Pujol, Marcin Dziadus, Marcus Legendre, Mario Majila, Mark Pulford, Mateusz Naściszewski, Mateusz Ż, Matic Potočnik, Matt Burke, Matt Robenolt, Matteo Ruina, Maurizio Tomasi, Max, Max Schulze, MaximAL, Maxime Thirouin, MichaIng, Michael Jephcote, Michael Rienstra, Michael Tilli, Mike Boone, MikeLund, MikolajTwarog, Mingxuan Lin, Nicholas Rishel, Nico Stapelbroek, Nicolas Braud-Santoni, Nicolas Perraut, Niels Peter Roest, Nils Jakobi, NinoM4ster, Nitroretro, NoLooseEnds, Oliver Freyermuth, Otiel, Oyebanji Jacob Mayowa, Pablo, Pascal Jungblut, Paul Brit, Pawel Palenica, Paweł Rozlach, Peter Badida, Peter Dave Hello, Peter Hoeg, Peter Marquardt, Phani Rithvij, Phil Davis, Phill Luby, Pier Paolo Ramon, Piotr Bejda, Pramodh KP, Quentin Hibon, Rahmi Pruitt, Richard Hartmann, Robert Carosi, Roberto Santalla, Robin Schoonover, Roman Zaynetdinov, Ross Smith II, Ruslan Yevdokymov, Sacheendra Talluri, Scott Klupfel, Shaarad Dalvi, Simon Mwepu, Sly_tom_cat, Stefan Kuntz, Steven Eckhoff, Suhas Gundimeda, Taylor Khan, Thomas Hipp, Tim Abell, Tim Howes, Tobias Klauser, Tobias Nygren, Tobias Tom, Tom Jakubowski, Tommy Thorn, Tully Robinson, Tyler Brazier, Tyler Kropp, Unrud, Veeti Paananen, Victor Buinsky, Vil Brekin, Vladimir Rusinov, William A. Kennington III, Xavier O., Yannic A., andresvia, andyleap, boomsquared, bt90, chenrui, chucic, deepsource-autofix[bot], dependabot[bot], derekriemer, desbma, georgespatton, ghjklw, janost, jaseg, jelle van der Waa, jtagcat, klemens, marco-m, mclang, mv1005, otbutz, overkill, perewa, rubenbe, wangguoliang, wouter bolsterlee, xarx00, xjtdy888, 佛跳墙
|
||||
Aaron Bieber, Adam Piggott, Adel Qalieh, Alan Pope, Alberto Donato, Alessandro G., Alex Lindeman, Alex Xu, Alexander Graf, Alexandre Viau, Aman Gupta, Anderson Mesquita, Andrew Dunham, Andrew Rabert, Andrey D, André Colomb, Anjan Momi, Antoine Lamielle, Antony Male, Anur, Aranjedeath, Arkadiusz Tymiński, Arthur Axel fREW Schmidt, Artur Zubilewicz, Audrius Butkevicius, Aurélien Rainone, BAHADIR YILMAZ, Bart De Vries, Ben Curthoys, Ben Schulz, Ben Shepherd, Ben Sidhom, Benedikt Heine, Benedikt Morbach, Benjamin Nater, Benno Fünfstück, Benny Ng, Boqin Qin, Boris Rybalkin, Brandon Philips, Brendan Long, Brian R. Becker, Caleb Callaway, Carsten Hagemann, Cathryne Linenweaver, Cedric Staniewski, Chih-Hsuan Yen, Choongkyu, Chris Howie, Chris Joel, Chris Tonkinson, Christian Prescott, Colin Kennedy, Cromefire_, Cyprien Devillez, Dale Visser, Dan, Daniel Bergmann, Daniel Harte, Daniel Martí, Darshil Chanpura, David Rimmer, Denis A., Dennis Wilson, Dmitry Saveliev, Domenic Horner, Dominik Heidler, Elias Jarlebring, Elliot Huffman, Emil Hessman, Eric Lesiuta, Erik Meitner, Evgeny Kuznetsov, Federico Castagnini, Felix Ableitner, Felix Lampe, Felix Unterpaintner, Francois-Xavier Gsell, Frank Isemann, Gahl Saraf, Gilli Sigurdsson, Gleb Sinyavskiy, Graham Miln, Han Boetes, HansK-p, Harrison Jones, Heiko Zuerker, Hugo Locurcio, Iain Barnett, Ian Johnson, Ikko Ashimine, Ilya Brin, Iskander Sharipov, Jaakko Hannikainen, Jacek Szafarkiewicz, Jack Croft, Jacob, Jake Peterson, Jakob Borg, James Patterson, Jaroslav Lichtblau, Jaroslav Malec, Jaya Chithra, Jens Diemer, Jerry Jacobs, Jesse Lucas, Jochen Voss, Johan Andersson, Johan Vromans, John Rinehart, Jonas Thelemann, Jonathan, Jonathan Cross, Jonta, Jose Manuel Delicado, Jörg Thalheim, Jędrzej Kula, Kalle Laine, Karol Różycki, Keith Turner, Kelong Cong, Ken'ichi Kamada, Kevin Allen, Kevin Bushiri, Kevin White, Jr., Kurt Fitzner, Lars K.W. Gohlke, Lars Lehtonen, Laurent Arnoud, Laurent Etiemble, Leo Arias, Liu Siyuan, Lode Hoste, Lord Landon Agahnim, Lukas Lihotzki, Majed Abdulaziz, Marc Laporte, Marc Pujol, Marcin Dziadus, Marcus Legendre, Mario Majila, Mark Pulford, Mateusz Naściszewski, Mateusz Ż, Matic Potočnik, Matt Burke, Matt Robenolt, Matteo Ruina, Maurizio Tomasi, Max, Max Schulze, MaximAL, Maxime Thirouin, MichaIng, Michael Jephcote, Michael Ploujnikov, Michael Rienstra, Michael Tilli, Mike Boone, MikeLund, MikolajTwarog, Mingxuan Lin, Nate Morrison, Nicholas Rishel, Nico Stapelbroek, Nicolas Braud-Santoni, Nicolas Perraut, Niels Peter Roest, Nils Jakobi, NinoM4ster, Nitroretro, NoLooseEnds, Oliver Freyermuth, Otiel, Oyebanji Jacob Mayowa, Pablo, Pascal Jungblut, Paul Brit, Pawel Palenica, Paweł Rozlach, Peter Badida, Peter Dave Hello, Peter Hoeg, Peter Marquardt, Phani Rithvij, Phil Davis, Philippe Schommers, Phill Luby, Pier Paolo Ramon, Piotr Bejda, Pramodh KP, Quentin Hibon, Rahmi Pruitt, Richard Hartmann, Robert Carosi, Roberto Santalla, Robin Schoonover, Roman Zaynetdinov, Ross Smith II, Ruslan Yevdokymov, Ryan Sullivan, Sacheendra Talluri, Scott Klupfel, Sergey Mishin, Shaarad Dalvi, Simon Frei, Simon Mwepu, Sly_tom_cat, Stefan Kuntz, Stefan Tatschner, Steven Eckhoff, Suhas Gundimeda, Taylor Khan, Thomas Hipp, Tim Abell, Tim Howes, Tobias Klauser, Tobias Nygren, Tobias Tom, Tom Jakubowski, Tomasz Wilczyński, Tommy Thorn, Tully Robinson, Tyler Brazier, Tyler Kropp, Unrud, Veeti Paananen, Victor Buinsky, Vil Brekin, Vladimir Rusinov, William A. Kennington III, Wulf Weich, Xavier O., Yannic A., andresvia, andyleap, boomsquared, bt90, chenrui, chucic, deepsource-autofix[bot], dependabot-preview[bot], dependabot[bot], derekriemer, desbma, georgespatton, ghjklw, greatroar, janost, jaseg, jelle van der Waa, jtagcat, klemens, marco-m, mclang, mv1005, otbutz, overkill, perewa, rubenbe, wangguoliang, wouter bolsterlee, xarx00, xjtdy888, 佛跳墙
|
||||
</div>
|
||||
</div>
|
||||
<hr />
|
||||
@@ -37,7 +37,7 @@ Jakob Borg, Audrius Butkevicius, Jesse Lucas, Simon Frei, Alexander Graf, Alexan
|
||||
<li><a href="https://github.com/AudriusButkevicius/go-nat-pmp">AudriusButkevicius/go-nat-pmp</a>, Copyright © 2013 John Howard Palevich.</li>
|
||||
<li><a href="https://github.com/AudriusButkevicius/recli">AudriusButkevicius/recli</a>, Copyright © 2019 Audrius Butkevicius.</li>
|
||||
<li><a href="https://github.com/beorn7/perks">beorn7/perks</a>, Copyright © 2013 Blake Mizerany.</li>
|
||||
<li><a href="https://github.com/bkaradzic/go-lz4">bkaradzic/go-lz4</a>, Copyright © 2011-2012 Branimir Karadzic, 2013 Damian Gryski.</li>
|
||||
<li><a href="https://github.com/pierrec/lz4">pierrec/lz4</a>, Copyright © 2015 Pierre Curto.</li>
|
||||
<li><a href="https://github.com/calmh/du">calmh/du</a>, Public domain.</li>
|
||||
<li><a href="https://github.com/calmh/xdr">calmh/xdr</a>, Copyright © 2014 Jakob Borg.</li>
|
||||
<li><a href="https://github.com/chmduquesne/rollinghash">chmduquesne/rollinghash</a>, Copyright © 2015 Christophe-Marie Duquesne.</li>
|
||||
|
||||
@@ -58,6 +58,9 @@ angular.module('syncthing.core')
|
||||
text: '',
|
||||
error: null,
|
||||
disabled: false,
|
||||
originalLines: [],
|
||||
defaultLines: [],
|
||||
saved: false,
|
||||
};
|
||||
resetRemoteNeed();
|
||||
|
||||
@@ -396,6 +399,10 @@ angular.module('syncthing.core')
|
||||
});
|
||||
|
||||
$scope.$on(Events.FOLDER_ERRORS, function (event, arg) {
|
||||
if (!$scope.model[arg.data.folder]) {
|
||||
console.log("Dropping folder errors event for unknown folder", arg.data.folder)
|
||||
return;
|
||||
}
|
||||
$scope.model[arg.data.folder].errors = arg.data.errors.length;
|
||||
});
|
||||
|
||||
@@ -409,8 +416,14 @@ angular.module('syncthing.core')
|
||||
console.log("FolderScanProgress", data);
|
||||
});
|
||||
|
||||
// May be called through .error with the presented arguments, or through
|
||||
// .catch with the http response object containing the same arguments.
|
||||
$scope.emitHTTPError = function (data, status, headers, config) {
|
||||
$scope.$emit('HTTPError', { data: data, status: status, headers: headers, config: config });
|
||||
var out = data;
|
||||
if (data && !data.data) {
|
||||
out = { data: data, status: status, headers: headers, config: config };
|
||||
}
|
||||
$scope.$emit('HTTPError', out);
|
||||
};
|
||||
|
||||
var debouncedFuncs = {};
|
||||
@@ -741,7 +754,7 @@ angular.module('syncthing.core')
|
||||
}
|
||||
|
||||
function shouldSetDefaultFolderPath() {
|
||||
return $scope.config.defaults.folder.path && !$scope.editingExisting && $scope.folderEditor.folderPath.$pristine && !$scope.editingDefaults;
|
||||
return $scope.config.defaults.folder.path && $scope.folderEditor.folderPath.$pristine && $scope.currentFolder._editing == "add";
|
||||
}
|
||||
|
||||
function resetRemoteNeed() {
|
||||
@@ -750,7 +763,6 @@ angular.module('syncthing.core')
|
||||
$scope.remoteNeedDevice = undefined;
|
||||
}
|
||||
|
||||
|
||||
function setDefaultTheme() {
|
||||
if (!document.getElementById("fallback-theme-css")) {
|
||||
|
||||
@@ -767,13 +779,9 @@ angular.module('syncthing.core')
|
||||
}
|
||||
}
|
||||
|
||||
function saveIgnores(ignores, cb) {
|
||||
$http.post(urlbase + '/db/ignores?folder=' + encodeURIComponent($scope.currentFolder.id), {
|
||||
function saveIgnores(ignores) {
|
||||
return $http.post(urlbase + '/db/ignores?folder=' + encodeURIComponent($scope.currentFolder.id), {
|
||||
ignore: ignores
|
||||
}).success(function () {
|
||||
if (cb) {
|
||||
cb();
|
||||
}
|
||||
});
|
||||
};
|
||||
|
||||
@@ -1268,8 +1276,9 @@ angular.module('syncthing.core')
|
||||
if (cfg) {
|
||||
cfg.paused = pause;
|
||||
$scope.config.folders = folderList($scope.folders);
|
||||
$scope.saveConfig();
|
||||
return $scope.saveConfig();
|
||||
}
|
||||
return $q.when();
|
||||
};
|
||||
|
||||
$scope.showListenerStatus = function () {
|
||||
@@ -1421,18 +1430,14 @@ angular.module('syncthing.core')
|
||||
});
|
||||
};
|
||||
|
||||
$scope.saveConfig = function (callback) {
|
||||
$scope.saveConfig = function () {
|
||||
var cfg = JSON.stringify($scope.config);
|
||||
var opts = {
|
||||
headers: {
|
||||
'Content-Type': 'application/json'
|
||||
}
|
||||
};
|
||||
$http.put(urlbase + '/config', cfg, opts).finally(refreshConfig).then(function() {
|
||||
if (callback) {
|
||||
callback();
|
||||
}
|
||||
}, $scope.emitHTTPError);
|
||||
return $http.put(urlbase + '/config', cfg, opts).finally(refreshConfig).catch($scope.emitHTTPError);
|
||||
};
|
||||
|
||||
$scope.urVersions = function () {
|
||||
@@ -1512,7 +1517,7 @@ angular.module('syncthing.core')
|
||||
// here as well...
|
||||
$scope.devices = deviceMap($scope.config.devices);
|
||||
|
||||
$scope.saveConfig(function () {
|
||||
$scope.saveConfig().then(function () {
|
||||
if (themeChanged) {
|
||||
document.location.reload(true);
|
||||
}
|
||||
@@ -1578,11 +1583,11 @@ angular.module('syncthing.core')
|
||||
}
|
||||
|
||||
$scope.editDeviceModalTitle = function() {
|
||||
if ($scope.editingDefaults) {
|
||||
if ($scope.editingDeviceDefaults()) {
|
||||
return $translate.instant("Edit Device Defaults");
|
||||
}
|
||||
var title = '';
|
||||
if ($scope.editingExisting) {
|
||||
if ($scope.editingDeviceExisting()) {
|
||||
title += $translate.instant("Edit Device");
|
||||
} else {
|
||||
title += $translate.instant("Add Device");
|
||||
@@ -1595,16 +1600,23 @@ angular.module('syncthing.core')
|
||||
};
|
||||
|
||||
$scope.editDeviceModalIcon = function() {
|
||||
if ($scope.editingDefaults || $scope.editingExisting) {
|
||||
if ($scope.has(["existing", "defaults"], $scope.currentDevice._editing)) {
|
||||
return 'fas fa-pencil-alt';
|
||||
}
|
||||
return 'fas fa-desktop';
|
||||
};
|
||||
|
||||
$scope.editingDeviceDefaults = function() {
|
||||
return $scope.currentDevice._editing == 'defaults';
|
||||
}
|
||||
|
||||
$scope.editingDeviceExisting = function() {
|
||||
return $scope.currentDevice._editing == 'existing';
|
||||
}
|
||||
|
||||
$scope.editDeviceExisting = function (deviceCfg) {
|
||||
$scope.currentDevice = $.extend({}, deviceCfg);
|
||||
$scope.editingExisting = true;
|
||||
$scope.editingDefaults = false;
|
||||
$scope.currentDevice._editing = "existing";
|
||||
$scope.willBeReintroducedBy = undefined;
|
||||
if (deviceCfg.introducedBy) {
|
||||
var introducerDevice = $scope.devices[deviceCfg.introducedBy];
|
||||
@@ -1633,7 +1645,7 @@ angular.module('syncthing.core')
|
||||
$scope.editDeviceDefaults = function () {
|
||||
$http.get(urlbase + '/config/defaults/device').then(function (p) {
|
||||
$scope.currentDevice = p.data;
|
||||
$scope.editingDefaults = true;
|
||||
$scope.currentDevice._editing = "defaults";
|
||||
editDeviceModal();
|
||||
}, $scope.emitHTTPError);
|
||||
};
|
||||
@@ -1671,8 +1683,7 @@ angular.module('syncthing.core')
|
||||
$scope.currentDevice = p.data;
|
||||
$scope.currentDevice.name = name;
|
||||
$scope.currentDevice.deviceID = deviceID;
|
||||
$scope.editingExisting = false;
|
||||
$scope.editingDefaults = false;
|
||||
$scope.currentDevice._editing = "add";
|
||||
initShareEditing('device');
|
||||
$scope.currentSharing.unrelated = $scope.folderList();
|
||||
editDeviceModal();
|
||||
@@ -1682,7 +1693,7 @@ angular.module('syncthing.core')
|
||||
|
||||
$scope.deleteDevice = function () {
|
||||
$('#editDevice').modal('hide');
|
||||
if (!$scope.editingExisting) {
|
||||
if ($scope.currentDevice._editing != "existing") {
|
||||
return;
|
||||
}
|
||||
|
||||
@@ -1705,13 +1716,13 @@ angular.module('syncthing.core')
|
||||
return x.trim();
|
||||
});
|
||||
delete $scope.currentDevice._addressesStr;
|
||||
if ($scope.editingDefaults) {
|
||||
if ($scope.currentDevice._editing == "defaults") {
|
||||
$scope.config.defaults.device = $scope.currentDevice;
|
||||
} else {
|
||||
setDeviceConfig();
|
||||
}
|
||||
delete $scope.currentSharing;
|
||||
delete $scope.currentDevice;
|
||||
$scope.currentDevice = {};
|
||||
$scope.saveConfig();
|
||||
};
|
||||
|
||||
@@ -1955,20 +1966,34 @@ angular.module('syncthing.core')
|
||||
$('#folder-ignores textarea').focus();
|
||||
}
|
||||
}).one('hidden.bs.modal', function () {
|
||||
window.location.hash = "";
|
||||
$scope.currentFolder = {};
|
||||
var p = $q.when();
|
||||
// If the modal was closed default patterns should still apply
|
||||
if ($scope.currentFolder._editing == "add-ignores" && !$scope.ignores.saved && $scope.ignores.defaultLines) {
|
||||
p = saveFolderAddIgnores($scope.currentFolder.id, true);
|
||||
}
|
||||
p.then(function () {
|
||||
window.location.hash = "";
|
||||
$scope.currentFolder = {};
|
||||
$scope.ignores = {};
|
||||
});
|
||||
});
|
||||
};
|
||||
|
||||
$scope.editFolderModalTitle = function() {
|
||||
if ($scope.editingDefaults) {
|
||||
if ($scope.editingFolderDefaults()) {
|
||||
return $translate.instant("Edit Folder Defaults");
|
||||
}
|
||||
var title = '';
|
||||
if ($scope.editingExisting) {
|
||||
title += $translate.instant("Edit Folder");
|
||||
} else {
|
||||
title += $translate.instant("Add Folder");
|
||||
switch ($scope.currentFolder._editing) {
|
||||
case "existing":
|
||||
title = $translate.instant("Edit Folder");
|
||||
break;
|
||||
case "add":
|
||||
title = $translate.instant("Add Folder");
|
||||
break;
|
||||
case "add-ignores":
|
||||
title = $translate.instant("Set Ignores on Added Folder");
|
||||
break;
|
||||
}
|
||||
if ($scope.currentFolder.id !== '') {
|
||||
title += ' (' + $scope.folderLabel($scope.currentFolder.id) + ')';
|
||||
@@ -1977,12 +2002,20 @@ angular.module('syncthing.core')
|
||||
};
|
||||
|
||||
$scope.editFolderModalIcon = function() {
|
||||
if ($scope.editingDefaults || $scope.editingExisting) {
|
||||
if ($scope.has(["existing", "defaults"], $scope.currentFolder._editing)) {
|
||||
return 'fas fa-pencil-alt';
|
||||
}
|
||||
return 'fas fa-folder';
|
||||
};
|
||||
|
||||
$scope.editingFolderDefaults = function() {
|
||||
return $scope.currentFolder._editing == 'defaults';
|
||||
}
|
||||
|
||||
$scope.editingFolderExisting = function() {
|
||||
return $scope.currentFolder._editing == 'existing';
|
||||
}
|
||||
|
||||
function editFolder(initialTab) {
|
||||
if ($scope.currentFolder.path.length > 1 && $scope.currentFolder.path.slice(-1) === $scope.system.pathSeparator) {
|
||||
$scope.currentFolder.path = $scope.currentFolder.path.slice(0, -1);
|
||||
@@ -2033,39 +2066,60 @@ angular.module('syncthing.core')
|
||||
};
|
||||
|
||||
$scope.editFolderExisting = function(folderCfg, initialTab) {
|
||||
$scope.editingExisting = true;
|
||||
$scope.editingDefaults = false;
|
||||
$scope.currentFolder = angular.copy(folderCfg);
|
||||
|
||||
$scope.ignores.text = 'Loading...';
|
||||
$scope.ignores.error = null;
|
||||
$scope.ignores.disabled = true;
|
||||
$http.get(urlbase + '/db/ignores?folder=' + encodeURIComponent($scope.currentFolder.id))
|
||||
.success(function (data) {
|
||||
$scope.currentFolder.ignores = data.ignore || [];
|
||||
$scope.ignores.text = $scope.currentFolder.ignores.join('\n');
|
||||
$scope.ignores.error = data.error;
|
||||
$scope.ignores.disabled = false;
|
||||
})
|
||||
.error(function (err) {
|
||||
$scope.ignores.text = $translate.instant("Failed to load ignore patterns.");
|
||||
$scope.emitHTTPError(err);
|
||||
});
|
||||
|
||||
$scope.currentFolder._editing = "existing";
|
||||
editFolderLoadIgnores();
|
||||
editFolder(initialTab);
|
||||
};
|
||||
|
||||
$scope.editFolderDefaults = function() {
|
||||
$http.get(urlbase + '/config/defaults/folder')
|
||||
.success(function (data) {
|
||||
$scope.currentFolder = data;
|
||||
$scope.editingExisting = false;
|
||||
$scope.editingDefaults = true;
|
||||
editFolder();
|
||||
})
|
||||
.error($scope.emitHTTPError);
|
||||
function editFolderLoadingIgnores() {
|
||||
$scope.ignores.text = 'Loading...';
|
||||
$scope.ignores.error = null;
|
||||
$scope.ignores.disabled = true;
|
||||
}
|
||||
|
||||
function editFolderGetIgnores() {
|
||||
return $http.get(urlbase + '/db/ignores?folder=' + encodeURIComponent($scope.currentFolder.id))
|
||||
.then(function(r) {
|
||||
return r.data;
|
||||
}, function (response) {
|
||||
$scope.ignores.text = $translate.instant("Failed to load ignore patterns.");
|
||||
return $q.reject(response);
|
||||
});
|
||||
};
|
||||
|
||||
function editFolderLoadIgnores() {
|
||||
editFolderLoadingIgnores();
|
||||
return editFolderGetIgnores().then(editFolderInitIgnores, $scope.emitHTTPError);
|
||||
}
|
||||
|
||||
$scope.editFolderDefaults = function() {
|
||||
$q.all([
|
||||
$http.get(urlbase + '/config/defaults/folder').then(function (response) {
|
||||
$scope.currentFolder = response.data;
|
||||
$scope.currentFolder._editing = "defaults";
|
||||
}),
|
||||
getDefaultIgnores().then(editFolderInitIgnores),
|
||||
]).then(editFolder, $scope.emitHTTPError);
|
||||
};
|
||||
|
||||
function getDefaultIgnores() {
|
||||
return $http.get(urlbase + '/config/defaults/ignores').then(function (r) {
|
||||
return r.data.lines;
|
||||
});
|
||||
}
|
||||
|
||||
function editFolderInitIgnores(data) {
|
||||
$scope.ignores.originalLines = data.ignore || [];
|
||||
setIgnoresText(data.ignore);
|
||||
$scope.ignores.error = data.error;
|
||||
$scope.ignores.disabled = false;
|
||||
}
|
||||
|
||||
function setIgnoresText(lines) {
|
||||
$scope.ignores.text = lines ? lines.join('\n') : "";
|
||||
}
|
||||
|
||||
$scope.selectAllSharedDevices = function (state) {
|
||||
var devices = $scope.currentSharing.shared;
|
||||
for (var i = 0; i < devices.length; i++) {
|
||||
@@ -2093,9 +2147,6 @@ angular.module('syncthing.core')
|
||||
|
||||
$scope.addFolderAndShare = function (folderID, pendingFolder, device) {
|
||||
addFolderInit(folderID).then(function() {
|
||||
$scope.currentFolder.viewFlags = {
|
||||
importFromOtherDevice: true
|
||||
};
|
||||
$scope.currentSharing.selected[device] = true;
|
||||
$scope.currentFolder.label = pendingFolder.offeredBy[device].label;
|
||||
for (var k in pendingFolder.offeredBy) {
|
||||
@@ -2110,19 +2161,16 @@ angular.module('syncthing.core')
|
||||
};
|
||||
|
||||
function addFolderInit(folderID) {
|
||||
$scope.editingExisting = false;
|
||||
$scope.editingDefaults = false;
|
||||
return $http.get(urlbase + '/config/defaults/folder').then(function(p) {
|
||||
$scope.currentFolder = p.data;
|
||||
return $http.get(urlbase + '/config/defaults/folder').then(function (response) {
|
||||
$scope.currentFolder = response.data;
|
||||
$scope.currentFolder._editing = "add";
|
||||
$scope.currentFolder.id = folderID;
|
||||
|
||||
initShareEditing('folder');
|
||||
$scope.currentSharing.unrelated = $scope.currentSharing.unrelated.concat($scope.currentSharing.shared);
|
||||
$scope.currentSharing.shared = [];
|
||||
|
||||
$scope.ignores.text = '';
|
||||
$scope.ignores.error = null;
|
||||
$scope.ignores.disabled = false;
|
||||
// Ignores don't need to be initialized here, as that happens in
|
||||
// a second step if the user indicates in the creation modal
|
||||
// that they want to set ignores
|
||||
}, $scope.emitHTTPError);
|
||||
}
|
||||
|
||||
@@ -2142,7 +2190,14 @@ angular.module('syncthing.core')
|
||||
};
|
||||
|
||||
$scope.saveFolder = function () {
|
||||
$('#editFolder').modal('hide');
|
||||
if ($scope.currentFolder._editing == "add-ignores") {
|
||||
// On modal being hidden without clicking save, the defaults will be saved.
|
||||
$scope.ignores.saved = true;
|
||||
saveFolderAddIgnores($scope.currentFolder.id);
|
||||
hideFolderModal();
|
||||
return;
|
||||
}
|
||||
|
||||
var folderCfg = angular.copy($scope.currentFolder);
|
||||
$scope.currentSharing.selected[$scope.myID] = true;
|
||||
var newDevices = [];
|
||||
@@ -2191,44 +2246,88 @@ angular.module('syncthing.core')
|
||||
}
|
||||
delete folderCfg._guiVersioning;
|
||||
|
||||
if ($scope.editingDefaults) {
|
||||
if ($scope.currentFolder._editing == "defaults") {
|
||||
hideFolderModal();
|
||||
$scope.config.defaults.ignores.lines = ignoresArray();
|
||||
$scope.config.defaults.folder = folderCfg;
|
||||
$scope.saveConfig();
|
||||
} else {
|
||||
saveFolderExisting(folderCfg);
|
||||
return;
|
||||
}
|
||||
|
||||
// This is a new folder where ignores should apply before it first starts.
|
||||
if ($scope.currentFolder._addIgnores) {
|
||||
folderCfg.paused = true;
|
||||
}
|
||||
$scope.folders[folderCfg.id] = folderCfg;
|
||||
$scope.config.folders = folderList($scope.folders);
|
||||
|
||||
if ($scope.currentFolder._editing == "existing") {
|
||||
hideFolderModal();
|
||||
saveFolderIgnoresExisting();
|
||||
$scope.saveConfig();
|
||||
return;
|
||||
}
|
||||
|
||||
// No ignores to be set on the new folder, save directly.
|
||||
if (!$scope.currentFolder._addIgnores) {
|
||||
hideFolderModal();
|
||||
$scope.saveConfig();
|
||||
return;
|
||||
}
|
||||
|
||||
// Add folder (paused), load existing ignores and if there are none,
|
||||
// load default ignores, then let the user edit them.
|
||||
$scope.saveConfig().then(function() {
|
||||
editFolderLoadingIgnores();
|
||||
$scope.currentFolder._editing = "add-ignores";
|
||||
$('.nav-tabs a[href="#folder-ignores"]').tab('show');
|
||||
return editFolderGetIgnores();
|
||||
}).then(function(data) {
|
||||
// Error getting ignores -> leave error message.
|
||||
if (!data) {
|
||||
return;
|
||||
}
|
||||
if ((data.ignore && data.ignore.length > 0) || data.error) {
|
||||
editFolderInitIgnores(data);
|
||||
} else {
|
||||
getDefaultIgnores().then(function(lines) {
|
||||
setIgnoresText(lines);
|
||||
$scope.ignores.defaultLines = lines;
|
||||
$scope.ignores.disabled = false;
|
||||
});
|
||||
}
|
||||
}, $scope.emitHTTPError);
|
||||
};
|
||||
|
||||
function saveFolderExisting(folderCfg) {
|
||||
var ignoresLoaded = !$scope.ignores.disabled;
|
||||
function saveFolderIgnoresExisting() {
|
||||
if ($scope.ignores.disabled) {
|
||||
return;
|
||||
}
|
||||
var ignores = ignoresArray();
|
||||
|
||||
function arrayDiffers(a, b) {
|
||||
return !a !== !b || a.length !== b.length || a.some(function(v, i) { return v !== b[i]; });
|
||||
}
|
||||
if (arrayDiffers(ignores, $scope.ignores.originalLines)) {
|
||||
return saveIgnores(ignores);
|
||||
};
|
||||
}
|
||||
|
||||
function saveFolderAddIgnores(folderID, useDefault) {
|
||||
var ignores = useDefault ? $scope.ignores.defaultLines : ignoresArray();
|
||||
return saveIgnores(ignores).then(function () {
|
||||
return $scope.setFolderPause(folderID, $scope.currentFolder.paused);
|
||||
});
|
||||
};
|
||||
|
||||
function ignoresArray() {
|
||||
var ignores = $scope.ignores.text.split('\n');
|
||||
// Split always returns a minimum 1-length array even for no patterns
|
||||
if (ignores.length === 1 && ignores[0] === "") {
|
||||
ignores = [];
|
||||
}
|
||||
if (!$scope.editingExisting && ignores.length) {
|
||||
folderCfg.paused = true;
|
||||
};
|
||||
|
||||
$scope.folders[folderCfg.id] = folderCfg;
|
||||
$scope.config.folders = folderList($scope.folders);
|
||||
|
||||
function arrayEquals(a, b) {
|
||||
return a.length === b.length && a.every(function(v, i) { return v === b[i] });
|
||||
}
|
||||
|
||||
if (ignoresLoaded && $scope.editingExisting && !arrayEquals(ignores, folderCfg.ignores)) {
|
||||
saveIgnores(ignores);
|
||||
};
|
||||
|
||||
$scope.saveConfig(function () {
|
||||
if (!$scope.editingExisting && ignores.length) {
|
||||
saveIgnores(ignores, function () {
|
||||
$scope.setFolderPause(folderCfg.id, false);
|
||||
});
|
||||
}
|
||||
});
|
||||
};
|
||||
return ignores;
|
||||
}
|
||||
|
||||
$scope.ignoreFolder = function (device, folderID, offeringDevice) {
|
||||
var ignoredFolder = {
|
||||
@@ -2282,8 +2381,8 @@ angular.module('syncthing.core')
|
||||
};
|
||||
|
||||
$scope.deleteFolder = function (id) {
|
||||
$('#editFolder').modal('hide');
|
||||
if (!$scope.editingExisting) {
|
||||
hideFolderModal();
|
||||
if ($scope.currentFolder._editing != "existing") {
|
||||
return;
|
||||
}
|
||||
|
||||
@@ -2295,6 +2394,10 @@ angular.module('syncthing.core')
|
||||
$scope.saveConfig();
|
||||
};
|
||||
|
||||
function hideFolderModal() {
|
||||
$('#editFolder').modal('hide');
|
||||
}
|
||||
|
||||
function resetRestoreVersions() {
|
||||
$scope.restoreVersions = {
|
||||
folder: null,
|
||||
@@ -2808,7 +2911,7 @@ angular.module('syncthing.core')
|
||||
|
||||
$scope.themeName = function (theme) {
|
||||
var translation = $translate.instant("theme-name-" + theme);
|
||||
if (translation.startsWith("theme-name-")) {
|
||||
if (translation.indexOf("theme-name-") == 0) {
|
||||
// Fall back to simple Title Casing on missing translation
|
||||
translation = theme.toLowerCase().replace(/(?:^|\s)\S/g, function (a) {
|
||||
return a.toUpperCase();
|
||||
@@ -2839,6 +2942,10 @@ angular.module('syncthing.core')
|
||||
return Object.keys(dict).length;
|
||||
};
|
||||
|
||||
$scope.has = function (array, element) {
|
||||
return array.indexOf(element) >= 0;
|
||||
};
|
||||
|
||||
$scope.dismissNotification = function (id) {
|
||||
var idx = $scope.config.options.unackedNotificationIDs.indexOf(id);
|
||||
if (idx > -1) {
|
||||
|
||||
@@ -4,7 +4,7 @@ angular.module('syncthing.core')
|
||||
require: 'ngModel',
|
||||
link: function (scope, elm, attrs, ctrl) {
|
||||
ctrl.$parsers.unshift(function (viewValue) {
|
||||
if (scope.editingExisting) {
|
||||
if (scope.currentFolder._editing != "add") {
|
||||
// we shouldn't validate
|
||||
ctrl.$setValidity('uniqueFolder', true);
|
||||
} else if (scope.folders.hasOwnProperty(viewValue)) {
|
||||
|
||||
@@ -4,7 +4,7 @@ angular.module('syncthing.core')
|
||||
require: 'ngModel',
|
||||
link: function (scope, elm, attrs, ctrl) {
|
||||
ctrl.$parsers.unshift(function (viewValue) {
|
||||
if (scope.editingExisting) {
|
||||
if (scope.currentDevice._editing != "add") {
|
||||
// we shouldn't validate
|
||||
ctrl.$setValidity('validDeviceid', true);
|
||||
} else {
|
||||
|
||||
@@ -3,14 +3,14 @@
|
||||
<form role="form" name="deviceEditor">
|
||||
<ul class="nav nav-tabs" ng-init="loadFormIntoScope(deviceEditor)">
|
||||
<li class="active"><a data-toggle="tab" href="#device-general"><span class="fas fa-cog"></span> <span translate>General</span></a></li>
|
||||
<li ng-if="!editingDefaults"><a data-toggle="tab" href="#device-sharing"><span class="fas fa-share-alt"></span> <span translate>Sharing</span></a></li>
|
||||
<li ng-if="!editingDeviceDefaults()"><a data-toggle="tab" href="#device-sharing"><span class="fas fa-share-alt"></span> <span translate>Sharing</span></a></li>
|
||||
<li><a data-toggle="tab" href="#device-advanced"><span class="fas fa-cogs"></span> <span translate>Advanced</span></a></li>
|
||||
</ul>
|
||||
<div class="tab-content">
|
||||
<div id="device-general" class="tab-pane in active">
|
||||
<div ng-if="!editingDefaults" class="form-group" ng-class="{'has-error': deviceEditor.deviceID.$invalid && deviceEditor.deviceID.$dirty}" ng-init="loadFormIntoScope(deviceEditor)">
|
||||
<div ng-if="!editingDeviceDefaults()" class="form-group" ng-class="{'has-error': deviceEditor.deviceID.$invalid && deviceEditor.deviceID.$dirty}" ng-init="loadFormIntoScope(deviceEditor)">
|
||||
<label translate for="deviceID">Device ID</label>
|
||||
<div ng-if="!editingExisting">
|
||||
<div ng-if="!editingDeviceExisting()">
|
||||
<div class="input-group">
|
||||
<input name="deviceID" id="deviceID" class="form-control text-monospace" type="text" ng-model="currentDevice.deviceID" required="" valid-deviceid list="discovery-list" aria-required="true" />
|
||||
<div class="input-group-btn">
|
||||
@@ -40,7 +40,7 @@
|
||||
<span translate ng-if="deviceEditor.deviceID.$error.unique && deviceEditor.deviceID.$dirty">A device with that ID is already added.</span>
|
||||
</p>
|
||||
</div>
|
||||
<div ng-if="editingExisting" class="input-group">
|
||||
<div ng-if="editingDeviceExisting()" class="input-group">
|
||||
<div class="well well-sm text-monospace form-control" style="height: auto;" select-on-click>{{currentDevice.deviceID}}</div>
|
||||
<div class="input-group-btn">
|
||||
<button type="button" class="btn btn-default" data-toggle="modal" data-target="#idqr">
|
||||
@@ -56,7 +56,7 @@
|
||||
<p translate ng-if="currentDevice.deviceID != myID" class="help-block">Shown instead of Device ID in the cluster status. Will be updated to the name the device advertises if left empty.</p>
|
||||
</div>
|
||||
</div>
|
||||
<div ng-if="!editingDefaults" id="device-sharing" class="tab-pane">
|
||||
<div ng-if="!editingDeviceDefaults()" id="device-sharing" class="tab-pane">
|
||||
<div class="row">
|
||||
<div class="col-md-6">
|
||||
<div class="form-group">
|
||||
@@ -172,7 +172,7 @@
|
||||
<button type="button" class="btn btn-default btn-sm" data-dismiss="modal">
|
||||
<span class="fas fa-times"></span> <span translate>Close</span>
|
||||
</button>
|
||||
<div ng-if="editingExisting && !editingDefaults" class="pull-left">
|
||||
<div ng-if="has(['existing', 'defaults'], currentDevice._editing)" class="pull-left">
|
||||
<button type="button" class="btn btn-warning btn-sm" data-toggle="modal" data-target="#remove-device-confirmation">
|
||||
<span class="fas fa-minus-circle"></span> <span translate>Remove</span>
|
||||
</button>
|
||||
|
||||
@@ -2,44 +2,44 @@
|
||||
<div class="modal-body">
|
||||
<form role="form" name="folderEditor">
|
||||
<ul class="nav nav-tabs" ng-init="loadFormIntoScope(folderEditor)">
|
||||
<li class="active"><a data-toggle="tab" href="#folder-general"><span class="fas fa-cog"></span> <span translate>General</span></a></li>
|
||||
<li><a data-toggle="tab" href="#folder-sharing"><span class="fas fa-share-alt"></span> <span translate>Sharing</span></a></li>
|
||||
<li><a data-toggle="tab" href="#folder-versioning"><span class="fas fa-copy"></span> <span translate>File Versioning</span></a></li>
|
||||
<li ng-if="!editingDefaults" ng-class="{'disabled': currentFolder._recvEnc}"><a ng-attr-data-toggle="{{ currentFolder._recvEnc ? undefined : 'tab'}}" href="{{currentFolder._recvEnc ? '#' : '#folder-ignores'}}"><span class="fas fa-filter"></span> <span translate>Ignore Patterns</span></a></li>
|
||||
<li><a data-toggle="tab" href="#folder-advanced"><span class="fas fa-cogs"></span> <span translate>Advanced</span></a></li>
|
||||
<li ng-class="{'disabled': currentFolder._editing == 'add-ignores'}" class="active"><a data-toggle="tab" href="{{currentFolder._editing == 'add-ignores' ? '' : '#folder-general'}}"><span class="fas fa-cog"></span> <span translate>General</span></a></li>
|
||||
<li ng-class="{'disabled': currentFolder._editing == 'add-ignores'}"><a data-toggle="tab" href="{{currentFolder._editing == 'add-ignores' ? '' : '#folder-sharing'}}"><span class="fas fa-share-alt"></span> <span translate>Sharing</span></a></li>
|
||||
<li ng-class="{'disabled': currentFolder._editing == 'add-ignores'}"><a data-toggle="tab" href="{{currentFolder._editing == 'add-ignores' ? '' : '#folder-versioning'}}"><span class="fas fa-copy"></span> <span translate>File Versioning</span></a></li>
|
||||
<li ng-class="{'disabled': currentFolder._recvEnc}"><a data-toggle="tab" href="{{currentFolder._recvEnc ? '' : '#folder-ignores'}}"><span class="fas fa-filter"></span> <span translate>Ignore Patterns</span></a></li>
|
||||
<li ng-class="{'disabled': currentFolder._editing == 'add-ignores'}"><a data-toggle="tab" href="{{currentFolder._editing == 'add-ignores' ? '' : '#folder-advanced'}}"><span class="fas fa-cogs"></span> <span translate>Advanced</span></a></li>
|
||||
</ul>
|
||||
<div class="tab-content">
|
||||
|
||||
<div id="folder-general" class="tab-pane in active">
|
||||
<div class="form-group" ng-class="{'has-error': folderEditor.folderLabel.$invalid && folderEditor.folderLabel.$dirty && !editingDefaults}">
|
||||
<div class="form-group" ng-class="{'has-error': folderEditor.folderLabel.$invalid && folderEditor.folderLabel.$dirty && !editingFolderDefaults()}">
|
||||
<label for="folderLabel"><span translate>Folder Label</span></label>
|
||||
<input name="folderLabel" id="folderLabel" class="form-control" type="text" ng-model="currentFolder.label" value="{{currentFolder.label}}" />
|
||||
<p class="help-block">
|
||||
<span translate ng-if="folderEditor.folderLabel.$valid || folderEditor.folderLabel.$pristine">Optional descriptive label for the folder. Can be different on each device.</span>
|
||||
</p>
|
||||
</div>
|
||||
<div ng-if="!editingDefaults" class="form-group" ng-class="{'has-error': folderEditor.folderID.$invalid && folderEditor.folderID.$dirty}">
|
||||
<div ng-if="!editingFolderDefaults()" class="form-group" ng-class="{'has-error': folderEditor.folderID.$invalid && folderEditor.folderID.$dirty}">
|
||||
<label for="folderID"><span translate>Folder ID</span></label>
|
||||
<input name="folderID" ng-readonly="editingExisting || (!editingExisting && currentFolder.viewFlags.importFromOtherDevice)" id="folderID" class="form-control" type="text" ng-model="currentFolder.id" required="" aria-required="true" unique-folder value="{{currentFolder.id}}" />
|
||||
<input name="folderID" ng-readonly="has(['existing', 'add'], currentFolder._editing)" id="folderID" class="form-control" type="text" ng-model="currentFolder.id" required="" aria-required="true" unique-folder value="{{currentFolder.id}}" />
|
||||
<p class="help-block">
|
||||
<span translate ng-if="folderEditor.folderID.$valid || folderEditor.folderID.$pristine">Required identifier for the folder. Must be the same on all cluster devices.</span>
|
||||
<span translate ng-if="folderEditor.folderID.$error.uniqueFolder">The folder ID must be unique.</span>
|
||||
<span translate ng-if="folderEditor.folderID.$error.required && folderEditor.folderID.$dirty">The folder ID cannot be blank.</span>
|
||||
<span translate ng-show="!editingExisting">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.</span>
|
||||
<span translate ng-show="!editingFolderExisting()">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.</span>
|
||||
</p>
|
||||
</div>
|
||||
<div class="form-group" ng-class="{'has-error': folderEditor.folderPath.$invalid && folderEditor.folderPath.$dirty && !editingDefaults}">
|
||||
<div class="form-group" ng-class="{'has-error': folderEditor.folderPath.$invalid && folderEditor.folderPath.$dirty && !editingFolderDefaults()}">
|
||||
<label translate for="folderPath">Folder Path</label>
|
||||
<input name="folderPath" ng-readonly="editingExisting && !editingDefaults" id="folderPath" class="form-control" type="text" ng-model="currentFolder.path" list="directory-list" ng-required="!editingDefaults" ng-aria-required="!editingDefaults" path-is-sub-dir />
|
||||
<input name="folderPath" ng-readonly="editingFolderExisting()" id="folderPath" class="form-control" type="text" ng-model="currentFolder.path" list="directory-list" ng-required="!editingFolderDefaults()" ng-aria-required="!editingFolderDefaults()" path-is-sub-dir />
|
||||
<datalist id="directory-list">
|
||||
<option ng-repeat="directory in directoryList" value="{{ directory }}" />
|
||||
</datalist>
|
||||
<p class="help-block">
|
||||
<span ng-if="folderEditor.folderPath.$valid || folderEditor.folderPath.$pristine"><span translate>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</span> <code>{{system.tilde}}</code>.</br></span>
|
||||
<span translate ng-if="folderEditor.folderPath.$error.required && folderEditor.folderPath.$dirty && !editingDefaults">The folder path cannot be blank.</span>
|
||||
<span translate ng-if="folderEditor.folderPath.$error.required && folderEditor.folderPath.$dirty && !editingFolderDefaults()">The folder path cannot be blank.</span>
|
||||
<span class="text-danger" translate translate-value-other-folder="{{folderPathErrors.otherID}}" ng-if="folderPathErrors.isSub && folderPathErrors.otherLabel.length == 0">Warning, this path is a subdirectory of an existing folder "{%otherFolder%}".</span>
|
||||
<span class="text-danger" translate translate-value-other-folder="{{folderPathErrors.otherID}}" translate-value-other-folder-label="{{folderPathErrors.otherLabel}}" ng-if="folderPathErrors.isSub && folderPathErrors.otherLabel.length != 0">Warning, this path is a subdirectory of an existing folder "{%otherFolderLabel%}" ({%otherFolder%}).</span>
|
||||
<span ng-if="folderPathErrors.isParent && !editingDefaults">
|
||||
<span ng-if="folderPathErrors.isParent && !editingFolderDefaults()">
|
||||
<span class="text-danger" translate translate-value-other-folder="{{folderPathErrors.otherID}}" ng-if="folderPathErrors.otherLabel.length == 0">Warning, this path is a parent directory of an existing folder "{%otherFolder%}".</span>
|
||||
<span class="text-danger" translate translate-value-other-folder="{{folderPathErrors.otherID}}" translate-value-other-folder-label="{{folderPathErrors.otherLabel}}" ng-if="folderPathErrors.otherLabel.length != 0">Warning, this path is a parent directory of an existing folder "{%otherFolderLabel%}" ({%otherFolder%}).</span>
|
||||
</span>
|
||||
@@ -148,33 +148,42 @@
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div ng-if="!editingDefaults" id="folder-ignores" class="tab-pane">
|
||||
<p translate>Enter ignore patterns, one per line.</p>
|
||||
<div ng-class="{'has-error': ignores.error != null}">
|
||||
<textarea class="form-control" rows="5" ng-model="ignores.text" ng-disabled="ignores.disabled"></textarea>
|
||||
<p class="help-block" ng-if="ignores.error">
|
||||
{{ignores.error}}
|
||||
</p>
|
||||
<div id="folder-ignores" class="tab-pane" ng-switch="currentFolder._editing">
|
||||
<div ng-switch-when="add">
|
||||
<label>
|
||||
<input type="checkbox" ng-model="currentFolder._addIgnores" > <span translate>Add ignore patterns</span>
|
||||
</label>
|
||||
<p translate class="help-block">Ignore patterns can only be added after the folder is created. If checked, an input field to enter ignore patterns will be presented after saving.</p>
|
||||
</div>
|
||||
<div ng-switch-default>
|
||||
<p translate>Enter ignore patterns, one per line.</p>
|
||||
<div ng-class="{'has-error': ignores.error != null}">
|
||||
<textarea class="form-control" name="ignoresText" rows="5" ng-model="ignores.text" ng-disabled="ignores.disabled"></textarea>
|
||||
<p class="help-block" ng-if="ignores.error">
|
||||
{{ignores.error}}
|
||||
</p>
|
||||
</div>
|
||||
<hr />
|
||||
<p class="small"><span translate>Quick guide to supported patterns</span> (<a href="https://docs.syncthing.net/users/ignoring.html" target="_blank" translate>full documentation</a>):</p>
|
||||
<dl class="dl-horizontal dl-narrow small">
|
||||
<dt><code>(?d)</code></dt>
|
||||
<dd><b><span translate>Prefix indicating that the file can be deleted if preventing directory removal</span></b></dd>
|
||||
<dt><code>(?i)</code></dt>
|
||||
<dd><span translate>Prefix indicating that the pattern should be matched without case sensitivity</span></dd>
|
||||
<dt><code>!</code></dt>
|
||||
<dd><span translate>Inversion of the given condition (i.e. do not exclude)</span></dd>
|
||||
<dt><code>*</code></dt>
|
||||
<dd><span translate>Single level wildcard (matches within a directory only)</span></dd>
|
||||
<dt><code>**</code></dt>
|
||||
<dd><span translate>Multi level wildcard (matches multiple directory levels)</span></dd>
|
||||
<dt><code>//</code></dt>
|
||||
<dd><span translate>Comment, when used at the start of a line</span></dd>
|
||||
</dl>
|
||||
<div ng-if="!editingFolderDefaults()">
|
||||
<hr />
|
||||
<span translate translate-value-path="{{currentFolder.path}}{{system.pathSeparator}}.stignore">Editing {%path%}.</span>
|
||||
</div>
|
||||
</div>
|
||||
<hr />
|
||||
<p class="small"><span translate>Quick guide to supported patterns</span> (<a href="https://docs.syncthing.net/users/ignoring.html" target="_blank" translate>full documentation</a>):</p>
|
||||
<dl class="dl-horizontal dl-narrow small">
|
||||
<dt><code>(?d)</code></dt>
|
||||
<dd><b><span translate>Prefix indicating that the file can be deleted if preventing directory removal</span></b></dd>
|
||||
<dt><code>(?i)</code></dt>
|
||||
<dd><span translate>Prefix indicating that the pattern should be matched without case sensitivity</span></dd>
|
||||
<dt><code>!</code></dt>
|
||||
<dd><span translate>Inversion of the given condition (i.e. do not exclude)</span></dd>
|
||||
<dt><code>*</code></dt>
|
||||
<dd><span translate>Single level wildcard (matches within a directory only)</span></dd>
|
||||
<dt><code>**</code></dt>
|
||||
<dd><span translate>Multi level wildcard (matches multiple directory levels)</span></dd>
|
||||
<dt><code>//</code></dt>
|
||||
<dd><span translate>Comment, when used at the start of a line</span></dd>
|
||||
</dl>
|
||||
<hr />
|
||||
<span translate ng-show="editingExisting" translate-value-path="{{currentFolder.path}}{{system.pathSeparator}}.stignore">Editing {%path%}.</span>
|
||||
<span translate ng-show="!editingExisting" translate-value-path="{{currentFolder.path}}{{system.pathSeparator}}.stignore">Creating ignore patterns, overwriting an existing file at {%path%}.</span>
|
||||
</div>
|
||||
|
||||
<div id="folder-advanced" class="tab-pane">
|
||||
@@ -205,17 +214,17 @@
|
||||
<div class="col-md-6 form-group">
|
||||
<label translate>Folder Type</label>
|
||||
<a href="https://docs.syncthing.net/users/foldertypes.html" target="_blank"><span class="fas fa-question-circle"></span> <span translate>Help</span></a>
|
||||
<select class="form-control" ng-change="setDefaultsForFolderType()" ng-model="currentFolder.type" ng-disabled="editingExisting && currentFolder.type == 'receiveencrypted'">
|
||||
<select class="form-control" ng-change="setDefaultsForFolderType()" ng-model="currentFolder.type" ng-disabled="editingFolderExisting() && currentFolder.type == 'receiveencrypted'">
|
||||
<option value="sendreceive" translate>Send & Receive</option>
|
||||
<option value="sendonly" translate>Send Only</option>
|
||||
<option value="receiveonly" translate>Receive Only</option>
|
||||
<option value="receiveencrypted" ng-disabled="editingExisting" translate>Receive Encrypted</option>
|
||||
<option value="receiveencrypted" ng-disabled="editingFolderExisting()" translate>Receive Encrypted</option>
|
||||
</select>
|
||||
<p ng-if="currentFolder.type == 'sendonly'" translate class="help-block">Files are protected from changes made on other devices, but changes made on this device will be sent to the rest of the cluster.</p>
|
||||
<p ng-if="currentFolder.type == 'receiveonly'" translate class="help-block">Files are synchronized from the cluster, but any changes made locally will not be sent to other devices.</p>
|
||||
<p ng-if="currentFolder.type == 'receiveencrypted'" translate class="help-block" translate-value-receive-encrypted="{{'Receive Encrypted' | translate}}">Stores and syncs only encrypted data. Folders on all connected devices need to be set up with the same password or be of type "{%receiveEncrypted%}" too.</p>
|
||||
<p ng-if="editingExisting && currentFolder.type == 'receiveencrypted'" translate class="help-block" translate-value-receive-encrypted="{{'Receive Encrypted' | translate}}">Folder type "{%receiveEncrypted%}" cannot be changed after adding the folder. You need to remove the folder, delete or decrypt the data on disk, and add the folder again.</p>
|
||||
<p ng-if="editingExisting && currentFolder.type != 'receiveencrypted'" translate class="help-block" translate-value-receive-encrypted="{{'Receive Encrypted' | translate}}">Folder type "{%receiveEncrypted%}" can only be set when adding a new folder.</p>
|
||||
<p ng-if="editingFolderExisting() && currentFolder.type == 'receiveencrypted'" translate class="help-block" translate-value-receive-encrypted="{{'Receive Encrypted' | translate}}">Folder type "{%receiveEncrypted%}" cannot be changed after adding the folder. You need to remove the folder, delete or decrypt the data on disk, and add the folder again.</p>
|
||||
<p ng-if="editingFolderExisting() && currentFolder.type != 'receiveencrypted'" translate class="help-block" translate-value-receive-encrypted="{{'Receive Encrypted' | translate}}">Folder type "{%receiveEncrypted%}" can only be set when adding a new folder.</p>
|
||||
</div>
|
||||
<div class="col-md-6 form-group">
|
||||
<label translate>File Pull Order</label>
|
||||
@@ -274,7 +283,7 @@
|
||||
<button type="button" class="btn btn-default btn-sm" data-dismiss="modal">
|
||||
<span class="fas fa-times"></span> <span translate>Close</span>
|
||||
</button>
|
||||
<button type="button" class="btn btn-warning pull-left btn-sm" data-toggle="modal" data-target="#remove-folder-confirmation" ng-if="editingExisting && !editingDefaults">
|
||||
<button type="button" class="btn btn-warning pull-left btn-sm" data-toggle="modal" data-target="#remove-folder-confirmation" ng-if="editingFolderExisting()">
|
||||
<span class="fas fa-minus-circle"></span> <span translate>Remove</span>
|
||||
</button>
|
||||
</div>
|
||||
|
||||
@@ -313,6 +313,7 @@ func (s *service) Serve(ctx context.Context) error {
|
||||
configBuilder.registerDevice("/rest/config/devices/:id")
|
||||
configBuilder.registerDefaultFolder("/rest/config/defaults/folder")
|
||||
configBuilder.registerDefaultDevice("/rest/config/defaults/device")
|
||||
configBuilder.registerDefaultIgnores("/rest/config/defaults/ignores")
|
||||
configBuilder.registerOptions("/rest/config/options")
|
||||
configBuilder.registerLDAP("/rest/config/ldap")
|
||||
configBuilder.registerGUI("/rest/config/gui")
|
||||
|
||||
@@ -229,6 +229,28 @@ func (c *configMuxBuilder) registerDefaultDevice(path string) {
|
||||
})
|
||||
}
|
||||
|
||||
func (c *configMuxBuilder) registerDefaultIgnores(path string) {
|
||||
c.HandlerFunc(http.MethodGet, path, func(w http.ResponseWriter, _ *http.Request) {
|
||||
sendJSON(w, c.cfg.DefaultIgnores())
|
||||
})
|
||||
|
||||
c.HandlerFunc(http.MethodPut, path, func(w http.ResponseWriter, r *http.Request) {
|
||||
var ignores config.Ignores
|
||||
if err := unmarshalTo(r.Body, &ignores); err != nil {
|
||||
http.Error(w, err.Error(), http.StatusBadRequest)
|
||||
return
|
||||
}
|
||||
waiter, err := c.cfg.Modify(func(cfg *config.Configuration) {
|
||||
cfg.Defaults.Ignores = ignores
|
||||
})
|
||||
if err != nil {
|
||||
http.Error(w, err.Error(), http.StatusInternalServerError)
|
||||
return
|
||||
}
|
||||
c.finish(w, waiter)
|
||||
})
|
||||
}
|
||||
|
||||
func (c *configMuxBuilder) registerOptions(path string) {
|
||||
c.HandlerFunc(http.MethodGet, path, func(w http.ResponseWriter, _ *http.Request) {
|
||||
sendJSON(w, c.cfg.Options())
|
||||
|
||||
+10
-6
@@ -113,18 +113,16 @@ func New(myID protocol.DeviceID) Configuration {
|
||||
return cfg
|
||||
}
|
||||
|
||||
func NewWithFreePorts(myID protocol.DeviceID) (Configuration, error) {
|
||||
cfg := New(myID)
|
||||
|
||||
func (cfg *Configuration) ProbeFreePorts() error {
|
||||
port, err := getFreePort("127.0.0.1", DefaultGUIPort)
|
||||
if err != nil {
|
||||
return Configuration{}, errors.Wrap(err, "get free port (GUI)")
|
||||
return errors.Wrap(err, "get free port (GUI)")
|
||||
}
|
||||
cfg.GUI.RawAddress = fmt.Sprintf("127.0.0.1:%d", port)
|
||||
|
||||
port, err = getFreePort("0.0.0.0", DefaultTCPPort)
|
||||
if err != nil {
|
||||
return Configuration{}, errors.Wrap(err, "get free port (BEP)")
|
||||
return errors.Wrap(err, "get free port (BEP)")
|
||||
}
|
||||
if port == DefaultTCPPort {
|
||||
cfg.Options.RawListenAddresses = []string{"default"}
|
||||
@@ -136,7 +134,7 @@ func NewWithFreePorts(myID protocol.DeviceID) (Configuration, error) {
|
||||
}
|
||||
}
|
||||
|
||||
return cfg, nil
|
||||
return nil
|
||||
}
|
||||
|
||||
type xmlConfiguration struct {
|
||||
@@ -623,3 +621,9 @@ func ensureZeroForNodefault(empty interface{}, target interface{}) {
|
||||
return len(v) > 0
|
||||
})
|
||||
}
|
||||
|
||||
func (i Ignores) Copy() Ignores {
|
||||
out := Ignores{Lines: make([]string, len(i.Lines))}
|
||||
copy(out.Lines, i.Lines)
|
||||
return out
|
||||
}
|
||||
|
||||
+264
-44
@@ -69,8 +69,9 @@ func (m *Configuration) XXX_DiscardUnknown() {
|
||||
var xxx_messageInfo_Configuration proto.InternalMessageInfo
|
||||
|
||||
type Defaults struct {
|
||||
Folder FolderConfiguration `protobuf:"bytes,1,opt,name=folder,proto3" json:"folder" xml:"folder"`
|
||||
Device DeviceConfiguration `protobuf:"bytes,2,opt,name=device,proto3" json:"device" xml:"device"`
|
||||
Folder FolderConfiguration `protobuf:"bytes,1,opt,name=folder,proto3" json:"folder" xml:"folder"`
|
||||
Device DeviceConfiguration `protobuf:"bytes,2,opt,name=device,proto3" json:"device" xml:"device"`
|
||||
Ignores Ignores `protobuf:"bytes,3,opt,name=ignores,proto3" json:"ignores" xml:"ignores"`
|
||||
}
|
||||
|
||||
func (m *Defaults) Reset() { *m = Defaults{} }
|
||||
@@ -106,56 +107,98 @@ func (m *Defaults) XXX_DiscardUnknown() {
|
||||
|
||||
var xxx_messageInfo_Defaults proto.InternalMessageInfo
|
||||
|
||||
type Ignores struct {
|
||||
Lines []string `protobuf:"bytes,1,rep,name=lines,proto3" json:"lines" xml:"line"`
|
||||
}
|
||||
|
||||
func (m *Ignores) Reset() { *m = Ignores{} }
|
||||
func (m *Ignores) String() string { return proto.CompactTextString(m) }
|
||||
func (*Ignores) ProtoMessage() {}
|
||||
func (*Ignores) Descriptor() ([]byte, []int) {
|
||||
return fileDescriptor_baadf209193dc627, []int{2}
|
||||
}
|
||||
func (m *Ignores) XXX_Unmarshal(b []byte) error {
|
||||
return m.Unmarshal(b)
|
||||
}
|
||||
func (m *Ignores) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
|
||||
if deterministic {
|
||||
return xxx_messageInfo_Ignores.Marshal(b, m, deterministic)
|
||||
} else {
|
||||
b = b[:cap(b)]
|
||||
n, err := m.MarshalToSizedBuffer(b)
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
return b[:n], nil
|
||||
}
|
||||
}
|
||||
func (m *Ignores) XXX_Merge(src proto.Message) {
|
||||
xxx_messageInfo_Ignores.Merge(m, src)
|
||||
}
|
||||
func (m *Ignores) XXX_Size() int {
|
||||
return m.ProtoSize()
|
||||
}
|
||||
func (m *Ignores) XXX_DiscardUnknown() {
|
||||
xxx_messageInfo_Ignores.DiscardUnknown(m)
|
||||
}
|
||||
|
||||
var xxx_messageInfo_Ignores proto.InternalMessageInfo
|
||||
|
||||
func init() {
|
||||
proto.RegisterType((*Configuration)(nil), "config.Configuration")
|
||||
proto.RegisterType((*Defaults)(nil), "config.Defaults")
|
||||
proto.RegisterType((*Ignores)(nil), "config.Ignores")
|
||||
}
|
||||
|
||||
func init() { proto.RegisterFile("lib/config/config.proto", fileDescriptor_baadf209193dc627) }
|
||||
|
||||
var fileDescriptor_baadf209193dc627 = []byte{
|
||||
// 654 bytes of a gzipped FileDescriptorProto
|
||||
0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0x84, 0x94, 0xcd, 0x6e, 0xd3, 0x40,
|
||||
0x10, 0xc7, 0xed, 0xa6, 0x4d, 0xda, 0xed, 0x17, 0x32, 0x08, 0x5c, 0x3e, 0xbc, 0x61, 0x15, 0x50,
|
||||
0x41, 0xa5, 0x95, 0xca, 0x05, 0x71, 0x23, 0x44, 0x94, 0x0a, 0x24, 0x2a, 0xa3, 0x22, 0xe0, 0x82,
|
||||
0x92, 0x78, 0xeb, 0xae, 0x94, 0xd8, 0x96, 0xbd, 0xae, 0xda, 0x47, 0xe0, 0x86, 0x78, 0x02, 0x4e,
|
||||
0x48, 0xdc, 0x79, 0x88, 0xdc, 0x92, 0x23, 0xa7, 0x95, 0x9a, 0xdc, 0x7c, 0xf4, 0x91, 0x13, 0xda,
|
||||
0x0f, 0xbb, 0xb6, 0x6a, 0xe0, 0x64, 0xcf, 0xfc, 0xff, 0xf3, 0x9b, 0xd5, 0x78, 0xc7, 0xe0, 0xc6,
|
||||
0x80, 0xf4, 0x76, 0xfa, 0xbe, 0x77, 0x44, 0x5c, 0xf5, 0xd8, 0x0e, 0x42, 0x9f, 0xfa, 0x46, 0x5d,
|
||||
0x46, 0x37, 0x5b, 0x05, 0xc3, 0x91, 0x3f, 0x70, 0x70, 0x28, 0x83, 0x38, 0xec, 0x52, 0xe2, 0x7b,
|
||||
0xd2, 0x5d, 0x72, 0x39, 0xf8, 0x84, 0xf4, 0x71, 0x95, 0xeb, 0x6e, 0xc1, 0xe5, 0xc6, 0xa4, 0xca,
|
||||
0x82, 0x0a, 0x96, 0x81, 0xd3, 0x0d, 0xaa, 0x3c, 0xf7, 0x0a, 0x1e, 0x3f, 0xe0, 0x42, 0x54, 0x65,
|
||||
0xdb, 0x28, 0xda, 0x7a, 0x11, 0x0e, 0x4f, 0xb0, 0xa3, 0xa4, 0x25, 0x7c, 0x4a, 0xe5, 0x2b, 0xfa,
|
||||
0xde, 0x00, 0xab, 0xcf, 0x8b, 0xd5, 0x86, 0x0d, 0x1a, 0x27, 0x38, 0x8c, 0x88, 0xef, 0x99, 0x7a,
|
||||
0x53, 0xdf, 0x5c, 0x68, 0x3f, 0x49, 0x18, 0xcc, 0x52, 0x29, 0x83, 0xc6, 0xe9, 0x70, 0xf0, 0x14,
|
||||
0xa9, 0x78, 0xab, 0x4b, 0x69, 0x88, 0x7e, 0x33, 0x58, 0x23, 0x1e, 0x4d, 0xc6, 0xad, 0x95, 0x62,
|
||||
0xde, 0xce, 0xaa, 0x8c, 0x77, 0xa0, 0x21, 0x87, 0x17, 0x99, 0x73, 0xcd, 0xda, 0xe6, 0xf2, 0xee,
|
||||
0xad, 0x6d, 0x35, 0xed, 0x17, 0x22, 0x5d, 0x3a, 0x41, 0x1b, 0x8e, 0x18, 0xd4, 0x78, 0x53, 0x55,
|
||||
0x93, 0x32, 0xb8, 0x22, 0x9a, 0xca, 0x18, 0xd9, 0x99, 0xc0, 0xb9, 0x72, 0xdc, 0x91, 0x59, 0x2b,
|
||||
0x73, 0x3b, 0x22, 0xfd, 0x17, 0xae, 0xaa, 0xc9, 0xb9, 0x32, 0x46, 0x76, 0x26, 0x18, 0x36, 0xa8,
|
||||
0xb9, 0x31, 0x31, 0xe7, 0x9b, 0xfa, 0xe6, 0xf2, 0xae, 0x99, 0x31, 0xf7, 0x0e, 0xf7, 0xcb, 0xc0,
|
||||
0xfb, 0x1c, 0x38, 0x65, 0xb0, 0xb6, 0x77, 0xb8, 0x9f, 0x30, 0xc8, 0x6b, 0x52, 0x06, 0x97, 0x04,
|
||||
0xd3, 0x8d, 0x09, 0xfa, 0x3a, 0x69, 0x71, 0xc9, 0xe6, 0x82, 0xf1, 0x01, 0xcc, 0xf3, 0x2f, 0x6a,
|
||||
0x2e, 0x08, 0xe8, 0x46, 0x06, 0x7d, 0xdd, 0x79, 0x76, 0x50, 0xa6, 0x3e, 0x54, 0xd4, 0x79, 0x2e,
|
||||
0x25, 0x0c, 0x8a, 0xb2, 0x94, 0x41, 0x20, 0xb8, 0x3c, 0xe0, 0x60, 0xa1, 0xda, 0x42, 0x33, 0xde,
|
||||
0x83, 0x86, 0xba, 0x08, 0x66, 0x5d, 0xd0, 0x6f, 0x67, 0xf4, 0x37, 0x32, 0x5d, 0x6e, 0xd0, 0xcc,
|
||||
0xe6, 0xa0, 0x8a, 0x52, 0x06, 0x57, 0x05, 0x5b, 0xc5, 0xc8, 0xce, 0x14, 0xe3, 0x87, 0x0e, 0xd6,
|
||||
0x89, 0xeb, 0xf9, 0x21, 0x76, 0x3e, 0x65, 0x93, 0x6e, 0x88, 0x49, 0x5f, 0xcf, 0x5b, 0xa8, 0xbb,
|
||||
0x25, 0x27, 0xde, 0x3e, 0x56, 0xf0, 0x6b, 0x21, 0x1e, 0xfa, 0x14, 0xef, 0xcb, 0xe2, 0x4e, 0x3e,
|
||||
0xf1, 0x0d, 0xd1, 0xa9, 0x42, 0x44, 0xc9, 0xb8, 0x75, 0xb5, 0x22, 0x9f, 0x8e, 0x5b, 0x95, 0x2c,
|
||||
0x7b, 0x8d, 0x94, 0x62, 0xe3, 0xb3, 0x0e, 0xd6, 0x03, 0xec, 0x39, 0xc4, 0x73, 0xf3, 0xb3, 0x2e,
|
||||
0xfe, 0xf3, 0xac, 0x2f, 0xd5, 0xa4, 0xcd, 0x0e, 0x0e, 0x42, 0xdc, 0xef, 0x52, 0xec, 0x1c, 0x48,
|
||||
0x80, 0x62, 0x26, 0x0c, 0xea, 0x8f, 0x52, 0x06, 0xef, 0x88, 0x43, 0x07, 0x45, 0x6d, 0xcb, 0x1f,
|
||||
0x12, 0x8a, 0x87, 0x01, 0x3d, 0x43, 0xa6, 0x6e, 0xaf, 0x95, 0xb4, 0xc8, 0x38, 0x00, 0x8b, 0x0e,
|
||||
0x3e, 0xea, 0xc6, 0x03, 0x1a, 0x99, 0x4b, 0xe2, 0x93, 0x5c, 0xb9, 0xb8, 0x99, 0x32, 0xdf, 0x46,
|
||||
0x6a, 0x52, 0xb9, 0x33, 0x65, 0x70, 0x4d, 0xdd, 0x47, 0x99, 0x40, 0x76, 0xae, 0xa1, 0x9f, 0x3a,
|
||||
0x58, 0xcc, 0x4a, 0x8d, 0xb7, 0xa0, 0x2e, 0x57, 0x40, 0xac, 0xe8, 0x7f, 0xd6, 0xc9, 0x52, 0x7d,
|
||||
0x54, 0xc9, 0xa5, 0x6d, 0x52, 0x79, 0x0e, 0x95, 0x63, 0x33, 0xe7, 0xca, 0xd0, 0xaa, 0x5d, 0xca,
|
||||
0xa1, 0xb2, 0xe4, 0xd2, 0x2a, 0xa9, 0x7c, 0xfb, 0xd5, 0xe8, 0xdc, 0xd2, 0x26, 0xe7, 0x96, 0x36,
|
||||
0x9a, 0x5a, 0xfa, 0x64, 0x6a, 0xe9, 0x5f, 0x66, 0x96, 0xf6, 0x6d, 0x66, 0xe9, 0x93, 0x99, 0xa5,
|
||||
0xfd, 0x9a, 0x59, 0xda, 0xc7, 0x07, 0x2e, 0xa1, 0xc7, 0x71, 0x6f, 0xbb, 0xef, 0x0f, 0x77, 0xa2,
|
||||
0x33, 0xaf, 0x4f, 0x8f, 0x89, 0xe7, 0x16, 0xde, 0x2e, 0x7e, 0x63, 0xbd, 0xba, 0xf8, 0x67, 0x3d,
|
||||
0xfe, 0x13, 0x00, 0x00, 0xff, 0xff, 0x50, 0xe9, 0xd5, 0x50, 0xb6, 0x05, 0x00, 0x00,
|
||||
// 709 bytes of a gzipped FileDescriptorProto
|
||||
0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0x84, 0x94, 0x4b, 0x6f, 0xd3, 0x40,
|
||||
0x10, 0xc7, 0xe3, 0xa6, 0x8d, 0x9b, 0xed, 0x0b, 0x19, 0x44, 0x5d, 0x1e, 0xde, 0xb0, 0x0a, 0x28,
|
||||
0xa0, 0x3e, 0xa4, 0x72, 0xa9, 0xb8, 0x11, 0x22, 0x4a, 0x55, 0x24, 0x2a, 0xa3, 0x22, 0xe0, 0x82,
|
||||
0x92, 0x78, 0xeb, 0xae, 0x94, 0xd8, 0x96, 0xed, 0x54, 0xed, 0x91, 0x23, 0x37, 0xc4, 0x27, 0xe0,
|
||||
0x84, 0xc4, 0x37, 0xe9, 0xad, 0x39, 0x72, 0x5a, 0xa9, 0xcd, 0xcd, 0x47, 0x1f, 0x39, 0xa1, 0x7d,
|
||||
0x39, 0xb6, 0x6a, 0xe0, 0x94, 0xcc, 0xfc, 0xff, 0xf3, 0xdb, 0xd5, 0xec, 0x8c, 0xc1, 0xea, 0x80,
|
||||
0xf4, 0xb6, 0xfa, 0xbe, 0x77, 0x44, 0x5c, 0xf9, 0xb3, 0x19, 0x84, 0x7e, 0xec, 0x1b, 0x35, 0x11,
|
||||
0xdd, 0x69, 0xe6, 0x0c, 0x47, 0xfe, 0xc0, 0xc1, 0xa1, 0x08, 0x46, 0x61, 0x37, 0x26, 0xbe, 0x27,
|
||||
0xdc, 0x05, 0x97, 0x83, 0x4f, 0x48, 0x1f, 0x97, 0xb9, 0x1e, 0xe4, 0x5c, 0xee, 0x88, 0x94, 0x59,
|
||||
0x50, 0xce, 0x32, 0x70, 0xba, 0x41, 0x99, 0xe7, 0x61, 0xce, 0xe3, 0x07, 0x4c, 0x88, 0xca, 0x6c,
|
||||
0x6b, 0x79, 0x5b, 0x2f, 0xc2, 0xe1, 0x09, 0x76, 0xa4, 0x54, 0xc7, 0xa7, 0xb1, 0xf8, 0x8b, 0x7e,
|
||||
0xe8, 0x60, 0xe9, 0x45, 0xbe, 0xda, 0xb0, 0x81, 0x7e, 0x82, 0xc3, 0x88, 0xf8, 0x9e, 0xa9, 0x35,
|
||||
0xb4, 0xd6, 0x5c, 0x7b, 0x27, 0xa1, 0x50, 0xa5, 0x52, 0x0a, 0x8d, 0xd3, 0xe1, 0xe0, 0x19, 0x92,
|
||||
0xf1, 0x7a, 0x37, 0x8e, 0x43, 0xf4, 0x9b, 0xc2, 0x2a, 0xf1, 0xe2, 0xe4, 0xa2, 0xb9, 0x98, 0xcf,
|
||||
0xdb, 0xaa, 0xca, 0x78, 0x07, 0x74, 0xd1, 0xbc, 0xc8, 0x9c, 0x69, 0x54, 0x5b, 0x0b, 0xdb, 0x77,
|
||||
0x37, 0x65, 0xb7, 0x5f, 0xf2, 0x74, 0xe1, 0x06, 0x6d, 0x78, 0x4e, 0x61, 0x85, 0x1d, 0x2a, 0x6b,
|
||||
0x52, 0x0a, 0x17, 0xf9, 0xa1, 0x22, 0x46, 0xb6, 0x12, 0x18, 0x57, 0xb4, 0x3b, 0x32, 0xab, 0x45,
|
||||
0x6e, 0x87, 0xa7, 0xff, 0xc2, 0x95, 0x35, 0x19, 0x57, 0xc4, 0xc8, 0x56, 0x82, 0x61, 0x83, 0xaa,
|
||||
0x3b, 0x22, 0xe6, 0x6c, 0x43, 0x6b, 0x2d, 0x6c, 0x9b, 0x8a, 0xb9, 0x7b, 0xb8, 0x57, 0x04, 0x3e,
|
||||
0x62, 0xc0, 0x2b, 0x0a, 0xab, 0xbb, 0x87, 0x7b, 0x09, 0x85, 0xac, 0x26, 0xa5, 0xb0, 0xce, 0x99,
|
||||
0xee, 0x88, 0xa0, 0x6f, 0xe3, 0x26, 0x93, 0x6c, 0x26, 0x18, 0x1f, 0xc0, 0x2c, 0x7b, 0x51, 0x73,
|
||||
0x8e, 0x43, 0xd7, 0x14, 0xf4, 0x75, 0xe7, 0xf9, 0x41, 0x91, 0xfa, 0x44, 0x52, 0x67, 0x99, 0x94,
|
||||
0x50, 0xc8, 0xcb, 0x52, 0x0a, 0x01, 0xe7, 0xb2, 0x80, 0x81, 0xb9, 0x6a, 0x73, 0xcd, 0x78, 0x0f,
|
||||
0x74, 0x39, 0x08, 0x66, 0x8d, 0xd3, 0xef, 0x29, 0xfa, 0x1b, 0x91, 0x2e, 0x1e, 0xd0, 0x50, 0x7d,
|
||||
0x90, 0x45, 0x29, 0x85, 0x4b, 0x9c, 0x2d, 0x63, 0x64, 0x2b, 0xc5, 0xf8, 0xa9, 0x81, 0x15, 0xe2,
|
||||
0x7a, 0x7e, 0x88, 0x9d, 0x4f, 0xaa, 0xd3, 0x3a, 0xef, 0xf4, 0xed, 0xec, 0x08, 0x39, 0x5b, 0xa2,
|
||||
0xe3, 0xed, 0x63, 0x09, 0xbf, 0x15, 0xe2, 0xa1, 0x1f, 0xe3, 0x3d, 0x51, 0xdc, 0xc9, 0x3a, 0xbe,
|
||||
0xc6, 0x4f, 0x2a, 0x11, 0x51, 0x72, 0xd1, 0xbc, 0x59, 0x92, 0x4f, 0x2f, 0x9a, 0xa5, 0x2c, 0x7b,
|
||||
0x99, 0x14, 0x62, 0xe3, 0x8b, 0x06, 0x56, 0x02, 0xec, 0x39, 0xc4, 0x73, 0xb3, 0xbb, 0xce, 0xff,
|
||||
0xf3, 0xae, 0xaf, 0x64, 0xa7, 0xcd, 0x0e, 0x0e, 0x42, 0xdc, 0xef, 0xc6, 0xd8, 0x39, 0x10, 0x00,
|
||||
0xc9, 0x4c, 0x28, 0xd4, 0x36, 0x52, 0x0a, 0xef, 0xf3, 0x4b, 0x07, 0x79, 0x6d, 0xdd, 0x1f, 0x92,
|
||||
0x18, 0x0f, 0x83, 0xf8, 0x0c, 0x99, 0x9a, 0xbd, 0x5c, 0xd0, 0x22, 0xe3, 0x00, 0xcc, 0x3b, 0xf8,
|
||||
0xa8, 0x3b, 0x1a, 0xc4, 0x91, 0x59, 0xe7, 0x4f, 0x72, 0x63, 0x3a, 0x99, 0x22, 0xdf, 0x46, 0xb2,
|
||||
0x53, 0x99, 0x33, 0xa5, 0x70, 0x59, 0xce, 0xa3, 0x48, 0x20, 0x3b, 0xd3, 0xd0, 0xe7, 0x19, 0x30,
|
||||
0xaf, 0x4a, 0x8d, 0xb7, 0xa0, 0x26, 0x56, 0x80, 0xaf, 0xe8, 0x7f, 0xd6, 0xc9, 0x92, 0xe7, 0xc8,
|
||||
0x92, 0x6b, 0xdb, 0x24, 0xf3, 0x0c, 0x2a, 0xda, 0x66, 0xce, 0x14, 0xa1, 0x65, 0xbb, 0x94, 0x41,
|
||||
0x45, 0xc9, 0xb5, 0x55, 0x92, 0x79, 0x63, 0x1f, 0xe8, 0xe2, 0x99, 0xd8, 0x86, 0x32, 0xea, 0x8a,
|
||||
0xa2, 0x8a, 0xd7, 0x8c, 0xa6, 0xd3, 0x28, 0x7d, 0xd9, 0x34, 0xca, 0x18, 0xd9, 0x4a, 0x41, 0x3b,
|
||||
0x40, 0x97, 0x55, 0xc6, 0x06, 0x98, 0x1b, 0x10, 0x0f, 0x47, 0xa6, 0xd6, 0xa8, 0xb6, 0xea, 0xed,
|
||||
0xd5, 0x84, 0x42, 0x91, 0x98, 0x2e, 0x0a, 0xf1, 0x30, 0xb2, 0x45, 0xb2, 0xbd, 0x7f, 0x7e, 0x69,
|
||||
0x55, 0xc6, 0x97, 0x56, 0xe5, 0xfc, 0xca, 0xd2, 0xc6, 0x57, 0x96, 0xf6, 0x75, 0x62, 0x55, 0xbe,
|
||||
0x4f, 0x2c, 0x6d, 0x3c, 0xb1, 0x2a, 0xbf, 0x26, 0x56, 0xe5, 0xe3, 0x63, 0x97, 0xc4, 0xc7, 0xa3,
|
||||
0xde, 0x66, 0xdf, 0x1f, 0x6e, 0x45, 0x67, 0x5e, 0x3f, 0x3e, 0x26, 0x9e, 0x9b, 0xfb, 0x37, 0xfd,
|
||||
0x9a, 0xf6, 0x6a, 0xfc, 0xd3, 0xf9, 0xf4, 0x4f, 0x00, 0x00, 0x00, 0xff, 0xff, 0x77, 0x7d, 0xcb,
|
||||
0x2a, 0x3d, 0x06, 0x00, 0x00,
|
||||
}
|
||||
|
||||
func (m *Configuration) Marshal() (dAtA []byte, err error) {
|
||||
@@ -302,6 +345,16 @@ func (m *Defaults) MarshalToSizedBuffer(dAtA []byte) (int, error) {
|
||||
_ = i
|
||||
var l int
|
||||
_ = l
|
||||
{
|
||||
size, err := m.Ignores.MarshalToSizedBuffer(dAtA[:i])
|
||||
if err != nil {
|
||||
return 0, err
|
||||
}
|
||||
i -= size
|
||||
i = encodeVarintConfig(dAtA, i, uint64(size))
|
||||
}
|
||||
i--
|
||||
dAtA[i] = 0x1a
|
||||
{
|
||||
size, err := m.Device.MarshalToSizedBuffer(dAtA[:i])
|
||||
if err != nil {
|
||||
@@ -325,6 +378,38 @@ func (m *Defaults) MarshalToSizedBuffer(dAtA []byte) (int, error) {
|
||||
return len(dAtA) - i, nil
|
||||
}
|
||||
|
||||
func (m *Ignores) Marshal() (dAtA []byte, err error) {
|
||||
size := m.ProtoSize()
|
||||
dAtA = make([]byte, size)
|
||||
n, err := m.MarshalToSizedBuffer(dAtA[:size])
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
return dAtA[:n], nil
|
||||
}
|
||||
|
||||
func (m *Ignores) MarshalTo(dAtA []byte) (int, error) {
|
||||
size := m.ProtoSize()
|
||||
return m.MarshalToSizedBuffer(dAtA[:size])
|
||||
}
|
||||
|
||||
func (m *Ignores) MarshalToSizedBuffer(dAtA []byte) (int, error) {
|
||||
i := len(dAtA)
|
||||
_ = i
|
||||
var l int
|
||||
_ = l
|
||||
if len(m.Lines) > 0 {
|
||||
for iNdEx := len(m.Lines) - 1; iNdEx >= 0; iNdEx-- {
|
||||
i -= len(m.Lines[iNdEx])
|
||||
copy(dAtA[i:], m.Lines[iNdEx])
|
||||
i = encodeVarintConfig(dAtA, i, uint64(len(m.Lines[iNdEx])))
|
||||
i--
|
||||
dAtA[i] = 0xa
|
||||
}
|
||||
}
|
||||
return len(dAtA) - i, nil
|
||||
}
|
||||
|
||||
func encodeVarintConfig(dAtA []byte, offset int, v uint64) int {
|
||||
offset -= sovConfig(v)
|
||||
base := offset
|
||||
@@ -390,6 +475,23 @@ func (m *Defaults) ProtoSize() (n int) {
|
||||
n += 1 + l + sovConfig(uint64(l))
|
||||
l = m.Device.ProtoSize()
|
||||
n += 1 + l + sovConfig(uint64(l))
|
||||
l = m.Ignores.ProtoSize()
|
||||
n += 1 + l + sovConfig(uint64(l))
|
||||
return n
|
||||
}
|
||||
|
||||
func (m *Ignores) ProtoSize() (n int) {
|
||||
if m == nil {
|
||||
return 0
|
||||
}
|
||||
var l int
|
||||
_ = l
|
||||
if len(m.Lines) > 0 {
|
||||
for _, s := range m.Lines {
|
||||
l = len(s)
|
||||
n += 1 + l + sovConfig(uint64(l))
|
||||
}
|
||||
}
|
||||
return n
|
||||
}
|
||||
|
||||
@@ -831,6 +933,124 @@ func (m *Defaults) Unmarshal(dAtA []byte) error {
|
||||
return err
|
||||
}
|
||||
iNdEx = postIndex
|
||||
case 3:
|
||||
if wireType != 2 {
|
||||
return fmt.Errorf("proto: wrong wireType = %d for field Ignores", wireType)
|
||||
}
|
||||
var msglen int
|
||||
for shift := uint(0); ; shift += 7 {
|
||||
if shift >= 64 {
|
||||
return ErrIntOverflowConfig
|
||||
}
|
||||
if iNdEx >= l {
|
||||
return io.ErrUnexpectedEOF
|
||||
}
|
||||
b := dAtA[iNdEx]
|
||||
iNdEx++
|
||||
msglen |= int(b&0x7F) << shift
|
||||
if b < 0x80 {
|
||||
break
|
||||
}
|
||||
}
|
||||
if msglen < 0 {
|
||||
return ErrInvalidLengthConfig
|
||||
}
|
||||
postIndex := iNdEx + msglen
|
||||
if postIndex < 0 {
|
||||
return ErrInvalidLengthConfig
|
||||
}
|
||||
if postIndex > l {
|
||||
return io.ErrUnexpectedEOF
|
||||
}
|
||||
if err := m.Ignores.Unmarshal(dAtA[iNdEx:postIndex]); err != nil {
|
||||
return err
|
||||
}
|
||||
iNdEx = postIndex
|
||||
default:
|
||||
iNdEx = preIndex
|
||||
skippy, err := skipConfig(dAtA[iNdEx:])
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
if skippy < 0 {
|
||||
return ErrInvalidLengthConfig
|
||||
}
|
||||
if (iNdEx + skippy) < 0 {
|
||||
return ErrInvalidLengthConfig
|
||||
}
|
||||
if (iNdEx + skippy) > l {
|
||||
return io.ErrUnexpectedEOF
|
||||
}
|
||||
iNdEx += skippy
|
||||
}
|
||||
}
|
||||
|
||||
if iNdEx > l {
|
||||
return io.ErrUnexpectedEOF
|
||||
}
|
||||
return nil
|
||||
}
|
||||
func (m *Ignores) Unmarshal(dAtA []byte) error {
|
||||
l := len(dAtA)
|
||||
iNdEx := 0
|
||||
for iNdEx < l {
|
||||
preIndex := iNdEx
|
||||
var wire uint64
|
||||
for shift := uint(0); ; shift += 7 {
|
||||
if shift >= 64 {
|
||||
return ErrIntOverflowConfig
|
||||
}
|
||||
if iNdEx >= l {
|
||||
return io.ErrUnexpectedEOF
|
||||
}
|
||||
b := dAtA[iNdEx]
|
||||
iNdEx++
|
||||
wire |= uint64(b&0x7F) << shift
|
||||
if b < 0x80 {
|
||||
break
|
||||
}
|
||||
}
|
||||
fieldNum := int32(wire >> 3)
|
||||
wireType := int(wire & 0x7)
|
||||
if wireType == 4 {
|
||||
return fmt.Errorf("proto: Ignores: wiretype end group for non-group")
|
||||
}
|
||||
if fieldNum <= 0 {
|
||||
return fmt.Errorf("proto: Ignores: illegal tag %d (wire type %d)", fieldNum, wire)
|
||||
}
|
||||
switch fieldNum {
|
||||
case 1:
|
||||
if wireType != 2 {
|
||||
return fmt.Errorf("proto: wrong wireType = %d for field Lines", wireType)
|
||||
}
|
||||
var stringLen uint64
|
||||
for shift := uint(0); ; shift += 7 {
|
||||
if shift >= 64 {
|
||||
return ErrIntOverflowConfig
|
||||
}
|
||||
if iNdEx >= l {
|
||||
return io.ErrUnexpectedEOF
|
||||
}
|
||||
b := dAtA[iNdEx]
|
||||
iNdEx++
|
||||
stringLen |= uint64(b&0x7F) << shift
|
||||
if b < 0x80 {
|
||||
break
|
||||
}
|
||||
}
|
||||
intStringLen := int(stringLen)
|
||||
if intStringLen < 0 {
|
||||
return ErrInvalidLengthConfig
|
||||
}
|
||||
postIndex := iNdEx + intStringLen
|
||||
if postIndex < 0 {
|
||||
return ErrInvalidLengthConfig
|
||||
}
|
||||
if postIndex > l {
|
||||
return io.ErrUnexpectedEOF
|
||||
}
|
||||
m.Lines = append(m.Lines, string(dAtA[iNdEx:postIndex]))
|
||||
iNdEx = postIndex
|
||||
default:
|
||||
iNdEx = preIndex
|
||||
skippy, err := skipConfig(dAtA[iNdEx:])
|
||||
|
||||
@@ -113,6 +113,9 @@ func TestDefaultValues(t *testing.T) {
|
||||
Compression: protocol.CompressionMetadata,
|
||||
IgnoredFolders: []ObservedFolder{},
|
||||
},
|
||||
Ignores: Ignores{
|
||||
Lines: []string{},
|
||||
},
|
||||
},
|
||||
IgnoredDevices: []ObservedDevice{},
|
||||
}
|
||||
|
||||
@@ -40,6 +40,16 @@ type Wrapper struct {
|
||||
defaultFolderReturnsOnCall map[int]struct {
|
||||
result1 config.FolderConfiguration
|
||||
}
|
||||
DefaultIgnoresStub func() config.Ignores
|
||||
defaultIgnoresMutex sync.RWMutex
|
||||
defaultIgnoresArgsForCall []struct {
|
||||
}
|
||||
defaultIgnoresReturns struct {
|
||||
result1 config.Ignores
|
||||
}
|
||||
defaultIgnoresReturnsOnCall map[int]struct {
|
||||
result1 config.Ignores
|
||||
}
|
||||
DeviceStub func(protocol.DeviceID) (config.DeviceConfiguration, bool)
|
||||
deviceMutex sync.RWMutex
|
||||
deviceArgsForCall []struct {
|
||||
@@ -449,6 +459,59 @@ func (fake *Wrapper) DefaultFolderReturnsOnCall(i int, result1 config.FolderConf
|
||||
}{result1}
|
||||
}
|
||||
|
||||
func (fake *Wrapper) DefaultIgnores() config.Ignores {
|
||||
fake.defaultIgnoresMutex.Lock()
|
||||
ret, specificReturn := fake.defaultIgnoresReturnsOnCall[len(fake.defaultIgnoresArgsForCall)]
|
||||
fake.defaultIgnoresArgsForCall = append(fake.defaultIgnoresArgsForCall, struct {
|
||||
}{})
|
||||
stub := fake.DefaultIgnoresStub
|
||||
fakeReturns := fake.defaultIgnoresReturns
|
||||
fake.recordInvocation("DefaultIgnores", []interface{}{})
|
||||
fake.defaultIgnoresMutex.Unlock()
|
||||
if stub != nil {
|
||||
return stub()
|
||||
}
|
||||
if specificReturn {
|
||||
return ret.result1
|
||||
}
|
||||
return fakeReturns.result1
|
||||
}
|
||||
|
||||
func (fake *Wrapper) DefaultIgnoresCallCount() int {
|
||||
fake.defaultIgnoresMutex.RLock()
|
||||
defer fake.defaultIgnoresMutex.RUnlock()
|
||||
return len(fake.defaultIgnoresArgsForCall)
|
||||
}
|
||||
|
||||
func (fake *Wrapper) DefaultIgnoresCalls(stub func() config.Ignores) {
|
||||
fake.defaultIgnoresMutex.Lock()
|
||||
defer fake.defaultIgnoresMutex.Unlock()
|
||||
fake.DefaultIgnoresStub = stub
|
||||
}
|
||||
|
||||
func (fake *Wrapper) DefaultIgnoresReturns(result1 config.Ignores) {
|
||||
fake.defaultIgnoresMutex.Lock()
|
||||
defer fake.defaultIgnoresMutex.Unlock()
|
||||
fake.DefaultIgnoresStub = nil
|
||||
fake.defaultIgnoresReturns = struct {
|
||||
result1 config.Ignores
|
||||
}{result1}
|
||||
}
|
||||
|
||||
func (fake *Wrapper) DefaultIgnoresReturnsOnCall(i int, result1 config.Ignores) {
|
||||
fake.defaultIgnoresMutex.Lock()
|
||||
defer fake.defaultIgnoresMutex.Unlock()
|
||||
fake.DefaultIgnoresStub = nil
|
||||
if fake.defaultIgnoresReturnsOnCall == nil {
|
||||
fake.defaultIgnoresReturnsOnCall = make(map[int]struct {
|
||||
result1 config.Ignores
|
||||
})
|
||||
}
|
||||
fake.defaultIgnoresReturnsOnCall[i] = struct {
|
||||
result1 config.Ignores
|
||||
}{result1}
|
||||
}
|
||||
|
||||
func (fake *Wrapper) Device(arg1 protocol.DeviceID) (config.DeviceConfiguration, bool) {
|
||||
fake.deviceMutex.Lock()
|
||||
ret, specificReturn := fake.deviceReturnsOnCall[len(fake.deviceArgsForCall)]
|
||||
@@ -1752,6 +1815,8 @@ func (fake *Wrapper) Invocations() map[string][][]interface{} {
|
||||
defer fake.defaultDeviceMutex.RUnlock()
|
||||
fake.defaultFolderMutex.RLock()
|
||||
defer fake.defaultFolderMutex.RUnlock()
|
||||
fake.defaultIgnoresMutex.RLock()
|
||||
defer fake.defaultIgnoresMutex.RUnlock()
|
||||
fake.deviceMutex.RLock()
|
||||
defer fake.deviceMutex.RUnlock()
|
||||
fake.deviceListMutex.RLock()
|
||||
|
||||
@@ -100,6 +100,7 @@ type Wrapper interface {
|
||||
GUI() GUIConfiguration
|
||||
LDAP() LDAPConfiguration
|
||||
Options() OptionsConfiguration
|
||||
DefaultIgnores() Ignores
|
||||
|
||||
Folder(id string) (FolderConfiguration, bool)
|
||||
Folders() map[string]FolderConfiguration
|
||||
@@ -437,6 +438,13 @@ func (w *wrapper) GUI() GUIConfiguration {
|
||||
return w.cfg.GUI.Copy()
|
||||
}
|
||||
|
||||
// DefaultIgnores returns the list of ignore patterns to be used by default on folders.
|
||||
func (w *wrapper) DefaultIgnores() Ignores {
|
||||
w.mut.Lock()
|
||||
defer w.mut.Unlock()
|
||||
return w.cfg.Defaults.Ignores.Copy()
|
||||
}
|
||||
|
||||
// IgnoredDevice returns whether or not connection attempts from the given
|
||||
// device should be silently ignored.
|
||||
func (w *wrapper) IgnoredDevice(id protocol.DeviceID) bool {
|
||||
|
||||
@@ -253,7 +253,7 @@ func IsInternal(file string) bool {
|
||||
// - /foo/bar -> foo/bar
|
||||
// - / -> "."
|
||||
func Canonicalize(file string) (string, error) {
|
||||
pathSep := string(PathSeparator)
|
||||
const pathSep = string(PathSeparator)
|
||||
|
||||
if strings.HasPrefix(file, pathSep+pathSep) {
|
||||
// The relative path may pretend to be an absolute path within
|
||||
|
||||
+26
-26
@@ -47,25 +47,13 @@ func getHomeDir() (string, error) {
|
||||
return os.UserHomeDir()
|
||||
}
|
||||
|
||||
var (
|
||||
windowsDisallowedCharacters = string([]rune{
|
||||
'<', '>', ':', '"', '|', '?', '*',
|
||||
0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10,
|
||||
11, 12, 13, 14, 15, 16, 17, 18, 19, 20,
|
||||
21, 22, 23, 24, 25, 26, 27, 28, 29, 30,
|
||||
31,
|
||||
})
|
||||
windowsDisallowedNames = []string{"CON", "PRN", "AUX", "NUL",
|
||||
"COM0", "COM1", "COM2", "COM3", "COM4", "COM5", "COM6", "COM7", "COM8", "COM9",
|
||||
"LPT0", "LPT1", "LPT2", "LPT3", "LPT4", "LPT5", "LPT6", "LPT7", "LPT8", "LPT9",
|
||||
}
|
||||
)
|
||||
const windowsDisallowedCharacters = (`<>:"|?*` +
|
||||
"\x00\x01\x02\x03\x04\x05\x06\x07\x08\x09\x0a\x0b\x0c\x0d\x0e\x0f" +
|
||||
"\x10\x11\x12\x13\x14\x15\x16\x17\x18\x19\x1a\x1b\x1c\x1d\x1e\x1f")
|
||||
|
||||
func WindowsInvalidFilename(name string) error {
|
||||
// None of the path components should end in space or period, or be a
|
||||
// reserved name. COM0 and LPT0 are missing from the Microsoft docs,
|
||||
// but Windows Explorer treats them as invalid too.
|
||||
// (https://docs.microsoft.com/windows/win32/fileio/naming-a-file)
|
||||
// reserved name.
|
||||
for _, part := range strings.Split(name, `\`) {
|
||||
if len(part) == 0 {
|
||||
continue
|
||||
@@ -110,7 +98,7 @@ func WindowsInvalidFilename(name string) error {
|
||||
func SanitizePath(path string) string {
|
||||
var b strings.Builder
|
||||
|
||||
disallowed := `<>:"'/\|?*[]{};:!@$%&^#` + windowsDisallowedCharacters
|
||||
const disallowed = `'/\[]{};:!@$%&^#` + windowsDisallowedCharacters
|
||||
prev := ' '
|
||||
for _, c := range path {
|
||||
if !unicode.IsPrint(c) || c == unicode.ReplacementChar ||
|
||||
@@ -132,15 +120,27 @@ func SanitizePath(path string) string {
|
||||
}
|
||||
|
||||
func windowsIsReserved(part string) bool {
|
||||
upperCased := strings.ToUpper(part)
|
||||
for _, disallowed := range windowsDisallowedNames {
|
||||
if upperCased == disallowed {
|
||||
return true
|
||||
}
|
||||
if strings.HasPrefix(upperCased, disallowed+".") {
|
||||
// nul.txt.jpg is also disallowed
|
||||
return true
|
||||
}
|
||||
// nul.txt.jpg is also disallowed.
|
||||
dot := strings.IndexByte(part, '.')
|
||||
if dot != -1 {
|
||||
part = part[:dot]
|
||||
}
|
||||
|
||||
// Check length to skip allocating ToUpper.
|
||||
if len(part) != 3 && len(part) != 4 {
|
||||
return false
|
||||
}
|
||||
|
||||
// COM0 and LPT0 are missing from the Microsoft docs,
|
||||
// but Windows Explorer treats them as invalid too.
|
||||
// (https://docs.microsoft.com/windows/win32/fileio/naming-a-file)
|
||||
switch strings.ToUpper(part) {
|
||||
case "CON", "PRN", "AUX", "NUL",
|
||||
"COM0", "COM1", "COM2", "COM3", "COM4",
|
||||
"COM5", "COM6", "COM7", "COM8", "COM9",
|
||||
"LPT0", "LPT1", "LPT2", "LPT3", "LPT4",
|
||||
"LPT5", "LPT6", "LPT7", "LPT8", "LPT9":
|
||||
return true
|
||||
}
|
||||
return false
|
||||
}
|
||||
|
||||
@@ -117,3 +117,15 @@ func TestSanitizePathFuzz(t *testing.T) {
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
func benchmarkWindowsInvalidFilename(b *testing.B, name string) {
|
||||
for i := 0; i < b.N; i++ {
|
||||
WindowsInvalidFilename(name)
|
||||
}
|
||||
}
|
||||
func BenchmarkWindowsInvalidFilenameValid(b *testing.B) {
|
||||
benchmarkWindowsInvalidFilename(b, "License.txt.gz")
|
||||
}
|
||||
func BenchmarkWindowsInvalidFilenameNUL(b *testing.B) {
|
||||
benchmarkWindowsInvalidFilename(b, "nul.txt.gz")
|
||||
}
|
||||
|
||||
@@ -26,20 +26,19 @@ func newDeviceActivity() *deviceActivity {
|
||||
}
|
||||
}
|
||||
|
||||
func (m *deviceActivity) leastBusy(availability []Availability) (Availability, bool) {
|
||||
// Returns the index of the least busy device, or -1 if all are too busy.
|
||||
func (m *deviceActivity) leastBusy(availability []Availability) int {
|
||||
m.mut.Lock()
|
||||
low := 2<<30 - 1
|
||||
found := false
|
||||
var selected Availability
|
||||
for _, info := range availability {
|
||||
if usage := m.act[info.ID]; usage < low {
|
||||
best := -1
|
||||
for i := range availability {
|
||||
if usage := m.act[availability[i].ID]; usage < low {
|
||||
low = usage
|
||||
selected = info
|
||||
found = true
|
||||
best = i
|
||||
}
|
||||
}
|
||||
m.mut.Unlock()
|
||||
return selected, found
|
||||
return best
|
||||
}
|
||||
|
||||
func (m *deviceActivity) using(availability Availability) {
|
||||
|
||||
@@ -19,42 +19,42 @@ func TestDeviceActivity(t *testing.T) {
|
||||
devices := []Availability{n0, n1, n2}
|
||||
na := newDeviceActivity()
|
||||
|
||||
if lb, ok := na.leastBusy(devices); !ok || lb != n0 {
|
||||
if lb := na.leastBusy(devices); lb != 0 {
|
||||
t.Errorf("Least busy device should be n0 (%v) not %v", n0, lb)
|
||||
}
|
||||
if lb, ok := na.leastBusy(devices); !ok || lb != n0 {
|
||||
if lb := na.leastBusy(devices); lb != 0 {
|
||||
t.Errorf("Least busy device should still be n0 (%v) not %v", n0, lb)
|
||||
}
|
||||
|
||||
lb, _ := na.leastBusy(devices)
|
||||
na.using(lb)
|
||||
if lb, ok := na.leastBusy(devices); !ok || lb != n1 {
|
||||
lb := na.leastBusy(devices)
|
||||
na.using(devices[lb])
|
||||
if lb := na.leastBusy(devices); lb != 1 {
|
||||
t.Errorf("Least busy device should be n1 (%v) not %v", n1, lb)
|
||||
}
|
||||
lb, _ = na.leastBusy(devices)
|
||||
na.using(lb)
|
||||
if lb, ok := na.leastBusy(devices); !ok || lb != n2 {
|
||||
lb = na.leastBusy(devices)
|
||||
na.using(devices[lb])
|
||||
if lb := na.leastBusy(devices); lb != 2 {
|
||||
t.Errorf("Least busy device should be n2 (%v) not %v", n2, lb)
|
||||
}
|
||||
|
||||
lb, _ = na.leastBusy(devices)
|
||||
na.using(lb)
|
||||
if lb, ok := na.leastBusy(devices); !ok || lb != n0 {
|
||||
lb = na.leastBusy(devices)
|
||||
na.using(devices[lb])
|
||||
if lb := na.leastBusy(devices); lb != 0 {
|
||||
t.Errorf("Least busy device should be n0 (%v) not %v", n0, lb)
|
||||
}
|
||||
|
||||
na.done(n1)
|
||||
if lb, ok := na.leastBusy(devices); !ok || lb != n1 {
|
||||
if lb := na.leastBusy(devices); lb != 1 {
|
||||
t.Errorf("Least busy device should be n1 (%v) not %v", n1, lb)
|
||||
}
|
||||
|
||||
na.done(n2)
|
||||
if lb, ok := na.leastBusy(devices); !ok || lb != n1 {
|
||||
if lb := na.leastBusy(devices); lb != 1 {
|
||||
t.Errorf("Least busy device should still be n1 (%v) not %v", n1, lb)
|
||||
}
|
||||
|
||||
na.done(n0)
|
||||
if lb, ok := na.leastBusy(devices); !ok || lb != n0 {
|
||||
if lb := na.leastBusy(devices); lb != 0 {
|
||||
t.Errorf("Least busy device should be n0 (%v) not %v", n0, lb)
|
||||
}
|
||||
}
|
||||
|
||||
@@ -1532,8 +1532,8 @@ loop:
|
||||
// Select the least busy device to pull the block from. If we found no
|
||||
// feasible device at all, fail the block (and in the long run, the
|
||||
// file).
|
||||
selected, found := activity.leastBusy(candidates)
|
||||
if !found {
|
||||
found := activity.leastBusy(candidates)
|
||||
if found == -1 {
|
||||
if lastError != nil {
|
||||
state.fail(errors.Wrap(lastError, "pull"))
|
||||
} else {
|
||||
@@ -1542,7 +1542,9 @@ loop:
|
||||
break
|
||||
}
|
||||
|
||||
candidates = removeAvailability(candidates, selected)
|
||||
selected := candidates[found]
|
||||
candidates[found] = candidates[len(candidates)-1]
|
||||
candidates = candidates[:len(candidates)-1]
|
||||
|
||||
// Fetch the block, while marking the selected device as in use so that
|
||||
// leastBusy can select another device when someone else asks.
|
||||
@@ -1804,16 +1806,6 @@ func (f *sendReceiveFolder) inConflict(current, replacement protocol.Vector) boo
|
||||
return false
|
||||
}
|
||||
|
||||
func removeAvailability(availabilities []Availability, availability Availability) []Availability {
|
||||
for i := range availabilities {
|
||||
if availabilities[i] == availability {
|
||||
availabilities[i] = availabilities[len(availabilities)-1]
|
||||
return availabilities[:len(availabilities)-1]
|
||||
}
|
||||
}
|
||||
return availabilities
|
||||
}
|
||||
|
||||
func (f *sendReceiveFolder) moveForConflict(name, lastModBy string, scanChan chan<- string) error {
|
||||
if isConflict(name) {
|
||||
l.Infoln("Conflict for", name, "which is already a conflict copy; not copying again.")
|
||||
|
||||
@@ -178,7 +178,11 @@ func (c *folderSummaryService) listenForUpdates(ctx context.Context) error {
|
||||
// This loop needs to be fast so we don't miss too many events.
|
||||
|
||||
select {
|
||||
case ev := <-sub.C():
|
||||
case ev, ok := <-sub.C():
|
||||
if !ok {
|
||||
<-ctx.Done()
|
||||
return ctx.Err()
|
||||
}
|
||||
c.processUpdate(ev)
|
||||
case <-ctx.Done():
|
||||
return ctx.Err()
|
||||
|
||||
+19
-32
@@ -706,26 +706,12 @@ func (m *model) UsageReportingStats(report *contract.Report, version int, previe
|
||||
|
||||
type ConnectionInfo struct {
|
||||
protocol.Statistics
|
||||
Connected bool
|
||||
Paused bool
|
||||
Address string
|
||||
ClientVersion string
|
||||
Type string
|
||||
Crypto string
|
||||
}
|
||||
|
||||
func (info ConnectionInfo) MarshalJSON() ([]byte, error) {
|
||||
return json.Marshal(map[string]interface{}{
|
||||
"at": info.At,
|
||||
"inBytesTotal": info.InBytesTotal,
|
||||
"outBytesTotal": info.OutBytesTotal,
|
||||
"connected": info.Connected,
|
||||
"paused": info.Paused,
|
||||
"address": info.Address,
|
||||
"clientVersion": info.ClientVersion,
|
||||
"type": info.Type,
|
||||
"crypto": info.Crypto,
|
||||
})
|
||||
Connected bool `json:"connected"`
|
||||
Paused bool `json:"paused"`
|
||||
Address string `json:"address"`
|
||||
ClientVersion string `json:"clientVersion"`
|
||||
Type string `json:"type"`
|
||||
Crypto string `json:"crypto"`
|
||||
}
|
||||
|
||||
// NumConnections returns the current number of active connected devices.
|
||||
@@ -769,12 +755,10 @@ func (m *model) ConnectionStats() map[string]interface{} {
|
||||
res["connections"] = conns
|
||||
|
||||
in, out := protocol.TotalInOut()
|
||||
res["total"] = ConnectionInfo{
|
||||
Statistics: protocol.Statistics{
|
||||
At: time.Now().Truncate(time.Second),
|
||||
InBytesTotal: in,
|
||||
OutBytesTotal: out,
|
||||
},
|
||||
res["total"] = map[string]interface{}{
|
||||
"at": time.Now().Truncate(time.Second),
|
||||
"inBytesTotal": in,
|
||||
"outBytesTotal": out,
|
||||
}
|
||||
|
||||
return res
|
||||
@@ -1667,6 +1651,11 @@ func (m *model) handleAutoAccepts(deviceID protocol.DeviceID, folder protocol.Fo
|
||||
|
||||
if len(ccDeviceInfos.remote.EncryptionPasswordToken) > 0 || len(ccDeviceInfos.local.EncryptionPasswordToken) > 0 {
|
||||
fcfg.Type = config.FolderTypeReceiveEncrypted
|
||||
} else {
|
||||
ignores := m.cfg.DefaultIgnores()
|
||||
if err := m.setIgnores(fcfg, ignores.Lines); err != nil {
|
||||
l.Warnf("Failed to apply default ignores to auto-accepted folder %s at path %s: %v", folder.Description(), fcfg.Path, err)
|
||||
}
|
||||
}
|
||||
|
||||
l.Infof("Auto-accepted %s folder %s at path %s", deviceID, folder.Description(), fcfg.Path)
|
||||
@@ -2051,11 +2040,6 @@ func (m *model) LoadIgnores(folder string) ([]string, []string, error) {
|
||||
return nil, nil, nil
|
||||
}
|
||||
|
||||
// On creation a new folder with ignore patterns validly has no marker yet.
|
||||
if err := cfg.CheckPath(); err != nil && err != config.ErrMarkerMissing {
|
||||
return nil, nil, err
|
||||
}
|
||||
|
||||
if !ignoresOk {
|
||||
ignores = ignore.New(cfg.Filesystem())
|
||||
}
|
||||
@@ -2097,7 +2081,10 @@ func (m *model) SetIgnores(folder string, content []string) error {
|
||||
if !ok {
|
||||
return fmt.Errorf("folder %s does not exist", cfg.Description())
|
||||
}
|
||||
return m.setIgnores(cfg, content)
|
||||
}
|
||||
|
||||
func (m *model) setIgnores(cfg config.FolderConfiguration, content []string) error {
|
||||
err := cfg.CheckPath()
|
||||
if err == config.ErrPathMissing {
|
||||
if err = cfg.CreateRoot(); err != nil {
|
||||
@@ -2115,7 +2102,7 @@ func (m *model) SetIgnores(folder string, content []string) error {
|
||||
}
|
||||
|
||||
m.fmut.RLock()
|
||||
runner, ok := m.folderRunners[folder]
|
||||
runner, ok := m.folderRunners[cfg.ID]
|
||||
m.fmut.RUnlock()
|
||||
if ok {
|
||||
runner.ScheduleScan()
|
||||
|
||||
@@ -1515,7 +1515,7 @@ func TestIgnores(t *testing.T) {
|
||||
t.Error("No error")
|
||||
}
|
||||
|
||||
// Invalid path, marker should be missing, hence returns an error.
|
||||
// Invalid path, treated like no patterns at all.
|
||||
fcfg := config.FolderConfiguration{ID: "fresh", Path: "XXX"}
|
||||
ignores := ignore.New(fcfg.Filesystem(), ignore.WithCache(m.cfg.Options().CacheIgnoredFiles))
|
||||
m.fmut.Lock()
|
||||
@@ -1524,8 +1524,8 @@ func TestIgnores(t *testing.T) {
|
||||
m.fmut.Unlock()
|
||||
|
||||
_, _, err = m.LoadIgnores("fresh")
|
||||
if err == nil {
|
||||
t.Error("No error")
|
||||
if err != nil {
|
||||
t.Error("Got error for inexistent folder path")
|
||||
}
|
||||
|
||||
// Repeat tests with paused folder
|
||||
|
||||
@@ -7,43 +7,19 @@
|
||||
package osutil
|
||||
|
||||
import (
|
||||
"syscall"
|
||||
|
||||
"github.com/pkg/errors"
|
||||
)
|
||||
|
||||
const (
|
||||
// https://docs.microsoft.com/windows/win32/api/processthreadsapi/nf-processthreadsapi-setpriorityclass
|
||||
aboveNormalPriorityClass = 0x00008000
|
||||
belowNormalPriorityClass = 0x00004000
|
||||
highPriorityClass = 0x00000080
|
||||
idlePriorityClass = 0x00000040
|
||||
normalPriorityClass = 0x00000020
|
||||
processModeBackgroundBegin = 0x00100000
|
||||
processModeBackgroundEnd = 0x00200000
|
||||
realtimePriorityClass = 0x00000100
|
||||
"golang.org/x/sys/windows"
|
||||
)
|
||||
|
||||
// SetLowPriority lowers the process CPU scheduling priority, and possibly
|
||||
// I/O priority depending on the platform and OS.
|
||||
func SetLowPriority() error {
|
||||
modkernel32 := syscall.NewLazyDLL("kernel32.dll")
|
||||
setPriorityClass := modkernel32.NewProc("SetPriorityClass")
|
||||
|
||||
if err := setPriorityClass.Find(); err != nil {
|
||||
return errors.Wrap(err, "find proc")
|
||||
}
|
||||
|
||||
handle, err := syscall.GetCurrentProcess()
|
||||
handle, err := windows.GetCurrentProcess()
|
||||
if err != nil {
|
||||
return errors.Wrap(err, "get process handler")
|
||||
return errors.Wrap(err, "get process handle")
|
||||
}
|
||||
defer syscall.CloseHandle(handle)
|
||||
defer windows.CloseHandle(handle)
|
||||
|
||||
res, _, err := setPriorityClass.Call(uintptr(handle), belowNormalPriorityClass)
|
||||
if res != 0 {
|
||||
// "If the function succeeds, the return value is nonzero."
|
||||
return nil
|
||||
}
|
||||
err = windows.SetPriorityClass(handle, windows.BELOW_NORMAL_PRIORITY_CLASS)
|
||||
return errors.Wrap(err, "set priority class") // wraps nil as nil
|
||||
}
|
||||
|
||||
@@ -214,18 +214,3 @@ func untypeoify(s string) string {
|
||||
s = strings.ReplaceAll(s, "8", "B")
|
||||
return s
|
||||
}
|
||||
|
||||
// DeviceIDs is a sortable slice of DeviceID
|
||||
type DeviceIDs []DeviceID
|
||||
|
||||
func (l DeviceIDs) Len() int {
|
||||
return len(l)
|
||||
}
|
||||
|
||||
func (l DeviceIDs) Less(a, b int) bool {
|
||||
return l[a].Compare(l[b]) == -1
|
||||
}
|
||||
|
||||
func (l DeviceIDs) Swap(a, b int) {
|
||||
l[a], l[b] = l[b], l[a]
|
||||
}
|
||||
|
||||
+21
-19
@@ -23,7 +23,7 @@ import (
|
||||
"sync"
|
||||
"time"
|
||||
|
||||
lz4 "github.com/bkaradzic/go-lz4"
|
||||
lz4 "github.com/pierrec/lz4/v4"
|
||||
"github.com/pkg/errors"
|
||||
)
|
||||
|
||||
@@ -63,6 +63,10 @@ var sha256OfEmptyBlock = map[int][sha256.Size]byte{
|
||||
16 << MiB: {0x8, 0xa, 0xcf, 0x35, 0xa5, 0x7, 0xac, 0x98, 0x49, 0xcf, 0xcb, 0xa4, 0x7d, 0xc2, 0xad, 0x83, 0xe0, 0x1b, 0x75, 0x66, 0x3a, 0x51, 0x62, 0x79, 0xc8, 0xb9, 0xd2, 0x43, 0xb7, 0x19, 0x64, 0x3e},
|
||||
}
|
||||
|
||||
var (
|
||||
errNotCompressible = errors.New("not compressible")
|
||||
)
|
||||
|
||||
func init() {
|
||||
for blockSize := MinBlockSize; blockSize <= MaxBlockSize; blockSize *= 2 {
|
||||
BlockSizes = append(BlockSizes, blockSize)
|
||||
@@ -800,7 +804,7 @@ func (c *rawConnection) writeCompressedMessage(msg message, marshaled []byte, ov
|
||||
}
|
||||
|
||||
cOverhead := 2 + hdrSize + 4
|
||||
maxCompressed := cOverhead + lz4.CompressBound(len(marshaled))
|
||||
maxCompressed := cOverhead + lz4.CompressBlockBound(len(marshaled))
|
||||
buf := BufferPool.Get(maxCompressed)
|
||||
defer BufferPool.Put(buf)
|
||||
|
||||
@@ -994,10 +998,10 @@ func (c *rawConnection) pingReceiver() {
|
||||
}
|
||||
|
||||
type Statistics struct {
|
||||
At time.Time
|
||||
InBytesTotal int64
|
||||
OutBytesTotal int64
|
||||
StartedAt time.Time
|
||||
At time.Time `json:"at"`
|
||||
InBytesTotal int64 `json:"inBytesTotal"`
|
||||
OutBytesTotal int64 `json:"outBytesTotal"`
|
||||
StartedAt time.Time `json:"startedAt"`
|
||||
}
|
||||
|
||||
func (c *rawConnection) Statistics() Statistics {
|
||||
@@ -1010,32 +1014,30 @@ func (c *rawConnection) Statistics() Statistics {
|
||||
}
|
||||
|
||||
func lz4Compress(src, buf []byte) (int, error) {
|
||||
compressed, err := lz4.Encode(buf, src)
|
||||
// The compressed block is prefixed by the size of the uncompressed data.
|
||||
binary.BigEndian.PutUint32(buf, uint32(len(src)))
|
||||
|
||||
n, err := lz4.CompressBlock(src, buf[4:], nil)
|
||||
if err != nil {
|
||||
return -1, err
|
||||
}
|
||||
if &compressed[0] != &buf[0] {
|
||||
panic("bug: lz4.Compress allocated, which it must not (should use buffer pool)")
|
||||
} else if len(src) > 0 && n == 0 {
|
||||
return -1, errNotCompressible
|
||||
}
|
||||
|
||||
binary.BigEndian.PutUint32(compressed, binary.LittleEndian.Uint32(compressed))
|
||||
return len(compressed), nil
|
||||
return n + 4, nil
|
||||
}
|
||||
|
||||
func lz4Decompress(src []byte) ([]byte, error) {
|
||||
size := binary.BigEndian.Uint32(src)
|
||||
binary.LittleEndian.PutUint32(src, size)
|
||||
var err error
|
||||
buf := BufferPool.Get(int(size))
|
||||
decoded, err := lz4.Decode(buf, src)
|
||||
|
||||
n, err := lz4.UncompressBlock(src[4:], buf)
|
||||
if err != nil {
|
||||
BufferPool.Put(buf)
|
||||
return nil, err
|
||||
}
|
||||
if &decoded[0] != &buf[0] {
|
||||
panic("bug: lz4.Decode allocated, which it must not (should use buffer pool)")
|
||||
}
|
||||
return decoded, nil
|
||||
|
||||
return buf[:n], nil
|
||||
}
|
||||
|
||||
func newProtocolError(err error, msgContext string) error {
|
||||
|
||||
@@ -17,7 +17,7 @@ import (
|
||||
"testing/quick"
|
||||
"time"
|
||||
|
||||
lz4 "github.com/bkaradzic/go-lz4"
|
||||
lz4 "github.com/pierrec/lz4/v4"
|
||||
"github.com/syncthing/syncthing/lib/rand"
|
||||
"github.com/syncthing/syncthing/lib/testutils"
|
||||
)
|
||||
@@ -484,7 +484,7 @@ func TestLZ4Compression(t *testing.T) {
|
||||
t.Fatal(err)
|
||||
}
|
||||
|
||||
comp := make([]byte, lz4.CompressBound(dataLen))
|
||||
comp := make([]byte, lz4.CompressBlockBound(dataLen))
|
||||
compLen, err := lz4Compress(data, comp)
|
||||
if err != nil {
|
||||
t.Errorf("compressing %d bytes: %v", dataLen, err)
|
||||
@@ -506,6 +506,36 @@ func TestLZ4Compression(t *testing.T) {
|
||||
}
|
||||
}
|
||||
|
||||
func TestLZ4CompressionUpdate(t *testing.T) {
|
||||
uncompressed := []byte("this is some arbitrary yet fairly compressible data")
|
||||
|
||||
// Compressed, as created by the LZ4 implementation in Syncthing 1.18.6 and earlier.
|
||||
oldCompressed, _ := hex.DecodeString("00000033f0247468697320697320736f6d65206172626974726172792079657420666169726c7920636f6d707265737369626c652064617461")
|
||||
|
||||
// Verify that we can decompress
|
||||
|
||||
res, err := lz4Decompress(oldCompressed)
|
||||
if err != nil {
|
||||
t.Fatal(err)
|
||||
}
|
||||
if !bytes.Equal(uncompressed, res) {
|
||||
t.Fatal("result does not match")
|
||||
}
|
||||
|
||||
// Verify that our current compression is equivalent
|
||||
|
||||
buf := make([]byte, 128)
|
||||
n, err := lz4Compress(uncompressed, buf)
|
||||
if err != nil {
|
||||
t.Fatal(err)
|
||||
}
|
||||
if !bytes.Equal(oldCompressed, buf[:n]) {
|
||||
t.Logf("%x", oldCompressed)
|
||||
t.Logf("%x", buf[:n])
|
||||
t.Fatal("compression does not match")
|
||||
}
|
||||
}
|
||||
|
||||
func TestCheckFilename(t *testing.T) {
|
||||
cases := []struct {
|
||||
name string
|
||||
|
||||
+8
-18
@@ -19,11 +19,7 @@ import (
|
||||
"github.com/sasha-s/go-deadlock"
|
||||
)
|
||||
|
||||
type clock interface {
|
||||
Now() time.Time
|
||||
}
|
||||
|
||||
var defaultClock clock = (*standardClock)(nil)
|
||||
var timeNow = time.Now
|
||||
|
||||
type Mutex interface {
|
||||
Lock()
|
||||
@@ -86,7 +82,7 @@ func (h holder) String() string {
|
||||
if h.at == "" {
|
||||
return "not held"
|
||||
}
|
||||
return fmt.Sprintf("at %s goid: %d for %s", h.at, h.goid, defaultClock.Now().Sub(h.time))
|
||||
return fmt.Sprintf("at %s goid: %d for %s", h.at, h.goid, timeNow().Sub(h.time))
|
||||
}
|
||||
|
||||
type loggedMutex struct {
|
||||
@@ -101,7 +97,7 @@ func (m *loggedMutex) Lock() {
|
||||
|
||||
func (m *loggedMutex) Unlock() {
|
||||
currentHolder := m.holder.Load().(holder)
|
||||
duration := defaultClock.Now().Sub(currentHolder.time)
|
||||
duration := timeNow().Sub(currentHolder.time)
|
||||
if duration >= threshold {
|
||||
l.Debugf("Mutex held for %v. Locked at %s unlocked at %s", duration, currentHolder.at, getHolder().at)
|
||||
}
|
||||
@@ -125,7 +121,7 @@ type loggedRWMutex struct {
|
||||
}
|
||||
|
||||
func (m *loggedRWMutex) Lock() {
|
||||
start := defaultClock.Now()
|
||||
start := timeNow()
|
||||
|
||||
atomic.StoreInt32(&m.logUnlockers, 1)
|
||||
m.RWMutex.Lock()
|
||||
@@ -153,7 +149,7 @@ func (m *loggedRWMutex) Lock() {
|
||||
|
||||
func (m *loggedRWMutex) Unlock() {
|
||||
currentHolder := m.holder.Load().(holder)
|
||||
duration := defaultClock.Now().Sub(currentHolder.time)
|
||||
duration := timeNow().Sub(currentHolder.time)
|
||||
if duration >= threshold {
|
||||
l.Debugf("RWMutex held for %v. Locked at %s unlocked at %s", duration, currentHolder.at, getHolder().at)
|
||||
}
|
||||
@@ -205,9 +201,9 @@ type loggedWaitGroup struct {
|
||||
}
|
||||
|
||||
func (wg *loggedWaitGroup) Wait() {
|
||||
start := defaultClock.Now()
|
||||
start := timeNow()
|
||||
wg.WaitGroup.Wait()
|
||||
duration := defaultClock.Now().Sub(start)
|
||||
duration := timeNow().Sub(start)
|
||||
if duration >= threshold {
|
||||
l.Debugf("WaitGroup took %v at %s", duration, getHolder())
|
||||
}
|
||||
@@ -219,7 +215,7 @@ func getHolder() holder {
|
||||
return holder{
|
||||
at: fmt.Sprintf("%s:%d", file, line),
|
||||
goid: goid(),
|
||||
time: defaultClock.Now(),
|
||||
time: timeNow(),
|
||||
}
|
||||
}
|
||||
|
||||
@@ -300,9 +296,3 @@ func (w *TimeoutCondWaiter) Wait() bool {
|
||||
func (w *TimeoutCondWaiter) Stop() {
|
||||
w.timer.Stop()
|
||||
}
|
||||
|
||||
type standardClock struct{}
|
||||
|
||||
func (*standardClock) Now() time.Time {
|
||||
return time.Now()
|
||||
}
|
||||
|
||||
@@ -57,10 +57,10 @@ func TestTypes(t *testing.T) {
|
||||
}
|
||||
|
||||
func TestMutex(t *testing.T) {
|
||||
oldClock := defaultClock
|
||||
oldClock := timeNow
|
||||
clock := newTestClock()
|
||||
defaultClock = clock
|
||||
defer func() { defaultClock = oldClock }()
|
||||
timeNow = clock.Now
|
||||
defer func() { timeNow = oldClock }()
|
||||
|
||||
debug = true
|
||||
l.SetDebug("sync", true)
|
||||
@@ -97,10 +97,10 @@ func TestMutex(t *testing.T) {
|
||||
}
|
||||
|
||||
func TestRWMutex(t *testing.T) {
|
||||
oldClock := defaultClock
|
||||
oldClock := timeNow
|
||||
clock := newTestClock()
|
||||
defaultClock = clock
|
||||
defer func() { defaultClock = oldClock }()
|
||||
timeNow = clock.Now
|
||||
defer func() { timeNow = oldClock }()
|
||||
|
||||
debug = true
|
||||
l.SetDebug("sync", true)
|
||||
@@ -170,10 +170,10 @@ func TestRWMutex(t *testing.T) {
|
||||
}
|
||||
|
||||
func TestWaitGroup(t *testing.T) {
|
||||
oldClock := defaultClock
|
||||
oldClock := timeNow
|
||||
clock := newTestClock()
|
||||
defaultClock = clock
|
||||
defer func() { defaultClock = oldClock }()
|
||||
timeNow = clock.Now
|
||||
defer func() { timeNow = oldClock }()
|
||||
|
||||
debug = true
|
||||
l.SetDebug("sync", true)
|
||||
|
||||
@@ -38,7 +38,11 @@ func (s *auditService) Serve(ctx context.Context) error {
|
||||
|
||||
for {
|
||||
select {
|
||||
case ev := <-sub.C():
|
||||
case ev, ok := <-sub.C():
|
||||
if !ok {
|
||||
<-ctx.Done()
|
||||
return ctx.Err()
|
||||
}
|
||||
enc.Encode(ev)
|
||||
case <-ctx.Done():
|
||||
return ctx.Err()
|
||||
|
||||
@@ -59,9 +59,12 @@ func GenerateCertificate(certFile, keyFile string) (tls.Certificate, error) {
|
||||
return tlsutil.NewCertificate(certFile, keyFile, tlsDefaultCommonName, deviceCertLifetimeDays)
|
||||
}
|
||||
|
||||
func DefaultConfig(path string, myID protocol.DeviceID, evLogger events.Logger, noDefaultFolder bool) (config.Wrapper, error) {
|
||||
newCfg, err := config.NewWithFreePorts(myID)
|
||||
if err != nil {
|
||||
func DefaultConfig(path string, myID protocol.DeviceID, evLogger events.Logger, noDefaultFolder, skipPortProbing bool) (config.Wrapper, error) {
|
||||
newCfg := config.New(myID)
|
||||
|
||||
if skipPortProbing {
|
||||
l.Infoln("Using default network port numbers instead of probing for free ports")
|
||||
} else if err := newCfg.ProbeFreePorts(); err != nil {
|
||||
return nil, err
|
||||
}
|
||||
|
||||
@@ -84,11 +87,11 @@ func DefaultConfig(path string, myID protocol.DeviceID, evLogger events.Logger,
|
||||
// creates a default one, without the default folder if noDefaultFolder is ture.
|
||||
// Otherwise it checks the version, and archives and upgrades the config if
|
||||
// necessary or returns an error, if the version isn't compatible.
|
||||
func LoadConfigAtStartup(path string, cert tls.Certificate, evLogger events.Logger, allowNewerConfig, noDefaultFolder bool) (config.Wrapper, error) {
|
||||
func LoadConfigAtStartup(path string, cert tls.Certificate, evLogger events.Logger, allowNewerConfig, noDefaultFolder, skipPortProbing bool) (config.Wrapper, error) {
|
||||
myID := protocol.NewDeviceID(cert.Certificate[0])
|
||||
cfg, originalVersion, err := config.Load(path, myID, evLogger)
|
||||
if fs.IsNotExist(err) {
|
||||
cfg, err = DefaultConfig(path, myID, evLogger, noDefaultFolder)
|
||||
cfg, err = DefaultConfig(path, myID, evLogger, noDefaultFolder, skipPortProbing)
|
||||
if err != nil {
|
||||
return nil, errors.Wrap(err, "failed to generate default config")
|
||||
}
|
||||
|
||||
@@ -31,7 +31,11 @@ func (s *verboseService) Serve(ctx context.Context) error {
|
||||
defer sub.Unsubscribe()
|
||||
for {
|
||||
select {
|
||||
case ev := <-sub.C():
|
||||
case ev, ok := <-sub.C():
|
||||
if !ok {
|
||||
<-ctx.Done()
|
||||
return ctx.Err()
|
||||
}
|
||||
formatted := s.formatEvent(ev)
|
||||
if formatted != "" {
|
||||
l.Verboseln(formatted)
|
||||
|
||||
@@ -391,7 +391,7 @@ func verifyUpgrade(archiveName, tempName string, sig []byte) error {
|
||||
// multireader. This ensures that it is not only a bonafide syncthing
|
||||
// binary, but it is also of exactly the platform and version we expect.
|
||||
|
||||
mr := io.MultiReader(bytes.NewBufferString(archiveName+"\n"), fd)
|
||||
mr := io.MultiReader(strings.NewReader(archiveName+"\n"), fd)
|
||||
err = signature.Verify(SigningKey, sig, mr)
|
||||
fd.Close()
|
||||
|
||||
|
||||
@@ -162,8 +162,10 @@ func (a *aggregator) mainLoop(in <-chan fs.Event, out chan<- []string, cfg confi
|
||||
select {
|
||||
case event := <-in:
|
||||
a.newEvent(event, inProgress)
|
||||
case event := <-inProgressItemSubscription.C():
|
||||
updateInProgressSet(event, inProgress)
|
||||
case event, ok := <-inProgressItemSubscription.C():
|
||||
if ok {
|
||||
updateInProgressSet(event, inProgress)
|
||||
}
|
||||
case <-a.notifyTimer.C:
|
||||
a.actOnTimer(out)
|
||||
case interval := <-a.notifyTimerResetChan:
|
||||
|
||||
+1
-1
@@ -27,7 +27,7 @@ level margin: \\n[rst2man-indent\\n[rst2man-indent-level]]
|
||||
.\" new: \\n[rst2man-indent\\n[rst2man-indent-level]]
|
||||
.in \\n[rst2man-indent\\n[rst2man-indent-level]]u
|
||||
..
|
||||
.TH "STDISCOSRV" "1" "Oct 17, 2021" "v1" "Syncthing"
|
||||
.TH "STDISCOSRV" "1" "Jan 12, 2022" "v1" "Syncthing"
|
||||
.SH NAME
|
||||
stdiscosrv \- Syncthing Discovery Server
|
||||
.SH SYNOPSIS
|
||||
|
||||
+1
-1
@@ -27,7 +27,7 @@ level margin: \\n[rst2man-indent\\n[rst2man-indent-level]]
|
||||
.\" new: \\n[rst2man-indent\\n[rst2man-indent-level]]
|
||||
.in \\n[rst2man-indent\\n[rst2man-indent-level]]u
|
||||
..
|
||||
.TH "STRELAYSRV" "1" "Oct 17, 2021" "v1" "Syncthing"
|
||||
.TH "STRELAYSRV" "1" "Jan 12, 2022" "v1" "Syncthing"
|
||||
.SH NAME
|
||||
strelaysrv \- Syncthing Relay Server
|
||||
.SH SYNOPSIS
|
||||
|
||||
+1
-1
@@ -27,7 +27,7 @@ level margin: \\n[rst2man-indent\\n[rst2man-indent-level]]
|
||||
.\" new: \\n[rst2man-indent\\n[rst2man-indent-level]]
|
||||
.in \\n[rst2man-indent\\n[rst2man-indent-level]]u
|
||||
..
|
||||
.TH "SYNCTHING-BEP" "7" "Oct 17, 2021" "v1" "Syncthing"
|
||||
.TH "SYNCTHING-BEP" "7" "Jan 12, 2022" "v1" "Syncthing"
|
||||
.SH NAME
|
||||
syncthing-bep \- Block Exchange Protocol v1
|
||||
.SH INTRODUCTION AND DEFINITIONS
|
||||
|
||||
+180
-28
@@ -27,7 +27,7 @@ level margin: \\n[rst2man-indent\\n[rst2man-indent-level]]
|
||||
.\" new: \\n[rst2man-indent\\n[rst2man-indent-level]]
|
||||
.in \\n[rst2man-indent\\n[rst2man-indent-level]]u
|
||||
..
|
||||
.TH "SYNCTHING-CONFIG" "5" "Oct 17, 2021" "v1" "Syncthing"
|
||||
.TH "SYNCTHING-CONFIG" "5" "Jan 12, 2022" "v1" "Syncthing"
|
||||
.SH NAME
|
||||
syncthing-config \- Syncthing Configuration
|
||||
.SH SYNOPSIS
|
||||
@@ -115,12 +115,18 @@ may no longer correspond to the defaults.
|
||||
.sp
|
||||
.nf
|
||||
.ft C
|
||||
<configuration version="30">
|
||||
<configuration version="35">
|
||||
<folder id="default" label="Default Folder" path="/Users/jb/Sync/" type="sendreceive" rescanIntervalS="3600" fsWatcherEnabled="true" fsWatcherDelayS="10" ignorePerms="false" autoNormalize="true">
|
||||
<filesystemType>basic</filesystemType>
|
||||
<device id="3LT2GA5\-CQI4XJM\-WTZ264P\-MLOGMHL\-MCRLDNT\-MZV4RD3\-KA745CL\-OGAERQZ"></device>
|
||||
<device id="S7UKX27\-GI7ZTXS\-GC6RKUA\-7AJGZ44\-C6NAYEB\-HSKTJQK\-KJHU2NO\-CWV7EQW" introducedBy="">
|
||||
<encryptionPassword></encryptionPassword>
|
||||
</device>
|
||||
<minDiskFree unit="%">1</minDiskFree>
|
||||
<versioning></versioning>
|
||||
<versioning>
|
||||
<cleanupIntervalS>3600</cleanupIntervalS>
|
||||
<fsPath></fsPath>
|
||||
<fsType>basic</fsType>
|
||||
</versioning>
|
||||
<copiers>0</copiers>
|
||||
<pullerMaxPendingKiB>0</pullerMaxPendingKiB>
|
||||
<hashers>0</hashers>
|
||||
@@ -140,14 +146,18 @@ may no longer correspond to the defaults.
|
||||
<disableFsync>false</disableFsync>
|
||||
<blockPullOrder>standard</blockPullOrder>
|
||||
<copyRangeMethod>standard</copyRangeMethod>
|
||||
<caseSensitiveFS>false</caseSensitiveFS>
|
||||
<junctionsAsDirs>false</junctionsAsDirs>
|
||||
</folder>
|
||||
<device id="3LT2GA5\-CQI4XJM\-WTZ264P\-MLOGMHL\-MCRLDNT\-MZV4RD3\-KA745CL\-OGAERQZ" name="syno" compression="metadata" introducer="false" skipIntroductionRemovals="false" introducedBy="">
|
||||
<device id="S7UKX27\-GI7ZTXS\-GC6RKUA\-7AJGZ44\-C6NAYEB\-HSKTJQK\-KJHU2NO\-CWV7EQW" name="syno" compression="metadata" introducer="false" skipIntroductionRemovals="false" introducedBy="">
|
||||
<address>dynamic</address>
|
||||
<paused>false</paused>
|
||||
<autoAcceptFolders>false</autoAcceptFolders>
|
||||
<maxSendKbps>0</maxSendKbps>
|
||||
<maxRecvKbps>0</maxRecvKbps>
|
||||
<ignoredFolder time="2022\-01\-09T19:09:52Z" id="br63e\-wyhb7" label="Foo"></ignoredFolder>
|
||||
<maxRequestKiB>0</maxRequestKiB>
|
||||
<untrusted>false</untrusted>
|
||||
<remoteGUIPort>0</remoteGUIPort>
|
||||
</device>
|
||||
<gui enabled="true" tls="false" debugging="false">
|
||||
@@ -190,8 +200,8 @@ may no longer correspond to the defaults.
|
||||
<releasesURL>https://upgrades.syncthing.net/meta.json</releasesURL>
|
||||
<overwriteRemoteDeviceNamesOnConnect>false</overwriteRemoteDeviceNamesOnConnect>
|
||||
<tempIndexMinBlocks>10</tempIndexMinBlocks>
|
||||
<unackedNotificationID>authenticationUserAndPassword</unackedNotificationID>
|
||||
<trafficClass>0</trafficClass>
|
||||
<defaultFolderPath>~</defaultFolderPath>
|
||||
<setLowPriority>true</setLowPriority>
|
||||
<maxFolderConcurrency>0</maxFolderConcurrency>
|
||||
<crashReportingURL>https://crash.syncthing.net/newcrash</crashReportingURL>
|
||||
@@ -201,7 +211,58 @@ may no longer correspond to the defaults.
|
||||
<stunServer>default</stunServer>
|
||||
<databaseTuning>auto</databaseTuning>
|
||||
<maxConcurrentIncomingRequestKiB>0</maxConcurrentIncomingRequestKiB>
|
||||
<announceLANAddresses>true</announceLANAddresses>
|
||||
<sendFullIndexOnUpgrade>false</sendFullIndexOnUpgrade>
|
||||
<connectionLimitEnough>0</connectionLimitEnough>
|
||||
<connectionLimitMax>0</connectionLimitMax>
|
||||
<insecureAllowOldTLSVersions>false</insecureAllowOldTLSVersions>
|
||||
</options>
|
||||
<remoteIgnoredDevice time="2022\-01\-09T20:02:01Z" id="5SYI2FS\-LW6YAXI\-JJDYETS\-NDBBPIO\-256MWBO\-XDPXWVG\-24QPUM4\-PDW4UQU" name="bugger" address="192.168.0.20:22000"></remoteIgnoredDevice>
|
||||
<defaults>
|
||||
<folder id="" label="" path="~" type="sendreceive" rescanIntervalS="3600" fsWatcherEnabled="true" fsWatcherDelayS="10" ignorePerms="false" autoNormalize="true">
|
||||
<filesystemType>basic</filesystemType>
|
||||
<device id="S7UKX27\-GI7ZTXS\-GC6RKUA\-7AJGZ44\-C6NAYEB\-HSKTJQK\-KJHU2NO\-CWV7EQW" introducedBy="">
|
||||
<encryptionPassword></encryptionPassword>
|
||||
</device>
|
||||
<minDiskFree unit="%">1</minDiskFree>
|
||||
<versioning>
|
||||
<cleanupIntervalS>3600</cleanupIntervalS>
|
||||
<fsPath></fsPath>
|
||||
<fsType>basic</fsType>
|
||||
</versioning>
|
||||
<copiers>0</copiers>
|
||||
<pullerMaxPendingKiB>0</pullerMaxPendingKiB>
|
||||
<hashers>0</hashers>
|
||||
<order>random</order>
|
||||
<ignoreDelete>false</ignoreDelete>
|
||||
<scanProgressIntervalS>0</scanProgressIntervalS>
|
||||
<pullerPauseS>0</pullerPauseS>
|
||||
<maxConflicts>10</maxConflicts>
|
||||
<disableSparseFiles>false</disableSparseFiles>
|
||||
<disableTempIndexes>false</disableTempIndexes>
|
||||
<paused>false</paused>
|
||||
<weakHashThresholdPct>25</weakHashThresholdPct>
|
||||
<markerName>.stfolder</markerName>
|
||||
<copyOwnershipFromParent>false</copyOwnershipFromParent>
|
||||
<modTimeWindowS>0</modTimeWindowS>
|
||||
<maxConcurrentWrites>2</maxConcurrentWrites>
|
||||
<disableFsync>false</disableFsync>
|
||||
<blockPullOrder>standard</blockPullOrder>
|
||||
<copyRangeMethod>standard</copyRangeMethod>
|
||||
<caseSensitiveFS>false</caseSensitiveFS>
|
||||
<junctionsAsDirs>false</junctionsAsDirs>
|
||||
</folder>
|
||||
<device id="" compression="metadata" introducer="false" skipIntroductionRemovals="false" introducedBy="">
|
||||
<address>dynamic</address>
|
||||
<paused>false</paused>
|
||||
<autoAcceptFolders>false</autoAcceptFolders>
|
||||
<maxSendKbps>0</maxSendKbps>
|
||||
<maxRecvKbps>0</maxRecvKbps>
|
||||
<maxRequestKiB>0</maxRequestKiB>
|
||||
<untrusted>false</untrusted>
|
||||
<remoteGUIPort>0</remoteGUIPort>
|
||||
</device>
|
||||
</defaults>
|
||||
</configuration>
|
||||
.ft P
|
||||
.fi
|
||||
@@ -213,14 +274,14 @@ may no longer correspond to the defaults.
|
||||
.sp
|
||||
.nf
|
||||
.ft C
|
||||
<configuration version="30">
|
||||
<configuration version="35">
|
||||
<folder></folder>
|
||||
<device></device>
|
||||
<gui></gui>
|
||||
<ldap></ldap>
|
||||
<options></options>
|
||||
<ignoredDevice>5SYI2FS\-LW6YAXI\-JJDYETS\-NDBBPIO\-256MWBO\-XDPXWVG\-24QPUM4\-PDW4UQU</ignoredDevice>
|
||||
<ignoredFolder>bd7q3\-zskm5</ignoredFolder>
|
||||
<remoteIgnoredDevice></remoteIgnoredDevice>
|
||||
<defaults></defaults>
|
||||
</configuration>
|
||||
.ft P
|
||||
.fi
|
||||
@@ -235,19 +296,14 @@ The config version. Increments whenever a change is made that requires
|
||||
migration from previous formats.
|
||||
.UNINDENT
|
||||
.sp
|
||||
It contains the elements described in the following sections and these two
|
||||
additional child elements:
|
||||
It contains the elements described in the following sections and any number of
|
||||
this additional child element:
|
||||
.INDENT 0.0
|
||||
.TP
|
||||
.B ignoredDevice
|
||||
.B remoteIgnoredDevice
|
||||
Contains the ID of the device that should be ignored. Connection attempts
|
||||
from this device are logged to the console but never displayed in the web
|
||||
GUI.
|
||||
.TP
|
||||
.B ignoredFolder
|
||||
Contains the ID of the folder that should be ignored. This folder will
|
||||
always be skipped when advertised from a remote device, i.e. this will be
|
||||
logged, but there will be no dialog shown in the web GUI.
|
||||
.UNINDENT
|
||||
.SH FOLDER ELEMENT
|
||||
.INDENT 0.0
|
||||
@@ -257,9 +313,15 @@ logged, but there will be no dialog shown in the web GUI.
|
||||
.ft C
|
||||
<folder id="default" label="Default Folder" path="/Users/jb/Sync/" type="sendreceive" rescanIntervalS="3600" fsWatcherEnabled="true" fsWatcherDelayS="10" ignorePerms="false" autoNormalize="true">
|
||||
<filesystemType>basic</filesystemType>
|
||||
<device id="3LT2GA5\-CQI4XJM\-WTZ264P\-MLOGMHL\-MCRLDNT\-MZV4RD3\-KA745CL\-OGAERQZ"></device>
|
||||
<device id="S7UKX27\-GI7ZTXS\-GC6RKUA\-7AJGZ44\-C6NAYEB\-HSKTJQK\-KJHU2NO\-CWV7EQW" introducedBy="">
|
||||
<encryptionPassword></encryptionPassword>
|
||||
</device>
|
||||
<minDiskFree unit="%">1</minDiskFree>
|
||||
<versioning></versioning>
|
||||
<versioning>
|
||||
<cleanupIntervalS>3600</cleanupIntervalS>
|
||||
<fsPath></fsPath>
|
||||
<fsType>basic</fsType>
|
||||
</versioning>
|
||||
<copiers>0</copiers>
|
||||
<pullerMaxPendingKiB>0</pullerMaxPendingKiB>
|
||||
<hashers>0</hashers>
|
||||
@@ -279,6 +341,8 @@ logged, but there will be no dialog shown in the web GUI.
|
||||
<disableFsync>false</disableFsync>
|
||||
<blockPullOrder>standard</blockPullOrder>
|
||||
<copyRangeMethod>standard</copyRangeMethod>
|
||||
<caseSensitiveFS>false</caseSensitiveFS>
|
||||
<junctionsAsDirs>false</junctionsAsDirs>
|
||||
</folder>
|
||||
.ft P
|
||||
.fi
|
||||
@@ -519,16 +583,18 @@ See folder\-copyRangeMethod for details.
|
||||
.sp
|
||||
.nf
|
||||
.ft C
|
||||
<device id="5SYI2FS\-LW6YAXI\-JJDYETS\-NDBBPIO\-256MWBO\-XDPXWVG\-24QPUM4\-PDW4UQU" name="syno" compression="metadata" introducer="false" skipIntroductionRemovals="false" introducedBy="2CYF2WQ\-AKZO2QZ\-JAKWLYD\-AGHMQUM\-BGXUOIS\-GYILW34\-HJG3DUK\-LRRYQAR">
|
||||
<device id="S7UKX27\-GI7ZTXS\-GC6RKUA\-7AJGZ44\-C6NAYEB\-HSKTJQK\-KJHU2NO\-CWV7EQW" name="syno" compression="metadata" introducer="false" skipIntroductionRemovals="false" introducedBy="2CYF2WQ\-AKZO2QZ\-JAKWLYD\-AGHMQUM\-BGXUOIS\-GYILW34\-HJG3DUK\-LRRYQAR">
|
||||
<address>dynamic</address>
|
||||
<paused>false</paused>
|
||||
<autoAcceptFolders>false</autoAcceptFolders>
|
||||
<maxSendKbps>0</maxSendKbps>
|
||||
<maxRecvKbps>0</maxRecvKbps>
|
||||
<ignoredFolder time="2022\-01\-09T19:09:52Z" id="br63e\-wyhb7" label="Foo"></ignoredFolder>
|
||||
<maxRequestKiB>0</maxRequestKiB>
|
||||
<untrusted>false</untrusted>
|
||||
<remoteGUIPort>0</remoteGUIPort>
|
||||
</device>
|
||||
<device id="2CYF2WQ\-AKZO2QZ\-JAKWLYD\-AGHMQUM\-BGXUOIS\-GYILW34\-HJG3DUK\-LRRYQAR" name="syno local" compression="metadata" introducer="false" skipIntroductionRemovals="false" introducedBy="">
|
||||
<device id="2CYF2WQ\-AKZO2QZ\-JAKWLYD\-AGHMQUM\-BGXUOIS\-GYILW34\-HJG3DUK\-LRRYQAR" name="syno local" compression="metadata" introducer="true" skipIntroductionRemovals="false" introducedBy="">
|
||||
<address>tcp://192.0.2.1:22001</address>
|
||||
<paused>true</paused>
|
||||
<allowedNetwork>192.168.0.0/16</allowedNetwork>
|
||||
@@ -536,6 +602,7 @@ See folder\-copyRangeMethod for details.
|
||||
<maxSendKbps>100</maxSendKbps>
|
||||
<maxRecvKbps>100</maxRecvKbps>
|
||||
<maxRequestKiB>65536</maxRequestKiB>
|
||||
<untrusted>false</untrusted>
|
||||
<remoteGUIPort>8384</remoteGUIPort>
|
||||
</device>
|
||||
.ft P
|
||||
@@ -669,6 +736,11 @@ the config name looking like kilobits/second.
|
||||
Maximum receive rate to use for this device. Unit is kibibytes/second,
|
||||
despite the config name looking like kilobits/second.
|
||||
.TP
|
||||
.B ignoredFolder
|
||||
Contains the ID of the folder that should be ignored. This folder will
|
||||
always be skipped when advertised from the containing remote device,
|
||||
i.e. this will be logged, but there will be no dialog shown in the web GUI.
|
||||
.TP
|
||||
.B maxRequestKiB
|
||||
Maximum amount of data to have outstanding in requests towards this device.
|
||||
Unit is kibibytes.
|
||||
@@ -688,7 +760,7 @@ work for link\-local IPv6 addresses because of modern browser limitations.
|
||||
.ft C
|
||||
<gui enabled="true" tls="false" debugging="false">
|
||||
<address>127.0.0.1:8384</address>
|
||||
<apikey>l7jSbCqPD95JYZ0g8vi4ZLAMg3ulnN1b</apikey>
|
||||
<apikey>k1dnz1Dd0rzTBjjFFh7CXPnrF12C49B1</apikey>
|
||||
<theme>default</theme>
|
||||
</gui>
|
||||
.ft P
|
||||
@@ -717,7 +789,7 @@ The following child elements may be present:
|
||||
.INDENT 0.0
|
||||
.TP
|
||||
.B address
|
||||
Set the listen address. One address element must be present. Allowed address formats are:
|
||||
Set the listen address. Exactly one address element must be present. Allowed address formats are:
|
||||
.INDENT 7.0
|
||||
.TP
|
||||
.B IPv4 address and port (\fB127.0.0.1:8384\fP)
|
||||
@@ -856,8 +928,8 @@ Skip verification (\fBtrue\fP or \fBfalse\fP).
|
||||
<releasesURL>https://upgrades.syncthing.net/meta.json</releasesURL>
|
||||
<overwriteRemoteDeviceNamesOnConnect>false</overwriteRemoteDeviceNamesOnConnect>
|
||||
<tempIndexMinBlocks>10</tempIndexMinBlocks>
|
||||
<unackedNotificationID>authenticationUserAndPassword</unackedNotificationID>
|
||||
<trafficClass>0</trafficClass>
|
||||
<defaultFolderPath>~</defaultFolderPath>
|
||||
<setLowPriority>true</setLowPriority>
|
||||
<maxFolderConcurrency>0</maxFolderConcurrency>
|
||||
<crashReportingURL>https://crash.syncthing.net/newcrash</crashReportingURL>
|
||||
@@ -867,6 +939,11 @@ Skip verification (\fBtrue\fP or \fBfalse\fP).
|
||||
<stunServer>default</stunServer>
|
||||
<databaseTuning>auto</databaseTuning>
|
||||
<maxConcurrentIncomingRequestKiB>0</maxConcurrentIncomingRequestKiB>
|
||||
<announceLANAddresses>true</announceLANAddresses>
|
||||
<sendFullIndexOnUpgrade>false</sendFullIndexOnUpgrade>
|
||||
<connectionLimitEnough>0</connectionLimitEnough>
|
||||
<connectionLimitMax>0</connectionLimitMax>
|
||||
<insecureAllowOldTLSVersions>false</insecureAllowOldTLSVersions>
|
||||
</options>
|
||||
.ft P
|
||||
.fi
|
||||
@@ -1030,10 +1107,6 @@ expanded to
|
||||
Interval in seconds between contacting a STUN server to
|
||||
maintain NAT mapping. Default is \fB24\fP and you can set it to \fB0\fP to
|
||||
disable contacting STUN servers.
|
||||
.TP
|
||||
.B defaultFolderPath
|
||||
The UI will propose to create new folders at this path. This can be disabled by
|
||||
setting this to an empty string.
|
||||
.UNINDENT
|
||||
.INDENT 0.0
|
||||
.TP
|
||||
@@ -1046,6 +1119,85 @@ to nine; on Windows, set the process priority class to below normal. To
|
||||
disable this behavior, for example to control process priority yourself
|
||||
as part of launching Syncthing, set this option to \fBfalse\fP\&.
|
||||
.UNINDENT
|
||||
.SH DEFAULTS ELEMENT
|
||||
.INDENT 0.0
|
||||
.INDENT 3.5
|
||||
.sp
|
||||
.nf
|
||||
.ft C
|
||||
<defaults>
|
||||
<folder id="" label="" path="~" type="sendreceive" rescanIntervalS="3600" fsWatcherEnabled="true" fsWatcherDelayS="10" ignorePerms="false" autoNormalize="true">
|
||||
<filesystemType>basic</filesystemType>
|
||||
<device id="S7UKX27\-GI7ZTXS\-GC6RKUA\-7AJGZ44\-C6NAYEB\-HSKTJQK\-KJHU2NO\-CWV7EQW" introducedBy="">
|
||||
<encryptionPassword></encryptionPassword>
|
||||
</device>
|
||||
<minDiskFree unit="%">1</minDiskFree>
|
||||
<versioning>
|
||||
<cleanupIntervalS>3600</cleanupIntervalS>
|
||||
<fsPath></fsPath>
|
||||
<fsType>basic</fsType>
|
||||
</versioning>
|
||||
<copiers>0</copiers>
|
||||
<pullerMaxPendingKiB>0</pullerMaxPendingKiB>
|
||||
<hashers>0</hashers>
|
||||
<order>random</order>
|
||||
<ignoreDelete>false</ignoreDelete>
|
||||
<scanProgressIntervalS>0</scanProgressIntervalS>
|
||||
<pullerPauseS>0</pullerPauseS>
|
||||
<maxConflicts>10</maxConflicts>
|
||||
<disableSparseFiles>false</disableSparseFiles>
|
||||
<disableTempIndexes>false</disableTempIndexes>
|
||||
<paused>false</paused>
|
||||
<weakHashThresholdPct>25</weakHashThresholdPct>
|
||||
<markerName>.stfolder</markerName>
|
||||
<copyOwnershipFromParent>false</copyOwnershipFromParent>
|
||||
<modTimeWindowS>0</modTimeWindowS>
|
||||
<maxConcurrentWrites>2</maxConcurrentWrites>
|
||||
<disableFsync>false</disableFsync>
|
||||
<blockPullOrder>standard</blockPullOrder>
|
||||
<copyRangeMethod>standard</copyRangeMethod>
|
||||
<caseSensitiveFS>false</caseSensitiveFS>
|
||||
<junctionsAsDirs>false</junctionsAsDirs>
|
||||
</folder>
|
||||
<device id="" compression="metadata" introducer="false" skipIntroductionRemovals="false" introducedBy="">
|
||||
<address>dynamic</address>
|
||||
<paused>false</paused>
|
||||
<autoAcceptFolders>false</autoAcceptFolders>
|
||||
<maxSendKbps>0</maxSendKbps>
|
||||
<maxRecvKbps>0</maxRecvKbps>
|
||||
<maxRequestKiB>0</maxRequestKiB>
|
||||
<untrusted>false</untrusted>
|
||||
<remoteGUIPort>0</remoteGUIPort>
|
||||
</device>
|
||||
</defaults>
|
||||
.ft P
|
||||
.fi
|
||||
.UNINDENT
|
||||
.UNINDENT
|
||||
.sp
|
||||
The \fBdefaults\fP element describes a template for newly added device and folder
|
||||
options. These will be used when adding a new remote device or folder, either
|
||||
through the GUI or the command line interface. The following child elements can
|
||||
be present in the \fBdefaults\fP element:
|
||||
.INDENT 0.0
|
||||
.TP
|
||||
.B device
|
||||
Template for a \fBdevice\fP element, with the same internal structure. Any
|
||||
fields here will be used for a newly added remote device. The \fBid\fP
|
||||
attribute is meaningless in this context.
|
||||
.TP
|
||||
.B folder
|
||||
Template for a \fBfolder\fP element, with the same internal structure. Any
|
||||
fields here will be used for a newly added shared folder. The \fBid\fP
|
||||
attribute is meaningless in this context.
|
||||
.sp
|
||||
The UI will propose to create new folders at the path given in the \fBpath\fP
|
||||
attribute (used to be \fBdefaultFolderPath\fP under \fBoptions\fP). It also
|
||||
applies to folders automatically accepted from a remote device.
|
||||
.sp
|
||||
Even sharing with other remote devices can be done in the template by
|
||||
including the appropriate \fBdevice\fP element underneath.
|
||||
.UNINDENT
|
||||
.SS Listen Addresses
|
||||
.sp
|
||||
The following address types are accepted in sync protocol listen addresses.
|
||||
|
||||
@@ -27,7 +27,7 @@ level margin: \\n[rst2man-indent\\n[rst2man-indent-level]]
|
||||
.\" new: \\n[rst2man-indent\\n[rst2man-indent-level]]
|
||||
.in \\n[rst2man-indent\\n[rst2man-indent-level]]u
|
||||
..
|
||||
.TH "SYNCTHING-DEVICE-IDS" "7" "Oct 17, 2021" "v1" "Syncthing"
|
||||
.TH "SYNCTHING-DEVICE-IDS" "7" "Jan 12, 2022" "v1" "Syncthing"
|
||||
.SH NAME
|
||||
syncthing-device-ids \- Understanding Device IDs
|
||||
.sp
|
||||
|
||||
@@ -27,7 +27,7 @@ level margin: \\n[rst2man-indent\\n[rst2man-indent-level]]
|
||||
.\" new: \\n[rst2man-indent\\n[rst2man-indent-level]]
|
||||
.in \\n[rst2man-indent\\n[rst2man-indent-level]]u
|
||||
..
|
||||
.TH "SYNCTHING-EVENT-API" "7" "Oct 17, 2021" "v1" "Syncthing"
|
||||
.TH "SYNCTHING-EVENT-API" "7" "Jan 12, 2022" "v1" "Syncthing"
|
||||
.SH NAME
|
||||
syncthing-event-api \- Event API
|
||||
.SH DESCRIPTION
|
||||
|
||||
+34
-15
@@ -27,7 +27,7 @@ level margin: \\n[rst2man-indent\\n[rst2man-indent-level]]
|
||||
.\" new: \\n[rst2man-indent\\n[rst2man-indent-level]]
|
||||
.in \\n[rst2man-indent\\n[rst2man-indent-level]]u
|
||||
..
|
||||
.TH "SYNCTHING-FAQ" "7" "Oct 17, 2021" "v1" "Syncthing"
|
||||
.TH "SYNCTHING-FAQ" "7" "Jan 12, 2022" "v1" "Syncthing"
|
||||
.SH NAME
|
||||
syncthing-faq \- Frequently Asked Questions
|
||||
.INDENT 0.0
|
||||
@@ -45,7 +45,7 @@ syncthing-faq \- Frequently Asked Questions
|
||||
.IP \(bu 2
|
||||
\fI\%How does Syncthing differ from BitTorrent/Resilio Sync?\fP
|
||||
.IP \(bu 2
|
||||
\fI\%Why is there no iOS client?\fP
|
||||
\fI\%Is there an iOS client?\fP
|
||||
.IP \(bu 2
|
||||
\fI\%Should I keep my device IDs secret?\fP
|
||||
.UNINDENT
|
||||
@@ -93,6 +93,8 @@ syncthing-faq \- Frequently Asked Questions
|
||||
.IP \(bu 2
|
||||
\fI\%When I do have two distinct Syncthing\-managed folders on two hosts, how does Syncthing handle moving files between them?\fP
|
||||
.IP \(bu 2
|
||||
\fI\%Can I help initial sync by copying files manually?\fP
|
||||
.IP \(bu 2
|
||||
\fI\%Is Syncthing my ideal backup application?\fP
|
||||
.IP \(bu 2
|
||||
\fI\%How can I exclude files with brackets ([]) in the name?\fP
|
||||
@@ -172,9 +174,9 @@ the faster an additional device will receive the data
|
||||
because small blocks will be fetched from all devices in parallel.
|
||||
.sp
|
||||
Syncthing handles renaming files and updating their metadata in an efficient
|
||||
manner. This means that renaming a large file will not cause a retransmission of
|
||||
that file. Additionally, appending data to existing large files should be
|
||||
handled efficiently as well.
|
||||
manner. This means that renaming a file will not cause a retransmission of
|
||||
that file. Additionally, appending data to existing files should be handled
|
||||
efficiently as well.
|
||||
.sp
|
||||
Temporary files are used to store partial data
|
||||
downloaded from other devices. They are automatically removed whenever a file
|
||||
@@ -195,12 +197,16 @@ mechanisms in use are well defined and visible in the source code. Resilio
|
||||
Sync uses an undocumented, closed protocol with unknown security properties.
|
||||
.IP [1] 5
|
||||
\fI\%https://en.wikipedia.org/wiki/Resilio_Sync\fP
|
||||
.SS Why is there no iOS client?
|
||||
.SS Is there an iOS client?
|
||||
.sp
|
||||
There is an alternative implementation of Syncthing (using the same network
|
||||
protocol) called \fBfsync()\fP\&. There are no plans by the current Syncthing
|
||||
team to support iOS in the foreseeable future, as the code required to do so
|
||||
would be quite different from what Syncthing is today.
|
||||
There are no plans by the current Syncthing team to officially support iOS in the foreseeable future.
|
||||
.sp
|
||||
iOS has significant restrictions on background processing that make it very hard to
|
||||
run Syncthing reliably and integrate it into the system.
|
||||
.sp
|
||||
However, there is a commercial packaging of Syncthing for iOS that attempts to work within these limitations. [2]
|
||||
.IP [2] 5
|
||||
\fI\%https://www.mobiussync.com\fP
|
||||
.SS Should I keep my device IDs secret?
|
||||
.sp
|
||||
No. The IDs are not sensitive. Given a device ID it’s possible to find the IP
|
||||
@@ -225,7 +231,7 @@ device\-ids
|
||||
.sp
|
||||
Syncthing logs to stdout by default. On Windows Syncthing by default also
|
||||
creates \fBsyncthing.log\fP in Syncthing’s home directory (run \fBsyncthing
|
||||
\-paths\fP to see where that is). The command line option \fB\-logfile\fP can be
|
||||
\-\-paths\fP to see where that is). The command line option \fB\-\-logfile\fP can be
|
||||
used to specify a user\-defined logfile.
|
||||
.sp
|
||||
If you’re running a process manager like systemd, check there. If you’re
|
||||
@@ -332,7 +338,7 @@ crashes and other bugs.
|
||||
.SS How can I view the history of changes?
|
||||
.sp
|
||||
The web GUI contains a \fBRecent Changes\fP button under the device list which
|
||||
displays changes since the last (re)start of Syncthing. With the \fB\-audit\fP
|
||||
displays changes since the last (re)start of Syncthing. With the \fB\-\-audit\fP
|
||||
option you can enable a persistent, detailed log of changes and most
|
||||
activities, which contains a \fBJSON\fP formatted sequence of events in the
|
||||
\fB~/.config/syncthing/audit\-_date_\-_time_.log\fP file.
|
||||
@@ -397,7 +403,7 @@ The easy way to rename or move a synced folder on the local system is to
|
||||
remove the folder in the Syncthing UI, move it on disk, then re\-add it using
|
||||
the new path.
|
||||
.sp
|
||||
It’s best to do this when the folder is already in sync between your
|
||||
It’s important to do this when the folder is already in sync between your
|
||||
devices, as it is otherwise unpredictable which changes will “win” after the
|
||||
move. Changes made on other devices may be overwritten, or changes made
|
||||
locally may be overwritten by those on other devices.
|
||||
@@ -432,6 +438,19 @@ block) from A, and then as A gets rescanned, it will remove the files from A.
|
||||
.sp
|
||||
A workaround would be to copy first from A to B, rescan B, wait for B to
|
||||
copy the files on the remote side, and then delete from A.
|
||||
.SS Can I help initial sync by copying files manually?
|
||||
.sp
|
||||
If you have a large folder that you want to keep in sync over a not\-so\-fast network, and you have the possibility to move all files to the remote device in a faster manner, here is a procedure to follow:
|
||||
.INDENT 0.0
|
||||
.IP \(bu 2
|
||||
Create the folder on the local device, but don’t share it with the remote device yet.
|
||||
.IP \(bu 2
|
||||
Copy the files from the local device to the remote device using regular file copy. If this takes a long time (perhaps requiring travelling there physically), it may be a good idea to make sure that the files on the local device are not updated while you are doing this.
|
||||
.IP \(bu 2
|
||||
Create the folder on the remote device, and copy the Folder ID from the folder on the local device, as we want the folders to be considered the same. Then wait until scanning the folder is done.
|
||||
.IP \(bu 2
|
||||
Now share the folder with the other device, on both sides. Syncthing will exchange file information, updating the database, but existing files will not be transferred. This may still take a while initially, be patient and wait until it settled.
|
||||
.UNINDENT
|
||||
.SS Is Syncthing my ideal backup application?
|
||||
.sp
|
||||
No. Syncthing is not a great backup application because all changes to your
|
||||
@@ -531,7 +550,7 @@ own.
|
||||
By default, Syncthing will look for a directory \fBgui\fP inside the Syncthing
|
||||
home folder. To change the directory to look for themes, you need to set the
|
||||
STGUIASSETS environment variable. To get the concrete directory, run
|
||||
syncthing with the \fB\-paths\fP parameter. It will print all the relevant paths,
|
||||
syncthing with the \fB\-\-paths\fP parameter. It will print all the relevant paths,
|
||||
including the “GUI override directory”.
|
||||
.sp
|
||||
To add e.g. a red theme, you can create the file \fBred/assets/css/theme.css\fP
|
||||
@@ -553,7 +572,7 @@ upgrade itself automatically within 24 hours of a new release.
|
||||
The upgrade button appears in the web GUI when a new version has been
|
||||
released. Pressing it will perform an upgrade.
|
||||
.IP \(bu 2
|
||||
To force an upgrade from the command line, run \fBsyncthing \-upgrade\fP\&.
|
||||
To force an upgrade from the command line, run \fBsyncthing \-\-upgrade\fP\&.
|
||||
.UNINDENT
|
||||
.sp
|
||||
Note that your system should have CA certificates installed which allows a
|
||||
|
||||
@@ -27,7 +27,7 @@ level margin: \\n[rst2man-indent\\n[rst2man-indent-level]]
|
||||
.\" new: \\n[rst2man-indent\\n[rst2man-indent-level]]
|
||||
.in \\n[rst2man-indent\\n[rst2man-indent-level]]u
|
||||
..
|
||||
.TH "SYNCTHING-GLOBALDISCO" "7" "Oct 17, 2021" "v1" "Syncthing"
|
||||
.TH "SYNCTHING-GLOBALDISCO" "7" "Jan 12, 2022" "v1" "Syncthing"
|
||||
.SH NAME
|
||||
syncthing-globaldisco \- Global Discovery Protocol v3
|
||||
.SH ANNOUNCEMENTS
|
||||
|
||||
@@ -27,7 +27,7 @@ level margin: \\n[rst2man-indent\\n[rst2man-indent-level]]
|
||||
.\" new: \\n[rst2man-indent\\n[rst2man-indent-level]]
|
||||
.in \\n[rst2man-indent\\n[rst2man-indent-level]]u
|
||||
..
|
||||
.TH "SYNCTHING-LOCALDISCO" "7" "Oct 17, 2021" "v1" "Syncthing"
|
||||
.TH "SYNCTHING-LOCALDISCO" "7" "Jan 12, 2022" "v1" "Syncthing"
|
||||
.SH NAME
|
||||
syncthing-localdisco \- Local Discovery Protocol v4
|
||||
.SH MODE OF OPERATION
|
||||
|
||||
@@ -27,7 +27,7 @@ level margin: \\n[rst2man-indent\\n[rst2man-indent-level]]
|
||||
.\" new: \\n[rst2man-indent\\n[rst2man-indent-level]]
|
||||
.in \\n[rst2man-indent\\n[rst2man-indent-level]]u
|
||||
..
|
||||
.TH "SYNCTHING-NETWORKING" "7" "Oct 17, 2021" "v1" "Syncthing"
|
||||
.TH "SYNCTHING-NETWORKING" "7" "Jan 12, 2022" "v1" "Syncthing"
|
||||
.SH NAME
|
||||
syncthing-networking \- Firewall Setup
|
||||
.SH ROUTER SETUP
|
||||
|
||||
@@ -27,7 +27,7 @@ level margin: \\n[rst2man-indent\\n[rst2man-indent-level]]
|
||||
.\" new: \\n[rst2man-indent\\n[rst2man-indent-level]]
|
||||
.in \\n[rst2man-indent\\n[rst2man-indent-level]]u
|
||||
..
|
||||
.TH "SYNCTHING-RELAY" "7" "Oct 17, 2021" "v1" "Syncthing"
|
||||
.TH "SYNCTHING-RELAY" "7" "Jan 12, 2022" "v1" "Syncthing"
|
||||
.SH NAME
|
||||
syncthing-relay \- Relay Protocol v1
|
||||
.SH WHAT IS A RELAY?
|
||||
|
||||
+137
-32
@@ -27,7 +27,7 @@ level margin: \\n[rst2man-indent\\n[rst2man-indent-level]]
|
||||
.\" new: \\n[rst2man-indent\\n[rst2man-indent-level]]
|
||||
.in \\n[rst2man-indent\\n[rst2man-indent-level]]u
|
||||
..
|
||||
.TH "SYNCTHING-REST-API" "7" "Oct 17, 2021" "v1" "Syncthing"
|
||||
.TH "SYNCTHING-REST-API" "7" "Jan 12, 2022" "v1" "Syncthing"
|
||||
.SH NAME
|
||||
syncthing-rest-api \- REST API
|
||||
.sp
|
||||
@@ -100,22 +100,23 @@ Returns the current configuration.
|
||||
.nf
|
||||
.ft C
|
||||
{
|
||||
"version": 30,
|
||||
"version": 35,
|
||||
"folders": [
|
||||
{
|
||||
"id": "GXWxf\-3zgnU",
|
||||
"label": "MyFolder",
|
||||
"id": "default",
|
||||
"label": "Default Folder",
|
||||
"filesystemType": "basic",
|
||||
"path": "...",
|
||||
"type": "sendreceive",
|
||||
"devices": [
|
||||
{
|
||||
"deviceID": "...",
|
||||
"introducedBy": ""
|
||||
"introducedBy": "",
|
||||
"encryptionPassword": ""
|
||||
}
|
||||
],
|
||||
"rescanIntervalS": 60,
|
||||
"fsWatcherEnabled": false,
|
||||
"rescanIntervalS": 3600,
|
||||
"fsWatcherEnabled": true,
|
||||
"fsWatcherDelayS": 10,
|
||||
"ignorePerms": false,
|
||||
"autoNormalize": true,
|
||||
@@ -124,10 +125,11 @@ Returns the current configuration.
|
||||
"unit": "%"
|
||||
},
|
||||
"versioning": {
|
||||
"type": "simple",
|
||||
"params": {
|
||||
"keep": "5"
|
||||
}
|
||||
"type": "",
|
||||
"params": {},
|
||||
"cleanupIntervalS": 3600,
|
||||
"fsPath": "",
|
||||
"fsType": "basic"
|
||||
},
|
||||
"copiers": 0,
|
||||
"pullerMaxPendingKiB": 0,
|
||||
@@ -136,14 +138,20 @@ Returns the current configuration.
|
||||
"ignoreDelete": false,
|
||||
"scanProgressIntervalS": 0,
|
||||
"pullerPauseS": 0,
|
||||
"maxConflicts": 10,
|
||||
"maxConflicts": \-1,
|
||||
"disableSparseFiles": false,
|
||||
"disableTempIndexes": false,
|
||||
"paused": false,
|
||||
"weakHashThresholdPct": 25,
|
||||
"markerName": ".stfolder",
|
||||
"copyOwnershipFromParent": false,
|
||||
"modTimeWindowS": 0
|
||||
"modTimeWindowS": 0,
|
||||
"maxConcurrentWrites": 2,
|
||||
"disableFsync": false,
|
||||
"blockPullOrder": "standard",
|
||||
"copyRangeMethod": "standard",
|
||||
"caseSensitiveFS": false,
|
||||
"junctionsAsDirs": true
|
||||
}
|
||||
],
|
||||
"devices": [
|
||||
@@ -164,18 +172,27 @@ Returns the current configuration.
|
||||
"autoAcceptFolders": false,
|
||||
"maxSendKbps": 0,
|
||||
"maxRecvKbps": 0,
|
||||
"ignoredFolders": [],
|
||||
"maxRequestKiB": 0
|
||||
"ignoredFolders": [
|
||||
{
|
||||
"time": "2022\-01\-09T19:09:52Z",
|
||||
"id": "br63e\-wyhb7",
|
||||
"label": "Foo"
|
||||
}
|
||||
],
|
||||
"maxRequestKiB": 0,
|
||||
"untrusted": false,
|
||||
"remoteGUIPort": 0
|
||||
}
|
||||
],
|
||||
"gui": {
|
||||
"enabled": true,
|
||||
"address": "127.0.0.1:8384",
|
||||
"unixSocketPermissions": "",
|
||||
"user": "Username",
|
||||
"password": "$2a$10$ZFws69T4FlvWwsqeIwL.TOo5zOYqsa/.TxlUnsGYS.j3JvjFTmxo6",
|
||||
"authMode": "static",
|
||||
"useTLS": false,
|
||||
"apiKey": "pGahcht56664QU5eoFQW6szbEG6Ec2Cr",
|
||||
"apiKey": "k1dnz1Dd0rzTBjjFFh7CXPnrF12C49B1",
|
||||
"insecureAdminAccess": false,
|
||||
"theme": "default",
|
||||
"debugging": false,
|
||||
@@ -186,7 +203,9 @@ Returns the current configuration.
|
||||
"address": "",
|
||||
"bindDN": "",
|
||||
"transport": "plain",
|
||||
"insecureSkipVerify": false
|
||||
"insecureSkipVerify": false,
|
||||
"searchBaseDN": "",
|
||||
"searchFilter": ""
|
||||
},
|
||||
"options": {
|
||||
"listenAddresses": [
|
||||
@@ -204,14 +223,14 @@ Returns the current configuration.
|
||||
"reconnectionIntervalS": 60,
|
||||
"relaysEnabled": true,
|
||||
"relayReconnectIntervalM": 10,
|
||||
"startBrowser": false,
|
||||
"startBrowser": true,
|
||||
"natEnabled": true,
|
||||
"natLeaseMinutes": 60,
|
||||
"natRenewalMinutes": 30,
|
||||
"natTimeoutSeconds": 10,
|
||||
"urAccepted": \-1,
|
||||
"urSeen": 2,
|
||||
"urUniqueId": "",
|
||||
"urAccepted": 0,
|
||||
"urSeen": 0,
|
||||
"urUniqueId": "...",
|
||||
"urURL": "https://data.syncthing.net/newdata",
|
||||
"urPostInsecurely": false,
|
||||
"urInitialDelayS": 1800,
|
||||
@@ -230,9 +249,10 @@ Returns the current configuration.
|
||||
"alwaysLocalNets": [],
|
||||
"overwriteRemoteDeviceNamesOnConnect": false,
|
||||
"tempIndexMinBlocks": 10,
|
||||
"unackedNotificationIDs": [],
|
||||
"unackedNotificationIDs": [
|
||||
"authenticationUserAndPassword"
|
||||
],
|
||||
"trafficClass": 0,
|
||||
"defaultFolderPath": "~",
|
||||
"setLowPriority": true,
|
||||
"maxFolderConcurrency": 0,
|
||||
"crURL": "https://crash.syncthing.net/newcrash",
|
||||
@@ -243,9 +263,96 @@ Returns the current configuration.
|
||||
"default"
|
||||
],
|
||||
"databaseTuning": "auto",
|
||||
"maxConcurrentIncomingRequestKiB": 0
|
||||
"maxConcurrentIncomingRequestKiB": 0,
|
||||
"announceLANAddresses": true,
|
||||
"sendFullIndexOnUpgrade": false,
|
||||
"featureFlags": [],
|
||||
"connectionLimitEnough": 0,
|
||||
"connectionLimitMax": 0,
|
||||
"insecureAllowOldTLSVersions": false
|
||||
},
|
||||
"remoteIgnoredDevices": []
|
||||
"remoteIgnoredDevices": [
|
||||
{
|
||||
"time": "2022\-01\-09T20:02:01Z",
|
||||
"deviceID": "...",
|
||||
"name": "...",
|
||||
"address": "192.168.0.20:22000"
|
||||
}
|
||||
],
|
||||
"defaults": {
|
||||
"folder": {
|
||||
"id": "",
|
||||
"label": "",
|
||||
"filesystemType": "basic",
|
||||
"path": "~",
|
||||
"type": "sendreceive",
|
||||
"devices": [
|
||||
{
|
||||
"deviceID": "...",
|
||||
"introducedBy": "",
|
||||
"encryptionPassword": ""
|
||||
}
|
||||
],
|
||||
"rescanIntervalS": 3600,
|
||||
"fsWatcherEnabled": true,
|
||||
"fsWatcherDelayS": 10,
|
||||
"ignorePerms": false,
|
||||
"autoNormalize": true,
|
||||
"minDiskFree": {
|
||||
"value": 1,
|
||||
"unit": "%"
|
||||
},
|
||||
"versioning": {
|
||||
"type": "",
|
||||
"params": {},
|
||||
"cleanupIntervalS": 3600,
|
||||
"fsPath": "",
|
||||
"fsType": "basic"
|
||||
},
|
||||
"copiers": 0,
|
||||
"pullerMaxPendingKiB": 0,
|
||||
"hashers": 0,
|
||||
"order": "random",
|
||||
"ignoreDelete": false,
|
||||
"scanProgressIntervalS": 0,
|
||||
"pullerPauseS": 0,
|
||||
"maxConflicts": 10,
|
||||
"disableSparseFiles": false,
|
||||
"disableTempIndexes": false,
|
||||
"paused": false,
|
||||
"weakHashThresholdPct": 25,
|
||||
"markerName": ".stfolder",
|
||||
"copyOwnershipFromParent": false,
|
||||
"modTimeWindowS": 0,
|
||||
"maxConcurrentWrites": 2,
|
||||
"disableFsync": false,
|
||||
"blockPullOrder": "standard",
|
||||
"copyRangeMethod": "standard",
|
||||
"caseSensitiveFS": false,
|
||||
"junctionsAsDirs": false
|
||||
},
|
||||
"device": {
|
||||
"deviceID": "",
|
||||
"name": "",
|
||||
"addresses": [
|
||||
"dynamic"
|
||||
],
|
||||
"compression": "metadata",
|
||||
"certName": "",
|
||||
"introducer": false,
|
||||
"skipIntroductionRemovals": false,
|
||||
"introducedBy": "",
|
||||
"paused": false,
|
||||
"allowedNetworks": [],
|
||||
"autoAcceptFolders": false,
|
||||
"maxSendKbps": 0,
|
||||
"maxRecvKbps": 0,
|
||||
"ignoredFolders": [],
|
||||
"maxRequestKiB": 0,
|
||||
"untrusted": false,
|
||||
"remoteGUIPort": 0
|
||||
}
|
||||
}
|
||||
}
|
||||
.ft P
|
||||
.fi
|
||||
@@ -290,7 +397,7 @@ config, modify the needed parts and post it again.
|
||||
\fBNOTE:\fP
|
||||
.INDENT 0.0
|
||||
.INDENT 3.5
|
||||
Return format changed in 0.13.0.
|
||||
Return format changed in versions 0.13.0 and 1.19.0.
|
||||
.UNINDENT
|
||||
.UNINDENT
|
||||
.sp
|
||||
@@ -305,14 +412,9 @@ The connection types are \fBTCP (Client)\fP, \fBTCP (Server)\fP, \fBRelay (Clien
|
||||
.ft C
|
||||
{
|
||||
"total" : {
|
||||
"paused" : false,
|
||||
"clientVersion" : "",
|
||||
"at" : "2015\-11\-07T17:29:47.691637262+01:00",
|
||||
"connected" : false,
|
||||
"inBytesTotal" : 1479,
|
||||
"type" : "",
|
||||
"outBytesTotal" : 1318,
|
||||
"address" : ""
|
||||
},
|
||||
"connections" : {
|
||||
"YZJBJFX\-RDBL7WY\-6ZGKJ2D\-4MJB4E7\-ZATSDUY\-LD6Y3L3\-MLFUYWE\-AEMXJAC" : {
|
||||
@@ -320,6 +422,7 @@ The connection types are \fBTCP (Client)\fP, \fBTCP (Server)\fP, \fBRelay (Clien
|
||||
"inBytesTotal" : 556,
|
||||
"paused" : false,
|
||||
"at" : "2015\-11\-07T17:29:47.691548971+01:00",
|
||||
"startedAt" : "2015\-11\-07T00:09:47Z",
|
||||
"clientVersion" : "v0.12.1",
|
||||
"address" : "127.0.0.1:22002",
|
||||
"type" : "TCP (Client)",
|
||||
@@ -330,6 +433,7 @@ The connection types are \fBTCP (Client)\fP, \fBTCP (Server)\fP, \fBRelay (Clien
|
||||
"type" : "",
|
||||
"address" : "",
|
||||
"at" : "0001\-01\-01T00:00:00Z",
|
||||
"startedAt" : "0001\-01\-01T00:00:00Z",
|
||||
"clientVersion" : "",
|
||||
"paused" : false,
|
||||
"inBytesTotal" : 0,
|
||||
@@ -343,6 +447,7 @@ The connection types are \fBTCP (Client)\fP, \fBTCP (Server)\fP, \fBRelay (Clien
|
||||
"inBytesTotal" : 0,
|
||||
"paused" : false,
|
||||
"at" : "0001\-01\-01T00:00:00Z",
|
||||
"startedAt" : "0001\-01\-01T00:00:00Z",
|
||||
"clientVersion" : ""
|
||||
}
|
||||
}
|
||||
@@ -549,7 +654,7 @@ $ curl \-X POST \-H "X\-API\-Key: abc123" http://localhost:8384/rest/system/rese
|
||||
.UNINDENT
|
||||
.UNINDENT
|
||||
.sp
|
||||
\fBCaution\fP: See \fB\-reset\-database\fP for \fB\&.stfolder\fP creation side\-effect and caution regarding mountpoints.
|
||||
\fBCaution\fP: See \fB\-\-reset\-database\fP for \fB\&.stfolder\fP creation side\-effect and caution regarding mountpoints.
|
||||
.SS POST /rest/system/restart
|
||||
.sp
|
||||
Post with empty body to immediately restart Syncthing.
|
||||
|
||||
@@ -27,7 +27,7 @@ level margin: \\n[rst2man-indent\\n[rst2man-indent-level]]
|
||||
.\" new: \\n[rst2man-indent\\n[rst2man-indent-level]]
|
||||
.in \\n[rst2man-indent\\n[rst2man-indent-level]]u
|
||||
..
|
||||
.TH "SYNCTHING-SECURITY" "7" "Oct 17, 2021" "v1" "Syncthing"
|
||||
.TH "SYNCTHING-SECURITY" "7" "Jan 12, 2022" "v1" "Syncthing"
|
||||
.SH NAME
|
||||
syncthing-security \- Security Principles
|
||||
.sp
|
||||
|
||||
Some files were not shown because too many files have changed in this diff Show More
Reference in New Issue
Block a user