Compare commits

..

32 Commits

Author SHA1 Message Date
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
Jason A. Donenfeld 20390d65c8 version: bump
Signed-off-by: Jason A. Donenfeld <Jason@zx2c4.com>
2020-12-16 19:09:21 +01:00
Jason A. Donenfeld 177457e67b tunnel: bump libwg-go
Signed-off-by: Jason A. Donenfeld <Jason@zx2c4.com>
2020-12-16 19:04:17 +01:00
Harsh Shandilya 8caec4d739 build: downgrade Jetpack Datastore to 1.0.0-alpha02
We're hitting occasional build failures with the newer versions that have not been triaged yet

Signed-off-by: Harsh Shandilya <me@msfjarvis.dev>
2020-12-16 19:03:43 +01:00
Harsh Shandilya fb819b99a4 build: upgrade AGP, Kotlin, core-ktx and mdc-android
Signed-off-by: Harsh Shandilya <me@msfjarvis.dev>
2020-12-16 18:55:08 +01:00
Harsh Shandilya fe82037f06 build: upgrade activity and fragment to latest betas
Signed-off-by: Harsh Shandilya <me@msfjarvis.dev>
2020-12-16 18:55:08 +01:00
Harsh Shandilya c2aa1b21f8 build: upgrade datastore dependency
Signed-off-by: Harsh Shandilya <me@msfjarvis.dev>
2020-12-03 01:26:48 +05:30
Harsh Shandilya d69415b55a build: upgrade dependencies
Signed-off-by: Harsh Shandilya <me@msfjarvis.dev>
2020-11-30 22:38:17 +05:30
Harsh Shandilya 4fae2d1255 ui: show all apps with internet permission in exclusions list
Signed-off-by: Harsh Shandilya <me@msfjarvis.dev>
2020-11-16 15:45:19 +05:30
Jason A. Donenfeld a300f269f1 ui: test for any camera, not just rear one
Some folks use chromebooks, which don't have rear cameras.

Reported-by: Jay Tuley <jay.tuley@ekonbenefits.com>
Signed-off-by: Jason A. Donenfeld <Jason@zx2c4.com>
2020-11-10 14:11:48 +01:00
Harsh Shandilya 961cba3f7c build: upgrade runtime dependencies
Updates ConstraintLayout, kotlinx.coroutines, Jetpack DataStore, JUnit and Lifecycle-Runtime-KTX

Signed-off-by: Harsh Shandilya <me@msfjarvis.dev>
2020-11-09 17:01:54 +05:30
Harsh Shandilya 6bc7386bff strings: sync translations
Signed-off-by: Harsh Shandilya <me@msfjarvis.dev>
2020-11-07 19:13:43 +05:30
Harsh Shandilya 5fa08f286e build: add task to sync localisations with Crowdin
Signed-off-by: Harsh Shandilya <me@msfjarvis.dev>
2020-11-07 19:13:42 +05:30
Harsh Shandilya 35f868733c build: switch to Gradle's maven-publish plugin
Signed-off-by: Harsh Shandilya <me@msfjarvis.dev>
2020-11-07 18:53:06 +05:30
Jason A. Donenfeld e71b3d2583 ToolsInstaller: unbreak cleanup
Signed-off-by: Jason A. Donenfeld <Jason@zx2c4.com>
2020-10-27 13:35:07 +01:00
Jason A. Donenfeld 755148242c tunnel: do not constantly raise toasts when process is opportunistically killed
Modern Android likes to kill processes to free ram and resources. When
kernel-mode WireGuard is in use, this is quite alright with us, since
the app doesn't actually need to consume any resources at all in order
for the tunnel to run. So, we want to allow and encourage this resource
frugality. However, when the quick settings tile is being used or when
the app is referenced otherwise, the app will occasionally be restarted,
to, for example, repaint the quick settings tile. This is also fine, as
the process winds up being short-lived again. But, since process
initialization means asking for a new root shell in order to check on
kernel-mode WireGuard, this means that Magisk raises a systemwide toast.
On some phones, this happens each and every time that the notification
shade is pulled down. It's not only annoying but it sometimes obscures
other notifications that users want to see, prompting their pulling down
of the notification shade in the first place. In order to get rid of
this nuisance, just disable these notifications and extraneous logs, so
that we don't clutter the system every time that the process is
opportunistically killed and restarted.

Signed-off-by: Jason A. Donenfeld <Jason@zx2c4.com>
2020-10-26 22:44:35 +01:00
Jason A. Donenfeld 15fea6f02f tunnel: clean up some docstring wording
Signed-off-by: Jason A. Donenfeld <Jason@zx2c4.com>
2020-10-20 16:35:05 +02:00
Harsh Shandilya cb2842e8ef build: upgrade to Gradle 6.7
Signed-off-by: Harsh Shandilya <me@msfjarvis.dev>
2020-10-15 10:01:53 +05:30
Jason A. Donenfeld 106b67d892 build: add crowdin syncer script and use it
Signed-off-by: Jason A. Donenfeld <Jason@zx2c4.com>
2020-10-14 17:16:36 +02:00
Harsh Shandilya 996587f792 build: update to AGP 4.1.0
Signed-off-by: Harsh Shandilya <me@msfjarvis.dev>
2020-10-13 16:18:49 +02:00
Jason A. Donenfeld 3a4bf35c77 README: mention desugaring
Signed-off-by: Jason A. Donenfeld <Jason@zx2c4.com>
2020-10-08 15:03:49 +02:00
Harsh Shandilya 46b37c0c26 build: update AGP and ConstraintLayout
Signed-off-by: Harsh Shandilya <me@msfjarvis.dev>
2020-10-07 14:14:38 +05:30
Jason A. Donenfeld 5b5ba88a97 tunnel: use more subtle roaming escape hatch
Signed-off-by: Jason A. Donenfeld <Jason@zx2c4.com>
2020-10-07 10:21:02 +02:00
Jason A. Donenfeld ceb3095a0a build: update to mdc 1.3.0-alpha03
Signed-off-by: Jason A. Donenfeld <Jason@zx2c4.com>
2020-10-05 21:46:03 +02:00
Jason A. Donenfeld a31f0cf788 DownloadsFileSaver: initialize callback in constructor, not on the fly
Signed-off-by: Jason A. Donenfeld <Jason@zx2c4.com>
2020-10-02 12:11:48 +02:00
Jason A. Donenfeld 1dc74b171c build: upgrade AndroidX biometric
The BiometricConstants class was removed and these were folded into
BiometricPrompt.

