mirror of
https://github.com/amnezia-vpn/amneziawg-android.git
synced 2026-07-03 14:05:13 +02:00
Compare commits
37 Commits
| Author | SHA1 | Date | |
|---|---|---|---|
| e08d873cc3 | |||
| 3748a1da88 | |||
| 9597d719ac | |||
| 041ce2134f | |||
| 4c17fc51e7 | |||
| 6cf7439053 | |||
| 814ab4937d | |||
| 3d088411e2 | |||
| 39e0c861e2 | |||
| d60efcd7c7 | |||
| 4dff537d21 | |||
| 761c2ade4a | |||
| 115a87af32 | |||
| c7ecaeb145 | |||
| 8e2d63db75 | |||
| 3208bac987 | |||
| fc1f2132fe | |||
| 09125e1e31 | |||
| 6b1164ad8d | |||
| c68a5c776b | |||
| f3ac787f5a | |||
| 751be2c469 | |||
| cfb7f1b016 | |||
| 33e07628db | |||
| b1b7d1d90c | |||
| 6cb9548f72 | |||
| 8207ae1e8d | |||
| 48e0e427eb | |||
| 03e95d2dd3 | |||
| 58b14cc650 | |||
| 3fa8e09545 | |||
| 9d76b354f0 | |||
| 1856a50c56 | |||
| ba0f3ece04 | |||
| e8ad75d924 | |||
| b858284b1e | |||
| 3c6e06f8d5 |
@@ -15,3 +15,4 @@ build/
|
||||
*.iml
|
||||
*.jks
|
||||
keystore.properties
|
||||
gradlew.bat
|
||||
|
||||
+10
-10
@@ -8,27 +8,26 @@ allprojects {
|
||||
|
||||
buildscript {
|
||||
ext {
|
||||
agpVersion = '3.6.2'
|
||||
agpVersion = '4.0.1'
|
||||
annotationsVersion = '1.1.0'
|
||||
appcompatVersion = '1.1.0'
|
||||
bintrayPluginVersion = '1.8.4'
|
||||
biometricVersion = '1.0.1'
|
||||
cardviewVersion = '1.0.0'
|
||||
collectionVersion = '1.1.0'
|
||||
constraintLayoutVersion = '1.1.3'
|
||||
coordinatorLayoutVersion = '1.1.0'
|
||||
coreKtxVersion = '1.2.0'
|
||||
coroutinesVersion = '1.3.5'
|
||||
coreKtxVersion = '1.3.0'
|
||||
coroutinesVersion = '1.3.7'
|
||||
eddsaVersion = '0.3.0'
|
||||
fragmentVersion = '1.2.4'
|
||||
fragmentVersion = '1.2.5'
|
||||
jsr305Version = '3.0.2'
|
||||
junitVersion = '4.13'
|
||||
kotlinVersion = '1.3.71'
|
||||
materialComponentsVersion = '1.2.0-alpha05'
|
||||
kotlinVersion = '1.3.72'
|
||||
materialComponentsVersion = '1.2.0-alpha06'
|
||||
mavenPluginVersion = '2.1'
|
||||
preferenceVersion = '1.1.0'
|
||||
preferenceVersion = '1.1.1'
|
||||
streamsupportVersion = '1.7.2'
|
||||
threetenabpVersion = '1.2.3'
|
||||
threetenabpVersion = '1.2.4'
|
||||
zxingEmbeddedVersion = '3.6.0'
|
||||
|
||||
groupName = 'com.wireguard.android'
|
||||
@@ -51,8 +50,9 @@ task clean(type: Delete) {
|
||||
|
||||
tasks {
|
||||
wrapper {
|
||||
gradleVersion = "6.2.2"
|
||||
gradleVersion = "6.5.1"
|
||||
distributionType = Wrapper.DistributionType.ALL
|
||||
distributionSha256Sum = "143a28f54f1ae93ef4f72d862dbc3c438050d81bb45b4601eb7076e998362920"
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
Vendored
BIN
Binary file not shown.
+2
-1
@@ -1,5 +1,6 @@
|
||||
distributionBase=GRADLE_USER_HOME
|
||||
distributionPath=wrapper/dists
|
||||
distributionUrl=https\://services.gradle.org/distributions/gradle-6.3-all.zip
|
||||
distributionSha256Sum=143a28f54f1ae93ef4f72d862dbc3c438050d81bb45b4601eb7076e998362920
|
||||
distributionUrl=https\://services.gradle.org/distributions/gradle-6.5.1-all.zip
|
||||
zipStoreBase=GRADLE_USER_HOME
|
||||
zipStorePath=wrapper/dists
|
||||
|
||||
@@ -82,6 +82,7 @@ esac
|
||||
|
||||
CLASSPATH=$APP_HOME/gradle/wrapper/gradle-wrapper.jar
|
||||
|
||||
|
||||
# Determine the Java command to use to start the JVM.
|
||||
if [ -n "$JAVA_HOME" ] ; then
|
||||
if [ -x "$JAVA_HOME/jre/sh/java" ] ; then
|
||||
@@ -129,6 +130,7 @@ fi
|
||||
if [ "$cygwin" = "true" -o "$msys" = "true" ] ; then
|
||||
APP_HOME=`cygpath --path --mixed "$APP_HOME"`
|
||||
CLASSPATH=`cygpath --path --mixed "$CLASSPATH"`
|
||||
|
||||
JAVACMD=`cygpath --unix "$JAVACMD"`
|
||||
|
||||
# We build the pattern for arguments to be converted via cygpath
|
||||
|
||||
@@ -21,6 +21,9 @@ android {
|
||||
path 'tools/CMakeLists.txt'
|
||||
}
|
||||
}
|
||||
libraryVariants.all {
|
||||
it.generateBuildConfigProvider.configure { enabled = false }
|
||||
}
|
||||
testOptions.unitTests.all {
|
||||
testLogging {
|
||||
events 'passed', 'skipped', 'failed', 'standardOut', 'standardError'
|
||||
@@ -42,6 +45,9 @@ android {
|
||||
}
|
||||
}
|
||||
}
|
||||
lintOptions {
|
||||
disable('LongLogTag')
|
||||
}
|
||||
}
|
||||
|
||||
dependencies {
|
||||
|
||||
@@ -9,6 +9,7 @@ import android.content.Context;
|
||||
import android.content.Intent;
|
||||
import android.os.Build;
|
||||
import android.os.ParcelFileDescriptor;
|
||||
import android.system.OsConstants;
|
||||
import android.util.Log;
|
||||
|
||||
import com.wireguard.android.backend.BackendException.Reason;
|
||||
@@ -202,9 +203,19 @@ public final class GoBackend implements Backend {
|
||||
for (final InetAddress addr : config.getInterface().getDnsServers())
|
||||
builder.addDnsServer(addr.getHostAddress());
|
||||
|
||||
boolean sawDefaultRoute = false;
|
||||
for (final Peer peer : config.getPeers()) {
|
||||
for (final InetNetwork addr : peer.getAllowedIps())
|
||||
for (final InetNetwork addr : peer.getAllowedIps()) {
|
||||
if (addr.getMask() == 0)
|
||||
sawDefaultRoute = true;
|
||||
builder.addRoute(addr.getAddress(), addr.getMask());
|
||||
}
|
||||
}
|
||||
|
||||
// "Kill-switch" semantics
|
||||
if (!(sawDefaultRoute && config.getPeers().size() == 1)) {
|
||||
builder.allowFamily(OsConstants.AF_INET);
|
||||
builder.allowFamily(OsConstants.AF_INET6);
|
||||
}
|
||||
|
||||
builder.setMtu(config.getInterface().getMtu().orElse(1280));
|
||||
|
||||
@@ -143,12 +143,12 @@ public final class ToolsInstaller {
|
||||
extract();
|
||||
final StringBuilder script = new StringBuilder("set -ex; ");
|
||||
|
||||
script.append("trap 'rm -rf /sbin/.magisk/img/wireguard' INT TERM EXIT; ");
|
||||
script.append(String.format("rm -rf /sbin/.magisk/img/wireguard/; mkdir -p /sbin/.magisk/img/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' > /sbin/.magisk/img/wireguard/module.prop; ");
|
||||
script.append("touch /sbin/.magisk/img/wireguard/auto_mount; ");
|
||||
script.append("trap 'rm -rf /data/adb/moduleswireguard' 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; ");
|
||||
for (final String name : EXECUTABLES) {
|
||||
final File destination = new File("/sbin/.magisk/img/wireguard" + INSTALL_DIR, name);
|
||||
final File destination = new File("/data/adb/modules/wireguard" + INSTALL_DIR, name);
|
||||
script.append(String.format("cp '%s' '%s'; chmod 755 '%s'; chcon 'u:object_r:system_file:s0' '%s' || true; ",
|
||||
new File(localBinaryDir, name), destination, destination, destination));
|
||||
}
|
||||
@@ -191,7 +191,7 @@ public final class ToolsInstaller {
|
||||
synchronized (lock) {
|
||||
if (installAsMagiskModule == null) {
|
||||
try {
|
||||
installAsMagiskModule = rootShell.run(null, "[ -d /sbin/.magisk/mirror -a -d /sbin/.magisk/img -a ! -f /cache/.disable_magisk ]") == OsConstants.EXIT_SUCCESS;
|
||||
installAsMagiskModule = rootShell.run(null, "[ -d /data/adb/modules -a ! -f /cache/.disable_magisk ]") == OsConstants.EXIT_SUCCESS;
|
||||
} catch (final Exception ignored) {
|
||||
installAsMagiskModule = false;
|
||||
}
|
||||
|
||||
@@ -14,7 +14,7 @@ target_link_libraries(libwg-quick.so -ldl)
|
||||
|
||||
file(GLOB WG_SOURCES wireguard-tools/src/*.c ndk-compat/compat.c)
|
||||
add_executable(libwg.so ${WG_SOURCES})
|
||||
target_include_directories(libwg.so PUBLIC "${CMAKE_CURRENT_SOURCE_DIR}/wireguard-tools/src/uapi/" "${CMAKE_CURRENT_SOURCE_DIR}/wireguard-tools/src/")
|
||||
target_include_directories(libwg.so PUBLIC "${CMAKE_CURRENT_SOURCE_DIR}/wireguard-tools/src/uapi/linux/" "${CMAKE_CURRENT_SOURCE_DIR}/wireguard-tools/src/")
|
||||
target_compile_options(libwg.so PUBLIC -O3 -std=gnu11 -D_GNU_SOURCE -include ${CMAKE_CURRENT_SOURCE_DIR}/ndk-compat/compat.h -DHAVE_VISIBILITY_HIDDEN -DRUNSTATEDIR=\"/data/data/${ANDROID_PACKAGE_NAME}/cache\")
|
||||
|
||||
add_custom_target(libwg-go.so WORKING_DIRECTORY "${CMAKE_CURRENT_SOURCE_DIR}/libwg-go" COMMENT "Building wireguard-go" VERBATIM COMMAND make
|
||||
|
||||
@@ -20,11 +20,11 @@ export GOARCH := $(NDK_GO_ARCH_MAP_$(ANDROID_ARCH_NAME))
|
||||
export GOOS := android
|
||||
export CGO_ENABLED := 1
|
||||
|
||||
GO_VERSION := 1.14.1
|
||||
GO_VERSION := 1.14.4
|
||||
GO_PLATFORM := $(shell uname -s | tr '[:upper:]' '[:lower:]')-$(NDK_GO_ARCH_MAP_$(shell uname -m))
|
||||
GO_TARBALL := go$(GO_VERSION).$(GO_PLATFORM).tar.gz
|
||||
GO_HASH_darwin-amd64 := 6632f9d53fd95632e431e8c34295349cca3f0a124e3a28b760ae5c42b32816e3
|
||||
GO_HASH_linux-amd64 := 2f49eb17ce8b48c680cdb166ffd7389702c0dec6effa090c324804a5cac8a7f8
|
||||
GO_HASH_darwin-amd64 := 3fa7ed8dc44fdd50c0bfe72676250cceca527d59950aef20af906a670cf88de2
|
||||
GO_HASH_linux-amd64 := aed845e4185a0b2a3c3d5e1d0a35491702c55889192bb9c30e67a3de6849c067
|
||||
|
||||
default: $(DESTDIR)/libwg-go.so
|
||||
|
||||
|
||||
@@ -11,10 +11,6 @@ import "C"
|
||||
|
||||
import (
|
||||
"bufio"
|
||||
"golang.org/x/sys/unix"
|
||||
"golang.zx2c4.com/wireguard/device"
|
||||
"golang.zx2c4.com/wireguard/ipc"
|
||||
"golang.zx2c4.com/wireguard/tun"
|
||||
"bytes"
|
||||
"log"
|
||||
"math"
|
||||
@@ -24,6 +20,12 @@ import (
|
||||
"runtime"
|
||||
"strings"
|
||||
"unsafe"
|
||||
|
||||
"golang.org/x/sys/unix"
|
||||
"golang.zx2c4.com/wireguard/conn"
|
||||
"golang.zx2c4.com/wireguard/device"
|
||||
"golang.zx2c4.com/wireguard/ipc"
|
||||
"golang.zx2c4.com/wireguard/tun"
|
||||
)
|
||||
|
||||
type AndroidLogger struct {
|
||||
@@ -149,7 +151,11 @@ func wgGetSocketV4(tunnelHandle int32) int32 {
|
||||
if !ok {
|
||||
return -1
|
||||
}
|
||||
fd, err := handle.device.PeekLookAtSocketFd4()
|
||||
bind, _ := handle.device.Bind().(conn.PeekLookAtSocketFd)
|
||||
if bind == nil {
|
||||
return -1
|
||||
}
|
||||
fd, err := bind.PeekLookAtSocketFd4()
|
||||
if err != nil {
|
||||
return -1
|
||||
}
|
||||
@@ -162,7 +168,11 @@ func wgGetSocketV6(tunnelHandle int32) int32 {
|
||||
if !ok {
|
||||
return -1
|
||||
}
|
||||
fd, err := handle.device.PeekLookAtSocketFd6()
|
||||
bind, _ := handle.device.Bind().(conn.PeekLookAtSocketFd)
|
||||
if bind == nil {
|
||||
return -1
|
||||
}
|
||||
fd, err := bind.PeekLookAtSocketFd4()
|
||||
if err != nil {
|
||||
return -1
|
||||
}
|
||||
|
||||
@@ -1,10 +1,10 @@
|
||||
module golang.zx2c4.com/wireguard/android
|
||||
|
||||
go 1.13
|
||||
go 1.14
|
||||
|
||||
require (
|
||||
golang.org/x/crypto v0.0.0-20200320181102-891825fb96df // indirect
|
||||
golang.org/x/net v0.0.0-20200320220750-118fecf932d8 // indirect
|
||||
golang.org/x/sys v0.0.0-20200321134203-328b4cd54aae
|
||||
golang.zx2c4.com/wireguard v0.0.20200320
|
||||
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
|
||||
)
|
||||
|
||||
@@ -1,19 +1,20 @@
|
||||
golang.org/x/crypto v0.0.0-20190308221718-c2843e01d9a2/go.mod h1:djNgcEr1/C05ACkg1iLfiJU5Ep61QUkGW8qpdssI0+w=
|
||||
golang.org/x/crypto v0.0.0-20191002192127-34f69633bfdc/go.mod h1:yigFU9vqHzYiE8UmvKecakEJjdnWj3jj499lnFckfCI=
|
||||
golang.org/x/crypto v0.0.0-20200320181102-891825fb96df h1:lDWgvUvNnaTnNBc/dwOty86cFeKoKWbwy2wQj0gIxbU=
|
||||
golang.org/x/crypto v0.0.0-20200320181102-891825fb96df/go.mod h1:LzIPMQfyMNhhGPhUkYOs5KpL4U8rLKemX1yGLhDgUto=
|
||||
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/net v0.0.0-20190404232315-eb5bcb51f2a3/go.mod h1:t9HGtf8HONx5eT2rtn7q6eTqICYqUVnKs3thJo3Qplg=
|
||||
golang.org/x/net v0.0.0-20191003171128-d98b1b443823/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s=
|
||||
golang.org/x/net v0.0.0-20200320220750-118fecf932d8 h1:1+zQlQqEEhUeStBTi653GZAnAuivZq/2hz+Iz+OP7rg=
|
||||
golang.org/x/net v0.0.0-20200320220750-118fecf932d8/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s=
|
||||
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/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-20200302150141-5c8b2ff67527/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
|
||||
golang.org/x/sys v0.0.0-20200321134203-328b4cd54aae h1:3tcmuaB7wwSZtelmiv479UjUB+vviwABz7a133ZwOKQ=
|
||||
golang.org/x/sys v0.0.0-20200321134203-328b4cd54aae/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/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/tools v0.0.0-20180917221912-90fa682c2a6e/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ=
|
||||
golang.zx2c4.com/wireguard v0.0.20200320 h1:1vE6zVeO7fix9cJX1Z9ZQ+ikPIIx7vIyU0o0tLDD88g=
|
||||
golang.zx2c4.com/wireguard v0.0.20200320/go.mod h1:lDian4Sw4poJ04SgHh35nzMVwGSYlPumkdnHcucAQoY=
|
||||
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=
|
||||
|
||||
Submodule tunnel/tools/wireguard-tools updated: e189f9942d...eb4665ecf0
+2
-3
@@ -21,8 +21,8 @@ android {
|
||||
}
|
||||
}
|
||||
compileSdkVersion 29
|
||||
dataBinding.enabled true
|
||||
viewBinding.enabled true
|
||||
buildFeatures.dataBinding = true
|
||||
buildFeatures.viewBinding = true
|
||||
defaultConfig {
|
||||
applicationId 'com.wireguard.android'
|
||||
minSdkVersion 21
|
||||
@@ -68,7 +68,6 @@ dependencies {
|
||||
implementation project(":tunnel")
|
||||
implementation "androidx.annotation:annotation:$annotationsVersion"
|
||||
implementation "androidx.appcompat:appcompat:$appcompatVersion"
|
||||
implementation "androidx.cardview:cardview:$cardviewVersion"
|
||||
implementation "androidx.constraintlayout:constraintlayout:$constraintLayoutVersion"
|
||||
implementation "androidx.coordinatorlayout:coordinatorlayout:$coordinatorLayoutVersion"
|
||||
implementation "androidx.biometric:biometric:$biometricVersion"
|
||||
|
||||
Vendored
+3
-3
@@ -2,9 +2,6 @@
|
||||
# escalates them as errors.
|
||||
-dontwarn sun.misc.Unsafe
|
||||
|
||||
# Retain some information to keep stacktraces usable
|
||||
-keepattributes SourceFile,LineNumberTable
|
||||
|
||||
# Fragment 1.2.4 allows Fragment classes to be obfuscated but
|
||||
# databinding references in XML seem to not be rewritten to
|
||||
# match, so we preserve the names as 1.2.3 did.
|
||||
@@ -12,3 +9,6 @@
|
||||
-keep public class <1> {
|
||||
public <init>();
|
||||
}
|
||||
|
||||
# Don't obfuscate
|
||||
-dontobfuscate
|
||||
|
||||
@@ -112,5 +112,8 @@
|
||||
android:name="android.service.quicksettings.ACTIVE_TILE"
|
||||
android:value="false" />
|
||||
</service>
|
||||
|
||||
<meta-data android:name="android.content.APP_RESTRICTIONS"
|
||||
android:resource="@xml/app_restrictions" />
|
||||
</application>
|
||||
</manifest>
|
||||
|
||||
@@ -9,8 +9,9 @@ import android.os.Bundle
|
||||
import android.view.Menu
|
||||
import android.view.MenuItem
|
||||
import android.view.View
|
||||
import android.widget.LinearLayout
|
||||
import androidx.appcompat.app.ActionBar
|
||||
import androidx.core.view.ViewCompat
|
||||
import androidx.core.view.WindowInsetsCompat
|
||||
import androidx.fragment.app.FragmentManager
|
||||
import androidx.fragment.app.FragmentTransaction
|
||||
import com.wireguard.android.R
|
||||
@@ -55,16 +56,15 @@ class MainActivity : BaseActivity(), FragmentManager.OnBackStackChangedListener
|
||||
super.onCreate(savedInstanceState)
|
||||
setContentView(R.layout.main_activity)
|
||||
actionBar = supportActionBar
|
||||
isTwoPaneLayout = findViewById<View>(R.id.master_detail_wrapper) is LinearLayout
|
||||
isTwoPaneLayout = findViewById<View?>(R.id.master_detail_wrapper) != null
|
||||
supportFragmentManager.addOnBackStackChangedListener(this)
|
||||
onBackStackChanged()
|
||||
// Dispatch insets on back stack change
|
||||
// This is required to ensure replaced fragments are also able to consume insets
|
||||
findViewById<View>(R.id.master_detail_wrapper).setOnApplyWindowInsetsListener { _, insets ->
|
||||
val fragmentManager = supportFragmentManager
|
||||
fragmentManager.addOnBackStackChangedListener {
|
||||
fragmentManager.fragments.forEach {
|
||||
it.requireView().dispatchApplyWindowInsets(insets)
|
||||
findViewById<View>(R.id.main_activity_container).setOnApplyWindowInsetsListener { _, insets ->
|
||||
supportFragmentManager.addOnBackStackChangedListener {
|
||||
supportFragmentManager.fragments.forEach {
|
||||
ViewCompat.dispatchApplyWindowInsets(it.requireView(), WindowInsetsCompat.toWindowInsetsCompat(insets))
|
||||
}
|
||||
}
|
||||
insets
|
||||
|
||||
@@ -17,6 +17,7 @@ import androidx.preference.PreferenceFragmentCompat
|
||||
import com.wireguard.android.Application
|
||||
import com.wireguard.android.R
|
||||
import com.wireguard.android.backend.WgQuickBackend
|
||||
import com.wireguard.android.util.AdminKnobs
|
||||
import com.wireguard.android.util.ModuleLoader
|
||||
import java.util.ArrayList
|
||||
import java.util.Arrays
|
||||
@@ -87,6 +88,10 @@ class SettingsActivity : ThemeChangeAwareActivity() {
|
||||
val remoteApps = preferenceManager.findPreference<Preference>("allow_remote_control_intents")
|
||||
remoteApps?.parent?.removePreference(remoteApps)
|
||||
}
|
||||
if (AdminKnobs.disableConfigExport) {
|
||||
val zipExporter = preferenceManager.findPreference<Preference>("zip_exporter")
|
||||
zipExporter?.parent?.removePreference(zipExporter)
|
||||
}
|
||||
val wgQuickOnlyPrefs = arrayOf(
|
||||
preferenceManager.findPreference("tools_installer"),
|
||||
preferenceManager.findPreference("restore_on_boot"),
|
||||
|
||||
+4
-2
@@ -17,8 +17,10 @@ import java.lang.ref.WeakReference
|
||||
/**
|
||||
* A generic `RecyclerView.Adapter` backed by a `ObservableKeyedArrayList`.
|
||||
*/
|
||||
class ObservableKeyedRecyclerViewAdapter<K, E : Keyed<out K>> internal constructor(context: Context, private val layoutId: Int,
|
||||
list: ObservableKeyedArrayList<K, E>?) : RecyclerView.Adapter<ObservableKeyedRecyclerViewAdapter.ViewHolder>() {
|
||||
class ObservableKeyedRecyclerViewAdapter<K, E : Keyed<out K>> internal constructor(
|
||||
context: Context, private val layoutId: Int,
|
||||
list: ObservableKeyedArrayList<K, E>?
|
||||
) : RecyclerView.Adapter<ObservableKeyedRecyclerViewAdapter.ViewHolder>() {
|
||||
private val callback = OnListChangedCallback(this)
|
||||
private val layoutInflater: LayoutInflater = LayoutInflater.from(context)
|
||||
private var list: ObservableKeyedArrayList<K, E>? = null
|
||||
|
||||
@@ -26,6 +26,7 @@ import com.wireguard.android.databinding.TunnelEditorFragmentBinding
|
||||
import com.wireguard.android.fragment.AppListDialogFragment.AppSelectionListener
|
||||
import com.wireguard.android.model.ObservableTunnel
|
||||
import com.wireguard.android.util.BiometricAuthenticator
|
||||
import com.wireguard.android.util.AdminKnobs
|
||||
import com.wireguard.android.util.ErrorMessages
|
||||
import com.wireguard.android.viewmodel.ConfigProxy
|
||||
import com.wireguard.android.widget.EdgeToEdge.setUpRoot
|
||||
@@ -252,6 +253,7 @@ class TunnelEditorFragment : BaseFragment(), AppSelectionListener {
|
||||
val edit = view as? EditText ?: return
|
||||
if (edit.inputType == InputType.TYPE_TEXT_FLAG_NO_SUGGESTIONS or InputType.TYPE_TEXT_VARIATION_VISIBLE_PASSWORD) return
|
||||
if (!haveShownKeys && edit.text.isNotEmpty()) {
|
||||
if (AdminKnobs.disableConfigExport) return
|
||||
showingAuthenticator = true
|
||||
BiometricAuthenticator.authenticate(R.string.biometric_prompt_private_key_title, this) {
|
||||
showingAuthenticator = false
|
||||
|
||||
@@ -17,6 +17,8 @@ import android.view.Menu
|
||||
import android.view.MenuItem
|
||||
import android.view.View
|
||||
import android.view.ViewGroup
|
||||
import android.view.animation.Animation
|
||||
import android.view.animation.AnimationUtils
|
||||
import androidx.appcompat.app.AppCompatActivity
|
||||
import androidx.appcompat.view.ActionMode
|
||||
import com.google.android.material.snackbar.Snackbar
|
||||
@@ -314,6 +316,11 @@ class TunnelListFragment : BaseFragment() {
|
||||
return when (item.itemId) {
|
||||
R.id.menu_action_delete -> {
|
||||
val copyCheckedItems = HashSet(checkedItems)
|
||||
binding?.createFab?.apply {
|
||||
visibility = View.VISIBLE
|
||||
scaleX = 1f
|
||||
scaleY = 1f
|
||||
}
|
||||
Application.getTunnelManager().tunnels.thenAccept { tunnels ->
|
||||
val tunnelsToDelete = ArrayList<ObservableTunnel>()
|
||||
for (position in copyCheckedItems) tunnelsToDelete.add(tunnels[position])
|
||||
@@ -343,6 +350,7 @@ class TunnelListFragment : BaseFragment() {
|
||||
if (activity != null) {
|
||||
resources = activity!!.resources
|
||||
}
|
||||
animateFab(binding?.createFab, false)
|
||||
mode.menuInflater.inflate(R.menu.tunnel_list_action_mode, menu)
|
||||
binding?.tunnelList?.adapter?.notifyDataSetChanged()
|
||||
return true
|
||||
@@ -351,6 +359,7 @@ class TunnelListFragment : BaseFragment() {
|
||||
override fun onDestroyActionMode(mode: ActionMode) {
|
||||
actionMode = null
|
||||
resources = null
|
||||
animateFab(binding?.createFab, true)
|
||||
checkedItems.clear()
|
||||
binding!!.tunnelList.adapter!!.notifyDataSetChanged()
|
||||
}
|
||||
@@ -391,6 +400,26 @@ class TunnelListFragment : BaseFragment() {
|
||||
mode.title = resources!!.getQuantityString(R.plurals.delete_title, count, count)
|
||||
}
|
||||
}
|
||||
|
||||
private fun animateFab(view: View?, show: Boolean) {
|
||||
view ?: return
|
||||
val animation = AnimationUtils.loadAnimation(
|
||||
context, if (show) R.anim.scale_up else R.anim.scale_down
|
||||
)
|
||||
animation.setAnimationListener(object : Animation.AnimationListener {
|
||||
override fun onAnimationRepeat(animation: Animation?) {
|
||||
}
|
||||
|
||||
override fun onAnimationEnd(animation: Animation?) {
|
||||
if (!show) view.visibility = View.GONE
|
||||
}
|
||||
|
||||
override fun onAnimationStart(animation: Animation?) {
|
||||
if (show) view.visibility = View.VISIBLE
|
||||
}
|
||||
})
|
||||
view.startAnimation(animation)
|
||||
}
|
||||
}
|
||||
|
||||
companion object {
|
||||
|
||||
@@ -93,14 +93,14 @@ class ObservableTunnel internal constructor(
|
||||
@get:Bindable
|
||||
var statistics: Statistics? = null
|
||||
get() {
|
||||
if (field == null || field!!.isStale)
|
||||
if (field == null || field?.isStale != false)
|
||||
manager.getTunnelStatistics(this).whenComplete(ExceptionLoggers.E)
|
||||
return field
|
||||
}
|
||||
private set
|
||||
|
||||
val statisticsAsync: CompletionStage<Statistics>
|
||||
get() = if (statistics == null || statistics!!.isStale)
|
||||
get() = if (statistics == null || statistics?.isStale != false)
|
||||
manager.getTunnelStatistics(this)
|
||||
else
|
||||
CompletableFuture.completedFuture(statistics)
|
||||
|
||||
+17
-8
@@ -18,11 +18,18 @@ import java9.util.concurrent.CompletableFuture
|
||||
import kotlin.system.exitProcess
|
||||
|
||||
class KernelModuleDisablerPreference(context: Context, attrs: AttributeSet?) : Preference(context, attrs) {
|
||||
private var state = if (Application.getBackend() is WgQuickBackend) State.ENABLED else State.DISABLED
|
||||
private var state = State.UNKNOWN
|
||||
|
||||
override fun getSummary() = context.getString(state.summaryResourceId)
|
||||
init {
|
||||
isVisible = false
|
||||
Application.getBackendAsync().thenAccept { backend ->
|
||||
setState(if (backend is WgQuickBackend) State.ENABLED else State.DISABLED)
|
||||
}
|
||||
}
|
||||
|
||||
override fun getTitle() = context.getString(state.titleResourceId)
|
||||
override fun getSummary() = if (state == State.UNKNOWN) "" else context.getString(state.summaryResourceId)
|
||||
|
||||
override fun getTitle() = if (state == State.UNKNOWN) "" else context.getString(state.titleResourceId)
|
||||
|
||||
@SuppressLint("ApplySharedPref")
|
||||
override fun onClick() {
|
||||
@@ -51,13 +58,15 @@ class KernelModuleDisablerPreference(context: Context, attrs: AttributeSet?) : P
|
||||
if (this.state == state) return
|
||||
this.state = state
|
||||
if (isEnabled != state.shouldEnableView) isEnabled = state.shouldEnableView
|
||||
if (isVisible != state.visible) isVisible = state.visible
|
||||
notifyChanged()
|
||||
}
|
||||
|
||||
private enum class State(val titleResourceId: Int, val summaryResourceId: Int, val shouldEnableView: Boolean) {
|
||||
ENABLED(R.string.module_disabler_enabled_title, R.string.module_disabler_enabled_summary, true),
|
||||
DISABLED(R.string.module_disabler_disabled_title, R.string.module_disabler_disabled_summary, true),
|
||||
ENABLING(R.string.module_disabler_disabled_title, R.string.success_application_will_restart, false),
|
||||
DISABLING(R.string.module_disabler_enabled_title, R.string.success_application_will_restart, false);
|
||||
private enum class State(val titleResourceId: Int, val summaryResourceId: Int, val shouldEnableView: Boolean, val visible: Boolean) {
|
||||
UNKNOWN(0, 0, false, false),
|
||||
ENABLED(R.string.module_disabler_enabled_title, R.string.module_disabler_enabled_summary, true, true),
|
||||
DISABLED(R.string.module_disabler_disabled_title, R.string.module_disabler_disabled_summary, true, true),
|
||||
ENABLING(R.string.module_disabler_disabled_title, R.string.success_application_will_restart, false, true),
|
||||
DISABLING(R.string.module_disabler_enabled_title, R.string.success_application_will_restart, false, true);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -16,6 +16,7 @@ import com.wireguard.android.R
|
||||
import com.wireguard.android.model.ObservableTunnel
|
||||
import com.wireguard.android.util.BiometricAuthenticator
|
||||
import com.wireguard.android.util.DownloadsFileSaver
|
||||
import com.wireguard.android.util.AdminKnobs
|
||||
import com.wireguard.android.util.ErrorMessages
|
||||
import com.wireguard.android.util.FragmentUtils
|
||||
import java9.util.concurrent.CompletableFuture
|
||||
@@ -82,6 +83,7 @@ class ZipExporterPreference(context: Context, attrs: AttributeSet?) : Preference
|
||||
override fun getTitle() = context.getString(R.string.zip_export_title)
|
||||
|
||||
override fun onClick() {
|
||||
if (AdminKnobs.disableConfigExport) return
|
||||
val prefActivity = FragmentUtils.getPrefActivity(this)
|
||||
val fragment = prefActivity.supportFragmentManager.fragments.first()
|
||||
BiometricAuthenticator.authenticate(R.string.biometric_prompt_zip_exporter_title, fragment) {
|
||||
|
||||
@@ -0,0 +1,16 @@
|
||||
/*
|
||||
* Copyright © 2020 WireGuard LLC. All Rights Reserved.
|
||||
* SPDX-License-Identifier: Apache-2.0
|
||||
*/
|
||||
|
||||
package com.wireguard.android.util
|
||||
|
||||
import android.content.RestrictionsManager
|
||||
import androidx.core.content.getSystemService
|
||||
import com.wireguard.android.Application
|
||||
|
||||
object AdminKnobs {
|
||||
private val restrictions: RestrictionsManager? = Application.get().getSystemService()
|
||||
val disableConfigExport: Boolean
|
||||
get() = restrictions?.applicationRestrictions?.getBoolean("disable_config_export", false) ?: false
|
||||
}
|
||||
@@ -12,7 +12,7 @@ import androidx.core.view.marginRight
|
||||
import androidx.core.view.marginTop
|
||||
import androidx.core.view.updateLayoutParams
|
||||
import androidx.core.view.updatePadding
|
||||
import com.google.android.material.floatingactionbutton.ExtendedFloatingActionButton
|
||||
import com.google.android.material.floatingactionbutton.FloatingActionButton
|
||||
|
||||
/**
|
||||
* A utility for edge-to-edge display. It provides several features needed to make the app
|
||||
@@ -27,7 +27,7 @@ object EdgeToEdge {
|
||||
}
|
||||
|
||||
@JvmStatic
|
||||
fun setUpScrollingContent(scrollingContent: ViewGroup, fab: ExtendedFloatingActionButton?) {
|
||||
fun setUpScrollingContent(scrollingContent: ViewGroup, fab: FloatingActionButton?) {
|
||||
val originalPaddingLeft = scrollingContent.paddingLeft
|
||||
val originalPaddingRight = scrollingContent.paddingRight
|
||||
val originalPaddingBottom = scrollingContent.paddingBottom
|
||||
@@ -50,7 +50,7 @@ object EdgeToEdge {
|
||||
}
|
||||
|
||||
@JvmStatic
|
||||
fun setUpFAB(fab: ExtendedFloatingActionButton) {
|
||||
fun setUpFAB(fab: FloatingActionButton) {
|
||||
val originalMarginLeft = fab.marginLeft
|
||||
val originalMarginRight = fab.marginRight
|
||||
val originalMarginBottom = fab.marginBottom
|
||||
|
||||
@@ -0,0 +1,12 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<set xmlns:android="http://schemas.android.com/apk/res/android" >
|
||||
<scale
|
||||
android:duration="300"
|
||||
android:fromXScale="1.0"
|
||||
android:fromYScale="1.0"
|
||||
android:interpolator="@android:anim/linear_interpolator"
|
||||
android:pivotX="50%"
|
||||
android:pivotY="50%"
|
||||
android:toXScale="0"
|
||||
android:toYScale="0" />
|
||||
</set>
|
||||
@@ -0,0 +1,12 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<set xmlns:android="http://schemas.android.com/apk/res/android" >
|
||||
<scale
|
||||
android:duration="300"
|
||||
android:fromXScale="0"
|
||||
android:fromYScale="0"
|
||||
android:interpolator="@android:anim/linear_interpolator"
|
||||
android:pivotX="50%"
|
||||
android:pivotY="50%"
|
||||
android:toXScale="1.0"
|
||||
android:toYScale="1.0" />
|
||||
</set>
|
||||
@@ -1,6 +1,7 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<androidx.coordinatorlayout.widget.CoordinatorLayout xmlns:android="http://schemas.android.com/apk/res/android"
|
||||
xmlns:tools="http://schemas.android.com/tools"
|
||||
android:id="@+id/main_activity_container"
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="match_parent"
|
||||
tools:context=".activity.MainActivity">
|
||||
|
||||
@@ -16,13 +16,12 @@
|
||||
tools:itemCount="20"
|
||||
tools:listitem="@layout/log_viewer_entry" />
|
||||
|
||||
<com.google.android.material.floatingactionbutton.ExtendedFloatingActionButton
|
||||
<com.google.android.material.floatingactionbutton.FloatingActionButton
|
||||
android:id="@+id/share_fab"
|
||||
style="@style/Widget.MaterialComponents.ExtendedFloatingActionButton.Icon"
|
||||
android:layout_width="wrap_content"
|
||||
android:layout_height="wrap_content"
|
||||
android:layout_gravity="bottom|end"
|
||||
android:layout_margin="@dimen/fab_margin"
|
||||
app:icon="@drawable/ic_action_share_white" />
|
||||
app:srcCompat="@drawable/ic_action_share_white" />
|
||||
|
||||
</androidx.coordinatorlayout.widget.CoordinatorLayout>
|
||||
|
||||
@@ -1,7 +1,7 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<androidx.coordinatorlayout.widget.CoordinatorLayout xmlns:android="http://schemas.android.com/apk/res/android"
|
||||
xmlns:tools="http://schemas.android.com/tools"
|
||||
android:id="@+id/master_detail_wrapper"
|
||||
android:id="@+id/main_activity_container"
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="match_parent"
|
||||
android:fitsSystemWindows="true"
|
||||
|
||||
@@ -236,7 +236,7 @@
|
||||
style="@style/DetailText"
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="wrap_content"
|
||||
android:contentDescription="@string/dns_servers"
|
||||
android:contentDescription="@string/applications"
|
||||
android:onClick="@{ClipboardUtils::copyTextView}"
|
||||
android:text="@{config.interface.includedApplications.isEmpty() ? @plurals/n_excluded_applications(config.interface.excludedApplications.size(), config.interface.excludedApplications.size()) : @plurals/n_included_applications(config.interface.includedApplications.size(), config.interface.includedApplications.size())}"
|
||||
android:visibility="@{config.interface.includedApplications.isEmpty() && config.interface.excludedApplications.isEmpty() ? android.view.View.GONE : android.view.View.VISIBLE}"
|
||||
|
||||
@@ -66,14 +66,13 @@
|
||||
android:textSize="20sp" />
|
||||
</LinearLayout>
|
||||
|
||||
<com.google.android.material.floatingactionbutton.ExtendedFloatingActionButton
|
||||
<com.google.android.material.floatingactionbutton.FloatingActionButton
|
||||
android:id="@+id/create_fab"
|
||||
style="@style/Widget.MaterialComponents.ExtendedFloatingActionButton.Icon"
|
||||
android:layout_width="wrap_content"
|
||||
android:layout_height="wrap_content"
|
||||
android:layout_gravity="bottom|end"
|
||||
android:layout_margin="@dimen/fab_margin"
|
||||
app:icon="@drawable/ic_action_add_white" />
|
||||
app:srcCompat="@drawable/ic_action_add_white" />
|
||||
|
||||
</androidx.coordinatorlayout.widget.CoordinatorLayout>
|
||||
</layout>
|
||||
|
||||
@@ -24,14 +24,47 @@
|
||||
<item quantity="one">%d ausgeschlossene Anwendung</item>
|
||||
<item quantity="other">%d ausgeschlossene Anwendungen</item>
|
||||
</plurals>
|
||||
<plurals name="set_included_applications">
|
||||
<item quantity="one">%d einbezogene Anwendung</item>
|
||||
<item quantity="other">%d einbezogene Anwendungen</item>
|
||||
</plurals>
|
||||
<plurals name="n_excluded_applications">
|
||||
<item quantity="one">%d ausgeschlossen</item>
|
||||
<item quantity="other">%d ausgeschlossen</item>
|
||||
</plurals>
|
||||
<plurals name="n_included_applications">
|
||||
<item quantity="one">%d einbezogen</item>
|
||||
<item quantity="other">%d einbezogen</item>
|
||||
</plurals>
|
||||
<string name="all_applications">Alle Anwendungen</string>
|
||||
<string name="exclude_from_tunnel">Ausschließen</string>
|
||||
<string name="include_in_tunnel">Nur einbeziehen</string>
|
||||
<plurals name="include_n_applications">
|
||||
<item quantity="one">%d App einbeziehen</item>
|
||||
<item quantity="other">%d App einbeziehen</item>
|
||||
</plurals>
|
||||
<plurals name="exclude_n_applications">
|
||||
<item quantity="one">%d App ausschließen</item>
|
||||
<item quantity="other">%d App ausschließen</item>
|
||||
</plurals>
|
||||
<plurals name="persistent_keepalive_seconds_unit">
|
||||
<item quantity="one">jede Sekunde</item>
|
||||
<item quantity="other">alle %d Sekunden</item>
|
||||
</plurals>
|
||||
<plurals name="persistent_keepalive_seconds_suffix">
|
||||
<item quantity="one">Sekunde</item>
|
||||
<item quantity="other">Sekunden</item>
|
||||
</plurals>
|
||||
<string name="use_all_applications">Alle Apps verwenden</string>
|
||||
<string name="add_peer">Teilnehmer hinzufügen</string>
|
||||
<string name="addresses">Adressen</string>
|
||||
<string name="applications">Anwendungen</string>
|
||||
<string name="allow_remote_control_intents_summary_off">Externe Apps dürfen keine Tunnel umschalten (empfohlen)</string>
|
||||
<string name="allow_remote_control_intents_summary_on">Externe Apps dürfen Tunnel umschalten (erweitert)</string>
|
||||
<string name="allow_remote_control_intents_title">Erlaube Steuerung über externe Apps</string>
|
||||
<string name="allowed_ips">Erlaubte IPs</string>
|
||||
<string name="app_name">WireGuard</string>
|
||||
<string name="bad_config_context">%1$ss %2$s</string>
|
||||
<string name="bad_config_context">%2$s des %1$s</string>
|
||||
<string name="bad_config_context_top_level">%s</string>
|
||||
<string name="bad_config_error">%1$s in %2$s</string>
|
||||
<string name="bad_config_explanation_pka">: Muss positiv sein und nicht größer als 65535</string>
|
||||
@@ -40,8 +73,8 @@
|
||||
<string name="bad_config_reason_invalid_key">Ungültiger Schlüssel</string>
|
||||
<string name="bad_config_reason_invalid_number">Ungültige Zahl</string>
|
||||
<string name="bad_config_reason_invalid_value">Ungültiger Wert</string>
|
||||
<string name="bad_config_reason_missing_attribute">Attribut fehlt</string>
|
||||
<string name="bad_config_reason_missing_section">Fehlende Sektion</string>
|
||||
<string name="bad_config_reason_missing_attribute">Fehlendes Attribut</string>
|
||||
<string name="bad_config_reason_missing_section">Fehlender Abschnitt</string>
|
||||
<string name="bad_config_reason_syntax_error">Syntaxfehler</string>
|
||||
<string name="bad_config_reason_unknown_attribute">Unbekanntes Attribut</string>
|
||||
<string name="bad_config_reason_unknown_section">Unbekannter Abschnitt</string>
|
||||
@@ -56,22 +89,22 @@
|
||||
<string name="config_save_error">Konfiguration für „%1$s“ kann nicht gespeichert werden: %2$s</string>
|
||||
<string name="config_save_success">Konfiguration für „%s ” erfolgreich gespeichert</string>
|
||||
<string name="create_activity_title">WireGuard-Tunnel erstellen</string>
|
||||
<string name="create_bin_dir_error">Lokales Anwendungsverzeichnis konnte nicht erstellt werden</string>
|
||||
<string name="create_downloads_file_error">Datei konnte im Download-Verzeichnis nicht erstellt werden</string>
|
||||
<string name="create_bin_dir_error">Lokales Anwendungsverzeichnis kann nicht erstellt werden</string>
|
||||
<string name="create_downloads_file_error">Datei kann im Download-Verzeichnis nicht erstellt werden</string>
|
||||
<string name="create_empty">Neu erstellen</string>
|
||||
<string name="create_from_file">Aus Datei oder Archiv importieren</string>
|
||||
<string name="create_from_qr_code">Vom QR-Code scannen</string>
|
||||
<string name="create_from_qr_code">Von QR-Code scannen</string>
|
||||
<string name="create_output_dir_error">Konnte das Ausgabeverzeichnis nicht erstellen</string>
|
||||
<string name="create_temp_dir_error">Lokales temporäres Verzeichnis konnte nicht erstellt werden</string>
|
||||
<string name="create_temp_dir_error">Lokales temporäres Verzeichnis kann nicht erstellt werden</string>
|
||||
<string name="create_tunnel">Tunnel erstellen</string>
|
||||
<string name="dark_theme_summary_off">Helles (Tag) Design in Verwendung</string>
|
||||
<string name="dark_theme_summary_on">Dunkles (Nacht) Design in Verwendung</string>
|
||||
<string name="dark_theme_summary_off">Verwende helles Design (Tag)</string>
|
||||
<string name="dark_theme_summary_on">Verwende dunkles Design (Nacht)</string>
|
||||
<string name="dark_theme_title">Dunkles Design verwenden</string>
|
||||
<string name="delete">Entfernen</string>
|
||||
<string name="dns_servers">DNS-Server</string>
|
||||
<string name="edit">Bearbeiten</string>
|
||||
<string name="endpoint">Endpunkt</string>
|
||||
<string name="error_down">Fehler beim Herunterfahren des Tunnels: %s</string>
|
||||
<string name="error_down">Fehler beim Abschalten des Tunnels: %s</string>
|
||||
<string name="error_fetching_apps">Fehler beim Abrufen der App-Liste: %s</string>
|
||||
<string name="error_root">Bitte root-Zugriff anfordern und erneut versuchen</string>
|
||||
<string name="error_up">Fehler beim Starten des Tunnels: %s</string>
|
||||
@@ -87,38 +120,38 @@
|
||||
<string name="import_error">Kann Tunnel nicht importieren: %s</string>
|
||||
<string name="import_from_qr_code">Tunnel aus QR-Code importieren</string>
|
||||
<string name="import_success">„%s” importiert</string>
|
||||
<string name="interface_title">Schnittstelle</string>
|
||||
<string name="key_contents_error">Falsche Zeichen in Schlüssel</string>
|
||||
<string name="interface_title">Interface</string>
|
||||
<string name="key_contents_error">Unzulässige Zeichen im Schlüssel</string>
|
||||
<string name="key_length_error">Falsche Schlüssellänge</string>
|
||||
<string name="key_length_explanation_base64">: WireGuard base64-Schlüssel müssen 44 Zeichen enthalten (32 Bytes)</string>
|
||||
<string name="key_length_explanation_binary">: WireGuard-Schlüssel müssen 32 Bytes groß sein</string>
|
||||
<string name="key_length_explanation_hex">: WireGuard Hex-Schlüssel müssen 64 Zeichen (32 Bytes) groß sein</string>
|
||||
<string name="listen_port">Eingangs-Port</string>
|
||||
<string name="log_export_error">Fehler beim Exportieren des Logs: %s</string>
|
||||
<string name="log_export_subject">WireGuard Android Log Datei</string>
|
||||
<string name="log_export_error">Konnte Protokoll nicht exportieren: %s</string>
|
||||
<string name="log_export_subject">WireGuard Android Protokolldatei</string>
|
||||
<string name="log_export_success">Gespeichert in „%s”</string>
|
||||
<string name="log_export_title">Logdatei exportieren</string>
|
||||
<string name="log_saver_activity_label">Log speichern</string>
|
||||
<string name="log_viewer_pref_summary">Logs können beim Debuggen helfen</string>
|
||||
<string name="log_viewer_pref_title">Protokoll der Anwendung anzeigen</string>
|
||||
<string name="log_viewer_title">Loggen</string>
|
||||
<string name="log_saver_activity_label">Protokoll speichern</string>
|
||||
<string name="log_viewer_pref_summary">Protokolle können beim Debuggen helfen</string>
|
||||
<string name="log_viewer_pref_title">Anwendungs-Protokoll anzeigen</string>
|
||||
<string name="log_viewer_title">Protokoll</string>
|
||||
<string name="logcat_error">Konnte logcat nicht ausführen: </string>
|
||||
<string name="module_disabler_disabled_summary">Das experimentelle Kernelmodul kann die Leistung verbessern</string>
|
||||
<string name="module_disabler_disabled_title">Kernelmodul-Backend aktivieren</string>
|
||||
<string name="module_disabler_enabled_summary">Das langsamere Userspace-Backend kann die Stabilität verbessern</string>
|
||||
<string name="module_disabler_enabled_title">Kernelmodul-Backend deaktivieren</string>
|
||||
<string name="module_installer_error">Es ist etwas schief gelaufen. Bitte versuchen Sie es später erneut</string>
|
||||
<string name="module_installer_error">Es ist ein Fehler aufgetreten. Bitte versuchen Sie es erneut</string>
|
||||
<string name="module_installer_initial">Das experimentelle Kernelmodul kann die Leistung verbessern</string>
|
||||
<string name="module_installer_not_found">Für Ihr Gerät sind keine Module verfügbar</string>
|
||||
<string name="module_installer_title">Kernelmodul herunterladen und installieren</string>
|
||||
<string name="module_installer_working">Herunterladen und Installieren…</string>
|
||||
<string name="module_installer_working">Lade herunter und installiere…</string>
|
||||
<string name="module_version_error">Konnte Version des Kernel-Moduls nicht ermitteln</string>
|
||||
<string name="mtu">MTU</string>
|
||||
<string name="multiple_tunnels_summary_off">Einschalten eines Tunnels wird andere ausschalten</string>
|
||||
<string name="multiple_tunnels_summary_on">Mehrere Tunnel können gleichzeitig aktiviert werden</string>
|
||||
<string name="multiple_tunnels_title">Erlaube mehrere Tunnel gleichzeitig</string>
|
||||
<string name="multiple_tunnels_summary_off">Das einschalten eines Tunnels wird andere ausschalten</string>
|
||||
<string name="multiple_tunnels_summary_on">Mehrere Tunnel können gleichzeitig aktiviert sein</string>
|
||||
<string name="multiple_tunnels_title">Erlaube mehrere gleichzeitige Tunnel</string>
|
||||
<string name="name">Name</string>
|
||||
<string name="no_config_error">Versucht einen Tunnel ohne Konfiguration zu starten</string>
|
||||
<string name="no_config_error">Es wurde versucht, einen Tunnel ohne Konfiguration zu starten</string>
|
||||
<string name="no_configs_error">Keine Konfigurationen gefunden</string>
|
||||
<string name="no_tunnels_error">Keine Tunnel vorhanden</string>
|
||||
<string name="parse_error_generic">String (Zeichenkette)</string>
|
||||
@@ -132,11 +165,12 @@
|
||||
<string name="permission_label">WireGuard-Tunnel steuern</string>
|
||||
<string name="persistent_keepalive">Dauerhafte Erhaltung</string>
|
||||
<string name="pre_shared_key">Vorab geteilter Schlüssel</string>
|
||||
<string name="pre_shared_key_enabled">aktiviert</string>
|
||||
<string name="private_key">Privater Schlüssel</string>
|
||||
<string name="public_key">Öffentlicher Schlüssel</string>
|
||||
<string name="qr_code_hint">Tipp: Mit `qrencode -t ansiutf8 < tunnel.conf` generieren.</string>
|
||||
<string name="restore_on_boot_summary_off">Wird aktivierte Tunnel beim Systemstart nicht automatisch starten</string>
|
||||
<string name="restore_on_boot_summary_on">Wird aktivierte Tunnel beim Systemstart automatisch wieder starten</string>
|
||||
<string name="restore_on_boot_summary_off">Aktivierte Tunnel beim Systemstart nicht automatisch starten</string>
|
||||
<string name="restore_on_boot_summary_on">Aktivierte Tunnel beim Systemstart automatisch wieder starten</string>
|
||||
<string name="restore_on_boot_title">Beim Neustart wiederherstellen</string>
|
||||
<string name="save">Speichern</string>
|
||||
<string name="select_all">Alle auswählen</string>
|
||||
|
||||
@@ -0,0 +1,229 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<resources>
|
||||
<plurals name="delete_error">
|
||||
<item quantity="one">Impossible de supprimer %d tunnel : %s</item>
|
||||
<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="other">Supprimé avec succès %d tunnels</item>
|
||||
</plurals>
|
||||
<plurals name="delete_title">
|
||||
<item quantity="one">%d tunnel sélectionné</item>
|
||||
<item quantity="other">%d tunnels sélectionnés</item>
|
||||
</plurals>
|
||||
<plurals name="import_partial_success">
|
||||
<item quantity="one">%1$d de %2$d tunnels importés</item>
|
||||
<item quantity="other">%1$d de %2$d tunnels importés</item>
|
||||
</plurals>
|
||||
<plurals name="import_total_success">
|
||||
<item quantity="one">%d tunnel importé</item>
|
||||
<item quantity="other">%d tunnels importés</item>
|
||||
</plurals>
|
||||
<plurals name="set_excluded_applications">
|
||||
<item quantity="one">%d application exclue</item>
|
||||
<item quantity="other">%d applications exclues</item>
|
||||
</plurals>
|
||||
<plurals name="set_included_applications">
|
||||
<item quantity="one">%d application incluse</item>
|
||||
<item quantity="other">%d applications incluses</item>
|
||||
</plurals>
|
||||
<plurals name="n_excluded_applications">
|
||||
<item quantity="one">%d exclue</item>
|
||||
<item quantity="other">%d exclues</item>
|
||||
</plurals>
|
||||
<plurals name="n_included_applications">
|
||||
<item quantity="one">%d incluse</item>
|
||||
<item quantity="other">%d incluses</item>
|
||||
</plurals>
|
||||
<string name="all_applications">Toutes les Applications</string>
|
||||
<string name="exclude_from_tunnel">Exclure</string>
|
||||
<string name="include_in_tunnel">Inclure uniquement</string>
|
||||
<plurals name="include_n_applications">
|
||||
<item quantity="one">Inclure %d application</item>
|
||||
<item quantity="other">Inclure %d applications</item>
|
||||
</plurals>
|
||||
<plurals name="exclude_n_applications">
|
||||
<item quantity="one">Exclure %d application</item>
|
||||
<item quantity="other">Exclure %d applications</item>
|
||||
</plurals>
|
||||
<plurals name="persistent_keepalive_seconds_unit">
|
||||
<item quantity="one">chaque seconde</item>
|
||||
<item quantity="other">tous les %d secondes</item>
|
||||
</plurals>
|
||||
<plurals name="persistent_keepalive_seconds_suffix">
|
||||
<item quantity="one">seconde</item>
|
||||
<item quantity="other">secondes</item>
|
||||
</plurals>
|
||||
<string name="use_all_applications">Utiliser toutes les applications</string>
|
||||
<string name="add_peer">Ajouter un pair</string>
|
||||
<string name="addresses">Adresses</string>
|
||||
<string name="applications">Applications</string>
|
||||
<string name="allow_remote_control_intents_summary_off">Les applications externes ne peuvent pas activer les tunnels (recommandé)</string>
|
||||
<string name="allow_remote_control_intents_summary_on">Les applications externes peuvent activer les tunnels (avancés)</string>
|
||||
<string name="allow_remote_control_intents_title">Autoriser les applications de contrôle à distance</string>
|
||||
<string name="allowed_ips">Adresses IP autorisées</string>
|
||||
<string name="app_name">WireGuard</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 dans %2$s</string>
|
||||
<string name="bad_config_explanation_pka">: Doit être positif et ne pas dépasser 65535</string>
|
||||
<string name="bad_config_explanation_positive_number">: Doit être positif</string>
|
||||
<string name="bad_config_explanation_udp_port">: Doit être un numéro de port UDP valide</string>
|
||||
<string name="bad_config_reason_invalid_key">Clef invalide</string>
|
||||
<string name="bad_config_reason_invalid_number">Numéro invalide</string>
|
||||
<string name="bad_config_reason_invalid_value">Valeur invalide</string>
|
||||
<string name="bad_config_reason_missing_attribute">Attribut manquant</string>
|
||||
<string name="bad_config_reason_missing_section">Section manquante</string>
|
||||
<string name="bad_config_reason_syntax_error">Erreur de syntaxe</string>
|
||||
<string name="bad_config_reason_unknown_attribute">Attribut inconnu</string>
|
||||
<string name="bad_config_reason_unknown_section">Section inconnue</string>
|
||||
<string name="bad_config_reason_value_out_of_range">Valeur hors limite</string>
|
||||
<string name="bad_extension_error">Le fichier doit être .conf ou .zip</string>
|
||||
<string name="cancel">Annuler</string>
|
||||
<string name="config_delete_error">Impossible de supprimer le fichier de configuration %s</string>
|
||||
<string name="config_exists_error">La configuration de « %s » existe déjà</string>
|
||||
<string name="config_file_exists_error">Le fichier de configuration « %s » existe déjà</string>
|
||||
<string name="config_not_found_error">Fichier de configuration «%s» introuvable</string>
|
||||
<string name="config_rename_error">Impossible de renommer le fichier de configuration «%s»</string>
|
||||
<string name="config_save_error">Impossible d’enregistrer la configuration pour «%1$s» : %2$s</string>
|
||||
<string name="config_save_success">Configuration enregistrée avec succès pour “%s”</string>
|
||||
<string name="create_activity_title">Créer un tunnel WireGuard</string>
|
||||
<string name="create_bin_dir_error">Impossible de créer le répertoire binaire local</string>
|
||||
<string name="create_downloads_file_error">Impossible de créer le fichier dans le répertoire des téléchargements</string>
|
||||
<string name="create_empty">Créer à partir de zéro</string>
|
||||
<string name="create_from_file">Importer depuis un fichier ou une archive</string>
|
||||
<string name="create_from_qr_code">Créer avec un scan de QR code</string>
|
||||
<string name="create_output_dir_error">Impossible de créer le répertoire de sortie</string>
|
||||
<string name="create_temp_dir_error">Impossible de créer le répertoire temporaire local</string>
|
||||
<string name="create_tunnel">Créer un tunnel</string>
|
||||
<string name="dark_theme_summary_off">Utilisation en cours du thème clair (jour)</string>
|
||||
<string name="dark_theme_summary_on">Utilisation en cours du thème sombre (nuit)</string>
|
||||
<string name="dark_theme_title">Utilisez le thème sombre</string>
|
||||
<string name="delete">Supprimer</string>
|
||||
<string name="dns_servers">Serveurs DNS</string>
|
||||
<string name="edit">Modifier</string>
|
||||
<string name="endpoint">Point de terminaison</string>
|
||||
<string name="error_down">Erreur lors de la désactivation du tunnel : %s</string>
|
||||
<string name="error_fetching_apps">Erreur lors de la récupération de la liste d\'applications : %s</string>
|
||||
<string name="error_root">Veuillez obtenir l\'accès root et essayez à nouveau</string>
|
||||
<string name="error_up">Erreur lors de la mise en place du tunnel : %s</string>
|
||||
<string name="exclude_private_ips">Exclure les IPs privées</string>
|
||||
<string name="generate_new_private_key">Générer une nouvelle clé privée</string>
|
||||
<string name="generic_error">Erreur inconnue « %s »</string>
|
||||
<string name="hint_automatic">(auto)</string>
|
||||
<string name="hint_generated">(généré)</string>
|
||||
<string name="hint_optional">(facultatif)</string>
|
||||
<string name="hint_optional_discouraged">(facultatif, non recommandé)</string>
|
||||
<string name="hint_random">(aléatoire)</string>
|
||||
<string name="illegal_filename_error">Nom de fichier invalide “%s”</string>
|
||||
<string name="import_error">Impossible d\'importer le tunnel : %s</string>
|
||||
<string name="import_from_qr_code">Importer un tunnel depuis un QR-code</string>
|
||||
<string name="import_success">Importé «%s »</string>
|
||||
<string name="interface_title">Interface</string>
|
||||
<string name="key_contents_error">Mauvais caractères dans la clé</string>
|
||||
<string name="key_length_error">Longueur de la clé incorrecte</string>
|
||||
<string name="key_length_explanation_base64">: Les clés base64 WireGuard doivent comporter 44 caractères (32 octets)</string>
|
||||
<string name="key_length_explanation_binary">: Les clés WireGuard doivent comporter 32 octets</string>
|
||||
<string name="key_length_explanation_hex">: Les clés hexadécimales WireGuard doivent comporter 64 caractères (32 octets)</string>
|
||||
<string name="listen_port">Port d\'écoute</string>
|
||||
<string name="log_export_error">Impossible d\'exporter le journal : %s</string>
|
||||
<string name="log_export_subject">Fichier journal d\'Android WireGuard</string>
|
||||
<string name="log_export_success">Enregistré dans « %s »</string>
|
||||
<string name="log_export_title">Exporter le fichier journal</string>
|
||||
<string name="log_saver_activity_label">Enregistrer le journal</string>
|
||||
<string name="log_viewer_pref_summary">Les journaux peuvent aider au débogage</string>
|
||||
<string name="log_viewer_pref_title">Afficher le journal de l\'application</string>
|
||||
<string name="log_viewer_title">Journal</string>
|
||||
<string name="logcat_error">Impossible d\'exécuter logcat : </string>
|
||||
<string name="module_disabler_disabled_summary">Le module expérimental du noyau peut améliorer les performances</string>
|
||||
<string name="module_disabler_disabled_title">Activer le backend du module du noyau</string>
|
||||
<string name="module_disabler_enabled_summary">Le backend plus lent de l\'espace utilisateur peut améliorer la stabilité</string>
|
||||
<string name="module_disabler_enabled_title">Désactiver le backend du module du noyau</string>
|
||||
<string name="module_installer_error">Une erreur est survenue. Veuillez réessayer</string>
|
||||
<string name="module_installer_initial">Le module expérimental du noyau peut améliorer les performances</string>
|
||||
<string name="module_installer_not_found">Aucun module n\'est disponible pour votre appareil</string>
|
||||
<string name="module_installer_title">Télécharger et installer le module du noyau</string>
|
||||
<string name="module_installer_working">Téléchargement et installation en cours…</string>
|
||||
<string name="module_version_error">Impossible de déterminer la version du module noyau</string>
|
||||
<string name="mtu">MTU</string>
|
||||
<string name="multiple_tunnels_summary_off">Activer un tunnel éteindra les autres</string>
|
||||
<string name="multiple_tunnels_summary_on">Plusieurs tunnels peuvent être activés simultanément</string>
|
||||
<string name="multiple_tunnels_title">Autoriser plusieurs tunnels simultanés</string>
|
||||
<string name="name">Nom</string>
|
||||
<string name="no_config_error">Tentative d\'établir un tunnel sans configuration</string>
|
||||
<string name="no_configs_error">Aucune configuration trouvée</string>
|
||||
<string name="no_tunnels_error">Aucun tunnel existant</string>
|
||||
<string name="parse_error_generic">chaîne de caractères</string>
|
||||
<string name="parse_error_inet_address">Adresse IP</string>
|
||||
<string name="parse_error_inet_endpoint">point de terminaison</string>
|
||||
<string name="parse_error_inet_network">Réseau IP</string>
|
||||
<string name="parse_error_integer">nombre</string>
|
||||
<string name="parse_error_reason">Impossible d\'analyser %1$s “%2$s”</string>
|
||||
<string name="peer">Pair</string>
|
||||
<string name="permission_description">contrôler les tunnels WireGuard, activer et désactiver les tunnels à volonté, potentiellement détourner le trafic Internet</string>
|
||||
<string name="permission_label">contrôler les tunnels WireGuard</string>
|
||||
<string name="persistent_keepalive">Maintien de connexion permanente</string>
|
||||
<string name="pre_shared_key">Clé pré-partagée</string>
|
||||
<string name="pre_shared_key_enabled">activée</string>
|
||||
<string name="private_key">Clé privée</string>
|
||||
<string name="public_key">Clé publique</string>
|
||||
<string name="qr_code_hint">Astuce : générez avec \"qrencode -t ansiutf8 < tunnel.conf\".</string>
|
||||
<string name="restore_on_boot_summary_off">N\'affichera pas les tunnels activés au démarrage</string>
|
||||
<string name="restore_on_boot_summary_on">Les tunnels activés seront affichés au démarrage</string>
|
||||
<string name="restore_on_boot_title">Restaurer au démarrage</string>
|
||||
<string name="save">Enregistrer</string>
|
||||
<string name="select_all">Tout sélectionner</string>
|
||||
<string name="settings">Paramètres</string>
|
||||
<string name="shell_exit_status_read_error">L\'interpréteur de commande ne peut pas lire l\'état de sortie</string>
|
||||
<string name="shell_marker_count_error">L\'interpréteur de commandes attendait 4 marqueurs, %d reçus</string>
|
||||
<string name="shell_start_error">L\'interpréteur de commande n\'a pas pu démarrer : %d</string>
|
||||
<string name="success_application_will_restart">Succès. L\'application va redémarrer maintenant…</string>
|
||||
<string name="toggle_all">Tout basculer</string>
|
||||
<string name="toggle_error">Erreur lors de l\'activation du tunnel WireGuard : %s</string>
|
||||
<string name="tools_installer_already">wg et wg-quick sont déjà installés</string>
|
||||
<string name="tools_installer_failure">Impossible d\'installer les outils en ligne de commande (pas de root?)</string>
|
||||
<string name="tools_installer_initial">Installer les outils optionnels pour le script</string>
|
||||
<string name="tools_installer_initial_magisk">Installer les outils optionnels pour le script en tant que module Magisk</string>
|
||||
<string name="tools_installer_initial_system">Installer les outils optionnels pour le script dans la partition système</string>
|
||||
<string name="tools_installer_success_magisk">wg et wg-quick installés en tant que module Magisk (redémarrage requis)</string>
|
||||
<string name="tools_installer_success_system">wg et wg-quick installés dans la partition système</string>
|
||||
<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_bytes">%d Octets</string>
|
||||
<string name="transfer_gibibytes">%.2f Go</string>
|
||||
<string name="transfer_kibibytes">%.2f Ko</string>
|
||||
<string name="transfer_mibibytes">%.2f Mo</string>
|
||||
<string name="transfer_rx_tx">rx: %1$s, tx: %2$s</string>
|
||||
<string name="transfer_tibibytes">%.2f To</string>
|
||||
<string name="tun_create_error">Impossible de créer le périphérique tun</string>
|
||||
<string name="tunnel_config_error">Impossible de configurer le tunnel (wg-quick a retourné %d)</string>
|
||||
<string name="tunnel_create_error">Impossible de créer le tunnel : %s</string>
|
||||
<string name="tunnel_create_success">Tunnel «%s » créé avec succès</string>
|
||||
<string name="tunnel_error_already_exists">Le tunnel « %s » existe déjà</string>
|
||||
<string name="tunnel_error_invalid_name">Nom invalide</string>
|
||||
<string name="tunnel_list_placeholder">Ajouter un tunnel en utilisant le bouton bleu</string>
|
||||
<string name="tunnel_name">Nom du tunnel</string>
|
||||
<string name="tunnel_on_error">Impossible d\'activer le tunnel (wgTurnOn a retourné %d)</string>
|
||||
<string name="tunnel_rename_error">Impossible de renommer le tunnel : %s</string>
|
||||
<string name="tunnel_rename_success">Tunnel renommé avec succès en «%s »</string>
|
||||
<string name="type_name_go_userspace">Nom de l\'espace utilisateur</string>
|
||||
<string name="type_name_kernel_module">Module noyau</string>
|
||||
<string name="unknown_error">Erreur inconnue</string>
|
||||
<string name="version_summary">%1$s backend v%2$s</string>
|
||||
<string name="version_summary_checking">Vérification de la version %s du backend</string>
|
||||
<string name="version_summary_unknown">Version %s inconnue</string>
|
||||
<string name="version_title">WireGuard pour Android v%s</string>
|
||||
<string name="vpn_not_authorized_error">Service VPN non autorisé par l\'utilisateur</string>
|
||||
<string name="vpn_start_error">Impossible de démarrer le service VPN Android</string>
|
||||
<string name="zip_export_error">Impossible d\'exporter les tunnels : %s</string>
|
||||
<string name="zip_export_success">Enregistré dans « %s »</string>
|
||||
<string name="zip_export_summary">L\'archive zip sera sauvegardée dans le dossier de téléchargement</string>
|
||||
<string name="zip_export_title">Exporter les tunnels vers le fichier zip</string>
|
||||
<string name="biometric_prompt_zip_exporter_title">S\'authentifier pour exporter des tunnels</string>
|
||||
<string name="biometric_prompt_private_key_title">S\'authentifier pour voir la clé privée</string>
|
||||
<string name="biometric_auth_error">Échec de l\'authentification</string>
|
||||
<string name="biometric_auth_error_reason">Échec de l\'authentification : %s</string>
|
||||
</resources>
|
||||
@@ -18,10 +18,36 @@
|
||||
<plurals name="set_excluded_applications">
|
||||
<item quantity="other">%d Aplikasi Dikecualikan</item>
|
||||
</plurals>
|
||||
<plurals name="set_included_applications">
|
||||
<item quantity="other">%d Aplikasi Dikecualikan</item>
|
||||
</plurals>
|
||||
<plurals name="n_excluded_applications">
|
||||
<item quantity="other">%d dikecualikan</item>
|
||||
</plurals>
|
||||
<plurals name="n_included_applications">
|
||||
<item quantity="other">%d termasuk</item>
|
||||
</plurals>
|
||||
<string name="all_applications">Semua aplikasi</string>
|
||||
<string name="exclude_from_tunnel">Kecualikan</string>
|
||||
<string name="include_in_tunnel">Berlaku hanya untuk</string>
|
||||
<plurals name="include_n_applications">
|
||||
<item quantity="other">Aplikasi %d yang disertakan</item>
|
||||
</plurals>
|
||||
<plurals name="exclude_n_applications">
|
||||
<item quantity="other">Aplikasi %d yang disertakan</item>
|
||||
</plurals>
|
||||
<plurals name="persistent_keepalive_seconds_unit">
|
||||
<item quantity="other">setiap 10 detik</item>
|
||||
</plurals>
|
||||
<plurals name="persistent_keepalive_seconds_suffix">
|
||||
<item quantity="other">detik</item>
|
||||
</plurals>
|
||||
<string name="use_all_applications">Gunakan semua aplikasi</string>
|
||||
<string name="add_peer">Tambahkan rekan</string>
|
||||
<string name="addresses">Alamat</string>
|
||||
<string name="allow_remote_control_intents_summary_off">Apl eksternal tidak dapat mengalihkan terowongan (disarankan)</string>
|
||||
<string name="allow_remote_control_intents_summary_on">Apl eksternal dapat mengalihkan terowongan (lanjutan)</string>
|
||||
<string name="applications">Aplikasi</string>
|
||||
<string name="allow_remote_control_intents_summary_off">Apl eksternal tidak dapat mengalihkan tunnel (disarankan)</string>
|
||||
<string name="allow_remote_control_intents_summary_on">Apl eksternal dapat mengalihkan tunnel (lanjutan)</string>
|
||||
<string name="allow_remote_control_intents_title">Izinkan apl kendali jarak jauh</string>
|
||||
<string name="allowed_ips">IP diizinkan</string>
|
||||
<string name="app_name">WireGuard</string>
|
||||
@@ -64,11 +90,11 @@
|
||||
<string name="delete">Hapus</string>
|
||||
<string name="dns_servers">Server DNS</string>
|
||||
<string name="edit">Edit</string>
|
||||
<string name="endpoint">Titik akhir</string>
|
||||
<string name="error_down">Kesalahan mengurangi tunel: %s</string>
|
||||
<string name="endpoint">Endpoint</string>
|
||||
<string name="error_down">Kesalahan pada tunel: %s</string>
|
||||
<string name="error_fetching_apps">Kesalahan mengambil daftar aplikasi: %s</string>
|
||||
<string name="error_root">Izinkan akses root dan coba lagi</string>
|
||||
<string name="error_up">Kesalahan menambahkan tunel: %s</string>
|
||||
<string name="error_up">Kesalahan pada tunel: %s</string>
|
||||
<string name="exclude_private_ips">Kecualikan IP pribadi</string>
|
||||
<string name="generate_new_private_key">Buat kunci privat baru</string>
|
||||
<string name="generic_error">Eror “%s” Tidak diketahui</string>
|
||||
@@ -126,6 +152,7 @@
|
||||
<string name="permission_label">Kontrol tunel WireGuard</string>
|
||||
<string name="persistent_keepalive">Keepalive persisten</string>
|
||||
<string name="pre_shared_key">Kunci Pra-bersama</string>
|
||||
<string name="pre_shared_key_enabled">diaktifkan</string>
|
||||
<string name="private_key">Kunci pribadi</string>
|
||||
<string name="public_key">Kunci publik</string>
|
||||
<string name="qr_code_hint">Tips: generate dengan `qrencode -t ansiutf8 < tunnel.conf`.</string>
|
||||
|
||||
@@ -24,8 +24,41 @@
|
||||
<item quantity="one">%d applicazione esclusa</item>
|
||||
<item quantity="other">%d applicazioni escluse</item>
|
||||
</plurals>
|
||||
<plurals name="set_included_applications">
|
||||
<item quantity="one">%d applicazione esclusa</item>
|
||||
<item quantity="other">%d applicazioni incluse</item>
|
||||
</plurals>
|
||||
<plurals name="n_excluded_applications">
|
||||
<item quantity="one">%d escluse</item>
|
||||
<item quantity="other">%d escluse</item>
|
||||
</plurals>
|
||||
<plurals name="n_included_applications">
|
||||
<item quantity="one">%d escluse</item>
|
||||
<item quantity="other">%d incluse</item>
|
||||
</plurals>
|
||||
<string name="all_applications">Tutte le applicazioni</string>
|
||||
<string name="exclude_from_tunnel">Escludi</string>
|
||||
<string name="include_in_tunnel">Includi solo</string>
|
||||
<plurals name="include_n_applications">
|
||||
<item quantity="one">Includi %d applicazione</item>
|
||||
<item quantity="other">Includi %d applicazioni</item>
|
||||
</plurals>
|
||||
<plurals name="exclude_n_applications">
|
||||
<item quantity="one">Escludi %d applicazione</item>
|
||||
<item quantity="other">Escludi %d applicazioni</item>
|
||||
</plurals>
|
||||
<plurals name="persistent_keepalive_seconds_unit">
|
||||
<item quantity="one">ogni secondo</item>
|
||||
<item quantity="other">ogni %d secondi</item>
|
||||
</plurals>
|
||||
<plurals name="persistent_keepalive_seconds_suffix">
|
||||
<item quantity="one">secondo</item>
|
||||
<item quantity="other">secondi</item>
|
||||
</plurals>
|
||||
<string name="use_all_applications">Utilizza tutte le applicazioni</string>
|
||||
<string name="add_peer">Aggiungi peer</string>
|
||||
<string name="addresses">Indirizzi</string>
|
||||
<string name="applications">Applicazioni</string>
|
||||
<string name="allow_remote_control_intents_summary_off">Le applicazioni esterne non possono attivare tunnel (consigliato)</string>
|
||||
<string name="allow_remote_control_intents_summary_on">Le applicazioni esterne possono attivare tunnel (avanzato)</string>
|
||||
<string name="allow_remote_control_intents_title">Consenti applicazioni di controllo remoto</string>
|
||||
@@ -132,6 +165,7 @@
|
||||
<string name="permission_label">controlla tunnel WireGuard</string>
|
||||
<string name="persistent_keepalive">Tieni sempre attivo</string>
|
||||
<string name="pre_shared_key">Chiave condivisa (PSK)</string>
|
||||
<string name="pre_shared_key_enabled">abilitata</string>
|
||||
<string name="private_key">Chiave privata</string>
|
||||
<string name="public_key">Chiave pubblica</string>
|
||||
<string name="qr_code_hint">Suggerimento: genera con `qrencode -t ansiutf8 < tunnel.conf`.</string>
|
||||
|
||||
@@ -18,8 +18,34 @@
|
||||
<plurals name="set_excluded_applications">
|
||||
<item quantity="other">除外アプリ %d 個</item>
|
||||
</plurals>
|
||||
<plurals name="set_included_applications">
|
||||
<item quantity="other">トンネリング対象アプリ %d 個</item>
|
||||
</plurals>
|
||||
<plurals name="n_excluded_applications">
|
||||
<item quantity="other">対象外アプリ %d 個</item>
|
||||
</plurals>
|
||||
<plurals name="n_included_applications">
|
||||
<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="other">%d アプリが対象</item>
|
||||
</plurals>
|
||||
<plurals name="exclude_n_applications">
|
||||
<item quantity="other">%d アプリを除外</item>
|
||||
</plurals>
|
||||
<plurals name="persistent_keepalive_seconds_unit">
|
||||
<item quantity="other">%d 秒ごと</item>
|
||||
</plurals>
|
||||
<plurals name="persistent_keepalive_seconds_suffix">
|
||||
<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>
|
||||
@@ -126,6 +152,7 @@
|
||||
<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="qr_code_hint">Tip: `qrencode -t ansiutf8 < tunnel.conf` で生成できます</string>
|
||||
@@ -139,7 +166,7 @@
|
||||
<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_all">すべての状態を切り替え</string>
|
||||
<string name="toggle_error">WireGuard トンネルの状態切り替え時にエラー: %s</string>
|
||||
<string name="tools_installer_already">wg および wg-quick はインストール済みです</string>
|
||||
<string name="tools_installer_failure">コマンドラインツールをインストールできません(root権限がない?)</string>
|
||||
|
||||
@@ -12,8 +12,8 @@
|
||||
|
||||
<!-- Theme variables -->
|
||||
<color name="list_multiselect_background">#1aeeeeee</color>
|
||||
<color name="status_bar_color">#21242424</color>
|
||||
<color name="navigation_bar_color">#aa242424</color>
|
||||
<color name="status_bar_color">@color/primary_color</color>
|
||||
<color name="navigation_bar_color">#aa212121</color>
|
||||
|
||||
<!-- Log viewer tag colors -->
|
||||
<color name="debug_tag_color">#aaaaaa</color>
|
||||
|
||||
@@ -2,31 +2,31 @@
|
||||
<resources>
|
||||
<plurals name="delete_error">
|
||||
<item quantity="one">Не удалось удалить %d туннель: %s</item>
|
||||
<item quantity="few">Не удалось удалить %d туннелей: %s</item>
|
||||
<item quantity="few">Не удалось удалить %d туннеля: %s</item>
|
||||
<item quantity="many">Не удалось удалить %d туннелей: %s</item>
|
||||
<item quantity="other">Не удалось удалить %d туннелей: %s</item>
|
||||
</plurals>
|
||||
<plurals name="delete_success">
|
||||
<item quantity="one">Успешно удален %d туннель</item>
|
||||
<item quantity="few">Успешно удалено %d туннелей</item>
|
||||
<item quantity="few">Успешно удалено %d туннеля</item>
|
||||
<item quantity="many">Успешно удалено %d туннелей</item>
|
||||
<item quantity="other">Успешно удалено %d туннелей</item>
|
||||
</plurals>
|
||||
<plurals name="delete_title">
|
||||
<item quantity="one">%d туннель выбран</item>
|
||||
<item quantity="few">%d туннелей выбрано</item>
|
||||
<item quantity="few">%d туннеля выбрано</item>
|
||||
<item quantity="many">%d туннелей выбрано</item>
|
||||
<item quantity="other">%d туннелей выбрано</item>
|
||||
</plurals>
|
||||
<plurals name="import_partial_success">
|
||||
<item quantity="one">Импортирован %1$d из %2$d туннелей</item>
|
||||
<item quantity="few">Импортировано %1$d из %2$d туннелей</item>
|
||||
<item quantity="few">Импортировано %1$d из %2$d туннеля</item>
|
||||
<item quantity="many">Импортировано %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="few">Импортировано %d туннелей</item>
|
||||
<item quantity="few">Импортировано %d туннеля</item>
|
||||
<item quantity="many">Импортировано %d туннелей</item>
|
||||
<item quantity="other">Импортировано %d туннелей</item>
|
||||
</plurals>
|
||||
@@ -36,8 +36,55 @@
|
||||
<item quantity="many">%d Исключенных приложений</item>
|
||||
<item quantity="other">%d Исключенных приложений</item>
|
||||
</plurals>
|
||||
<plurals name="set_included_applications">
|
||||
<item quantity="one">%d Включенное приложение</item>
|
||||
<item quantity="few">%d Включенных приложений</item>
|
||||
<item quantity="many">%d Включенных приложений</item>
|
||||
<item quantity="other">%d Включенных приложений</item>
|
||||
</plurals>
|
||||
<plurals name="n_excluded_applications">
|
||||
<item quantity="one">%d исключен</item>
|
||||
<item quantity="few">%d исключено</item>
|
||||
<item quantity="many">%d исключено</item>
|
||||
<item quantity="other">%d исключено</item>
|
||||
</plurals>
|
||||
<plurals name="n_included_applications">
|
||||
<item quantity="one">%d влючен</item>
|
||||
<item quantity="few">%d включено</item>
|
||||
<item quantity="many">%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="few">Включить %d приложения</item>
|
||||
<item quantity="many">Включить %d приложений</item>
|
||||
<item quantity="other">Включить %d приложений</item>
|
||||
</plurals>
|
||||
<plurals name="exclude_n_applications">
|
||||
<item quantity="one">Исключить %d приложение</item>
|
||||
<item quantity="few">Исключить %d приложения</item>
|
||||
<item quantity="many">Исключить %d приложений</item>
|
||||
<item quantity="other">Исключить %d приложений</item>
|
||||
</plurals>
|
||||
<plurals name="persistent_keepalive_seconds_unit">
|
||||
<item quantity="one">каждую %d секунду</item>
|
||||
<item quantity="few">каждые %d секунды</item>
|
||||
<item quantity="many">каждые %d секунд</item>
|
||||
<item quantity="other">каждые %d секунд</item>
|
||||
</plurals>
|
||||
<plurals name="persistent_keepalive_seconds_suffix">
|
||||
<item quantity="one">секунда</item>
|
||||
<item quantity="few">секунд</item>
|
||||
<item quantity="many">секунд</item>
|
||||
<item quantity="other">секунд</item>
|
||||
</plurals>
|
||||
<string name="use_all_applications">Использовать все приложения</string>
|
||||
<string name="add_peer">Добавить пира</string>
|
||||
<string name="addresses">IP-адреса</string>
|
||||
<string name="applications">Приложения</string>
|
||||
<string name="allow_remote_control_intents_summary_off">Сторонние приложения не могут переключать туннели (рекомендуется)</string>
|
||||
<string name="allow_remote_control_intents_summary_on">Сторонние приложения могут переключать туннели (дополнительно)</string>
|
||||
<string name="allow_remote_control_intents_title">Доступ к другим приложениям</string>
|
||||
@@ -128,7 +175,7 @@
|
||||
<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="multiple_tunnels_title">Несколько туннелей</string>
|
||||
<string name="name">Имя</string>
|
||||
<string name="no_config_error">Попытка поднять туннель без конфигурации</string>
|
||||
<string name="no_configs_error">Конфигурации не найдены</string>
|
||||
@@ -144,6 +191,7 @@
|
||||
<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="qr_code_hint">Совет: генерировать с `qrencode -t ansiutf8 < tunnel.conf`.</string>
|
||||
|
||||
@@ -1,10 +1,10 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<resources>
|
||||
<plurals name="delete_error">
|
||||
<item quantity="one">%d Tunela ni bilo mogoče izbrisati: %s</item>
|
||||
<item quantity="two">%d Tunelov ni bilo mogoče izbrisati: %s</item>
|
||||
<item quantity="few">%d Tunelov ni bilo mogoče izbrisati: %s</item>
|
||||
<item quantity="other">%d Tunelov ni bilo mogoče izbrisati: %s</item>
|
||||
<item quantity="one">%d tunela ni bilo mogoče izbrisati: %s</item>
|
||||
<item quantity="two">%d tunelov ni bilo mogoče izbrisati: %s</item>
|
||||
<item quantity="few">%d tunelov ni bilo mogoče izbrisati: %s</item>
|
||||
<item quantity="other">%d tunelov ni bilo mogoče izbrisati: %s</item>
|
||||
</plurals>
|
||||
<plurals name="delete_success">
|
||||
<item quantity="one">%d tunel uspešno izbrisan</item>
|
||||
@@ -19,16 +19,16 @@
|
||||
<item quantity="other">%d tunelov izbranih</item>
|
||||
</plurals>
|
||||
<plurals name="import_partial_success">
|
||||
<item quantity="one">%1$d od %2$d tunelov uvožen</item>
|
||||
<item quantity="two">%1$d od %2$d tunelov uvožena</item>
|
||||
<item quantity="few">%1$d od %2$d tunelov uvoženi</item>
|
||||
<item quantity="other">%1$d od %2$d tunelov uvoženih</item>
|
||||
<item quantity="one">%1$d tunel od %2$d uvožen</item>
|
||||
<item quantity="two">%1$d tunela od %2$d uvožena</item>
|
||||
<item quantity="few">%1$d tuneli od %2$d uvoženi</item>
|
||||
<item quantity="other">%1$d tunelov od %2$d uvoženih</item>
|
||||
</plurals>
|
||||
<plurals name="import_total_success">
|
||||
<item quantity="one">%d Tunel uvožen</item>
|
||||
<item quantity="two">%d Tunela uvožena </item>
|
||||
<item quantity="few">%d Tuneli uvoženi </item>
|
||||
<item quantity="other">%d Tunelov uvoženih </item>
|
||||
<item quantity="one">%d tunel uvožen</item>
|
||||
<item quantity="two">%d tunela uvožena</item>
|
||||
<item quantity="few">%d tuneli uvoženi</item>
|
||||
<item quantity="other">%d tunelov uvoženih</item>
|
||||
</plurals>
|
||||
<plurals name="set_excluded_applications">
|
||||
<item quantity="one">%d izvzeta aplikacija</item>
|
||||
@@ -36,172 +36,220 @@
|
||||
<item quantity="few">%d izvzete aplikacije</item>
|
||||
<item quantity="other">%d izvzetih aplikacij</item>
|
||||
</plurals>
|
||||
<string name="add_peer">Dodaj soležnike</string>
|
||||
<plurals name="set_included_applications">
|
||||
<item quantity="one">%d vključena aplikacija</item>
|
||||
<item quantity="two">%d vključeni aplikaciji</item>
|
||||
<item quantity="few">%d vključene aplikacije</item>
|
||||
<item quantity="other">%d vključenih aplikacij</item>
|
||||
</plurals>
|
||||
<plurals name="n_excluded_applications">
|
||||
<item quantity="one">%d izvzeta</item>
|
||||
<item quantity="two">%d izvzeti</item>
|
||||
<item quantity="few">%d izvzete</item>
|
||||
<item quantity="other">%d izvzetih</item>
|
||||
</plurals>
|
||||
<plurals name="n_included_applications">
|
||||
<item quantity="one">%d vključena</item>
|
||||
<item quantity="two">%d vključeni</item>
|
||||
<item quantity="few">%d vključene</item>
|
||||
<item quantity="other">%d vključenih</item>
|
||||
</plurals>
|
||||
<string name="all_applications">Vse aplikacije</string>
|
||||
<string name="exclude_from_tunnel">Izvzemi</string>
|
||||
<string name="include_in_tunnel">Vključi samo za</string>
|
||||
<plurals name="include_n_applications">
|
||||
<item quantity="one">Vključi za %d aplikacijo</item>
|
||||
<item quantity="two">Vključi za %d aplikaciji</item>
|
||||
<item quantity="few">Vključi za %d aplikacije</item>
|
||||
<item quantity="other">Vključi za %d aplikacij</item>
|
||||
</plurals>
|
||||
<plurals name="exclude_n_applications">
|
||||
<item quantity="one">Izvzemi %d aplikacijo</item>
|
||||
<item quantity="two">Izvzemi %d aplikaciji</item>
|
||||
<item quantity="few">Izvzemi %d aplikacije</item>
|
||||
<item quantity="other">Izvzemi %d aplikacij</item>
|
||||
</plurals>
|
||||
<plurals name="persistent_keepalive_seconds_unit">
|
||||
<item quantity="one">vsako %d sekundo</item>
|
||||
<item quantity="two">vsaki %d sekundi</item>
|
||||
<item quantity="few">vsake %d sekunde</item>
|
||||
<item quantity="other">vsakih %d sekund</item>
|
||||
</plurals>
|
||||
<plurals name="persistent_keepalive_seconds_suffix">
|
||||
<item quantity="one">sekunda</item>
|
||||
<item quantity="two">sekundi</item>
|
||||
<item quantity="few">sekunde</item>
|
||||
<item quantity="other">sekund</item>
|
||||
</plurals>
|
||||
<string name="use_all_applications">Vse aplikacije</string>
|
||||
<string name="add_peer">Dodaj vrstnike</string>
|
||||
<string name="addresses">Naslovi</string>
|
||||
<string name="allow_remote_control_intents_summary_off">Zunanjim aplikacijam ni dovoljeno preklopiti tunela (priporočeno) </string>
|
||||
<string name="allow_remote_control_intents_summary_on">Zunanje aplikacije lahko preklopijo tunel (napredno)</string>
|
||||
<string name="allow_remote_control_intents_title">Dovoljeno upravljanje preko zunanji aplikacij</string>
|
||||
<string name="allowed_ips">Dovoljeni IP naslovi</string>
|
||||
<string name="applications">Aplikacije</string>
|
||||
<string name="allow_remote_control_intents_summary_off">Zunanjim aplikacijam ni dovoljeno preklapljati tunelov (priporočeno)</string>
|
||||
<string name="allow_remote_control_intents_summary_on">Zunanje aplikacije lahko preklapljajo tunele (napredno)</string>
|
||||
<string name="allow_remote_control_intents_title">Dovoljeno upravljanje preko zunanjih aplikacij</string>
|
||||
<string name="allowed_ips">Dovoljeni naslovi IP</string>
|
||||
<string name="app_name">WireGuard</string>
|
||||
<string name="bad_config_context">%1$ss %2$s</string>
|
||||
<string name="bad_config_context">%1$s-ov %2$s</string>
|
||||
<string name="bad_config_context_top_level">%s</string>
|
||||
<string name="bad_config_error">%1$s v %2$s</string>
|
||||
<string name="bad_config_explanation_pka">: Zahtevano pozitivno število, manjše ali enako 65535</string>
|
||||
<string name="bad_config_explanation_positive_number">: Zahtevano pozitivno število</string>
|
||||
<string name="bad_config_explanation_udp_port">: Zahtevana veljavna številka UDP vrat</string>
|
||||
<string name="bad_config_explanation_pka">: Mora biti pozitivno in ne večje od 65535</string>
|
||||
<string name="bad_config_explanation_positive_number">: Mora biti pozitivno</string>
|
||||
<string name="bad_config_explanation_udp_port">: Mora biti veljavna številka vrat UDP</string>
|
||||
<string name="bad_config_reason_invalid_key">Neveljaven ključ</string>
|
||||
<string name="bad_config_reason_invalid_number">Neveljavno število</string>
|
||||
<string name="bad_config_reason_invalid_value">Neveljavna vrednost</string>
|
||||
<string name="bad_config_reason_missing_attribute">Manjka atribut</string>
|
||||
<string name="bad_config_reason_missing_section">Manjkajoča sekcija</string>
|
||||
<string name="bad_config_reason_missing_section">Manjka odsek</string>
|
||||
<string name="bad_config_reason_syntax_error">Sintaktična napaka</string>
|
||||
<string name="bad_config_reason_unknown_attribute">Neznan atribut</string>
|
||||
<string name="bad_config_reason_unknown_section">Neznani odsek</string>
|
||||
<string name="bad_config_reason_value_out_of_range">Vrednost je zunaj veljavnega območja</string>
|
||||
<string name="bad_extension_error">Končnica mora biti .conf ali .zip</string>
|
||||
<string name="bad_extension_error">Datoteka mora biti .conf ali .zip</string>
|
||||
<string name="cancel">Prekliči</string>
|
||||
<string name="config_delete_error">Konfiguracijske datoteke %s ni bilo mogoče izbrisati</string>
|
||||
<string name="config_exists_error">Konfiguracija za „%s“ že obstaja </string>
|
||||
<string name="config_exists_error">Konfiguracija za „%s“ že obstaja</string>
|
||||
<string name="config_file_exists_error">Konfiguracijska datoteka za „%s“ že obstaja</string>
|
||||
<string name="config_not_found_error">Konfiguracijske datoteke za „%s“ ni bilo mogoče najti</string>
|
||||
<string name="config_rename_error">Konfiguracijske datoteke za „%s“ ni bilo mogoče preimenovati</string>
|
||||
<string name="config_rename_error">Konfiguracijske datoteke „%s“ ni bilo mogoče preimenovati</string>
|
||||
<string name="config_save_error">Konfiguracijske datoteke za „%1$s“ ni bilo mogoče shraniti: %2$s</string>
|
||||
<string name="config_save_success">Konfiguracijska datoteka za „%s“ uspešno shranjena</string>
|
||||
<string name="create_activity_title">Ustvarite WireGuard tunel</string>
|
||||
<string name="create_bin_dir_error">Lokalnega imenika za aplikacijo ni bilo mogoče kreirati</string>
|
||||
<string name="create_downloads_file_error">Datoteke ni bilo mogoče shraniti v mapi Prenosi</string>
|
||||
<string name="create_activity_title">Ustvarite tunel WireGuard</string>
|
||||
<string name="create_bin_dir_error">Lokalnega imenika za aplikacijo ni bilo mogoče ustvariti</string>
|
||||
<string name="create_downloads_file_error">Datoteke v mapi prenosov ni bilo mogoče ustvariti</string>
|
||||
<string name="create_empty">Ustvari na novo</string>
|
||||
<string name="create_from_file">Uvoz iz arhiva ali datoteke</string>
|
||||
<string name="create_from_qr_code">Skreniraj s QR kode</string>
|
||||
<string name="create_output_dir_error">Ni bilo mogoče kreirati imenika za izvoz</string>
|
||||
<string name="create_temp_dir_error">Ni bilo mogoče kreirati začasnega lokalnega imenikaLokales</string>
|
||||
<string name="create_from_file">Uvozi iz datoteke ali arhiva</string>
|
||||
<string name="create_from_qr_code">Skreniraj kodo QR</string>
|
||||
<string name="create_output_dir_error">Izhodnega imenika ni bilo mogoče ustvariti</string>
|
||||
<string name="create_temp_dir_error">Lokalnega začasnega imenika ni bilo mogoče ustvariti</string>
|
||||
<string name="create_tunnel">Ustvari tunel</string>
|
||||
<string name="dark_theme_summary_off">V uporabi svetla (Dan) tema</string>
|
||||
<string name="dark_theme_summary_on">V uporabi temna (Noč) tema</string>
|
||||
<string name="dark_theme_title">Uporabi temnejšo temo</string>
|
||||
<string name="delete">Odstrani</string>
|
||||
<string name="dns_servers">DNS-strežnik</string>
|
||||
<string name="dark_theme_summary_off">V uporabi svetla (dnevna) tema</string>
|
||||
<string name="dark_theme_summary_on">V uporabi temna (nočna) tema</string>
|
||||
<string name="dark_theme_title">Uporabi temno temo</string>
|
||||
<string name="delete">Izbriši</string>
|
||||
<string name="dns_servers">Strežniki DNS</string>
|
||||
<string name="edit">Uredi</string>
|
||||
<string name="endpoint">Končna točka</string>
|
||||
<string name="error_down">Napaka pri zapiranju tunela: %s</string>
|
||||
<string name="error_down">Napaka pri zaključevanju tunela: %s</string>
|
||||
<string name="error_fetching_apps">Napaka pri poizvedovanju seznama aplikacij: %s</string>
|
||||
<string name="error_root">Prosim omogočite root dostop in poskusite ponovno</string>
|
||||
<string name="error_root">Prosim omogočite dostop root in poskusite ponovno</string>
|
||||
<string name="error_up">Napaka pri vzpostavitvi tunela: %s</string>
|
||||
<string name="exclude_private_ips">Izključitev privatnih IP naslovov</string>
|
||||
<string name="generate_new_private_key">Generiraj nov privatni ključ</string>
|
||||
<string name="exclude_private_ips">Izvzemi zasebne naslove IP</string>
|
||||
<string name="generate_new_private_key">Izdelaj nov zasebni ključ</string>
|
||||
<string name="generic_error">Neznana napaka „%s“</string>
|
||||
<string name="hint_automatic">(samodejno)</string>
|
||||
<string name="hint_generated">(generirano)</string>
|
||||
<string name="hint_optional">(opcijsko)</string>
|
||||
<string name="hint_generated">(izdelano)</string>
|
||||
<string name="hint_optional">(izbirno)</string>
|
||||
<string name="hint_optional_discouraged">(izbirno, ni priporočljivo)</string>
|
||||
<string name="hint_random">(naključno)</string>
|
||||
<string name="illegal_filename_error">Neveljavno ime datoteke \"%s\"</string>
|
||||
<string name="import_error">Ne morem uvoziti tunela: %s</string>
|
||||
<string name="import_from_qr_code">Uvoz tunela iz QR kode</string>
|
||||
<string name="illegal_filename_error">Neveljavno ime datoteke „%s“</string>
|
||||
<string name="import_error">Tunela ni bilo mogoče uvoziti: %s</string>
|
||||
<string name="import_from_qr_code">Uvozi tunel iz kode QR</string>
|
||||
<string name="import_success">„%s“ uvožen</string>
|
||||
<string name="interface_title">Vmesnik</string>
|
||||
<string name="key_contents_error">Napačni znaki v ključu</string>
|
||||
<string name="key_length_error">Napačna dolžina ključa</string>
|
||||
<string name="key_length_explanation_base64">: WireGuard base64-ključi morajo vsebovati 44 znakov (32 bytov)</string>
|
||||
<string name="key_length_explanation_binary">: WireGuard-ključi morajo biti veliki 32 bytov</string>
|
||||
<string name="key_length_explanation_hex">: WireGuard Hex-ključi morajo biti veliki 64 znakov (32 bytov)</string>
|
||||
<string name="listen_port">Vrata na katerih se posluša</string>
|
||||
<string name="log_export_error">Napaka pri izvozu dnevnika: %s</string>
|
||||
<string name="key_length_explanation_base64">: WireGuardovi ključi base64 morajo vsebovati 44 znakov (32 bajtov)</string>
|
||||
<string name="key_length_explanation_binary">: WireGuardovi ključi morajo biti veliki 32 bajtov</string>
|
||||
<string name="key_length_explanation_hex">: WireGuardovi ključi hex morajo biti veliki 64 znakov (32 bajtov)</string>
|
||||
<string name="listen_port">Vrata poslušanja</string>
|
||||
<string name="log_export_error">Dnevnika ni bilo mogoče izvoziti: %s</string>
|
||||
<string name="log_export_subject">Dnevniška datoteka WireGuard za Android</string>
|
||||
<string name="log_export_success">Shranjena v „%s“</string>
|
||||
<string name="log_export_title">Izvoz dnevniške datoteke</string>
|
||||
<string name="log_saver_activity_label">Shrani dnevniško datoteko</string>
|
||||
<string name="log_viewer_pref_summary">Dnevniške datoteke lahko pomagajo pri razhroščevanju</string>
|
||||
<string name="log_viewer_pref_title">Prikaži dnevniško datoteko aplikacije</string>
|
||||
<string name="log_viewer_title">Beleženje</string>
|
||||
<string name="logcat_error">Ni bilo mogoče izvesti \"logcat\": </string>
|
||||
<string name="module_disabler_disabled_summary">Eksperimentalni modul v jedru lahko izboljša delovanje</string>
|
||||
<string name="module_disabler_disabled_title">Aktiviranje modula v jedru</string>
|
||||
<string name="module_disabler_enabled_summary">Počasnejše uporabniško zaledje (Userspace-Backend) lahko izboljša stabilnost</string>
|
||||
<string name="module_disabler_enabled_title">Deaktiviranje modula v jedru</string>
|
||||
<string name="module_installer_error">Nekaj je šlo narobe, prosimo poizkusite znova</string>
|
||||
<string name="module_installer_initial">Eksperimentalni modul v jedru lahko izboljša delovanje</string>
|
||||
<string name="module_installer_not_found">Za vašo napravo modulov ni razpoložljivih modulov</string>
|
||||
<string name="module_installer_title">Prenos in namestitev modula</string>
|
||||
<string name="module_installer_working">Prenašanje in nameščanje...</string>
|
||||
<string name="module_version_error">Ni bilo mogoče pridobiti verzije modula</string>
|
||||
<string name="log_export_success">Shranjeno v „%s“</string>
|
||||
<string name="log_export_title">Izvozi dnevniško datoteko</string>
|
||||
<string name="log_saver_activity_label">Shrani dnevnik</string>
|
||||
<string name="log_viewer_pref_summary">Dnevniki lahko pomagajo pri razhroščevanju</string>
|
||||
<string name="log_viewer_pref_title">Prikaži dnevnik aplikacije</string>
|
||||
<string name="log_viewer_title">Dnevnik</string>
|
||||
<string name="logcat_error">Ukaza logcat ni bilo mogoče izvesti: </string>
|
||||
<string name="module_disabler_disabled_summary">Eksperimentalni modul jedra lahko izboljša zmogljivost</string>
|
||||
<string name="module_disabler_disabled_title">Omogoči zaledje za modul jedra</string>
|
||||
<string name="module_disabler_enabled_summary">Počasnejše uporabniško zaledje lahko izboljša stabilnost</string>
|
||||
<string name="module_disabler_enabled_title">Onemogoči zaledje za modul jedra</string>
|
||||
<string name="module_installer_error">Nekaj je šlo narobe, prosimo poskusite znova</string>
|
||||
<string name="module_installer_initial">Eksperimentalni modul jedra lahko izboljša zmogljivost</string>
|
||||
<string name="module_installer_not_found">Za vašo napravo ni razpoložljivih modulov</string>
|
||||
<string name="module_installer_title">Prenesi in namesti modul jedra</string>
|
||||
<string name="module_installer_working">Prenašanje in nameščanje …</string>
|
||||
<string name="module_version_error">Verzije modula jedra ni bilo mogoče določiti</string>
|
||||
<string name="mtu">MTU</string>
|
||||
<string name="multiple_tunnels_summary_off">Vklop enega tunela, bo druge izklopil</string>
|
||||
<string name="multiple_tunnels_summary_on">Več tunelov je lahko aktiviranih istočasno</string>
|
||||
<string name="multiple_tunnels_title">Dovoljeno več istočasnih tunelov</string>
|
||||
<string name="multiple_tunnels_summary_off">Vklop enega tunela bo izklopil druge</string>
|
||||
<string name="multiple_tunnels_summary_on">Več tunelov je lahko aktiviranih sočasno</string>
|
||||
<string name="multiple_tunnels_title">Dovoli več sočasnih tunelov</string>
|
||||
<string name="name">Ime</string>
|
||||
<string name="no_config_error">Poskus vzpostavitve tunel brez konfiguracije</string>
|
||||
<string name="no_configs_error">Ni bilo mogoče najti konfiguracijo</string>
|
||||
<string name="no_tunnels_error">Ni razporožljivih tunelov</string>
|
||||
<string name="parse_error_generic">Niz</string>
|
||||
<string name="no_config_error">Poskus vzpostavitve tunela brez konfiguracije</string>
|
||||
<string name="no_configs_error">Ni najdenih konfiguracij</string>
|
||||
<string name="no_tunnels_error">Ni tunelov</string>
|
||||
<string name="parse_error_generic">niz</string>
|
||||
<string name="parse_error_inet_address">Naslov IP</string>
|
||||
<string name="parse_error_inet_endpoint">končna točka</string>
|
||||
<string name="parse_error_inet_network">IP omrežje</string>
|
||||
<string name="parse_error_inet_network">Omrežje IP</string>
|
||||
<string name="parse_error_integer">število</string>
|
||||
<string name="parse_error_reason">Ni mogoče obdelati %1$s “%2$s”</string>
|
||||
<string name="peer">Soležnik (Peer)</string>
|
||||
<string name="permission_description">Upravljanje z Wireguard tunelom, aktivacija in deaktivacija tunela, zaradi česar bo internetni prometno mogoče napačno usmerjen</string>
|
||||
<string name="permission_label">Upravljanje z Wireguard tunelom</string>
|
||||
<string name="persistent_keepalive">Trajna povezava (Keepalive)</string>
|
||||
<string name="pre_shared_key">Vnaprej deljen ključ</string>
|
||||
<string name="private_key">Privatni ključ</string>
|
||||
<string name="parse_error_reason">Ni mogoče razčleniti %1$s „%2$s“</string>
|
||||
<string name="peer">Vrstnik</string>
|
||||
<string name="permission_description">upravljanje tunelov WireGuard, aktivacija in deaktivacija tunela, zaradi česar bo internetni promet mogoče napačno usmerjen</string>
|
||||
<string name="permission_label">upravljanje tunelov WireGuard</string>
|
||||
<string name="persistent_keepalive">Trajno ohranjanje povezave</string>
|
||||
<string name="pre_shared_key">Ključ v skupni rabi</string>
|
||||
<string name="pre_shared_key_enabled">omogočeno</string>
|
||||
<string name="private_key">Zasebni ključ</string>
|
||||
<string name="public_key">Javni ključ</string>
|
||||
<string name="qr_code_hint">Namig: Generirajte z `qrencode -t ansiutf8 < tunnel.conf`.</string>
|
||||
<string name="restore_on_boot_summary_off">Pri vklopu telefona, aktivirani tuneli ne bodo avtimatično vzpostavljeni</string>
|
||||
<string name="restore_on_boot_summary_on">Pri vklopu telefona bodo aktivirani tuneli avtimatično vzpostavljeni</string>
|
||||
<string name="restore_on_boot_title">Ponovna vzpostavitev pri ponovnem zagonu</string>
|
||||
<string name="qr_code_hint">Namig: izdelajte z `qrencode -t ansiutf8 < tunnel.conf`.</string>
|
||||
<string name="restore_on_boot_summary_off">Pri zagonu telefona omogočeni tuneli ne bodo aktivirani</string>
|
||||
<string name="restore_on_boot_summary_on">Pri zagonu telefona bodo omogočeni tuneli aktivirani</string>
|
||||
<string name="restore_on_boot_title">Ponovna vzpostavitev ob zagonu</string>
|
||||
<string name="save">Shrani</string>
|
||||
<string name="select_all">Izbor vseh</string>
|
||||
<string name="select_all">Izberi vse</string>
|
||||
<string name="settings">Nastavitve</string>
|
||||
<string name="shell_exit_status_read_error">Lupina ne more prebrati izhodnega statusa</string>
|
||||
<string name="shell_marker_count_error">Lupina je pričakovala 4 markerje, dobila pa je %d</string>
|
||||
<string name="shell_marker_count_error">Lupina je pričakovala 4 oznake, dobila pa je %d</string>
|
||||
<string name="shell_start_error">Lupina se ni mogla zagnati: %d</string>
|
||||
<string name="success_application_will_restart">Uspešno. Aplikacija se bo znova zagnala...</string>
|
||||
<string name="toggle_all">Prestavi vse</string>
|
||||
<string name="toggle_error">Napaka pri prestavljanju Wireguard tunela: %s</string>
|
||||
<string name="success_application_will_restart">Uspešno. Aplikacija se bo znova zagnala …</string>
|
||||
<string name="toggle_all">Preklopi vse</string>
|
||||
<string name="toggle_error">Napaka pri preklopu tunela WireGuard: %s</string>
|
||||
<string name="tools_installer_already">wg in wg-quick sta že nameščena</string>
|
||||
<string name="tools_installer_failure">Orodja ukazne lupina niso bila nameščena (Ni root dostopa?)</string>
|
||||
<string name="tools_installer_failure">Orodij ukazne vrstice ni bilo mogoče namestiti (ni dostopa root?)</string>
|
||||
<string name="tools_installer_initial">Namestitev izbirnih orodij za skripte</string>
|
||||
<string name="tools_installer_initial_magisk">Namestitev izbirnih orodij za skripte preko Magisk modula</string>
|
||||
<string name="tools_installer_initial_system">Namestitev izbirnih orodij za skripte na sistemski particiji</string>
|
||||
<string name="tools_installer_success_magisk">wg in wg-quick kot Magisk modul nameščen (Zahtevan ponovni zagon)</string>
|
||||
<string name="tools_installer_success_system">wg und wg-quick nameščena na sistemski particiji</string>
|
||||
<string name="tools_installer_title">Namestitev orodij za ukazno vrstico</string>
|
||||
<string name="tools_installer_initial_magisk">Namestitev izbirnih orodij za skripte kot modula Magisk</string>
|
||||
<string name="tools_installer_initial_system">Namestitev izbirnih orodij za skripte na sistemsko particijo</string>
|
||||
<string name="tools_installer_success_magisk">wg in wg-quick kot modul Magisk nameščen (zahtevan ponovni zagon)</string>
|
||||
<string name="tools_installer_success_system">wg und wg-quick nameščena na sistemsko particijo</string>
|
||||
<string name="tools_installer_title">Namesti orodja za ukazno vrstico</string>
|
||||
<string name="tools_installer_working">Nameščam wg in wg-quick</string>
|
||||
<string name="tools_unavailable_error">Zahtevana orodja niso razpoložljiva</string>
|
||||
<string name="transfer">Premik (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="tools_unavailable_error">Zahtevana orodja niso na voljo</string>
|
||||
<string name="transfer">Prenos</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">prejeto: %1$s, poslano: %2$s</string>
|
||||
<string name="transfer_tibibytes">%.2f TiB</string>
|
||||
<string name="tun_create_error">Ni bilo mogoče ustvariti tun naprave</string>
|
||||
<string name="tunnel_config_error">Tunela ni bilo mogoče konfigurirati (wg-quick je vrnil %d)</string>
|
||||
<string name="tunnel_create_error">Ne morem ustvariti tunela: %s</string>
|
||||
<string name="tunnel_create_success">Tunel „%s “ uspešno ustvarjen</string>
|
||||
<string name="tunnel_error_already_exists">Tunel „%s “ že obstaja</string>
|
||||
<string name="transfer_tibibytes">%.2f TiB</string>
|
||||
<string name="tun_create_error">Naprave tun ni bilo mogoče ustvariti</string>
|
||||
<string name="tunnel_config_error">Tunela ni bilo mogoče nastaviti (wg-quick je vrnil %d)</string>
|
||||
<string name="tunnel_create_error">Tunela ni bilo mogoče ustvariti: %s</string>
|
||||
<string name="tunnel_create_success">Tunel „%s“ uspešno ustvarjen</string>
|
||||
<string name="tunnel_error_already_exists">Tunel „%s“ že obstaja</string>
|
||||
<string name="tunnel_error_invalid_name">Neveljavno ime</string>
|
||||
<string name="tunnel_list_placeholder">Dodaj tunel s klikom na modri gumb</string>
|
||||
<string name="tunnel_name">Ime tunela</string>
|
||||
<string name="tunnel_on_error">Tunela ni bilo mogoče vključiti (wgTurnOn je vrnil %d)</string>
|
||||
<string name="tunnel_rename_error">Ne morem preimenovati tunela: %s</string>
|
||||
<string name="tunnel_rename_success">Tunnel uspešno preimenovan v „%s “</string>
|
||||
<string name="type_name_go_userspace">Go userspace</string>
|
||||
<string name="type_name_kernel_module">Jedrni modul</string>
|
||||
<string name="unknown_error">Neznanna napaka</string>
|
||||
<string name="version_summary">%1$s različica aplikacij v%2$s</string>
|
||||
<string name="version_summary_checking">Preverjam %s različico aplikacije</string>
|
||||
<string name="version_summary_unknown">Neznana %s različica</string>
|
||||
<string name="tunnel_rename_error">Tunela ni bilo mogoče preimenovati: %s</string>
|
||||
<string name="tunnel_rename_success">Tunel uspešno preimenovan v „%s“</string>
|
||||
<string name="type_name_go_userspace">Uporabniški prostor Go</string>
|
||||
<string name="type_name_kernel_module">Modul jedra</string>
|
||||
<string name="unknown_error">Neznana napaka</string>
|
||||
<string name="version_summary">Zaledje %1$s v%2$s</string>
|
||||
<string name="version_summary_checking">Preverjam verzijo zaledja %s</string>
|
||||
<string name="version_summary_unknown">Neznana verzija %s</string>
|
||||
<string name="version_title">WireGuard za Android v%s</string>
|
||||
<string name="vpn_not_authorized_error">VPN-storitev ni bila odobrena s strani uporabnika</string>
|
||||
<string name="vpn_start_error">Android VPN-storitve ni bilo mogoče zagnati</string>
|
||||
<string name="zip_export_error">Ne morem izvoziti tunela: %s</string>
|
||||
<string name="zip_export_success">Shranjeno pod “%s”</string>
|
||||
<string name="zip_export_summary">Zip datoteka je bila shranjena v mapi Prenosi</string>
|
||||
<string name="zip_export_title">Izvoz tunela kot Zip datoteka</string>
|
||||
<string name="vpn_not_authorized_error">Uporabnik ni odobril storitve VPN</string>
|
||||
<string name="vpn_start_error">Storitve Android VPN ni bilo mogoče zagnati</string>
|
||||
<string name="zip_export_error">Tunelov ni bilo mogoče izvoziti: %s</string>
|
||||
<string name="zip_export_success">Shranjeno v „%s“</string>
|
||||
<string name="zip_export_summary">Datoteka zip je bila shranjena v mapo Prenosi</string>
|
||||
<string name="zip_export_title">Izvozi tunele v datoteko zip</string>
|
||||
<string name="biometric_prompt_zip_exporter_title">Za izvoz tunelov se prijavite</string>
|
||||
<string name="biometric_prompt_private_key_title">Za privatni ključ se prijavite</string>
|
||||
<string name="biometric_auth_error">Napaka pri avtentikaciji</string>
|
||||
<string name="biometric_auth_error_reason">Napaka pri avtentikaciji: %s</string>
|
||||
<string name="biometric_prompt_private_key_title">Za ogled zasebnega ključa se prijavite</string>
|
||||
<string name="biometric_auth_error">Napaka pri overovljanju</string>
|
||||
<string name="biometric_auth_error_reason">Napaka pri overovljanju: %s</string>
|
||||
</resources>
|
||||
|
||||
@@ -20,7 +20,6 @@
|
||||
<item name="android:windowBackground">@color/primary_color</item>
|
||||
<item name="alertDialogTheme">@style/AppTheme.Dialog</item>
|
||||
<item name="materialAlertDialogTheme">@style/AppTheme.Dialog</item>
|
||||
<item name="actionBarPopupTheme">@style/ThemeOverlay.MaterialComponents.ActionBar</item>
|
||||
<item name="textInputStyle">@style/TextInputLayoutBase</item>
|
||||
<item name="materialCardViewStyle">@style/AppTheme.MaterialCardView</item>
|
||||
</style>
|
||||
|
||||
@@ -23,7 +23,6 @@
|
||||
<item name="android:windowBackground">@color/primary_color</item>
|
||||
<item name="alertDialogTheme">@style/AppTheme.Dialog</item>
|
||||
<item name="materialAlertDialogTheme">@style/AppTheme.Dialog</item>
|
||||
<item name="actionBarPopupTheme">@style/ThemeOverlay.MaterialComponents.ActionBar</item>
|
||||
<item name="textInputStyle">@style/TextInputLayoutBase</item>
|
||||
<item name="materialCardViewStyle">@style/AppTheme.MaterialCardView</item>
|
||||
</style>
|
||||
|
||||
@@ -16,10 +16,36 @@
|
||||
<item quantity="other">导入了 %d 项</item>
|
||||
</plurals>
|
||||
<plurals name="set_excluded_applications">
|
||||
<item quantity="other">%d 个排除应用</item>
|
||||
<item quantity="other">对 %d 个应用不生效</item>
|
||||
</plurals>
|
||||
<plurals name="set_included_applications">
|
||||
<item quantity="other">对 %d 个应用生效</item>
|
||||
</plurals>
|
||||
<plurals name="n_excluded_applications">
|
||||
<item quantity="other">对 %d 个应用不生效</item>
|
||||
</plurals>
|
||||
<plurals name="n_included_applications">
|
||||
<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="other">设定 %d 个应用</item>
|
||||
</plurals>
|
||||
<plurals name="exclude_n_applications">
|
||||
<item quantity="other">设定 %d 个应用</item>
|
||||
</plurals>
|
||||
<plurals name="persistent_keepalive_seconds_unit">
|
||||
<item quantity="other">每隔 %d 秒</item>
|
||||
</plurals>
|
||||
<plurals name="persistent_keepalive_seconds_suffix">
|
||||
<item quantity="other">秒</item>
|
||||
</plurals>
|
||||
<string name="use_all_applications">不设定过滤</string>
|
||||
<string name="add_peer">添加节点</string>
|
||||
<string name="addresses">局域网 IP 地址</string>
|
||||
<string name="applications">应用过滤</string>
|
||||
<string name="allow_remote_control_intents_summary_off">外部应用当前不能控制隧道(不建议勾选)</string>
|
||||
<string name="allow_remote_control_intents_summary_on">外部应用当前能够控制隧道(面向高级用户)</string>
|
||||
<string name="allow_remote_control_intents_title">授权外部控制</string>
|
||||
@@ -126,6 +152,7 @@
|
||||
<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="qr_code_hint">提示:使用命令 `qrencode -t ansiutf8 < tunnel.conf` 生成二维码</string>
|
||||
@@ -182,7 +209,7 @@
|
||||
<string name="zip_export_success">已保存至 “%s”</string>
|
||||
<string name="zip_export_summary">zip 压缩包将保存至下载文件夹</string>
|
||||
<string name="zip_export_title">导出隧道配置</string>
|
||||
<string name="biometric_prompt_zip_exporter_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>
|
||||
|
||||
@@ -101,6 +101,8 @@
|
||||
<string name="dark_theme_summary_on">Currently using dark (night) theme</string>
|
||||
<string name="dark_theme_title">Use dark theme</string>
|
||||
<string name="delete">Delete</string>
|
||||
<string name="disable_config_export_title">Disable config exporting</string>
|
||||
<string name="disable_config_export_description">Disabling config exporting makes private keys less accessible</string>
|
||||
<string name="dns_servers">DNS servers</string>
|
||||
<string name="edit">Edit</string>
|
||||
<string name="endpoint">Endpoint</string>
|
||||
|
||||
@@ -19,7 +19,6 @@
|
||||
<item name="android:windowBackground">@color/primary_color</item>
|
||||
<item name="alertDialogTheme">@style/AppTheme.Dialog</item>
|
||||
<item name="materialAlertDialogTheme">@style/AppTheme.Dialog</item>
|
||||
<item name="actionBarPopupTheme">@style/ThemeOverlay.MaterialComponents.ActionBar</item>
|
||||
<item name="textInputStyle">@style/TextInputLayoutBase</item>
|
||||
<item name="materialCardViewStyle">@style/AppTheme.MaterialCardView</item>
|
||||
</style>
|
||||
|
||||
@@ -0,0 +1,13 @@
|
||||
<!--
|
||||
~ Copyright © 2020 WireGuard LLC. All Rights Reserved.
|
||||
~ SPDX-License-Identifier: Apache-2.0
|
||||
-->
|
||||
|
||||
<restrictions xmlns:android="http://schemas.android.com/apk/res/android">
|
||||
<restriction
|
||||
android:defaultValue="false"
|
||||
android:description="@string/disable_config_export_description"
|
||||
android:key="disable_config_export"
|
||||
android:restrictionType="bool"
|
||||
android:title="@string/disable_config_export_title" />
|
||||
</restrictions>
|
||||
+2
-2
@@ -1,6 +1,6 @@
|
||||
buildscript {
|
||||
ext {
|
||||
wireguardVersionCode = 473
|
||||
wireguardVersionName = '1.0.20200406'
|
||||
wireguardVersionCode = 475
|
||||
wireguardVersionName = '1.0.20200724'
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user