Compare commits

..

21 Commits

Author SHA1 Message Date
Jason A. Donenfeld 0750c29c7f version: bump
Signed-off-by: Jason A. Donenfeld <Jason@zx2c4.com>
2021-02-11 16:40:34 +01:00
Jason A. Donenfeld 639ee6b5b2 tunnel: add developer information to pom xml
Otherwise sonatype gets upset.

Signed-off-by: Jason A. Donenfeld <Jason@zx2c4.com>
2021-02-11 16:40:34 +01:00
Jason A. Donenfeld f764f2aaa9 build: update AGP to 4.1.2
Signed-off-by: Jason A. Donenfeld <Jason@zx2c4.com>
2021-02-11 16:11:57 +01:00
Jason A. Donenfeld d2a9c56d9c gradle: remove bad checksum from properties
The hash was wrong, causing crashes. Android studio told me to remove it
so I did. I don't quite like that, but I don't know how Harsh came up
with the previous hash.

Signed-off-by: Jason A. Donenfeld <Jason@zx2c4.com>
2021-02-11 16:10:28 +01:00
Jason A. Donenfeld 4c3289aa52 tunnel: bump all tools
Signed-off-by: Jason A. Donenfeld <Jason@zx2c4.com>
2021-02-11 16:00:28 +01:00
Jason A. Donenfeld 79376bca64 tunnel: sign using gpg-agent
This way we don't have to have a separate java universe.

Signed-off-by: Jason A. Donenfeld <Jason@zx2c4.com>
2021-02-11 15:55:20 +01:00
Harsh Shandilya b709d36c01 tunnel: switch publishing to MavenCentral
Since MavenCentral requires GPG signed artifacts, we'll need to configure
some things on the machine running the deployment. Specifically, these
three Gradle properties need to be set (preferably in ~/.gradle/gradle.properties)

```
signing.keyId= // Duh
signing.password= // I have absolutely no idea how this will work with HSMs
signing.secretKeyRingFile= // $HOME/.gnupg/... you know the deal
```

The BINTRAY_USER and BINTRAY_KEY variables are replaced by SONATYPE_USER
and SONATYPE_PASSWORD to better reflect their new contents.

Signed-off-by: Harsh Shandilya <me@msfjarvis.dev>
2021-02-11 01:58:41 +05:30
L.W.Reek 0301c85e2c build: include org.jetbrains.trove4j from jcenter
mavenCentral does not have org.jetbrains.trove4j which causes the
build to fail.

* What went wrong:
Execution failed for task ':tunnel:extractReleaseAnnotations'.
> Could not resolve all files for configuration ':tunnel:lintClassPath'.
   > Could not find org.jetbrains.trove4j:trove4j:20160824.
     Searched in the following locations:
       - https://dl.google.com/dl/android/maven2/org/jetbrains/trove4j/
         trove4j/20160824/trove4j-20160824.pom
       - https://repo.maven.apache.org/maven2/org/jetbrains/trove4j/
         trove4j/20160824/trove4j-20160824.pom
     Required by:
         project :tunnel > com.android.tools.lint:lint-gradle:27.1.1 >
                  com.android.tools:sdk-common:27.1.1
         project :tunnel > com.android.tools.lint:lint-gradle:27.1.1 >
                  com.android.tools.external.com-intellij:intellij-core:27.1.1

Fixes: 13cc4436ca ("build: switch to mavenCentral as the main repository")
Signed-off-by: L.W.Reek <syphyr@gmail.com>
Signed-off-by: Harsh Shandilya <me@msfjarvis.dev>
2021-02-10 18:31:36 +05:30
Harsh Shandilya 7e979817e2 build: upgrade to Gradle 6.8.2
Signed-off-by: Harsh Shandilya <me@msfjarvis.dev>
2021-02-05 22:25:52 +05:30
Harsh Shandilya 13cc4436ca build: switch to mavenCentral as the main repository
Retain JCenter but restrict it the single dependency we require off it

Signed-off-by: Harsh Shandilya <me@msfjarvis.dev>
2021-02-05 22:25:38 +05:30
Harsh Shandilya bcfbf37ed1 build: update fragment to 1.3.0-rc02
Signed-off-by: Harsh Shandilya <me@msfjarvis.dev>
2021-02-03 13:33:47 +05:30
Jason A. Donenfeld 74ff870cf5 tunnel: bump libwg-go and use newer logging function
We also plug a memory leak. C.CString was calling malloc, and these were
never freed.

Signed-off-by: Jason A. Donenfeld <Jason@zx2c4.com>
2021-01-27 01:10:48 +01:00
Harsh Shandilya b4f54e8958 strings: sync translations
Signed-off-by: Harsh Shandilya <me@msfjarvis.dev>
2021-01-23 14:59:00 +05:30
L.W.Reek d179a3af15 libwg-go: update to go 1.15.6
Signed-off-by: L.W.Reek <syphyr@gmail.com>
2021-01-23 14:42:46 +05:30
Harsh Shandilya 2bac2feeb5 build: upgrade runtime dependencies
Signed-off-by: Harsh Shandilya <me@msfjarvis.dev>
2021-01-23 14:33:00 +05:30
Harsh Shandilya 261236c8ce gradle: bump wrapper to v6.8.1
Signed-off-by: Harsh Shandilya <me@msfjarvis.dev>
2021-01-23 14:01:44 +05:30
Jason A. Donenfeld 4a7969ef24 ClipboardUtils: localize clipboard notification snack
Signed-off-by: Jason A. Donenfeld <Jason@zx2c4.com>
2021-01-01 16:34:03 +01:00
Jason A. Donenfeld f670ff22c6 version: bump
A Christmas eve special.