Signed-off-by: Jason A. Donenfeld <Jason@zx2c4.com>
2020-10-02 11:35:53 +02:00
Harsh Shandilya 9266487fe5 build: update AndroidX activity/fragments and resolve compile failure
Signed-off-by: Harsh Shandilya <me@msfjarvis.dev>
2020-10-02 04:28:25 +05:30
Harsh Shandilya 5d7ce139bc ui: use commit extension from fragment-ktx
Signed-off-by: Harsh Shandilya <me@msfjarvis.dev>
2020-09-30 22:42:05 +05:30
Jason A. Donenfeld ddb6c87ebf ui: account for binding disappearing on detail fragment
Signed-off-by: Jason A. Donenfeld <Jason@zx2c4.com>
2020-09-30 12:47:29 +02:00
44 changed files with 1934 additions and 151 deletions
+5 -1
View File
@@ -22,12 +22,16 @@ The tunnel library is [on JCenter](https://bintray.com/wireguard/wireguard-andro
implementation 'com.wireguard.android:tunnel:$wireguardTunnelVersion'
```
The library makes use of Java 8 features, so be sure to support those in your gradle configuration:
The library makes use of Java 8 features, so be sure to support those in your gradle configuration with desugaring:
```
compileOptions {
sourceCompatibility JavaVersion.VERSION_1_8
targetCompatibility JavaVersion.VERSION_1_8
coreLibraryDesugaringEnabled = true
}
dependencies {
coreLibraryDesugaring "com.android.tools:desugar_jdk_libs:1.0.10"
}
```
+47 -19
View File
@@ -1,25 +1,23 @@
buildscript {
ext {
activityVersion = '1.2.0-alpha07'
agpVersion = '4.0.1'
activityVersion = '1.2.0-beta02'
agpVersion = '4.1.1'
annotationsVersion = '1.1.0'
appcompatVersion = '1.2.0'
bintrayPluginVersion = '1.8.5'
biometricVersion = '1.1.0-alpha02'
biometricVersion = '1.1.0-rc01'
collectionVersion = '1.1.0'
constraintLayoutVersion = '2.0.1'
constraintLayoutVersion = '2.0.4'
coordinatorLayoutVersion = '1.1.0'
coreKtxVersion = '1.3.1'
coroutinesVersion = '1.3.9'
datastoreVersion = '1.0.0-alpha01'
coreKtxVersion = '1.3.2'
coroutinesVersion = '1.4.2'
datastoreVersion = '1.0.0-alpha02'
desugarVersion = '1.0.10'
fragmentVersion = '1.3.0-alpha07'
fragmentVersion = '1.3.0-beta02'
jsr305Version = '3.0.2'
junitVersion = '4.13'
kotlinVersion = '1.4.10'
lifecycleRuntimeKtxVersion = '2.3.0-alpha07'
materialComponentsVersion = '22973ff10305397bfc72fed41684175fee8aeefb'
mavenPluginVersion = '2.1'
junitVersion = '4.13.1'
kotlinVersion = '1.4.21'
lifecycleRuntimeKtxVersion = '2.3.0-beta01'
materialComponentsVersion = '1.3.0-beta01'
preferenceVersion = '1.1.1'
zxingEmbeddedVersion = '3.6.0'
@@ -28,8 +26,6 @@ buildscript {
dependencies {
classpath "com.android.tools.build:gradle:$agpVersion"
classpath "org.jetbrains.kotlin:kotlin-gradle-plugin:$kotlinVersion"
classpath "com.github.dcendents:android-maven-gradle-plugin:$mavenPluginVersion"
classpath "com.jfrog.bintray.gradle:gradle-bintray-plugin:$bintrayPluginVersion"
}
repositories {
google()
@@ -37,11 +33,43 @@ buildscript {
}
}
plugins {
id "de.undercouch.download" version "4.1.1"
}
task downloadCrowdin(type: Download) {
src 'https://crowdin.com/backend/download/project/wireguard.zip'
dest file('build/translations.zip')
overwrite true
}
task cleanCrowdin(type: Delete) {
delete 'ui/src/main/res/values-*/strings.xml'
}
task extractCrowdin(type: Copy, dependsOn: ['downloadCrowdin', 'cleanCrowdin']) {
mustRunAfter 'downloadCrowdin'
from zipTree(file('build/translations.zip'))
into file('build/translations')
doFirst {
delete 'build/translations'
}
}
task crowdin(type: Copy, dependsOn: ['extractCrowdin']) {
mustRunAfter 'extractCrowdin'
from 'build/translations/wireguard-android/ui/src/main/res'
into 'ui/src/main/res/'
doLast {
delete 'build/translations'
delete 'build/translations.zip'
}
}
allprojects {
repositories {
google()
jcenter()
maven { url 'https://jitpack.io' }
}
}
@@ -51,9 +79,9 @@ task clean(type: Delete) {
tasks {
wrapper {
gradleVersion = "6.6.1"
gradleVersion = "6.7.1"
distributionType = Wrapper.DistributionType.ALL
distributionSha256Sum = "11657af6356b7587bfb37287b5992e94a9686d5c8a0a1b60b87b9928a2decde5"
distributionSha256Sum = "22449f5231796abd892c98b2a07c9ceebe4688d192cd2d6763f8e3bf8acbedeb"
}
}
-3
View File
@@ -18,9 +18,6 @@ org.gradle.jvmargs=-Xmx1536m
# http://www.gradle.org/docs/current/userguide/multi_project_builds.html#sec:decoupled_projects
# org.gradle.parallel=true
# R8 Full mode
android.enableR8.fullMode=true
# https://jakewharton.com/increased-accuracy-of-aapt2-keep-rules/
android.useMinimalKeepRules=true
+2 -2
View File
@@ -1,6 +1,6 @@
distributionBase=GRADLE_USER_HOME
distributionPath=wrapper/dists
distributionSha256Sum=11657af6356b7587bfb37287b5992e94a9686d5c8a0a1b60b87b9928a2decde5
distributionUrl=https\://services.gradle.org/distributions/gradle-6.6.1-all.zip
distributionSha256Sum=22449f5231796abd892c98b2a07c9ceebe4688d192cd2d6763f8e3bf8acbedeb
distributionUrl=https\://services.gradle.org/distributions/gradle-6.7.1-all.zip
zipStoreBase=GRADLE_USER_HOME
zipStorePath=wrapper/dists
+4
View File
@@ -0,0 +1,4 @@
#!/bin/bash
set -ex
curl -Lo - https://crowdin.com/backend/download/project/wireguard.zip | bsdtar -C ui/src/main/res -x -f - --strip-components 5 wireguard-android
find ui/src/main/res -name strings.xml -exec bash -c '[[ $(xmllint --xpath "count(//resources/*)" {}) -ne 0 ]] || rm -rf "$(dirname {})"' \;
+1
View File
@@ -46,6 +46,7 @@ android {
}
lintOptions {
disable('LongLogTag')
disable('NewApi') // Desugaring!
}
}
+44 -48
View File
@@ -1,53 +1,53 @@
apply plugin: 'com.github.dcendents.android-maven'
apply plugin: 'com.jfrog.bintray'
apply plugin: 'maven-publish'
install {
repositories.mavenInstaller {
pom.project {
name 'WireGuard Tunnel Library'
description 'Embeddable tunnel library for WireGuard for Android'
url 'https://www.wireguard.com/'
afterEvaluate {
publishing {
publications {
release(MavenPublication) {
groupId = groupName
artifactId = 'tunnel'
version wireguardVersionName
packaging 'aar'
groupId groupName
artifactId 'tunnel'
version wireguardVersionName
artifact sourcesJar
artifact javadocJar
licenses {
license {
name 'The Apache Software License, Version 2.0'
url 'http://www.apache.org/licenses/LICENSE-2.0.txt'
distribution 'repo'
from components.getByName("release")
pom {
name = 'WireGuard Tunnel Library'
description = 'Embeddable tunnel library for WireGuard for Android'
url = 'https://www.wireguard.com/'
licenses {
license {
name = 'The Apache Software License, Version 2.0'
url = 'http://www.apache.org/licenses/LICENSE-2.0.txt'
distribution = 'repo'
}
}
scm {
connection = 'scm:git:https://git.zx2c4.com/wireguard-android'
developerConnection = 'scm:git:https://git.zx2c4.com/wireguard-android'
url = 'https://git.zx2c4.com/wireguard-android'
}
developers {
organization {
name = 'WireGuard'
url = 'https://www.wireguard.com/'
}
}
}
}
scm {
connection 'scm:git:https://git.zx2c4.com/wireguard-android'
url 'https://git.zx2c4.com/wireguard-android'
}
organization {
name 'WireGuard'
url 'https://www.wireguard.com/'
}
}
}
}
bintray {
user = hasProperty('BINTRAY_USER') ? getProperty('BINTRAY_USER') : System.getenv('BINTRAY_USER')
key = hasProperty('BINTRAY_KEY') ? getProperty('BINTRAY_KEY') : System.getenv('BINTRAY_KEY')
configurations = [ 'archives' ]
pkg {
repo = 'wireguard-android'
name = 'wireguard-android'
userOrg = 'wireguard'
licenses = [ 'Apache-2.0' ]
vcsUrl = 'https://git.zx2c4.com/wireguard-android'
publish = true
version {
name = wireguardVersionName
repositories {
maven {
name = "bintray"
url = uri("https://api.bintray.com/maven/wireguard/wireguard-android/wireguard-android/;publish=1;override=0")
credentials {
username = hasProperty('BINTRAY_USER') ? getProperty('BINTRAY_USER') : System.getenv('BINTRAY_USER')
password = hasProperty('BINTRAY_KEY') ? getProperty('BINTRAY_KEY') : System.getenv('BINTRAY_KEY')
}
}
}
}
}
@@ -68,9 +68,5 @@ android.libraryVariants.all { variant ->
archiveClassifier = 'sources'
from android.sourceSets.main.java.srcDirs
}
artifacts {
archives sourcesJar
archives javadocJar
}
}
}
@@ -34,7 +34,8 @@ import java.util.Set;
import androidx.annotation.Nullable;
/**
* WireGuard backend that uses {@code wg-quick} to implement tunnel configuration.
* Implementation of {@link Backend} that uses the kernel module and {@code wg-quick} to provide
* WireGuard tunnels.
*/
@NonNullForAll
@@ -43,8 +43,11 @@ public class RootShell {
public RootShell(final Context context) {
localBinaryDir = new File(context.getCodeCacheDir(), "bin");
localTemporaryDir = new File(context.getCacheDir(), "tmp");
preamble = String.format("export CALLING_PACKAGE=%s PATH=\"%s:$PATH\" TMPDIR='%s'; id -u\n",
context.getPackageName(), localBinaryDir, localTemporaryDir);
final String packageName = context.getPackageName();
if (packageName.contains("'"))
throw new RuntimeException("Impossibly invalid package name contains a single quote");
preamble = String.format("export CALLING_PACKAGE=%s PATH=\"%s:$PATH\" TMPDIR='%s'; magisk --sqlite \"UPDATE policies SET notification=0, logging=0 WHERE package_name='%s'\" >/dev/null 2>&1; id -u\n",
packageName, localBinaryDir, localTemporaryDir, packageName);
}
private static boolean isExecutableInPath(final String name) {
@@ -143,7 +143,7 @@ public final class ToolsInstaller {
extract();
final StringBuilder script = new StringBuilder("set -ex; ");
script.append("trap 'rm -rf /data/adb/moduleswireguard' INT TERM EXIT; ");
script.append("trap 'rm -rf /data/adb/modules/wireguard' INT TERM EXIT; ");
script.append(String.format("rm -rf /data/adb/modules/wireguard/; mkdir -p /data/adb/modules/wireguard%s; ", INSTALL_DIR));
script.append("printf 'name=WireGuard Command Line Tools\nversion=1.0\nversionCode=1\nauthor=zx2c4\ndescription=Command line tools for WireGuard\nminMagisk=1500\n' > /data/adb/modules/wireguard/module.prop; ");
script.append("touch /data/adb/modules/wireguard/auto_mount; ");
@@ -13,7 +13,7 @@ import java.util.Arrays;
import androidx.annotation.Nullable;
/**
* Implementation of the Curve25519 elliptic curve algorithm.
* Implementation of Curve25519 ECDH.
* <p>
* This implementation was imported to WireGuard from noise-java:
* https://github.com/rweather/noise-java
@@ -13,7 +13,9 @@ import java.security.MessageDigest;
import java.util.Arrays;
/**
* This implementation is based on the ed25519/ref10 implementation in NaCl.
* Implementation of Ed25519 signature verification.
*
* <p>This implementation is based on the ed25519/ref10 implementation in NaCl.</p>
*
* <p>It implements this twisted Edwards curve:
*
+1 -1
View File
@@ -46,7 +46,6 @@ type TunnelHandle struct {
var tunnelHandles map[int32]TunnelHandle
func init() {
device.RoamingDisabled = true
tunnelHandles = make(map[int32]TunnelHandle)
signals := make(chan os.Signal)
signal.Notify(signals, unix.SIGUSR2)
@@ -91,6 +90,7 @@ func wgTurnOn(ifnameRef string, tunFd int32, settings string) int32 {
logger.Error.Println(setError)
return -1
}
device.DisableSomeRoamingForBrokenMobileSemantics()
var uapi net.Listener
+5 -5
View File
@@ -1,10 +1,10 @@
module golang.zx2c4.com/wireguard/android
go 1.14
go 1.15
require (
golang.org/x/crypto v0.0.0-20200604202706-70a84ac30bf9 // indirect
golang.org/x/net v0.0.0-20200602114024-627f9648deb9 // indirect
golang.org/x/sys v0.0.0-20200602225109-6fdc65e7d980
golang.zx2c4.com/wireguard v0.0.20200321-0.20200622004228-b84f1d4db25e
golang.org/x/crypto v0.0.0-20201221181555-eec23a3978ad // indirect
golang.org/x/net v0.0.0-20201216054612-986b41b23924 // indirect
golang.org/x/sys v0.0.0-20201223074533-0d417f636930
golang.zx2c4.com/wireguard v0.0.20201119-0.20201223215156-09728dc6b340
)
+18 -14
View File
@@ -1,20 +1,24 @@
golang.org/x/crypto v0.0.0-20190308221718-c2843e01d9a2/go.mod h1:djNgcEr1/C05ACkg1iLfiJU5Ep61QUkGW8qpdssI0+w=
golang.org/x/crypto v0.0.0-20200429183012-4b2356b1ed79/go.mod h1:LzIPMQfyMNhhGPhUkYOs5KpL4U8rLKemX1yGLhDgUto=
golang.org/x/crypto v0.0.0-20200604202706-70a84ac30bf9 h1:vEg9joUBmeBcK9iSJftGNf3coIG4HqZElCPehJsfAYM=
golang.org/x/crypto v0.0.0-20200604202706-70a84ac30bf9/go.mod h1:LzIPMQfyMNhhGPhUkYOs5KpL4U8rLKemX1yGLhDgUto=
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-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-20200501053045-e0ff5e5a1de5/go.mod h1:qpuaurCH72eLCgpAm/N6yyVIVM9cpaDIP3A8BGJEC5A=
golang.org/x/net v0.0.0-20200602114024-627f9648deb9 h1:pNX+40auqi2JqRfOP1akLGtYcn15TUbkhwuCO3foqqM=
golang.org/x/net v0.0.0-20200602114024-627f9648deb9/go.mod h1:qpuaurCH72eLCgpAm/N6yyVIVM9cpaDIP3A8BGJEC5A=
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/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-20200323222414-85ca7c5b95cd/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
golang.org/x/sys v0.0.0-20200501145240-bc7a7d42d5c3/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
golang.org/x/sys v0.0.0-20200602225109-6fdc65e7d980 h1:OjiUf46hAmXblsZdnoSXsEUSKU8r1UEzcL5RVZ4gO9Y=
golang.org/x/sys v0.0.0-20200602225109-6fdc65e7d980/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-20201223074533-0d417f636930 h1:vRgIt+nup/B/BwIS0g2oC0haq0iqbV3ZA+u6+0TlNCo=
golang.org/x/sys v0.0.0-20201223074533-0d417f636930/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.2 h1:tW2bmiBqwgJj/UpqtC8EpXEZVYOwU0yG4iWbprSVAcs=
golang.org/x/text v0.3.2/go.mod h1:bEr9sfX3Q8Zfm5fL9x+3itogRgK3+ptLWKqgva+5dAk=
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.20200321-0.20200622004228-b84f1d4db25e h1:f8BS3yEMeIGx/zzJfihxDRedx6lT7EiJlfih4j6LY98=
golang.zx2c4.com/wireguard v0.0.20200321-0.20200622004228-b84f1d4db25e/go.mod h1:GJvYs5O24/ASlwPiRklVnjMx2xQzrOic0DuU6GvYJL4=
golang.zx2c4.com/wireguard v0.0.20201119-0.20201223215156-09728dc6b340 h1:X6jrf2sUEj3n+q2oB/I3C088vQFKREz2UzgVJ8wENtI=
golang.zx2c4.com/wireguard v0.0.20201119-0.20201223215156-09728dc6b340/go.mod h1:ITsWNpkFv78VPB7f8MiyuxeEMcHR4jfxHGCJLPP3GHs=
+1 -1
View File
@@ -69,7 +69,7 @@ dependencies {
implementation "androidx.preference:preference-ktx:$preferenceVersion"
implementation "androidx.lifecycle:lifecycle-runtime-ktx:$lifecycleRuntimeKtxVersion"
implementation "androidx.datastore:datastore-preferences:$datastoreVersion"
implementation "com.github.material-components:material-components-android:$materialComponentsVersion"
implementation "com.google.android.material:material:$materialComponentsVersion"
implementation "com.journeyapps:zxing-android-embedded:$zxingEmbeddedVersion"
implementation "org.jetbrains.kotlinx:kotlinx-coroutines-core:$coroutinesVersion"
implementation "org.jetbrains.kotlinx:kotlinx-coroutines-android:$coroutinesVersion"
@@ -147,12 +147,14 @@ class LogViewerActivity : AppCompatActivity() {
}
}
private val downloadsFileSaver = DownloadsFileSaver(this)
private suspend fun saveLog() {
var exception: Throwable? = null
var outputFile: DownloadsFileSaver.DownloadsFile? = null
withContext(Dispatchers.IO) {
try {
outputFile = DownloadsFileSaver.save(this@LogViewerActivity, "wireguard-log.txt", "text/plain", true)
outputFile = downloadsFileSaver.save("wireguard-log.txt", "text/plain", true)
outputFile?.outputStream?.write(rawLogLines.toString().toByteArray(Charsets.UTF_8))
} catch (e: Throwable) {
outputFile?.delete()
@@ -12,6 +12,7 @@ import android.view.View
import androidx.appcompat.app.ActionBar
import androidx.fragment.app.FragmentManager
import androidx.fragment.app.FragmentTransaction
import androidx.fragment.app.commit
import com.wireguard.android.R
import com.wireguard.android.fragment.TunnelDetailFragment
import com.wireguard.android.fragment.TunnelEditorFragment
@@ -72,11 +73,11 @@ class MainActivity : BaseActivity(), FragmentManager.OnBackStackChangedListener
true
}
R.id.menu_action_edit -> {
supportFragmentManager.beginTransaction()
.replace(R.id.detail_container, TunnelEditorFragment())
.setTransition(FragmentTransaction.TRANSIT_FRAGMENT_FADE)
.addToBackStack(null)
.commit()
supportFragmentManager.commit {
replace(R.id.detail_container, TunnelEditorFragment())
setTransition(FragmentTransaction.TRANSIT_FRAGMENT_FADE)
addToBackStack(null)
}
true
}
// This menu item is handled by the editor fragment.
@@ -104,11 +105,11 @@ class MainActivity : BaseActivity(), FragmentManager.OnBackStackChangedListener
fragmentManager.popBackStackImmediate()
} else if (backStackEntries == 0) {
// Create and show a new detail fragment.
fragmentManager.beginTransaction()
.add(R.id.detail_container, TunnelDetailFragment())
.setTransition(FragmentTransaction.TRANSIT_FRAGMENT_FADE)
.addToBackStack(null)
.commit()
fragmentManager.commit {
add(R.id.detail_container, TunnelDetailFragment())
setTransition(FragmentTransaction.TRANSIT_FRAGMENT_FADE)
addToBackStack(null)
}
}
}
}
@@ -8,6 +8,7 @@ import android.content.Intent
import android.os.Build
import android.os.Bundle
import android.view.MenuItem
import androidx.fragment.app.commit
import androidx.lifecycle.lifecycleScope
import androidx.preference.Preference
import androidx.preference.PreferenceFragmentCompat
@@ -28,9 +29,9 @@ class SettingsActivity : ThemeChangeAwareActivity() {
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
if (supportFragmentManager.findFragmentById(android.R.id.content) == null) {
supportFragmentManager.beginTransaction()
.add(android.R.id.content, SettingsFragment())
.commit()
supportFragmentManager.commit {
add(android.R.id.content, SettingsFragment())
}
}
}
@@ -5,6 +5,7 @@
package com.wireguard.android.activity
import android.os.Bundle
import androidx.fragment.app.commit
import com.wireguard.android.fragment.TunnelEditorFragment
import com.wireguard.android.model.ObservableTunnel
@@ -15,9 +16,9 @@ class TunnelCreatorActivity : BaseActivity() {
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
if (supportFragmentManager.findFragmentById(android.R.id.content) == null) {
supportFragmentManager.beginTransaction()
.add(android.R.id.content, TunnelEditorFragment())
.commit()
supportFragmentManager.commit {
add(android.R.id.content, TunnelEditorFragment())
}
}
}
@@ -41,7 +41,7 @@ class AddTunnelsSheet : BottomSheetDialogFragment() {
override fun onCreateView(inflater: LayoutInflater, container: ViewGroup?, savedInstanceState: Bundle?): View? {
if (savedInstanceState != null) dismiss()
val view = inflater.inflate(R.layout.add_tunnels_bottom_sheet, container, false)
if (activity?.packageManager?.hasSystemFeature(PackageManager.FEATURE_CAMERA) != true) {
if (activity?.packageManager?.hasSystemFeature(PackageManager.FEATURE_CAMERA_ANY) != true) {
val qrcode = view.findViewById<View>(R.id.create_from_qrcode)
qrcode.isEnabled = false
qrcode.visibility = View.GONE
@@ -4,8 +4,8 @@
*/
package com.wireguard.android.fragment
import android.Manifest
import android.app.Dialog
import android.content.Intent
import android.os.Bundle
import android.widget.Button
import android.widget.Toast
@@ -40,12 +40,11 @@ class AppListDialogFragment : DialogFragment() {
try {
val applicationData: MutableList<ApplicationData> = ArrayList()
withContext(Dispatchers.IO) {
val launcherIntent = Intent(Intent.ACTION_MAIN, null)
launcherIntent.addCategory(Intent.CATEGORY_LAUNCHER)
val resolveInfos = pm.queryIntentActivities(launcherIntent, 0)
resolveInfos.forEach {
val packageName = it.activityInfo.packageName
val appData = ApplicationData(it.loadIcon(pm), it.loadLabel(pm).toString(), packageName, currentlySelectedApps.contains(packageName))
val packageInfos = pm.getPackagesHoldingPermissions(arrayOf(Manifest.permission.INTERNET), 0)
packageInfos.forEach {
val packageName = it.packageName
val appInfo = it.applicationInfo
val appData = ApplicationData(appInfo.loadIcon(pm), appInfo.loadLabel(pm).toString(), packageName, currentlySelectedApps.contains(packageName))
applicationData.add(appData)
appData.addOnPropertyChangedCallback(object : Observable.OnPropertyChangedCallback() {
override fun onPropertyChanged(sender: Observable?, propertyId: Int) {
@@ -63,13 +63,17 @@ class TunnelDetailFragment : BaseFragment() {
}
override fun onSelectedTunnelChanged(oldTunnel: ObservableTunnel?, newTunnel: ObservableTunnel?) {
binding ?: return
binding!!.tunnel = newTunnel
if (newTunnel == null) binding!!.config = null else lifecycleScope.launch {
try {
binding!!.config = newTunnel.getConfigAsync()
} catch (_: Throwable) {
binding!!.config = null
val binding = binding ?: return
binding.tunnel = newTunnel
if (newTunnel == null) {
binding.config = null
} else {
lifecycleScope.launch {
try {
binding.config = newTunnel.getConfigAsync()
} catch (_: Throwable) {
binding.config = null
}
}
}
lastState = Tunnel.State.TOGGLE
@@ -32,6 +32,8 @@ import java.util.zip.ZipOutputStream
*/
class ZipExporterPreference(context: Context, attrs: AttributeSet?) : Preference(context, attrs) {
private var exportedFilePath: String? = null
private val downloadsFileSaver = DownloadsFileSaver(activity)
private fun exportZip() {
lifecycleScope.launch {
val tunnels = Application.getTunnelManager().getTunnels()
@@ -41,7 +43,7 @@ class ZipExporterPreference(context: Context, attrs: AttributeSet?) : Preference
if (configs.isEmpty()) {
throw IllegalArgumentException(context.getString(R.string.no_tunnels_error))
}
val outputFile = DownloadsFileSaver.save(activity, "wireguard-export.zip", "application/zip", true)
val outputFile = downloadsFileSaver.save("wireguard-export.zip", "application/zip", true)
if (outputFile == null) {
withContext(Dispatchers.Main.immediate) {
isEnabled = true
@@ -9,7 +9,6 @@ import android.os.Handler
import android.os.Looper
import android.util.Log
import androidx.annotation.StringRes
import androidx.biometric.BiometricConstants
import androidx.biometric.BiometricManager
import androidx.biometric.BiometricManager.Authenticators
import androidx.biometric.BiometricPrompt
@@ -41,12 +40,12 @@ object BiometricAuthenticator {
super.onAuthenticationError(errorCode, errString)
Log.d(TAG, "BiometricAuthentication error: errorCode=$errorCode, msg=$errString")
callback(when (errorCode) {
BiometricConstants.ERROR_CANCELED, BiometricConstants.ERROR_USER_CANCELED,
BiometricConstants.ERROR_NEGATIVE_BUTTON -> {
BiometricPrompt.ERROR_CANCELED, BiometricPrompt.ERROR_USER_CANCELED,
BiometricPrompt.ERROR_NEGATIVE_BUTTON -> {
Result.Cancelled
}
BiometricConstants.ERROR_HW_NOT_PRESENT, BiometricConstants.ERROR_HW_UNAVAILABLE,
BiometricConstants.ERROR_NO_BIOMETRICS, BiometricConstants.ERROR_NO_DEVICE_CREDENTIAL -> {
BiometricPrompt.ERROR_HW_NOT_PRESENT, BiometricPrompt.ERROR_HW_UNAVAILABLE,
BiometricPrompt.ERROR_NO_BIOMETRICS, BiometricPrompt.ERROR_NO_DEVICE_CREDENTIAL -> {
Result.HardwareUnavailableOrDisabled
}
else -> Result.Failure(errorCode, fragment.getString(R.string.biometric_auth_error_reason, errString))
@@ -14,6 +14,7 @@ import android.os.Environment
import android.provider.MediaStore
import android.provider.MediaStore.MediaColumns
import androidx.activity.ComponentActivity
import androidx.activity.result.ActivityResultLauncher
import androidx.activity.result.contract.ActivityResultContracts
import androidx.core.content.ContextCompat
import com.wireguard.android.R
@@ -25,9 +26,18 @@ import java.io.FileOutputStream
import java.io.IOException
import java.io.OutputStream
object DownloadsFileSaver {
@Throws(Exception::class)
suspend fun save(context: ComponentActivity, name: String, mimeType: String?, overwriteExisting: Boolean) = if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.Q) {
class DownloadsFileSaver(private val context: ComponentActivity) {
private lateinit var activityResult: ActivityResultLauncher<String>
private lateinit var futureGrant: CompletableDeferred<Boolean>
init {
if (Build.VERSION.SDK_INT < Build.VERSION_CODES.Q) {
futureGrant = CompletableDeferred()
activityResult = context.registerForActivityResult(ActivityResultContracts.RequestPermission()) { ret -> futureGrant.complete(ret) }
}
}
suspend fun save(name: String, mimeType: String?, overwriteExisting: Boolean) = if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.Q) {
withContext(Dispatchers.IO) {
val contentResolver = context.contentResolver
if (overwriteExisting)
@@ -66,13 +76,12 @@ object DownloadsFileSaver {
} else {
withContext(Dispatchers.Main.immediate) {
if (ContextCompat.checkSelfPermission(context, Manifest.permission.WRITE_EXTERNAL_STORAGE) != PackageManager.PERMISSION_GRANTED) {
val futureGrant = CompletableDeferred<Boolean>()
val activityResult = context.registerForActivityResult(ActivityResultContracts.RequestPermission(), futureGrant::complete)
activityResult.launch(Manifest.permission.WRITE_EXTERNAL_STORAGE)
val granted = futureGrant.await()
activityResult.unregister()
if (!granted)
if (!granted) {
futureGrant = CompletableDeferred()
return@withContext null
}
}
@Suppress("DEPRECATION") val path = Environment.getExternalStoragePublicDirectory(Environment.DIRECTORY_DOWNLOADS)
withContext(Dispatchers.IO) {
+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>
+98
View File
@@ -0,0 +1,98 @@
<?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>
</plurals>
<plurals name="n_included_applications">
<item quantity="one">%d inclòs</item>
<item quantity="other">%d inclosos</item>
</plurals>
<string name="all_applications">Totes les aplicacions</string>
<string name="exclude_from_tunnel">Exclou</string>
<string name="include_in_tunnel">Inclou només</string>
<plurals name="include_n_applications">
<item quantity="one">Inclou %d aplicació</item>
<item quantity="other">Inclou %d aplicacions</item>
</plurals>
<plurals name="exclude_n_applications">
<item quantity="one">Exclou %d aplicació</item>
<item quantity="other">Exclou %d aplicacions</item>
</plurals>
<plurals name="persistent_keepalive_seconds_unit">
<item quantity="one">cada segon</item>
<item quantity="other">cada %d segons</item>
</plurals>
<plurals name="persistent_keepalive_seconds_suffix">
<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>
<string name="bad_config_explanation_positive_number">: Ha de ser positiu</string>
<string name="bad_config_reason_invalid_key">Clau no vàlida</string>
<string name="bad_config_reason_invalid_number">Número no vàlid</string>
<string name="bad_config_reason_invalid_value">Valor no vàlid</string>
<string name="bad_config_reason_syntax_error">Error de sintaxi</string>
<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>
<string name="exclude_private_ips">Exclou IPs privades</string>
<string name="generate_new_private_key">Genera nova clau privada</string>
<string name="generic_error">Error “%s” desconegut</string>
<string name="hint_generated">(generat)</string>
<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>
+1 -1
View File
@@ -1,7 +1,7 @@
<?xml version="1.0" encoding="utf-8"?>
<resources>
<plurals name="delete_error">
<item quantity="one">%d Tunnel konnte nicht gelöscht werden: %s</item>
<item quantity="one">%d Tunnel konnten nicht gelöscht werden: %s</item>
<item quantity="other">%d Tunnel konnten nicht gelöscht werden: %s</item>
</plurals>
<plurals name="delete_success">
+62
View File
@@ -0,0 +1,62 @@
<?xml version="1.0" encoding="utf-8"?>
<resources>
<plurals name="delete_error">
<item quantity="one">Δεν είναι δυνατή η διαγραφή του %d tunnel: %s</item>
<item quantity="other">Δεν είναι δυνατή η διαγραφή %d tunnels: %s</item>
</plurals>
<plurals name="delete_success">
<item quantity="one">Το %d tunnel διαγράφηκε με επιτυχία</item>
<item quantity="other">Διαγράφηκαν επιτυχώς τα %d tunnels</item>
</plurals>
<plurals name="delete_title">
<item quantity="one">%d επιλεγμένο tunnel</item>
<item quantity="other">%d επιλεγμένα tunnels</item>
</plurals>
<plurals name="import_partial_success">
<item quantity="one">Έγινε εισαγωγή %1$d από %2$d tunnels</item>
<item quantity="other">Έγινε εισαγωγή %1$d από %2$d tunnels</item>
</plurals>
<plurals name="import_total_success">
<item quantity="one">Εισαγωγή tunnel %d</item>
<item quantity="other">Εισαγωγή tunnels %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 app</item>
<item quantity="other">Συμπερίληψη %d apps</item>
</plurals>
<plurals name="exclude_n_applications">
<item quantity="one">Εξαίρεση %d app</item>
<item quantity="other">Εξαίρεση %d apps</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">Προσθήκη peer</string>
<string name="addresses">Διευθύνσεις</string>
<string name="applications">Εφαρμογές</string>
</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>
+212
View File
@@ -0,0 +1,212 @@
<?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">%1$d از %2$d تونل اضافه شد</item>
<item quantity="other">%1$d از %2$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">WireGuard</string>
<string name="bad_config_context">%1$s\'s %2$s</string>
<string name="bad_config_context_top_level">%s</string>
<string name="bad_config_error">%1$s در %2$s</string>
<string name="bad_config_explanation_pka">: باید مثبت و بیشتر از ۶۵۵۳۵ نباشد</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">ساخت تونل WireGuard</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 باید دارای ۴۴ نویسه باشند ( ۳۲ بایت)</string>
<string name="key_length_explanation_binary">: کلیدهای WireGuard باید ۳۲ بایت باشند</string>
<string name="key_length_explanation_hex">: کلیدهای هگز WireGuard باید دارای ۶۴ نویسه باشند ( ۳۲ بایت)</string>
<string name="listen_port">شنود پورت</string>
<string name="log_export_error">نمی‌توان گزارش رویداد را برون‌برد: %s</string>
<string name="log_export_subject">پرونده گزارش رویداد WireGuard اندروید</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_title">غیرفعال‌سازی پس‌زمینه واحد هسته</string>
<string name="module_installer_error">مشکلی پیش آمد. لطفا دوباره تلاش کنید</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="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">کنترل تونل‌های WireGuard</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="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_start_error">آغاز پوسته شکست خورد: %d</string>
<string name="success_application_will_restart">موفقیت. برنامه اکنون دوباره راه‌اندازی خواهد شد…</string>
<string name="toggle_all">معکوس کردن همه</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="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_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 پس‌زمینه نگارش%2$s</string>
<string name="version_summary_checking">در حال بررسی نگارش پس‌زمینه %s</string>
<string name="version_summary_unknown">نگارش %s ناشناخته</string>
<string name="version_title">WireGuard برای اندروید نگارش %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>
+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>
+2 -2
View File
@@ -5,7 +5,7 @@
<item quantity="other">Impossible de supprimer %d tunnels : %s</item>
</plurals>
<plurals name="delete_success">
<item quantity="one">Supprimé avec succès %d tunnel</item>
<item quantity="one">Suppression réussie du tunnel %d</item>
<item quantity="other">Supprimé avec succès %d tunnels</item>
</plurals>
<plurals name="delete_title">
@@ -191,7 +191,7 @@
<string name="tools_installer_title">Installer les outils de ligne de commande</string>
<string name="tools_installer_working">Installation de wg et wg-quick</string>
<string name="tools_unavailable_error">Outils requis indisponibles</string>
<string name="transfer">Transférer</string>
<string name="transfer">Données transférées</string>
<string name="transfer_bytes">%d Octets</string>
<string name="transfer_gibibytes">%.2f Go</string>
<string name="transfer_kibibytes">%.2f Ko</string>
+220
View File
@@ -0,0 +1,220 @@
<?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">आयातित %d %d टनल</item>
<item quantity="other">आयातित %d %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">अनुमत आईपी</string>
<string name="app_name">WireGuard</string>
<string name="bad_config_explanation_pka">: सकारात्मक होना चाहिए और 65535 से अधिक नहीं होना चाहिए</string>
<string name="bad_config_explanation_positive_number">: सकारात्मक होना चाहिए</string>
<string name="bad_config_explanation_udp_port">: एक वैध यूडीपी पोर्ट नंबर होना चाहिए</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">डीएनएस सर्वर</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">निजी आईपी को छोड़ दें</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">क्यूआर कोड से टनल को आयात करें</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">: वायरगार्ड बेस 64 कीज़ में 44 अक्षर (32 बाइट्स) होने चाहिए</string>
<string name="key_length_explanation_binary">: वायरगार्ड कीज 32 बाइट होनी चाहिए</string>
<string name="key_length_explanation_hex">: वायरगार्ड हेक्स कीज़ 64 अक्षरों की होनी चाहिए (32 बाइट्स)</string>
<string name="listen_port">पोर्ट सूने</string>
<string name="log_export_error">लॉग निर्यात करने में असमर्थ: %s</string>
<string name="log_export_subject">WireGuard एंड्राइड लॉग फ़ाइल</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">लॉगकैट चलाने में असमर्थ: </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">आईपी पता</string>
<string name="parse_error_inet_endpoint">समाप्त</string>
<string name="parse_error_inet_network">आईपी नेटवर्क</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">शेल बाहर निकलने की स्थिति नहीं पढ़ सकता</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 को मैजिक मॉड्यूल के रूप में स्थापित किया गया है (रिबूट आवश्यक)</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="tun_create_error">ट्यून डिवाइस बनाने में असमर्थ</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">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">WireGuard for Android v%s</string>
<string name="vpn_not_authorized_error">वीपीएन सेवा उपयोगकर्ता द्वारा अधिकृत नहीं है</string>
<string name="vpn_start_error">एंड्रॉयड वीपीएन सेवा प्रारंभ करने में असमर्थ</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>
+1 -1
View File
@@ -105,7 +105,7 @@
<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_from_qr_code">QR コードからトンネル設定をインポートします</string>
<string name="import_success">“%s” をインポートしました</string>
<string name="interface_title">インターフェース</string>
<string name="key_contents_error">鍵に不正な文字があります</string>
+23
View File
@@ -0,0 +1,23 @@
<?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">Kan ikke slette %d tunneler %s</item>
</plurals>
<string name="all_applications">Alle applikasjoner</string>
<string name="exclude_from_tunnel">Ekskluder</string>
<string name="include_in_tunnel">Inkluder kun</string>
<plurals name="persistent_keepalive_seconds_unit">
<item quantity="one">hvert %d sekund</item>
<item quantity="other">hvert %d sekund</item>
</plurals>
<plurals name="persistent_keepalive_seconds_suffix">
<item quantity="one">sekund</item>
<item quantity="other">sekunder</item>
</plurals>
<string name="use_all_applications">Bruk alle apper</string>
<string name="add_peer">Legg til peer</string>
<string name="addresses">Adresser</string>
<string name="applications">Applikasjoner</string>
<string name="app_name">WireGuard</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>
+255
View File
@@ -0,0 +1,255 @@
<?xml version="1.0" encoding="utf-8"?>
<resources>
<plurals name="delete_error">
<item quantity="one">Nie można usunąć %d tunelu: %s</item>
<item quantity="few">Nie można usunąć %d tuneli: %s</item>
<item quantity="many">Nie można usunąć %d tuneli: %s</item>
<item quantity="other">Nie można usunąć %d tuneli: %s</item>
</plurals>
<plurals name="delete_success">
<item quantity="one">Pomyślnie usunięto tunel %d</item>
<item quantity="few">Pomyślnie usunięto %d tunele</item>
<item quantity="many">Pomyślnie usunięto %d tuneli</item>
<item quantity="other">Pomyślnie usunięto %d tuneli</item>
</plurals>
<plurals name="delete_title">
<item quantity="one">%d wybrany tunel</item>
<item quantity="few">%d wybranych tuneli</item>
<item quantity="many">%d wybranych tuneli</item>
<item quantity="other">%d wybranych tuneli</item>
</plurals>
<plurals name="import_partial_success">
<item quantity="one">Zaimportowano %1$d z %2$d tuneli</item>
<item quantity="few">Zaimportowano %1$d z %2$d tuneli</item>
<item quantity="many">Zaimportowano %1$d z %2$d tuneli</item>
<item quantity="other">Zaimportowano %1$d z %2$d tuneli</item>
</plurals>
<plurals name="import_total_success">
<item quantity="one">Zaimportowano %d tunel</item>
<item quantity="few">Zaimportowano %d tunele</item>
<item quantity="many">Zaimportowano %d tuneli</item>
<item quantity="other">Zaimportowano %d tuneli</item>
</plurals>
<plurals name="set_excluded_applications">
<item quantity="one">%d wykluczona aplikacja</item>
<item quantity="few">%d wykluczone aplikacje</item>
<item quantity="many">%d wykluczonych aplikacji</item>
<item quantity="other">%d wykluczonych aplikacji</item>
</plurals>
<plurals name="set_included_applications">
<item quantity="one">%d dołączona aplikacja</item>
<item quantity="few">%d dołączone aplikacje</item>
<item quantity="many">%d dołączonych aplikacji</item>
<item quantity="other">%d dołączonych aplikacji</item>
</plurals>
<plurals name="n_excluded_applications">
<item quantity="one">%d wykluczona</item>
<item quantity="few">%d wykluczone</item>
<item quantity="many">%d wykluczonych</item>
<item quantity="other">%d wykluczonych</item>
</plurals>
<plurals name="n_included_applications">
<item quantity="one">%d dołączona</item>
<item quantity="few">%d dołączone</item>
<item quantity="many">%d dołączonych</item>
<item quantity="other">%d dołączonych</item>
</plurals>
<string name="all_applications">Wszystkie aplikacje</string>
<string name="exclude_from_tunnel">Wyklucz</string>
<string name="include_in_tunnel">Dołącz tylko</string>
<plurals name="include_n_applications">
<item quantity="one">Dołącz %d aplikację</item>
<item quantity="few">Dołącz %d aplikacje</item>
<item quantity="many">Dołącz %d aplikacji</item>
<item quantity="other">Dołącz %d aplikacji</item>
</plurals>
<plurals name="exclude_n_applications">
<item quantity="one">Wyklucz %d aplikację</item>
<item quantity="few">Wyklucz %d aplikacje</item>
<item quantity="many">Wyklucz %d aplikacji</item>
<item quantity="other">Wyklucz %d aplikacji</item>
</plurals>
<plurals name="persistent_keepalive_seconds_unit">
<item quantity="one">co sekundę</item>
<item quantity="few">co %d sekundy</item>
<item quantity="many">co %d sekund</item>
<item quantity="other">co %d sekund</item>
</plurals>
<plurals name="persistent_keepalive_seconds_suffix">
<item quantity="one">sekunda</item>
<item quantity="few">sekundy</item>
<item quantity="many">sekund</item>
<item quantity="other">sekundy</item>
</plurals>
<string name="use_all_applications">Używaj wszystkich aplikacji</string>
<string name="add_peer">Dodaj Peer\'a</string>
<string name="addresses">Adresy</string>
<string name="applications">Aplikacje</string>
<string name="allow_remote_control_intents_summary_off">Zewnętrzne aplikacje nie mogą przełączać tuneli (zalecane)</string>
<string name="allow_remote_control_intents_summary_on">Zewnętrzne aplikacje mogą przełączać tunele (zaawansowane)</string>
<string name="allow_remote_control_intents_title">Zezwól na kontrolowanie przez zewnętrzne aplikacje</string>
<string name="allowed_ips">Dozwolone adresy IP</string>
<string name="app_name">WireGuard</string>
<string name="bad_config_context">%1$s dla %2$s</string>
<string name="bad_config_context_top_level">%s</string>
<string name="bad_config_error">%1$s w %2$s</string>
<string name="bad_config_explanation_pka">: Musi być dodatnia i nie większa niż 65535</string>
<string name="bad_config_explanation_positive_number">: Musi być dodatni</string>
<string name="bad_config_explanation_udp_port">: Musi być poprawnym numerem portu UDP</string>
<string name="bad_config_reason_invalid_key">Nieprawidłowy klucz</string>
<string name="bad_config_reason_invalid_number">Numer jest nieprawidłowy</string>
<string name="bad_config_reason_invalid_value">Nieprawidłowa wartość</string>
<string name="bad_config_reason_missing_attribute">Brakujący atrybut</string>
<string name="bad_config_reason_missing_section">Brakująca sekcja</string>
<string name="bad_config_reason_syntax_error">Błąd składni</string>
<string name="bad_config_reason_unknown_attribute">Nieznany atrybut</string>
<string name="bad_config_reason_unknown_section">Nieznana sekcja</string>
<string name="bad_config_reason_value_out_of_range">Wartość poza zakresem</string>
<string name="bad_extension_error">Plik musi być .conf lub .zip</string>
<string name="cancel">Anuluj</string>
<string name="config_delete_error">Nie można usunąć pliku konfiguracyjnego %s</string>
<string name="config_exists_error">Konfiguracja dla \"%s\" już istnieje</string>
<string name="config_file_exists_error">Plik konfiguracyjny \"%s\" już istnieje</string>
<string name="config_not_found_error">Plik konfiguracyjny \"%s\" nie został znaleziony</string>
<string name="config_rename_error">Nie można zmienić nazwy pliku konfiguracyjnego \"%s\"</string>
<string name="config_save_error">Nie można zapisać konfiguracji dla \"%1$s\": %2$s</string>
<string name="config_save_success">Pomyślnie zapisano konfigurację dla \"%s\"</string>
<string name="create_activity_title">Utwórz tunel WireGuard</string>
<string name="create_bin_dir_error">Nie można stworzyć tymczasowego folderu lokalnego</string>
<string name="create_downloads_file_error">Nie można utworzyć pliku w folderze pobierania</string>
<string name="create_empty">Utwórz od podstaw</string>
<string name="create_from_file">Utwórz z pliku lub archiwum</string>
<string name="create_from_qr_code">Zeskanuj kod QR</string>
<string name="create_output_dir_error">Nie można utworzyć folderu wyjściowego</string>
<string name="create_temp_dir_error">Nie można stworzyć tymczasowego folderu lokalnego</string>
<string name="create_tunnel">Utwórz Tunel</string>
<string name="dark_theme_summary_off">Obecnie używasz jasnego (dzień) motywu</string>
<string name="dark_theme_summary_on">Obecnie używa ciemnego (nocnego) motywu</string>
<string name="dark_theme_title">Użyj ciemnego motywu</string>
<string name="delete">Usuń</string>
<string name="dns_servers">Serwery DNS</string>
<string name="edit">Edytuj</string>
<string name="endpoint">Punkt końcowy</string>
<string name="error_down">Błąd podczas zamykania tunelu: %s</string>
<string name="error_fetching_apps">Błąd podczas pobierania listy aplikacji: %s</string>
<string name="error_root">Proszę uzyskać dostęp do root\'a i spróbować ponownie</string>
<string name="error_up">Błąd podczas włączania tunelu: %s</string>
<string name="exclude_private_ips">Wyklucz prywatne adresy IP</string>
<string name="generate_new_private_key">Wygeneruj nowy klucz prywatny</string>
<string name="generic_error">Nieznany błąd \"%s\"</string>
<string name="hint_automatic">(automatycznie)</string>
<string name="hint_generated">(wygenerowane)</string>
<string name="hint_optional">(opcjonalnie)</string>
<string name="hint_optional_discouraged">(opcjonalnie, niezalecane)</string>
<string name="hint_random">(losowy)</string>
<string name="illegal_filename_error">Niedozwolona nazwa pliku \"%s\"</string>
<string name="import_error">Nie można zaimportować tunelu: %s</string>
<string name="import_from_qr_code">Importuj tunel za pomocą kodu QR</string>
<string name="import_success">Zaimportowano \"%s\"</string>
<string name="interface_title">Interfejs</string>
<string name="key_contents_error">Niepoprawne znaki w kluczu</string>
<string name="key_length_error">Niewłaściwa długość klucza</string>
<string name="key_length_explanation_base64">: klucze base64 WireGuard\'a muszą mieć długość 44 znaków (32 bajty)</string>
<string name="key_length_explanation_binary">: klucze WireGuard\'a muszą wynosić 32 bajty</string>
<string name="key_length_explanation_hex">: klucze hex WireGuard\'a muszą mieć długość 64 znaków (32 bajty)</string>
<string name="listen_port">Port nasłuchu</string>
<string name="log_export_error">Nie można wyeksportować logu: %s</string>
<string name="log_export_subject">Plik logu programu WireGuard dla systemu Android</string>
<string name="log_export_success">Zapisano w \"%s\"</string>
<string name="log_export_title">Wyeksportuj plik logu</string>
<string name="log_saver_activity_label">Zapisz log</string>
<string name="log_viewer_pref_summary">Logi mogą pomóc w debugowaniu</string>
<string name="log_viewer_pref_title">Wyświetl log aplikacji</string>
<string name="log_viewer_title">Log</string>
<string name="logcat_error">Nie można uruchomić logcat: </string>
<string name="module_disabler_disabled_summary">Eksperymentalny moduł jądra może poprawić wydajność</string>
<string name="module_disabler_disabled_title">Włącz moduł jądra</string>
<string name="module_disabler_enabled_summary">Wolniejsza implementacja w przestrzeni użytkownika może poprawić stabilność</string>
<string name="module_disabler_enabled_title">Wyłącz moduł jądra</string>
<string name="module_installer_error">Coś poszło nie tak. Proszę spróbować ponownie</string>
<string name="module_installer_initial">Eksperymentalny moduł jądra może poprawić wydajność</string>
<string name="module_installer_not_found">Brak dostępnych modułów dla twojego urządzenia</string>
<string name="module_installer_title">Pobierz i zainstaluj moduł jądra</string>
<string name="module_installer_working">Pobieranie i instalowanie…</string>
<string name="module_version_error">Nie można określić wersji modułu jądra</string>
<string name="mtu">MTU</string>
<string name="multiple_tunnels_summary_off">Włączenie jednego tunelu spowoduje wyłączenie innych</string>
<string name="multiple_tunnels_summary_on">Wiele tuneli może być włączonych jednocześnie</string>
<string name="multiple_tunnels_title">Zezwalaj na wiele tuneli równoległych</string>
<string name="name">Nazwa</string>
<string name="no_config_error">Próba przywołania tunelu bez konfiguracji</string>
<string name="no_configs_error">Nie odnaleziono żadnych konfiguracji</string>
<string name="no_tunnels_error">Brak tuneli</string>
<string name="parse_error_generic">ciągu</string>
<string name="parse_error_inet_address">Adresy IP</string>
<string name="parse_error_inet_endpoint">punkt końcowy</string>
<string name="parse_error_inet_network">Sieć IP</string>
<string name="parse_error_integer">numer</string>
<string name="parse_error_reason">Nie można przetworzyć %1$s „%2$s”</string>
<string name="peer">Peer</string>
<string name="permission_description">kontrolowanie tuneli WireGuard, włączanie i wyłączanie tuneli, potencjalnie błędne kierowanie ruchem internetowym</string>
<string name="permission_label">sterowanie tunelami WireGuard</string>
<string name="persistent_keepalive">Utrzymanie połączenia</string>
<string name="pre_shared_key">Klucz wstępnie udostępniony</string>
<string name="pre_shared_key_enabled">włączone</string>
<string name="private_key">Klucz prywatny</string>
<string name="public_key">Klucz publiczny</string>
<string name="qr_code_hint">Wskazówka: wygeneruj za pomocą `qrencode -t ansiutf8 &lt; tunnel.conf`.</string>
<string name="restore_on_boot_summary_off">Włączone tunele nie zostaną przywrócone przy uruchomieniu</string>
<string name="restore_on_boot_summary_on">Włączone tunele zostaną przywrócone przy uruchomieniu</string>
<string name="restore_on_boot_title">Przywróć przy uruchomieniu</string>
<string name="save">Zapisz</string>
<string name="select_all">Wybierz wszystko</string>
<string name="settings">Ustawienia</string>
<string name="shell_exit_status_read_error">Powłoka nie może odczytać statusu wyjścia</string>
<string name="shell_marker_count_error">Powłoka spodziewała się 4 znaczników, otrzymano %d</string>
<string name="shell_start_error">Nie udało się uruchomić powłoki: %d</string>
<string name="success_application_will_restart">Ukończono pomyślnie. Aplikacja zostanie uruchomiona ponownie…</string>
<string name="toggle_all">Przełącz wszystkie</string>
<string name="toggle_error">Błąd podczas przełączania tunelu WireGuard: %s</string>
<string name="tools_installer_already">wg i wg-quick są już zainstalowane</string>
<string name="tools_installer_failure">Nie można zainstalować narzędzi wiersza poleceń (brak root\'a?)</string>
<string name="tools_installer_initial">Zainstaluj opcjonalne narzędzia do tworzenia skryptów</string>
<string name="tools_installer_initial_magisk">Zainstaluj opcjonalne narzędzia do tworzenia skryptów jako moduł Magisk</string>
<string name="tools_installer_initial_system">Zainstaluj opcjonalne narzędzia do tworzenia skryptów w partycji systemowej</string>
<string name="tools_installer_success_magisk">wg i wg-quick zostały zainstalowane jako moduł Magisk (wymagane ponowne uruchomienie)</string>
<string name="tools_installer_success_system">wg i wg-quick zostały zainstalowane w partycji systemowej</string>
<string name="tools_installer_title">Zainstaluj narzędzia wiersza poleceń</string>
<string name="tools_installer_working">Instalowanie wg i wg-quick</string>
<string name="tools_unavailable_error">Wymagane narzędzia są niedostępne</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">odebrano: %1$s, wysłano: %2$s</string>
<string name="transfer_tibibytes">%.2f TiB</string>
<string name="tun_create_error">Nie można utworzyć urządzenia tun</string>
<string name="tunnel_config_error">Nie można skonfigurować tunelu (wg-quick zwróciło %d)</string>
<string name="tunnel_create_error">Nie można utworzyć tunelu: %s</string>
<string name="tunnel_create_success">Pomyślnie utworzono tunel \"%s\"</string>
<string name="tunnel_error_already_exists">Tunel \"%s\" już istnieje</string>
<string name="tunnel_error_invalid_name">Nieprawidłowa nazwa</string>
<string name="tunnel_list_placeholder">Dodaj tunel za pomocą niebieskiego przycisku</string>
<string name="tunnel_name">Nazwa tunelu</string>
<string name="tunnel_on_error">Nie można włączyć tunelu (wgTurnOn zwróciło %d)</string>
<string name="tunnel_rename_error">Nie można zmienić nazwy tunelu: %s</string>
<string name="tunnel_rename_success">Pomyślnie zmieniono nazwę tunelu na \"%s\"</string>
<string name="type_name_go_userspace">Przestrzeń użytkownika Go</string>
<string name="type_name_kernel_module">Moduł jądra</string>
<string name="unknown_error">Nieznany błąd</string>
<string name="version_summary">Implementacja %1$s v%2$s</string>
<string name="version_summary_checking">Sprawdzanie wersji %s implementacji</string>
<string name="version_summary_unknown">Nieznana %s wersja</string>
<string name="version_title">WireGuard dla systemu Android v%s</string>
<string name="vpn_not_authorized_error">Usługa VPN nie została autoryzowana przez użytkownika</string>
<string name="vpn_start_error">Nie można uruchomić usługi VPN systemu Android</string>
<string name="zip_export_error">Nie można wyeksportować tuneli: %s</string>
<string name="zip_export_success">Zapisano w \"%s\"</string>
<string name="zip_export_summary">Plik ZIP zostanie zapisany w folderze pobierania</string>
<string name="zip_export_title">Wyeksportuj tunele do pliku ZIP</string>
<string name="biometric_prompt_zip_exporter_title">Uwierzytelnij, aby wyeksportować tunele</string>
<string name="biometric_prompt_private_key_title">Uwierzytelnij, aby zobaczyć klucz prywatny</string>
<string name="biometric_auth_error">Błąd uwierzytelnienia</string>
<string name="biometric_auth_error_reason">Błąd uwierzytelnienia: %s</string>
</resources>
+242
View File
@@ -0,0 +1,242 @@
<?xml version="1.0" encoding="utf-8"?>
<resources>
<plurals name="delete_error">
<item quantity="one">Nu se poate șterge %d tunel: %s</item>
<item quantity="few">Nu se pot șterge %d tunele: %s</item>
<item quantity="other">Nu se pot șterge %d de tunele: %s</item>
</plurals>
<plurals name="delete_success">
<item quantity="one">%d tunel a fost șters</item>
<item quantity="few">%d tunele șterse</item>
<item quantity="other">%d de tunele șterse</item>
</plurals>
<plurals name="delete_title">
<item quantity="one">%d tunel selectat</item>
<item quantity="few">%d tuneluri selectate</item>
<item quantity="other">%d de tuneluri selectate</item>
</plurals>
<plurals name="import_partial_success">
<item quantity="one">%1$d din %2$d tuneluri importate</item>
<item quantity="few">%1$d din %2$d tuneluri importate</item>
<item quantity="other">%1$d din %2$d de tuneluri importate</item>
</plurals>
<plurals name="import_total_success">
<item quantity="one">%d tunel importat</item>
<item quantity="few">%d tuneluri importate</item>
<item quantity="other">%d de tuneluri importate</item>
</plurals>
<plurals name="set_excluded_applications">
<item quantity="one">%d aplicație exclusă</item>
<item quantity="few">%d aplicații excluse</item>
<item quantity="other">%d de aplicații excluse</item>
</plurals>
<plurals name="set_included_applications">
<item quantity="one">%d aplicație inclusă</item>
<item quantity="few">%d aplicații incluse</item>
<item quantity="other">%d de aplicații incluse</item>
</plurals>
<plurals name="n_excluded_applications">
<item quantity="one">%d exclusă</item>
<item quantity="few">%d excluse</item>
<item quantity="other">%d excluse</item>
</plurals>
<plurals name="n_included_applications">
<item quantity="one">%d inclusă</item>
<item quantity="few">%d incluse</item>
<item quantity="other">%d incluse</item>
</plurals>
<string name="all_applications">Toate aplicațiile</string>
<string name="exclude_from_tunnel">Excludere</string>
<string name="include_in_tunnel">Includere numai</string>
<plurals name="include_n_applications">
<item quantity="one">Include %d aplicație</item>
<item quantity="few">Include %d aplicații</item>
<item quantity="other">Include %d de aplicații</item>
</plurals>
<plurals name="exclude_n_applications">
<item quantity="one">Exclude %d aplicație</item>
<item quantity="few">Exclude %d aplicații</item>
<item quantity="other">Exclude %d de aplicații</item>
</plurals>
<plurals name="persistent_keepalive_seconds_unit">
<item quantity="one">în fiecare secundă</item>
<item quantity="few">la fiecare %d secunde</item>
<item quantity="other">la fiecare %d secunde</item>
</plurals>
<plurals name="persistent_keepalive_seconds_suffix">
<item quantity="one">secundă</item>
<item quantity="few">secunde</item>
<item quantity="other">secunde</item>
</plurals>
<string name="use_all_applications">Utilizează toate aplicațiile</string>
<string name="add_peer">Adăugare pereche</string>
<string name="addresses">Adrese</string>
<string name="applications">Aplicații</string>
<string name="allow_remote_control_intents_summary_off">Aplicațiile externe nu pot comuta tunelurile (recomandat)</string>
<string name="allow_remote_control_intents_summary_on">Aplicațiile externe pot comuta tunelurile (avansat)</string>
<string name="allow_remote_control_intents_title">Permite aplicații de control la distanță</string>
<string name="allowed_ips">IP-uri permise</string>
<string name="app_name">WireGuard</string>
<string name="bad_config_context">%2$s pentru %1$s</string>
<string name="bad_config_context_top_level">%s</string>
<string name="bad_config_error">%1$s în %2$s</string>
<string name="bad_config_explanation_pka">: Trebuie să fie pozitiv și nu mai mare decât 65535</string>
<string name="bad_config_explanation_positive_number">: Trebuie să fie pozitiv</string>
<string name="bad_config_explanation_udp_port">: Trebuie să fie un număr de port UDP valid</string>
<string name="bad_config_reason_invalid_key">Cheie invalidă</string>
<string name="bad_config_reason_invalid_number">Număr invalid</string>
<string name="bad_config_reason_invalid_value">Valoare invalidă</string>
<string name="bad_config_reason_missing_attribute">Atribuit lipsă</string>
<string name="bad_config_reason_missing_section">Secțiune lipsă</string>
<string name="bad_config_reason_syntax_error">Eroare de sintaxă</string>
<string name="bad_config_reason_unknown_attribute">Atribuit necunoscut</string>
<string name="bad_config_reason_unknown_section">Secțiune necunoscută</string>
<string name="bad_config_reason_value_out_of_range">Valoare în afara intervalului</string>
<string name="bad_extension_error">Fișierul trebuie să fie .conf sau .zip</string>
<string name="cancel">Anulare</string>
<string name="config_delete_error">Fișierul de configurare %s nu poate fi șters</string>
<string name="config_exists_error">Configurația pentru „%s” există deja</string>
<string name="config_file_exists_error">Fișierul de configurare „%s” există deja</string>
<string name="config_not_found_error">Fișier de configurare „%s” negăsit</string>
<string name="config_rename_error">Fișierul de configurare „%s” nu poate fi redenumit</string>
<string name="config_save_error">Nu poate fi salvată configurația pentru „%1$s”: %2$s</string>
<string name="config_save_success">Configurația pentru „%s” a fost salvată</string>
<string name="create_activity_title">Creare tunel WireGuard</string>
<string name="create_bin_dir_error">Nu se poate crea directorul binar local</string>
<string name="create_downloads_file_error">Fișierul nu poate fi creat în directorul pentru descărcări</string>
<string name="create_empty">Creare de la zero</string>
<string name="create_from_file">Importare din fișier sau arhivă</string>
<string name="create_from_qr_code">Scanare din cod QR</string>
<string name="create_output_dir_error">Nu se poate crea directorul de ieșire</string>
<string name="create_temp_dir_error">Nu se poate crea directorul temporar local</string>
<string name="create_tunnel">Creare tunel</string>
<string name="dark_theme_summary_off">În prezent este utilizată tema luminoasă (zi)</string>
<string name="dark_theme_summary_on">În prezent este utilizată tema întunecată (noapte)</string>
<string name="dark_theme_title">Utilizare temă întunecată</string>
<string name="delete">Ștergere</string>
<string name="dns_servers">Servere DNS</string>
<string name="edit">Editare</string>
<string name="endpoint">Punct final</string>
<string name="error_down">Eroare la oprirea tunelului: %s</string>
<string name="error_fetching_apps">Eroare la preluarea listei de aplicații: %s</string>
<string name="error_root">Obține acces root și încearcă din nou</string>
<string name="error_up">Eroare la pornirea tunelului: %s</string>
<string name="exclude_private_ips">Excludere IP-uri private</string>
<string name="generate_new_private_key">Generare cheie privată nouă</string>
<string name="generic_error">Eroare „%s” necunoscută</string>
<string name="hint_automatic">(auto)</string>
<string name="hint_generated">(generată)</string>
<string name="hint_optional">(opțională)</string>
<string name="hint_optional_discouraged">(opțională, nerecomandată)</string>
<string name="hint_random">(aleatorie)</string>
<string name="illegal_filename_error">Nume nepermis de fișier „%s”</string>
<string name="import_error">Tunelul nu poate fi importat: %s</string>
<string name="import_from_qr_code">Importare tunel din cod QR</string>
<string name="import_success">„%s” importat</string>
<string name="interface_title">Interfață</string>
<string name="key_contents_error">Caractere incorecte în cheie</string>
<string name="key_length_error">Lungime incorectă a cheii</string>
<string name="key_length_explanation_base64">: Cheile base64 ale WireGuard trebuie să aibă 44 de caractere (32 de octeți)</string>
<string name="key_length_explanation_binary">: Cheile WireGuard trebuie să aibă 32 de octeți</string>
<string name="key_length_explanation_hex">: Cheile hex WireGuard trebuie să aibă 64 de caractere (32 de octeți)</string>
<string name="listen_port">Port de ascultare</string>
<string name="log_export_error">Jurnalul nu poate fi exportat: %s</string>
<string name="log_export_subject">Fișier de jurnal Android WireGuard</string>
<string name="log_export_success">Salvat în „%s”</string>
<string name="log_export_title">Exportare fișier de jurnal</string>
<string name="log_saver_activity_label">Salvare jurnal</string>
<string name="log_viewer_pref_summary">Jurnalele pot ajuta la depanare</string>
<string name="log_viewer_pref_title">Vizualizare jurnal aplicație</string>
<string name="log_viewer_title">Jurnal</string>
<string name="logcat_error">Programul logcat nu poate fi executat: </string>
<string name="module_disabler_disabled_summary">Modulul experimental de nucleu poate îmbunătăți performanța</string>
<string name="module_disabler_disabled_title">Activează biblioteca modulului de nucleu</string>
<string name="module_disabler_enabled_summary">Biblioteca mai lentă a spațiului utilizatorului poate îmbunătăți stabilitatea</string>
<string name="module_disabler_enabled_title">Dezactivează biblioteca modulului de nucleu</string>
<string name="module_installer_error">A apărut o eroare. Încearcă din nou</string>
<string name="module_installer_initial">Modulul experimental de nucleu poate îmbunătăți performanța</string>
<string name="module_installer_not_found">Nu sunt disponibile module pentru dispozitivul tău</string>
<string name="module_installer_title">Descărcare și instalare modul nucleu</string>
<string name="module_installer_working">Se descarcă și se instalează…</string>
<string name="module_version_error">Nu se poate determina versiunea modulului de nucleu</string>
<string name="mtu">MTU</string>
<string name="multiple_tunnels_summary_off">Pornirea unui tunel va opri celelalte tuneluri</string>
<string name="multiple_tunnels_summary_on">Mai multe tunele pot fi pornite simultan</string>
<string name="multiple_tunnels_title">Permite mai multe tuneluri simultane</string>
<string name="name">Nume</string>
<string name="no_config_error">Se încearcă pornirea unui tunel fără configurație</string>
<string name="no_configs_error">Nu au fost găsite configurații</string>
<string name="no_tunnels_error">Nu există tuneluri</string>
<string name="parse_error_generic">șir</string>
<string name="parse_error_inet_address">Adresă IP</string>
<string name="parse_error_inet_endpoint">punct final</string>
<string name="parse_error_inet_network">Rețea IP</string>
<string name="parse_error_integer">număr</string>
<string name="parse_error_reason">Nu se poate analiza %1$s „%2$s”</string>
<string name="peer">Pereche</string>
<string name="permission_description">controleze tuneluri WireGuard și, astfel, să activeze și să dezactiveze tuneluri în mod automat, existând posibilitatea de a dirija greșit traficul de internet</string>
<string name="permission_label">controleze tuneluri WireGuard</string>
<string name="persistent_keepalive">Mesaj keepalive persistent</string>
<string name="pre_shared_key">Cheie predistribuită</string>
<string name="pre_shared_key_enabled">activată</string>
<string name="private_key">Cheie privată</string>
<string name="public_key">Cheie publică</string>
<string name="qr_code_hint">Sfat: generează cu `qrencode -t ansiutf8 &lt; tunnel.conf`.</string>
<string name="restore_on_boot_summary_off">Tunelurile activate nu vor fi pornite odată cu pornirea dispozitivului</string>
<string name="restore_on_boot_summary_on">Tunelurile activate vor fi pornite odată cu pornirea dispozitivului</string>
<string name="restore_on_boot_title">Restaurare la pornire</string>
<string name="save">Salvare</string>
<string name="select_all">Selectare totală</string>
<string name="settings">Setări</string>
<string name="shell_exit_status_read_error">Interfața de comunicare nu poate citi starea de ieșire</string>
<string name="shell_marker_count_error">Interfața de comunicare a așteptat 4 marcatori, a primit %d</string>
<string name="shell_start_error">Interfața de comunicare nu a putut porni: %d</string>
<string name="success_application_will_restart">Succes. Aplicația se va reporni acum…</string>
<string name="toggle_all">Comutare toate</string>
<string name="toggle_error">Eroare la comutarea tunelului WireGuard: %s</string>
<string name="tools_installer_already">wg și wg-quick sunt deja instalate</string>
<string name="tools_installer_failure">Nu se pot instala instrumentele de linie de comandă (lipsă root?)</string>
<string name="tools_installer_initial">Instalare instrumente opționale pentru scriptare</string>
<string name="tools_installer_initial_magisk">Instalare instrumente opționale pentru scriptare ca modul Magisk</string>
<string name="tools_installer_initial_system">Instalare instrumente opționale pentru scriptare în partiția de sistem</string>
<string name="tools_installer_success_magisk">wg și wg-quick instalate ca modul Magisk (este necesară repornirea)</string>
<string name="tools_installer_success_system">wg și wg-quick instalate în partiția de sistem</string>
<string name="tools_installer_title">Instalare instrumente de linie de comandă</string>
<string name="tools_installer_working">Se instalează wg și wg-quick</string>
<string name="tools_unavailable_error">Instrumentele necesare sunt indisponibile</string>
<string name="transfer">Transferare</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">Nu se poate crea dispozitiv TUN</string>
<string name="tunnel_config_error">Tunelul nu poate fi configurat (wg-quick a returnat %d)</string>
<string name="tunnel_create_error">Tunelul nu poate fi creat: %s</string>
<string name="tunnel_create_success">Tunelul „%s” a fost creat</string>
<string name="tunnel_error_already_exists">Tunelul „%s” există deja</string>
<string name="tunnel_error_invalid_name">Nume invalid</string>
<string name="tunnel_list_placeholder">Adaugă un tunel folosind butonul albastru</string>
<string name="tunnel_name">Numele tunelului</string>
<string name="tunnel_on_error">Tunelul nu poate fi pornit (wgTurnOn a returnat %d)</string>
<string name="tunnel_rename_error">Tunelul nu poate fi redenumit: %s</string>
<string name="tunnel_rename_success">Tunelul a fost redenumit ca „%s”</string>
<string name="type_name_go_userspace">Spațiu de utilizator Go</string>
<string name="type_name_kernel_module">Modul nucleu</string>
<string name="unknown_error">Eroare necunoscută</string>
<string name="version_summary">Bibliotecă %1$s v%2$s</string>
<string name="version_summary_checking">Se verifică versiunea bibliotecii %s</string>
<string name="version_summary_unknown">Versiune %s necunoscută</string>
<string name="version_title">WireGuard pentru Android v%s</string>
<string name="vpn_not_authorized_error">Serviciul VPN nu este autorizat de utilizator</string>
<string name="vpn_start_error">Serviciul VPN Android nu poate fi pornit</string>
<string name="zip_export_error">Tunelurile nu pot fi exportate: %s</string>
<string name="zip_export_success">Salvat în „%s”</string>
<string name="zip_export_summary">Fișierul zip va fi salvat în dosarul pentru descărcări</string>
<string name="zip_export_title">Exportare tuneluri în fișierul zip</string>
<string name="biometric_prompt_zip_exporter_title">Autentifică-te pentru a exporta tunelurile</string>
<string name="biometric_prompt_private_key_title">Autentifică-te pentru a vizualiza cheia privată</string>
<string name="biometric_auth_error">Eroare la autentificare</string>
<string name="biometric_auth_error_reason">Eroare la autentificare: %s</string>
</resources>
+24
View File
@@ -0,0 +1,24 @@
<?xml version="1.0" encoding="utf-8"?>
<resources>
<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="delete">Sil</string>
<string name="edit">Düzenle</string>
<string name="hint_automatic">(otomatik)</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="interface_title">Arayüz</string>
<string name="listen_port">Dinleme portu</string>
<string name="log_export_title">Dosyayı Dışarı 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_title">Günlük</string>
</resources>
+86
View File
@@ -0,0 +1,86 @@
<?xml version="1.0" encoding="utf-8"?>
<resources>
<plurals name="delete_error">
<item quantity="other">無法刪除 %d 個通道: %s</item>
</plurals>
<plurals name="delete_success">
<item quantity="other">成功刪除了 %d 個通道</item>
</plurals>
<plurals name="delete_title">
<item quantity="other">選擇了 %d 個通道</item>
</plurals>
<plurals name="import_total_success">
<item quantity="other">匯入了 %d 個通道</item>
</plurals>
<plurals name="set_excluded_applications">
<item quantity="other">排除了 %d 個應用程式</item>
</plurals>
<string name="add_peer">新增端點</string>
<string name="addresses">位址</string>
<string name="allow_remote_control_intents_title">允許遠端控制應用程式</string>
<string name="allowed_ips">允許的 IPs</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">設定有誤: %1$s 在 %2$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">新建 WireGuard 通道</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 code</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">請取得 root 存取權再試一次</string>
<string name="error_up">起用通道錯誤: %s</string>
<string name="exclude_private_ips">排除私有 IPs</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_random">(隨機)</string>
<string name="illegal_filename_error">不合規定的檔名「%s」</string>
<string name="import_error">沒辦法匯入通道: %s</string>
<string name="import_from_qr_code">從 QR Code 匯入通道</string>
<string name="import_success">匯入了「%s」</string>
<string name="interface_title">界面</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 的16進位密鑰必須是 64 個字元 (32 個位元組)</string>
<string name="listen_port">監聽連接埠</string>
<string name="log_export_success">儲存到「%s」</string>
<string name="log_export_title">匯出日誌檔</string>
<string name="save">儲存</string>
<string name="select_all">全選</string>
<string name="toggle_all">切換全部</string>
</resources>
+2 -2
View File
@@ -1,6 +1,6 @@
buildscript {
ext {
wireguardVersionCode = 482
wireguardVersionName = '1.0.20200927'
wireguardVersionCode = 485
wireguardVersionName = '1.0.20201224'
}
}