Signed-off-by: Jason A. Donenfeld <Jason@zx2c4.com>
2020-12-24 14:30:11 +01:00
Jason A. Donenfeld cb3194f10a tunnel: bump libwg-go
Signed-off-by: Jason A. Donenfeld <Jason@zx2c4.com>
2020-12-23 22:55:56 +01:00
Jason A. Donenfeld f6b2bbf433 strings: sync with crowdin
Signed-off-by: Jason A. Donenfeld <Jason@zx2c4.com>
2020-12-21 17:52:24 +01:00
Harsh Shandilya 56a4862442 build: upgrade to MDC 1.3.0-beta01
Signed-off-by: Harsh Shandilya <me@msfjarvis.dev>
2020-12-17 14:22:43 +05:30
21 changed files with 869 additions and 106 deletions
+18 -10
View File
@@ -1,7 +1,7 @@
buildscript {
ext {
activityVersion = '1.2.0-beta02'
agpVersion = '4.1.1'
activityVersion = '1.2.0-rc01'
agpVersion = '4.1.2'
annotationsVersion = '1.1.0'
appcompatVersion = '1.2.0'
biometricVersion = '1.1.0-rc01'
@@ -12,12 +12,12 @@ buildscript {
coroutinesVersion = '1.4.2'
datastoreVersion = '1.0.0-alpha02'
desugarVersion = '1.0.10'
fragmentVersion = '1.3.0-beta02'
fragmentVersion = '1.3.0-rc02'
jsr305Version = '3.0.2'
junitVersion = '4.13.1'
kotlinVersion = '1.4.21'
lifecycleRuntimeKtxVersion = '2.3.0-beta01'
materialComponentsVersion = '1.3.0-alpha04'
kotlinVersion = '1.4.21-2'
lifecycleRuntimeKtxVersion = '2.3.0-rc01'
materialComponentsVersion = '1.3.0-rc01'
preferenceVersion = '1.1.1'
zxingEmbeddedVersion = '3.6.0'
@@ -29,7 +29,7 @@ buildscript {
}
repositories {
google()
jcenter()
mavenCentral()
}
}
@@ -69,7 +69,15 @@ task crowdin(type: Copy, dependsOn: ['extractCrowdin']) {
allprojects {
repositories {
google()
jcenter()
mavenCentral()
jcenter() {
content {
// https://github.com/journeyapps/zxing-android-embedded/issues/606
includeModule("com.journeyapps", "zxing-android-embedded")
// https://youtrack.jetbrains.com/issue/IDEA-261387
includeModule("org.jetbrains.trove4j", "trove4j")
}
}
}
}
@@ -79,9 +87,9 @@ task clean(type: Delete) {
tasks {
wrapper {
gradleVersion = "6.7.1"
gradleVersion = "6.8.2"
distributionType = Wrapper.DistributionType.ALL
distributionSha256Sum = "22449f5231796abd892c98b2a07c9ceebe4688d192cd2d6763f8e3bf8acbedeb"
distributionSha256Sum = "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855"
}
}
+2 -2
View File
@@ -1,6 +1,6 @@
#Thu Feb 11 16:09:16 CET 2021
distributionBase=GRADLE_USER_HOME
distributionPath=wrapper/dists
distributionSha256Sum=22449f5231796abd892c98b2a07c9ceebe4688d192cd2d6763f8e3bf8acbedeb
distributionUrl=https\://services.gradle.org/distributions/gradle-6.7.1-all.zip
zipStoreBase=GRADLE_USER_HOME
zipStorePath=wrapper/dists
distributionUrl=https\://services.gradle.org/distributions/gradle-6.8.2-all.zip
+14 -4
View File
@@ -1,4 +1,5 @@
apply plugin: 'maven-publish'
apply plugin: 'signing'
afterEvaluate {
publishing {
@@ -35,17 +36,21 @@ afterEvaluate {
name = 'WireGuard'
url = 'https://www.wireguard.com/'
}
developer {
name = 'WireGuard'
email = 'team@wireguard.com'
}
}
}
}
}
repositories {
maven {
name = "bintray"
url = uri("https://api.bintray.com/maven/wireguard/wireguard-android/wireguard-android/;publish=1;override=0")
name = "sonatype"
url = uri("https://oss.sonatype.org/service/local/staging/deploy/maven2/")
credentials {
username = hasProperty('BINTRAY_USER') ? getProperty('BINTRAY_USER') : System.getenv('BINTRAY_USER')
password = hasProperty('BINTRAY_KEY') ? getProperty('BINTRAY_KEY') : System.getenv('BINTRAY_KEY')
username = hasProperty('SONATYPE_USER') ? getProperty('SONATYPE_USER') : System.getenv('SONATYPE_USER')
password = hasProperty('SONATYPE_PASSWORD') ? getProperty('SONATYPE_PASSWORD') : System.getenv('SONATYPE_PASSWORD')
}
}
}
@@ -70,3 +75,8 @@ android.libraryVariants.all { variant ->
}
}
}
signing {
useGpgCmd()
sign publishing.publications
}
+3 -3
View File
@@ -20,11 +20,11 @@ export GOARCH := $(NDK_GO_ARCH_MAP_$(ANDROID_ARCH_NAME))
export GOOS := android
export CGO_ENABLED := 1
GO_VERSION := 1.15.2
GO_VERSION := 1.15.6
GO_PLATFORM := $(shell uname -s | tr '[:upper:]' '[:lower:]')-$(NDK_GO_ARCH_MAP_$(shell uname -m))
GO_TARBALL := go$(GO_VERSION).$(GO_PLATFORM).tar.gz
GO_HASH_darwin-amd64 := 9bd39600d9fa1fa4a5ccce8761d249f7421cffe671376f791293c4138f3d7c62
GO_HASH_linux-amd64 := b49fda1ca29a1946d6bb2a5a6982cf07ccd2aba849289508ee0f9918f6bb4552
GO_HASH_darwin-amd64 := 940a73b45993a3bae5792cf324140dded34af97c548af4864d22fd6d49f3bd9f
GO_HASH_linux-amd64 := 3918e6cc85e7eaaa6f859f1bdbaac772e7a825b0eb423c63d3ae68b21f84b844
default: $(DESTDIR)/libwg-go.so
+42 -33
View File
@@ -10,15 +10,12 @@ package main
import "C"
import (
"bufio"
"bytes"
"log"
"fmt"
"math"
"net"
"os"
"os/signal"
"runtime"
"strings"
"unsafe"
"golang.org/x/sys/unix"
@@ -29,13 +26,21 @@ import (
)
type AndroidLogger struct {
level C.int
interfaceName string
level C.int
tag *C.char
}
func (l AndroidLogger) Write(p []byte) (int, error) {
C.__android_log_write(l.level, C.CString("WireGuard/GoBackend/"+l.interfaceName), C.CString(string(p)))
return len(p), nil
func cstring(s string) *C.char {
b, err := unix.BytePtrFromString(s)
if err != nil {
b := [1]C.char{}
return &b[0]
}
return (*C.char)(unsafe.Pointer(b))
}
func (l AndroidLogger) Printf(format string, args ...interface{}) {
C.__android_log_write(l.level, l.tag, cstring(fmt.Sprintf(format, args...)))
}
type TunnelHandle struct {
@@ -55,39 +60,38 @@ func init() {
select {
case <-signals:
n := runtime.Stack(buf, true)
if n == len(buf) {
n--
}
buf[n] = 0
C.__android_log_write(C.ANDROID_LOG_ERROR, C.CString("WireGuard/GoBackend/Stacktrace"), (*C.char)(unsafe.Pointer(&buf[0])))
C.__android_log_write(C.ANDROID_LOG_ERROR, cstring("WireGuard/GoBackend/Stacktrace"), (*C.char)(unsafe.Pointer(&buf[0])))
}
}
}()
}
//export wgTurnOn
func wgTurnOn(ifnameRef string, tunFd int32, settings string) int32 {
interfaceName := string([]byte(ifnameRef))
func wgTurnOn(interfaceName string, tunFd int32, settings string) int32 {
tag := cstring("WireGuard/GoBackend/" + interfaceName)
logger := &device.Logger{
Debug: log.New(&AndroidLogger{level: C.ANDROID_LOG_DEBUG, interfaceName: interfaceName}, "", 0),
Info: log.New(&AndroidLogger{level: C.ANDROID_LOG_INFO, interfaceName: interfaceName}, "", 0),
Error: log.New(&AndroidLogger{level: C.ANDROID_LOG_ERROR, interfaceName: interfaceName}, "", 0),
Verbosef: AndroidLogger{level: C.ANDROID_LOG_DEBUG, tag: tag}.Printf,
Errorf: AndroidLogger{level: C.ANDROID_LOG_ERROR, tag: tag}.Printf,
}
logger.Debug.Println("Debug log enabled")
tun, name, err := tun.CreateUnmonitoredTUNFromFD(int(tunFd))
if err != nil {
unix.Close(int(tunFd))
logger.Error.Println(err)
logger.Errorf("CreateUnmonitoredTUNFromFD: %v", err)
return -1
}
logger.Info.Println("Attaching to interface", name)
logger.Verbosef("Attaching to interface %v", name)
device := device.NewDevice(tun, logger)
setError := device.IpcSetOperation(bufio.NewReader(strings.NewReader(settings)))
if setError != nil {
err = device.IpcSet(settings)
if err != nil {
unix.Close(int(tunFd))
logger.Error.Println(setError)
logger.Errorf("IpcSet: %v", err)
return -1
}
device.DisableSomeRoamingForBrokenMobileSemantics()
@@ -96,12 +100,12 @@ func wgTurnOn(ifnameRef string, tunFd int32, settings string) int32 {
uapiFile, err := ipc.UAPIOpen(name)
if err != nil {
logger.Error.Println(err)
logger.Errorf("UAPIOpen: %v", err)
} else {
uapi, err = ipc.UAPIListen(name, uapiFile)
if err != nil {
uapiFile.Close()
logger.Error.Println(err)
logger.Errorf("UAPIListen: %v", err)
} else {
go func() {
for {
@@ -115,8 +119,14 @@ func wgTurnOn(ifnameRef string, tunFd int32, settings string) int32 {
}
}
device.Up()
logger.Info.Println("Device started")
err = device.Up()
if err != nil {
logger.Errorf("Unable to bring up device: %v", err)
uapiFile.Close()
device.Close()
return -1
}
logger.Verbosef("Device started")
var i int32
for i = 0; i < math.MaxInt32; i++ {
@@ -125,7 +135,9 @@ func wgTurnOn(ifnameRef string, tunFd int32, settings string) int32 {
}
}
if i == math.MaxInt32 {
unix.Close(int(tunFd))
logger.Errorf("Unable to find empty handle")
uapiFile.Close()
device.Close()
return -1
}
tunnelHandles[i] = TunnelHandle{device: device, uapi: uapi}
@@ -185,14 +197,11 @@ func wgGetConfig(tunnelHandle int32) *C.char {
if !ok {
return nil
}
settings := new(bytes.Buffer)
writer := bufio.NewWriter(settings)
err := handle.device.IpcGetOperation(writer)
settings, err := handle.device.IpcGet()
if err != nil {
return nil
}
writer.Flush()
return C.CString(settings.String())
return C.CString(settings)
}
//export wgVersion
+4 -5
View File
@@ -1,10 +1,9 @@
module golang.zx2c4.com/wireguard/android
go 1.14
go 1.15
require (
golang.org/x/crypto v0.0.0-20201208171446-5f87f3452ae9 // indirect
golang.org/x/net v0.0.0-20201216054612-986b41b23924 // indirect
golang.org/x/sys v0.0.0-20201214210602-f9fddec55a1e
golang.zx2c4.com/wireguard v0.0.20201119-0.20201215171155-74008520cdd9
golang.org/x/net v0.0.0-20210119194325-5f4716e94777 // indirect
golang.org/x/sys v0.0.0-20210124154548-22da62e12c0c
golang.zx2c4.com/wireguard v0.0.0-20210211144856-ef8115f63b22
)
+12 -14
View File
@@ -1,24 +1,22 @@
golang.org/x/crypto v0.0.0-20190308221718-c2843e01d9a2/go.mod h1:djNgcEr1/C05ACkg1iLfiJU5Ep61QUkGW8qpdssI0+w=
golang.org/x/crypto v0.0.0-20200622213623-75b288015ac9/go.mod h1:LzIPMQfyMNhhGPhUkYOs5KpL4U8rLKemX1yGLhDgUto=
golang.org/x/crypto v0.0.0-20201124201722-c8d3bf9c5392/go.mod h1:jdWPYTVW3xRLrWPugEBEK3UY2ZEsg3UU495nc5E+M+I=
golang.org/x/crypto v0.0.0-20201208171446-5f87f3452ae9 h1:sYNJzB4J8toYPQTM6pAkcmBRgw9SnQKP9oXCHfgy604=
golang.org/x/crypto v0.0.0-20201208171446-5f87f3452ae9/go.mod h1:jdWPYTVW3xRLrWPugEBEK3UY2ZEsg3UU495nc5E+M+I=
golang.org/x/crypto v0.0.0-20201221181555-eec23a3978ad h1:DN0cp81fZ3njFcrLCytUHRSUkqBjfTo4Tx9RJTWs0EY=
golang.org/x/crypto v0.0.0-20201221181555-eec23a3978ad/go.mod h1:jdWPYTVW3xRLrWPugEBEK3UY2ZEsg3UU495nc5E+M+I=
golang.org/x/net v0.0.0-20190404232315-eb5bcb51f2a3/go.mod h1:t9HGtf8HONx5eT2rtn7q6eTqICYqUVnKs3thJo3Qplg=
golang.org/x/net v0.0.0-20201110031124-69a78807bb2b/go.mod h1:sp8m0HH+o8qH0wwXwYZr8TS3Oi6o0r6Gce1SSxlDquU=
golang.org/x/net v0.0.0-20201216054612-986b41b23924 h1:QsnDpLLOKwHBBDa8nDws4DYNc/ryVW2vCpxCs09d4PY=
golang.org/x/net v0.0.0-20201216054612-986b41b23924/go.mod h1:m0MpNAwzfU5UDzcl9v0D8zg8gWTRqZa9RBIspLL5mdg=
golang.org/x/net v0.0.0-20201224014010-6772e930b67b h1:iFwSg7t5GZmB/Q5TjiEAsdoLDrdJRC1RiF2WhuV29Qw=
golang.org/x/net v0.0.0-20201224014010-6772e930b67b/go.mod h1:m0MpNAwzfU5UDzcl9v0D8zg8gWTRqZa9RBIspLL5mdg=
golang.org/x/net v0.0.0-20210119194325-5f4716e94777 h1:003p0dJM77cxMSyCPFphvZf/Y5/NXf5fzg6ufd1/Oew=
golang.org/x/net v0.0.0-20210119194325-5f4716e94777/go.mod h1:m0MpNAwzfU5UDzcl9v0D8zg8gWTRqZa9RBIspLL5mdg=
golang.org/x/sys v0.0.0-20190215142949-d0b11bdaac8a/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY=
golang.org/x/sys v0.0.0-20190412213103-97732733099d/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
golang.org/x/sys v0.0.0-20191026070338-33540a1f6037/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
golang.org/x/sys v0.0.0-20200930185726-fdedc70b468f/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
golang.org/x/sys v0.0.0-20201119102817-f84b799fce68/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
golang.org/x/sys v0.0.0-20201126233918-771906719818/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
golang.org/x/sys v0.0.0-20201214210602-f9fddec55a1e h1:AyodaIpKjppX+cBfTASF2E1US3H2JFBj920Ot3rtDjs=
golang.org/x/sys v0.0.0-20201214210602-f9fddec55a1e/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
golang.org/x/sys v0.0.0-20210105210732-16f7687f5001 h1:/dSxr6gT0FNI1MO5WLJo8mTmItROeOKTkDn+7OwWBos=
golang.org/x/sys v0.0.0-20210105210732-16f7687f5001/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
golang.org/x/sys v0.0.0-20210124154548-22da62e12c0c h1:VwygUrnw9jn88c4u8GD3rZQbqrP/tgas88tPUbBxQrk=
golang.org/x/sys v0.0.0-20210124154548-22da62e12c0c/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
golang.org/x/term v0.0.0-20201117132131-f5c789dd3221/go.mod h1:Nr5EML6q2oocZ2LXRh80K7BxOlk5/8JxuGnuhpl+muw=
golang.org/x/term v0.0.0-20201126162022-7de9c90e9dd1/go.mod h1:bj7SfCRtBDWHUb9snDiAeCFNEtKQo2Wmx5Cou7ajbmo=
golang.org/x/text v0.3.0/go.mod h1:NqM8EUOU14njkJ3fqMW+pc6Ldnwhi/IjpwHt7yyuwOQ=
golang.org/x/text v0.3.3/go.mod h1:5Zoc/QRtKVWzQhOtBMvqHzDpF6irO9z98xDceosuGiQ=
golang.org/x/tools v0.0.0-20180917221912-90fa682c2a6e/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ=
golang.zx2c4.com/wireguard v0.0.20201119-0.20201215171155-74008520cdd9 h1:rdbSLajsO6nfT4NViHeB/6lMW4vaO1bfsTvmeDpYvVs=
golang.zx2c4.com/wireguard v0.0.20201119-0.20201215171155-74008520cdd9/go.mod h1:ITsWNpkFv78VPB7f8MiyuxeEMcHR4jfxHGCJLPP3GHs=
golang.zx2c4.com/wireguard v0.0.0-20210211144856-ef8115f63b22 h1:7Ct1Jps4o4u2hBFWrg8Rt65VmXfMPTeR0OSXxdq8gMk=
golang.zx2c4.com/wireguard v0.0.0-20210211144856-ef8115f63b22/go.mod h1:r0ExowOoGFfDoLDxx+M9SYbNVsoZ0xviLL+K4f2mt+A=
@@ -11,6 +11,7 @@ import android.widget.TextView
import androidx.core.content.getSystemService
import com.google.android.material.snackbar.Snackbar
import com.google.android.material.textfield.TextInputEditText
import com.wireguard.android.R
/**
* Standalone utilities for interacting with the system clipboard.
@@ -28,6 +29,6 @@ object ClipboardUtils {
}
val service = view.context.getSystemService<ClipboardManager>() ?: return
service.setPrimaryClip(ClipData.newPlainText(data.second, data.first))
Snackbar.make(view, "${data.second} copied to clipboard", Snackbar.LENGTH_LONG).show()
Snackbar.make(view, view.context.getString(R.string.copied_to_clipboard, data.second), Snackbar.LENGTH_LONG).show()
}
}
+19
View File
@@ -0,0 +1,19 @@
<?xml version="1.0" encoding="utf-8"?>
<resources>
<plurals name="delete_success">
<item quantity="zero">تم حذف نفق %d بنجاح</item>
<item quantity="one">تم حذف %d نفق بنجاح</item>
<item quantity="two">تم حذف %d نفق بنجاح</item>
<item quantity="few">تم حذف %d نفق بنجاح</item>
<item quantity="many">تم حذف %d نفق بنجاح</item>
<item quantity="other">تم حذف %d انفاق بنجاح</item>
</plurals>
<plurals name="delete_title">
<item quantity="zero">%d نفق محدد</item>
<item quantity="one">%d نفق محدد</item>
<item quantity="two">%d نفق محدد</item>
<item quantity="few">%d عنصر محدد</item>
<item quantity="many">%d عنصر محدد</item>
<item quantity="other">%d عنصر محدد</item>
</plurals>
</resources>
+28
View File
@@ -1,5 +1,13 @@
<?xml version="1.0" encoding="utf-8"?>
<resources>
<plurals name="delete_error">
<item quantity="one">No s\'ha pogut esborrar %d túnel: %s</item>
<item quantity="other">No s\'han pogut esborrar %d túnels: %s</item>
</plurals>
<plurals name="delete_title">
<item quantity="one">%d túnel seleccionat</item>
<item quantity="other">%d túnels seleccionats</item>
</plurals>
<plurals name="n_excluded_applications">
<item quantity="one">%d exclòs</item>
<item quantity="other">%d exclosos</item>
@@ -27,6 +35,7 @@
<item quantity="one">segon</item>
<item quantity="other">segons</item>
</plurals>
<string name="add_peer">Afegir parell</string>
<string name="addresses">Adreces</string>
<string name="applications">Aplicacions</string>
<string name="allowed_ips">IPs permeses</string>
@@ -38,7 +47,12 @@
<string name="bad_config_reason_unknown_attribute">Atribut desconegut</string>
<string name="bad_config_reason_unknown_section">Secció desconeguda</string>
<string name="cancel">Cancel·la</string>
<string name="create_activity_title">Crear túnel WireGuard</string>
<string name="create_empty">Crea des de zero</string>
<string name="create_from_file">Importa des de fitxer o arxiu</string>
<string name="create_from_qr_code">Escaneja codi QR</string>
<string name="create_tunnel">Crear túnel</string>
<string name="dark_theme_title">Utilitza tema fosc</string>
<string name="delete">Elimina</string>
<string name="dns_servers">Servidors DNS</string>
<string name="edit">Edita</string>
@@ -49,22 +63,36 @@
<string name="hint_optional">(opcional)</string>
<string name="hint_optional_discouraged">(opcional, no recomanat)</string>
<string name="hint_random">(aleatori)</string>
<string name="import_from_qr_code">Importa túnel desde codi QR</string>
<string name="import_success">Importat “%s”</string>
<string name="interface_title">Interfície</string>
<string name="key_length_error">Longitud de clau incorrecta</string>
<string name="log_export_success">Guardat a \"%s\"</string>
<string name="log_export_title">Exporta el registre</string>
<string name="log_saver_activity_label">Guarda registre</string>
<string name="log_viewer_pref_title">Mostra el registre d\'aplicació</string>
<string name="log_viewer_title">Registre</string>
<string name="multiple_tunnels_title">Permet múltiples túnels simultanis</string>
<string name="name">Nom</string>
<string name="no_tunnels_error">No existeixen túnels</string>
<string name="parse_error_inet_address">Adreça IP</string>
<string name="parse_error_inet_network">Xarxa IP</string>
<string name="parse_error_integer">número</string>
<string name="peer">Parell</string>
<string name="pre_shared_key_enabled">activat</string>
<string name="private_key">Clau privada</string>
<string name="public_key">Clau pública</string>
<string name="restore_on_boot_title">Restableix a l\'inici</string>
<string name="save">Guarda</string>
<string name="select_all">Selecciona-ho tot</string>
<string name="settings">Configuració</string>
<string name="tunnel_error_already_exists">El túnel \"%s\" ja existeix</string>
<string name="tunnel_error_invalid_name">Nom no vàlid</string>
<string name="tunnel_list_placeholder">Afegiu un túnel usant el botó blau</string>
<string name="tunnel_name">Nom del túnel</string>
<string name="unknown_error">Error desconegut</string>
<string name="version_summary_unknown">Versió de %s desconeguda</string>
<string name="zip_export_success">Guardat a \"%s\"</string>
<string name="biometric_auth_error">Error d\'autenticació</string>
<string name="biometric_auth_error_reason">Error d\'autenticació: %s</string>
</resources>
+11
View File
@@ -0,0 +1,11 @@
<?xml version="1.0" encoding="utf-8"?>
<resources>
<plurals name="delete_error">
<item quantity="one">Kan ikke slette %d tunnel: %s</item>
<item quantity="other">Ikke i stand til at slette %d tunneler: %s</item>
</plurals>
<plurals name="delete_success">
<item quantity="one">Slettede %d tunnel</item>
<item quantity="other">%d tunneller blev slettet</item>
</plurals>
</resources>
+180
View File
@@ -0,0 +1,180 @@
<?xml version="1.0" encoding="utf-8"?>
<resources>
<plurals name="n_excluded_applications">
<item quantity="one">%d excluido</item>
<item quantity="other">%d excluidos</item>
</plurals>
<string name="all_applications">Todas las Aplicaciones</string>
<string name="exclude_from_tunnel">Excluir</string>
<string name="include_in_tunnel">Sólo inclusión</string>
<string name="use_all_applications">Usar todas las aplicaciones</string>
<string name="add_peer">Añadir par</string>
<string name="addresses">Direcciones</string>
<string name="applications">Aplicaciones</string>
<string name="allow_remote_control_intents_summary_off">Las aplicaciones externas no pueden cambiar túneles (recomendado)</string>
<string name="allow_remote_control_intents_summary_on">Las aplicaciones externas pueden cambiar túneles (avanzado)</string>
<string name="allow_remote_control_intents_title">Permitir aplicaciones de mando remoto</string>
<string name="allowed_ips">IPs permitidas</string>
<string name="bad_config_context">%1$s de %2$s</string>
<string name="bad_config_context_top_level">%s</string>
<string name="bad_config_error">%1$s en %2$s</string>
<string name="bad_config_explanation_pka">: Debe ser positivo y no más de 65535</string>
<string name="bad_config_explanation_positive_number">: Debe ser positivo</string>
<string name="bad_config_explanation_udp_port">: Debe ser un número válido de puerto UDP</string>
<string name="bad_config_reason_invalid_key">Clave inválida</string>
<string name="bad_config_reason_invalid_number">Número inválido</string>
<string name="bad_config_reason_invalid_value">Valor inválido</string>
<string name="bad_config_reason_missing_attribute">Falta atributo</string>
<string name="bad_config_reason_missing_section">Sección faltante</string>
<string name="bad_config_reason_syntax_error">Error de sintaxis</string>
<string name="bad_config_reason_unknown_attribute">Atributo desconocido</string>
<string name="bad_config_reason_unknown_section">Sección desconocida</string>
<string name="bad_config_reason_value_out_of_range">Valor fuera de rango</string>
<string name="bad_extension_error">El archivo debe ser .conf o .zip</string>
<string name="cancel">Cancelar</string>
<string name="config_delete_error">No se puede eliminar el archivo de configuración %s</string>
<string name="config_exists_error">La configuración para “%s” ya existe</string>
<string name="config_file_exists_error">El archivo de configuración “%s” ya existe</string>
<string name="config_not_found_error">Archivo de configuración “%s” no encontrado</string>
<string name="config_rename_error">No se puede renombrar el archivo de configuración “%s”</string>
<string name="config_save_error">No se puede guardar la configuración para “%1$s”: %2$s</string>
<string name="config_save_success">Configuración guardada correctamente para “%s”</string>
<string name="create_activity_title">Crear túnel WireGuard</string>
<string name="create_bin_dir_error">No se puede crear el directorio binario local</string>
<string name="create_downloads_file_error">No se puede crear archivo en el directorio de descargas</string>
<string name="create_empty">Crear de cero</string>
<string name="create_from_file">Importar desde archivo</string>
<string name="create_from_qr_code">Escanear desde código QR</string>
<string name="create_output_dir_error">No se puede crear el directorio de salida</string>
<string name="create_temp_dir_error">No se puede crear la carpeta temporal</string>
<string name="create_tunnel">Crear túnel</string>
<string name="dark_theme_summary_off">Actualmente usando tema claro (día)</string>
<string name="dark_theme_summary_on">Actualmente usando tema oscuro (noche)</string>
<string name="dark_theme_title">Usar tema oscuro</string>
<string name="delete">Eliminar</string>
<string name="dns_servers">Servidores DNS</string>
<string name="edit">Editar</string>
<string name="endpoint">Punto final</string>
<string name="error_down">Error al bajar el túnel: %s</string>
<string name="error_fetching_apps">Error al obtener la lista de aplicaciones: %s</string>
<string name="error_root">Por favor, obtén acceso root y vuelve a intentarlo</string>
<string name="error_up">Error al abrir el túnel: %s</string>
<string name="exclude_private_ips">Excluir direcciones privadas</string>
<string name="generate_new_private_key">Generar nueva clave privada</string>
<string name="generic_error">Error desconocido “%s”</string>
<string name="hint_automatic">(auto)</string>
<string name="hint_generated">(generado)</string>
<string name="hint_optional">(opcional)</string>
<string name="hint_optional_discouraged">(opcional, no recomendado)</string>
<string name="hint_random">(aleatorio)</string>
<string name="illegal_filename_error">Nombre de archivo no válido “%s”</string>
<string name="import_error">No se puede importar túnel: %s</string>
<string name="import_from_qr_code">Importar túnel desde código QR</string>
<string name="import_success">Importado “%s”</string>
<string name="interface_title">Interfaz</string>
<string name="key_contents_error">Caracteres incorrectos en la clave</string>
<string name="key_length_error">Longitud de clave incorrecta</string>
<string name="key_length_explanation_base64">Las claves base64 de WireGuard deben tener 44 caracteres (32 bytes)</string>
<string name="key_length_explanation_binary">: Las claves WireGuard deben tener 32 bytes</string>
<string name="key_length_explanation_hex">: Las claves hexadecimales de Wirex deben tener 64 caracteres (32 bytes)</string>
<string name="listen_port">Puerto de escucha</string>
<string name="log_export_error">No se pudo exportar el registro: %s</string>
<string name="log_export_subject">Archivo de registro WireGuard Android</string>
<string name="log_export_success">Guardado en “%s”</string>
<string name="log_export_title">Exportar archivo de registro</string>
<string name="log_saver_activity_label">Guardar registro</string>
<string name="log_viewer_pref_summary">Los registros pueden ayudar con la depuración</string>
<string name="log_viewer_pref_title">Ver registro de aplicación</string>
<string name="log_viewer_title">Registro</string>
<string name="logcat_error">No se puede ejecutar logcat: </string>
<string name="module_disabler_disabled_summary">El módulo experimental del kernel puede mejorar el rendimiento</string>
<string name="module_disabler_disabled_title">Habilitar backend del módulo del kernel</string>
<string name="module_disabler_enabled_summary">El backend más lento del espacio de usuario puede mejorar la estabilidad</string>
<string name="module_disabler_enabled_title">Desactivar backend del módulo del kernel</string>
<string name="module_installer_error">Ocurrió un error. Intente de nuevo</string>
<string name="module_installer_initial">El módulo experimental del kernel puede mejorar el rendimiento</string>
<string name="module_installer_not_found">No hay módulos disponibles para tu dispositivo</string>
<string name="module_installer_title">Descargar e instalar el módulo del kernel</string>
<string name="module_installer_working">Descargando e instalando…</string>
<string name="module_version_error">No se puede determinar la versión del módulo del kernel</string>
<string name="mtu">MTU</string>
<string name="multiple_tunnels_summary_off">Activar un túnel apagará los demás</string>
<string name="multiple_tunnels_summary_on">Múltiples túneles pueden ser activados simultáneamente</string>
<string name="multiple_tunnels_title">Permitir múltiples túneles simultáneos</string>
<string name="name">Nombre</string>
<string name="no_config_error">Intentando abrir un túnel sin configuración</string>
<string name="no_configs_error">No se encontraron configuraciones</string>
<string name="no_tunnels_error">No existen túneles</string>
<string name="parse_error_generic">cadena</string>
<string name="parse_error_inet_address">Dirección IP</string>
<string name="parse_error_inet_endpoint">punto final</string>
<string name="parse_error_inet_network">Red IP</string>
<string name="parse_error_integer">número</string>
<string name="parse_error_reason">No se puede analizar %1$s “%2$s”</string>
<string name="peer">Pares</string>
<string name="permission_description">controlar túneles de WireGuard, habilitando y desactivando túneles a su antojo, lo que podría conducir mal al tráfico de Internet</string>
<string name="permission_label">controlar túneles de WireGuard</string>
<string name="persistent_keepalive">Mantenimiento persistente</string>
<string name="pre_shared_key">Clave precompartida</string>
<string name="pre_shared_key_enabled">activado</string>
<string name="private_key">Clave privada</string>
<string name="public_key">Clave pública</string>
<string name="qr_code_hint">Consejo: generar con `qrencode -t ansiutf8 &lt; tunnel.conf`.</string>
<string name="restore_on_boot_summary_off">No mostrará túneles habilitados al arrancar</string>
<string name="restore_on_boot_summary_on">Mostrará túneles habilitados al arrancar</string>
<string name="restore_on_boot_title">Restaurar al arrancar</string>
<string name="save">Guardar</string>
<string name="select_all">Seleccionar todo</string>
<string name="settings">Preferencias</string>
<string name="shell_exit_status_read_error">Shell no puede leer estado de salida</string>
<string name="shell_marker_count_error">Shell esperaba 4 marcadores, recibió %d</string>
<string name="shell_start_error">No se pudo iniciar Shell: %d</string>
<string name="success_application_will_restart">Éxito. La aplicación se reiniciará ahora…</string>
<string name="toggle_all">Cambiar Todos</string>
<string name="toggle_error">Error al cambiar el túnel WireGuard: %s</string>
<string name="tools_installer_already">wg y wg-quick ya están instalados</string>
<string name="tools_installer_failure">No se puede instalar herramientas de línea de comandos (sin root?)</string>
<string name="tools_installer_initial">Instalar herramientas opcionales para el scripting</string>
<string name="tools_installer_initial_magisk">Instalar herramientas opcionales para el scripting como módulo Magisk</string>
<string name="tools_installer_initial_system">Instalar herramientas opcionales para el scripting en la partición del sistema</string>
<string name="tools_installer_success_magisk">wg y wg-quick instalados como un módulo Magisk (requiere reinicio)</string>
<string name="tools_installer_success_system">wg y wg-quick instalados en la partición del sistema</string>
<string name="tools_installer_title">Instalar herramientas de línea de comandos</string>
<string name="tools_installer_working">Instalando wg y wg-quick</string>
<string name="tools_unavailable_error">Herramientas requeridas no disponibles</string>
<string name="transfer">Transferir</string>
<string name="transfer_bytes">%d B</string>
<string name="transfer_gibibytes">%.2f GiB</string>
<string name="transfer_kibibytes">%.2f KiB</string>
<string name="transfer_mibibytes">%.2f MiB</string>
<string name="transfer_rx_tx">rx: %1$s, tx: %2$s</string>
<string name="transfer_tibibytes">%.2f TiB</string>
<string name="tun_create_error">No se puede crear el dispositivo túnel</string>
<string name="tunnel_config_error">No se puede configurar el túnel (wg-quick devuelto %d)</string>
<string name="tunnel_create_error">No se puede crear el dispositivo túnel: %s</string>
<string name="tunnel_create_success">Túnel creado con éxito “%s”</string>
<string name="tunnel_error_already_exists">Túnel “%s” ya existe</string>
<string name="tunnel_error_invalid_name">Nombre inválido</string>
<string name="tunnel_list_placeholder">Añadir un túnel usando el botón azul</string>
<string name="tunnel_name">Nombre del túnel</string>
<string name="tunnel_on_error">No se puede activar el túnel (wgTurnOn devolvió %d)</string>
<string name="tunnel_rename_error">No se puede renombrar túnel: %s</string>
<string name="tunnel_rename_success">Túnel renombrado con éxito a “%s”</string>
<string name="type_name_go_userspace">Ir al espacio de usuario</string>
<string name="type_name_kernel_module">Módulo Kernel</string>
<string name="unknown_error">Error desconocido</string>
<string name="version_summary">%1$s backend v%2$s</string>
<string name="version_summary_checking">Comprobando versión de backend %s</string>
<string name="version_summary_unknown">Versión %s desconocida</string>
<string name="version_title">WireGuard para Android -%s</string>
<string name="vpn_not_authorized_error">Servicio VPN no autorizado por el usuario</string>
<string name="vpn_start_error">No se puede iniciar el servicio VPN Android</string>
<string name="zip_export_error">No se pueden exportar túneles: %s</string>
<string name="zip_export_success">Guardado en “%s”</string>
<string name="zip_export_summary">El archivo Zip se guardará en la carpeta de descargas</string>
<string name="zip_export_title">Exportar túneles a archivo zip</string>
<string name="biometric_prompt_zip_exporter_title">Autenticar para exportar túneles</string>
<string name="biometric_prompt_private_key_title">Autenticar para ver la clave privada</string>
<string name="biometric_auth_error">Error de autenticación</string>
<string name="biometric_auth_error_reason">Error de autenticación: %s</string>
</resources>
@@ -171,6 +171,7 @@
<string name="save">ذخیره</string>
<string name="select_all">انتخاب همه</string>
<string name="settings">تنظیمات</string>
<string name="shell_start_error">آغاز پوسته شکست خورد: %d</string>
<string name="success_application_will_restart">موفقیت. برنامه اکنون دوباره راه‌اندازی خواهد شد…</string>
<string name="toggle_all">معکوس کردن همه</string>
<string name="tools_installer_title">ابزارهای خط فرمان را نصب کنید</string>
+64
View File
@@ -0,0 +1,64 @@
<?xml version="1.0" encoding="utf-8"?>
<resources>
<plurals name="persistent_keepalive_seconds_unit">
<item quantity="one">joka sekunti</item>
<item quantity="other">%d sekunnin välein</item>
</plurals>
<plurals name="persistent_keepalive_seconds_suffix">
<item quantity="one">sekunti</item>
<item quantity="other">sekuntia</item>
</plurals>
<string name="use_all_applications">Käytä kaikkia sovelluksia</string>
<string name="add_peer">Lisää toinen osapuoli</string>
<string name="addresses">Osoitteet</string>
<string name="applications">Sovellukset</string>
<string name="allowed_ips">Sallitut IP-osoitteet</string>
<string name="app_name">WireGuard</string>
<string name="bad_config_context_top_level">%s</string>
<string name="bad_config_reason_invalid_key">Virheellinen avain</string>
<string name="bad_config_reason_invalid_number">Virheellinen luku</string>
<string name="bad_config_reason_invalid_value">Virheellinen arvo</string>
<string name="bad_config_reason_missing_attribute">Attribuutti puuttuu</string>
<string name="bad_config_reason_missing_section">Osio puuttuu</string>
<string name="bad_config_reason_syntax_error">Syntaksivirhe</string>
<string name="bad_config_reason_unknown_attribute">Tuntematon määrite</string>
<string name="bad_config_reason_unknown_section">Tuntematon osio</string>
<string name="bad_config_reason_value_out_of_range">Arvo alueen ulkopuolella</string>
<string name="bad_extension_error">Tiedoston on oltava .conf tai .zip</string>
<string name="cancel">Peruuta</string>
<string name="config_not_found_error">Asetustiedostoa “%s” ei löydy</string>
<string name="config_rename_error">Asetustiedostoa \"%s\" ei voi nimetä uudelleen</string>
<string name="config_save_success">Asetustiedosto \"%s\" tallennettu onnistuneesti</string>
<string name="create_activity_title">Luo WireGuard Tunnel</string>
<string name="exclude_private_ips">Jätä pois yksityiset IP-osoitteet</string>
<string name="generate_new_private_key">Luo uusi yksityinen avain</string>
<string name="generic_error">Tuntematon ”%s” virhe</string>
<string name="hint_automatic">(oletus)</string>
<string name="hint_generated">(generoitu)</string>
<string name="hint_optional">(valinnainen)</string>
<string name="hint_optional_discouraged">(valinnainen, ei suositeltava)</string>
<string name="hint_random">(satunnainen)</string>
<string name="illegal_filename_error">Virheellinen tiedostonimi “%s”</string>
<string name="import_error">Tunnelia \"%s\" ei voitu tuoda</string>
<string name="import_from_qr_code">Tuo tunneli QR-koodista</string>
<string name="import_success">Tuotu ”%s”</string>
<string name="key_contents_error">Virheellinen merkki avaimessa</string>
<string name="key_length_error">Virheellinen avaimen pituus</string>
<string name="key_length_explanation_base64">: WireGuardin base64-avainten pituus on oltava 44 merkkiä (32 tavua)</string>
<string name="key_length_explanation_binary">: WireGuard-avainten on oltava 32 tavua</string>
<string name="key_length_explanation_hex">: WireGuardin base64-avainten pituus on oltava 64 merkkiä (32 tavua)</string>
<string name="listen_port">Kuuntele porttia</string>
<string name="mtu">MTU</string>
<string name="no_configs_error">Asetuksia ei löydy</string>
<string name="no_tunnels_error">Tunneleita ei ole</string>
<string name="parse_error_generic">merkkijono</string>
<string name="parse_error_inet_address">IP-osoite</string>
<string name="parse_error_inet_network">IP-verkko</string>
<string name="transfer_bytes">%d B</string>
<string name="transfer_gibibytes">%.2f GiB</string>
<string name="transfer_kibibytes">%.2f KiB</string>
<string name="transfer_mibibytes">%.2f MiB</string>
<string name="transfer_rx_tx">rx: %1$s, tx: %2$s</string>
<string name="transfer_tibibytes">%.2f TiB</string>
<string name="tunnel_name">Tunnelin nimi</string>
</resources>
+229
View File
@@ -0,0 +1,229 @@
<?xml version="1.0" encoding="utf-8"?>
<resources>
<plurals name="delete_error">
<item quantity="one">%d ਟਨਲ ਹਟਾਉਣ ਲਈ ਅਸਮਰੱਥ: %s</item>
<item quantity="other">%d ਟਨਲਾਂ ਹਟਾਉਣ ਲਈ ਅਸਮਰੱਥ: %s</item>
</plurals>
<plurals name="delete_success">
<item quantity="one">%d ਟਨਲ ਕਾਮਯਾਬੀ ਨਾਲ ਹਟਾਈ</item>
<item quantity="other">%d ਟਨਲਾਂ ਕਾਮਯਾਬੀ ਨਾਲ ਹਟਾਈਆਂ</item>
</plurals>
<plurals name="delete_title">
<item quantity="one">%d ਟਨਲ ਚੁਣੀ</item>
<item quantity="other">%d ਟਨਲਾਂ ਚੁਣੀਆਂ</item>
</plurals>
<plurals name="import_partial_success">
<item quantity="one">%2$d ਟਨਲਾਂ ਵਿੱਚੋਂ %1$d ਇੰਪੋਰਟ ਕੀਤੀ</item>
<item quantity="other">%2$d ਟਨਲਾਂ ਵਿੱਚੋਂ %1$d ਇੰਪੋਰਟ ਕੀਤੀਆਂ</item>
</plurals>
<plurals name="import_total_success">
<item quantity="one">%d ਟਨਲ ਇੰਪੋਰਟ ਕੀਤੀ</item>
<item quantity="other">%d ਟਨਲਾਂ ਇੰਪੋਰਟ ਕੀਤੀਆਂ</item>
</plurals>
<plurals name="set_excluded_applications">
<item quantity="one">%d ਅਲਹਿਦਾ ਕੀਤੀ ਐਪਲੀਕੇਸ਼ਨ</item>
<item quantity="other">%d ਅਲਹਿਦਾ ਕੀਤੀਆਂ ਐਪਲੀਕੇਸ਼ਨਾਂ</item>
</plurals>
<plurals name="set_included_applications">
<item quantity="one">%d ਐਪਲੀਕੇਸ਼ਨ ਸਮੇਤ</item>
<item quantity="other">%d ਐਪਲੀਕੇਸ਼ਨਾਂ ਸਮੇਤ</item>
</plurals>
<plurals name="n_excluded_applications">
<item quantity="one">%d ਅਲਹਿਦਾ ਰੱਖਿਆ</item>
<item quantity="other">%d ਅਲਹਿਦਾ ਰੱਖੇ</item>
</plurals>
<plurals name="n_included_applications">
<item quantity="one">%d ਸਮੇਤ</item>
<item quantity="other">%d ਸਮੇਤ</item>
</plurals>
<string name="all_applications">ਸਾਰੀਆਂ ਐਪਲੀਕੇਸ਼ਨਾਂ</string>
<string name="exclude_from_tunnel">ਅਲਹਿਦਾ</string>
<string name="include_in_tunnel">ਸਿਰਫ਼ ਸ਼ਾਮਲ</string>
<plurals name="include_n_applications">
<item quantity="one">%d ਐਪ ਸ਼ਾਮਲ ਕਰੋ</item>
<item quantity="other">%d ਐਪਾਂ ਸ਼ਾਮਲ ਕਰੋ</item>
</plurals>
<plurals name="exclude_n_applications">
<item quantity="one">%d ਐਪ ਅਲਹਿਦਾ ਰੱਖੋ</item>
<item quantity="other">%d ਐਪਾਂ ਅਲਹਿਦਾ ਰੱਖੋ</item>
</plurals>
<plurals name="persistent_keepalive_seconds_unit">
<item quantity="one">ਹਰ ਸਕਿੰਟ</item>
<item quantity="other">ਹਰ %d ਸਕਿੰਟ</item>
</plurals>
<plurals name="persistent_keepalive_seconds_suffix">
<item quantity="one">ਸਕਿੰਟ</item>
<item quantity="other">ਸਕਿੰਟ</item>
</plurals>
<string name="use_all_applications">ਸਾਰੀਆਂ ਐਪਾਂ ਵਰਤੋਂ</string>
<string name="add_peer">ਪੀਅਰ ਜੋੜੋ</string>
<string name="addresses">ਸਿਰਨਾਵੇ</string>
<string name="applications">ਐਪਲੀਕੇਸ਼ਨਾਂ</string>
<string name="allow_remote_control_intents_summary_off">ਬਾਹਰੀ ਐਪਾਂ ਟਨਲਾਂ ਨੂੰ ਬਦਲ ਨਹੀਂ ਸਕਦੀਆਂ (ਸਿਫਾਰਸ਼ੀ)</string>
<string name="allow_remote_control_intents_summary_on">ਬਾਹਰੀ ਐਪਾਂ ਟਨਲਾਂ ਨੂੰ ਬਦਲ ਸਕਦੀਆਂ ਹਨ (ਤਕਨੀਕੀ)</string>
<string name="allow_remote_control_intents_title">ਰਿਮੋਟ ਕੰਟਰੋਲ ਐਪਾਂ ਦੀ ਇਜਾਜ਼ਤ ਦਿਓ</string>
<string name="allowed_ips">ਮਨਜ਼ੂਰ ਕੀਤੇ IP</string>
<string name="app_name">ਵਾਇਰਗਾਰਡ</string>
<string name="bad_config_context">%1$s ਦੇ %2$s</string>
<string name="bad_config_context_top_level">%s</string>
<string name="bad_config_error">%2$s ਵਿੱਚ %1$s</string>
<string name="bad_config_explanation_pka">: ਧਨਾਤਮਕ ਅਤੇ 65535 ਤੋਂ ਘੱਟ ਹੋਣਾ ਚਾਹੀਦਾ ਹੈ</string>
<string name="bad_config_explanation_positive_number">: ਧਨਾਤਮਕ ਹੋਣਾ ਚਾਹੀਦਾ ਹੈ</string>
<string name="bad_config_explanation_udp_port">: ਢੁੱਕਵਾਂ UDP ਪੋਰਟ ਨੰਬਰ ਹੋਣਾ ਚਾਹੀਦਾ ਹੈ</string>
<string name="bad_config_reason_invalid_key">ਗ਼ੈਰਵਾਜਬ ਕੁੰਜੀ</string>
<string name="bad_config_reason_invalid_number">ਗ਼ੈਰਵਾਜਬ ਨੰਬਰ</string>
<string name="bad_config_reason_invalid_value">ਗ਼ੈਰਵਾਜਬ ਮੁੱਲ</string>
<string name="bad_config_reason_missing_attribute">ਨਾ-ਮੌਜੂਦ ਗੁਣ</string>
<string name="bad_config_reason_missing_section">ਨਾ-ਮੌਜੂਦ ਚੋਣ</string>
<string name="bad_config_reason_syntax_error">ਸੰਟੈਕਸ ਗ਼ਲਤੀ</string>
<string name="bad_config_reason_unknown_attribute">ਅਣਪਛਾਤਾ ਗੁਣ</string>
<string name="bad_config_reason_unknown_section">ਅਣਪਛਾਤਾ ਭਾਗ</string>
<string name="bad_config_reason_value_out_of_range">ਮੁੱਲ ਹੱਦ ਤੋਂ ਬਾਹਰ ਹੈ</string>
<string name="bad_extension_error">ਫ਼ਾਇਲ .conf ਜਾਂ .zip ਹੋਣੀ ਚਾਹੀਦੀ ਹੈ</string>
<string name="cancel">ਰੱਦ ਕਰੋ</string>
<string name="config_delete_error">ਸੰਰਚਨਾ ਫ਼ਾਇਲ %s ਹਟਾਈ ਨਹੀਂ ਜਾ ਸਕਦੀ ਹੈ</string>
<string name="config_exists_error">“%s” ਲਈ ਸੰਰਚਨਾ ਪਹਿਲਾਂ ਹੀ ਮੌਜੂਦ ਹੈ</string>
<string name="config_file_exists_error">ਸੰਰਚਨਾ ਫ਼ਾਇਲ “%s” ਪਹਿਲਾਂ ਹੀ ਮੌਜੂਦ ਹੈ</string>
<string name="config_not_found_error">ਸੰਰਚਨਾ ਫ਼ਾਇਲ “%s” ਨਹੀਂ ਲੱਭੀ</string>
<string name="config_rename_error">ਸੰਰਚਨਾ ਫ਼ਾਇਲ “%s” ਦਾ ਨਾਂ ਨਹੀਂ ਬਦਲਿਆ ਜਾ ਸਕਦਾ ਹੈ</string>
<string name="config_save_error"> “%1$s” ਲਈ ਸੰਰਚਨਾ ਫ਼ਾਇਲ ਸੰਭਾਲੀ ਨਹੀਂ ਜਾ ਸਕਦੀ ਹੈ: %2$s</string>
<string name="config_save_success">“%s” ਲਈ ਸੰਰਚਨਾ ਕਾਮਯਾਬੀ ਨਾਲ ਸੰਭਾਲੀ ਗਈ ਹੈ</string>
<string name="create_activity_title">ਵਾਇਰਗਾਰਡ ਟਨਲ ਬਣਾਓ</string>
<string name="create_bin_dir_error">ਲੋਕਲ ਬਾਈਨਰੀ ਡਾਇਰੈਕਟਰੀ ਬਣਾਈ ਨਹੀਂ ਜਾ ਸਕਦੀ ਹੈ</string>
<string name="create_downloads_file_error">ਡਾਊਨਲੋਡ ਡਾਇਰੈਕਟਰੀ ਵਿੱਚ ਫ਼ਾਇਲ ਬਣਾਈ ਨਹੀਂ ਜਾ ਸਕਦੀ ਹੈ</string>
<string name="create_empty">ਮੁੱਢ ਤੋਂ ਬਣਾਓ</string>
<string name="create_from_file">ਫ਼ਾਇਲ ਜਾਂ ਅਕਾਇਵ ਤੋਂ ਦਰਾਮਦ ਕਰੋ</string>
<string name="create_from_qr_code">QR ਕੋਡ ਤੋਂ ਸਕੈਨ ਕਰੋ</string>
<string name="create_output_dir_error">ਆਉਟਪੁੱਟ ਡਾਇਰੈਕਟਰੀ ਬਣਾਈ ਨਹੀਂ ਜਾ ਸਕਦੀ ਹੈ</string>
<string name="create_temp_dir_error">ਲੋਕਲ ਆਰਜ਼ੀ ਡਾਇਰੈਕਟਰੀ ਬਣਾਈ ਨਹੀਂ ਜਾ ਸਕਦੀ ਹੈ</string>
<string name="create_tunnel">ਟਨਲ ਬਣਾਓ</string>
<string name="dark_theme_summary_off">ਇਸ ਵੇਲੇ ਹਲਕਾ (ਦਿਨ) ਥੀਮ ਵਰਤਿਆ ਜਾ ਰਿਹਾ ਹੈ</string>
<string name="dark_theme_summary_on">ਇਸ ਵੇਲੇ ਗੂੜ੍ਹਾ (ਰਾਤ) ਥੀਮ ਵਰਤਿਆ ਜਾ ਰਿਹਾ ਹੈ</string>
<string name="dark_theme_title">ਗੂੜ੍ਹਾ ਥੀਮ ਵਰਤੋਂ</string>
<string name="delete">ਹਟਾਓ</string>
<string name="dns_servers">DNS ਸਰਵਰ</string>
<string name="edit">ਸੋਧੋ</string>
<string name="endpoint">ਐਂਡ-ਪੁਆਇੰਟ</string>
<string name="error_down">ਟਨਲ ਬੰਦ ਕਰਨ ਦੌਰਾਨ ਗ਼ਲਤੀ: %s</string>
<string name="error_fetching_apps">ਐਪ ਸੂਚੀ ਲੈਣ ਦੌਰਾਨ ਗ਼ਲਤੀ: %s</string>
<string name="error_root">ਰੂਟ ਪਹੁੰਚ ਲਵੋ ਅਤੇ ਮੁੜ ਕੋਸ਼ਿਸ਼ ਕਰੋ</string>
<string name="error_up">ਟਨਲ ਚਾਲੂ ਕਰਨ ਦੌਰਾਨ ਗ਼ਲਤੀ: %s</string>
<string name="exclude_private_ips">ਪ੍ਰਾਈਵੇਟ IP ਅਲਹਿਦਾ ਰੱਖੋ</string>
<string name="generate_new_private_key">ਨਵੀਂ ਪ੍ਰਾਈਵੇਟ ਕੁੰਜੀ ਬਣਾਓ</string>
<string name="generic_error">ਅਣਪਛਾਤੀ “%s” ਗਲਤੀ</string>
<string name="hint_automatic">(ਆਟੋ)</string>
<string name="hint_generated">(ਤਿਆਰ ਕੀਤਾ)</string>
<string name="hint_optional">(ਚੋਣਵਾਂ)</string>
<string name="hint_optional_discouraged">(ਚੋਣਵਾਂ, ਪਰ ਸਿਫਾਰਸ਼ੀ ਨਹੀਂ)</string>
<string name="hint_random">(ਰਲਵਾਂ)</string>
<string name="illegal_filename_error">ਗ਼ੈਰ-ਵਾਜਬ ਫ਼ਾਇਲ ਨਾਂ \"%s\"</string>
<string name="import_error">ਟਨਲ ਇੰਪੋਰਟ ਕਰਨ ਲਈ ਅਸਮਰੱਥ: %s</string>
<string name="import_from_qr_code">QR ਕੋਡ ਤੋਂ ਟਨਲ ਇੰਪੋਰਟ ਕਰੋ</string>
<string name="import_success">\"%s\" ਇੰਪੋਰਟ ਕੀਤੀ</string>
<string name="interface_title">ਇੰਟਰਫੇਸ</string>
<string name="key_contents_error">ਕੁੰਜੀ ਵਿੱਚ ਗ਼ਲਤ ਅੱਖਰ</string>
<string name="key_length_error">ਗ਼ਲਤ ਕੁੰਜੀ ਦੀ ਲੰਬਾਈ</string>
<string name="key_length_explanation_base64">: WireGuard base64 ਕੁੰਜੀਆਂ ਵਿੱਚ 44 ਅੱਖਰ ਹੋਣੇ ਚਾਹੀਦੇ ਹਨ (32 ਬਾਈਟ)</string>
<string name="key_length_explanation_binary">: WireGuard ਕੁੰਜੀਆਂ 32 ਬਾਈਟ ਹੋਣੀਆਂ ਚਾਹੀਦੀਆਂ ਹਨ</string>
<string name="key_length_explanation_hex">: WireGuard ਹੈਕਸਾ ਕੁੰਜੀਆਂ ਵਿੱਚ 64 ਅੱਖਰ ਹੋਣੇ ਚਾਹੀਦੇ ਹਨ (32 ਬਾਈਟ)</string>
<string name="listen_port">ਸੁਣਨ ਵਾਲੀ ਪੋਰਟ</string>
<string name="log_export_error">ਲਾਗ ਐਕਸਪੋਰਟ ਕਰਨ ਲਈ ਅਸਮਰੱਥ: %s</string>
<string name="log_export_subject">ਵਾਇਰਗਾਰਡ ਐਂਡਰਾਈਡ ਲਾਗ ਫ਼ਾਇਲ</string>
<string name="log_export_success">“%s” ਵਜੋਂ ਸੰਭਾਲਿਆ ਗਿਆ</string>
<string name="log_export_title">ਲਾਗ ਫ਼ਾਇਲ ਬਰਾਮਦ ਕਰੋ</string>
<string name="log_saver_activity_label">ਲਾਗ ਸੰਭਾਲੋ</string>
<string name="log_viewer_pref_summary">ਲਾਗ ਡੀਬੱਗ ਕਰਨ ਲਈ ਸਹਾਇਤਾ ਕਰ ਸਕਦੇ ਹਨ</string>
<string name="log_viewer_pref_title">ਐਪਲੀਕੇਸ਼ਨ ਲਾਗ ਵੇਖੋ</string>
<string name="log_viewer_title">ਲਾਗ</string>
<string name="logcat_error">logcat ਚਲਾਉਣ ਲਈ ਅਸਮਰੱਥ: </string>
<string name="module_disabler_disabled_summary">ਤਜਰਬੇ ਅਧੀਨ ਕਰਨਲ ਮੋਡੀਊਲ ਕਾਰਗੁਜ਼ਾਰੀ ਸੁਧਾਰ ਸਕਦਾ ਹੈ</string>
<string name="module_disabler_disabled_title">ਕਰਨਲ ਮੋਡੀਊਲ ਬੈਕਐਂਡ ਸਮਰੱਥ ਕਰੋ</string>
<string name="module_disabler_enabled_summary">ਹੌਲੀ ਵਰਤੋਂਕਾਰ-ਸਪੇਸ ਬੈਂਕਡ ਸਥਿਰਤਾ ਸੁਧਾਰ ਕਰ ਸਕਦਾ ਹੈ</string>
<string name="module_disabler_enabled_title">ਕਰਨਲ ਮੋਡੀਊਲ ਬੈਕਐਂਡ ਅਸਮਰੱਥ ਕਰੋ</string>
<string name="module_installer_error">ਕੁਝ ਗਲਤ ਵਾਪਰ ਗਿਆ। ਮੁੜ ਕੋਸ਼ਿਸ਼ ਕਰੋ</string>
<string name="module_installer_initial">ਤਜਰਬੇ ਅਧੀਨ ਕਰਨਲ ਮੋਡੀਊਲ ਕਾਰਗੁਜ਼ਾਰੀ ਸੁਧਾਰ ਸਕਦਾ ਹੈ</string>
<string name="module_installer_not_found">ਤੁਹਾਡੇ ਡਿਵਾਈਸ ਲਈ ਕੋਈ ਮੋਡੀਊਲ ਮੌਜੂਦ ਨਹੀਂ ਹਨ</string>
<string name="module_installer_title">ਕਰਨਲ ਮੋਡੀਊਲ ਡਾਊਨਲੋਡ ਕਰਕੇ ਇੰਸਟਾਲ ਕਰੋ</string>
<string name="module_installer_working">ਡਾਊਨਲੋਡ ਤੇ ਇੰਸਟਾਲ ਕੀਤੇ ਜਾ ਰਹੇ ਹਨ…</string>
<string name="module_version_error">ਕਰਨਲ ਮੋਡੀਊਲ ਵਰਜ਼ਨ ਪਤਾ ਲਗਾਉਣ ਲਈ ਅਸਮਰੱਥ ਹੈ</string>
<string name="mtu">MTU</string>
<string name="multiple_tunnels_summary_off">ਇੱਕ ਟਨਲ ਨੂੰ ਚਾਲੂ ਕਰਨ ਨਾਲ ਹੋਰ ਬੰਦ ਹੋ ਜਾਣਗੀਆਂ</string>
<string name="multiple_tunnels_summary_on">ਕਈ ਟਨਲਾਂ ਇੱਕੋ ਸਮੇਂ ਵੀ ਚਾਲੂ ਕੀਤੀਆਂ ਜਾ ਸਕਦੀਆਂ ਹਨ</string>
<string name="multiple_tunnels_title">ਇੱਕੋ ਸਮੇਂ ਕਈ ਟਨਲਾਂ ਦੀ ਇਜਾਜ਼ਤ ਦਿਓ</string>
<string name="name">ਨਾਂ</string>
<string name="no_config_error">ਬਿਨਾਂ ਸੰਰਚਨਾ ਦੇ ਟਲਨ ਨੂੰ ਚਾਲੂ ਕਰਨ ਦੀ ਕੋਸ਼ਿਸ਼ ਕੀਤੀ ਜਾ ਰਹੀ ਹੈ</string>
<string name="no_configs_error">ਕੋਈ ਸੰਰਚਨਾ ਨਹੀਂ ਲੱਭੀ</string>
<string name="no_tunnels_error">ਕੋਈ ਟਨਲ ਮੌਜੂਦ ਨਹੀਂ ਹੈ</string>
<string name="parse_error_generic">ਸਤਰ</string>
<string name="parse_error_inet_address">IP ਸਿਰਨਾਵਾਂ</string>
<string name="parse_error_inet_endpoint">ਐਂਡ-ਪੁਆਇੰਟ</string>
<string name="parse_error_inet_network">IP ਨੈੱਟਵਰਕ</string>
<string name="parse_error_integer">ਨੰਬਰ</string>
<string name="parse_error_reason">%1$s “%2$s” ਨੂੰ ਪਾਰਸ ਨਹੀਂ ਕੀਤਾ ਜਾ ਸਕਿਆ</string>
<string name="peer">ਪੀਅਰ</string>
<string name="permission_description">ਵਾਇਰਗਾਰਡ ਟਨਲਾਂ ਨੂੰ ਕੰਟਰੋਲ ਕਰੋ, ਮਨਮਰਜ਼ੀ ਮੁਤਾਬਕ ਟਨਲਾਂ ਨੂੰ ਸਮਰੱਥ ਤੇ ਅਸਮਰੱਥ ਕਰੋ, ਸੰਭਾਵਿਤ ਇੰਟਰਨੈੱਟ ਟਰੈਫਿਕ ਦੀ ਦਿਸ਼ਾ ਬਦਲੋ</string>
<string name="permission_label">ਵਾਇਰਗਰਾਡ ਟਨਲਾਂ ਕੰਟਰੋਲ ਕਰੋ</string>
<string name="persistent_keepalive">ਸਥਿਰ ਲਗਾਤਾਰ ਜਾਰੀ ਰੱਖੋ</string>
<string name="pre_shared_key">ਪਹਿਲਾਂ-ਸਾਂਝੀ ਕੀਤੀ ਕੁੰਜੀ</string>
<string name="pre_shared_key_enabled">ਸਮਰੱਥ ਹੈ</string>
<string name="private_key">ਪ੍ਰਾਈਵੇਟ ਕੁੰਜੀ</string>
<string name="public_key">ਪਬਲਿਕ ਕੁੰਜੀ</string>
<string name="qr_code_hint">ਟੋਟਕਾ: `qrencode -t ansiutf8 &lt; tunnel.conf` ਨਾਲ ਤਿਆਰ ਕਰੋ।</string>
<string name="restore_on_boot_summary_off">ਬੂਟ ਕਰਨ ਸਮੇਂ ਸਮਰੱਥ ਕੀਤੀਆਂ ਟਨਲਾਂ ਨੂੰ ਚਾਲੂ ਨਹੀਂ ਕੀਤਾ ਜਾਵੇਗਾ</string>
<string name="restore_on_boot_summary_on">ਬੂਟ ਕਰਨ ਸਮੇਂ ਸਮਰੱਥ ਕੀਤੀਆਂ ਟਨਲਾਂ ਨੂੰ ਚਾਲੂ ਕੀਤਾ ਜਾਵੇਗਾ</string>
<string name="restore_on_boot_title">ਬੂਟ ਕਰਨ ਉੱਤੇ ਬਹਾਲ ਕਰੋ</string>
<string name="save">ਸੰਭਾਲੋ</string>
<string name="select_all">ਸਾਰੇ ਚੁਣੋ</string>
<string name="settings">ਸੈਟਿੰਗਾਂ</string>
<string name="shell_exit_status_read_error">ਸ਼ੈਲ ਬਾਹਰ ਜਾਣ (exit) ਸਥਿਤੀ ਪੜ੍ਹ ਨਹੀਂ ਸਕਦੀ</string>
<string name="shell_marker_count_error">ਸ਼ੈਲ 4 ਮਾਰਕਰਾਂ ਦੀ ਉਮੀਦ ਕਰਦੀ ਸੀ, %d ਮਿਲੇ</string>
<string name="shell_start_error">ਸ਼ੈਲ ਸ਼ੁਰੂ ਕਰਨ ਲਈ ਅਸਫ਼ਲ ਹੈ: %d</string>
<string name="success_application_will_restart">ਕਾਮਯਾਬ। ਐਪਲੀਕੇਸ਼ਨ ਹੁਣ ਮੁੜ-ਚਾਲੂ ਹੋਵੇਗੀ…</string>
<string name="toggle_all">ਸਭ ਪਲਟੋ</string>
<string name="toggle_error">ਵਾਇਰਗਾਰਡ ਟਨਲ ਬਦਲਣ ਦੌਰਾਨ ਗ਼ਲਤੀ: %s</string>
<string name="tools_installer_already">wg ਅਤੇ wg-quick ਪਹਿਲਾਂ ਹੀ ਇੰਸਟਾਲ ਹਨ</string>
<string name="tools_installer_failure">ਕਮਾਂਡ-ਲਾਈਨ ਟੂਲ ਇੰਸਟਾਲ ਕਰਨ ਲਈ ਅਸਮਰੱਥ (ਰੂਟ ਨਹੀਂ ਹੋ?)</string>
<string name="tools_installer_initial">ਸਕ੍ਰਿਪਟ ਲਿਖਣ ਲਈ ਚੋਣਵੇਂ ਟੂਲ ਇੰਸਟਾਲ ਕਰੋ</string>
<string name="tools_installer_initial_magisk">Magisk ਮੋਡੀਊਲ ਵਜੋਂ ਸਕ੍ਰਿਪਟਾਂ ਲਿਖਣ ਲਈ ਚੋਣਵੇਂ ਟੂਲ ਇੰਸਟਾਲ ਕਰੋ</string>
<string name="tools_installer_initial_system">ਸਿਸਟਮ ਪਾਰਟੀਸ਼ਨ ਵਿੱਚ ਸਕ੍ਰਿਪਟ ਲਿਖਣ ਲਈ ਚੋਣਵੇਂ ਟੂਲ ਇੰਸਟਾਲ ਕਰੋ</string>
<string name="tools_installer_success_magisk">wg ਅਤੇ wg-quick ਨੂੰ Magisk ਮੋਡੀਊਲ ਵਜੋਂ ਇੰਸਟਾਲ ਕੀਤਾ (ਮੁੜ-ਚਾਲੂ ਕਰਨ ਦੀ ਲੋੜ ਹੋਵੇਗੀ)</string>
<string name="tools_installer_success_system">wg ਅਤੇ wg-quick ਨੂੰ ਸਿਸਟਮ ਪਾਰਟੀਸ਼ਨ ਵਿੱਚ ਇੰਸਟਾਲ ਕੀਤਾ</string>
<string name="tools_installer_title">ਕਮਾਂਡ ਲਾਈਨ ਟੂਲ ਇੰਸਟਾਲ ਕਰੋ</string>
<string name="tools_installer_working">wg ਤੇ wg-quick ਇੰਸਟਾਲ ਕੀਤੇ ਜਾ ਰਹੇ ਹਨ</string>
<string name="tools_unavailable_error">ਚਾਹੀਦੇ ਟੂਲ ਮੌਜੂਦ ਨਹੀਂ ਹਨ</string>
<string name="transfer">ਟਰਾਂਸਫਰ</string>
<string name="transfer_bytes">%d B</string>
<string name="transfer_gibibytes">%.2f GiB</string>
<string name="transfer_kibibytes">%.2f KiB</string>
<string name="transfer_mibibytes">%.2f MiB</string>
<string name="transfer_rx_tx">rx: %1$s, tx: %2$s</string>
<string name="transfer_tibibytes">%.2f TiB</string>
<string name="tun_create_error">tun ਡਿਵਾਈਸ ਬਣਾਉਣ ਲਈ ਅਸਮਰੱਥ</string>
<string name="tunnel_config_error">ਟਨਲ ਦੀ ਸੰਰਚਨਾ ਕਰਨ ਲਈ ਅਸਮਰੱਥ (wg-quick ਨੇ %d ਵਾਪਸ ਕੀਤਾ)</string>
<string name="tunnel_create_error">ਟਨਲ ਬਣਾਉਣ ਲਈ ਅਸਮਰੱਥ: %s</string>
<string name="tunnel_create_success">“%s” ਟਨਲ ਕਾਮਯਾਬੀ ਨਾਲ ਬਣਾਈ</string>
<string name="tunnel_error_already_exists">ਟਨਲ “%s” ਪਹਿਲਾਂ ਹੀ ਮੌਜੂਦ ਹੈ</string>
<string name="tunnel_error_invalid_name">ਅਯੋਗ ਨਾਂ</string>
<string name="tunnel_list_placeholder">ਨੀਲੇ ਬਟਨ ਨੂੰ ਵਰਤ ਕੇ ਟਨਲ ਬਣਾਓ</string>
<string name="tunnel_name">ਟਨਲ ਦਾ ਨਾਂ</string>
<string name="tunnel_on_error">ਟਨਲ ਚਾਲੂ ਕਰਨ ਲਈ ਅਸਮਰੱਥ (wgTurnOn ਨੇ %d ਵਾਪਸ ਕੀਤਾ)</string>
<string name="tunnel_rename_error">ਟਨਲ ਨਾਂ-ਬਦਲਣ ਲਈ ਅਸਮਰੱਥ: %s</string>
<string name="tunnel_rename_success">ਟਨਲ ਦਾ ਨਾਂ \"%s\" ਵਜੋਂ ਕਾਮਯਾਬੀ ਨਾਲ ਬਦਲਿਆ ਗਿਆ</string>
<string name="type_name_go_userspace">ਵਰਤੋਂ-ਸਪੇਸ ਤੇ ਜਾਓ</string>
<string name="type_name_kernel_module">ਕਰਨਲ ਮੋਡੀਊਲ</string>
<string name="unknown_error">ਅਣਪਛਾਤੀ ਗਲਤੀ</string>
<string name="version_summary">%1$s ਬੈਕਐਂਡ v%2$s</string>
<string name="version_summary_checking">%s ਬੈਕਐਂਡ ਵਰਜ਼ਨ ਦੀ ਜਾਂਚ ਕੀਤੀ ਜਾ ਰਹੀ ਹੈ</string>
<string name="version_summary_unknown">ਅਣਪਛਾਤਾ %s ਵਰਜਨ</string>
<string name="version_title">Android ਲਈ WireGuard v%s</string>
<string name="vpn_not_authorized_error">VPN ਸੇਵਾ ਨੂੰ ਵਰਤੋਂਕਾਰ ਨੇ ਪਰਮਾਣਿਤ ਨਹੀਂ ਕੀਤਾ</string>
<string name="vpn_start_error">ਐਂਡਰਾਈਡ VPN ਸੇਵਾ ਸ਼ੁਰੂ ਕਰਨ ਲਈ ਅਸਮਰੱਥ</string>
<string name="zip_export_error">ਟਨਲਾਂ ਐਕਸਪੋਰਟ ਕਰਨ ਲਈ ਅਸਮਰੱਥ: %s</string>
<string name="zip_export_success">“%s” ਉੱਤੇ ਸੰਭਾਲਿਆ ਗਿਆ</string>
<string name="zip_export_summary">ਜ਼ਿਪ ਫਾਈਲ ਨੂੰ ਡਾਊਨਲੋਡ ਫੋਲਡਰ ਵਿੱਚ ਸੰਭਾਲਿਆ ਜਾਵੇਗਾ</string>
<string name="zip_export_title">ਟਨਲ ਨੂੰ ਜ਼ਿੱਪ ਫ਼ਾਇਲ ਵਜੋਂ ਬਰਾਮਦ ਕਰੋ</string>
<string name="biometric_prompt_zip_exporter_title">ਟਨਲ ਬਰਾਮਦ ਕਰਨ ਲਈ ਪਰਮਾਣਕਿਤਾ</string>
<string name="biometric_prompt_private_key_title">ਪ੍ਰਾਈਵੇਟ ਕੁੰਜੀ ਵੇਖਣ ਲਈ ਪਰਮਾਣਕਿਤਾ</string>
<string name="biometric_auth_error">ਪਰਮਾਣਿਤ ਕਰਨ ਲਈ ਅਸਫ਼ਲ</string>
<string name="biometric_auth_error_reason">ਪਰਮਾਣਿਤ ਕਰਨ ਲਈ ਅਸਫ਼ਲ: %s</string>
</resources>
+17 -17
View File
@@ -32,7 +32,7 @@
</plurals>
<plurals name="set_excluded_applications">
<item quantity="one">%d Исключенное приложение</item>
<item quantity="few">%d Исключенных приложений</item>
<item quantity="few">%d Исключенных приложения</item>
<item quantity="many">%d Исключенных приложений</item>
<item quantity="other">%d Исключенных приложений</item>
</plurals>
@@ -56,7 +56,7 @@
</plurals>
<string name="all_applications">Все приложения</string>
<string name="exclude_from_tunnel">Исключить</string>
<string name="include_in_tunnel">Только включить</string>
<string name="include_in_tunnel">Только включено</string>
<plurals name="include_n_applications">
<item quantity="one">Включить %d приложение</item>
<item quantity="few">Включить %d приложения</item>
@@ -82,12 +82,12 @@
<item quantity="other">секунд</item>
</plurals>
<string name="use_all_applications">Использовать все приложения</string>
<string name="add_peer">Добавить пира</string>
<string name="add_peer">Добавить пир</string>
<string name="addresses">IP-адреса</string>
<string name="applications">Приложения</string>
<string name="allow_remote_control_intents_summary_off">Сторонние приложения не могут переключать туннели (рекомендуется)</string>
<string name="allow_remote_control_intents_summary_on">Сторонние приложения могут переключать туннели (дополнительно)</string>
<string name="allow_remote_control_intents_title">Доступ к другим приложениям</string>
<string name="allow_remote_control_intents_summary_off">Внешние приложения не могут переключать туннели (рекомендуется)</string>
<string name="allow_remote_control_intents_summary_on">Внешние приложения могут переключать туннели (расширенное)</string>
<string name="allow_remote_control_intents_title">Разрешить управление через внешние приложения</string>
<string name="allowed_ips">Разрешенные IP-адреса</string>
<string name="app_name">WireGuard</string>
<string name="bad_config_context">%1$s из %2$s</string>
@@ -153,18 +153,18 @@
<string name="key_length_explanation_binary">: Ключи WireGuard должны быть 32 байта</string>
<string name="key_length_explanation_hex">: HEX ключи WireGuard должны содержать 64 символа (32 байта)</string>
<string name="listen_port">Порт</string>
<string name="log_export_error">Не удалось экспортировать логи: %s</string>
<string name="log_export_subject">Файл логов WireGuard Android</string>
<string name="log_export_error">Не удалось экспортировать журнал: %s</string>
<string name="log_export_subject">Файл журнала WireGuard Android</string>
<string name="log_export_success">Сохранено в “%s”</string>
<string name="log_export_title">Экспорт логов в файл</string>
<string name="log_saver_activity_label">Сохранить логи</string>
<string name="log_viewer_pref_summary">Логи могут помочь с отладкой</string>
<string name="log_viewer_pref_title">Просмотр логов приложения</string>
<string name="log_viewer_title">Логи</string>
<string name="log_export_title">Экспорт журнала в файл</string>
<string name="log_saver_activity_label">Сохранить журнал</string>
<string name="log_viewer_pref_summary">Журналы могут помочь при отладке</string>
<string name="log_viewer_pref_title">Просмотр журналов приложения</string>
<string name="log_viewer_title">Журнал</string>
<string name="logcat_error">Не удалось запустить logcat: </string>
<string name="module_disabler_disabled_summary">Экспериментальный модуль ядра приоритетнее и улучшает производительность</string>
<string name="module_disabler_disabled_title">Включить модуль ядра</string>
<string name="module_disabler_enabled_summary">Пользовательское пространство немного медленнее и улучшает стабильность</string>
<string name="module_disabler_enabled_summary">Более медленный бэкэнд пользовательского пространства может улучшить стабильность</string>
<string name="module_disabler_enabled_title">Выключить модуль ядра</string>
<string name="module_installer_error">Что-то пошло не так. Пожалуйста, попробуйте еще раз</string>
<string name="module_installer_initial">Экспериментальный модуль ядра может улучшить производительность</string>
@@ -176,7 +176,7 @@
<string name="multiple_tunnels_summary_off">Только один туннель, выключит другие</string>
<string name="multiple_tunnels_summary_on">Могут быть включены несколько туннелей одновременно</string>
<string name="multiple_tunnels_title">Несколько туннелей</string>
<string name="name">Имя</string>
<string name="name">Название</string>
<string name="no_config_error">Попытка поднять туннель без конфигурации</string>
<string name="no_configs_error">Конфигурации не найдены</string>
<string name="no_tunnels_error">Туннелей не существует</string>
@@ -229,13 +229,13 @@
<string name="tunnel_create_error">Не удалось создать туннель: %s</string>
<string name="tunnel_create_success">Успешно созданный туннель “%s”</string>
<string name="tunnel_error_already_exists">Туннель “%s” уже существует</string>
<string name="tunnel_error_invalid_name">Неправильное имя</string>
<string name="tunnel_error_invalid_name">Некорректное название</string>
<string name="tunnel_list_placeholder">Добавьте туннель с помощью синей кнопки</string>
<string name="tunnel_name">Название туннеля</string>
<string name="tunnel_on_error">Не удалось включить туннель (wgTurnOn вернул %d)</string>
<string name="tunnel_rename_error">Не удалось переименовать туннель: %s</string>
<string name="tunnel_rename_success">Туннель успешно переименован в “%s”</string>
<string name="type_name_go_userspace">Пользовательское пространство</string>
<string name="type_name_go_userspace">Перейти в пользовательское пространство</string>
<string name="type_name_kernel_module">Модуль ядра</string>
<string name="unknown_error">Неизвестная ошибка</string>
<string name="version_summary">%1$s v%2$s</string>
+218 -13
View File
@@ -1,24 +1,229 @@
<?xml version="1.0" encoding="utf-8"?>
<resources>
<plurals name="delete_error">
<item quantity="one">%d tüneli silinemiyor: %s</item>
<item quantity="other">%d tünelleri silinemiyor: %s</item>
</plurals>
<plurals name="delete_success">
<item quantity="one">%d tüneli başarıyla silindi</item>
<item quantity="other">%d tünelleri başarıyla silindi</item>
</plurals>
<plurals name="delete_title">
<item quantity="one">%d tüneli seçildi</item>
<item quantity="other">%d tünelleri seçildi</item>
</plurals>
<plurals name="import_partial_success">
<item quantity="one">%1$d/%2$d tünel içe aktarıldı</item>
<item quantity="other">%1$d/%2$d tünel içe aktarıldı</item>
</plurals>
<plurals name="import_total_success">
<item quantity="one">%d tünel içe aktarıldı</item>
<item quantity="other">%d tünel içe aktarıldı</item>
</plurals>
<plurals name="set_excluded_applications">
<item quantity="one">%d Hariç Tutulan Uygulama</item>
<item quantity="other">%d Hariç Tutulan Uygulamalar</item>
</plurals>
<plurals name="set_included_applications">
<item quantity="one">%d Dahil Edilen Uygulama</item>
<item quantity="other">%d Dahil Edilen Uygulamalar</item>
</plurals>
<plurals name="n_excluded_applications">
<item quantity="one">%d hariç tutuldu</item>
<item quantity="other">%d hariç tutuldu</item>
</plurals>
<plurals name="n_included_applications">
<item quantity="one">%d dahil edildi</item>
<item quantity="other">%d dahil edildi</item>
</plurals>
<string name="all_applications">Tüm Uygulamalar</string>
<string name="exclude_from_tunnel">Hariç</string>
<string name="include_in_tunnel">Yalnızca dahil</string>
<plurals name="include_n_applications">
<item quantity="one">%d uygulamasını dahil et</item>
<item quantity="other">%d uygulamalarını dahil et</item>
</plurals>
<plurals name="exclude_n_applications">
<item quantity="one">%d uygulamasını hariç tut</item>
<item quantity="other">%d uygulamalarını hariç tut</item>
</plurals>
<plurals name="persistent_keepalive_seconds_unit">
<item quantity="one">her saniye</item>
<item quantity="other">%d saniyede bir</item>
</plurals>
<plurals name="persistent_keepalive_seconds_suffix">
<item quantity="one">saniye</item>
<item quantity="other">saniye</item>
</plurals>
<string name="use_all_applications">Tüm uygulamaları kullan</string>
<string name="add_peer">Eş ekle</string>
<string name="addresses">Adresler</string>
<string name="applications">Uygulamalar</string>
<string name="allow_remote_control_intents_summary_off">Harici uygulamalar tünelleri değiştiremez (önerilir)</string>
<string name="allow_remote_control_intents_summary_on">Harici uygulamalar tünelleri değiştirebilir (gelişmiş)</string>
<string name="allow_remote_control_intents_title">Uzaktan kontrol uygulamalarına izin ver</string>
<string name="allowed_ips">İzin verilen IP\'ler</string>
<string name="app_name">WireGuard</string>
<string name="bad_config_context">%1$s\'in %2$s</string>
<string name="bad_config_context_top_level">%s</string>
<string name="bad_config_error">%2$s içinde %1$s</string>
<string name="bad_config_explanation_pka">: Pozitif olmalı ve 65535\'ten fazla olmamalıdır</string>
<string name="bad_config_explanation_positive_number">: Pozitif olmalıdır</string>
<string name="bad_config_explanation_udp_port">: Geçerli bir UDP Port numarası olmalıdır</string>
<string name="bad_config_reason_invalid_key">Geçersiz anahtar</string>
<string name="bad_config_reason_invalid_number">Geçersiz numara</string>
<string name="bad_config_reason_invalid_value">Geçersiz değer</string>
<string name="bad_config_reason_missing_attribute">Eksik öznitelik</string>
<string name="bad_config_reason_missing_section">Eksik bölüm</string>
<string name="bad_config_reason_syntax_error">Sözdizimi hatası</string>
<string name="bad_config_reason_unknown_attribute">Bilinmeyen öznitelik</string>
<string name="bad_config_reason_unknown_section">Bilinmeyen bölüm</string>
<string name="bad_config_reason_value_out_of_range">Aralık dışı değer</string>
<string name="bad_extension_error">Dosya .conf veya .zip olmalıdır</string>
<string name="cancel">İptal</string>
<string name="config_delete_error">%s konfigürasyon dosyası silinemiyor</string>
<string name="config_exists_error">“%s” için konfigürasyon zaten var</string>
<string name="config_file_exists_error">“%s“ için konfigürasyon dosyası zaten var</string>
<string name="config_not_found_error">“%s“ konfigürasyon dosyası bulunamadı</string>
<string name="config_rename_error">“%s” konfigürasyon dosyası yeniden adlandırılamıyor</string>
<string name="config_save_error">“%1$s” için konfigürasyon kaydedilemiyor: %2$s</string>
<string name="config_save_success">“%s“ için konfigürasyon başarıyla kaydedildi</string>
<string name="create_activity_title">WireGuard Tüneli Yarat</string>
<string name="create_downloads_file_error">İndirilenler klasöründe dosya yaratılamadı</string>
<string name="create_empty">Sıfırdan Yaratın</string>
<string name="create_from_file">Arşivden geri yükle</string>
<string name="create_from_qr_code">QR Kodu Tara</string>
<string name="create_output_dir_error">Çıkış klasörü yaratılamadı</string>
<string name="create_tunnel">Tünel Yarat</string>
<string name="dark_theme_title">Koyu renk Temayı Kullan</string>
<string name="create_bin_dir_error">Yerel ikili dizin oluşturulamıyor</string>
<string name="create_downloads_file_error">İndirilenler klasöründe dosya oluşturulamadı</string>
<string name="create_empty">Sıfırdan oluştur</string>
<string name="create_from_file">Dosya veya arşivden ekle</string>
<string name="create_from_qr_code">QR kodundan ekle</string>
<string name="create_output_dir_error">Çıktı klasörü oluşturulamıyor</string>
<string name="create_temp_dir_error">Yerel geçici dizin oluşturulamıyor</string>
<string name="create_tunnel">Tünel Oluştur</string>
<string name="dark_theme_summary_off">Şu anda açık (gündüz) teması kullanılıyor</string>
<string name="dark_theme_summary_on">Şu anda karanlık (gece) teması kullanılıyor</string>
<string name="dark_theme_title">Koyu tema kullan</string>
<string name="delete">Sil</string>
<string name="dns_servers">DNS sunucuları</string>
<string name="edit">Düzenle</string>
<string name="endpoint">Uç nokta</string>
<string name="error_down">Tünel kapatılırken hata oluştu: %s</string>
<string name="error_fetching_apps">Uygulama listesi getirilirken hata oluştu: %s</string>
<string name="error_root">Lütfen root erişimi elde edin ve tekrar deneyin</string>
<string name="error_up">Tünel açılırken hata oluştu: %s</string>
<string name="exclude_private_ips">Özel IP’leri hariç tut</string>
<string name="generate_new_private_key">Yeni özel anahtar oluştur</string>
<string name="generic_error">Bilinmeyen “%s” hatası</string>
<string name="hint_automatic">(otomatik)</string>
<string name="hint_generated">(oluşturuldu)</string>
<string name="hint_optional">(isteğe bağlı)</string>
<string name="hint_optional_discouraged">(İsteğe bağlı-Önerilmez)</string>
<string name="hint_random">(Rastgele)</string>
<string name="import_from_qr_code">Tüneli içeri QR ile al</string>
<string name="hint_optional_discouraged">(isteğe bağlı, önerilmez)</string>
<string name="hint_random">(rastgele)</string>
<string name="illegal_filename_error">Geçersiz dosya ismi “%s”</string>
<string name="import_error">Tünel içeri aktarılamıyor: %s</string>
<string name="import_from_qr_code">Tüneli QR Kod ile İçe Aktar</string>
<string name="import_success">İçe aktarıldı “%s”</string>
<string name="interface_title">Arayüz</string>
<string name="listen_port">Dinleme portu</string>
<string name="log_export_title">Dosyayı Dışarı Aktar</string>
<string name="key_contents_error">Anahtardaki yanlış karakterler</string>
<string name="key_length_error">Yanlış anahtar uzunluğu</string>
<string name="key_length_explanation_base64">: WireGuard base64 anahtarları 44 karakter (32 bayt) olmalıdır</string>
<string name="key_length_explanation_binary">: WireGuard anahtarları 32 bayt olmalıdır</string>
<string name="key_length_explanation_hex">: WireGuard onaltılık anahtarları 64 karakter (32 bayt) olmalıdır</string>
<string name="listen_port">Dinlenen port</string>
<string name="log_export_error">Günlük dışa aktarılamıyor: %s</string>
<string name="log_export_subject">WireGuard Android Günlük Dosyası</string>
<string name="log_export_success">“%s” ’e kaydedildi</string>
<string name="log_export_title">Günlük dosyasını dışa aktar</string>
<string name="log_saver_activity_label">Günlüğü kaydet</string>
<string name="log_viewer_pref_title">Uygulama günlüğüne bak</string>
<string name="log_viewer_pref_summary">Günlükler hata ayıklamaya yardımcı olabilir</string>
<string name="log_viewer_pref_title">Uygulama günlüğünü görüntüle</string>
<string name="log_viewer_title">Günlük</string>
<string name="logcat_error">Logcat çalıştırılamıyor: </string>
<string name="module_disabler_disabled_summary">Deneysel çekirdek modülü performansı artırabilir</string>
<string name="module_disabler_disabled_title">Çekirdek modülü arka ucunu etkinleştir</string>
<string name="module_disabler_enabled_summary">Daha yavaş kullanıcı alanı arka ucu kararlılığı artırabilir</string>
<string name="module_disabler_enabled_title">Çekirdek modülü arka ucunu devre dışı bırak</string>
<string name="module_installer_error">Bir şeyler yanlış gitti. Lütfen tekrar deneyin</string>
<string name="module_installer_initial">Deneysel çekirdek modülü performansı artırabilir</string>
<string name="module_installer_not_found">Cihazınız için uygun modül yok</string>
<string name="module_installer_title">Çekirdek modülünü indir ve yükle</string>
<string name="module_installer_working">İndiriliyor ve yükleniyor…</string>
<string name="module_version_error">Çekirdek modülü sürümü belirlenemiyor</string>
<string name="mtu">MTU</string>
<string name="multiple_tunnels_summary_off">Bir tüneli açmak diğerlerini kapatır</string>
<string name="multiple_tunnels_summary_on">Aynı anda birden fazla tünel açılabilir</string>
<string name="multiple_tunnels_title">Birden çok eşzamanlı tünele izin verin</string>
<string name="name">İsim</string>
<string name="no_config_error">Konfigürasyonsuz bir tünel açmaya çalışılıyor</string>
<string name="no_configs_error">Konfigürasyon bulunamadı</string>
<string name="no_tunnels_error">Tünel yok</string>
<string name="parse_error_generic">dizi</string>
<string name="parse_error_inet_address">IP adresi</string>
<string name="parse_error_inet_endpoint">uç nokta</string>
<string name="parse_error_inet_network">IP ağı</string>
<string name="parse_error_integer">numara</string>
<string name="parse_error_reason">%1$s “%2$s” ayrıştırılamıyor</string>
<string name="peer">Eş</string>
<string name="permission_description">WireGuard tünellerini kontrol edin, tünelleri istediğiniz zaman etkinleştirin ve devre dışı bırakın, İnternet trafiğini potansiyel olarak yanlış yönlendirin</string>
<string name="permission_label">WireGuard tünellerini kontrol edin</string>
<string name="persistent_keepalive">Kalıcı canlı tutma</string>
<string name="pre_shared_key">Önceden paylaşılan anahtar</string>
<string name="pre_shared_key_enabled">etkinleştirildi</string>
<string name="private_key">Özel anahtar</string>
<string name="public_key">Genel anahtar</string>
<string name="qr_code_hint">İpucu: `qrencode -t ansiutf8 &lt; tunnel.conf` ile oluşturun.</string>
<string name="restore_on_boot_summary_off">Önyüklemede etkin tünelleri açmayacak</string>
<string name="restore_on_boot_summary_on">Önyüklemede etkin tünelleri açacak</string>
<string name="restore_on_boot_title">Cihaz açılırken başlat</string>
<string name="save">Kaydet</string>
<string name="select_all">Tümünü seç</string>
<string name="settings">Ayarlar</string>
<string name="shell_exit_status_read_error">Kabuk, çıktı durumunu okuyamıyor</string>
<string name="shell_marker_count_error">Kabuk 4 işaret bekledi, %d aldı</string>
<string name="shell_start_error">Kabuk başlatılamadı: %d</string>
<string name="success_application_will_restart">Başarı. Uygulama şimdi yeniden başlayacak…</string>
<string name="toggle_all">Tümünü Değiştir</string>
<string name="toggle_error">WireGuard tüneli değiştirilirken hata oluştu: %s</string>
<string name="tools_installer_already">wg ve wg-quick zaten kurulu</string>
<string name="tools_installer_failure">Komut satırı araçları yüklenemiyor (root yok mu?)</string>
<string name="tools_installer_initial">Komut dosyası oluşturmak için isteğe bağlı araçları yükleyin</string>
<string name="tools_installer_initial_magisk">Magisk modülü olarak komut dosyası oluşturmak için isteğe bağlı araçları yükleyin</string>
<string name="tools_installer_initial_system">Sistem bölümüne komut dosyası oluşturmak için isteğe bağlı araçlar yükleyin</string>
<string name="tools_installer_success_magisk">wg ve wg-quick bir Magisk modülü olarak kuruldu (yeniden başlatma gerekir)</string>
<string name="tools_installer_success_system">wg ve wg-quick, sistem bölümüne yüklendi</string>
<string name="tools_installer_title">Komut satırı araçlarını yükleyin</string>
<string name="tools_installer_working">wg ve wg-quick kuruluyor</string>
<string name="tools_unavailable_error">Gerekli araçlar mevcut değil</string>
<string name="transfer">Transfer</string>
<string name="transfer_bytes">%d B</string>
<string name="transfer_gibibytes">%.2f GiB</string>
<string name="transfer_kibibytes">%.2f KiB</string>
<string name="transfer_mibibytes">%.2f MiB</string>
<string name="transfer_rx_tx">rx: %1$s, tx: %2$s</string>
<string name="transfer_tibibytes">%.2f TiB</string>
<string name="tun_create_error">Tun cihazı oluşturulamıyor</string>
<string name="tunnel_config_error">Tünel yapılandırılamıyor (wg-quick döndürdü: %d)</string>
<string name="tunnel_create_error">Tünel oluşturulamıyor: %s</string>
<string name="tunnel_create_success">Tünel başarıyla oluşturuldu “%s”</string>
<string name="tunnel_error_already_exists">“%s” tüneli zaten mevcut</string>
<string name="tunnel_error_invalid_name">Geçersiz isim</string>
<string name="tunnel_list_placeholder">Mavi düğmeyi kullanarak bir tünel ekleyin</string>
<string name="tunnel_name">Tünel İsmi</string>
<string name="tunnel_on_error">Tünel aktif edilemiyor (wgTornOn döndürdü: %d)</string>
<string name="tunnel_rename_error">Tünel yeniden adlandırılamıyor: %s</string>
<string name="tunnel_rename_success">Tünel başarıyla yeniden adlandırıldı “%s”</string>
<string name="type_name_go_userspace">Kullanıcı alanına git</string>
<string name="type_name_kernel_module">Çekirdek modülü</string>
<string name="unknown_error">Bilinmeyen hata</string>
<string name="version_summary">%1$s backend v%2$s</string>
<string name="version_summary_checking">%s arka uç sürümü kontrol ediliyor</string>
<string name="version_summary_unknown">Bilinmeyen %s sürümü</string>
<string name="version_title">Android için WireGuard v%s</string>
<string name="vpn_not_authorized_error">VPN hizmeti kullanıcı tarafından yetkilendirilmemiş</string>
<string name="vpn_start_error">Android VPN hizmeti başlatılamıyor</string>
<string name="zip_export_error">Tüneller dışa aktarılamıyor: %s</string>
<string name="zip_export_success">“%s” ’e kaydedildi</string>
<string name="zip_export_summary">Zip dosyası indirilenler klasörüne kaydedilecek</string>
<string name="zip_export_title">Tünelleri zip dosyasına aktar</string>
<string name="biometric_prompt_zip_exporter_title">Tünelleri dışa aktarmak için kimlik doğrulama</string>
<string name="biometric_prompt_private_key_title">Özel anahtarı görüntülemek için kimlik doğrulaması</string>
<string name="biometric_auth_error">Kimlik doğrulama hatası</string>
<string name="biometric_auth_error_reason">Kimlik doğrulama hatası: %s</string>
</resources>
+1 -1
View File
@@ -27,7 +27,7 @@
<plurals name="n_included_applications">
<item quantity="other">对 %d 个应用生效</item>
</plurals>
<string name="all_applications">对全部应用生效</string>
<string name="all_applications">全部应用程序</string>
<string name="exclude_from_tunnel">不生效</string>
<string name="include_in_tunnel">生效</string>
<plurals name="include_n_applications">
+1
View File
@@ -97,6 +97,7 @@
<string name="create_output_dir_error">Cannot create output directory</string>
<string name="create_temp_dir_error">Cannot create local temporary directory</string>
<string name="create_tunnel">Create Tunnel</string>
<string name="copied_to_clipboard">%s copied to clipboard</string>
<string name="dark_theme_summary_off">Currently using light (day) theme</string>
<string name="dark_theme_summary_on">Currently using dark (night) theme</string>
<string name="dark_theme_title">Use dark theme</string>
+2 -2
View File
@@ -1,6 +1,6 @@
buildscript {
ext {
wireguardVersionCode = 484
wireguardVersionName = '1.0.20201216'
wireguardVersionCode = 486
wireguardVersionName = '1.0.20210211'
}
}